#!/usr/bin/env node

/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// identity function for calling harmony imports with the correct context
/******/ 	__webpack_require__.i = function(value) { return value; };
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 1153);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {

module.exports = require("path");

/***/ }),
/* 1 */
/***/ (function(module, exports) {

module.exports = require("fs");

/***/ }),
/* 2 */
/***/ (function(module, exports) {

module.exports = require("util");

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1)
var polyfills = __webpack_require__(861)
var legacy = __webpack_require__(860)
var queue = []

var util = __webpack_require__(2)

function noop () {}

var debug = noop
if (util.debuglog)
  debug = util.debuglog('gfs4')
else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
  debug = function() {
    var m = util.format.apply(util, arguments)
    m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
    console.error(m)
  }

if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
  process.on('exit', function() {
    debug(queue)
    __webpack_require__(11).equal(queue.length, 0)
  })
}

module.exports = patch(__webpack_require__(358))
if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH) {
  module.exports = patch(fs)
}

// Always patch fs.close/closeSync, because we want to
// retry() whenever a close happens *anywhere* in the program.
// This is essential when multiple graceful-fs instances are
// in play at the same time.
module.exports.close =
fs.close = (function (fs$close) { return function (fd, cb) {
  return fs$close.call(fs, fd, function (err) {
    if (!err)
      retry()

    if (typeof cb === 'function')
      cb.apply(this, arguments)
  })
}})(fs.close)

module.exports.closeSync =
fs.closeSync = (function (fs$closeSync) { return function (fd) {
  // Note that graceful-fs also retries when fs.closeSync() fails.
  // Looks like a bug to me, although it's probably a harmless one.
  var rval = fs$closeSync.apply(fs, arguments)
  retry()
  return rval
}})(fs.closeSync)

function patch (fs) {
  // Everything that references the open() function needs to be in here
  polyfills(fs)
  fs.gracefulify = patch
  fs.FileReadStream = ReadStream;  // Legacy name.
  fs.FileWriteStream = WriteStream;  // Legacy name.
  fs.createReadStream = createReadStream
  fs.createWriteStream = createWriteStream
  var fs$readFile = fs.readFile
  fs.readFile = readFile
  function readFile (path, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$readFile(path, options, cb)

    function go$readFile (path, options, cb) {
      return fs$readFile(path, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$readFile, [path, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$writeFile = fs.writeFile
  fs.writeFile = writeFile
  function writeFile (path, data, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$writeFile(path, data, options, cb)

    function go$writeFile (path, data, options, cb) {
      return fs$writeFile(path, data, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$writeFile, [path, data, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$appendFile = fs.appendFile
  if (fs$appendFile)
    fs.appendFile = appendFile
  function appendFile (path, data, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$appendFile(path, data, options, cb)

    function go$appendFile (path, data, options, cb) {
      return fs$appendFile(path, data, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$appendFile, [path, data, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$readdir = fs.readdir
  fs.readdir = readdir
  function readdir (path, options, cb) {
    var args = [path]
    if (typeof options !== 'function') {
      args.push(options)
    } else {
      cb = options
    }
    args.push(go$readdir$cb)

    return go$readdir(args)

    function go$readdir$cb (err, files) {
      if (files && files.sort)
        files.sort()

      if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
        enqueue([go$readdir, [args]])
      else {
        if (typeof cb === 'function')
          cb.apply(this, arguments)
        retry()
      }
    }
  }

  function go$readdir (args) {
    return fs$readdir.apply(fs, args)
  }

  if (process.version.substr(0, 4) === 'v0.8') {
    var legStreams = legacy(fs)
    ReadStream = legStreams.ReadStream
    WriteStream = legStreams.WriteStream
  }

  var fs$ReadStream = fs.ReadStream
  ReadStream.prototype = Object.create(fs$ReadStream.prototype)
  ReadStream.prototype.open = ReadStream$open

  var fs$WriteStream = fs.WriteStream
  WriteStream.prototype = Object.create(fs$WriteStream.prototype)
  WriteStream.prototype.open = WriteStream$open

  fs.ReadStream = ReadStream
  fs.WriteStream = WriteStream

  function ReadStream (path, options) {
    if (this instanceof ReadStream)
      return fs$ReadStream.apply(this, arguments), this
    else
      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
  }

  function ReadStream$open () {
    var that = this
    open(that.path, that.flags, that.mode, function (err, fd) {
      if (err) {
        if (that.autoClose)
          that.destroy()

        that.emit('error', err)
      } else {
        that.fd = fd
        that.emit('open', fd)
        that.read()
      }
    })
  }

  function WriteStream (path, options) {
    if (this instanceof WriteStream)
      return fs$WriteStream.apply(this, arguments), this
    else
      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
  }

  function WriteStream$open () {
    var that = this
    open(that.path, that.flags, that.mode, function (err, fd) {
      if (err) {
        that.destroy()
        that.emit('error', err)
      } else {
        that.fd = fd
        that.emit('open', fd)
      }
    })
  }

  function createReadStream (path, options) {
    return new ReadStream(path, options)
  }

  function createWriteStream (path, options) {
    return new WriteStream(path, options)
  }

  var fs$open = fs.open
  fs.open = open
  function open (path, flags, mode, cb) {
    if (typeof mode === 'function')
      cb = mode, mode = null

    return go$open(path, flags, mode, cb)

    function go$open (path, flags, mode, cb) {
      return fs$open(path, flags, mode, function (err, fd) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$open, [path, flags, mode, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  return fs
}

function enqueue (elem) {
  debug('ENQUEUE', elem[0].name, elem[1])
  queue.push(elem)
}

function retry () {
  var elem = queue.shift()
  if (elem) {
    debug('RETRY', elem[0].name, elem[1])
    elem[0].apply(null, elem[1])
  }
}


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory();
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define([], factory);
	}
	else {
		// Global (browser)
		root.CryptoJS = factory();
	}
}(this, function () {

	/**
	 * CryptoJS core components.
	 */
	var CryptoJS = CryptoJS || (function (Math, undefined) {
	    /*
	     * Local polyfil of Object.create
	     */
	    var create = Object.create || (function () {
	        function F() {};

	        return function (obj) {
	            var subtype;

	            F.prototype = obj;

	            subtype = new F();

	            F.prototype = null;

	            return subtype;
	        };
	    }())

	    /**
	     * CryptoJS namespace.
	     */
	    var C = {};

	    /**
	     * Library namespace.
	     */
	    var C_lib = C.lib = {};

	    /**
	     * Base object for prototypal inheritance.
	     */
	    var Base = C_lib.Base = (function () {


	        return {
	            /**
	             * Creates a new object that inherits from this object.
	             *
	             * @param {Object} overrides Properties to copy into the new object.
	             *
	             * @return {Object} The new object.
	             *
	             * @static
	             *
	             * @example
	             *
	             *     var MyType = CryptoJS.lib.Base.extend({
	             *         field: 'value',
	             *
	             *         method: function () {
	             *         }
	             *     });
	             */
	            extend: function (overrides) {
	                // Spawn
	                var subtype = create(this);

	                // Augment
	                if (overrides) {
	                    subtype.mixIn(overrides);
	                }

	                // Create default initializer
	                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
	                    subtype.init = function () {
	                        subtype.$super.init.apply(this, arguments);
	                    };
	                }

	                // Initializer's prototype is the subtype object
	                subtype.init.prototype = subtype;

	                // Reference supertype
	                subtype.$super = this;

	                return subtype;
	            },

	            /**
	             * Extends this object and runs the init method.
	             * Arguments to create() will be passed to init().
	             *
	             * @return {Object} The new object.
	             *
	             * @static
	             *
	             * @example
	             *
	             *     var instance = MyType.create();
	             */
	            create: function () {
	                var instance = this.extend();
	                instance.init.apply(instance, arguments);

	                return instance;
	            },

	            /**
	             * Initializes a newly created object.
	             * Override this method to add some logic when your objects are created.
	             *
	             * @example
	             *
	             *     var MyType = CryptoJS.lib.Base.extend({
	             *         init: function () {
	             *             // ...
	             *         }
	             *     });
	             */
	            init: function () {
	            },

	            /**
	             * Copies properties into this object.
	             *
	             * @param {Object} properties The properties to mix in.
	             *
	             * @example
	             *
	             *     MyType.mixIn({
	             *         field: 'value'
	             *     });
	             */
	            mixIn: function (properties) {
	                for (var propertyName in properties) {
	                    if (properties.hasOwnProperty(propertyName)) {
	                        this[propertyName] = properties[propertyName];
	                    }
	                }

	                // IE won't copy toString using the loop above
	                if (properties.hasOwnProperty('toString')) {
	                    this.toString = properties.toString;
	                }
	            },

	            /**
	             * Creates a copy of this object.
	             *
	             * @return {Object} The clone.
	             *
	             * @example
	             *
	             *     var clone = instance.clone();
	             */
	            clone: function () {
	                return this.init.prototype.extend(this);
	            }
	        };
	    }());

	    /**
	     * An array of 32-bit words.
	     *
	     * @property {Array} words The array of 32-bit words.
	     * @property {number} sigBytes The number of significant bytes in this word array.
	     */
	    var WordArray = C_lib.WordArray = Base.extend({
	        /**
	         * Initializes a newly created word array.
	         *
	         * @param {Array} words (Optional) An array of 32-bit words.
	         * @param {number} sigBytes (Optional) The number of significant bytes in the words.
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.lib.WordArray.create();
	         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
	         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
	         */
	        init: function (words, sigBytes) {
	            words = this.words = words || [];

	            if (sigBytes != undefined) {
	                this.sigBytes = sigBytes;
	            } else {
	                this.sigBytes = words.length * 4;
	            }
	        },

	        /**
	         * Converts this word array to a string.
	         *
	         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
	         *
	         * @return {string} The stringified word array.
	         *
	         * @example
	         *
	         *     var string = wordArray + '';
	         *     var string = wordArray.toString();
	         *     var string = wordArray.toString(CryptoJS.enc.Utf8);
	         */
	        toString: function (encoder) {
	            return (encoder || Hex).stringify(this);
	        },

	        /**
	         * Concatenates a word array to this word array.
	         *
	         * @param {WordArray} wordArray The word array to append.
	         *
	         * @return {WordArray} This word array.
	         *
	         * @example
	         *
	         *     wordArray1.concat(wordArray2);
	         */
	        concat: function (wordArray) {
	            // Shortcuts
	            var thisWords = this.words;
	            var thatWords = wordArray.words;
	            var thisSigBytes = this.sigBytes;
	            var thatSigBytes = wordArray.sigBytes;

	            // Clamp excess bits
	            this.clamp();

	            // Concat
	            if (thisSigBytes % 4) {
	                // Copy one byte at a time
	                for (var i = 0; i < thatSigBytes; i++) {
	                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
	                }
	            } else {
	                // Copy one word at a time
	                for (var i = 0; i < thatSigBytes; i += 4) {
	                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];
	                }
	            }
	            this.sigBytes += thatSigBytes;

	            // Chainable
	            return this;
	        },

	        /**
	         * Removes insignificant bits.
	         *
	         * @example
	         *
	         *     wordArray.clamp();
	         */
	        clamp: function () {
	            // Shortcuts
	            var words = this.words;
	            var sigBytes = this.sigBytes;

	            // Clamp
	            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
	            words.length = Math.ceil(sigBytes / 4);
	        },

	        /**
	         * Creates a copy of this word array.
	         *
	         * @return {WordArray} The clone.
	         *
	         * @example
	         *
	         *     var clone = wordArray.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);
	            clone.words = this.words.slice(0);

	            return clone;
	        },

	        /**
	         * Creates a word array filled with random bytes.
	         *
	         * @param {number} nBytes The number of random bytes to generate.
	         *
	         * @return {WordArray} The random word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.lib.WordArray.random(16);
	         */
	        random: function (nBytes) {
	            var words = [];

	            var r = (function (m_w) {
	                var m_w = m_w;
	                var m_z = 0x3ade68b1;
	                var mask = 0xffffffff;

	                return function () {
	                    m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;
	                    m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;
	                    var result = ((m_z << 0x10) + m_w) & mask;
	                    result /= 0x100000000;
	                    result += 0.5;
	                    return result * (Math.random() > .5 ? 1 : -1);
	                }
	            });

	            for (var i = 0, rcache; i < nBytes; i += 4) {
	                var _r = r((rcache || Math.random()) * 0x100000000);

	                rcache = _r() * 0x3ade67b7;
	                words.push((_r() * 0x100000000) | 0);
	            }

	            return new WordArray.init(words, nBytes);
	        }
	    });

	    /**
	     * Encoder namespace.
	     */
	    var C_enc = C.enc = {};

	    /**
	     * Hex encoding strategy.
	     */
	    var Hex = C_enc.Hex = {
	        /**
	         * Converts a word array to a hex string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The hex string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var hexChars = [];
	            for (var i = 0; i < sigBytes; i++) {
	                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                hexChars.push((bite >>> 4).toString(16));
	                hexChars.push((bite & 0x0f).toString(16));
	            }

	            return hexChars.join('');
	        },

	        /**
	         * Converts a hex string to a word array.
	         *
	         * @param {string} hexStr The hex string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);
	         */
	        parse: function (hexStr) {
	            // Shortcut
	            var hexStrLength = hexStr.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < hexStrLength; i += 2) {
	                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
	            }

	            return new WordArray.init(words, hexStrLength / 2);
	        }
	    };

	    /**
	     * Latin1 encoding strategy.
	     */
	    var Latin1 = C_enc.Latin1 = {
	        /**
	         * Converts a word array to a Latin1 string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The Latin1 string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var latin1Chars = [];
	            for (var i = 0; i < sigBytes; i++) {
	                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                latin1Chars.push(String.fromCharCode(bite));
	            }

	            return latin1Chars.join('');
	        },

	        /**
	         * Converts a Latin1 string to a word array.
	         *
	         * @param {string} latin1Str The Latin1 string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
	         */
	        parse: function (latin1Str) {
	            // Shortcut
	            var latin1StrLength = latin1Str.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < latin1StrLength; i++) {
	                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
	            }

	            return new WordArray.init(words, latin1StrLength);
	        }
	    };

	    /**
	     * UTF-8 encoding strategy.
	     */
	    var Utf8 = C_enc.Utf8 = {
	        /**
	         * Converts a word array to a UTF-8 string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The UTF-8 string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            try {
	                return decodeURIComponent(escape(Latin1.stringify(wordArray)));
	            } catch (e) {
	                throw new Error('Malformed UTF-8 data');
	            }
	        },

	        /**
	         * Converts a UTF-8 string to a word array.
	         *
	         * @param {string} utf8Str The UTF-8 string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
	         */
	        parse: function (utf8Str) {
	            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
	        }
	    };

	    /**
	     * Abstract buffered block algorithm template.
	     *
	     * The property blockSize must be implemented in a concrete subtype.
	     *
	     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
	     */
	    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
	        /**
	         * Resets this block algorithm's data buffer to its initial state.
	         *
	         * @example
	         *
	         *     bufferedBlockAlgorithm.reset();
	         */
	        reset: function () {
	            // Initial values
	            this._data = new WordArray.init();
	            this._nDataBytes = 0;
	        },

	        /**
	         * Adds new data to this block algorithm's buffer.
	         *
	         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
	         *
	         * @example
	         *
	         *     bufferedBlockAlgorithm._append('data');
	         *     bufferedBlockAlgorithm._append(wordArray);
	         */
	        _append: function (data) {
	            // Convert string to WordArray, else assume WordArray already
	            if (typeof data == 'string') {
	                data = Utf8.parse(data);
	            }

	            // Append
	            this._data.concat(data);
	            this._nDataBytes += data.sigBytes;
	        },

	        /**
	         * Processes available data blocks.
	         *
	         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
	         *
	         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
	         *
	         * @return {WordArray} The processed data.
	         *
	         * @example
	         *
	         *     var processedData = bufferedBlockAlgorithm._process();
	         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');
	         */
	        _process: function (doFlush) {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;
	            var dataSigBytes = data.sigBytes;
	            var blockSize = this.blockSize;
	            var blockSizeBytes = blockSize * 4;

	            // Count blocks ready
	            var nBlocksReady = dataSigBytes / blockSizeBytes;
	            if (doFlush) {
	                // Round up to include partial blocks
	                nBlocksReady = Math.ceil(nBlocksReady);
	            } else {
	                // Round down to include only full blocks,
	                // less the number of blocks that must remain in the buffer
	                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
	            }

	            // Count words ready
	            var nWordsReady = nBlocksReady * blockSize;

	            // Count bytes ready
	            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);

	            // Process blocks
	            if (nWordsReady) {
	                for (var offset = 0; offset < nWordsReady; offset += blockSize) {
	                    // Perform concrete-algorithm logic
	                    this._doProcessBlock(dataWords, offset);
	                }

	                // Remove processed words
	                var processedWords = dataWords.splice(0, nWordsReady);
	                data.sigBytes -= nBytesReady;
	            }

	            // Return processed words
	            return new WordArray.init(processedWords, nBytesReady);
	        },

	        /**
	         * Creates a copy of this object.
	         *
	         * @return {Object} The clone.
	         *
	         * @example
	         *
	         *     var clone = bufferedBlockAlgorithm.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);
	            clone._data = this._data.clone();

	            return clone;
	        },

	        _minBufferSize: 0
	    });

	    /**
	     * Abstract hasher template.
	     *
	     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
	     */
	    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
	        /**
	         * Configuration options.
	         */
	        cfg: Base.extend(),

	        /**
	         * Initializes a newly created hasher.
	         *
	         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
	         *
	         * @example
	         *
	         *     var hasher = CryptoJS.algo.SHA256.create();
	         */
	        init: function (cfg) {
	            // Apply config defaults
	            this.cfg = this.cfg.extend(cfg);

	            // Set initial values
	            this.reset();
	        },

	        /**
	         * Resets this hasher to its initial state.
	         *
	         * @example
	         *
	         *     hasher.reset();
	         */
	        reset: function () {
	            // Reset data buffer
	            BufferedBlockAlgorithm.reset.call(this);

	            // Perform concrete-hasher logic
	            this._doReset();
	        },

	        /**
	         * Updates this hasher with a message.
	         *
	         * @param {WordArray|string} messageUpdate The message to append.
	         *
	         * @return {Hasher} This hasher.
	         *
	         * @example
	         *
	         *     hasher.update('message');
	         *     hasher.update(wordArray);
	         */
	        update: function (messageUpdate) {
	            // Append
	            this._append(messageUpdate);

	            // Update the hash
	            this._process();

	            // Chainable
	            return this;
	        },

	        /**
	         * Finalizes the hash computation.
	         * Note that the finalize operation is effectively a destructive, read-once operation.
	         *
	         * @param {WordArray|string} messageUpdate (Optional) A final message update.
	         *
	         * @return {WordArray} The hash.
	         *
	         * @example
	         *
	         *     var hash = hasher.finalize();
	         *     var hash = hasher.finalize('message');
	         *     var hash = hasher.finalize(wordArray);
	         */
	        finalize: function (messageUpdate) {
	            // Final message update
	            if (messageUpdate) {
	                this._append(messageUpdate);
	            }

	            // Perform concrete-hasher logic
	            var hash = this._doFinalize();

	            return hash;
	        },

	        blockSize: 512/32,

	        /**
	         * Creates a shortcut function to a hasher's object interface.
	         *
	         * @param {Hasher} hasher The hasher to create a helper for.
	         *
	         * @return {Function} The shortcut function.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
	         */
	        _createHelper: function (hasher) {
	            return function (message, cfg) {
	                return new hasher.init(cfg).finalize(message);
	            };
	        },

	        /**
	         * Creates a shortcut function to the HMAC's object interface.
	         *
	         * @param {Hasher} hasher The hasher to use in this HMAC helper.
	         *
	         * @return {Function} The shortcut function.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
	         */
	        _createHmacHelper: function (hasher) {
	            return function (message, key) {
	                return new C_algo.HMAC.init(hasher, key).finalize(message);
	            };
	        }
	    });

	    /**
	     * Algorithm namespace.
	     */
	    var C_algo = C.algo = {};

	    return C;
	}(Math));


	return CryptoJS;

}));

/***/ }),
/* 5 */
/***/ (function(module, exports) {

module.exports = require("os");

/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright (c) 2012, Mark Cavage. All rights reserved.
// Copyright 2015 Joyent, Inc.

var assert = __webpack_require__(11);
var Stream = __webpack_require__(22).Stream;
var util = __webpack_require__(2);


///--- Globals

/* JSSTYLED */
var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/;


///--- Internal

function _capitalize(str) {
    return (str.charAt(0).toUpperCase() + str.slice(1));
}

function _toss(name, expected, oper, arg, actual) {
    throw new assert.AssertionError({
        message: util.format('%s (%s) is required', name, expected),
        actual: (actual === undefined) ? typeof (arg) : actual(arg),
        expected: expected,
        operator: oper || '===',
        stackStartFunction: _toss.caller
    });
}

function _getClass(arg) {
    return (Object.prototype.toString.call(arg).slice(8, -1));
}

function noop() {
    // Why even bother with asserts?
}


///--- Exports

var types = {
    bool: {
        check: function (arg) { return typeof (arg) === 'boolean'; }
    },
    func: {
        check: function (arg) { return typeof (arg) === 'function'; }
    },
    string: {
        check: function (arg) { return typeof (arg) === 'string'; }
    },
    object: {
        check: function (arg) {
            return typeof (arg) === 'object' && arg !== null;
        }
    },
    number: {
        check: function (arg) {
            return typeof (arg) === 'number' && !isNaN(arg);
        }
    },
    finite: {
        check: function (arg) {
            return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg);
        }
    },
    buffer: {
        check: function (arg) { return Buffer.isBuffer(arg); },
        operator: 'Buffer.isBuffer'
    },
    array: {
        check: function (arg) { return Array.isArray(arg); },
        operator: 'Array.isArray'
    },
    stream: {
        check: function (arg) { return arg instanceof Stream; },
        operator: 'instanceof',
        actual: _getClass
    },
    date: {
        check: function (arg) { return arg instanceof Date; },
        operator: 'instanceof',
        actual: _getClass
    },
    regexp: {
        check: function (arg) { return arg instanceof RegExp; },
        operator: 'instanceof',
        actual: _getClass
    },
    uuid: {
        check: function (arg) {
            return typeof (arg) === 'string' && UUID_REGEXP.test(arg);
        },
        operator: 'isUUID'
    }
};

function _setExports(ndebug) {
    var keys = Object.keys(types);
    var out;

    /* re-export standard assert */
    if (process.env.NODE_NDEBUG) {
        out = noop;
    } else {
        out = function (arg, msg) {
            if (!arg) {
                _toss(msg, 'true', arg);
            }
        };
    }

    /* standard checks */
    keys.forEach(function (k) {
        if (ndebug) {
            out[k] = noop;
            return;
        }
        var type = types[k];
        out[k] = function (arg, msg) {
            if (!type.check(arg)) {
                _toss(msg, k, type.operator, arg, type.actual);
            }
        };
    });

    /* optional checks */
    keys.forEach(function (k) {
        var name = 'optional' + _capitalize(k);
        if (ndebug) {
            out[name] = noop;
            return;
        }
        var type = types[k];
        out[name] = function (arg, msg) {
            if (arg === undefined || arg === null) {
                return;
            }
            if (!type.check(arg)) {
                _toss(msg, k, type.operator, arg, type.actual);
            }
        };
    });

    /* arrayOf checks */
    keys.forEach(function (k) {
        var name = 'arrayOf' + _capitalize(k);
        if (ndebug) {
            out[name] = noop;
            return;
        }
        var type = types[k];
        var expected = '[' + k + ']';
        out[name] = function (arg, msg) {
            if (!Array.isArray(arg)) {
                _toss(msg, expected, type.operator, arg, type.actual);
            }
            var i;
            for (i = 0; i < arg.length; i++) {
                if (!type.check(arg[i])) {
                    _toss(msg, expected, type.operator, arg, type.actual);
                }
            }
        };
    });

    /* optionalArrayOf checks */
    keys.forEach(function (k) {
        var name = 'optionalArrayOf' + _capitalize(k);
        if (ndebug) {
            out[name] = noop;
            return;
        }
        var type = types[k];
        var expected = '[' + k + ']';
        out[name] = function (arg, msg) {
            if (arg === undefined || arg === null) {
                return;
            }
            if (!Array.isArray(arg)) {
                _toss(msg, expected, type.operator, arg, type.actual);
            }
            var i;
            for (i = 0; i < arg.length; i++) {
                if (!type.check(arg[i])) {
                    _toss(msg, expected, type.operator, arg, type.actual);
                }
            }
        };
    });

    /* re-export built-in assertions */
    Object.keys(assert).forEach(function (k) {
        if (k === 'AssertionError') {
            out[k] = assert[k];
            return;
        }
        if (ndebug) {
            out[k] = noop;
            return;
        }
        out[k] = assert[k];
    });

    /* export ourselves (for unit tests _only_) */
    out._setExports = _setExports;

    return out;
}

module.exports = _setExports(process.env.NODE_NDEBUG);


/***/ }),
/* 7 */
/***/ (function(module, exports) {

module.exports = require("crypto");

/***/ }),
/* 8 */
/***/ (function(module, exports) {

module.exports = require("url");

/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var fs = __webpack_require__(1);
var _ = __webpack_require__(24);
var path = __webpack_require__(0);
var Provider = __webpack_require__(254);
var TruffleError = __webpack_require__(23);
var Module = __webpack_require__(106);
var findUp = __webpack_require__(343);
var originalrequire = __webpack_require__(257);

var DEFAULT_CONFIG_FILENAME = "truffle.js";
var BACKUP_CONFIG_FILENAME = "truffle-config.js"; // For Windows + Command Prompt

function Config(truffle_directory, working_directory, network) {
  var self = this;

  var default_tx_values = {
    gas: 6721975,
    gasPrice: 100000000000, // 100 Shannon,
    from: null
  };

  this._values = {
    truffle_directory: truffle_directory || path.resolve(path.join(__dirname, "../")),
    working_directory: working_directory || process.cwd(),
    network: network,
    networks: {},
    verboseRpc: false,
    gas: null,
    gasPrice: null,
    from: null,
    build: null,
    resolver: null,
    artifactor: null,
    ethpm: {
      ipfs_host: "ipfs.infura.io",
      ipfs_protocol: "https",
      registry: "0x8011df4830b4f696cd81393997e5371b93338878",
      install_provider_uri: "https://ropsten.infura.io/truffle"
    },
    solc: {
      optimizer: {
        enabled: false,
        runs: 200
      },
      evmVersion: "byzantium"
    },
    logger: {
      log: function() {},
    }
  };

  var props = {
    // These are already set.
    truffle_directory: function() {},
    working_directory: function() {},
    network: function() {},
    networks: function() {},
    verboseRpc: function() {},
    build: function() {},
    resolver: function() {},
    artifactor: function() {},
    ethpm: function() {},
    solc: function() {},
    logger: function() {},

    build_directory: function() {
      return path.join(self.working_directory, "build");
    },
    contracts_directory: function() {
      return path.join(self.working_directory, "contracts");
    },
    contracts_build_directory: function() {
      return path.join(self.build_directory, "contracts");
    },
    migrations_directory: function() {
      return path.join(self.working_directory, "migrations");
    },
    test_directory: function() {
      return path.join(self.working_directory, "test");
    },
    test_file_extension_regexp: function() {
      return /.*\.(js|es|es6|jsx|sol)$/
    },
    example_project_directory: function() {
      return path.join(self.truffle_directory, "example");
    },
    network_id: {
      get: function() {
        try {
          return self.network_config.network_id;
        } catch (e) {
          return null;
        }
      },
      set: function(val) {
        throw new Error("Do not set config.network_id. Instead, set config.networks and then config.networks[<network name>].network_id");
      }
    },
    network_config: {
      get: function() {
        var network = self.network;

        if (network == null) {
          throw new Error("Network not set. Cannot determine network to use.");
        }

        var conf = self.networks[network];

        if (conf == null) {
          config = {};
        }

        conf = _.extend({}, default_tx_values, conf);

        return conf;
      },
      set: function(val) {
        throw new Error("Don't set config.network_config. Instead, set config.networks with the desired values.");
      }
    },
    from: {
      get: function() {
        try {
          return self.network_config.from;
        } catch (e) {
          return default_tx_values.from;
        }
      },
      set: function(val) {
        throw new Error("Don't set config.from directly. Instead, set config.networks and then config.networks[<network name>].from")
      }
    },
    gas: {
      get: function() {
        try {
          return self.network_config.gas;
        } catch (e) {
          return default_tx_values.gas;
        }
      },
      set: function(val) {
        throw new Error("Don't set config.gas directly. Instead, set config.networks and then config.networks[<network name>].gas")
      }
    },
    gasPrice: {
      get: function() {
        try {
          return self.network_config.gasPrice;
        } catch (e) {
          return default_tx_values.gasPrice;
        }
      },
      set: function(val) {
        throw new Error("Don't set config.gasPrice directly. Instead, set config.networks and then config.networks[<network name>].gasPrice")
      }
    },
    provider: {
      get: function() {
        if (!self.network) {
          return null;
        }

        var options = self.network_config;
        options.verboseRpc = self.verboseRpc;
        return Provider.create(options);
      },
      set: function(val) {
        throw new Error("Don't set config.provider directly. Instead, set config.networks and then set config.networks[<network name>].provider")
      }
    }
  };

  Object.keys(props).forEach(function(prop) {
    self.addProp(prop, props[prop]);
  });
};

Config.prototype.addProp = function(key, obj) {
  Object.defineProperty(this, key, {
    get: obj.get || function() {
      return this._values[key] || obj();
    },
    set: obj.set || function(val) {
      this._values[key] = val;
    },
    configurable: true,
    enumerable: true
  });
};

Config.prototype.normalize = function(obj) {
  var clone = {};
  Object.keys(obj).forEach(function(key) {
    try {
      clone[key] = obj[key];
    } catch (e) {
      // Do nothing with values that throw.
    }
  });
  return clone;
}

Config.prototype.with = function(obj) {
  var normalized = this.normalize(obj);
  var current = this.normalize(this);

  return _.extend({}, current, normalized);
};

Config.prototype.merge = function(obj) {
  var self = this;
  var clone = this.normalize(obj);

  // Only set keys for values that don't throw.
  Object.keys(obj).forEach(function(key) {
    try {
      self[key] = clone[key];
    } catch (e) {
      // Do nothing.
    }
  });

  return this;
};

Config.default = function() {
  return new Config();
};

Config.detect = function(options, filename) {
  var search;

  (!filename)
    ? search = [DEFAULT_CONFIG_FILENAME, BACKUP_CONFIG_FILENAME]
    : search = filename;

  var file = findUp.sync(search, {cwd: options.working_directory || options.workingDirectory});

  if (file == null) {
    throw new TruffleError("Could not find suitable configuration file.");
  }

  return this.load(file, options);
};

Config.load = function(file, options) {
  var config = new Config();

  config.working_directory = path.dirname(path.resolve(file));

  // The require-nocache module used to do this for us, but
  // it doesn't bundle very well. So we've pulled it out ourselves.
  delete __webpack_require__.c[Module._resolveFilename(file, module)];
  var static_config = originalrequire(file);

  config.merge(static_config);
  config.merge(options);

  return config;
};

module.exports = Config;

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* eslint-disable node/no-deprecated-api */



var buffer = __webpack_require__(70)
var Buffer = buffer.Buffer

var safer = {}

var key

for (key in buffer) {
  if (!buffer.hasOwnProperty(key)) continue
  if (key === 'SlowBuffer' || key === 'Buffer') continue
  safer[key] = buffer[key]
}

var Safer = safer.Buffer = {}
for (key in Buffer) {
  if (!Buffer.hasOwnProperty(key)) continue
  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue
  Safer[key] = Buffer[key]
}

safer.Buffer.prototype = Buffer.prototype

if (!Safer.from || Safer.from === Uint8Array.from) {
  Safer.from = function (value, encodingOrOffset, length) {
    if (typeof value === 'number') {
      throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value)
    }
    if (value && typeof value.length === 'undefined') {
      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)
    }
    return Buffer(value, encodingOrOffset, length)
  }
}

if (!Safer.alloc) {
  Safer.alloc = function (size, fill, encoding) {
    if (typeof size !== 'number') {
      throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size)
    }
    if (size < 0 || size >= 2 * (1 << 30)) {
      throw new RangeError('The value "' + size + '" is invalid for option "size"')
    }
    var buf = Buffer(size)
    if (!fill || fill.length === 0) {
      buf.fill(0)
    } else if (typeof encoding === 'string') {
      buf.fill(fill, encoding)
    } else {
      buf.fill(fill)
    }
    return buf
  }
}

if (!safer.kStringMaxLength) {
  try {
    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength
  } catch (e) {
    // we can't determine kStringMaxLength in environments where process.binding
    // is unsupported, so let's not set it
  }
}

if (!safer.constants) {
  safer.constants = {
    MAX_LENGTH: safer.kMaxLength
  }
  if (safer.kStringMaxLength) {
    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength
  }
}

module.exports = safer


/***/ }),
/* 11 */
/***/ (function(module, exports) {

module.exports = require("assert");

/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	bufferSplit: bufferSplit,
	addRSAMissing: addRSAMissing,
	calculateDSAPublic: calculateDSAPublic,
	calculateED25519Public: calculateED25519Public,
	calculateX25519Public: calculateX25519Public,
	mpNormalize: mpNormalize,
	mpDenormalize: mpDenormalize,
	ecNormalize: ecNormalize,
	countZeros: countZeros,
	assertCompatible: assertCompatible,
	isCompatible: isCompatible,
	opensslKeyDeriv: opensslKeyDeriv,
	opensshCipherInfo: opensshCipherInfo,
	publicFromPrivateECDSA: publicFromPrivateECDSA,
	zeroPadToLength: zeroPadToLength,
	writeBitString: writeBitString,
	readBitString: readBitString
};

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var PrivateKey = __webpack_require__(20);
var Key = __webpack_require__(16);
var crypto = __webpack_require__(7);
var algs = __webpack_require__(19);
var asn1 = __webpack_require__(47);

var ec, jsbn;
var nacl;

var MAX_CLASS_DEPTH = 3;

function isCompatible(obj, klass, needVer) {
	if (obj === null || typeof (obj) !== 'object')
		return (false);
	if (needVer === undefined)
		needVer = klass.prototype._sshpkApiVersion;
	if (obj instanceof klass &&
	    klass.prototype._sshpkApiVersion[0] == needVer[0])
		return (true);
	var proto = Object.getPrototypeOf(obj);
	var depth = 0;
	while (proto.constructor.name !== klass.name) {
		proto = Object.getPrototypeOf(proto);
		if (!proto || ++depth > MAX_CLASS_DEPTH)
			return (false);
	}
	if (proto.constructor.name !== klass.name)
		return (false);
	var ver = proto._sshpkApiVersion;
	if (ver === undefined)
		ver = klass._oldVersionDetect(obj);
	if (ver[0] != needVer[0] || ver[1] < needVer[1])
		return (false);
	return (true);
}

function assertCompatible(obj, klass, needVer, name) {
	if (name === undefined)
		name = 'object';
	assert.ok(obj, name + ' must not be null');
	assert.object(obj, name + ' must be an object');
	if (needVer === undefined)
		needVer = klass.prototype._sshpkApiVersion;
	if (obj instanceof klass &&
	    klass.prototype._sshpkApiVersion[0] == needVer[0])
		return;
	var proto = Object.getPrototypeOf(obj);
	var depth = 0;
	while (proto.constructor.name !== klass.name) {
		proto = Object.getPrototypeOf(proto);
		assert.ok(proto && ++depth <= MAX_CLASS_DEPTH,
		    name + ' must be a ' + klass.name + ' instance');
	}
	assert.strictEqual(proto.constructor.name, klass.name,
	    name + ' must be a ' + klass.name + ' instance');
	var ver = proto._sshpkApiVersion;
	if (ver === undefined)
		ver = klass._oldVersionDetect(obj);
	assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],
	    name + ' must be compatible with ' + klass.name + ' klass ' +
	    'version ' + needVer[0] + '.' + needVer[1]);
}

var CIPHER_LEN = {
	'des-ede3-cbc': { key: 7, iv: 8 },
	'aes-128-cbc': { key: 16, iv: 16 }
};
var PKCS5_SALT_LEN = 8;

function opensslKeyDeriv(cipher, salt, passphrase, count) {
	assert.buffer(salt, 'salt');
	assert.buffer(passphrase, 'passphrase');
	assert.number(count, 'iteration count');

	var clen = CIPHER_LEN[cipher];
	assert.object(clen, 'supported cipher');

	salt = salt.slice(0, PKCS5_SALT_LEN);

	var D, D_prev, bufs;
	var material = Buffer.alloc(0);
	while (material.length < clen.key + clen.iv) {
		bufs = [];
		if (D_prev)
			bufs.push(D_prev);
		bufs.push(passphrase);
		bufs.push(salt);
		D = Buffer.concat(bufs);
		for (var j = 0; j < count; ++j)
			D = crypto.createHash('md5').update(D).digest();
		material = Buffer.concat([material, D]);
		D_prev = D;
	}

	return ({
	    key: material.slice(0, clen.key),
	    iv: material.slice(clen.key, clen.key + clen.iv)
	});
}

/* Count leading zero bits on a buffer */
function countZeros(buf) {
	var o = 0, obit = 8;
	while (o < buf.length) {
		var mask = (1 << obit);
		if ((buf[o] & mask) === mask)
			break;
		obit--;
		if (obit < 0) {
			o++;
			obit = 8;
		}
	}
	return (o*8 + (8 - obit) - 1);
}

function bufferSplit(buf, chr) {
	assert.buffer(buf);
	assert.string(chr);

	var parts = [];
	var lastPart = 0;
	var matches = 0;
	for (var i = 0; i < buf.length; ++i) {
		if (buf[i] === chr.charCodeAt(matches))
			++matches;
		else if (buf[i] === chr.charCodeAt(0))
			matches = 1;
		else
			matches = 0;

		if (matches >= chr.length) {
			var newPart = i + 1;
			parts.push(buf.slice(lastPart, newPart - matches));
			lastPart = newPart;
			matches = 0;
		}
	}
	if (lastPart <= buf.length)
		parts.push(buf.slice(lastPart, buf.length));

	return (parts);
}

function ecNormalize(buf, addZero) {
	assert.buffer(buf);
	if (buf[0] === 0x00 && buf[1] === 0x04) {
		if (addZero)
			return (buf);
		return (buf.slice(1));
	} else if (buf[0] === 0x04) {
		if (!addZero)
			return (buf);
	} else {
		while (buf[0] === 0x00)
			buf = buf.slice(1);
		if (buf[0] === 0x02 || buf[0] === 0x03)
			throw (new Error('Compressed elliptic curve points ' +
			    'are not supported'));
		if (buf[0] !== 0x04)
			throw (new Error('Not a valid elliptic curve point'));
		if (!addZero)
			return (buf);
	}
	var b = Buffer.alloc(buf.length + 1);
	b[0] = 0x0;
	buf.copy(b, 1);
	return (b);
}

function readBitString(der, tag) {
	if (tag === undefined)
		tag = asn1.Ber.BitString;
	var buf = der.readString(tag, true);
	assert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' +
	    'not supported (0x' + buf[0].toString(16) + ')');
	return (buf.slice(1));
}

function writeBitString(der, buf, tag) {
	if (tag === undefined)
		tag = asn1.Ber.BitString;
	var b = Buffer.alloc(buf.length + 1);
	b[0] = 0x00;
	buf.copy(b, 1);
	der.writeBuffer(b, tag);
}

function mpNormalize(buf) {
	assert.buffer(buf);
	while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)
		buf = buf.slice(1);
	if ((buf[0] & 0x80) === 0x80) {
		var b = Buffer.alloc(buf.length + 1);
		b[0] = 0x00;
		buf.copy(b, 1);
		buf = b;
	}
	return (buf);
}

function mpDenormalize(buf) {
	assert.buffer(buf);
	while (buf.length > 1 && buf[0] === 0x00)
		buf = buf.slice(1);
	return (buf);
}

function zeroPadToLength(buf, len) {
	assert.buffer(buf);
	assert.number(len);
	while (buf.length > len) {
		assert.equal(buf[0], 0x00);
		buf = buf.slice(1);
	}
	while (buf.length < len) {
		var b = Buffer.alloc(buf.length + 1);
		b[0] = 0x00;
		buf.copy(b, 1);
		buf = b;
	}
	return (buf);
}

function bigintToMpBuf(bigint) {
	var buf = Buffer.from(bigint.toByteArray());
	buf = mpNormalize(buf);
	return (buf);
}

function calculateDSAPublic(g, p, x) {
	assert.buffer(g);
	assert.buffer(p);
	assert.buffer(x);
	try {
		var bigInt = __webpack_require__(63).BigInteger;
	} catch (e) {
		throw (new Error('To load a PKCS#8 format DSA private key, ' +
		    'the node jsbn library is required.'));
	}
	g = new bigInt(g);
	p = new bigInt(p);
	x = new bigInt(x);
	var y = g.modPow(x, p);
	var ybuf = bigintToMpBuf(y);
	return (ybuf);
}

function calculateED25519Public(k) {
	assert.buffer(k);

	if (nacl === undefined)
		nacl = __webpack_require__(58);

	var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));
	return (Buffer.from(kp.publicKey));
}

function calculateX25519Public(k) {
	assert.buffer(k);

	if (nacl === undefined)
		nacl = __webpack_require__(58);

	var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));
	return (Buffer.from(kp.publicKey));
}

function addRSAMissing(key) {
	assert.object(key);
	assertCompatible(key, PrivateKey, [1, 1]);
	try {
		var bigInt = __webpack_require__(63).BigInteger;
	} catch (e) {
		throw (new Error('To write a PEM private key from ' +
		    'this source, the node jsbn lib is required.'));
	}

	var d = new bigInt(key.part.d.data);
	var buf;

	if (!key.part.dmodp) {
		var p = new bigInt(key.part.p.data);
		var dmodp = d.mod(p.subtract(1));

		buf = bigintToMpBuf(dmodp);
		key.part.dmodp = {name: 'dmodp', data: buf};
		key.parts.push(key.part.dmodp);
	}
	if (!key.part.dmodq) {
		var q = new bigInt(key.part.q.data);
		var dmodq = d.mod(q.subtract(1));

		buf = bigintToMpBuf(dmodq);
		key.part.dmodq = {name: 'dmodq', data: buf};
		key.parts.push(key.part.dmodq);
	}
}

function publicFromPrivateECDSA(curveName, priv) {
	assert.string(curveName, 'curveName');
	assert.buffer(priv);
	if (ec === undefined)
		ec = __webpack_require__(116);
	if (jsbn === undefined)
		jsbn = __webpack_require__(63).BigInteger;
	var params = algs.curves[curveName];
	var p = new jsbn(params.p);
	var a = new jsbn(params.a);
	var b = new jsbn(params.b);
	var curve = new ec.ECCurveFp(p, a, b);
	var G = curve.decodePointHex(params.G.toString('hex'));

	var d = new jsbn(mpNormalize(priv));
	var pub = G.multiply(d);
	pub = Buffer.from(curve.encodePointHex(pub), 'hex');

	var parts = [];
	parts.push({name: 'curve', data: Buffer.from(curveName)});
	parts.push({name: 'Q', data: pub});

	var key = new Key({type: 'ecdsa', curve: curve, parts: parts});
	return (key);
}

function opensshCipherInfo(cipher) {
	var inf = {};
	switch (cipher) {
	case '3des-cbc':
		inf.keySize = 24;
		inf.blockSize = 8;
		inf.opensslName = 'des-ede3-cbc';
		break;
	case 'blowfish-cbc':
		inf.keySize = 16;
		inf.blockSize = 8;
		inf.opensslName = 'bf-cbc';
		break;
	case 'aes128-cbc':
	case 'aes128-ctr':
	case 'aes128-gcm@openssh.com':
		inf.keySize = 16;
		inf.blockSize = 16;
		inf.opensslName = 'aes-128-' + cipher.slice(7, 10);
		break;
	case 'aes192-cbc':
	case 'aes192-ctr':
	case 'aes192-gcm@openssh.com':
		inf.keySize = 24;
		inf.blockSize = 16;
		inf.opensslName = 'aes-192-' + cipher.slice(7, 10);
		break;
	case 'aes256-cbc':
	case 'aes256-ctr':
	case 'aes256-gcm@openssh.com':
		inf.keySize = 32;
		inf.blockSize = 16;
		inf.opensslName = 'aes-256-' + cipher.slice(7, 10);
		break;
	default:
		throw (new Error(
		    'Unsupported openssl cipher "' + cipher + '"'));
	}
	return (inf);
}


/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Cipher core components.
	 */
	CryptoJS.lib.Cipher || (function (undefined) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var WordArray = C_lib.WordArray;
	    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
	    var C_enc = C.enc;
	    var Utf8 = C_enc.Utf8;
	    var Base64 = C_enc.Base64;
	    var C_algo = C.algo;
	    var EvpKDF = C_algo.EvpKDF;

	    /**
	     * Abstract base cipher template.
	     *
	     * @property {number} keySize This cipher's key size. Default: 4 (128 bits)
	     * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)
	     * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
	     * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
	     */
	    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {WordArray} iv The IV to use for this operation.
	         */
	        cfg: Base.extend(),

	        /**
	         * Creates this cipher in encryption mode.
	         *
	         * @param {WordArray} key The key.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {Cipher} A cipher instance.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
	         */
	        createEncryptor: function (key, cfg) {
	            return this.create(this._ENC_XFORM_MODE, key, cfg);
	        },

	        /**
	         * Creates this cipher in decryption mode.
	         *
	         * @param {WordArray} key The key.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {Cipher} A cipher instance.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
	         */
	        createDecryptor: function (key, cfg) {
	            return this.create(this._DEC_XFORM_MODE, key, cfg);
	        },

	        /**
	         * Initializes a newly created cipher.
	         *
	         * @param {number} xformMode Either the encryption or decryption transormation mode constant.
	         * @param {WordArray} key The key.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @example
	         *
	         *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
	         */
	        init: function (xformMode, key, cfg) {
	            // Apply config defaults
	            this.cfg = this.cfg.extend(cfg);

	            // Store transform mode and key
	            this._xformMode = xformMode;
	            this._key = key;

	            // Set initial values
	            this.reset();
	        },

	        /**
	         * Resets this cipher to its initial state.
	         *
	         * @example
	         *
	         *     cipher.reset();
	         */
	        reset: function () {
	            // Reset data buffer
	            BufferedBlockAlgorithm.reset.call(this);

	            // Perform concrete-cipher logic
	            this._doReset();
	        },

	        /**
	         * Adds data to be encrypted or decrypted.
	         *
	         * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
	         *
	         * @return {WordArray} The data after processing.
	         *
	         * @example
	         *
	         *     var encrypted = cipher.process('data');
	         *     var encrypted = cipher.process(wordArray);
	         */
	        process: function (dataUpdate) {
	            // Append
	            this._append(dataUpdate);

	            // Process available blocks
	            return this._process();
	        },

	        /**
	         * Finalizes the encryption or decryption process.
	         * Note that the finalize operation is effectively a destructive, read-once operation.
	         *
	         * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
	         *
	         * @return {WordArray} The data after final processing.
	         *
	         * @example
	         *
	         *     var encrypted = cipher.finalize();
	         *     var encrypted = cipher.finalize('data');
	         *     var encrypted = cipher.finalize(wordArray);
	         */
	        finalize: function (dataUpdate) {
	            // Final data update
	            if (dataUpdate) {
	                this._append(dataUpdate);
	            }

	            // Perform concrete-cipher logic
	            var finalProcessedData = this._doFinalize();

	            return finalProcessedData;
	        },

	        keySize: 128/32,

	        ivSize: 128/32,

	        _ENC_XFORM_MODE: 1,

	        _DEC_XFORM_MODE: 2,

	        /**
	         * Creates shortcut functions to a cipher's object interface.
	         *
	         * @param {Cipher} cipher The cipher to create a helper for.
	         *
	         * @return {Object} An object with encrypt and decrypt shortcut functions.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
	         */
	        _createHelper: (function () {
	            function selectCipherStrategy(key) {
	                if (typeof key == 'string') {
	                    return PasswordBasedCipher;
	                } else {
	                    return SerializableCipher;
	                }
	            }

	            return function (cipher) {
	                return {
	                    encrypt: function (message, key, cfg) {
	                        return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
	                    },

	                    decrypt: function (ciphertext, key, cfg) {
	                        return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
	                    }
	                };
	            };
	        }())
	    });

	    /**
	     * Abstract base stream cipher template.
	     *
	     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)
	     */
	    var StreamCipher = C_lib.StreamCipher = Cipher.extend({
	        _doFinalize: function () {
	            // Process partial blocks
	            var finalProcessedBlocks = this._process(!!'flush');

	            return finalProcessedBlocks;
	        },

	        blockSize: 1
	    });

	    /**
	     * Mode namespace.
	     */
	    var C_mode = C.mode = {};

	    /**
	     * Abstract base block cipher mode template.
	     */
	    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
	        /**
	         * Creates this mode for encryption.
	         *
	         * @param {Cipher} cipher A block cipher instance.
	         * @param {Array} iv The IV words.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
	         */
	        createEncryptor: function (cipher, iv) {
	            return this.Encryptor.create(cipher, iv);
	        },

	        /**
	         * Creates this mode for decryption.
	         *
	         * @param {Cipher} cipher A block cipher instance.
	         * @param {Array} iv The IV words.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
	         */
	        createDecryptor: function (cipher, iv) {
	            return this.Decryptor.create(cipher, iv);
	        },

	        /**
	         * Initializes a newly created mode.
	         *
	         * @param {Cipher} cipher A block cipher instance.
	         * @param {Array} iv The IV words.
	         *
	         * @example
	         *
	         *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
	         */
	        init: function (cipher, iv) {
	            this._cipher = cipher;
	            this._iv = iv;
	        }
	    });

	    /**
	     * Cipher Block Chaining mode.
	     */
	    var CBC = C_mode.CBC = (function () {
	        /**
	         * Abstract base CBC mode.
	         */
	        var CBC = BlockCipherMode.extend();

	        /**
	         * CBC encryptor.
	         */
	        CBC.Encryptor = CBC.extend({
	            /**
	             * Processes the data block at offset.
	             *
	             * @param {Array} words The data words to operate on.
	             * @param {number} offset The offset where the block starts.
	             *
	             * @example
	             *
	             *     mode.processBlock(data.words, offset);
	             */
	            processBlock: function (words, offset) {
	                // Shortcuts
	                var cipher = this._cipher;
	                var blockSize = cipher.blockSize;

	                // XOR and encrypt
	                xorBlock.call(this, words, offset, blockSize);
	                cipher.encryptBlock(words, offset);

	                // Remember this block to use with next block
	                this._prevBlock = words.slice(offset, offset + blockSize);
	            }
	        });

	        /**
	         * CBC decryptor.
	         */
	        CBC.Decryptor = CBC.extend({
	            /**
	             * Processes the data block at offset.
	             *
	             * @param {Array} words The data words to operate on.
	             * @param {number} offset The offset where the block starts.
	             *
	             * @example
	             *
	             *     mode.processBlock(data.words, offset);
	             */
	            processBlock: function (words, offset) {
	                // Shortcuts
	                var cipher = this._cipher;
	                var blockSize = cipher.blockSize;

	                // Remember this block to use with next block
	                var thisBlock = words.slice(offset, offset + blockSize);

	                // Decrypt and XOR
	                cipher.decryptBlock(words, offset);
	                xorBlock.call(this, words, offset, blockSize);

	                // This block becomes the previous block
	                this._prevBlock = thisBlock;
	            }
	        });

	        function xorBlock(words, offset, blockSize) {
	            // Shortcut
	            var iv = this._iv;

	            // Choose mixing block
	            if (iv) {
	                var block = iv;

	                // Remove IV for subsequent blocks
	                this._iv = undefined;
	            } else {
	                var block = this._prevBlock;
	            }

	            // XOR blocks
	            for (var i = 0; i < blockSize; i++) {
	                words[offset + i] ^= block[i];
	            }
	        }

	        return CBC;
	    }());

	    /**
	     * Padding namespace.
	     */
	    var C_pad = C.pad = {};

	    /**
	     * PKCS #5/7 padding strategy.
	     */
	    var Pkcs7 = C_pad.Pkcs7 = {
	        /**
	         * Pads data using the algorithm defined in PKCS #5/7.
	         *
	         * @param {WordArray} data The data to pad.
	         * @param {number} blockSize The multiple that the data should be padded to.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);
	         */
	        pad: function (data, blockSize) {
	            // Shortcut
	            var blockSizeBytes = blockSize * 4;

	            // Count padding bytes
	            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;

	            // Create padding word
	            var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;

	            // Create padding
	            var paddingWords = [];
	            for (var i = 0; i < nPaddingBytes; i += 4) {
	                paddingWords.push(paddingWord);
	            }
	            var padding = WordArray.create(paddingWords, nPaddingBytes);

	            // Add padding
	            data.concat(padding);
	        },

	        /**
	         * Unpads data that had been padded using the algorithm defined in PKCS #5/7.
	         *
	         * @param {WordArray} data The data to unpad.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     CryptoJS.pad.Pkcs7.unpad(wordArray);
	         */
	        unpad: function (data) {
	            // Get number of padding bytes from last byte
	            var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;

	            // Remove padding
	            data.sigBytes -= nPaddingBytes;
	        }
	    };

	    /**
	     * Abstract base block cipher template.
	     *
	     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)
	     */
	    var BlockCipher = C_lib.BlockCipher = Cipher.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {Mode} mode The block mode to use. Default: CBC
	         * @property {Padding} padding The padding strategy to use. Default: Pkcs7
	         */
	        cfg: Cipher.cfg.extend({
	            mode: CBC,
	            padding: Pkcs7
	        }),

	        reset: function () {
	            // Reset cipher
	            Cipher.reset.call(this);

	            // Shortcuts
	            var cfg = this.cfg;
	            var iv = cfg.iv;
	            var mode = cfg.mode;

	            // Reset block mode
	            if (this._xformMode == this._ENC_XFORM_MODE) {
	                var modeCreator = mode.createEncryptor;
	            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
	                var modeCreator = mode.createDecryptor;

	                // Keep at least one block in the buffer for unpadding
	                this._minBufferSize = 1;
	            }
	            this._mode = modeCreator.call(mode, this, iv && iv.words);
	        },

	        _doProcessBlock: function (words, offset) {
	            this._mode.processBlock(words, offset);
	        },

	        _doFinalize: function () {
	            // Shortcut
	            var padding = this.cfg.padding;

	            // Finalize
	            if (this._xformMode == this._ENC_XFORM_MODE) {
	                // Pad data
	                padding.pad(this._data, this.blockSize);

	                // Process final blocks
	                var finalProcessedBlocks = this._process(!!'flush');
	            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
	                // Process final blocks
	                var finalProcessedBlocks = this._process(!!'flush');

	                // Unpad data
	                padding.unpad(finalProcessedBlocks);
	            }

	            return finalProcessedBlocks;
	        },

	        blockSize: 128/32
	    });

	    /**
	     * A collection of cipher parameters.
	     *
	     * @property {WordArray} ciphertext The raw ciphertext.
	     * @property {WordArray} key The key to this ciphertext.
	     * @property {WordArray} iv The IV used in the ciphering operation.
	     * @property {WordArray} salt The salt used with a key derivation function.
	     * @property {Cipher} algorithm The cipher algorithm.
	     * @property {Mode} mode The block mode used in the ciphering operation.
	     * @property {Padding} padding The padding scheme used in the ciphering operation.
	     * @property {number} blockSize The block size of the cipher.
	     * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
	     */
	    var CipherParams = C_lib.CipherParams = Base.extend({
	        /**
	         * Initializes a newly created cipher params object.
	         *
	         * @param {Object} cipherParams An object with any of the possible cipher parameters.
	         *
	         * @example
	         *
	         *     var cipherParams = CryptoJS.lib.CipherParams.create({
	         *         ciphertext: ciphertextWordArray,
	         *         key: keyWordArray,
	         *         iv: ivWordArray,
	         *         salt: saltWordArray,
	         *         algorithm: CryptoJS.algo.AES,
	         *         mode: CryptoJS.mode.CBC,
	         *         padding: CryptoJS.pad.PKCS7,
	         *         blockSize: 4,
	         *         formatter: CryptoJS.format.OpenSSL
	         *     });
	         */
	        init: function (cipherParams) {
	            this.mixIn(cipherParams);
	        },

	        /**
	         * Converts this cipher params object to a string.
	         *
	         * @param {Format} formatter (Optional) The formatting strategy to use.
	         *
	         * @return {string} The stringified cipher params.
	         *
	         * @throws Error If neither the formatter nor the default formatter is set.
	         *
	         * @example
	         *
	         *     var string = cipherParams + '';
	         *     var string = cipherParams.toString();
	         *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);
	         */
	        toString: function (formatter) {
	            return (formatter || this.formatter).stringify(this);
	        }
	    });

	    /**
	     * Format namespace.
	     */
	    var C_format = C.format = {};

	    /**
	     * OpenSSL formatting strategy.
	     */
	    var OpenSSLFormatter = C_format.OpenSSL = {
	        /**
	         * Converts a cipher params object to an OpenSSL-compatible string.
	         *
	         * @param {CipherParams} cipherParams The cipher params object.
	         *
	         * @return {string} The OpenSSL-compatible string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
	         */
	        stringify: function (cipherParams) {
	            // Shortcuts
	            var ciphertext = cipherParams.ciphertext;
	            var salt = cipherParams.salt;

	            // Format
	            if (salt) {
	                var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);
	            } else {
	                var wordArray = ciphertext;
	            }

	            return wordArray.toString(Base64);
	        },

	        /**
	         * Converts an OpenSSL-compatible string to a cipher params object.
	         *
	         * @param {string} openSSLStr The OpenSSL-compatible string.
	         *
	         * @return {CipherParams} The cipher params object.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
	         */
	        parse: function (openSSLStr) {
	            // Parse base64
	            var ciphertext = Base64.parse(openSSLStr);

	            // Shortcut
	            var ciphertextWords = ciphertext.words;

	            // Test for salt
	            if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {
	                // Extract salt
	                var salt = WordArray.create(ciphertextWords.slice(2, 4));

	                // Remove salt from ciphertext
	                ciphertextWords.splice(0, 4);
	                ciphertext.sigBytes -= 16;
	            }

	            return CipherParams.create({ ciphertext: ciphertext, salt: salt });
	        }
	    };

	    /**
	     * A cipher wrapper that returns ciphertext as a serializable cipher params object.
	     */
	    var SerializableCipher = C_lib.SerializableCipher = Base.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
	         */
	        cfg: Base.extend({
	            format: OpenSSLFormatter
	        }),

	        /**
	         * Encrypts a message.
	         *
	         * @param {Cipher} cipher The cipher algorithm to use.
	         * @param {WordArray|string} message The message to encrypt.
	         * @param {WordArray} key The key.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {CipherParams} A cipher params object.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
	         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
	         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
	         */
	        encrypt: function (cipher, message, key, cfg) {
	            // Apply config defaults
	            cfg = this.cfg.extend(cfg);

	            // Encrypt
	            var encryptor = cipher.createEncryptor(key, cfg);
	            var ciphertext = encryptor.finalize(message);

	            // Shortcut
	            var cipherCfg = encryptor.cfg;

	            // Create and return serializable cipher params
	            return CipherParams.create({
	                ciphertext: ciphertext,
	                key: key,
	                iv: cipherCfg.iv,
	                algorithm: cipher,
	                mode: cipherCfg.mode,
	                padding: cipherCfg.padding,
	                blockSize: cipher.blockSize,
	                formatter: cfg.format
	            });
	        },

	        /**
	         * Decrypts serialized ciphertext.
	         *
	         * @param {Cipher} cipher The cipher algorithm to use.
	         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
	         * @param {WordArray} key The key.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {WordArray} The plaintext.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
	         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
	         */
	        decrypt: function (cipher, ciphertext, key, cfg) {
	            // Apply config defaults
	            cfg = this.cfg.extend(cfg);

	            // Convert string to CipherParams
	            ciphertext = this._parse(ciphertext, cfg.format);

	            // Decrypt
	            var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);

	            return plaintext;
	        },

	        /**
	         * Converts serialized ciphertext to CipherParams,
	         * else assumed CipherParams already and returns ciphertext unchanged.
	         *
	         * @param {CipherParams|string} ciphertext The ciphertext.
	         * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
	         *
	         * @return {CipherParams} The unserialized ciphertext.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
	         */
	        _parse: function (ciphertext, format) {
	            if (typeof ciphertext == 'string') {
	                return format.parse(ciphertext, this);
	            } else {
	                return ciphertext;
	            }
	        }
	    });

	    /**
	     * Key derivation function namespace.
	     */
	    var C_kdf = C.kdf = {};

	    /**
	     * OpenSSL key derivation function.
	     */
	    var OpenSSLKdf = C_kdf.OpenSSL = {
	        /**
	         * Derives a key and IV from a password.
	         *
	         * @param {string} password The password to derive from.
	         * @param {number} keySize The size in words of the key to generate.
	         * @param {number} ivSize The size in words of the IV to generate.
	         * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
	         *
	         * @return {CipherParams} A cipher params object with the key, IV, and salt.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
	         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
	         */
	        execute: function (password, keySize, ivSize, salt) {
	            // Generate random salt
	            if (!salt) {
	                salt = WordArray.random(64/8);
	            }

	            // Derive key and IV
	            var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);

	            // Separate key and IV
	            var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
	            key.sigBytes = keySize * 4;

	            // Return params
	            return CipherParams.create({ key: key, iv: iv, salt: salt });
	        }
	    };

	    /**
	     * A serializable cipher wrapper that derives the key from a password,
	     * and returns ciphertext as a serializable cipher params object.
	     */
	    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
	         */
	        cfg: SerializableCipher.cfg.extend({
	            kdf: OpenSSLKdf
	        }),

	        /**
	         * Encrypts a message using a password.
	         *
	         * @param {Cipher} cipher The cipher algorithm to use.
	         * @param {WordArray|string} message The message to encrypt.
	         * @param {string} password The password.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {CipherParams} A cipher params object.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
	         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
	         */
	        encrypt: function (cipher, message, password, cfg) {
	            // Apply config defaults
	            cfg = this.cfg.extend(cfg);

	            // Derive key and other params
	            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);

	            // Add IV to config
	            cfg.iv = derivedParams.iv;

	            // Encrypt
	            var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);

	            // Mix in derived params
	            ciphertext.mixIn(derivedParams);

	            return ciphertext;
	        },

	        /**
	         * Decrypts serialized ciphertext using a password.
	         *
	         * @param {Cipher} cipher The cipher algorithm to use.
	         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
	         * @param {string} password The password.
	         * @param {Object} cfg (Optional) The configuration options to use for this operation.
	         *
	         * @return {WordArray} The plaintext.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
	         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
	         */
	        decrypt: function (cipher, ciphertext, password, cfg) {
	            // Apply config defaults
	            cfg = this.cfg.extend(cfg);

	            // Convert string to CipherParams
	            ciphertext = this._parse(ciphertext, cfg.format);

	            // Derive key and other params
	            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);

	            // Add IV to config
	            cfg.iv = derivedParams.iv;

	            // Decrypt
	            var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);

	            return plaintext;
	        }
	    });
	}());


}));

/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file utils.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 *
 * @module utils
 */

/**
 * Utility functions
 *
 * @class [utils] utils
 * @constructor
 */


var BigNumber = __webpack_require__(152);
var sha3 = __webpack_require__(118);
var utf8 = __webpack_require__(245);

var unitMap = {
    'noether':      '0',    
    'wei':          '1',
    'kwei':         '1000',
    'Kwei':         '1000',
    'babbage':      '1000',
    'femtoether':   '1000',
    'mwei':         '1000000',
    'Mwei':         '1000000',
    'lovelace':     '1000000',
    'picoether':    '1000000',
    'gwei':         '1000000000',
    'Gwei':         '1000000000',
    'shannon':      '1000000000',
    'nanoether':    '1000000000',
    'nano':         '1000000000',
    'szabo':        '1000000000000',
    'microether':   '1000000000000',
    'micro':        '1000000000000',
    'finney':       '1000000000000000',
    'milliether':    '1000000000000000',
    'milli':         '1000000000000000',
    'ether':        '1000000000000000000',
    'kether':       '1000000000000000000000',
    'grand':        '1000000000000000000000',
    'mether':       '1000000000000000000000000',
    'gether':       '1000000000000000000000000000',
    'tether':       '1000000000000000000000000000000'
};

/**
 * Should be called to pad string to expected length
 *
 * @method padLeft
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padLeft = function (string, chars, sign) {
    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
};

/**
 * Should be called to pad string to expected length
 *
 * @method padRight
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padRight = function (string, chars, sign) {
    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
};

/**
 * Should be called to get utf8 from it's hex representation
 *
 * @method toUtf8
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toUtf8 = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        if (code === 0)
            break;
        str += String.fromCharCode(code);
    }

    return utf8.decode(str);
};

/**
 * Should be called to get ascii from it's hex representation
 *
 * @method toAscii
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toAscii = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        str += String.fromCharCode(code);
    }

    return str;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of utf8 string
 *
 * @method fromUtf8
 * @param {String} string
 * @param {Number} optional padding
 * @returns {String} hex representation of input string
 */
var fromUtf8 = function(str) {
    str = utf8.encode(str);
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        if (code === 0)
            break;
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of ascii string
 *
 * @method fromAscii
 * @param {String} string
 * @param {Number} optional padding
 * @returns {String} hex representation of input string
 */
var fromAscii = function(str) {
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};

/**
 * Should be used to create full function/event name from json abi
 *
 * @method transformToFullName
 * @param {Object} json-abi
 * @return {String} full fnction/event name
 */
var transformToFullName = function (json) {
    if (json.name.indexOf('(') !== -1) {
        return json.name;
    }

    var typeName = json.inputs.map(function(i){return i.type; }).join();
    return json.name + '(' + typeName + ')';
};

/**
 * Should be called to get display name of contract function
 *
 * @method extractDisplayName
 * @param {String} name of function/event
 * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
 */
var extractDisplayName = function (name) {
    var length = name.indexOf('(');
    return length !== -1 ? name.substr(0, length) : name;
};

/// @returns overloaded part of function/event name
var extractTypeName = function (name) {
    /// TODO: make it invulnerable
    var length = name.indexOf('(');
    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
};

/**
 * Converts value to it's decimal representation in string
 *
 * @method toDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var toDecimal = function (value) {
    return toBigNumber(value).toNumber();
};

/**
 * Converts value to it's hex representation
 *
 * @method fromDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var fromDecimal = function (value) {
    var number = toBigNumber(value);
    var result = number.toString(16);

    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
};

/**
 * Auto converts any given value into it's hex representation.
 *
 * And even stringifys objects before.
 *
 * @method toHex
 * @param {String|Number|BigNumber|Object}
 * @return {String}
 */
var toHex = function (val) {
    /*jshint maxcomplexity: 8 */

    if (isBoolean(val))
        return fromDecimal(+val);

    if (isBigNumber(val))
        return fromDecimal(val);

    if (isObject(val))
        return fromUtf8(JSON.stringify(val));

    // if its a negative number, pass it through fromDecimal
    if (isString(val)) {
        if (val.indexOf('-0x') === 0)
            return fromDecimal(val);
        else if(val.indexOf('0x') === 0)
            return val;
        else if (!isFinite(val))
            return fromAscii(val);
    }

    return fromDecimal(val);
};

/**
 * Returns value of unit in Wei
 *
 * @method getValueOfUnit
 * @param {String} unit the unit to convert to, default ether
 * @returns {BigNumber} value of the unit (in Wei)
 * @throws error if the unit is not correct:w
 */
var getValueOfUnit = function (unit) {
    unit = unit ? unit.toLowerCase() : 'ether';
    var unitValue = unitMap[unit];
    if (unitValue === undefined) {
        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
    }
    return new BigNumber(unitValue, 10);
};

/**
 * Takes a number of wei and converts it to any other ether unit.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method fromWei
 * @param {Number|String} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert to, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var fromWei = function(number, unit) {
    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes a number of a unit and converts it to wei.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method toWei
 * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert from, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var toWei = function(number, unit) {
    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes an input and transforms it into an bignumber
 *
 * @method toBigNumber
 * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
 * @return {BigNumber} BigNumber
*/
var toBigNumber = function(number) {
    /*jshint maxcomplexity:5 */
    number = number || 0;
    if (isBigNumber(number))
        return number;

    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
        return new BigNumber(number.replace('0x',''), 16);
    }

    return new BigNumber(number.toString(10), 10);
};

/**
 * Takes and input transforms it into bignumber and if it is negative value, into two's complement
 *
 * @method toTwosComplement
 * @param {Number|String|BigNumber}
 * @return {BigNumber}
 */
var toTwosComplement = function (number) {
    var bigNumber = toBigNumber(number);
    if (bigNumber.lessThan(0)) {
        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
    }
    return bigNumber;
};

/**
 * Checks if the given string is strictly an address
 *
 * @method isStrictAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isStrictAddress = function (address) {
    return /^0x[0-9a-f]{40}$/i.test(address);
};

/**
 * Checks if the given string is an address
 *
 * @method isAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isAddress = function (address) {
    if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
        // check if it has the basic requirements of an address
        return false;
    } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
        // If it's all small caps or all all caps, return true
        return true;
    } else {
        // Otherwise check each case
        return isChecksumAddress(address);
    }
};



/**
 * Checks if the given string is a checksummed address
 *
 * @method isChecksumAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isChecksumAddress = function (address) {    
    // Check each case
    address = address.replace('0x','');
    var addressHash = sha3(address.toLowerCase());

    for (var i = 0; i < 40; i++ ) { 
        // the nth letter should be uppercase if the nth digit of casemap is 1
        if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
            return false;
        }
    }
    return true;    
};



/**
 * Makes a checksum address
 *
 * @method toChecksumAddress
 * @param {String} address the given HEX adress
 * @return {String}
*/
var toChecksumAddress = function (address) { 
    if (typeof address === 'undefined') return '';

    address = address.toLowerCase().replace('0x','');
    var addressHash = sha3(address);
    var checksumAddress = '0x';

    for (var i = 0; i < address.length; i++ ) { 
        // If ith character is 9 to f then make it uppercase 
        if (parseInt(addressHash[i], 16) > 7) {
          checksumAddress += address[i].toUpperCase();
        } else {
            checksumAddress += address[i];
        }
    }
    return checksumAddress;
};

/**
 * Transforms given string to valid 20 bytes-length addres with 0x prefix
 *
 * @method toAddress
 * @param {String} address
 * @return {String} formatted address
 */
var toAddress = function (address) {
    if (isStrictAddress(address)) {
        return address;
    }

    if (/^[0-9a-f]{40}$/.test(address)) {
        return '0x' + address;
    }

    return '0x' + padLeft(toHex(address).substr(2), 40);
};

/**
 * Returns true if object is BigNumber, otherwise false
 *
 * @method isBigNumber
 * @param {Object}
 * @return {Boolean}
 */
var isBigNumber = function (object) {
    return object instanceof BigNumber ||
        (object && object.constructor && object.constructor.name === 'BigNumber');
};

/**
 * Returns true if object is string, otherwise false
 *
 * @method isString
 * @param {Object}
 * @return {Boolean}
 */
var isString = function (object) {
    return typeof object === 'string' ||
        (object && object.constructor && object.constructor.name === 'String');
};

/**
 * Returns true if object is function, otherwise false
 *
 * @method isFunction
 * @param {Object}
 * @return {Boolean}
 */
var isFunction = function (object) {
    return typeof object === 'function';
};

/**
 * Returns true if object is Objet, otherwise false
 *
 * @method isObject
 * @param {Object}
 * @return {Boolean}
 */
var isObject = function (object) {
    return typeof object === 'object';
};

/**
 * Returns true if object is boolean, otherwise false
 *
 * @method isBoolean
 * @param {Object}
 * @return {Boolean}
 */
var isBoolean = function (object) {
    return typeof object === 'boolean';
};

/**
 * Returns true if object is array, otherwise false
 *
 * @method isArray
 * @param {Object}
 * @return {Boolean}
 */
var isArray = function (object) {
    return object instanceof Array;
};

/**
 * Returns true if given string is valid json object
 *
 * @method isJson
 * @param {String}
 * @return {Boolean}
 */
var isJson = function (str) {
    try {
        return !!JSON.parse(str);
    } catch (e) {
        return false;
    }
};

module.exports = {
    padLeft: padLeft,
    padRight: padRight,
    toHex: toHex,
    toDecimal: toDecimal,
    fromDecimal: fromDecimal,
    toUtf8: toUtf8,
    toAscii: toAscii,
    fromUtf8: fromUtf8,
    fromAscii: fromAscii,
    transformToFullName: transformToFullName,
    extractDisplayName: extractDisplayName,
    extractTypeName: extractTypeName,
    toWei: toWei,
    fromWei: fromWei,
    toBigNumber: toBigNumber,
    toTwosComplement: toTwosComplement,
    toAddress: toAddress,
    isBigNumber: isBigNumber,
    isStrictAddress: isStrictAddress,
    isAddress: isAddress,
    isChecksumAddress: isChecksumAddress,
    toChecksumAddress: toChecksumAddress,
    isFunction: isFunction,
    isString: isString,
    isObject: isObject,
    isBoolean: isBoolean,
    isArray: isArray,
    isJson: isJson
};


/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file utils.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 *
 * @module utils
 */

/**
 * Utility functions
 *
 * @class [utils] utils
 * @constructor
 */


var BigNumber = __webpack_require__(117);
var sha3 = __webpack_require__(121);
var utf8 = __webpack_require__(245);

var unitMap = {
    'noether':      '0',    
    'wei':          '1',
    'kwei':         '1000',
    'Kwei':         '1000',
    'babbage':      '1000',
    'femtoether':   '1000',
    'mwei':         '1000000',
    'Mwei':         '1000000',
    'lovelace':     '1000000',
    'picoether':    '1000000',
    'gwei':         '1000000000',
    'Gwei':         '1000000000',
    'shannon':      '1000000000',
    'nanoether':    '1000000000',
    'nano':         '1000000000',
    'szabo':        '1000000000000',
    'microether':   '1000000000000',
    'micro':        '1000000000000',
    'finney':       '1000000000000000',
    'milliether':    '1000000000000000',
    'milli':         '1000000000000000',
    'ether':        '1000000000000000000',
    'kether':       '1000000000000000000000',
    'grand':        '1000000000000000000000',
    'mether':       '1000000000000000000000000',
    'gether':       '1000000000000000000000000000',
    'tether':       '1000000000000000000000000000000'
};

/**
 * Should be called to pad string to expected length
 *
 * @method padLeft
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padLeft = function (string, chars, sign) {
    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
};

/**
 * Should be called to pad string to expected length
 *
 * @method padRight
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padRight = function (string, chars, sign) {
    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
};

/**
 * Should be called to get utf8 from it's hex representation
 *
 * @method toUtf8
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toUtf8 = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        if (code === 0)
            break;
        str += String.fromCharCode(code);
    }

    return utf8.decode(str);
};

/**
 * Should be called to get ascii from it's hex representation
 *
 * @method toAscii
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toAscii = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        str += String.fromCharCode(code);
    }

    return str;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of utf8 string
 *
 * @method fromUtf8
 * @param {String} string
 * @param {Number} optional padding
 * @returns {String} hex representation of input string
 */
var fromUtf8 = function(str) {
    str = utf8.encode(str);
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        if (code === 0)
            break;
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of ascii string
 *
 * @method fromAscii
 * @param {String} string
 * @param {Number} optional padding
 * @returns {String} hex representation of input string
 */
var fromAscii = function(str) {
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};

/**
 * Should be used to create full function/event name from json abi
 *
 * @method transformToFullName
 * @param {Object} json-abi
 * @return {String} full fnction/event name
 */
var transformToFullName = function (json) {
    if (json.name.indexOf('(') !== -1) {
        return json.name;
    }

    var typeName = json.inputs.map(function(i){return i.type; }).join();
    return json.name + '(' + typeName + ')';
};

/**
 * Should be called to get display name of contract function
 *
 * @method extractDisplayName
 * @param {String} name of function/event
 * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
 */
var extractDisplayName = function (name) {
    var length = name.indexOf('(');
    return length !== -1 ? name.substr(0, length) : name;
};

/// @returns overloaded part of function/event name
var extractTypeName = function (name) {
    /// TODO: make it invulnerable
    var length = name.indexOf('(');
    return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : "";
};

/**
 * Converts value to it's decimal representation in string
 *
 * @method toDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var toDecimal = function (value) {
    return toBigNumber(value).toNumber();
};

/**
 * Converts value to it's hex representation
 *
 * @method fromDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var fromDecimal = function (value) {
    var number = toBigNumber(value);
    var result = number.toString(16);

    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
};

/**
 * Auto converts any given value into it's hex representation.
 *
 * And even stringifys objects before.
 *
 * @method toHex
 * @param {String|Number|BigNumber|Object}
 * @return {String}
 */
var toHex = function (val) {
    /*jshint maxcomplexity: 8 */

    if (isBoolean(val))
        return fromDecimal(+val);

    if (isBigNumber(val))
        return fromDecimal(val);

    if (isObject(val))
        return fromUtf8(JSON.stringify(val));

    // if its a negative number, pass it through fromDecimal
    if (isString(val)) {
        if (val.indexOf('-0x') === 0)
            return fromDecimal(val);
        else if(val.indexOf('0x') === 0)
            return val;
        else if (!isFinite(val))
            return fromAscii(val);
    }

    return fromDecimal(val);
};

/**
 * Returns value of unit in Wei
 *
 * @method getValueOfUnit
 * @param {String} unit the unit to convert to, default ether
 * @returns {BigNumber} value of the unit (in Wei)
 * @throws error if the unit is not correct:w
 */
var getValueOfUnit = function (unit) {
    unit = unit ? unit.toLowerCase() : 'ether';
    var unitValue = unitMap[unit];
    if (unitValue === undefined) {
        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
    }
    return new BigNumber(unitValue, 10);
};

/**
 * Takes a number of wei and converts it to any other ether unit.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method fromWei
 * @param {Number|String} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert to, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var fromWei = function(number, unit) {
    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes a number of a unit and converts it to wei.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method toWei
 * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert from, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var toWei = function(number, unit) {
    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes an input and transforms it into an bignumber
 *
 * @method toBigNumber
 * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
 * @return {BigNumber} BigNumber
*/
var toBigNumber = function(number) {
    /*jshint maxcomplexity:5 */
    number = number || 0;
    if (isBigNumber(number))
        return number;

    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
        return new BigNumber(number.replace('0x',''), 16);
    }

    return new BigNumber(number.toString(10), 10);
};

/**
 * Takes and input transforms it into bignumber and if it is negative value, into two's complement
 *
 * @method toTwosComplement
 * @param {Number|String|BigNumber}
 * @return {BigNumber}
 */
var toTwosComplement = function (number) {
    var bigNumber = toBigNumber(number).round();
    if (bigNumber.lessThan(0)) {
        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
    }
    return bigNumber;
};

/**
 * Checks if the given string is strictly an address
 *
 * @method isStrictAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isStrictAddress = function (address) {
    return /^0x[0-9a-f]{40}$/i.test(address);
};

/**
 * Checks if the given string is an address
 *
 * @method isAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isAddress = function (address) {
    if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
        // check if it has the basic requirements of an address
        return false;
    } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
        // If it's all small caps or all all caps, return true
        return true;
    } else {
        // Otherwise check each case
        return isChecksumAddress(address);
    }
};

/**
 * Checks if the given string is a checksummed address
 *
 * @method isChecksumAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isChecksumAddress = function (address) {    
    // Check each case
    address = address.replace('0x','');
    var addressHash = sha3(address.toLowerCase());

    for (var i = 0; i < 40; i++ ) { 
        // the nth letter should be uppercase if the nth digit of casemap is 1
        if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
            return false;
        }
    }
    return true;    
};



/**
 * Makes a checksum address
 *
 * @method toChecksumAddress
 * @param {String} address the given HEX adress
 * @return {String}
*/
var toChecksumAddress = function (address) { 
    if (typeof address === 'undefined') return '';

    address = address.toLowerCase().replace('0x','');
    var addressHash = sha3(address);
    var checksumAddress = '0x';

    for (var i = 0; i < address.length; i++ ) { 
        // If ith character is 9 to f then make it uppercase 
        if (parseInt(addressHash[i], 16) > 7) {
          checksumAddress += address[i].toUpperCase();
        } else {
            checksumAddress += address[i];
        }
    }
    return checksumAddress;
};

/**
 * Transforms given string to valid 20 bytes-length addres with 0x prefix
 *
 * @method toAddress
 * @param {String} address
 * @return {String} formatted address
 */
var toAddress = function (address) {
    if (isStrictAddress(address)) {
        return address;
    }

    if (/^[0-9a-f]{40}$/.test(address)) {
        return '0x' + address;
    }

    return '0x' + padLeft(toHex(address).substr(2), 40);
};

/**
 * Returns true if object is BigNumber, otherwise false
 *
 * @method isBigNumber
 * @param {Object}
 * @return {Boolean}
 */
var isBigNumber = function (object) {
    return object instanceof BigNumber ||
        (object && object.constructor && object.constructor.name === 'BigNumber');
};

/**
 * Returns true if object is string, otherwise false
 *
 * @method isString
 * @param {Object}
 * @return {Boolean}
 */
var isString = function (object) {
    return typeof object === 'string' ||
        (object && object.constructor && object.constructor.name === 'String');
};

/**
 * Returns true if object is function, otherwise false
 *
 * @method isFunction
 * @param {Object}
 * @return {Boolean}
 */
var isFunction = function (object) {
    return typeof object === 'function';
};

/**
 * Returns true if object is Objet, otherwise false
 *
 * @method isObject
 * @param {Object}
 * @return {Boolean}
 */
var isObject = function (object) {
    return typeof object === 'object';
};

/**
 * Returns true if object is boolean, otherwise false
 *
 * @method isBoolean
 * @param {Object}
 * @return {Boolean}
 */
var isBoolean = function (object) {
    return typeof object === 'boolean';
};

/**
 * Returns true if object is array, otherwise false
 *
 * @method isArray
 * @param {Object}
 * @return {Boolean}
 */
var isArray = function (object) {
    return object instanceof Array;
};

/**
 * Returns true if given string is valid json object
 *
 * @method isJson
 * @param {String}
 * @return {Boolean}
 */
var isJson = function (str) {
    try {
        return !!JSON.parse(str);
    } catch (e) {
        return false;
    }
};

/**
 * Returns true if given string is a valid Ethereum block header bloom.
 *
 * @method isBloom
 * @param {String} hex encoded bloom filter
 * @return {Boolean}
 */
var isBloom = function (bloom) {
    if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) {
        return true;
    } 
    return false;
};

/**
 * Returns true if given string is a valid log topic.
 *
 * @method isTopic
 * @param {String} hex encoded topic
 * @return {Boolean}
 */
var isTopic = function (topic) {
    if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) {
        return true;
    } 
    return false;
};

module.exports = {
    padLeft: padLeft,
    padRight: padRight,
    toHex: toHex,
    toDecimal: toDecimal,
    fromDecimal: fromDecimal,
    toUtf8: toUtf8,
    toAscii: toAscii,
    fromUtf8: fromUtf8,
    fromAscii: fromAscii,
    transformToFullName: transformToFullName,
    extractDisplayName: extractDisplayName,
    extractTypeName: extractTypeName,
    toWei: toWei,
    fromWei: fromWei,
    toBigNumber: toBigNumber,
    toTwosComplement: toTwosComplement,
    toAddress: toAddress,
    isBigNumber: isBigNumber,
    isStrictAddress: isStrictAddress,
    isAddress: isAddress,
    isChecksumAddress: isChecksumAddress,
    toChecksumAddress: toChecksumAddress,
    isFunction: isFunction,
    isString: isString,
    isObject: isObject,
    isBoolean: isBoolean,
    isArray: isArray,
    isJson: isJson,
    isBloom: isBloom,
    isTopic: isTopic,
};


/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = Key;

var assert = __webpack_require__(6);
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var Fingerprint = __webpack_require__(132);
var Signature = __webpack_require__(57);
var DiffieHellman = __webpack_require__(239).DiffieHellman;
var errs = __webpack_require__(56);
var utils = __webpack_require__(12);
var PrivateKey = __webpack_require__(20);
var edCompat;

try {
	edCompat = __webpack_require__(419);
} catch (e) {
	/* Just continue through, and bail out if we try to use it. */
}

var InvalidAlgorithmError = errs.InvalidAlgorithmError;
var KeyParseError = errs.KeyParseError;

var formats = {};
formats['auto'] = __webpack_require__(420);
formats['pem'] = __webpack_require__(66);
formats['pkcs1'] = __webpack_require__(241);
formats['pkcs8'] = __webpack_require__(133);
formats['rfc4253'] = __webpack_require__(82);
formats['ssh'] = __webpack_require__(421);
formats['ssh-private'] = __webpack_require__(169);
formats['openssh'] = formats['ssh-private'];
formats['dnssec'] = __webpack_require__(240);

function Key(opts) {
	assert.object(opts, 'options');
	assert.arrayOfObject(opts.parts, 'options.parts');
	assert.string(opts.type, 'options.type');
	assert.optionalString(opts.comment, 'options.comment');

	var algInfo = algs.info[opts.type];
	if (typeof (algInfo) !== 'object')
		throw (new InvalidAlgorithmError(opts.type));

	var partLookup = {};
	for (var i = 0; i < opts.parts.length; ++i) {
		var part = opts.parts[i];
		partLookup[part.name] = part;
	}

	this.type = opts.type;
	this.parts = opts.parts;
	this.part = partLookup;
	this.comment = undefined;
	this.source = opts.source;

	/* for speeding up hashing/fingerprint operations */
	this._rfc4253Cache = opts._rfc4253Cache;
	this._hashCache = {};

	var sz;
	this.curve = undefined;
	if (this.type === 'ecdsa') {
		var curve = this.part.curve.data.toString();
		this.curve = curve;
		sz = algs.curves[curve].size;
	} else if (this.type === 'ed25519' || this.type === 'curve25519') {
		sz = 256;
		this.curve = 'curve25519';
	} else {
		var szPart = this.part[algInfo.sizePart];
		sz = szPart.data.length;
		sz = sz * 8 - utils.countZeros(szPart.data);
	}
	this.size = sz;
}

Key.formats = formats;

Key.prototype.toBuffer = function (format, options) {
	if (format === undefined)
		format = 'ssh';
	assert.string(format, 'format');
	assert.object(formats[format], 'formats[format]');
	assert.optionalObject(options, 'options');

	if (format === 'rfc4253') {
		if (this._rfc4253Cache === undefined)
			this._rfc4253Cache = formats['rfc4253'].write(this);
		return (this._rfc4253Cache);
	}

	return (formats[format].write(this, options));
};

Key.prototype.toString = function (format, options) {
	return (this.toBuffer(format, options).toString());
};

Key.prototype.hash = function (algo) {
	assert.string(algo, 'algorithm');
	algo = algo.toLowerCase();
	if (algs.hashAlgs[algo] === undefined)
		throw (new InvalidAlgorithmError(algo));

	if (this._hashCache[algo])
		return (this._hashCache[algo]);
	var hash = crypto.createHash(algo).
	    update(this.toBuffer('rfc4253')).digest();
	this._hashCache[algo] = hash;
	return (hash);
};

Key.prototype.fingerprint = function (algo) {
	if (algo === undefined)
		algo = 'sha256';
	assert.string(algo, 'algorithm');
	var opts = {
		type: 'key',
		hash: this.hash(algo),
		algorithm: algo
	};
	return (new Fingerprint(opts));
};

Key.prototype.defaultHashAlgorithm = function () {
	var hashAlgo = 'sha1';
	if (this.type === 'rsa')
		hashAlgo = 'sha256';
	if (this.type === 'dsa' && this.size > 1024)
		hashAlgo = 'sha256';
	if (this.type === 'ed25519')
		hashAlgo = 'sha512';
	if (this.type === 'ecdsa') {
		if (this.size <= 256)
			hashAlgo = 'sha256';
		else if (this.size <= 384)
			hashAlgo = 'sha384';
		else
			hashAlgo = 'sha512';
	}
	return (hashAlgo);
};

Key.prototype.createVerify = function (hashAlgo) {
	if (hashAlgo === undefined)
		hashAlgo = this.defaultHashAlgorithm();
	assert.string(hashAlgo, 'hash algorithm');

	/* ED25519 is not supported by OpenSSL, use a javascript impl. */
	if (this.type === 'ed25519' && edCompat !== undefined)
		return (new edCompat.Verifier(this, hashAlgo));
	if (this.type === 'curve25519')
		throw (new Error('Curve25519 keys are not suitable for ' +
		    'signing or verification'));

	var v, nm, err;
	try {
		nm = hashAlgo.toUpperCase();
		v = crypto.createVerify(nm);
	} catch (e) {
		err = e;
	}
	if (v === undefined || (err instanceof Error &&
	    err.message.match(/Unknown message digest/))) {
		nm = 'RSA-';
		nm += hashAlgo.toUpperCase();
		v = crypto.createVerify(nm);
	}
	assert.ok(v, 'failed to create verifier');
	var oldVerify = v.verify.bind(v);
	var key = this.toBuffer('pkcs8');
	var curve = this.curve;
	var self = this;
	v.verify = function (signature, fmt) {
		if (Signature.isSignature(signature, [2, 0])) {
			if (signature.type !== self.type)
				return (false);
			if (signature.hashAlgorithm &&
			    signature.hashAlgorithm !== hashAlgo)
				return (false);
			if (signature.curve && self.type === 'ecdsa' &&
			    signature.curve !== curve)
				return (false);
			return (oldVerify(key, signature.toBuffer('asn1')));

		} else if (typeof (signature) === 'string' ||
		    Buffer.isBuffer(signature)) {
			return (oldVerify(key, signature, fmt));

		/*
		 * Avoid doing this on valid arguments, walking the prototype
		 * chain can be quite slow.
		 */
		} else if (Signature.isSignature(signature, [1, 0])) {
			throw (new Error('signature was created by too old ' +
			    'a version of sshpk and cannot be verified'));

		} else {
			throw (new TypeError('signature must be a string, ' +
			    'Buffer, or Signature object'));
		}
	};
	return (v);
};

Key.prototype.createDiffieHellman = function () {
	if (this.type === 'rsa')
		throw (new Error('RSA keys do not support Diffie-Hellman'));

	return (new DiffieHellman(this));
};
Key.prototype.createDH = Key.prototype.createDiffieHellman;

Key.parse = function (data, format, options) {
	if (typeof (data) !== 'string')
		assert.buffer(data, 'data');
	if (format === undefined)
		format = 'auto';
	assert.string(format, 'format');
	if (typeof (options) === 'string')
		options = { filename: options };
	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	assert.optionalString(options.filename, 'options.filename');
	if (options.filename === undefined)
		options.filename = '(unnamed)';

	assert.object(formats[format], 'formats[format]');

	try {
		var k = formats[format].read(data, options);
		if (k instanceof PrivateKey)
			k = k.toPublic();
		if (!k.comment)
			k.comment = options.filename;
		return (k);
	} catch (e) {
		if (e.name === 'KeyEncryptedError')
			throw (e);
		throw (new KeyParseError(options.filename, format, e));
	}
};

Key.isKey = function (obj, ver) {
	return (utils.isCompatible(obj, Key, ver));
};

/*
 * API versions for Key:
 * [1,0] -- initial ver, may take Signature for createVerify or may not
 * [1,1] -- added pkcs1, pkcs8 formats
 * [1,2] -- added auto, ssh-private, openssh formats
 * [1,3] -- added defaultHashAlgorithm
 * [1,4] -- added ed support, createDH
 * [1,5] -- first explicitly tagged version
 * [1,6] -- changed ed25519 part names
 */
Key.prototype._sshpkApiVersion = [1, 6];

Key._oldVersionDetect = function (obj) {
	assert.func(obj.toBuffer);
	assert.func(obj.fingerprint);
	if (obj.createDH)
		return ([1, 4]);
	if (obj.defaultHashAlgorithm)
		return ([1, 3]);
	if (obj.formats['auto'])
		return ([1, 2]);
	if (obj.formats['pkcs1'])
		return ([1, 1]);
	return ([1, 0]);
};


/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file utils.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 *
 * @module utils
 */

/**
 * Utility functions
 *
 * @class [utils] utils
 * @constructor
 */


var BigNumber = __webpack_require__(108);
var sha3 = __webpack_require__(137);
var utf8 = __webpack_require__(245);

var unitMap = {
    'noether':      '0',
    'wei':          '1',
    'kwei':         '1000',
    'Kwei':         '1000',
    'babbage':      '1000',
    'femtoether':   '1000',
    'mwei':         '1000000',
    'Mwei':         '1000000',
    'lovelace':     '1000000',
    'picoether':    '1000000',
    'gwei':         '1000000000',
    'Gwei':         '1000000000',
    'shannon':      '1000000000',
    'nanoether':    '1000000000',
    'nano':         '1000000000',
    'szabo':        '1000000000000',
    'microether':   '1000000000000',
    'micro':        '1000000000000',
    'finney':       '1000000000000000',
    'milliether':   '1000000000000000',
    'milli':        '1000000000000000',
    'ether':        '1000000000000000000',
    'kether':       '1000000000000000000000',
    'grand':        '1000000000000000000000',
    'mether':       '1000000000000000000000000',
    'gether':       '1000000000000000000000000000',
    'tether':       '1000000000000000000000000000000'
};

/**
 * Should be called to pad string to expected length
 *
 * @method padLeft
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padLeft = function (string, chars, sign) {
    return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
};

/**
 * Should be called to pad string to expected length
 *
 * @method padRight
 * @param {String} string to be padded
 * @param {Number} characters that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var padRight = function (string, chars, sign) {
    return string + (new Array(chars - string.length + 1).join(sign ? sign : "0"));
};

/**
 * Should be called to get utf8 from it's hex representation
 *
 * @method toUtf8
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toUtf8 = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        if (code === 0)
            break;
        str += String.fromCharCode(code);
    }

    return utf8.decode(str);
};

/**
 * Should be called to get ascii from it's hex representation
 *
 * @method toAscii
 * @param {String} string in hex
 * @returns {String} ascii string representation of hex value
 */
var toAscii = function(hex) {
// Find termination
    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        str += String.fromCharCode(code);
    }

    return str;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of utf8 string
 *
 * @method fromUtf8
 * @param {String} string
 * @param {Boolean} allowZero to convert code point zero to 00 instead of end of string
 * @returns {String} hex representation of input string
 */
var fromUtf8 = function(str, allowZero) {
    str = utf8.encode(str);
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        if (code === 0) {
            if (allowZero) {
                hex += '00';
            } else {
                break;
            }
        } else {
            var n = code.toString(16);
            hex += n.length < 2 ? '0' + n : n;
        }
    }

    return "0x" + hex;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of ascii string
 *
 * @method fromAscii
 * @param {String} string
 * @param {Number} optional padding
 * @returns {String} hex representation of input string
 */
var fromAscii = function(str) {
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};

/**
 * Should be used to create full function/event name from json abi
 *
 * @method transformToFullName
 * @param {Object} json-abi
 * @return {String} full fnction/event name
 */
var transformToFullName = function (json) {
    if (json.name.indexOf('(') !== -1) {
        return json.name;
    }

    var typeName = json.inputs.map(function(i){return i.type; }).join();
    return json.name + '(' + typeName + ')';
};

/**
 * Should be called to get display name of contract function
 *
 * @method extractDisplayName
 * @param {String} name of function/event
 * @returns {String} display name for function/event eg. multiply(uint256) -> multiply
 */
var extractDisplayName = function (name) {
    var stBracket = name.indexOf('(');
    var endBracket = name.indexOf(')');
    return (stBracket !== -1 && endBracket !== -1) ? name.substr(0, stBracket) : name;
};

/**
 * Should be called to get type name of contract function
 *
 * @method extractTypeName
 * @param {String} name of function/event
 * @returns {String} type name for function/event eg. multiply(uint256) -> uint256
 */
var extractTypeName = function (name) {
    var stBracket = name.indexOf('(');
    var endBracket = name.indexOf(')');
    return (stBracket !== -1 && endBracket !== -1) ? name.substr(stBracket + 1, endBracket - stBracket - 1).replace(' ', '') : "";
};

/**
 * Converts value to it's decimal representation in string
 *
 * @method toDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var toDecimal = function (value) {
    return toBigNumber(value).toNumber();
};

/**
 * Converts value to it's hex representation
 *
 * @method fromDecimal
 * @param {String|Number|BigNumber}
 * @return {String}
 */
var fromDecimal = function (value) {
    var number = toBigNumber(value);
    var result = number.toString(16);

    return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result;
};

/**
 * Auto converts any given value into it's hex representation.
 *
 * And even stringifys objects before.
 *
 * @method toHex
 * @param {String|Number|BigNumber|Object}
 * @return {String}
 */
var toHex = function (val) {
    /*jshint maxcomplexity: 8 */

    if (isBoolean(val))
        return fromDecimal(+val);

    if (isBigNumber(val))
        return fromDecimal(val);

    if (typeof val === 'object')
        return fromUtf8(JSON.stringify(val));

    // if its a negative number, pass it through fromDecimal
    if (isString(val)) {
        if (val.indexOf('-0x') === 0)
            return fromDecimal(val);
        else if(val.indexOf('0x') === 0)
            return val;
        else if (!isFinite(val))
            return fromUtf8(val,1);
    }

    return fromDecimal(val);
};

/**
 * Returns value of unit in Wei
 *
 * @method getValueOfUnit
 * @param {String} unit the unit to convert to, default ether
 * @returns {BigNumber} value of the unit (in Wei)
 * @throws error if the unit is not correct:w
 */
var getValueOfUnit = function (unit) {
    unit = unit ? unit.toLowerCase() : 'ether';
    var unitValue = unitMap[unit];
    if (unitValue === undefined) {
        throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2));
    }
    return new BigNumber(unitValue, 10);
};

/**
 * Takes a number of wei and converts it to any other ether unit.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method fromWei
 * @param {Number|String} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert to, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var fromWei = function(number, unit) {
    var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes a number of a unit and converts it to wei.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method toWei
 * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert from, default ether
 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number
*/
var toWei = function(number, unit) {
    var returnValue = toBigNumber(number).times(getValueOfUnit(unit));

    return isBigNumber(number) ? returnValue : returnValue.toString(10);
};

/**
 * Takes an input and transforms it into an bignumber
 *
 * @method toBigNumber
 * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber
 * @return {BigNumber} BigNumber
*/
var toBigNumber = function(number) {
    /*jshint maxcomplexity:5 */
    number = number || 0;
    if (isBigNumber(number))
        return number;

    if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
        return new BigNumber(number.replace('0x',''), 16);
    }

    return new BigNumber(number.toString(10), 10);
};

/**
 * Takes and input transforms it into bignumber and if it is negative value, into two's complement
 *
 * @method toTwosComplement
 * @param {Number|String|BigNumber}
 * @return {BigNumber}
 */
var toTwosComplement = function (number) {
    var bigNumber = toBigNumber(number).round();
    if (bigNumber.lessThan(0)) {
        return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
    }
    return bigNumber;
};

/**
 * Checks if the given string is strictly an address
 *
 * @method isStrictAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isStrictAddress = function (address) {
    return /^0x[0-9a-f]{40}$/i.test(address);
};

/**
 * Checks if the given string is an address
 *
 * @method isAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isAddress = function (address) {
    if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
        // check if it has the basic requirements of an address
        return false;
    } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {
        // If it's all small caps or all all caps, return true
        return true;
    } else {
        // Otherwise check each case
        return isChecksumAddress(address);
    }
};

/**
 * Checks if the given string is a checksummed address
 *
 * @method isChecksumAddress
 * @param {String} address the given HEX adress
 * @return {Boolean}
*/
var isChecksumAddress = function (address) {
    // Check each case
    address = address.replace('0x','');
    var addressHash = sha3(address.toLowerCase());

    for (var i = 0; i < 40; i++ ) {
        // the nth letter should be uppercase if the nth digit of casemap is 1
        if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
            return false;
        }
    }
    return true;
};



/**
 * Makes a checksum address
 *
 * @method toChecksumAddress
 * @param {String} address the given HEX adress
 * @return {String}
*/
var toChecksumAddress = function (address) {
    if (typeof address === 'undefined') return '';

    address = address.toLowerCase().replace('0x','');
    var addressHash = sha3(address);
    var checksumAddress = '0x';

    for (var i = 0; i < address.length; i++ ) {
        // If ith character is 9 to f then make it uppercase
        if (parseInt(addressHash[i], 16) > 7) {
          checksumAddress += address[i].toUpperCase();
        } else {
            checksumAddress += address[i];
        }
    }
    return checksumAddress;
};

/**
 * Transforms given string to valid 20 bytes-length addres with 0x prefix
 *
 * @method toAddress
 * @param {String} address
 * @return {String} formatted address
 */
var toAddress = function (address) {
    if (isStrictAddress(address)) {
        return address;
    }

    if (/^[0-9a-f]{40}$/.test(address)) {
        return '0x' + address;
    }

    return '0x' + padLeft(toHex(address).substr(2), 40);
};

/**
 * Returns true if object is BigNumber, otherwise false
 *
 * @method isBigNumber
 * @param {Object}
 * @return {Boolean}
 */
var isBigNumber = function (object) {
    return object instanceof BigNumber ||
        (object && object.constructor && object.constructor.name === 'BigNumber');
};

/**
 * Returns true if object is string, otherwise false
 *
 * @method isString
 * @param {Object}
 * @return {Boolean}
 */
var isString = function (object) {
    return typeof object === 'string' ||
        (object && object.constructor && object.constructor.name === 'String');
};

/**
 * Returns true if object is function, otherwise false
 *
 * @method isFunction
 * @param {Object}
 * @return {Boolean}
 */
var isFunction = function (object) {
    return typeof object === 'function';
};

/**
 * Returns true if object is Objet, otherwise false
 *
 * @method isObject
 * @param {Object}
 * @return {Boolean}
 */
var isObject = function (object) {
    return object !== null && !(Array.isArray(object)) && typeof object === 'object';
};

/**
 * Returns true if object is boolean, otherwise false
 *
 * @method isBoolean
 * @param {Object}
 * @return {Boolean}
 */
var isBoolean = function (object) {
    return typeof object === 'boolean';
};

/**
 * Returns true if object is array, otherwise false
 *
 * @method isArray
 * @param {Object}
 * @return {Boolean}
 */
var isArray = function (object) {
    return Array.isArray(object);
};

/**
 * Returns true if given string is valid json object
 *
 * @method isJson
 * @param {String}
 * @return {Boolean}
 */
var isJson = function (str) {
    try {
        return !!JSON.parse(str);
    } catch (e) {
        return false;
    }
};

/**
 * Returns true if given string is a valid Ethereum block header bloom.
 *
 * @method isBloom
 * @param {String} hex encoded bloom filter
 * @return {Boolean}
 */
var isBloom = function (bloom) {
    if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) {
        return true;
    }
    return false;
};

/**
 * Returns true if given string is a valid log topic.
 *
 * @method isTopic
 * @param {String} hex encoded topic
 * @return {Boolean}
 */
var isTopic = function (topic) {
    if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) {
        return true;
    }
    return false;
};

module.exports = {
    padLeft: padLeft,
    padRight: padRight,
    toHex: toHex,
    toDecimal: toDecimal,
    fromDecimal: fromDecimal,
    toUtf8: toUtf8,
    toAscii: toAscii,
    fromUtf8: fromUtf8,
    fromAscii: fromAscii,
    transformToFullName: transformToFullName,
    extractDisplayName: extractDisplayName,
    extractTypeName: extractTypeName,
    toWei: toWei,
    fromWei: fromWei,
    toBigNumber: toBigNumber,
    toTwosComplement: toTwosComplement,
    toAddress: toAddress,
    isBigNumber: isBigNumber,
    isStrictAddress: isStrictAddress,
    isAddress: isAddress,
    isChecksumAddress: isChecksumAddress,
    toChecksumAddress: toChecksumAddress,
    isFunction: isFunction,
    isString: isString,
    isObject: isObject,
    isBoolean: isBoolean,
    isArray: isArray,
    isJson: isJson,
    isBloom: isBloom,
    isTopic: isTopic,
};


/***/ }),
/* 18 */
/***/ (function(module, exports) {

module.exports = require("events");

/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

var Buffer = __webpack_require__(10).Buffer;

var algInfo = {
	'dsa': {
		parts: ['p', 'q', 'g', 'y'],
		sizePart: 'p'
	},
	'rsa': {
		parts: ['e', 'n'],
		sizePart: 'n'
	},
	'ecdsa': {
		parts: ['curve', 'Q'],
		sizePart: 'Q'
	},
	'ed25519': {
		parts: ['A'],
		sizePart: 'A'
	}
};
algInfo['curve25519'] = algInfo['ed25519'];

var algPrivInfo = {
	'dsa': {
		parts: ['p', 'q', 'g', 'y', 'x']
	},
	'rsa': {
		parts: ['n', 'e', 'd', 'iqmp', 'p', 'q']
	},
	'ecdsa': {
		parts: ['curve', 'Q', 'd']
	},
	'ed25519': {
		parts: ['A', 'k']
	}
};
algPrivInfo['curve25519'] = algPrivInfo['ed25519'];

var hashAlgs = {
	'md5': true,
	'sha1': true,
	'sha256': true,
	'sha384': true,
	'sha512': true
};

/*
 * Taken from
 * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf
 */
var curves = {
	'nistp256': {
		size: 256,
		pkcs8oid: '1.2.840.10045.3.1.7',
		p: Buffer.from(('00' +
		    'ffffffff 00000001 00000000 00000000' +
		    '00000000 ffffffff ffffffff ffffffff').
		    replace(/ /g, ''), 'hex'),
		a: Buffer.from(('00' +
		    'FFFFFFFF 00000001 00000000 00000000' +
		    '00000000 FFFFFFFF FFFFFFFF FFFFFFFC').
		    replace(/ /g, ''), 'hex'),
		b: Buffer.from((
		    '5ac635d8 aa3a93e7 b3ebbd55 769886bc' +
		    '651d06b0 cc53b0f6 3bce3c3e 27d2604b').
		    replace(/ /g, ''), 'hex'),
		s: Buffer.from(('00' +
		    'c49d3608 86e70493 6a6678e1 139d26b7' +
		    '819f7e90').
		    replace(/ /g, ''), 'hex'),
		n: Buffer.from(('00' +
		    'ffffffff 00000000 ffffffff ffffffff' +
		    'bce6faad a7179e84 f3b9cac2 fc632551').
		    replace(/ /g, ''), 'hex'),
		G: Buffer.from(('04' +
		    '6b17d1f2 e12c4247 f8bce6e5 63a440f2' +
		    '77037d81 2deb33a0 f4a13945 d898c296' +
		    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' +
		    '2bce3357 6b315ece cbb64068 37bf51f5').
		    replace(/ /g, ''), 'hex')
	},
	'nistp384': {
		size: 384,
		pkcs8oid: '1.3.132.0.34',
		p: Buffer.from(('00' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff ffffffff fffffffe' +
		    'ffffffff 00000000 00000000 ffffffff').
		    replace(/ /g, ''), 'hex'),
		a: Buffer.from(('00' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' +
		    'FFFFFFFF 00000000 00000000 FFFFFFFC').
		    replace(/ /g, ''), 'hex'),
		b: Buffer.from((
		    'b3312fa7 e23ee7e4 988e056b e3f82d19' +
		    '181d9c6e fe814112 0314088f 5013875a' +
		    'c656398d 8a2ed19d 2a85c8ed d3ec2aef').
		    replace(/ /g, ''), 'hex'),
		s: Buffer.from(('00' +
		    'a335926a a319a27a 1d00896a 6773a482' +
		    '7acdac73').
		    replace(/ /g, ''), 'hex'),
		n: Buffer.from(('00' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff c7634d81 f4372ddf' +
		    '581a0db2 48b0a77a ecec196a ccc52973').
		    replace(/ /g, ''), 'hex'),
		G: Buffer.from(('04' +
		    'aa87ca22 be8b0537 8eb1c71e f320ad74' +
		    '6e1d3b62 8ba79b98 59f741e0 82542a38' +
		    '5502f25d bf55296c 3a545e38 72760ab7' +
		    '3617de4a 96262c6f 5d9e98bf 9292dc29' +
		    'f8f41dbd 289a147c e9da3113 b5f0b8c0' +
		    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f').
		    replace(/ /g, ''), 'hex')
	},
	'nistp521': {
		size: 521,
		pkcs8oid: '1.3.132.0.35',
		p: Buffer.from((
		    '01ffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffff').replace(/ /g, ''), 'hex'),
		a: Buffer.from(('01FF' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' +
		    'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC').
		    replace(/ /g, ''), 'hex'),
		b: Buffer.from(('51' +
		    '953eb961 8e1c9a1f 929a21a0 b68540ee' +
		    'a2da725b 99b315f3 b8b48991 8ef109e1' +
		    '56193951 ec7e937b 1652c0bd 3bb1bf07' +
		    '3573df88 3d2c34f1 ef451fd4 6b503f00').
		    replace(/ /g, ''), 'hex'),
		s: Buffer.from(('00' +
		    'd09e8800 291cb853 96cc6717 393284aa' +
		    'a0da64ba').replace(/ /g, ''), 'hex'),
		n: Buffer.from(('01ff' +
		    'ffffffff ffffffff ffffffff ffffffff' +
		    'ffffffff ffffffff ffffffff fffffffa' +
		    '51868783 bf2f966b 7fcc0148 f709a5d0' +
		    '3bb5c9b8 899c47ae bb6fb71e 91386409').
		    replace(/ /g, ''), 'hex'),
		G: Buffer.from(('04' +
		    '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' +
		         '9c648139 053fb521 f828af60 6b4d3dba' +
		         'a14b5e77 efe75928 fe1dc127 a2ffa8de' +
		         '3348b3c1 856a429b f97e7e31 c2e5bd66' +
		    '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' +
		         '98f54449 579b4468 17afbd17 273e662c' +
		         '97ee7299 5ef42640 c550b901 3fad0761' +
		         '353c7086 a272c240 88be9476 9fd16650').
		    replace(/ /g, ''), 'hex')
	}
};

module.exports = {
	info: algInfo,
	privInfo: algPrivInfo,
	hashAlgs: hashAlgs,
	curves: curves
};


/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = PrivateKey;

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var Fingerprint = __webpack_require__(132);
var Signature = __webpack_require__(57);
var errs = __webpack_require__(56);
var util = __webpack_require__(2);
var utils = __webpack_require__(12);
var dhe = __webpack_require__(239);
var generateECDSA = dhe.generateECDSA;
var generateED25519 = dhe.generateED25519;
var edCompat;
var nacl;

try {
	edCompat = __webpack_require__(419);
} catch (e) {
	/* Just continue through, and bail out if we try to use it. */
}

var Key = __webpack_require__(16);

var InvalidAlgorithmError = errs.InvalidAlgorithmError;
var KeyParseError = errs.KeyParseError;
var KeyEncryptedError = errs.KeyEncryptedError;

var formats = {};
formats['auto'] = __webpack_require__(420);
formats['pem'] = __webpack_require__(66);
formats['pkcs1'] = __webpack_require__(241);
formats['pkcs8'] = __webpack_require__(133);
formats['rfc4253'] = __webpack_require__(82);
formats['ssh-private'] = __webpack_require__(169);
formats['openssh'] = formats['ssh-private'];
formats['ssh'] = formats['ssh-private'];
formats['dnssec'] = __webpack_require__(240);

function PrivateKey(opts) {
	assert.object(opts, 'options');
	Key.call(this, opts);

	this._pubCache = undefined;
}
util.inherits(PrivateKey, Key);

PrivateKey.formats = formats;

PrivateKey.prototype.toBuffer = function (format, options) {
	if (format === undefined)
		format = 'pkcs1';
	assert.string(format, 'format');
	assert.object(formats[format], 'formats[format]');
	assert.optionalObject(options, 'options');

	return (formats[format].write(this, options));
};

PrivateKey.prototype.hash = function (algo) {
	return (this.toPublic().hash(algo));
};

PrivateKey.prototype.toPublic = function () {
	if (this._pubCache)
		return (this._pubCache);

	var algInfo = algs.info[this.type];
	var pubParts = [];
	for (var i = 0; i < algInfo.parts.length; ++i) {
		var p = algInfo.parts[i];
		pubParts.push(this.part[p]);
	}

	this._pubCache = new Key({
		type: this.type,
		source: this,
		parts: pubParts
	});
	if (this.comment)
		this._pubCache.comment = this.comment;
	return (this._pubCache);
};

PrivateKey.prototype.derive = function (newType) {
	assert.string(newType, 'type');
	var priv, pub, pair;

	if (this.type === 'ed25519' && newType === 'curve25519') {
		if (nacl === undefined)
			nacl = __webpack_require__(58);

		priv = this.part.k.data;
		if (priv[0] === 0x00)
			priv = priv.slice(1);

		pair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv));
		pub = Buffer.from(pair.publicKey);

		return (new PrivateKey({
			type: 'curve25519',
			parts: [
				{ name: 'A', data: utils.mpNormalize(pub) },
				{ name: 'k', data: utils.mpNormalize(priv) }
			]
		}));
	} else if (this.type === 'curve25519' && newType === 'ed25519') {
		if (nacl === undefined)
			nacl = __webpack_require__(58);

		priv = this.part.k.data;
		if (priv[0] === 0x00)
			priv = priv.slice(1);

		pair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv));
		pub = Buffer.from(pair.publicKey);

		return (new PrivateKey({
			type: 'ed25519',
			parts: [
				{ name: 'A', data: utils.mpNormalize(pub) },
				{ name: 'k', data: utils.mpNormalize(priv) }
			]
		}));
	}
	throw (new Error('Key derivation not supported from ' + this.type +
	    ' to ' + newType));
};

PrivateKey.prototype.createVerify = function (hashAlgo) {
	return (this.toPublic().createVerify(hashAlgo));
};

PrivateKey.prototype.createSign = function (hashAlgo) {
	if (hashAlgo === undefined)
		hashAlgo = this.defaultHashAlgorithm();
	assert.string(hashAlgo, 'hash algorithm');

	/* ED25519 is not supported by OpenSSL, use a javascript impl. */
	if (this.type === 'ed25519' && edCompat !== undefined)
		return (new edCompat.Signer(this, hashAlgo));
	if (this.type === 'curve25519')
		throw (new Error('Curve25519 keys are not suitable for ' +
		    'signing or verification'));

	var v, nm, err;
	try {
		nm = hashAlgo.toUpperCase();
		v = crypto.createSign(nm);
	} catch (e) {
		err = e;
	}
	if (v === undefined || (err instanceof Error &&
	    err.message.match(/Unknown message digest/))) {
		nm = 'RSA-';
		nm += hashAlgo.toUpperCase();
		v = crypto.createSign(nm);
	}
	assert.ok(v, 'failed to create verifier');
	var oldSign = v.sign.bind(v);
	var key = this.toBuffer('pkcs1');
	var type = this.type;
	var curve = this.curve;
	v.sign = function () {
		var sig = oldSign(key);
		if (typeof (sig) === 'string')
			sig = Buffer.from(sig, 'binary');
		sig = Signature.parse(sig, type, 'asn1');
		sig.hashAlgorithm = hashAlgo;
		sig.curve = curve;
		return (sig);
	};
	return (v);
};

PrivateKey.parse = function (data, format, options) {
	if (typeof (data) !== 'string')
		assert.buffer(data, 'data');
	if (format === undefined)
		format = 'auto';
	assert.string(format, 'format');
	if (typeof (options) === 'string')
		options = { filename: options };
	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	assert.optionalString(options.filename, 'options.filename');
	if (options.filename === undefined)
		options.filename = '(unnamed)';

	assert.object(formats[format], 'formats[format]');

	try {
		var k = formats[format].read(data, options);
		assert.ok(k instanceof PrivateKey, 'key is not a private key');
		if (!k.comment)
			k.comment = options.filename;
		return (k);
	} catch (e) {
		if (e.name === 'KeyEncryptedError')
			throw (e);
		throw (new KeyParseError(options.filename, format, e));
	}
};

PrivateKey.isPrivateKey = function (obj, ver) {
	return (utils.isCompatible(obj, PrivateKey, ver));
};

PrivateKey.generate = function (type, options) {
	if (options === undefined)
		options = {};
	assert.object(options, 'options');

	switch (type) {
	case 'ecdsa':
		if (options.curve === undefined)
			options.curve = 'nistp256';
		assert.string(options.curve, 'options.curve');
		return (generateECDSA(options.curve));
	case 'ed25519':
		return (generateED25519());
	default:
		throw (new Error('Key generation not supported with key ' +
		    'type "' + type + '"'));
	}
};

/*
 * API versions for PrivateKey:
 * [1,0] -- initial ver
 * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats
 * [1,2] -- added defaultHashAlgorithm
 * [1,3] -- added derive, ed, createDH
 * [1,4] -- first tagged version
 * [1,5] -- changed ed25519 part names and format
 */
PrivateKey.prototype._sshpkApiVersion = [1, 5];

PrivateKey._oldVersionDetect = function (obj) {
	assert.func(obj.toPublic);
	assert.func(obj.createSign);
	if (obj.derive)
		return ([1, 3]);
	if (obj.defaultHashAlgorithm)
		return ([1, 2]);
	if (obj.formats['auto'])
		return ([1, 1]);
	return ([1, 0]);
};


/***/ }),
/* 21 */
/***/ (function(module, exports) {

var Expect = {
  options: function(options, expected_keys) {
    expected_keys.forEach(function(key) {
      if (options[key] == null) {
        throw new Error("Expected parameter '" + key + "' not passed to function.");
      }
    });
  },

  one: function(options, expected_keys) {
    var found = [];

    expected_keys.forEach(function(key) {
      if (options[key] != null) {
        found.push(1);
      } else {
        found.push(0);
      }
    });

    var total = found.reduce(function(t, value) {
      return t + value;
    });

    // If this doesn't work in all cases, perhaps we should
    // create an expect.onlyOne() function.
    if (total >= 1) return;

    throw new Error("Expected one of the following parameters, but found none: " + expected_keys.join(", "));
  }
}

module.exports = Expect;


/***/ }),
/* 22 */
/***/ (function(module, exports) {

module.exports = require("stream");

/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

var ExtendableBuiltin = __webpack_require__(1220);
var inherits = __webpack_require__(2).inherits;

inherits(ExtendableError, ExtendableBuiltin(Error));

// From: http://stackoverflow.com/questions/31089801/extending-error-in-javascript-with-es6-syntax
function ExtendableError(message) {
  ExtendableError.super_.call(this);
  this.message = message;
  this.stack = (new Error(message)).stack;
  this.name = this.constructor.name;
};

// Hack. Likely won't be formatted correctly when there are
// 10 or more errors. But if there's 10 or more errors, I'm guessing
// formatting won't matter so much.
ExtendableError.prototype.formatForMocha = function() {
  this.message = this.message.replace(/\n/g, "\n     ");
};

module.exports = ExtendableError;


/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.10';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading and trailing whitespace. */
  var reTrim = /^\s+|\s+$/g,
      reTrimStart = /^\s+/,
      reTrimEnd = /\s+$/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Gets the value at `key`, unless `key` is "__proto__".
   *
   * @private
   * @param {Object} object The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function safeGet(object, key) {
    return key == '__proto__'
      ? undefined
      : object[key];
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });

        return result;
      }

      if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });

        return result;
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        if (isObject(srcValue)) {
          stack || (stack = new Stack);
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      var index = -1;
      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      value = iteratee(value);

      var low = 0,
          high = array == null ? 0 : array.length,
          valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(array);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(object);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('déjà vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      var sourceURL = '//# sourceURL=' +
        ('sourceURL' in options
          ? options.sourceURL
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrim, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimEnd, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = (lodashFunc.name + ''),
            names = realNames[key] || (realNames[key] = []);

        names.push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (true) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
      return _;
    }.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = _)._ = _;
    // Export for CommonJS support.
    freeExports._ = _;
  }
  else {
    // Export to the global object.
    root._ = _;
  }
}.call(this));

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(1106);

// dont override global variable
if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
    window.Web3 = Web3;
}

module.exports = Web3;


/***/ }),
/* 26 */
/***/ (function(module, exports) {

var core = module.exports = { version: '2.5.7' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),
/* 27 */
/***/ (function(module, exports) {

module.exports = require("http");

/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {(function (global, factory) {
   true ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (factory((global.async = global.async || {})));
}(this, (function (exports) { 'use strict';

function slice(arrayLike, start) {
    start = start|0;
    var newLen = Math.max(arrayLike.length - start, 0);
    var newArr = Array(newLen);
    for(var idx = 0; idx < newLen; idx++)  {
        newArr[idx] = arrayLike[start + idx];
    }
    return newArr;
}

/**
 * Creates a continuation function with some arguments already applied.
 *
 * Useful as a shorthand when combined with other control flow functions. Any
 * arguments passed to the returned function are added to the arguments
 * originally passed to apply.
 *
 * @name apply
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {Function} fn - The function you want to eventually apply all
 * arguments to. Invokes with (arguments...).
 * @param {...*} arguments... - Any number of arguments to automatically apply
 * when the continuation is called.
 * @returns {Function} the partially-applied function
 * @example
 *
 * // using apply
 * async.parallel([
 *     async.apply(fs.writeFile, 'testfile1', 'test1'),
 *     async.apply(fs.writeFile, 'testfile2', 'test2')
 * ]);
 *
 *
 * // the same process without using apply
 * async.parallel([
 *     function(callback) {
 *         fs.writeFile('testfile1', 'test1', callback);
 *     },
 *     function(callback) {
 *         fs.writeFile('testfile2', 'test2', callback);
 *     }
 * ]);
 *
 * // It's possible to pass any number of additional arguments when calling the
 * // continuation:
 *
 * node> var fn = async.apply(sys.puts, 'one');
 * node> fn('two', 'three');
 * one
 * two
 * three
 */
var apply = function(fn/*, ...args*/) {
    var args = slice(arguments, 1);
    return function(/*callArgs*/) {
        var callArgs = slice(arguments);
        return fn.apply(null, args.concat(callArgs));
    };
};

var initialParams = function (fn) {
    return function (/*...args, callback*/) {
        var args = slice(arguments);
        var callback = args.pop();
        fn.call(this, args, callback);
    };
};

/**
 * Checks if `value` is the
 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(_.noop);
 * // => true
 *
 * _.isObject(null);
 * // => false
 */
function isObject(value) {
  var type = typeof value;
  return value != null && (type == 'object' || type == 'function');
}

var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';

function fallback(fn) {
    setTimeout(fn, 0);
}

function wrap(defer) {
    return function (fn/*, ...args*/) {
        var args = slice(arguments, 1);
        defer(function () {
            fn.apply(null, args);
        });
    };
}

var _defer;

if (hasSetImmediate) {
    _defer = setImmediate;
} else if (hasNextTick) {
    _defer = process.nextTick;
} else {
    _defer = fallback;
}

var setImmediate$1 = wrap(_defer);

/**
 * Take a sync function and make it async, passing its return value to a
 * callback. This is useful for plugging sync functions into a waterfall,
 * series, or other async functions. Any arguments passed to the generated
 * function will be passed to the wrapped function (except for the final
 * callback argument). Errors thrown will be passed to the callback.
 *
 * If the function passed to `asyncify` returns a Promise, that promises's
 * resolved/rejected state will be used to call the callback, rather than simply
 * the synchronous return value.
 *
 * This also means you can asyncify ES2017 `async` functions.
 *
 * @name asyncify
 * @static
 * @memberOf module:Utils
 * @method
 * @alias wrapSync
 * @category Util
 * @param {Function} func - The synchronous function, or Promise-returning
 * function to convert to an {@link AsyncFunction}.
 * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be
 * invoked with `(args..., callback)`.
 * @example
 *
 * // passing a regular synchronous function
 * async.waterfall([
 *     async.apply(fs.readFile, filename, "utf8"),
 *     async.asyncify(JSON.parse),
 *     function (data, next) {
 *         // data is the result of parsing the text.
 *         // If there was a parsing error, it would have been caught.
 *     }
 * ], callback);
 *
 * // passing a function returning a promise
 * async.waterfall([
 *     async.apply(fs.readFile, filename, "utf8"),
 *     async.asyncify(function (contents) {
 *         return db.model.create(contents);
 *     }),
 *     function (model, next) {
 *         // `model` is the instantiated model object.
 *         // If there was an error, this function would be skipped.
 *     }
 * ], callback);
 *
 * // es2017 example, though `asyncify` is not needed if your JS environment
 * // supports async functions out of the box
 * var q = async.queue(async.asyncify(async function(file) {
 *     var intermediateStep = await processFile(file);
 *     return await somePromise(intermediateStep)
 * }));
 *
 * q.push(files);
 */
function asyncify(func) {
    return initialParams(function (args, callback) {
        var result;
        try {
            result = func.apply(this, args);
        } catch (e) {
            return callback(e);
        }
        // if result is Promise object
        if (isObject(result) && typeof result.then === 'function') {
            result.then(function(value) {
                invokeCallback(callback, null, value);
            }, function(err) {
                invokeCallback(callback, err.message ? err : new Error(err));
            });
        } else {
            callback(null, result);
        }
    });
}

function invokeCallback(callback, error, value) {
    try {
        callback(error, value);
    } catch (e) {
        setImmediate$1(rethrow, e);
    }
}

function rethrow(error) {
    throw error;
}

var supportsSymbol = typeof Symbol === 'function';

function isAsync(fn) {
    return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';
}

function wrapAsync(asyncFn) {
    return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;
}

function applyEach$1(eachfn) {
    return function(fns/*, ...args*/) {
        var args = slice(arguments, 1);
        var go = initialParams(function(args, callback) {
            var that = this;
            return eachfn(fns, function (fn, cb) {
                wrapAsync(fn).apply(that, args.concat(cb));
            }, callback);
        });
        if (args.length) {
            return go.apply(this, args);
        }
        else {
            return go;
        }
    };
}

/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();

/** Built-in value references. */
var Symbol$1 = root.Symbol;

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/** Built-in value references. */
var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;

/**
 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the raw `toStringTag`.
 */
function getRawTag(value) {
  var isOwn = hasOwnProperty.call(value, symToStringTag$1),
      tag = value[symToStringTag$1];

  try {
    value[symToStringTag$1] = undefined;
    var unmasked = true;
  } catch (e) {}

  var result = nativeObjectToString.call(value);
  if (unmasked) {
    if (isOwn) {
      value[symToStringTag$1] = tag;
    } else {
      delete value[symToStringTag$1];
    }
  }
  return result;
}

/** Used for built-in method references. */
var objectProto$1 = Object.prototype;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString$1 = objectProto$1.toString;

/**
 * Converts `value` to a string using `Object.prototype.toString`.
 *
 * @private
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 */
function objectToString(value) {
  return nativeObjectToString$1.call(value);
}

/** `Object#toString` result references. */
var nullTag = '[object Null]';
var undefinedTag = '[object Undefined]';

/** Built-in value references. */
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;

/**
 * The base implementation of `getTag` without fallbacks for buggy environments.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
function baseGetTag(value) {
  if (value == null) {
    return value === undefined ? undefinedTag : nullTag;
  }
  return (symToStringTag && symToStringTag in Object(value))
    ? getRawTag(value)
    : objectToString(value);
}

/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]';
var funcTag = '[object Function]';
var genTag = '[object GeneratorFunction]';
var proxyTag = '[object Proxy]';

/**
 * Checks if `value` is classified as a `Function` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
 * @example
 *
 * _.isFunction(_);
 * // => true
 *
 * _.isFunction(/abc/);
 * // => false
 */
function isFunction(value) {
  if (!isObject(value)) {
    return false;
  }
  // The use of `Object#toString` avoids issues with the `typeof` operator
  // in Safari 9 which returns 'object' for typed arrays and other constructors.
  var tag = baseGetTag(value);
  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/**
 * Checks if `value` is a valid array-like length.
 *
 * **Note:** This method is loosely based on
 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
 * @example
 *
 * _.isLength(3);
 * // => true
 *
 * _.isLength(Number.MIN_VALUE);
 * // => false
 *
 * _.isLength(Infinity);
 * // => false
 *
 * _.isLength('3');
 * // => false
 */
function isLength(value) {
  return typeof value == 'number' &&
    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}

/**
 * Checks if `value` is array-like. A value is considered array-like if it's
 * not a function and has a `value.length` that's an integer greater than or
 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
 * @example
 *
 * _.isArrayLike([1, 2, 3]);
 * // => true
 *
 * _.isArrayLike(document.body.children);
 * // => true
 *
 * _.isArrayLike('abc');
 * // => true
 *
 * _.isArrayLike(_.noop);
 * // => false
 */
function isArrayLike(value) {
  return value != null && isLength(value.length) && !isFunction(value);
}

// A temporary value used to identify if the loop should be broken.
// See #1064, #1293
var breakLoop = {};

/**
 * This method returns `undefined`.
 *
 * @static
 * @memberOf _
 * @since 2.3.0
 * @category Util
 * @example
 *
 * _.times(2, _.noop);
 * // => [undefined, undefined]
 */
function noop() {
  // No operation performed.
}

function once(fn) {
    return function () {
        if (fn === null) return;
        var callFn = fn;
        fn = null;
        callFn.apply(this, arguments);
    };
}

var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator;

var getIterator = function (coll) {
    return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol]();
};

/**
 * The base implementation of `_.times` without support for iteratee shorthands
 * or max array length checks.
 *
 * @private
 * @param {number} n The number of times to invoke `iteratee`.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the array of results.
 */
function baseTimes(n, iteratee) {
  var index = -1,
      result = Array(n);

  while (++index < n) {
    result[index] = iteratee(index);
  }
  return result;
}

/**
 * Checks if `value` is object-like. A value is object-like if it's not `null`
 * and has a `typeof` result of "object".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
 * @example
 *
 * _.isObjectLike({});
 * // => true
 *
 * _.isObjectLike([1, 2, 3]);
 * // => true
 *
 * _.isObjectLike(_.noop);
 * // => false
 *
 * _.isObjectLike(null);
 * // => false
 */
function isObjectLike(value) {
  return value != null && typeof value == 'object';
}

/** `Object#toString` result references. */
var argsTag = '[object Arguments]';

/**
 * The base implementation of `_.isArguments`.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 */
function baseIsArguments(value) {
  return isObjectLike(value) && baseGetTag(value) == argsTag;
}

/** Used for built-in method references. */
var objectProto$3 = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty$2 = objectProto$3.hasOwnProperty;

/** Built-in value references. */
var propertyIsEnumerable = objectProto$3.propertyIsEnumerable;

/**
 * Checks if `value` is likely an `arguments` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 *  else `false`.
 * @example
 *
 * _.isArguments(function() { return arguments; }());
 * // => true
 *
 * _.isArguments([1, 2, 3]);
 * // => false
 */
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') &&
    !propertyIsEnumerable.call(value, 'callee');
};

/**
 * Checks if `value` is classified as an `Array` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
 * @example
 *
 * _.isArray([1, 2, 3]);
 * // => true
 *
 * _.isArray(document.body.children);
 * // => false
 *
 * _.isArray('abc');
 * // => false
 *
 * _.isArray(_.noop);
 * // => false
 */
var isArray = Array.isArray;

/**
 * This method returns `false`.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {boolean} Returns `false`.
 * @example
 *
 * _.times(2, _.stubFalse);
 * // => [false, false]
 */
function stubFalse() {
  return false;
}

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;

/**
 * Checks if `value` is a buffer.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
 * @example
 *
 * _.isBuffer(new Buffer(2));
 * // => true
 *
 * _.isBuffer(new Uint8Array(2));
 * // => false
 */
var isBuffer = nativeIsBuffer || stubFalse;

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER$1 = 9007199254740991;

/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;

/**
 * Checks if `value` is a valid array-like index.
 *
 * @private
 * @param {*} value The value to check.
 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
 */
function isIndex(value, length) {
  var type = typeof value;
  length = length == null ? MAX_SAFE_INTEGER$1 : length;

  return !!length &&
    (type == 'number' ||
      (type != 'symbol' && reIsUint.test(value))) &&
        (value > -1 && value % 1 == 0 && value < length);
}

/** `Object#toString` result references. */
var argsTag$1 = '[object Arguments]';
var arrayTag = '[object Array]';
var boolTag = '[object Boolean]';
var dateTag = '[object Date]';
var errorTag = '[object Error]';
var funcTag$1 = '[object Function]';
var mapTag = '[object Map]';
var numberTag = '[object Number]';
var objectTag = '[object Object]';
var regexpTag = '[object RegExp]';
var setTag = '[object Set]';
var stringTag = '[object String]';
var weakMapTag = '[object WeakMap]';

var arrayBufferTag = '[object ArrayBuffer]';
var dataViewTag = '[object DataView]';
var float32Tag = '[object Float32Array]';
var float64Tag = '[object Float64Array]';
var int8Tag = '[object Int8Array]';
var int16Tag = '[object Int16Array]';
var int32Tag = '[object Int32Array]';
var uint8Tag = '[object Uint8Array]';
var uint8ClampedTag = '[object Uint8ClampedArray]';
var uint16Tag = '[object Uint16Array]';
var uint32Tag = '[object Uint32Array]';

/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
typedArrayTags[errorTag] = typedArrayTags[funcTag$1] =
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
typedArrayTags[setTag] = typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] = false;

/**
 * The base implementation of `_.isTypedArray` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 */
function baseIsTypedArray(value) {
  return isObjectLike(value) &&
    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}

/**
 * The base implementation of `_.unary` without support for storing metadata.
 *
 * @private
 * @param {Function} func The function to cap arguments for.
 * @returns {Function} Returns the new capped function.
 */
function baseUnary(func) {
  return function(value) {
    return func(value);
  };
}

/** Detect free variable `exports`. */
var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;

/** Detect free variable `process` from Node.js. */
var freeProcess = moduleExports$1 && freeGlobal.process;

/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
  try {
    // Use `util.types` for Node.js 10+.
    var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types;

    if (types) {
      return types;
    }

    // Legacy `process.binding('util')` for Node.js < 10.
    return freeProcess && freeProcess.binding && freeProcess.binding('util');
  } catch (e) {}
}());

/* Node.js helper references. */
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

/**
 * Checks if `value` is classified as a typed array.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 * @example
 *
 * _.isTypedArray(new Uint8Array);
 * // => true
 *
 * _.isTypedArray([]);
 * // => false
 */
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

/** Used for built-in method references. */
var objectProto$2 = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty$1 = objectProto$2.hasOwnProperty;

/**
 * Creates an array of the enumerable property names of the array-like `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @param {boolean} inherited Specify returning inherited property names.
 * @returns {Array} Returns the array of property names.
 */
function arrayLikeKeys(value, inherited) {
  var isArr = isArray(value),
      isArg = !isArr && isArguments(value),
      isBuff = !isArr && !isArg && isBuffer(value),
      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
      skipIndexes = isArr || isArg || isBuff || isType,
      result = skipIndexes ? baseTimes(value.length, String) : [],
      length = result.length;

  for (var key in value) {
    if ((inherited || hasOwnProperty$1.call(value, key)) &&
        !(skipIndexes && (
           // Safari 9 has enumerable `arguments.length` in strict mode.
           key == 'length' ||
           // Node.js 0.10 has enumerable non-index properties on buffers.
           (isBuff && (key == 'offset' || key == 'parent')) ||
           // PhantomJS 2 has enumerable non-index properties on typed arrays.
           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
           // Skip index properties.
           isIndex(key, length)
        ))) {
      result.push(key);
    }
  }
  return result;
}

/** Used for built-in method references. */
var objectProto$5 = Object.prototype;

/**
 * Checks if `value` is likely a prototype object.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
 */
function isPrototype(value) {
  var Ctor = value && value.constructor,
      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5;

  return value === proto;
}

/**
 * Creates a unary function that invokes `func` with its argument transformed.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} transform The argument transform.
 * @returns {Function} Returns the new function.
 */
function overArg(func, transform) {
  return function(arg) {
    return func(transform(arg));
  };
}

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = overArg(Object.keys, Object);

/** Used for built-in method references. */
var objectProto$4 = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty$3 = objectProto$4.hasOwnProperty;

/**
 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function baseKeys(object) {
  if (!isPrototype(object)) {
    return nativeKeys(object);
  }
  var result = [];
  for (var key in Object(object)) {
    if (hasOwnProperty$3.call(object, key) && key != 'constructor') {
      result.push(key);
    }
  }
  return result;
}

/**
 * Creates an array of the own enumerable property names of `object`.
 *
 * **Note:** Non-object values are coerced to objects. See the
 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
 * for more details.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.keys(new Foo);
 * // => ['a', 'b'] (iteration order is not guaranteed)
 *
 * _.keys('hi');
 * // => ['0', '1']
 */
function keys(object) {
  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}

function createArrayIterator(coll) {
    var i = -1;
    var len = coll.length;
    return function next() {
        return ++i < len ? {value: coll[i], key: i} : null;
    }
}

function createES2015Iterator(iterator) {
    var i = -1;
    return function next() {
        var item = iterator.next();
        if (item.done)
            return null;
        i++;
        return {value: item.value, key: i};
    }
}

function createObjectIterator(obj) {
    var okeys = keys(obj);
    var i = -1;
    var len = okeys.length;
    return function next() {
        var key = okeys[++i];
        return i < len ? {value: obj[key], key: key} : null;
    };
}

function iterator(coll) {
    if (isArrayLike(coll)) {
        return createArrayIterator(coll);
    }

    var iterator = getIterator(coll);
    return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);
}

function onlyOnce(fn) {
    return function() {
        if (fn === null) throw new Error("Callback was already called.");
        var callFn = fn;
        fn = null;
        callFn.apply(this, arguments);
    };
}

function _eachOfLimit(limit) {
    return function (obj, iteratee, callback) {
        callback = once(callback || noop);
        if (limit <= 0 || !obj) {
            return callback(null);
        }
        var nextElem = iterator(obj);
        var done = false;
        var running = 0;
        var looping = false;

        function iterateeCallback(err, value) {
            running -= 1;
            if (err) {
                done = true;
                callback(err);
            }
            else if (value === breakLoop || (done && running <= 0)) {
                done = true;
                return callback(null);
            }
            else if (!looping) {
                replenish();
            }
        }

        function replenish () {
            looping = true;
            while (running < limit && !done) {
                var elem = nextElem();
                if (elem === null) {
                    done = true;
                    if (running <= 0) {
                        callback(null);
                    }
                    return;
                }
                running += 1;
                iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));
            }
            looping = false;
        }

        replenish();
    };
}

/**
 * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name eachOfLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.eachOf]{@link module:Collections.eachOf}
 * @alias forEachOfLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each
 * item in `coll`. The `key` is the item's key, or index in the case of an
 * array.
 * Invoked with (item, key, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
function eachOfLimit(coll, limit, iteratee, callback) {
    _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback);
}

function doLimit(fn, limit) {
    return function (iterable, iteratee, callback) {
        return fn(iterable, limit, iteratee, callback);
    };
}

// eachOf implementation optimized for array-likes
function eachOfArrayLike(coll, iteratee, callback) {
    callback = once(callback || noop);
    var index = 0,
        completed = 0,
        length = coll.length;
    if (length === 0) {
        callback(null);
    }

    function iteratorCallback(err, value) {
        if (err) {
            callback(err);
        } else if ((++completed === length) || value === breakLoop) {
            callback(null);
        }
    }

    for (; index < length; index++) {
        iteratee(coll[index], index, onlyOnce(iteratorCallback));
    }
}

// a generic version of eachOf which can handle array, object, and iterator cases.
var eachOfGeneric = doLimit(eachOfLimit, Infinity);

/**
 * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument
 * to the iteratee.
 *
 * @name eachOf
 * @static
 * @memberOf module:Collections
 * @method
 * @alias forEachOf
 * @category Collection
 * @see [async.each]{@link module:Collections.each}
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each
 * item in `coll`.
 * The `key` is the item's key, or index in the case of an array.
 * Invoked with (item, key, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 * @example
 *
 * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
 * var configs = {};
 *
 * async.forEachOf(obj, function (value, key, callback) {
 *     fs.readFile(__dirname + value, "utf8", function (err, data) {
 *         if (err) return callback(err);
 *         try {
 *             configs[key] = JSON.parse(data);
 *         } catch (e) {
 *             return callback(e);
 *         }
 *         callback();
 *     });
 * }, function (err) {
 *     if (err) console.error(err.message);
 *     // configs is now a map of JSON data
 *     doSomethingWith(configs);
 * });
 */
var eachOf = function(coll, iteratee, callback) {
    var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;
    eachOfImplementation(coll, wrapAsync(iteratee), callback);
};

function doParallel(fn) {
    return function (obj, iteratee, callback) {
        return fn(eachOf, obj, wrapAsync(iteratee), callback);
    };
}

function _asyncMap(eachfn, arr, iteratee, callback) {
    callback = callback || noop;
    arr = arr || [];
    var results = [];
    var counter = 0;
    var _iteratee = wrapAsync(iteratee);

    eachfn(arr, function (value, _, callback) {
        var index = counter++;
        _iteratee(value, function (err, v) {
            results[index] = v;
            callback(err);
        });
    }, function (err) {
        callback(err, results);
    });
}

/**
 * Produces a new collection of values by mapping each value in `coll` through
 * the `iteratee` function. The `iteratee` is called with an item from `coll`
 * and a callback for when it has finished processing. Each of these callback
 * takes 2 arguments: an `error`, and the transformed item from `coll`. If
 * `iteratee` passes an error to its callback, the main `callback` (for the
 * `map` function) is immediately called with the error.
 *
 * Note, that since this function applies the `iteratee` to each item in
 * parallel, there is no guarantee that the `iteratee` functions will complete
 * in order. However, the results array will be in the same order as the
 * original `coll`.
 *
 * If `map` is passed an Object, the results will be an Array.  The results
 * will roughly be in the order of the original Objects' keys (but this can
 * vary across JavaScript engines).
 *
 * @name map
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with the transformed item.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Results is an Array of the
 * transformed items from the `coll`. Invoked with (err, results).
 * @example
 *
 * async.map(['file1','file2','file3'], fs.stat, function(err, results) {
 *     // results is now an array of stats for each file
 * });
 */
var map = doParallel(_asyncMap);

/**
 * Applies the provided arguments to each function in the array, calling
 * `callback` after all functions have completed. If you only provide the first
 * argument, `fns`, then it will return a function which lets you pass in the
 * arguments as if it were a single function call. If more arguments are
 * provided, `callback` is required while `args` is still optional.
 *
 * @name applyEach
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s
 * to all call with the same arguments
 * @param {...*} [args] - any number of separate arguments to pass to the
 * function.
 * @param {Function} [callback] - the final argument should be the callback,
 * called when all functions have completed processing.
 * @returns {Function} - If only the first argument, `fns`, is provided, it will
 * return a function which lets you pass in the arguments as if it were a single
 * function call. The signature is `(..args, callback)`. If invoked with any
 * arguments, `callback` is required.
 * @example
 *
 * async.applyEach([enableSearch, updateSchema], 'bucket', callback);
 *
 * // partial application example:
 * async.each(
 *     buckets,
 *     async.applyEach([enableSearch, updateSchema]),
 *     callback
 * );
 */
var applyEach = applyEach$1(map);

function doParallelLimit(fn) {
    return function (obj, limit, iteratee, callback) {
        return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback);
    };
}

/**
 * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.
 *
 * @name mapLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.map]{@link module:Collections.map}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with the transformed item.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Results is an array of the
 * transformed items from the `coll`. Invoked with (err, results).
 */
var mapLimit = doParallelLimit(_asyncMap);

/**
 * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.
 *
 * @name mapSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.map]{@link module:Collections.map}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with the transformed item.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Results is an array of the
 * transformed items from the `coll`. Invoked with (err, results).
 */
var mapSeries = doLimit(mapLimit, 1);

/**
 * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.
 *
 * @name applyEachSeries
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.applyEach]{@link module:ControlFlow.applyEach}
 * @category Control Flow
 * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all
 * call with the same arguments
 * @param {...*} [args] - any number of separate arguments to pass to the
 * function.
 * @param {Function} [callback] - the final argument should be the callback,
 * called when all functions have completed processing.
 * @returns {Function} - If only the first argument is provided, it will return
 * a function which lets you pass in the arguments as if it were a single
 * function call.
 */
var applyEachSeries = applyEach$1(mapSeries);

/**
 * A specialized version of `_.forEach` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns `array`.
 */
function arrayEach(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    if (iteratee(array[index], index, array) === false) {
      break;
    }
  }
  return array;
}

/**
 * Creates a base function for methods like `_.forIn` and `_.forOwn`.
 *
 * @private
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new base function.
 */
function createBaseFor(fromRight) {
  return function(object, iteratee, keysFunc) {
    var index = -1,
        iterable = Object(object),
        props = keysFunc(object),
        length = props.length;

    while (length--) {
      var key = props[fromRight ? length : ++index];
      if (iteratee(iterable[key], key, iterable) === false) {
        break;
      }
    }
    return object;
  };
}

/**
 * The base implementation of `baseForOwn` which iterates over `object`
 * properties returned by `keysFunc` and invokes `iteratee` for each property.
 * Iteratee functions may exit iteration early by explicitly returning `false`.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {Function} keysFunc The function to get the keys of `object`.
 * @returns {Object} Returns `object`.
 */
var baseFor = createBaseFor();

/**
 * The base implementation of `_.forOwn` without support for iteratee shorthands.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Object} Returns `object`.
 */
function baseForOwn(object, iteratee) {
  return object && baseFor(object, iteratee, keys);
}

/**
 * The base implementation of `_.findIndex` and `_.findLastIndex` without
 * support for iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} predicate The function invoked per iteration.
 * @param {number} fromIndex The index to search from.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function baseFindIndex(array, predicate, fromIndex, fromRight) {
  var length = array.length,
      index = fromIndex + (fromRight ? 1 : -1);

  while ((fromRight ? index-- : ++index < length)) {
    if (predicate(array[index], index, array)) {
      return index;
    }
  }
  return -1;
}

/**
 * The base implementation of `_.isNaN` without support for number objects.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
 */
function baseIsNaN(value) {
  return value !== value;
}

/**
 * A specialized version of `_.indexOf` which performs strict equality
 * comparisons of values, i.e. `===`.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function strictIndexOf(array, value, fromIndex) {
  var index = fromIndex - 1,
      length = array.length;

  while (++index < length) {
    if (array[index] === value) {
      return index;
    }
  }
  return -1;
}

/**
 * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function baseIndexOf(array, value, fromIndex) {
  return value === value
    ? strictIndexOf(array, value, fromIndex)
    : baseFindIndex(array, baseIsNaN, fromIndex);
}

/**
 * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on
 * their requirements. Each function can optionally depend on other functions
 * being completed first, and each function is run as soon as its requirements
 * are satisfied.
 *
 * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence
 * will stop. Further tasks will not execute (so any other functions depending
 * on it will not run), and the main `callback` is immediately called with the
 * error.
 *
 * {@link AsyncFunction}s also receive an object containing the results of functions which
 * have completed so far as the first argument, if they have dependencies. If a
 * task function has no dependencies, it will only be passed a callback.
 *
 * @name auto
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Object} tasks - An object. Each of its properties is either a
 * function or an array of requirements, with the {@link AsyncFunction} itself the last item
 * in the array. The object's key of a property serves as the name of the task
 * defined by that property, i.e. can be used when specifying requirements for
 * other tasks. The function receives one or two arguments:
 * * a `results` object, containing the results of the previously executed
 *   functions, only passed if the task has any dependencies,
 * * a `callback(err, result)` function, which must be called when finished,
 *   passing an `error` (which can be `null`) and the result of the function's
 *   execution.
 * @param {number} [concurrency=Infinity] - An optional `integer` for
 * determining the maximum number of tasks that can be run in parallel. By
 * default, as many as possible.
 * @param {Function} [callback] - An optional callback which is called when all
 * the tasks have been completed. It receives the `err` argument if any `tasks`
 * pass an error to their callback. Results are always returned; however, if an
 * error occurs, no further `tasks` will be performed, and the results object
 * will only contain partial results. Invoked with (err, results).
 * @returns undefined
 * @example
 *
 * async.auto({
 *     // this function will just be passed a callback
 *     readData: async.apply(fs.readFile, 'data.txt', 'utf-8'),
 *     showData: ['readData', function(results, cb) {
 *         // results.readData is the file's contents
 *         // ...
 *     }]
 * }, callback);
 *
 * async.auto({
 *     get_data: function(callback) {
 *         console.log('in get_data');
 *         // async code to get some data
 *         callback(null, 'data', 'converted to array');
 *     },
 *     make_folder: function(callback) {
 *         console.log('in make_folder');
 *         // async code to create a directory to store a file in
 *         // this is run at the same time as getting the data
 *         callback(null, 'folder');
 *     },
 *     write_file: ['get_data', 'make_folder', function(results, callback) {
 *         console.log('in write_file', JSON.stringify(results));
 *         // once there is some data and the directory exists,
 *         // write the data to a file in the directory
 *         callback(null, 'filename');
 *     }],
 *     email_link: ['write_file', function(results, callback) {
 *         console.log('in email_link', JSON.stringify(results));
 *         // once the file is written let's email a link to it...
 *         // results.write_file contains the filename returned by write_file.
 *         callback(null, {'file':results.write_file, 'email':'user@example.com'});
 *     }]
 * }, function(err, results) {
 *     console.log('err = ', err);
 *     console.log('results = ', results);
 * });
 */
var auto = function (tasks, concurrency, callback) {
    if (typeof concurrency === 'function') {
        // concurrency is optional, shift the args.
        callback = concurrency;
        concurrency = null;
    }
    callback = once(callback || noop);
    var keys$$1 = keys(tasks);
    var numTasks = keys$$1.length;
    if (!numTasks) {
        return callback(null);
    }
    if (!concurrency) {
        concurrency = numTasks;
    }

    var results = {};
    var runningTasks = 0;
    var hasError = false;

    var listeners = Object.create(null);

    var readyTasks = [];

    // for cycle detection:
    var readyToCheck = []; // tasks that have been identified as reachable
    // without the possibility of returning to an ancestor task
    var uncheckedDependencies = {};

    baseForOwn(tasks, function (task, key) {
        if (!isArray(task)) {
            // no dependencies
            enqueueTask(key, [task]);
            readyToCheck.push(key);
            return;
        }

        var dependencies = task.slice(0, task.length - 1);
        var remainingDependencies = dependencies.length;
        if (remainingDependencies === 0) {
            enqueueTask(key, task);
            readyToCheck.push(key);
            return;
        }
        uncheckedDependencies[key] = remainingDependencies;

        arrayEach(dependencies, function (dependencyName) {
            if (!tasks[dependencyName]) {
                throw new Error('async.auto task `' + key +
                    '` has a non-existent dependency `' +
                    dependencyName + '` in ' +
                    dependencies.join(', '));
            }
            addListener(dependencyName, function () {
                remainingDependencies--;
                if (remainingDependencies === 0) {
                    enqueueTask(key, task);
                }
            });
        });
    });

    checkForDeadlocks();
    processQueue();

    function enqueueTask(key, task) {
        readyTasks.push(function () {
            runTask(key, task);
        });
    }

    function processQueue() {
        if (readyTasks.length === 0 && runningTasks === 0) {
            return callback(null, results);
        }
        while(readyTasks.length && runningTasks < concurrency) {
            var run = readyTasks.shift();
            run();
        }

    }

    function addListener(taskName, fn) {
        var taskListeners = listeners[taskName];
        if (!taskListeners) {
            taskListeners = listeners[taskName] = [];
        }

        taskListeners.push(fn);
    }

    function taskComplete(taskName) {
        var taskListeners = listeners[taskName] || [];
        arrayEach(taskListeners, function (fn) {
            fn();
        });
        processQueue();
    }


    function runTask(key, task) {
        if (hasError) return;

        var taskCallback = onlyOnce(function(err, result) {
            runningTasks--;
            if (arguments.length > 2) {
                result = slice(arguments, 1);
            }
            if (err) {
                var safeResults = {};
                baseForOwn(results, function(val, rkey) {
                    safeResults[rkey] = val;
                });
                safeResults[key] = result;
                hasError = true;
                listeners = Object.create(null);

                callback(err, safeResults);
            } else {
                results[key] = result;
                taskComplete(key);
            }
        });

        runningTasks++;
        var taskFn = wrapAsync(task[task.length - 1]);
        if (task.length > 1) {
            taskFn(results, taskCallback);
        } else {
            taskFn(taskCallback);
        }
    }

    function checkForDeadlocks() {
        // Kahn's algorithm
        // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm
        // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html
        var currentTask;
        var counter = 0;
        while (readyToCheck.length) {
            currentTask = readyToCheck.pop();
            counter++;
            arrayEach(getDependents(currentTask), function (dependent) {
                if (--uncheckedDependencies[dependent] === 0) {
                    readyToCheck.push(dependent);
                }
            });
        }

        if (counter !== numTasks) {
            throw new Error(
                'async.auto cannot execute tasks due to a recursive dependency'
            );
        }
    }

    function getDependents(taskName) {
        var result = [];
        baseForOwn(tasks, function (task, key) {
            if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) {
                result.push(key);
            }
        });
        return result;
    }
};

/**
 * A specialized version of `_.map` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function arrayMap(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length,
      result = Array(length);

  while (++index < length) {
    result[index] = iteratee(array[index], index, array);
  }
  return result;
}

/** `Object#toString` result references. */
var symbolTag = '[object Symbol]';

/**
 * Checks if `value` is classified as a `Symbol` primitive or object.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
 * @example
 *
 * _.isSymbol(Symbol.iterator);
 * // => true
 *
 * _.isSymbol('abc');
 * // => false
 */
function isSymbol(value) {
  return typeof value == 'symbol' ||
    (isObjectLike(value) && baseGetTag(value) == symbolTag);
}

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined;
var symbolToString = symbolProto ? symbolProto.toString : undefined;

/**
 * The base implementation of `_.toString` which doesn't convert nullish
 * values to empty strings.
 *
 * @private
 * @param {*} value The value to process.
 * @returns {string} Returns the string.
 */
function baseToString(value) {
  // Exit early for strings to avoid a performance hit in some environments.
  if (typeof value == 'string') {
    return value;
  }
  if (isArray(value)) {
    // Recursively convert values (susceptible to call stack limits).
    return arrayMap(value, baseToString) + '';
  }
  if (isSymbol(value)) {
    return symbolToString ? symbolToString.call(value) : '';
  }
  var result = (value + '');
  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}

/**
 * The base implementation of `_.slice` without an iteratee call guard.
 *
 * @private
 * @param {Array} array The array to slice.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the slice of `array`.
 */
function baseSlice(array, start, end) {
  var index = -1,
      length = array.length;

  if (start < 0) {
    start = -start > length ? 0 : (length + start);
  }
  end = end > length ? length : end;
  if (end < 0) {
    end += length;
  }
  length = start > end ? 0 : ((end - start) >>> 0);
  start >>>= 0;

  var result = Array(length);
  while (++index < length) {
    result[index] = array[index + start];
  }
  return result;
}

/**
 * Casts `array` to a slice if it's needed.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {number} start The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the cast slice.
 */
function castSlice(array, start, end) {
  var length = array.length;
  end = end === undefined ? length : end;
  return (!start && end >= length) ? array : baseSlice(array, start, end);
}

/**
 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
 * that is not found in the character symbols.
 *
 * @private
 * @param {Array} strSymbols The string symbols to inspect.
 * @param {Array} chrSymbols The character symbols to find.
 * @returns {number} Returns the index of the last unmatched string symbol.
 */
function charsEndIndex(strSymbols, chrSymbols) {
  var index = strSymbols.length;

  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  return index;
}

/**
 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
 * that is not found in the character symbols.
 *
 * @private
 * @param {Array} strSymbols The string symbols to inspect.
 * @param {Array} chrSymbols The character symbols to find.
 * @returns {number} Returns the index of the first unmatched string symbol.
 */
function charsStartIndex(strSymbols, chrSymbols) {
  var index = -1,
      length = strSymbols.length;

  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  return index;
}

/**
 * Converts an ASCII `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function asciiToArray(string) {
  return string.split('');
}

/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff';
var rsComboMarksRange = '\\u0300-\\u036f';
var reComboHalfMarksRange = '\\ufe20-\\ufe2f';
var rsComboSymbolsRange = '\\u20d0-\\u20ff';
var rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
var rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';

/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

/**
 * Checks if `string` contains Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
 */
function hasUnicode(string) {
  return reHasUnicode.test(string);
}

/** Used to compose unicode character classes. */
var rsAstralRange$1 = '\\ud800-\\udfff';
var rsComboMarksRange$1 = '\\u0300-\\u036f';
var reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f';
var rsComboSymbolsRange$1 = '\\u20d0-\\u20ff';
var rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1;
var rsVarRange$1 = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange$1 + ']';
var rsCombo = '[' + rsComboRange$1 + ']';
var rsFitz = '\\ud83c[\\udffb-\\udfff]';
var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')';
var rsNonAstral = '[^' + rsAstralRange$1 + ']';
var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}';
var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]';
var rsZWJ$1 = '\\u200d';

/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?';
var rsOptVar = '[' + rsVarRange$1 + ']?';
var rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*';
var rsSeq = rsOptVar + reOptMod + rsOptJoin;
var rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

/**
 * Converts a Unicode `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function unicodeToArray(string) {
  return string.match(reUnicode) || [];
}

/**
 * Converts `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function stringToArray(string) {
  return hasUnicode(string)
    ? unicodeToArray(string)
    : asciiToArray(string);
}

/**
 * Converts `value` to a string. An empty string is returned for `null`
 * and `undefined` values. The sign of `-0` is preserved.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.toString(null);
 * // => ''
 *
 * _.toString(-0);
 * // => '-0'
 *
 * _.toString([1, 2, 3]);
 * // => '1,2,3'
 */
function toString(value) {
  return value == null ? '' : baseToString(value);
}

/** Used to match leading and trailing whitespace. */
var reTrim = /^\s+|\s+$/g;

/**
 * Removes leading and trailing whitespace or specified characters from `string`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to trim.
 * @param {string} [chars=whitespace] The characters to trim.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {string} Returns the trimmed string.
 * @example
 *
 * _.trim('  abc  ');
 * // => 'abc'
 *
 * _.trim('-_-abc-_-', '_-');
 * // => 'abc'
 *
 * _.map(['  foo  ', '  bar  '], _.trim);
 * // => ['foo', 'bar']
 */
function trim(string, chars, guard) {
  string = toString(string);
  if (string && (guard || chars === undefined)) {
    return string.replace(reTrim, '');
  }
  if (!string || !(chars = baseToString(chars))) {
    return string;
  }
  var strSymbols = stringToArray(string),
      chrSymbols = stringToArray(chars),
      start = charsStartIndex(strSymbols, chrSymbols),
      end = charsEndIndex(strSymbols, chrSymbols) + 1;

  return castSlice(strSymbols, start, end).join('');
}

var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /(=.+)?(\s*)$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;

function parseParams(func) {
    func = func.toString().replace(STRIP_COMMENTS, '');
    func = func.match(FN_ARGS)[2].replace(' ', '');
    func = func ? func.split(FN_ARG_SPLIT) : [];
    func = func.map(function (arg){
        return trim(arg.replace(FN_ARG, ''));
    });
    return func;
}

/**
 * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent
 * tasks are specified as parameters to the function, after the usual callback
 * parameter, with the parameter names matching the names of the tasks it
 * depends on. This can provide even more readable task graphs which can be
 * easier to maintain.
 *
 * If a final callback is specified, the task results are similarly injected,
 * specified as named parameters after the initial error parameter.
 *
 * The autoInject function is purely syntactic sugar and its semantics are
 * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.
 *
 * @name autoInject
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.auto]{@link module:ControlFlow.auto}
 * @category Control Flow
 * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of
 * the form 'func([dependencies...], callback). The object's key of a property
 * serves as the name of the task defined by that property, i.e. can be used
 * when specifying requirements for other tasks.
 * * The `callback` parameter is a `callback(err, result)` which must be called
 *   when finished, passing an `error` (which can be `null`) and the result of
 *   the function's execution. The remaining parameters name other tasks on
 *   which the task is dependent, and the results from those tasks are the
 *   arguments of those parameters.
 * @param {Function} [callback] - An optional callback which is called when all
 * the tasks have been completed. It receives the `err` argument if any `tasks`
 * pass an error to their callback, and a `results` object with any completed
 * task results, similar to `auto`.
 * @example
 *
 * //  The example from `auto` can be rewritten as follows:
 * async.autoInject({
 *     get_data: function(callback) {
 *         // async code to get some data
 *         callback(null, 'data', 'converted to array');
 *     },
 *     make_folder: function(callback) {
 *         // async code to create a directory to store a file in
 *         // this is run at the same time as getting the data
 *         callback(null, 'folder');
 *     },
 *     write_file: function(get_data, make_folder, callback) {
 *         // once there is some data and the directory exists,
 *         // write the data to a file in the directory
 *         callback(null, 'filename');
 *     },
 *     email_link: function(write_file, callback) {
 *         // once the file is written let's email a link to it...
 *         // write_file contains the filename returned by write_file.
 *         callback(null, {'file':write_file, 'email':'user@example.com'});
 *     }
 * }, function(err, results) {
 *     console.log('err = ', err);
 *     console.log('email_link = ', results.email_link);
 * });
 *
 * // If you are using a JS minifier that mangles parameter names, `autoInject`
 * // will not work with plain functions, since the parameter names will be
 * // collapsed to a single letter identifier.  To work around this, you can
 * // explicitly specify the names of the parameters your task function needs
 * // in an array, similar to Angular.js dependency injection.
 *
 * // This still has an advantage over plain `auto`, since the results a task
 * // depends on are still spread into arguments.
 * async.autoInject({
 *     //...
 *     write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {
 *         callback(null, 'filename');
 *     }],
 *     email_link: ['write_file', function(write_file, callback) {
 *         callback(null, {'file':write_file, 'email':'user@example.com'});
 *     }]
 *     //...
 * }, function(err, results) {
 *     console.log('err = ', err);
 *     console.log('email_link = ', results.email_link);
 * });
 */
function autoInject(tasks, callback) {
    var newTasks = {};

    baseForOwn(tasks, function (taskFn, key) {
        var params;
        var fnIsAsync = isAsync(taskFn);
        var hasNoDeps =
            (!fnIsAsync && taskFn.length === 1) ||
            (fnIsAsync && taskFn.length === 0);

        if (isArray(taskFn)) {
            params = taskFn.slice(0, -1);
            taskFn = taskFn[taskFn.length - 1];

            newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);
        } else if (hasNoDeps) {
            // no dependencies, use the function as-is
            newTasks[key] = taskFn;
        } else {
            params = parseParams(taskFn);
            if (taskFn.length === 0 && !fnIsAsync && params.length === 0) {
                throw new Error("autoInject task functions require explicit parameters.");
            }

            // remove callback param
            if (!fnIsAsync) params.pop();

            newTasks[key] = params.concat(newTask);
        }

        function newTask(results, taskCb) {
            var newArgs = arrayMap(params, function (name) {
                return results[name];
            });
            newArgs.push(taskCb);
            wrapAsync(taskFn).apply(null, newArgs);
        }
    });

    auto(newTasks, callback);
}

// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation
// used for queues. This implementation assumes that the node provided by the user can be modified
// to adjust the next and last properties. We implement only the minimal functionality
// for queue support.
function DLL() {
    this.head = this.tail = null;
    this.length = 0;
}

function setInitial(dll, node) {
    dll.length = 1;
    dll.head = dll.tail = node;
}

DLL.prototype.removeLink = function(node) {
    if (node.prev) node.prev.next = node.next;
    else this.head = node.next;
    if (node.next) node.next.prev = node.prev;
    else this.tail = node.prev;

    node.prev = node.next = null;
    this.length -= 1;
    return node;
};

DLL.prototype.empty = function () {
    while(this.head) this.shift();
    return this;
};

DLL.prototype.insertAfter = function(node, newNode) {
    newNode.prev = node;
    newNode.next = node.next;
    if (node.next) node.next.prev = newNode;
    else this.tail = newNode;
    node.next = newNode;
    this.length += 1;
};

DLL.prototype.insertBefore = function(node, newNode) {
    newNode.prev = node.prev;
    newNode.next = node;
    if (node.prev) node.prev.next = newNode;
    else this.head = newNode;
    node.prev = newNode;
    this.length += 1;
};

DLL.prototype.unshift = function(node) {
    if (this.head) this.insertBefore(this.head, node);
    else setInitial(this, node);
};

DLL.prototype.push = function(node) {
    if (this.tail) this.insertAfter(this.tail, node);
    else setInitial(this, node);
};

DLL.prototype.shift = function() {
    return this.head && this.removeLink(this.head);
};

DLL.prototype.pop = function() {
    return this.tail && this.removeLink(this.tail);
};

DLL.prototype.toArray = function () {
    var arr = Array(this.length);
    var curr = this.head;
    for(var idx = 0; idx < this.length; idx++) {
        arr[idx] = curr.data;
        curr = curr.next;
    }
    return arr;
};

DLL.prototype.remove = function (testFn) {
    var curr = this.head;
    while(!!curr) {
        var next = curr.next;
        if (testFn(curr)) {
            this.removeLink(curr);
        }
        curr = next;
    }
    return this;
};

function queue(worker, concurrency, payload) {
    if (concurrency == null) {
        concurrency = 1;
    }
    else if(concurrency === 0) {
        throw new Error('Concurrency must not be zero');
    }

    var _worker = wrapAsync(worker);
    var numRunning = 0;
    var workersList = [];

    var processingScheduled = false;
    function _insert(data, insertAtFront, callback) {
        if (callback != null && typeof callback !== 'function') {
            throw new Error('task callback must be a function');
        }
        q.started = true;
        if (!isArray(data)) {
            data = [data];
        }
        if (data.length === 0 && q.idle()) {
            // call drain immediately if there are no tasks
            return setImmediate$1(function() {
                q.drain();
            });
        }

        for (var i = 0, l = data.length; i < l; i++) {
            var item = {
                data: data[i],
                callback: callback || noop
            };

            if (insertAtFront) {
                q._tasks.unshift(item);
            } else {
                q._tasks.push(item);
            }
        }

        if (!processingScheduled) {
            processingScheduled = true;
            setImmediate$1(function() {
                processingScheduled = false;
                q.process();
            });
        }
    }

    function _next(tasks) {
        return function(err){
            numRunning -= 1;

            for (var i = 0, l = tasks.length; i < l; i++) {
                var task = tasks[i];

                var index = baseIndexOf(workersList, task, 0);
                if (index === 0) {
                    workersList.shift();
                } else if (index > 0) {
                    workersList.splice(index, 1);
                }

                task.callback.apply(task, arguments);

                if (err != null) {
                    q.error(err, task.data);
                }
            }

            if (numRunning <= (q.concurrency - q.buffer) ) {
                q.unsaturated();
            }

            if (q.idle()) {
                q.drain();
            }
            q.process();
        };
    }

    var isProcessing = false;
    var q = {
        _tasks: new DLL(),
        concurrency: concurrency,
        payload: payload,
        saturated: noop,
        unsaturated:noop,
        buffer: concurrency / 4,
        empty: noop,
        drain: noop,
        error: noop,
        started: false,
        paused: false,
        push: function (data, callback) {
            _insert(data, false, callback);
        },
        kill: function () {
            q.drain = noop;
            q._tasks.empty();
        },
        unshift: function (data, callback) {
            _insert(data, true, callback);
        },
        remove: function (testFn) {
            q._tasks.remove(testFn);
        },
        process: function () {
            // Avoid trying to start too many processing operations. This can occur
            // when callbacks resolve synchronously (#1267).
            if (isProcessing) {
                return;
            }
            isProcessing = true;
            while(!q.paused && numRunning < q.concurrency && q._tasks.length){
                var tasks = [], data = [];
                var l = q._tasks.length;
                if (q.payload) l = Math.min(l, q.payload);
                for (var i = 0; i < l; i++) {
                    var node = q._tasks.shift();
                    tasks.push(node);
                    workersList.push(node);
                    data.push(node.data);
                }

                numRunning += 1;

                if (q._tasks.length === 0) {
                    q.empty();
                }

                if (numRunning === q.concurrency) {
                    q.saturated();
                }

                var cb = onlyOnce(_next(tasks));
                _worker(data, cb);
            }
            isProcessing = false;
        },
        length: function () {
            return q._tasks.length;
        },
        running: function () {
            return numRunning;
        },
        workersList: function () {
            return workersList;
        },
        idle: function() {
            return q._tasks.length + numRunning === 0;
        },
        pause: function () {
            q.paused = true;
        },
        resume: function () {
            if (q.paused === false) { return; }
            q.paused = false;
            setImmediate$1(q.process);
        }
    };
    return q;
}

/**
 * A cargo of tasks for the worker function to complete. Cargo inherits all of
 * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}.
 * @typedef {Object} CargoObject
 * @memberOf module:ControlFlow
 * @property {Function} length - A function returning the number of items
 * waiting to be processed. Invoke like `cargo.length()`.
 * @property {number} payload - An `integer` for determining how many tasks
 * should be process per round. This property can be changed after a `cargo` is
 * created to alter the payload on-the-fly.
 * @property {Function} push - Adds `task` to the `queue`. The callback is
 * called once the `worker` has finished processing the task. Instead of a
 * single task, an array of `tasks` can be submitted. The respective callback is
 * used for every task in the list. Invoke like `cargo.push(task, [callback])`.
 * @property {Function} saturated - A callback that is called when the
 * `queue.length()` hits the concurrency and further tasks will be queued.
 * @property {Function} empty - A callback that is called when the last item
 * from the `queue` is given to a `worker`.
 * @property {Function} drain - A callback that is called when the last item
 * from the `queue` has returned from the `worker`.
 * @property {Function} idle - a function returning false if there are items
 * waiting or being processed, or true if not. Invoke like `cargo.idle()`.
 * @property {Function} pause - a function that pauses the processing of tasks
 * until `resume()` is called. Invoke like `cargo.pause()`.
 * @property {Function} resume - a function that resumes the processing of
 * queued tasks when the queue is paused. Invoke like `cargo.resume()`.
 * @property {Function} kill - a function that removes the `drain` callback and
 * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`.
 */

/**
 * Creates a `cargo` object with the specified payload. Tasks added to the
 * cargo will be processed altogether (up to the `payload` limit). If the
 * `worker` is in progress, the task is queued until it becomes available. Once
 * the `worker` has completed some tasks, each callback of those tasks is
 * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)
 * for how `cargo` and `queue` work.
 *
 * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers
 * at a time, cargo passes an array of tasks to a single worker, repeating
 * when the worker is finished.
 *
 * @name cargo
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.queue]{@link module:ControlFlow.queue}
 * @category Control Flow
 * @param {AsyncFunction} worker - An asynchronous function for processing an array
 * of queued tasks. Invoked with `(tasks, callback)`.
 * @param {number} [payload=Infinity] - An optional `integer` for determining
 * how many tasks should be processed per round; if omitted, the default is
 * unlimited.
 * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can
 * attached as certain properties to listen for specific events during the
 * lifecycle of the cargo and inner queue.
 * @example
 *
 * // create a cargo object with payload 2
 * var cargo = async.cargo(function(tasks, callback) {
 *     for (var i=0; i<tasks.length; i++) {
 *         console.log('hello ' + tasks[i].name);
 *     }
 *     callback();
 * }, 2);
 *
 * // add some items
 * cargo.push({name: 'foo'}, function(err) {
 *     console.log('finished processing foo');
 * });
 * cargo.push({name: 'bar'}, function(err) {
 *     console.log('finished processing bar');
 * });
 * cargo.push({name: 'baz'}, function(err) {
 *     console.log('finished processing baz');
 * });
 */
function cargo(worker, payload) {
    return queue(worker, 1, payload);
}

/**
 * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.
 *
 * @name eachOfSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.eachOf]{@link module:Collections.eachOf}
 * @alias forEachOfSeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * Invoked with (item, key, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Invoked with (err).
 */
var eachOfSeries = doLimit(eachOfLimit, 1);

/**
 * Reduces `coll` into a single value using an async `iteratee` to return each
 * successive step. `memo` is the initial state of the reduction. This function
 * only operates in series.
 *
 * For performance reasons, it may make sense to split a call to this function
 * into a parallel map, and then use the normal `Array.prototype.reduce` on the
 * results. This function is for situations where each step in the reduction
 * needs to be async; if you can get the data before reducing it, then it's
 * probably a good idea to do so.
 *
 * @name reduce
 * @static
 * @memberOf module:Collections
 * @method
 * @alias inject
 * @alias foldl
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {*} memo - The initial state of the reduction.
 * @param {AsyncFunction} iteratee - A function applied to each item in the
 * array to produce the next step in the reduction.
 * The `iteratee` should complete with the next state of the reduction.
 * If the iteratee complete with an error, the reduction is stopped and the
 * main `callback` is immediately called with the error.
 * Invoked with (memo, item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result is the reduced value. Invoked with
 * (err, result).
 * @example
 *
 * async.reduce([1,2,3], 0, function(memo, item, callback) {
 *     // pointless async:
 *     process.nextTick(function() {
 *         callback(null, memo + item)
 *     });
 * }, function(err, result) {
 *     // result is now equal to the last value of memo, which is 6
 * });
 */
function reduce(coll, memo, iteratee, callback) {
    callback = once(callback || noop);
    var _iteratee = wrapAsync(iteratee);
    eachOfSeries(coll, function(x, i, callback) {
        _iteratee(memo, x, function(err, v) {
            memo = v;
            callback(err);
        });
    }, function(err) {
        callback(err, memo);
    });
}

/**
 * Version of the compose function that is more natural to read. Each function
 * consumes the return value of the previous function. It is the equivalent of
 * [compose]{@link module:ControlFlow.compose} with the arguments reversed.
 *
 * Each function is executed with the `this` binding of the composed function.
 *
 * @name seq
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.compose]{@link module:ControlFlow.compose}
 * @category Control Flow
 * @param {...AsyncFunction} functions - the asynchronous functions to compose
 * @returns {Function} a function that composes the `functions` in order
 * @example
 *
 * // Requires lodash (or underscore), express3 and dresende's orm2.
 * // Part of an app, that fetches cats of the logged user.
 * // This example uses `seq` function to avoid overnesting and error
 * // handling clutter.
 * app.get('/cats', function(request, response) {
 *     var User = request.models.User;
 *     async.seq(
 *         _.bind(User.get, User),  // 'User.get' has signature (id, callback(err, data))
 *         function(user, fn) {
 *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))
 *         }
 *     )(req.session.user_id, function (err, cats) {
 *         if (err) {
 *             console.error(err);
 *             response.json({ status: 'error', message: err.message });
 *         } else {
 *             response.json({ status: 'ok', message: 'Cats found', data: cats });
 *         }
 *     });
 * });
 */
function seq(/*...functions*/) {
    var _functions = arrayMap(arguments, wrapAsync);
    return function(/*...args*/) {
        var args = slice(arguments);
        var that = this;

        var cb = args[args.length - 1];
        if (typeof cb == 'function') {
            args.pop();
        } else {
            cb = noop;
        }

        reduce(_functions, args, function(newargs, fn, cb) {
            fn.apply(that, newargs.concat(function(err/*, ...nextargs*/) {
                var nextargs = slice(arguments, 1);
                cb(err, nextargs);
            }));
        },
        function(err, results) {
            cb.apply(that, [err].concat(results));
        });
    };
}

/**
 * Creates a function which is a composition of the passed asynchronous
 * functions. Each function consumes the return value of the function that
 * follows. Composing functions `f()`, `g()`, and `h()` would produce the result
 * of `f(g(h()))`, only this version uses callbacks to obtain the return values.
 *
 * Each function is executed with the `this` binding of the composed function.
 *
 * @name compose
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {...AsyncFunction} functions - the asynchronous functions to compose
 * @returns {Function} an asynchronous function that is the composed
 * asynchronous `functions`
 * @example
 *
 * function add1(n, callback) {
 *     setTimeout(function () {
 *         callback(null, n + 1);
 *     }, 10);
 * }
 *
 * function mul3(n, callback) {
 *     setTimeout(function () {
 *         callback(null, n * 3);
 *     }, 10);
 * }
 *
 * var add1mul3 = async.compose(mul3, add1);
 * add1mul3(4, function (err, result) {
 *     // result now equals 15
 * });
 */
var compose = function(/*...args*/) {
    return seq.apply(null, slice(arguments).reverse());
};

var _concat = Array.prototype.concat;

/**
 * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.
 *
 * @name concatLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.concat]{@link module:Collections.concat}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,
 * which should use an array as its result. Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished, or an error occurs. Results is an array
 * containing the concatenated results of the `iteratee` function. Invoked with
 * (err, results).
 */
var concatLimit = function(coll, limit, iteratee, callback) {
    callback = callback || noop;
    var _iteratee = wrapAsync(iteratee);
    mapLimit(coll, limit, function(val, callback) {
        _iteratee(val, function(err /*, ...args*/) {
            if (err) return callback(err);
            return callback(null, slice(arguments, 1));
        });
    }, function(err, mapResults) {
        var result = [];
        for (var i = 0; i < mapResults.length; i++) {
            if (mapResults[i]) {
                result = _concat.apply(result, mapResults[i]);
            }
        }

        return callback(err, result);
    });
};

/**
 * Applies `iteratee` to each item in `coll`, concatenating the results. Returns
 * the concatenated list. The `iteratee`s are called in parallel, and the
 * results are concatenated as they return. There is no guarantee that the
 * results array will be returned in the original order of `coll` passed to the
 * `iteratee` function.
 *
 * @name concat
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,
 * which should use an array as its result. Invoked with (item, callback).
 * @param {Function} [callback(err)] - A callback which is called after all the
 * `iteratee` functions have finished, or an error occurs. Results is an array
 * containing the concatenated results of the `iteratee` function. Invoked with
 * (err, results).
 * @example
 *
 * async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files) {
 *     // files is now a list of filenames that exist in the 3 directories
 * });
 */
var concat = doLimit(concatLimit, Infinity);

/**
 * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.
 *
 * @name concatSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.concat]{@link module:Collections.concat}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.
 * The iteratee should complete with an array an array of results.
 * Invoked with (item, callback).
 * @param {Function} [callback(err)] - A callback which is called after all the
 * `iteratee` functions have finished, or an error occurs. Results is an array
 * containing the concatenated results of the `iteratee` function. Invoked with
 * (err, results).
 */
var concatSeries = doLimit(concatLimit, 1);

/**
 * Returns a function that when called, calls-back with the values provided.
 * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to
 * [`auto`]{@link module:ControlFlow.auto}.
 *
 * @name constant
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {...*} arguments... - Any number of arguments to automatically invoke
 * callback with.
 * @returns {AsyncFunction} Returns a function that when invoked, automatically
 * invokes the callback with the previous given arguments.
 * @example
 *
 * async.waterfall([
 *     async.constant(42),
 *     function (value, next) {
 *         // value === 42
 *     },
 *     //...
 * ], callback);
 *
 * async.waterfall([
 *     async.constant(filename, "utf8"),
 *     fs.readFile,
 *     function (fileData, next) {
 *         //...
 *     }
 *     //...
 * ], callback);
 *
 * async.auto({
 *     hostname: async.constant("https://server.net/"),
 *     port: findFreePort,
 *     launchServer: ["hostname", "port", function (options, cb) {
 *         startServer(options, cb);
 *     }],
 *     //...
 * }, callback);
 */
var constant = function(/*...values*/) {
    var values = slice(arguments);
    var args = [null].concat(values);
    return function (/*...ignoredArgs, callback*/) {
        var callback = arguments[arguments.length - 1];
        return callback.apply(this, args);
    };
};

/**
 * This method returns the first argument it receives.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {*} value Any value.
 * @returns {*} Returns `value`.
 * @example
 *
 * var object = { 'a': 1 };
 *
 * console.log(_.identity(object) === object);
 * // => true
 */
function identity(value) {
  return value;
}

function _createTester(check, getResult) {
    return function(eachfn, arr, iteratee, cb) {
        cb = cb || noop;
        var testPassed = false;
        var testResult;
        eachfn(arr, function(value, _, callback) {
            iteratee(value, function(err, result) {
                if (err) {
                    callback(err);
                } else if (check(result) && !testResult) {
                    testPassed = true;
                    testResult = getResult(true, value);
                    callback(null, breakLoop);
                } else {
                    callback();
                }
            });
        }, function(err) {
            if (err) {
                cb(err);
            } else {
                cb(null, testPassed ? testResult : getResult(false));
            }
        });
    };
}

function _findGetResult(v, x) {
    return x;
}

/**
 * Returns the first value in `coll` that passes an async truth test. The
 * `iteratee` is applied in parallel, meaning the first iteratee to return
 * `true` will fire the detect `callback` with that result. That means the
 * result might not be the first item in the original `coll` (in terms of order)
 * that passes the test.

 * If order within the original `coll` is important, then look at
 * [`detectSeries`]{@link module:Collections.detectSeries}.
 *
 * @name detect
 * @static
 * @memberOf module:Collections
 * @method
 * @alias find
 * @category Collections
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
 * The iteratee must complete with a boolean value as its result.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the `iteratee` functions have finished.
 * Result will be the first item in the array that passes the truth test
 * (iteratee) or the value `undefined` if none passed. Invoked with
 * (err, result).
 * @example
 *
 * async.detect(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, result) {
 *     // result now equals the first file in the list that exists
 * });
 */
var detect = doParallel(_createTester(identity, _findGetResult));

/**
 * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name detectLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.detect]{@link module:Collections.detect}
 * @alias findLimit
 * @category Collections
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
 * The iteratee must complete with a boolean value as its result.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the `iteratee` functions have finished.
 * Result will be the first item in the array that passes the truth test
 * (iteratee) or the value `undefined` if none passed. Invoked with
 * (err, result).
 */
var detectLimit = doParallelLimit(_createTester(identity, _findGetResult));

/**
 * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.
 *
 * @name detectSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.detect]{@link module:Collections.detect}
 * @alias findSeries
 * @category Collections
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
 * The iteratee must complete with a boolean value as its result.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the `iteratee` functions have finished.
 * Result will be the first item in the array that passes the truth test
 * (iteratee) or the value `undefined` if none passed. Invoked with
 * (err, result).
 */
var detectSeries = doLimit(detectLimit, 1);

function consoleFunc(name) {
    return function (fn/*, ...args*/) {
        var args = slice(arguments, 1);
        args.push(function (err/*, ...args*/) {
            var args = slice(arguments, 1);
            if (typeof console === 'object') {
                if (err) {
                    if (console.error) {
                        console.error(err);
                    }
                } else if (console[name]) {
                    arrayEach(args, function (x) {
                        console[name](x);
                    });
                }
            }
        });
        wrapAsync(fn).apply(null, args);
    };
}

/**
 * Logs the result of an [`async` function]{@link AsyncFunction} to the
 * `console` using `console.dir` to display the properties of the resulting object.
 * Only works in Node.js or in browsers that support `console.dir` and
 * `console.error` (such as FF and Chrome).
 * If multiple arguments are returned from the async function,
 * `console.dir` is called on each argument in order.
 *
 * @name dir
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} function - The function you want to eventually apply
 * all arguments to.
 * @param {...*} arguments... - Any number of arguments to apply to the function.
 * @example
 *
 * // in a module
 * var hello = function(name, callback) {
 *     setTimeout(function() {
 *         callback(null, {hello: name});
 *     }, 1000);
 * };
 *
 * // in the node repl
 * node> async.dir(hello, 'world');
 * {hello: 'world'}
 */
var dir = consoleFunc('dir');

/**
 * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in
 * the order of operations, the arguments `test` and `fn` are switched.
 *
 * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function.
 * @name doDuring
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.during]{@link module:ControlFlow.during}
 * @category Control Flow
 * @param {AsyncFunction} fn - An async function which is called each time
 * `test` passes. Invoked with (callback).
 * @param {AsyncFunction} test - asynchronous truth test to perform before each
 * execution of `fn`. Invoked with (...args, callback), where `...args` are the
 * non-error args from the previous callback of `fn`.
 * @param {Function} [callback] - A callback which is called after the test
 * function has failed and repeated execution of `fn` has stopped. `callback`
 * will be passed an error if one occurred, otherwise `null`.
 */
function doDuring(fn, test, callback) {
    callback = onlyOnce(callback || noop);
    var _fn = wrapAsync(fn);
    var _test = wrapAsync(test);

    function next(err/*, ...args*/) {
        if (err) return callback(err);
        var args = slice(arguments, 1);
        args.push(check);
        _test.apply(this, args);
    }

    function check(err, truth) {
        if (err) return callback(err);
        if (!truth) return callback(null);
        _fn(next);
    }

    check(null, true);

}

/**
 * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in
 * the order of operations, the arguments `test` and `iteratee` are switched.
 *
 * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
 *
 * @name doWhilst
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.whilst]{@link module:ControlFlow.whilst}
 * @category Control Flow
 * @param {AsyncFunction} iteratee - A function which is called each time `test`
 * passes. Invoked with (callback).
 * @param {Function} test - synchronous truth test to perform after each
 * execution of `iteratee`. Invoked with any non-error callback results of
 * `iteratee`.
 * @param {Function} [callback] - A callback which is called after the test
 * function has failed and repeated execution of `iteratee` has stopped.
 * `callback` will be passed an error and any arguments passed to the final
 * `iteratee`'s callback. Invoked with (err, [results]);
 */
function doWhilst(iteratee, test, callback) {
    callback = onlyOnce(callback || noop);
    var _iteratee = wrapAsync(iteratee);
    var next = function(err/*, ...args*/) {
        if (err) return callback(err);
        var args = slice(arguments, 1);
        if (test.apply(this, args)) return _iteratee(next);
        callback.apply(null, [null].concat(args));
    };
    _iteratee(next);
}

/**
 * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the
 * argument ordering differs from `until`.
 *
 * @name doUntil
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}
 * @category Control Flow
 * @param {AsyncFunction} iteratee - An async function which is called each time
 * `test` fails. Invoked with (callback).
 * @param {Function} test - synchronous truth test to perform after each
 * execution of `iteratee`. Invoked with any non-error callback results of
 * `iteratee`.
 * @param {Function} [callback] - A callback which is called after the test
 * function has passed and repeated execution of `iteratee` has stopped. `callback`
 * will be passed an error and any arguments passed to the final `iteratee`'s
 * callback. Invoked with (err, [results]);
 */
function doUntil(iteratee, test, callback) {
    doWhilst(iteratee, function() {
        return !test.apply(this, arguments);
    }, callback);
}

/**
 * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that
 * is passed a callback in the form of `function (err, truth)`. If error is
 * passed to `test` or `fn`, the main callback is immediately called with the
 * value of the error.
 *
 * @name during
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.whilst]{@link module:ControlFlow.whilst}
 * @category Control Flow
 * @param {AsyncFunction} test - asynchronous truth test to perform before each
 * execution of `fn`. Invoked with (callback).
 * @param {AsyncFunction} fn - An async function which is called each time
 * `test` passes. Invoked with (callback).
 * @param {Function} [callback] - A callback which is called after the test
 * function has failed and repeated execution of `fn` has stopped. `callback`
 * will be passed an error, if one occurred, otherwise `null`.
 * @example
 *
 * var count = 0;
 *
 * async.during(
 *     function (callback) {
 *         return callback(null, count < 5);
 *     },
 *     function (callback) {
 *         count++;
 *         setTimeout(callback, 1000);
 *     },
 *     function (err) {
 *         // 5 seconds have passed
 *     }
 * );
 */
function during(test, fn, callback) {
    callback = onlyOnce(callback || noop);
    var _fn = wrapAsync(fn);
    var _test = wrapAsync(test);

    function next(err) {
        if (err) return callback(err);
        _test(check);
    }

    function check(err, truth) {
        if (err) return callback(err);
        if (!truth) return callback(null);
        _fn(next);
    }

    _test(check);
}

function _withoutIndex(iteratee) {
    return function (value, index, callback) {
        return iteratee(value, callback);
    };
}

/**
 * Applies the function `iteratee` to each item in `coll`, in parallel.
 * The `iteratee` is called with an item from the list, and a callback for when
 * it has finished. If the `iteratee` passes an error to its `callback`, the
 * main `callback` (for the `each` function) is immediately called with the
 * error.
 *
 * Note, that since this function applies `iteratee` to each item in parallel,
 * there is no guarantee that the iteratee functions will complete in order.
 *
 * @name each
 * @static
 * @memberOf module:Collections
 * @method
 * @alias forEach
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to
 * each item in `coll`. Invoked with (item, callback).
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOf`.
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 * @example
 *
 * // assuming openFiles is an array of file names and saveFile is a function
 * // to save the modified contents of that file:
 *
 * async.each(openFiles, saveFile, function(err){
 *   // if any of the saves produced an error, err would equal that error
 * });
 *
 * // assuming openFiles is an array of file names
 * async.each(openFiles, function(file, callback) {
 *
 *     // Perform operation on file here.
 *     console.log('Processing file ' + file);
 *
 *     if( file.length > 32 ) {
 *       console.log('This file name is too long');
 *       callback('File name too long');
 *     } else {
 *       // Do work to process file here
 *       console.log('File processed');
 *       callback();
 *     }
 * }, function(err) {
 *     // if any of the file processing produced an error, err would equal that error
 *     if( err ) {
 *       // One of the iterations produced an error.
 *       // All processing will now stop.
 *       console.log('A file failed to process');
 *     } else {
 *       console.log('All files have been processed successfully');
 *     }
 * });
 */
function eachLimit(coll, iteratee, callback) {
    eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback);
}

/**
 * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.
 *
 * @name eachLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.each]{@link module:Collections.each}
 * @alias forEachLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOfLimit`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
function eachLimit$1(coll, limit, iteratee, callback) {
    _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);
}

/**
 * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.
 *
 * @name eachSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.each]{@link module:Collections.each}
 * @alias forEachSeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each
 * item in `coll`.
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOfSeries`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
var eachSeries = doLimit(eachLimit$1, 1);

/**
 * Wrap an async function and ensure it calls its callback on a later tick of
 * the event loop.  If the function already calls its callback on a next tick,
 * no extra deferral is added. This is useful for preventing stack overflows
 * (`RangeError: Maximum call stack size exceeded`) and generally keeping
 * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)
 * contained. ES2017 `async` functions are returned as-is -- they are immune
 * to Zalgo's corrupting influences, as they always resolve on a later tick.
 *
 * @name ensureAsync
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} fn - an async function, one that expects a node-style
 * callback as its last argument.
 * @returns {AsyncFunction} Returns a wrapped function with the exact same call
 * signature as the function passed in.
 * @example
 *
 * function sometimesAsync(arg, callback) {
 *     if (cache[arg]) {
 *         return callback(null, cache[arg]); // this would be synchronous!!
 *     } else {
 *         doSomeIO(arg, callback); // this IO would be asynchronous
 *     }
 * }
 *
 * // this has a risk of stack overflows if many results are cached in a row
 * async.mapSeries(args, sometimesAsync, done);
 *
 * // this will defer sometimesAsync's callback if necessary,
 * // preventing stack overflows
 * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);
 */
function ensureAsync(fn) {
    if (isAsync(fn)) return fn;
    return initialParams(function (args, callback) {
        var sync = true;
        args.push(function () {
            var innerArgs = arguments;
            if (sync) {
                setImmediate$1(function () {
                    callback.apply(null, innerArgs);
                });
            } else {
                callback.apply(null, innerArgs);
            }
        });
        fn.apply(this, args);
        sync = false;
    });
}

function notId(v) {
    return !v;
}

/**
 * Returns `true` if every element in `coll` satisfies an async test. If any
 * iteratee call returns `false`, the main `callback` is immediately called.
 *
 * @name every
 * @static
 * @memberOf module:Collections
 * @method
 * @alias all
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collection in parallel.
 * The iteratee must complete with a boolean result value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result will be either `true` or `false`
 * depending on the values of the async tests. Invoked with (err, result).
 * @example
 *
 * async.every(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, result) {
 *     // if result is true then every file exists
 * });
 */
var every = doParallel(_createTester(notId, notId));

/**
 * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.
 *
 * @name everyLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.every]{@link module:Collections.every}
 * @alias allLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collection in parallel.
 * The iteratee must complete with a boolean result value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result will be either `true` or `false`
 * depending on the values of the async tests. Invoked with (err, result).
 */
var everyLimit = doParallelLimit(_createTester(notId, notId));

/**
 * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.
 *
 * @name everySeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.every]{@link module:Collections.every}
 * @alias allSeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collection in series.
 * The iteratee must complete with a boolean result value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result will be either `true` or `false`
 * depending on the values of the async tests. Invoked with (err, result).
 */
var everySeries = doLimit(everyLimit, 1);

/**
 * The base implementation of `_.property` without support for deep paths.
 *
 * @private
 * @param {string} key The key of the property to get.
 * @returns {Function} Returns the new accessor function.
 */
function baseProperty(key) {
  return function(object) {
    return object == null ? undefined : object[key];
  };
}

function filterArray(eachfn, arr, iteratee, callback) {
    var truthValues = new Array(arr.length);
    eachfn(arr, function (x, index, callback) {
        iteratee(x, function (err, v) {
            truthValues[index] = !!v;
            callback(err);
        });
    }, function (err) {
        if (err) return callback(err);
        var results = [];
        for (var i = 0; i < arr.length; i++) {
            if (truthValues[i]) results.push(arr[i]);
        }
        callback(null, results);
    });
}

function filterGeneric(eachfn, coll, iteratee, callback) {
    var results = [];
    eachfn(coll, function (x, index, callback) {
        iteratee(x, function (err, v) {
            if (err) {
                callback(err);
            } else {
                if (v) {
                    results.push({index: index, value: x});
                }
                callback();
            }
        });
    }, function (err) {
        if (err) {
            callback(err);
        } else {
            callback(null, arrayMap(results.sort(function (a, b) {
                return a.index - b.index;
            }), baseProperty('value')));
        }
    });
}

function _filter(eachfn, coll, iteratee, callback) {
    var filter = isArrayLike(coll) ? filterArray : filterGeneric;
    filter(eachfn, coll, wrapAsync(iteratee), callback || noop);
}

/**
 * Returns a new array of all the values in `coll` which pass an async truth
 * test. This operation is performed in parallel, but the results array will be
 * in the same order as the original.
 *
 * @name filter
 * @static
 * @memberOf module:Collections
 * @method
 * @alias select
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {Function} iteratee - A truth test to apply to each item in `coll`.
 * The `iteratee` is passed a `callback(err, truthValue)`, which must be called
 * with a boolean argument once it has completed. Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 * @example
 *
 * async.filter(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, results) {
 *     // results now equals an array of the existing files
 * });
 */
var filter = doParallel(_filter);

/**
 * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name filterLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.filter]{@link module:Collections.filter}
 * @alias selectLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {Function} iteratee - A truth test to apply to each item in `coll`.
 * The `iteratee` is passed a `callback(err, truthValue)`, which must be called
 * with a boolean argument once it has completed. Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 */
var filterLimit = doParallelLimit(_filter);

/**
 * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.
 *
 * @name filterSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.filter]{@link module:Collections.filter}
 * @alias selectSeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {Function} iteratee - A truth test to apply to each item in `coll`.
 * The `iteratee` is passed a `callback(err, truthValue)`, which must be called
 * with a boolean argument once it has completed. Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results)
 */
var filterSeries = doLimit(filterLimit, 1);

/**
 * Calls the asynchronous function `fn` with a callback parameter that allows it
 * to call itself again, in series, indefinitely.

 * If an error is passed to the callback then `errback` is called with the
 * error, and execution stops, otherwise it will never be called.
 *
 * @name forever
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {AsyncFunction} fn - an async function to call repeatedly.
 * Invoked with (next).
 * @param {Function} [errback] - when `fn` passes an error to it's callback,
 * this function will be called, and execution stops. Invoked with (err).
 * @example
 *
 * async.forever(
 *     function(next) {
 *         // next is suitable for passing to things that need a callback(err [, whatever]);
 *         // it will result in this function being called again.
 *     },
 *     function(err) {
 *         // if next is called with a value in its first parameter, it will appear
 *         // in here as 'err', and execution will stop.
 *     }
 * );
 */
function forever(fn, errback) {
    var done = onlyOnce(errback || noop);
    var task = wrapAsync(ensureAsync(fn));

    function next(err) {
        if (err) return done(err);
        task(next);
    }
    next();
}

/**
 * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.
 *
 * @name groupByLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.groupBy]{@link module:Collections.groupBy}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with a `key` to group the value under.
 * Invoked with (value, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Result is an `Object` whoses
 * properties are arrays of values which returned the corresponding key.
 */
var groupByLimit = function(coll, limit, iteratee, callback) {
    callback = callback || noop;
    var _iteratee = wrapAsync(iteratee);
    mapLimit(coll, limit, function(val, callback) {
        _iteratee(val, function(err, key) {
            if (err) return callback(err);
            return callback(null, {key: key, val: val});
        });
    }, function(err, mapResults) {
        var result = {};
        // from MDN, handle object having an `hasOwnProperty` prop
        var hasOwnProperty = Object.prototype.hasOwnProperty;

        for (var i = 0; i < mapResults.length; i++) {
            if (mapResults[i]) {
                var key = mapResults[i].key;
                var val = mapResults[i].val;

                if (hasOwnProperty.call(result, key)) {
                    result[key].push(val);
                } else {
                    result[key] = [val];
                }
            }
        }

        return callback(err, result);
    });
};

/**
 * Returns a new object, where each value corresponds to an array of items, from
 * `coll`, that returned the corresponding key. That is, the keys of the object
 * correspond to the values passed to the `iteratee` callback.
 *
 * Note: Since this function applies the `iteratee` to each item in parallel,
 * there is no guarantee that the `iteratee` functions will complete in order.
 * However, the values for each key in the `result` will be in the same order as
 * the original `coll`. For Objects, the values will roughly be in the order of
 * the original Objects' keys (but this can vary across JavaScript engines).
 *
 * @name groupBy
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with a `key` to group the value under.
 * Invoked with (value, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Result is an `Object` whoses
 * properties are arrays of values which returned the corresponding key.
 * @example
 *
 * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) {
 *     db.findById(userId, function(err, user) {
 *         if (err) return callback(err);
 *         return callback(null, user.age);
 *     });
 * }, function(err, result) {
 *     // result is object containing the userIds grouped by age
 *     // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']};
 * });
 */
var groupBy = doLimit(groupByLimit, Infinity);

/**
 * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.
 *
 * @name groupBySeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.groupBy]{@link module:Collections.groupBy}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with a `key` to group the value under.
 * Invoked with (value, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. Result is an `Object` whoses
 * properties are arrays of values which returned the corresponding key.
 */
var groupBySeries = doLimit(groupByLimit, 1);

/**
 * Logs the result of an `async` function to the `console`. Only works in
 * Node.js or in browsers that support `console.log` and `console.error` (such
 * as FF and Chrome). If multiple arguments are returned from the async
 * function, `console.log` is called on each argument in order.
 *
 * @name log
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} function - The function you want to eventually apply
 * all arguments to.
 * @param {...*} arguments... - Any number of arguments to apply to the function.
 * @example
 *
 * // in a module
 * var hello = function(name, callback) {
 *     setTimeout(function() {
 *         callback(null, 'hello ' + name);
 *     }, 1000);
 * };
 *
 * // in the node repl
 * node> async.log(hello, 'world');
 * 'hello world'
 */
var log = consoleFunc('log');

/**
 * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name mapValuesLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.mapValues]{@link module:Collections.mapValues}
 * @category Collection
 * @param {Object} obj - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - A function to apply to each value and key
 * in `coll`.
 * The iteratee should complete with the transformed value as its result.
 * Invoked with (value, key, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. `result` is a new object consisting
 * of each key from `obj`, with each transformed value on the right-hand side.
 * Invoked with (err, result).
 */
function mapValuesLimit(obj, limit, iteratee, callback) {
    callback = once(callback || noop);
    var newObj = {};
    var _iteratee = wrapAsync(iteratee);
    eachOfLimit(obj, limit, function(val, key, next) {
        _iteratee(val, key, function (err, result) {
            if (err) return next(err);
            newObj[key] = result;
            next();
        });
    }, function (err) {
        callback(err, newObj);
    });
}

/**
 * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.
 *
 * Produces a new Object by mapping each value of `obj` through the `iteratee`
 * function. The `iteratee` is called each `value` and `key` from `obj` and a
 * callback for when it has finished processing. Each of these callbacks takes
 * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`
 * passes an error to its callback, the main `callback` (for the `mapValues`
 * function) is immediately called with the error.
 *
 * Note, the order of the keys in the result is not guaranteed.  The keys will
 * be roughly in the order they complete, (but this is very engine-specific)
 *
 * @name mapValues
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Object} obj - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each value and key
 * in `coll`.
 * The iteratee should complete with the transformed value as its result.
 * Invoked with (value, key, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. `result` is a new object consisting
 * of each key from `obj`, with each transformed value on the right-hand side.
 * Invoked with (err, result).
 * @example
 *
 * async.mapValues({
 *     f1: 'file1',
 *     f2: 'file2',
 *     f3: 'file3'
 * }, function (file, key, callback) {
 *   fs.stat(file, callback);
 * }, function(err, result) {
 *     // result is now a map of stats for each file, e.g.
 *     // {
 *     //     f1: [stats for file1],
 *     //     f2: [stats for file2],
 *     //     f3: [stats for file3]
 *     // }
 * });
 */

var mapValues = doLimit(mapValuesLimit, Infinity);

/**
 * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.
 *
 * @name mapValuesSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.mapValues]{@link module:Collections.mapValues}
 * @category Collection
 * @param {Object} obj - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each value and key
 * in `coll`.
 * The iteratee should complete with the transformed value as its result.
 * Invoked with (value, key, callback).
 * @param {Function} [callback] - A callback which is called when all `iteratee`
 * functions have finished, or an error occurs. `result` is a new object consisting
 * of each key from `obj`, with each transformed value on the right-hand side.
 * Invoked with (err, result).
 */
var mapValuesSeries = doLimit(mapValuesLimit, 1);

function has(obj, key) {
    return key in obj;
}

/**
 * Caches the results of an async function. When creating a hash to store
 * function results against, the callback is omitted from the hash and an
 * optional hash function can be used.
 *
 * If no hash function is specified, the first argument is used as a hash key,
 * which may work reasonably if it is a string or a data type that converts to a
 * distinct string. Note that objects and arrays will not behave reasonably.
 * Neither will cases where the other arguments are significant. In such cases,
 * specify your own hash function.
 *
 * The cache of results is exposed as the `memo` property of the function
 * returned by `memoize`.
 *
 * @name memoize
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} fn - The async function to proxy and cache results from.
 * @param {Function} hasher - An optional function for generating a custom hash
 * for storing results. It has all the arguments applied to it apart from the
 * callback, and must be synchronous.
 * @returns {AsyncFunction} a memoized version of `fn`
 * @example
 *
 * var slow_fn = function(name, callback) {
 *     // do something
 *     callback(null, result);
 * };
 * var fn = async.memoize(slow_fn);
 *
 * // fn can now be used as if it were slow_fn
 * fn('some name', function() {
 *     // callback
 * });
 */
function memoize(fn, hasher) {
    var memo = Object.create(null);
    var queues = Object.create(null);
    hasher = hasher || identity;
    var _fn = wrapAsync(fn);
    var memoized = initialParams(function memoized(args, callback) {
        var key = hasher.apply(null, args);
        if (has(memo, key)) {
            setImmediate$1(function() {
                callback.apply(null, memo[key]);
            });
        } else if (has(queues, key)) {
            queues[key].push(callback);
        } else {
            queues[key] = [callback];
            _fn.apply(null, args.concat(function(/*args*/) {
                var args = slice(arguments);
                memo[key] = args;
                var q = queues[key];
                delete queues[key];
                for (var i = 0, l = q.length; i < l; i++) {
                    q[i].apply(null, args);
                }
            }));
        }
    });
    memoized.memo = memo;
    memoized.unmemoized = fn;
    return memoized;
}

/**
 * Calls `callback` on a later loop around the event loop. In Node.js this just
 * calls `process.nextTick`.  In the browser it will use `setImmediate` if
 * available, otherwise `setTimeout(callback, 0)`, which means other higher
 * priority events may precede the execution of `callback`.
 *
 * This is used internally for browser-compatibility purposes.
 *
 * @name nextTick
 * @static
 * @memberOf module:Utils
 * @method
 * @see [async.setImmediate]{@link module:Utils.setImmediate}
 * @category Util
 * @param {Function} callback - The function to call on a later loop around
 * the event loop. Invoked with (args...).
 * @param {...*} args... - any number of additional arguments to pass to the
 * callback on the next tick.
 * @example
 *
 * var call_order = [];
 * async.nextTick(function() {
 *     call_order.push('two');
 *     // call_order now equals ['one','two']
 * });
 * call_order.push('one');
 *
 * async.setImmediate(function (a, b, c) {
 *     // a, b, and c equal 1, 2, and 3
 * }, 1, 2, 3);
 */
var _defer$1;

if (hasNextTick) {
    _defer$1 = process.nextTick;
} else if (hasSetImmediate) {
    _defer$1 = setImmediate;
} else {
    _defer$1 = fallback;
}

var nextTick = wrap(_defer$1);

function _parallel(eachfn, tasks, callback) {
    callback = callback || noop;
    var results = isArrayLike(tasks) ? [] : {};

    eachfn(tasks, function (task, key, callback) {
        wrapAsync(task)(function (err, result) {
            if (arguments.length > 2) {
                result = slice(arguments, 1);
            }
            results[key] = result;
            callback(err);
        });
    }, function (err) {
        callback(err, results);
    });
}

/**
 * Run the `tasks` collection of functions in parallel, without waiting until
 * the previous function has completed. If any of the functions pass an error to
 * its callback, the main `callback` is immediately called with the value of the
 * error. Once the `tasks` have completed, the results are passed to the final
 * `callback` as an array.
 *
 * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about
 * parallel execution of code.  If your tasks do not use any timers or perform
 * any I/O, they will actually be executed in series.  Any synchronous setup
 * sections for each task will happen one after the other.  JavaScript remains
 * single-threaded.
 *
 * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the
 * execution of other tasks when a task fails.
 *
 * It is also possible to use an object instead of an array. Each property will
 * be run as a function and the results will be passed to the final `callback`
 * as an object instead of an array. This can be a more readable way of handling
 * results from {@link async.parallel}.
 *
 * @name parallel
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array|Iterable|Object} tasks - A collection of
 * [async functions]{@link AsyncFunction} to run.
 * Each async function can complete with any number of optional `result` values.
 * @param {Function} [callback] - An optional callback to run once all the
 * functions have completed successfully. This function gets a results array
 * (or object) containing all the result arguments passed to the task callbacks.
 * Invoked with (err, results).
 *
 * @example
 * async.parallel([
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'one');
 *         }, 200);
 *     },
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'two');
 *         }, 100);
 *     }
 * ],
 * // optional callback
 * function(err, results) {
 *     // the results array will equal ['one','two'] even though
 *     // the second function had a shorter timeout.
 * });
 *
 * // an example using an object instead of an array
 * async.parallel({
 *     one: function(callback) {
 *         setTimeout(function() {
 *             callback(null, 1);
 *         }, 200);
 *     },
 *     two: function(callback) {
 *         setTimeout(function() {
 *             callback(null, 2);
 *         }, 100);
 *     }
 * }, function(err, results) {
 *     // results is now equals to: {one: 1, two: 2}
 * });
 */
function parallelLimit(tasks, callback) {
    _parallel(eachOf, tasks, callback);
}

/**
 * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name parallelLimit
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.parallel]{@link module:ControlFlow.parallel}
 * @category Control Flow
 * @param {Array|Iterable|Object} tasks - A collection of
 * [async functions]{@link AsyncFunction} to run.
 * Each async function can complete with any number of optional `result` values.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {Function} [callback] - An optional callback to run once all the
 * functions have completed successfully. This function gets a results array
 * (or object) containing all the result arguments passed to the task callbacks.
 * Invoked with (err, results).
 */
function parallelLimit$1(tasks, limit, callback) {
    _parallel(_eachOfLimit(limit), tasks, callback);
}

/**
 * A queue of tasks for the worker function to complete.
 * @typedef {Object} QueueObject
 * @memberOf module:ControlFlow
 * @property {Function} length - a function returning the number of items
 * waiting to be processed. Invoke with `queue.length()`.
 * @property {boolean} started - a boolean indicating whether or not any
 * items have been pushed and processed by the queue.
 * @property {Function} running - a function returning the number of items
 * currently being processed. Invoke with `queue.running()`.
 * @property {Function} workersList - a function returning the array of items
 * currently being processed. Invoke with `queue.workersList()`.
 * @property {Function} idle - a function returning false if there are items
 * waiting or being processed, or true if not. Invoke with `queue.idle()`.
 * @property {number} concurrency - an integer for determining how many `worker`
 * functions should be run in parallel. This property can be changed after a
 * `queue` is created to alter the concurrency on-the-fly.
 * @property {Function} push - add a new task to the `queue`. Calls `callback`
 * once the `worker` has finished processing the task. Instead of a single task,
 * a `tasks` array can be submitted. The respective callback is used for every
 * task in the list. Invoke with `queue.push(task, [callback])`,
 * @property {Function} unshift - add a new task to the front of the `queue`.
 * Invoke with `queue.unshift(task, [callback])`.
 * @property {Function} remove - remove items from the queue that match a test
 * function.  The test function will be passed an object with a `data` property,
 * and a `priority` property, if this is a
 * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.
 * Invoked with `queue.remove(testFn)`, where `testFn` is of the form
 * `function ({data, priority}) {}` and returns a Boolean.
 * @property {Function} saturated - a callback that is called when the number of
 * running workers hits the `concurrency` limit, and further tasks will be
 * queued.
 * @property {Function} unsaturated - a callback that is called when the number
 * of running workers is less than the `concurrency` & `buffer` limits, and
 * further tasks will not be queued.
 * @property {number} buffer - A minimum threshold buffer in order to say that
 * the `queue` is `unsaturated`.
 * @property {Function} empty - a callback that is called when the last item
 * from the `queue` is given to a `worker`.
 * @property {Function} drain - a callback that is called when the last item
 * from the `queue` has returned from the `worker`.
 * @property {Function} error - a callback that is called when a task errors.
 * Has the signature `function(error, task)`.
 * @property {boolean} paused - a boolean for determining whether the queue is
 * in a paused state.
 * @property {Function} pause - a function that pauses the processing of tasks
 * until `resume()` is called. Invoke with `queue.pause()`.
 * @property {Function} resume - a function that resumes the processing of
 * queued tasks when the queue is paused. Invoke with `queue.resume()`.
 * @property {Function} kill - a function that removes the `drain` callback and
 * empties remaining tasks from the queue forcing it to go idle. No more tasks
 * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.
 */

/**
 * Creates a `queue` object with the specified `concurrency`. Tasks added to the
 * `queue` are processed in parallel (up to the `concurrency` limit). If all
 * `worker`s are in progress, the task is queued until one becomes available.
 * Once a `worker` completes a `task`, that `task`'s callback is called.
 *
 * @name queue
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {AsyncFunction} worker - An async function for processing a queued task.
 * If you want to handle errors from an individual task, pass a callback to
 * `q.push()`. Invoked with (task, callback).
 * @param {number} [concurrency=1] - An `integer` for determining how many
 * `worker` functions should be run in parallel.  If omitted, the concurrency
 * defaults to `1`.  If the concurrency is `0`, an error is thrown.
 * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can
 * attached as certain properties to listen for specific events during the
 * lifecycle of the queue.
 * @example
 *
 * // create a queue object with concurrency 2
 * var q = async.queue(function(task, callback) {
 *     console.log('hello ' + task.name);
 *     callback();
 * }, 2);
 *
 * // assign a callback
 * q.drain = function() {
 *     console.log('all items have been processed');
 * };
 *
 * // add some items to the queue
 * q.push({name: 'foo'}, function(err) {
 *     console.log('finished processing foo');
 * });
 * q.push({name: 'bar'}, function (err) {
 *     console.log('finished processing bar');
 * });
 *
 * // add some items to the queue (batch-wise)
 * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {
 *     console.log('finished processing item');
 * });
 *
 * // add some items to the front of the queue
 * q.unshift({name: 'bar'}, function (err) {
 *     console.log('finished processing bar');
 * });
 */
var queue$1 = function (worker, concurrency) {
    var _worker = wrapAsync(worker);
    return queue(function (items, cb) {
        _worker(items[0], cb);
    }, concurrency, 1);
};

/**
 * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and
 * completed in ascending priority order.
 *
 * @name priorityQueue
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.queue]{@link module:ControlFlow.queue}
 * @category Control Flow
 * @param {AsyncFunction} worker - An async function for processing a queued task.
 * If you want to handle errors from an individual task, pass a callback to
 * `q.push()`.
 * Invoked with (task, callback).
 * @param {number} concurrency - An `integer` for determining how many `worker`
 * functions should be run in parallel.  If omitted, the concurrency defaults to
 * `1`.  If the concurrency is `0`, an error is thrown.
 * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two
 * differences between `queue` and `priorityQueue` objects:
 * * `push(task, priority, [callback])` - `priority` should be a number. If an
 *   array of `tasks` is given, all tasks will be assigned the same priority.
 * * The `unshift` method was removed.
 */
var priorityQueue = function(worker, concurrency) {
    // Start with a normal queue
    var q = queue$1(worker, concurrency);

    // Override push to accept second parameter representing priority
    q.push = function(data, priority, callback) {
        if (callback == null) callback = noop;
        if (typeof callback !== 'function') {
            throw new Error('task callback must be a function');
        }
        q.started = true;
        if (!isArray(data)) {
            data = [data];
        }
        if (data.length === 0) {
            // call drain immediately if there are no tasks
            return setImmediate$1(function() {
                q.drain();
            });
        }

        priority = priority || 0;
        var nextNode = q._tasks.head;
        while (nextNode && priority >= nextNode.priority) {
            nextNode = nextNode.next;
        }

        for (var i = 0, l = data.length; i < l; i++) {
            var item = {
                data: data[i],
                priority: priority,
                callback: callback
            };

            if (nextNode) {
                q._tasks.insertBefore(nextNode, item);
            } else {
                q._tasks.push(item);
            }
        }
        setImmediate$1(q.process);
    };

    // Remove unshift function
    delete q.unshift;

    return q;
};

/**
 * Runs the `tasks` array of functions in parallel, without waiting until the
 * previous function has completed. Once any of the `tasks` complete or pass an
 * error to its callback, the main `callback` is immediately called. It's
 * equivalent to `Promise.race()`.
 *
 * @name race
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}
 * to run. Each function can complete with an optional `result` value.
 * @param {Function} callback - A callback to run once any of the functions have
 * completed. This function gets an error or result from the first function that
 * completed. Invoked with (err, result).
 * @returns undefined
 * @example
 *
 * async.race([
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'one');
 *         }, 200);
 *     },
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'two');
 *         }, 100);
 *     }
 * ],
 * // main callback
 * function(err, result) {
 *     // the result will be equal to 'two' as it finishes earlier
 * });
 */
function race(tasks, callback) {
    callback = once(callback || noop);
    if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));
    if (!tasks.length) return callback();
    for (var i = 0, l = tasks.length; i < l; i++) {
        wrapAsync(tasks[i])(callback);
    }
}

/**
 * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.
 *
 * @name reduceRight
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.reduce]{@link module:Collections.reduce}
 * @alias foldr
 * @category Collection
 * @param {Array} array - A collection to iterate over.
 * @param {*} memo - The initial state of the reduction.
 * @param {AsyncFunction} iteratee - A function applied to each item in the
 * array to produce the next step in the reduction.
 * The `iteratee` should complete with the next state of the reduction.
 * If the iteratee complete with an error, the reduction is stopped and the
 * main `callback` is immediately called with the error.
 * Invoked with (memo, item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result is the reduced value. Invoked with
 * (err, result).
 */
function reduceRight (array, memo, iteratee, callback) {
    var reversed = slice(array).reverse();
    reduce(reversed, memo, iteratee, callback);
}

/**
 * Wraps the async function in another function that always completes with a
 * result object, even when it errors.
 *
 * The result object has either the property `error` or `value`.
 *
 * @name reflect
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} fn - The async function you want to wrap
 * @returns {Function} - A function that always passes null to it's callback as
 * the error. The second argument to the callback will be an `object` with
 * either an `error` or a `value` property.
 * @example
 *
 * async.parallel([
 *     async.reflect(function(callback) {
 *         // do some stuff ...
 *         callback(null, 'one');
 *     }),
 *     async.reflect(function(callback) {
 *         // do some more stuff but error ...
 *         callback('bad stuff happened');
 *     }),
 *     async.reflect(function(callback) {
 *         // do some more stuff ...
 *         callback(null, 'two');
 *     })
 * ],
 * // optional callback
 * function(err, results) {
 *     // values
 *     // results[0].value = 'one'
 *     // results[1].error = 'bad stuff happened'
 *     // results[2].value = 'two'
 * });
 */
function reflect(fn) {
    var _fn = wrapAsync(fn);
    return initialParams(function reflectOn(args, reflectCallback) {
        args.push(function callback(error, cbArg) {
            if (error) {
                reflectCallback(null, { error: error });
            } else {
                var value;
                if (arguments.length <= 2) {
                    value = cbArg;
                } else {
                    value = slice(arguments, 1);
                }
                reflectCallback(null, { value: value });
            }
        });

        return _fn.apply(this, args);
    });
}

/**
 * A helper function that wraps an array or an object of functions with `reflect`.
 *
 * @name reflectAll
 * @static
 * @memberOf module:Utils
 * @method
 * @see [async.reflect]{@link module:Utils.reflect}
 * @category Util
 * @param {Array|Object|Iterable} tasks - The collection of
 * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.
 * @returns {Array} Returns an array of async functions, each wrapped in
 * `async.reflect`
 * @example
 *
 * let tasks = [
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'one');
 *         }, 200);
 *     },
 *     function(callback) {
 *         // do some more stuff but error ...
 *         callback(new Error('bad stuff happened'));
 *     },
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'two');
 *         }, 100);
 *     }
 * ];
 *
 * async.parallel(async.reflectAll(tasks),
 * // optional callback
 * function(err, results) {
 *     // values
 *     // results[0].value = 'one'
 *     // results[1].error = Error('bad stuff happened')
 *     // results[2].value = 'two'
 * });
 *
 * // an example using an object instead of an array
 * let tasks = {
 *     one: function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'one');
 *         }, 200);
 *     },
 *     two: function(callback) {
 *         callback('two');
 *     },
 *     three: function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'three');
 *         }, 100);
 *     }
 * };
 *
 * async.parallel(async.reflectAll(tasks),
 * // optional callback
 * function(err, results) {
 *     // values
 *     // results.one.value = 'one'
 *     // results.two.error = 'two'
 *     // results.three.value = 'three'
 * });
 */
function reflectAll(tasks) {
    var results;
    if (isArray(tasks)) {
        results = arrayMap(tasks, reflect);
    } else {
        results = {};
        baseForOwn(tasks, function(task, key) {
            results[key] = reflect.call(this, task);
        });
    }
    return results;
}

function reject$1(eachfn, arr, iteratee, callback) {
    _filter(eachfn, arr, function(value, cb) {
        iteratee(value, function(err, v) {
            cb(err, !v);
        });
    }, callback);
}

/**
 * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.
 *
 * @name reject
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.filter]{@link module:Collections.filter}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {Function} iteratee - An async truth test to apply to each item in
 * `coll`.
 * The should complete with a boolean value as its `result`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 * @example
 *
 * async.reject(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, results) {
 *     // results now equals an array of missing files
 *     createFiles(results);
 * });
 */
var reject = doParallel(reject$1);

/**
 * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name rejectLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.reject]{@link module:Collections.reject}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {Function} iteratee - An async truth test to apply to each item in
 * `coll`.
 * The should complete with a boolean value as its `result`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 */
var rejectLimit = doParallelLimit(reject$1);

/**
 * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.
 *
 * @name rejectSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.reject]{@link module:Collections.reject}
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {Function} iteratee - An async truth test to apply to each item in
 * `coll`.
 * The should complete with a boolean value as its `result`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 */
var rejectSeries = doLimit(rejectLimit, 1);

/**
 * Creates a function that returns `value`.
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Util
 * @param {*} value The value to return from the new function.
 * @returns {Function} Returns the new constant function.
 * @example
 *
 * var objects = _.times(2, _.constant({ 'a': 1 }));
 *
 * console.log(objects);
 * // => [{ 'a': 1 }, { 'a': 1 }]
 *
 * console.log(objects[0] === objects[1]);
 * // => true
 */
function constant$1(value) {
  return function() {
    return value;
  };
}

/**
 * Attempts to get a successful response from `task` no more than `times` times
 * before returning an error. If the task is successful, the `callback` will be
 * passed the result of the successful task. If all attempts fail, the callback
 * will be passed the error and result (if any) of the final attempt.
 *
 * @name retry
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @see [async.retryable]{@link module:ControlFlow.retryable}
 * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an
 * object with `times` and `interval` or a number.
 * * `times` - The number of attempts to make before giving up.  The default
 *   is `5`.
 * * `interval` - The time to wait between retries, in milliseconds.  The
 *   default is `0`. The interval may also be specified as a function of the
 *   retry count (see example).
 * * `errorFilter` - An optional synchronous function that is invoked on
 *   erroneous result. If it returns `true` the retry attempts will continue;
 *   if the function returns `false` the retry flow is aborted with the current
 *   attempt's error and result being returned to the final callback.
 *   Invoked with (err).
 * * If `opts` is a number, the number specifies the number of times to retry,
 *   with the default interval of `0`.
 * @param {AsyncFunction} task - An async function to retry.
 * Invoked with (callback).
 * @param {Function} [callback] - An optional callback which is called when the
 * task has succeeded, or after the final failed attempt. It receives the `err`
 * and `result` arguments of the last attempt at completing the `task`. Invoked
 * with (err, results).
 *
 * @example
 *
 * // The `retry` function can be used as a stand-alone control flow by passing
 * // a callback, as shown below:
 *
 * // try calling apiMethod 3 times
 * async.retry(3, apiMethod, function(err, result) {
 *     // do something with the result
 * });
 *
 * // try calling apiMethod 3 times, waiting 200 ms between each retry
 * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {
 *     // do something with the result
 * });
 *
 * // try calling apiMethod 10 times with exponential backoff
 * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)
 * async.retry({
 *   times: 10,
 *   interval: function(retryCount) {
 *     return 50 * Math.pow(2, retryCount);
 *   }
 * }, apiMethod, function(err, result) {
 *     // do something with the result
 * });
 *
 * // try calling apiMethod the default 5 times no delay between each retry
 * async.retry(apiMethod, function(err, result) {
 *     // do something with the result
 * });
 *
 * // try calling apiMethod only when error condition satisfies, all other
 * // errors will abort the retry control flow and return to final callback
 * async.retry({
 *   errorFilter: function(err) {
 *     return err.message === 'Temporary error'; // only retry on a specific error
 *   }
 * }, apiMethod, function(err, result) {
 *     // do something with the result
 * });
 *
 * // to retry individual methods that are not as reliable within other
 * // control flow functions, use the `retryable` wrapper:
 * async.auto({
 *     users: api.getUsers.bind(api),
 *     payments: async.retryable(3, api.getPayments.bind(api))
 * }, function(err, results) {
 *     // do something with the results
 * });
 *
 */
function retry(opts, task, callback) {
    var DEFAULT_TIMES = 5;
    var DEFAULT_INTERVAL = 0;

    var options = {
        times: DEFAULT_TIMES,
        intervalFunc: constant$1(DEFAULT_INTERVAL)
    };

    function parseTimes(acc, t) {
        if (typeof t === 'object') {
            acc.times = +t.times || DEFAULT_TIMES;

            acc.intervalFunc = typeof t.interval === 'function' ?
                t.interval :
                constant$1(+t.interval || DEFAULT_INTERVAL);

            acc.errorFilter = t.errorFilter;
        } else if (typeof t === 'number' || typeof t === 'string') {
            acc.times = +t || DEFAULT_TIMES;
        } else {
            throw new Error("Invalid arguments for async.retry");
        }
    }

    if (arguments.length < 3 && typeof opts === 'function') {
        callback = task || noop;
        task = opts;
    } else {
        parseTimes(options, opts);
        callback = callback || noop;
    }

    if (typeof task !== 'function') {
        throw new Error("Invalid arguments for async.retry");
    }

    var _task = wrapAsync(task);

    var attempt = 1;
    function retryAttempt() {
        _task(function(err) {
            if (err && attempt++ < options.times &&
                (typeof options.errorFilter != 'function' ||
                    options.errorFilter(err))) {
                setTimeout(retryAttempt, options.intervalFunc(attempt));
            } else {
                callback.apply(null, arguments);
            }
        });
    }

    retryAttempt();
}

/**
 * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method
 * wraps a task and makes it retryable, rather than immediately calling it
 * with retries.
 *
 * @name retryable
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.retry]{@link module:ControlFlow.retry}
 * @category Control Flow
 * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional
 * options, exactly the same as from `retry`
 * @param {AsyncFunction} task - the asynchronous function to wrap.
 * This function will be passed any arguments passed to the returned wrapper.
 * Invoked with (...args, callback).
 * @returns {AsyncFunction} The wrapped function, which when invoked, will
 * retry on an error, based on the parameters specified in `opts`.
 * This function will accept the same parameters as `task`.
 * @example
 *
 * async.auto({
 *     dep1: async.retryable(3, getFromFlakyService),
 *     process: ["dep1", async.retryable(3, function (results, cb) {
 *         maybeProcessData(results.dep1, cb);
 *     })]
 * }, callback);
 */
var retryable = function (opts, task) {
    if (!task) {
        task = opts;
        opts = null;
    }
    var _task = wrapAsync(task);
    return initialParams(function (args, callback) {
        function taskFn(cb) {
            _task.apply(null, args.concat(cb));
        }

        if (opts) retry(opts, taskFn, callback);
        else retry(taskFn, callback);

    });
};

/**
 * Run the functions in the `tasks` collection in series, each one running once
 * the previous function has completed. If any functions in the series pass an
 * error to its callback, no more functions are run, and `callback` is
 * immediately called with the value of the error. Otherwise, `callback`
 * receives an array of results when `tasks` have completed.
 *
 * It is also possible to use an object instead of an array. Each property will
 * be run as a function, and the results will be passed to the final `callback`
 * as an object instead of an array. This can be a more readable way of handling
 *  results from {@link async.series}.
 *
 * **Note** that while many implementations preserve the order of object
 * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)
 * explicitly states that
 *
 * > The mechanics and order of enumerating the properties is not specified.
 *
 * So if you rely on the order in which your series of functions are executed,
 * and want this to work on all platforms, consider using an array.
 *
 * @name series
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array|Iterable|Object} tasks - A collection containing
 * [async functions]{@link AsyncFunction} to run in series.
 * Each function can complete with any number of optional `result` values.
 * @param {Function} [callback] - An optional callback to run once all the
 * functions have completed. This function gets a results array (or object)
 * containing all the result arguments passed to the `task` callbacks. Invoked
 * with (err, result).
 * @example
 * async.series([
 *     function(callback) {
 *         // do some stuff ...
 *         callback(null, 'one');
 *     },
 *     function(callback) {
 *         // do some more stuff ...
 *         callback(null, 'two');
 *     }
 * ],
 * // optional callback
 * function(err, results) {
 *     // results is now equal to ['one', 'two']
 * });
 *
 * async.series({
 *     one: function(callback) {
 *         setTimeout(function() {
 *             callback(null, 1);
 *         }, 200);
 *     },
 *     two: function(callback){
 *         setTimeout(function() {
 *             callback(null, 2);
 *         }, 100);
 *     }
 * }, function(err, results) {
 *     // results is now equal to: {one: 1, two: 2}
 * });
 */
function series(tasks, callback) {
    _parallel(eachOfSeries, tasks, callback);
}

/**
 * Returns `true` if at least one element in the `coll` satisfies an async test.
 * If any iteratee call returns `true`, the main `callback` is immediately
 * called.
 *
 * @name some
 * @static
 * @memberOf module:Collections
 * @method
 * @alias any
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collections in parallel.
 * The iteratee should complete with a boolean `result` value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the iteratee functions have finished.
 * Result will be either `true` or `false` depending on the values of the async
 * tests. Invoked with (err, result).
 * @example
 *
 * async.some(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, result) {
 *     // if result is true then at least one of the files exists
 * });
 */
var some = doParallel(_createTester(Boolean, identity));

/**
 * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.
 *
 * @name someLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.some]{@link module:Collections.some}
 * @alias anyLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collections in parallel.
 * The iteratee should complete with a boolean `result` value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the iteratee functions have finished.
 * Result will be either `true` or `false` depending on the values of the async
 * tests. Invoked with (err, result).
 */
var someLimit = doParallelLimit(_createTester(Boolean, identity));

/**
 * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.
 *
 * @name someSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.some]{@link module:Collections.some}
 * @alias anySeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async truth test to apply to each item
 * in the collections in series.
 * The iteratee should complete with a boolean `result` value.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the iteratee functions have finished.
 * Result will be either `true` or `false` depending on the values of the async
 * tests. Invoked with (err, result).
 */
var someSeries = doLimit(someLimit, 1);

/**
 * Sorts a list by the results of running each `coll` value through an async
 * `iteratee`.
 *
 * @name sortBy
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The iteratee should complete with a value to use as the sort criteria as
 * its `result`.
 * Invoked with (item, callback).
 * @param {Function} callback - A callback which is called after all the
 * `iteratee` functions have finished, or an error occurs. Results is the items
 * from the original `coll` sorted by the values returned by the `iteratee`
 * calls. Invoked with (err, results).
 * @example
 *
 * async.sortBy(['file1','file2','file3'], function(file, callback) {
 *     fs.stat(file, function(err, stats) {
 *         callback(err, stats.mtime);
 *     });
 * }, function(err, results) {
 *     // results is now the original array of files sorted by
 *     // modified date
 * });
 *
 * // By modifying the callback parameter the
 * // sorting order can be influenced:
 *
 * // ascending order
 * async.sortBy([1,9,3,5], function(x, callback) {
 *     callback(null, x);
 * }, function(err,result) {
 *     // result callback
 * });
 *
 * // descending order
 * async.sortBy([1,9,3,5], function(x, callback) {
 *     callback(null, x*-1);    //<- x*-1 instead of x, turns the order around
 * }, function(err,result) {
 *     // result callback
 * });
 */
function sortBy (coll, iteratee, callback) {
    var _iteratee = wrapAsync(iteratee);
    map(coll, function (x, callback) {
        _iteratee(x, function (err, criteria) {
            if (err) return callback(err);
            callback(null, {value: x, criteria: criteria});
        });
    }, function (err, results) {
        if (err) return callback(err);
        callback(null, arrayMap(results.sort(comparator), baseProperty('value')));
    });

    function comparator(left, right) {
        var a = left.criteria, b = right.criteria;
        return a < b ? -1 : a > b ? 1 : 0;
    }
}

/**
 * Sets a time limit on an asynchronous function. If the function does not call
 * its callback within the specified milliseconds, it will be called with a
 * timeout error. The code property for the error object will be `'ETIMEDOUT'`.
 *
 * @name timeout
 * @static
 * @memberOf module:Utils
 * @method
 * @category Util
 * @param {AsyncFunction} asyncFn - The async function to limit in time.
 * @param {number} milliseconds - The specified time limit.
 * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)
 * to timeout Error for more information..
 * @returns {AsyncFunction} Returns a wrapped function that can be used with any
 * of the control flow functions.
 * Invoke this function with the same parameters as you would `asyncFunc`.
 * @example
 *
 * function myFunction(foo, callback) {
 *     doAsyncTask(foo, function(err, data) {
 *         // handle errors
 *         if (err) return callback(err);
 *
 *         // do some stuff ...
 *
 *         // return processed data
 *         return callback(null, data);
 *     });
 * }
 *
 * var wrapped = async.timeout(myFunction, 1000);
 *
 * // call `wrapped` as you would `myFunction`
 * wrapped({ bar: 'bar' }, function(err, data) {
 *     // if `myFunction` takes < 1000 ms to execute, `err`
 *     // and `data` will have their expected values
 *
 *     // else `err` will be an Error with the code 'ETIMEDOUT'
 * });
 */
function timeout(asyncFn, milliseconds, info) {
    var fn = wrapAsync(asyncFn);

    return initialParams(function (args, callback) {
        var timedOut = false;
        var timer;

        function timeoutCallback() {
            var name = asyncFn.name || 'anonymous';
            var error  = new Error('Callback function "' + name + '" timed out.');
            error.code = 'ETIMEDOUT';
            if (info) {
                error.info = info;
            }
            timedOut = true;
            callback(error);
        }

        args.push(function () {
            if (!timedOut) {
                callback.apply(null, arguments);
                clearTimeout(timer);
            }
        });

        // setup timer and call original function
        timer = setTimeout(timeoutCallback, milliseconds);
        fn.apply(null, args);
    });
}

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil;
var nativeMax = Math.max;

/**
 * The base implementation of `_.range` and `_.rangeRight` which doesn't
 * coerce arguments.
 *
 * @private
 * @param {number} start The start of the range.
 * @param {number} end The end of the range.
 * @param {number} step The value to increment or decrement by.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Array} Returns the range of numbers.
 */
function baseRange(start, end, step, fromRight) {
  var index = -1,
      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
      result = Array(length);

  while (length--) {
    result[fromRight ? length : ++index] = start;
    start += step;
  }
  return result;
}

/**
 * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name timesLimit
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.times]{@link module:ControlFlow.times}
 * @category Control Flow
 * @param {number} count - The number of times to run the function.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - The async function to call `n` times.
 * Invoked with the iteration index and a callback: (n, next).
 * @param {Function} callback - see [async.map]{@link module:Collections.map}.
 */
function timeLimit(count, limit, iteratee, callback) {
    var _iteratee = wrapAsync(iteratee);
    mapLimit(baseRange(0, count, 1), limit, _iteratee, callback);
}

/**
 * Calls the `iteratee` function `n` times, and accumulates results in the same
 * manner you would use with [map]{@link module:Collections.map}.
 *
 * @name times
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.map]{@link module:Collections.map}
 * @category Control Flow
 * @param {number} n - The number of times to run the function.
 * @param {AsyncFunction} iteratee - The async function to call `n` times.
 * Invoked with the iteration index and a callback: (n, next).
 * @param {Function} callback - see {@link module:Collections.map}.
 * @example
 *
 * // Pretend this is some complicated async factory
 * var createUser = function(id, callback) {
 *     callback(null, {
 *         id: 'user' + id
 *     });
 * };
 *
 * // generate 5 users
 * async.times(5, function(n, next) {
 *     createUser(n, function(err, user) {
 *         next(err, user);
 *     });
 * }, function(err, users) {
 *     // we should now have 5 users
 * });
 */
var times = doLimit(timeLimit, Infinity);

/**
 * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.
 *
 * @name timesSeries
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.times]{@link module:ControlFlow.times}
 * @category Control Flow
 * @param {number} n - The number of times to run the function.
 * @param {AsyncFunction} iteratee - The async function to call `n` times.
 * Invoked with the iteration index and a callback: (n, next).
 * @param {Function} callback - see {@link module:Collections.map}.
 */
var timesSeries = doLimit(timeLimit, 1);

/**
 * A relative of `reduce`.  Takes an Object or Array, and iterates over each
 * element in series, each step potentially mutating an `accumulator` value.
 * The type of the accumulator defaults to the type of collection passed in.
 *
 * @name transform
 * @static
 * @memberOf module:Collections
 * @method
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {*} [accumulator] - The initial state of the transform.  If omitted,
 * it will default to an empty Object or Array, depending on the type of `coll`
 * @param {AsyncFunction} iteratee - A function applied to each item in the
 * collection that potentially modifies the accumulator.
 * Invoked with (accumulator, item, key, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Result is the transformed accumulator.
 * Invoked with (err, result).
 * @example
 *
 * async.transform([1,2,3], function(acc, item, index, callback) {
 *     // pointless async:
 *     process.nextTick(function() {
 *         acc.push(item * 2)
 *         callback(null)
 *     });
 * }, function(err, result) {
 *     // result is now equal to [2, 4, 6]
 * });
 *
 * @example
 *
 * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) {
 *     setImmediate(function () {
 *         obj[key] = val * 2;
 *         callback();
 *     })
 * }, function (err, result) {
 *     // result is equal to {a: 2, b: 4, c: 6}
 * })
 */
function transform (coll, accumulator, iteratee, callback) {
    if (arguments.length <= 3) {
        callback = iteratee;
        iteratee = accumulator;
        accumulator = isArray(coll) ? [] : {};
    }
    callback = once(callback || noop);
    var _iteratee = wrapAsync(iteratee);

    eachOf(coll, function(v, k, cb) {
        _iteratee(accumulator, v, k, cb);
    }, function(err) {
        callback(err, accumulator);
    });
}

/**
 * It runs each task in series but stops whenever any of the functions were
 * successful. If one of the tasks were successful, the `callback` will be
 * passed the result of the successful task. If all tasks fail, the callback
 * will be passed the error and result (if any) of the final attempt.
 *
 * @name tryEach
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array|Iterable|Object} tasks - A collection containing functions to
 * run, each function is passed a `callback(err, result)` it must call on
 * completion with an error `err` (which can be `null`) and an optional `result`
 * value.
 * @param {Function} [callback] - An optional callback which is called when one
 * of the tasks has succeeded, or all have failed. It receives the `err` and
 * `result` arguments of the last attempt at completing the `task`. Invoked with
 * (err, results).
 * @example
 * async.tryEach([
 *     function getDataFromFirstWebsite(callback) {
 *         // Try getting the data from the first website
 *         callback(err, data);
 *     },
 *     function getDataFromSecondWebsite(callback) {
 *         // First website failed,
 *         // Try getting the data from the backup website
 *         callback(err, data);
 *     }
 * ],
 * // optional callback
 * function(err, results) {
 *     Now do something with the data.
 * });
 *
 */
function tryEach(tasks, callback) {
    var error = null;
    var result;
    callback = callback || noop;
    eachSeries(tasks, function(task, callback) {
        wrapAsync(task)(function (err, res/*, ...args*/) {
            if (arguments.length > 2) {
                result = slice(arguments, 1);
            } else {
                result = res;
            }
            error = err;
            callback(!err);
        });
    }, function () {
        callback(error, result);
    });
}

/**
 * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,
 * unmemoized form. Handy for testing.
 *
 * @name unmemoize
 * @static
 * @memberOf module:Utils
 * @method
 * @see [async.memoize]{@link module:Utils.memoize}
 * @category Util
 * @param {AsyncFunction} fn - the memoized function
 * @returns {AsyncFunction} a function that calls the original unmemoized function
 */
function unmemoize(fn) {
    return function () {
        return (fn.unmemoized || fn).apply(null, arguments);
    };
}

/**
 * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when
 * stopped, or an error occurs.
 *
 * @name whilst
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Function} test - synchronous truth test to perform before each
 * execution of `iteratee`. Invoked with ().
 * @param {AsyncFunction} iteratee - An async function which is called each time
 * `test` passes. Invoked with (callback).
 * @param {Function} [callback] - A callback which is called after the test
 * function has failed and repeated execution of `iteratee` has stopped. `callback`
 * will be passed an error and any arguments passed to the final `iteratee`'s
 * callback. Invoked with (err, [results]);
 * @returns undefined
 * @example
 *
 * var count = 0;
 * async.whilst(
 *     function() { return count < 5; },
 *     function(callback) {
 *         count++;
 *         setTimeout(function() {
 *             callback(null, count);
 *         }, 1000);
 *     },
 *     function (err, n) {
 *         // 5 seconds have passed, n = 5
 *     }
 * );
 */
function whilst(test, iteratee, callback) {
    callback = onlyOnce(callback || noop);
    var _iteratee = wrapAsync(iteratee);
    if (!test()) return callback(null);
    var next = function(err/*, ...args*/) {
        if (err) return callback(err);
        if (test()) return _iteratee(next);
        var args = slice(arguments, 1);
        callback.apply(null, [null].concat(args));
    };
    _iteratee(next);
}

/**
 * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when
 * stopped, or an error occurs. `callback` will be passed an error and any
 * arguments passed to the final `iteratee`'s callback.
 *
 * The inverse of [whilst]{@link module:ControlFlow.whilst}.
 *
 * @name until
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @see [async.whilst]{@link module:ControlFlow.whilst}
 * @category Control Flow
 * @param {Function} test - synchronous truth test to perform before each
 * execution of `iteratee`. Invoked with ().
 * @param {AsyncFunction} iteratee - An async function which is called each time
 * `test` fails. Invoked with (callback).
 * @param {Function} [callback] - A callback which is called after the test
 * function has passed and repeated execution of `iteratee` has stopped. `callback`
 * will be passed an error and any arguments passed to the final `iteratee`'s
 * callback. Invoked with (err, [results]);
 */
function until(test, iteratee, callback) {
    whilst(function() {
        return !test.apply(this, arguments);
    }, iteratee, callback);
}

/**
 * Runs the `tasks` array of functions in series, each passing their results to
 * the next in the array. However, if any of the `tasks` pass an error to their
 * own callback, the next function is not executed, and the main `callback` is
 * immediately called with the error.
 *
 * @name waterfall
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}
 * to run.
 * Each function should complete with any number of `result` values.
 * The `result` values will be passed as arguments, in order, to the next task.
 * @param {Function} [callback] - An optional callback to run once all the
 * functions have completed. This will be passed the results of the last task's
 * callback. Invoked with (err, [results]).
 * @returns undefined
 * @example
 *
 * async.waterfall([
 *     function(callback) {
 *         callback(null, 'one', 'two');
 *     },
 *     function(arg1, arg2, callback) {
 *         // arg1 now equals 'one' and arg2 now equals 'two'
 *         callback(null, 'three');
 *     },
 *     function(arg1, callback) {
 *         // arg1 now equals 'three'
 *         callback(null, 'done');
 *     }
 * ], function (err, result) {
 *     // result now equals 'done'
 * });
 *
 * // Or, with named functions:
 * async.waterfall([
 *     myFirstFunction,
 *     mySecondFunction,
 *     myLastFunction,
 * ], function (err, result) {
 *     // result now equals 'done'
 * });
 * function myFirstFunction(callback) {
 *     callback(null, 'one', 'two');
 * }
 * function mySecondFunction(arg1, arg2, callback) {
 *     // arg1 now equals 'one' and arg2 now equals 'two'
 *     callback(null, 'three');
 * }
 * function myLastFunction(arg1, callback) {
 *     // arg1 now equals 'three'
 *     callback(null, 'done');
 * }
 */
var waterfall = function(tasks, callback) {
    callback = once(callback || noop);
    if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));
    if (!tasks.length) return callback();
    var taskIndex = 0;

    function nextTask(args) {
        var task = wrapAsync(tasks[taskIndex++]);
        args.push(onlyOnce(next));
        task.apply(null, args);
    }

    function next(err/*, ...args*/) {
        if (err || taskIndex === tasks.length) {
            return callback.apply(null, arguments);
        }
        nextTask(slice(arguments, 1));
    }

    nextTask([]);
};

/**
 * An "async function" in the context of Async is an asynchronous function with
 * a variable number of parameters, with the final parameter being a callback.
 * (`function (arg1, arg2, ..., callback) {}`)
 * The final callback is of the form `callback(err, results...)`, which must be
 * called once the function is completed.  The callback should be called with a
 * Error as its first argument to signal that an error occurred.
 * Otherwise, if no error occurred, it should be called with `null` as the first
 * argument, and any additional `result` arguments that may apply, to signal
 * successful completion.
 * The callback must be called exactly once, ideally on a later tick of the
 * JavaScript event loop.
 *
 * This type of function is also referred to as a "Node-style async function",
 * or a "continuation passing-style function" (CPS). Most of the methods of this
 * library are themselves CPS/Node-style async functions, or functions that
 * return CPS/Node-style async functions.
 *
 * Wherever we accept a Node-style async function, we also directly accept an
 * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.
 * In this case, the `async` function will not be passed a final callback
 * argument, and any thrown error will be used as the `err` argument of the
 * implicit callback, and the return value will be used as the `result` value.
 * (i.e. a `rejected` of the returned Promise becomes the `err` callback
 * argument, and a `resolved` value becomes the `result`.)
 *
 * Note, due to JavaScript limitations, we can only detect native `async`
 * functions and not transpilied implementations.
 * Your environment must have `async`/`await` support for this to work.
 * (e.g. Node > v7.6, or a recent version of a modern browser).
 * If you are using `async` functions through a transpiler (e.g. Babel), you
 * must still wrap the function with [asyncify]{@link module:Utils.asyncify},
 * because the `async function` will be compiled to an ordinary function that
 * returns a promise.
 *
 * @typedef {Function} AsyncFunction
 * @static
 */

/**
 * Async is a utility module which provides straight-forward, powerful functions
 * for working with asynchronous JavaScript. Although originally designed for
 * use with [Node.js](http://nodejs.org) and installable via
 * `npm install --save async`, it can also be used directly in the browser.
 * @module async
 * @see AsyncFunction
 */


/**
 * A collection of `async` functions for manipulating collections, such as
 * arrays and objects.
 * @module Collections
 */

/**
 * A collection of `async` functions for controlling the flow through a script.
 * @module ControlFlow
 */

/**
 * A collection of `async` utility functions.
 * @module Utils
 */

var index = {
    apply: apply,
    applyEach: applyEach,
    applyEachSeries: applyEachSeries,
    asyncify: asyncify,
    auto: auto,
    autoInject: autoInject,
    cargo: cargo,
    compose: compose,
    concat: concat,
    concatLimit: concatLimit,
    concatSeries: concatSeries,
    constant: constant,
    detect: detect,
    detectLimit: detectLimit,
    detectSeries: detectSeries,
    dir: dir,
    doDuring: doDuring,
    doUntil: doUntil,
    doWhilst: doWhilst,
    during: during,
    each: eachLimit,
    eachLimit: eachLimit$1,
    eachOf: eachOf,
    eachOfLimit: eachOfLimit,
    eachOfSeries: eachOfSeries,
    eachSeries: eachSeries,
    ensureAsync: ensureAsync,
    every: every,
    everyLimit: everyLimit,
    everySeries: everySeries,
    filter: filter,
    filterLimit: filterLimit,
    filterSeries: filterSeries,
    forever: forever,
    groupBy: groupBy,
    groupByLimit: groupByLimit,
    groupBySeries: groupBySeries,
    log: log,
    map: map,
    mapLimit: mapLimit,
    mapSeries: mapSeries,
    mapValues: mapValues,
    mapValuesLimit: mapValuesLimit,
    mapValuesSeries: mapValuesSeries,
    memoize: memoize,
    nextTick: nextTick,
    parallel: parallelLimit,
    parallelLimit: parallelLimit$1,
    priorityQueue: priorityQueue,
    queue: queue$1,
    race: race,
    reduce: reduce,
    reduceRight: reduceRight,
    reflect: reflect,
    reflectAll: reflectAll,
    reject: reject,
    rejectLimit: rejectLimit,
    rejectSeries: rejectSeries,
    retry: retry,
    retryable: retryable,
    seq: seq,
    series: series,
    setImmediate: setImmediate$1,
    some: some,
    someLimit: someLimit,
    someSeries: someSeries,
    sortBy: sortBy,
    timeout: timeout,
    times: times,
    timesLimit: timeLimit,
    timesSeries: timesSeries,
    transform: transform,
    tryEach: tryEach,
    unmemoize: unmemoize,
    until: until,
    waterfall: waterfall,
    whilst: whilst,

    // aliases
    all: every,
    allLimit: everyLimit,
    allSeries: everySeries,
    any: some,
    anyLimit: someLimit,
    anySeries: someSeries,
    find: detect,
    findLimit: detectLimit,
    findSeries: detectSeries,
    forEach: eachLimit,
    forEachSeries: eachSeries,
    forEachLimit: eachLimit$1,
    forEachOf: eachOf,
    forEachOfSeries: eachOfSeries,
    forEachOfLimit: eachOfLimit,
    inject: reduce,
    foldl: reduce,
    foldr: reduceRight,
    select: filter,
    selectLimit: filterLimit,
    selectSeries: filterSeries,
    wrapSync: asyncify
};

exports['default'] = index;
exports.apply = apply;
exports.applyEach = applyEach;
exports.applyEachSeries = applyEachSeries;
exports.asyncify = asyncify;
exports.auto = auto;
exports.autoInject = autoInject;
exports.cargo = cargo;
exports.compose = compose;
exports.concat = concat;
exports.concatLimit = concatLimit;
exports.concatSeries = concatSeries;
exports.constant = constant;
exports.detect = detect;
exports.detectLimit = detectLimit;
exports.detectSeries = detectSeries;
exports.dir = dir;
exports.doDuring = doDuring;
exports.doUntil = doUntil;
exports.doWhilst = doWhilst;
exports.during = during;
exports.each = eachLimit;
exports.eachLimit = eachLimit$1;
exports.eachOf = eachOf;
exports.eachOfLimit = eachOfLimit;
exports.eachOfSeries = eachOfSeries;
exports.eachSeries = eachSeries;
exports.ensureAsync = ensureAsync;
exports.every = every;
exports.everyLimit = everyLimit;
exports.everySeries = everySeries;
exports.filter = filter;
exports.filterLimit = filterLimit;
exports.filterSeries = filterSeries;
exports.forever = forever;
exports.groupBy = groupBy;
exports.groupByLimit = groupByLimit;
exports.groupBySeries = groupBySeries;
exports.log = log;
exports.map = map;
exports.mapLimit = mapLimit;
exports.mapSeries = mapSeries;
exports.mapValues = mapValues;
exports.mapValuesLimit = mapValuesLimit;
exports.mapValuesSeries = mapValuesSeries;
exports.memoize = memoize;
exports.nextTick = nextTick;
exports.parallel = parallelLimit;
exports.parallelLimit = parallelLimit$1;
exports.priorityQueue = priorityQueue;
exports.queue = queue$1;
exports.race = race;
exports.reduce = reduce;
exports.reduceRight = reduceRight;
exports.reflect = reflect;
exports.reflectAll = reflectAll;
exports.reject = reject;
exports.rejectLimit = rejectLimit;
exports.rejectSeries = rejectSeries;
exports.retry = retry;
exports.retryable = retryable;
exports.seq = seq;
exports.series = series;
exports.setImmediate = setImmediate$1;
exports.some = some;
exports.someLimit = someLimit;
exports.someSeries = someSeries;
exports.sortBy = sortBy;
exports.timeout = timeout;
exports.times = times;
exports.timesLimit = timeLimit;
exports.timesSeries = timesSeries;
exports.transform = transform;
exports.tryEach = tryEach;
exports.unmemoize = unmemoize;
exports.until = until;
exports.waterfall = waterfall;
exports.whilst = whilst;
exports.all = every;
exports.allLimit = everyLimit;
exports.allSeries = everySeries;
exports.any = some;
exports.anyLimit = someLimit;
exports.anySeries = someSeries;
exports.find = detect;
exports.findLimit = detectLimit;
exports.findSeries = detectSeries;
exports.forEach = eachLimit;
exports.forEachSeries = eachSeries;
exports.forEachLimit = eachLimit$1;
exports.forEachOf = eachOf;
exports.forEachOfSeries = eachOfSeries;
exports.forEachOfLimit = eachOfLimit;
exports.inject = reduce;
exports.foldl = reduce;
exports.foldr = reduceRight;
exports.select = filter;
exports.selectLimit = filterLimit;
exports.selectSeries = filterSeries;
exports.wrapSync = asyncify;

Object.defineProperty(exports, '__esModule', { value: true });

})));

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(30);
var core = __webpack_require__(26);
var ctx = __webpack_require__(61);
var hide = __webpack_require__(77);
var has = __webpack_require__(112);
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var IS_WRAP = type & $export.W;
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE];
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
  var key, own, out;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    if (own && has(exports, key)) continue;
    // export native or passed
    out = own ? target[key] : source[key];
    // prevent global pollution for namespaces
    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
    // bind timers to global for call from export context
    : IS_BIND && own ? ctx(out, global)
    // wrap global constructors for prevent change them in library
    : IS_WRAP && target[key] == out ? (function (C) {
      var F = function (a, b, c) {
        if (this instanceof C) {
          switch (arguments.length) {
            case 0: return new C();
            case 1: return new C(a);
            case 2: return new C(a, b);
          } return new C(a, b, c);
        } return C.apply(this, arguments);
      };
      F[PROTOTYPE] = C[PROTOTYPE];
      return F;
    // make static versions for prototype methods
    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
    if (IS_PROTO) {
      (exports.virtual || (exports.virtual = {}))[key] = out;
      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
    }
  }
};
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),
/* 30 */
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


exports.fromCallback = function (fn) {
  return Object.defineProperty(function () {
    if (typeof arguments[arguments.length - 1] === 'function') fn.apply(this, arguments)
    else {
      return new Promise((resolve, reject) => {
        arguments[arguments.length] = (err, res) => {
          if (err) return reject(err)
          resolve(res)
        }
        arguments.length++
        fn.apply(this, arguments)
      })
    }
  }, 'name', { value: fn.name })
}

exports.fromPromise = function (fn) {
  return Object.defineProperty(function () {
    const cb = arguments[arguments.length - 1]
    if (typeof cb !== 'function') return fn.apply(this, arguments)
    else fn.apply(this, arguments).then(r => cb(null, r), cb)
  }, 'name', { value: fn.name })
}


/***/ }),
/* 32 */
/***/ (function(module, exports) {

module.exports = require("net");

/***/ }),
/* 33 */
/***/ (function(module, exports) {

module.exports = require("tty");

/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(308)('wks');
var uid = __webpack_require__(207);
var Symbol = __webpack_require__(30).Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const u = __webpack_require__(31).fromCallback
const mkdirs = u(__webpack_require__(826))
const mkdirsSync = __webpack_require__(825)

module.exports = {
  mkdirs,
  mkdirsSync,
  // alias
  mkdirp: mkdirs,
  mkdirpSync: mkdirsSync,
  ensureDir: mkdirs,
  ensureDirSync: mkdirsSync
}


/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  mkdirs: __webpack_require__(220),
  mkdirsSync: __webpack_require__(219),
  // alias
  mkdirp: __webpack_require__(220),
  mkdirpSync: __webpack_require__(219),
  ensureDir: __webpack_require__(220),
  ensureDirSync: __webpack_require__(219)
}


/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

/* global window */

var lodash;

if (true) {
  try {
    lodash = __webpack_require__(24);
  } catch (e) {}
}

if (!lodash) {
  lodash = window._;
}

module.exports = lodash;


/***/ }),
/* 38 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return sym; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return TASK; });
/* unused harmony export HELPER */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return MATCH; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CANCEL; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SAGA_ACTION; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return SELF_CANCELLATION; });
/* unused harmony export konst */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return kTrue; });
/* unused harmony export kFalse */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return noop; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return ident; });
/* harmony export (immutable) */ __webpack_exports__["n"] = check;
/* unused harmony export hasOwn */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return is; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return object; });
/* harmony export (immutable) */ __webpack_exports__["l"] = remove;
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return array; });
/* harmony export (immutable) */ __webpack_exports__["g"] = deferred;
/* harmony export (immutable) */ __webpack_exports__["h"] = arrayOfDeffered;
/* harmony export (immutable) */ __webpack_exports__["a"] = delay;
/* harmony export (immutable) */ __webpack_exports__["i"] = createMockTask;
/* unused harmony export autoInc */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return uid; });
/* harmony export (immutable) */ __webpack_exports__["m"] = makeIterator;
/* harmony export (immutable) */ __webpack_exports__["q"] = log;
/* harmony export (immutable) */ __webpack_exports__["o"] = deprecate;
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return updateIncentive; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return internalErr; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return createSetContextWarning; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return wrapSagaDispatch; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return cloneableGenerator; });
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

var sym = function sym(id) {
  return '@@redux-saga/' + id;
};

var TASK = /*#__PURE__*/sym('TASK');
var HELPER = /*#__PURE__*/sym('HELPER');
var MATCH = /*#__PURE__*/sym('MATCH');
var CANCEL = /*#__PURE__*/sym('CANCEL_PROMISE');
var SAGA_ACTION = /*#__PURE__*/sym('SAGA_ACTION');
var SELF_CANCELLATION = /*#__PURE__*/sym('SELF_CANCELLATION');
var konst = function konst(v) {
  return function () {
    return v;
  };
};
var kTrue = /*#__PURE__*/konst(true);
var kFalse = /*#__PURE__*/konst(false);
var noop = function noop() {};
var ident = function ident(v) {
  return v;
};

function check(value, predicate, error) {
  if (!predicate(value)) {
    log('error', 'uncaught at check', error);
    throw new Error(error);
  }
}

var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(object, property) {
  return is.notUndef(object) && hasOwnProperty.call(object, property);
}

var is = {
  undef: function undef(v) {
    return v === null || v === undefined;
  },
  notUndef: function notUndef(v) {
    return v !== null && v !== undefined;
  },
  func: function func(f) {
    return typeof f === 'function';
  },
  number: function number(n) {
    return typeof n === 'number';
  },
  string: function string(s) {
    return typeof s === 'string';
  },
  array: Array.isArray,
  object: function object(obj) {
    return obj && !is.array(obj) && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';
  },
  promise: function promise(p) {
    return p && is.func(p.then);
  },
  iterator: function iterator(it) {
    return it && is.func(it.next) && is.func(it.throw);
  },
  iterable: function iterable(it) {
    return it && is.func(Symbol) ? is.func(it[Symbol.iterator]) : is.array(it);
  },
  task: function task(t) {
    return t && t[TASK];
  },
  observable: function observable(ob) {
    return ob && is.func(ob.subscribe);
  },
  buffer: function buffer(buf) {
    return buf && is.func(buf.isEmpty) && is.func(buf.take) && is.func(buf.put);
  },
  pattern: function pattern(pat) {
    return pat && (is.string(pat) || (typeof pat === 'undefined' ? 'undefined' : _typeof(pat)) === 'symbol' || is.func(pat) || is.array(pat));
  },
  channel: function channel(ch) {
    return ch && is.func(ch.take) && is.func(ch.close);
  },
  helper: function helper(it) {
    return it && it[HELPER];
  },
  stringableFunc: function stringableFunc(f) {
    return is.func(f) && hasOwn(f, 'toString');
  }
};

var object = {
  assign: function assign(target, source) {
    for (var i in source) {
      if (hasOwn(source, i)) {
        target[i] = source[i];
      }
    }
  }
};

function remove(array, item) {
  var index = array.indexOf(item);
  if (index >= 0) {
    array.splice(index, 1);
  }
}

var array = {
  from: function from(obj) {
    var arr = Array(obj.length);
    for (var i in obj) {
      if (hasOwn(obj, i)) {
        arr[i] = obj[i];
      }
    }
    return arr;
  }
};

function deferred() {
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

  var def = _extends({}, props);
  var promise = new Promise(function (resolve, reject) {
    def.resolve = resolve;
    def.reject = reject;
  });
  def.promise = promise;
  return def;
}

function arrayOfDeffered(length) {
  var arr = [];
  for (var i = 0; i < length; i++) {
    arr.push(deferred());
  }
  return arr;
}

function delay(ms) {
  var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

  var timeoutId = void 0;
  var promise = new Promise(function (resolve) {
    timeoutId = setTimeout(function () {
      return resolve(val);
    }, ms);
  });

  promise[CANCEL] = function () {
    return clearTimeout(timeoutId);
  };

  return promise;
}

function createMockTask() {
  var _ref;

  var running = true;
  var _result = void 0,
      _error = void 0;

  return _ref = {}, _ref[TASK] = true, _ref.isRunning = function isRunning() {
    return running;
  }, _ref.result = function result() {
    return _result;
  }, _ref.error = function error() {
    return _error;
  }, _ref.setRunning = function setRunning(b) {
    return running = b;
  }, _ref.setResult = function setResult(r) {
    return _result = r;
  }, _ref.setError = function setError(e) {
    return _error = e;
  }, _ref;
}

function autoInc() {
  var seed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

  return function () {
    return ++seed;
  };
}

var uid = /*#__PURE__*/autoInc();

var kThrow = function kThrow(err) {
  throw err;
};
var kReturn = function kReturn(value) {
  return { value: value, done: true };
};
function makeIterator(next) {
  var thro = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : kThrow;
  var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
  var isHelper = arguments[3];

  var iterator = { name: name, next: next, throw: thro, return: kReturn };

  if (isHelper) {
    iterator[HELPER] = true;
  }
  if (typeof Symbol !== 'undefined') {
    iterator[Symbol.iterator] = function () {
      return iterator;
    };
  }
  return iterator;
}

/**
  Print error in a useful way whether in a browser environment
  (with expandable error stack traces), or in a node.js environment
  (text-only log output)
 **/
function log(level, message) {
  var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';

  /*eslint-disable no-console*/
  if (typeof window === 'undefined') {
    console.log('redux-saga ' + level + ': ' + message + '\n' + (error && error.stack || error));
  } else {
    console[level](message, error);
  }
}

function deprecate(fn, deprecationWarning) {
  return function () {
    if (process.env.NODE_ENV === 'development') log('warn', deprecationWarning);
    return fn.apply(undefined, arguments);
  };
}

var updateIncentive = function updateIncentive(deprecated, preferred) {
  return deprecated + ' has been deprecated in favor of ' + preferred + ', please update your code';
};

var internalErr = function internalErr(err) {
  return new Error('\n  redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\n  in redux-saga code and not yours. Thanks for reporting this in the project\'s github repo.\n  Error: ' + err + '\n');
};

var createSetContextWarning = function createSetContextWarning(ctx, props) {
  return (ctx ? ctx + '.' : '') + 'setContext(props): argument ' + props + ' is not a plain object';
};

var wrapSagaDispatch = function wrapSagaDispatch(dispatch) {
  return function (action) {
    return dispatch(Object.defineProperty(action, SAGA_ACTION, { value: true }));
  };
};

var cloneableGenerator = function cloneableGenerator(generatorFunc) {
  return function () {
    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    var history = [];
    var gen = generatorFunc.apply(undefined, args);
    return {
      next: function next(arg) {
        history.push(arg);
        return gen.next(arg);
      },
      clone: function clone() {
        var clonedGen = cloneableGenerator(generatorFunc).apply(undefined, args);
        history.forEach(function (arg) {
          return clonedGen.next(arg);
        });
        return clonedGen;
      },
      return: function _return(value) {
        return gen.return(value);
      },
      throw: function _throw(exception) {
        return gen.throw(exception);
      }
    };
  };
};

/***/ }),
/* 39 */
/***/ (function(module, exports) {

module.exports = require("child_process");

/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(152);
var utils = __webpack_require__(14);
var c = __webpack_require__(153);
var SolidityParam = __webpack_require__(328);


/**
 * Formats input value to byte representation of int
 * If value is negative, return it's two's complement
 * If the value is floating point, round it down
 *
 * @method formatInputInt
 * @param {String|Number|BigNumber} value that needs to be formatted
 * @returns {SolidityParam}
 */
var formatInputInt = function (value) {
    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
    var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatDynamicInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputDynamicBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of string
 *
 * @method formatInputString
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputString = function (value) {
    var result = utils.fromUtf8(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of bool
 *
 * @method formatInputBool
 * @param {Boolean}
 * @returns {SolidityParam}
 */
var formatInputBool = function (value) {
    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
    return new SolidityParam(result);
};

/**
 * Formats input value to byte representation of real
 * Values are multiplied by 2^m and encoded as integers
 *
 * @method formatInputReal
 * @param {String|Number|BigNumber}
 * @returns {SolidityParam}
 */
var formatInputReal = function (value) {
    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
};

/**
 * Check if input value is negative
 *
 * @method signedIsNegative
 * @param {String} value is hex format
 * @returns {Boolean} true if it is negative, otherwise false
 */
var signedIsNegative = function (value) {
    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
};

/**
 * Formats right-aligned output bytes to int
 *
 * @method formatOutputInt
 * @param {SolidityParam} param
 * @returns {BigNumber} right-aligned output bytes formatted to big number
 */
var formatOutputInt = function (param) {
    var value = param.staticPart() || "0";

    // check if it's negative number
    // it it is, return two's complement
    if (signedIsNegative(value)) {
        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
    }
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to uint
 *
 * @method formatOutputUInt
 * @param {SolidityParam}
 * @returns {BigNumeber} right-aligned output bytes formatted to uint
 */
var formatOutputUInt = function (param) {
    var value = param.staticPart() || "0";
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to real
 *
 * @method formatOutputReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to real
 */
var formatOutputReal = function (param) {
    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); 
};

/**
 * Formats right-aligned output bytes to ureal
 *
 * @method formatOutputUReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to ureal
 */
var formatOutputUReal = function (param) {
    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); 
};

/**
 * Should be used to format output bool
 *
 * @method formatOutputBool
 * @param {SolidityParam}
 * @returns {Boolean} right-aligned input bytes formatted to bool
 */
var formatOutputBool = function (param) {
    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} hex string
 */
var formatOutputBytes = function (param) {
    return '0x' + param.staticPart();
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputDynamicBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} hex string
 */
var formatOutputDynamicBytes = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return '0x' + param.dynamicPart().substr(64, length);
};

/**
 * Should be used to format output string
 *
 * @method formatOutputString
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} ascii string
 */
var formatOutputString = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return utils.toUtf8(param.dynamicPart().substr(64, length));
};

/**
 * Should be used to format output address
 *
 * @method formatOutputAddress
 * @param {SolidityParam} right-aligned input bytes
 * @returns {String} address
 */
var formatOutputAddress = function (param) {
    var value = param.staticPart();
    return "0x" + value.slice(value.length - 40, value.length);
};

module.exports = {
    formatInputInt: formatInputInt,
    formatInputBytes: formatInputBytes,
    formatInputDynamicBytes: formatInputDynamicBytes,
    formatInputString: formatInputString,
    formatInputBool: formatInputBool,
    formatInputReal: formatInputReal,
    formatOutputInt: formatOutputInt,
    formatOutputUInt: formatOutputUInt,
    formatOutputReal: formatOutputReal,
    formatOutputUReal: formatOutputUReal,
    formatOutputBool: formatOutputBool,
    formatOutputBytes: formatOutputBytes,
    formatOutputDynamicBytes: formatOutputDynamicBytes,
    formatOutputString: formatOutputString,
    formatOutputAddress: formatOutputAddress
};



/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(117);
var utils = __webpack_require__(15);
var c = __webpack_require__(157);
var SolidityParam = __webpack_require__(332);


/**
 * Formats input value to byte representation of int
 * If value is negative, return it's two's complement
 * If the value is floating point, round it down
 *
 * @method formatInputInt
 * @param {String|Number|BigNumber} value that needs to be formatted
 * @returns {SolidityParam}
 */
var formatInputInt = function (value) {
    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
    var result = utils.padLeft(utils.toTwosComplement(value).toString(16), 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatDynamicInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputDynamicBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of string
 *
 * @method formatInputString
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputString = function (value) {
    var result = utils.fromUtf8(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of bool
 *
 * @method formatInputBool
 * @param {Boolean}
 * @returns {SolidityParam}
 */
var formatInputBool = function (value) {
    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
    return new SolidityParam(result);
};

/**
 * Formats input value to byte representation of real
 * Values are multiplied by 2^m and encoded as integers
 *
 * @method formatInputReal
 * @param {String|Number|BigNumber}
 * @returns {SolidityParam}
 */
var formatInputReal = function (value) {
    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
};

/**
 * Check if input value is negative
 *
 * @method signedIsNegative
 * @param {String} value is hex format
 * @returns {Boolean} true if it is negative, otherwise false
 */
var signedIsNegative = function (value) {
    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
};

/**
 * Formats right-aligned output bytes to int
 *
 * @method formatOutputInt
 * @param {SolidityParam} param
 * @returns {BigNumber} right-aligned output bytes formatted to big number
 */
var formatOutputInt = function (param) {
    var value = param.staticPart() || "0";

    // check if it's negative number
    // it it is, return two's complement
    if (signedIsNegative(value)) {
        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
    }
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to uint
 *
 * @method formatOutputUInt
 * @param {SolidityParam}
 * @returns {BigNumeber} right-aligned output bytes formatted to uint
 */
var formatOutputUInt = function (param) {
    var value = param.staticPart() || "0";
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to real
 *
 * @method formatOutputReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to real
 */
var formatOutputReal = function (param) {
    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
};

/**
 * Formats right-aligned output bytes to ureal
 *
 * @method formatOutputUReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to ureal
 */
var formatOutputUReal = function (param) {
    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
};

/**
 * Should be used to format output bool
 *
 * @method formatOutputBool
 * @param {SolidityParam}
 * @returns {Boolean} right-aligned input bytes formatted to bool
 */
var formatOutputBool = function (param) {
    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @param {String} name type name
 * @returns {String} hex string
 */
var formatOutputBytes = function (param, name) {
    var matches = name.match(/^bytes([0-9]*)/);
    var size = parseInt(matches[1]);
    return '0x' + param.staticPart().slice(0, 2 * size);
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputDynamicBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} hex string
 */
var formatOutputDynamicBytes = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return '0x' + param.dynamicPart().substr(64, length);
};

/**
 * Should be used to format output string
 *
 * @method formatOutputString
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} ascii string
 */
var formatOutputString = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return utils.toUtf8(param.dynamicPart().substr(64, length));
};

/**
 * Should be used to format output address
 *
 * @method formatOutputAddress
 * @param {SolidityParam} right-aligned input bytes
 * @returns {String} address
 */
var formatOutputAddress = function (param) {
    var value = param.staticPart();
    return "0x" + value.slice(value.length - 40, value.length);
};

module.exports = {
    formatInputInt: formatInputInt,
    formatInputBytes: formatInputBytes,
    formatInputDynamicBytes: formatInputDynamicBytes,
    formatInputString: formatInputString,
    formatInputBool: formatInputBool,
    formatInputReal: formatInputReal,
    formatOutputInt: formatOutputInt,
    formatOutputUInt: formatOutputUInt,
    formatOutputReal: formatOutputReal,
    formatOutputUReal: formatOutputUReal,
    formatOutputBool: formatOutputBool,
    formatOutputBytes: formatOutputBytes,
    formatOutputDynamicBytes: formatOutputDynamicBytes,
    formatOutputString: formatOutputString,
    formatOutputAddress: formatOutputAddress
};


/***/ }),
/* 42 */
/***/ (function(module, exports) {

/**
 * Helpers.
 */

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;

/**
 * Parse or format the given `val`.
 *
 * Options:
 *
 *  - `long` verbose formatting [false]
 *
 * @param {String|Number} val
 * @param {Object} [options]
 * @throws {Error} throw an error if val is not a non-empty string or a number
 * @return {String|Number}
 * @api public
 */

module.exports = function(val, options) {
  options = options || {};
  var type = typeof val;
  if (type === 'string' && val.length > 0) {
    return parse(val);
  } else if (type === 'number' && isNaN(val) === false) {
    return options.long ? fmtLong(val) : fmtShort(val);
  }
  throw new Error(
    'val is not a non-empty string or a valid number. val=' +
      JSON.stringify(val)
  );
};

/**
 * Parse the given `str` and return milliseconds.
 *
 * @param {String} str
 * @return {Number}
 * @api private
 */

function parse(str) {
  str = String(str);
  if (str.length > 100) {
    return;
  }
  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
    str
  );
  if (!match) {
    return;
  }
  var n = parseFloat(match[1]);
  var type = (match[2] || 'ms').toLowerCase();
  switch (type) {
    case 'years':
    case 'year':
    case 'yrs':
    case 'yr':
    case 'y':
      return n * y;
    case 'days':
    case 'day':
    case 'd':
      return n * d;
    case 'hours':
    case 'hour':
    case 'hrs':
    case 'hr':
    case 'h':
      return n * h;
    case 'minutes':
    case 'minute':
    case 'mins':
    case 'min':
    case 'm':
      return n * m;
    case 'seconds':
    case 'second':
    case 'secs':
    case 'sec':
    case 's':
      return n * s;
    case 'milliseconds':
    case 'millisecond':
    case 'msecs':
    case 'msec':
    case 'ms':
      return n;
    default:
      return undefined;
  }
}

/**
 * Short format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtShort(ms) {
  if (ms >= d) {
    return Math.round(ms / d) + 'd';
  }
  if (ms >= h) {
    return Math.round(ms / h) + 'h';
  }
  if (ms >= m) {
    return Math.round(ms / m) + 'm';
  }
  if (ms >= s) {
    return Math.round(ms / s) + 's';
  }
  return ms + 'ms';
}

/**
 * Long format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtLong(ms) {
  return plural(ms, d, 'day') ||
    plural(ms, h, 'hour') ||
    plural(ms, m, 'minute') ||
    plural(ms, s, 'second') ||
    ms + ' ms';
}

/**
 * Pluralization helper.
 */

function plural(ms, n, name) {
  if (ms < n) {
    return;
  }
  if (ms < n * 1.5) {
    return Math.floor(ms / n) + ' ' + name;
  }
  return Math.ceil(ms / n) + ' ' + name + 's';
}


/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(108);
var utils = __webpack_require__(17);
var c = __webpack_require__(170);
var SolidityParam = __webpack_require__(432);


/**
 * Formats input value to byte representation of int
 * If value is negative, return it's two's complement
 * If the value is floating point, round it down
 *
 * @method formatInputInt
 * @param {String|Number|BigNumber} value that needs to be formatted
 * @returns {SolidityParam}
 */
var formatInputInt = function (value) {
    BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
    var result = utils.padLeft(utils.toTwosComplement(value).toString(16), 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(result);
};

/**
 * Formats input bytes
 *
 * @method formatDynamicInputBytes
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputDynamicBytes = function (value) {
    var result = utils.toHex(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of string
 *
 * @method formatInputString
 * @param {String}
 * @returns {SolidityParam}
 */
var formatInputString = function (value) {
    var result = utils.fromUtf8(value).substr(2);
    var length = result.length / 2;
    var l = Math.floor((result.length + 63) / 64);
    result = utils.padRight(result, l * 64);
    return new SolidityParam(formatInputInt(length).value + result);
};

/**
 * Formats input value to byte representation of bool
 *
 * @method formatInputBool
 * @param {Boolean}
 * @returns {SolidityParam}
 */
var formatInputBool = function (value) {
    var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0');
    return new SolidityParam(result);
};

/**
 * Formats input value to byte representation of real
 * Values are multiplied by 2^m and encoded as integers
 *
 * @method formatInputReal
 * @param {String|Number|BigNumber}
 * @returns {SolidityParam}
 */
var formatInputReal = function (value) {
    return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
};

/**
 * Check if input value is negative
 *
 * @method signedIsNegative
 * @param {String} value is hex format
 * @returns {Boolean} true if it is negative, otherwise false
 */
var signedIsNegative = function (value) {
    return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1';
};

/**
 * Formats right-aligned output bytes to int
 *
 * @method formatOutputInt
 * @param {SolidityParam} param
 * @returns {BigNumber} right-aligned output bytes formatted to big number
 */
var formatOutputInt = function (param) {
    var value = param.staticPart() || "0";

    // check if it's negative number
    // it it is, return two's complement
    if (signedIsNegative(value)) {
        return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1);
    }
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to uint
 *
 * @method formatOutputUInt
 * @param {SolidityParam}
 * @returns {BigNumeber} right-aligned output bytes formatted to uint
 */
var formatOutputUInt = function (param) {
    var value = param.staticPart() || "0";
    return new BigNumber(value, 16);
};

/**
 * Formats right-aligned output bytes to real
 *
 * @method formatOutputReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to real
 */
var formatOutputReal = function (param) {
    return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
};

/**
 * Formats right-aligned output bytes to ureal
 *
 * @method formatOutputUReal
 * @param {SolidityParam}
 * @returns {BigNumber} input bytes formatted to ureal
 */
var formatOutputUReal = function (param) {
    return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
};

/**
 * Should be used to format output bool
 *
 * @method formatOutputBool
 * @param {SolidityParam}
 * @returns {Boolean} right-aligned input bytes formatted to bool
 */
var formatOutputBool = function (param) {
    return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @param {String} name type name
 * @returns {String} hex string
 */
var formatOutputBytes = function (param, name) {
    var matches = name.match(/^bytes([0-9]*)/);
    var size = parseInt(matches[1]);
    return '0x' + param.staticPart().slice(0, 2 * size);
};

/**
 * Should be used to format output bytes
 *
 * @method formatOutputDynamicBytes
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} hex string
 */
var formatOutputDynamicBytes = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return '0x' + param.dynamicPart().substr(64, length);
};

/**
 * Should be used to format output string
 *
 * @method formatOutputString
 * @param {SolidityParam} left-aligned hex representation of string
 * @returns {String} ascii string
 */
var formatOutputString = function (param) {
    var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2;
    return utils.toUtf8(param.dynamicPart().substr(64, length));
};

/**
 * Should be used to format output address
 *
 * @method formatOutputAddress
 * @param {SolidityParam} right-aligned input bytes
 * @returns {String} address
 */
var formatOutputAddress = function (param) {
    var value = param.staticPart();
    return "0x" + value.slice(value.length - 40, value.length);
};

module.exports = {
    formatInputInt: formatInputInt,
    formatInputBytes: formatInputBytes,
    formatInputDynamicBytes: formatInputDynamicBytes,
    formatInputString: formatInputString,
    formatInputBool: formatInputBool,
    formatInputReal: formatInputReal,
    formatOutputInt: formatOutputInt,
    formatOutputUInt: formatOutputUInt,
    formatOutputReal: formatOutputReal,
    formatOutputUReal: formatOutputUReal,
    formatOutputBool: formatOutputBool,
    formatOutputBytes: formatOutputBytes,
    formatOutputDynamicBytes: formatOutputDynamicBytes,
    formatOutputString: formatOutputString,
    formatOutputAddress: formatOutputAddress
};


/***/ }),
/* 44 */
/***/ (function(module, exports) {

module.exports = function(module) {
	if(!module.webpackPolyfill) {
		module.deprecate = function() {};
		module.paths = [];
		// module.parent = undefined by default
		if(!module.children) module.children = [];
		Object.defineProperty(module, "loaded", {
			enumerable: true,
			get: function() {
				return module.l;
			}
		});
		Object.defineProperty(module, "id", {
			enumerable: true,
			get: function() {
				return module.i;
			}
		});
		module.webpackPolyfill = 1;
	}
	return module;
};


/***/ }),
/* 45 */
/***/ (function(module, exports) {

module.exports = require("https");

/***/ }),
/* 46 */
/***/ (function(module, exports) {

/*!
 * Chai - flag utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .flag(object, key, [value])
 *
 * Get or set a flag value on an object. If a
 * value is provided it will be set, else it will
 * return the currently set value or `undefined` if
 * the value is not set.
 *
 *     utils.flag(this, 'foo', 'bar'); // setter
 *     utils.flag(this, 'foo'); // getter, returns `bar`
 *
 * @param {Object} object constructed Assertion
 * @param {String} key
 * @param {Mixed} value (optional)
 * @namespace Utils
 * @name flag
 * @api private
 */

module.exports = function flag(obj, key, value) {
  var flags = obj.__flags || (obj.__flags = Object.create(null));
  if (arguments.length === 3) {
    flags[key] = value;
  } else {
    return flags[key];
  }
};


/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.

// If you have no idea what ASN.1 or BER is, see this:
// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc

var Ber = __webpack_require__(567);



///--- Exported API

module.exports = {

  Ber: Ber,

  BerReader: Ber.Reader,

  BerWriter: Ber.Writer

};


/***/ }),
/* 48 */
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityParam = __webpack_require__(328);

/**
 * SolidityType prototype is used to encode/decode solidity params of certain type
 */
var SolidityType = function (config) {
    this._inputFormatter = config.inputFormatter;
    this._outputFormatter = config.outputFormatter;
};

/**
 * Should be used to determine if this SolidityType do match given name
 *
 * @method isType
 * @param {String} name
 * @return {Bool} true if type match this SolidityType, otherwise false
 */
SolidityType.prototype.isType = function (name) {
    throw "this method should be overrwritten for type " + name;
};

/**
 * Should be used to determine what is the length of static part in given type
 *
 * @method staticPartLength
 * @param {String} name
 * @return {Number} length of static part in bytes
 */
SolidityType.prototype.staticPartLength = function (name) {
    throw "this method should be overrwritten for type: " + name;
};

/**
 * Should be used to determine if type is dynamic array
 * eg: 
 * "type[]" => true
 * "type[4]" => false
 *
 * @method isDynamicArray
 * @param {String} name
 * @return {Bool} true if the type is dynamic array 
 */
SolidityType.prototype.isDynamicArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should be used to determine if type is static array
 * eg: 
 * "type[]" => false
 * "type[4]" => true
 *
 * @method isStaticArray
 * @param {String} name
 * @return {Bool} true if the type is static array 
 */
SolidityType.prototype.isStaticArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should return length of static array
 * eg. 
 * "int[32]" => 32
 * "int256[14]" => 14
 * "int[2][3]" => 3
 * "int" => 1
 * "int[1]" => 1
 * "int[]" => 1
 *
 * @method staticArrayLength
 * @param {String} name
 * @return {Number} static array length
 */
SolidityType.prototype.staticArrayLength = function (name) {
    var nestedTypes = this.nestedTypes(name);
    if (nestedTypes) {
       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
    }
    return 1;
};

/**
 * Should return nested type
 * eg.
 * "int[32]" => "int"
 * "int256[14]" => "int256"
 * "int[2][3]" => "int[2]"
 * "int" => "int"
 * "int[]" => "int"
 *
 * @method nestedName
 * @param {String} name
 * @return {String} nested name
 */
SolidityType.prototype.nestedName = function (name) {
    // remove last [] in name
    var nestedTypes = this.nestedTypes(name);
    if (!nestedTypes) {
        return name;
    }

    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
};

/**
 * Should return true if type has dynamic size by default
 * such types are "string", "bytes"
 *
 * @method isDynamicType
 * @param {String} name
 * @return {Bool} true if is dynamic, otherwise false
 */
SolidityType.prototype.isDynamicType = function () {
    return false;
};

/**
 * Should return array of nested types
 * eg.
 * "int[2][3][]" => ["[2]", "[3]", "[]"]
 * "int[] => ["[]"]
 * "int" => null
 *
 * @method nestedTypes
 * @param {String} name
 * @return {Array} array of nested types
 */
SolidityType.prototype.nestedTypes = function (name) {
    // return list of strings eg. "[]", "[3]", "[]", "[2]"
    return name.match(/(\[[0-9]*\])/g);
};

/**
 * Should be used to encode the value
 *
 * @method encode
 * @param {Object} value 
 * @param {String} name
 * @return {String} encoded value
 */
SolidityType.prototype.encode = function (value, name) {
    var self = this;
    if (this.isDynamicArray(name)) {

        return (function () {
            var length = value.length;                          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            result.push(f.formatInputInt(length).encode());
            
            value.forEach(function (v) {
                result.push(self.encode(v, nestedName));
            });

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            for (var i = 0; i < length; i++) {
                result.push(self.encode(value[i], nestedName));
            }

            return result;
        })();

    }

    return this._inputFormatter(value, name).encode();
};

/**
 * Should be used to decode value from bytes
 *
 * @method decode
 * @param {String} bytes
 * @param {Number} offset in bytes
 * @param {String} name type name
 * @returns {Object} decoded value
 */
SolidityType.prototype.decode = function (bytes, offset, name) {
    var self = this;

    if (this.isDynamicArray(name)) {

        return (function () {
            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);                      // in int
            var arrayStart = offset;                                        // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();
    } else if (this.isDynamicType(name)) {
        
        return (function () {
            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
            var roundedLength = Math.floor((length + 31) / 32);                     // in int
        
            return self._outputFormatter(new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0));
        })();
    }

    var length = this.staticPartLength(name);
    return this._outputFormatter(new SolidityParam(bytes.substr(offset * 2, length * 2)));
};

module.exports = SolidityType;


/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(14);
var config = __webpack_require__(153);
var Iban = __webpack_require__(155);

/**
 * Should the format output to a big number
 *
 * @method outputBigNumberFormatter
 * @param {String|Number|BigNumber}
 * @returns {BigNumber} object
 */
var outputBigNumberFormatter = function (number) {
    return utils.toBigNumber(number);
};

var isPredefinedBlockNumber = function (blockNumber) {
    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
};

var inputDefaultBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return config.defaultBlock;
    }
    return inputBlockNumberFormatter(blockNumber);
};

var inputBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return undefined;
    } else if (isPredefinedBlockNumber(blockNumber)) {
        return blockNumber;
    }
    return utils.toHex(blockNumber);
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputCallFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputCallFormatter = function (options){

    options.from = options.from || config.defaultAccount;

    if (options.from) {
        options.from = inputAddressFormatter(options.from);
    }

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options; 
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputTransactionFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputTransactionFormatter = function (options){

    options.from = options.from || config.defaultAccount;
    options.from = inputAddressFormatter(options.from);

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options; 
};

/**
 * Formats the output of a transaction to its proper values
 * 
 * @method outputTransactionFormatter
 * @param {Object} tx
 * @returns {Object}
*/
var outputTransactionFormatter = function (tx){
    if(tx.blockNumber !== null)
        tx.blockNumber = utils.toDecimal(tx.blockNumber);
    if(tx.transactionIndex !== null)
        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
    tx.nonce = utils.toDecimal(tx.nonce);
    tx.gas = utils.toDecimal(tx.gas);
    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
    tx.value = utils.toBigNumber(tx.value);
    return tx;
};

/**
 * Formats the output of a transaction receipt to its proper values
 * 
 * @method outputTransactionReceiptFormatter
 * @param {Object} receipt
 * @returns {Object}
*/
var outputTransactionReceiptFormatter = function (receipt){
    if(receipt.blockNumber !== null)
        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
    if(receipt.transactionIndex !== null)
        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);

    if(utils.isArray(receipt.logs)) {
        receipt.logs = receipt.logs.map(function(log){
            return outputLogFormatter(log);
        });
    }

    return receipt;
};

/**
 * Formats the output of a block to its proper values
 *
 * @method outputBlockFormatter
 * @param {Object} block 
 * @returns {Object}
*/
var outputBlockFormatter = function(block) {

    // transform to number
    block.gasLimit = utils.toDecimal(block.gasLimit);
    block.gasUsed = utils.toDecimal(block.gasUsed);
    block.size = utils.toDecimal(block.size);
    block.timestamp = utils.toDecimal(block.timestamp);
    if(block.number !== null)
        block.number = utils.toDecimal(block.number);

    block.difficulty = utils.toBigNumber(block.difficulty);
    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);

    if (utils.isArray(block.transactions)) {
        block.transactions.forEach(function(item){
            if(!utils.isString(item))
                return outputTransactionFormatter(item);
        });
    }

    return block;
};

/**
 * Formats the output of a log
 * 
 * @method outputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var outputLogFormatter = function(log) {
    if(log.blockNumber !== null)
        log.blockNumber = utils.toDecimal(log.blockNumber);
    if(log.transactionIndex !== null)
        log.transactionIndex = utils.toDecimal(log.transactionIndex);
    if(log.logIndex !== null)
        log.logIndex = utils.toDecimal(log.logIndex);

    return log;
};

/**
 * Formats the input of a whisper post and converts all values to HEX
 *
 * @method inputPostFormatter
 * @param {Object} transaction object
 * @returns {Object}
*/
var inputPostFormatter = function(post) {

    // post.payload = utils.toHex(post.payload);
    post.ttl = utils.fromDecimal(post.ttl);
    post.workToProve = utils.fromDecimal(post.workToProve);
    post.priority = utils.fromDecimal(post.priority);

    // fallback
    if (!utils.isArray(post.topics)) {
        post.topics = post.topics ? [post.topics] : [];
    }

    // format the following options
    post.topics = post.topics.map(function(topic){
        // convert only if not hex
        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
    });

    return post; 
};

/**
 * Formats the output of a received post message
 *
 * @method outputPostFormatter
 * @param {Object}
 * @returns {Object}
 */
var outputPostFormatter = function(post){

    post.expiry = utils.toDecimal(post.expiry);
    post.sent = utils.toDecimal(post.sent);
    post.ttl = utils.toDecimal(post.ttl);
    post.workProved = utils.toDecimal(post.workProved);
    // post.payloadRaw = post.payload;
    // post.payload = utils.toAscii(post.payload);

    // if (utils.isJson(post.payload)) {
    //     post.payload = JSON.parse(post.payload);
    // }

    // format the following options
    if (!post.topics) {
        post.topics = [];
    }
    post.topics = post.topics.map(function(topic){
        return utils.toAscii(topic);
    });

    return post;
};

var inputAddressFormatter = function (address) {
    var iban = new Iban(address);
    if (iban.isValid() && iban.isDirect()) {
        return '0x' + iban.address();
    } else if (utils.isStrictAddress(address)) {
        return address;
    } else if (utils.isAddress(address)) {
        return '0x' + address;
    }
    throw new Error('invalid address');
};


var outputSyncingFormatter = function(result) {

    result.startingBlock = utils.toDecimal(result.startingBlock);
    result.currentBlock = utils.toDecimal(result.currentBlock);
    result.highestBlock = utils.toDecimal(result.highestBlock);

    return result;
};

module.exports = {
    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
    inputBlockNumberFormatter: inputBlockNumberFormatter,
    inputCallFormatter: inputCallFormatter,
    inputTransactionFormatter: inputTransactionFormatter,
    inputAddressFormatter: inputAddressFormatter,
    inputPostFormatter: inputPostFormatter,
    outputBigNumberFormatter: outputBigNumberFormatter,
    outputTransactionFormatter: outputTransactionFormatter,
    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
    outputBlockFormatter: outputBlockFormatter,
    outputLogFormatter: outputLogFormatter,
    outputPostFormatter: outputPostFormatter,
    outputSyncingFormatter: outputSyncingFormatter
};



/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityParam = __webpack_require__(332);

/**
 * SolidityType prototype is used to encode/decode solidity params of certain type
 */
var SolidityType = function (config) {
    this._inputFormatter = config.inputFormatter;
    this._outputFormatter = config.outputFormatter;
};

/**
 * Should be used to determine if this SolidityType do match given name
 *
 * @method isType
 * @param {String} name
 * @return {Bool} true if type match this SolidityType, otherwise false
 */
SolidityType.prototype.isType = function (name) {
    throw "this method should be overrwritten for type " + name;
};

/**
 * Should be used to determine what is the length of static part in given type
 *
 * @method staticPartLength
 * @param {String} name
 * @return {Number} length of static part in bytes
 */
SolidityType.prototype.staticPartLength = function (name) {
    // If name isn't an array then treat it like a single element array.
    return (this.nestedTypes(name) || ['[1]'])
        .map(function (type) {
            // the length of the nested array
            return parseInt(type.slice(1, -1), 10) || 1;
        })
        .reduce(function (previous, current) {
            return previous * current;
        // all basic types are 32 bytes long
        }, 32);
};

/**
 * Should be used to determine if type is dynamic array
 * eg:
 * "type[]" => true
 * "type[4]" => false
 *
 * @method isDynamicArray
 * @param {String} name
 * @return {Bool} true if the type is dynamic array
 */
SolidityType.prototype.isDynamicArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should be used to determine if type is static array
 * eg:
 * "type[]" => false
 * "type[4]" => true
 *
 * @method isStaticArray
 * @param {String} name
 * @return {Bool} true if the type is static array
 */
SolidityType.prototype.isStaticArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should return length of static array
 * eg.
 * "int[32]" => 32
 * "int256[14]" => 14
 * "int[2][3]" => 3
 * "int" => 1
 * "int[1]" => 1
 * "int[]" => 1
 *
 * @method staticArrayLength
 * @param {String} name
 * @return {Number} static array length
 */
SolidityType.prototype.staticArrayLength = function (name) {
    var nestedTypes = this.nestedTypes(name);
    if (nestedTypes) {
       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
    }
    return 1;
};

/**
 * Should return nested type
 * eg.
 * "int[32]" => "int"
 * "int256[14]" => "int256"
 * "int[2][3]" => "int[2]"
 * "int" => "int"
 * "int[]" => "int"
 *
 * @method nestedName
 * @param {String} name
 * @return {String} nested name
 */
SolidityType.prototype.nestedName = function (name) {
    // remove last [] in name
    var nestedTypes = this.nestedTypes(name);
    if (!nestedTypes) {
        return name;
    }

    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
};

/**
 * Should return true if type has dynamic size by default
 * such types are "string", "bytes"
 *
 * @method isDynamicType
 * @param {String} name
 * @return {Bool} true if is dynamic, otherwise false
 */
SolidityType.prototype.isDynamicType = function () {
    return false;
};

/**
 * Should return array of nested types
 * eg.
 * "int[2][3][]" => ["[2]", "[3]", "[]"]
 * "int[] => ["[]"]
 * "int" => null
 *
 * @method nestedTypes
 * @param {String} name
 * @return {Array} array of nested types
 */
SolidityType.prototype.nestedTypes = function (name) {
    // return list of strings eg. "[]", "[3]", "[]", "[2]"
    return name.match(/(\[[0-9]*\])/g);
};

/**
 * Should be used to encode the value
 *
 * @method encode
 * @param {Object} value
 * @param {String} name
 * @return {String} encoded value
 */
SolidityType.prototype.encode = function (value, name) {
    var self = this;
    if (this.isDynamicArray(name)) {

        return (function () {
            var length = value.length;                          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            result.push(f.formatInputInt(length).encode());

            value.forEach(function (v) {
                result.push(self.encode(v, nestedName));
            });

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            for (var i = 0; i < length; i++) {
                result.push(self.encode(value[i], nestedName));
            }

            return result;
        })();

    }

    return this._inputFormatter(value, name).encode();
};

/**
 * Should be used to decode value from bytes
 *
 * @method decode
 * @param {String} bytes
 * @param {Number} offset in bytes
 * @param {String} name type name
 * @returns {Object} decoded value
 */
SolidityType.prototype.decode = function (bytes, offset, name) {
    var self = this;

    if (this.isDynamicArray(name)) {

        return (function () {
            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);                      // in int
            var arrayStart = offset;                                        // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();
    } else if (this.isDynamicType(name)) {

        return (function () {
            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
            var roundedLength = Math.floor((length + 31) / 32);                     // in int
            var param = new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0);
            return self._outputFormatter(param, name);
        })();
    }

    var length = this.staticPartLength(name);
    var param = new SolidityParam(bytes.substr(offset * 2, length * 2));
    return this._outputFormatter(param, name);
};

module.exports = SolidityType;


/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(15);
var config = __webpack_require__(157);
var Iban = __webpack_require__(159);

/**
 * Should the format output to a big number
 *
 * @method outputBigNumberFormatter
 * @param {String|Number|BigNumber}
 * @returns {BigNumber} object
 */
var outputBigNumberFormatter = function (number) {
    return utils.toBigNumber(number);
};

var isPredefinedBlockNumber = function (blockNumber) {
    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
};

var inputDefaultBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return config.defaultBlock;
    }
    return inputBlockNumberFormatter(blockNumber);
};

var inputBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return undefined;
    } else if (isPredefinedBlockNumber(blockNumber)) {
        return blockNumber;
    }
    return utils.toHex(blockNumber);
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputCallFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputCallFormatter = function (options){

    options.from = options.from || config.defaultAccount;

    if (options.from) {
        options.from = inputAddressFormatter(options.from);
    }

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputTransactionFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputTransactionFormatter = function (options){

    options.from = options.from || config.defaultAccount;
    options.from = inputAddressFormatter(options.from);

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options;
};

/**
 * Formats the output of a transaction to its proper values
 *
 * @method outputTransactionFormatter
 * @param {Object} tx
 * @returns {Object}
*/
var outputTransactionFormatter = function (tx){
    if(tx.blockNumber !== null)
        tx.blockNumber = utils.toDecimal(tx.blockNumber);
    if(tx.transactionIndex !== null)
        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
    tx.nonce = utils.toDecimal(tx.nonce);
    tx.gas = utils.toDecimal(tx.gas);
    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
    tx.value = utils.toBigNumber(tx.value);
    return tx;
};

/**
 * Formats the output of a transaction receipt to its proper values
 *
 * @method outputTransactionReceiptFormatter
 * @param {Object} receipt
 * @returns {Object}
*/
var outputTransactionReceiptFormatter = function (receipt){
    if(receipt.blockNumber !== null)
        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
    if(receipt.transactionIndex !== null)
        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);

    if(utils.isArray(receipt.logs)) {
        receipt.logs = receipt.logs.map(function(log){
            return outputLogFormatter(log);
        });
    }

    return receipt;
};

/**
 * Formats the output of a block to its proper values
 *
 * @method outputBlockFormatter
 * @param {Object} block
 * @returns {Object}
*/
var outputBlockFormatter = function(block) {

    // transform to number
    block.gasLimit = utils.toDecimal(block.gasLimit);
    block.gasUsed = utils.toDecimal(block.gasUsed);
    block.size = utils.toDecimal(block.size);
    block.timestamp = utils.toDecimal(block.timestamp);
    if(block.number !== null)
        block.number = utils.toDecimal(block.number);

    block.difficulty = utils.toBigNumber(block.difficulty);
    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);

    if (utils.isArray(block.transactions)) {
        block.transactions.forEach(function(item){
            if(!utils.isString(item))
                return outputTransactionFormatter(item);
        });
    }

    return block;
};

/**
 * Formats the output of a log
 *
 * @method outputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var outputLogFormatter = function(log) {
    if(log.blockNumber !== null)
        log.blockNumber = utils.toDecimal(log.blockNumber);
    if(log.transactionIndex !== null)
        log.transactionIndex = utils.toDecimal(log.transactionIndex);
    if(log.logIndex !== null)
        log.logIndex = utils.toDecimal(log.logIndex);

    return log;
};

/**
 * Formats the input of a whisper post and converts all values to HEX
 *
 * @method inputPostFormatter
 * @param {Object} transaction object
 * @returns {Object}
*/
var inputPostFormatter = function(post) {

    // post.payload = utils.toHex(post.payload);
    post.ttl = utils.fromDecimal(post.ttl);
    post.workToProve = utils.fromDecimal(post.workToProve);
    post.priority = utils.fromDecimal(post.priority);

    // fallback
    if (!utils.isArray(post.topics)) {
        post.topics = post.topics ? [post.topics] : [];
    }

    // format the following options
    post.topics = post.topics.map(function(topic){
        // convert only if not hex
        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
    });

    return post;
};

/**
 * Formats the output of a received post message
 *
 * @method outputPostFormatter
 * @param {Object}
 * @returns {Object}
 */
var outputPostFormatter = function(post){

    post.expiry = utils.toDecimal(post.expiry);
    post.sent = utils.toDecimal(post.sent);
    post.ttl = utils.toDecimal(post.ttl);
    post.workProved = utils.toDecimal(post.workProved);
    // post.payloadRaw = post.payload;
    // post.payload = utils.toAscii(post.payload);

    // if (utils.isJson(post.payload)) {
    //     post.payload = JSON.parse(post.payload);
    // }

    // format the following options
    if (!post.topics) {
        post.topics = [];
    }
    post.topics = post.topics.map(function(topic){
        return utils.toAscii(topic);
    });

    return post;
};

var inputAddressFormatter = function (address) {
    var iban = new Iban(address);
    if (iban.isValid() && iban.isDirect()) {
        return '0x' + iban.address();
    } else if (utils.isStrictAddress(address)) {
        return address;
    } else if (utils.isAddress(address)) {
        return '0x' + address;
    }
    throw new Error('invalid address');
};


var outputSyncingFormatter = function(result) {

    result.startingBlock = utils.toDecimal(result.startingBlock);
    result.currentBlock = utils.toDecimal(result.currentBlock);
    result.highestBlock = utils.toDecimal(result.highestBlock);
    if (result.knownStates) {
        result.knownStates = utils.toDecimal(result.knownStates);
        result.pulledStates = utils.toDecimal(result.pulledStates);
    }

    return result;
};

module.exports = {
    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
    inputBlockNumberFormatter: inputBlockNumberFormatter,
    inputCallFormatter: inputCallFormatter,
    inputTransactionFormatter: inputTransactionFormatter,
    inputAddressFormatter: inputAddressFormatter,
    inputPostFormatter: inputPostFormatter,
    outputBigNumberFormatter: outputBigNumberFormatter,
    outputTransactionFormatter: outputTransactionFormatter,
    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
    outputBlockFormatter: outputBlockFormatter,
    outputLogFormatter: outputLogFormatter,
    outputPostFormatter: outputPostFormatter,
    outputSyncingFormatter: outputSyncingFormatter
};



/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const u = __webpack_require__(31).fromPromise
const fs = __webpack_require__(346)

function pathExists (path) {
  return fs.access(path).then(() => true).catch(() => false)
}

module.exports = {
  pathExists: u(pathExists),
  pathExistsSync: fs.existsSync
}


/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

try {
  var util = __webpack_require__(2);
  if (typeof util.inherits !== 'function') throw '';
  module.exports = util.inherits;
} catch (e) {
  module.exports = __webpack_require__(886);
}


/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable node/no-deprecated-api */
var buffer = __webpack_require__(70)
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)
}


/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

var assert = __webpack_require__(6);
var util = __webpack_require__(2);

function FingerprintFormatError(fp, format) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, FingerprintFormatError);
	this.name = 'FingerprintFormatError';
	this.fingerprint = fp;
	this.format = format;
	this.message = 'Fingerprint format is not supported, or is invalid: ';
	if (fp !== undefined)
		this.message += ' fingerprint = ' + fp;
	if (format !== undefined)
		this.message += ' format = ' + format;
}
util.inherits(FingerprintFormatError, Error);

function InvalidAlgorithmError(alg) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, InvalidAlgorithmError);
	this.name = 'InvalidAlgorithmError';
	this.algorithm = alg;
	this.message = 'Algorithm "' + alg + '" is not supported';
}
util.inherits(InvalidAlgorithmError, Error);

function KeyParseError(name, format, innerErr) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, KeyParseError);
	this.name = 'KeyParseError';
	this.format = format;
	this.keyName = name;
	this.innerErr = innerErr;
	this.message = 'Failed to parse ' + name + ' as a valid ' + format +
	    ' format key: ' + innerErr.message;
}
util.inherits(KeyParseError, Error);

function SignatureParseError(type, format, innerErr) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, SignatureParseError);
	this.name = 'SignatureParseError';
	this.type = type;
	this.format = format;
	this.innerErr = innerErr;
	this.message = 'Failed to parse the given data as a ' + type +
	    ' signature in ' + format + ' format: ' + innerErr.message;
}
util.inherits(SignatureParseError, Error);

function CertificateParseError(name, format, innerErr) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, CertificateParseError);
	this.name = 'CertificateParseError';
	this.format = format;
	this.certName = name;
	this.innerErr = innerErr;
	this.message = 'Failed to parse ' + name + ' as a valid ' + format +
	    ' format certificate: ' + innerErr.message;
}
util.inherits(CertificateParseError, Error);

function KeyEncryptedError(name, format) {
	if (Error.captureStackTrace)
		Error.captureStackTrace(this, KeyEncryptedError);
	this.name = 'KeyEncryptedError';
	this.format = format;
	this.keyName = name;
	this.message = 'The ' + format + ' format key ' + name + ' is ' +
	    'encrypted (password-protected), and no passphrase was ' +
	    'provided in `options`';
}
util.inherits(KeyEncryptedError, Error);

module.exports = {
	FingerprintFormatError: FingerprintFormatError,
	InvalidAlgorithmError: InvalidAlgorithmError,
	KeyParseError: KeyParseError,
	SignatureParseError: SignatureParseError,
	KeyEncryptedError: KeyEncryptedError,
	CertificateParseError: CertificateParseError
};


/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = Signature;

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var errs = __webpack_require__(56);
var utils = __webpack_require__(12);
var asn1 = __webpack_require__(47);
var SSHBuffer = __webpack_require__(135);

var InvalidAlgorithmError = errs.InvalidAlgorithmError;
var SignatureParseError = errs.SignatureParseError;

function Signature(opts) {
	assert.object(opts, 'options');
	assert.arrayOfObject(opts.parts, 'options.parts');
	assert.string(opts.type, 'options.type');

	var partLookup = {};
	for (var i = 0; i < opts.parts.length; ++i) {
		var part = opts.parts[i];
		partLookup[part.name] = part;
	}

	this.type = opts.type;
	this.hashAlgorithm = opts.hashAlgo;
	this.curve = opts.curve;
	this.parts = opts.parts;
	this.part = partLookup;
}

Signature.prototype.toBuffer = function (format) {
	if (format === undefined)
		format = 'asn1';
	assert.string(format, 'format');

	var buf;
	var stype = 'ssh-' + this.type;

	switch (this.type) {
	case 'rsa':
		switch (this.hashAlgorithm) {
		case 'sha256':
			stype = 'rsa-sha2-256';
			break;
		case 'sha512':
			stype = 'rsa-sha2-512';
			break;
		case 'sha1':
		case undefined:
			break;
		default:
			throw (new Error('SSH signature ' +
			    'format does not support hash ' +
			    'algorithm ' + this.hashAlgorithm));
		}
		if (format === 'ssh') {
			buf = new SSHBuffer({});
			buf.writeString(stype);
			buf.writePart(this.part.sig);
			return (buf.toBuffer());
		} else {
			return (this.part.sig.data);
		}
		break;

	case 'ed25519':
		if (format === 'ssh') {
			buf = new SSHBuffer({});
			buf.writeString(stype);
			buf.writePart(this.part.sig);
			return (buf.toBuffer());
		} else {
			return (this.part.sig.data);
		}
		break;

	case 'dsa':
	case 'ecdsa':
		var r, s;
		if (format === 'asn1') {
			var der = new asn1.BerWriter();
			der.startSequence();
			r = utils.mpNormalize(this.part.r.data);
			s = utils.mpNormalize(this.part.s.data);
			der.writeBuffer(r, asn1.Ber.Integer);
			der.writeBuffer(s, asn1.Ber.Integer);
			der.endSequence();
			return (der.buffer);
		} else if (format === 'ssh' && this.type === 'dsa') {
			buf = new SSHBuffer({});
			buf.writeString('ssh-dss');
			r = this.part.r.data;
			if (r.length > 20 && r[0] === 0x00)
				r = r.slice(1);
			s = this.part.s.data;
			if (s.length > 20 && s[0] === 0x00)
				s = s.slice(1);
			if ((this.hashAlgorithm &&
			    this.hashAlgorithm !== 'sha1') ||
			    r.length + s.length !== 40) {
				throw (new Error('OpenSSH only supports ' +
				    'DSA signatures with SHA1 hash'));
			}
			buf.writeBuffer(Buffer.concat([r, s]));
			return (buf.toBuffer());
		} else if (format === 'ssh' && this.type === 'ecdsa') {
			var inner = new SSHBuffer({});
			r = this.part.r.data;
			inner.writeBuffer(r);
			inner.writePart(this.part.s);

			buf = new SSHBuffer({});
			/* XXX: find a more proper way to do this? */
			var curve;
			if (r[0] === 0x00)
				r = r.slice(1);
			var sz = r.length * 8;
			if (sz === 256)
				curve = 'nistp256';
			else if (sz === 384)
				curve = 'nistp384';
			else if (sz === 528)
				curve = 'nistp521';
			buf.writeString('ecdsa-sha2-' + curve);
			buf.writeBuffer(inner.toBuffer());
			return (buf.toBuffer());
		}
		throw (new Error('Invalid signature format'));
	default:
		throw (new Error('Invalid signature data'));
	}
};

Signature.prototype.toString = function (format) {
	assert.optionalString(format, 'format');
	return (this.toBuffer(format).toString('base64'));
};

Signature.parse = function (data, type, format) {
	if (typeof (data) === 'string')
		data = Buffer.from(data, 'base64');
	assert.buffer(data, 'data');
	assert.string(format, 'format');
	assert.string(type, 'type');

	var opts = {};
	opts.type = type.toLowerCase();
	opts.parts = [];

	try {
		assert.ok(data.length > 0, 'signature must not be empty');
		switch (opts.type) {
		case 'rsa':
			return (parseOneNum(data, type, format, opts));
		case 'ed25519':
			return (parseOneNum(data, type, format, opts));

		case 'dsa':
		case 'ecdsa':
			if (format === 'asn1')
				return (parseDSAasn1(data, type, format, opts));
			else if (opts.type === 'dsa')
				return (parseDSA(data, type, format, opts));
			else
				return (parseECDSA(data, type, format, opts));

		default:
			throw (new InvalidAlgorithmError(type));
		}

	} catch (e) {
		if (e instanceof InvalidAlgorithmError)
			throw (e);
		throw (new SignatureParseError(type, format, e));
	}
};

function parseOneNum(data, type, format, opts) {
	if (format === 'ssh') {
		try {
			var buf = new SSHBuffer({buffer: data});
			var head = buf.readString();
		} catch (e) {
			/* fall through */
		}
		if (buf !== undefined) {
			var msg = 'SSH signature does not match expected ' +
			    'type (expected ' + type + ', got ' + head + ')';
			switch (head) {
			case 'ssh-rsa':
				assert.strictEqual(type, 'rsa', msg);
				opts.hashAlgo = 'sha1';
				break;
			case 'rsa-sha2-256':
				assert.strictEqual(type, 'rsa', msg);
				opts.hashAlgo = 'sha256';
				break;
			case 'rsa-sha2-512':
				assert.strictEqual(type, 'rsa', msg);
				opts.hashAlgo = 'sha512';
				break;
			case 'ssh-ed25519':
				assert.strictEqual(type, 'ed25519', msg);
				opts.hashAlgo = 'sha512';
				break;
			default:
				throw (new Error('Unknown SSH signature ' +
				    'type: ' + head));
			}
			var sig = buf.readPart();
			assert.ok(buf.atEnd(), 'extra trailing bytes');
			sig.name = 'sig';
			opts.parts.push(sig);
			return (new Signature(opts));
		}
	}
	opts.parts.push({name: 'sig', data: data});
	return (new Signature(opts));
}

function parseDSAasn1(data, type, format, opts) {
	var der = new asn1.BerReader(data);
	der.readSequence();
	var r = der.readString(asn1.Ber.Integer, true);
	var s = der.readString(asn1.Ber.Integer, true);

	opts.parts.push({name: 'r', data: utils.mpNormalize(r)});
	opts.parts.push({name: 's', data: utils.mpNormalize(s)});

	return (new Signature(opts));
}

function parseDSA(data, type, format, opts) {
	if (data.length != 40) {
		var buf = new SSHBuffer({buffer: data});
		var d = buf.readBuffer();
		if (d.toString('ascii') === 'ssh-dss')
			d = buf.readBuffer();
		assert.ok(buf.atEnd(), 'extra trailing bytes');
		assert.strictEqual(d.length, 40, 'invalid inner length');
		data = d;
	}
	opts.parts.push({name: 'r', data: data.slice(0, 20)});
	opts.parts.push({name: 's', data: data.slice(20, 40)});
	return (new Signature(opts));
}

function parseECDSA(data, type, format, opts) {
	var buf = new SSHBuffer({buffer: data});

	var r, s;
	var inner = buf.readBuffer();
	var stype = inner.toString('ascii');
	if (stype.slice(0, 6) === 'ecdsa-') {
		var parts = stype.split('-');
		assert.strictEqual(parts[0], 'ecdsa');
		assert.strictEqual(parts[1], 'sha2');
		opts.curve = parts[2];
		switch (opts.curve) {
		case 'nistp256':
			opts.hashAlgo = 'sha256';
			break;
		case 'nistp384':
			opts.hashAlgo = 'sha384';
			break;
		case 'nistp521':
			opts.hashAlgo = 'sha512';
			break;
		default:
			throw (new Error('Unsupported ECDSA curve: ' +
			    opts.curve));
		}
		inner = buf.readBuffer();
		assert.ok(buf.atEnd(), 'extra trailing bytes on outer');
		buf = new SSHBuffer({buffer: inner});
		r = buf.readPart();
	} else {
		r = {data: inner};
	}

	s = buf.readPart();
	assert.ok(buf.atEnd(), 'extra trailing bytes');

	r.name = 'r';
	s.name = 's';

	opts.parts.push(r);
	opts.parts.push(s);
	return (new Signature(opts));
}

Signature.isSignature = function (obj, ver) {
	return (utils.isCompatible(obj, Signature, ver));
};

/*
 * API versions for Signature:
 * [1,0] -- initial ver
 * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent
 *          hashAlgorithm property
 * [2,1] -- first tagged version
 */
Signature.prototype._sshpkApiVersion = [2, 1];

Signature._oldVersionDetect = function (obj) {
	assert.func(obj.toBuffer);
	if (obj.hasOwnProperty('hashAlgorithm'))
		return ([2, 0]);
	return ([1, 0]);
};


/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

(function(nacl) {
'use strict';

// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
// Public domain.
//
// Implementation derived from TweetNaCl version 20140427.
// See for details: http://tweetnacl.cr.yp.to/

var gf = function(init) {
  var i, r = new Float64Array(16);
  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
  return r;
};

//  Pluggable, initialized in high-level API below.
var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };

var _0 = new Uint8Array(16);
var _9 = new Uint8Array(32); _9[0] = 9;

var gf0 = gf(),
    gf1 = gf([1]),
    _121665 = gf([0xdb41, 1]),
    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);

function ts64(x, i, h, l) {
  x[i]   = (h >> 24) & 0xff;
  x[i+1] = (h >> 16) & 0xff;
  x[i+2] = (h >>  8) & 0xff;
  x[i+3] = h & 0xff;
  x[i+4] = (l >> 24)  & 0xff;
  x[i+5] = (l >> 16)  & 0xff;
  x[i+6] = (l >>  8)  & 0xff;
  x[i+7] = l & 0xff;
}

function vn(x, xi, y, yi, n) {
  var i,d = 0;
  for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
  return (1 & ((d - 1) >>> 8)) - 1;
}

function crypto_verify_16(x, xi, y, yi) {
  return vn(x,xi,y,yi,16);
}

function crypto_verify_32(x, xi, y, yi) {
  return vn(x,xi,y,yi,32);
}

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>>>(32-7);
    u = x4 + x0 | 0;
    x8 ^= u<<9 | u>>>(32-9);
    u = x8 + x4 | 0;
    x12 ^= u<<13 | u>>>(32-13);
    u = x12 + x8 | 0;
    x0 ^= u<<18 | u>>>(32-18);

    u = x5 + x1 | 0;
    x9 ^= u<<7 | u>>>(32-7);
    u = x9 + x5 | 0;
    x13 ^= u<<9 | u>>>(32-9);
    u = x13 + x9 | 0;
    x1 ^= u<<13 | u>>>(32-13);
    u = x1 + x13 | 0;
    x5 ^= u<<18 | u>>>(32-18);

    u = x10 + x6 | 0;
    x14 ^= u<<7 | u>>>(32-7);
    u = x14 + x10 | 0;
    x2 ^= u<<9 | u>>>(32-9);
    u = x2 + x14 | 0;
    x6 ^= u<<13 | u>>>(32-13);
    u = x6 + x2 | 0;
    x10 ^= u<<18 | u>>>(32-18);

    u = x15 + x11 | 0;
    x3 ^= u<<7 | u>>>(32-7);
    u = x3 + x15 | 0;
    x7 ^= u<<9 | u>>>(32-9);
    u = x7 + x3 | 0;
    x11 ^= u<<13 | u>>>(32-13);
    u = x11 + x7 | 0;
    x15 ^= u<<18 | u>>>(32-18);

    u = x0 + x3 | 0;
    x1 ^= u<<7 | u>>>(32-7);
    u = x1 + x0 | 0;
    x2 ^= u<<9 | u>>>(32-9);
    u = x2 + x1 | 0;
    x3 ^= u<<13 | u>>>(32-13);
    u = x3 + x2 | 0;
    x0 ^= u<<18 | u>>>(32-18);

    u = x5 + x4 | 0;
    x6 ^= u<<7 | u>>>(32-7);
    u = x6 + x5 | 0;
    x7 ^= u<<9 | u>>>(32-9);
    u = x7 + x6 | 0;
    x4 ^= u<<13 | u>>>(32-13);
    u = x4 + x7 | 0;
    x5 ^= u<<18 | u>>>(32-18);

    u = x10 + x9 | 0;
    x11 ^= u<<7 | u>>>(32-7);
    u = x11 + x10 | 0;
    x8 ^= u<<9 | u>>>(32-9);
    u = x8 + x11 | 0;
    x9 ^= u<<13 | u>>>(32-13);
    u = x9 + x8 | 0;
    x10 ^= u<<18 | u>>>(32-18);

    u = x15 + x14 | 0;
    x12 ^= u<<7 | u>>>(32-7);
    u = x12 + x15 | 0;
    x13 ^= u<<9 | u>>>(32-9);
    u = x13 + x12 | 0;
    x14 ^= u<<13 | u>>>(32-13);
    u = x14 + x13 | 0;
    x15 ^= u<<18 | u>>>(32-18);
  }
   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>>>(32-7);
    u = x4 + x0 | 0;
    x8 ^= u<<9 | u>>>(32-9);
    u = x8 + x4 | 0;
    x12 ^= u<<13 | u>>>(32-13);
    u = x12 + x8 | 0;
    x0 ^= u<<18 | u>>>(32-18);

    u = x5 + x1 | 0;
    x9 ^= u<<7 | u>>>(32-7);
    u = x9 + x5 | 0;
    x13 ^= u<<9 | u>>>(32-9);
    u = x13 + x9 | 0;
    x1 ^= u<<13 | u>>>(32-13);
    u = x1 + x13 | 0;
    x5 ^= u<<18 | u>>>(32-18);

    u = x10 + x6 | 0;
    x14 ^= u<<7 | u>>>(32-7);
    u = x14 + x10 | 0;
    x2 ^= u<<9 | u>>>(32-9);
    u = x2 + x14 | 0;
    x6 ^= u<<13 | u>>>(32-13);
    u = x6 + x2 | 0;
    x10 ^= u<<18 | u>>>(32-18);

    u = x15 + x11 | 0;
    x3 ^= u<<7 | u>>>(32-7);
    u = x3 + x15 | 0;
    x7 ^= u<<9 | u>>>(32-9);
    u = x7 + x3 | 0;
    x11 ^= u<<13 | u>>>(32-13);
    u = x11 + x7 | 0;
    x15 ^= u<<18 | u>>>(32-18);

    u = x0 + x3 | 0;
    x1 ^= u<<7 | u>>>(32-7);
    u = x1 + x0 | 0;
    x2 ^= u<<9 | u>>>(32-9);
    u = x2 + x1 | 0;
    x3 ^= u<<13 | u>>>(32-13);
    u = x3 + x2 | 0;
    x0 ^= u<<18 | u>>>(32-18);

    u = x5 + x4 | 0;
    x6 ^= u<<7 | u>>>(32-7);
    u = x6 + x5 | 0;
    x7 ^= u<<9 | u>>>(32-9);
    u = x7 + x6 | 0;
    x4 ^= u<<13 | u>>>(32-13);
    u = x4 + x7 | 0;
    x5 ^= u<<18 | u>>>(32-18);

    u = x10 + x9 | 0;
    x11 ^= u<<7 | u>>>(32-7);
    u = x11 + x10 | 0;
    x8 ^= u<<9 | u>>>(32-9);
    u = x8 + x11 | 0;
    x9 ^= u<<13 | u>>>(32-13);
    u = x9 + x8 | 0;
    x10 ^= u<<18 | u>>>(32-18);

    u = x15 + x14 | 0;
    x12 ^= u<<7 | u>>>(32-7);
    u = x12 + x15 | 0;
    x13 ^= u<<9 | u>>>(32-9);
    u = x13 + x12 | 0;
    x14 ^= u<<13 | u>>>(32-13);
    u = x14 + x13 | 0;
    x15 ^= u<<18 | u>>>(32-18);
  }

  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;
}

function crypto_core_salsa20(out,inp,k,c) {
  core_salsa20(out,inp,k,c);
}

function crypto_core_hsalsa20(out,inp,k,c) {
  core_hsalsa20(out,inp,k,c);
}

var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
            // "expand 32-byte k"

function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
  var z = new Uint8Array(16), x = new Uint8Array(64);
  var u, i;
  for (i = 0; i < 16; i++) z[i] = 0;
  for (i = 0; i < 8; i++) z[i] = n[i];
  while (b >= 64) {
    crypto_core_salsa20(x,z,k,sigma);
    for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
    u = 1;
    for (i = 8; i < 16; i++) {
      u = u + (z[i] & 0xff) | 0;
      z[i] = u & 0xff;
      u >>>= 8;
    }
    b -= 64;
    cpos += 64;
    mpos += 64;
  }
  if (b > 0) {
    crypto_core_salsa20(x,z,k,sigma);
    for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
  }
  return 0;
}

function crypto_stream_salsa20(c,cpos,b,n,k) {
  var z = new Uint8Array(16), x = new Uint8Array(64);
  var u, i;
  for (i = 0; i < 16; i++) z[i] = 0;
  for (i = 0; i < 8; i++) z[i] = n[i];
  while (b >= 64) {
    crypto_core_salsa20(x,z,k,sigma);
    for (i = 0; i < 64; i++) c[cpos+i] = x[i];
    u = 1;
    for (i = 8; i < 16; i++) {
      u = u + (z[i] & 0xff) | 0;
      z[i] = u & 0xff;
      u >>>= 8;
    }
    b -= 64;
    cpos += 64;
  }
  if (b > 0) {
    crypto_core_salsa20(x,z,k,sigma);
    for (i = 0; i < b; i++) c[cpos+i] = x[i];
  }
  return 0;
}

function crypto_stream(c,cpos,d,n,k) {
  var s = new Uint8Array(32);
  crypto_core_hsalsa20(s,n,k,sigma);
  var sn = new Uint8Array(8);
  for (var i = 0; i < 8; i++) sn[i] = n[i+16];
  return crypto_stream_salsa20(c,cpos,d,sn,s);
}

function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
  var s = new Uint8Array(32);
  crypto_core_hsalsa20(s,n,k,sigma);
  var sn = new Uint8Array(8);
  for (var i = 0; i < 8; i++) sn[i] = n[i+16];
  return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
}

/*
* Port of Andrew Moon's Poly1305-donna-16. Public domain.
* https://github.com/floodyberry/poly1305-donna
*/

var poly1305 = function(key) {
  this.buffer = new Uint8Array(16);
  this.r = new Uint16Array(10);
  this.h = new Uint16Array(10);
  this.pad = new Uint16Array(8);
  this.leftover = 0;
  this.fin = 0;

  var t0, t1, t2, t3, t4, t5, t6, t7;

  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;
  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;
  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;
  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;
  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;
  this.r[5] = ((t4 >>>  1)) & 0x1ffe;
  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;
  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;
  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;
  this.r[9] = ((t7 >>>  5)) & 0x007f;

  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
};

poly1305.prototype.blocks = function(m, mpos, bytes) {
  var hibit = this.fin ? 0 : (1 << 11);
  var t0, t1, t2, t3, t4, t5, t6, t7, c;
  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;

  var h0 = this.h[0],
      h1 = this.h[1],
      h2 = this.h[2],
      h3 = this.h[3],
      h4 = this.h[4],
      h5 = this.h[5],
      h6 = this.h[6],
      h7 = this.h[7],
      h8 = this.h[8],
      h9 = this.h[9];

  var r0 = this.r[0],
      r1 = this.r[1],
      r2 = this.r[2],
      r3 = this.r[3],
      r4 = this.r[4],
      r5 = this.r[5],
      r6 = this.r[6],
      r7 = this.r[7],
      r8 = this.r[8],
      r9 = this.r[9];

  while (bytes >= 16) {
    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;
    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;
    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;
    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;
    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;
    h5 += ((t4 >>>  1)) & 0x1fff;
    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;
    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;
    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;
    h9 += ((t7 >>> 5)) | hibit;

    c = 0;

    d0 = c;
    d0 += h0 * r0;
    d0 += h1 * (5 * r9);
    d0 += h2 * (5 * r8);
    d0 += h3 * (5 * r7);
    d0 += h4 * (5 * r6);
    c = (d0 >>> 13); d0 &= 0x1fff;
    d0 += h5 * (5 * r5);
    d0 += h6 * (5 * r4);
    d0 += h7 * (5 * r3);
    d0 += h8 * (5 * r2);
    d0 += h9 * (5 * r1);
    c += (d0 >>> 13); d0 &= 0x1fff;

    d1 = c;
    d1 += h0 * r1;
    d1 += h1 * r0;
    d1 += h2 * (5 * r9);
    d1 += h3 * (5 * r8);
    d1 += h4 * (5 * r7);
    c = (d1 >>> 13); d1 &= 0x1fff;
    d1 += h5 * (5 * r6);
    d1 += h6 * (5 * r5);
    d1 += h7 * (5 * r4);
    d1 += h8 * (5 * r3);
    d1 += h9 * (5 * r2);
    c += (d1 >>> 13); d1 &= 0x1fff;

    d2 = c;
    d2 += h0 * r2;
    d2 += h1 * r1;
    d2 += h2 * r0;
    d2 += h3 * (5 * r9);
    d2 += h4 * (5 * r8);
    c = (d2 >>> 13); d2 &= 0x1fff;
    d2 += h5 * (5 * r7);
    d2 += h6 * (5 * r6);
    d2 += h7 * (5 * r5);
    d2 += h8 * (5 * r4);
    d2 += h9 * (5 * r3);
    c += (d2 >>> 13); d2 &= 0x1fff;

    d3 = c;
    d3 += h0 * r3;
    d3 += h1 * r2;
    d3 += h2 * r1;
    d3 += h3 * r0;
    d3 += h4 * (5 * r9);
    c = (d3 >>> 13); d3 &= 0x1fff;
    d3 += h5 * (5 * r8);
    d3 += h6 * (5 * r7);
    d3 += h7 * (5 * r6);
    d3 += h8 * (5 * r5);
    d3 += h9 * (5 * r4);
    c += (d3 >>> 13); d3 &= 0x1fff;

    d4 = c;
    d4 += h0 * r4;
    d4 += h1 * r3;
    d4 += h2 * r2;
    d4 += h3 * r1;
    d4 += h4 * r0;
    c = (d4 >>> 13); d4 &= 0x1fff;
    d4 += h5 * (5 * r9);
    d4 += h6 * (5 * r8);
    d4 += h7 * (5 * r7);
    d4 += h8 * (5 * r6);
    d4 += h9 * (5 * r5);
    c += (d4 >>> 13); d4 &= 0x1fff;

    d5 = c;
    d5 += h0 * r5;
    d5 += h1 * r4;
    d5 += h2 * r3;
    d5 += h3 * r2;
    d5 += h4 * r1;
    c = (d5 >>> 13); d5 &= 0x1fff;
    d5 += h5 * r0;
    d5 += h6 * (5 * r9);
    d5 += h7 * (5 * r8);
    d5 += h8 * (5 * r7);
    d5 += h9 * (5 * r6);
    c += (d5 >>> 13); d5 &= 0x1fff;

    d6 = c;
    d6 += h0 * r6;
    d6 += h1 * r5;
    d6 += h2 * r4;
    d6 += h3 * r3;
    d6 += h4 * r2;
    c = (d6 >>> 13); d6 &= 0x1fff;
    d6 += h5 * r1;
    d6 += h6 * r0;
    d6 += h7 * (5 * r9);
    d6 += h8 * (5 * r8);
    d6 += h9 * (5 * r7);
    c += (d6 >>> 13); d6 &= 0x1fff;

    d7 = c;
    d7 += h0 * r7;
    d7 += h1 * r6;
    d7 += h2 * r5;
    d7 += h3 * r4;
    d7 += h4 * r3;
    c = (d7 >>> 13); d7 &= 0x1fff;
    d7 += h5 * r2;
    d7 += h6 * r1;
    d7 += h7 * r0;
    d7 += h8 * (5 * r9);
    d7 += h9 * (5 * r8);
    c += (d7 >>> 13); d7 &= 0x1fff;

    d8 = c;
    d8 += h0 * r8;
    d8 += h1 * r7;
    d8 += h2 * r6;
    d8 += h3 * r5;
    d8 += h4 * r4;
    c = (d8 >>> 13); d8 &= 0x1fff;
    d8 += h5 * r3;
    d8 += h6 * r2;
    d8 += h7 * r1;
    d8 += h8 * r0;
    d8 += h9 * (5 * r9);
    c += (d8 >>> 13); d8 &= 0x1fff;

    d9 = c;
    d9 += h0 * r9;
    d9 += h1 * r8;
    d9 += h2 * r7;
    d9 += h3 * r6;
    d9 += h4 * r5;
    c = (d9 >>> 13); d9 &= 0x1fff;
    d9 += h5 * r4;
    d9 += h6 * r3;
    d9 += h7 * r2;
    d9 += h8 * r1;
    d9 += h9 * r0;
    c += (d9 >>> 13); d9 &= 0x1fff;

    c = (((c << 2) + c)) | 0;
    c = (c + d0) | 0;
    d0 = c & 0x1fff;
    c = (c >>> 13);
    d1 += c;

    h0 = d0;
    h1 = d1;
    h2 = d2;
    h3 = d3;
    h4 = d4;
    h5 = d5;
    h6 = d6;
    h7 = d7;
    h8 = d8;
    h9 = d9;

    mpos += 16;
    bytes -= 16;
  }
  this.h[0] = h0;
  this.h[1] = h1;
  this.h[2] = h2;
  this.h[3] = h3;
  this.h[4] = h4;
  this.h[5] = h5;
  this.h[6] = h6;
  this.h[7] = h7;
  this.h[8] = h8;
  this.h[9] = h9;
};

poly1305.prototype.finish = function(mac, macpos) {
  var g = new Uint16Array(10);
  var c, mask, f, i;

  if (this.leftover) {
    i = this.leftover;
    this.buffer[i++] = 1;
    for (; i < 16; i++) this.buffer[i] = 0;
    this.fin = 1;
    this.blocks(this.buffer, 0, 16);
  }

  c = this.h[1] >>> 13;
  this.h[1] &= 0x1fff;
  for (i = 2; i < 10; i++) {
    this.h[i] += c;
    c = this.h[i] >>> 13;
    this.h[i] &= 0x1fff;
  }
  this.h[0] += (c * 5);
  c = this.h[0] >>> 13;
  this.h[0] &= 0x1fff;
  this.h[1] += c;
  c = this.h[1] >>> 13;
  this.h[1] &= 0x1fff;
  this.h[2] += c;

  g[0] = this.h[0] + 5;
  c = g[0] >>> 13;
  g[0] &= 0x1fff;
  for (i = 1; i < 10; i++) {
    g[i] = this.h[i] + c;
    c = g[i] >>> 13;
    g[i] &= 0x1fff;
  }
  g[9] -= (1 << 13);

  mask = (c ^ 1) - 1;
  for (i = 0; i < 10; i++) g[i] &= mask;
  mask = ~mask;
  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];

  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;
  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;
  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;
  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;
  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;
  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;
  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;
  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;

  f = this.h[0] + this.pad[0];
  this.h[0] = f & 0xffff;
  for (i = 1; i < 8; i++) {
    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
    this.h[i] = f & 0xffff;
  }

  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
};

poly1305.prototype.update = function(m, mpos, bytes) {
  var i, want;

  if (this.leftover) {
    want = (16 - this.leftover);
    if (want > bytes)
      want = bytes;
    for (i = 0; i < want; i++)
      this.buffer[this.leftover + i] = m[mpos+i];
    bytes -= want;
    mpos += want;
    this.leftover += want;
    if (this.leftover < 16)
      return;
    this.blocks(this.buffer, 0, 16);
    this.leftover = 0;
  }

  if (bytes >= 16) {
    want = bytes - (bytes % 16);
    this.blocks(m, mpos, want);
    mpos += want;
    bytes -= want;
  }

  if (bytes) {
    for (i = 0; i < bytes; i++)
      this.buffer[this.leftover + i] = m[mpos+i];
    this.leftover += bytes;
  }
};

function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
  var s = new poly1305(k);
  s.update(m, mpos, n);
  s.finish(out, outpos);
  return 0;
}

function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
  var x = new Uint8Array(16);
  crypto_onetimeauth(x,0,m,mpos,n,k);
  return crypto_verify_16(h,hpos,x,0);
}

function crypto_secretbox(c,m,d,n,k) {
  var i;
  if (d < 32) return -1;
  crypto_stream_xor(c,0,m,0,d,n,k);
  crypto_onetimeauth(c, 16, c, 32, d - 32, c);
  for (i = 0; i < 16; i++) c[i] = 0;
  return 0;
}

function crypto_secretbox_open(m,c,d,n,k) {
  var i;
  var x = new Uint8Array(32);
  if (d < 32) return -1;
  crypto_stream(x,0,32,n,k);
  if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
  crypto_stream_xor(m,0,c,0,d,n,k);
  for (i = 0; i < 32; i++) m[i] = 0;
  return 0;
}

function set25519(r, a) {
  var i;
  for (i = 0; i < 16; i++) r[i] = a[i]|0;
}

function car25519(o) {
  var i, v, c = 1;
  for (i = 0; i < 16; i++) {
    v = o[i] + c + 65535;
    c = Math.floor(v / 65536);
    o[i] = v - c * 65536;
  }
  o[0] += c-1 + 37 * (c-1);
}

function sel25519(p, q, b) {
  var t, c = ~(b-1);
  for (var i = 0; i < 16; i++) {
    t = c & (p[i] ^ q[i]);
    p[i] ^= t;
    q[i] ^= t;
  }
}

function pack25519(o, n) {
  var i, j, b;
  var m = gf(), t = gf();
  for (i = 0; i < 16; i++) t[i] = n[i];
  car25519(t);
  car25519(t);
  car25519(t);
  for (j = 0; j < 2; j++) {
    m[0] = t[0] - 0xffed;
    for (i = 1; i < 15; i++) {
      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
      m[i-1] &= 0xffff;
    }
    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
    b = (m[15]>>16) & 1;
    m[14] &= 0xffff;
    sel25519(t, m, 1-b);
  }
  for (i = 0; i < 16; i++) {
    o[2*i] = t[i] & 0xff;
    o[2*i+1] = t[i]>>8;
  }
}

function neq25519(a, b) {
  var c = new Uint8Array(32), d = new Uint8Array(32);
  pack25519(c, a);
  pack25519(d, b);
  return crypto_verify_32(c, 0, d, 0);
}

function par25519(a) {
  var d = new Uint8Array(32);
  pack25519(d, a);
  return d[0] & 1;
}

function unpack25519(o, n) {
  var i;
  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
  o[15] &= 0x7fff;
}

function A(o, a, b) {
  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
}

function Z(o, a, b) {
  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
}

function M(o, a, b) {
  var v, c,
     t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,
     t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
    b0 = b[0],
    b1 = b[1],
    b2 = b[2],
    b3 = b[3],
    b4 = b[4],
    b5 = b[5],
    b6 = b[6],
    b7 = b[7],
    b8 = b[8],
    b9 = b[9],
    b10 = b[10],
    b11 = b[11],
    b12 = b[12],
    b13 = b[13],
    b14 = b[14],
    b15 = b[15];

  v = a[0];
  t0 += v * b0;
  t1 += v * b1;
  t2 += v * b2;
  t3 += v * b3;
  t4 += v * b4;
  t5 += v * b5;
  t6 += v * b6;
  t7 += v * b7;
  t8 += v * b8;
  t9 += v * b9;
  t10 += v * b10;
  t11 += v * b11;
  t12 += v * b12;
  t13 += v * b13;
  t14 += v * b14;
  t15 += v * b15;
  v = a[1];
  t1 += v * b0;
  t2 += v * b1;
  t3 += v * b2;
  t4 += v * b3;
  t5 += v * b4;
  t6 += v * b5;
  t7 += v * b6;
  t8 += v * b7;
  t9 += v * b8;
  t10 += v * b9;
  t11 += v * b10;
  t12 += v * b11;
  t13 += v * b12;
  t14 += v * b13;
  t15 += v * b14;
  t16 += v * b15;
  v = a[2];
  t2 += v * b0;
  t3 += v * b1;
  t4 += v * b2;
  t5 += v * b3;
  t6 += v * b4;
  t7 += v * b5;
  t8 += v * b6;
  t9 += v * b7;
  t10 += v * b8;
  t11 += v * b9;
  t12 += v * b10;
  t13 += v * b11;
  t14 += v * b12;
  t15 += v * b13;
  t16 += v * b14;
  t17 += v * b15;
  v = a[3];
  t3 += v * b0;
  t4 += v * b1;
  t5 += v * b2;
  t6 += v * b3;
  t7 += v * b4;
  t8 += v * b5;
  t9 += v * b6;
  t10 += v * b7;
  t11 += v * b8;
  t12 += v * b9;
  t13 += v * b10;
  t14 += v * b11;
  t15 += v * b12;
  t16 += v * b13;
  t17 += v * b14;
  t18 += v * b15;
  v = a[4];
  t4 += v * b0;
  t5 += v * b1;
  t6 += v * b2;
  t7 += v * b3;
  t8 += v * b4;
  t9 += v * b5;
  t10 += v * b6;
  t11 += v * b7;
  t12 += v * b8;
  t13 += v * b9;
  t14 += v * b10;
  t15 += v * b11;
  t16 += v * b12;
  t17 += v * b13;
  t18 += v * b14;
  t19 += v * b15;
  v = a[5];
  t5 += v * b0;
  t6 += v * b1;
  t7 += v * b2;
  t8 += v * b3;
  t9 += v * b4;
  t10 += v * b5;
  t11 += v * b6;
  t12 += v * b7;
  t13 += v * b8;
  t14 += v * b9;
  t15 += v * b10;
  t16 += v * b11;
  t17 += v * b12;
  t18 += v * b13;
  t19 += v * b14;
  t20 += v * b15;
  v = a[6];
  t6 += v * b0;
  t7 += v * b1;
  t8 += v * b2;
  t9 += v * b3;
  t10 += v * b4;
  t11 += v * b5;
  t12 += v * b6;
  t13 += v * b7;
  t14 += v * b8;
  t15 += v * b9;
  t16 += v * b10;
  t17 += v * b11;
  t18 += v * b12;
  t19 += v * b13;
  t20 += v * b14;
  t21 += v * b15;
  v = a[7];
  t7 += v * b0;
  t8 += v * b1;
  t9 += v * b2;
  t10 += v * b3;
  t11 += v * b4;
  t12 += v * b5;
  t13 += v * b6;
  t14 += v * b7;
  t15 += v * b8;
  t16 += v * b9;
  t17 += v * b10;
  t18 += v * b11;
  t19 += v * b12;
  t20 += v * b13;
  t21 += v * b14;
  t22 += v * b15;
  v = a[8];
  t8 += v * b0;
  t9 += v * b1;
  t10 += v * b2;
  t11 += v * b3;
  t12 += v * b4;
  t13 += v * b5;
  t14 += v * b6;
  t15 += v * b7;
  t16 += v * b8;
  t17 += v * b9;
  t18 += v * b10;
  t19 += v * b11;
  t20 += v * b12;
  t21 += v * b13;
  t22 += v * b14;
  t23 += v * b15;
  v = a[9];
  t9 += v * b0;
  t10 += v * b1;
  t11 += v * b2;
  t12 += v * b3;
  t13 += v * b4;
  t14 += v * b5;
  t15 += v * b6;
  t16 += v * b7;
  t17 += v * b8;
  t18 += v * b9;
  t19 += v * b10;
  t20 += v * b11;
  t21 += v * b12;
  t22 += v * b13;
  t23 += v * b14;
  t24 += v * b15;
  v = a[10];
  t10 += v * b0;
  t11 += v * b1;
  t12 += v * b2;
  t13 += v * b3;
  t14 += v * b4;
  t15 += v * b5;
  t16 += v * b6;
  t17 += v * b7;
  t18 += v * b8;
  t19 += v * b9;
  t20 += v * b10;
  t21 += v * b11;
  t22 += v * b12;
  t23 += v * b13;
  t24 += v * b14;
  t25 += v * b15;
  v = a[11];
  t11 += v * b0;
  t12 += v * b1;
  t13 += v * b2;
  t14 += v * b3;
  t15 += v * b4;
  t16 += v * b5;
  t17 += v * b6;
  t18 += v * b7;
  t19 += v * b8;
  t20 += v * b9;
  t21 += v * b10;
  t22 += v * b11;
  t23 += v * b12;
  t24 += v * b13;
  t25 += v * b14;
  t26 += v * b15;
  v = a[12];
  t12 += v * b0;
  t13 += v * b1;
  t14 += v * b2;
  t15 += v * b3;
  t16 += v * b4;
  t17 += v * b5;
  t18 += v * b6;
  t19 += v * b7;
  t20 += v * b8;
  t21 += v * b9;
  t22 += v * b10;
  t23 += v * b11;
  t24 += v * b12;
  t25 += v * b13;
  t26 += v * b14;
  t27 += v * b15;
  v = a[13];
  t13 += v * b0;
  t14 += v * b1;
  t15 += v * b2;
  t16 += v * b3;
  t17 += v * b4;
  t18 += v * b5;
  t19 += v * b6;
  t20 += v * b7;
  t21 += v * b8;
  t22 += v * b9;
  t23 += v * b10;
  t24 += v * b11;
  t25 += v * b12;
  t26 += v * b13;
  t27 += v * b14;
  t28 += v * b15;
  v = a[14];
  t14 += v * b0;
  t15 += v * b1;
  t16 += v * b2;
  t17 += v * b3;
  t18 += v * b4;
  t19 += v * b5;
  t20 += v * b6;
  t21 += v * b7;
  t22 += v * b8;
  t23 += v * b9;
  t24 += v * b10;
  t25 += v * b11;
  t26 += v * b12;
  t27 += v * b13;
  t28 += v * b14;
  t29 += v * b15;
  v = a[15];
  t15 += v * b0;
  t16 += v * b1;
  t17 += v * b2;
  t18 += v * b3;
  t19 += v * b4;
  t20 += v * b5;
  t21 += v * b6;
  t22 += v * b7;
  t23 += v * b8;
  t24 += v * b9;
  t25 += v * b10;
  t26 += v * b11;
  t27 += v * b12;
  t28 += v * b13;
  t29 += v * b14;
  t30 += v * b15;

  t0  += 38 * t16;
  t1  += 38 * t17;
  t2  += 38 * t18;
  t3  += 38 * t19;
  t4  += 38 * t20;
  t5  += 38 * t21;
  t6  += 38 * t22;
  t7  += 38 * t23;
  t8  += 38 * t24;
  t9  += 38 * t25;
  t10 += 38 * t26;
  t11 += 38 * t27;
  t12 += 38 * t28;
  t13 += 38 * t29;
  t14 += 38 * t30;
  // t15 left as is

  // first car
  c = 1;
  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;
  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;
  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;
  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;
  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;
  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;
  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;
  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;
  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;
  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;
  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
  t0 += c-1 + 37 * (c-1);

  // second car
  c = 1;
  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;
  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;
  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;
  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;
  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;
  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;
  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;
  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;
  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;
  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;
  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
  t0 += c-1 + 37 * (c-1);

  o[ 0] = t0;
  o[ 1] = t1;
  o[ 2] = t2;
  o[ 3] = t3;
  o[ 4] = t4;
  o[ 5] = t5;
  o[ 6] = t6;
  o[ 7] = t7;
  o[ 8] = t8;
  o[ 9] = t9;
  o[10] = t10;
  o[11] = t11;
  o[12] = t12;
  o[13] = t13;
  o[14] = t14;
  o[15] = t15;
}

function S(o, a) {
  M(o, a, a);
}

function inv25519(o, i) {
  var c = gf();
  var a;
  for (a = 0; a < 16; a++) c[a] = i[a];
  for (a = 253; a >= 0; a--) {
    S(c, c);
    if(a !== 2 && a !== 4) M(c, c, i);
  }
  for (a = 0; a < 16; a++) o[a] = c[a];
}

function pow2523(o, i) {
  var c = gf();
  var a;
  for (a = 0; a < 16; a++) c[a] = i[a];
  for (a = 250; a >= 0; a--) {
      S(c, c);
      if(a !== 1) M(c, c, i);
  }
  for (a = 0; a < 16; a++) o[a] = c[a];
}

function crypto_scalarmult(q, n, p) {
  var z = new Uint8Array(32);
  var x = new Float64Array(80), r, i;
  var a = gf(), b = gf(), c = gf(),
      d = gf(), e = gf(), f = gf();
  for (i = 0; i < 31; i++) z[i] = n[i];
  z[31]=(n[31]&127)|64;
  z[0]&=248;
  unpack25519(x,p);
  for (i = 0; i < 16; i++) {
    b[i]=x[i];
    d[i]=a[i]=c[i]=0;
  }
  a[0]=d[0]=1;
  for (i=254; i>=0; --i) {
    r=(z[i>>>3]>>>(i&7))&1;
    sel25519(a,b,r);
    sel25519(c,d,r);
    A(e,a,c);
    Z(a,a,c);
    A(c,b,d);
    Z(b,b,d);
    S(d,e);
    S(f,a);
    M(a,c,a);
    M(c,b,e);
    A(e,a,c);
    Z(a,a,c);
    S(b,a);
    Z(c,d,f);
    M(a,c,_121665);
    A(a,a,d);
    M(c,c,a);
    M(a,d,f);
    M(d,b,x);
    S(b,e);
    sel25519(a,b,r);
    sel25519(c,d,r);
  }
  for (i = 0; i < 16; i++) {
    x[i+16]=a[i];
    x[i+32]=c[i];
    x[i+48]=b[i];
    x[i+64]=d[i];
  }
  var x32 = x.subarray(32);
  var x16 = x.subarray(16);
  inv25519(x32,x32);
  M(x16,x16,x32);
  pack25519(q,x16);
  return 0;
}

function crypto_scalarmult_base(q, n) {
  return crypto_scalarmult(q, n, _9);
}

function crypto_box_keypair(y, x) {
  randombytes(x, 32);
  return crypto_scalarmult_base(y, x);
}

function crypto_box_beforenm(k, y, x) {
  var s = new Uint8Array(32);
  crypto_scalarmult(s, x, y);
  return crypto_core_hsalsa20(k, _0, s, sigma);
}

var crypto_box_afternm = crypto_secretbox;
var crypto_box_open_afternm = crypto_secretbox_open;

function crypto_box(c, m, d, n, y, x) {
  var k = new Uint8Array(32);
  crypto_box_beforenm(k, y, x);
  return crypto_box_afternm(c, m, d, n, k);
}

function crypto_box_open(m, c, d, n, y, x) {
  var k = new Uint8Array(32);
  crypto_box_beforenm(k, y, x);
  return crypto_box_open_afternm(m, c, d, n, k);
}

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
];

function crypto_hashblocks_hl(hh, hl, m, n) {
  var wh = new Int32Array(16), wl = new Int32Array(16),
      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
      th, tl, i, j, h, l, a, b, c, d;

  var ah0 = hh[0],
      ah1 = hh[1],
      ah2 = hh[2],
      ah3 = hh[3],
      ah4 = hh[4],
      ah5 = hh[5],
      ah6 = hh[6],
      ah7 = hh[7],

      al0 = hl[0],
      al1 = hl[1],
      al2 = hl[2],
      al3 = hl[3],
      al4 = hl[4],
      al5 = hl[5],
      al6 = hl[6],
      al7 = hl[7];

  var pos = 0;
  while (n >= 128) {
    for (i = 0; i < 16; i++) {
      j = 8 * i + pos;
      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
    }
    for (i = 0; i < 80; i++) {
      bh0 = ah0;
      bh1 = ah1;
      bh2 = ah2;
      bh3 = ah3;
      bh4 = ah4;
      bh5 = ah5;
      bh6 = ah6;
      bh7 = ah7;

      bl0 = al0;
      bl1 = al1;
      bl2 = al2;
      bl3 = al3;
      bl4 = al4;
      bl5 = al5;
      bl6 = al6;
      bl7 = al7;

      // add
      h = ah7;
      l = al7;

      a = l & 0xffff; b = l >>> 16;
      c = h & 0xffff; d = h >>> 16;

      // Sigma1
      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      // Ch
      h = (ah4 & ah5) ^ (~ah4 & ah6);
      l = (al4 & al5) ^ (~al4 & al6);

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      // K
      h = K[i*2];
      l = K[i*2+1];

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      // w
      h = wh[i%16];
      l = wl[i%16];

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      b += a >>> 16;
      c += b >>> 16;
      d += c >>> 16;

      th = c & 0xffff | d << 16;
      tl = a & 0xffff | b << 16;

      // add
      h = th;
      l = tl;

      a = l & 0xffff; b = l >>> 16;
      c = h & 0xffff; d = h >>> 16;

      // Sigma0
      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      // Maj
      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      b += a >>> 16;
      c += b >>> 16;
      d += c >>> 16;

      bh7 = (c & 0xffff) | (d << 16);
      bl7 = (a & 0xffff) | (b << 16);

      // add
      h = bh3;
      l = bl3;

      a = l & 0xffff; b = l >>> 16;
      c = h & 0xffff; d = h >>> 16;

      h = th;
      l = tl;

      a += l & 0xffff; b += l >>> 16;
      c += h & 0xffff; d += h >>> 16;

      b += a >>> 16;
      c += b >>> 16;
      d += c >>> 16;

      bh3 = (c & 0xffff) | (d << 16);
      bl3 = (a & 0xffff) | (b << 16);

      ah1 = bh0;
      ah2 = bh1;
      ah3 = bh2;
      ah4 = bh3;
      ah5 = bh4;
      ah6 = bh5;
      ah7 = bh6;
      ah0 = bh7;

      al1 = bl0;
      al2 = bl1;
      al3 = bl2;
      al4 = bl3;
      al5 = bl4;
      al6 = bl5;
      al7 = bl6;
      al0 = bl7;

      if (i%16 === 15) {
        for (j = 0; j < 16; j++) {
          // add
          h = wh[j];
          l = wl[j];

          a = l & 0xffff; b = l >>> 16;
          c = h & 0xffff; d = h >>> 16;

          h = wh[(j+9)%16];
          l = wl[(j+9)%16];

          a += l & 0xffff; b += l >>> 16;
          c += h & 0xffff; d += h >>> 16;

          // sigma0
          th = wh[(j+1)%16];
          tl = wl[(j+1)%16];
          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));

          a += l & 0xffff; b += l >>> 16;
          c += h & 0xffff; d += h >>> 16;

          // sigma1
          th = wh[(j+14)%16];
          tl = wl[(j+14)%16];
          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));

          a += l & 0xffff; b += l >>> 16;
          c += h & 0xffff; d += h >>> 16;

          b += a >>> 16;
          c += b >>> 16;
          d += c >>> 16;

          wh[j] = (c & 0xffff) | (d << 16);
          wl[j] = (a & 0xffff) | (b << 16);
        }
      }
    }

    // add
    h = ah0;
    l = al0;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[0];
    l = hl[0];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[0] = ah0 = (c & 0xffff) | (d << 16);
    hl[0] = al0 = (a & 0xffff) | (b << 16);

    h = ah1;
    l = al1;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[1];
    l = hl[1];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[1] = ah1 = (c & 0xffff) | (d << 16);
    hl[1] = al1 = (a & 0xffff) | (b << 16);

    h = ah2;
    l = al2;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[2];
    l = hl[2];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[2] = ah2 = (c & 0xffff) | (d << 16);
    hl[2] = al2 = (a & 0xffff) | (b << 16);

    h = ah3;
    l = al3;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[3];
    l = hl[3];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[3] = ah3 = (c & 0xffff) | (d << 16);
    hl[3] = al3 = (a & 0xffff) | (b << 16);

    h = ah4;
    l = al4;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[4];
    l = hl[4];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[4] = ah4 = (c & 0xffff) | (d << 16);
    hl[4] = al4 = (a & 0xffff) | (b << 16);

    h = ah5;
    l = al5;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[5];
    l = hl[5];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[5] = ah5 = (c & 0xffff) | (d << 16);
    hl[5] = al5 = (a & 0xffff) | (b << 16);

    h = ah6;
    l = al6;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[6];
    l = hl[6];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[6] = ah6 = (c & 0xffff) | (d << 16);
    hl[6] = al6 = (a & 0xffff) | (b << 16);

    h = ah7;
    l = al7;

    a = l & 0xffff; b = l >>> 16;
    c = h & 0xffff; d = h >>> 16;

    h = hh[7];
    l = hl[7];

    a += l & 0xffff; b += l >>> 16;
    c += h & 0xffff; d += h >>> 16;

    b += a >>> 16;
    c += b >>> 16;
    d += c >>> 16;

    hh[7] = ah7 = (c & 0xffff) | (d << 16);
    hl[7] = al7 = (a & 0xffff) | (b << 16);

    pos += 128;
    n -= 128;
  }

  return n;
}

function crypto_hash(out, m, n) {
  var hh = new Int32Array(8),
      hl = new Int32Array(8),
      x = new Uint8Array(256),
      i, b = n;

  hh[0] = 0x6a09e667;
  hh[1] = 0xbb67ae85;
  hh[2] = 0x3c6ef372;
  hh[3] = 0xa54ff53a;
  hh[4] = 0x510e527f;
  hh[5] = 0x9b05688c;
  hh[6] = 0x1f83d9ab;
  hh[7] = 0x5be0cd19;

  hl[0] = 0xf3bcc908;
  hl[1] = 0x84caa73b;
  hl[2] = 0xfe94f82b;
  hl[3] = 0x5f1d36f1;
  hl[4] = 0xade682d1;
  hl[5] = 0x2b3e6c1f;
  hl[6] = 0xfb41bd6b;
  hl[7] = 0x137e2179;

  crypto_hashblocks_hl(hh, hl, m, n);
  n %= 128;

  for (i = 0; i < n; i++) x[i] = m[b-n+i];
  x[n] = 128;

  n = 256-128*(n<112?1:0);
  x[n-9] = 0;
  ts64(x, n-8,  (b / 0x20000000) | 0, b << 3);
  crypto_hashblocks_hl(hh, hl, x, n);

  for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);

  return 0;
}

function add(p, q) {
  var a = gf(), b = gf(), c = gf(),
      d = gf(), e = gf(), f = gf(),
      g = gf(), h = gf(), t = gf();

  Z(a, p[1], p[0]);
  Z(t, q[1], q[0]);
  M(a, a, t);
  A(b, p[0], p[1]);
  A(t, q[0], q[1]);
  M(b, b, t);
  M(c, p[3], q[3]);
  M(c, c, D2);
  M(d, p[2], q[2]);
  A(d, d, d);
  Z(e, b, a);
  Z(f, d, c);
  A(g, d, c);
  A(h, b, a);

  M(p[0], e, f);
  M(p[1], h, g);
  M(p[2], g, f);
  M(p[3], e, h);
}

function cswap(p, q, b) {
  var i;
  for (i = 0; i < 4; i++) {
    sel25519(p[i], q[i], b);
  }
}

function pack(r, p) {
  var tx = gf(), ty = gf(), zi = gf();
  inv25519(zi, p[2]);
  M(tx, p[0], zi);
  M(ty, p[1], zi);
  pack25519(r, ty);
  r[31] ^= par25519(tx) << 7;
}

function scalarmult(p, q, s) {
  var b, i;
  set25519(p[0], gf0);
  set25519(p[1], gf1);
  set25519(p[2], gf1);
  set25519(p[3], gf0);
  for (i = 255; i >= 0; --i) {
    b = (s[(i/8)|0] >> (i&7)) & 1;
    cswap(p, q, b);
    add(q, p);
    add(p, p);
    cswap(p, q, b);
  }
}

function scalarbase(p, s) {
  var q = [gf(), gf(), gf(), gf()];
  set25519(q[0], X);
  set25519(q[1], Y);
  set25519(q[2], gf1);
  M(q[3], X, Y);
  scalarmult(p, q, s);
}

function crypto_sign_keypair(pk, sk, seeded) {
  var d = new Uint8Array(64);
  var p = [gf(), gf(), gf(), gf()];
  var i;

  if (!seeded) randombytes(sk, 32);
  crypto_hash(d, sk, 32);
  d[0] &= 248;
  d[31] &= 127;
  d[31] |= 64;

  scalarbase(p, d);
  pack(pk, p);

  for (i = 0; i < 32; i++) sk[i+32] = pk[i];
  return 0;
}

var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);

function modL(r, x) {
  var carry, i, j, k;
  for (i = 63; i >= 32; --i) {
    carry = 0;
    for (j = i - 32, k = i - 12; j < k; ++j) {
      x[j] += carry - 16 * x[i] * L[j - (i - 32)];
      carry = (x[j] + 128) >> 8;
      x[j] -= carry * 256;
    }
    x[j] += carry;
    x[i] = 0;
  }
  carry = 0;
  for (j = 0; j < 32; j++) {
    x[j] += carry - (x[31] >> 4) * L[j];
    carry = x[j] >> 8;
    x[j] &= 255;
  }
  for (j = 0; j < 32; j++) x[j] -= carry * L[j];
  for (i = 0; i < 32; i++) {
    x[i+1] += x[i] >> 8;
    r[i] = x[i] & 255;
  }
}

function reduce(r) {
  var x = new Float64Array(64), i;
  for (i = 0; i < 64; i++) x[i] = r[i];
  for (i = 0; i < 64; i++) r[i] = 0;
  modL(r, x);
}

// Note: difference from C - smlen returned, not passed as argument.
function crypto_sign(sm, m, n, sk) {
  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
  var i, j, x = new Float64Array(64);
  var p = [gf(), gf(), gf(), gf()];

  crypto_hash(d, sk, 32);
  d[0] &= 248;
  d[31] &= 127;
  d[31] |= 64;

  var smlen = n + 64;
  for (i = 0; i < n; i++) sm[64 + i] = m[i];
  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];

  crypto_hash(r, sm.subarray(32), n+32);
  reduce(r);
  scalarbase(p, r);
  pack(sm, p);

  for (i = 32; i < 64; i++) sm[i] = sk[i];
  crypto_hash(h, sm, n + 64);
  reduce(h);

  for (i = 0; i < 64; i++) x[i] = 0;
  for (i = 0; i < 32; i++) x[i] = r[i];
  for (i = 0; i < 32; i++) {
    for (j = 0; j < 32; j++) {
      x[i+j] += h[i] * d[j];
    }
  }

  modL(sm.subarray(32), x);
  return smlen;
}

function unpackneg(r, p) {
  var t = gf(), chk = gf(), num = gf(),
      den = gf(), den2 = gf(), den4 = gf(),
      den6 = gf();

  set25519(r[2], gf1);
  unpack25519(r[1], p);
  S(num, r[1]);
  M(den, num, D);
  Z(num, num, r[2]);
  A(den, r[2], den);

  S(den2, den);
  S(den4, den2);
  M(den6, den4, den2);
  M(t, den6, num);
  M(t, t, den);

  pow2523(t, t);
  M(t, t, num);
  M(t, t, den);
  M(t, t, den);
  M(r[0], t, den);

  S(chk, r[0]);
  M(chk, chk, den);
  if (neq25519(chk, num)) M(r[0], r[0], I);

  S(chk, r[0]);
  M(chk, chk, den);
  if (neq25519(chk, num)) return -1;

  if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);

  M(r[3], r[0], r[1]);
  return 0;
}

function crypto_sign_open(m, sm, n, pk) {
  var i, mlen;
  var t = new Uint8Array(32), h = new Uint8Array(64);
  var p = [gf(), gf(), gf(), gf()],
      q = [gf(), gf(), gf(), gf()];

  mlen = -1;
  if (n < 64) return -1;

  if (unpackneg(q, pk)) return -1;

  for (i = 0; i < n; i++) m[i] = sm[i];
  for (i = 0; i < 32; i++) m[i+32] = pk[i];
  crypto_hash(h, m, n);
  reduce(h);
  scalarmult(p, q, h);

  scalarbase(q, sm.subarray(32));
  add(p, q);
  pack(t, p);

  n -= 64;
  if (crypto_verify_32(sm, 0, t, 0)) {
    for (i = 0; i < n; i++) m[i] = 0;
    return -1;
  }

  for (i = 0; i < n; i++) m[i] = sm[i + 64];
  mlen = n;
  return mlen;
}

var crypto_secretbox_KEYBYTES = 32,
    crypto_secretbox_NONCEBYTES = 24,
    crypto_secretbox_ZEROBYTES = 32,
    crypto_secretbox_BOXZEROBYTES = 16,
    crypto_scalarmult_BYTES = 32,
    crypto_scalarmult_SCALARBYTES = 32,
    crypto_box_PUBLICKEYBYTES = 32,
    crypto_box_SECRETKEYBYTES = 32,
    crypto_box_BEFORENMBYTES = 32,
    crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
    crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
    crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
    crypto_sign_BYTES = 64,
    crypto_sign_PUBLICKEYBYTES = 32,
    crypto_sign_SECRETKEYBYTES = 64,
    crypto_sign_SEEDBYTES = 32,
    crypto_hash_BYTES = 64;

nacl.lowlevel = {
  crypto_core_hsalsa20: crypto_core_hsalsa20,
  crypto_stream_xor: crypto_stream_xor,
  crypto_stream: crypto_stream,
  crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
  crypto_stream_salsa20: crypto_stream_salsa20,
  crypto_onetimeauth: crypto_onetimeauth,
  crypto_onetimeauth_verify: crypto_onetimeauth_verify,
  crypto_verify_16: crypto_verify_16,
  crypto_verify_32: crypto_verify_32,
  crypto_secretbox: crypto_secretbox,
  crypto_secretbox_open: crypto_secretbox_open,
  crypto_scalarmult: crypto_scalarmult,
  crypto_scalarmult_base: crypto_scalarmult_base,
  crypto_box_beforenm: crypto_box_beforenm,
  crypto_box_afternm: crypto_box_afternm,
  crypto_box: crypto_box,
  crypto_box_open: crypto_box_open,
  crypto_box_keypair: crypto_box_keypair,
  crypto_hash: crypto_hash,
  crypto_sign: crypto_sign,
  crypto_sign_keypair: crypto_sign_keypair,
  crypto_sign_open: crypto_sign_open,

  crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
  crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
  crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
  crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
  crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
  crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
  crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
  crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
  crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
  crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
  crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
  crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
  crypto_sign_BYTES: crypto_sign_BYTES,
  crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
  crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
  crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
  crypto_hash_BYTES: crypto_hash_BYTES
};

/* High-level API */

function checkLengths(k, n) {
  if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
  if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
}

function checkBoxLengths(pk, sk) {
  if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
  if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
}

function checkArrayTypes() {
  var t, i;
  for (i = 0; i < arguments.length; i++) {
     if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')
       throw new TypeError('unexpected type ' + t + ', use Uint8Array');
  }
}

function cleanup(arr) {
  for (var i = 0; i < arr.length; i++) arr[i] = 0;
}

// TODO: Completely remove this in v0.15.
if (!nacl.util) {
  nacl.util = {};
  nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {
    throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');
  };
}

nacl.randomBytes = function(n) {
  var b = new Uint8Array(n);
  randombytes(b, n);
  return b;
};

nacl.secretbox = function(msg, nonce, key) {
  checkArrayTypes(msg, nonce, key);
  checkLengths(key, nonce);
  var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
  var c = new Uint8Array(m.length);
  for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
  crypto_secretbox(c, m, m.length, nonce, key);
  return c.subarray(crypto_secretbox_BOXZEROBYTES);
};

nacl.secretbox.open = function(box, nonce, key) {
  checkArrayTypes(box, nonce, key);
  checkLengths(key, nonce);
  var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
  var m = new Uint8Array(c.length);
  for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
  if (c.length < 32) return false;
  if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;
  return m.subarray(crypto_secretbox_ZEROBYTES);
};

nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;

nacl.scalarMult = function(n, p) {
  checkArrayTypes(n, p);
  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
  if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
  var q = new Uint8Array(crypto_scalarmult_BYTES);
  crypto_scalarmult(q, n, p);
  return q;
};

nacl.scalarMult.base = function(n) {
  checkArrayTypes(n);
  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
  var q = new Uint8Array(crypto_scalarmult_BYTES);
  crypto_scalarmult_base(q, n);
  return q;
};

nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;

nacl.box = function(msg, nonce, publicKey, secretKey) {
  var k = nacl.box.before(publicKey, secretKey);
  return nacl.secretbox(msg, nonce, k);
};

nacl.box.before = function(publicKey, secretKey) {
  checkArrayTypes(publicKey, secretKey);
  checkBoxLengths(publicKey, secretKey);
  var k = new Uint8Array(crypto_box_BEFORENMBYTES);
  crypto_box_beforenm(k, publicKey, secretKey);
  return k;
};

nacl.box.after = nacl.secretbox;

nacl.box.open = function(msg, nonce, publicKey, secretKey) {
  var k = nacl.box.before(publicKey, secretKey);
  return nacl.secretbox.open(msg, nonce, k);
};

nacl.box.open.after = nacl.secretbox.open;

nacl.box.keyPair = function() {
  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
  var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
  crypto_box_keypair(pk, sk);
  return {publicKey: pk, secretKey: sk};
};

nacl.box.keyPair.fromSecretKey = function(secretKey) {
  checkArrayTypes(secretKey);
  if (secretKey.length !== crypto_box_SECRETKEYBYTES)
    throw new Error('bad secret key size');
  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
  crypto_scalarmult_base(pk, secretKey);
  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
};

nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
nacl.box.nonceLength = crypto_box_NONCEBYTES;
nacl.box.overheadLength = nacl.secretbox.overheadLength;

nacl.sign = function(msg, secretKey) {
  checkArrayTypes(msg, secretKey);
  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
    throw new Error('bad secret key size');
  var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
  crypto_sign(signedMsg, msg, msg.length, secretKey);
  return signedMsg;
};

nacl.sign.open = function(signedMsg, publicKey) {
  if (arguments.length !== 2)
    throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');
  checkArrayTypes(signedMsg, publicKey);
  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
    throw new Error('bad public key size');
  var tmp = new Uint8Array(signedMsg.length);
  var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
  if (mlen < 0) return null;
  var m = new Uint8Array(mlen);
  for (var i = 0; i < m.length; i++) m[i] = tmp[i];
  return m;
};

nacl.sign.detached = function(msg, secretKey) {
  var signedMsg = nacl.sign(msg, secretKey);
  var sig = new Uint8Array(crypto_sign_BYTES);
  for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
  return sig;
};

nacl.sign.detached.verify = function(msg, sig, publicKey) {
  checkArrayTypes(msg, sig, publicKey);
  if (sig.length !== crypto_sign_BYTES)
    throw new Error('bad signature size');
  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
    throw new Error('bad public key size');
  var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
  var m = new Uint8Array(crypto_sign_BYTES + msg.length);
  var i;
  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
  for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
  return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
};

nacl.sign.keyPair = function() {
  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
  crypto_sign_keypair(pk, sk);
  return {publicKey: pk, secretKey: sk};
};

nacl.sign.keyPair.fromSecretKey = function(secretKey) {
  checkArrayTypes(secretKey);
  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
    throw new Error('bad secret key size');
  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
  for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
};

nacl.sign.keyPair.fromSeed = function(seed) {
  checkArrayTypes(seed);
  if (seed.length !== crypto_sign_SEEDBYTES)
    throw new Error('bad seed size');
  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
  for (var i = 0; i < 32; i++) sk[i] = seed[i];
  crypto_sign_keypair(pk, sk, true);
  return {publicKey: pk, secretKey: sk};
};

nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
nacl.sign.seedLength = crypto_sign_SEEDBYTES;
nacl.sign.signatureLength = crypto_sign_BYTES;

nacl.hash = function(msg) {
  checkArrayTypes(msg);
  var h = new Uint8Array(crypto_hash_BYTES);
  crypto_hash(h, msg, msg.length);
  return h;
};

nacl.hash.hashLength = crypto_hash_BYTES;

nacl.verify = function(x, y) {
  checkArrayTypes(x, y);
  // Zero length arguments are considered not equal.
  if (x.length === 0 || y.length === 0) return false;
  if (x.length !== y.length) return false;
  return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
};

nacl.setPRNG = function(fn) {
  randombytes = fn;
};

(function() {
  // Initialize PRNG if environment provides CSPRNG.
  // If not, methods calling randombytes will throw.
  var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
  if (crypto && crypto.getRandomValues) {
    // Browsers.
    var QUOTA = 65536;
    nacl.setPRNG(function(x, n) {
      var i, v = new Uint8Array(n);
      for (i = 0; i < n; i += QUOTA) {
        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
      }
      for (i = 0; i < n; i++) x[i] = v[i];
      cleanup(v);
    });
  } else if (true) {
    // Node.js.
    crypto = __webpack_require__(7);
    if (crypto && crypto.randomBytes) {
      nacl.setPRNG(function(x, n) {
        var i, v = crypto.randomBytes(n);
        for (i = 0; i < n; i++) x[i] = v[i];
        cleanup(v);
      });
    }
  }
})();

})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));


/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityParam = __webpack_require__(432);

/**
 * SolidityType prototype is used to encode/decode solidity params of certain type
 */
var SolidityType = function (config) {
    this._inputFormatter = config.inputFormatter;
    this._outputFormatter = config.outputFormatter;
};

/**
 * Should be used to determine if this SolidityType do match given name
 *
 * @method isType
 * @param {String} name
 * @return {Bool} true if type match this SolidityType, otherwise false
 */
SolidityType.prototype.isType = function (name) {
    throw "this method should be overrwritten for type " + name;
};

/**
 * Should be used to determine what is the length of static part in given type
 *
 * @method staticPartLength
 * @param {String} name
 * @return {Number} length of static part in bytes
 */
SolidityType.prototype.staticPartLength = function (name) {
    // If name isn't an array then treat it like a single element array.
    return (this.nestedTypes(name) || ['[1]'])
        .map(function (type) {
            // the length of the nested array
            return parseInt(type.slice(1, -1), 10) || 1;
        })
        .reduce(function (previous, current) {
            return previous * current;
        // all basic types are 32 bytes long
        }, 32);
};

/**
 * Should be used to determine if type is dynamic array
 * eg:
 * "type[]" => true
 * "type[4]" => false
 *
 * @method isDynamicArray
 * @param {String} name
 * @return {Bool} true if the type is dynamic array
 */
SolidityType.prototype.isDynamicArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should be used to determine if type is static array
 * eg:
 * "type[]" => false
 * "type[4]" => true
 *
 * @method isStaticArray
 * @param {String} name
 * @return {Bool} true if the type is static array
 */
SolidityType.prototype.isStaticArray = function (name) {
    var nestedTypes = this.nestedTypes(name);
    return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g);
};

/**
 * Should return length of static array
 * eg.
 * "int[32]" => 32
 * "int256[14]" => 14
 * "int[2][3]" => 3
 * "int" => 1
 * "int[1]" => 1
 * "int[]" => 1
 *
 * @method staticArrayLength
 * @param {String} name
 * @return {Number} static array length
 */
SolidityType.prototype.staticArrayLength = function (name) {
    var nestedTypes = this.nestedTypes(name);
    if (nestedTypes) {
       return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1);
    }
    return 1;
};

/**
 * Should return nested type
 * eg.
 * "int[32]" => "int"
 * "int256[14]" => "int256"
 * "int[2][3]" => "int[2]"
 * "int" => "int"
 * "int[]" => "int"
 *
 * @method nestedName
 * @param {String} name
 * @return {String} nested name
 */
SolidityType.prototype.nestedName = function (name) {
    // remove last [] in name
    var nestedTypes = this.nestedTypes(name);
    if (!nestedTypes) {
        return name;
    }

    return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length);
};

/**
 * Should return true if type has dynamic size by default
 * such types are "string", "bytes"
 *
 * @method isDynamicType
 * @param {String} name
 * @return {Bool} true if is dynamic, otherwise false
 */
SolidityType.prototype.isDynamicType = function () {
    return false;
};

/**
 * Should return array of nested types
 * eg.
 * "int[2][3][]" => ["[2]", "[3]", "[]"]
 * "int[] => ["[]"]
 * "int" => null
 *
 * @method nestedTypes
 * @param {String} name
 * @return {Array} array of nested types
 */
SolidityType.prototype.nestedTypes = function (name) {
    // return list of strings eg. "[]", "[3]", "[]", "[2]"
    return name.match(/(\[[0-9]*\])/g);
};

/**
 * Should be used to encode the value
 *
 * @method encode
 * @param {Object} value
 * @param {String} name
 * @return {String} encoded value
 */
SolidityType.prototype.encode = function (value, name) {
    var self = this;
    if (this.isDynamicArray(name)) {

        return (function () {
            var length = value.length;                          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            result.push(f.formatInputInt(length).encode());

            value.forEach(function (v) {
                result.push(self.encode(v, nestedName));
            });

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);          // in int
            var nestedName = self.nestedName(name);

            var result = [];
            for (var i = 0; i < length; i++) {
                result.push(self.encode(value[i], nestedName));
            }

            return result;
        })();

    }

    return this._inputFormatter(value, name).encode();
};

/**
 * Should be used to decode value from bytes
 *
 * @method decode
 * @param {String} bytes
 * @param {Number} offset in bytes
 * @param {String} name type name
 * @returns {Object} decoded value
 */
SolidityType.prototype.decode = function (bytes, offset, name) {
    var self = this;

    if (this.isDynamicArray(name)) {

        return (function () {
            var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes
            var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int
            var arrayStart = arrayOffset + 32; // array starts after length; // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName);  // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();

    } else if (this.isStaticArray(name)) {

        return (function () {
            var length = self.staticArrayLength(name);                      // in int
            var arrayStart = offset;                                        // in bytes

            var nestedName = self.nestedName(name);
            var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes
            var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32;
            var result = [];

            for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) {
                result.push(self.decode(bytes, arrayStart + i, nestedName));
            }

            return result;
        })();
    } else if (this.isDynamicType(name)) {

        return (function () {
            var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64));      // in bytes
            var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64));      // in bytes
            var roundedLength = Math.floor((length + 31) / 32);                     // in int
            var param = new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0);
            return self._outputFormatter(param, name);
        })();
    }

    var length = this.staticPartLength(name);
    var param = new SolidityParam(bytes.substr(offset * 2, length * 2));
    return this._outputFormatter(param, name);
};

module.exports = SolidityType;


/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.isAsync = undefined;

var _asyncify = __webpack_require__(571);

var _asyncify2 = _interopRequireDefault(_asyncify);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var supportsSymbol = typeof Symbol === 'function';

function isAsync(fn) {
    return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';
}

function wrapAsync(asyncFn) {
    return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn;
}

exports.default = wrapAsync;
exports.isAsync = isAsync;

/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__(109);
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(75);
var IE8_DOM_DEFINE = __webpack_require__(649);
var toPrimitive = __webpack_require__(665);
var dP = Object.defineProperty;

exports.f = __webpack_require__(76) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

(function(){

    // Copyright (c) 2005  Tom Wu
    // All Rights Reserved.
    // See "LICENSE" for details.

    // Basic JavaScript BN library - subset useful for RSA encryption.

    // Bits per digit
    var dbits;

    // JavaScript engine analysis
    var canary = 0xdeadbeefcafe;
    var j_lm = ((canary&0xffffff)==0xefcafe);

    // (public) Constructor
    function BigInteger(a,b,c) {
      if(a != null)
        if("number" == typeof a) this.fromNumber(a,b,c);
        else if(b == null && "string" != typeof a) this.fromString(a,256);
        else this.fromString(a,b);
    }

    // return new, unset BigInteger
    function nbi() { return new BigInteger(null); }

    // am: Compute w_j += (x*this_i), propagate carries,
    // c is initial carry, returns final carry.
    // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
    // We need to select the fastest one that works in this environment.

    // am1: use a single mult and divide to get the high bits,
    // max digit bits should be 26 because
    // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
    function am1(i,x,w,j,c,n) {
      while(--n >= 0) {
        var v = x*this[i++]+w[j]+c;
        c = Math.floor(v/0x4000000);
        w[j++] = v&0x3ffffff;
      }
      return c;
    }
    // am2 avoids a big mult-and-extract completely.
    // Max digit bits should be <= 30 because we do bitwise ops
    // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
    function am2(i,x,w,j,c,n) {
      var xl = x&0x7fff, xh = x>>15;
      while(--n >= 0) {
        var l = this[i]&0x7fff;
        var h = this[i++]>>15;
        var m = xh*l+h*xl;
        l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
        c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
        w[j++] = l&0x3fffffff;
      }
      return c;
    }
    // Alternately, set max digit bits to 28 since some
    // browsers slow down when dealing with 32-bit numbers.
    function am3(i,x,w,j,c,n) {
      var xl = x&0x3fff, xh = x>>14;
      while(--n >= 0) {
        var l = this[i]&0x3fff;
        var h = this[i++]>>14;
        var m = xh*l+h*xl;
        l = xl*l+((m&0x3fff)<<14)+w[j]+c;
        c = (l>>28)+(m>>14)+xh*h;
        w[j++] = l&0xfffffff;
      }
      return c;
    }
    var inBrowser = typeof navigator !== "undefined";
    if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
      BigInteger.prototype.am = am2;
      dbits = 30;
    }
    else if(inBrowser && j_lm && (navigator.appName != "Netscape")) {
      BigInteger.prototype.am = am1;
      dbits = 26;
    }
    else { // Mozilla/Netscape seems to prefer am3
      BigInteger.prototype.am = am3;
      dbits = 28;
    }

    BigInteger.prototype.DB = dbits;
    BigInteger.prototype.DM = ((1<<dbits)-1);
    BigInteger.prototype.DV = (1<<dbits);

    var BI_FP = 52;
    BigInteger.prototype.FV = Math.pow(2,BI_FP);
    BigInteger.prototype.F1 = BI_FP-dbits;
    BigInteger.prototype.F2 = 2*dbits-BI_FP;

    // Digit conversions
    var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
    var BI_RC = new Array();
    var rr,vv;
    rr = "0".charCodeAt(0);
    for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
    rr = "a".charCodeAt(0);
    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
    rr = "A".charCodeAt(0);
    for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;

    function int2char(n) { return BI_RM.charAt(n); }
    function intAt(s,i) {
      var c = BI_RC[s.charCodeAt(i)];
      return (c==null)?-1:c;
    }

    // (protected) copy this to r
    function bnpCopyTo(r) {
      for(var i = this.t-1; i >= 0; --i) r[i] = this[i];
      r.t = this.t;
      r.s = this.s;
    }

    // (protected) set from integer value x, -DV <= x < DV
    function bnpFromInt(x) {
      this.t = 1;
      this.s = (x<0)?-1:0;
      if(x > 0) this[0] = x;
      else if(x < -1) this[0] = x+this.DV;
      else this.t = 0;
    }

    // return bigint initialized to value
    function nbv(i) { var r = nbi(); r.fromInt(i); return r; }

    // (protected) set from string and radix
    function bnpFromString(s,b) {
      var k;
      if(b == 16) k = 4;
      else if(b == 8) k = 3;
      else if(b == 256) k = 8; // byte array
      else if(b == 2) k = 1;
      else if(b == 32) k = 5;
      else if(b == 4) k = 2;
      else { this.fromRadix(s,b); return; }
      this.t = 0;
      this.s = 0;
      var i = s.length, mi = false, sh = 0;
      while(--i >= 0) {
        var x = (k==8)?s[i]&0xff:intAt(s,i);
        if(x < 0) {
          if(s.charAt(i) == "-") mi = true;
          continue;
        }
        mi = false;
        if(sh == 0)
          this[this.t++] = x;
        else if(sh+k > this.DB) {
          this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;
          this[this.t++] = (x>>(this.DB-sh));
        }
        else
          this[this.t-1] |= x<<sh;
        sh += k;
        if(sh >= this.DB) sh -= this.DB;
      }
      if(k == 8 && (s[0]&0x80) != 0) {
        this.s = -1;
        if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;
      }
      this.clamp();
      if(mi) BigInteger.ZERO.subTo(this,this);
    }

    // (protected) clamp off excess high words
    function bnpClamp() {
      var c = this.s&this.DM;
      while(this.t > 0 && this[this.t-1] == c) --this.t;
    }

    // (public) return string representation in given radix
    function bnToString(b) {
      if(this.s < 0) return "-"+this.negate().toString(b);
      var k;
      if(b == 16) k = 4;
      else if(b == 8) k = 3;
      else if(b == 2) k = 1;
      else if(b == 32) k = 5;
      else if(b == 4) k = 2;
      else return this.toRadix(b);
      var km = (1<<k)-1, d, m = false, r = "", i = this.t;
      var p = this.DB-(i*this.DB)%k;
      if(i-- > 0) {
        if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
        while(i >= 0) {
          if(p < k) {
            d = (this[i]&((1<<p)-1))<<(k-p);
            d |= this[--i]>>(p+=this.DB-k);
          }
          else {
            d = (this[i]>>(p-=k))&km;
            if(p <= 0) { p += this.DB; --i; }
          }
          if(d > 0) m = true;
          if(m) r += int2char(d);
        }
      }
      return m?r:"0";
    }

    // (public) -this
    function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }

    // (public) |this|
    function bnAbs() { return (this.s<0)?this.negate():this; }

    // (public) return + if this > a, - if this < a, 0 if equal
    function bnCompareTo(a) {
      var r = this.s-a.s;
      if(r != 0) return r;
      var i = this.t;
      r = i-a.t;
      if(r != 0) return (this.s<0)?-r:r;
      while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
      return 0;
    }

    // returns bit length of the integer x
    function nbits(x) {
      var r = 1, t;
      if((t=x>>>16) != 0) { x = t; r += 16; }
      if((t=x>>8) != 0) { x = t; r += 8; }
      if((t=x>>4) != 0) { x = t; r += 4; }
      if((t=x>>2) != 0) { x = t; r += 2; }
      if((t=x>>1) != 0) { x = t; r += 1; }
      return r;
    }

    // (public) return the number of bits in "this"
    function bnBitLength() {
      if(this.t <= 0) return 0;
      return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
    }

    // (protected) r = this << n*DB
    function bnpDLShiftTo(n,r) {
      var i;
      for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
      for(i = n-1; i >= 0; --i) r[i] = 0;
      r.t = this.t+n;
      r.s = this.s;
    }

    // (protected) r = this >> n*DB
    function bnpDRShiftTo(n,r) {
      for(var i = n; i < this.t; ++i) r[i-n] = this[i];
      r.t = Math.max(this.t-n,0);
      r.s = this.s;
    }

    // (protected) r = this << n
    function bnpLShiftTo(n,r) {
      var bs = n%this.DB;
      var cbs = this.DB-bs;
      var bm = (1<<cbs)-1;
      var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;
      for(i = this.t-1; i >= 0; --i) {
        r[i+ds+1] = (this[i]>>cbs)|c;
        c = (this[i]&bm)<<bs;
      }
      for(i = ds-1; i >= 0; --i) r[i] = 0;
      r[ds] = c;
      r.t = this.t+ds+1;
      r.s = this.s;
      r.clamp();
    }

    // (protected) r = this >> n
    function bnpRShiftTo(n,r) {
      r.s = this.s;
      var ds = Math.floor(n/this.DB);
      if(ds >= this.t) { r.t = 0; return; }
      var bs = n%this.DB;
      var cbs = this.DB-bs;
      var bm = (1<<bs)-1;
      r[0] = this[ds]>>bs;
      for(var i = ds+1; i < this.t; ++i) {
        r[i-ds-1] |= (this[i]&bm)<<cbs;
        r[i-ds] = this[i]>>bs;
      }
      if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;
      r.t = this.t-ds;
      r.clamp();
    }

    // (protected) r = this - a
    function bnpSubTo(a,r) {
      var i = 0, c = 0, m = Math.min(a.t,this.t);
      while(i < m) {
        c += this[i]-a[i];
        r[i++] = c&this.DM;
        c >>= this.DB;
      }
      if(a.t < this.t) {
        c -= a.s;
        while(i < this.t) {
          c += this[i];
          r[i++] = c&this.DM;
          c >>= this.DB;
        }
        c += this.s;
      }
      else {
        c += this.s;
        while(i < a.t) {
          c -= a[i];
          r[i++] = c&this.DM;
          c >>= this.DB;
        }
        c -= a.s;
      }
      r.s = (c<0)?-1:0;
      if(c < -1) r[i++] = this.DV+c;
      else if(c > 0) r[i++] = c;
      r.t = i;
      r.clamp();
    }

    // (protected) r = this * a, r != this,a (HAC 14.12)
    // "this" should be the larger one if appropriate.
    function bnpMultiplyTo(a,r) {
      var x = this.abs(), y = a.abs();
      var i = x.t;
      r.t = i+y.t;
      while(--i >= 0) r[i] = 0;
      for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
      r.s = 0;
      r.clamp();
      if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
    }

    // (protected) r = this^2, r != this (HAC 14.16)
    function bnpSquareTo(r) {
      var x = this.abs();
      var i = r.t = 2*x.t;
      while(--i >= 0) r[i] = 0;
      for(i = 0; i < x.t-1; ++i) {
        var c = x.am(i,x[i],r,2*i,0,1);
        if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
          r[i+x.t] -= x.DV;
          r[i+x.t+1] = 1;
        }
      }
      if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
      r.s = 0;
      r.clamp();
    }

    // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
    // r != q, this != m.  q or r may be null.
    function bnpDivRemTo(m,q,r) {
      var pm = m.abs();
      if(pm.t <= 0) return;
      var pt = this.abs();
      if(pt.t < pm.t) {
        if(q != null) q.fromInt(0);
        if(r != null) this.copyTo(r);
        return;
      }
      if(r == null) r = nbi();
      var y = nbi(), ts = this.s, ms = m.s;
      var nsh = this.DB-nbits(pm[pm.t-1]);   // normalize modulus
      if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
      else { pm.copyTo(y); pt.copyTo(r); }
      var ys = y.t;
      var y0 = y[ys-1];
      if(y0 == 0) return;
      var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);
      var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;
      var i = r.t, j = i-ys, t = (q==null)?nbi():q;
      y.dlShiftTo(j,t);
      if(r.compareTo(t) >= 0) {
        r[r.t++] = 1;
        r.subTo(t,r);
      }
      BigInteger.ONE.dlShiftTo(ys,t);
      t.subTo(y,y);  // "negative" y so we can replace sub with am later
      while(y.t < ys) y[y.t++] = 0;
      while(--j >= 0) {
        // Estimate quotient digit
        var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
        if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) {   // Try it out
          y.dlShiftTo(j,t);
          r.subTo(t,r);
          while(r[i] < --qd) r.subTo(t,r);
        }
      }
      if(q != null) {
        r.drShiftTo(ys,q);
        if(ts != ms) BigInteger.ZERO.subTo(q,q);
      }
      r.t = ys;
      r.clamp();
      if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
      if(ts < 0) BigInteger.ZERO.subTo(r,r);
    }

    // (public) this mod a
    function bnMod(a) {
      var r = nbi();
      this.abs().divRemTo(a,null,r);
      if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
      return r;
    }

    // Modular reduction using "classic" algorithm
    function Classic(m) { this.m = m; }
    function cConvert(x) {
      if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
      else return x;
    }
    function cRevert(x) { return x; }
    function cReduce(x) { x.divRemTo(this.m,null,x); }
    function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
    function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

    Classic.prototype.convert = cConvert;
    Classic.prototype.revert = cRevert;
    Classic.prototype.reduce = cReduce;
    Classic.prototype.mulTo = cMulTo;
    Classic.prototype.sqrTo = cSqrTo;

    // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
    // justification:
    //         xy == 1 (mod m)
    //         xy =  1+km
    //   xy(2-xy) = (1+km)(1-km)
    // x[y(2-xy)] = 1-k^2m^2
    // x[y(2-xy)] == 1 (mod m^2)
    // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
    // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
    // JS multiply "overflows" differently from C/C++, so care is needed here.
    function bnpInvDigit() {
      if(this.t < 1) return 0;
      var x = this[0];
      if((x&1) == 0) return 0;
      var y = x&3;       // y == 1/x mod 2^2
      y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
      y = (y*(2-(x&0xff)*y))&0xff;   // y == 1/x mod 2^8
      y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;    // y == 1/x mod 2^16
      // last step - calculate inverse mod DV directly;
      // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
      y = (y*(2-x*y%this.DV))%this.DV;       // y == 1/x mod 2^dbits
      // we really want the negative inverse, and -DV < y < DV
      return (y>0)?this.DV-y:-y;
    }

    // Montgomery reduction
    function Montgomery(m) {
      this.m = m;
      this.mp = m.invDigit();
      this.mpl = this.mp&0x7fff;
      this.mph = this.mp>>15;
      this.um = (1<<(m.DB-15))-1;
      this.mt2 = 2*m.t;
    }

    // xR mod m
    function montConvert(x) {
      var r = nbi();
      x.abs().dlShiftTo(this.m.t,r);
      r.divRemTo(this.m,null,r);
      if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
      return r;
    }

    // x/R mod m
    function montRevert(x) {
      var r = nbi();
      x.copyTo(r);
      this.reduce(r);
      return r;
    }

    // x = x/R mod m (HAC 14.32)
    function montReduce(x) {
      while(x.t <= this.mt2) // pad x so am has enough room later
        x[x.t++] = 0;
      for(var i = 0; i < this.m.t; ++i) {
        // faster way of calculating u0 = x[i]*mp mod DV
        var j = x[i]&0x7fff;
        var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
        // use am to combine the multiply-shift-add into one call
        j = i+this.m.t;
        x[j] += this.m.am(0,u0,x,i,0,this.m.t);
        // propagate carry
        while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
      }
      x.clamp();
      x.drShiftTo(this.m.t,x);
      if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
    }

    // r = "x^2/R mod m"; x != r
    function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

    // r = "xy/R mod m"; x,y != r
    function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }

    Montgomery.prototype.convert = montConvert;
    Montgomery.prototype.revert = montRevert;
    Montgomery.prototype.reduce = montReduce;
    Montgomery.prototype.mulTo = montMulTo;
    Montgomery.prototype.sqrTo = montSqrTo;

    // (protected) true iff this is even
    function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }

    // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
    function bnpExp(e,z) {
      if(e > 0xffffffff || e < 1) return BigInteger.ONE;
      var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
      g.copyTo(r);
      while(--i >= 0) {
        z.sqrTo(r,r2);
        if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
        else { var t = r; r = r2; r2 = t; }
      }
      return z.revert(r);
    }

    // (public) this^e % m, 0 <= e < 2^32
    function bnModPowInt(e,m) {
      var z;
      if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
      return this.exp(e,z);
    }

    // protected
    BigInteger.prototype.copyTo = bnpCopyTo;
    BigInteger.prototype.fromInt = bnpFromInt;
    BigInteger.prototype.fromString = bnpFromString;
    BigInteger.prototype.clamp = bnpClamp;
    BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
    BigInteger.prototype.drShiftTo = bnpDRShiftTo;
    BigInteger.prototype.lShiftTo = bnpLShiftTo;
    BigInteger.prototype.rShiftTo = bnpRShiftTo;
    BigInteger.prototype.subTo = bnpSubTo;
    BigInteger.prototype.multiplyTo = bnpMultiplyTo;
    BigInteger.prototype.squareTo = bnpSquareTo;
    BigInteger.prototype.divRemTo = bnpDivRemTo;
    BigInteger.prototype.invDigit = bnpInvDigit;
    BigInteger.prototype.isEven = bnpIsEven;
    BigInteger.prototype.exp = bnpExp;

    // public
    BigInteger.prototype.toString = bnToString;
    BigInteger.prototype.negate = bnNegate;
    BigInteger.prototype.abs = bnAbs;
    BigInteger.prototype.compareTo = bnCompareTo;
    BigInteger.prototype.bitLength = bnBitLength;
    BigInteger.prototype.mod = bnMod;
    BigInteger.prototype.modPowInt = bnModPowInt;

    // "constants"
    BigInteger.ZERO = nbv(0);
    BigInteger.ONE = nbv(1);

    // Copyright (c) 2005-2009  Tom Wu
    // All Rights Reserved.
    // See "LICENSE" for details.

    // Extended JavaScript BN functions, required for RSA private ops.

    // Version 1.1: new BigInteger("0", 10) returns "proper" zero
    // Version 1.2: square() API, isProbablePrime fix

    // (public)
    function bnClone() { var r = nbi(); this.copyTo(r); return r; }

    // (public) return value as integer
    function bnIntValue() {
      if(this.s < 0) {
        if(this.t == 1) return this[0]-this.DV;
        else if(this.t == 0) return -1;
      }
      else if(this.t == 1) return this[0];
      else if(this.t == 0) return 0;
      // assumes 16 < DB < 32
      return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];
    }

    // (public) return value as byte
    function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }

    // (public) return value as short (assumes DB>=16)
    function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }

    // (protected) return x s.t. r^x < DV
    function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }

    // (public) 0 if this == 0, 1 if this > 0
    function bnSigNum() {
      if(this.s < 0) return -1;
      else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
      else return 1;
    }

    // (protected) convert to radix string
    function bnpToRadix(b) {
      if(b == null) b = 10;
      if(this.signum() == 0 || b < 2 || b > 36) return "0";
      var cs = this.chunkSize(b);
      var a = Math.pow(b,cs);
      var d = nbv(a), y = nbi(), z = nbi(), r = "";
      this.divRemTo(d,y,z);
      while(y.signum() > 0) {
        r = (a+z.intValue()).toString(b).substr(1) + r;
        y.divRemTo(d,y,z);
      }
      return z.intValue().toString(b) + r;
    }

    // (protected) convert from radix string
    function bnpFromRadix(s,b) {
      this.fromInt(0);
      if(b == null) b = 10;
      var cs = this.chunkSize(b);
      var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
      for(var i = 0; i < s.length; ++i) {
        var x = intAt(s,i);
        if(x < 0) {
          if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
          continue;
        }
        w = b*w+x;
        if(++j >= cs) {
          this.dMultiply(d);
          this.dAddOffset(w,0);
          j = 0;
          w = 0;
        }
      }
      if(j > 0) {
        this.dMultiply(Math.pow(b,j));
        this.dAddOffset(w,0);
      }
      if(mi) BigInteger.ZERO.subTo(this,this);
    }

    // (protected) alternate constructor
    function bnpFromNumber(a,b,c) {
      if("number" == typeof b) {
        // new BigInteger(int,int,RNG)
        if(a < 2) this.fromInt(1);
        else {
          this.fromNumber(a,c);
          if(!this.testBit(a-1))	// force MSB set
            this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
          if(this.isEven()) this.dAddOffset(1,0); // force odd
          while(!this.isProbablePrime(b)) {
            this.dAddOffset(2,0);
            if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
          }
        }
      }
      else {
        // new BigInteger(int,RNG)
        var x = new Array(), t = a&7;
        x.length = (a>>3)+1;
        b.nextBytes(x);
        if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
        this.fromString(x,256);
      }
    }

    // (public) convert to bigendian byte array
    function bnToByteArray() {
      var i = this.t, r = new Array();
      r[0] = this.s;
      var p = this.DB-(i*this.DB)%8, d, k = 0;
      if(i-- > 0) {
        if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)
          r[k++] = d|(this.s<<(this.DB-p));
        while(i >= 0) {
          if(p < 8) {
            d = (this[i]&((1<<p)-1))<<(8-p);
            d |= this[--i]>>(p+=this.DB-8);
          }
          else {
            d = (this[i]>>(p-=8))&0xff;
            if(p <= 0) { p += this.DB; --i; }
          }
          if((d&0x80) != 0) d |= -256;
          if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
          if(k > 0 || d != this.s) r[k++] = d;
        }
      }
      return r;
    }

    function bnEquals(a) { return(this.compareTo(a)==0); }
    function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
    function bnMax(a) { return(this.compareTo(a)>0)?this:a; }

    // (protected) r = this op a (bitwise)
    function bnpBitwiseTo(a,op,r) {
      var i, f, m = Math.min(a.t,this.t);
      for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);
      if(a.t < this.t) {
        f = a.s&this.DM;
        for(i = m; i < this.t; ++i) r[i] = op(this[i],f);
        r.t = this.t;
      }
      else {
        f = this.s&this.DM;
        for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
        r.t = a.t;
      }
      r.s = op(this.s,a.s);
      r.clamp();
    }

    // (public) this & a
    function op_and(x,y) { return x&y; }
    function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }

    // (public) this | a
    function op_or(x,y) { return x|y; }
    function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }

    // (public) this ^ a
    function op_xor(x,y) { return x^y; }
    function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }

    // (public) this & ~a
    function op_andnot(x,y) { return x&~y; }
    function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }

    // (public) ~this
    function bnNot() {
      var r = nbi();
      for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
      r.t = this.t;
      r.s = ~this.s;
      return r;
    }

    // (public) this << n
    function bnShiftLeft(n) {
      var r = nbi();
      if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
      return r;
    }

    // (public) this >> n
    function bnShiftRight(n) {
      var r = nbi();
      if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
      return r;
    }

    // return index of lowest 1-bit in x, x < 2^31
    function lbit(x) {
      if(x == 0) return -1;
      var r = 0;
      if((x&0xffff) == 0) { x >>= 16; r += 16; }
      if((x&0xff) == 0) { x >>= 8; r += 8; }
      if((x&0xf) == 0) { x >>= 4; r += 4; }
      if((x&3) == 0) { x >>= 2; r += 2; }
      if((x&1) == 0) ++r;
      return r;
    }

    // (public) returns index of lowest 1-bit (or -1 if none)
    function bnGetLowestSetBit() {
      for(var i = 0; i < this.t; ++i)
        if(this[i] != 0) return i*this.DB+lbit(this[i]);
      if(this.s < 0) return this.t*this.DB;
      return -1;
    }

    // return number of 1 bits in x
    function cbit(x) {
      var r = 0;
      while(x != 0) { x &= x-1; ++r; }
      return r;
    }

    // (public) return number of set bits
    function bnBitCount() {
      var r = 0, x = this.s&this.DM;
      for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
      return r;
    }

    // (public) true iff nth bit is set
    function bnTestBit(n) {
      var j = Math.floor(n/this.DB);
      if(j >= this.t) return(this.s!=0);
      return((this[j]&(1<<(n%this.DB)))!=0);
    }

    // (protected) this op (1<<n)
    function bnpChangeBit(n,op) {
      var r = BigInteger.ONE.shiftLeft(n);
      this.bitwiseTo(r,op,r);
      return r;
    }

    // (public) this | (1<<n)
    function bnSetBit(n) { return this.changeBit(n,op_or); }

    // (public) this & ~(1<<n)
    function bnClearBit(n) { return this.changeBit(n,op_andnot); }

    // (public) this ^ (1<<n)
    function bnFlipBit(n) { return this.changeBit(n,op_xor); }

    // (protected) r = this + a
    function bnpAddTo(a,r) {
      var i = 0, c = 0, m = Math.min(a.t,this.t);
      while(i < m) {
        c += this[i]+a[i];
        r[i++] = c&this.DM;
        c >>= this.DB;
      }
      if(a.t < this.t) {
        c += a.s;
        while(i < this.t) {
          c += this[i];
          r[i++] = c&this.DM;
          c >>= this.DB;
        }
        c += this.s;
      }
      else {
        c += this.s;
        while(i < a.t) {
          c += a[i];
          r[i++] = c&this.DM;
          c >>= this.DB;
        }
        c += a.s;
      }
      r.s = (c<0)?-1:0;
      if(c > 0) r[i++] = c;
      else if(c < -1) r[i++] = this.DV+c;
      r.t = i;
      r.clamp();
    }

    // (public) this + a
    function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }

    // (public) this - a
    function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }

    // (public) this * a
    function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }

    // (public) this^2
    function bnSquare() { var r = nbi(); this.squareTo(r); return r; }

    // (public) this / a
    function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }

    // (public) this % a
    function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }

    // (public) [this/a,this%a]
    function bnDivideAndRemainder(a) {
      var q = nbi(), r = nbi();
      this.divRemTo(a,q,r);
      return new Array(q,r);
    }

    // (protected) this *= n, this >= 0, 1 < n < DV
    function bnpDMultiply(n) {
      this[this.t] = this.am(0,n-1,this,0,0,this.t);
      ++this.t;
      this.clamp();
    }

    // (protected) this += n << w words, this >= 0
    function bnpDAddOffset(n,w) {
      if(n == 0) return;
      while(this.t <= w) this[this.t++] = 0;
      this[w] += n;
      while(this[w] >= this.DV) {
        this[w] -= this.DV;
        if(++w >= this.t) this[this.t++] = 0;
        ++this[w];
      }
    }

    // A "null" reducer
    function NullExp() {}
    function nNop(x) { return x; }
    function nMulTo(x,y,r) { x.multiplyTo(y,r); }
    function nSqrTo(x,r) { x.squareTo(r); }

    NullExp.prototype.convert = nNop;
    NullExp.prototype.revert = nNop;
    NullExp.prototype.mulTo = nMulTo;
    NullExp.prototype.sqrTo = nSqrTo;

    // (public) this^e
    function bnPow(e) { return this.exp(e,new NullExp()); }

    // (protected) r = lower n words of "this * a", a.t <= n
    // "this" should be the larger one if appropriate.
    function bnpMultiplyLowerTo(a,n,r) {
      var i = Math.min(this.t+a.t,n);
      r.s = 0; // assumes a,this >= 0
      r.t = i;
      while(i > 0) r[--i] = 0;
      var j;
      for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);
      for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);
      r.clamp();
    }

    // (protected) r = "this * a" without lower n words, n > 0
    // "this" should be the larger one if appropriate.
    function bnpMultiplyUpperTo(a,n,r) {
      --n;
      var i = r.t = this.t+a.t-n;
      r.s = 0; // assumes a,this >= 0
      while(--i >= 0) r[i] = 0;
      for(i = Math.max(n-this.t,0); i < a.t; ++i)
        r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);
      r.clamp();
      r.drShiftTo(1,r);
    }

    // Barrett modular reduction
    function Barrett(m) {
      // setup Barrett
      this.r2 = nbi();
      this.q3 = nbi();
      BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
      this.mu = this.r2.divide(m);
      this.m = m;
    }

    function barrettConvert(x) {
      if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
      else if(x.compareTo(this.m) < 0) return x;
      else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
    }

    function barrettRevert(x) { return x; }

    // x = x mod m (HAC 14.42)
    function barrettReduce(x) {
      x.drShiftTo(this.m.t-1,this.r2);
      if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
      this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
      this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
      while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
      x.subTo(this.r2,x);
      while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
    }

    // r = x^2 mod m; x != r
    function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

    // r = x*y mod m; x,y != r
    function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }

    Barrett.prototype.convert = barrettConvert;
    Barrett.prototype.revert = barrettRevert;
    Barrett.prototype.reduce = barrettReduce;
    Barrett.prototype.mulTo = barrettMulTo;
    Barrett.prototype.sqrTo = barrettSqrTo;

    // (public) this^e % m (HAC 14.85)
    function bnModPow(e,m) {
      var i = e.bitLength(), k, r = nbv(1), z;
      if(i <= 0) return r;
      else if(i < 18) k = 1;
      else if(i < 48) k = 3;
      else if(i < 144) k = 4;
      else if(i < 768) k = 5;
      else k = 6;
      if(i < 8)
        z = new Classic(m);
      else if(m.isEven())
        z = new Barrett(m);
      else
        z = new Montgomery(m);

      // precomputation
      var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
      g[1] = z.convert(this);
      if(k > 1) {
        var g2 = nbi();
        z.sqrTo(g[1],g2);
        while(n <= km) {
          g[n] = nbi();
          z.mulTo(g2,g[n-2],g[n]);
          n += 2;
        }
      }

      var j = e.t-1, w, is1 = true, r2 = nbi(), t;
      i = nbits(e[j])-1;
      while(j >= 0) {
        if(i >= k1) w = (e[j]>>(i-k1))&km;
        else {
          w = (e[j]&((1<<(i+1))-1))<<(k1-i);
          if(j > 0) w |= e[j-1]>>(this.DB+i-k1);
        }

        n = k;
        while((w&1) == 0) { w >>= 1; --n; }
        if((i -= n) < 0) { i += this.DB; --j; }
        if(is1) {	// ret == 1, don't bother squaring or multiplying it
          g[w].copyTo(r);
          is1 = false;
        }
        else {
          while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
          if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
          z.mulTo(r2,g[w],r);
        }

        while(j >= 0 && (e[j]&(1<<i)) == 0) {
          z.sqrTo(r,r2); t = r; r = r2; r2 = t;
          if(--i < 0) { i = this.DB-1; --j; }
        }
      }
      return z.revert(r);
    }

    // (public) gcd(this,a) (HAC 14.54)
    function bnGCD(a) {
      var x = (this.s<0)?this.negate():this.clone();
      var y = (a.s<0)?a.negate():a.clone();
      if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
      var i = x.getLowestSetBit(), g = y.getLowestSetBit();
      if(g < 0) return x;
      if(i < g) g = i;
      if(g > 0) {
        x.rShiftTo(g,x);
        y.rShiftTo(g,y);
      }
      while(x.signum() > 0) {
        if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
        if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
        if(x.compareTo(y) >= 0) {
          x.subTo(y,x);
          x.rShiftTo(1,x);
        }
        else {
          y.subTo(x,y);
          y.rShiftTo(1,y);
        }
      }
      if(g > 0) y.lShiftTo(g,y);
      return y;
    }

    // (protected) this % n, n < 2^26
    function bnpModInt(n) {
      if(n <= 0) return 0;
      var d = this.DV%n, r = (this.s<0)?n-1:0;
      if(this.t > 0)
        if(d == 0) r = this[0]%n;
        else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;
      return r;
    }

    // (public) 1/this % m (HAC 14.61)
    function bnModInverse(m) {
      var ac = m.isEven();
      if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
      var u = m.clone(), v = this.clone();
      var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
      while(u.signum() != 0) {
        while(u.isEven()) {
          u.rShiftTo(1,u);
          if(ac) {
            if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
            a.rShiftTo(1,a);
          }
          else if(!b.isEven()) b.subTo(m,b);
          b.rShiftTo(1,b);
        }
        while(v.isEven()) {
          v.rShiftTo(1,v);
          if(ac) {
            if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
            c.rShiftTo(1,c);
          }
          else if(!d.isEven()) d.subTo(m,d);
          d.rShiftTo(1,d);
        }
        if(u.compareTo(v) >= 0) {
          u.subTo(v,u);
          if(ac) a.subTo(c,a);
          b.subTo(d,b);
        }
        else {
          v.subTo(u,v);
          if(ac) c.subTo(a,c);
          d.subTo(b,d);
        }
      }
      if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
      if(d.compareTo(m) >= 0) return d.subtract(m);
      if(d.signum() < 0) d.addTo(m,d); else return d;
      if(d.signum() < 0) return d.add(m); else return d;
    }

    var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];
    var lplim = (1<<26)/lowprimes[lowprimes.length-1];

    // (public) test primality with certainty >= 1-.5^t
    function bnIsProbablePrime(t) {
      var i, x = this.abs();
      if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {
        for(i = 0; i < lowprimes.length; ++i)
          if(x[0] == lowprimes[i]) return true;
        return false;
      }
      if(x.isEven()) return false;
      i = 1;
      while(i < lowprimes.length) {
        var m = lowprimes[i], j = i+1;
        while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
        m = x.modInt(m);
        while(i < j) if(m%lowprimes[i++] == 0) return false;
      }
      return x.millerRabin(t);
    }

    // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
    function bnpMillerRabin(t) {
      var n1 = this.subtract(BigInteger.ONE);
      var k = n1.getLowestSetBit();
      if(k <= 0) return false;
      var r = n1.shiftRight(k);
      t = (t+1)>>1;
      if(t > lowprimes.length) t = lowprimes.length;
      var a = nbi();
      for(var i = 0; i < t; ++i) {
        //Pick bases at random, instead of starting at 2
        a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);
        var y = a.modPow(r,this);
        if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
          var j = 1;
          while(j++ < k && y.compareTo(n1) != 0) {
            y = y.modPowInt(2,this);
            if(y.compareTo(BigInteger.ONE) == 0) return false;
          }
          if(y.compareTo(n1) != 0) return false;
        }
      }
      return true;
    }

    // protected
    BigInteger.prototype.chunkSize = bnpChunkSize;
    BigInteger.prototype.toRadix = bnpToRadix;
    BigInteger.prototype.fromRadix = bnpFromRadix;
    BigInteger.prototype.fromNumber = bnpFromNumber;
    BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
    BigInteger.prototype.changeBit = bnpChangeBit;
    BigInteger.prototype.addTo = bnpAddTo;
    BigInteger.prototype.dMultiply = bnpDMultiply;
    BigInteger.prototype.dAddOffset = bnpDAddOffset;
    BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
    BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
    BigInteger.prototype.modInt = bnpModInt;
    BigInteger.prototype.millerRabin = bnpMillerRabin;

    // public
    BigInteger.prototype.clone = bnClone;
    BigInteger.prototype.intValue = bnIntValue;
    BigInteger.prototype.byteValue = bnByteValue;
    BigInteger.prototype.shortValue = bnShortValue;
    BigInteger.prototype.signum = bnSigNum;
    BigInteger.prototype.toByteArray = bnToByteArray;
    BigInteger.prototype.equals = bnEquals;
    BigInteger.prototype.min = bnMin;
    BigInteger.prototype.max = bnMax;
    BigInteger.prototype.and = bnAnd;
    BigInteger.prototype.or = bnOr;
    BigInteger.prototype.xor = bnXor;
    BigInteger.prototype.andNot = bnAndNot;
    BigInteger.prototype.not = bnNot;
    BigInteger.prototype.shiftLeft = bnShiftLeft;
    BigInteger.prototype.shiftRight = bnShiftRight;
    BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
    BigInteger.prototype.bitCount = bnBitCount;
    BigInteger.prototype.testBit = bnTestBit;
    BigInteger.prototype.setBit = bnSetBit;
    BigInteger.prototype.clearBit = bnClearBit;
    BigInteger.prototype.flipBit = bnFlipBit;
    BigInteger.prototype.add = bnAdd;
    BigInteger.prototype.subtract = bnSubtract;
    BigInteger.prototype.multiply = bnMultiply;
    BigInteger.prototype.divide = bnDivide;
    BigInteger.prototype.remainder = bnRemainder;
    BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
    BigInteger.prototype.modPow = bnModPow;
    BigInteger.prototype.modInverse = bnModInverse;
    BigInteger.prototype.pow = bnPow;
    BigInteger.prototype.gcd = bnGCD;
    BigInteger.prototype.isProbablePrime = bnIsProbablePrime;

    // JSBN-specific extension
    BigInteger.prototype.square = bnSquare;

    // Expose the Barrett function
    BigInteger.prototype.Barrett = Barrett

    // BigInteger interfaces not implemented in jsbn:

    // BigInteger(int signum, byte[] magnitude)
    // double doubleValue()
    // float floatValue()
    // int hashCode()
    // long longValue()
    // static BigInteger valueOf(long val)

	// Random number generator - requires a PRNG backend, e.g. prng4.js

	// For best results, put code like
	// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
	// in your main HTML document.

	var rng_state;
	var rng_pool;
	var rng_pptr;

	// Mix in a 32-bit integer into the pool
	function rng_seed_int(x) {
	  rng_pool[rng_pptr++] ^= x & 255;
	  rng_pool[rng_pptr++] ^= (x >> 8) & 255;
	  rng_pool[rng_pptr++] ^= (x >> 16) & 255;
	  rng_pool[rng_pptr++] ^= (x >> 24) & 255;
	  if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
	}

	// Mix in the current time (w/milliseconds) into the pool
	function rng_seed_time() {
	  rng_seed_int(new Date().getTime());
	}

	// Initialize the pool with junk if needed.
	if(rng_pool == null) {
	  rng_pool = new Array();
	  rng_pptr = 0;
	  var t;
	  if(typeof window !== "undefined" && window.crypto) {
		if (window.crypto.getRandomValues) {
		  // Use webcrypto if available
		  var ua = new Uint8Array(32);
		  window.crypto.getRandomValues(ua);
		  for(t = 0; t < 32; ++t)
			rng_pool[rng_pptr++] = ua[t];
		}
		else if(navigator.appName == "Netscape" && navigator.appVersion < "5") {
		  // Extract entropy (256 bits) from NS4 RNG if available
		  var z = window.crypto.random(32);
		  for(t = 0; t < z.length; ++t)
			rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;
		}
	  }
	  while(rng_pptr < rng_psize) {  // extract some randomness from Math.random()
		t = Math.floor(65536 * Math.random());
		rng_pool[rng_pptr++] = t >>> 8;
		rng_pool[rng_pptr++] = t & 255;
	  }
	  rng_pptr = 0;
	  rng_seed_time();
	  //rng_seed_int(window.screenX);
	  //rng_seed_int(window.screenY);
	}

	function rng_get_byte() {
	  if(rng_state == null) {
		rng_seed_time();
		rng_state = prng_newstate();
		rng_state.init(rng_pool);
		for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
		  rng_pool[rng_pptr] = 0;
		rng_pptr = 0;
		//rng_pool = null;
	  }
	  // TODO: allow reseeding after first request
	  return rng_state.next();
	}

	function rng_get_bytes(ba) {
	  var i;
	  for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
	}

	function SecureRandom() {}

	SecureRandom.prototype.nextBytes = rng_get_bytes;

	// prng4.js - uses Arcfour as a PRNG

	function Arcfour() {
	  this.i = 0;
	  this.j = 0;
	  this.S = new Array();
	}

	// Initialize arcfour context from key, an array of ints, each from [0..255]
	function ARC4init(key) {
	  var i, j, t;
	  for(i = 0; i < 256; ++i)
		this.S[i] = i;
	  j = 0;
	  for(i = 0; i < 256; ++i) {
		j = (j + this.S[i] + key[i % key.length]) & 255;
		t = this.S[i];
		this.S[i] = this.S[j];
		this.S[j] = t;
	  }
	  this.i = 0;
	  this.j = 0;
	}

	function ARC4next() {
	  var t;
	  this.i = (this.i + 1) & 255;
	  this.j = (this.j + this.S[this.i]) & 255;
	  t = this.S[this.i];
	  this.S[this.i] = this.S[this.j];
	  this.S[this.j] = t;
	  return this.S[(t + this.S[this.i]) & 255];
	}

	Arcfour.prototype.init = ARC4init;
	Arcfour.prototype.next = ARC4next;

	// Plug in your RNG constructor here
	function prng_newstate() {
	  return new Arcfour();
	}

	// Pool size must be a multiple of 4 and greater than 32.
	// An array of bytes the size of the pool will be passed to init()
	var rng_psize = 256;

  BigInteger.SecureRandom = SecureRandom;
  BigInteger.BigInteger = BigInteger;
  if (true) {
    exports = module.exports = BigInteger;
  } else {
    this.BigInteger = BigInteger;
    this.SecureRandom = SecureRandom;
  }

}).call(this);


/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = minimatch
minimatch.Minimatch = Minimatch

var path = { sep: '/' }
try {
  path = __webpack_require__(0)
} catch (er) {}

var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
var expand = __webpack_require__(600)

var plTypes = {
  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
  '?': { open: '(?:', close: ')?' },
  '+': { open: '(?:', close: ')+' },
  '*': { open: '(?:', close: ')*' },
  '@': { open: '(?:', close: ')' }
}

// any single thing other than /
// don't need to escape / when using new RegExp()
var qmark = '[^/]'

// * => any number of characters
var star = qmark + '*?'

// ** when dots are allowed.  Anything goes, except .. and .
// not (^ or / followed by one or two dots followed by $ or /),
// followed by anything, any number of times.
var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'

// not a ^ or / followed by a dot,
// followed by anything, any number of times.
var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'

// characters that need to be escaped in RegExp.
var reSpecials = charSet('().*{}+?[]^$\\!')

// "abc" -> { a:true, b:true, c:true }
function charSet (s) {
  return s.split('').reduce(function (set, c) {
    set[c] = true
    return set
  }, {})
}

// normalizes slashes.
var slashSplit = /\/+/

minimatch.filter = filter
function filter (pattern, options) {
  options = options || {}
  return function (p, i, list) {
    return minimatch(p, pattern, options)
  }
}

function ext (a, b) {
  a = a || {}
  b = b || {}
  var t = {}
  Object.keys(b).forEach(function (k) {
    t[k] = b[k]
  })
  Object.keys(a).forEach(function (k) {
    t[k] = a[k]
  })
  return t
}

minimatch.defaults = function (def) {
  if (!def || !Object.keys(def).length) return minimatch

  var orig = minimatch

  var m = function minimatch (p, pattern, options) {
    return orig.minimatch(p, pattern, ext(def, options))
  }

  m.Minimatch = function Minimatch (pattern, options) {
    return new orig.Minimatch(pattern, ext(def, options))
  }

  return m
}

Minimatch.defaults = function (def) {
  if (!def || !Object.keys(def).length) return Minimatch
  return minimatch.defaults(def).Minimatch
}

function minimatch (p, pattern, options) {
  if (typeof pattern !== 'string') {
    throw new TypeError('glob pattern string required')
  }

  if (!options) options = {}

  // shortcut: comments match nothing.
  if (!options.nocomment && pattern.charAt(0) === '#') {
    return false
  }

  // "" only matches ""
  if (pattern.trim() === '') return p === ''

  return new Minimatch(pattern, options).match(p)
}

function Minimatch (pattern, options) {
  if (!(this instanceof Minimatch)) {
    return new Minimatch(pattern, options)
  }

  if (typeof pattern !== 'string') {
    throw new TypeError('glob pattern string required')
  }

  if (!options) options = {}
  pattern = pattern.trim()

  // windows support: need to use /, not \
  if (path.sep !== '/') {
    pattern = pattern.split(path.sep).join('/')
  }

  this.options = options
  this.set = []
  this.pattern = pattern
  this.regexp = null
  this.negate = false
  this.comment = false
  this.empty = false

  // make the set of regexps etc.
  this.make()
}

Minimatch.prototype.debug = function () {}

Minimatch.prototype.make = make
function make () {
  // don't do it more than once.
  if (this._made) return

  var pattern = this.pattern
  var options = this.options

  // empty patterns and comments match nothing.
  if (!options.nocomment && pattern.charAt(0) === '#') {
    this.comment = true
    return
  }
  if (!pattern) {
    this.empty = true
    return
  }

  // step 1: figure out negation, etc.
  this.parseNegate()

  // step 2: expand braces
  var set = this.globSet = this.braceExpand()

  if (options.debug) this.debug = console.error

  this.debug(this.pattern, set)

  // step 3: now we have a set, so turn each one into a series of path-portion
  // matching patterns.
  // These will be regexps, except in the case of "**", which is
  // set to the GLOBSTAR object for globstar behavior,
  // and will not contain any / characters
  set = this.globParts = set.map(function (s) {
    return s.split(slashSplit)
  })

  this.debug(this.pattern, set)

  // glob --> regexps
  set = set.map(function (s, si, set) {
    return s.map(this.parse, this)
  }, this)

  this.debug(this.pattern, set)

  // filter out everything that didn't compile properly.
  set = set.filter(function (s) {
    return s.indexOf(false) === -1
  })

  this.debug(this.pattern, set)

  this.set = set
}

Minimatch.prototype.parseNegate = parseNegate
function parseNegate () {
  var pattern = this.pattern
  var negate = false
  var options = this.options
  var negateOffset = 0

  if (options.nonegate) return

  for (var i = 0, l = pattern.length
    ; i < l && pattern.charAt(i) === '!'
    ; i++) {
    negate = !negate
    negateOffset++
  }

  if (negateOffset) this.pattern = pattern.substr(negateOffset)
  this.negate = negate
}

// Brace expansion:
// a{b,c}d -> abd acd
// a{b,}c -> abc ac
// a{0..3}d -> a0d a1d a2d a3d
// a{b,c{d,e}f}g -> abg acdfg acefg
// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
//
// Invalid sets are not expanded.
// a{2..}b -> a{2..}b
// a{b}c -> a{b}c
minimatch.braceExpand = function (pattern, options) {
  return braceExpand(pattern, options)
}

Minimatch.prototype.braceExpand = braceExpand

function braceExpand (pattern, options) {
  if (!options) {
    if (this instanceof Minimatch) {
      options = this.options
    } else {
      options = {}
    }
  }

  pattern = typeof pattern === 'undefined'
    ? this.pattern : pattern

  if (typeof pattern === 'undefined') {
    throw new TypeError('undefined pattern')
  }

  if (options.nobrace ||
    !pattern.match(/\{.*\}/)) {
    // shortcut. no need to expand.
    return [pattern]
  }

  return expand(pattern)
}

// parse a component of the expanded set.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
// pattern, split on '/', and then turned into a regular expression.
// A regexp is made at the end which joins each array with an
// escaped /, and another full one which joins each regexp with |.
//
// Following the lead of Bash 4.1, note that "**" only has special meaning
// when it is the *only* thing in a path portion.  Otherwise, any series
// of * is equivalent to a single *.  Globstar behavior is enabled by
// default, and can be disabled by setting options.noglobstar.
Minimatch.prototype.parse = parse
var SUBPARSE = {}
function parse (pattern, isSub) {
  if (pattern.length > 1024 * 64) {
    throw new TypeError('pattern is too long')
  }

  var options = this.options

  // shortcuts
  if (!options.noglobstar && pattern === '**') return GLOBSTAR
  if (pattern === '') return ''

  var re = ''
  var hasMagic = !!options.nocase
  var escaping = false
  // ? => one single character
  var patternListStack = []
  var negativeLists = []
  var stateChar
  var inClass = false
  var reClassStart = -1
  var classStart = -1
  // . and .. never match anything that doesn't start with .,
  // even when options.dot is set.
  var patternStart = pattern.charAt(0) === '.' ? '' // anything
  // not (start or / followed by . or .. followed by / or end)
  : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
  : '(?!\\.)'
  var self = this

  function clearStateChar () {
    if (stateChar) {
      // we had some state-tracking character
      // that wasn't consumed by this pass.
      switch (stateChar) {
        case '*':
          re += star
          hasMagic = true
        break
        case '?':
          re += qmark
          hasMagic = true
        break
        default:
          re += '\\' + stateChar
        break
      }
      self.debug('clearStateChar %j %j', stateChar, re)
      stateChar = false
    }
  }

  for (var i = 0, len = pattern.length, c
    ; (i < len) && (c = pattern.charAt(i))
    ; i++) {
    this.debug('%s\t%s %s %j', pattern, i, re, c)

    // skip over any that are escaped.
    if (escaping && reSpecials[c]) {
      re += '\\' + c
      escaping = false
      continue
    }

    switch (c) {
      case '/':
        // completely not allowed, even escaped.
        // Should already be path-split by now.
        return false

      case '\\':
        clearStateChar()
        escaping = true
      continue

      // the various stateChar values
      // for the "extglob" stuff.
      case '?':
      case '*':
      case '+':
      case '@':
      case '!':
        this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)

        // all of those are literals inside a class, except that
        // the glob [!a] means [^a] in regexp
        if (inClass) {
          this.debug('  in class')
          if (c === '!' && i === classStart + 1) c = '^'
          re += c
          continue
        }

        // if we already have a stateChar, then it means
        // that there was something like ** or +? in there.
        // Handle the stateChar, then proceed with this one.
        self.debug('call clearStateChar %j', stateChar)
        clearStateChar()
        stateChar = c
        // if extglob is disabled, then +(asdf|foo) isn't a thing.
        // just clear the statechar *now*, rather than even diving into
        // the patternList stuff.
        if (options.noext) clearStateChar()
      continue

      case '(':
        if (inClass) {
          re += '('
          continue
        }

        if (!stateChar) {
          re += '\\('
          continue
        }

        patternListStack.push({
          type: stateChar,
          start: i - 1,
          reStart: re.length,
          open: plTypes[stateChar].open,
          close: plTypes[stateChar].close
        })
        // negation is (?:(?!js)[^/]*)
        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
        this.debug('plType %j %j', stateChar, re)
        stateChar = false
      continue

      case ')':
        if (inClass || !patternListStack.length) {
          re += '\\)'
          continue
        }

        clearStateChar()
        hasMagic = true
        var pl = patternListStack.pop()
        // negation is (?:(?!js)[^/]*)
        // The others are (?:<pattern>)<type>
        re += pl.close
        if (pl.type === '!') {
          negativeLists.push(pl)
        }
        pl.reEnd = re.length
      continue

      case '|':
        if (inClass || !patternListStack.length || escaping) {
          re += '\\|'
          escaping = false
          continue
        }

        clearStateChar()
        re += '|'
      continue

      // these are mostly the same in regexp and glob
      case '[':
        // swallow any state-tracking char before the [
        clearStateChar()

        if (inClass) {
          re += '\\' + c
          continue
        }

        inClass = true
        classStart = i
        reClassStart = re.length
        re += c
      continue

      case ']':
        //  a right bracket shall lose its special
        //  meaning and represent itself in
        //  a bracket expression if it occurs
        //  first in the list.  -- POSIX.2 2.8.3.2
        if (i === classStart + 1 || !inClass) {
          re += '\\' + c
          escaping = false
          continue
        }

        // handle the case where we left a class open.
        // "[z-a]" is valid, equivalent to "\[z-a\]"
        if (inClass) {
          // split where the last [ was, make sure we don't have
          // an invalid re. if so, re-walk the contents of the
          // would-be class to re-translate any characters that
          // were passed through as-is
          // TODO: It would probably be faster to determine this
          // without a try/catch and a new RegExp, but it's tricky
          // to do safely.  For now, this is safe and works.
          var cs = pattern.substring(classStart + 1, i)
          try {
            RegExp('[' + cs + ']')
          } catch (er) {
            // not a valid class!
            var sp = this.parse(cs, SUBPARSE)
            re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
            hasMagic = hasMagic || sp[1]
            inClass = false
            continue
          }
        }

        // finish up the class.
        hasMagic = true
        inClass = false
        re += c
      continue

      default:
        // swallow any state char that wasn't consumed
        clearStateChar()

        if (escaping) {
          // no need
          escaping = false
        } else if (reSpecials[c]
          && !(c === '^' && inClass)) {
          re += '\\'
        }

        re += c

    } // switch
  } // for

  // handle the case where we left a class open.
  // "[abc" is valid, equivalent to "\[abc"
  if (inClass) {
    // split where the last [ was, and escape it
    // this is a huge pita.  We now have to re-walk
    // the contents of the would-be class to re-translate
    // any characters that were passed through as-is
    cs = pattern.substr(classStart + 1)
    sp = this.parse(cs, SUBPARSE)
    re = re.substr(0, reClassStart) + '\\[' + sp[0]
    hasMagic = hasMagic || sp[1]
  }

  // handle the case where we had a +( thing at the *end*
  // of the pattern.
  // each pattern list stack adds 3 chars, and we need to go through
  // and escape any | chars that were passed through as-is for the regexp.
  // Go through and escape them, taking care not to double-escape any
  // | chars that were already escaped.
  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
    var tail = re.slice(pl.reStart + pl.open.length)
    this.debug('setting tail', re, pl)
    // maybe some even number of \, then maybe 1 \, followed by a |
    tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
      if (!$2) {
        // the | isn't already escaped, so escape it.
        $2 = '\\'
      }

      // need to escape all those slashes *again*, without escaping the
      // one that we need for escaping the | character.  As it works out,
      // escaping an even number of slashes can be done by simply repeating
      // it exactly after itself.  That's why this trick works.
      //
      // I am sorry that you have to see this.
      return $1 + $1 + $2 + '|'
    })

    this.debug('tail=%j\n   %s', tail, tail, pl, re)
    var t = pl.type === '*' ? star
      : pl.type === '?' ? qmark
      : '\\' + pl.type

    hasMagic = true
    re = re.slice(0, pl.reStart) + t + '\\(' + tail
  }

  // handle trailing things that only matter at the very end.
  clearStateChar()
  if (escaping) {
    // trailing \\
    re += '\\\\'
  }

  // only need to apply the nodot start if the re starts with
  // something that could conceivably capture a dot
  var addPatternStart = false
  switch (re.charAt(0)) {
    case '.':
    case '[':
    case '(': addPatternStart = true
  }

  // Hack to work around lack of negative lookbehind in JS
  // A pattern like: *.!(x).!(y|z) needs to ensure that a name
  // like 'a.xyz.yz' doesn't match.  So, the first negative
  // lookahead, has to look ALL the way ahead, to the end of
  // the pattern.
  for (var n = negativeLists.length - 1; n > -1; n--) {
    var nl = negativeLists[n]

    var nlBefore = re.slice(0, nl.reStart)
    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
    var nlAfter = re.slice(nl.reEnd)

    nlLast += nlAfter

    // Handle nested stuff like *(*.js|!(*.json)), where open parens
    // mean that we should *not* include the ) in the bit that is considered
    // "after" the negated section.
    var openParensBefore = nlBefore.split('(').length - 1
    var cleanAfter = nlAfter
    for (i = 0; i < openParensBefore; i++) {
      cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
    }
    nlAfter = cleanAfter

    var dollar = ''
    if (nlAfter === '' && isSub !== SUBPARSE) {
      dollar = '$'
    }
    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
    re = newRe
  }

  // if the re is not "" at this point, then we need to make sure
  // it doesn't match against an empty path part.
  // Otherwise a/* will match a/, which it should not.
  if (re !== '' && hasMagic) {
    re = '(?=.)' + re
  }

  if (addPatternStart) {
    re = patternStart + re
  }

  // parsing just a piece of a larger pattern.
  if (isSub === SUBPARSE) {
    return [re, hasMagic]
  }

  // skip the regexp for non-magical patterns
  // unescape anything in it, though, so that it'll be
  // an exact match against a file etc.
  if (!hasMagic) {
    return globUnescape(pattern)
  }

  var flags = options.nocase ? 'i' : ''
  try {
    var regExp = new RegExp('^' + re + '$', flags)
  } catch (er) {
    // If it was an invalid regular expression, then it can't match
    // anything.  This trick looks for a character after the end of
    // the string, which is of course impossible, except in multi-line
    // mode, but it's not a /m regex.
    return new RegExp('$.')
  }

  regExp._glob = pattern
  regExp._src = re

  return regExp
}

minimatch.makeRe = function (pattern, options) {
  return new Minimatch(pattern, options || {}).makeRe()
}

Minimatch.prototype.makeRe = makeRe
function makeRe () {
  if (this.regexp || this.regexp === false) return this.regexp

  // at this point, this.set is a 2d array of partial
  // pattern strings, or "**".
  //
  // It's better to use .match().  This function shouldn't
  // be used, really, but it's pretty convenient sometimes,
  // when you just want to work with a regex.
  var set = this.set

  if (!set.length) {
    this.regexp = false
    return this.regexp
  }
  var options = this.options

  var twoStar = options.noglobstar ? star
    : options.dot ? twoStarDot
    : twoStarNoDot
  var flags = options.nocase ? 'i' : ''

  var re = set.map(function (pattern) {
    return pattern.map(function (p) {
      return (p === GLOBSTAR) ? twoStar
      : (typeof p === 'string') ? regExpEscape(p)
      : p._src
    }).join('\\\/')
  }).join('|')

  // must match entire pattern
  // ending in a * or ** will make it less strict.
  re = '^(?:' + re + ')$'

  // can match anything, as long as it's not this.
  if (this.negate) re = '^(?!' + re + ').*$'

  try {
    this.regexp = new RegExp(re, flags)
  } catch (ex) {
    this.regexp = false
  }
  return this.regexp
}

minimatch.match = function (list, pattern, options) {
  options = options || {}
  var mm = new Minimatch(pattern, options)
  list = list.filter(function (f) {
    return mm.match(f)
  })
  if (mm.options.nonull && !list.length) {
    list.push(pattern)
  }
  return list
}

Minimatch.prototype.match = match
function match (f, partial) {
  this.debug('match', f, this.pattern)
  // short-circuit in the case of busted things.
  // comments, etc.
  if (this.comment) return false
  if (this.empty) return f === ''

  if (f === '/' && partial) return true

  var options = this.options

  // windows: need to use /, not \
  if (path.sep !== '/') {
    f = f.split(path.sep).join('/')
  }

  // treat the test path as a set of pathparts.
  f = f.split(slashSplit)
  this.debug(this.pattern, 'split', f)

  // just ONE of the pattern sets in this.set needs to match
  // in order for it to be valid.  If negating, then just one
  // match means that we have failed.
  // Either way, return on the first hit.

  var set = this.set
  this.debug(this.pattern, 'set', set)

  // Find the basename of the path by looking for the last non-empty segment
  var filename
  var i
  for (i = f.length - 1; i >= 0; i--) {
    filename = f[i]
    if (filename) break
  }

  for (i = 0; i < set.length; i++) {
    var pattern = set[i]
    var file = f
    if (options.matchBase && pattern.length === 1) {
      file = [filename]
    }
    var hit = this.matchOne(file, pattern, partial)
    if (hit) {
      if (options.flipNegate) return true
      return !this.negate
    }
  }

  // didn't get any hits.  this is success if it's a negative
  // pattern, failure otherwise.
  if (options.flipNegate) return false
  return this.negate
}

// set partial to true to test if, for example,
// "/a/b" matches the start of "/*/b/*/d"
// Partial means, if you run out of file before you run
// out of pattern, then that's fine, as long as all
// the parts match.
Minimatch.prototype.matchOne = function (file, pattern, partial) {
  var options = this.options

  this.debug('matchOne',
    { 'this': this, file: file, pattern: pattern })

  this.debug('matchOne', file.length, pattern.length)

  for (var fi = 0,
      pi = 0,
      fl = file.length,
      pl = pattern.length
      ; (fi < fl) && (pi < pl)
      ; fi++, pi++) {
    this.debug('matchOne loop')
    var p = pattern[pi]
    var f = file[fi]

    this.debug(pattern, p, f)

    // should be impossible.
    // some invalid regexp stuff in the set.
    if (p === false) return false

    if (p === GLOBSTAR) {
      this.debug('GLOBSTAR', [pattern, p, f])

      // "**"
      // a/**/b/**/c would match the following:
      // a/b/x/y/z/c
      // a/x/y/z/b/c
      // a/b/x/b/x/c
      // a/b/c
      // To do this, take the rest of the pattern after
      // the **, and see if it would match the file remainder.
      // If so, return success.
      // If not, the ** "swallows" a segment, and try again.
      // This is recursively awful.
      //
      // a/**/b/**/c matching a/b/x/y/z/c
      // - a matches a
      // - doublestar
      //   - matchOne(b/x/y/z/c, b/**/c)
      //     - b matches b
      //     - doublestar
      //       - matchOne(x/y/z/c, c) -> no
      //       - matchOne(y/z/c, c) -> no
      //       - matchOne(z/c, c) -> no
      //       - matchOne(c, c) yes, hit
      var fr = fi
      var pr = pi + 1
      if (pr === pl) {
        this.debug('** at the end')
        // a ** at the end will just swallow the rest.
        // We have found a match.
        // however, it will not swallow /.x, unless
        // options.dot is set.
        // . and .. are *never* matched by **, for explosively
        // exponential reasons.
        for (; fi < fl; fi++) {
          if (file[fi] === '.' || file[fi] === '..' ||
            (!options.dot && file[fi].charAt(0) === '.')) return false
        }
        return true
      }

      // ok, let's see if we can swallow whatever we can.
      while (fr < fl) {
        var swallowee = file[fr]

        this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)

        // XXX remove this slice.  Just pass the start index.
        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
          this.debug('globstar found match!', fr, fl, swallowee)
          // found a match.
          return true
        } else {
          // can't swallow "." or ".." ever.
          // can only swallow ".foo" when explicitly asked.
          if (swallowee === '.' || swallowee === '..' ||
            (!options.dot && swallowee.charAt(0) === '.')) {
            this.debug('dot detected!', file, fr, pattern, pr)
            break
          }

          // ** swallows a segment, and continue.
          this.debug('globstar swallow a segment, and continue')
          fr++
        }
      }

      // no match was found.
      // However, in partial mode, we can't say this is necessarily over.
      // If there's more *pattern* left, then
      if (partial) {
        // ran out of file
        this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
        if (fr === fl) return true
      }
      return false
    }

    // something other than **
    // non-magic patterns just have to match exactly
    // patterns with magic have been turned into regexps.
    var hit
    if (typeof p === 'string') {
      if (options.nocase) {
        hit = f.toLowerCase() === p.toLowerCase()
      } else {
        hit = f === p
      }
      this.debug('string match', p, f, hit)
    } else {
      hit = f.match(p)
      this.debug('pattern match', p, f, hit)
    }

    if (!hit) return false
  }

  // Note: ending in / means that we'll get a final ""
  // at the end of the pattern.  This can only match a
  // corresponding "" at the end of the file.
  // If the file ends in /, then it can only match a
  // a pattern that ends in /, unless the pattern just
  // doesn't have any more for it. But, a/b/ should *not*
  // match "a/b/*", even though "" matches against the
  // [^/]*? pattern, except in partial mode, where it might
  // simply not be reached yet.
  // However, a/b/ should still satisfy a/*

  // now either we fell off the end of the pattern, or we're done.
  if (fi === fl && pi === pl) {
    // ran out of pattern and filename at the same time.
    // an exact hit!
    return true
  } else if (fi === fl) {
    // ran out of file, but still had pattern left.
    // this is ok if we're doing the match as part of
    // a glob fs traversal.
    return partial
  } else if (pi === pl) {
    // ran out of pattern, still have file left.
    // this is only acceptable if we're on the very last
    // empty segment of a file with a trailing slash.
    // a/* should match a/b/
    var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
    return emptyFileEnd
  }

  // should be unreachable.
  throw new Error('wtf?')
}

// replace stuff like \* with *
function globUnescape (s) {
  return s.replace(/\\(.)/g, '$1')
}

function regExpEscape (s) {
  return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
}


/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function posix(path) {
	return path.charAt(0) === '/';
}

function win32(path) {
	// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
	var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
	var result = splitDeviceRe.exec(path);
	var device = result[1] || '';
	var isUnc = Boolean(device && device.charAt(1) !== ':');

	// UNC paths are always absolute
	return Boolean(result[2] || isUnc);
}

module.exports = process.platform === 'win32' ? win32 : posix;
module.exports.posix = posix;
module.exports.win32 = win32;


/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	write: write
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var crypto = __webpack_require__(7);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);

var pkcs1 = __webpack_require__(241);
var pkcs8 = __webpack_require__(133);
var sshpriv = __webpack_require__(169);
var rfc4253 = __webpack_require__(82);

var errors = __webpack_require__(56);

/*
 * For reading we support both PKCS#1 and PKCS#8. If we find a private key,
 * we just take the public component of it and use that.
 */
function read(buf, options, forceType) {
	var input = buf;
	if (typeof (buf) !== 'string') {
		assert.buffer(buf, 'buf');
		buf = buf.toString('ascii');
	}

	var lines = buf.trim().split('\n');

	var m = lines[0].match(/*JSSTYLED*/
	    /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
	assert.ok(m, 'invalid PEM header');

	var m2 = lines[lines.length - 1].match(/*JSSTYLED*/
	    /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
	assert.ok(m2, 'invalid PEM footer');

	/* Begin and end banners must match key type */
	assert.equal(m[2], m2[2]);
	var type = m[2].toLowerCase();

	var alg;
	if (m[1]) {
		/* They also must match algorithms, if given */
		assert.equal(m[1], m2[1], 'PEM header and footer mismatch');
		alg = m[1].trim();
	}

	var headers = {};
	while (true) {
		lines = lines.slice(1);
		m = lines[0].match(/*JSSTYLED*/
		    /^([A-Za-z0-9-]+): (.+)$/);
		if (!m)
			break;
		headers[m[1].toLowerCase()] = m[2];
	}

	var cipher, key, iv;
	if (headers['proc-type']) {
		var parts = headers['proc-type'].split(',');
		if (parts[0] === '4' && parts[1] === 'ENCRYPTED') {
			if (typeof (options.passphrase) === 'string') {
				options.passphrase = Buffer.from(
				    options.passphrase, 'utf-8');
			}
			if (!Buffer.isBuffer(options.passphrase)) {
				throw (new errors.KeyEncryptedError(
				    options.filename, 'PEM'));
			} else {
				parts = headers['dek-info'].split(',');
				assert.ok(parts.length === 2);
				cipher = parts[0].toLowerCase();
				iv = Buffer.from(parts[1], 'hex');
				key = utils.opensslKeyDeriv(cipher, iv,
				    options.passphrase, 1).key;
			}
		}
	}

	/* Chop off the first and last lines */
	lines = lines.slice(0, -1).join('');
	buf = Buffer.from(lines, 'base64');

	if (cipher && key && iv) {
		var cipherStream = crypto.createDecipheriv(cipher, key, iv);
		var chunk, chunks = [];
		cipherStream.once('error', function (e) {
			if (e.toString().indexOf('bad decrypt') !== -1) {
				throw (new Error('Incorrect passphrase ' +
				    'supplied, could not decrypt key'));
			}
			throw (e);
		});
		cipherStream.write(buf);
		cipherStream.end();
		while ((chunk = cipherStream.read()) !== null)
			chunks.push(chunk);
		buf = Buffer.concat(chunks);
	}

	/* The new OpenSSH internal format abuses PEM headers */
	if (alg && alg.toLowerCase() === 'openssh')
		return (sshpriv.readSSHPrivate(type, buf, options));
	if (alg && alg.toLowerCase() === 'ssh2')
		return (rfc4253.readType(type, buf, options));

	var der = new asn1.BerReader(buf);
	der.originalInput = input;

	/*
	 * All of the PEM file types start with a sequence tag, so chop it
	 * off here
	 */
	der.readSequence();

	/* PKCS#1 type keys name an algorithm in the banner explicitly */
	if (alg) {
		if (forceType)
			assert.strictEqual(forceType, 'pkcs1');
		return (pkcs1.readPkcs1(alg, type, der));
	} else {
		if (forceType)
			assert.strictEqual(forceType, 'pkcs8');
		return (pkcs8.readPkcs8(alg, type, der));
	}
}

function write(key, options, type) {
	assert.object(key);

	var alg = {
	    'ecdsa': 'EC',
	    'rsa': 'RSA',
	    'dsa': 'DSA',
	    'ed25519': 'EdDSA'
	}[key.type];
	var header;

	var der = new asn1.BerWriter();

	if (PrivateKey.isPrivateKey(key)) {
		if (type && type === 'pkcs8') {
			header = 'PRIVATE KEY';
			pkcs8.writePkcs8(der, key);
		} else {
			if (type)
				assert.strictEqual(type, 'pkcs1');
			header = alg + ' PRIVATE KEY';
			pkcs1.writePkcs1(der, key);
		}

	} else if (Key.isKey(key)) {
		if (type && type === 'pkcs1') {
			header = alg + ' PUBLIC KEY';
			pkcs1.writePkcs1(der, key);
		} else {
			if (type)
				assert.strictEqual(type, 'pkcs8');
			header = 'PUBLIC KEY';
			pkcs8.writePkcs8(der, key);
		}

	} else {
		throw (new Error('key is not a Key or PrivateKey'));
	}

	var tmp = der.buffer.toString('base64');
	var len = tmp.length + (tmp.length / 64) +
	    18 + 16 + header.length*2 + 10;
	var buf = Buffer.alloc(len);
	var o = 0;
	o += buf.write('-----BEGIN ' + header + '-----\n', o);
	for (var i = 0; i < tmp.length; ) {
		var limit = i + 64;
		if (limit > tmp.length)
			limit = tmp.length;
		o += buf.write(tmp.slice(i, limit), o);
		buf[o++] = 10;
		i = limit;
	}
	o += buf.write('-----END ' + header + '-----\n', o);

	return (buf.slice(0, o));
}


/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var hasFlag = __webpack_require__(222);

var support = function (level) {
	if (level === 0) {
		return false;
	}

	return {
		level: level,
		hasBasic: true,
		has256: level >= 2,
		has16m: level >= 3
	};
};

var supportLevel = (function () {
	if (hasFlag('no-color') ||
		hasFlag('no-colors') ||
		hasFlag('color=false')) {
		return 0;
	}

	if (hasFlag('color=16m') ||
		hasFlag('color=full') ||
		hasFlag('color=truecolor')) {
		return 3;
	}

	if (hasFlag('color=256')) {
		return 2;
	}

	if (hasFlag('color') ||
		hasFlag('colors') ||
		hasFlag('color=true') ||
		hasFlag('color=always')) {
		return 1;
	}

	if (process.stdout && !process.stdout.isTTY) {
		return 0;
	}

	if (process.platform === 'win32') {
		return 1;
	}

	if ('COLORTERM' in process.env) {
		return 1;
	}

	if (process.env.TERM === 'dumb') {
		return 0;
	}

	if (/^xterm-256(?:color)?/.test(process.env.TERM)) {
		return 2;
	}

	if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
		return 1;
	}

	return 0;
})();

if (supportLevel === 0 && 'FORCE_COLOR' in process.env) {
	supportLevel = 1;
}

module.exports = process && support(supportLevel);


/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */




var utils = __webpack_require__(17);
var config = __webpack_require__(170);
var Iban = __webpack_require__(172);

/**
 * Should the format output to a big number
 *
 * @method outputBigNumberFormatter
 * @param {String|Number|BigNumber}
 * @returns {BigNumber} object
 */
var outputBigNumberFormatter = function (number) {
    return utils.toBigNumber(number);
};

var isPredefinedBlockNumber = function (blockNumber) {
    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
};

var inputDefaultBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return config.defaultBlock;
    }
    return inputBlockNumberFormatter(blockNumber);
};

var inputBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return undefined;
    } else if (isPredefinedBlockNumber(blockNumber)) {
        return blockNumber;
    }
    return utils.toHex(blockNumber);
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputCallFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputCallFormatter = function (options){

    options.from = options.from || config.defaultAccount;

    if (options.from) {
        options.from = inputAddressFormatter(options.from);
    }

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputTransactionFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputTransactionFormatter = function (options){

    options.from = options.from || config.defaultAccount;
    options.from = inputAddressFormatter(options.from);

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.fromDecimal(options[key]);
    });

    return options;
};

/**
 * Formats the output of a transaction to its proper values
 *
 * @method outputTransactionFormatter
 * @param {Object} tx
 * @returns {Object}
*/
var outputTransactionFormatter = function (tx){
    if(tx.blockNumber !== null)
        tx.blockNumber = utils.toDecimal(tx.blockNumber);
    if(tx.transactionIndex !== null)
        tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
    tx.nonce = utils.toDecimal(tx.nonce);
    tx.gas = utils.toDecimal(tx.gas);
    tx.gasPrice = utils.toBigNumber(tx.gasPrice);
    tx.value = utils.toBigNumber(tx.value);
    return tx;
};

/**
 * Formats the output of a transaction receipt to its proper values
 *
 * @method outputTransactionReceiptFormatter
 * @param {Object} receipt
 * @returns {Object}
*/
var outputTransactionReceiptFormatter = function (receipt){
    if(receipt.blockNumber !== null)
        receipt.blockNumber = utils.toDecimal(receipt.blockNumber);
    if(receipt.transactionIndex !== null)
        receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex);
    receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed);
    receipt.gasUsed = utils.toDecimal(receipt.gasUsed);

    if(utils.isArray(receipt.logs)) {
        receipt.logs = receipt.logs.map(function(log){
            return outputLogFormatter(log);
        });
    }

    return receipt;
};

/**
 * Formats the output of a block to its proper values
 *
 * @method outputBlockFormatter
 * @param {Object} block
 * @returns {Object}
*/
var outputBlockFormatter = function(block) {

    // transform to number
    block.gasLimit = utils.toDecimal(block.gasLimit);
    block.gasUsed = utils.toDecimal(block.gasUsed);
    block.size = utils.toDecimal(block.size);
    block.timestamp = utils.toDecimal(block.timestamp);
    if(block.number !== null)
        block.number = utils.toDecimal(block.number);

    block.difficulty = utils.toBigNumber(block.difficulty);
    block.totalDifficulty = utils.toBigNumber(block.totalDifficulty);

    if (utils.isArray(block.transactions)) {
        block.transactions.forEach(function(item){
            if(!utils.isString(item))
                return outputTransactionFormatter(item);
        });
    }

    return block;
};

/**
 * Formats the output of a log
 *
 * @method outputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var outputLogFormatter = function(log) {
    if(log.blockNumber)
        log.blockNumber = utils.toDecimal(log.blockNumber);
    if(log.transactionIndex)
        log.transactionIndex = utils.toDecimal(log.transactionIndex);
    if(log.logIndex)
        log.logIndex = utils.toDecimal(log.logIndex);

    return log;
};

/**
 * Formats the input of a whisper post and converts all values to HEX
 *
 * @method inputPostFormatter
 * @param {Object} transaction object
 * @returns {Object}
*/
var inputPostFormatter = function(post) {

    // post.payload = utils.toHex(post.payload);
    post.ttl = utils.fromDecimal(post.ttl);
    post.workToProve = utils.fromDecimal(post.workToProve);
    post.priority = utils.fromDecimal(post.priority);

    // fallback
    if (!utils.isArray(post.topics)) {
        post.topics = post.topics ? [post.topics] : [];
    }

    // format the following options
    post.topics = post.topics.map(function(topic){
        // convert only if not hex
        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
    });

    return post;
};

/**
 * Formats the output of a received post message
 *
 * @method outputPostFormatter
 * @param {Object}
 * @returns {Object}
 */
var outputPostFormatter = function(post){

    post.expiry = utils.toDecimal(post.expiry);
    post.sent = utils.toDecimal(post.sent);
    post.ttl = utils.toDecimal(post.ttl);
    post.workProved = utils.toDecimal(post.workProved);
    // post.payloadRaw = post.payload;
    // post.payload = utils.toAscii(post.payload);

    // if (utils.isJson(post.payload)) {
    //     post.payload = JSON.parse(post.payload);
    // }

    // format the following options
    if (!post.topics) {
        post.topics = [];
    }
    post.topics = post.topics.map(function(topic){
        return utils.toAscii(topic);
    });

    return post;
};

var inputAddressFormatter = function (address) {
    var iban = new Iban(address);
    if (iban.isValid() && iban.isDirect()) {
        return '0x' + iban.address();
    } else if (utils.isStrictAddress(address)) {
        return address;
    } else if (utils.isAddress(address)) {
        return '0x' + address;
    }
    throw new Error('invalid address');
};


var outputSyncingFormatter = function(result) {
    if (!result) {
        return result;
    }

    result.startingBlock = utils.toDecimal(result.startingBlock);
    result.currentBlock = utils.toDecimal(result.currentBlock);
    result.highestBlock = utils.toDecimal(result.highestBlock);
    if (result.knownStates) {
        result.knownStates = utils.toDecimal(result.knownStates);
        result.pulledStates = utils.toDecimal(result.pulledStates);
    }

    return result;
};

module.exports = {
    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
    inputBlockNumberFormatter: inputBlockNumberFormatter,
    inputCallFormatter: inputCallFormatter,
    inputTransactionFormatter: inputTransactionFormatter,
    inputAddressFormatter: inputAddressFormatter,
    inputPostFormatter: inputPostFormatter,
    outputBigNumberFormatter: outputBigNumberFormatter,
    outputTransactionFormatter: outputTransactionFormatter,
    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
    outputBlockFormatter: outputBlockFormatter,
    outputLogFormatter: outputLogFormatter,
    outputPostFormatter: outputPostFormatter,
    outputSyncingFormatter: outputSyncingFormatter
};



/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {

var Schema = __webpack_require__(444);
var Contract = __webpack_require__(1150);

var contract = function(options) {
  var binary = Schema.normalize(options || {});

  // Note we don't use `new` here at all. This will cause the class to
  // "mutate" instead of instantiate an instance.
  return Contract.clone(binary);
};

module.exports = contract;

if (typeof window !== "undefined") {
  window.TruffleContract = contract;
}


/***/ }),
/* 70 */
/***/ (function(module, exports) {

module.exports = require("buffer");

/***/ }),
/* 71 */
/***/ (function(module, exports) {

module.exports = require("tls");

/***/ }),
/* 72 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * chai
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var used = [];

/*!
 * Chai version
 */

exports.version = '4.1.2';

/*!
 * Assertion Error
 */

exports.AssertionError = __webpack_require__(273);

/*!
 * Utils for plugins (not exported)
 */

var util = __webpack_require__(617);

/**
 * # .use(function)
 *
 * Provides a way to extend the internals of Chai.
 *
 * @param {Function}
 * @returns {this} for chaining
 * @api public
 */

exports.use = function (fn) {
  if (!~used.indexOf(fn)) {
    fn(exports, util);
    used.push(fn);
  }

  return exports;
};

/*!
 * Utility Functions
 */

exports.util = util;

/*!
 * Configuration
 */

var config = __webpack_require__(73);
exports.config = config;

/*!
 * Primary `Assertion` prototype
 */

var assertion = __webpack_require__(604);
exports.use(assertion);

/*!
 * Core Assertions
 */

var core = __webpack_require__(605);
exports.use(core);

/*!
 * Expect interface
 */

var expect = __webpack_require__(607);
exports.use(expect);

/*!
 * Should interface
 */

var should = __webpack_require__(608);
exports.use(should);

/*!
 * Assert interface
 */

var assert = __webpack_require__(606);
exports.use(assert);


/***/ }),
/* 73 */
/***/ (function(module, exports) {

module.exports = {

  /**
   * ### config.includeStack
   *
   * User configurable property, influences whether stack trace
   * is included in Assertion error message. Default of false
   * suppresses stack trace in the error message.
   *
   *     chai.config.includeStack = true;  // enable stack on error
   *
   * @param {Boolean}
   * @api public
   */

  includeStack: false,

  /**
   * ### config.showDiff
   *
   * User configurable property, influences whether or not
   * the `showDiff` flag should be included in the thrown
   * AssertionErrors. `false` will always be `false`; `true`
   * will be true when the assertion has requested a diff
   * be shown.
   *
   * @param {Boolean}
   * @api public
   */

  showDiff: true,

  /**
   * ### config.truncateThreshold
   *
   * User configurable property, sets length threshold for actual and
   * expected values in assertion errors. If this threshold is exceeded, for
   * example for large data structures, the value is replaced with something
   * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.
   *
   * Set it to zero if you want to disable truncating altogether.
   *
   * This is especially userful when doing assertions on arrays: having this
   * set to a reasonable large value makes the failure messages readily
   * inspectable.
   *
   *     chai.config.truncateThreshold = 0;  // disable truncating
   *
   * @param {Number}
   * @api public
   */

  truncateThreshold: 40,

  /**
   * ### config.useProxy
   *
   * User configurable property, defines if chai will use a Proxy to throw
   * an error when a non-existent property is read, which protects users
   * from typos when using property-based assertions.
   *
   * Set it to false if you want to disable this feature.
   *
   *     chai.config.useProxy = false;  // disable use of Proxy
   *
   * This feature is automatically disabled regardless of this config value
   * in environments that don't support proxies.
   *
   * @param {Boolean}
   * @api public
   */

  useProxy: true,

  /**
   * ### config.proxyExcludedKeys
   *
   * User configurable property, defines which properties should be ignored
   * instead of throwing an error if they do not exist on the assertion.
   * This is only applied if the environment Chai is running in supports proxies and
   * if the `useProxy` configuration setting is enabled.
   * By default, `then` and `inspect` will not throw an error if they do not exist on the
   * assertion object because the `.inspect` property is read by `util.inspect` (for example, when
   * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.
   *
   *     // By default these keys will not throw an error if they do not exist on the assertion object
   *     chai.config.proxyExcludedKeys = ['then', 'inspect'];
   *
   * @param {Array}
   * @api public
   */

  proxyExcludedKeys: ['then', 'inspect', 'toJSON']
};


/***/ }),
/* 74 */
/***/ (function(module, exports) {

/*!
 * Chai - transferFlags utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .transferFlags(assertion, object, includeAll = true)
 *
 * Transfer all the flags for `assertion` to `object`. If
 * `includeAll` is set to `false`, then the base Chai
 * assertion flags (namely `object`, `ssfi`, `lockSsfi`,
 * and `message`) will not be transferred.
 *
 *
 *     var newAssertion = new Assertion();
 *     utils.transferFlags(assertion, newAssertion);
 *
 *     var anotherAsseriton = new Assertion(myObj);
 *     utils.transferFlags(assertion, anotherAssertion, false);
 *
 * @param {Assertion} assertion the assertion to transfer the flags from
 * @param {Object} object the object to transfer the flags to; usually a new assertion
 * @param {Boolean} includeAll
 * @namespace Utils
 * @name transferFlags
 * @api private
 */

module.exports = function transferFlags(assertion, object, includeAll) {
  var flags = assertion.__flags || (assertion.__flags = Object.create(null));

  if (!object.__flags) {
    object.__flags = Object.create(null);
  }

  includeAll = arguments.length === 3 ? includeAll : true;

  for (var flag in flags) {
    if (includeAll ||
        (flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message')) {
      object.__flags[flag] = flags[flag];
    }
  }
};


/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(48);
module.exports = function (it) {
  if (!isObject(it)) throw TypeError(it + ' is not an object!');
  return it;
};


/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(89)(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 77 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(62);
var createDesc = __webpack_require__(203);
module.exports = __webpack_require__(76) ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file method.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(15);
var errors = __webpack_require__(122);

var Method = function (options) {
    this.name = options.name;
    this.call = options.call;
    this.params = options.params || 0;
    this.inputFormatter = options.inputFormatter;
    this.outputFormatter = options.outputFormatter;
    this.requestManager = null;
};

Method.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be used to determine name of the jsonrpc method based on arguments
 *
 * @method getCall
 * @param {Array} arguments
 * @return {String} name of jsonrpc method
 */
Method.prototype.getCall = function (args) {
    return utils.isFunction(this.call) ? this.call(args) : this.call;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Method.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 * 
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */
Method.prototype.validateArgs = function (args) {
    if (args.length !== this.params) {
        throw errors.InvalidNumberOfParams();
    }
};

/**
 * Should be called to format input args of method
 * 
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Method.prototype.formatInput = function (args) {
    if (!this.inputFormatter) {
        return args;
    }

    return this.inputFormatter.map(function (formatter, index) {
        return formatter ? formatter(args[index]) : args[index];
    });
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Method.prototype.formatOutput = function (result) {
    return this.outputFormatter && result ? this.outputFormatter(result) : result;
};

/**
 * Should create payload from given input args
 *
 * @method toPayload
 * @param {Array} args
 * @return {Object}
 */
Method.prototype.toPayload = function (args) {
    var call = this.getCall(args);
    var callback = this.extractCallback(args);
    var params = this.formatInput(args);
    this.validateArgs(params);

    return {
        method: call,
        params: params,
        callback: callback
    };
};

Method.prototype.attachToObject = function (obj) {
    var func = this.buildCall();
    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
    var name = this.name.split('.');
    if (name.length > 1) {
        obj[name[0]] = obj[name[0]] || {};
        obj[name[0]][name[1]] = func;
    } else {
        obj[name[0]] = func; 
    }
};

Method.prototype.buildCall = function() {
    var method = this;
    var send = function () {
        var payload = method.toPayload(Array.prototype.slice.call(arguments));
        if (payload.callback) {
            return method.requestManager.sendAsync(payload, function (err, result) {
                payload.callback(err, method.formatOutput(result));
            });
        }
        return method.formatOutput(method.requestManager.send(payload));
    };
    send.request = this.request.bind(this);
    return send;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Method.prototype.request = function () {
    var payload = this.toPayload(Array.prototype.slice.call(arguments));
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Method;



/***/ }),
/* 79 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function EventPubSub() {
    this._events_={};
    this.publish=this.trigger=this.emit=emit;
    this.subscribe=this.on=on;
    this.once=once;
    this.unSubscribe=this.off=off;
    this.emit$=emit$;

    function on(type,handler,once){
        if(!handler){
            throw new ReferenceError('handler not defined.');
        }

        if(!this._events_[type]){
            this._events_[type]=[];
        }

        if(once){
            handler._once_ = once;
        }
        this._events_[type].push(handler);
        return this;
    }

    function once(type,handler){
        return this.on(type, handler, true);
    }

    function off(type,handler){
        if(!this._events_[type]){
            return this;
        }

        if(!handler){
            throw new ReferenceError('handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler');
        }

        if(handler=='*'){
            delete this._events_[type];
            return this;
        }

        var handlers=this._events_[type];

        while(handlers.includes(handler)){
            handlers.splice(
                handlers.indexOf(handler),
                1
            );
        }

        if(handlers.length<1){
            delete this._events_[type];
        }

        return this;
    }

    function emit(type){
        this.emit$.apply(this, arguments);
        if(!this._events_[type]){
            return this;
        }
        arguments.splice=Array.prototype.splice;
        arguments.splice(0,1);

        var handlers=this._events_[type];
        var onceHandled=[];

        for(var i in handlers){
            var handler=handlers[i];
            handler.apply(this, arguments);
            if(handler._once_){
              onceHandled.push(handler);
            }
        }

        for(var i in onceHandled){
            this.off(
              type,
              onceHandled[i]
            );
        }

        return this;
    }

    function emit$(type, args){
        if(!this._events_['*']){
            return this;
        }

        var catchAll=this._events_['*'];

        args.shift=Array.prototype.shift;
        args.shift(type);

        for(var handler of catchAll){
            handler.apply(this, args);
        }

        return this;
    }

    return this;
}

if (!Array.prototype.includes) {
  Array.prototype.includes = function(searchElement /*, fromIndex*/) {
    'use strict';
    if (this == null) {
      throw new TypeError('Array.prototype.includes called on null or undefined');
    }

    var O = Object(this);
    var len = parseInt(O.length, 10) || 0;
    if (len === 0) {
      return false;
    }
    var n = parseInt(arguments[1], 10) || 0;
    var k;
    if (n >= 0) {
      k = n;
    } else {
      k = len + n;
      if (k < 0) {k = 0;}
    }
    var currentElement;
    while (k < len) {
      currentElement = O[k];
      if (searchElement === currentElement ||
         (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
        return true;
      }
      k++;
    }
    return false;
  };
}

module.exports=EventPubSub;


/***/ }),
/* 80 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = Object.assign(
  {},
  // Export promiseified graceful-fs:
  __webpack_require__(346),
  // Export extra methods:
  __webpack_require__(344),
  __webpack_require__(345),
  __webpack_require__(815),
  __webpack_require__(817),
  __webpack_require__(822),
  __webpack_require__(35),
  __webpack_require__(827),
  __webpack_require__(828),
  __webpack_require__(829),
  __webpack_require__(53),
  __webpack_require__(161)
)

// Export fs.promises as a getter property so that we don't trigger
// ExperimentalWarning before fs.promises is actually accessed.
const fs = __webpack_require__(1)
if (Object.getOwnPropertyDescriptor(fs, 'promises')) {
  Object.defineProperty(module.exports, 'promises', {
    get () { return fs.promises }
  })
}


/***/ }),
/* 81 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return detach; });
/* harmony export (immutable) */ __webpack_exports__["d"] = take;
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return takem; });
/* harmony export (immutable) */ __webpack_exports__["i"] = put;
/* harmony export (immutable) */ __webpack_exports__["j"] = all;
/* harmony export (immutable) */ __webpack_exports__["k"] = race;
/* harmony export (immutable) */ __webpack_exports__["f"] = call;
/* harmony export (immutable) */ __webpack_exports__["l"] = apply;
/* harmony export (immutable) */ __webpack_exports__["m"] = cps;
/* harmony export (immutable) */ __webpack_exports__["e"] = fork;
/* harmony export (immutable) */ __webpack_exports__["n"] = spawn;
/* harmony export (immutable) */ __webpack_exports__["o"] = join;
/* harmony export (immutable) */ __webpack_exports__["g"] = cancel;
/* harmony export (immutable) */ __webpack_exports__["p"] = select;
/* harmony export (immutable) */ __webpack_exports__["c"] = actionChannel;
/* harmony export (immutable) */ __webpack_exports__["q"] = cancelled;
/* harmony export (immutable) */ __webpack_exports__["r"] = flush;
/* harmony export (immutable) */ __webpack_exports__["s"] = getContext;
/* harmony export (immutable) */ __webpack_exports__["t"] = setContext;
/* harmony export (immutable) */ __webpack_exports__["u"] = takeEvery;
/* harmony export (immutable) */ __webpack_exports__["v"] = takeLatest;
/* harmony export (immutable) */ __webpack_exports__["w"] = throttle;
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return asEffect; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sagaHelpers__ = __webpack_require__(402);



var IO = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["y" /* sym */])('IO');
var TAKE = 'TAKE';
var PUT = 'PUT';
var ALL = 'ALL';
var RACE = 'RACE';
var CALL = 'CALL';
var CPS = 'CPS';
var FORK = 'FORK';
var JOIN = 'JOIN';
var CANCEL = 'CANCEL';
var SELECT = 'SELECT';
var ACTION_CHANNEL = 'ACTION_CHANNEL';
var CANCELLED = 'CANCELLED';
var FLUSH = 'FLUSH';
var GET_CONTEXT = 'GET_CONTEXT';
var SET_CONTEXT = 'SET_CONTEXT';

var TEST_HINT = '\n(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)';

var effect = function effect(type, payload) {
  var _ref;

  return _ref = {}, _ref[IO] = true, _ref[type] = payload, _ref;
};

var detach = function detach(eff) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(asEffect.fork(eff), __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].object, 'detach(eff): argument must be a fork effect');
  eff[FORK].detached = true;
  return eff;
};

function take() {
  var patternOrChannel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '*';

  if (arguments.length) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(arguments[0], __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'take(patternOrChannel): patternOrChannel is undefined');
  }
  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].pattern(patternOrChannel)) {
    return effect(TAKE, { pattern: patternOrChannel });
  }
  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].channel(patternOrChannel)) {
    return effect(TAKE, { channel: patternOrChannel });
  }
  throw new Error('take(patternOrChannel): argument ' + String(patternOrChannel) + ' is not valid channel or a valid pattern');
}

take.maybe = function () {
  var eff = take.apply(undefined, arguments);
  eff[TAKE].maybe = true;
  return eff;
};

var takem = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["o" /* deprecate */])(take.maybe, /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["p" /* updateIncentive */])('takem', 'take.maybe'));

function put(channel, action) {
  if (arguments.length > 1) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'put(channel, action): argument channel is undefined');
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].channel, 'put(channel, action): argument ' + channel + ' is not a valid channel');
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(action, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'put(channel, action): argument action is undefined');
  } else {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'put(action): argument action is undefined');
    action = channel;
    channel = null;
  }
  return effect(PUT, { channel: channel, action: action });
}

put.resolve = function () {
  var eff = put.apply(undefined, arguments);
  eff[PUT].resolve = true;
  return eff;
};

put.sync = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["o" /* deprecate */])(put.resolve, /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["p" /* updateIncentive */])('put.sync', 'put.resolve'));

function all(effects) {
  return effect(ALL, effects);
}

function race(effects) {
  return effect(RACE, effects);
}

function getFnCallDesc(meth, fn, args) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(fn, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, meth + ': argument fn is undefined');

  var context = null;
  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(fn)) {
    var _fn = fn;
    context = _fn[0];
    fn = _fn[1];
  } else if (fn.fn) {
    var _fn2 = fn;
    context = _fn2.context;
    fn = _fn2.fn;
  }
  if (context && __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].string(fn) && __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(context[fn])) {
    fn = context[fn];
  }
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(fn, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, meth + ': argument ' + fn + ' is not a function');

  return { context: context, fn: fn, args: args };
}

function call(fn) {
  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    args[_key - 1] = arguments[_key];
  }

  return effect(CALL, getFnCallDesc('call', fn, args));
}

function apply(context, fn) {
  var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];

  return effect(CALL, getFnCallDesc('apply', { context: context, fn: fn }, args));
}

function cps(fn) {
  for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
    args[_key2 - 1] = arguments[_key2];
  }

  return effect(CPS, getFnCallDesc('cps', fn, args));
}

function fork(fn) {
  for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
    args[_key3 - 1] = arguments[_key3];
  }

  return effect(FORK, getFnCallDesc('fork', fn, args));
}

function spawn(fn) {
  for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
    args[_key4 - 1] = arguments[_key4];
  }

  return detach(fork.apply(undefined, [fn].concat(args)));
}

function join() {
  for (var _len5 = arguments.length, tasks = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
    tasks[_key5] = arguments[_key5];
  }

  if (tasks.length > 1) {
    return all(tasks.map(function (t) {
      return join(t);
    }));
  }
  var task = tasks[0];
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'join(task): argument task is undefined');
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].task, 'join(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);
  return effect(JOIN, task);
}

function cancel() {
  for (var _len6 = arguments.length, tasks = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
    tasks[_key6] = arguments[_key6];
  }

  if (tasks.length > 1) {
    return all(tasks.map(function (t) {
      return cancel(t);
    }));
  }
  var task = tasks[0];
  if (tasks.length === 1) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'cancel(task): argument task is undefined');
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].task, 'cancel(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);
  }
  return effect(CANCEL, task || __WEBPACK_IMPORTED_MODULE_0__utils__["s" /* SELF_CANCELLATION */]);
}

function select(selector) {
  for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
    args[_key7 - 1] = arguments[_key7];
  }

  if (arguments.length === 0) {
    selector = __WEBPACK_IMPORTED_MODULE_0__utils__["z" /* ident */];
  } else {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(selector, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'select(selector,[...]): argument selector is undefined');
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(selector, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, 'select(selector,[...]): argument ' + selector + ' is not a function');
  }
  return effect(SELECT, { selector: selector, args: args });
}

/**
  channel(pattern, [buffer])    => creates an event channel for store actions
**/
function actionChannel(pattern, buffer) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(pattern, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'actionChannel(pattern,...): argument pattern is undefined');
  if (arguments.length > 1) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].buffer, 'actionChannel(pattern, buffer): argument ' + buffer + ' is not a valid buffer');
  }
  return effect(ACTION_CHANNEL, { pattern: pattern, buffer: buffer });
}

function cancelled() {
  return effect(CANCELLED, {});
}

function flush(channel) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].channel, 'flush(channel): argument ' + channel + ' is not valid channel');
  return effect(FLUSH, channel);
}

function getContext(prop) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(prop, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].string, 'getContext(prop): argument ' + prop + ' is not a string');
  return effect(GET_CONTEXT, prop);
}

function setContext(props) {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].object, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["v" /* createSetContextWarning */])(null, props));
  return effect(SET_CONTEXT, props);
}

function takeEvery(patternOrChannel, worker) {
  for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) {
    args[_key8 - 2] = arguments[_key8];
  }

  return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__["d" /* takeEveryHelper */], patternOrChannel, worker].concat(args));
}

function takeLatest(patternOrChannel, worker) {
  for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) {
    args[_key9 - 2] = arguments[_key9];
  }

  return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__["e" /* takeLatestHelper */], patternOrChannel, worker].concat(args));
}

function throttle(ms, pattern, worker) {
  for (var _len10 = arguments.length, args = Array(_len10 > 3 ? _len10 - 3 : 0), _key10 = 3; _key10 < _len10; _key10++) {
    args[_key10 - 3] = arguments[_key10];
  }

  return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__["f" /* throttleHelper */], ms, pattern, worker].concat(args));
}

var createAsEffectType = function createAsEffectType(type) {
  return function (effect) {
    return effect && effect[IO] && effect[type];
  };
};

var asEffect = {
  take: /*#__PURE__*/createAsEffectType(TAKE),
  put: /*#__PURE__*/createAsEffectType(PUT),
  all: /*#__PURE__*/createAsEffectType(ALL),
  race: /*#__PURE__*/createAsEffectType(RACE),
  call: /*#__PURE__*/createAsEffectType(CALL),
  cps: /*#__PURE__*/createAsEffectType(CPS),
  fork: /*#__PURE__*/createAsEffectType(FORK),
  join: /*#__PURE__*/createAsEffectType(JOIN),
  cancel: /*#__PURE__*/createAsEffectType(CANCEL),
  select: /*#__PURE__*/createAsEffectType(SELECT),
  actionChannel: /*#__PURE__*/createAsEffectType(ACTION_CHANNEL),
  cancelled: /*#__PURE__*/createAsEffectType(CANCELLED),
  flush: /*#__PURE__*/createAsEffectType(FLUSH),
  getContext: /*#__PURE__*/createAsEffectType(GET_CONTEXT),
  setContext: /*#__PURE__*/createAsEffectType(SET_CONTEXT)
};

/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read.bind(undefined, false, undefined),
	readType: read.bind(undefined, false),
	write: write,
	/* semi-private api, used by sshpk-agent */
	readPartial: read.bind(undefined, true),

	/* shared with ssh format */
	readInternal: read,
	keyTypeToAlg: keyTypeToAlg,
	algToKeyType: algToKeyType
};

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var SSHBuffer = __webpack_require__(135);

function algToKeyType(alg) {
	assert.string(alg);
	if (alg === 'ssh-dss')
		return ('dsa');
	else if (alg === 'ssh-rsa')
		return ('rsa');
	else if (alg === 'ssh-ed25519')
		return ('ed25519');
	else if (alg === 'ssh-curve25519')
		return ('curve25519');
	else if (alg.match(/^ecdsa-sha2-/))
		return ('ecdsa');
	else
		throw (new Error('Unknown algorithm ' + alg));
}

function keyTypeToAlg(key) {
	assert.object(key);
	if (key.type === 'dsa')
		return ('ssh-dss');
	else if (key.type === 'rsa')
		return ('ssh-rsa');
	else if (key.type === 'ed25519')
		return ('ssh-ed25519');
	else if (key.type === 'curve25519')
		return ('ssh-curve25519');
	else if (key.type === 'ecdsa')
		return ('ecdsa-sha2-' + key.part.curve.data.toString());
	else
		throw (new Error('Unknown key type ' + key.type));
}

function read(partial, type, buf, options) {
	if (typeof (buf) === 'string')
		buf = Buffer.from(buf);
	assert.buffer(buf, 'buf');

	var key = {};

	var parts = key.parts = [];
	var sshbuf = new SSHBuffer({buffer: buf});

	var alg = sshbuf.readString();
	assert.ok(!sshbuf.atEnd(), 'key must have at least one part');

	key.type = algToKeyType(alg);

	var partCount = algs.info[key.type].parts.length;
	if (type && type === 'private')
		partCount = algs.privInfo[key.type].parts.length;

	while (!sshbuf.atEnd() && parts.length < partCount)
		parts.push(sshbuf.readPart());
	while (!partial && !sshbuf.atEnd())
		parts.push(sshbuf.readPart());

	assert.ok(parts.length >= 1,
	    'key must have at least one part');
	assert.ok(partial || sshbuf.atEnd(),
	    'leftover bytes at end of key');

	var Constructor = Key;
	var algInfo = algs.info[key.type];
	if (type === 'private' || algInfo.parts.length !== parts.length) {
		algInfo = algs.privInfo[key.type];
		Constructor = PrivateKey;
	}
	assert.strictEqual(algInfo.parts.length, parts.length);

	if (key.type === 'ecdsa') {
		var res = /^ecdsa-sha2-(.+)$/.exec(alg);
		assert.ok(res !== null);
		assert.strictEqual(res[1], parts[0].data.toString());
	}

	var normalized = true;
	for (var i = 0; i < algInfo.parts.length; ++i) {
		var p = parts[i];
		p.name = algInfo.parts[i];
		/*
		 * OpenSSH stores ed25519 "private" keys as seed + public key
		 * concat'd together (k followed by A). We want to keep them
		 * separate for other formats that don't do this.
		 */
		if (key.type === 'ed25519' && p.name === 'k')
			p.data = p.data.slice(0, 32);

		if (p.name !== 'curve' && algInfo.normalize !== false) {
			var nd;
			if (key.type === 'ed25519') {
				nd = utils.zeroPadToLength(p.data, 32);
			} else {
				nd = utils.mpNormalize(p.data);
			}
			if (nd.toString('binary') !==
			    p.data.toString('binary')) {
				p.data = nd;
				normalized = false;
			}
		}
	}

	if (normalized)
		key._rfc4253Cache = sshbuf.toBuffer();

	if (partial && typeof (partial) === 'object') {
		partial.remainder = sshbuf.remainder();
		partial.consumed = sshbuf._offset;
	}

	return (new Constructor(key));
}

function write(key, options) {
	assert.object(key);

	var alg = keyTypeToAlg(key);
	var i;

	var algInfo = algs.info[key.type];
	if (PrivateKey.isPrivateKey(key))
		algInfo = algs.privInfo[key.type];
	var parts = algInfo.parts;

	var buf = new SSHBuffer({});

	buf.writeString(alg);

	for (i = 0; i < parts.length; ++i) {
		var data = key.part[parts[i]].data;
		if (algInfo.normalize !== false) {
			if (key.type === 'ed25519')
				data = utils.zeroPadToLength(data, 32);
			else
				data = utils.mpNormalize(data);
		}
		if (key.type === 'ed25519' && parts[i] === 'k')
			data = Buffer.concat([data, key.part.A.data]);
		buf.writeBuffer(data);
	}

	return (buf.toBuffer());
}


/***/ }),
/* 83 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file method.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(17);
var errors = __webpack_require__(101);

var Method = function (options) {
    this.name = options.name;
    this.call = options.call;
    this.params = options.params || 0;
    this.inputFormatter = options.inputFormatter;
    this.outputFormatter = options.outputFormatter;
    this.requestManager = null;
};

Method.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be used to determine name of the jsonrpc method based on arguments
 *
 * @method getCall
 * @param {Array} arguments
 * @return {String} name of jsonrpc method
 */
Method.prototype.getCall = function (args) {
    return utils.isFunction(this.call) ? this.call(args) : this.call;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Method.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 * 
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */
Method.prototype.validateArgs = function (args) {
    if (args.length !== this.params) {
        throw errors.InvalidNumberOfRPCParams();
    }
};

/**
 * Should be called to format input args of method
 * 
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Method.prototype.formatInput = function (args) {
    if (!this.inputFormatter) {
        return args;
    }

    return this.inputFormatter.map(function (formatter, index) {
        return formatter ? formatter(args[index]) : args[index];
    });
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Method.prototype.formatOutput = function (result) {
    return this.outputFormatter && result ? this.outputFormatter(result) : result;
};

/**
 * Should create payload from given input args
 *
 * @method toPayload
 * @param {Array} args
 * @return {Object}
 */
Method.prototype.toPayload = function (args) {
    var call = this.getCall(args);
    var callback = this.extractCallback(args);
    var params = this.formatInput(args);
    this.validateArgs(params);

    return {
        method: call,
        params: params,
        callback: callback
    };
};

Method.prototype.attachToObject = function (obj) {
    var func = this.buildCall();
    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
    var name = this.name.split('.');
    if (name.length > 1) {
        obj[name[0]] = obj[name[0]] || {};
        obj[name[0]][name[1]] = func;
    } else {
        obj[name[0]] = func; 
    }
};

Method.prototype.buildCall = function() {
    var method = this;
    var send = function () {
        var payload = method.toPayload(Array.prototype.slice.call(arguments));
        if (payload.callback) {
            return method.requestManager.sendAsync(payload, function (err, result) {
                payload.callback(err, method.formatOutput(result));
            });
        }
        return method.formatOutput(method.requestManager.send(payload));
    };
    send.request = this.request.bind(this);
    return send;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Method.prototype.request = function () {
    var payload = this.toPayload(Array.prototype.slice.call(arguments));
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Method;


/***/ }),
/* 84 */
/***/ (function(module, exports, __webpack_require__) {

var async = __webpack_require__(28);
var fs = __webpack_require__(1);
var mkdirp = __webpack_require__(228);
var path = __webpack_require__(0);
var Config = __webpack_require__(9);
var compile = __webpack_require__(247);
var expect = __webpack_require__(21);
var _ = __webpack_require__(24);
var Resolver = __webpack_require__(177);
var Artifactor = __webpack_require__(138);
var OS = __webpack_require__(5);

var Contracts = {

  // contracts_directory: String. Directory where .sol files can be found.
  // contracts_build_directory: String. Directory where .sol.js files can be found and written to.
  // all: Boolean. Compile all sources found. Defaults to true. If false, will compare sources against built files
  //      in the build directory to see what needs to be compiled.
  // network_id: network id to link saved contract artifacts.
  // quiet: Boolean. Suppress output. Defaults to false.
  // strict: Boolean. Return compiler warnings as errors. Defaults to false.
  compile: function(options, callback) {
    var self = this;

    expect.options(options, [
      "contracts_build_directory"
    ]);

    expect.one(options, [
      "contracts_directory",
      "files"
    ]);

    // Use a config object to ensure we get the default sources.
    var config = Config.default().merge(options);

    if (!config.resolver) {
      config.resolver = new Resolver(config);
    }

    if (!config.artifactor) {
      config.artifactor = new Artifactor(config.contracts_build_directory);
    }

    function finished(err, contracts, paths) {
      if (err) return callback(err);

      if (contracts != null && Object.keys(contracts).length > 0) {
        self.write_contracts(contracts, config, function(err, abstractions) {
          callback(err, abstractions, paths);
        });
      } else {
        callback(null, [], paths);
      }
    };

    if (config.all === true || config.compileAll === true) {
      compile.all(config, finished);
    } else {
      compile.necessary(config, finished);
    }
  },

  write_contracts: function(contracts, options, callback) {
    var logger = options.logger || console;

    mkdirp(options.contracts_build_directory, function(err, result) {
      if (err != null) {
        callback(err);
        return;
      }

      if (options.quiet != true && options.quietWrite != true) {
        logger.log("Writing artifacts to ." + path.sep + path.relative(options.working_directory, options.contracts_build_directory) + OS.EOL);
      }

      var extra_opts = {
        network_id: options.network_id
      };

      options.artifactor.saveAll(contracts, extra_opts).then(function() {
        callback(null, contracts);
      }).catch(callback);
    });
  }
};

module.exports = Contracts;


/***/ }),
/* 85 */
/***/ (function(module, exports) {

module.exports = require("querystring");

/***/ }),
/* 86 */
/***/ (function(module, exports) {

module.exports = require("vm");

/***/ }),
/* 87 */
/***/ (function(module, exports) {

module.exports = require("zlib");

/***/ }),
/* 88 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";



module.exports = {
  copy: copy,
  checkDataType: checkDataType,
  checkDataTypes: checkDataTypes,
  coerceToTypes: coerceToTypes,
  toHash: toHash,
  getProperty: getProperty,
  escapeQuotes: escapeQuotes,
  equal: __webpack_require__(217),
  ucs2length: __webpack_require__(531),
  varOccurences: varOccurences,
  varReplace: varReplace,
  cleanUpCode: cleanUpCode,
  finalCleanUpCode: finalCleanUpCode,
  schemaHasRules: schemaHasRules,
  schemaHasRulesExcept: schemaHasRulesExcept,
  toQuotedString: toQuotedString,
  getPathExpr: getPathExpr,
  getPath: getPath,
  getData: getData,
  unescapeFragment: unescapeFragment,
  unescapeJsonPointer: unescapeJsonPointer,
  escapeFragment: escapeFragment,
  escapeJsonPointer: escapeJsonPointer
};


function copy(o, to) {
  to = to || {};
  for (var key in o) to[key] = o[key];
  return to;
}


function checkDataType(dataType, data, negate) {
  var EQUAL = negate ? ' !== ' : ' === '
    , AND = negate ? ' || ' : ' && '
    , OK = negate ? '!' : ''
    , NOT = negate ? '' : '!';
  switch (dataType) {
    case 'null': return data + EQUAL + 'null';
    case 'array': return OK + 'Array.isArray(' + data + ')';
    case 'object': return '(' + OK + data + AND +
                          'typeof ' + data + EQUAL + '"object"' + AND +
                          NOT + 'Array.isArray(' + data + '))';
    case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND +
                           NOT + '(' + data + ' % 1)' +
                           AND + data + EQUAL + data + ')';
    default: return 'typeof ' + data + EQUAL + '"' + dataType + '"';
  }
}


function checkDataTypes(dataTypes, data) {
  switch (dataTypes.length) {
    case 1: return checkDataType(dataTypes[0], data, true);
    default:
      var code = '';
      var types = toHash(dataTypes);
      if (types.array && types.object) {
        code = types.null ? '(': '(!' + data + ' || ';
        code += 'typeof ' + data + ' !== "object")';
        delete types.null;
        delete types.array;
        delete types.object;
      }
      if (types.number) delete types.integer;
      for (var t in types)
        code += (code ? ' && ' : '' ) + checkDataType(t, data, true);

      return code;
  }
}


var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);
function coerceToTypes(optionCoerceTypes, dataTypes) {
  if (Array.isArray(dataTypes)) {
    var types = [];
    for (var i=0; i<dataTypes.length; i++) {
      var t = dataTypes[i];
      if (COERCE_TO_TYPES[t]) types[types.length] = t;
      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;
    }
    if (types.length) return types;
  } else if (COERCE_TO_TYPES[dataTypes]) {
    return [dataTypes];
  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {
    return ['array'];
  }
}


function toHash(arr) {
  var hash = {};
  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;
  return hash;
}


var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
var SINGLE_QUOTE = /'|\\/g;
function getProperty(key) {
  return typeof key == 'number'
          ? '[' + key + ']'
          : IDENTIFIER.test(key)
            ? '.' + key
            : "['" + escapeQuotes(key) + "']";
}


function escapeQuotes(str) {
  return str.replace(SINGLE_QUOTE, '\\$&')
            .replace(/\n/g, '\\n')
            .replace(/\r/g, '\\r')
            .replace(/\f/g, '\\f')
            .replace(/\t/g, '\\t');
}


function varOccurences(str, dataVar) {
  dataVar += '[^0-9]';
  var matches = str.match(new RegExp(dataVar, 'g'));
  return matches ? matches.length : 0;
}


function varReplace(str, dataVar, expr) {
  dataVar += '([^0-9])';
  expr = expr.replace(/\$/g, '$$$$');
  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');
}


var EMPTY_ELSE = /else\s*{\s*}/g
  , EMPTY_IF_NO_ELSE = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g
  , EMPTY_IF_WITH_ELSE = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g;
function cleanUpCode(out) {
  return out.replace(EMPTY_ELSE, '')
            .replace(EMPTY_IF_NO_ELSE, '')
            .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');
}


var ERRORS_REGEXP = /[^v.]errors/g
  , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g
  , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g
  , RETURN_VALID = 'return errors === 0;'
  , RETURN_TRUE = 'validate.errors = null; return true;'
  , RETURN_ASYNC = /if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/
  , RETURN_DATA_ASYNC = 'return data;'
  , ROOTDATA_REGEXP = /[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g
  , REMOVE_ROOTDATA = /if \(rootData === undefined\) rootData = data;/;

function finalCleanUpCode(out, async) {
  var matches = out.match(ERRORS_REGEXP);
  if (matches && matches.length == 2) {
    out = async
          ? out.replace(REMOVE_ERRORS_ASYNC, '')
               .replace(RETURN_ASYNC, RETURN_DATA_ASYNC)
          : out.replace(REMOVE_ERRORS, '')
               .replace(RETURN_VALID, RETURN_TRUE);
  }

  matches = out.match(ROOTDATA_REGEXP);
  if (!matches || matches.length !== 3) return out;
  return out.replace(REMOVE_ROOTDATA, '');
}


function schemaHasRules(schema, rules) {
  if (typeof schema == 'boolean') return !schema;
  for (var key in schema) if (rules[key]) return true;
}


function schemaHasRulesExcept(schema, rules, exceptKeyword) {
  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';
  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;
}


function toQuotedString(str) {
  return '\'' + escapeQuotes(str) + '\'';
}


function getPathExpr(currentPath, expr, jsonPointers, isNumber) {
  var path = jsonPointers // false by default
              ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')')
              : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\'');
  return joinPaths(currentPath, path);
}


function getPath(currentPath, prop, jsonPointers) {
  var path = jsonPointers // false by default
              ? toQuotedString('/' + escapeJsonPointer(prop))
              : toQuotedString(getProperty(prop));
  return joinPaths(currentPath, path);
}


var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/;
var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
function getData($data, lvl, paths) {
  var up, jsonPointer, data, matches;
  if ($data === '') return 'rootData';
  if ($data[0] == '/') {
    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);
    jsonPointer = $data;
    data = 'rootData';
  } else {
    matches = $data.match(RELATIVE_JSON_POINTER);
    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);
    up = +matches[1];
    jsonPointer = matches[2];
    if (jsonPointer == '#') {
      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);
      return paths[lvl - up];
    }

    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);
    data = 'data' + ((lvl - up) || '');
    if (!jsonPointer) return data;
  }

  var expr = data;
  var segments = jsonPointer.split('/');
  for (var i=0; i<segments.length; i++) {
    var segment = segments[i];
    if (segment) {
      data += getProperty(unescapeJsonPointer(segment));
      expr += ' && ' + data;
    }
  }
  return expr;
}


function joinPaths (a, b) {
  if (a == '""') return b;
  return (a + ' + ' + b).replace(/' \+ '/g, '');
}


function unescapeFragment(str) {
  return unescapeJsonPointer(decodeURIComponent(str));
}


function escapeFragment(str) {
  return encodeURIComponent(escapeJsonPointer(str));
}


function escapeJsonPointer(str) {
  return str.replace(/~/g, '~0').replace(/\//g, '~1');
}


function unescapeJsonPointer(str) {
  return str.replace(/~1/g, '/').replace(/~0/g, '~');
}


/***/ }),
/* 89 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),
/* 90 */
/***/ (function(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.

// 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);
}


/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var C_enc = C.enc;

	    /**
	     * Base64 encoding strategy.
	     */
	    var Base64 = C_enc.Base64 = {
	        /**
	         * Converts a word array to a Base64 string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The Base64 string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;
	            var map = this._map;

	            // Clamp excess bits
	            wordArray.clamp();

	            // Convert
	            var base64Chars = [];
	            for (var i = 0; i < sigBytes; i += 3) {
	                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;
	                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
	                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;

	                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;

	                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
	                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
	                }
	            }

	            // Add padding
	            var paddingChar = map.charAt(64);
	            if (paddingChar) {
	                while (base64Chars.length % 4) {
	                    base64Chars.push(paddingChar);
	                }
	            }

	            return base64Chars.join('');
	        },

	        /**
	         * Converts a Base64 string to a word array.
	         *
	         * @param {string} base64Str The Base64 string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);
	         */
	        parse: function (base64Str) {
	            // Shortcuts
	            var base64StrLength = base64Str.length;
	            var map = this._map;
	            var reverseMap = this._reverseMap;

	            if (!reverseMap) {
	                    reverseMap = this._reverseMap = [];
	                    for (var j = 0; j < map.length; j++) {
	                        reverseMap[map.charCodeAt(j)] = j;
	                    }
	            }

	            // Ignore padding
	            var paddingChar = map.charAt(64);
	            if (paddingChar) {
	                var paddingIndex = base64Str.indexOf(paddingChar);
	                if (paddingIndex !== -1) {
	                    base64StrLength = paddingIndex;
	                }
	            }

	            // Convert
	            return parseLoop(base64Str, base64StrLength, reverseMap);

	        },

	        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
	    };

	    function parseLoop(base64Str, base64StrLength, reverseMap) {
	      var words = [];
	      var nBytes = 0;
	      for (var i = 0; i < base64StrLength; i++) {
	          if (i % 4) {
	              var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
	              var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
	              words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);
	              nBytes++;
	          }
	      }
	      return WordArray.create(words, nBytes);
	    }
	}());


	return CryptoJS.enc.Base64;

}));

/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(211), __webpack_require__(209));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./sha1", "./hmac"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var WordArray = C_lib.WordArray;
	    var C_algo = C.algo;
	    var MD5 = C_algo.MD5;

	    /**
	     * This key derivation function is meant to conform with EVP_BytesToKey.
	     * www.openssl.org/docs/crypto/EVP_BytesToKey.html
	     */
	    var EvpKDF = C_algo.EvpKDF = Base.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
	         * @property {Hasher} hasher The hash algorithm to use. Default: MD5
	         * @property {number} iterations The number of iterations to perform. Default: 1
	         */
	        cfg: Base.extend({
	            keySize: 128/32,
	            hasher: MD5,
	            iterations: 1
	        }),

	        /**
	         * Initializes a newly created key derivation function.
	         *
	         * @param {Object} cfg (Optional) The configuration options to use for the derivation.
	         *
	         * @example
	         *
	         *     var kdf = CryptoJS.algo.EvpKDF.create();
	         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
	         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
	         */
	        init: function (cfg) {
	            this.cfg = this.cfg.extend(cfg);
	        },

	        /**
	         * Derives a key from a password.
	         *
	         * @param {WordArray|string} password The password.
	         * @param {WordArray|string} salt A salt.
	         *
	         * @return {WordArray} The derived key.
	         *
	         * @example
	         *
	         *     var key = kdf.compute(password, salt);
	         */
	        compute: function (password, salt) {
	            // Shortcut
	            var cfg = this.cfg;

	            // Init hasher
	            var hasher = cfg.hasher.create();

	            // Initial values
	            var derivedKey = WordArray.create();

	            // Shortcuts
	            var derivedKeyWords = derivedKey.words;
	            var keySize = cfg.keySize;
	            var iterations = cfg.iterations;

	            // Generate key
	            while (derivedKeyWords.length < keySize) {
	                if (block) {
	                    hasher.update(block);
	                }
	                var block = hasher.update(password).finalize(salt);
	                hasher.reset();

	                // Iterations
	                for (var i = 1; i < iterations; i++) {
	                    block = hasher.finalize(block);
	                    hasher.reset();
	                }

	                derivedKey.concat(block);
	            }
	            derivedKey.sigBytes = keySize * 4;

	            return derivedKey;
	        }
	    });

	    /**
	     * Derives a key from a password.
	     *
	     * @param {WordArray|string} password The password.
	     * @param {WordArray|string} salt A salt.
	     * @param {Object} cfg (Optional) The configuration options to use for this computation.
	     *
	     * @return {WordArray} The derived key.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var key = CryptoJS.EvpKDF(password, salt);
	     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
	     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
	     */
	    C.EvpKDF = function (password, salt, cfg) {
	        return EvpKDF.create(cfg).compute(password, salt);
	    };
	}());


	return CryptoJS.EvpKDF;

}));

/***/ }),
/* 93 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (Math) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_algo = C.algo;

	    // Constants table
	    var T = [];

	    // Compute constants
	    (function () {
	        for (var i = 0; i < 64; i++) {
	            T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
	        }
	    }());

	    /**
	     * MD5 hash algorithm.
	     */
	    var MD5 = C_algo.MD5 = Hasher.extend({
	        _doReset: function () {
	            this._hash = new WordArray.init([
	                0x67452301, 0xefcdab89,
	                0x98badcfe, 0x10325476
	            ]);
	        },

	        _doProcessBlock: function (M, offset) {
	            // Swap endian
	            for (var i = 0; i < 16; i++) {
	                // Shortcuts
	                var offset_i = offset + i;
	                var M_offset_i = M[offset_i];

	                M[offset_i] = (
	                    (((M_offset_i << 8)  | (M_offset_i >>> 24)) & 0x00ff00ff) |
	                    (((M_offset_i << 24) | (M_offset_i >>> 8))  & 0xff00ff00)
	                );
	            }

	            // Shortcuts
	            var H = this._hash.words;

	            var M_offset_0  = M[offset + 0];
	            var M_offset_1  = M[offset + 1];
	            var M_offset_2  = M[offset + 2];
	            var M_offset_3  = M[offset + 3];
	            var M_offset_4  = M[offset + 4];
	            var M_offset_5  = M[offset + 5];
	            var M_offset_6  = M[offset + 6];
	            var M_offset_7  = M[offset + 7];
	            var M_offset_8  = M[offset + 8];
	            var M_offset_9  = M[offset + 9];
	            var M_offset_10 = M[offset + 10];
	            var M_offset_11 = M[offset + 11];
	            var M_offset_12 = M[offset + 12];
	            var M_offset_13 = M[offset + 13];
	            var M_offset_14 = M[offset + 14];
	            var M_offset_15 = M[offset + 15];

	            // Working varialbes
	            var a = H[0];
	            var b = H[1];
	            var c = H[2];
	            var d = H[3];

	            // Computation
	            a = FF(a, b, c, d, M_offset_0,  7,  T[0]);
	            d = FF(d, a, b, c, M_offset_1,  12, T[1]);
	            c = FF(c, d, a, b, M_offset_2,  17, T[2]);
	            b = FF(b, c, d, a, M_offset_3,  22, T[3]);
	            a = FF(a, b, c, d, M_offset_4,  7,  T[4]);
	            d = FF(d, a, b, c, M_offset_5,  12, T[5]);
	            c = FF(c, d, a, b, M_offset_6,  17, T[6]);
	            b = FF(b, c, d, a, M_offset_7,  22, T[7]);
	            a = FF(a, b, c, d, M_offset_8,  7,  T[8]);
	            d = FF(d, a, b, c, M_offset_9,  12, T[9]);
	            c = FF(c, d, a, b, M_offset_10, 17, T[10]);
	            b = FF(b, c, d, a, M_offset_11, 22, T[11]);
	            a = FF(a, b, c, d, M_offset_12, 7,  T[12]);
	            d = FF(d, a, b, c, M_offset_13, 12, T[13]);
	            c = FF(c, d, a, b, M_offset_14, 17, T[14]);
	            b = FF(b, c, d, a, M_offset_15, 22, T[15]);

	            a = GG(a, b, c, d, M_offset_1,  5,  T[16]);
	            d = GG(d, a, b, c, M_offset_6,  9,  T[17]);
	            c = GG(c, d, a, b, M_offset_11, 14, T[18]);
	            b = GG(b, c, d, a, M_offset_0,  20, T[19]);
	            a = GG(a, b, c, d, M_offset_5,  5,  T[20]);
	            d = GG(d, a, b, c, M_offset_10, 9,  T[21]);
	            c = GG(c, d, a, b, M_offset_15, 14, T[22]);
	            b = GG(b, c, d, a, M_offset_4,  20, T[23]);
	            a = GG(a, b, c, d, M_offset_9,  5,  T[24]);
	            d = GG(d, a, b, c, M_offset_14, 9,  T[25]);
	            c = GG(c, d, a, b, M_offset_3,  14, T[26]);
	            b = GG(b, c, d, a, M_offset_8,  20, T[27]);
	            a = GG(a, b, c, d, M_offset_13, 5,  T[28]);
	            d = GG(d, a, b, c, M_offset_2,  9,  T[29]);
	            c = GG(c, d, a, b, M_offset_7,  14, T[30]);
	            b = GG(b, c, d, a, M_offset_12, 20, T[31]);

	            a = HH(a, b, c, d, M_offset_5,  4,  T[32]);
	            d = HH(d, a, b, c, M_offset_8,  11, T[33]);
	            c = HH(c, d, a, b, M_offset_11, 16, T[34]);
	            b = HH(b, c, d, a, M_offset_14, 23, T[35]);
	            a = HH(a, b, c, d, M_offset_1,  4,  T[36]);
	            d = HH(d, a, b, c, M_offset_4,  11, T[37]);
	            c = HH(c, d, a, b, M_offset_7,  16, T[38]);
	            b = HH(b, c, d, a, M_offset_10, 23, T[39]);
	            a = HH(a, b, c, d, M_offset_13, 4,  T[40]);
	            d = HH(d, a, b, c, M_offset_0,  11, T[41]);
	            c = HH(c, d, a, b, M_offset_3,  16, T[42]);
	            b = HH(b, c, d, a, M_offset_6,  23, T[43]);
	            a = HH(a, b, c, d, M_offset_9,  4,  T[44]);
	            d = HH(d, a, b, c, M_offset_12, 11, T[45]);
	            c = HH(c, d, a, b, M_offset_15, 16, T[46]);
	            b = HH(b, c, d, a, M_offset_2,  23, T[47]);

	            a = II(a, b, c, d, M_offset_0,  6,  T[48]);
	            d = II(d, a, b, c, M_offset_7,  10, T[49]);
	            c = II(c, d, a, b, M_offset_14, 15, T[50]);
	            b = II(b, c, d, a, M_offset_5,  21, T[51]);
	            a = II(a, b, c, d, M_offset_12, 6,  T[52]);
	            d = II(d, a, b, c, M_offset_3,  10, T[53]);
	            c = II(c, d, a, b, M_offset_10, 15, T[54]);
	            b = II(b, c, d, a, M_offset_1,  21, T[55]);
	            a = II(a, b, c, d, M_offset_8,  6,  T[56]);
	            d = II(d, a, b, c, M_offset_15, 10, T[57]);
	            c = II(c, d, a, b, M_offset_6,  15, T[58]);
	            b = II(b, c, d, a, M_offset_13, 21, T[59]);
	            a = II(a, b, c, d, M_offset_4,  6,  T[60]);
	            d = II(d, a, b, c, M_offset_11, 10, T[61]);
	            c = II(c, d, a, b, M_offset_2,  15, T[62]);
	            b = II(b, c, d, a, M_offset_9,  21, T[63]);

	            // Intermediate hash value
	            H[0] = (H[0] + a) | 0;
	            H[1] = (H[1] + b) | 0;
	            H[2] = (H[2] + c) | 0;
	            H[3] = (H[3] + d) | 0;
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;

	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);

	            var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
	            var nBitsTotalL = nBitsTotal;
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
	                (((nBitsTotalH << 8)  | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
	                (((nBitsTotalH << 24) | (nBitsTotalH >>> 8))  & 0xff00ff00)
	            );
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
	                (((nBitsTotalL << 8)  | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
	                (((nBitsTotalL << 24) | (nBitsTotalL >>> 8))  & 0xff00ff00)
	            );

	            data.sigBytes = (dataWords.length + 1) * 4;

	            // Hash final blocks
	            this._process();

	            // Shortcuts
	            var hash = this._hash;
	            var H = hash.words;

	            // Swap endian
	            for (var i = 0; i < 4; i++) {
	                // Shortcut
	                var H_i = H[i];

	                H[i] = (((H_i << 8)  | (H_i >>> 24)) & 0x00ff00ff) |
	                       (((H_i << 24) | (H_i >>> 8))  & 0xff00ff00);
	            }

	            // Return final computed hash
	            return hash;
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);
	            clone._hash = this._hash.clone();

	            return clone;
	        }
	    });

	    function FF(a, b, c, d, x, s, t) {
	        var n = a + ((b & c) | (~b & d)) + x + t;
	        return ((n << s) | (n >>> (32 - s))) + b;
	    }

	    function GG(a, b, c, d, x, s, t) {
	        var n = a + ((b & d) | (c & ~d)) + x + t;
	        return ((n << s) | (n >>> (32 - s))) + b;
	    }

	    function HH(a, b, c, d, x, s, t) {
	        var n = a + (b ^ c ^ d) + x + t;
	        return ((n << s) | (n >>> (32 - s))) + b;
	    }

	    function II(a, b, c, d, x, s, t) {
	        var n = a + (c ^ (b | ~d)) + x + t;
	        return ((n << s) | (n >>> (32 - s))) + b;
	    }

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.MD5('message');
	     *     var hash = CryptoJS.MD5(wordArray);
	     */
	    C.MD5 = Hasher._createHelper(MD5);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacMD5(message, key);
	     */
	    C.HmacMD5 = Hasher._createHmacHelper(MD5);
	}(Math));


	return CryptoJS.MD5;

}));

/***/ }),
/* 94 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file method.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(14);
var errors = __webpack_require__(119);

var Method = function (options) {
    this.name = options.name;
    this.call = options.call;
    this.params = options.params || 0;
    this.inputFormatter = options.inputFormatter;
    this.outputFormatter = options.outputFormatter;
    this.requestManager = null;
};

Method.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be used to determine name of the jsonrpc method based on arguments
 *
 * @method getCall
 * @param {Array} arguments
 * @return {String} name of jsonrpc method
 */
Method.prototype.getCall = function (args) {
    return utils.isFunction(this.call) ? this.call(args) : this.call;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Method.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 * 
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */
Method.prototype.validateArgs = function (args) {
    if (args.length !== this.params) {
        throw errors.InvalidNumberOfParams();
    }
};

/**
 * Should be called to format input args of method
 * 
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Method.prototype.formatInput = function (args) {
    if (!this.inputFormatter) {
        return args;
    }

    return this.inputFormatter.map(function (formatter, index) {
        return formatter ? formatter(args[index]) : args[index];
    });
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Method.prototype.formatOutput = function (result) {
    return this.outputFormatter && result ? this.outputFormatter(result) : result;
};

/**
 * Should create payload from given input args
 *
 * @method toPayload
 * @param {Array} args
 * @return {Object}
 */
Method.prototype.toPayload = function (args) {
    var call = this.getCall(args);
    var callback = this.extractCallback(args);
    var params = this.formatInput(args);
    this.validateArgs(params);

    return {
        method: call,
        params: params,
        callback: callback
    };
};

Method.prototype.attachToObject = function (obj) {
    var func = this.buildCall();
    func.call = this.call; // TODO!!! that's ugly. filter.js uses it
    var name = this.name.split('.');
    if (name.length > 1) {
        obj[name[0]] = obj[name[0]] || {};
        obj[name[0]][name[1]] = func;
    } else {
        obj[name[0]] = func; 
    }
};

Method.prototype.buildCall = function() {
    var method = this;
    var send = function () {
        var payload = method.toPayload(Array.prototype.slice.call(arguments));
        if (payload.callback) {
            return method.requestManager.sendAsync(payload, function (err, result) {
                payload.callback(err, method.formatOutput(result));
            });
        }
        return method.formatOutput(method.requestManager.send(payload));
    };
    send.request = this.request.bind(this);
    return send;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Method.prototype.request = function () {
    var payload = this.toPayload(Array.prototype.slice.call(arguments));
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Method;



/***/ }),
/* 95 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file property.js
 * @author Fabian Vogelsteller <fabian@frozeman.de>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(15);

var Property = function (options) {
    this.name = options.name;
    this.getter = options.getter;
    this.setter = options.setter;
    this.outputFormatter = options.outputFormatter;
    this.inputFormatter = options.inputFormatter;
    this.requestManager = null;
};

Property.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be called to format input args of method
 *
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Property.prototype.formatInput = function (arg) {
    return this.inputFormatter ? this.inputFormatter(arg) : arg;
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Property.prototype.formatOutput = function (result) {
    return this.outputFormatter && result !== null && result !== undefined ? this.outputFormatter(result) : result;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Property.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};


/**
 * Should attach function to method
 *
 * @method attachToObject
 * @param {Object}
 * @param {Function}
 */
Property.prototype.attachToObject = function (obj) {
    var proto = {
        get: this.buildGet(),
        enumerable: true
    };

    var names = this.name.split('.');
    var name = names[0];
    if (names.length > 1) {
        obj[names[0]] = obj[names[0]] || {};
        obj = obj[names[0]];
        name = names[1];
    }

    Object.defineProperty(obj, name, proto);
    obj[asyncGetterName(name)] = this.buildAsyncGet();
};

var asyncGetterName = function (name) {
    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
};

Property.prototype.buildGet = function () {
    var property = this;
    return function get() {
        return property.formatOutput(property.requestManager.send({
            method: property.getter
        }));
    };
};

Property.prototype.buildAsyncGet = function () {
    var property = this;
    var get = function (callback) {
        property.requestManager.sendAsync({
            method: property.getter
        }, function (err, result) {
            callback(err, property.formatOutput(result));
        });
    };
    get.request = this.request.bind(this);
    return get;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Property.prototype.request = function () {
    var payload = {
        method: this.getter,
        params: [],
        callback: this.extractCallback(Array.prototype.slice.call(arguments))
    };
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Property;



/***/ }),
/* 96 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * is-glob <https://github.com/jonschlinkert/is-glob>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */

var isExtglob = __webpack_require__(163);

module.exports = function isGlob(str) {
  return typeof str === 'string'
    && (/[*!?{}(|)[\]]/.test(str)
     || isExtglob(str));
};

/***/ }),
/* 97 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var uri = __webpack_require__(8);

var ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, propertyPath, name, argument) {
  if (propertyPath) {
    this.property = propertyPath;
  }
  if (message) {
    this.message = message;
  }
  if (schema) {
    if (schema.id) {
      this.schema = schema.id;
    } else {
      this.schema = schema;
    }
  }
  if (instance) {
    this.instance = instance;
  }
  this.name = name;
  this.argument = argument;
  this.stack = this.toString();
};

ValidationError.prototype.toString = function toString() {
  return this.property + ' ' + this.message;
};

var ValidatorResult = exports.ValidatorResult = function ValidatorResult(instance, schema, options, ctx) {
  this.instance = instance;
  this.schema = schema;
  this.propertyPath = ctx.propertyPath;
  this.errors = [];
  this.throwError = options && options.throwError;
  this.disableFormat = options && options.disableFormat === true;
};

ValidatorResult.prototype.addError = function addError(detail) {
  var err;
  if (typeof detail == 'string') {
    err = new ValidationError(detail, this.instance, this.schema, this.propertyPath);
  } else {
    if (!detail) throw new Error('Missing error detail');
    if (!detail.message) throw new Error('Missing error message');
    if (!detail.name) throw new Error('Missing validator type');
    err = new ValidationError(detail.message, this.instance, this.schema, this.propertyPath, detail.name, detail.argument);
  }

  if (this.throwError) {
    throw err;
  }
  this.errors.push(err);
  return err;
};

ValidatorResult.prototype.importErrors = function importErrors(res) {
  if (typeof res == 'string' || (res && res.validatorType)) {
    this.addError(res);
  } else if (res && res.errors) {
    Array.prototype.push.apply(this.errors, res.errors);
  }
};

function stringizer (v,i){
  return i+': '+v.toString()+'\n';
}
ValidatorResult.prototype.toString = function toString(res) {
  return this.errors.map(stringizer).join('');
};

Object.defineProperty(ValidatorResult.prototype, "valid", { get: function() {
  return !this.errors.length;
} });

/**
 * Describes a problem with a Schema which prevents validation of an instance
 * @name SchemaError
 * @constructor
 */
var SchemaError = exports.SchemaError = function SchemaError (msg, schema) {
  this.message = msg;
  this.schema = schema;
  Error.call(this, msg);
  Error.captureStackTrace(this, SchemaError);
};
SchemaError.prototype = Object.create(Error.prototype,
  { constructor: {value: SchemaError, enumerable: false}
  , name: {value: 'SchemaError', enumerable: false}
  });

var SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, propertyPath, base, schemas) {
  this.schema = schema;
  this.options = options;
  this.propertyPath = propertyPath;
  this.base = base;
  this.schemas = schemas;
};

SchemaContext.prototype.resolve = function resolve (target) {
  return uri.resolve(this.base, target);
};

SchemaContext.prototype.makeChild = function makeChild(schema, propertyName){
  var propertyPath = (propertyName===undefined) ? this.propertyPath : this.propertyPath+makeSuffix(propertyName);
  var base = uri.resolve(this.base, schema.id||'');
  var ctx = new SchemaContext(schema, this.options, propertyPath, base, Object.create(this.schemas));
  if(schema.id && !ctx.schemas[base]){
    ctx.schemas[base] = schema;
  }
  return ctx;
}

var FORMAT_REGEXPS = exports.FORMAT_REGEXPS = {
  'date-time': /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])[tT ](2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])(\.\d+)?([zZ]|[+-]([0-5][0-9]):(60|[0-5][0-9]))$/,
  'date': /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])$/,
  'time': /^(2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])$/,

  'email': /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/,
  'ip-address': /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
  'ipv6': /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,
  'uri': /^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/,

  'color': /^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,

  // hostname regex from: http://stackoverflow.com/a/1420225/5628
  'hostname': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,
  'host-name': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,

  'alpha': /^[a-zA-Z]+$/,
  'alphanumeric': /^[a-zA-Z0-9]+$/,
  'utc-millisec': function (input) {
    return (typeof input === 'string') && parseFloat(input) === parseInt(input, 10) && !isNaN(input);
  },
  'regex': function (input) {
    var result = true;
    try {
      new RegExp(input);
    } catch (e) {
      result = false;
    }
    return result;
  },
  'style': /\s*(.+?):\s*([^;]+);?/g,
  'phone': /^\+(?:[0-9] ?){6,14}[0-9]$/
};

FORMAT_REGEXPS.regexp = FORMAT_REGEXPS.regex;
FORMAT_REGEXPS.pattern = FORMAT_REGEXPS.regex;
FORMAT_REGEXPS.ipv4 = FORMAT_REGEXPS['ip-address'];

exports.isFormat = function isFormat (input, format, validator) {
  if (typeof input === 'string' && FORMAT_REGEXPS[format] !== undefined) {
    if (FORMAT_REGEXPS[format] instanceof RegExp) {
      return FORMAT_REGEXPS[format].test(input);
    }
    if (typeof FORMAT_REGEXPS[format] === 'function') {
      return FORMAT_REGEXPS[format](input);
    }
  } else if (validator && validator.customFormats &&
      typeof validator.customFormats[format] === 'function') {
    return validator.customFormats[format](input);
  }
  return true;
};

var makeSuffix = exports.makeSuffix = function makeSuffix (key) {
  key = key.toString();
  // This function could be capable of outputting valid a ECMAScript string, but the
  // resulting code for testing which form to use would be tens of thousands of characters long
  // That means this will use the name form for some illegal forms
  if (!key.match(/[.\s\[\]]/) && !key.match(/^[\d]/)) {
    return '.' + key;
  }
  if (key.match(/^\d+$/)) {
    return '[' + key + ']';
  }
  return '[' + JSON.stringify(key) + ']';
};

exports.deepCompareStrict = function deepCompareStrict (a, b) {
  if (typeof a !== typeof b) {
    return false;
  }
  if (a instanceof Array) {
    if (!(b instanceof Array)) {
      return false;
    }
    if (a.length !== b.length) {
      return false;
    }
    return a.every(function (v, i) {
      return deepCompareStrict(a[i], b[i]);
    });
  }
  if (typeof a === 'object') {
    if (!a || !b) {
      return a === b;
    }
    var aKeys = Object.keys(a);
    var bKeys = Object.keys(b);
    if (aKeys.length !== bKeys.length) {
      return false;
    }
    return aKeys.every(function (v) {
      return deepCompareStrict(a[v], b[v]);
    });
  }
  return a === b;
};

function deepMerger (target, dst, e, i) {
  if (typeof e === 'object') {
    dst[i] = deepMerge(target[i], e)
  } else {
    if (target.indexOf(e) === -1) {
      dst.push(e)
    }
  }
}

function copyist (src, dst, key) {
  dst[key] = src[key];
}

function copyistWithDeepMerge (target, src, dst, key) {
  if (typeof src[key] !== 'object' || !src[key]) {
    dst[key] = src[key];
  }
  else {
    if (!target[key]) {
      dst[key] = src[key];
    } else {
      dst[key] = deepMerge(target[key], src[key])
    }
  }
}

function deepMerge (target, src) {
  var array = Array.isArray(src);
  var dst = array && [] || {};

  if (array) {
    target = target || [];
    dst = dst.concat(target);
    src.forEach(deepMerger.bind(null, target, dst));
  } else {
    if (target && typeof target === 'object') {
      Object.keys(target).forEach(copyist.bind(null, target, dst));
    }
    Object.keys(src).forEach(copyistWithDeepMerge.bind(null, target, src, dst));
  }

  return dst;
};

module.exports.deepMerge = deepMerge;

/**
 * Validates instance against the provided schema
 * Implements URI+JSON Pointer encoding, e.g. "%7e"="~0"=>"~", "~1"="%2f"=>"/"
 * @param o
 * @param s The path to walk o along
 * @return any
 */
exports.objectGetPath = function objectGetPath(o, s) {
  var parts = s.split('/').slice(1);
  var k;
  while (typeof (k=parts.shift()) == 'string') {
    var n = decodeURIComponent(k.replace(/~0/,'~').replace(/~1/g,'/'));
    if (!(n in o)) return;
    o = o[n];
  }
  return o;
};

function pathEncoder (v) {
  return '/'+encodeURIComponent(v).replace(/~/g,'%7E');
}
/**
 * Accept an Array of property names and return a JSON Pointer URI fragment
 * @param Array a
 * @return {String}
 */
exports.encodePath = function encodePointer(a){
	// ~ must be encoded explicitly because hacks
	// the slash is encoded by encodeURIComponent
	return a.map(pathEncoder).join('');
};


/**
 * Calculate the number of decimal places a number uses
 * We need this to get correct results out of multipleOf and divisibleBy
 * when either figure is has decimal places, due to IEEE-754 float issues.
 * @param number
 * @returns {number}
 */
exports.getDecimalPlaces = function getDecimalPlaces(number) {

  var decimalPlaces = 0;
  if (isNaN(number)) return decimalPlaces;

  if (typeof number !== 'number') {
    number = Number(number);
  }

  var parts = number.toString().split('e');
  if (parts.length === 2) {
    if (parts[1][0] !== '-') {
      return decimalPlaces;
    } else {
      decimalPlaces = Number(parts[1].slice(1));
    }
  }

  var decimalParts = parts[0].split('.');
  if (decimalParts.length === 2) {
    decimalPlaces += decimalParts[1].length;
  }

  return decimalPlaces;
};



/***/ }),
/* 98 */
/***/ (function(module, exports, __webpack_require__) {

var dirpaths = __webpack_require__(964);

Object.assign(exports, dirpaths)
exports.readFiles = __webpack_require__(965);
exports.readFilesStream = __webpack_require__(966);


/***/ }),
/* 99 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



/*<replacement>*/

var pna = __webpack_require__(167);
/*</replacement>*/

/*<replacement>*/
var objectKeys = Object.keys || function (obj) {
  var keys = [];
  for (var key in obj) {
    keys.push(key);
  }return keys;
};
/*</replacement>*/

module.exports = Duplex;

/*<replacement>*/
var util = __webpack_require__(90);
util.inherits = __webpack_require__(54);
/*</replacement>*/

var Readable = __webpack_require__(392);
var Writable = __webpack_require__(394);

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);
};

/***/ }),
/* 100 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return END; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return isEnd; });
/* harmony export (immutable) */ __webpack_exports__["f"] = emitter;
/* unused harmony export INVALID_BUFFER */
/* unused harmony export UNDEFINED_INPUT_ERROR */
/* harmony export (immutable) */ __webpack_exports__["c"] = channel;
/* harmony export (immutable) */ __webpack_exports__["b"] = eventChannel;
/* harmony export (immutable) */ __webpack_exports__["d"] = stdChannel;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__buffers__ = __webpack_require__(168);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__scheduler__ = __webpack_require__(403);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };





var CHANNEL_END_TYPE = '@@redux-saga/CHANNEL_END';
var END = { type: CHANNEL_END_TYPE };
var isEnd = function isEnd(a) {
  return a && a.type === CHANNEL_END_TYPE;
};

function emitter() {
  var subscribers = [];

  function subscribe(sub) {
    subscribers.push(sub);
    return function () {
      return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["l" /* remove */])(subscribers, sub);
    };
  }

  function emit(item) {
    var arr = subscribers.slice();
    for (var i = 0, len = arr.length; i < len; i++) {
      arr[i](item);
    }
  }

  return {
    subscribe: subscribe,
    emit: emit
  };
}

var INVALID_BUFFER = 'invalid buffer passed to channel factory function';
var UNDEFINED_INPUT_ERROR = 'Saga was provided with an undefined action';

if (process.env.NODE_ENV !== 'production') {
  UNDEFINED_INPUT_ERROR += '\nHints:\n    - check that your Action Creator returns a non-undefined value\n    - if the Saga was started using runSaga, check that your subscribe source provides the action to its listeners\n  ';
}

function channel() {
  var buffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : __WEBPACK_IMPORTED_MODULE_1__buffers__["a" /* buffers */].fixed();

  var closed = false;
  var takers = [];

  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].buffer, INVALID_BUFFER);

  function checkForbiddenStates() {
    if (closed && takers.length) {
      throw __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["w" /* internalErr */])('Cannot have a closed channel with pending takers');
    }
    if (takers.length && !buffer.isEmpty()) {
      throw __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["w" /* internalErr */])('Cannot have pending takers with non empty buffer');
    }
  }

  function put(input) {
    checkForbiddenStates();
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(input, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].notUndef, UNDEFINED_INPUT_ERROR);
    if (closed) {
      return;
    }
    if (!takers.length) {
      return buffer.put(input);
    }
    for (var i = 0; i < takers.length; i++) {
      var cb = takers[i];
      if (!cb[__WEBPACK_IMPORTED_MODULE_0__utils__["x" /* MATCH */]] || cb[__WEBPACK_IMPORTED_MODULE_0__utils__["x" /* MATCH */]](input)) {
        takers.splice(i, 1);
        return cb(input);
      }
    }
  }

  function take(cb) {
    checkForbiddenStates();
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(cb, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, "channel.take's callback must be a function");

    if (closed && buffer.isEmpty()) {
      cb(END);
    } else if (!buffer.isEmpty()) {
      cb(buffer.take());
    } else {
      takers.push(cb);
      cb.cancel = function () {
        return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["l" /* remove */])(takers, cb);
      };
    }
  }

  function flush(cb) {
    checkForbiddenStates(); // TODO: check if some new state should be forbidden now
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(cb, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, "channel.flush' callback must be a function");
    if (closed && buffer.isEmpty()) {
      cb(END);
      return;
    }
    cb(buffer.flush());
  }

  function close() {
    checkForbiddenStates();
    if (!closed) {
      closed = true;
      if (takers.length) {
        var arr = takers;
        takers = [];
        for (var i = 0, len = arr.length; i < len; i++) {
          arr[i](END);
        }
      }
    }
  }

  return {
    take: take,
    put: put,
    flush: flush,
    close: close,
    get __takers__() {
      return takers;
    },
    get __closed__() {
      return closed;
    }
  };
}

function eventChannel(subscribe) {
  var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __WEBPACK_IMPORTED_MODULE_1__buffers__["a" /* buffers */].none();
  var matcher = arguments[2];

  /**
    should be if(typeof matcher !== undefined) instead?
    see PR #273 for a background discussion
  **/
  if (arguments.length > 2) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(matcher, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, 'Invalid match function passed to eventChannel');
  }

  var chan = channel(buffer);
  var close = function close() {
    if (!chan.__closed__) {
      if (unsubscribe) {
        unsubscribe();
      }
      chan.close();
    }
  };
  var unsubscribe = subscribe(function (input) {
    if (isEnd(input)) {
      close();
      return;
    }
    if (matcher && !matcher(input)) {
      return;
    }
    chan.put(input);
  });
  if (chan.__closed__) {
    unsubscribe();
  }

  if (!__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(unsubscribe)) {
    throw new Error('in eventChannel: subscribe should return a function to unsubscribe');
  }

  return {
    take: chan.take,
    flush: chan.flush,
    close: close
  };
}

function stdChannel(subscribe) {
  var chan = eventChannel(function (cb) {
    return subscribe(function (input) {
      if (input[__WEBPACK_IMPORTED_MODULE_0__utils__["d" /* SAGA_ACTION */]]) {
        cb(input);
        return;
      }
      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__scheduler__["a" /* asap */])(function () {
        return cb(input);
      });
    });
  });

  return _extends({}, chan, {
    take: function take(cb, matcher) {
      if (arguments.length > 1) {
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(matcher, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, "channel.take's matcher argument must be a function");
        cb[__WEBPACK_IMPORTED_MODULE_0__utils__["x" /* MATCH */]] = matcher;
      }
      chan.take(cb);
    }
  });
}

/***/ }),
/* 101 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file errors.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

module.exports = {
    InvalidNumberOfSolidityArgs: function () {
        return new Error('Invalid number of arguments to Solidity function');
    },
    InvalidNumberOfRPCParams: function () {
        return new Error('Invalid number of input parameters to RPC method');
    },
    InvalidConnection: function (host){
        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
    },
    InvalidProvider: function () {
        return new Error('Provider not set or invalid');
    },
    InvalidResponse: function (result){
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        return new Error(message);
    },
    ConnectionTimeout: function (ms){
        return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');
    }
};


/***/ }),
/* 102 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file property.js
 * @author Fabian Vogelsteller <fabian@frozeman.de>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(17);

var Property = function (options) {
    this.name = options.name;
    this.getter = options.getter;
    this.setter = options.setter;
    this.outputFormatter = options.outputFormatter;
    this.inputFormatter = options.inputFormatter;
    this.requestManager = null;
};

Property.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be called to format input args of method
 *
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Property.prototype.formatInput = function (arg) {
    return this.inputFormatter ? this.inputFormatter(arg) : arg;
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Property.prototype.formatOutput = function (result) {
    return this.outputFormatter && result !== null && result !== undefined ? this.outputFormatter(result) : result;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Property.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};


/**
 * Should attach function to method
 *
 * @method attachToObject
 * @param {Object}
 * @param {Function}
 */
Property.prototype.attachToObject = function (obj) {
    var proto = {
        get: this.buildGet(),
        enumerable: true
    };

    var names = this.name.split('.');
    var name = names[0];
    if (names.length > 1) {
        obj[names[0]] = obj[names[0]] || {};
        obj = obj[names[0]];
        name = names[1];
    }

    Object.defineProperty(obj, name, proto);
    obj[asyncGetterName(name)] = this.buildAsyncGet();
};

var asyncGetterName = function (name) {
    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
};

Property.prototype.buildGet = function () {
    var property = this;
    return function get() {
        return property.formatOutput(property.requestManager.send({
            method: property.getter
        }));
    };
};

Property.prototype.buildAsyncGet = function () {
    var property = this;
    var get = function (callback) {
        property.requestManager.sendAsync({
            method: property.getter
        }, function (err, result) {
            callback(err, property.formatOutput(result));
        });
    };
    get.request = this.request.bind(this);
    return get;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Property.prototype.request = function () {
    var payload = {
        method: this.getter,
        params: [],
        callback: this.extractCallback(Array.prototype.slice.call(arguments))
    };
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Property;



/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {

/*

The MIT License (MIT)

Original Library
  - Copyright (c) Marak Squires

Additional functionality
 - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var colors = {};
module['exports'] = colors;

colors.themes = {};

var util = __webpack_require__(2);
var ansiStyles = colors.styles = __webpack_require__(1144);
var defineProps = Object.defineProperties;
var newLineRegex = new RegExp(/[\r\n]+/g);

colors.supportsColor = __webpack_require__(1146).supportsColor;

if (typeof colors.enabled === 'undefined') {
  colors.enabled = colors.supportsColor() !== false;
}

colors.enable = function() {
  colors.enabled = true;
};

colors.disable = function() {
  colors.enabled = false;
};

colors.stripColors = colors.strip = function(str) {
  return ('' + str).replace(/\x1B\[\d+m/g, '');
};

// eslint-disable-next-line no-unused-vars
var stylize = colors.stylize = function stylize(str, style) {
  if (!colors.enabled) {
    return str+'';
  }

  return ansiStyles[style].open + str + ansiStyles[style].close;
};

var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
var escapeStringRegexp = function(str) {
  if (typeof str !== 'string') {
    throw new TypeError('Expected a string');
  }
  return str.replace(matchOperatorsRe, '\\$&');
};

function build(_styles) {
  var builder = function builder() {
    return applyStyle.apply(builder, arguments);
  };
  builder._styles = _styles;
  // __proto__ is used because we must return a function, but there is
  // no way to create a function with a different prototype.
  builder.__proto__ = proto;
  return builder;
}

var styles = (function() {
  var ret = {};
  ansiStyles.grey = ansiStyles.gray;
  Object.keys(ansiStyles).forEach(function(key) {
    ansiStyles[key].closeRe =
      new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
    ret[key] = {
      get: function() {
        return build(this._styles.concat(key));
      },
    };
  });
  return ret;
})();

var proto = defineProps(function colors() {}, styles);

function applyStyle() {
  var args = Array.prototype.slice.call(arguments);

  var str = args.map(function(arg) {
    if (arg !== undefined && arg.constructor === String) {
      return arg;
    } else {
      return util.inspect(arg);
    }
  }).join(' ');

  if (!colors.enabled || !str) {
    return str;
  }

  var newLinesPresent = str.indexOf('\n') != -1;

  var nestedStyles = this._styles;

  var i = nestedStyles.length;
  while (i--) {
    var code = ansiStyles[nestedStyles[i]];
    str = code.open + str.replace(code.closeRe, code.open) + code.close;
    if (newLinesPresent) {
      str = str.replace(newLineRegex, code.close + '\n' + code.open);
    }
  }

  return str;
}

colors.setTheme = function(theme) {
  if (typeof theme === 'string') {
    console.log('colors.setTheme now only accepts an object, not a string.  ' +
      'If you are trying to set a theme from a file, it is now your (the ' +
      'caller\'s) responsibility to require the file.  The old syntax ' +
      'looked like colors.setTheme(__dirname + ' +
      '\'/../themes/generic-logging.js\'); The new syntax looks like '+
      'colors.setTheme(require(__dirname + ' +
      '\'/../themes/generic-logging.js\'));');
    return;
  }
  for (var style in theme) {
    (function(style) {
      colors[style] = function(str) {
        if (typeof theme[style] === 'object') {
          var out = str;
          for (var i in theme[style]) {
            out = colors[theme[style][i]](out);
          }
          return out;
        }
        return colors[theme[style]](str);
      };
    })(style);
  }
};

function init() {
  var ret = {};
  Object.keys(styles).forEach(function(name) {
    ret[name] = {
      get: function() {
        return build([name]);
      },
    };
  });
  return ret;
}

var sequencer = function sequencer(map, str) {
  var exploded = str.split('');
  exploded = exploded.map(map);
  return exploded.join('');
};

// custom formatter methods
colors.trap = __webpack_require__(1136);
colors.zalgo = __webpack_require__(1137);

// maps
colors.maps = {};
colors.maps.america = __webpack_require__(1140);
colors.maps.zebra = __webpack_require__(1143);
colors.maps.rainbow = __webpack_require__(1141);
colors.maps.random = __webpack_require__(1142);

for (var map in colors.maps) {
  (function(map) {
    colors[map] = function(str) {
      return sequencer(colors.maps[map], str);
    };
  })(map);
}

defineProps(colors, init());


/***/ }),
/* 104 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(25);
var TruffleError = __webpack_require__(23);
var expect = __webpack_require__(21);
var Resolver = __webpack_require__(177);
var Artifactor = __webpack_require__(138);
var TestRPC = __webpack_require__(178);
var spawn = __webpack_require__(39).spawn;
var path = __webpack_require__(0);
var Develop = __webpack_require__(249);

var Environment = {
  // It's important config is a Config object and not a vanilla object
  detect: function(config, callback) {
    expect.options(config, [
      "networks"
    ]);

    if (!config.resolver) {
      config.resolver = new Resolver(config);
    }

    if (!config.artifactor) {
      config.artifactor = new Artifactor(config.contracts_build_directory)
    }

    if (!config.network && config.networks["development"]) {
      config.network = "development";
    }

    if (!config.network) {
      return callback(new Error("No network specified. Cannot determine current network."));
    }

    var network_config = config.networks[config.network];

    if (!network_config) {
      return callback(new TruffleError("Unknown network \"" + config.network + "\". See your Truffle configuration file for available networks."));
    }

    var network_id = config.networks[config.network].network_id;

    if (network_id == null) {
      return callback(new Error("You must specify a network_id in your '" + config.network + "' configuration in order to use this network."));
    }

    var web3 = new Web3(config.provider);

    function detectNetworkId(done) {
      if (network_id != "*") {
        return done(null, network_id);
      }

      // We have a "*" network. Get the current network and replace it with the real one.
      // TODO: Should we replace this with the blockchain uri?
      web3.version.getNetwork(function(err, id) {
        if (err) return callback(err);
        network_id = id;
        config.networks[config.network].network_id = network_id;
        done(null, network_id);
      });
    }

    function detectFromAddress(done) {
      if (config.from) {
        return done();
      }

      web3.eth.getAccounts(function(err, accounts) {
        if (err) return done(err);
        config.networks[config.network].from = accounts[0];
        done();
      });
    }

    detectNetworkId(function(err) {
      if (err) return callback(err);
      detectFromAddress(callback);
    });
  },

  // Ensure you call Environment.detect() first.
  fork: function(config, callback) {
    expect.options(config, [
      "from"
    ]);

    var web3 = new Web3(config.provider);

    web3.eth.getAccounts(function(err, accounts) {
      if (err) return callback(err);

      var upstreamNetwork = config.network;
      var upstreamConfig = config.networks[upstreamNetwork];
      var forkedNetwork = config.network + "-fork";

      config.networks[forkedNetwork] = {
        network_id: config.network_id,
        provider: TestRPC.provider({
          fork: config.provider,
          unlocked_accounts: accounts
        }),
        from: config.from
      }
      config.network = forkedNetwork;

      callback();
    });
  },

  develop: function(config, testrpcOptions, callback) {
    var self = this;

    expect.options(config, [
      "networks",
    ]);

    var network = config.network || "develop";
    var url = `http://${testrpcOptions.host}:${testrpcOptions.port}/`;

    config.networks[network] = {
      network_id: testrpcOptions.network_id,
      provider: function() {
        return new Web3.providers.HttpProvider(url);
      }
    };

    config.network = network;

    Environment.detect(config, callback);
  }
};

module.exports = Environment;


/***/ }),
/* 105 */
/***/ (function(module, exports, __webpack_require__) {

/*

The MIT License (MIT)

Original Library
  - Copyright (c) Marak Squires

Additional functionality
 - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var colors = {};
module['exports'] = colors;

colors.themes = {};

var util = __webpack_require__(2);
var ansiStyles = colors.styles = __webpack_require__(1185);
var defineProps = Object.defineProperties;
var newLineRegex = new RegExp(/[\r\n]+/g);

colors.supportsColor = __webpack_require__(1187).supportsColor;

if (typeof colors.enabled === 'undefined') {
  colors.enabled = colors.supportsColor() !== false;
}

colors.enable = function() {
  colors.enabled = true;
};

colors.disable = function() {
  colors.enabled = false;
};

colors.stripColors = colors.strip = function(str) {
  return ('' + str).replace(/\x1B\[\d+m/g, '');
};

// eslint-disable-next-line no-unused-vars
var stylize = colors.stylize = function stylize(str, style) {
  if (!colors.enabled) {
    return str+'';
  }

  return ansiStyles[style].open + str + ansiStyles[style].close;
};

var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
var escapeStringRegexp = function(str) {
  if (typeof str !== 'string') {
    throw new TypeError('Expected a string');
  }
  return str.replace(matchOperatorsRe, '\\$&');
};

function build(_styles) {
  var builder = function builder() {
    return applyStyle.apply(builder, arguments);
  };
  builder._styles = _styles;
  // __proto__ is used because we must return a function, but there is
  // no way to create a function with a different prototype.
  builder.__proto__ = proto;
  return builder;
}

var styles = (function() {
  var ret = {};
  ansiStyles.grey = ansiStyles.gray;
  Object.keys(ansiStyles).forEach(function(key) {
    ansiStyles[key].closeRe =
      new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
    ret[key] = {
      get: function() {
        return build(this._styles.concat(key));
      },
    };
  });
  return ret;
})();

var proto = defineProps(function colors() {}, styles);

function applyStyle() {
  var args = Array.prototype.slice.call(arguments);

  var str = args.map(function(arg) {
    if (arg !== undefined && arg.constructor === String) {
      return arg;
    } else {
      return util.inspect(arg);
    }
  }).join(' ');

  if (!colors.enabled || !str) {
    return str;
  }

  var newLinesPresent = str.indexOf('\n') != -1;

  var nestedStyles = this._styles;

  var i = nestedStyles.length;
  while (i--) {
    var code = ansiStyles[nestedStyles[i]];
    str = code.open + str.replace(code.closeRe, code.open) + code.close;
    if (newLinesPresent) {
      str = str.replace(newLineRegex, code.close + '\n' + code.open);
    }
  }

  return str;
}

colors.setTheme = function(theme) {
  if (typeof theme === 'string') {
    console.log('colors.setTheme now only accepts an object, not a string.  ' +
      'If you are trying to set a theme from a file, it is now your (the ' +
      'caller\'s) responsibility to require the file.  The old syntax ' +
      'looked like colors.setTheme(__dirname + ' +
      '\'/../themes/generic-logging.js\'); The new syntax looks like '+
      'colors.setTheme(require(__dirname + ' +
      '\'/../themes/generic-logging.js\'));');
    return;
  }
  for (var style in theme) {
    (function(style) {
      colors[style] = function(str) {
        if (typeof theme[style] === 'object') {
          var out = str;
          for (var i in theme[style]) {
            out = colors[theme[style][i]](out);
          }
          return out;
        }
        return colors[theme[style]](str);
      };
    })(style);
  }
};

function init() {
  var ret = {};
  Object.keys(styles).forEach(function(name) {
    ret[name] = {
      get: function() {
        return build([name]);
      },
    };
  });
  return ret;
}

var sequencer = function sequencer(map, str) {
  var exploded = str.split('');
  exploded = exploded.map(map);
  return exploded.join('');
};

// custom formatter methods
colors.trap = __webpack_require__(1178);
colors.zalgo = __webpack_require__(1179);

// maps
colors.maps = {};
colors.maps.america = __webpack_require__(1181);
colors.maps.zebra = __webpack_require__(1184);
colors.maps.rainbow = __webpack_require__(1182);
colors.maps.random = __webpack_require__(1183);

for (var map in colors.maps) {
  (function(map) {
    colors[map] = function(str) {
      return sequencer(colors.maps[map], str);
    };
  })(map);
}

defineProps(colors, init());


/***/ }),
/* 106 */
/***/ (function(module, exports) {

module.exports = require("module");

/***/ }),
/* 107 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(522);
module.exports.FileSystem = __webpack_require__(182);
module.exports.Constants = __webpack_require__(263);
module.exports.Errors = __webpack_require__(264);
module.exports.FileAttr = __webpack_require__(521);

/***/ }),
/* 108 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_RESULT__;/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */

;(function (global) {
    'use strict';

    /*
      bignumber.js v2.0.7
      A JavaScript library for arbitrary-precision arithmetic.
      https://github.com/MikeMcl/bignumber.js
      Copyright (c) 2015 Michael Mclaughlin <M8ch88l@gmail.com>
      MIT Expat Licence
    */


    var BigNumber, crypto, parseNumeric,
        isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
        mathceil = Math.ceil,
        mathfloor = Math.floor,
        notBool = ' not a boolean or binary digit',
        roundingMode = 'rounding mode',
        tooManyDigits = 'number type has more than 15 significant digits',
        ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',
        BASE = 1e14,
        LOG_BASE = 14,
        MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
        // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
        POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
        SQRT_BASE = 1e7,

        /*
         * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
         * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an
         * exception is thrown (if ERRORS is true).
         */
        MAX = 1E9;                                   // 0 to MAX_INT32


    /*
     * Create and return a BigNumber constructor.
     */
    function another(configObj) {
        var div,

            // id tracks the caller function, so its name can be included in error messages.
            id = 0,
            P = BigNumber.prototype,
            ONE = new BigNumber(1),


            /********************************* EDITABLE DEFAULTS **********************************/


            /*
             * The default values below must be integers within the inclusive ranges stated.
             * The values can also be changed at run-time using BigNumber.config.
             */

            // The maximum number of decimal places for operations involving division.
            DECIMAL_PLACES = 20,                     // 0 to MAX

            /*
             * The rounding mode used when rounding to the above decimal places, and when using
             * toExponential, toFixed, toFormat and toPrecision, and round (default value).
             * UP         0 Away from zero.
             * DOWN       1 Towards zero.
             * CEIL       2 Towards +Infinity.
             * FLOOR      3 Towards -Infinity.
             * HALF_UP    4 Towards nearest neighbour. If equidistant, up.
             * HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
             * HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
             * HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
             * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
             */
            ROUNDING_MODE = 4,                       // 0 to 8

            // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

            // The exponent value at and beneath which toString returns exponential notation.
            // Number type: -7
            TO_EXP_NEG = -7,                         // 0 to -MAX

            // The exponent value at and above which toString returns exponential notation.
            // Number type: 21
            TO_EXP_POS = 21,                         // 0 to MAX

            // RANGE : [MIN_EXP, MAX_EXP]

            // The minimum exponent value, beneath which underflow to zero occurs.
            // Number type: -324  (5e-324)
            MIN_EXP = -1e7,                          // -1 to -MAX

            // The maximum exponent value, above which overflow to Infinity occurs.
            // Number type:  308  (1.7976931348623157e+308)
            // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
            MAX_EXP = 1e7,                           // 1 to MAX

            // Whether BigNumber Errors are ever thrown.
            ERRORS = true,                           // true or false

            // Change to intValidatorNoErrors if ERRORS is false.
            isValidInt = intValidatorWithErrors,     // intValidatorWithErrors/intValidatorNoErrors

            // Whether to use cryptographically-secure random number generation, if available.
            CRYPTO = false,                          // true or false

            /*
             * The modulo mode used when calculating the modulus: a mod n.
             * The quotient (q = a / n) is calculated according to the corresponding rounding mode.
             * The remainder (r) is calculated as: r = a - n * q.
             *
             * UP        0 The remainder is positive if the dividend is negative, else is negative.
             * DOWN      1 The remainder has the same sign as the dividend.
             *             This modulo mode is commonly known as 'truncated division' and is
             *             equivalent to (a % n) in JavaScript.
             * FLOOR     3 The remainder has the same sign as the divisor (Python %).
             * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
             * EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
             *             The remainder is always positive.
             *
             * The truncated division, floored division, Euclidian division and IEEE 754 remainder
             * modes are commonly used for the modulus operation.
             * Although the other rounding modes can also be used, they may not give useful results.
             */
            MODULO_MODE = 1,                         // 0 to 9

            // The maximum number of significant digits of the result of the toPower operation.
            // If POW_PRECISION is 0, there will be unlimited significant digits.
            POW_PRECISION = 100,                     // 0 to MAX

            // The format specification used by the BigNumber.prototype.toFormat method.
            FORMAT = {
                decimalSeparator: '.',
                groupSeparator: ',',
                groupSize: 3,
                secondaryGroupSize: 0,
                fractionGroupSeparator: '\xA0',      // non-breaking space
                fractionGroupSize: 0
            };


        /******************************************************************************************/


        // CONSTRUCTOR


        /*
         * The BigNumber constructor and exported function.
         * Create and return a new instance of a BigNumber object.
         *
         * n {number|string|BigNumber} A numeric value.
         * [b] {number} The base of n. Integer, 2 to 64 inclusive.
         */
        function BigNumber( n, b ) {
            var c, e, i, num, len, str,
                x = this;

            // Enable constructor usage without new.
            if ( !( x instanceof BigNumber ) ) {

                // 'BigNumber() constructor call without new: {n}'
                if (ERRORS) raise( 26, 'constructor call without new', n );
                return new BigNumber( n, b );
            }

            // 'new BigNumber() base not an integer: {b}'
            // 'new BigNumber() base out of range: {b}'
            if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {

                // Duplicate.
                if ( n instanceof BigNumber ) {
                    x.s = n.s;
                    x.e = n.e;
                    x.c = ( n = n.c ) ? n.slice() : n;
                    id = 0;
                    return;
                }

                if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {
                    x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;

                    // Fast path for integers.
                    if ( n === ~~n ) {
                        for ( e = 0, i = n; i >= 10; i /= 10, e++ );
                        x.e = e;
                        x.c = [n];
                        id = 0;
                        return;
                    }

                    str = n + '';
                } else {
                    if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }
            } else {
                b = b | 0;
                str = n + '';

                // Ensure return value is rounded to DECIMAL_PLACES as with other bases.
                // Allow exponential notation to be used with base 10 argument.
                if ( b == 10 ) {
                    x = new BigNumber( n instanceof BigNumber ? n : str );
                    return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );
                }

                // Avoid potential interpretation of Infinity and NaN as base 44+ values.
                // Any number in exponential form will fail due to the [Ee][+-].
                if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||
                  !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +
                    '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {
                    return parseNumeric( x, str, num, b );
                }

                if (num) {
                    x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;

                    if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) {

                        // 'new BigNumber() number type has more than 15 significant digits: {n}'
                        raise( id, tooManyDigits, n );
                    }

                    // Prevent later check for length on converted number.
                    num = false;
                } else {
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }

                str = convertBase( str, 10, b, x.s );
            }

            // Decimal point?
            if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );

            // Exponential form?
            if ( ( i = str.search( /e/i ) ) > 0 ) {

                // Determine exponent.
                if ( e < 0 ) e = i;
                e += +str.slice( i + 1 );
                str = str.substring( 0, i );
            } else if ( e < 0 ) {

                // Integer.
                e = str.length;
            }

            // Determine leading zeros.
            for ( i = 0; str.charCodeAt(i) === 48; i++ );

            // Determine trailing zeros.
            for ( len = str.length; str.charCodeAt(--len) === 48; );
            str = str.slice( i, len + 1 );

            if (str) {
                len = str.length;

                // Disallow numbers with over 15 significant digits if number type.
                // 'new BigNumber() number type has more than 15 significant digits: {n}'
                if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );

                e = e - i - 1;

                 // Overflow?
                if ( e > MAX_EXP ) {

                    // Infinity.
                    x.c = x.e = null;

                // Underflow?
                } else if ( e < MIN_EXP ) {

                    // Zero.
                    x.c = [ x.e = 0 ];
                } else {
                    x.e = e;
                    x.c = [];

                    // Transform base

                    // e is the base 10 exponent.
                    // i is where to slice str to get the first element of the coefficient array.
                    i = ( e + 1 ) % LOG_BASE;
                    if ( e < 0 ) i += LOG_BASE;

                    if ( i < len ) {
                        if (i) x.c.push( +str.slice( 0, i ) );

                        for ( len -= LOG_BASE; i < len; ) {
                            x.c.push( +str.slice( i, i += LOG_BASE ) );
                        }

                        str = str.slice(i);
                        i = LOG_BASE - str.length;
                    } else {
                        i -= len;
                    }

                    for ( ; i--; str += '0' );
                    x.c.push( +str );
                }
            } else {

                // Zero.
                x.c = [ x.e = 0 ];
            }

            id = 0;
        }


        // CONSTRUCTOR PROPERTIES


        BigNumber.another = another;

        BigNumber.ROUND_UP = 0;
        BigNumber.ROUND_DOWN = 1;
        BigNumber.ROUND_CEIL = 2;
        BigNumber.ROUND_FLOOR = 3;
        BigNumber.ROUND_HALF_UP = 4;
        BigNumber.ROUND_HALF_DOWN = 5;
        BigNumber.ROUND_HALF_EVEN = 6;
        BigNumber.ROUND_HALF_CEIL = 7;
        BigNumber.ROUND_HALF_FLOOR = 8;
        BigNumber.EUCLID = 9;


        /*
         * Configure infrequently-changing library-wide settings.
         *
         * Accept an object or an argument list, with one or many of the following properties or
         * parameters respectively:
         *
         *   DECIMAL_PLACES  {number}  Integer, 0 to MAX inclusive
         *   ROUNDING_MODE   {number}  Integer, 0 to 8 inclusive
         *   EXPONENTIAL_AT  {number|number[]}  Integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to 0 incl., 0 to MAX incl.]
         *   RANGE           {number|number[]}  Non-zero integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to -1 incl., integer 1 to MAX incl.]
         *   ERRORS          {boolean|number}   true, false, 1 or 0
         *   CRYPTO          {boolean|number}   true, false, 1 or 0
         *   MODULO_MODE     {number}           0 to 9 inclusive
         *   POW_PRECISION   {number}           0 to MAX inclusive
         *   FORMAT          {object}           See BigNumber.prototype.toFormat
         *      decimalSeparator       {string}
         *      groupSeparator         {string}
         *      groupSize              {number}
         *      secondaryGroupSize     {number}
         *      fractionGroupSeparator {string}
         *      fractionGroupSize      {number}
         *
         * (The values assigned to the above FORMAT object properties are not checked for validity.)
         *
         * E.g.
         * BigNumber.config(20, 4) is equivalent to
         * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
         *
         * Ignore properties/parameters set to null or undefined.
         * Return an object with the properties current values.
         */
        BigNumber.config = function () {
            var v, p,
                i = 0,
                r = {},
                a = arguments,
                o = a[0],
                has = o && typeof o == 'object'
                  ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }
                  : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };

            // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
            // 'config() DECIMAL_PLACES not an integer: {v}'
            // 'config() DECIMAL_PLACES out of range: {v}'
            if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                DECIMAL_PLACES = v | 0;
            }
            r[p] = DECIMAL_PLACES;

            // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
            // 'config() ROUNDING_MODE not an integer: {v}'
            // 'config() ROUNDING_MODE out of range: {v}'
            if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {
                ROUNDING_MODE = v | 0;
            }
            r[p] = ROUNDING_MODE;

            // EXPONENTIAL_AT {number|number[]}
            // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].
            // 'config() EXPONENTIAL_AT not an integer: {v}'
            // 'config() EXPONENTIAL_AT out of range: {v}'
            if ( has( p = 'EXPONENTIAL_AT' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {
                        TO_EXP_NEG = v[0] | 0;
                        TO_EXP_POS = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );
                }
            }
            r[p] = [ TO_EXP_NEG, TO_EXP_POS ];

            // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
            // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
            // 'config() RANGE not an integer: {v}'
            // 'config() RANGE cannot be zero: {v}'
            // 'config() RANGE out of range: {v}'
            if ( has( p = 'RANGE' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {
                        MIN_EXP = v[0] | 0;
                        MAX_EXP = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );
                    else if (ERRORS) raise( 2, p + ' cannot be zero', v );
                }
            }
            r[p] = [ MIN_EXP, MAX_EXP ];

            // ERRORS {boolean|number} true, false, 1 or 0.
            // 'config() ERRORS not a boolean or binary digit: {v}'
            if ( has( p = 'ERRORS' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    id = 0;
                    isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = ERRORS;

            // CRYPTO {boolean|number} true, false, 1 or 0.
            // 'config() CRYPTO not a boolean or binary digit: {v}'
            // 'config() crypto unavailable: {crypto}'
            if ( has( p = 'CRYPTO' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    CRYPTO = !!( v && crypto && typeof crypto == 'object' );
                    if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = CRYPTO;

            // MODULO_MODE {number} Integer, 0 to 9 inclusive.
            // 'config() MODULO_MODE not an integer: {v}'
            // 'config() MODULO_MODE out of range: {v}'
            if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {
                MODULO_MODE = v | 0;
            }
            r[p] = MODULO_MODE;

            // POW_PRECISION {number} Integer, 0 to MAX inclusive.
            // 'config() POW_PRECISION not an integer: {v}'
            // 'config() POW_PRECISION out of range: {v}'
            if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                POW_PRECISION = v | 0;
            }
            r[p] = POW_PRECISION;

            // FORMAT {object}
            // 'config() FORMAT not an object: {v}'
            if ( has( p = 'FORMAT' ) ) {

                if ( typeof v == 'object' ) {
                    FORMAT = v;
                } else if (ERRORS) {
                    raise( 2, p + ' not an object', v );
                }
            }
            r[p] = FORMAT;

            return r;
        };


        /*
         * Return a new BigNumber whose value is the maximum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };


        /*
         * Return a new BigNumber whose value is the minimum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };


        /*
         * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
         * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
         * zeros are produced).
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         *
         * 'random() decimal places not an integer: {dp}'
         * 'random() decimal places out of range: {dp}'
         * 'random() crypto unavailable: {crypto}'
         */
        BigNumber.random = (function () {
            var pow2_53 = 0x20000000000000;

            // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
            // Check if Math.random() produces more than 32 bits of randomness.
            // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
            // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
            var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
              ? function () { return mathfloor( Math.random() * pow2_53 ); }
              : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
                  (Math.random() * 0x800000 | 0); };

            return function (dp) {
                var a, b, e, k, v,
                    i = 0,
                    c = [],
                    rand = new BigNumber(ONE);

                dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;
                k = mathceil( dp / LOG_BASE );

                if (CRYPTO) {

                    // Browsers supporting crypto.getRandomValues.
                    if ( crypto && crypto.getRandomValues ) {

                        a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );

                        for ( ; i < k; ) {

                            // 53 bits:
                            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
                            // 11111 11111111 11111111 11111111 11100000 00000000 00000000
                            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
                            //                                     11111 11111111 11111111
                            // 0x20000 is 2^21.
                            v = a[i] * 0x20000 + (a[i + 1] >>> 11);

                            // Rejection sampling:
                            // 0 <= v < 9007199254740992
                            // Probability that v >= 9e15, is
                            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
                            if ( v >= 9e15 ) {
                                b = crypto.getRandomValues( new Uint32Array(2) );
                                a[i] = b[0];
                                a[i + 1] = b[1];
                            } else {

                                // 0 <= v <= 8999999999999999
                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 2;
                            }
                        }
                        i = k / 2;

                    // Node.js supporting crypto.randomBytes.
                    } else if ( crypto && crypto.randomBytes ) {

                        // buffer
                        a = crypto.randomBytes( k *= 7 );

                        for ( ; i < k; ) {

                            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
                            // 0x100000000 is 2^32, 0x1000000 is 2^24
                            // 11111 11111111 11111111 11111111 11111111 11111111 11111111
                            // 0 <= v < 9007199254740992
                            v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +
                                  ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +
                                  ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];

                            if ( v >= 9e15 ) {
                                crypto.randomBytes(7).copy( a, i );
                            } else {

                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 7;
                            }
                        }
                        i = k / 7;
                    } else if (ERRORS) {
                        raise( 14, 'crypto unavailable', crypto );
                    }
                }

                // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.
                if (!i) {

                    for ( ; i < k; ) {
                        v = random53bitInt();
                        if ( v < 9e15 ) c[i++] = v % 1e14;
                    }
                }

                k = c[--i];
                dp %= LOG_BASE;

                // Convert trailing digits to zeros according to dp.
                if ( k && dp ) {
                    v = POWS_TEN[LOG_BASE - dp];
                    c[i] = mathfloor( k / v ) * v;
                }

                // Remove trailing elements which are zero.
                for ( ; c[i] === 0; c.pop(), i-- );

                // Zero?
                if ( i < 0 ) {
                    c = [ e = 0 ];
                } else {

                    // Remove leading elements which are zero and adjust exponent accordingly.
                    for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);

                    // Count the digits of the first element of c to determine leading zeros, and...
                    for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);

                    // adjust the exponent accordingly.
                    if ( i < LOG_BASE ) e -= LOG_BASE - i;
                }

                rand.e = e;
                rand.c = c;
                return rand;
            };
        })();


        // PRIVATE FUNCTIONS


        // Convert a numeric string of baseIn to a numeric string of baseOut.
        function convertBase( str, baseOut, baseIn, sign ) {
            var d, e, k, r, x, xc, y,
                i = str.indexOf( '.' ),
                dp = DECIMAL_PLACES,
                rm = ROUNDING_MODE;

            if ( baseIn < 37 ) str = str.toLowerCase();

            // Non-integer.
            if ( i >= 0 ) {
                k = POW_PRECISION;

                // Unlimited precision.
                POW_PRECISION = 0;
                str = str.replace( '.', '' );
                y = new BigNumber(baseIn);
                x = y.pow( str.length - i );
                POW_PRECISION = k;

                // Convert str as if an integer, then restore the fraction part by dividing the
                // result by its base raised to a power.
                y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );
                y.e = y.c.length;
            }

            // Convert the number as integer.
            xc = toBaseOut( str, baseIn, baseOut );
            e = k = xc.length;

            // Remove trailing zeros.
            for ( ; xc[--k] == 0; xc.pop() );
            if ( !xc[0] ) return '0';

            if ( i < 0 ) {
                --e;
            } else {
                x.c = xc;
                x.e = e;

                // sign is needed for correct rounding.
                x.s = sign;
                x = div( x, y, dp, rm, baseOut );
                xc = x.c;
                r = x.r;
                e = x.e;
            }

            d = e + dp + 1;

            // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.
            i = xc[d];
            k = baseOut / 2;
            r = r || d < 0 || xc[d + 1] != null;

            r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                       : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
                         rm == ( x.s < 0 ? 8 : 7 ) );

            if ( d < 1 || !xc[0] ) {

                // 1^-dp or 0.
                str = r ? toFixedPoint( '1', -dp ) : '0';
            } else {
                xc.length = d;

                if (r) {

                    // Rounding up may mean the previous digit has to be rounded up and so on.
                    for ( --baseOut; ++xc[--d] > baseOut; ) {
                        xc[d] = 0;

                        if ( !d ) {
                            ++e;
                            xc.unshift(1);
                        }
                    }
                }

                // Determine trailing zeros.
                for ( k = xc.length; !xc[--k]; );

                // E.g. [4, 11, 15] becomes 4bf.
                for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );
                str = toFixedPoint( str, e );
            }

            // The caller will add the sign.
            return str;
        }


        // Perform division in the specified base. Called by div and convertBase.
        div = (function () {

            // Assume non-zero x and k.
            function multiply( x, k, base ) {
                var m, temp, xlo, xhi,
                    carry = 0,
                    i = x.length,
                    klo = k % SQRT_BASE,
                    khi = k / SQRT_BASE | 0;

                for ( x = x.slice(); i--; ) {
                    xlo = x[i] % SQRT_BASE;
                    xhi = x[i] / SQRT_BASE | 0;
                    m = khi * xlo + xhi * klo;
                    temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;
                    carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;
                    x[i] = temp % base;
                }

                if (carry) x.unshift(carry);

                return x;
            }

            function compare( a, b, aL, bL ) {
                var i, cmp;

                if ( aL != bL ) {
                    cmp = aL > bL ? 1 : -1;
                } else {

                    for ( i = cmp = 0; i < aL; i++ ) {

                        if ( a[i] != b[i] ) {
                            cmp = a[i] > b[i] ? 1 : -1;
                            break;
                        }
                    }
                }
                return cmp;
            }

            function subtract( a, b, aL, base ) {
                var i = 0;

                // Subtract b from a.
                for ( ; aL--; ) {
                    a[aL] -= i;
                    i = a[aL] < b[aL] ? 1 : 0;
                    a[aL] = i * base + a[aL] - b[aL];
                }

                // Remove leading zeros.
                for ( ; !a[0] && a.length > 1; a.shift() );
            }

            // x: dividend, y: divisor.
            return function ( x, y, dp, rm, base ) {
                var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
                    yL, yz,
                    s = x.s == y.s ? 1 : -1,
                    xc = x.c,
                    yc = y.c;

                // Either NaN, Infinity or 0?
                if ( !xc || !xc[0] || !yc || !yc[0] ) {

                    return new BigNumber(

                      // Return NaN if either NaN, or both Infinity or 0.
                      !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :

                        // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
                        xc && xc[0] == 0 || !yc ? s * 0 : s / 0
                    );
                }

                q = new BigNumber(s);
                qc = q.c = [];
                e = x.e - y.e;
                s = dp + e + 1;

                if ( !base ) {
                    base = BASE;
                    e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );
                    s = s / LOG_BASE | 0;
                }

                // Result exponent may be one less then the current value of e.
                // The coefficients of the BigNumbers from convertBase may have trailing zeros.
                for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );
                if ( yc[i] > ( xc[i] || 0 ) ) e--;

                if ( s < 0 ) {
                    qc.push(1);
                    more = true;
                } else {
                    xL = xc.length;
                    yL = yc.length;
                    i = 0;
                    s += 2;

                    // Normalise xc and yc so highest order digit of yc is >= base / 2.

                    n = mathfloor( base / ( yc[0] + 1 ) );

                    // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.
                    // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {
                    if ( n > 1 ) {
                        yc = multiply( yc, n, base );
                        xc = multiply( xc, n, base );
                        yL = yc.length;
                        xL = xc.length;
                    }

                    xi = yL;
                    rem = xc.slice( 0, yL );
                    remL = rem.length;

                    // Add zeros to make remainder as long as divisor.
                    for ( ; remL < yL; rem[remL++] = 0 );
                    yz = yc.slice();
                    yz.unshift(0);
                    yc0 = yc[0];
                    if ( yc[1] >= base / 2 ) yc0++;
                    // Not necessary, but to prevent trial digit n > base, when using base 3.
                    // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;

                    do {
                        n = 0;

                        // Compare divisor and remainder.
                        cmp = compare( yc, rem, yL, remL );

                        // If divisor < remainder.
                        if ( cmp < 0 ) {

                            // Calculate trial digit, n.

                            rem0 = rem[0];
                            if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );

                            // n is how many times the divisor goes into the current remainder.
                            n = mathfloor( rem0 / yc0 );

                            //  Algorithm:
                            //  1. product = divisor * trial digit (n)
                            //  2. if product > remainder: product -= divisor, n--
                            //  3. remainder -= product
                            //  4. if product was < remainder at 2:
                            //    5. compare new remainder and divisor
                            //    6. If remainder > divisor: remainder -= divisor, n++

                            if ( n > 1 ) {

                                // n may be > base only when base is 3.
                                if (n >= base) n = base - 1;

                                // product = divisor * trial digit.
                                prod = multiply( yc, n, base );
                                prodL = prod.length;
                                remL = rem.length;

                                // Compare product and remainder.
                                // If product > remainder.
                                // Trial digit n too high.
                                // n is 1 too high about 5% of the time, and is not known to have
                                // ever been more than 1 too high.
                                while ( compare( prod, rem, prodL, remL ) == 1 ) {
                                    n--;

                                    // Subtract divisor from product.
                                    subtract( prod, yL < prodL ? yz : yc, prodL, base );
                                    prodL = prod.length;
                                    cmp = 1;
                                }
                            } else {

                                // n is 0 or 1, cmp is -1.
                                // If n is 0, there is no need to compare yc and rem again below,
                                // so change cmp to 1 to avoid it.
                                // If n is 1, leave cmp as -1, so yc and rem are compared again.
                                if ( n == 0 ) {

                                    // divisor < remainder, so n must be at least 1.
                                    cmp = n = 1;
                                }

                                // product = divisor
                                prod = yc.slice();
                                prodL = prod.length;
                            }

                            if ( prodL < remL ) prod.unshift(0);

                            // Subtract product from remainder.
                            subtract( rem, prod, remL, base );
                            remL = rem.length;

                             // If product was < remainder.
                            if ( cmp == -1 ) {

                                // Compare divisor and new remainder.
                                // If divisor < new remainder, subtract divisor from remainder.
                                // Trial digit n too low.
                                // n is 1 too low about 5% of the time, and very rarely 2 too low.
                                while ( compare( yc, rem, yL, remL ) < 1 ) {
                                    n++;

                                    // Subtract divisor from remainder.
                                    subtract( rem, yL < remL ? yz : yc, remL, base );
                                    remL = rem.length;
                                }
                            }
                        } else if ( cmp === 0 ) {
                            n++;
                            rem = [0];
                        } // else cmp === 1 and n will be 0

                        // Add the next digit, n, to the result array.
                        qc[i++] = n;

                        // Update the remainder.
                        if ( rem[0] ) {
                            rem[remL++] = xc[xi] || 0;
                        } else {
                            rem = [ xc[xi] ];
                            remL = 1;
                        }
                    } while ( ( xi++ < xL || rem[0] != null ) && s-- );

                    more = rem[0] != null;

                    // Leading zero?
                    if ( !qc[0] ) qc.shift();
                }

                if ( base == BASE ) {

                    // To calculate q.e, first get the number of digits of qc[0].
                    for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );
                    round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );

                // Caller is convertBase.
                } else {
                    q.e = e;
                    q.r = +more;
                }

                return q;
            };
        })();


        /*
         * Return a string representing the value of BigNumber n in fixed-point or exponential
         * notation rounded to the specified decimal places or significant digits.
         *
         * n is a BigNumber.
         * i is the index of the last digit required (i.e. the digit that may be rounded up).
         * rm is the rounding mode.
         * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.
         */
        function format( n, i, rm, caller ) {
            var c0, e, ne, len, str;

            rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )
              ? rm | 0 : ROUNDING_MODE;

            if ( !n.c ) return n.toString();
            c0 = n.c[0];
            ne = n.e;

            if ( i == null ) {
                str = coeffToString( n.c );
                str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG
                  ? toExponential( str, ne )
                  : toFixedPoint( str, ne );
            } else {
                n = round( new BigNumber(n), i, rm );

                // n.e may have changed if the value was rounded up.
                e = n.e;

                str = coeffToString( n.c );
                len = str.length;

                // toPrecision returns exponential notation if the number of significant digits
                // specified is less than the number of digits necessary to represent the integer
                // part of the value in fixed-point notation.

                // Exponential notation.
                if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {

                    // Append zeros?
                    for ( ; len < i; str += '0', len++ );
                    str = toExponential( str, e );

                // Fixed-point notation.
                } else {
                    i -= ne;
                    str = toFixedPoint( str, e );

                    // Append zeros?
                    if ( e + 1 > len ) {
                        if ( --i > 0 ) for ( str += '.'; i--; str += '0' );
                    } else {
                        i += e - len;
                        if ( i > 0 ) {
                            if ( e + 1 == len ) str += '.';
                            for ( ; i--; str += '0' );
                        }
                    }
                }
            }

            return n.s < 0 && c0 ? '-' + str : str;
        }


        // Handle BigNumber.max and BigNumber.min.
        function maxOrMin( args, method ) {
            var m, n,
                i = 0;

            if ( isArray( args[0] ) ) args = args[0];
            m = new BigNumber( args[0] );

            for ( ; ++i < args.length; ) {
                n = new BigNumber( args[i] );

                // If any number is NaN, return NaN.
                if ( !n.s ) {
                    m = n;
                    break;
                } else if ( method.call( m, n ) ) {
                    m = n;
                }
            }

            return m;
        }


        /*
         * Return true if n is an integer in range, otherwise throw.
         * Use for argument validation when ERRORS is true.
         */
        function intValidatorWithErrors( n, min, max, caller, name ) {
            if ( n < min || n > max || n != truncate(n) ) {
                raise( caller, ( name || 'decimal places' ) +
                  ( n < min || n > max ? ' out of range' : ' not an integer' ), n );
            }

            return true;
        }


        /*
         * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
         * Called by minus, plus and times.
         */
        function normalise( n, c, e ) {
            var i = 1,
                j = c.length;

             // Remove trailing zeros.
            for ( ; !c[--j]; c.pop() );

            // Calculate the base 10 exponent. First get the number of digits of c[0].
            for ( j = c[0]; j >= 10; j /= 10, i++ );

            // Overflow?
            if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {

                // Infinity.
                n.c = n.e = null;

            // Underflow?
            } else if ( e < MIN_EXP ) {

                // Zero.
                n.c = [ n.e = 0 ];
            } else {
                n.e = e;
                n.c = c;
            }

            return n;
        }


        // Handle values that fail the validity test in BigNumber.
        parseNumeric = (function () {
            var basePrefix = /^(-?)0([xbo])/i,
                dotAfter = /^([^.]+)\.$/,
                dotBefore = /^\.([^.]+)$/,
                isInfinityOrNaN = /^-?(Infinity|NaN)$/,
                whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g;

            return function ( x, str, num, b ) {
                var base,
                    s = num ? str : str.replace( whitespaceOrPlus, '' );

                // No exception on ±Infinity or NaN.
                if ( isInfinityOrNaN.test(s) ) {
                    x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
                } else {
                    if ( !num ) {

                        // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
                        s = s.replace( basePrefix, function ( m, p1, p2 ) {
                            base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
                            return !b || b == base ? p1 : m;
                        });

                        if (b) {
                            base = b;

                            // E.g. '1.' to '1', '.1' to '0.1'
                            s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );
                        }

                        if ( str != s ) return new BigNumber( s, base );
                    }

                    // 'new BigNumber() not a number: {n}'
                    // 'new BigNumber() not a base {b} number: {n}'
                    if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );
                    x.s = null;
                }

                x.c = x.e = null;
                id = 0;
            }
        })();


        // Throw a BigNumber Error.
        function raise( caller, msg, val ) {
            var error = new Error( [
                'new BigNumber',     // 0
                'cmp',               // 1
                'config',            // 2
                'div',               // 3
                'divToInt',          // 4
                'eq',                // 5
                'gt',                // 6
                'gte',               // 7
                'lt',                // 8
                'lte',               // 9
                'minus',             // 10
                'mod',               // 11
                'plus',              // 12
                'precision',         // 13
                'random',            // 14
                'round',             // 15
                'shift',             // 16
                'times',             // 17
                'toDigits',          // 18
                'toExponential',     // 19
                'toFixed',           // 20
                'toFormat',          // 21
                'toFraction',        // 22
                'pow',               // 23
                'toPrecision',       // 24
                'toString',          // 25
                'BigNumber'          // 26
            ][caller] + '() ' + msg + ': ' + val );

            error.name = 'BigNumber Error';
            id = 0;
            throw error;
        }


        /*
         * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
         * If r is truthy, it is known that there are more digits after the rounding digit.
         */
        function round( x, sd, rm, r ) {
            var d, i, j, k, n, ni, rd,
                xc = x.c,
                pows10 = POWS_TEN;

            // if x is not Infinity or NaN...
            if (xc) {

                // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
                // n is a base 1e14 number, the value of the element of array x.c containing rd.
                // ni is the index of n within x.c.
                // d is the number of digits of n.
                // i is the index of rd within n including leading zeros.
                // j is the actual index of rd within n (if < 0, rd is a leading zero).
                out: {

                    // Get the number of digits of the first element of xc.
                    for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );
                    i = sd - d;

                    // If the rounding digit is in the first element of xc...
                    if ( i < 0 ) {
                        i += LOG_BASE;
                        j = sd;
                        n = xc[ ni = 0 ];

                        // Get the rounding digit at index j of n.
                        rd = n / pows10[ d - j - 1 ] % 10 | 0;
                    } else {
                        ni = mathceil( ( i + 1 ) / LOG_BASE );

                        if ( ni >= xc.length ) {

                            if (r) {

                                // Needed by sqrt.
                                for ( ; xc.length <= ni; xc.push(0) );
                                n = rd = 0;
                                d = 1;
                                i %= LOG_BASE;
                                j = i - LOG_BASE + 1;
                            } else {
                                break out;
                            }
                        } else {
                            n = k = xc[ni];

                            // Get the number of digits of n.
                            for ( d = 1; k >= 10; k /= 10, d++ );

                            // Get the index of rd within n.
                            i %= LOG_BASE;

                            // Get the index of rd within n, adjusted for leading zeros.
                            // The number of leading zeros of n is given by LOG_BASE - d.
                            j = i - LOG_BASE + d;

                            // Get the rounding digit at index j of n.
                            rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;
                        }
                    }

                    r = r || sd < 0 ||

                    // Are there any non-zero digits after the rounding digit?
                    // The expression  n % pows10[ d - j - 1 ]  returns all digits of n to the right
                    // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
                      xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );

                    r = rm < 4
                      ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                      : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&

                        // Check whether the digit to the left of the rounding digit is odd.
                        ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||
                          rm == ( x.s < 0 ? 8 : 7 ) );

                    if ( sd < 1 || !xc[0] ) {
                        xc.length = 0;

                        if (r) {

                            // Convert sd to decimal places.
                            sd -= x.e + 1;

                            // 1, 0.1, 0.01, 0.001, 0.0001 etc.
                            xc[0] = pows10[ sd % LOG_BASE ];
                            x.e = -sd || 0;
                        } else {

                            // Zero.
                            xc[0] = x.e = 0;
                        }

                        return x;
                    }

                    // Remove excess digits.
                    if ( i == 0 ) {
                        xc.length = ni;
                        k = 1;
                        ni--;
                    } else {
                        xc.length = ni + 1;
                        k = pows10[ LOG_BASE - i ];

                        // E.g. 56700 becomes 56000 if 7 is the rounding digit.
                        // j > 0 means i > number of leading zeros of n.
                        xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;
                    }

                    // Round up?
                    if (r) {

                        for ( ; ; ) {

                            // If the digit to be rounded up is in the first element of xc...
                            if ( ni == 0 ) {

                                // i will be the length of xc[0] before k is added.
                                for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );
                                j = xc[0] += k;
                                for ( k = 1; j >= 10; j /= 10, k++ );

                                // if i != k the length has increased.
                                if ( i != k ) {
                                    x.e++;
                                    if ( xc[0] == BASE ) xc[0] = 1;
                                }

                                break;
                            } else {
                                xc[ni] += k;
                                if ( xc[ni] != BASE ) break;
                                xc[ni--] = 0;
                                k = 1;
                            }
                        }
                    }

                    // Remove trailing zeros.
                    for ( i = xc.length; xc[--i] === 0; xc.pop() );
                }

                // Overflow? Infinity.
                if ( x.e > MAX_EXP ) {
                    x.c = x.e = null;

                // Underflow? Zero.
                } else if ( x.e < MIN_EXP ) {
                    x.c = [ x.e = 0 ];
                }
            }

            return x;
        }


        // PROTOTYPE/INSTANCE METHODS


        /*
         * Return a new BigNumber whose value is the absolute value of this BigNumber.
         */
        P.absoluteValue = P.abs = function () {
            var x = new BigNumber(this);
            if ( x.s < 0 ) x.s = 1;
            return x;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of Infinity.
         */
        P.ceil = function () {
            return round( new BigNumber(this), this.e + 1, 2 );
        };


        /*
         * Return
         * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
         * 0 if they have the same value,
         * or null if the value of either is NaN.
         */
        P.comparedTo = P.cmp = function ( y, b ) {
            id = 1;
            return compare( this, new BigNumber( y, b ) );
        };


        /*
         * Return the number of decimal places of the value of this BigNumber, or null if the value
         * of this BigNumber is ±Infinity or NaN.
         */
        P.decimalPlaces = P.dp = function () {
            var n, v,
                c = this.c;

            if ( !c ) return null;
            n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;

            // Subtract the number of trailing zeros of the last number.
            if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );
            if ( n < 0 ) n = 0;

            return n;
        };


        /*
         *  n / 0 = I
         *  n / N = N
         *  n / I = 0
         *  0 / n = 0
         *  0 / 0 = N
         *  0 / N = N
         *  0 / I = 0
         *  N / n = N
         *  N / 0 = N
         *  N / N = N
         *  N / I = N
         *  I / n = I
         *  I / 0 = I
         *  I / N = N
         *  I / I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
         * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.dividedBy = P.div = function ( y, b ) {
            id = 3;
            return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );
        };


        /*
         * Return a new BigNumber whose value is the integer part of dividing the value of this
         * BigNumber by the value of BigNumber(y, b).
         */
        P.dividedToIntegerBy = P.divToInt = function ( y, b ) {
            id = 4;
            return div( this, new BigNumber( y, b ), 0, 1 );
        };


        /*
         * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.equals = P.eq = function ( y, b ) {
            id = 5;
            return compare( this, new BigNumber( y, b ) ) === 0;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of -Infinity.
         */
        P.floor = function () {
            return round( new BigNumber(this), this.e + 1, 3 );
        };


        /*
         * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.greaterThan = P.gt = function ( y, b ) {
            id = 6;
            return compare( this, new BigNumber( y, b ) ) > 0;
        };


        /*
         * Return true if the value of this BigNumber is greater than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.greaterThanOrEqualTo = P.gte = function ( y, b ) {
            id = 7;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;

        };


        /*
         * Return true if the value of this BigNumber is a finite number, otherwise returns false.
         */
        P.isFinite = function () {
            return !!this.c;
        };


        /*
         * Return true if the value of this BigNumber is an integer, otherwise return false.
         */
        P.isInteger = P.isInt = function () {
            return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;
        };


        /*
         * Return true if the value of this BigNumber is NaN, otherwise returns false.
         */
        P.isNaN = function () {
            return !this.s;
        };


        /*
         * Return true if the value of this BigNumber is negative, otherwise returns false.
         */
        P.isNegative = P.isNeg = function () {
            return this.s < 0;
        };


        /*
         * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.
         */
        P.isZero = function () {
            return !!this.c && this.c[0] == 0;
        };


        /*
         * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.lessThan = P.lt = function ( y, b ) {
            id = 8;
            return compare( this, new BigNumber( y, b ) ) < 0;
        };


        /*
         * Return true if the value of this BigNumber is less than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.lessThanOrEqualTo = P.lte = function ( y, b ) {
            id = 9;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;
        };


        /*
         *  n - 0 = n
         *  n - N = N
         *  n - I = -I
         *  0 - n = -n
         *  0 - 0 = 0
         *  0 - N = N
         *  0 - I = -I
         *  N - n = N
         *  N - 0 = N
         *  N - N = N
         *  N - I = N
         *  I - n = I
         *  I - 0 = I
         *  I - N = N
         *  I - I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber minus the value of
         * BigNumber(y, b).
         */
        P.minus = P.sub = function ( y, b ) {
            var i, j, t, xLTy,
                x = this,
                a = x.s;

            id = 10;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
            if ( a != b ) {
                y.s = -b;
                return x.plus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Either Infinity?
                if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );

                // Either zero?
                if ( !xc[0] || !yc[0] ) {

                    // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                    return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :

                      // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
                      ROUNDING_MODE == 3 ? -0 : 0 );
                }
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Determine which is the bigger number.
            if ( a = xe - ye ) {

                if ( xLTy = a < 0 ) {
                    a = -a;
                    t = xc;
                } else {
                    ye = xe;
                    t = yc;
                }

                t.reverse();

                // Prepend zeros to equalise exponents.
                for ( b = a; b--; t.push(0) );
                t.reverse();
            } else {

                // Exponents equal. Check digit by digit.
                j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;

                for ( a = b = 0; b < j; b++ ) {

                    if ( xc[b] != yc[b] ) {
                        xLTy = xc[b] < yc[b];
                        break;
                    }
                }
            }

            // x < y? Point xc to the array of the bigger number.
            if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;

            b = ( j = yc.length ) - ( i = xc.length );

            // Append zeros to xc if shorter.
            // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
            if ( b > 0 ) for ( ; b--; xc[i++] = 0 );
            b = BASE - 1;

            // Subtract yc from xc.
            for ( ; j > a; ) {

                if ( xc[--j] < yc[j] ) {
                    for ( i = j; i && !xc[--i]; xc[i] = b );
                    --xc[i];
                    xc[j] += BASE;
                }

                xc[j] -= yc[j];
            }

            // Remove leading zeros and adjust exponent accordingly.
            for ( ; xc[0] == 0; xc.shift(), --ye );

            // Zero?
            if ( !xc[0] ) {

                // Following IEEE 754 (2008) 6.3,
                // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
                y.s = ROUNDING_MODE == 3 ? -1 : 1;
                y.c = [ y.e = 0 ];
                return y;
            }

            // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
            // for finite x and y.
            return normalise( y, xc, ye );
        };


        /*
         *   n % 0 =  N
         *   n % N =  N
         *   n % I =  n
         *   0 % n =  0
         *  -0 % n = -0
         *   0 % 0 =  N
         *   0 % N =  N
         *   0 % I =  0
         *   N % n =  N
         *   N % 0 =  N
         *   N % N =  N
         *   N % I =  N
         *   I % n =  N
         *   I % 0 =  N
         *   I % N =  N
         *   I % I =  N
         *
         * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
         * BigNumber(y, b). The result depends on the value of MODULO_MODE.
         */
        P.modulo = P.mod = function ( y, b ) {
            var q, s,
                x = this;

            id = 11;
            y = new BigNumber( y, b );

            // Return NaN if x is Infinity or NaN, or y is NaN or zero.
            if ( !x.c || !y.s || y.c && !y.c[0] ) {
                return new BigNumber(NaN);

            // Return x if y is Infinity or x is zero.
            } else if ( !y.c || x.c && !x.c[0] ) {
                return new BigNumber(x);
            }

            if ( MODULO_MODE == 9 ) {

                // Euclidian division: q = sign(y) * floor(x / abs(y))
                // r = x - qy    where  0 <= r < abs(y)
                s = y.s;
                y.s = 1;
                q = div( x, y, 0, 3 );
                y.s = s;
                q.s *= s;
            } else {
                q = div( x, y, 0, MODULO_MODE );
            }

            return x.minus( q.times(y) );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber negated,
         * i.e. multiplied by -1.
         */
        P.negated = P.neg = function () {
            var x = new BigNumber(this);
            x.s = -x.s || null;
            return x;
        };


        /*
         *  n + 0 = n
         *  n + N = N
         *  n + I = I
         *  0 + n = n
         *  0 + 0 = 0
         *  0 + N = N
         *  0 + I = I
         *  N + n = N
         *  N + 0 = N
         *  N + N = N
         *  N + I = N
         *  I + n = I
         *  I + 0 = I
         *  I + N = N
         *  I + I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber plus the value of
         * BigNumber(y, b).
         */
        P.plus = P.add = function ( y, b ) {
            var t,
                x = this,
                a = x.s;

            id = 12;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
             if ( a != b ) {
                y.s = -b;
                return x.minus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Return ±Infinity if either ±Infinity.
                if ( !xc || !yc ) return new BigNumber( a / 0 );

                // Either zero?
                // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
            if ( a = xe - ye ) {
                if ( a > 0 ) {
                    ye = xe;
                    t = yc;
                } else {
                    a = -a;
                    t = xc;
                }

                t.reverse();
                for ( ; a--; t.push(0) );
                t.reverse();
            }

            a = xc.length;
            b = yc.length;

            // Point xc to the longer array, and b to the shorter length.
            if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;

            // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
            for ( a = 0; b; ) {
                a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;
                xc[b] %= BASE;
            }

            if (a) {
                xc.unshift(a);
                ++ye;
            }

            // No need to check for zero, as +x + +y != 0 && -x + -y != 0
            // ye = MAX_EXP + 1 possible
            return normalise( y, xc, ye );
        };


        /*
         * Return the number of significant digits of the value of this BigNumber.
         *
         * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
         */
        P.precision = P.sd = function (z) {
            var n, v,
                x = this,
                c = x.c;

            // 'precision() argument not a boolean or binary digit: {z}'
            if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {
                if (ERRORS) raise( 13, 'argument' + notBool, z );
                if ( z != !!z ) z = null;
            }

            if ( !c ) return null;
            v = c.length - 1;
            n = v * LOG_BASE + 1;

            if ( v = c[v] ) {

                // Subtract the number of trailing zeros of the last element.
                for ( ; v % 10 == 0; v /= 10, n-- );

                // Add the number of digits of the first element.
                for ( v = c[0]; v >= 10; v /= 10, n++ );
            }

            if ( z && x.e + 1 > n ) n = x.e + 1;

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if
         * omitted.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'round() decimal places out of range: {dp}'
         * 'round() decimal places not an integer: {dp}'
         * 'round() rounding mode not an integer: {rm}'
         * 'round() rounding mode out of range: {rm}'
         */
        P.round = function ( dp, rm ) {
            var n = new BigNumber(this);

            if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {
                round( n, ~~dp + this.e + 1, rm == null ||
                  !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );
            }

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
         * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
         *
         * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
         *
         * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity
         * otherwise.
         *
         * 'shift() argument not an integer: {k}'
         * 'shift() argument out of range: {k}'
         */
        P.shift = function (k) {
            var n = this;
            return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )

              // k < 1e+21, or truncate(k) will produce exponential notation.
              ? n.times( '1e' + truncate(k) )
              : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )
                ? n.s * ( k < 0 ? 0 : 1 / 0 )
                : n );
        };


        /*
         *  sqrt(-n) =  N
         *  sqrt( N) =  N
         *  sqrt(-I) =  N
         *  sqrt( I) =  I
         *  sqrt( 0) =  0
         *  sqrt(-0) = -0
         *
         * Return a new BigNumber whose value is the square root of the value of this BigNumber,
         * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.squareRoot = P.sqrt = function () {
            var m, n, r, rep, t,
                x = this,
                c = x.c,
                s = x.s,
                e = x.e,
                dp = DECIMAL_PLACES + 4,
                half = new BigNumber('0.5');

            // Negative/NaN/Infinity/zero?
            if ( s !== 1 || !c || !c[0] ) {
                return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );
            }

            // Initial estimate.
            s = Math.sqrt( +x );

            // Math.sqrt underflow/overflow?
            // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
            if ( s == 0 || s == 1 / 0 ) {
                n = coeffToString(c);
                if ( ( n.length + e ) % 2 == 0 ) n += '0';
                s = Math.sqrt(n);
                e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );

                if ( s == 1 / 0 ) {
                    n = '1e' + e;
                } else {
                    n = s.toExponential();
                    n = n.slice( 0, n.indexOf('e') + 1 ) + e;
                }

                r = new BigNumber(n);
            } else {
                r = new BigNumber( s + '' );
            }

            // Check for zero.
            // r could be zero if MIN_EXP is changed after the this value was created.
            // This would cause a division by zero (x/t) and hence Infinity below, which would cause
            // coeffToString to throw.
            if ( r.c[0] ) {
                e = r.e;
                s = e + dp;
                if ( s < 3 ) s = 0;

                // Newton-Raphson iteration.
                for ( ; ; ) {
                    t = r;
                    r = half.times( t.plus( div( x, t, dp, 1 ) ) );

                    if ( coeffToString( t.c   ).slice( 0, s ) === ( n =
                         coeffToString( r.c ) ).slice( 0, s ) ) {

                        // The exponent of r may here be one less than the final result exponent,
                        // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
                        // are indexed correctly.
                        if ( r.e < e ) --s;
                        n = n.slice( s - 3, s + 1 );

                        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
                        // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
                        // iteration.
                        if ( n == '9999' || !rep && n == '4999' ) {

                            // On the first iteration only, check to see if rounding up gives the
                            // exact result as the nines may infinitely repeat.
                            if ( !rep ) {
                                round( t, t.e + DECIMAL_PLACES + 2, 0 );

                                if ( t.times(t).eq(x) ) {
                                    r = t;
                                    break;
                                }
                            }

                            dp += 4;
                            s += 4;
                            rep = 1;
                        } else {

                            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
                            // result. If not, then there are further digits and m will be truthy.
                            if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {

                                // Truncate to the first rounding digit.
                                round( r, r.e + DECIMAL_PLACES + 2, 1 );
                                m = !r.times(r).eq(x);
                            }

                            break;
                        }
                    }
                }
            }

            return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );
        };


        /*
         *  n * 0 = 0
         *  n * N = N
         *  n * I = I
         *  0 * n = 0
         *  0 * 0 = 0
         *  0 * N = N
         *  0 * I = N
         *  N * n = N
         *  N * 0 = N
         *  N * N = N
         *  N * I = N
         *  I * n = I
         *  I * 0 = N
         *  I * N = N
         *  I * I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber times the value of
         * BigNumber(y, b).
         */
        P.times = P.mul = function ( y, b ) {
            var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
                base, sqrtBase,
                x = this,
                xc = x.c,
                yc = ( id = 17, y = new BigNumber( y, b ) ).c;

            // Either NaN, ±Infinity or ±0?
            if ( !xc || !yc || !xc[0] || !yc[0] ) {

                // Return NaN if either is NaN, or one is 0 and the other is Infinity.
                if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {
                    y.c = y.e = y.s = null;
                } else {
                    y.s *= x.s;

                    // Return ±Infinity if either is ±Infinity.
                    if ( !xc || !yc ) {
                        y.c = y.e = null;

                    // Return ±0 if either is ±0.
                    } else {
                        y.c = [0];
                        y.e = 0;
                    }
                }

                return y;
            }

            e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );
            y.s *= x.s;
            xcL = xc.length;
            ycL = yc.length;

            // Ensure xc points to longer array and xcL to its length.
            if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;

            // Initialise the result array with zeros.
            for ( i = xcL + ycL, zc = []; i--; zc.push(0) );

            base = BASE;
            sqrtBase = SQRT_BASE;

            for ( i = ycL; --i >= 0; ) {
                c = 0;
                ylo = yc[i] % sqrtBase;
                yhi = yc[i] / sqrtBase | 0;

                for ( k = xcL, j = i + k; j > i; ) {
                    xlo = xc[--k] % sqrtBase;
                    xhi = xc[k] / sqrtBase | 0;
                    m = yhi * xlo + xhi * ylo;
                    xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;
                    c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;
                    zc[j--] = xlo % base;
                }

                zc[j] = c;
            }

            if (c) {
                ++e;
            } else {
                zc.shift();
            }

            return normalise( y, zc, e );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toDigits() precision out of range: {sd}'
         * 'toDigits() precision not an integer: {sd}'
         * 'toDigits() rounding mode not an integer: {rm}'
         * 'toDigits() rounding mode out of range: {rm}'
         */
        P.toDigits = function ( sd, rm ) {
            var n = new BigNumber(this);
            sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;
            rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;
            return sd ? round( n, sd, rm ) : n;
        };


        /*
         * Return a string representing the value of this BigNumber in exponential notation and
         * rounded using ROUNDING_MODE to dp fixed decimal places.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toExponential() decimal places not an integer: {dp}'
         * 'toExponential() decimal places out of range: {dp}'
         * 'toExponential() rounding mode not an integer: {rm}'
         * 'toExponential() rounding mode out of range: {rm}'
         */
        P.toExponential = function ( dp, rm ) {
            return format( this,
              dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounding
         * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
         * but e.g. (-0.00001).toFixed(0) is '-0'.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFixed() decimal places not an integer: {dp}'
         * 'toFixed() decimal places out of range: {dp}'
         * 'toFixed() rounding mode not an integer: {rm}'
         * 'toFixed() rounding mode out of range: {rm}'
         */
        P.toFixed = function ( dp, rm ) {
            return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )
              ? ~~dp + this.e + 1 : null, rm, 20 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounded
         * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
         * of the FORMAT object (see BigNumber.config).
         *
         * FORMAT = {
         *      decimalSeparator : '.',
         *      groupSeparator : ',',
         *      groupSize : 3,
         *      secondaryGroupSize : 0,
         *      fractionGroupSeparator : '\xA0',    // non-breaking space
         *      fractionGroupSize : 0
         * };
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFormat() decimal places not an integer: {dp}'
         * 'toFormat() decimal places out of range: {dp}'
         * 'toFormat() rounding mode not an integer: {rm}'
         * 'toFormat() rounding mode out of range: {rm}'
         */
        P.toFormat = function ( dp, rm ) {
            var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )
              ? ~~dp + this.e + 1 : null, rm, 21 );

            if ( this.c ) {
                var i,
                    arr = str.split('.'),
                    g1 = +FORMAT.groupSize,
                    g2 = +FORMAT.secondaryGroupSize,
                    groupSeparator = FORMAT.groupSeparator,
                    intPart = arr[0],
                    fractionPart = arr[1],
                    isNeg = this.s < 0,
                    intDigits = isNeg ? intPart.slice(1) : intPart,
                    len = intDigits.length;

                if (g2) i = g1, g1 = g2, g2 = i, len -= i;

                if ( g1 > 0 && len > 0 ) {
                    i = len % g1 || g1;
                    intPart = intDigits.substr( 0, i );

                    for ( ; i < len; i += g1 ) {
                        intPart += groupSeparator + intDigits.substr( i, g1 );
                    }

                    if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);
                    if (isNeg) intPart = '-' + intPart;
                }

                str = fractionPart
                  ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )
                    ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ),
                      '$&' + FORMAT.fractionGroupSeparator )
                    : fractionPart )
                  : intPart;
            }

            return str;
        };


        /*
         * Return a string array representing the value of this BigNumber as a simple fraction with
         * an integer numerator and an integer denominator. The denominator will be a positive
         * non-zero value less than or equal to the specified maximum denominator. If a maximum
         * denominator is not specified, the denominator will be the lowest value necessary to
         * represent the number exactly.
         *
         * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.
         *
         * 'toFraction() max denominator not an integer: {md}'
         * 'toFraction() max denominator out of range: {md}'
         */
        P.toFraction = function (md) {
            var arr, d0, d2, e, exp, n, n0, q, s,
                k = ERRORS,
                x = this,
                xc = x.c,
                d = new BigNumber(ONE),
                n1 = d0 = new BigNumber(ONE),
                d1 = n0 = new BigNumber(ONE);

            if ( md != null ) {
                ERRORS = false;
                n = new BigNumber(md);
                ERRORS = k;

                if ( !( k = n.isInt() ) || n.lt(ONE) ) {

                    if (ERRORS) {
                        raise( 22,
                          'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );
                    }

                    // ERRORS is false:
                    // If md is a finite non-integer >= 1, round it to an integer and use it.
                    md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;
                }
            }

            if ( !xc ) return x.toString();
            s = coeffToString(xc);

            // Determine initial denominator.
            // d is a power of 10 and the minimum max denominator that specifies the value exactly.
            e = d.e = s.length - x.e - 1;
            d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];
            md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;

            exp = MAX_EXP;
            MAX_EXP = 1 / 0;
            n = new BigNumber(s);

            // n0 = d1 = 0
            n0.c[0] = 0;

            for ( ; ; )  {
                q = div( n, d, 0, 1 );
                d2 = d0.plus( q.times(d1) );
                if ( d2.cmp(md) == 1 ) break;
                d0 = d1;
                d1 = d2;
                n1 = n0.plus( q.times( d2 = n1 ) );
                n0 = d2;
                d = n.minus( q.times( d2 = d ) );
                n = d2;
            }

            d2 = div( md.minus(d0), d1, 0, 1 );
            n0 = n0.plus( d2.times(n1) );
            d0 = d0.plus( d2.times(d1) );
            n0.s = n1.s = x.s;
            e *= 2;

            // Determine which fraction is closer to x, n0/d0 or n1/d1
            arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(
                  div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1
                    ? [ n1.toString(), d1.toString() ]
                    : [ n0.toString(), d0.toString() ];

            MAX_EXP = exp;
            return arr;
        };


        /*
         * Return the value of this BigNumber converted to a number primitive.
         */
        P.toNumber = function () {
            var x = this;

            // Ensure zero has correct sign.
            return +x || ( x.s ? x.s * 0 : NaN );
        };


        /*
         * Return a BigNumber whose value is the value of this BigNumber raised to the power n.
         * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
         * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.
         *
         * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.
         * (Performs 54 loop iterations for n of 9007199254740992.)
         *
         * 'pow() exponent not an integer: {n}'
         * 'pow() exponent out of range: {n}'
         */
        P.toPower = P.pow = function (n) {
            var k, y,
                i = mathfloor( n < 0 ? -n : +n ),
                x = this;

            // Pass ±Infinity to Math.pow if exponent is out of range.
            if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&
              ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||
                parseFloat(n) != n && !( n = NaN ) ) ) {
                return new BigNumber( Math.pow( +x, n ) );
            }

            // Truncating each coefficient array to a length of k after each multiplication equates
            // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a
            // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)
            k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;
            y = new BigNumber(ONE);

            for ( ; ; ) {

                if ( i % 2 ) {
                    y = y.times(x);
                    if ( !y.c ) break;
                    if ( k && y.c.length > k ) y.c.length = k;
                }

                i = mathfloor( i / 2 );
                if ( !i ) break;

                x = x.times(x);
                if ( k && x.c && x.c.length > k ) x.c.length = k;
            }

            if ( n < 0 ) y = ONE.div(y);
            return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;
        };


        /*
         * Return a string representing the value of this BigNumber rounded to sd significant digits
         * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
         * necessary to represent the integer part of the value in fixed-point notation, then use
         * exponential notation.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toPrecision() precision not an integer: {sd}'
         * 'toPrecision() precision out of range: {sd}'
         * 'toPrecision() rounding mode not an integer: {rm}'
         * 'toPrecision() rounding mode out of range: {rm}'
         */
        P.toPrecision = function ( sd, rm ) {
            return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )
              ? sd | 0 : null, rm, 24 );
        };


        /*
         * Return a string representing the value of this BigNumber in base b, or base 10 if b is
         * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
         * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
         * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
         * TO_EXP_NEG, return exponential notation.
         *
         * [b] {number} Integer, 2 to 64 inclusive.
         *
         * 'toString() base not an integer: {b}'
         * 'toString() base out of range: {b}'
         */
        P.toString = function (b) {
            var str,
                n = this,
                s = n.s,
                e = n.e;

            // Infinity or NaN?
            if ( e === null ) {

                if (s) {
                    str = 'Infinity';
                    if ( s < 0 ) str = '-' + str;
                } else {
                    str = 'NaN';
                }
            } else {
                str = coeffToString( n.c );

                if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {
                    str = e <= TO_EXP_NEG || e >= TO_EXP_POS
                      ? toExponential( str, e )
                      : toFixedPoint( str, e );
                } else {
                    str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );
                }

                if ( s < 0 && n.c[0] ) str = '-' + str;
            }

            return str;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole
         * number.
         */
        P.truncated = P.trunc = function () {
            return round( new BigNumber(this), this.e + 1, 1 );
        };



        /*
         * Return as toString, but do not accept a base argument.
         */
        P.valueOf = P.toJSON = function () {
            return this.toString();
        };


        // Aliases for BigDecimal methods.
        //P.add = P.plus;         // P.add included above
        //P.subtract = P.minus;   // P.sub included above
        //P.multiply = P.times;   // P.mul included above
        //P.divide = P.div;
        //P.remainder = P.mod;
        //P.compareTo = P.cmp;
        //P.negate = P.neg;


        if ( configObj != null ) BigNumber.config(configObj);

        return BigNumber;
    }


    // PRIVATE HELPER FUNCTIONS


    function bitFloor(n) {
        var i = n | 0;
        return n > 0 || n === i ? i : i - 1;
    }


    // Return a coefficient array as a string of base 10 digits.
    function coeffToString(a) {
        var s, z,
            i = 1,
            j = a.length,
            r = a[0] + '';

        for ( ; i < j; ) {
            s = a[i++] + '';
            z = LOG_BASE - s.length;
            for ( ; z--; s = '0' + s );
            r += s;
        }

        // Determine trailing zeros.
        for ( j = r.length; r.charCodeAt(--j) === 48; );
        return r.slice( 0, j + 1 || 1 );
    }


    // Compare the value of BigNumbers x and y.
    function compare( x, y ) {
        var a, b,
            xc = x.c,
            yc = y.c,
            i = x.s,
            j = y.s,
            k = x.e,
            l = y.e;

        // Either NaN?
        if ( !i || !j ) return null;

        a = xc && !xc[0];
        b = yc && !yc[0];

        // Either zero?
        if ( a || b ) return a ? b ? 0 : -j : i;

        // Signs differ?
        if ( i != j ) return i;

        a = i < 0;
        b = k == l;

        // Either Infinity?
        if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;

        // Compare exponents.
        if ( !b ) return k > l ^ a ? 1 : -1;

        j = ( k = xc.length ) < ( l = yc.length ) ? k : l;

        // Compare digit by digit.
        for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;

        // Compare lengths.
        return k == l ? 0 : k > l ^ a ? 1 : -1;
    }


    /*
     * Return true if n is a valid number in range, otherwise false.
     * Use for argument validation when ERRORS is false.
     * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.
     */
    function intValidatorNoErrors( n, min, max ) {
        return ( n = truncate(n) ) >= min && n <= max;
    }


    function isArray(obj) {
        return Object.prototype.toString.call(obj) == '[object Array]';
    }


    /*
     * Convert string of baseIn to an array of numbers of baseOut.
     * Eg. convertBase('255', 10, 16) returns [15, 15].
     * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].
     */
    function toBaseOut( str, baseIn, baseOut ) {
        var j,
            arr = [0],
            arrL,
            i = 0,
            len = str.length;

        for ( ; i < len; ) {
            for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );
            arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );

            for ( ; j < arr.length; j++ ) {

                if ( arr[j] > baseOut - 1 ) {
                    if ( arr[j + 1] == null ) arr[j + 1] = 0;
                    arr[j + 1] += arr[j] / baseOut | 0;
                    arr[j] %= baseOut;
                }
            }
        }

        return arr.reverse();
    }


    function toExponential( str, e ) {
        return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +
          ( e < 0 ? 'e' : 'e+' ) + e;
    }


    function toFixedPoint( str, e ) {
        var len, z;

        // Negative exponent?
        if ( e < 0 ) {

            // Prepend zeros.
            for ( z = '0.'; ++e; z += '0' );
            str = z + str;

        // Positive exponent
        } else {
            len = str.length;

            // Append zeros.
            if ( ++e > len ) {
                for ( z = '0', e -= len; --e; z += '0' );
                str += z;
            } else if ( e < len ) {
                str = str.slice( 0, e ) + '.' + str.slice(e);
            }
        }

        return str;
    }


    function truncate(n) {
        n = parseFloat(n);
        return n < 0 ? mathceil(n) : mathfloor(n);
    }


    // EXPORT


    BigNumber = another();

    // AMD.
    if ( true ) {
        !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return BigNumber; }.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

    // Node and other environments that support module.exports.
    } else if ( typeof module != 'undefined' && module.exports ) {
        module.exports = BigNumber;
        if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}

    // Browser.
    } else {
        global.BigNumber = BigNumber;
    }
})(this);


/***/ }),
/* 109 */
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  return it;
};


/***/ }),
/* 110 */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),
/* 111 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(61);
var call = __webpack_require__(298);
var isArrayIter = __webpack_require__(297);
var anObject = __webpack_require__(75);
var toLength = __webpack_require__(150);
var getIterFn = __webpack_require__(312);
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
  var f = ctx(fn, that, entries ? 2 : 1);
  var index = 0;
  var length, step, iterator, result;
  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
  // fast case for arrays with default iterator
  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
    if (result === BREAK || result === RETURN) return result;
  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
    result = call(iterator, f, step.value, entries);
    if (result === BREAK || result === RETURN) return result;
  }
};
exports.BREAK = BREAK;
exports.RETURN = RETURN;


/***/ }),
/* 112 */
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),
/* 113 */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 114 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__(197);
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),
/* 115 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(151));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./x64-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (Math) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_x64 = C.x64;
	    var X64Word = C_x64.Word;
	    var C_algo = C.algo;

	    // Constants tables
	    var RHO_OFFSETS = [];
	    var PI_INDEXES  = [];
	    var ROUND_CONSTANTS = [];

	    // Compute Constants
	    (function () {
	        // Compute rho offset constants
	        var x = 1, y = 0;
	        for (var t = 0; t < 24; t++) {
	            RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;

	            var newX = y % 5;
	            var newY = (2 * x + 3 * y) % 5;
	            x = newX;
	            y = newY;
	        }

	        // Compute pi index constants
	        for (var x = 0; x < 5; x++) {
	            for (var y = 0; y < 5; y++) {
	                PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
	            }
	        }

	        // Compute round constants
	        var LFSR = 0x01;
	        for (var i = 0; i < 24; i++) {
	            var roundConstantMsw = 0;
	            var roundConstantLsw = 0;

	            for (var j = 0; j < 7; j++) {
	                if (LFSR & 0x01) {
	                    var bitPosition = (1 << j) - 1;
	                    if (bitPosition < 32) {
	                        roundConstantLsw ^= 1 << bitPosition;
	                    } else /* if (bitPosition >= 32) */ {
	                        roundConstantMsw ^= 1 << (bitPosition - 32);
	                    }
	                }

	                // Compute next LFSR
	                if (LFSR & 0x80) {
	                    // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
	                    LFSR = (LFSR << 1) ^ 0x71;
	                } else {
	                    LFSR <<= 1;
	                }
	            }

	            ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
	        }
	    }());

	    // Reusable objects for temporary values
	    var T = [];
	    (function () {
	        for (var i = 0; i < 25; i++) {
	            T[i] = X64Word.create();
	        }
	    }());

	    /**
	     * SHA-3 hash algorithm.
	     */
	    var SHA3 = C_algo.SHA3 = Hasher.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {number} outputLength
	         *   The desired number of bits in the output hash.
	         *   Only values permitted are: 224, 256, 384, 512.
	         *   Default: 512
	         */
	        cfg: Hasher.cfg.extend({
	            outputLength: 512
	        }),

	        _doReset: function () {
	            var state = this._state = []
	            for (var i = 0; i < 25; i++) {
	                state[i] = new X64Word.init();
	            }

	            this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcuts
	            var state = this._state;
	            var nBlockSizeLanes = this.blockSize / 2;

	            // Absorb
	            for (var i = 0; i < nBlockSizeLanes; i++) {
	                // Shortcuts
	                var M2i  = M[offset + 2 * i];
	                var M2i1 = M[offset + 2 * i + 1];

	                // Swap endian
	                M2i = (
	                    (((M2i << 8)  | (M2i >>> 24)) & 0x00ff00ff) |
	                    (((M2i << 24) | (M2i >>> 8))  & 0xff00ff00)
	                );
	                M2i1 = (
	                    (((M2i1 << 8)  | (M2i1 >>> 24)) & 0x00ff00ff) |
	                    (((M2i1 << 24) | (M2i1 >>> 8))  & 0xff00ff00)
	                );

	                // Absorb message into state
	                var lane = state[i];
	                lane.high ^= M2i1;
	                lane.low  ^= M2i;
	            }

	            // Rounds
	            for (var round = 0; round < 24; round++) {
	                // Theta
	                for (var x = 0; x < 5; x++) {
	                    // Mix column lanes
	                    var tMsw = 0, tLsw = 0;
	                    for (var y = 0; y < 5; y++) {
	                        var lane = state[x + 5 * y];
	                        tMsw ^= lane.high;
	                        tLsw ^= lane.low;
	                    }

	                    // Temporary values
	                    var Tx = T[x];
	                    Tx.high = tMsw;
	                    Tx.low  = tLsw;
	                }
	                for (var x = 0; x < 5; x++) {
	                    // Shortcuts
	                    var Tx4 = T[(x + 4) % 5];
	                    var Tx1 = T[(x + 1) % 5];
	                    var Tx1Msw = Tx1.high;
	                    var Tx1Lsw = Tx1.low;

	                    // Mix surrounding columns
	                    var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
	                    var tLsw = Tx4.low  ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
	                    for (var y = 0; y < 5; y++) {
	                        var lane = state[x + 5 * y];
	                        lane.high ^= tMsw;
	                        lane.low  ^= tLsw;
	                    }
	                }

	                // Rho Pi
	                for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
	                    // Shortcuts
	                    var lane = state[laneIndex];
	                    var laneMsw = lane.high;
	                    var laneLsw = lane.low;
	                    var rhoOffset = RHO_OFFSETS[laneIndex];

	                    // Rotate lanes
	                    if (rhoOffset < 32) {
	                        var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
	                        var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
	                    } else /* if (rhoOffset >= 32) */ {
	                        var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
	                        var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
	                    }

	                    // Transpose lanes
	                    var TPiLane = T[PI_INDEXES[laneIndex]];
	                    TPiLane.high = tMsw;
	                    TPiLane.low  = tLsw;
	                }

	                // Rho pi at x = y = 0
	                var T0 = T[0];
	                var state0 = state[0];
	                T0.high = state0.high;
	                T0.low  = state0.low;

	                // Chi
	                for (var x = 0; x < 5; x++) {
	                    for (var y = 0; y < 5; y++) {
	                        // Shortcuts
	                        var laneIndex = x + 5 * y;
	                        var lane = state[laneIndex];
	                        var TLane = T[laneIndex];
	                        var Tx1Lane = T[((x + 1) % 5) + 5 * y];
	                        var Tx2Lane = T[((x + 2) % 5) + 5 * y];

	                        // Mix rows
	                        lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
	                        lane.low  = TLane.low  ^ (~Tx1Lane.low  & Tx2Lane.low);
	                    }
	                }

	                // Iota
	                var lane = state[0];
	                var roundConstant = ROUND_CONSTANTS[round];
	                lane.high ^= roundConstant.high;
	                lane.low  ^= roundConstant.low;;
	            }
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;
	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;
	            var blockSizeBits = this.blockSize * 32;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
	            dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
	            data.sigBytes = dataWords.length * 4;

	            // Hash final blocks
	            this._process();

	            // Shortcuts
	            var state = this._state;
	            var outputLengthBytes = this.cfg.outputLength / 8;
	            var outputLengthLanes = outputLengthBytes / 8;

	            // Squeeze
	            var hashWords = [];
	            for (var i = 0; i < outputLengthLanes; i++) {
	                // Shortcuts
	                var lane = state[i];
	                var laneMsw = lane.high;
	                var laneLsw = lane.low;

	                // Swap endian
	                laneMsw = (
	                    (((laneMsw << 8)  | (laneMsw >>> 24)) & 0x00ff00ff) |
	                    (((laneMsw << 24) | (laneMsw >>> 8))  & 0xff00ff00)
	                );
	                laneLsw = (
	                    (((laneLsw << 8)  | (laneLsw >>> 24)) & 0x00ff00ff) |
	                    (((laneLsw << 24) | (laneLsw >>> 8))  & 0xff00ff00)
	                );

	                // Squeeze state to retrieve hash
	                hashWords.push(laneLsw);
	                hashWords.push(laneMsw);
	            }

	            // Return final computed hash
	            return new WordArray.init(hashWords, outputLengthBytes);
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);

	            var state = clone._state = this._state.slice(0);
	            for (var i = 0; i < 25; i++) {
	                state[i] = state[i].clone();
	            }

	            return clone;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA3('message');
	     *     var hash = CryptoJS.SHA3(wordArray);
	     */
	    C.SHA3 = Hasher._createHelper(SHA3);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA3(message, key);
	     */
	    C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
	}(Math));


	return CryptoJS.SHA3;

}));

/***/ }),
/* 116 */
/***/ (function(module, exports, __webpack_require__) {

// Basic Javascript Elliptic Curve implementation
// Ported loosely from BouncyCastle's Java EC code
// Only Fp curves implemented for now

// Requires jsbn.js and jsbn2.js
var BigInteger = __webpack_require__(63).BigInteger
var Barrett = BigInteger.prototype.Barrett

// ----------------
// ECFieldElementFp

// constructor
function ECFieldElementFp(q,x) {
    this.x = x;
    // TODO if(x.compareTo(q) >= 0) error
    this.q = q;
}

function feFpEquals(other) {
    if(other == this) return true;
    return (this.q.equals(other.q) && this.x.equals(other.x));
}

function feFpToBigInteger() {
    return this.x;
}

function feFpNegate() {
    return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));
}

function feFpAdd(b) {
    return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));
}

function feFpSubtract(b) {
    return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));
}

function feFpMultiply(b) {
    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));
}

function feFpSquare() {
    return new ECFieldElementFp(this.q, this.x.square().mod(this.q));
}

function feFpDivide(b) {
    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));
}

ECFieldElementFp.prototype.equals = feFpEquals;
ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;
ECFieldElementFp.prototype.negate = feFpNegate;
ECFieldElementFp.prototype.add = feFpAdd;
ECFieldElementFp.prototype.subtract = feFpSubtract;
ECFieldElementFp.prototype.multiply = feFpMultiply;
ECFieldElementFp.prototype.square = feFpSquare;
ECFieldElementFp.prototype.divide = feFpDivide;

// ----------------
// ECPointFp

// constructor
function ECPointFp(curve,x,y,z) {
    this.curve = curve;
    this.x = x;
    this.y = y;
    // Projective coordinates: either zinv == null or z * zinv == 1
    // z and zinv are just BigIntegers, not fieldElements
    if(z == null) {
      this.z = BigInteger.ONE;
    }
    else {
      this.z = z;
    }
    this.zinv = null;
    //TODO: compression flag
}

function pointFpGetX() {
    if(this.zinv == null) {
      this.zinv = this.z.modInverse(this.curve.q);
    }
    var r = this.x.toBigInteger().multiply(this.zinv);
    this.curve.reduce(r);
    return this.curve.fromBigInteger(r);
}

function pointFpGetY() {
    if(this.zinv == null) {
      this.zinv = this.z.modInverse(this.curve.q);
    }
    var r = this.y.toBigInteger().multiply(this.zinv);
    this.curve.reduce(r);
    return this.curve.fromBigInteger(r);
}

function pointFpEquals(other) {
    if(other == this) return true;
    if(this.isInfinity()) return other.isInfinity();
    if(other.isInfinity()) return this.isInfinity();
    var u, v;
    // u = Y2 * Z1 - Y1 * Z2
    u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);
    if(!u.equals(BigInteger.ZERO)) return false;
    // v = X2 * Z1 - X1 * Z2
    v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);
    return v.equals(BigInteger.ZERO);
}

function pointFpIsInfinity() {
    if((this.x == null) && (this.y == null)) return true;
    return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);
}

function pointFpNegate() {
    return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);
}

function pointFpAdd(b) {
    if(this.isInfinity()) return b;
    if(b.isInfinity()) return this;

    // u = Y2 * Z1 - Y1 * Z2
    var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);
    // v = X2 * Z1 - X1 * Z2
    var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);

    if(BigInteger.ZERO.equals(v)) {
        if(BigInteger.ZERO.equals(u)) {
            return this.twice(); // this == b, so double
        }
	return this.curve.getInfinity(); // this = -b, so infinity
    }

    var THREE = new BigInteger("3");
    var x1 = this.x.toBigInteger();
    var y1 = this.y.toBigInteger();
    var x2 = b.x.toBigInteger();
    var y2 = b.y.toBigInteger();

    var v2 = v.square();
    var v3 = v2.multiply(v);
    var x1v2 = x1.multiply(v2);
    var zu2 = u.square().multiply(this.z);

    // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
    var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);
    // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
    var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);
    // z3 = v^3 * z1 * z2
    var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);

    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
}

function pointFpTwice() {
    if(this.isInfinity()) return this;
    if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();

    // TODO: optimized handling of constants
    var THREE = new BigInteger("3");
    var x1 = this.x.toBigInteger();
    var y1 = this.y.toBigInteger();

    var y1z1 = y1.multiply(this.z);
    var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);
    var a = this.curve.a.toBigInteger();

    // w = 3 * x1^2 + a * z1^2
    var w = x1.square().multiply(THREE);
    if(!BigInteger.ZERO.equals(a)) {
      w = w.add(this.z.square().multiply(a));
    }
    w = w.mod(this.curve.q);
    //this.curve.reduce(w);
    // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
    var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);
    // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
    var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);
    // z3 = 8 * (y1 * z1)^3
    var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);

    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
}

// Simple NAF (Non-Adjacent Form) multiplication algorithm
// TODO: modularize the multiplication algorithm
function pointFpMultiply(k) {
    if(this.isInfinity()) return this;
    if(k.signum() == 0) return this.curve.getInfinity();

    var e = k;
    var h = e.multiply(new BigInteger("3"));

    var neg = this.negate();
    var R = this;

    var i;
    for(i = h.bitLength() - 2; i > 0; --i) {
	R = R.twice();

	var hBit = h.testBit(i);
	var eBit = e.testBit(i);

	if (hBit != eBit) {
	    R = R.add(hBit ? this : neg);
	}
    }

    return R;
}

// Compute this*j + x*k (simultaneous multiplication)
function pointFpMultiplyTwo(j,x,k) {
  var i;
  if(j.bitLength() > k.bitLength())
    i = j.bitLength() - 1;
  else
    i = k.bitLength() - 1;

  var R = this.curve.getInfinity();
  var both = this.add(x);
  while(i >= 0) {
    R = R.twice();
    if(j.testBit(i)) {
      if(k.testBit(i)) {
        R = R.add(both);
      }
      else {
        R = R.add(this);
      }
    }
    else {
      if(k.testBit(i)) {
        R = R.add(x);
      }
    }
    --i;
  }

  return R;
}

ECPointFp.prototype.getX = pointFpGetX;
ECPointFp.prototype.getY = pointFpGetY;
ECPointFp.prototype.equals = pointFpEquals;
ECPointFp.prototype.isInfinity = pointFpIsInfinity;
ECPointFp.prototype.negate = pointFpNegate;
ECPointFp.prototype.add = pointFpAdd;
ECPointFp.prototype.twice = pointFpTwice;
ECPointFp.prototype.multiply = pointFpMultiply;
ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;

// ----------------
// ECCurveFp

// constructor
function ECCurveFp(q,a,b) {
    this.q = q;
    this.a = this.fromBigInteger(a);
    this.b = this.fromBigInteger(b);
    this.infinity = new ECPointFp(this, null, null);
    this.reducer = new Barrett(this.q);
}

function curveFpGetQ() {
    return this.q;
}

function curveFpGetA() {
    return this.a;
}

function curveFpGetB() {
    return this.b;
}

function curveFpEquals(other) {
    if(other == this) return true;
    return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));
}

function curveFpGetInfinity() {
    return this.infinity;
}

function curveFpFromBigInteger(x) {
    return new ECFieldElementFp(this.q, x);
}

function curveReduce(x) {
    this.reducer.reduce(x);
}

// for now, work with hex strings because they're easier in JS
function curveFpDecodePointHex(s) {
    switch(parseInt(s.substr(0,2), 16)) { // first byte
    case 0:
	return this.infinity;
    case 2:
    case 3:
	// point compression not supported yet
	return null;
    case 4:
    case 6:
    case 7:
	var len = (s.length - 2) / 2;
	var xHex = s.substr(2, len);
	var yHex = s.substr(len+2, len);

	return new ECPointFp(this,
			     this.fromBigInteger(new BigInteger(xHex, 16)),
			     this.fromBigInteger(new BigInteger(yHex, 16)));

    default: // unsupported
	return null;
    }
}

function curveFpEncodePointHex(p) {
	if (p.isInfinity()) return "00";
	var xHex = p.getX().toBigInteger().toString(16);
	var yHex = p.getY().toBigInteger().toString(16);
	var oLen = this.getQ().toString(16).length;
	if ((oLen % 2) != 0) oLen++;
	while (xHex.length < oLen) {
		xHex = "0" + xHex;
	}
	while (yHex.length < oLen) {
		yHex = "0" + yHex;
	}
	return "04" + xHex + yHex;
}

ECCurveFp.prototype.getQ = curveFpGetQ;
ECCurveFp.prototype.getA = curveFpGetA;
ECCurveFp.prototype.getB = curveFpGetB;
ECCurveFp.prototype.equals = curveFpEquals;
ECCurveFp.prototype.getInfinity = curveFpGetInfinity;
ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;
ECCurveFp.prototype.reduce = curveReduce;
//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;
ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;

// from: https://github.com/kaielvin/jsbn-ec-point-compression
ECCurveFp.prototype.decodePointHex = function(s)
{
	var yIsEven;
    switch(parseInt(s.substr(0,2), 16)) { // first byte
    case 0:
	return this.infinity;
    case 2:
	yIsEven = false;
    case 3:
	if(yIsEven == undefined) yIsEven = true;
	var len = s.length - 2;
	var xHex = s.substr(2, len);
	var x = this.fromBigInteger(new BigInteger(xHex,16));
	var alpha = x.multiply(x.square().add(this.getA())).add(this.getB());
	var beta = alpha.sqrt();

    if (beta == null) throw "Invalid point compression";

    var betaValue = beta.toBigInteger();
    if (betaValue.testBit(0) != yIsEven)
    {
        // Use the other root
        beta = this.fromBigInteger(this.getQ().subtract(betaValue));
    }
    return new ECPointFp(this,x,beta);
    case 4:
    case 6:
    case 7:
	var len = (s.length - 2) / 2;
	var xHex = s.substr(2, len);
	var yHex = s.substr(len+2, len);

	return new ECPointFp(this,
			     this.fromBigInteger(new BigInteger(xHex, 16)),
			     this.fromBigInteger(new BigInteger(yHex, 16)));

    default: // unsupported
	return null;
    }
}
ECCurveFp.prototype.encodeCompressedPointHex = function(p)
{
	if (p.isInfinity()) return "00";
	var xHex = p.getX().toBigInteger().toString(16);
	var oLen = this.getQ().toString(16).length;
	if ((oLen % 2) != 0) oLen++;
	while (xHex.length < oLen)
		xHex = "0" + xHex;
	var yPrefix;
	if(p.getY().toBigInteger().isEven()) yPrefix = "02";
	else                                 yPrefix = "03";

	return yPrefix + xHex;
}


ECFieldElementFp.prototype.getR = function()
{
	if(this.r != undefined) return this.r;

    this.r = null;
    var bitLength = this.q.bitLength();
    if (bitLength > 128)
    {
        var firstWord = this.q.shiftRight(bitLength - 64);
        if (firstWord.intValue() == -1)
        {
            this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q);
        }
    }
    return this.r;
}
ECFieldElementFp.prototype.modMult = function(x1,x2)
{
    return this.modReduce(x1.multiply(x2));
}
ECFieldElementFp.prototype.modReduce = function(x)
{
    if (this.getR() != null)
    {
        var qLen = q.bitLength();
        while (x.bitLength() > (qLen + 1))
        {
            var u = x.shiftRight(qLen);
            var v = x.subtract(u.shiftLeft(qLen));
            if (!this.getR().equals(BigInteger.ONE))
            {
                u = u.multiply(this.getR());
            }
            x = u.add(v); 
        }
        while (x.compareTo(q) >= 0)
        {
            x = x.subtract(q);
        }
    }
    else
    {
        x = x.mod(q);
    }
    return x;
}
ECFieldElementFp.prototype.sqrt = function()
{
    if (!this.q.testBit(0)) throw "unsupported";

    // p mod 4 == 3
    if (this.q.testBit(1))
    {
    	var z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q));
    	return z.square().equals(this) ? z : null;
    }

    // p mod 4 == 1
    var qMinusOne = this.q.subtract(BigInteger.ONE);

    var legendreExponent = qMinusOne.shiftRight(1);
    if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE)))
    {
        return null;
    }

    var u = qMinusOne.shiftRight(2);
    var k = u.shiftLeft(1).add(BigInteger.ONE);

    var Q = this.x;
    var fourQ = modDouble(modDouble(Q));

    var U, V;
    do
    {
        var P;
        do
        {
            P = new BigInteger(this.q.bitLength(), new SecureRandom());
        }
        while (P.compareTo(this.q) >= 0
            || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne)));

        var result = this.lucasSequence(P, Q, k);
        U = result[0];
        V = result[1];

        if (this.modMult(V, V).equals(fourQ))
        {
            // Integer division by 2, mod q
            if (V.testBit(0))
            {
                V = V.add(q);
            }

            V = V.shiftRight(1);

            return new ECFieldElementFp(q,V);
        }
    }
    while (U.equals(BigInteger.ONE) || U.equals(qMinusOne));

    return null;
}
ECFieldElementFp.prototype.lucasSequence = function(P,Q,k)
{
    var n = k.bitLength();
    var s = k.getLowestSetBit();

    var Uh = BigInteger.ONE;
    var Vl = BigInteger.TWO;
    var Vh = P;
    var Ql = BigInteger.ONE;
    var Qh = BigInteger.ONE;

    for (var j = n - 1; j >= s + 1; --j)
    {
        Ql = this.modMult(Ql, Qh);

        if (k.testBit(j))
        {
            Qh = this.modMult(Ql, Q);
            Uh = this.modMult(Uh, Vh);
            Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
            Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1)));
        }
        else
        {
            Qh = Ql;
            Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));
            Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
            Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));
        }
    }

    Ql = this.modMult(Ql, Qh);
    Qh = this.modMult(Ql, Q);
    Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));
    Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
    Ql = this.modMult(Ql, Qh);

    for (var j = 1; j <= s; ++j)
    {
        Uh = this.modMult(Uh, Vl);
        Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));
        Ql = this.modMult(Ql, Ql);
    }

    return [ Uh, Vl ];
}

var exports = {
  ECCurveFp: ECCurveFp,
  ECPointFp: ECPointFp,
  ECFieldElementFp: ECFieldElementFp
}

module.exports = exports


/***/ }),
/* 117 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_RESULT__;/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */

;(function (global) {
    'use strict';

    /*
      bignumber.js v2.0.7
      A JavaScript library for arbitrary-precision arithmetic.
      https://github.com/MikeMcl/bignumber.js
      Copyright (c) 2015 Michael Mclaughlin <M8ch88l@gmail.com>
      MIT Expat Licence
    */


    var BigNumber, crypto, parseNumeric,
        isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
        mathceil = Math.ceil,
        mathfloor = Math.floor,
        notBool = ' not a boolean or binary digit',
        roundingMode = 'rounding mode',
        tooManyDigits = 'number type has more than 15 significant digits',
        ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',
        BASE = 1e14,
        LOG_BASE = 14,
        MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
        // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
        POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
        SQRT_BASE = 1e7,

        /*
         * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
         * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an
         * exception is thrown (if ERRORS is true).
         */
        MAX = 1E9;                                   // 0 to MAX_INT32


    /*
     * Create and return a BigNumber constructor.
     */
    function another(configObj) {
        var div,

            // id tracks the caller function, so its name can be included in error messages.
            id = 0,
            P = BigNumber.prototype,
            ONE = new BigNumber(1),


            /********************************* EDITABLE DEFAULTS **********************************/


            /*
             * The default values below must be integers within the inclusive ranges stated.
             * The values can also be changed at run-time using BigNumber.config.
             */

            // The maximum number of decimal places for operations involving division.
            DECIMAL_PLACES = 20,                     // 0 to MAX

            /*
             * The rounding mode used when rounding to the above decimal places, and when using
             * toExponential, toFixed, toFormat and toPrecision, and round (default value).
             * UP         0 Away from zero.
             * DOWN       1 Towards zero.
             * CEIL       2 Towards +Infinity.
             * FLOOR      3 Towards -Infinity.
             * HALF_UP    4 Towards nearest neighbour. If equidistant, up.
             * HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
             * HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
             * HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
             * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
             */
            ROUNDING_MODE = 4,                       // 0 to 8

            // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

            // The exponent value at and beneath which toString returns exponential notation.
            // Number type: -7
            TO_EXP_NEG = -7,                         // 0 to -MAX

            // The exponent value at and above which toString returns exponential notation.
            // Number type: 21
            TO_EXP_POS = 21,                         // 0 to MAX

            // RANGE : [MIN_EXP, MAX_EXP]

            // The minimum exponent value, beneath which underflow to zero occurs.
            // Number type: -324  (5e-324)
            MIN_EXP = -1e7,                          // -1 to -MAX

            // The maximum exponent value, above which overflow to Infinity occurs.
            // Number type:  308  (1.7976931348623157e+308)
            // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
            MAX_EXP = 1e7,                           // 1 to MAX

            // Whether BigNumber Errors are ever thrown.
            ERRORS = true,                           // true or false

            // Change to intValidatorNoErrors if ERRORS is false.
            isValidInt = intValidatorWithErrors,     // intValidatorWithErrors/intValidatorNoErrors

            // Whether to use cryptographically-secure random number generation, if available.
            CRYPTO = false,                          // true or false

            /*
             * The modulo mode used when calculating the modulus: a mod n.
             * The quotient (q = a / n) is calculated according to the corresponding rounding mode.
             * The remainder (r) is calculated as: r = a - n * q.
             *
             * UP        0 The remainder is positive if the dividend is negative, else is negative.
             * DOWN      1 The remainder has the same sign as the dividend.
             *             This modulo mode is commonly known as 'truncated division' and is
             *             equivalent to (a % n) in JavaScript.
             * FLOOR     3 The remainder has the same sign as the divisor (Python %).
             * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
             * EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
             *             The remainder is always positive.
             *
             * The truncated division, floored division, Euclidian division and IEEE 754 remainder
             * modes are commonly used for the modulus operation.
             * Although the other rounding modes can also be used, they may not give useful results.
             */
            MODULO_MODE = 1,                         // 0 to 9

            // The maximum number of significant digits of the result of the toPower operation.
            // If POW_PRECISION is 0, there will be unlimited significant digits.
            POW_PRECISION = 100,                     // 0 to MAX

            // The format specification used by the BigNumber.prototype.toFormat method.
            FORMAT = {
                decimalSeparator: '.',
                groupSeparator: ',',
                groupSize: 3,
                secondaryGroupSize: 0,
                fractionGroupSeparator: '\xA0',      // non-breaking space
                fractionGroupSize: 0
            };


        /******************************************************************************************/


        // CONSTRUCTOR


        /*
         * The BigNumber constructor and exported function.
         * Create and return a new instance of a BigNumber object.
         *
         * n {number|string|BigNumber} A numeric value.
         * [b] {number} The base of n. Integer, 2 to 64 inclusive.
         */
        function BigNumber( n, b ) {
            var c, e, i, num, len, str,
                x = this;

            // Enable constructor usage without new.
            if ( !( x instanceof BigNumber ) ) {

                // 'BigNumber() constructor call without new: {n}'
                if (ERRORS) raise( 26, 'constructor call without new', n );
                return new BigNumber( n, b );
            }

            // 'new BigNumber() base not an integer: {b}'
            // 'new BigNumber() base out of range: {b}'
            if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {

                // Duplicate.
                if ( n instanceof BigNumber ) {
                    x.s = n.s;
                    x.e = n.e;
                    x.c = ( n = n.c ) ? n.slice() : n;
                    id = 0;
                    return;
                }

                if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {
                    x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;

                    // Fast path for integers.
                    if ( n === ~~n ) {
                        for ( e = 0, i = n; i >= 10; i /= 10, e++ );
                        x.e = e;
                        x.c = [n];
                        id = 0;
                        return;
                    }

                    str = n + '';
                } else {
                    if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }
            } else {
                b = b | 0;
                str = n + '';

                // Ensure return value is rounded to DECIMAL_PLACES as with other bases.
                // Allow exponential notation to be used with base 10 argument.
                if ( b == 10 ) {
                    x = new BigNumber( n instanceof BigNumber ? n : str );
                    return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );
                }

                // Avoid potential interpretation of Infinity and NaN as base 44+ values.
                // Any number in exponential form will fail due to the [Ee][+-].
                if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||
                  !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +
                    '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {
                    return parseNumeric( x, str, num, b );
                }

                if (num) {
                    x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;

                    if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) {

                        // 'new BigNumber() number type has more than 15 significant digits: {n}'
                        raise( id, tooManyDigits, n );
                    }

                    // Prevent later check for length on converted number.
                    num = false;
                } else {
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }

                str = convertBase( str, 10, b, x.s );
            }

            // Decimal point?
            if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );

            // Exponential form?
            if ( ( i = str.search( /e/i ) ) > 0 ) {

                // Determine exponent.
                if ( e < 0 ) e = i;
                e += +str.slice( i + 1 );
                str = str.substring( 0, i );
            } else if ( e < 0 ) {

                // Integer.
                e = str.length;
            }

            // Determine leading zeros.
            for ( i = 0; str.charCodeAt(i) === 48; i++ );

            // Determine trailing zeros.
            for ( len = str.length; str.charCodeAt(--len) === 48; );
            str = str.slice( i, len + 1 );

            if (str) {
                len = str.length;

                // Disallow numbers with over 15 significant digits if number type.
                // 'new BigNumber() number type has more than 15 significant digits: {n}'
                if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );

                e = e - i - 1;

                 // Overflow?
                if ( e > MAX_EXP ) {

                    // Infinity.
                    x.c = x.e = null;

                // Underflow?
                } else if ( e < MIN_EXP ) {

                    // Zero.
                    x.c = [ x.e = 0 ];
                } else {
                    x.e = e;
                    x.c = [];

                    // Transform base

                    // e is the base 10 exponent.
                    // i is where to slice str to get the first element of the coefficient array.
                    i = ( e + 1 ) % LOG_BASE;
                    if ( e < 0 ) i += LOG_BASE;

                    if ( i < len ) {
                        if (i) x.c.push( +str.slice( 0, i ) );

                        for ( len -= LOG_BASE; i < len; ) {
                            x.c.push( +str.slice( i, i += LOG_BASE ) );
                        }

                        str = str.slice(i);
                        i = LOG_BASE - str.length;
                    } else {
                        i -= len;
                    }

                    for ( ; i--; str += '0' );
                    x.c.push( +str );
                }
            } else {

                // Zero.
                x.c = [ x.e = 0 ];
            }

            id = 0;
        }


        // CONSTRUCTOR PROPERTIES


        BigNumber.another = another;

        BigNumber.ROUND_UP = 0;
        BigNumber.ROUND_DOWN = 1;
        BigNumber.ROUND_CEIL = 2;
        BigNumber.ROUND_FLOOR = 3;
        BigNumber.ROUND_HALF_UP = 4;
        BigNumber.ROUND_HALF_DOWN = 5;
        BigNumber.ROUND_HALF_EVEN = 6;
        BigNumber.ROUND_HALF_CEIL = 7;
        BigNumber.ROUND_HALF_FLOOR = 8;
        BigNumber.EUCLID = 9;


        /*
         * Configure infrequently-changing library-wide settings.
         *
         * Accept an object or an argument list, with one or many of the following properties or
         * parameters respectively:
         *
         *   DECIMAL_PLACES  {number}  Integer, 0 to MAX inclusive
         *   ROUNDING_MODE   {number}  Integer, 0 to 8 inclusive
         *   EXPONENTIAL_AT  {number|number[]}  Integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to 0 incl., 0 to MAX incl.]
         *   RANGE           {number|number[]}  Non-zero integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to -1 incl., integer 1 to MAX incl.]
         *   ERRORS          {boolean|number}   true, false, 1 or 0
         *   CRYPTO          {boolean|number}   true, false, 1 or 0
         *   MODULO_MODE     {number}           0 to 9 inclusive
         *   POW_PRECISION   {number}           0 to MAX inclusive
         *   FORMAT          {object}           See BigNumber.prototype.toFormat
         *      decimalSeparator       {string}
         *      groupSeparator         {string}
         *      groupSize              {number}
         *      secondaryGroupSize     {number}
         *      fractionGroupSeparator {string}
         *      fractionGroupSize      {number}
         *
         * (The values assigned to the above FORMAT object properties are not checked for validity.)
         *
         * E.g.
         * BigNumber.config(20, 4) is equivalent to
         * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
         *
         * Ignore properties/parameters set to null or undefined.
         * Return an object with the properties current values.
         */
        BigNumber.config = function () {
            var v, p,
                i = 0,
                r = {},
                a = arguments,
                o = a[0],
                has = o && typeof o == 'object'
                  ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }
                  : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };

            // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
            // 'config() DECIMAL_PLACES not an integer: {v}'
            // 'config() DECIMAL_PLACES out of range: {v}'
            if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                DECIMAL_PLACES = v | 0;
            }
            r[p] = DECIMAL_PLACES;

            // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
            // 'config() ROUNDING_MODE not an integer: {v}'
            // 'config() ROUNDING_MODE out of range: {v}'
            if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {
                ROUNDING_MODE = v | 0;
            }
            r[p] = ROUNDING_MODE;

            // EXPONENTIAL_AT {number|number[]}
            // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].
            // 'config() EXPONENTIAL_AT not an integer: {v}'
            // 'config() EXPONENTIAL_AT out of range: {v}'
            if ( has( p = 'EXPONENTIAL_AT' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {
                        TO_EXP_NEG = v[0] | 0;
                        TO_EXP_POS = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );
                }
            }
            r[p] = [ TO_EXP_NEG, TO_EXP_POS ];

            // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
            // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
            // 'config() RANGE not an integer: {v}'
            // 'config() RANGE cannot be zero: {v}'
            // 'config() RANGE out of range: {v}'
            if ( has( p = 'RANGE' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {
                        MIN_EXP = v[0] | 0;
                        MAX_EXP = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );
                    else if (ERRORS) raise( 2, p + ' cannot be zero', v );
                }
            }
            r[p] = [ MIN_EXP, MAX_EXP ];

            // ERRORS {boolean|number} true, false, 1 or 0.
            // 'config() ERRORS not a boolean or binary digit: {v}'
            if ( has( p = 'ERRORS' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    id = 0;
                    isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = ERRORS;

            // CRYPTO {boolean|number} true, false, 1 or 0.
            // 'config() CRYPTO not a boolean or binary digit: {v}'
            // 'config() crypto unavailable: {crypto}'
            if ( has( p = 'CRYPTO' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    CRYPTO = !!( v && crypto && typeof crypto == 'object' );
                    if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = CRYPTO;

            // MODULO_MODE {number} Integer, 0 to 9 inclusive.
            // 'config() MODULO_MODE not an integer: {v}'
            // 'config() MODULO_MODE out of range: {v}'
            if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {
                MODULO_MODE = v | 0;
            }
            r[p] = MODULO_MODE;

            // POW_PRECISION {number} Integer, 0 to MAX inclusive.
            // 'config() POW_PRECISION not an integer: {v}'
            // 'config() POW_PRECISION out of range: {v}'
            if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                POW_PRECISION = v | 0;
            }
            r[p] = POW_PRECISION;

            // FORMAT {object}
            // 'config() FORMAT not an object: {v}'
            if ( has( p = 'FORMAT' ) ) {

                if ( typeof v == 'object' ) {
                    FORMAT = v;
                } else if (ERRORS) {
                    raise( 2, p + ' not an object', v );
                }
            }
            r[p] = FORMAT;

            return r;
        };


        /*
         * Return a new BigNumber whose value is the maximum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };


        /*
         * Return a new BigNumber whose value is the minimum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };


        /*
         * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
         * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
         * zeros are produced).
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         *
         * 'random() decimal places not an integer: {dp}'
         * 'random() decimal places out of range: {dp}'
         * 'random() crypto unavailable: {crypto}'
         */
        BigNumber.random = (function () {
            var pow2_53 = 0x20000000000000;

            // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
            // Check if Math.random() produces more than 32 bits of randomness.
            // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
            // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
            var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
              ? function () { return mathfloor( Math.random() * pow2_53 ); }
              : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
                  (Math.random() * 0x800000 | 0); };

            return function (dp) {
                var a, b, e, k, v,
                    i = 0,
                    c = [],
                    rand = new BigNumber(ONE);

                dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;
                k = mathceil( dp / LOG_BASE );

                if (CRYPTO) {

                    // Browsers supporting crypto.getRandomValues.
                    if ( crypto && crypto.getRandomValues ) {

                        a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );

                        for ( ; i < k; ) {

                            // 53 bits:
                            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
                            // 11111 11111111 11111111 11111111 11100000 00000000 00000000
                            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
                            //                                     11111 11111111 11111111
                            // 0x20000 is 2^21.
                            v = a[i] * 0x20000 + (a[i + 1] >>> 11);

                            // Rejection sampling:
                            // 0 <= v < 9007199254740992
                            // Probability that v >= 9e15, is
                            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
                            if ( v >= 9e15 ) {
                                b = crypto.getRandomValues( new Uint32Array(2) );
                                a[i] = b[0];
                                a[i + 1] = b[1];
                            } else {

                                // 0 <= v <= 8999999999999999
                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 2;
                            }
                        }
                        i = k / 2;

                    // Node.js supporting crypto.randomBytes.
                    } else if ( crypto && crypto.randomBytes ) {

                        // buffer
                        a = crypto.randomBytes( k *= 7 );

                        for ( ; i < k; ) {

                            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
                            // 0x100000000 is 2^32, 0x1000000 is 2^24
                            // 11111 11111111 11111111 11111111 11111111 11111111 11111111
                            // 0 <= v < 9007199254740992
                            v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +
                                  ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +
                                  ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];

                            if ( v >= 9e15 ) {
                                crypto.randomBytes(7).copy( a, i );
                            } else {

                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 7;
                            }
                        }
                        i = k / 7;
                    } else if (ERRORS) {
                        raise( 14, 'crypto unavailable', crypto );
                    }
                }

                // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.
                if (!i) {

                    for ( ; i < k; ) {
                        v = random53bitInt();
                        if ( v < 9e15 ) c[i++] = v % 1e14;
                    }
                }

                k = c[--i];
                dp %= LOG_BASE;

                // Convert trailing digits to zeros according to dp.
                if ( k && dp ) {
                    v = POWS_TEN[LOG_BASE - dp];
                    c[i] = mathfloor( k / v ) * v;
                }

                // Remove trailing elements which are zero.
                for ( ; c[i] === 0; c.pop(), i-- );

                // Zero?
                if ( i < 0 ) {
                    c = [ e = 0 ];
                } else {

                    // Remove leading elements which are zero and adjust exponent accordingly.
                    for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);

                    // Count the digits of the first element of c to determine leading zeros, and...
                    for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);

                    // adjust the exponent accordingly.
                    if ( i < LOG_BASE ) e -= LOG_BASE - i;
                }

                rand.e = e;
                rand.c = c;
                return rand;
            };
        })();


        // PRIVATE FUNCTIONS


        // Convert a numeric string of baseIn to a numeric string of baseOut.
        function convertBase( str, baseOut, baseIn, sign ) {
            var d, e, k, r, x, xc, y,
                i = str.indexOf( '.' ),
                dp = DECIMAL_PLACES,
                rm = ROUNDING_MODE;

            if ( baseIn < 37 ) str = str.toLowerCase();

            // Non-integer.
            if ( i >= 0 ) {
                k = POW_PRECISION;

                // Unlimited precision.
                POW_PRECISION = 0;
                str = str.replace( '.', '' );
                y = new BigNumber(baseIn);
                x = y.pow( str.length - i );
                POW_PRECISION = k;

                // Convert str as if an integer, then restore the fraction part by dividing the
                // result by its base raised to a power.
                y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );
                y.e = y.c.length;
            }

            // Convert the number as integer.
            xc = toBaseOut( str, baseIn, baseOut );
            e = k = xc.length;

            // Remove trailing zeros.
            for ( ; xc[--k] == 0; xc.pop() );
            if ( !xc[0] ) return '0';

            if ( i < 0 ) {
                --e;
            } else {
                x.c = xc;
                x.e = e;

                // sign is needed for correct rounding.
                x.s = sign;
                x = div( x, y, dp, rm, baseOut );
                xc = x.c;
                r = x.r;
                e = x.e;
            }

            d = e + dp + 1;

            // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.
            i = xc[d];
            k = baseOut / 2;
            r = r || d < 0 || xc[d + 1] != null;

            r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                       : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
                         rm == ( x.s < 0 ? 8 : 7 ) );

            if ( d < 1 || !xc[0] ) {

                // 1^-dp or 0.
                str = r ? toFixedPoint( '1', -dp ) : '0';
            } else {
                xc.length = d;

                if (r) {

                    // Rounding up may mean the previous digit has to be rounded up and so on.
                    for ( --baseOut; ++xc[--d] > baseOut; ) {
                        xc[d] = 0;

                        if ( !d ) {
                            ++e;
                            xc.unshift(1);
                        }
                    }
                }

                // Determine trailing zeros.
                for ( k = xc.length; !xc[--k]; );

                // E.g. [4, 11, 15] becomes 4bf.
                for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );
                str = toFixedPoint( str, e );
            }

            // The caller will add the sign.
            return str;
        }


        // Perform division in the specified base. Called by div and convertBase.
        div = (function () {

            // Assume non-zero x and k.
            function multiply( x, k, base ) {
                var m, temp, xlo, xhi,
                    carry = 0,
                    i = x.length,
                    klo = k % SQRT_BASE,
                    khi = k / SQRT_BASE | 0;

                for ( x = x.slice(); i--; ) {
                    xlo = x[i] % SQRT_BASE;
                    xhi = x[i] / SQRT_BASE | 0;
                    m = khi * xlo + xhi * klo;
                    temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;
                    carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;
                    x[i] = temp % base;
                }

                if (carry) x.unshift(carry);

                return x;
            }

            function compare( a, b, aL, bL ) {
                var i, cmp;

                if ( aL != bL ) {
                    cmp = aL > bL ? 1 : -1;
                } else {

                    for ( i = cmp = 0; i < aL; i++ ) {

                        if ( a[i] != b[i] ) {
                            cmp = a[i] > b[i] ? 1 : -1;
                            break;
                        }
                    }
                }
                return cmp;
            }

            function subtract( a, b, aL, base ) {
                var i = 0;

                // Subtract b from a.
                for ( ; aL--; ) {
                    a[aL] -= i;
                    i = a[aL] < b[aL] ? 1 : 0;
                    a[aL] = i * base + a[aL] - b[aL];
                }

                // Remove leading zeros.
                for ( ; !a[0] && a.length > 1; a.shift() );
            }

            // x: dividend, y: divisor.
            return function ( x, y, dp, rm, base ) {
                var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
                    yL, yz,
                    s = x.s == y.s ? 1 : -1,
                    xc = x.c,
                    yc = y.c;

                // Either NaN, Infinity or 0?
                if ( !xc || !xc[0] || !yc || !yc[0] ) {

                    return new BigNumber(

                      // Return NaN if either NaN, or both Infinity or 0.
                      !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :

                        // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
                        xc && xc[0] == 0 || !yc ? s * 0 : s / 0
                    );
                }

                q = new BigNumber(s);
                qc = q.c = [];
                e = x.e - y.e;
                s = dp + e + 1;

                if ( !base ) {
                    base = BASE;
                    e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );
                    s = s / LOG_BASE | 0;
                }

                // Result exponent may be one less then the current value of e.
                // The coefficients of the BigNumbers from convertBase may have trailing zeros.
                for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );
                if ( yc[i] > ( xc[i] || 0 ) ) e--;

                if ( s < 0 ) {
                    qc.push(1);
                    more = true;
                } else {
                    xL = xc.length;
                    yL = yc.length;
                    i = 0;
                    s += 2;

                    // Normalise xc and yc so highest order digit of yc is >= base / 2.

                    n = mathfloor( base / ( yc[0] + 1 ) );

                    // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.
                    // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {
                    if ( n > 1 ) {
                        yc = multiply( yc, n, base );
                        xc = multiply( xc, n, base );
                        yL = yc.length;
                        xL = xc.length;
                    }

                    xi = yL;
                    rem = xc.slice( 0, yL );
                    remL = rem.length;

                    // Add zeros to make remainder as long as divisor.
                    for ( ; remL < yL; rem[remL++] = 0 );
                    yz = yc.slice();
                    yz.unshift(0);
                    yc0 = yc[0];
                    if ( yc[1] >= base / 2 ) yc0++;
                    // Not necessary, but to prevent trial digit n > base, when using base 3.
                    // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;

                    do {
                        n = 0;

                        // Compare divisor and remainder.
                        cmp = compare( yc, rem, yL, remL );

                        // If divisor < remainder.
                        if ( cmp < 0 ) {

                            // Calculate trial digit, n.

                            rem0 = rem[0];
                            if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );

                            // n is how many times the divisor goes into the current remainder.
                            n = mathfloor( rem0 / yc0 );

                            //  Algorithm:
                            //  1. product = divisor * trial digit (n)
                            //  2. if product > remainder: product -= divisor, n--
                            //  3. remainder -= product
                            //  4. if product was < remainder at 2:
                            //    5. compare new remainder and divisor
                            //    6. If remainder > divisor: remainder -= divisor, n++

                            if ( n > 1 ) {

                                // n may be > base only when base is 3.
                                if (n >= base) n = base - 1;

                                // product = divisor * trial digit.
                                prod = multiply( yc, n, base );
                                prodL = prod.length;
                                remL = rem.length;

                                // Compare product and remainder.
                                // If product > remainder.
                                // Trial digit n too high.
                                // n is 1 too high about 5% of the time, and is not known to have
                                // ever been more than 1 too high.
                                while ( compare( prod, rem, prodL, remL ) == 1 ) {
                                    n--;

                                    // Subtract divisor from product.
                                    subtract( prod, yL < prodL ? yz : yc, prodL, base );
                                    prodL = prod.length;
                                    cmp = 1;
                                }
                            } else {

                                // n is 0 or 1, cmp is -1.
                                // If n is 0, there is no need to compare yc and rem again below,
                                // so change cmp to 1 to avoid it.
                                // If n is 1, leave cmp as -1, so yc and rem are compared again.
                                if ( n == 0 ) {

                                    // divisor < remainder, so n must be at least 1.
                                    cmp = n = 1;
                                }

                                // product = divisor
                                prod = yc.slice();
                                prodL = prod.length;
                            }

                            if ( prodL < remL ) prod.unshift(0);

                            // Subtract product from remainder.
                            subtract( rem, prod, remL, base );
                            remL = rem.length;

                             // If product was < remainder.
                            if ( cmp == -1 ) {

                                // Compare divisor and new remainder.
                                // If divisor < new remainder, subtract divisor from remainder.
                                // Trial digit n too low.
                                // n is 1 too low about 5% of the time, and very rarely 2 too low.
                                while ( compare( yc, rem, yL, remL ) < 1 ) {
                                    n++;

                                    // Subtract divisor from remainder.
                                    subtract( rem, yL < remL ? yz : yc, remL, base );
                                    remL = rem.length;
                                }
                            }
                        } else if ( cmp === 0 ) {
                            n++;
                            rem = [0];
                        } // else cmp === 1 and n will be 0

                        // Add the next digit, n, to the result array.
                        qc[i++] = n;

                        // Update the remainder.
                        if ( rem[0] ) {
                            rem[remL++] = xc[xi] || 0;
                        } else {
                            rem = [ xc[xi] ];
                            remL = 1;
                        }
                    } while ( ( xi++ < xL || rem[0] != null ) && s-- );

                    more = rem[0] != null;

                    // Leading zero?
                    if ( !qc[0] ) qc.shift();
                }

                if ( base == BASE ) {

                    // To calculate q.e, first get the number of digits of qc[0].
                    for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );
                    round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );

                // Caller is convertBase.
                } else {
                    q.e = e;
                    q.r = +more;
                }

                return q;
            };
        })();


        /*
         * Return a string representing the value of BigNumber n in fixed-point or exponential
         * notation rounded to the specified decimal places or significant digits.
         *
         * n is a BigNumber.
         * i is the index of the last digit required (i.e. the digit that may be rounded up).
         * rm is the rounding mode.
         * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.
         */
        function format( n, i, rm, caller ) {
            var c0, e, ne, len, str;

            rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )
              ? rm | 0 : ROUNDING_MODE;

            if ( !n.c ) return n.toString();
            c0 = n.c[0];
            ne = n.e;

            if ( i == null ) {
                str = coeffToString( n.c );
                str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG
                  ? toExponential( str, ne )
                  : toFixedPoint( str, ne );
            } else {
                n = round( new BigNumber(n), i, rm );

                // n.e may have changed if the value was rounded up.
                e = n.e;

                str = coeffToString( n.c );
                len = str.length;

                // toPrecision returns exponential notation if the number of significant digits
                // specified is less than the number of digits necessary to represent the integer
                // part of the value in fixed-point notation.

                // Exponential notation.
                if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {

                    // Append zeros?
                    for ( ; len < i; str += '0', len++ );
                    str = toExponential( str, e );

                // Fixed-point notation.
                } else {
                    i -= ne;
                    str = toFixedPoint( str, e );

                    // Append zeros?
                    if ( e + 1 > len ) {
                        if ( --i > 0 ) for ( str += '.'; i--; str += '0' );
                    } else {
                        i += e - len;
                        if ( i > 0 ) {
                            if ( e + 1 == len ) str += '.';
                            for ( ; i--; str += '0' );
                        }
                    }
                }
            }

            return n.s < 0 && c0 ? '-' + str : str;
        }


        // Handle BigNumber.max and BigNumber.min.
        function maxOrMin( args, method ) {
            var m, n,
                i = 0;

            if ( isArray( args[0] ) ) args = args[0];
            m = new BigNumber( args[0] );

            for ( ; ++i < args.length; ) {
                n = new BigNumber( args[i] );

                // If any number is NaN, return NaN.
                if ( !n.s ) {
                    m = n;
                    break;
                } else if ( method.call( m, n ) ) {
                    m = n;
                }
            }

            return m;
        }


        /*
         * Return true if n is an integer in range, otherwise throw.
         * Use for argument validation when ERRORS is true.
         */
        function intValidatorWithErrors( n, min, max, caller, name ) {
            if ( n < min || n > max || n != truncate(n) ) {
                raise( caller, ( name || 'decimal places' ) +
                  ( n < min || n > max ? ' out of range' : ' not an integer' ), n );
            }

            return true;
        }


        /*
         * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
         * Called by minus, plus and times.
         */
        function normalise( n, c, e ) {
            var i = 1,
                j = c.length;

             // Remove trailing zeros.
            for ( ; !c[--j]; c.pop() );

            // Calculate the base 10 exponent. First get the number of digits of c[0].
            for ( j = c[0]; j >= 10; j /= 10, i++ );

            // Overflow?
            if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {

                // Infinity.
                n.c = n.e = null;

            // Underflow?
            } else if ( e < MIN_EXP ) {

                // Zero.
                n.c = [ n.e = 0 ];
            } else {
                n.e = e;
                n.c = c;
            }

            return n;
        }


        // Handle values that fail the validity test in BigNumber.
        parseNumeric = (function () {
            var basePrefix = /^(-?)0([xbo])/i,
                dotAfter = /^([^.]+)\.$/,
                dotBefore = /^\.([^.]+)$/,
                isInfinityOrNaN = /^-?(Infinity|NaN)$/,
                whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g;

            return function ( x, str, num, b ) {
                var base,
                    s = num ? str : str.replace( whitespaceOrPlus, '' );

                // No exception on ±Infinity or NaN.
                if ( isInfinityOrNaN.test(s) ) {
                    x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
                } else {
                    if ( !num ) {

                        // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
                        s = s.replace( basePrefix, function ( m, p1, p2 ) {
                            base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
                            return !b || b == base ? p1 : m;
                        });

                        if (b) {
                            base = b;

                            // E.g. '1.' to '1', '.1' to '0.1'
                            s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );
                        }

                        if ( str != s ) return new BigNumber( s, base );
                    }

                    // 'new BigNumber() not a number: {n}'
                    // 'new BigNumber() not a base {b} number: {n}'
                    if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );
                    x.s = null;
                }

                x.c = x.e = null;
                id = 0;
            }
        })();


        // Throw a BigNumber Error.
        function raise( caller, msg, val ) {
            var error = new Error( [
                'new BigNumber',     // 0
                'cmp',               // 1
                'config',            // 2
                'div',               // 3
                'divToInt',          // 4
                'eq',                // 5
                'gt',                // 6
                'gte',               // 7
                'lt',                // 8
                'lte',               // 9
                'minus',             // 10
                'mod',               // 11
                'plus',              // 12
                'precision',         // 13
                'random',            // 14
                'round',             // 15
                'shift',             // 16
                'times',             // 17
                'toDigits',          // 18
                'toExponential',     // 19
                'toFixed',           // 20
                'toFormat',          // 21
                'toFraction',        // 22
                'pow',               // 23
                'toPrecision',       // 24
                'toString',          // 25
                'BigNumber'          // 26
            ][caller] + '() ' + msg + ': ' + val );

            error.name = 'BigNumber Error';
            id = 0;
            throw error;
        }


        /*
         * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
         * If r is truthy, it is known that there are more digits after the rounding digit.
         */
        function round( x, sd, rm, r ) {
            var d, i, j, k, n, ni, rd,
                xc = x.c,
                pows10 = POWS_TEN;

            // if x is not Infinity or NaN...
            if (xc) {

                // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
                // n is a base 1e14 number, the value of the element of array x.c containing rd.
                // ni is the index of n within x.c.
                // d is the number of digits of n.
                // i is the index of rd within n including leading zeros.
                // j is the actual index of rd within n (if < 0, rd is a leading zero).
                out: {

                    // Get the number of digits of the first element of xc.
                    for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );
                    i = sd - d;

                    // If the rounding digit is in the first element of xc...
                    if ( i < 0 ) {
                        i += LOG_BASE;
                        j = sd;
                        n = xc[ ni = 0 ];

                        // Get the rounding digit at index j of n.
                        rd = n / pows10[ d - j - 1 ] % 10 | 0;
                    } else {
                        ni = mathceil( ( i + 1 ) / LOG_BASE );

                        if ( ni >= xc.length ) {

                            if (r) {

                                // Needed by sqrt.
                                for ( ; xc.length <= ni; xc.push(0) );
                                n = rd = 0;
                                d = 1;
                                i %= LOG_BASE;
                                j = i - LOG_BASE + 1;
                            } else {
                                break out;
                            }
                        } else {
                            n = k = xc[ni];

                            // Get the number of digits of n.
                            for ( d = 1; k >= 10; k /= 10, d++ );

                            // Get the index of rd within n.
                            i %= LOG_BASE;

                            // Get the index of rd within n, adjusted for leading zeros.
                            // The number of leading zeros of n is given by LOG_BASE - d.
                            j = i - LOG_BASE + d;

                            // Get the rounding digit at index j of n.
                            rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;
                        }
                    }

                    r = r || sd < 0 ||

                    // Are there any non-zero digits after the rounding digit?
                    // The expression  n % pows10[ d - j - 1 ]  returns all digits of n to the right
                    // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
                      xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );

                    r = rm < 4
                      ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                      : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&

                        // Check whether the digit to the left of the rounding digit is odd.
                        ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||
                          rm == ( x.s < 0 ? 8 : 7 ) );

                    if ( sd < 1 || !xc[0] ) {
                        xc.length = 0;

                        if (r) {

                            // Convert sd to decimal places.
                            sd -= x.e + 1;

                            // 1, 0.1, 0.01, 0.001, 0.0001 etc.
                            xc[0] = pows10[ sd % LOG_BASE ];
                            x.e = -sd || 0;
                        } else {

                            // Zero.
                            xc[0] = x.e = 0;
                        }

                        return x;
                    }

                    // Remove excess digits.
                    if ( i == 0 ) {
                        xc.length = ni;
                        k = 1;
                        ni--;
                    } else {
                        xc.length = ni + 1;
                        k = pows10[ LOG_BASE - i ];

                        // E.g. 56700 becomes 56000 if 7 is the rounding digit.
                        // j > 0 means i > number of leading zeros of n.
                        xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;
                    }

                    // Round up?
                    if (r) {

                        for ( ; ; ) {

                            // If the digit to be rounded up is in the first element of xc...
                            if ( ni == 0 ) {

                                // i will be the length of xc[0] before k is added.
                                for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );
                                j = xc[0] += k;
                                for ( k = 1; j >= 10; j /= 10, k++ );

                                // if i != k the length has increased.
                                if ( i != k ) {
                                    x.e++;
                                    if ( xc[0] == BASE ) xc[0] = 1;
                                }

                                break;
                            } else {
                                xc[ni] += k;
                                if ( xc[ni] != BASE ) break;
                                xc[ni--] = 0;
                                k = 1;
                            }
                        }
                    }

                    // Remove trailing zeros.
                    for ( i = xc.length; xc[--i] === 0; xc.pop() );
                }

                // Overflow? Infinity.
                if ( x.e > MAX_EXP ) {
                    x.c = x.e = null;

                // Underflow? Zero.
                } else if ( x.e < MIN_EXP ) {
                    x.c = [ x.e = 0 ];
                }
            }

            return x;
        }


        // PROTOTYPE/INSTANCE METHODS


        /*
         * Return a new BigNumber whose value is the absolute value of this BigNumber.
         */
        P.absoluteValue = P.abs = function () {
            var x = new BigNumber(this);
            if ( x.s < 0 ) x.s = 1;
            return x;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of Infinity.
         */
        P.ceil = function () {
            return round( new BigNumber(this), this.e + 1, 2 );
        };


        /*
         * Return
         * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
         * 0 if they have the same value,
         * or null if the value of either is NaN.
         */
        P.comparedTo = P.cmp = function ( y, b ) {
            id = 1;
            return compare( this, new BigNumber( y, b ) );
        };


        /*
         * Return the number of decimal places of the value of this BigNumber, or null if the value
         * of this BigNumber is ±Infinity or NaN.
         */
        P.decimalPlaces = P.dp = function () {
            var n, v,
                c = this.c;

            if ( !c ) return null;
            n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;

            // Subtract the number of trailing zeros of the last number.
            if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );
            if ( n < 0 ) n = 0;

            return n;
        };


        /*
         *  n / 0 = I
         *  n / N = N
         *  n / I = 0
         *  0 / n = 0
         *  0 / 0 = N
         *  0 / N = N
         *  0 / I = 0
         *  N / n = N
         *  N / 0 = N
         *  N / N = N
         *  N / I = N
         *  I / n = I
         *  I / 0 = I
         *  I / N = N
         *  I / I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
         * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.dividedBy = P.div = function ( y, b ) {
            id = 3;
            return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );
        };


        /*
         * Return a new BigNumber whose value is the integer part of dividing the value of this
         * BigNumber by the value of BigNumber(y, b).
         */
        P.dividedToIntegerBy = P.divToInt = function ( y, b ) {
            id = 4;
            return div( this, new BigNumber( y, b ), 0, 1 );
        };


        /*
         * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.equals = P.eq = function ( y, b ) {
            id = 5;
            return compare( this, new BigNumber( y, b ) ) === 0;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of -Infinity.
         */
        P.floor = function () {
            return round( new BigNumber(this), this.e + 1, 3 );
        };


        /*
         * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.greaterThan = P.gt = function ( y, b ) {
            id = 6;
            return compare( this, new BigNumber( y, b ) ) > 0;
        };


        /*
         * Return true if the value of this BigNumber is greater than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.greaterThanOrEqualTo = P.gte = function ( y, b ) {
            id = 7;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;

        };


        /*
         * Return true if the value of this BigNumber is a finite number, otherwise returns false.
         */
        P.isFinite = function () {
            return !!this.c;
        };


        /*
         * Return true if the value of this BigNumber is an integer, otherwise return false.
         */
        P.isInteger = P.isInt = function () {
            return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;
        };


        /*
         * Return true if the value of this BigNumber is NaN, otherwise returns false.
         */
        P.isNaN = function () {
            return !this.s;
        };


        /*
         * Return true if the value of this BigNumber is negative, otherwise returns false.
         */
        P.isNegative = P.isNeg = function () {
            return this.s < 0;
        };


        /*
         * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.
         */
        P.isZero = function () {
            return !!this.c && this.c[0] == 0;
        };


        /*
         * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.lessThan = P.lt = function ( y, b ) {
            id = 8;
            return compare( this, new BigNumber( y, b ) ) < 0;
        };


        /*
         * Return true if the value of this BigNumber is less than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.lessThanOrEqualTo = P.lte = function ( y, b ) {
            id = 9;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;
        };


        /*
         *  n - 0 = n
         *  n - N = N
         *  n - I = -I
         *  0 - n = -n
         *  0 - 0 = 0
         *  0 - N = N
         *  0 - I = -I
         *  N - n = N
         *  N - 0 = N
         *  N - N = N
         *  N - I = N
         *  I - n = I
         *  I - 0 = I
         *  I - N = N
         *  I - I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber minus the value of
         * BigNumber(y, b).
         */
        P.minus = P.sub = function ( y, b ) {
            var i, j, t, xLTy,
                x = this,
                a = x.s;

            id = 10;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
            if ( a != b ) {
                y.s = -b;
                return x.plus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Either Infinity?
                if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );

                // Either zero?
                if ( !xc[0] || !yc[0] ) {

                    // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                    return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :

                      // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
                      ROUNDING_MODE == 3 ? -0 : 0 );
                }
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Determine which is the bigger number.
            if ( a = xe - ye ) {

                if ( xLTy = a < 0 ) {
                    a = -a;
                    t = xc;
                } else {
                    ye = xe;
                    t = yc;
                }

                t.reverse();

                // Prepend zeros to equalise exponents.
                for ( b = a; b--; t.push(0) );
                t.reverse();
            } else {

                // Exponents equal. Check digit by digit.
                j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;

                for ( a = b = 0; b < j; b++ ) {

                    if ( xc[b] != yc[b] ) {
                        xLTy = xc[b] < yc[b];
                        break;
                    }
                }
            }

            // x < y? Point xc to the array of the bigger number.
            if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;

            b = ( j = yc.length ) - ( i = xc.length );

            // Append zeros to xc if shorter.
            // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
            if ( b > 0 ) for ( ; b--; xc[i++] = 0 );
            b = BASE - 1;

            // Subtract yc from xc.
            for ( ; j > a; ) {

                if ( xc[--j] < yc[j] ) {
                    for ( i = j; i && !xc[--i]; xc[i] = b );
                    --xc[i];
                    xc[j] += BASE;
                }

                xc[j] -= yc[j];
            }

            // Remove leading zeros and adjust exponent accordingly.
            for ( ; xc[0] == 0; xc.shift(), --ye );

            // Zero?
            if ( !xc[0] ) {

                // Following IEEE 754 (2008) 6.3,
                // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
                y.s = ROUNDING_MODE == 3 ? -1 : 1;
                y.c = [ y.e = 0 ];
                return y;
            }

            // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
            // for finite x and y.
            return normalise( y, xc, ye );
        };


        /*
         *   n % 0 =  N
         *   n % N =  N
         *   n % I =  n
         *   0 % n =  0
         *  -0 % n = -0
         *   0 % 0 =  N
         *   0 % N =  N
         *   0 % I =  0
         *   N % n =  N
         *   N % 0 =  N
         *   N % N =  N
         *   N % I =  N
         *   I % n =  N
         *   I % 0 =  N
         *   I % N =  N
         *   I % I =  N
         *
         * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
         * BigNumber(y, b). The result depends on the value of MODULO_MODE.
         */
        P.modulo = P.mod = function ( y, b ) {
            var q, s,
                x = this;

            id = 11;
            y = new BigNumber( y, b );

            // Return NaN if x is Infinity or NaN, or y is NaN or zero.
            if ( !x.c || !y.s || y.c && !y.c[0] ) {
                return new BigNumber(NaN);

            // Return x if y is Infinity or x is zero.
            } else if ( !y.c || x.c && !x.c[0] ) {
                return new BigNumber(x);
            }

            if ( MODULO_MODE == 9 ) {

                // Euclidian division: q = sign(y) * floor(x / abs(y))
                // r = x - qy    where  0 <= r < abs(y)
                s = y.s;
                y.s = 1;
                q = div( x, y, 0, 3 );
                y.s = s;
                q.s *= s;
            } else {
                q = div( x, y, 0, MODULO_MODE );
            }

            return x.minus( q.times(y) );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber negated,
         * i.e. multiplied by -1.
         */
        P.negated = P.neg = function () {
            var x = new BigNumber(this);
            x.s = -x.s || null;
            return x;
        };


        /*
         *  n + 0 = n
         *  n + N = N
         *  n + I = I
         *  0 + n = n
         *  0 + 0 = 0
         *  0 + N = N
         *  0 + I = I
         *  N + n = N
         *  N + 0 = N
         *  N + N = N
         *  N + I = N
         *  I + n = I
         *  I + 0 = I
         *  I + N = N
         *  I + I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber plus the value of
         * BigNumber(y, b).
         */
        P.plus = P.add = function ( y, b ) {
            var t,
                x = this,
                a = x.s;

            id = 12;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
             if ( a != b ) {
                y.s = -b;
                return x.minus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Return ±Infinity if either ±Infinity.
                if ( !xc || !yc ) return new BigNumber( a / 0 );

                // Either zero?
                // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
            if ( a = xe - ye ) {
                if ( a > 0 ) {
                    ye = xe;
                    t = yc;
                } else {
                    a = -a;
                    t = xc;
                }

                t.reverse();
                for ( ; a--; t.push(0) );
                t.reverse();
            }

            a = xc.length;
            b = yc.length;

            // Point xc to the longer array, and b to the shorter length.
            if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;

            // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
            for ( a = 0; b; ) {
                a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;
                xc[b] %= BASE;
            }

            if (a) {
                xc.unshift(a);
                ++ye;
            }

            // No need to check for zero, as +x + +y != 0 && -x + -y != 0
            // ye = MAX_EXP + 1 possible
            return normalise( y, xc, ye );
        };


        /*
         * Return the number of significant digits of the value of this BigNumber.
         *
         * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
         */
        P.precision = P.sd = function (z) {
            var n, v,
                x = this,
                c = x.c;

            // 'precision() argument not a boolean or binary digit: {z}'
            if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {
                if (ERRORS) raise( 13, 'argument' + notBool, z );
                if ( z != !!z ) z = null;
            }

            if ( !c ) return null;
            v = c.length - 1;
            n = v * LOG_BASE + 1;

            if ( v = c[v] ) {

                // Subtract the number of trailing zeros of the last element.
                for ( ; v % 10 == 0; v /= 10, n-- );

                // Add the number of digits of the first element.
                for ( v = c[0]; v >= 10; v /= 10, n++ );
            }

            if ( z && x.e + 1 > n ) n = x.e + 1;

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if
         * omitted.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'round() decimal places out of range: {dp}'
         * 'round() decimal places not an integer: {dp}'
         * 'round() rounding mode not an integer: {rm}'
         * 'round() rounding mode out of range: {rm}'
         */
        P.round = function ( dp, rm ) {
            var n = new BigNumber(this);

            if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {
                round( n, ~~dp + this.e + 1, rm == null ||
                  !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );
            }

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
         * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
         *
         * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
         *
         * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity
         * otherwise.
         *
         * 'shift() argument not an integer: {k}'
         * 'shift() argument out of range: {k}'
         */
        P.shift = function (k) {
            var n = this;
            return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )

              // k < 1e+21, or truncate(k) will produce exponential notation.
              ? n.times( '1e' + truncate(k) )
              : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )
                ? n.s * ( k < 0 ? 0 : 1 / 0 )
                : n );
        };


        /*
         *  sqrt(-n) =  N
         *  sqrt( N) =  N
         *  sqrt(-I) =  N
         *  sqrt( I) =  I
         *  sqrt( 0) =  0
         *  sqrt(-0) = -0
         *
         * Return a new BigNumber whose value is the square root of the value of this BigNumber,
         * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.squareRoot = P.sqrt = function () {
            var m, n, r, rep, t,
                x = this,
                c = x.c,
                s = x.s,
                e = x.e,
                dp = DECIMAL_PLACES + 4,
                half = new BigNumber('0.5');

            // Negative/NaN/Infinity/zero?
            if ( s !== 1 || !c || !c[0] ) {
                return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );
            }

            // Initial estimate.
            s = Math.sqrt( +x );

            // Math.sqrt underflow/overflow?
            // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
            if ( s == 0 || s == 1 / 0 ) {
                n = coeffToString(c);
                if ( ( n.length + e ) % 2 == 0 ) n += '0';
                s = Math.sqrt(n);
                e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );

                if ( s == 1 / 0 ) {
                    n = '1e' + e;
                } else {
                    n = s.toExponential();
                    n = n.slice( 0, n.indexOf('e') + 1 ) + e;
                }

                r = new BigNumber(n);
            } else {
                r = new BigNumber( s + '' );
            }

            // Check for zero.
            // r could be zero if MIN_EXP is changed after the this value was created.
            // This would cause a division by zero (x/t) and hence Infinity below, which would cause
            // coeffToString to throw.
            if ( r.c[0] ) {
                e = r.e;
                s = e + dp;
                if ( s < 3 ) s = 0;

                // Newton-Raphson iteration.
                for ( ; ; ) {
                    t = r;
                    r = half.times( t.plus( div( x, t, dp, 1 ) ) );

                    if ( coeffToString( t.c   ).slice( 0, s ) === ( n =
                         coeffToString( r.c ) ).slice( 0, s ) ) {

                        // The exponent of r may here be one less than the final result exponent,
                        // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
                        // are indexed correctly.
                        if ( r.e < e ) --s;
                        n = n.slice( s - 3, s + 1 );

                        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
                        // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
                        // iteration.
                        if ( n == '9999' || !rep && n == '4999' ) {

                            // On the first iteration only, check to see if rounding up gives the
                            // exact result as the nines may infinitely repeat.
                            if ( !rep ) {
                                round( t, t.e + DECIMAL_PLACES + 2, 0 );

                                if ( t.times(t).eq(x) ) {
                                    r = t;
                                    break;
                                }
                            }

                            dp += 4;
                            s += 4;
                            rep = 1;
                        } else {

                            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
                            // result. If not, then there are further digits and m will be truthy.
                            if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {

                                // Truncate to the first rounding digit.
                                round( r, r.e + DECIMAL_PLACES + 2, 1 );
                                m = !r.times(r).eq(x);
                            }

                            break;
                        }
                    }
                }
            }

            return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );
        };


        /*
         *  n * 0 = 0
         *  n * N = N
         *  n * I = I
         *  0 * n = 0
         *  0 * 0 = 0
         *  0 * N = N
         *  0 * I = N
         *  N * n = N
         *  N * 0 = N
         *  N * N = N
         *  N * I = N
         *  I * n = I
         *  I * 0 = N
         *  I * N = N
         *  I * I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber times the value of
         * BigNumber(y, b).
         */
        P.times = P.mul = function ( y, b ) {
            var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
                base, sqrtBase,
                x = this,
                xc = x.c,
                yc = ( id = 17, y = new BigNumber( y, b ) ).c;

            // Either NaN, ±Infinity or ±0?
            if ( !xc || !yc || !xc[0] || !yc[0] ) {

                // Return NaN if either is NaN, or one is 0 and the other is Infinity.
                if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {
                    y.c = y.e = y.s = null;
                } else {
                    y.s *= x.s;

                    // Return ±Infinity if either is ±Infinity.
                    if ( !xc || !yc ) {
                        y.c = y.e = null;

                    // Return ±0 if either is ±0.
                    } else {
                        y.c = [0];
                        y.e = 0;
                    }
                }

                return y;
            }

            e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );
            y.s *= x.s;
            xcL = xc.length;
            ycL = yc.length;

            // Ensure xc points to longer array and xcL to its length.
            if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;

            // Initialise the result array with zeros.
            for ( i = xcL + ycL, zc = []; i--; zc.push(0) );

            base = BASE;
            sqrtBase = SQRT_BASE;

            for ( i = ycL; --i >= 0; ) {
                c = 0;
                ylo = yc[i] % sqrtBase;
                yhi = yc[i] / sqrtBase | 0;

                for ( k = xcL, j = i + k; j > i; ) {
                    xlo = xc[--k] % sqrtBase;
                    xhi = xc[k] / sqrtBase | 0;
                    m = yhi * xlo + xhi * ylo;
                    xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;
                    c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;
                    zc[j--] = xlo % base;
                }

                zc[j] = c;
            }

            if (c) {
                ++e;
            } else {
                zc.shift();
            }

            return normalise( y, zc, e );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toDigits() precision out of range: {sd}'
         * 'toDigits() precision not an integer: {sd}'
         * 'toDigits() rounding mode not an integer: {rm}'
         * 'toDigits() rounding mode out of range: {rm}'
         */
        P.toDigits = function ( sd, rm ) {
            var n = new BigNumber(this);
            sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;
            rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;
            return sd ? round( n, sd, rm ) : n;
        };


        /*
         * Return a string representing the value of this BigNumber in exponential notation and
         * rounded using ROUNDING_MODE to dp fixed decimal places.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toExponential() decimal places not an integer: {dp}'
         * 'toExponential() decimal places out of range: {dp}'
         * 'toExponential() rounding mode not an integer: {rm}'
         * 'toExponential() rounding mode out of range: {rm}'
         */
        P.toExponential = function ( dp, rm ) {
            return format( this,
              dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounding
         * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
         * but e.g. (-0.00001).toFixed(0) is '-0'.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFixed() decimal places not an integer: {dp}'
         * 'toFixed() decimal places out of range: {dp}'
         * 'toFixed() rounding mode not an integer: {rm}'
         * 'toFixed() rounding mode out of range: {rm}'
         */
        P.toFixed = function ( dp, rm ) {
            return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )
              ? ~~dp + this.e + 1 : null, rm, 20 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounded
         * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
         * of the FORMAT object (see BigNumber.config).
         *
         * FORMAT = {
         *      decimalSeparator : '.',
         *      groupSeparator : ',',
         *      groupSize : 3,
         *      secondaryGroupSize : 0,
         *      fractionGroupSeparator : '\xA0',    // non-breaking space
         *      fractionGroupSize : 0
         * };
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFormat() decimal places not an integer: {dp}'
         * 'toFormat() decimal places out of range: {dp}'
         * 'toFormat() rounding mode not an integer: {rm}'
         * 'toFormat() rounding mode out of range: {rm}'
         */
        P.toFormat = function ( dp, rm ) {
            var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )
              ? ~~dp + this.e + 1 : null, rm, 21 );

            if ( this.c ) {
                var i,
                    arr = str.split('.'),
                    g1 = +FORMAT.groupSize,
                    g2 = +FORMAT.secondaryGroupSize,
                    groupSeparator = FORMAT.groupSeparator,
                    intPart = arr[0],
                    fractionPart = arr[1],
                    isNeg = this.s < 0,
                    intDigits = isNeg ? intPart.slice(1) : intPart,
                    len = intDigits.length;

                if (g2) i = g1, g1 = g2, g2 = i, len -= i;

                if ( g1 > 0 && len > 0 ) {
                    i = len % g1 || g1;
                    intPart = intDigits.substr( 0, i );

                    for ( ; i < len; i += g1 ) {
                        intPart += groupSeparator + intDigits.substr( i, g1 );
                    }

                    if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);
                    if (isNeg) intPart = '-' + intPart;
                }

                str = fractionPart
                  ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )
                    ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ),
                      '$&' + FORMAT.fractionGroupSeparator )
                    : fractionPart )
                  : intPart;
            }

            return str;
        };


        /*
         * Return a string array representing the value of this BigNumber as a simple fraction with
         * an integer numerator and an integer denominator. The denominator will be a positive
         * non-zero value less than or equal to the specified maximum denominator. If a maximum
         * denominator is not specified, the denominator will be the lowest value necessary to
         * represent the number exactly.
         *
         * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.
         *
         * 'toFraction() max denominator not an integer: {md}'
         * 'toFraction() max denominator out of range: {md}'
         */
        P.toFraction = function (md) {
            var arr, d0, d2, e, exp, n, n0, q, s,
                k = ERRORS,
                x = this,
                xc = x.c,
                d = new BigNumber(ONE),
                n1 = d0 = new BigNumber(ONE),
                d1 = n0 = new BigNumber(ONE);

            if ( md != null ) {
                ERRORS = false;
                n = new BigNumber(md);
                ERRORS = k;

                if ( !( k = n.isInt() ) || n.lt(ONE) ) {

                    if (ERRORS) {
                        raise( 22,
                          'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );
                    }

                    // ERRORS is false:
                    // If md is a finite non-integer >= 1, round it to an integer and use it.
                    md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;
                }
            }

            if ( !xc ) return x.toString();
            s = coeffToString(xc);

            // Determine initial denominator.
            // d is a power of 10 and the minimum max denominator that specifies the value exactly.
            e = d.e = s.length - x.e - 1;
            d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];
            md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;

            exp = MAX_EXP;
            MAX_EXP = 1 / 0;
            n = new BigNumber(s);

            // n0 = d1 = 0
            n0.c[0] = 0;

            for ( ; ; )  {
                q = div( n, d, 0, 1 );
                d2 = d0.plus( q.times(d1) );
                if ( d2.cmp(md) == 1 ) break;
                d0 = d1;
                d1 = d2;
                n1 = n0.plus( q.times( d2 = n1 ) );
                n0 = d2;
                d = n.minus( q.times( d2 = d ) );
                n = d2;
            }

            d2 = div( md.minus(d0), d1, 0, 1 );
            n0 = n0.plus( d2.times(n1) );
            d0 = d0.plus( d2.times(d1) );
            n0.s = n1.s = x.s;
            e *= 2;

            // Determine which fraction is closer to x, n0/d0 or n1/d1
            arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(
                  div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1
                    ? [ n1.toString(), d1.toString() ]
                    : [ n0.toString(), d0.toString() ];

            MAX_EXP = exp;
            return arr;
        };


        /*
         * Return the value of this BigNumber converted to a number primitive.
         */
        P.toNumber = function () {
            var x = this;

            // Ensure zero has correct sign.
            return +x || ( x.s ? x.s * 0 : NaN );
        };


        /*
         * Return a BigNumber whose value is the value of this BigNumber raised to the power n.
         * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
         * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.
         *
         * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.
         * (Performs 54 loop iterations for n of 9007199254740992.)
         *
         * 'pow() exponent not an integer: {n}'
         * 'pow() exponent out of range: {n}'
         */
        P.toPower = P.pow = function (n) {
            var k, y,
                i = mathfloor( n < 0 ? -n : +n ),
                x = this;

            // Pass ±Infinity to Math.pow if exponent is out of range.
            if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&
              ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||
                parseFloat(n) != n && !( n = NaN ) ) ) {
                return new BigNumber( Math.pow( +x, n ) );
            }

            // Truncating each coefficient array to a length of k after each multiplication equates
            // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a
            // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)
            k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;
            y = new BigNumber(ONE);

            for ( ; ; ) {

                if ( i % 2 ) {
                    y = y.times(x);
                    if ( !y.c ) break;
                    if ( k && y.c.length > k ) y.c.length = k;
                }

                i = mathfloor( i / 2 );
                if ( !i ) break;

                x = x.times(x);
                if ( k && x.c && x.c.length > k ) x.c.length = k;
            }

            if ( n < 0 ) y = ONE.div(y);
            return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;
        };


        /*
         * Return a string representing the value of this BigNumber rounded to sd significant digits
         * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
         * necessary to represent the integer part of the value in fixed-point notation, then use
         * exponential notation.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toPrecision() precision not an integer: {sd}'
         * 'toPrecision() precision out of range: {sd}'
         * 'toPrecision() rounding mode not an integer: {rm}'
         * 'toPrecision() rounding mode out of range: {rm}'
         */
        P.toPrecision = function ( sd, rm ) {
            return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )
              ? sd | 0 : null, rm, 24 );
        };


        /*
         * Return a string representing the value of this BigNumber in base b, or base 10 if b is
         * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
         * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
         * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
         * TO_EXP_NEG, return exponential notation.
         *
         * [b] {number} Integer, 2 to 64 inclusive.
         *
         * 'toString() base not an integer: {b}'
         * 'toString() base out of range: {b}'
         */
        P.toString = function (b) {
            var str,
                n = this,
                s = n.s,
                e = n.e;

            // Infinity or NaN?
            if ( e === null ) {

                if (s) {
                    str = 'Infinity';
                    if ( s < 0 ) str = '-' + str;
                } else {
                    str = 'NaN';
                }
            } else {
                str = coeffToString( n.c );

                if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {
                    str = e <= TO_EXP_NEG || e >= TO_EXP_POS
                      ? toExponential( str, e )
                      : toFixedPoint( str, e );
                } else {
                    str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );
                }

                if ( s < 0 && n.c[0] ) str = '-' + str;
            }

            return str;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole
         * number.
         */
        P.truncated = P.trunc = function () {
            return round( new BigNumber(this), this.e + 1, 1 );
        };



        /*
         * Return as toString, but do not accept a base argument.
         */
        P.valueOf = P.toJSON = function () {
            return this.toString();
        };


        // Aliases for BigDecimal methods.
        //P.add = P.plus;         // P.add included above
        //P.subtract = P.minus;   // P.sub included above
        //P.multiply = P.times;   // P.mul included above
        //P.divide = P.div;
        //P.remainder = P.mod;
        //P.compareTo = P.cmp;
        //P.negate = P.neg;


        if ( configObj != null ) BigNumber.config(configObj);

        return BigNumber;
    }


    // PRIVATE HELPER FUNCTIONS


    function bitFloor(n) {
        var i = n | 0;
        return n > 0 || n === i ? i : i - 1;
    }


    // Return a coefficient array as a string of base 10 digits.
    function coeffToString(a) {
        var s, z,
            i = 1,
            j = a.length,
            r = a[0] + '';

        for ( ; i < j; ) {
            s = a[i++] + '';
            z = LOG_BASE - s.length;
            for ( ; z--; s = '0' + s );
            r += s;
        }

        // Determine trailing zeros.
        for ( j = r.length; r.charCodeAt(--j) === 48; );
        return r.slice( 0, j + 1 || 1 );
    }


    // Compare the value of BigNumbers x and y.
    function compare( x, y ) {
        var a, b,
            xc = x.c,
            yc = y.c,
            i = x.s,
            j = y.s,
            k = x.e,
            l = y.e;

        // Either NaN?
        if ( !i || !j ) return null;

        a = xc && !xc[0];
        b = yc && !yc[0];

        // Either zero?
        if ( a || b ) return a ? b ? 0 : -j : i;

        // Signs differ?
        if ( i != j ) return i;

        a = i < 0;
        b = k == l;

        // Either Infinity?
        if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;

        // Compare exponents.
        if ( !b ) return k > l ^ a ? 1 : -1;

        j = ( k = xc.length ) < ( l = yc.length ) ? k : l;

        // Compare digit by digit.
        for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;

        // Compare lengths.
        return k == l ? 0 : k > l ^ a ? 1 : -1;
    }


    /*
     * Return true if n is a valid number in range, otherwise false.
     * Use for argument validation when ERRORS is false.
     * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.
     */
    function intValidatorNoErrors( n, min, max ) {
        return ( n = truncate(n) ) >= min && n <= max;
    }


    function isArray(obj) {
        return Object.prototype.toString.call(obj) == '[object Array]';
    }


    /*
     * Convert string of baseIn to an array of numbers of baseOut.
     * Eg. convertBase('255', 10, 16) returns [15, 15].
     * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].
     */
    function toBaseOut( str, baseIn, baseOut ) {
        var j,
            arr = [0],
            arrL,
            i = 0,
            len = str.length;

        for ( ; i < len; ) {
            for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );
            arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );

            for ( ; j < arr.length; j++ ) {

                if ( arr[j] > baseOut - 1 ) {
                    if ( arr[j + 1] == null ) arr[j + 1] = 0;
                    arr[j + 1] += arr[j] / baseOut | 0;
                    arr[j] %= baseOut;
                }
            }
        }

        return arr.reverse();
    }


    function toExponential( str, e ) {
        return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +
          ( e < 0 ? 'e' : 'e+' ) + e;
    }


    function toFixedPoint( str, e ) {
        var len, z;

        // Negative exponent?
        if ( e < 0 ) {

            // Prepend zeros.
            for ( z = '0.'; ++e; z += '0' );
            str = z + str;

        // Positive exponent
        } else {
            len = str.length;

            // Append zeros.
            if ( ++e > len ) {
                for ( z = '0', e -= len; --e; z += '0' );
                str += z;
            } else if ( e < len ) {
                str = str.slice( 0, e ) + '.' + str.slice(e);
            }
        }

        return str;
    }


    function truncate(n) {
        n = parseFloat(n);
        return n < 0 ? mathceil(n) : mathfloor(n);
    }


    // EXPORT


    BigNumber = another();

    // AMD.
    if ( true ) {
        !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return BigNumber; }.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

    // Node and other environments that support module.exports.
    } else if ( typeof module != 'undefined' && module.exports ) {
        module.exports = BigNumber;
        if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}

    // Browser.
    } else {
        global.BigNumber = BigNumber;
    }
})(this);


/***/ }),
/* 118 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file sha3.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var CryptoJS = __webpack_require__(210);
var sha3 = __webpack_require__(115);

module.exports = function (value, options) {
    if (options && options.encoding === 'hex') {
        if (value.length > 2 && value.substr(0, 2) === '0x') {
            value = value.substr(2);
        }
        value = CryptoJS.enc.Hex.parse(value);
    }

    return sha3(value, {
        outputLength: 256
    }).toString();
};



/***/ }),
/* 119 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file errors.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

module.exports = {
    InvalidNumberOfParams: function () {
        return new Error('Invalid number of input parameters');
    },
    InvalidConnection: function (host){
        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
    },
    InvalidProvider: function () {
        return new Error('Provider not set or invalid');
    },
    InvalidResponse: function (result){
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        return new Error(message);
    }
};



/***/ }),
/* 120 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file property.js
 * @author Fabian Vogelsteller <fabian@frozeman.de>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(14);

var Property = function (options) {
    this.name = options.name;
    this.getter = options.getter;
    this.setter = options.setter;
    this.outputFormatter = options.outputFormatter;
    this.inputFormatter = options.inputFormatter;
    this.requestManager = null;
};

Property.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};

/**
 * Should be called to format input args of method
 * 
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Property.prototype.formatInput = function (arg) {
    return this.inputFormatter ? this.inputFormatter(arg) : arg;
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Property.prototype.formatOutput = function (result) {
    return this.outputFormatter && result !== null ? this.outputFormatter(result) : result;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Property.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};


/**
 * Should attach function to method
 * 
 * @method attachToObject
 * @param {Object}
 * @param {Function}
 */
Property.prototype.attachToObject = function (obj) {
    var proto = {
        get: this.buildGet(),
        enumerable: true 
    };

    var names = this.name.split('.');
    var name = names[0];
    if (names.length > 1) {
        obj[names[0]] = obj[names[0]] || {};
        obj = obj[names[0]];
        name = names[1];
    }

    Object.defineProperty(obj, name, proto);
    obj[asyncGetterName(name)] = this.buildAsyncGet();
};

var asyncGetterName = function (name) {
    return 'get' + name.charAt(0).toUpperCase() + name.slice(1);
};

Property.prototype.buildGet = function () {
    var property = this;
    return function get() {
        return property.formatOutput(property.requestManager.send({
            method: property.getter
        })); 
    };
};

Property.prototype.buildAsyncGet = function () {
    var property = this;
    var get = function (callback) {
        property.requestManager.sendAsync({
            method: property.getter
        }, function (err, result) {
            callback(err, property.formatOutput(result));
        });
    };
    get.request = this.request.bind(this);
    return get;
};

/**
 * Should be called to create pure JSONRPC request which can be used in batch request
 *
 * @method request
 * @param {...} params
 * @return {Object} jsonrpc request
 */
Property.prototype.request = function () {
    var payload = {
        method: this.getter,
        params: [],
        callback: this.extractCallback(Array.prototype.slice.call(arguments))
    };
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Property;



/***/ }),
/* 121 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file sha3.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var CryptoJS = __webpack_require__(210);
var sha3 = __webpack_require__(115);

module.exports = function (value, options) {
    if (options && options.encoding === 'hex') {
        if (value.length > 2 && value.substr(0, 2) === '0x') {
            value = value.substr(2);
        }
        value = CryptoJS.enc.Hex.parse(value);
    }

    return sha3(value, {
        outputLength: 256
    }).toString();
};



/***/ }),
/* 122 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file errors.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

module.exports = {
    InvalidNumberOfParams: function () {
        return new Error('Invalid number of input parameters');
    },
    InvalidConnection: function (host){
        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
    },
    InvalidProvider: function () {
        return new Error('Provider not set or invalid');
    },
    InvalidResponse: function (result){
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        return new Error(message);
    },
    ConnectionTimeout: function (ms){
        return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');
    }
};


/***/ }),
/* 123 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


let EventPubSub = __webpack_require__(79);
if(process.version[1]>5){
    EventPubSub = __webpack_require__(215);
}

module.exports=EventPubSub;


/***/ }),
/* 124 */
/***/ (function(module, exports, __webpack_require__) {

// Approach:
//
// 1. Get the minimatch set
// 2. For each pattern in the set, PROCESS(pattern, false)
// 3. Store matches per-set, then uniq them
//
// PROCESS(pattern, inGlobStar)
// Get the first [n] items from pattern that are all strings
// Join these together.  This is PREFIX.
//   If there is no more remaining, then stat(PREFIX) and
//   add to matches if it succeeds.  END.
//
// If inGlobStar and PREFIX is symlink and points to dir
//   set ENTRIES = []
// else readdir(PREFIX) as ENTRIES
//   If fail, END
//
// with ENTRIES
//   If pattern[n] is GLOBSTAR
//     // handle the case where the globstar match is empty
//     // by pruning it out, and testing the resulting pattern
//     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
//     // handle other cases.
//     for ENTRY in ENTRIES (not dotfiles)
//       // attach globstar + tail onto the entry
//       // Mark that this entry is a globstar match
//       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
//
//   else // not globstar
//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
//       Test ENTRY against pattern[n]
//       If fails, continue
//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
//
// Caveat:
//   Cache all stats and readdirs results to minimize syscall.  Since all
//   we ever care about is existence and directory-ness, we can just keep
//   `true` for files, and [children,...] for directories, or `false` for
//   things that don't exist.

module.exports = glob

var fs = __webpack_require__(1)
var rp = __webpack_require__(350)
var minimatch = __webpack_require__(64)
var Minimatch = minimatch.Minimatch
var inherits = __webpack_require__(54)
var EE = __webpack_require__(18).EventEmitter
var path = __webpack_require__(0)
var assert = __webpack_require__(11)
var isAbsolute = __webpack_require__(65)
var globSync = __webpack_require__(859)
var common = __webpack_require__(357)
var alphasort = common.alphasort
var alphasorti = common.alphasorti
var setopts = common.setopts
var ownProp = common.ownProp
var inflight = __webpack_require__(366)
var util = __webpack_require__(2)
var childrenIgnored = common.childrenIgnored
var isIgnored = common.isIgnored

var once = __webpack_require__(233)

function glob (pattern, options, cb) {
  if (typeof options === 'function') cb = options, options = {}
  if (!options) options = {}

  if (options.sync) {
    if (cb)
      throw new TypeError('callback provided to sync glob')
    return globSync(pattern, options)
  }

  return new Glob(pattern, options, cb)
}

glob.sync = globSync
var GlobSync = glob.GlobSync = globSync.GlobSync

// old api surface
glob.glob = glob

function extend (origin, add) {
  if (add === null || typeof add !== 'object') {
    return origin
  }

  var keys = Object.keys(add)
  var i = keys.length
  while (i--) {
    origin[keys[i]] = add[keys[i]]
  }
  return origin
}

glob.hasMagic = function (pattern, options_) {
  var options = extend({}, options_)
  options.noprocess = true

  var g = new Glob(pattern, options)
  var set = g.minimatch.set

  if (!pattern)
    return false

  if (set.length > 1)
    return true

  for (var j = 0; j < set[0].length; j++) {
    if (typeof set[0][j] !== 'string')
      return true
  }

  return false
}

glob.Glob = Glob
inherits(Glob, EE)
function Glob (pattern, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = null
  }

  if (options && options.sync) {
    if (cb)
      throw new TypeError('callback provided to sync glob')
    return new GlobSync(pattern, options)
  }

  if (!(this instanceof Glob))
    return new Glob(pattern, options, cb)

  setopts(this, pattern, options)
  this._didRealPath = false

  // process each pattern in the minimatch set
  var n = this.minimatch.set.length

  // The matches are stored as {<filename>: true,...} so that
  // duplicates are automagically pruned.
  // Later, we do an Object.keys() on these.
  // Keep them as a list so we can fill in when nonull is set.
  this.matches = new Array(n)

  if (typeof cb === 'function') {
    cb = once(cb)
    this.on('error', cb)
    this.on('end', function (matches) {
      cb(null, matches)
    })
  }

  var self = this
  this._processing = 0

  this._emitQueue = []
  this._processQueue = []
  this.paused = false

  if (this.noprocess)
    return this

  if (n === 0)
    return done()

  var sync = true
  for (var i = 0; i < n; i ++) {
    this._process(this.minimatch.set[i], i, false, done)
  }
  sync = false

  function done () {
    --self._processing
    if (self._processing <= 0) {
      if (sync) {
        process.nextTick(function () {
          self._finish()
        })
      } else {
        self._finish()
      }
    }
  }
}

Glob.prototype._finish = function () {
  assert(this instanceof Glob)
  if (this.aborted)
    return

  if (this.realpath && !this._didRealpath)
    return this._realpath()

  common.finish(this)
  this.emit('end', this.found)
}

Glob.prototype._realpath = function () {
  if (this._didRealpath)
    return

  this._didRealpath = true

  var n = this.matches.length
  if (n === 0)
    return this._finish()

  var self = this
  for (var i = 0; i < this.matches.length; i++)
    this._realpathSet(i, next)

  function next () {
    if (--n === 0)
      self._finish()
  }
}

Glob.prototype._realpathSet = function (index, cb) {
  var matchset = this.matches[index]
  if (!matchset)
    return cb()

  var found = Object.keys(matchset)
  var self = this
  var n = found.length

  if (n === 0)
    return cb()

  var set = this.matches[index] = Object.create(null)
  found.forEach(function (p, i) {
    // If there's a problem with the stat, then it means that
    // one or more of the links in the realpath couldn't be
    // resolved.  just return the abs value in that case.
    p = self._makeAbs(p)
    rp.realpath(p, self.realpathCache, function (er, real) {
      if (!er)
        set[real] = true
      else if (er.syscall === 'stat')
        set[p] = true
      else
        self.emit('error', er) // srsly wtf right here

      if (--n === 0) {
        self.matches[index] = set
        cb()
      }
    })
  })
}

Glob.prototype._mark = function (p) {
  return common.mark(this, p)
}

Glob.prototype._makeAbs = function (f) {
  return common.makeAbs(this, f)
}

Glob.prototype.abort = function () {
  this.aborted = true
  this.emit('abort')
}

Glob.prototype.pause = function () {
  if (!this.paused) {
    this.paused = true
    this.emit('pause')
  }
}

Glob.prototype.resume = function () {
  if (this.paused) {
    this.emit('resume')
    this.paused = false
    if (this._emitQueue.length) {
      var eq = this._emitQueue.slice(0)
      this._emitQueue.length = 0
      for (var i = 0; i < eq.length; i ++) {
        var e = eq[i]
        this._emitMatch(e[0], e[1])
      }
    }
    if (this._processQueue.length) {
      var pq = this._processQueue.slice(0)
      this._processQueue.length = 0
      for (var i = 0; i < pq.length; i ++) {
        var p = pq[i]
        this._processing--
        this._process(p[0], p[1], p[2], p[3])
      }
    }
  }
}

Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
  assert(this instanceof Glob)
  assert(typeof cb === 'function')

  if (this.aborted)
    return

  this._processing++
  if (this.paused) {
    this._processQueue.push([pattern, index, inGlobStar, cb])
    return
  }

  //console.error('PROCESS %d', this._processing, pattern)

  // Get the first [n] parts of pattern that are all strings.
  var n = 0
  while (typeof pattern[n] === 'string') {
    n ++
  }
  // now n is the index of the first one that is *not* a string.

  // see if there's anything else
  var prefix
  switch (n) {
    // if not, then this is rather simple
    case pattern.length:
      this._processSimple(pattern.join('/'), index, cb)
      return

    case 0:
      // pattern *starts* with some non-trivial item.
      // going to readdir(cwd), but not include the prefix in matches.
      prefix = null
      break

    default:
      // pattern has some string bits in the front.
      // whatever it starts with, whether that's 'absolute' like /foo/bar,
      // or 'relative' like '../baz'
      prefix = pattern.slice(0, n).join('/')
      break
  }

  var remain = pattern.slice(n)

  // get the list of entries.
  var read
  if (prefix === null)
    read = '.'
  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
    if (!prefix || !isAbsolute(prefix))
      prefix = '/' + prefix
    read = prefix
  } else
    read = prefix

  var abs = this._makeAbs(read)

  //if ignored, skip _processing
  if (childrenIgnored(this, read))
    return cb()

  var isGlobStar = remain[0] === minimatch.GLOBSTAR
  if (isGlobStar)
    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
  else
    this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
}

Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
  var self = this
  this._readdir(abs, inGlobStar, function (er, entries) {
    return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
  })
}

Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {

  // if the abs isn't a dir, then nothing can match!
  if (!entries)
    return cb()

  // It will only match dot entries if it starts with a dot, or if
  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
  var pn = remain[0]
  var negate = !!this.minimatch.negate
  var rawGlob = pn._glob
  var dotOk = this.dot || rawGlob.charAt(0) === '.'

  var matchedEntries = []
  for (var i = 0; i < entries.length; i++) {
    var e = entries[i]
    if (e.charAt(0) !== '.' || dotOk) {
      var m
      if (negate && !prefix) {
        m = !e.match(pn)
      } else {
        m = e.match(pn)
      }
      if (m)
        matchedEntries.push(e)
    }
  }

  //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)

  var len = matchedEntries.length
  // If there are no matched entries, then nothing matches.
  if (len === 0)
    return cb()

  // if this is the last remaining pattern bit, then no need for
  // an additional stat *unless* the user has specified mark or
  // stat explicitly.  We know they exist, since readdir returned
  // them.

  if (remain.length === 1 && !this.mark && !this.stat) {
    if (!this.matches[index])
      this.matches[index] = Object.create(null)

    for (var i = 0; i < len; i ++) {
      var e = matchedEntries[i]
      if (prefix) {
        if (prefix !== '/')
          e = prefix + '/' + e
        else
          e = prefix + e
      }

      if (e.charAt(0) === '/' && !this.nomount) {
        e = path.join(this.root, e)
      }
      this._emitMatch(index, e)
    }
    // This was the last one, and no stats were needed
    return cb()
  }

  // now test all matched entries as stand-ins for that part
  // of the pattern.
  remain.shift()
  for (var i = 0; i < len; i ++) {
    var e = matchedEntries[i]
    var newPattern
    if (prefix) {
      if (prefix !== '/')
        e = prefix + '/' + e
      else
        e = prefix + e
    }
    this._process([e].concat(remain), index, inGlobStar, cb)
  }
  cb()
}

Glob.prototype._emitMatch = function (index, e) {
  if (this.aborted)
    return

  if (isIgnored(this, e))
    return

  if (this.paused) {
    this._emitQueue.push([index, e])
    return
  }

  var abs = isAbsolute(e) ? e : this._makeAbs(e)

  if (this.mark)
    e = this._mark(e)

  if (this.absolute)
    e = abs

  if (this.matches[index][e])
    return

  if (this.nodir) {
    var c = this.cache[abs]
    if (c === 'DIR' || Array.isArray(c))
      return
  }

  this.matches[index][e] = true

  var st = this.statCache[abs]
  if (st)
    this.emit('stat', e, st)

  this.emit('match', e)
}

Glob.prototype._readdirInGlobStar = function (abs, cb) {
  if (this.aborted)
    return

  // follow all symlinked directories forever
  // just proceed as if this is a non-globstar situation
  if (this.follow)
    return this._readdir(abs, false, cb)

  var lstatkey = 'lstat\0' + abs
  var self = this
  var lstatcb = inflight(lstatkey, lstatcb_)

  if (lstatcb)
    fs.lstat(abs, lstatcb)

  function lstatcb_ (er, lstat) {
    if (er && er.code === 'ENOENT')
      return cb()

    var isSym = lstat && lstat.isSymbolicLink()
    self.symlinks[abs] = isSym

    // If it's not a symlink or a dir, then it's definitely a regular file.
    // don't bother doing a readdir in that case.
    if (!isSym && lstat && !lstat.isDirectory()) {
      self.cache[abs] = 'FILE'
      cb()
    } else
      self._readdir(abs, false, cb)
  }
}

Glob.prototype._readdir = function (abs, inGlobStar, cb) {
  if (this.aborted)
    return

  cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
  if (!cb)
    return

  //console.error('RD %j %j', +inGlobStar, abs)
  if (inGlobStar && !ownProp(this.symlinks, abs))
    return this._readdirInGlobStar(abs, cb)

  if (ownProp(this.cache, abs)) {
    var c = this.cache[abs]
    if (!c || c === 'FILE')
      return cb()

    if (Array.isArray(c))
      return cb(null, c)
  }

  var self = this
  fs.readdir(abs, readdirCb(this, abs, cb))
}

function readdirCb (self, abs, cb) {
  return function (er, entries) {
    if (er)
      self._readdirError(abs, er, cb)
    else
      self._readdirEntries(abs, entries, cb)
  }
}

Glob.prototype._readdirEntries = function (abs, entries, cb) {
  if (this.aborted)
    return

  // if we haven't asked to stat everything, then just
  // assume that everything in there exists, so we can avoid
  // having to stat it a second time.
  if (!this.mark && !this.stat) {
    for (var i = 0; i < entries.length; i ++) {
      var e = entries[i]
      if (abs === '/')
        e = abs + e
      else
        e = abs + '/' + e
      this.cache[e] = true
    }
  }

  this.cache[abs] = entries
  return cb(null, entries)
}

Glob.prototype._readdirError = function (f, er, cb) {
  if (this.aborted)
    return

  // handle errors, and cache the information
  switch (er.code) {
    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
    case 'ENOTDIR': // totally normal. means it *does* exist.
      var abs = this._makeAbs(f)
      this.cache[abs] = 'FILE'
      if (abs === this.cwdAbs) {
        var error = new Error(er.code + ' invalid cwd ' + this.cwd)
        error.path = this.cwd
        error.code = er.code
        this.emit('error', error)
        this.abort()
      }
      break

    case 'ENOENT': // not terribly unusual
    case 'ELOOP':
    case 'ENAMETOOLONG':
    case 'UNKNOWN':
      this.cache[this._makeAbs(f)] = false
      break

    default: // some unusual error.  Treat as failure.
      this.cache[this._makeAbs(f)] = false
      if (this.strict) {
        this.emit('error', er)
        // If the error is handled, then we abort
        // if not, we threw out of here
        this.abort()
      }
      if (!this.silent)
        console.error('glob error', er)
      break
  }

  return cb()
}

Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
  var self = this
  this._readdir(abs, inGlobStar, function (er, entries) {
    self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
  })
}


Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
  //console.error('pgs2', prefix, remain[0], entries)

  // no entries means not a dir, so it can never have matches
  // foo.txt/** doesn't match foo.txt
  if (!entries)
    return cb()

  // test without the globstar, and with every child both below
  // and replacing the globstar.
  var remainWithoutGlobStar = remain.slice(1)
  var gspref = prefix ? [ prefix ] : []
  var noGlobStar = gspref.concat(remainWithoutGlobStar)

  // the noGlobStar pattern exits the inGlobStar state
  this._process(noGlobStar, index, false, cb)

  var isSym = this.symlinks[abs]
  var len = entries.length

  // If it's a symlink, and we're in a globstar, then stop
  if (isSym && inGlobStar)
    return cb()

  for (var i = 0; i < len; i++) {
    var e = entries[i]
    if (e.charAt(0) === '.' && !this.dot)
      continue

    // these two cases enter the inGlobStar state
    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
    this._process(instead, index, true, cb)

    var below = gspref.concat(entries[i], remain)
    this._process(below, index, true, cb)
  }

  cb()
}

Glob.prototype._processSimple = function (prefix, index, cb) {
  // XXX review this.  Shouldn't it be doing the mounting etc
  // before doing stat?  kinda weird?
  var self = this
  this._stat(prefix, function (er, exists) {
    self._processSimple2(prefix, index, er, exists, cb)
  })
}
Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {

  //console.error('ps2', prefix, exists)

  if (!this.matches[index])
    this.matches[index] = Object.create(null)

  // If it doesn't exist, then just mark the lack of results
  if (!exists)
    return cb()

  if (prefix && isAbsolute(prefix) && !this.nomount) {
    var trail = /[\/\\]$/.test(prefix)
    if (prefix.charAt(0) === '/') {
      prefix = path.join(this.root, prefix)
    } else {
      prefix = path.resolve(this.root, prefix)
      if (trail)
        prefix += '/'
    }
  }

  if (process.platform === 'win32')
    prefix = prefix.replace(/\\/g, '/')

  // Mark this as a match
  this._emitMatch(index, prefix)
  cb()
}

// Returns either 'DIR', 'FILE', or false
Glob.prototype._stat = function (f, cb) {
  var abs = this._makeAbs(f)
  var needDir = f.slice(-1) === '/'

  if (f.length > this.maxLength)
    return cb()

  if (!this.stat && ownProp(this.cache, abs)) {
    var c = this.cache[abs]

    if (Array.isArray(c))
      c = 'DIR'

    // It exists, but maybe not how we need it
    if (!needDir || c === 'DIR')
      return cb(null, c)

    if (needDir && c === 'FILE')
      return cb()

    // otherwise we have to stat, because maybe c=true
    // if we know it exists, but not what it is.
  }

  var exists
  var stat = this.statCache[abs]
  if (stat !== undefined) {
    if (stat === false)
      return cb(null, stat)
    else {
      var type = stat.isDirectory() ? 'DIR' : 'FILE'
      if (needDir && type === 'FILE')
        return cb()
      else
        return cb(null, type, stat)
    }
  }

  var self = this
  var statcb = inflight('stat\0' + abs, lstatcb_)
  if (statcb)
    fs.lstat(abs, statcb)

  function lstatcb_ (er, lstat) {
    if (lstat && lstat.isSymbolicLink()) {
      // If it's a symlink, then treat it as the target, unless
      // the target does not exist, then treat it as a file.
      return fs.stat(abs, function (er, stat) {
        if (er)
          self._stat2(f, abs, null, lstat, cb)
        else
          self._stat2(f, abs, er, stat, cb)
      })
    } else {
      self._stat2(f, abs, er, lstat, cb)
    }
  }
}

Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
  if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
    this.statCache[abs] = false
    return cb()
  }

  var needDir = f.slice(-1) === '/'
  this.statCache[abs] = stat

  if (abs.slice(-1) === '/' && stat && !stat.isDirectory())
    return cb(null, false, stat)

  var c = true
  if (stat)
    c = stat.isDirectory() ? 'DIR' : 'FILE'
  this.cache[abs] = this.cache[abs] || c

  if (needDir && c === 'FILE')
    return cb()

  return cb(null, c, stat)
}


/***/ }),
/* 125 */
/***/ (function(module, exports) {

function Message() {
    Object.defineProperties(
        this, {
            data: {
                enumerable: true,
                get: getData,
                set: setData
            },
            type: {
                enumerable: true,
                get: getType,
                set: setType
            },
            load:{
                enumarable:true,
                writable:false,
                value:parse
            },
            JSON: {
                enumerable: true,
                get: getJSON
            }
        }
    );

    var type = '';
    var data = {};

    function getType() {
        return type;
    }

    function getData() {
        return data;
    }

    function getJSON() {
        return JSON.stringify(
            {
                type: type,
                data: data
            }
        );
    }

    function setType(value) {
        type = value;
    }

    function setData(value) {
        data = value;
    }

    function parse(message){
        try{
            var message=JSON.parse(message);
            type=message.type;
            data=message.data;
        }catch(err){
            var badMessage=message;
            type='error',
            data={
                message:'Invalid JSON response format',
                err:err,
                response:badMessage
            }
        }
    }
}

module.exports=Message;


/***/ }),
/* 126 */
/***/ (function(module, exports) {

/**
 * This method returns `undefined`.
 *
 * @static
 * @memberOf _
 * @since 2.3.0
 * @category Util
 * @example
 *
 * _.times(2, _.noop);
 * // => [undefined, undefined]
 */
function noop() {
  // No operation performed.
}

module.exports = noop;


/***/ }),
/* 127 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/*eslint no-magic-numbers: ["error", { "ignore": [ 0] }]*/

/**
 * @module entities
 */

const os = __webpack_require__(5);

/**
 * @class Defaults
 * @description Defaults Entity
 */
class Defaults{

    /**
     * @constructor
     * @method constructor
     * @return {void}
     */
    constructor(){

        this.appspace='app.';
        this.socketRoot='/tmp/';
        this.id=os.hostname();

        this.encoding='utf8';
        this.rawBuffer=false;
        this.sync=false;
        this.unlink=true;

        this.delimiter='\f';

        this.silent=false;
        this.logDepth=5;
        this.logInColor=true;
        this.logger=console.log.bind(console);

        this.maxConnections=100;
        this.retry=500;
        this.maxRetries=Infinity;
        this.stopRetrying=false;

        this.IPType=getIPType();
        this.tls=false;
        this.networkHost = (this.IPType == 'IPv6') ? '::1' : '127.0.0.1';
        this.networkPort = 8000;

        this.interface={
            localAddress:false,
            localPort:false,
            family:false,
            hints:false,
            lookup:false
        }
    }
}

/**
 * method to get ip type
 *
 * @method getIPType
 * @return {string} ip type
 */
function getIPType() {
    const networkInterfaces = os.networkInterfaces();
    let IPType = '';
    if (networkInterfaces
        && Array.isArray(networkInterfaces)
        && networkInterfaces.length > 0) {
        // getting the family of first network interface available
        IPType = networkInterfaces [
            Object.keys( networkInterfaces )[0]
        ][0].family;
    }
    return IPType;
}

module.exports=Defaults;


/***/ }),
/* 128 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const Defaults = __webpack_require__(127);

class Parser{
  constructor(config){
    if(!config){
      config=new Defaults;
    }
    this.delimiter=config.delimiter;
  }

  format(message){
    if(!message.data && message.data!==false && message.data!==0){
        message.data={};
    }
    if(message.data['_maxListeners']){
        message.data={};
    }

    message=message.JSON+this.delimiter;
    return message;
  }

  parse(data){
    let events=data.split(this.delimiter);
    events.pop();
    return events;
  }
}

module.exports=Parser;


/***/ }),
/* 129 */
/***/ (function(module, exports, __webpack_require__) {

/*

The MIT License (MIT)

Original Library
  - Copyright (c) Marak Squires

Additional functionality
 - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var colors = {};
module['exports'] = colors;

colors.themes = {};

var util = __webpack_require__(2);
var ansiStyles = colors.styles = __webpack_require__(1014);
var defineProps = Object.defineProperties;
var newLineRegex = new RegExp(/[\r\n]+/g);

colors.supportsColor = __webpack_require__(1016).supportsColor;

if (typeof colors.enabled === 'undefined') {
  colors.enabled = colors.supportsColor() !== false;
}

colors.enable = function() {
  colors.enabled = true;
};

colors.disable = function() {
  colors.enabled = false;
};

colors.stripColors = colors.strip = function(str) {
  return ('' + str).replace(/\x1B\[\d+m/g, '');
};

// eslint-disable-next-line no-unused-vars
var stylize = colors.stylize = function stylize(str, style) {
  if (!colors.enabled) {
    return str+'';
  }

  return ansiStyles[style].open + str + ansiStyles[style].close;
};

var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
var escapeStringRegexp = function(str) {
  if (typeof str !== 'string') {
    throw new TypeError('Expected a string');
  }
  return str.replace(matchOperatorsRe, '\\$&');
};

function build(_styles) {
  var builder = function builder() {
    return applyStyle.apply(builder, arguments);
  };
  builder._styles = _styles;
  // __proto__ is used because we must return a function, but there is
  // no way to create a function with a different prototype.
  builder.__proto__ = proto;
  return builder;
}

var styles = (function() {
  var ret = {};
  ansiStyles.grey = ansiStyles.gray;
  Object.keys(ansiStyles).forEach(function(key) {
    ansiStyles[key].closeRe =
      new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
    ret[key] = {
      get: function() {
        return build(this._styles.concat(key));
      },
    };
  });
  return ret;
})();

var proto = defineProps(function colors() {}, styles);

function applyStyle() {
  var args = Array.prototype.slice.call(arguments);

  var str = args.map(function(arg) {
    if (arg !== undefined && arg.constructor === String) {
      return arg;
    } else {
      return util.inspect(arg);
    }
  }).join(' ');

  if (!colors.enabled || !str) {
    return str;
  }

  var newLinesPresent = str.indexOf('\n') != -1;

  var nestedStyles = this._styles;

  var i = nestedStyles.length;
  while (i--) {
    var code = ansiStyles[nestedStyles[i]];
    str = code.open + str.replace(code.closeRe, code.open) + code.close;
    if (newLinesPresent) {
      str = str.replace(newLineRegex, code.close + '\n' + code.open);
    }
  }

  return str;
}

colors.setTheme = function(theme) {
  if (typeof theme === 'string') {
    console.log('colors.setTheme now only accepts an object, not a string.  ' +
      'If you are trying to set a theme from a file, it is now your (the ' +
      'caller\'s) responsibility to require the file.  The old syntax ' +
      'looked like colors.setTheme(__dirname + ' +
      '\'/../themes/generic-logging.js\'); The new syntax looks like '+
      'colors.setTheme(require(__dirname + ' +
      '\'/../themes/generic-logging.js\'));');
    return;
  }
  for (var style in theme) {
    (function(style) {
      colors[style] = function(str) {
        if (typeof theme[style] === 'object') {
          var out = str;
          for (var i in theme[style]) {
            out = colors[theme[style][i]](out);
          }
          return out;
        }
        return colors[theme[style]](str);
      };
    })(style);
  }
};

function init() {
  var ret = {};
  Object.keys(styles).forEach(function(name) {
    ret[name] = {
      get: function() {
        return build([name]);
      },
    };
  });
  return ret;
}

var sequencer = function sequencer(map, str) {
  var exploded = str.split('');
  exploded = exploded.map(map);
  return exploded.join('');
};

// custom formatter methods
colors.trap = __webpack_require__(1008);
colors.zalgo = __webpack_require__(1009);

// maps
colors.maps = {};
colors.maps.america = __webpack_require__(1010);
colors.maps.zebra = __webpack_require__(1013);
colors.maps.rainbow = __webpack_require__(1011);
colors.maps.random = __webpack_require__(1012);

for (var map in colors.maps) {
  (function(map) {
    colors[map] = function(str) {
      return sequencer(colors.maps[map], str);
    };
  })(map);
}

defineProps(colors, init());


/***/ }),
/* 130 */
/***/ (function(module, exports) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

/**
 * This is a helper function for getting values from parameter/options
 * objects.
 *
 * @param args The object we are extracting values from
 * @param name The name of the property we are getting.
 * @param defaultValue An optional value to return if the property is missing
 * from the object. If this is not specified and the property is missing, an
 * error will be thrown.
 */
function getArg(aArgs, aName, aDefaultValue) {
  if (aName in aArgs) {
    return aArgs[aName];
  } else if (arguments.length === 3) {
    return aDefaultValue;
  } else {
    throw new Error('"' + aName + '" is a required argument.');
  }
}
exports.getArg = getArg;

var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
var dataUrlRegexp = /^data:.+\,.+$/;

function urlParse(aUrl) {
  var match = aUrl.match(urlRegexp);
  if (!match) {
    return null;
  }
  return {
    scheme: match[1],
    auth: match[2],
    host: match[3],
    port: match[4],
    path: match[5]
  };
}
exports.urlParse = urlParse;

function urlGenerate(aParsedUrl) {
  var url = '';
  if (aParsedUrl.scheme) {
    url += aParsedUrl.scheme + ':';
  }
  url += '//';
  if (aParsedUrl.auth) {
    url += aParsedUrl.auth + '@';
  }
  if (aParsedUrl.host) {
    url += aParsedUrl.host;
  }
  if (aParsedUrl.port) {
    url += ":" + aParsedUrl.port
  }
  if (aParsedUrl.path) {
    url += aParsedUrl.path;
  }
  return url;
}
exports.urlGenerate = urlGenerate;

/**
 * Normalizes a path, or the path portion of a URL:
 *
 * - Replaces consecutive slashes with one slash.
 * - Removes unnecessary '.' parts.
 * - Removes unnecessary '<dir>/..' parts.
 *
 * Based on code in the Node.js 'path' core module.
 *
 * @param aPath The path or url to normalize.
 */
function normalize(aPath) {
  var path = aPath;
  var url = urlParse(aPath);
  if (url) {
    if (!url.path) {
      return aPath;
    }
    path = url.path;
  }
  var isAbsolute = exports.isAbsolute(path);

  var parts = path.split(/\/+/);
  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
    part = parts[i];
    if (part === '.') {
      parts.splice(i, 1);
    } else if (part === '..') {
      up++;
    } else if (up > 0) {
      if (part === '') {
        // The first part is blank if the path is absolute. Trying to go
        // above the root is a no-op. Therefore we can remove all '..' parts
        // directly after the root.
        parts.splice(i + 1, up);
        up = 0;
      } else {
        parts.splice(i, 2);
        up--;
      }
    }
  }
  path = parts.join('/');

  if (path === '') {
    path = isAbsolute ? '/' : '.';
  }

  if (url) {
    url.path = path;
    return urlGenerate(url);
  }
  return path;
}
exports.normalize = normalize;

/**
 * Joins two paths/URLs.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be joined with the root.
 *
 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
 *   first.
 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
 *   is updated with the result and aRoot is returned. Otherwise the result
 *   is returned.
 *   - If aPath is absolute, the result is aPath.
 *   - Otherwise the two paths are joined with a slash.
 * - Joining for example 'http://' and 'www.example.com' is also supported.
 */
function join(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }
  if (aPath === "") {
    aPath = ".";
  }
  var aPathUrl = urlParse(aPath);
  var aRootUrl = urlParse(aRoot);
  if (aRootUrl) {
    aRoot = aRootUrl.path || '/';
  }

  // `join(foo, '//www.example.org')`
  if (aPathUrl && !aPathUrl.scheme) {
    if (aRootUrl) {
      aPathUrl.scheme = aRootUrl.scheme;
    }
    return urlGenerate(aPathUrl);
  }

  if (aPathUrl || aPath.match(dataUrlRegexp)) {
    return aPath;
  }

  // `join('http://', 'www.example.com')`
  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
    aRootUrl.host = aPath;
    return urlGenerate(aRootUrl);
  }

  var joined = aPath.charAt(0) === '/'
    ? aPath
    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);

  if (aRootUrl) {
    aRootUrl.path = joined;
    return urlGenerate(aRootUrl);
  }
  return joined;
}
exports.join = join;

exports.isAbsolute = function (aPath) {
  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
};

/**
 * Make a path relative to a URL or another path.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be made relative to aRoot.
 */
function relative(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }

  aRoot = aRoot.replace(/\/$/, '');

  // It is possible for the path to be above the root. In this case, simply
  // checking whether the root is a prefix of the path won't work. Instead, we
  // need to remove components from the root one by one, until either we find
  // a prefix that fits, or we run out of components to remove.
  var level = 0;
  while (aPath.indexOf(aRoot + '/') !== 0) {
    var index = aRoot.lastIndexOf("/");
    if (index < 0) {
      return aPath;
    }

    // If the only part of the root that is left is the scheme (i.e. http://,
    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
    // have exhausted all components, so the path is not relative to the root.
    aRoot = aRoot.slice(0, index);
    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
      return aPath;
    }

    ++level;
  }

  // Make sure we add a "../" for each component we removed from the root.
  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
}
exports.relative = relative;

var supportsNullProto = (function () {
  var obj = Object.create(null);
  return !('__proto__' in obj);
}());

function identity (s) {
  return s;
}

/**
 * Because behavior goes wacky when you set `__proto__` on objects, we
 * have to prefix all the strings in our set with an arbitrary character.
 *
 * See https://github.com/mozilla/source-map/pull/31 and
 * https://github.com/mozilla/source-map/issues/30
 *
 * @param String aStr
 */
function toSetString(aStr) {
  if (isProtoString(aStr)) {
    return '$' + aStr;
  }

  return aStr;
}
exports.toSetString = supportsNullProto ? identity : toSetString;

function fromSetString(aStr) {
  if (isProtoString(aStr)) {
    return aStr.slice(1);
  }

  return aStr;
}
exports.fromSetString = supportsNullProto ? identity : fromSetString;

function isProtoString(s) {
  if (!s) {
    return false;
  }

  var length = s.length;

  if (length < 9 /* "__proto__".length */) {
    return false;
  }

  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
      s.charCodeAt(length - 9) !== 95  /* '_' */) {
    return false;
  }

  for (var i = length - 10; i >= 0; i--) {
    if (s.charCodeAt(i) !== 36 /* '$' */) {
      return false;
    }
  }

  return true;
}

/**
 * Comparator between two mappings where the original positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same original source/line/column, but different generated
 * line and column the same. Useful when searching for a mapping with a
 * stubbed out mapping.
 */
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  var cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0 || onlyCompareOriginal) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByOriginalPositions = compareByOriginalPositions;

/**
 * Comparator between two mappings with deflated source and name indices where
 * the generated positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same generated line and column, but different
 * source/name/original line and column the same. Useful when searching for a
 * mapping with a stubbed out mapping.
 */
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0 || onlyCompareGenerated) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;

function strcmp(aStr1, aStr2) {
  if (aStr1 === aStr2) {
    return 0;
  }

  if (aStr1 === null) {
    return 1; // aStr2 !== null
  }

  if (aStr2 === null) {
    return -1; // aStr1 !== null
  }

  if (aStr1 > aStr2) {
    return 1;
  }

  return -1;
}

/**
 * Comparator between two mappings with inflated source and name strings where
 * the generated positions are compared.
 */
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;

/**
 * Strip any JSON XSSI avoidance prefix from the string (as documented
 * in the source maps specification), and then parse the string as
 * JSON.
 */
function parseSourceMapInput(str) {
  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
}
exports.parseSourceMapInput = parseSourceMapInput;

/**
 * Compute the URL of a source given the the source root, the source's
 * URL, and the source map's URL.
 */
function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
  sourceURL = sourceURL || '';

  if (sourceRoot) {
    // This follows what Chrome does.
    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
      sourceRoot += '/';
    }
    // The spec says:
    //   Line 4: An optional source root, useful for relocating source
    //   files on a server or removing repeated values in the
    //   “sources” entry.  This value is prepended to the individual
    //   entries in the “source” field.
    sourceURL = sourceRoot + sourceURL;
  }

  // Historically, SourceMapConsumer did not take the sourceMapURL as
  // a parameter.  This mode is still somewhat supported, which is why
  // this code block is conditional.  However, it's preferable to pass
  // the source map URL to SourceMapConsumer, so that this function
  // can implement the source URL resolution algorithm as outlined in
  // the spec.  This block is basically the equivalent of:
  //    new URL(sourceURL, sourceMapURL).toString()
  // ... except it avoids using URL, which wasn't available in the
  // older releases of node still supported by this library.
  //
  // The spec says:
  //   If the sources are not absolute URLs after prepending of the
  //   “sourceRoot”, the sources are resolved relative to the
  //   SourceMap (like resolving script src in a html document).
  if (sourceMapURL) {
    var parsed = urlParse(sourceMapURL);
    if (!parsed) {
      throw new Error("sourceMapURL could not be parsed");
    }
    if (parsed.path) {
      // Strip the last path component, but keep the "/".
      var index = parsed.path.lastIndexOf('/');
      if (index >= 0) {
        parsed.path = parsed.path.substring(0, index + 1);
      }
    }
    sourceURL = join(urlGenerate(parsed), sourceURL);
  }

  return normalize(sourceURL);
}
exports.computeSourceURL = computeSourceURL;


/***/ }),
/* 131 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2016 Joyent, Inc.

module.exports = Certificate;

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var Fingerprint = __webpack_require__(132);
var Signature = __webpack_require__(57);
var errs = __webpack_require__(56);
var util = __webpack_require__(2);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var Identity = __webpack_require__(134);

var formats = {};
formats['openssh'] = __webpack_require__(1074);
formats['x509'] = __webpack_require__(422);
formats['pem'] = __webpack_require__(1075);

var CertificateParseError = errs.CertificateParseError;
var InvalidAlgorithmError = errs.InvalidAlgorithmError;

function Certificate(opts) {
	assert.object(opts, 'options');
	assert.arrayOfObject(opts.subjects, 'options.subjects');
	utils.assertCompatible(opts.subjects[0], Identity, [1, 0],
	    'options.subjects');
	utils.assertCompatible(opts.subjectKey, Key, [1, 0],
	    'options.subjectKey');
	utils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer');
	if (opts.issuerKey !== undefined) {
		utils.assertCompatible(opts.issuerKey, Key, [1, 0],
		    'options.issuerKey');
	}
	assert.object(opts.signatures, 'options.signatures');
	assert.buffer(opts.serial, 'options.serial');
	assert.date(opts.validFrom, 'options.validFrom');
	assert.date(opts.validUntil, 'optons.validUntil');

	assert.optionalArrayOfString(opts.purposes, 'options.purposes');

	this._hashCache = {};

	this.subjects = opts.subjects;
	this.issuer = opts.issuer;
	this.subjectKey = opts.subjectKey;
	this.issuerKey = opts.issuerKey;
	this.signatures = opts.signatures;
	this.serial = opts.serial;
	this.validFrom = opts.validFrom;
	this.validUntil = opts.validUntil;
	this.purposes = opts.purposes;
}

Certificate.formats = formats;

Certificate.prototype.toBuffer = function (format, options) {
	if (format === undefined)
		format = 'x509';
	assert.string(format, 'format');
	assert.object(formats[format], 'formats[format]');
	assert.optionalObject(options, 'options');

	return (formats[format].write(this, options));
};

Certificate.prototype.toString = function (format, options) {
	if (format === undefined)
		format = 'pem';
	return (this.toBuffer(format, options).toString());
};

Certificate.prototype.fingerprint = function (algo) {
	if (algo === undefined)
		algo = 'sha256';
	assert.string(algo, 'algorithm');
	var opts = {
		type: 'certificate',
		hash: this.hash(algo),
		algorithm: algo
	};
	return (new Fingerprint(opts));
};

Certificate.prototype.hash = function (algo) {
	assert.string(algo, 'algorithm');
	algo = algo.toLowerCase();
	if (algs.hashAlgs[algo] === undefined)
		throw (new InvalidAlgorithmError(algo));

	if (this._hashCache[algo])
		return (this._hashCache[algo]);

	var hash = crypto.createHash(algo).
	    update(this.toBuffer('x509')).digest();
	this._hashCache[algo] = hash;
	return (hash);
};

Certificate.prototype.isExpired = function (when) {
	if (when === undefined)
		when = new Date();
	return (!((when.getTime() >= this.validFrom.getTime()) &&
		(when.getTime() < this.validUntil.getTime())));
};

Certificate.prototype.isSignedBy = function (issuerCert) {
	utils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer');

	if (!this.issuer.equals(issuerCert.subjects[0]))
		return (false);
	if (this.issuer.purposes && this.issuer.purposes.length > 0 &&
	    this.issuer.purposes.indexOf('ca') === -1) {
		return (false);
	}

	return (this.isSignedByKey(issuerCert.subjectKey));
};

Certificate.prototype.isSignedByKey = function (issuerKey) {
	utils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey');

	if (this.issuerKey !== undefined) {
		return (this.issuerKey.
		    fingerprint('sha512').matches(issuerKey));
	}

	var fmt = Object.keys(this.signatures)[0];
	var valid = formats[fmt].verify(this, issuerKey);
	if (valid)
		this.issuerKey = issuerKey;
	return (valid);
};

Certificate.prototype.signWith = function (key) {
	utils.assertCompatible(key, PrivateKey, [1, 2], 'key');
	var fmts = Object.keys(formats);
	var didOne = false;
	for (var i = 0; i < fmts.length; ++i) {
		if (fmts[i] !== 'pem') {
			var ret = formats[fmts[i]].sign(this, key);
			if (ret === true)
				didOne = true;
		}
	}
	if (!didOne) {
		throw (new Error('Failed to sign the certificate for any ' +
		    'available certificate formats'));
	}
};

Certificate.createSelfSigned = function (subjectOrSubjects, key, options) {
	var subjects;
	if (Array.isArray(subjectOrSubjects))
		subjects = subjectOrSubjects;
	else
		subjects = [subjectOrSubjects];

	assert.arrayOfObject(subjects);
	subjects.forEach(function (subject) {
		utils.assertCompatible(subject, Identity, [1, 0], 'subject');
	});

	utils.assertCompatible(key, PrivateKey, [1, 2], 'private key');

	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	assert.optionalObject(options.validFrom, 'options.validFrom');
	assert.optionalObject(options.validUntil, 'options.validUntil');
	var validFrom = options.validFrom;
	var validUntil = options.validUntil;
	if (validFrom === undefined)
		validFrom = new Date();
	if (validUntil === undefined) {
		assert.optionalNumber(options.lifetime, 'options.lifetime');
		var lifetime = options.lifetime;
		if (lifetime === undefined)
			lifetime = 10*365*24*3600;
		validUntil = new Date();
		validUntil.setTime(validUntil.getTime() + lifetime*1000);
	}
	assert.optionalBuffer(options.serial, 'options.serial');
	var serial = options.serial;
	if (serial === undefined)
		serial = Buffer.from('0000000000000001', 'hex');

	var purposes = options.purposes;
	if (purposes === undefined)
		purposes = [];

	if (purposes.indexOf('signature') === -1)
		purposes.push('signature');

	/* Self-signed certs are always CAs. */
	if (purposes.indexOf('ca') === -1)
		purposes.push('ca');
	if (purposes.indexOf('crl') === -1)
		purposes.push('crl');

	/*
	 * If we weren't explicitly given any other purposes, do the sensible
	 * thing and add some basic ones depending on the subject type.
	 */
	if (purposes.length <= 3) {
		var hostSubjects = subjects.filter(function (subject) {
			return (subject.type === 'host');
		});
		var userSubjects = subjects.filter(function (subject) {
			return (subject.type === 'user');
		});
		if (hostSubjects.length > 0) {
			if (purposes.indexOf('serverAuth') === -1)
				purposes.push('serverAuth');
		}
		if (userSubjects.length > 0) {
			if (purposes.indexOf('clientAuth') === -1)
				purposes.push('clientAuth');
		}
		if (userSubjects.length > 0 || hostSubjects.length > 0) {
			if (purposes.indexOf('keyAgreement') === -1)
				purposes.push('keyAgreement');
			if (key.type === 'rsa' &&
			    purposes.indexOf('encryption') === -1)
				purposes.push('encryption');
		}
	}

	var cert = new Certificate({
		subjects: subjects,
		issuer: subjects[0],
		subjectKey: key.toPublic(),
		issuerKey: key.toPublic(),
		signatures: {},
		serial: serial,
		validFrom: validFrom,
		validUntil: validUntil,
		purposes: purposes
	});
	cert.signWith(key);

	return (cert);
};

Certificate.create =
    function (subjectOrSubjects, key, issuer, issuerKey, options) {
	var subjects;
	if (Array.isArray(subjectOrSubjects))
		subjects = subjectOrSubjects;
	else
		subjects = [subjectOrSubjects];

	assert.arrayOfObject(subjects);
	subjects.forEach(function (subject) {
		utils.assertCompatible(subject, Identity, [1, 0], 'subject');
	});

	utils.assertCompatible(key, Key, [1, 0], 'key');
	if (PrivateKey.isPrivateKey(key))
		key = key.toPublic();
	utils.assertCompatible(issuer, Identity, [1, 0], 'issuer');
	utils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key');

	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	assert.optionalObject(options.validFrom, 'options.validFrom');
	assert.optionalObject(options.validUntil, 'options.validUntil');
	var validFrom = options.validFrom;
	var validUntil = options.validUntil;
	if (validFrom === undefined)
		validFrom = new Date();
	if (validUntil === undefined) {
		assert.optionalNumber(options.lifetime, 'options.lifetime');
		var lifetime = options.lifetime;
		if (lifetime === undefined)
			lifetime = 10*365*24*3600;
		validUntil = new Date();
		validUntil.setTime(validUntil.getTime() + lifetime*1000);
	}
	assert.optionalBuffer(options.serial, 'options.serial');
	var serial = options.serial;
	if (serial === undefined)
		serial = Buffer.from('0000000000000001', 'hex');

	var purposes = options.purposes;
	if (purposes === undefined)
		purposes = [];

	if (purposes.indexOf('signature') === -1)
		purposes.push('signature');

	if (options.ca === true) {
		if (purposes.indexOf('ca') === -1)
			purposes.push('ca');
		if (purposes.indexOf('crl') === -1)
			purposes.push('crl');
	}

	var hostSubjects = subjects.filter(function (subject) {
		return (subject.type === 'host');
	});
	var userSubjects = subjects.filter(function (subject) {
		return (subject.type === 'user');
	});
	if (hostSubjects.length > 0) {
		if (purposes.indexOf('serverAuth') === -1)
			purposes.push('serverAuth');
	}
	if (userSubjects.length > 0) {
		if (purposes.indexOf('clientAuth') === -1)
			purposes.push('clientAuth');
	}
	if (userSubjects.length > 0 || hostSubjects.length > 0) {
		if (purposes.indexOf('keyAgreement') === -1)
			purposes.push('keyAgreement');
		if (key.type === 'rsa' &&
		    purposes.indexOf('encryption') === -1)
			purposes.push('encryption');
	}

	var cert = new Certificate({
		subjects: subjects,
		issuer: issuer,
		subjectKey: key,
		issuerKey: issuerKey.toPublic(),
		signatures: {},
		serial: serial,
		validFrom: validFrom,
		validUntil: validUntil,
		purposes: purposes
	});
	cert.signWith(issuerKey);

	return (cert);
};

Certificate.parse = function (data, format, options) {
	if (typeof (data) !== 'string')
		assert.buffer(data, 'data');
	if (format === undefined)
		format = 'auto';
	assert.string(format, 'format');
	if (typeof (options) === 'string')
		options = { filename: options };
	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	assert.optionalString(options.filename, 'options.filename');
	if (options.filename === undefined)
		options.filename = '(unnamed)';

	assert.object(formats[format], 'formats[format]');

	try {
		var k = formats[format].read(data, options);
		return (k);
	} catch (e) {
		throw (new CertificateParseError(options.filename, format, e));
	}
};

Certificate.isCertificate = function (obj, ver) {
	return (utils.isCompatible(obj, Certificate, ver));
};

/*
 * API versions for Certificate:
 * [1,0] -- initial ver
 */
Certificate.prototype._sshpkApiVersion = [1, 0];

Certificate._oldVersionDetect = function (obj) {
	return ([1, 0]);
};


/***/ }),
/* 132 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = Fingerprint;

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var errs = __webpack_require__(56);
var Key = __webpack_require__(16);
var Certificate = __webpack_require__(131);
var utils = __webpack_require__(12);

var FingerprintFormatError = errs.FingerprintFormatError;
var InvalidAlgorithmError = errs.InvalidAlgorithmError;

function Fingerprint(opts) {
	assert.object(opts, 'options');
	assert.string(opts.type, 'options.type');
	assert.buffer(opts.hash, 'options.hash');
	assert.string(opts.algorithm, 'options.algorithm');

	this.algorithm = opts.algorithm.toLowerCase();
	if (algs.hashAlgs[this.algorithm] !== true)
		throw (new InvalidAlgorithmError(this.algorithm));

	this.hash = opts.hash;
	this.type = opts.type;
}

Fingerprint.prototype.toString = function (format) {
	if (format === undefined) {
		if (this.algorithm === 'md5')
			format = 'hex';
		else
			format = 'base64';
	}
	assert.string(format);

	switch (format) {
	case 'hex':
		return (addColons(this.hash.toString('hex')));
	case 'base64':
		return (sshBase64Format(this.algorithm,
		    this.hash.toString('base64')));
	default:
		throw (new FingerprintFormatError(undefined, format));
	}
};

Fingerprint.prototype.matches = function (other) {
	assert.object(other, 'key or certificate');
	if (this.type === 'key') {
		utils.assertCompatible(other, Key, [1, 0], 'key');
	} else {
		utils.assertCompatible(other, Certificate, [1, 0],
		    'certificate');
	}

	var theirHash = other.hash(this.algorithm);
	var theirHash2 = crypto.createHash(this.algorithm).
	    update(theirHash).digest('base64');

	if (this.hash2 === undefined)
		this.hash2 = crypto.createHash(this.algorithm).
		    update(this.hash).digest('base64');

	return (this.hash2 === theirHash2);
};

Fingerprint.parse = function (fp, options) {
	assert.string(fp, 'fingerprint');

	var alg, hash, enAlgs;
	if (Array.isArray(options)) {
		enAlgs = options;
		options = {};
	}
	assert.optionalObject(options, 'options');
	if (options === undefined)
		options = {};
	if (options.enAlgs !== undefined)
		enAlgs = options.enAlgs;
	assert.optionalArrayOfString(enAlgs, 'algorithms');

	var parts = fp.split(':');
	if (parts.length == 2) {
		alg = parts[0].toLowerCase();
		/*JSSTYLED*/
		var base64RE = /^[A-Za-z0-9+\/=]+$/;
		if (!base64RE.test(parts[1]))
			throw (new FingerprintFormatError(fp));
		try {
			hash = Buffer.from(parts[1], 'base64');
		} catch (e) {
			throw (new FingerprintFormatError(fp));
		}
	} else if (parts.length > 2) {
		alg = 'md5';
		if (parts[0].toLowerCase() === 'md5')
			parts = parts.slice(1);
		parts = parts.join('');
		/*JSSTYLED*/
		var md5RE = /^[a-fA-F0-9]+$/;
		if (!md5RE.test(parts))
			throw (new FingerprintFormatError(fp));
		try {
			hash = Buffer.from(parts, 'hex');
		} catch (e) {
			throw (new FingerprintFormatError(fp));
		}
	}

	if (alg === undefined)
		throw (new FingerprintFormatError(fp));

	if (algs.hashAlgs[alg] === undefined)
		throw (new InvalidAlgorithmError(alg));

	if (enAlgs !== undefined) {
		enAlgs = enAlgs.map(function (a) { return a.toLowerCase(); });
		if (enAlgs.indexOf(alg) === -1)
			throw (new InvalidAlgorithmError(alg));
	}

	return (new Fingerprint({
		algorithm: alg,
		hash: hash,
		type: options.type || 'key'
	}));
};

function addColons(s) {
	/*JSSTYLED*/
	return (s.replace(/(.{2})(?=.)/g, '$1:'));
}

function base64Strip(s) {
	/*JSSTYLED*/
	return (s.replace(/=*$/, ''));
}

function sshBase64Format(alg, h) {
	return (alg.toUpperCase() + ':' + base64Strip(h));
}

Fingerprint.isFingerprint = function (obj, ver) {
	return (utils.isCompatible(obj, Fingerprint, ver));
};

/*
 * API versions for Fingerprint:
 * [1,0] -- initial ver
 * [1,1] -- first tagged ver
 */
Fingerprint.prototype._sshpkApiVersion = [1, 1];

Fingerprint._oldVersionDetect = function (obj) {
	assert.func(obj.toString);
	assert.func(obj.matches);
	return ([1, 0]);
};


/***/ }),
/* 133 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	readPkcs8: readPkcs8,
	write: write,
	writePkcs8: writePkcs8,

	readECDSACurve: readECDSACurve,
	writeECDSACurve: writeECDSACurve
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var pem = __webpack_require__(66);

function read(buf, options) {
	return (pem.read(buf, options, 'pkcs8'));
}

function write(key, options) {
	return (pem.write(key, options, 'pkcs8'));
}

/* Helper to read in a single mpint */
function readMPInt(der, nm) {
	assert.strictEqual(der.peek(), asn1.Ber.Integer,
	    nm + ' is not an Integer');
	return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
}

function readPkcs8(alg, type, der) {
	/* Private keys in pkcs#8 format have a weird extra int */
	if (der.peek() === asn1.Ber.Integer) {
		assert.strictEqual(type, 'private',
		    'unexpected Integer at start of public key');
		der.readString(asn1.Ber.Integer, true);
	}

	der.readSequence();
	var next = der.offset + der.length;

	var oid = der.readOID();
	switch (oid) {
	case '1.2.840.113549.1.1.1':
		der._offset = next;
		if (type === 'public')
			return (readPkcs8RSAPublic(der));
		else
			return (readPkcs8RSAPrivate(der));
	case '1.2.840.10040.4.1':
		if (type === 'public')
			return (readPkcs8DSAPublic(der));
		else
			return (readPkcs8DSAPrivate(der));
	case '1.2.840.10045.2.1':
		if (type === 'public')
			return (readPkcs8ECDSAPublic(der));
		else
			return (readPkcs8ECDSAPrivate(der));
	case '1.3.101.112':
		if (type === 'public') {
			return (readPkcs8EdDSAPublic(der));
		} else {
			return (readPkcs8EdDSAPrivate(der));
		}
	case '1.3.101.110':
		if (type === 'public') {
			return (readPkcs8X25519Public(der));
		} else {
			return (readPkcs8X25519Private(der));
		}
	default:
		throw (new Error('Unknown key type OID ' + oid));
	}
}

function readPkcs8RSAPublic(der) {
	// bit string sequence
	der.readSequence(asn1.Ber.BitString);
	der.readByte();
	der.readSequence();

	// modulus
	var n = readMPInt(der, 'modulus');
	var e = readMPInt(der, 'exponent');

	// now, make the key
	var key = {
		type: 'rsa',
		source: der.originalInput,
		parts: [
			{ name: 'e', data: e },
			{ name: 'n', data: n }
		]
	};

	return (new Key(key));
}

function readPkcs8RSAPrivate(der) {
	der.readSequence(asn1.Ber.OctetString);
	der.readSequence();

	var ver = readMPInt(der, 'version');
	assert.equal(ver[0], 0x0, 'unknown RSA private key version');

	// modulus then public exponent
	var n = readMPInt(der, 'modulus');
	var e = readMPInt(der, 'public exponent');
	var d = readMPInt(der, 'private exponent');
	var p = readMPInt(der, 'prime1');
	var q = readMPInt(der, 'prime2');
	var dmodp = readMPInt(der, 'exponent1');
	var dmodq = readMPInt(der, 'exponent2');
	var iqmp = readMPInt(der, 'iqmp');

	// now, make the key
	var key = {
		type: 'rsa',
		parts: [
			{ name: 'n', data: n },
			{ name: 'e', data: e },
			{ name: 'd', data: d },
			{ name: 'iqmp', data: iqmp },
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'dmodp', data: dmodp },
			{ name: 'dmodq', data: dmodq }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs8DSAPublic(der) {
	der.readSequence();

	var p = readMPInt(der, 'p');
	var q = readMPInt(der, 'q');
	var g = readMPInt(der, 'g');

	// bit string sequence
	der.readSequence(asn1.Ber.BitString);
	der.readByte();

	var y = readMPInt(der, 'y');

	// now, make the key
	var key = {
		type: 'dsa',
		parts: [
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'g', data: g },
			{ name: 'y', data: y }
		]
	};

	return (new Key(key));
}

function readPkcs8DSAPrivate(der) {
	der.readSequence();

	var p = readMPInt(der, 'p');
	var q = readMPInt(der, 'q');
	var g = readMPInt(der, 'g');

	der.readSequence(asn1.Ber.OctetString);
	var x = readMPInt(der, 'x');

	/* The pkcs#8 format does not include the public key */
	var y = utils.calculateDSAPublic(g, p, x);

	var key = {
		type: 'dsa',
		parts: [
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'g', data: g },
			{ name: 'y', data: y },
			{ name: 'x', data: x }
		]
	};

	return (new PrivateKey(key));
}

function readECDSACurve(der) {
	var curveName, curveNames;
	var j, c, cd;

	if (der.peek() === asn1.Ber.OID) {
		var oid = der.readOID();

		curveNames = Object.keys(algs.curves);
		for (j = 0; j < curveNames.length; ++j) {
			c = curveNames[j];
			cd = algs.curves[c];
			if (cd.pkcs8oid === oid) {
				curveName = c;
				break;
			}
		}

	} else {
		// ECParameters sequence
		der.readSequence();
		var version = der.readString(asn1.Ber.Integer, true);
		assert.strictEqual(version[0], 1, 'ECDSA key not version 1');

		var curve = {};

		// FieldID sequence
		der.readSequence();
		var fieldTypeOid = der.readOID();
		assert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1',
		    'ECDSA key is not from a prime-field');
		var p = curve.p = utils.mpNormalize(
		    der.readString(asn1.Ber.Integer, true));
		/*
		 * p always starts with a 1 bit, so count the zeros to get its
		 * real size.
		 */
		curve.size = p.length * 8 - utils.countZeros(p);

		// Curve sequence
		der.readSequence();
		curve.a = utils.mpNormalize(
		    der.readString(asn1.Ber.OctetString, true));
		curve.b = utils.mpNormalize(
		    der.readString(asn1.Ber.OctetString, true));
		if (der.peek() === asn1.Ber.BitString)
			curve.s = der.readString(asn1.Ber.BitString, true);

		// Combined Gx and Gy
		curve.G = der.readString(asn1.Ber.OctetString, true);
		assert.strictEqual(curve.G[0], 0x4,
		    'uncompressed G is required');

		curve.n = utils.mpNormalize(
		    der.readString(asn1.Ber.Integer, true));
		curve.h = utils.mpNormalize(
		    der.readString(asn1.Ber.Integer, true));
		assert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' +
		    'required');

		curveNames = Object.keys(algs.curves);
		var ks = Object.keys(curve);
		for (j = 0; j < curveNames.length; ++j) {
			c = curveNames[j];
			cd = algs.curves[c];
			var equal = true;
			for (var i = 0; i < ks.length; ++i) {
				var k = ks[i];
				if (cd[k] === undefined)
					continue;
				if (typeof (cd[k]) === 'object' &&
				    cd[k].equals !== undefined) {
					if (!cd[k].equals(curve[k])) {
						equal = false;
						break;
					}
				} else if (Buffer.isBuffer(cd[k])) {
					if (cd[k].toString('binary')
					    !== curve[k].toString('binary')) {
						equal = false;
						break;
					}
				} else {
					if (cd[k] !== curve[k]) {
						equal = false;
						break;
					}
				}
			}
			if (equal) {
				curveName = c;
				break;
			}
		}
	}
	return (curveName);
}

function readPkcs8ECDSAPrivate(der) {
	var curveName = readECDSACurve(der);
	assert.string(curveName, 'a known elliptic curve');

	der.readSequence(asn1.Ber.OctetString);
	der.readSequence();

	var version = readMPInt(der, 'version');
	assert.equal(version[0], 1, 'unknown version of ECDSA key');

	var d = der.readString(asn1.Ber.OctetString, true);
	der.readSequence(0xa1);

	var Q = der.readString(asn1.Ber.BitString, true);
	Q = utils.ecNormalize(Q);

	var key = {
		type: 'ecdsa',
		parts: [
			{ name: 'curve', data: Buffer.from(curveName) },
			{ name: 'Q', data: Q },
			{ name: 'd', data: d }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs8ECDSAPublic(der) {
	var curveName = readECDSACurve(der);
	assert.string(curveName, 'a known elliptic curve');

	var Q = der.readString(asn1.Ber.BitString, true);
	Q = utils.ecNormalize(Q);

	var key = {
		type: 'ecdsa',
		parts: [
			{ name: 'curve', data: Buffer.from(curveName) },
			{ name: 'Q', data: Q }
		]
	};

	return (new Key(key));
}

function readPkcs8EdDSAPublic(der) {
	if (der.peek() === 0x00)
		der.readByte();

	var A = utils.readBitString(der);

	var key = {
		type: 'ed25519',
		parts: [
			{ name: 'A', data: utils.zeroPadToLength(A, 32) }
		]
	};

	return (new Key(key));
}

function readPkcs8X25519Public(der) {
	var A = utils.readBitString(der);

	var key = {
		type: 'curve25519',
		parts: [
			{ name: 'A', data: utils.zeroPadToLength(A, 32) }
		]
	};

	return (new Key(key));
}

function readPkcs8EdDSAPrivate(der) {
	if (der.peek() === 0x00)
		der.readByte();

	der.readSequence(asn1.Ber.OctetString);
	var k = der.readString(asn1.Ber.OctetString, true);
	k = utils.zeroPadToLength(k, 32);

	var A;
	if (der.peek() === asn1.Ber.BitString) {
		A = utils.readBitString(der);
		A = utils.zeroPadToLength(A, 32);
	} else {
		A = utils.calculateED25519Public(k);
	}

	var key = {
		type: 'ed25519',
		parts: [
			{ name: 'A', data: utils.zeroPadToLength(A, 32) },
			{ name: 'k', data: utils.zeroPadToLength(k, 32) }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs8X25519Private(der) {
	if (der.peek() === 0x00)
		der.readByte();

	der.readSequence(asn1.Ber.OctetString);
	var k = der.readString(asn1.Ber.OctetString, true);
	k = utils.zeroPadToLength(k, 32);

	var A = utils.calculateX25519Public(k);

	var key = {
		type: 'curve25519',
		parts: [
			{ name: 'A', data: utils.zeroPadToLength(A, 32) },
			{ name: 'k', data: utils.zeroPadToLength(k, 32) }
		]
	};

	return (new PrivateKey(key));
}

function writePkcs8(der, key) {
	der.startSequence();

	if (PrivateKey.isPrivateKey(key)) {
		var sillyInt = Buffer.from([0]);
		der.writeBuffer(sillyInt, asn1.Ber.Integer);
	}

	der.startSequence();
	switch (key.type) {
	case 'rsa':
		der.writeOID('1.2.840.113549.1.1.1');
		if (PrivateKey.isPrivateKey(key))
			writePkcs8RSAPrivate(key, der);
		else
			writePkcs8RSAPublic(key, der);
		break;
	case 'dsa':
		der.writeOID('1.2.840.10040.4.1');
		if (PrivateKey.isPrivateKey(key))
			writePkcs8DSAPrivate(key, der);
		else
			writePkcs8DSAPublic(key, der);
		break;
	case 'ecdsa':
		der.writeOID('1.2.840.10045.2.1');
		if (PrivateKey.isPrivateKey(key))
			writePkcs8ECDSAPrivate(key, der);
		else
			writePkcs8ECDSAPublic(key, der);
		break;
	case 'ed25519':
		der.writeOID('1.3.101.112');
		if (PrivateKey.isPrivateKey(key))
			throw (new Error('Ed25519 private keys in pkcs8 ' +
			    'format are not supported'));
		writePkcs8EdDSAPublic(key, der);
		break;
	default:
		throw (new Error('Unsupported key type: ' + key.type));
	}

	der.endSequence();
}

function writePkcs8RSAPrivate(key, der) {
	der.writeNull();
	der.endSequence();

	der.startSequence(asn1.Ber.OctetString);
	der.startSequence();

	var version = Buffer.from([0]);
	der.writeBuffer(version, asn1.Ber.Integer);

	der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.d.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	if (!key.part.dmodp || !key.part.dmodq)
		utils.addRSAMissing(key);
	der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);

	der.endSequence();
	der.endSequence();
}

function writePkcs8RSAPublic(key, der) {
	der.writeNull();
	der.endSequence();

	der.startSequence(asn1.Ber.BitString);
	der.writeByte(0x00);

	der.startSequence();
	der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
	der.endSequence();

	der.endSequence();
}

function writePkcs8DSAPrivate(key, der) {
	der.startSequence();
	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
	der.endSequence();

	der.endSequence();

	der.startSequence(asn1.Ber.OctetString);
	der.writeBuffer(key.part.x.data, asn1.Ber.Integer);
	der.endSequence();
}

function writePkcs8DSAPublic(key, der) {
	der.startSequence();
	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
	der.endSequence();
	der.endSequence();

	der.startSequence(asn1.Ber.BitString);
	der.writeByte(0x00);
	der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
	der.endSequence();
}

function writeECDSACurve(key, der) {
	var curve = algs.curves[key.curve];
	if (curve.pkcs8oid) {
		/* This one has a name in pkcs#8, so just write the oid */
		der.writeOID(curve.pkcs8oid);

	} else {
		// ECParameters sequence
		der.startSequence();

		var version = Buffer.from([1]);
		der.writeBuffer(version, asn1.Ber.Integer);

		// FieldID sequence
		der.startSequence();
		der.writeOID('1.2.840.10045.1.1'); // prime-field
		der.writeBuffer(curve.p, asn1.Ber.Integer);
		der.endSequence();

		// Curve sequence
		der.startSequence();
		var a = curve.p;
		if (a[0] === 0x0)
			a = a.slice(1);
		der.writeBuffer(a, asn1.Ber.OctetString);
		der.writeBuffer(curve.b, asn1.Ber.OctetString);
		der.writeBuffer(curve.s, asn1.Ber.BitString);
		der.endSequence();

		der.writeBuffer(curve.G, asn1.Ber.OctetString);
		der.writeBuffer(curve.n, asn1.Ber.Integer);
		var h = curve.h;
		if (!h) {
			h = Buffer.from([1]);
		}
		der.writeBuffer(h, asn1.Ber.Integer);

		// ECParameters
		der.endSequence();
	}
}

function writePkcs8ECDSAPublic(key, der) {
	writeECDSACurve(key, der);
	der.endSequence();

	var Q = utils.ecNormalize(key.part.Q.data, true);
	der.writeBuffer(Q, asn1.Ber.BitString);
}

function writePkcs8ECDSAPrivate(key, der) {
	writeECDSACurve(key, der);
	der.endSequence();

	der.startSequence(asn1.Ber.OctetString);
	der.startSequence();

	var version = Buffer.from([1]);
	der.writeBuffer(version, asn1.Ber.Integer);

	der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);

	der.startSequence(0xa1);
	var Q = utils.ecNormalize(key.part.Q.data, true);
	der.writeBuffer(Q, asn1.Ber.BitString);
	der.endSequence();

	der.endSequence();
	der.endSequence();
}

function writePkcs8EdDSAPublic(key, der) {
	der.endSequence();

	utils.writeBitString(der, key.part.A.data);
}

function writePkcs8EdDSAPrivate(key, der) {
	der.endSequence();

	var k = utils.mpNormalize(key.part.k.data, true);
	der.startSequence(asn1.Ber.OctetString);
	der.writeBuffer(k, asn1.Ber.OctetString);
	der.endSequence();
}


/***/ }),
/* 134 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = Identity;

var assert = __webpack_require__(6);
var algs = __webpack_require__(19);
var crypto = __webpack_require__(7);
var Fingerprint = __webpack_require__(132);
var Signature = __webpack_require__(57);
var errs = __webpack_require__(56);
var util = __webpack_require__(2);
var utils = __webpack_require__(12);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;

/*JSSTYLED*/
var DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i;

var oids = {};
oids.cn = '2.5.4.3';
oids.o = '2.5.4.10';
oids.ou = '2.5.4.11';
oids.l = '2.5.4.7';
oids.s = '2.5.4.8';
oids.c = '2.5.4.6';
oids.sn = '2.5.4.4';
oids.dc = '0.9.2342.19200300.100.1.25';
oids.uid = '0.9.2342.19200300.100.1.1';
oids.mail = '0.9.2342.19200300.100.1.3';

var unoids = {};
Object.keys(oids).forEach(function (k) {
	unoids[oids[k]] = k;
});

function Identity(opts) {
	var self = this;
	assert.object(opts, 'options');
	assert.arrayOfObject(opts.components, 'options.components');
	this.components = opts.components;
	this.componentLookup = {};
	this.components.forEach(function (c) {
		if (c.name && !c.oid)
			c.oid = oids[c.name];
		if (c.oid && !c.name)
			c.name = unoids[c.oid];
		if (self.componentLookup[c.name] === undefined)
			self.componentLookup[c.name] = [];
		self.componentLookup[c.name].push(c);
	});
	if (this.componentLookup.cn && this.componentLookup.cn.length > 0) {
		this.cn = this.componentLookup.cn[0].value;
	}
	assert.optionalString(opts.type, 'options.type');
	if (opts.type === undefined) {
		if (this.components.length === 1 &&
		    this.componentLookup.cn &&
		    this.componentLookup.cn.length === 1 &&
		    this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {
			this.type = 'host';
			this.hostname = this.componentLookup.cn[0].value;

		} else if (this.componentLookup.dc &&
		    this.components.length === this.componentLookup.dc.length) {
			this.type = 'host';
			this.hostname = this.componentLookup.dc.map(
			    function (c) {
				return (c.value);
			}).join('.');

		} else if (this.componentLookup.uid &&
		    this.components.length ===
		    this.componentLookup.uid.length) {
			this.type = 'user';
			this.uid = this.componentLookup.uid[0].value;

		} else if (this.componentLookup.cn &&
		    this.componentLookup.cn.length === 1 &&
		    this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {
			this.type = 'host';
			this.hostname = this.componentLookup.cn[0].value;

		} else if (this.componentLookup.uid &&
		    this.componentLookup.uid.length === 1) {
			this.type = 'user';
			this.uid = this.componentLookup.uid[0].value;

		} else if (this.componentLookup.mail &&
		    this.componentLookup.mail.length === 1) {
			this.type = 'email';
			this.email = this.componentLookup.mail[0].value;

		} else if (this.componentLookup.cn &&
		    this.componentLookup.cn.length === 1) {
			this.type = 'user';
			this.uid = this.componentLookup.cn[0].value;

		} else {
			this.type = 'unknown';
		}
	} else {
		this.type = opts.type;
		if (this.type === 'host')
			this.hostname = opts.hostname;
		else if (this.type === 'user')
			this.uid = opts.uid;
		else if (this.type === 'email')
			this.email = opts.email;
		else
			throw (new Error('Unknown type ' + this.type));
	}
}

Identity.prototype.toString = function () {
	return (this.components.map(function (c) {
		return (c.name.toUpperCase() + '=' + c.value);
	}).join(', '));
};

/*
 * These are from X.680 -- PrintableString allowed chars are in section 37.4
 * table 8. Spec for IA5Strings is "1,6 + SPACE + DEL" where 1 refers to
 * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006
 * (the basic ASCII character set).
 */
/* JSSTYLED */
var NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\/:=?-]/;
/* JSSTYLED */
var NOT_IA5 = /[^\x00-\x7f]/;

Identity.prototype.toAsn1 = function (der, tag) {
	der.startSequence(tag);
	this.components.forEach(function (c) {
		der.startSequence(asn1.Ber.Constructor | asn1.Ber.Set);
		der.startSequence();
		der.writeOID(c.oid);
		/*
		 * If we fit in a PrintableString, use that. Otherwise use an
		 * IA5String or UTF8String.
		 *
		 * If this identity was parsed from a DN, use the ASN.1 types
		 * from the original representation (otherwise this might not
		 * be a full match for the original in some validators).
		 */
		if (c.asn1type === asn1.Ber.Utf8String ||
		    c.value.match(NOT_IA5)) {
			var v = Buffer.from(c.value, 'utf8');
			der.writeBuffer(v, asn1.Ber.Utf8String);

		} else if (c.asn1type === asn1.Ber.IA5String ||
		    c.value.match(NOT_PRINTABLE)) {
			der.writeString(c.value, asn1.Ber.IA5String);

		} else {
			var type = asn1.Ber.PrintableString;
			if (c.asn1type !== undefined)
				type = c.asn1type;
			der.writeString(c.value, type);
		}
		der.endSequence();
		der.endSequence();
	});
	der.endSequence();
};

function globMatch(a, b) {
	if (a === '**' || b === '**')
		return (true);
	var aParts = a.split('.');
	var bParts = b.split('.');
	if (aParts.length !== bParts.length)
		return (false);
	for (var i = 0; i < aParts.length; ++i) {
		if (aParts[i] === '*' || bParts[i] === '*')
			continue;
		if (aParts[i] !== bParts[i])
			return (false);
	}
	return (true);
}

Identity.prototype.equals = function (other) {
	if (!Identity.isIdentity(other, [1, 0]))
		return (false);
	if (other.components.length !== this.components.length)
		return (false);
	for (var i = 0; i < this.components.length; ++i) {
		if (this.components[i].oid !== other.components[i].oid)
			return (false);
		if (!globMatch(this.components[i].value,
		    other.components[i].value)) {
			return (false);
		}
	}
	return (true);
};

Identity.forHost = function (hostname) {
	assert.string(hostname, 'hostname');
	return (new Identity({
		type: 'host',
		hostname: hostname,
		components: [ { name: 'cn', value: hostname } ]
	}));
};

Identity.forUser = function (uid) {
	assert.string(uid, 'uid');
	return (new Identity({
		type: 'user',
		uid: uid,
		components: [ { name: 'uid', value: uid } ]
	}));
};

Identity.forEmail = function (email) {
	assert.string(email, 'email');
	return (new Identity({
		type: 'email',
		email: email,
		components: [ { name: 'mail', value: email } ]
	}));
};

Identity.parseDN = function (dn) {
	assert.string(dn, 'dn');
	var parts = dn.split(',');
	var cmps = parts.map(function (c) {
		c = c.trim();
		var eqPos = c.indexOf('=');
		var name = c.slice(0, eqPos).toLowerCase();
		var value = c.slice(eqPos + 1);
		return ({ name: name, value: value });
	});
	return (new Identity({ components: cmps }));
};

Identity.parseAsn1 = function (der, top) {
	var components = [];
	der.readSequence(top);
	var end = der.offset + der.length;
	while (der.offset < end) {
		der.readSequence(asn1.Ber.Constructor | asn1.Ber.Set);
		var after = der.offset + der.length;
		der.readSequence();
		var oid = der.readOID();
		var type = der.peek();
		var value;
		switch (type) {
		case asn1.Ber.PrintableString:
		case asn1.Ber.IA5String:
		case asn1.Ber.OctetString:
		case asn1.Ber.T61String:
			value = der.readString(type);
			break;
		case asn1.Ber.Utf8String:
			value = der.readString(type, true);
			value = value.toString('utf8');
			break;
		case asn1.Ber.CharacterString:
		case asn1.Ber.BMPString:
			value = der.readString(type, true);
			value = value.toString('utf16le');
			break;
		default:
			throw (new Error('Unknown asn1 type ' + type));
		}
		components.push({ oid: oid, asn1type: type, value: value });
		der._offset = after;
	}
	der._offset = end;
	return (new Identity({
		components: components
	}));
};

Identity.isIdentity = function (obj, ver) {
	return (utils.isCompatible(obj, Identity, ver));
};

/*
 * API versions for Identity:
 * [1,0] -- initial ver
 */
Identity.prototype._sshpkApiVersion = [1, 0];

Identity._oldVersionDetect = function (obj) {
	return ([1, 0]);
};


/***/ }),
/* 135 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = SSHBuffer;

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;

function SSHBuffer(opts) {
	assert.object(opts, 'options');
	if (opts.buffer !== undefined)
		assert.buffer(opts.buffer, 'options.buffer');

	this._size = opts.buffer ? opts.buffer.length : 1024;
	this._buffer = opts.buffer || Buffer.alloc(this._size);
	this._offset = 0;
}

SSHBuffer.prototype.toBuffer = function () {
	return (this._buffer.slice(0, this._offset));
};

SSHBuffer.prototype.atEnd = function () {
	return (this._offset >= this._buffer.length);
};

SSHBuffer.prototype.remainder = function () {
	return (this._buffer.slice(this._offset));
};

SSHBuffer.prototype.skip = function (n) {
	this._offset += n;
};

SSHBuffer.prototype.expand = function () {
	this._size *= 2;
	var buf = Buffer.alloc(this._size);
	this._buffer.copy(buf, 0);
	this._buffer = buf;
};

SSHBuffer.prototype.readPart = function () {
	return ({data: this.readBuffer()});
};

SSHBuffer.prototype.readBuffer = function () {
	var len = this._buffer.readUInt32BE(this._offset);
	this._offset += 4;
	assert.ok(this._offset + len <= this._buffer.length,
	    'length out of bounds at +0x' + this._offset.toString(16) +
	    ' (data truncated?)');
	var buf = this._buffer.slice(this._offset, this._offset + len);
	this._offset += len;
	return (buf);
};

SSHBuffer.prototype.readString = function () {
	return (this.readBuffer().toString());
};

SSHBuffer.prototype.readCString = function () {
	var offset = this._offset;
	while (offset < this._buffer.length &&
	    this._buffer[offset] !== 0x00)
		offset++;
	assert.ok(offset < this._buffer.length, 'c string does not terminate');
	var str = this._buffer.slice(this._offset, offset).toString();
	this._offset = offset + 1;
	return (str);
};

SSHBuffer.prototype.readInt = function () {
	var v = this._buffer.readUInt32BE(this._offset);
	this._offset += 4;
	return (v);
};

SSHBuffer.prototype.readInt64 = function () {
	assert.ok(this._offset + 8 < this._buffer.length,
	    'buffer not long enough to read Int64');
	var v = this._buffer.slice(this._offset, this._offset + 8);
	this._offset += 8;
	return (v);
};

SSHBuffer.prototype.readChar = function () {
	var v = this._buffer[this._offset++];
	return (v);
};

SSHBuffer.prototype.writeBuffer = function (buf) {
	while (this._offset + 4 + buf.length > this._size)
		this.expand();
	this._buffer.writeUInt32BE(buf.length, this._offset);
	this._offset += 4;
	buf.copy(this._buffer, this._offset);
	this._offset += buf.length;
};

SSHBuffer.prototype.writeString = function (str) {
	this.writeBuffer(Buffer.from(str, 'utf8'));
};

SSHBuffer.prototype.writeCString = function (str) {
	while (this._offset + 1 + str.length > this._size)
		this.expand();
	this._buffer.write(str, this._offset);
	this._offset += str.length;
	this._buffer[this._offset++] = 0;
};

SSHBuffer.prototype.writeInt = function (v) {
	while (this._offset + 4 > this._size)
		this.expand();
	this._buffer.writeUInt32BE(v, this._offset);
	this._offset += 4;
};

SSHBuffer.prototype.writeInt64 = function (v) {
	assert.buffer(v, 'value');
	if (v.length > 8) {
		var lead = v.slice(0, v.length - 8);
		for (var i = 0; i < lead.length; ++i) {
			assert.strictEqual(lead[i], 0,
			    'must fit in 64 bits of precision');
		}
		v = v.slice(v.length - 8, v.length);
	}
	while (this._offset + 8 > this._size)
		this.expand();
	v.copy(this._buffer, this._offset);
	this._offset += 8;
};

SSHBuffer.prototype.writeChar = function (v) {
	while (this._offset + 1 > this._size)
		this.expand();
	this._buffer[this._offset++] = v;
};

SSHBuffer.prototype.writePart = function (p) {
	this.writeBuffer(p.data);
};

SSHBuffer.prototype.write = function (buf) {
	while (this._offset + buf.length > this._size)
		this.expand();
	buf.copy(this._buffer, this._offset);
	this._offset += buf.length;
};


/***/ }),
/* 136 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file coder.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var f = __webpack_require__(43);

var SolidityTypeAddress = __webpack_require__(1097);
var SolidityTypeBool = __webpack_require__(1098);
var SolidityTypeInt = __webpack_require__(1101);
var SolidityTypeUInt = __webpack_require__(1104);
var SolidityTypeDynamicBytes = __webpack_require__(1100);
var SolidityTypeString = __webpack_require__(1103);
var SolidityTypeReal = __webpack_require__(1102);
var SolidityTypeUReal = __webpack_require__(1105);
var SolidityTypeBytes = __webpack_require__(1099);

var isDynamic = function (solidityType, type) {
   return solidityType.isDynamicType(type) ||
          solidityType.isDynamicArray(type);
};

/**
 * SolidityCoder prototype should be used to encode/decode solidity params of any type
 */
var SolidityCoder = function (types) {
    this._types = types;
};

/**
 * This method should be used to transform type to SolidityType
 *
 * @method _requireType
 * @param {String} type
 * @returns {SolidityType}
 * @throws {Error} throws if no matching type is found
 */
SolidityCoder.prototype._requireType = function (type) {
    var solidityType = this._types.filter(function (t) {
        return t.isType(type);
    })[0];

    if (!solidityType) {
        throw Error('invalid solidity type!: ' + type);
    }

    return solidityType;
};

/**
 * Should be used to encode plain param
 *
 * @method encodeParam
 * @param {String} type
 * @param {Object} plain param
 * @return {String} encoded plain param
 */
SolidityCoder.prototype.encodeParam = function (type, param) {
    return this.encodeParams([type], [param]);
};

/**
 * Should be used to encode list of params
 *
 * @method encodeParams
 * @param {Array} types
 * @param {Array} params
 * @return {String} encoded list of params
 */
SolidityCoder.prototype.encodeParams = function (types, params) {
    var solidityTypes = this.getSolidityTypes(types);

    var encodeds = solidityTypes.map(function (solidityType, index) {
        return solidityType.encode(params[index], types[index]);
    });

    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
        var staticPartLength = solidityType.staticPartLength(types[index]);
        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;

        return acc + (isDynamic(solidityTypes[index], types[index]) ?
            32 :
            roundedStaticPartLength);
    }, 0);

    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset);

    return result;
};

SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
    var result = "";
    var self = this;

    types.forEach(function (type, i) {
        if (isDynamic(solidityTypes[i], types[i])) {
            result += f.formatInputInt(dynamicOffset).encode();
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
        } else {
            // don't add length to dynamicOffset. it's already counted
            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        }

        // TODO: figure out nested arrays
    });

    types.forEach(function (type, i) {
        if (isDynamic(solidityTypes[i], types[i])) {
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
            result += e;
        }
    });
    return result;
};

SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
    /* jshint maxcomplexity: 17 */
    /* jshint maxdepth: 5 */

    var self = this;
    var encodingMode={dynamic:1,static:2,other:3};

    var mode=(solidityType.isDynamicArray(type)?encodingMode.dynamic:(solidityType.isStaticArray(type)?encodingMode.static:encodingMode.other));

    if(mode !== encodingMode.other){
        var nestedName = solidityType.nestedName(type);
        var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
        var result = (mode === encodingMode.dynamic ? encoded[0] : '');

        if (solidityType.isDynamicArray(nestedName)) {
            var previousLength = (mode === encodingMode.dynamic ? 2 : 0);

            for (var i = 0; i < encoded.length; i++) {
                // calculate length of previous item
                if(mode === encodingMode.dynamic){
                    previousLength += +(encoded[i - 1])[0] || 0;
                }
                else if(mode === encodingMode.static){
                    previousLength += +(encoded[i - 1] || [])[0] || 0;
                }
                result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
            }
        }

        var len= (mode === encodingMode.dynamic ? encoded.length-1 : encoded.length);
        for (var c = 0; c < len; c++) {
            var additionalOffset = result / 2;
            if(mode === encodingMode.dynamic){
                result += self.encodeWithOffset(nestedName, solidityType, encoded[c + 1], offset +  additionalOffset);
            }
            else if(mode === encodingMode.static){
                result += self.encodeWithOffset(nestedName, solidityType, encoded[c], offset + additionalOffset);
            }
        }

        return result;
    }

    return encoded;
};


/**
 * Should be used to decode bytes to plain param
 *
 * @method decodeParam
 * @param {String} type
 * @param {String} bytes
 * @return {Object} plain param
 */
SolidityCoder.prototype.decodeParam = function (type, bytes) {
    return this.decodeParams([type], bytes)[0];
};

/**
 * Should be used to decode list of params
 *
 * @method decodeParam
 * @param {Array} types
 * @param {String} bytes
 * @return {Array} array of plain params
 */
SolidityCoder.prototype.decodeParams = function (types, bytes) {
    var solidityTypes = this.getSolidityTypes(types);
    var offsets = this.getOffsets(types, solidityTypes);

    return solidityTypes.map(function (solidityType, index) {
        return solidityType.decode(bytes, offsets[index],  types[index], index);
    });
};

SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
    var lengths =  solidityTypes.map(function (solidityType, index) {
        return solidityType.staticPartLength(types[index]);
    });

    for (var i = 1; i < lengths.length; i++) {
         // sum with length of previous element
        lengths[i] += lengths[i - 1];
    }

    return lengths.map(function (length, index) {
        // remove the current length, so the length is sum of previous elements
        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
        return length - staticPartLength;
    });
};

SolidityCoder.prototype.getSolidityTypes = function (types) {
    var self = this;
    return types.map(function (type) {
        return self._requireType(type);
    });
};

var coder = new SolidityCoder([
    new SolidityTypeAddress(),
    new SolidityTypeBool(),
    new SolidityTypeInt(),
    new SolidityTypeUInt(),
    new SolidityTypeDynamicBytes(),
    new SolidityTypeBytes(),
    new SolidityTypeString(),
    new SolidityTypeReal(),
    new SolidityTypeUReal()
]);

module.exports = coder;


/***/ }),
/* 137 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file sha3.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var CryptoJS = __webpack_require__(210);
var sha3 = __webpack_require__(115);

module.exports = function (value, options) {
    if (options && options.encoding === 'hex') {
        if (value.length > 2 && value.substr(0, 2) === '0x') {
            value = value.substr(2);
        }
        value = CryptoJS.enc.Hex.parse(value);
    }

    return sha3(value, {
        outputLength: 256
    }).toString();
};



/***/ }),
/* 138 */
/***/ (function(module, exports, __webpack_require__) {

var Schema = __webpack_require__(444);
var expect = __webpack_require__(21);
var fs = __webpack_require__(80);
var path = __webpack_require__(0);
var async = __webpack_require__(28);
var _ = __webpack_require__(24);
var debug = __webpack_require__(1129)("artifactor");

function Artifactor(destination) {
  this.destination = destination;
};

Artifactor.prototype.save = function(object) {
  var self = this;

  return new Promise(function(accept, reject) {
    object = Schema.normalize(object);

    if (object.contractName == null) {
      return reject(new Error("You must specify a contract name."));
    }

    var output_path = object.contractName;

    // Create new path off of destination.
    output_path = path.join(self.destination, output_path);
    output_path = path.resolve(output_path);

    // Add json extension.
    output_path = output_path + ".json";

    fs.readFile(output_path, {encoding: "utf8"}, function(err, json) {
      // No need to handle the error. If the file doesn't exist then we'll start afresh
      // with a new object.

      var finalObject = object;

      if (!err) {
        var existingObjDirty;
        try {
          existingObjDirty = JSON.parse(json);
        } catch (e) {
          reject(e);
        }

        // normalize existing and merge into final
        finalObject = Schema.normalize(existingObjDirty);

        // merge networks
        var finalNetworks = {};
        _.merge(finalNetworks, finalObject.networks, object.networks);

        // update existing with new
        _.assign(finalObject, object);
        finalObject.networks = finalNetworks;
      }

      // update timestamp
      finalObject.updatedAt = new Date().toISOString();

      // output object
      fs.outputFile(output_path, JSON.stringify(finalObject, null, 2), "utf8", function(err) {
        if (err) return reject(err);
        accept();
      });
    });
  });
};

Artifactor.prototype.saveAll = function(objects) {
  var self = this;

  if (Array.isArray(objects)) {
    var array = objects;
    objects = {};

    array.forEach(function(item) {
      objects[item.contract_name] = item;
    })
  }

  return new Promise(function(accept, reject) {
    fs.stat(self.destination, function(err, stat) {
      if (err) {
        return reject(new Error("Desination " + self.destination + " doesn't exist!"));
      }
      accept();
    });
  }).then(function() {
    var promises = [];

    Object.keys(objects).forEach(function(contractName) {
      var object = objects[contractName];
      object.contractName = contractName;
      promises.push(self.save(object));
    });

    return Promise.all(promises);
  });
};

module.exports = Artifactor;


/***/ }),
/* 139 */
/***/ (function(module, exports, __webpack_require__) {

var dir = __webpack_require__(98);
var path = __webpack_require__(0);

module.exports = function(directory, callback) {
  dir.files(directory, function(err, files) {
    if (err) return callback(err);

    files = files.filter(function(file) {
      // Ignore any files that aren't solidity files.
      return path.extname(file) == ".sol" && path.basename(file)[0] != ".";
    });

    callback(null, files);
  })
};


/***/ }),
/* 140 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 141 */
/***/ (function(module, exports) {

module.exports = require("constants");

/***/ }),
/* 142 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(250);
} else {
  module.exports = __webpack_require__(251);
}


/***/ }),
/* 143 */
/***/ (function(module, exports, __webpack_require__) {

var config = __webpack_require__(73);

var fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length');

/*!
 * Chai - addLengthGuard utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .addLengthGuard(fn, assertionName, isChainable)
 *
 * Define `length` as a getter on the given uninvoked method assertion. The
 * getter acts as a guard against chaining `length` directly off of an uninvoked
 * method assertion, which is a problem because it references `function`'s
 * built-in `length` property instead of Chai's `length` assertion. When the
 * getter catches the user making this mistake, it throws an error with a
 * helpful message.
 *
 * There are two ways in which this mistake can be made. The first way is by
 * chaining the `length` assertion directly off of an uninvoked chainable
 * method. In this case, Chai suggests that the user use `lengthOf` instead. The
 * second way is by chaining the `length` assertion directly off of an uninvoked
 * non-chainable method. Non-chainable methods must be invoked prior to
 * chaining. In this case, Chai suggests that the user consult the docs for the
 * given assertion.
 *
 * If the `length` property of functions is unconfigurable, then return `fn`
 * without modification.
 *
 * Note that in ES6, the function's `length` property is configurable, so once
 * support for legacy environments is dropped, Chai's `length` property can
 * replace the built-in function's `length` property, and this length guard will
 * no longer be necessary. In the mean time, maintaining consistency across all
 * environments is the priority.
 *
 * @param {Function} fn
 * @param {String} assertionName
 * @param {Boolean} isChainable
 * @namespace Utils
 * @name addLengthGuard
 */

module.exports = function addLengthGuard (fn, assertionName, isChainable) {
  if (!fnLengthDesc.configurable) return fn;

  Object.defineProperty(fn, 'length', {
    get: function () {
      if (isChainable) {
        throw Error('Invalid Chai property: ' + assertionName + '.length. Due' +
          ' to a compatibility issue, "length" cannot directly follow "' +
          assertionName + '". Use "' + assertionName + '.lengthOf" instead.');
      }

      throw Error('Invalid Chai property: ' + assertionName + '.length. See' +
        ' docs for proper usage of "' + assertionName + '".');
    }
  });

  return fn;
};


/***/ }),
/* 144 */
/***/ (function(module, exports, __webpack_require__) {

// This is (almost) directly from Node.js utils
// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js

var getName = __webpack_require__(351);
var getProperties = __webpack_require__(291);
var getEnumerableProperties = __webpack_require__(614);
var config = __webpack_require__(73);

module.exports = inspect;

/**
 * ### .inspect(obj, [showHidden], [depth], [colors])
 *
 * Echoes the value of a value. Tries to print the value out
 * in the best way possible given the different types.
 *
 * @param {Object} obj The object to print out.
 * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
 *    properties of objects. Default is false.
 * @param {Number} depth Depth in which to descend in object. Default is 2.
 * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
 *    output. Default is false (no coloring).
 * @namespace Utils
 * @name inspect
 */
function inspect(obj, showHidden, depth, colors) {
  var ctx = {
    showHidden: showHidden,
    seen: [],
    stylize: function (str) { return str; }
  };
  return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
}

// Returns true if object is a DOM element.
var isDOMElement = function (object) {
  if (typeof HTMLElement === 'object') {
    return object instanceof HTMLElement;
  } else {
    return object &&
      typeof object === 'object' &&
      'nodeType' in object &&
      object.nodeType === 1 &&
      typeof object.nodeName === 'string';
  }
};

function formatValue(ctx, value, recurseTimes) {
  // Provide a hook for user-specified inspect functions.
  // Check that value is an object with an inspect function on it
  if (value && typeof value.inspect === 'function' &&
      // Filter out the util module, it's inspect function is special
      value.inspect !== exports.inspect &&
      // Also filter out any prototype objects using the circular check.
      !(value.constructor && value.constructor.prototype === value)) {
    var ret = value.inspect(recurseTimes, ctx);
    if (typeof ret !== 'string') {
      ret = formatValue(ctx, ret, recurseTimes);
    }
    return ret;
  }

  // Primitive types cannot have properties
  var primitive = formatPrimitive(ctx, value);
  if (primitive) {
    return primitive;
  }

  // If this is a DOM element, try to get the outer HTML.
  if (isDOMElement(value)) {
    if ('outerHTML' in value) {
      return value.outerHTML;
      // This value does not have an outerHTML attribute,
      //   it could still be an XML element
    } else {
      // Attempt to serialize it
      try {
        if (document.xmlVersion) {
          var xmlSerializer = new XMLSerializer();
          return xmlSerializer.serializeToString(value);
        } else {
          // Firefox 11- do not support outerHTML
          //   It does, however, support innerHTML
          //   Use the following to render the element
          var ns = "http://www.w3.org/1999/xhtml";
          var container = document.createElementNS(ns, '_');

          container.appendChild(value.cloneNode(false));
          var html = container.innerHTML
            .replace('><', '>' + value.innerHTML + '<');
          container.innerHTML = '';
          return html;
        }
      } catch (err) {
        // This could be a non-native DOM implementation,
        //   continue with the normal flow:
        //   printing the element as if it is an object.
      }
    }
  }

  // Look up the keys of the object.
  var visibleKeys = getEnumerableProperties(value);
  var keys = ctx.showHidden ? getProperties(value) : visibleKeys;

  var name, nameSuffix;

  // Some type of object without properties can be shortcutted.
  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
  // a `stack` plus `description` property; ignore those for consistency.
  if (keys.length === 0 || (isError(value) && (
      (keys.length === 1 && keys[0] === 'stack') ||
      (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
     ))) {
    if (typeof value === 'function') {
      name = getName(value);
      nameSuffix = name ? ': ' + name : '';
      return ctx.stylize('[Function' + nameSuffix + ']', 'special');
    }
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    }
    if (isDate(value)) {
      return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
    }
    if (isError(value)) {
      return formatError(value);
    }
  }

  var base = ''
    , array = false
    , typedArray = false
    , braces = ['{', '}'];

  if (isTypedArray(value)) {
    typedArray = true;
    braces = ['[', ']'];
  }

  // Make Array say that they are Array
  if (isArray(value)) {
    array = true;
    braces = ['[', ']'];
  }

  // Make functions say that they are functions
  if (typeof value === 'function') {
    name = getName(value);
    nameSuffix = name ? ': ' + name : '';
    base = ' [Function' + nameSuffix + ']';
  }

  // Make RegExps say that they are RegExps
  if (isRegExp(value)) {
    base = ' ' + RegExp.prototype.toString.call(value);
  }

  // Make dates with properties first say the date
  if (isDate(value)) {
    base = ' ' + Date.prototype.toUTCString.call(value);
  }

  // Make error with message first say the error
  if (isError(value)) {
    return formatError(value);
  }

  if (keys.length === 0 && (!array || value.length == 0)) {
    return braces[0] + base + braces[1];
  }

  if (recurseTimes < 0) {
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    } else {
      return ctx.stylize('[Object]', 'special');
    }
  }

  ctx.seen.push(value);

  var output;
  if (array) {
    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  } else if (typedArray) {
    return formatTypedArray(value);
  } else {
    output = keys.map(function(key) {
      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
    });
  }

  ctx.seen.pop();

  return reduceToSingleString(output, base, braces);
}


function formatPrimitive(ctx, value) {
  switch (typeof value) {
    case 'undefined':
      return ctx.stylize('undefined', 'undefined');

    case 'string':
      var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
                                               .replace(/'/g, "\\'")
                                               .replace(/\\"/g, '"') + '\'';
      return ctx.stylize(simple, 'string');

    case 'number':
      if (value === 0 && (1/value) === -Infinity) {
        return ctx.stylize('-0', 'number');
      }
      return ctx.stylize('' + value, 'number');

    case 'boolean':
      return ctx.stylize('' + value, 'boolean');

    case 'symbol':
      return ctx.stylize(value.toString(), 'symbol');
  }
  // For some reason typeof null is "object", so special case here.
  if (value === null) {
    return ctx.stylize('null', 'null');
  }
}


function formatError(value) {
  return '[' + Error.prototype.toString.call(value) + ']';
}


function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  var output = [];
  for (var i = 0, l = value.length; i < l; ++i) {
    if (Object.prototype.hasOwnProperty.call(value, String(i))) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          String(i), true));
    } else {
      output.push('');
    }
  }

  keys.forEach(function(key) {
    if (!key.match(/^\d+$/)) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          key, true));
    }
  });
  return output;
}

function formatTypedArray(value) {
  var str = '[ ';

  for (var i = 0; i < value.length; ++i) {
    if (str.length >= config.truncateThreshold - 7) {
      str += '...';
      break;
    }
    str += value[i] + ', ';
  }
  str += ' ]';

  // Removing trailing `, ` if the array was not truncated
  if (str.indexOf(',  ]') !== -1) {
    str = str.replace(',  ]', ' ]');
  }

  return str;
}

function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  var name;
  var propDescriptor = Object.getOwnPropertyDescriptor(value, key);
  var str;

  if (propDescriptor) {
    if (propDescriptor.get) {
      if (propDescriptor.set) {
        str = ctx.stylize('[Getter/Setter]', 'special');
      } else {
        str = ctx.stylize('[Getter]', 'special');
      }
    } else {
      if (propDescriptor.set) {
        str = ctx.stylize('[Setter]', 'special');
      }
    }
  }
  if (visibleKeys.indexOf(key) < 0) {
    name = '[' + key + ']';
  }
  if (!str) {
    if (ctx.seen.indexOf(value[key]) < 0) {
      if (recurseTimes === null) {
        str = formatValue(ctx, value[key], null);
      } else {
        str = formatValue(ctx, value[key], recurseTimes - 1);
      }
      if (str.indexOf('\n') > -1) {
        if (array) {
          str = str.split('\n').map(function(line) {
            return '  ' + line;
          }).join('\n').substr(2);
        } else {
          str = '\n' + str.split('\n').map(function(line) {
            return '   ' + line;
          }).join('\n');
        }
      }
    } else {
      str = ctx.stylize('[Circular]', 'special');
    }
  }
  if (typeof name === 'undefined') {
    if (array && key.match(/^\d+$/)) {
      return str;
    }
    name = JSON.stringify('' + key);
    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
      name = name.substr(1, name.length - 2);
      name = ctx.stylize(name, 'name');
    } else {
      name = name.replace(/'/g, "\\'")
                 .replace(/\\"/g, '"')
                 .replace(/(^"|"$)/g, "'");
      name = ctx.stylize(name, 'string');
    }
  }

  return name + ': ' + str;
}


function reduceToSingleString(output, base, braces) {
  var numLinesEst = 0;
  var length = output.reduce(function(prev, cur) {
    numLinesEst++;
    if (cur.indexOf('\n') >= 0) numLinesEst++;
    return prev + cur.length + 1;
  }, 0);

  if (length > 60) {
    return braces[0] +
           (base === '' ? '' : base + '\n ') +
           ' ' +
           output.join(',\n  ') +
           ' ' +
           braces[1];
  }

  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
}

function isTypedArray(ar) {
  // Unfortunately there's no way to check if an object is a TypedArray
  // We have to check if it's one of these types
  return (typeof ar === 'object' && /\w+Array]$/.test(objectToString(ar)));
}

function isArray(ar) {
  return Array.isArray(ar) ||
         (typeof ar === 'object' && objectToString(ar) === '[object Array]');
}

function isRegExp(re) {
  return typeof re === 'object' && objectToString(re) === '[object RegExp]';
}

function isDate(d) {
  return typeof d === 'object' && objectToString(d) === '[object Date]';
}

function isError(e) {
  return typeof e === 'object' && objectToString(e) === '[object Error]';
}

function objectToString(o) {
  return Object.prototype.toString.call(o);
}


/***/ }),
/* 145 */
/***/ (function(module, exports, __webpack_require__) {

var config = __webpack_require__(73);

/*!
 * Chai - isProxyEnabled helper
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .isProxyEnabled()
 *
 * Helper function to check if Chai's proxy protection feature is enabled. If
 * proxies are unsupported or disabled via the user's Chai config, then return
 * false. Otherwise, return true.
 *
 * @namespace Utils
 * @name isProxyEnabled
 */

module.exports = function isProxyEnabled() {
  return config.useProxy && 
    typeof Proxy !== 'undefined' &&
    typeof Reflect !== 'undefined';
};


/***/ }),
/* 146 */
/***/ (function(module, exports, __webpack_require__) {

var config = __webpack_require__(73);
var flag = __webpack_require__(46);
var getProperties = __webpack_require__(291);
var isProxyEnabled = __webpack_require__(145);

/*!
 * Chai - proxify utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .proxify(object)
 *
 * Return a proxy of given object that throws an error when a non-existent
 * property is read. By default, the root cause is assumed to be a misspelled
 * property, and thus an attempt is made to offer a reasonable suggestion from
 * the list of existing properties. However, if a nonChainableMethodName is
 * provided, then the root cause is instead a failure to invoke a non-chainable
 * method prior to reading the non-existent property.
 * 
 * If proxies are unsupported or disabled via the user's Chai config, then
 * return object without modification.
 *
 * @param {Object} obj
 * @param {String} nonChainableMethodName
 * @namespace Utils
 * @name proxify
 */

var builtins = ['__flags', '__methods', '_obj', 'assert'];

module.exports = function proxify(obj, nonChainableMethodName) {
  if (!isProxyEnabled()) return obj;

  return new Proxy(obj, {
    get: function proxyGetter(target, property) {
      // This check is here because we should not throw errors on Symbol properties
      // such as `Symbol.toStringTag`.
      // The values for which an error should be thrown can be configured using
      // the `config.proxyExcludedKeys` setting.
      if (typeof property === 'string' &&
          config.proxyExcludedKeys.indexOf(property) === -1 &&
          !Reflect.has(target, property)) {
        // Special message for invalid property access of non-chainable methods.
        if (nonChainableMethodName) {
          throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' +
            property + '. See docs for proper usage of "' +
            nonChainableMethodName + '".');
        }

        var orderedProperties = getProperties(target).filter(function(property) {
          return !Object.prototype.hasOwnProperty(property) &&
            builtins.indexOf(property) === -1;
        }).sort(function(a, b) {
          return stringDistance(property, a) - stringDistance(property, b);
        });

        if (orderedProperties.length &&
            stringDistance(orderedProperties[0], property) < 4) {
          // If the property is reasonably close to an existing Chai property,
          // suggest that property to the user.
          throw Error('Invalid Chai property: ' + property +
            '. Did you mean "' + orderedProperties[0] + '"?');
        } else {
          throw Error('Invalid Chai property: ' + property);
        }
      }

      // Use this proxy getter as the starting point for removing implementation
      // frames from the stack trace of a failed assertion. For property
      // assertions, this prevents the proxy getter from showing up in the stack
      // trace since it's invoked before the property getter. For method and
      // chainable method assertions, this flag will end up getting changed to
      // the method wrapper, which is good since this frame will no longer be in
      // the stack once the method is invoked. Note that Chai builtin assertion
      // properties such as `__flags` are skipped since this is only meant to
      // capture the starting point of an assertion. This step is also skipped
      // if the `lockSsfi` flag is set, thus indicating that this assertion is
      // being called from within another assertion. In that case, the `ssfi`
      // flag is already set to the outer assertion's starting point.
      if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) {
        flag(target, 'ssfi', proxyGetter);
      }

      return Reflect.get(target, property);
    }
  });
};

/**
 * # stringDistance(strA, strB)
 * Return the Levenshtein distance between two strings.
 * @param {string} strA
 * @param {string} strB
 * @return {number} the string distance between strA and strB
 * @api private
 */

function stringDistance(strA, strB, memo) {
  if (!memo) {
    // `memo` is a two-dimensional array containing a cache of distances
    // memo[i][j] is the distance between strA.slice(0, i) and
    // strB.slice(0, j).
    memo = [];
    for (var i = 0; i <= strA.length; i++) {
      memo[i] = [];
    }
  }

  if (!memo[strA.length] || !memo[strA.length][strB.length]) {
    if (strA.length === 0 || strB.length === 0) {
      memo[strA.length][strB.length] = Math.max(strA.length, strB.length);
    } else {
      memo[strA.length][strB.length] = Math.min(
        stringDistance(strA.slice(0, -1), strB, memo) + 1,
        stringDistance(strA, strB.slice(0, -1), memo) + 1,
        stringDistance(strA.slice(0, -1), strB.slice(0, -1), memo) +
          (strA.slice(-1) === strB.slice(-1) ? 0 : 1)
      );
    }
  }

  return memo[strA.length][strB.length];
}


/***/ }),
/* 147 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__(658);
var enumBugKeys = __webpack_require__(295);

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),
/* 148 */
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__(62).f;
var has = __webpack_require__(112);
var TAG = __webpack_require__(34)('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),
/* 149 */
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(199);
var defined = __webpack_require__(197);
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),
/* 150 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__(206);
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),
/* 151 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (undefined) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var X32WordArray = C_lib.WordArray;

	    /**
	     * x64 namespace.
	     */
	    var C_x64 = C.x64 = {};

	    /**
	     * A 64-bit word.
	     */
	    var X64Word = C_x64.Word = Base.extend({
	        /**
	         * Initializes a newly created 64-bit word.
	         *
	         * @param {number} high The high 32 bits.
	         * @param {number} low The low 32 bits.
	         *
	         * @example
	         *
	         *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
	         */
	        init: function (high, low) {
	            this.high = high;
	            this.low = low;
	        }

	        /**
	         * Bitwise NOTs this word.
	         *
	         * @return {X64Word} A new x64-Word object after negating.
	         *
	         * @example
	         *
	         *     var negated = x64Word.not();
	         */
	        // not: function () {
	            // var high = ~this.high;
	            // var low = ~this.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise ANDs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to AND with this word.
	         *
	         * @return {X64Word} A new x64-Word object after ANDing.
	         *
	         * @example
	         *
	         *     var anded = x64Word.and(anotherX64Word);
	         */
	        // and: function (word) {
	            // var high = this.high & word.high;
	            // var low = this.low & word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise ORs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to OR with this word.
	         *
	         * @return {X64Word} A new x64-Word object after ORing.
	         *
	         * @example
	         *
	         *     var ored = x64Word.or(anotherX64Word);
	         */
	        // or: function (word) {
	            // var high = this.high | word.high;
	            // var low = this.low | word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise XORs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to XOR with this word.
	         *
	         * @return {X64Word} A new x64-Word object after XORing.
	         *
	         * @example
	         *
	         *     var xored = x64Word.xor(anotherX64Word);
	         */
	        // xor: function (word) {
	            // var high = this.high ^ word.high;
	            // var low = this.low ^ word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Shifts this word n bits to the left.
	         *
	         * @param {number} n The number of bits to shift.
	         *
	         * @return {X64Word} A new x64-Word object after shifting.
	         *
	         * @example
	         *
	         *     var shifted = x64Word.shiftL(25);
	         */
	        // shiftL: function (n) {
	            // if (n < 32) {
	                // var high = (this.high << n) | (this.low >>> (32 - n));
	                // var low = this.low << n;
	            // } else {
	                // var high = this.low << (n - 32);
	                // var low = 0;
	            // }

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Shifts this word n bits to the right.
	         *
	         * @param {number} n The number of bits to shift.
	         *
	         * @return {X64Word} A new x64-Word object after shifting.
	         *
	         * @example
	         *
	         *     var shifted = x64Word.shiftR(7);
	         */
	        // shiftR: function (n) {
	            // if (n < 32) {
	                // var low = (this.low >>> n) | (this.high << (32 - n));
	                // var high = this.high >>> n;
	            // } else {
	                // var low = this.high >>> (n - 32);
	                // var high = 0;
	            // }

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Rotates this word n bits to the left.
	         *
	         * @param {number} n The number of bits to rotate.
	         *
	         * @return {X64Word} A new x64-Word object after rotating.
	         *
	         * @example
	         *
	         *     var rotated = x64Word.rotL(25);
	         */
	        // rotL: function (n) {
	            // return this.shiftL(n).or(this.shiftR(64 - n));
	        // },

	        /**
	         * Rotates this word n bits to the right.
	         *
	         * @param {number} n The number of bits to rotate.
	         *
	         * @return {X64Word} A new x64-Word object after rotating.
	         *
	         * @example
	         *
	         *     var rotated = x64Word.rotR(7);
	         */
	        // rotR: function (n) {
	            // return this.shiftR(n).or(this.shiftL(64 - n));
	        // },

	        /**
	         * Adds this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to add with this word.
	         *
	         * @return {X64Word} A new x64-Word object after adding.
	         *
	         * @example
	         *
	         *     var added = x64Word.add(anotherX64Word);
	         */
	        // add: function (word) {
	            // var low = (this.low + word.low) | 0;
	            // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
	            // var high = (this.high + word.high + carry) | 0;

	            // return X64Word.create(high, low);
	        // }
	    });

	    /**
	     * An array of 64-bit words.
	     *
	     * @property {Array} words The array of CryptoJS.x64.Word objects.
	     * @property {number} sigBytes The number of significant bytes in this word array.
	     */
	    var X64WordArray = C_x64.WordArray = Base.extend({
	        /**
	         * Initializes a newly created word array.
	         *
	         * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
	         * @param {number} sigBytes (Optional) The number of significant bytes in the words.
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create();
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create([
	         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),
	         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
	         *     ]);
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create([
	         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),
	         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
	         *     ], 10);
	         */
	        init: function (words, sigBytes) {
	            words = this.words = words || [];

	            if (sigBytes != undefined) {
	                this.sigBytes = sigBytes;
	            } else {
	                this.sigBytes = words.length * 8;
	            }
	        },

	        /**
	         * Converts this 64-bit word array to a 32-bit word array.
	         *
	         * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
	         *
	         * @example
	         *
	         *     var x32WordArray = x64WordArray.toX32();
	         */
	        toX32: function () {
	            // Shortcuts
	            var x64Words = this.words;
	            var x64WordsLength = x64Words.length;

	            // Convert
	            var x32Words = [];
	            for (var i = 0; i < x64WordsLength; i++) {
	                var x64Word = x64Words[i];
	                x32Words.push(x64Word.high);
	                x32Words.push(x64Word.low);
	            }

	            return X32WordArray.create(x32Words, this.sigBytes);
	        },

	        /**
	         * Creates a copy of this word array.
	         *
	         * @return {X64WordArray} The clone.
	         *
	         * @example
	         *
	         *     var clone = x64WordArray.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);

	            // Clone "words" array
	            var words = clone.words = this.words.slice(0);

	            // Clone each X64Word object
	            var wordsLength = words.length;
	            for (var i = 0; i < wordsLength; i++) {
	                words[i] = words[i].clone();
	            }

	            return clone;
	        }
	    });
	}());


	return CryptoJS;

}));

/***/ }),
/* 152 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_RESULT__;/*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */

;(function (global) {
    'use strict';

    /*
      bignumber.js v2.0.7
      A JavaScript library for arbitrary-precision arithmetic.
      https://github.com/MikeMcl/bignumber.js
      Copyright (c) 2015 Michael Mclaughlin <M8ch88l@gmail.com>
      MIT Expat Licence
    */


    var BigNumber, crypto, parseNumeric,
        isNumeric = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
        mathceil = Math.ceil,
        mathfloor = Math.floor,
        notBool = ' not a boolean or binary digit',
        roundingMode = 'rounding mode',
        tooManyDigits = 'number type has more than 15 significant digits',
        ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_',
        BASE = 1e14,
        LOG_BASE = 14,
        MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
        // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
        POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
        SQRT_BASE = 1e7,

        /*
         * The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
         * the arguments to toExponential, toFixed, toFormat, and toPrecision, beyond which an
         * exception is thrown (if ERRORS is true).
         */
        MAX = 1E9;                                   // 0 to MAX_INT32


    /*
     * Create and return a BigNumber constructor.
     */
    function another(configObj) {
        var div,

            // id tracks the caller function, so its name can be included in error messages.
            id = 0,
            P = BigNumber.prototype,
            ONE = new BigNumber(1),


            /********************************* EDITABLE DEFAULTS **********************************/


            /*
             * The default values below must be integers within the inclusive ranges stated.
             * The values can also be changed at run-time using BigNumber.config.
             */

            // The maximum number of decimal places for operations involving division.
            DECIMAL_PLACES = 20,                     // 0 to MAX

            /*
             * The rounding mode used when rounding to the above decimal places, and when using
             * toExponential, toFixed, toFormat and toPrecision, and round (default value).
             * UP         0 Away from zero.
             * DOWN       1 Towards zero.
             * CEIL       2 Towards +Infinity.
             * FLOOR      3 Towards -Infinity.
             * HALF_UP    4 Towards nearest neighbour. If equidistant, up.
             * HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
             * HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
             * HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
             * HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
             */
            ROUNDING_MODE = 4,                       // 0 to 8

            // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

            // The exponent value at and beneath which toString returns exponential notation.
            // Number type: -7
            TO_EXP_NEG = -7,                         // 0 to -MAX

            // The exponent value at and above which toString returns exponential notation.
            // Number type: 21
            TO_EXP_POS = 21,                         // 0 to MAX

            // RANGE : [MIN_EXP, MAX_EXP]

            // The minimum exponent value, beneath which underflow to zero occurs.
            // Number type: -324  (5e-324)
            MIN_EXP = -1e7,                          // -1 to -MAX

            // The maximum exponent value, above which overflow to Infinity occurs.
            // Number type:  308  (1.7976931348623157e+308)
            // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
            MAX_EXP = 1e7,                           // 1 to MAX

            // Whether BigNumber Errors are ever thrown.
            ERRORS = true,                           // true or false

            // Change to intValidatorNoErrors if ERRORS is false.
            isValidInt = intValidatorWithErrors,     // intValidatorWithErrors/intValidatorNoErrors

            // Whether to use cryptographically-secure random number generation, if available.
            CRYPTO = false,                          // true or false

            /*
             * The modulo mode used when calculating the modulus: a mod n.
             * The quotient (q = a / n) is calculated according to the corresponding rounding mode.
             * The remainder (r) is calculated as: r = a - n * q.
             *
             * UP        0 The remainder is positive if the dividend is negative, else is negative.
             * DOWN      1 The remainder has the same sign as the dividend.
             *             This modulo mode is commonly known as 'truncated division' and is
             *             equivalent to (a % n) in JavaScript.
             * FLOOR     3 The remainder has the same sign as the divisor (Python %).
             * HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
             * EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
             *             The remainder is always positive.
             *
             * The truncated division, floored division, Euclidian division and IEEE 754 remainder
             * modes are commonly used for the modulus operation.
             * Although the other rounding modes can also be used, they may not give useful results.
             */
            MODULO_MODE = 1,                         // 0 to 9

            // The maximum number of significant digits of the result of the toPower operation.
            // If POW_PRECISION is 0, there will be unlimited significant digits.
            POW_PRECISION = 100,                     // 0 to MAX

            // The format specification used by the BigNumber.prototype.toFormat method.
            FORMAT = {
                decimalSeparator: '.',
                groupSeparator: ',',
                groupSize: 3,
                secondaryGroupSize: 0,
                fractionGroupSeparator: '\xA0',      // non-breaking space
                fractionGroupSize: 0
            };


        /******************************************************************************************/


        // CONSTRUCTOR


        /*
         * The BigNumber constructor and exported function.
         * Create and return a new instance of a BigNumber object.
         *
         * n {number|string|BigNumber} A numeric value.
         * [b] {number} The base of n. Integer, 2 to 64 inclusive.
         */
        function BigNumber( n, b ) {
            var c, e, i, num, len, str,
                x = this;

            // Enable constructor usage without new.
            if ( !( x instanceof BigNumber ) ) {

                // 'BigNumber() constructor call without new: {n}'
                if (ERRORS) raise( 26, 'constructor call without new', n );
                return new BigNumber( n, b );
            }

            // 'new BigNumber() base not an integer: {b}'
            // 'new BigNumber() base out of range: {b}'
            if ( b == null || !isValidInt( b, 2, 64, id, 'base' ) ) {

                // Duplicate.
                if ( n instanceof BigNumber ) {
                    x.s = n.s;
                    x.e = n.e;
                    x.c = ( n = n.c ) ? n.slice() : n;
                    id = 0;
                    return;
                }

                if ( ( num = typeof n == 'number' ) && n * 0 == 0 ) {
                    x.s = 1 / n < 0 ? ( n = -n, -1 ) : 1;

                    // Fast path for integers.
                    if ( n === ~~n ) {
                        for ( e = 0, i = n; i >= 10; i /= 10, e++ );
                        x.e = e;
                        x.c = [n];
                        id = 0;
                        return;
                    }

                    str = n + '';
                } else {
                    if ( !isNumeric.test( str = n + '' ) ) return parseNumeric( x, str, num );
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }
            } else {
                b = b | 0;
                str = n + '';

                // Ensure return value is rounded to DECIMAL_PLACES as with other bases.
                // Allow exponential notation to be used with base 10 argument.
                if ( b == 10 ) {
                    x = new BigNumber( n instanceof BigNumber ? n : str );
                    return round( x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE );
                }

                // Avoid potential interpretation of Infinity and NaN as base 44+ values.
                // Any number in exponential form will fail due to the [Ee][+-].
                if ( ( num = typeof n == 'number' ) && n * 0 != 0 ||
                  !( new RegExp( '^-?' + ( c = '[' + ALPHABET.slice( 0, b ) + ']+' ) +
                    '(?:\\.' + c + ')?$',b < 37 ? 'i' : '' ) ).test(str) ) {
                    return parseNumeric( x, str, num, b );
                }

                if (num) {
                    x.s = 1 / n < 0 ? ( str = str.slice(1), -1 ) : 1;

                    if ( ERRORS && str.replace( /^0\.0*|\./, '' ).length > 15 ) {

                        // 'new BigNumber() number type has more than 15 significant digits: {n}'
                        raise( id, tooManyDigits, n );
                    }

                    // Prevent later check for length on converted number.
                    num = false;
                } else {
                    x.s = str.charCodeAt(0) === 45 ? ( str = str.slice(1), -1 ) : 1;
                }

                str = convertBase( str, 10, b, x.s );
            }

            // Decimal point?
            if ( ( e = str.indexOf('.') ) > -1 ) str = str.replace( '.', '' );

            // Exponential form?
            if ( ( i = str.search( /e/i ) ) > 0 ) {

                // Determine exponent.
                if ( e < 0 ) e = i;
                e += +str.slice( i + 1 );
                str = str.substring( 0, i );
            } else if ( e < 0 ) {

                // Integer.
                e = str.length;
            }

            // Determine leading zeros.
            for ( i = 0; str.charCodeAt(i) === 48; i++ );

            // Determine trailing zeros.
            for ( len = str.length; str.charCodeAt(--len) === 48; );
            str = str.slice( i, len + 1 );

            if (str) {
                len = str.length;

                // Disallow numbers with over 15 significant digits if number type.
                // 'new BigNumber() number type has more than 15 significant digits: {n}'
                if ( num && ERRORS && len > 15 ) raise( id, tooManyDigits, x.s * n );

                e = e - i - 1;

                 // Overflow?
                if ( e > MAX_EXP ) {

                    // Infinity.
                    x.c = x.e = null;

                // Underflow?
                } else if ( e < MIN_EXP ) {

                    // Zero.
                    x.c = [ x.e = 0 ];
                } else {
                    x.e = e;
                    x.c = [];

                    // Transform base

                    // e is the base 10 exponent.
                    // i is where to slice str to get the first element of the coefficient array.
                    i = ( e + 1 ) % LOG_BASE;
                    if ( e < 0 ) i += LOG_BASE;

                    if ( i < len ) {
                        if (i) x.c.push( +str.slice( 0, i ) );

                        for ( len -= LOG_BASE; i < len; ) {
                            x.c.push( +str.slice( i, i += LOG_BASE ) );
                        }

                        str = str.slice(i);
                        i = LOG_BASE - str.length;
                    } else {
                        i -= len;
                    }

                    for ( ; i--; str += '0' );
                    x.c.push( +str );
                }
            } else {

                // Zero.
                x.c = [ x.e = 0 ];
            }

            id = 0;
        }


        // CONSTRUCTOR PROPERTIES


        BigNumber.another = another;

        BigNumber.ROUND_UP = 0;
        BigNumber.ROUND_DOWN = 1;
        BigNumber.ROUND_CEIL = 2;
        BigNumber.ROUND_FLOOR = 3;
        BigNumber.ROUND_HALF_UP = 4;
        BigNumber.ROUND_HALF_DOWN = 5;
        BigNumber.ROUND_HALF_EVEN = 6;
        BigNumber.ROUND_HALF_CEIL = 7;
        BigNumber.ROUND_HALF_FLOOR = 8;
        BigNumber.EUCLID = 9;


        /*
         * Configure infrequently-changing library-wide settings.
         *
         * Accept an object or an argument list, with one or many of the following properties or
         * parameters respectively:
         *
         *   DECIMAL_PLACES  {number}  Integer, 0 to MAX inclusive
         *   ROUNDING_MODE   {number}  Integer, 0 to 8 inclusive
         *   EXPONENTIAL_AT  {number|number[]}  Integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to 0 incl., 0 to MAX incl.]
         *   RANGE           {number|number[]}  Non-zero integer, -MAX to MAX inclusive or
         *                                      [integer -MAX to -1 incl., integer 1 to MAX incl.]
         *   ERRORS          {boolean|number}   true, false, 1 or 0
         *   CRYPTO          {boolean|number}   true, false, 1 or 0
         *   MODULO_MODE     {number}           0 to 9 inclusive
         *   POW_PRECISION   {number}           0 to MAX inclusive
         *   FORMAT          {object}           See BigNumber.prototype.toFormat
         *      decimalSeparator       {string}
         *      groupSeparator         {string}
         *      groupSize              {number}
         *      secondaryGroupSize     {number}
         *      fractionGroupSeparator {string}
         *      fractionGroupSize      {number}
         *
         * (The values assigned to the above FORMAT object properties are not checked for validity.)
         *
         * E.g.
         * BigNumber.config(20, 4) is equivalent to
         * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
         *
         * Ignore properties/parameters set to null or undefined.
         * Return an object with the properties current values.
         */
        BigNumber.config = function () {
            var v, p,
                i = 0,
                r = {},
                a = arguments,
                o = a[0],
                has = o && typeof o == 'object'
                  ? function () { if ( o.hasOwnProperty(p) ) return ( v = o[p] ) != null; }
                  : function () { if ( a.length > i ) return ( v = a[i++] ) != null; };

            // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
            // 'config() DECIMAL_PLACES not an integer: {v}'
            // 'config() DECIMAL_PLACES out of range: {v}'
            if ( has( p = 'DECIMAL_PLACES' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                DECIMAL_PLACES = v | 0;
            }
            r[p] = DECIMAL_PLACES;

            // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
            // 'config() ROUNDING_MODE not an integer: {v}'
            // 'config() ROUNDING_MODE out of range: {v}'
            if ( has( p = 'ROUNDING_MODE' ) && isValidInt( v, 0, 8, 2, p ) ) {
                ROUNDING_MODE = v | 0;
            }
            r[p] = ROUNDING_MODE;

            // EXPONENTIAL_AT {number|number[]}
            // Integer, -MAX to MAX inclusive or [integer -MAX to 0 inclusive, 0 to MAX inclusive].
            // 'config() EXPONENTIAL_AT not an integer: {v}'
            // 'config() EXPONENTIAL_AT out of range: {v}'
            if ( has( p = 'EXPONENTIAL_AT' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, 0, 2, p ) && isValidInt( v[1], 0, MAX, 2, p ) ) {
                        TO_EXP_NEG = v[0] | 0;
                        TO_EXP_POS = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    TO_EXP_NEG = -( TO_EXP_POS = ( v < 0 ? -v : v ) | 0 );
                }
            }
            r[p] = [ TO_EXP_NEG, TO_EXP_POS ];

            // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
            // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
            // 'config() RANGE not an integer: {v}'
            // 'config() RANGE cannot be zero: {v}'
            // 'config() RANGE out of range: {v}'
            if ( has( p = 'RANGE' ) ) {

                if ( isArray(v) ) {
                    if ( isValidInt( v[0], -MAX, -1, 2, p ) && isValidInt( v[1], 1, MAX, 2, p ) ) {
                        MIN_EXP = v[0] | 0;
                        MAX_EXP = v[1] | 0;
                    }
                } else if ( isValidInt( v, -MAX, MAX, 2, p ) ) {
                    if ( v | 0 ) MIN_EXP = -( MAX_EXP = ( v < 0 ? -v : v ) | 0 );
                    else if (ERRORS) raise( 2, p + ' cannot be zero', v );
                }
            }
            r[p] = [ MIN_EXP, MAX_EXP ];

            // ERRORS {boolean|number} true, false, 1 or 0.
            // 'config() ERRORS not a boolean or binary digit: {v}'
            if ( has( p = 'ERRORS' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    id = 0;
                    isValidInt = ( ERRORS = !!v ) ? intValidatorWithErrors : intValidatorNoErrors;
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = ERRORS;

            // CRYPTO {boolean|number} true, false, 1 or 0.
            // 'config() CRYPTO not a boolean or binary digit: {v}'
            // 'config() crypto unavailable: {crypto}'
            if ( has( p = 'CRYPTO' ) ) {

                if ( v === !!v || v === 1 || v === 0 ) {
                    CRYPTO = !!( v && crypto && typeof crypto == 'object' );
                    if ( v && !CRYPTO && ERRORS ) raise( 2, 'crypto unavailable', crypto );
                } else if (ERRORS) {
                    raise( 2, p + notBool, v );
                }
            }
            r[p] = CRYPTO;

            // MODULO_MODE {number} Integer, 0 to 9 inclusive.
            // 'config() MODULO_MODE not an integer: {v}'
            // 'config() MODULO_MODE out of range: {v}'
            if ( has( p = 'MODULO_MODE' ) && isValidInt( v, 0, 9, 2, p ) ) {
                MODULO_MODE = v | 0;
            }
            r[p] = MODULO_MODE;

            // POW_PRECISION {number} Integer, 0 to MAX inclusive.
            // 'config() POW_PRECISION not an integer: {v}'
            // 'config() POW_PRECISION out of range: {v}'
            if ( has( p = 'POW_PRECISION' ) && isValidInt( v, 0, MAX, 2, p ) ) {
                POW_PRECISION = v | 0;
            }
            r[p] = POW_PRECISION;

            // FORMAT {object}
            // 'config() FORMAT not an object: {v}'
            if ( has( p = 'FORMAT' ) ) {

                if ( typeof v == 'object' ) {
                    FORMAT = v;
                } else if (ERRORS) {
                    raise( 2, p + ' not an object', v );
                }
            }
            r[p] = FORMAT;

            return r;
        };


        /*
         * Return a new BigNumber whose value is the maximum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.max = function () { return maxOrMin( arguments, P.lt ); };


        /*
         * Return a new BigNumber whose value is the minimum of the arguments.
         *
         * arguments {number|string|BigNumber}
         */
        BigNumber.min = function () { return maxOrMin( arguments, P.gt ); };


        /*
         * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
         * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
         * zeros are produced).
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         *
         * 'random() decimal places not an integer: {dp}'
         * 'random() decimal places out of range: {dp}'
         * 'random() crypto unavailable: {crypto}'
         */
        BigNumber.random = (function () {
            var pow2_53 = 0x20000000000000;

            // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
            // Check if Math.random() produces more than 32 bits of randomness.
            // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
            // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
            var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
              ? function () { return mathfloor( Math.random() * pow2_53 ); }
              : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
                  (Math.random() * 0x800000 | 0); };

            return function (dp) {
                var a, b, e, k, v,
                    i = 0,
                    c = [],
                    rand = new BigNumber(ONE);

                dp = dp == null || !isValidInt( dp, 0, MAX, 14 ) ? DECIMAL_PLACES : dp | 0;
                k = mathceil( dp / LOG_BASE );

                if (CRYPTO) {

                    // Browsers supporting crypto.getRandomValues.
                    if ( crypto && crypto.getRandomValues ) {

                        a = crypto.getRandomValues( new Uint32Array( k *= 2 ) );

                        for ( ; i < k; ) {

                            // 53 bits:
                            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
                            // 11111 11111111 11111111 11111111 11100000 00000000 00000000
                            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
                            //                                     11111 11111111 11111111
                            // 0x20000 is 2^21.
                            v = a[i] * 0x20000 + (a[i + 1] >>> 11);

                            // Rejection sampling:
                            // 0 <= v < 9007199254740992
                            // Probability that v >= 9e15, is
                            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
                            if ( v >= 9e15 ) {
                                b = crypto.getRandomValues( new Uint32Array(2) );
                                a[i] = b[0];
                                a[i + 1] = b[1];
                            } else {

                                // 0 <= v <= 8999999999999999
                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 2;
                            }
                        }
                        i = k / 2;

                    // Node.js supporting crypto.randomBytes.
                    } else if ( crypto && crypto.randomBytes ) {

                        // buffer
                        a = crypto.randomBytes( k *= 7 );

                        for ( ; i < k; ) {

                            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
                            // 0x100000000 is 2^32, 0x1000000 is 2^24
                            // 11111 11111111 11111111 11111111 11111111 11111111 11111111
                            // 0 <= v < 9007199254740992
                            v = ( ( a[i] & 31 ) * 0x1000000000000 ) + ( a[i + 1] * 0x10000000000 ) +
                                  ( a[i + 2] * 0x100000000 ) + ( a[i + 3] * 0x1000000 ) +
                                  ( a[i + 4] << 16 ) + ( a[i + 5] << 8 ) + a[i + 6];

                            if ( v >= 9e15 ) {
                                crypto.randomBytes(7).copy( a, i );
                            } else {

                                // 0 <= (v % 1e14) <= 99999999999999
                                c.push( v % 1e14 );
                                i += 7;
                            }
                        }
                        i = k / 7;
                    } else if (ERRORS) {
                        raise( 14, 'crypto unavailable', crypto );
                    }
                }

                // Use Math.random: CRYPTO is false or crypto is unavailable and ERRORS is false.
                if (!i) {

                    for ( ; i < k; ) {
                        v = random53bitInt();
                        if ( v < 9e15 ) c[i++] = v % 1e14;
                    }
                }

                k = c[--i];
                dp %= LOG_BASE;

                // Convert trailing digits to zeros according to dp.
                if ( k && dp ) {
                    v = POWS_TEN[LOG_BASE - dp];
                    c[i] = mathfloor( k / v ) * v;
                }

                // Remove trailing elements which are zero.
                for ( ; c[i] === 0; c.pop(), i-- );

                // Zero?
                if ( i < 0 ) {
                    c = [ e = 0 ];
                } else {

                    // Remove leading elements which are zero and adjust exponent accordingly.
                    for ( e = -1 ; c[0] === 0; c.shift(), e -= LOG_BASE);

                    // Count the digits of the first element of c to determine leading zeros, and...
                    for ( i = 1, v = c[0]; v >= 10; v /= 10, i++);

                    // adjust the exponent accordingly.
                    if ( i < LOG_BASE ) e -= LOG_BASE - i;
                }

                rand.e = e;
                rand.c = c;
                return rand;
            };
        })();


        // PRIVATE FUNCTIONS


        // Convert a numeric string of baseIn to a numeric string of baseOut.
        function convertBase( str, baseOut, baseIn, sign ) {
            var d, e, k, r, x, xc, y,
                i = str.indexOf( '.' ),
                dp = DECIMAL_PLACES,
                rm = ROUNDING_MODE;

            if ( baseIn < 37 ) str = str.toLowerCase();

            // Non-integer.
            if ( i >= 0 ) {
                k = POW_PRECISION;

                // Unlimited precision.
                POW_PRECISION = 0;
                str = str.replace( '.', '' );
                y = new BigNumber(baseIn);
                x = y.pow( str.length - i );
                POW_PRECISION = k;

                // Convert str as if an integer, then restore the fraction part by dividing the
                // result by its base raised to a power.
                y.c = toBaseOut( toFixedPoint( coeffToString( x.c ), x.e ), 10, baseOut );
                y.e = y.c.length;
            }

            // Convert the number as integer.
            xc = toBaseOut( str, baseIn, baseOut );
            e = k = xc.length;

            // Remove trailing zeros.
            for ( ; xc[--k] == 0; xc.pop() );
            if ( !xc[0] ) return '0';

            if ( i < 0 ) {
                --e;
            } else {
                x.c = xc;
                x.e = e;

                // sign is needed for correct rounding.
                x.s = sign;
                x = div( x, y, dp, rm, baseOut );
                xc = x.c;
                r = x.r;
                e = x.e;
            }

            d = e + dp + 1;

            // The rounding digit, i.e. the digit to the right of the digit that may be rounded up.
            i = xc[d];
            k = baseOut / 2;
            r = r || d < 0 || xc[d + 1] != null;

            r = rm < 4 ? ( i != null || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                       : i > k || i == k &&( rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
                         rm == ( x.s < 0 ? 8 : 7 ) );

            if ( d < 1 || !xc[0] ) {

                // 1^-dp or 0.
                str = r ? toFixedPoint( '1', -dp ) : '0';
            } else {
                xc.length = d;

                if (r) {

                    // Rounding up may mean the previous digit has to be rounded up and so on.
                    for ( --baseOut; ++xc[--d] > baseOut; ) {
                        xc[d] = 0;

                        if ( !d ) {
                            ++e;
                            xc.unshift(1);
                        }
                    }
                }

                // Determine trailing zeros.
                for ( k = xc.length; !xc[--k]; );

                // E.g. [4, 11, 15] becomes 4bf.
                for ( i = 0, str = ''; i <= k; str += ALPHABET.charAt( xc[i++] ) );
                str = toFixedPoint( str, e );
            }

            // The caller will add the sign.
            return str;
        }


        // Perform division in the specified base. Called by div and convertBase.
        div = (function () {

            // Assume non-zero x and k.
            function multiply( x, k, base ) {
                var m, temp, xlo, xhi,
                    carry = 0,
                    i = x.length,
                    klo = k % SQRT_BASE,
                    khi = k / SQRT_BASE | 0;

                for ( x = x.slice(); i--; ) {
                    xlo = x[i] % SQRT_BASE;
                    xhi = x[i] / SQRT_BASE | 0;
                    m = khi * xlo + xhi * klo;
                    temp = klo * xlo + ( ( m % SQRT_BASE ) * SQRT_BASE ) + carry;
                    carry = ( temp / base | 0 ) + ( m / SQRT_BASE | 0 ) + khi * xhi;
                    x[i] = temp % base;
                }

                if (carry) x.unshift(carry);

                return x;
            }

            function compare( a, b, aL, bL ) {
                var i, cmp;

                if ( aL != bL ) {
                    cmp = aL > bL ? 1 : -1;
                } else {

                    for ( i = cmp = 0; i < aL; i++ ) {

                        if ( a[i] != b[i] ) {
                            cmp = a[i] > b[i] ? 1 : -1;
                            break;
                        }
                    }
                }
                return cmp;
            }

            function subtract( a, b, aL, base ) {
                var i = 0;

                // Subtract b from a.
                for ( ; aL--; ) {
                    a[aL] -= i;
                    i = a[aL] < b[aL] ? 1 : 0;
                    a[aL] = i * base + a[aL] - b[aL];
                }

                // Remove leading zeros.
                for ( ; !a[0] && a.length > 1; a.shift() );
            }

            // x: dividend, y: divisor.
            return function ( x, y, dp, rm, base ) {
                var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
                    yL, yz,
                    s = x.s == y.s ? 1 : -1,
                    xc = x.c,
                    yc = y.c;

                // Either NaN, Infinity or 0?
                if ( !xc || !xc[0] || !yc || !yc[0] ) {

                    return new BigNumber(

                      // Return NaN if either NaN, or both Infinity or 0.
                      !x.s || !y.s || ( xc ? yc && xc[0] == yc[0] : !yc ) ? NaN :

                        // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
                        xc && xc[0] == 0 || !yc ? s * 0 : s / 0
                    );
                }

                q = new BigNumber(s);
                qc = q.c = [];
                e = x.e - y.e;
                s = dp + e + 1;

                if ( !base ) {
                    base = BASE;
                    e = bitFloor( x.e / LOG_BASE ) - bitFloor( y.e / LOG_BASE );
                    s = s / LOG_BASE | 0;
                }

                // Result exponent may be one less then the current value of e.
                // The coefficients of the BigNumbers from convertBase may have trailing zeros.
                for ( i = 0; yc[i] == ( xc[i] || 0 ); i++ );
                if ( yc[i] > ( xc[i] || 0 ) ) e--;

                if ( s < 0 ) {
                    qc.push(1);
                    more = true;
                } else {
                    xL = xc.length;
                    yL = yc.length;
                    i = 0;
                    s += 2;

                    // Normalise xc and yc so highest order digit of yc is >= base / 2.

                    n = mathfloor( base / ( yc[0] + 1 ) );

                    // Not necessary, but to handle odd bases where yc[0] == ( base / 2 ) - 1.
                    // if ( n > 1 || n++ == 1 && yc[0] < base / 2 ) {
                    if ( n > 1 ) {
                        yc = multiply( yc, n, base );
                        xc = multiply( xc, n, base );
                        yL = yc.length;
                        xL = xc.length;
                    }

                    xi = yL;
                    rem = xc.slice( 0, yL );
                    remL = rem.length;

                    // Add zeros to make remainder as long as divisor.
                    for ( ; remL < yL; rem[remL++] = 0 );
                    yz = yc.slice();
                    yz.unshift(0);
                    yc0 = yc[0];
                    if ( yc[1] >= base / 2 ) yc0++;
                    // Not necessary, but to prevent trial digit n > base, when using base 3.
                    // else if ( base == 3 && yc0 == 1 ) yc0 = 1 + 1e-15;

                    do {
                        n = 0;

                        // Compare divisor and remainder.
                        cmp = compare( yc, rem, yL, remL );

                        // If divisor < remainder.
                        if ( cmp < 0 ) {

                            // Calculate trial digit, n.

                            rem0 = rem[0];
                            if ( yL != remL ) rem0 = rem0 * base + ( rem[1] || 0 );

                            // n is how many times the divisor goes into the current remainder.
                            n = mathfloor( rem0 / yc0 );

                            //  Algorithm:
                            //  1. product = divisor * trial digit (n)
                            //  2. if product > remainder: product -= divisor, n--
                            //  3. remainder -= product
                            //  4. if product was < remainder at 2:
                            //    5. compare new remainder and divisor
                            //    6. If remainder > divisor: remainder -= divisor, n++

                            if ( n > 1 ) {

                                // n may be > base only when base is 3.
                                if (n >= base) n = base - 1;

                                // product = divisor * trial digit.
                                prod = multiply( yc, n, base );
                                prodL = prod.length;
                                remL = rem.length;

                                // Compare product and remainder.
                                // If product > remainder.
                                // Trial digit n too high.
                                // n is 1 too high about 5% of the time, and is not known to have
                                // ever been more than 1 too high.
                                while ( compare( prod, rem, prodL, remL ) == 1 ) {
                                    n--;

                                    // Subtract divisor from product.
                                    subtract( prod, yL < prodL ? yz : yc, prodL, base );
                                    prodL = prod.length;
                                    cmp = 1;
                                }
                            } else {

                                // n is 0 or 1, cmp is -1.
                                // If n is 0, there is no need to compare yc and rem again below,
                                // so change cmp to 1 to avoid it.
                                // If n is 1, leave cmp as -1, so yc and rem are compared again.
                                if ( n == 0 ) {

                                    // divisor < remainder, so n must be at least 1.
                                    cmp = n = 1;
                                }

                                // product = divisor
                                prod = yc.slice();
                                prodL = prod.length;
                            }

                            if ( prodL < remL ) prod.unshift(0);

                            // Subtract product from remainder.
                            subtract( rem, prod, remL, base );
                            remL = rem.length;

                             // If product was < remainder.
                            if ( cmp == -1 ) {

                                // Compare divisor and new remainder.
                                // If divisor < new remainder, subtract divisor from remainder.
                                // Trial digit n too low.
                                // n is 1 too low about 5% of the time, and very rarely 2 too low.
                                while ( compare( yc, rem, yL, remL ) < 1 ) {
                                    n++;

                                    // Subtract divisor from remainder.
                                    subtract( rem, yL < remL ? yz : yc, remL, base );
                                    remL = rem.length;
                                }
                            }
                        } else if ( cmp === 0 ) {
                            n++;
                            rem = [0];
                        } // else cmp === 1 and n will be 0

                        // Add the next digit, n, to the result array.
                        qc[i++] = n;

                        // Update the remainder.
                        if ( rem[0] ) {
                            rem.push(xc[xi] || 0);
                            remL = remL + 1;
                        } else {
                            rem = [ xc[xi] ];
                            remL = 1;
                        }
                    } while ( ( xi++ < xL || rem[0] != null ) && s-- );

                    more = rem[0] != null;

                    // Leading zero?
                    if ( !qc[0] ) qc.shift();
                }

                if ( base == BASE ) {

                    // To calculate q.e, first get the number of digits of qc[0].
                    for ( i = 1, s = qc[0]; s >= 10; s /= 10, i++ );
                    round( q, dp + ( q.e = i + e * LOG_BASE - 1 ) + 1, rm, more );

                // Caller is convertBase.
                } else {
                    q.e = e;
                    q.r = +more;
                }

                return q;
            };
        })();


        /*
         * Return a string representing the value of BigNumber n in fixed-point or exponential
         * notation rounded to the specified decimal places or significant digits.
         *
         * n is a BigNumber.
         * i is the index of the last digit required (i.e. the digit that may be rounded up).
         * rm is the rounding mode.
         * caller is caller id: toExponential 19, toFixed 20, toFormat 21, toPrecision 24.
         */
        function format( n, i, rm, caller ) {
            var c0, e, ne, len, str;

            rm = rm != null && isValidInt( rm, 0, 8, caller, roundingMode )
              ? rm | 0 : ROUNDING_MODE;

            if ( !n.c ) return n.toString();
            c0 = n.c[0];
            ne = n.e;

            if ( i == null ) {
                str = coeffToString( n.c );
                str = caller == 19 || caller == 24 && ne <= TO_EXP_NEG
                  ? toExponential( str, ne )
                  : toFixedPoint( str, ne );
            } else {
                n = round( new BigNumber(n), i, rm );

                // n.e may have changed if the value was rounded up.
                e = n.e;

                str = coeffToString( n.c );
                len = str.length;

                // toPrecision returns exponential notation if the number of significant digits
                // specified is less than the number of digits necessary to represent the integer
                // part of the value in fixed-point notation.

                // Exponential notation.
                if ( caller == 19 || caller == 24 && ( i <= e || e <= TO_EXP_NEG ) ) {

                    // Append zeros?
                    for ( ; len < i; str += '0', len++ );
                    str = toExponential( str, e );

                // Fixed-point notation.
                } else {
                    i -= ne;
                    str = toFixedPoint( str, e );

                    // Append zeros?
                    if ( e + 1 > len ) {
                        if ( --i > 0 ) for ( str += '.'; i--; str += '0' );
                    } else {
                        i += e - len;
                        if ( i > 0 ) {
                            if ( e + 1 == len ) str += '.';
                            for ( ; i--; str += '0' );
                        }
                    }
                }
            }

            return n.s < 0 && c0 ? '-' + str : str;
        }


        // Handle BigNumber.max and BigNumber.min.
        function maxOrMin( args, method ) {
            var m, n,
                i = 0;

            if ( isArray( args[0] ) ) args = args[0];
            m = new BigNumber( args[0] );

            for ( ; ++i < args.length; ) {
                n = new BigNumber( args[i] );

                // If any number is NaN, return NaN.
                if ( !n.s ) {
                    m = n;
                    break;
                } else if ( method.call( m, n ) ) {
                    m = n;
                }
            }

            return m;
        }


        /*
         * Return true if n is an integer in range, otherwise throw.
         * Use for argument validation when ERRORS is true.
         */
        function intValidatorWithErrors( n, min, max, caller, name ) {
            if ( n < min || n > max || n != truncate(n) ) {
                raise( caller, ( name || 'decimal places' ) +
                  ( n < min || n > max ? ' out of range' : ' not an integer' ), n );
            }

            return true;
        }


        /*
         * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
         * Called by minus, plus and times.
         */
        function normalise( n, c, e ) {
            var i = 1,
                j = c.length;

             // Remove trailing zeros.
            for ( ; !c[--j]; c.pop() );

            // Calculate the base 10 exponent. First get the number of digits of c[0].
            for ( j = c[0]; j >= 10; j /= 10, i++ );

            // Overflow?
            if ( ( e = i + e * LOG_BASE - 1 ) > MAX_EXP ) {

                // Infinity.
                n.c = n.e = null;

            // Underflow?
            } else if ( e < MIN_EXP ) {

                // Zero.
                n.c = [ n.e = 0 ];
            } else {
                n.e = e;
                n.c = c;
            }

            return n;
        }


        // Handle values that fail the validity test in BigNumber.
        parseNumeric = (function () {
            var basePrefix = /^(-?)0([xbo])/i,
                dotAfter = /^([^.]+)\.$/,
                dotBefore = /^\.([^.]+)$/,
                isInfinityOrNaN = /^-?(Infinity|NaN)$/,
                whitespaceOrPlus = /^\s*\+|^\s+|\s+$/g;

            return function ( x, str, num, b ) {
                var base,
                    s = num ? str : str.replace( whitespaceOrPlus, '' );

                // No exception on ±Infinity or NaN.
                if ( isInfinityOrNaN.test(s) ) {
                    x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
                } else {
                    if ( !num ) {

                        // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
                        s = s.replace( basePrefix, function ( m, p1, p2 ) {
                            base = ( p2 = p2.toLowerCase() ) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
                            return !b || b == base ? p1 : m;
                        });

                        if (b) {
                            base = b;

                            // E.g. '1.' to '1', '.1' to '0.1'
                            s = s.replace( dotAfter, '$1' ).replace( dotBefore, '0.$1' );
                        }

                        if ( str != s ) return new BigNumber( s, base );
                    }

                    // 'new BigNumber() not a number: {n}'
                    // 'new BigNumber() not a base {b} number: {n}'
                    if (ERRORS) raise( id, 'not a' + ( b ? ' base ' + b : '' ) + ' number', str );
                    x.s = null;
                }

                x.c = x.e = null;
                id = 0;
            }
        })();


        // Throw a BigNumber Error.
        function raise( caller, msg, val ) {
            var error = new Error( [
                'new BigNumber',     // 0
                'cmp',               // 1
                'config',            // 2
                'div',               // 3
                'divToInt',          // 4
                'eq',                // 5
                'gt',                // 6
                'gte',               // 7
                'lt',                // 8
                'lte',               // 9
                'minus',             // 10
                'mod',               // 11
                'plus',              // 12
                'precision',         // 13
                'random',            // 14
                'round',             // 15
                'shift',             // 16
                'times',             // 17
                'toDigits',          // 18
                'toExponential',     // 19
                'toFixed',           // 20
                'toFormat',          // 21
                'toFraction',        // 22
                'pow',               // 23
                'toPrecision',       // 24
                'toString',          // 25
                'BigNumber'          // 26
            ][caller] + '() ' + msg + ': ' + val );

            error.name = 'BigNumber Error';
            id = 0;
            throw error;
        }


        /*
         * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
         * If r is truthy, it is known that there are more digits after the rounding digit.
         */
        function round( x, sd, rm, r ) {
            var d, i, j, k, n, ni, rd,
                xc = x.c,
                pows10 = POWS_TEN;

            // if x is not Infinity or NaN...
            if (xc) {

                // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
                // n is a base 1e14 number, the value of the element of array x.c containing rd.
                // ni is the index of n within x.c.
                // d is the number of digits of n.
                // i is the index of rd within n including leading zeros.
                // j is the actual index of rd within n (if < 0, rd is a leading zero).
                out: {

                    // Get the number of digits of the first element of xc.
                    for ( d = 1, k = xc[0]; k >= 10; k /= 10, d++ );
                    i = sd - d;

                    // If the rounding digit is in the first element of xc...
                    if ( i < 0 ) {
                        i += LOG_BASE;
                        j = sd;
                        n = xc[ ni = 0 ];

                        // Get the rounding digit at index j of n.
                        rd = n / pows10[ d - j - 1 ] % 10 | 0;
                    } else {
                        ni = mathceil( ( i + 1 ) / LOG_BASE );

                        if ( ni >= xc.length ) {

                            if (r) {

                                // Needed by sqrt.
                                for ( ; xc.length <= ni; xc.push(0) );
                                n = rd = 0;
                                d = 1;
                                i %= LOG_BASE;
                                j = i - LOG_BASE + 1;
                            } else {
                                break out;
                            }
                        } else {
                            n = k = xc[ni];

                            // Get the number of digits of n.
                            for ( d = 1; k >= 10; k /= 10, d++ );

                            // Get the index of rd within n.
                            i %= LOG_BASE;

                            // Get the index of rd within n, adjusted for leading zeros.
                            // The number of leading zeros of n is given by LOG_BASE - d.
                            j = i - LOG_BASE + d;

                            // Get the rounding digit at index j of n.
                            rd = j < 0 ? 0 : n / pows10[ d - j - 1 ] % 10 | 0;
                        }
                    }

                    r = r || sd < 0 ||

                    // Are there any non-zero digits after the rounding digit?
                    // The expression  n % pows10[ d - j - 1 ]  returns all digits of n to the right
                    // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
                      xc[ni + 1] != null || ( j < 0 ? n : n % pows10[ d - j - 1 ] );

                    r = rm < 4
                      ? ( rd || r ) && ( rm == 0 || rm == ( x.s < 0 ? 3 : 2 ) )
                      : rd > 5 || rd == 5 && ( rm == 4 || r || rm == 6 &&

                        // Check whether the digit to the left of the rounding digit is odd.
                        ( ( i > 0 ? j > 0 ? n / pows10[ d - j ] : 0 : xc[ni - 1] ) % 10 ) & 1 ||
                          rm == ( x.s < 0 ? 8 : 7 ) );

                    if ( sd < 1 || !xc[0] ) {
                        xc.length = 0;

                        if (r) {

                            // Convert sd to decimal places.
                            sd -= x.e + 1;

                            // 1, 0.1, 0.01, 0.001, 0.0001 etc.
                            xc[0] = pows10[ sd % LOG_BASE ];
                            x.e = -sd || 0;
                        } else {

                            // Zero.
                            xc[0] = x.e = 0;
                        }

                        return x;
                    }

                    // Remove excess digits.
                    if ( i == 0 ) {
                        xc.length = ni;
                        k = 1;
                        ni--;
                    } else {
                        xc.length = ni + 1;
                        k = pows10[ LOG_BASE - i ];

                        // E.g. 56700 becomes 56000 if 7 is the rounding digit.
                        // j > 0 means i > number of leading zeros of n.
                        xc[ni] = j > 0 ? mathfloor( n / pows10[ d - j ] % pows10[j] ) * k : 0;
                    }

                    // Round up?
                    if (r) {

                        for ( ; ; ) {

                            // If the digit to be rounded up is in the first element of xc...
                            if ( ni == 0 ) {

                                // i will be the length of xc[0] before k is added.
                                for ( i = 1, j = xc[0]; j >= 10; j /= 10, i++ );
                                j = xc[0] += k;
                                for ( k = 1; j >= 10; j /= 10, k++ );

                                // if i != k the length has increased.
                                if ( i != k ) {
                                    x.e++;
                                    if ( xc[0] == BASE ) xc[0] = 1;
                                }

                                break;
                            } else {
                                xc[ni] += k;
                                if ( xc[ni] != BASE ) break;
                                xc[ni--] = 0;
                                k = 1;
                            }
                        }
                    }

                    // Remove trailing zeros.
                    for ( i = xc.length; xc[--i] === 0; xc.pop() );
                }

                // Overflow? Infinity.
                if ( x.e > MAX_EXP ) {
                    x.c = x.e = null;

                // Underflow? Zero.
                } else if ( x.e < MIN_EXP ) {
                    x.c = [ x.e = 0 ];
                }
            }

            return x;
        }


        // PROTOTYPE/INSTANCE METHODS


        /*
         * Return a new BigNumber whose value is the absolute value of this BigNumber.
         */
        P.absoluteValue = P.abs = function () {
            var x = new BigNumber(this);
            if ( x.s < 0 ) x.s = 1;
            return x;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of Infinity.
         */
        P.ceil = function () {
            return round( new BigNumber(this), this.e + 1, 2 );
        };


        /*
         * Return
         * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
         * 0 if they have the same value,
         * or null if the value of either is NaN.
         */
        P.comparedTo = P.cmp = function ( y, b ) {
            id = 1;
            return compare( this, new BigNumber( y, b ) );
        };


        /*
         * Return the number of decimal places of the value of this BigNumber, or null if the value
         * of this BigNumber is ±Infinity or NaN.
         */
        P.decimalPlaces = P.dp = function () {
            var n, v,
                c = this.c;

            if ( !c ) return null;
            n = ( ( v = c.length - 1 ) - bitFloor( this.e / LOG_BASE ) ) * LOG_BASE;

            // Subtract the number of trailing zeros of the last number.
            if ( v = c[v] ) for ( ; v % 10 == 0; v /= 10, n-- );
            if ( n < 0 ) n = 0;

            return n;
        };


        /*
         *  n / 0 = I
         *  n / N = N
         *  n / I = 0
         *  0 / n = 0
         *  0 / 0 = N
         *  0 / N = N
         *  0 / I = 0
         *  N / n = N
         *  N / 0 = N
         *  N / N = N
         *  N / I = N
         *  I / n = I
         *  I / 0 = I
         *  I / N = N
         *  I / I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
         * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.dividedBy = P.div = function ( y, b ) {
            id = 3;
            return div( this, new BigNumber( y, b ), DECIMAL_PLACES, ROUNDING_MODE );
        };


        /*
         * Return a new BigNumber whose value is the integer part of dividing the value of this
         * BigNumber by the value of BigNumber(y, b).
         */
        P.dividedToIntegerBy = P.divToInt = function ( y, b ) {
            id = 4;
            return div( this, new BigNumber( y, b ), 0, 1 );
        };


        /*
         * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.equals = P.eq = function ( y, b ) {
            id = 5;
            return compare( this, new BigNumber( y, b ) ) === 0;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a whole
         * number in the direction of -Infinity.
         */
        P.floor = function () {
            return round( new BigNumber(this), this.e + 1, 3 );
        };


        /*
         * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.greaterThan = P.gt = function ( y, b ) {
            id = 6;
            return compare( this, new BigNumber( y, b ) ) > 0;
        };


        /*
         * Return true if the value of this BigNumber is greater than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.greaterThanOrEqualTo = P.gte = function ( y, b ) {
            id = 7;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === 1 || b === 0;

        };


        /*
         * Return true if the value of this BigNumber is a finite number, otherwise returns false.
         */
        P.isFinite = function () {
            return !!this.c;
        };


        /*
         * Return true if the value of this BigNumber is an integer, otherwise return false.
         */
        P.isInteger = P.isInt = function () {
            return !!this.c && bitFloor( this.e / LOG_BASE ) > this.c.length - 2;
        };


        /*
         * Return true if the value of this BigNumber is NaN, otherwise returns false.
         */
        P.isNaN = function () {
            return !this.s;
        };


        /*
         * Return true if the value of this BigNumber is negative, otherwise returns false.
         */
        P.isNegative = P.isNeg = function () {
            return this.s < 0;
        };


        /*
         * Return true if the value of this BigNumber is 0 or -0, otherwise returns false.
         */
        P.isZero = function () {
            return !!this.c && this.c[0] == 0;
        };


        /*
         * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
         * otherwise returns false.
         */
        P.lessThan = P.lt = function ( y, b ) {
            id = 8;
            return compare( this, new BigNumber( y, b ) ) < 0;
        };


        /*
         * Return true if the value of this BigNumber is less than or equal to the value of
         * BigNumber(y, b), otherwise returns false.
         */
        P.lessThanOrEqualTo = P.lte = function ( y, b ) {
            id = 9;
            return ( b = compare( this, new BigNumber( y, b ) ) ) === -1 || b === 0;
        };


        /*
         *  n - 0 = n
         *  n - N = N
         *  n - I = -I
         *  0 - n = -n
         *  0 - 0 = 0
         *  0 - N = N
         *  0 - I = -I
         *  N - n = N
         *  N - 0 = N
         *  N - N = N
         *  N - I = N
         *  I - n = I
         *  I - 0 = I
         *  I - N = N
         *  I - I = N
         *
         * Return a new BigNumber whose value is the value of this BigNumber minus the value of
         * BigNumber(y, b).
         */
        P.minus = P.sub = function ( y, b ) {
            var i, j, t, xLTy,
                x = this,
                a = x.s;

            id = 10;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
            if ( a != b ) {
                y.s = -b;
                return x.plus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Either Infinity?
                if ( !xc || !yc ) return xc ? ( y.s = -b, y ) : new BigNumber( yc ? x : NaN );

                // Either zero?
                if ( !xc[0] || !yc[0] ) {

                    // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                    return yc[0] ? ( y.s = -b, y ) : new BigNumber( xc[0] ? x :

                      // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
                      ROUNDING_MODE == 3 ? -0 : 0 );
                }
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Determine which is the bigger number.
            if ( a = xe - ye ) {

                if ( xLTy = a < 0 ) {
                    a = -a;
                    t = xc;
                } else {
                    ye = xe;
                    t = yc;
                }

                t.reverse();

                // Prepend zeros to equalise exponents.
                for ( b = a; b--; t.push(0) );
                t.reverse();
            } else {

                // Exponents equal. Check digit by digit.
                j = ( xLTy = ( a = xc.length ) < ( b = yc.length ) ) ? a : b;

                for ( a = b = 0; b < j; b++ ) {

                    if ( xc[b] != yc[b] ) {
                        xLTy = xc[b] < yc[b];
                        break;
                    }
                }
            }

            // x < y? Point xc to the array of the bigger number.
            if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;

            b = ( j = yc.length ) - ( i = xc.length );

            // Append zeros to xc if shorter.
            // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
            if ( b > 0 ) for ( ; b--; xc[i++] = 0 );
            b = BASE - 1;

            // Subtract yc from xc.
            for ( ; j > a; ) {

                if ( xc[--j] < yc[j] ) {
                    for ( i = j; i && !xc[--i]; xc[i] = b );
                    --xc[i];
                    xc[j] += BASE;
                }

                xc[j] -= yc[j];
            }

            // Remove leading zeros and adjust exponent accordingly.
            for ( ; xc[0] == 0; xc.shift(), --ye );

            // Zero?
            if ( !xc[0] ) {

                // Following IEEE 754 (2008) 6.3,
                // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
                y.s = ROUNDING_MODE == 3 ? -1 : 1;
                y.c = [ y.e = 0 ];
                return y;
            }

            // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
            // for finite x and y.
            return normalise( y, xc, ye );
        };


        /*
         *   n % 0 =  N
         *   n % N =  N
         *   n % I =  n
         *   0 % n =  0
         *  -0 % n = -0
         *   0 % 0 =  N
         *   0 % N =  N
         *   0 % I =  0
         *   N % n =  N
         *   N % 0 =  N
         *   N % N =  N
         *   N % I =  N
         *   I % n =  N
         *   I % 0 =  N
         *   I % N =  N
         *   I % I =  N
         *
         * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
         * BigNumber(y, b). The result depends on the value of MODULO_MODE.
         */
        P.modulo = P.mod = function ( y, b ) {
            var q, s,
                x = this;

            id = 11;
            y = new BigNumber( y, b );

            // Return NaN if x is Infinity or NaN, or y is NaN or zero.
            if ( !x.c || !y.s || y.c && !y.c[0] ) {
                return new BigNumber(NaN);

            // Return x if y is Infinity or x is zero.
            } else if ( !y.c || x.c && !x.c[0] ) {
                return new BigNumber(x);
            }

            if ( MODULO_MODE == 9 ) {

                // Euclidian division: q = sign(y) * floor(x / abs(y))
                // r = x - qy    where  0 <= r < abs(y)
                s = y.s;
                y.s = 1;
                q = div( x, y, 0, 3 );
                y.s = s;
                q.s *= s;
            } else {
                q = div( x, y, 0, MODULO_MODE );
            }

            return x.minus( q.times(y) );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber negated,
         * i.e. multiplied by -1.
         */
        P.negated = P.neg = function () {
            var x = new BigNumber(this);
            x.s = -x.s || null;
            return x;
        };


        /*
         *  n + 0 = n
         *  n + N = N
         *  n + I = I
         *  0 + n = n
         *  0 + 0 = 0
         *  0 + N = N
         *  0 + I = I
         *  N + n = N
         *  N + 0 = N
         *  N + N = N
         *  N + I = N
         *  I + n = I
         *  I + 0 = I
         *  I + N = N
         *  I + I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber plus the value of
         * BigNumber(y, b).
         */
        P.plus = P.add = function ( y, b ) {
            var t,
                x = this,
                a = x.s;

            id = 12;
            y = new BigNumber( y, b );
            b = y.s;

            // Either NaN?
            if ( !a || !b ) return new BigNumber(NaN);

            // Signs differ?
             if ( a != b ) {
                y.s = -b;
                return x.minus(y);
            }

            var xe = x.e / LOG_BASE,
                ye = y.e / LOG_BASE,
                xc = x.c,
                yc = y.c;

            if ( !xe || !ye ) {

                // Return ±Infinity if either ±Infinity.
                if ( !xc || !yc ) return new BigNumber( a / 0 );

                // Either zero?
                // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
                if ( !xc[0] || !yc[0] ) return yc[0] ? y : new BigNumber( xc[0] ? x : a * 0 );
            }

            xe = bitFloor(xe);
            ye = bitFloor(ye);
            xc = xc.slice();

            // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
            if ( a = xe - ye ) {
                if ( a > 0 ) {
                    ye = xe;
                    t = yc;
                } else {
                    a = -a;
                    t = xc;
                }

                t.reverse();
                for ( ; a--; t.push(0) );
                t.reverse();
            }

            a = xc.length;
            b = yc.length;

            // Point xc to the longer array, and b to the shorter length.
            if ( a - b < 0 ) t = yc, yc = xc, xc = t, b = a;

            // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
            for ( a = 0; b; ) {
                a = ( xc[--b] = xc[b] + yc[b] + a ) / BASE | 0;
                xc[b] %= BASE;
            }

            if (a) {
                xc.unshift(a);
                ++ye;
            }

            // No need to check for zero, as +x + +y != 0 && -x + -y != 0
            // ye = MAX_EXP + 1 possible
            return normalise( y, xc, ye );
        };


        /*
         * Return the number of significant digits of the value of this BigNumber.
         *
         * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
         */
        P.precision = P.sd = function (z) {
            var n, v,
                x = this,
                c = x.c;

            // 'precision() argument not a boolean or binary digit: {z}'
            if ( z != null && z !== !!z && z !== 1 && z !== 0 ) {
                if (ERRORS) raise( 13, 'argument' + notBool, z );
                if ( z != !!z ) z = null;
            }

            if ( !c ) return null;
            v = c.length - 1;
            n = v * LOG_BASE + 1;

            if ( v = c[v] ) {

                // Subtract the number of trailing zeros of the last element.
                for ( ; v % 10 == 0; v /= 10, n-- );

                // Add the number of digits of the first element.
                for ( v = c[0]; v >= 10; v /= 10, n++ );
            }

            if ( z && x.e + 1 > n ) n = x.e + 1;

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * dp decimal places using rounding mode rm, or to 0 and ROUNDING_MODE respectively if
         * omitted.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'round() decimal places out of range: {dp}'
         * 'round() decimal places not an integer: {dp}'
         * 'round() rounding mode not an integer: {rm}'
         * 'round() rounding mode out of range: {rm}'
         */
        P.round = function ( dp, rm ) {
            var n = new BigNumber(this);

            if ( dp == null || isValidInt( dp, 0, MAX, 15 ) ) {
                round( n, ~~dp + this.e + 1, rm == null ||
                  !isValidInt( rm, 0, 8, 15, roundingMode ) ? ROUNDING_MODE : rm | 0 );
            }

            return n;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
         * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
         *
         * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
         *
         * If k is out of range and ERRORS is false, the result will be ±0 if k < 0, or ±Infinity
         * otherwise.
         *
         * 'shift() argument not an integer: {k}'
         * 'shift() argument out of range: {k}'
         */
        P.shift = function (k) {
            var n = this;
            return isValidInt( k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 16, 'argument' )

              // k < 1e+21, or truncate(k) will produce exponential notation.
              ? n.times( '1e' + truncate(k) )
              : new BigNumber( n.c && n.c[0] && ( k < -MAX_SAFE_INTEGER || k > MAX_SAFE_INTEGER )
                ? n.s * ( k < 0 ? 0 : 1 / 0 )
                : n );
        };


        /*
         *  sqrt(-n) =  N
         *  sqrt( N) =  N
         *  sqrt(-I) =  N
         *  sqrt( I) =  I
         *  sqrt( 0) =  0
         *  sqrt(-0) = -0
         *
         * Return a new BigNumber whose value is the square root of the value of this BigNumber,
         * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
         */
        P.squareRoot = P.sqrt = function () {
            var m, n, r, rep, t,
                x = this,
                c = x.c,
                s = x.s,
                e = x.e,
                dp = DECIMAL_PLACES + 4,
                half = new BigNumber('0.5');

            // Negative/NaN/Infinity/zero?
            if ( s !== 1 || !c || !c[0] ) {
                return new BigNumber( !s || s < 0 && ( !c || c[0] ) ? NaN : c ? x : 1 / 0 );
            }

            // Initial estimate.
            s = Math.sqrt( +x );

            // Math.sqrt underflow/overflow?
            // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
            if ( s == 0 || s == 1 / 0 ) {
                n = coeffToString(c);
                if ( ( n.length + e ) % 2 == 0 ) n += '0';
                s = Math.sqrt(n);
                e = bitFloor( ( e + 1 ) / 2 ) - ( e < 0 || e % 2 );

                if ( s == 1 / 0 ) {
                    n = '1e' + e;
                } else {
                    n = s.toExponential();
                    n = n.slice( 0, n.indexOf('e') + 1 ) + e;
                }

                r = new BigNumber(n);
            } else {
                r = new BigNumber( s + '' );
            }

            // Check for zero.
            // r could be zero if MIN_EXP is changed after the this value was created.
            // This would cause a division by zero (x/t) and hence Infinity below, which would cause
            // coeffToString to throw.
            if ( r.c[0] ) {
                e = r.e;
                s = e + dp;
                if ( s < 3 ) s = 0;

                // Newton-Raphson iteration.
                for ( ; ; ) {
                    t = r;
                    r = half.times( t.plus( div( x, t, dp, 1 ) ) );

                    if ( coeffToString( t.c   ).slice( 0, s ) === ( n =
                         coeffToString( r.c ) ).slice( 0, s ) ) {

                        // The exponent of r may here be one less than the final result exponent,
                        // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
                        // are indexed correctly.
                        if ( r.e < e ) --s;
                        n = n.slice( s - 3, s + 1 );

                        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
                        // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
                        // iteration.
                        if ( n == '9999' || !rep && n == '4999' ) {

                            // On the first iteration only, check to see if rounding up gives the
                            // exact result as the nines may infinitely repeat.
                            if ( !rep ) {
                                round( t, t.e + DECIMAL_PLACES + 2, 0 );

                                if ( t.times(t).eq(x) ) {
                                    r = t;
                                    break;
                                }
                            }

                            dp += 4;
                            s += 4;
                            rep = 1;
                        } else {

                            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
                            // result. If not, then there are further digits and m will be truthy.
                            if ( !+n || !+n.slice(1) && n.charAt(0) == '5' ) {

                                // Truncate to the first rounding digit.
                                round( r, r.e + DECIMAL_PLACES + 2, 1 );
                                m = !r.times(r).eq(x);
                            }

                            break;
                        }
                    }
                }
            }

            return round( r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m );
        };


        /*
         *  n * 0 = 0
         *  n * N = N
         *  n * I = I
         *  0 * n = 0
         *  0 * 0 = 0
         *  0 * N = N
         *  0 * I = N
         *  N * n = N
         *  N * 0 = N
         *  N * N = N
         *  N * I = N
         *  I * n = I
         *  I * 0 = N
         *  I * N = N
         *  I * I = I
         *
         * Return a new BigNumber whose value is the value of this BigNumber times the value of
         * BigNumber(y, b).
         */
        P.times = P.mul = function ( y, b ) {
            var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
                base, sqrtBase,
                x = this,
                xc = x.c,
                yc = ( id = 17, y = new BigNumber( y, b ) ).c;

            // Either NaN, ±Infinity or ±0?
            if ( !xc || !yc || !xc[0] || !yc[0] ) {

                // Return NaN if either is NaN, or one is 0 and the other is Infinity.
                if ( !x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc ) {
                    y.c = y.e = y.s = null;
                } else {
                    y.s *= x.s;

                    // Return ±Infinity if either is ±Infinity.
                    if ( !xc || !yc ) {
                        y.c = y.e = null;

                    // Return ±0 if either is ±0.
                    } else {
                        y.c = [0];
                        y.e = 0;
                    }
                }

                return y;
            }

            e = bitFloor( x.e / LOG_BASE ) + bitFloor( y.e / LOG_BASE );
            y.s *= x.s;
            xcL = xc.length;
            ycL = yc.length;

            // Ensure xc points to longer array and xcL to its length.
            if ( xcL < ycL ) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;

            // Initialise the result array with zeros.
            for ( i = xcL + ycL, zc = []; i--; zc.push(0) );

            base = BASE;
            sqrtBase = SQRT_BASE;

            for ( i = ycL; --i >= 0; ) {
                c = 0;
                ylo = yc[i] % sqrtBase;
                yhi = yc[i] / sqrtBase | 0;

                for ( k = xcL, j = i + k; j > i; ) {
                    xlo = xc[--k] % sqrtBase;
                    xhi = xc[k] / sqrtBase | 0;
                    m = yhi * xlo + xhi * ylo;
                    xlo = ylo * xlo + ( ( m % sqrtBase ) * sqrtBase ) + zc[j] + c;
                    c = ( xlo / base | 0 ) + ( m / sqrtBase | 0 ) + yhi * xhi;
                    zc[j--] = xlo % base;
                }

                zc[j] = c;
            }

            if (c) {
                ++e;
            } else {
                zc.shift();
            }

            return normalise( y, zc, e );
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber rounded to a maximum of
         * sd significant digits using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toDigits() precision out of range: {sd}'
         * 'toDigits() precision not an integer: {sd}'
         * 'toDigits() rounding mode not an integer: {rm}'
         * 'toDigits() rounding mode out of range: {rm}'
         */
        P.toDigits = function ( sd, rm ) {
            var n = new BigNumber(this);
            sd = sd == null || !isValidInt( sd, 1, MAX, 18, 'precision' ) ? null : sd | 0;
            rm = rm == null || !isValidInt( rm, 0, 8, 18, roundingMode ) ? ROUNDING_MODE : rm | 0;
            return sd ? round( n, sd, rm ) : n;
        };


        /*
         * Return a string representing the value of this BigNumber in exponential notation and
         * rounded using ROUNDING_MODE to dp fixed decimal places.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toExponential() decimal places not an integer: {dp}'
         * 'toExponential() decimal places out of range: {dp}'
         * 'toExponential() rounding mode not an integer: {rm}'
         * 'toExponential() rounding mode out of range: {rm}'
         */
        P.toExponential = function ( dp, rm ) {
            return format( this,
              dp != null && isValidInt( dp, 0, MAX, 19 ) ? ~~dp + 1 : null, rm, 19 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounding
         * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
         *
         * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
         * but e.g. (-0.00001).toFixed(0) is '-0'.
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFixed() decimal places not an integer: {dp}'
         * 'toFixed() decimal places out of range: {dp}'
         * 'toFixed() rounding mode not an integer: {rm}'
         * 'toFixed() rounding mode out of range: {rm}'
         */
        P.toFixed = function ( dp, rm ) {
            return format( this, dp != null && isValidInt( dp, 0, MAX, 20 )
              ? ~~dp + this.e + 1 : null, rm, 20 );
        };


        /*
         * Return a string representing the value of this BigNumber in fixed-point notation rounded
         * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
         * of the FORMAT object (see BigNumber.config).
         *
         * FORMAT = {
         *      decimalSeparator : '.',
         *      groupSeparator : ',',
         *      groupSize : 3,
         *      secondaryGroupSize : 0,
         *      fractionGroupSeparator : '\xA0',    // non-breaking space
         *      fractionGroupSize : 0
         * };
         *
         * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toFormat() decimal places not an integer: {dp}'
         * 'toFormat() decimal places out of range: {dp}'
         * 'toFormat() rounding mode not an integer: {rm}'
         * 'toFormat() rounding mode out of range: {rm}'
         */
        P.toFormat = function ( dp, rm ) {
            var str = format( this, dp != null && isValidInt( dp, 0, MAX, 21 )
              ? ~~dp + this.e + 1 : null, rm, 21 );

            if ( this.c ) {
                var i,
                    arr = str.split('.'),
                    g1 = +FORMAT.groupSize,
                    g2 = +FORMAT.secondaryGroupSize,
                    groupSeparator = FORMAT.groupSeparator,
                    intPart = arr[0],
                    fractionPart = arr[1],
                    isNeg = this.s < 0,
                    intDigits = isNeg ? intPart.slice(1) : intPart,
                    len = intDigits.length;

                if (g2) i = g1, g1 = g2, g2 = i, len -= i;

                if ( g1 > 0 && len > 0 ) {
                    i = len % g1 || g1;
                    intPart = intDigits.substr( 0, i );

                    for ( ; i < len; i += g1 ) {
                        intPart += groupSeparator + intDigits.substr( i, g1 );
                    }

                    if ( g2 > 0 ) intPart += groupSeparator + intDigits.slice(i);
                    if (isNeg) intPart = '-' + intPart;
                }

                str = fractionPart
                  ? intPart + FORMAT.decimalSeparator + ( ( g2 = +FORMAT.fractionGroupSize )
                    ? fractionPart.replace( new RegExp( '\\d{' + g2 + '}\\B', 'g' ),
                      '$&' + FORMAT.fractionGroupSeparator )
                    : fractionPart )
                  : intPart;
            }

            return str;
        };


        /*
         * Return a string array representing the value of this BigNumber as a simple fraction with
         * an integer numerator and an integer denominator. The denominator will be a positive
         * non-zero value less than or equal to the specified maximum denominator. If a maximum
         * denominator is not specified, the denominator will be the lowest value necessary to
         * represent the number exactly.
         *
         * [md] {number|string|BigNumber} Integer >= 1 and < Infinity. The maximum denominator.
         *
         * 'toFraction() max denominator not an integer: {md}'
         * 'toFraction() max denominator out of range: {md}'
         */
        P.toFraction = function (md) {
            var arr, d0, d2, e, exp, n, n0, q, s,
                k = ERRORS,
                x = this,
                xc = x.c,
                d = new BigNumber(ONE),
                n1 = d0 = new BigNumber(ONE),
                d1 = n0 = new BigNumber(ONE);

            if ( md != null ) {
                ERRORS = false;
                n = new BigNumber(md);
                ERRORS = k;

                if ( !( k = n.isInt() ) || n.lt(ONE) ) {

                    if (ERRORS) {
                        raise( 22,
                          'max denominator ' + ( k ? 'out of range' : 'not an integer' ), md );
                    }

                    // ERRORS is false:
                    // If md is a finite non-integer >= 1, round it to an integer and use it.
                    md = !k && n.c && round( n, n.e + 1, 1 ).gte(ONE) ? n : null;
                }
            }

            if ( !xc ) return x.toString();
            s = coeffToString(xc);

            // Determine initial denominator.
            // d is a power of 10 and the minimum max denominator that specifies the value exactly.
            e = d.e = s.length - x.e - 1;
            d.c[0] = POWS_TEN[ ( exp = e % LOG_BASE ) < 0 ? LOG_BASE + exp : exp ];
            md = !md || n.cmp(d) > 0 ? ( e > 0 ? d : n1 ) : n;

            exp = MAX_EXP;
            MAX_EXP = 1 / 0;
            n = new BigNumber(s);

            // n0 = d1 = 0
            n0.c[0] = 0;

            for ( ; ; )  {
                q = div( n, d, 0, 1 );
                d2 = d0.plus( q.times(d1) );
                if ( d2.cmp(md) == 1 ) break;
                d0 = d1;
                d1 = d2;
                n1 = n0.plus( q.times( d2 = n1 ) );
                n0 = d2;
                d = n.minus( q.times( d2 = d ) );
                n = d2;
            }

            d2 = div( md.minus(d0), d1, 0, 1 );
            n0 = n0.plus( d2.times(n1) );
            d0 = d0.plus( d2.times(d1) );
            n0.s = n1.s = x.s;
            e *= 2;

            // Determine which fraction is closer to x, n0/d0 or n1/d1
            arr = div( n1, d1, e, ROUNDING_MODE ).minus(x).abs().cmp(
                  div( n0, d0, e, ROUNDING_MODE ).minus(x).abs() ) < 1
                    ? [ n1.toString(), d1.toString() ]
                    : [ n0.toString(), d0.toString() ];

            MAX_EXP = exp;
            return arr;
        };


        /*
         * Return the value of this BigNumber converted to a number primitive.
         */
        P.toNumber = function () {
            var x = this;

            // Ensure zero has correct sign.
            return +x || ( x.s ? x.s * 0 : NaN );
        };


        /*
         * Return a BigNumber whose value is the value of this BigNumber raised to the power n.
         * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
         * If POW_PRECISION is not 0, round to POW_PRECISION using ROUNDING_MODE.
         *
         * n {number} Integer, -9007199254740992 to 9007199254740992 inclusive.
         * (Performs 54 loop iterations for n of 9007199254740992.)
         *
         * 'pow() exponent not an integer: {n}'
         * 'pow() exponent out of range: {n}'
         */
        P.toPower = P.pow = function (n) {
            var k, y,
                i = mathfloor( n < 0 ? -n : +n ),
                x = this;

            // Pass ±Infinity to Math.pow if exponent is out of range.
            if ( !isValidInt( n, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER, 23, 'exponent' ) &&
              ( !isFinite(n) || i > MAX_SAFE_INTEGER && ( n /= 0 ) ||
                parseFloat(n) != n && !( n = NaN ) ) ) {
                return new BigNumber( Math.pow( +x, n ) );
            }

            // Truncating each coefficient array to a length of k after each multiplication equates
            // to truncating significant digits to POW_PRECISION + [28, 41], i.e. there will be a
            // minimum of 28 guard digits retained. (Using + 1.5 would give [9, 21] guard digits.)
            k = POW_PRECISION ? mathceil( POW_PRECISION / LOG_BASE + 2 ) : 0;
            y = new BigNumber(ONE);

            for ( ; ; ) {

                if ( i % 2 ) {
                    y = y.times(x);
                    if ( !y.c ) break;
                    if ( k && y.c.length > k ) y.c.length = k;
                }

                i = mathfloor( i / 2 );
                if ( !i ) break;

                x = x.times(x);
                if ( k && x.c && x.c.length > k ) x.c.length = k;
            }

            if ( n < 0 ) y = ONE.div(y);
            return k ? round( y, POW_PRECISION, ROUNDING_MODE ) : y;
        };


        /*
         * Return a string representing the value of this BigNumber rounded to sd significant digits
         * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
         * necessary to represent the integer part of the value in fixed-point notation, then use
         * exponential notation.
         *
         * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
         * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
         *
         * 'toPrecision() precision not an integer: {sd}'
         * 'toPrecision() precision out of range: {sd}'
         * 'toPrecision() rounding mode not an integer: {rm}'
         * 'toPrecision() rounding mode out of range: {rm}'
         */
        P.toPrecision = function ( sd, rm ) {
            return format( this, sd != null && isValidInt( sd, 1, MAX, 24, 'precision' )
              ? sd | 0 : null, rm, 24 );
        };


        /*
         * Return a string representing the value of this BigNumber in base b, or base 10 if b is
         * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
         * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
         * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
         * TO_EXP_NEG, return exponential notation.
         *
         * [b] {number} Integer, 2 to 64 inclusive.
         *
         * 'toString() base not an integer: {b}'
         * 'toString() base out of range: {b}'
         */
        P.toString = function (b) {
            var str,
                n = this,
                s = n.s,
                e = n.e;

            // Infinity or NaN?
            if ( e === null ) {

                if (s) {
                    str = 'Infinity';
                    if ( s < 0 ) str = '-' + str;
                } else {
                    str = 'NaN';
                }
            } else {
                str = coeffToString( n.c );

                if ( b == null || !isValidInt( b, 2, 64, 25, 'base' ) ) {
                    str = e <= TO_EXP_NEG || e >= TO_EXP_POS
                      ? toExponential( str, e )
                      : toFixedPoint( str, e );
                } else {
                    str = convertBase( toFixedPoint( str, e ), b | 0, 10, s );
                }

                if ( s < 0 && n.c[0] ) str = '-' + str;
            }

            return str;
        };


        /*
         * Return a new BigNumber whose value is the value of this BigNumber truncated to a whole
         * number.
         */
        P.truncated = P.trunc = function () {
            return round( new BigNumber(this), this.e + 1, 1 );
        };



        /*
         * Return as toString, but do not accept a base argument.
         */
        P.valueOf = P.toJSON = function () {
            return this.toString();
        };


        // Aliases for BigDecimal methods.
        //P.add = P.plus;         // P.add included above
        //P.subtract = P.minus;   // P.sub included above
        //P.multiply = P.times;   // P.mul included above
        //P.divide = P.div;
        //P.remainder = P.mod;
        //P.compareTo = P.cmp;
        //P.negate = P.neg;


        if ( configObj != null ) BigNumber.config(configObj);

        return BigNumber;
    }


    // PRIVATE HELPER FUNCTIONS


    function bitFloor(n) {
        var i = n | 0;
        return n > 0 || n === i ? i : i - 1;
    }


    // Return a coefficient array as a string of base 10 digits.
    function coeffToString(a) {
        var s, z,
            i = 1,
            j = a.length,
            r = a[0] + '';

        for ( ; i < j; ) {
            s = a[i++] + '';
            z = LOG_BASE - s.length;
            for ( ; z--; s = '0' + s );
            r += s;
        }

        // Determine trailing zeros.
        for ( j = r.length; r.charCodeAt(--j) === 48; );
        return r.slice( 0, j + 1 || 1 );
    }


    // Compare the value of BigNumbers x and y.
    function compare( x, y ) {
        var a, b,
            xc = x.c,
            yc = y.c,
            i = x.s,
            j = y.s,
            k = x.e,
            l = y.e;

        // Either NaN?
        if ( !i || !j ) return null;

        a = xc && !xc[0];
        b = yc && !yc[0];

        // Either zero?
        if ( a || b ) return a ? b ? 0 : -j : i;

        // Signs differ?
        if ( i != j ) return i;

        a = i < 0;
        b = k == l;

        // Either Infinity?
        if ( !xc || !yc ) return b ? 0 : !xc ^ a ? 1 : -1;

        // Compare exponents.
        if ( !b ) return k > l ^ a ? 1 : -1;

        j = ( k = xc.length ) < ( l = yc.length ) ? k : l;

        // Compare digit by digit.
        for ( i = 0; i < j; i++ ) if ( xc[i] != yc[i] ) return xc[i] > yc[i] ^ a ? 1 : -1;

        // Compare lengths.
        return k == l ? 0 : k > l ^ a ? 1 : -1;
    }


    /*
     * Return true if n is a valid number in range, otherwise false.
     * Use for argument validation when ERRORS is false.
     * Note: parseInt('1e+1') == 1 but parseFloat('1e+1') == 10.
     */
    function intValidatorNoErrors( n, min, max ) {
        return ( n = truncate(n) ) >= min && n <= max;
    }


    function isArray(obj) {
        return Object.prototype.toString.call(obj) == '[object Array]';
    }


    /*
     * Convert string of baseIn to an array of numbers of baseOut.
     * Eg. convertBase('255', 10, 16) returns [15, 15].
     * Eg. convertBase('ff', 16, 10) returns [2, 5, 5].
     */
    function toBaseOut( str, baseIn, baseOut ) {
        var j,
            arr = [0],
            arrL,
            i = 0,
            len = str.length;

        for ( ; i < len; ) {
            for ( arrL = arr.length; arrL--; arr[arrL] *= baseIn );
            arr[ j = 0 ] += ALPHABET.indexOf( str.charAt( i++ ) );

            for ( ; j < arr.length; j++ ) {

                if ( arr[j] > baseOut - 1 ) {
                    if ( arr[j + 1] == null ) arr[j + 1] = 0;
                    arr[j + 1] += arr[j] / baseOut | 0;
                    arr[j] %= baseOut;
                }
            }
        }

        return arr.reverse();
    }


    function toExponential( str, e ) {
        return ( str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str ) +
          ( e < 0 ? 'e' : 'e+' ) + e;
    }


    function toFixedPoint( str, e ) {
        var len, z;

        // Negative exponent?
        if ( e < 0 ) {

            // Prepend zeros.
            for ( z = '0.'; ++e; z += '0' );
            str = z + str;

        // Positive exponent
        } else {
            len = str.length;

            // Append zeros.
            if ( ++e > len ) {
                for ( z = '0', e -= len; --e; z += '0' );
                str += z;
            } else if ( e < len ) {
                str = str.slice( 0, e ) + '.' + str.slice(e);
            }
        }

        return str;
    }


    function truncate(n) {
        n = parseFloat(n);
        return n < 0 ? mathceil(n) : mathfloor(n);
    }


    // EXPORT


    BigNumber = another();

    // AMD.
    if ( true ) {
        !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { return BigNumber; }.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

    // Node and other environments that support module.exports.
    } else if ( typeof module != 'undefined' && module.exports ) {
        module.exports = BigNumber;
        if ( !crypto ) try { crypto = require('crypto'); } catch (e) {}

    // Browser.
    } else {
        global.BigNumber = BigNumber;
    }
})(this);


/***/ }),
/* 153 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file config.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 * 
 * @module utils
 */

/**
 * Utility functions
 * 
 * @class [utils] config
 * @constructor
 */


/// required to define ETH_BIGNUMBER_ROUNDING_MODE
var BigNumber = __webpack_require__(152);

var ETH_UNITS = [
    'wei',
    'kwei',
    'Mwei',
    'Gwei',
    'szabo',
    'finney',
    'femtoether',
    'picoether',
    'nanoether',
    'microether',
    'milliether',
    'nano',
    'micro',
    'milli',
    'ether',
    'grand',
    'Mether',
    'Gether',
    'Tether',
    'Pether',
    'Eether',
    'Zether',
    'Yether',
    'Nether',
    'Dether',
    'Vether',
    'Uether'
];

module.exports = {
    ETH_PADDING: 32,
    ETH_SIGNATURE_LENGTH: 4,
    ETH_UNITS: ETH_UNITS,
    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
    ETH_POLLING_TIMEOUT: 1000/2,
    defaultBlock: 'latest',
    defaultAccount: undefined
};



/***/ }),
/* 154 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file filter.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var formatters = __webpack_require__(50);
var utils = __webpack_require__(14);

/**
* Converts a given topic to a hex string, but also allows null values.
*
* @param {Mixed} value
* @return {String}
*/
var toTopic = function(value){

    if(value === null || typeof value === 'undefined')
        return null;

    value = String(value);

    if(value.indexOf('0x') === 0)
        return value;
    else
        return utils.fromUtf8(value);
};

/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
/// @param should be string or object
/// @returns options string or object
var getOptions = function (options) {

    if (utils.isString(options)) {
        return options;
    }

    options = options || {};

    // make sure topics, get converted to hex
    options.topics = options.topics || [];
    options.topics = options.topics.map(function(topic){
        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
    });

    return {
        topics: options.topics,
        from: options.from,
        to: options.to,
        address: options.address,
        fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
        toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
    };
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method getLogsAtStart
@param {Object} self
@param {funciton}
*/
var getLogsAtStart = function(self, callback){
    // call getFilterLogs for the first watch callback start
    if (!utils.isString(self.options)) {
        self.get(function (err, messages) {
            // don't send all the responses to all the watches again... just to self one
            if (err) {
                callback(err);
            }

            if(utils.isArray(messages)) {
                messages.forEach(function (message) {
                    callback(null, message);
                });
            }
        });
    }
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollFilter
@param {Object} self
*/
var pollFilter = function(self) {

    var onMessage = function (error, messages) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isArray(messages)) {
            messages.forEach(function (message) {
                message = self.formatter ? self.formatter(message) : message;
                self.callbacks.forEach(function (callback) {
                    callback(null, message);
                });
            });
        }
    };

    self.requestManager.startPolling({
        method: self.implementation.poll.call,
        params: [self.filterId],
    }, self.filterId, onMessage, self.stopWatching.bind(self));

};

var Filter = function (requestManager, options, methods, formatter, callback) {
    var self = this;
    var implementation = {};
    methods.forEach(function (method) {
        method.setRequestManager(requestManager);
        method.attachToObject(implementation);
    });
    this.requestManager = requestManager;
    this.options = getOptions(options);
    this.implementation = implementation;
    this.filterId = null;
    this.callbacks = [];
    this.getLogsCallbacks = [];
    this.pollFilters = [];
    this.formatter = formatter;
    this.implementation.newFilter(this.options, function(error, id){
        if(error) {
            self.callbacks.forEach(function(cb){
                cb(error);
            });
        } else {
            self.filterId = id;

            // check if there are get pending callbacks as a consequence
            // of calling get() with filterId unassigned.
            self.getLogsCallbacks.forEach(function (cb){
                self.get(cb);
            });
            self.getLogsCallbacks = [];

            // get filter logs for the already existing watch calls
            self.callbacks.forEach(function(cb){
                getLogsAtStart(self, cb);
            });
            if(self.callbacks.length > 0)
                pollFilter(self);

            // start to watch immediately
            if(typeof callback === 'function') {
                return self.watch(callback);
            }
        }
    });

    return this;
};

Filter.prototype.watch = function (callback) {
    this.callbacks.push(callback);

    if(this.filterId) {
        getLogsAtStart(this, callback);
        pollFilter(this);
    }

    return this;
};

Filter.prototype.stopWatching = function () {
    this.requestManager.stopPolling(this.filterId);
    // remove filter async
    this.implementation.uninstallFilter(this.filterId, function(){});
    this.callbacks = [];
};

Filter.prototype.get = function (callback) {
    var self = this;
    if (utils.isFunction(callback)) {
        if (this.filterId === null) {
            // If filterId is not set yet, call it back
            // when newFilter() assigns it.
            this.getLogsCallbacks.push(callback);
        } else {
            this.implementation.getLogs(this.filterId, function(err, res){
                if (err) {
                    callback(err);
                } else {
                    callback(null, res.map(function (log) {
                        return self.formatter ? self.formatter(log) : log;
                    }));
                }
            });
        }
    } else {
        if (this.filterId === null) {
            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
        }
        var logs = this.implementation.getLogs(this.filterId);
        return logs.map(function (log) {
            return self.formatter ? self.formatter(log) : log;
        });
    }

    return this;
};

module.exports = Filter;



/***/ }),
/* 155 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file iban.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(152);

var padLeft = function (string, bytes) {
    var result = string;
    while (result.length < bytes * 2) {
        result = '00' + result;
    }
    return result;
};

/**
 * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
 * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
 *
 * @method iso13616Prepare
 * @param {String} iban the IBAN
 * @returns {String} the prepared IBAN
 */
var iso13616Prepare = function (iban) {
    var A = 'A'.charCodeAt(0);
    var Z = 'Z'.charCodeAt(0);

    iban = iban.toUpperCase();
    iban = iban.substr(4) + iban.substr(0,4);

    return iban.split('').map(function(n){
        var code = n.charCodeAt(0);
        if (code >= A && code <= Z){
            // A = 10, B = 11, ... Z = 35
            return code - A + 10;
        } else {
            return n;
        }
    }).join('');
};

/**
 * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
 *
 * @method mod9710
 * @param {String} iban
 * @returns {Number}
 */
var mod9710 = function (iban) {
    var remainder = iban,
        block;

    while (remainder.length > 2){
        block = remainder.slice(0, 9);
        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }

    return parseInt(remainder, 10) % 97;
};

/**
 * This prototype should be used to create iban object from iban correct string
 *
 * @param {String} iban
 */
var Iban = function (iban) {
    this._iban = iban;
};

/**
 * This method should be used to create iban object from ethereum address
 *
 * @method fromAddress
 * @param {String} address
 * @return {Iban} the IBAN object
 */
Iban.fromAddress = function (address) {
    var asBn = new BigNumber(address, 16);
    var base36 = asBn.toString(36);
    var padded = padLeft(base36, 15);
    return Iban.fromBban(padded.toUpperCase());
};

/**
 * Convert the passed BBAN to an IBAN for this country specification.
 * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
 * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
 *
 * @method fromBban
 * @param {String} bban the BBAN to convert to IBAN
 * @returns {Iban} the IBAN object
 */
Iban.fromBban = function (bban) {
    var countryCode = 'XE';

    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
    var checkDigit = ('0' + (98 - remainder)).slice(-2);

    return new Iban(countryCode + checkDigit + bban);
};

/**
 * Should be used to create IBAN object for given institution and identifier
 *
 * @method createIndirect
 * @param {Object} options, required options are "institution" and "identifier"
 * @return {Iban} the IBAN object
 */
Iban.createIndirect = function (options) {
    return Iban.fromBban('ETH' + options.institution + options.identifier);
};

/**
 * Thos method should be used to check if given string is valid iban object
 *
 * @method isValid
 * @param {String} iban string
 * @return {Boolean} true if it is valid IBAN
 */
Iban.isValid = function (iban) {
    var i = new Iban(iban);
    return i.isValid();
};

/**
 * Should be called to check if iban is correct
 *
 * @method isValid
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isValid = function () {
    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
        mod9710(iso13616Prepare(this._iban)) === 1;
};

/**
 * Should be called to check if iban number is direct
 *
 * @method isDirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isDirect = function () {
    return this._iban.length === 34 || this._iban.length === 35;
};

/**
 * Should be called to check if iban number if indirect
 *
 * @method isIndirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isIndirect = function () {
    return this._iban.length === 20;
};

/**
 * Should be called to get iban checksum
 * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
 *
 * @method checksum
 * @returns {String} checksum
 */
Iban.prototype.checksum = function () {
    return this._iban.substr(2, 2);
};

/**
 * Should be called to get institution identifier
 * eg. XREG
 *
 * @method institution
 * @returns {String} institution identifier
 */
Iban.prototype.institution = function () {
    return this.isIndirect() ? this._iban.substr(7, 4) : '';
};

/**
 * Should be called to get client identifier within institution
 * eg. GAVOFYORK
 *
 * @method client
 * @returns {String} client identifier
 */
Iban.prototype.client = function () {
    return this.isIndirect() ? this._iban.substr(11) : '';
};

/**
 * Should be called to get client direct address
 *
 * @method address
 * @returns {String} client direct address
 */
Iban.prototype.address = function () {
    if (this.isDirect()) {
        var base36 = this._iban.substr(4);
        var asBn = new BigNumber(base36, 36);
        return padLeft(asBn.toString(16), 20);
    } 

    return '';
};

Iban.prototype.toString = function () {
    return this._iban;
};

module.exports = Iban;



/***/ }),
/* 156 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file watches.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(94);

/// @returns an array of objects describing web3.eth.filter api methods
var eth = function () {
    var newFilterCall = function (args) {
        var type = args[0];

        switch(type) {
            case 'latest':
                args.shift();
                this.params = 0;
                return 'eth_newBlockFilter';
            case 'pending':
                args.shift();
                this.params = 0;
                return 'eth_newPendingTransactionFilter';
            default:
                return 'eth_newFilter';
        }
    };

    var newFilter = new Method({
        name: 'newFilter',
        call: newFilterCall,
        params: 1
    });

    var uninstallFilter = new Method({
        name: 'uninstallFilter',
        call: 'eth_uninstallFilter',
        params: 1
    });

    var getLogs = new Method({
        name: 'getLogs',
        call: 'eth_getFilterLogs',
        params: 1
    });

    var poll = new Method({
        name: 'poll',
        call: 'eth_getFilterChanges',
        params: 1
    });

    return [
        newFilter,
        uninstallFilter,
        getLogs,
        poll
    ];
};

/// @returns an array of objects describing web3.shh.watch api methods
var shh = function () {
    var newFilter = new Method({
        name: 'newFilter',
        call: 'shh_newFilter',
        params: 1
    });

    var uninstallFilter = new Method({
        name: 'uninstallFilter',
        call: 'shh_uninstallFilter',
        params: 1
    });

    var getLogs = new Method({
        name: 'getLogs',
        call: 'shh_getMessages',
        params: 1
    });

    var poll = new Method({
        name: 'poll',
        call: 'shh_getFilterChanges',
        params: 1
    });

    return [
        newFilter,
        uninstallFilter,
        getLogs,
        poll
    ];
};

module.exports = {
    eth: eth,
    shh: shh
};



/***/ }),
/* 157 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file config.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 * 
 * @module utils
 */

/**
 * Utility functions
 * 
 * @class [utils] config
 * @constructor
 */


/// required to define ETH_BIGNUMBER_ROUNDING_MODE
var BigNumber = __webpack_require__(117);

var ETH_UNITS = [
    'wei',
    'kwei',
    'Mwei',
    'Gwei',
    'szabo',
    'finney',
    'femtoether',
    'picoether',
    'nanoether',
    'microether',
    'milliether',
    'nano',
    'micro',
    'milli',
    'ether',
    'grand',
    'Mether',
    'Gether',
    'Tether',
    'Pether',
    'Eether',
    'Zether',
    'Yether',
    'Nether',
    'Dether',
    'Vether',
    'Uether'
];

module.exports = {
    ETH_PADDING: 32,
    ETH_SIGNATURE_LENGTH: 4,
    ETH_UNITS: ETH_UNITS,
    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
    ETH_POLLING_TIMEOUT: 1000/2,
    defaultBlock: 'latest',
    defaultAccount: undefined
};



/***/ }),
/* 158 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file filter.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var formatters = __webpack_require__(52);
var utils = __webpack_require__(15);

/**
* Converts a given topic to a hex string, but also allows null values.
*
* @param {Mixed} value
* @return {String}
*/
var toTopic = function(value){

    if(value === null || typeof value === 'undefined')
        return null;

    value = String(value);

    if(value.indexOf('0x') === 0)
        return value;
    else
        return utils.fromUtf8(value);
};

/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
/// @param should be string or object
/// @returns options string or object
var getOptions = function (options) {

    if (utils.isString(options)) {
        return options;
    }

    options = options || {};

    // make sure topics, get converted to hex
    options.topics = options.topics || [];
    options.topics = options.topics.map(function(topic){
        return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
    });

    return {
        topics: options.topics,
        from: options.from,
        to: options.to,
        address: options.address,
        fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
        toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
    };
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method getLogsAtStart
@param {Object} self
@param {funciton}
*/
var getLogsAtStart = function(self, callback){
    // call getFilterLogs for the first watch callback start
    if (!utils.isString(self.options)) {
        self.get(function (err, messages) {
            // don't send all the responses to all the watches again... just to self one
            if (err) {
                callback(err);
            }

            if(utils.isArray(messages)) {
                messages.forEach(function (message) {
                    callback(null, message);
                });
            }
        });
    }
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollFilter
@param {Object} self
*/
var pollFilter = function(self) {

    var onMessage = function (error, messages) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isArray(messages)) {
            messages.forEach(function (message) {
                message = self.formatter ? self.formatter(message) : message;
                self.callbacks.forEach(function (callback) {
                    callback(null, message);
                });
            });
        }
    };

    self.requestManager.startPolling({
        method: self.implementation.poll.call,
        params: [self.filterId],
    }, self.filterId, onMessage, self.stopWatching.bind(self));

};

var Filter = function (requestManager, options, methods, formatter, callback, filterCreationErrorCallback) {
    var self = this;
    var implementation = {};
    methods.forEach(function (method) {
        method.setRequestManager(requestManager);
        method.attachToObject(implementation);
    });
    this.requestManager = requestManager;
    this.options = getOptions(options);
    this.implementation = implementation;
    this.filterId = null;
    this.callbacks = [];
    this.getLogsCallbacks = [];
    this.pollFilters = [];
    this.formatter = formatter;
    this.implementation.newFilter(this.options, function(error, id){
        if(error) {
            self.callbacks.forEach(function(cb){
                cb(error);
            });
            filterCreationErrorCallback(error);
        } else {
            self.filterId = id;

            // check if there are get pending callbacks as a consequence
            // of calling get() with filterId unassigned.
            self.getLogsCallbacks.forEach(function (cb){
                self.get(cb);
            });
            self.getLogsCallbacks = [];

            // get filter logs for the already existing watch calls
            self.callbacks.forEach(function(cb){
                getLogsAtStart(self, cb);
            });
            if(self.callbacks.length > 0)
                pollFilter(self);

            // start to watch immediately
            if(typeof callback === 'function') {
                return self.watch(callback);
            }
        }
    });

    return this;
};

Filter.prototype.watch = function (callback) {
    this.callbacks.push(callback);

    if(this.filterId) {
        getLogsAtStart(this, callback);
        pollFilter(this);
    }

    return this;
};

Filter.prototype.stopWatching = function (callback) {
    this.requestManager.stopPolling(this.filterId);
    this.callbacks = [];
    // remove filter async
    if (callback) {
        this.implementation.uninstallFilter(this.filterId, callback);
    } else {
        return this.implementation.uninstallFilter(this.filterId);
    }
};

Filter.prototype.get = function (callback) {
    var self = this;
    if (utils.isFunction(callback)) {
        if (this.filterId === null) {
            // If filterId is not set yet, call it back
            // when newFilter() assigns it.
            this.getLogsCallbacks.push(callback);
        } else {
            this.implementation.getLogs(this.filterId, function(err, res){
                if (err) {
                    callback(err);
                } else {
                    callback(null, res.map(function (log) {
                        return self.formatter ? self.formatter(log) : log;
                    }));
                }
            });
        }
    } else {
        if (this.filterId === null) {
            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
        }
        var logs = this.implementation.getLogs(this.filterId);
        return logs.map(function (log) {
            return self.formatter ? self.formatter(log) : log;
        });
    }

    return this;
};

module.exports = Filter;



/***/ }),
/* 159 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file iban.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(117);

var padLeft = function (string, bytes) {
    var result = string;
    while (result.length < bytes * 2) {
        result = '0' + result;
    }
    return result;
};

/**
 * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
 * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
 *
 * @method iso13616Prepare
 * @param {String} iban the IBAN
 * @returns {String} the prepared IBAN
 */
var iso13616Prepare = function (iban) {
    var A = 'A'.charCodeAt(0);
    var Z = 'Z'.charCodeAt(0);

    iban = iban.toUpperCase();
    iban = iban.substr(4) + iban.substr(0,4);

    return iban.split('').map(function(n){
        var code = n.charCodeAt(0);
        if (code >= A && code <= Z){
            // A = 10, B = 11, ... Z = 35
            return code - A + 10;
        } else {
            return n;
        }
    }).join('');
};

/**
 * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
 *
 * @method mod9710
 * @param {String} iban
 * @returns {Number}
 */
var mod9710 = function (iban) {
    var remainder = iban,
        block;

    while (remainder.length > 2){
        block = remainder.slice(0, 9);
        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }

    return parseInt(remainder, 10) % 97;
};

/**
 * This prototype should be used to create iban object from iban correct string
 *
 * @param {String} iban
 */
var Iban = function (iban) {
    this._iban = iban;
};

/**
 * This method should be used to create iban object from ethereum address
 *
 * @method fromAddress
 * @param {String} address
 * @return {Iban} the IBAN object
 */
Iban.fromAddress = function (address) {
    var asBn = new BigNumber(address, 16);
    var base36 = asBn.toString(36);
    var padded = padLeft(base36, 15);
    return Iban.fromBban(padded.toUpperCase());
};

/**
 * Convert the passed BBAN to an IBAN for this country specification.
 * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
 * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
 *
 * @method fromBban
 * @param {String} bban the BBAN to convert to IBAN
 * @returns {Iban} the IBAN object
 */
Iban.fromBban = function (bban) {
    var countryCode = 'XE';

    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
    var checkDigit = ('0' + (98 - remainder)).slice(-2);

    return new Iban(countryCode + checkDigit + bban);
};

/**
 * Should be used to create IBAN object for given institution and identifier
 *
 * @method createIndirect
 * @param {Object} options, required options are "institution" and "identifier"
 * @return {Iban} the IBAN object
 */
Iban.createIndirect = function (options) {
    return Iban.fromBban('ETH' + options.institution + options.identifier);
};

/**
 * Thos method should be used to check if given string is valid iban object
 *
 * @method isValid
 * @param {String} iban string
 * @return {Boolean} true if it is valid IBAN
 */
Iban.isValid = function (iban) {
    var i = new Iban(iban);
    return i.isValid();
};

/**
 * Should be called to check if iban is correct
 *
 * @method isValid
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isValid = function () {
    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
        mod9710(iso13616Prepare(this._iban)) === 1;
};

/**
 * Should be called to check if iban number is direct
 *
 * @method isDirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isDirect = function () {
    return this._iban.length === 34 || this._iban.length === 35;
};

/**
 * Should be called to check if iban number if indirect
 *
 * @method isIndirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isIndirect = function () {
    return this._iban.length === 20;
};

/**
 * Should be called to get iban checksum
 * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
 *
 * @method checksum
 * @returns {String} checksum
 */
Iban.prototype.checksum = function () {
    return this._iban.substr(2, 2);
};

/**
 * Should be called to get institution identifier
 * eg. XREG
 *
 * @method institution
 * @returns {String} institution identifier
 */
Iban.prototype.institution = function () {
    return this.isIndirect() ? this._iban.substr(7, 4) : '';
};

/**
 * Should be called to get client identifier within institution
 * eg. GAVOFYORK
 *
 * @method client
 * @returns {String} client identifier
 */
Iban.prototype.client = function () {
    return this.isIndirect() ? this._iban.substr(11) : '';
};

/**
 * Should be called to get client direct address
 *
 * @method address
 * @returns {String} client direct address
 */
Iban.prototype.address = function () {
    if (this.isDirect()) {
        var base36 = this._iban.substr(4);
        var asBn = new BigNumber(base36, 36);
        return padLeft(asBn.toString(16), 20);
    } 

    return '';
};

Iban.prototype.toString = function () {
    return this._iban;
};

module.exports = Iban;



/***/ }),
/* 160 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file watches.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(78);

/// @returns an array of objects describing web3.eth.filter api methods
var eth = function () {
    var newFilterCall = function (args) {
        var type = args[0];

        switch(type) {
            case 'latest':
                args.shift();
                this.params = 0;
                return 'eth_newBlockFilter';
            case 'pending':
                args.shift();
                this.params = 0;
                return 'eth_newPendingTransactionFilter';
            default:
                return 'eth_newFilter';
        }
    };

    var newFilter = new Method({
        name: 'newFilter',
        call: newFilterCall,
        params: 1
    });

    var uninstallFilter = new Method({
        name: 'uninstallFilter',
        call: 'eth_uninstallFilter',
        params: 1
    });

    var getLogs = new Method({
        name: 'getLogs',
        call: 'eth_getFilterLogs',
        params: 1
    });

    var poll = new Method({
        name: 'poll',
        call: 'eth_getFilterChanges',
        params: 1
    });

    return [
        newFilter,
        uninstallFilter,
        getLogs,
        poll
    ];
};

/// @returns an array of objects describing web3.shh.watch api methods
var shh = function () {
    var newFilter = new Method({
        name: 'newFilter',
        call: 'shh_newFilter',
        params: 1
    });

    var uninstallFilter = new Method({
        name: 'uninstallFilter',
        call: 'shh_uninstallFilter',
        params: 1
    });

    var getLogs = new Method({
        name: 'getLogs',
        call: 'shh_getMessages',
        params: 1
    });

    var poll = new Method({
        name: 'poll',
        call: 'shh_getFilterChanges',
        params: 1
    });

    return [
        newFilter,
        uninstallFilter,
        getLogs,
        poll
    ];
};

module.exports = {
    eth: eth,
    shh: shh
};



/***/ }),
/* 161 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const rimraf = __webpack_require__(830)

module.exports = {
  remove: u(rimraf),
  removeSync: rimraf.sync
}


/***/ }),
/* 162 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2012 Joyent, Inc.  All rights reserved.

var assert = __webpack_require__(6);
var sshpk = __webpack_require__(242);
var util = __webpack_require__(2);

var HASH_ALGOS = {
  'sha1': true,
  'sha256': true,
  'sha512': true
};

var PK_ALGOS = {
  'rsa': true,
  'dsa': true,
  'ecdsa': true
};

function HttpSignatureError(message, caller) {
  if (Error.captureStackTrace)
    Error.captureStackTrace(this, caller || HttpSignatureError);

  this.message = message;
  this.name = caller.name;
}
util.inherits(HttpSignatureError, Error);

function InvalidAlgorithmError(message) {
  HttpSignatureError.call(this, message, InvalidAlgorithmError);
}
util.inherits(InvalidAlgorithmError, HttpSignatureError);

function validateAlgorithm(algorithm) {
  var alg = algorithm.toLowerCase().split('-');

  if (alg.length !== 2) {
    throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' is not a ' +
      'valid algorithm'));
  }

  if (alg[0] !== 'hmac' && !PK_ALGOS[alg[0]]) {
    throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' type keys ' +
      'are not supported'));
  }

  if (!HASH_ALGOS[alg[1]]) {
    throw (new InvalidAlgorithmError(alg[1].toUpperCase() + ' is not a ' +
      'supported hash algorithm'));
  }

  return (alg);
}

///--- API

module.exports = {

  HASH_ALGOS: HASH_ALGOS,
  PK_ALGOS: PK_ALGOS,

  HttpSignatureError: HttpSignatureError,
  InvalidAlgorithmError: InvalidAlgorithmError,

  validateAlgorithm: validateAlgorithm,

  /**
   * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file.
   *
   * The intent of this module is to interoperate with OpenSSL only,
   * specifically the node crypto module's `verify` method.
   *
   * @param {String} key an OpenSSH public key.
   * @return {String} PEM encoded form of the RSA public key.
   * @throws {TypeError} on bad input.
   * @throws {Error} on invalid ssh key formatted data.
   */
  sshKeyToPEM: function sshKeyToPEM(key) {
    assert.string(key, 'ssh_key');

    var k = sshpk.parseKey(key, 'ssh');
    return (k.toString('pem'));
  },


  /**
   * Generates an OpenSSH fingerprint from an ssh public key.
   *
   * @param {String} key an OpenSSH public key.
   * @return {String} key fingerprint.
   * @throws {TypeError} on bad input.
   * @throws {Error} if what you passed doesn't look like an ssh public key.
   */
  fingerprint: function fingerprint(key) {
    assert.string(key, 'ssh_key');

    var k = sshpk.parseKey(key, 'ssh');
    return (k.fingerprint('md5').toString('hex'));
  },

  /**
   * Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa)
   *
   * The reverse of the above function.
   */
  pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) {
    assert.equal('string', typeof (pem), 'typeof pem');

    var k = sshpk.parseKey(pem, 'pem');
    k.comment = comment;
    return (k.toString('ssh'));
  }
};


/***/ }),
/* 163 */
/***/ (function(module, exports) {

/*!
 * is-extglob <https://github.com/jonschlinkert/is-extglob>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */

module.exports = function isExtglob(str) {
  return typeof str === 'string'
    && /[@?!+*]\(/.test(str);
};


/***/ }),
/* 164 */
/***/ (function(module, exports, __webpack_require__) {

var isFunction = __webpack_require__(947),
    isLength = __webpack_require__(376);

/**
 * Checks if `value` is array-like. A value is considered array-like if it's
 * not a function and has a `value.length` that's an integer greater than or
 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
 * @example
 *
 * _.isArrayLike([1, 2, 3]);
 * // => true
 *
 * _.isArrayLike(document.body.children);
 * // => true
 *
 * _.isArrayLike('abc');
 * // => true
 *
 * _.isArrayLike(_.noop);
 * // => false
 */
function isArrayLike(value) {
  return value != null && isLength(value.length) && !isFunction(value);
}

module.exports = isArrayLike;


/***/ }),
/* 165 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/**
 * @module
 */

/**
 * Module dependencies.
 */

var debug = __webpack_require__(229)('mocha:watch');
var fs = __webpack_require__(1);
var glob = __webpack_require__(124);
var path = __webpack_require__(0);
var join = path.join;
var he = __webpack_require__(877);

/**
 * Ignored directories.
 */

var ignore = ['node_modules', '.git'];

exports.inherits = __webpack_require__(2).inherits;

/**
 * Escape special characters in the given string of html.
 *
 * @api private
 * @param  {string} html
 * @return {string}
 */
exports.escape = function(html) {
  return he.encode(String(html), {useNamedReferences: false});
};

/**
 * Test if the given obj is type of string.
 *
 * @api private
 * @param {Object} obj
 * @return {boolean}
 */
exports.isString = function(obj) {
  return typeof obj === 'string';
};

/**
 * Watch the given `files` for changes
 * and invoke `fn(file)` on modification.
 *
 * @api private
 * @param {Array} files
 * @param {Function} fn
 */
exports.watch = function(files, fn) {
  var options = {interval: 100};
  files.forEach(function(file) {
    debug('file %s', file);
    fs.watchFile(file, options, function(curr, prev) {
      if (prev.mtime < curr.mtime) {
        fn(file);
      }
    });
  });
};

/**
 * Ignored files.
 *
 * @api private
 * @param {string} path
 * @return {boolean}
 */
function ignored(path) {
  return !~ignore.indexOf(path);
}

/**
 * Lookup files in the given `dir`.
 *
 * @api private
 * @param {string} dir
 * @param {string[]} [ext=['.js']]
 * @param {Array} [ret=[]]
 * @return {Array}
 */
exports.files = function(dir, ext, ret) {
  ret = ret || [];
  ext = ext || ['js'];

  var re = new RegExp('\\.(' + ext.join('|') + ')$');

  fs
    .readdirSync(dir)
    .filter(ignored)
    .forEach(function(path) {
      path = join(dir, path);
      if (fs.lstatSync(path).isDirectory()) {
        exports.files(path, ext, ret);
      } else if (path.match(re)) {
        ret.push(path);
      }
    });

  return ret;
};

/**
 * Compute a slug from the given `str`.
 *
 * @api private
 * @param {string} str
 * @return {string}
 */
exports.slug = function(str) {
  return str
    .toLowerCase()
    .replace(/ +/g, '-')
    .replace(/[^-\w]/g, '');
};

/**
 * Strip the function definition from `str`, and re-indent for pre whitespace.
 *
 * @param {string} str
 * @return {string}
 */
exports.clean = function(str) {
  str = str
    .replace(/\r\n?|[\n\u2028\u2029]/g, '\n')
    .replace(/^\uFEFF/, '')
    // (traditional)->  space/name     parameters    body     (lambda)-> parameters       body   multi-statement/single          keep body content
    .replace(
      /^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/,
      '$1$2$3'
    );

  var spaces = str.match(/^\n?( *)/)[1].length;
  var tabs = str.match(/^\n?(\t*)/)[1].length;
  var re = new RegExp(
    '^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}',
    'gm'
  );

  str = str.replace(re, '');

  return str.trim();
};

/**
 * Parse the given `qs`.
 *
 * @api private
 * @param {string} qs
 * @return {Object}
 */
exports.parseQuery = function(qs) {
  return qs
    .replace('?', '')
    .split('&')
    .reduce(function(obj, pair) {
      var i = pair.indexOf('=');
      var key = pair.slice(0, i);
      var val = pair.slice(++i);

      // Due to how the URLSearchParams API treats spaces
      obj[key] = decodeURIComponent(val.replace(/\+/g, '%20'));

      return obj;
    }, {});
};

/**
 * Highlight the given string of `js`.
 *
 * @api private
 * @param {string} js
 * @return {string}
 */
function highlight(js) {
  return js
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/\/\/(.*)/gm, '<span class="comment">//$1</span>')
    .replace(/('.*?')/gm, '<span class="string">$1</span>')
    .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
    .replace(/(\d+)/gm, '<span class="number">$1</span>')
    .replace(
      /\bnew[ \t]+(\w+)/gm,
      '<span class="keyword">new</span> <span class="init">$1</span>'
    )
    .replace(
      /\b(function|new|throw|return|var|if|else)\b/gm,
      '<span class="keyword">$1</span>'
    );
}

/**
 * Highlight the contents of tag `name`.
 *
 * @api private
 * @param {string} name
 */
exports.highlightTags = function(name) {
  var code = document.getElementById('mocha').getElementsByTagName(name);
  for (var i = 0, len = code.length; i < len; ++i) {
    code[i].innerHTML = highlight(code[i].innerHTML);
  }
};

/**
 * If a value could have properties, and has none, this function is called,
 * which returns a string representation of the empty value.
 *
 * Functions w/ no properties return `'[Function]'`
 * Arrays w/ length === 0 return `'[]'`
 * Objects w/ no properties return `'{}'`
 * All else: return result of `value.toString()`
 *
 * @api private
 * @param {*} value The value to inspect.
 * @param {string} typeHint The type of the value
 * @returns {string}
 */
function emptyRepresentation(value, typeHint) {
  switch (typeHint) {
    case 'function':
      return '[Function]';
    case 'object':
      return '{}';
    case 'array':
      return '[]';
    default:
      return value.toString();
  }
}

/**
 * Takes some variable and asks `Object.prototype.toString()` what it thinks it
 * is.
 *
 * @api private
 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
 * @param {*} value The value to test.
 * @returns {string} Computed type
 * @example
 * type({}) // 'object'
 * type([]) // 'array'
 * type(1) // 'number'
 * type(false) // 'boolean'
 * type(Infinity) // 'number'
 * type(null) // 'null'
 * type(new Date()) // 'date'
 * type(/foo/) // 'regexp'
 * type('type') // 'string'
 * type(global) // 'global'
 * type(new String('foo') // 'object'
 */
var type = (exports.type = function type(value) {
  if (value === undefined) {
    return 'undefined';
  } else if (value === null) {
    return 'null';
  } else if (Buffer.isBuffer(value)) {
    return 'buffer';
  }
  return Object.prototype.toString
    .call(value)
    .replace(/^\[.+\s(.+?)]$/, '$1')
    .toLowerCase();
});

/**
 * Stringify `value`. Different behavior depending on type of value:
 *
 * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively.
 * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes.
 * - If `value` is an *empty* object, function, or array, return result of function
 *   {@link emptyRepresentation}.
 * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of
 *   JSON.stringify().
 *
 * @api private
 * @see exports.type
 * @param {*} value
 * @return {string}
 */
exports.stringify = function(value) {
  var typeHint = type(value);

  if (!~['object', 'array', 'function'].indexOf(typeHint)) {
    if (typeHint === 'buffer') {
      var json = Buffer.prototype.toJSON.call(value);
      // Based on the toJSON result
      return jsonStringify(
        json.data && json.type ? json.data : json,
        2
      ).replace(/,(\n|$)/g, '$1');
    }

    // IE7/IE8 has a bizarre String constructor; needs to be coerced
    // into an array and back to obj.
    if (typeHint === 'string' && typeof value === 'object') {
      value = value.split('').reduce(function(acc, char, idx) {
        acc[idx] = char;
        return acc;
      }, {});
      typeHint = 'object';
    } else {
      return jsonStringify(value);
    }
  }

  for (var prop in value) {
    if (Object.prototype.hasOwnProperty.call(value, prop)) {
      return jsonStringify(
        exports.canonicalize(value, null, typeHint),
        2
      ).replace(/,(\n|$)/g, '$1');
    }
  }

  return emptyRepresentation(value, typeHint);
};

/**
 * like JSON.stringify but more sense.
 *
 * @api private
 * @param {Object}  object
 * @param {number=} spaces
 * @param {number=} depth
 * @returns {*}
 */
function jsonStringify(object, spaces, depth) {
  if (typeof spaces === 'undefined') {
    // primitive types
    return _stringify(object);
  }

  depth = depth || 1;
  var space = spaces * depth;
  var str = Array.isArray(object) ? '[' : '{';
  var end = Array.isArray(object) ? ']' : '}';
  var length =
    typeof object.length === 'number'
      ? object.length
      : Object.keys(object).length;
  // `.repeat()` polyfill
  function repeat(s, n) {
    return new Array(n).join(s);
  }

  function _stringify(val) {
    switch (type(val)) {
      case 'null':
      case 'undefined':
        val = '[' + val + ']';
        break;
      case 'array':
      case 'object':
        val = jsonStringify(val, spaces, depth + 1);
        break;
      case 'boolean':
      case 'regexp':
      case 'symbol':
      case 'number':
        val =
          val === 0 && 1 / val === -Infinity // `-0`
            ? '-0'
            : val.toString();
        break;
      case 'date':
        var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString();
        val = '[Date: ' + sDate + ']';
        break;
      case 'buffer':
        var json = val.toJSON();
        // Based on the toJSON result
        json = json.data && json.type ? json.data : json;
        val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']';
        break;
      default:
        val =
          val === '[Function]' || val === '[Circular]'
            ? val
            : JSON.stringify(val); // string
    }
    return val;
  }

  for (var i in object) {
    if (!Object.prototype.hasOwnProperty.call(object, i)) {
      continue; // not my business
    }
    --length;
    str +=
      '\n ' +
      repeat(' ', space) +
      (Array.isArray(object) ? '' : '"' + i + '": ') + // key
      _stringify(object[i]) + // value
      (length ? ',' : ''); // comma
  }

  return (
    str +
    // [], {}
    (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end)
  );
}

/**
 * Return a new Thing that has the keys in sorted order. Recursive.
 *
 * If the Thing...
 * - has already been seen, return string `'[Circular]'`
 * - is `undefined`, return string `'[undefined]'`
 * - is `null`, return value `null`
 * - is some other primitive, return the value
 * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method
 * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again.
 * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()`
 *
 * @api private
 * @see {@link exports.stringify}
 * @param {*} value Thing to inspect.  May or may not have properties.
 * @param {Array} [stack=[]] Stack of seen values
 * @param {string} [typeHint] Type hint
 * @return {(Object|Array|Function|string|undefined)}
 */
exports.canonicalize = function canonicalize(value, stack, typeHint) {
  var canonicalizedObj;
  /* eslint-disable no-unused-vars */
  var prop;
  /* eslint-enable no-unused-vars */
  typeHint = typeHint || type(value);
  function withStack(value, fn) {
    stack.push(value);
    fn();
    stack.pop();
  }

  stack = stack || [];

  if (stack.indexOf(value) !== -1) {
    return '[Circular]';
  }

  switch (typeHint) {
    case 'undefined':
    case 'buffer':
    case 'null':
      canonicalizedObj = value;
      break;
    case 'array':
      withStack(value, function() {
        canonicalizedObj = value.map(function(item) {
          return exports.canonicalize(item, stack);
        });
      });
      break;
    case 'function':
      /* eslint-disable guard-for-in */
      for (prop in value) {
        canonicalizedObj = {};
        break;
      }
      /* eslint-enable guard-for-in */
      if (!canonicalizedObj) {
        canonicalizedObj = emptyRepresentation(value, typeHint);
        break;
      }
    /* falls through */
    case 'object':
      canonicalizedObj = canonicalizedObj || {};
      withStack(value, function() {
        Object.keys(value)
          .sort()
          .forEach(function(key) {
            canonicalizedObj[key] = exports.canonicalize(value[key], stack);
          });
      });
      break;
    case 'date':
    case 'number':
    case 'regexp':
    case 'boolean':
    case 'symbol':
      canonicalizedObj = value;
      break;
    default:
      canonicalizedObj = value + '';
  }

  return canonicalizedObj;
};

/**
 * Lookup file names at the given `path`.
 *
 * @memberof Mocha.utils
 * @public
 * @api public
 * @param {string} filepath Base path to start searching from.
 * @param {string[]} extensions File extensions to look for.
 * @param {boolean} recursive Whether or not to recurse into subdirectories.
 * @return {string[]} An array of paths.
 */
exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) {
  var files = [];

  if (!fs.existsSync(filepath)) {
    if (fs.existsSync(filepath + '.js')) {
      filepath += '.js';
    } else {
      files = glob.sync(filepath);
      if (!files.length) {
        throw new Error("cannot resolve path (or pattern) '" + filepath + "'");
      }
      return files;
    }
  }

  try {
    var stat = fs.statSync(filepath);
    if (stat.isFile()) {
      return filepath;
    }
  } catch (err) {
    // ignore error
    return;
  }

  fs.readdirSync(filepath).forEach(function(file) {
    file = path.join(filepath, file);
    try {
      var stat = fs.statSync(file);
      if (stat.isDirectory()) {
        if (recursive) {
          files = files.concat(lookupFiles(file, extensions, recursive));
        }
        return;
      }
    } catch (err) {
      // ignore error
      return;
    }
    if (!extensions) {
      throw new Error(
        'extensions parameter required when filepath is a directory'
      );
    }
    var re = new RegExp('\\.(?:' + extensions.join('|') + ')$');
    if (!stat.isFile() || !re.test(file) || path.basename(file)[0] === '.') {
      return;
    }
    files.push(file);
  });

  return files;
};

/**
 * Generate an undefined error with a message warning the user.
 *
 * @return {Error}
 */

exports.undefinedError = function() {
  return new Error(
    'Caught undefined error, did you throw without specifying what?'
  );
};

/**
 * Generate an undefined error if `err` is not defined.
 *
 * @param {Error} err
 * @return {Error}
 */

exports.getError = function(err) {
  return err || exports.undefinedError();
};

/**
 * @summary
 * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`)
 * @description
 * When invoking this function you get a filter function that get the Error.stack as an input,
 * and return a prettify output.
 * (i.e: strip Mocha and internal node functions from stack trace).
 * @returns {Function}
 */
exports.stackTraceFilter = function() {
  // TODO: Replace with `process.browser`
  var is = typeof document === 'undefined' ? {node: true} : {browser: true};
  var slash = path.sep;
  var cwd;
  if (is.node) {
    cwd = process.cwd() + slash;
  } else {
    cwd = (typeof location === 'undefined'
      ? window.location
      : location
    ).href.replace(/\/[^/]*$/, '/');
    slash = '/';
  }

  function isMochaInternal(line) {
    return (
      ~line.indexOf('node_modules' + slash + 'mocha' + slash) ||
      ~line.indexOf('node_modules' + slash + 'mocha.js') ||
      ~line.indexOf('bower_components' + slash + 'mocha.js') ||
      ~line.indexOf(slash + 'mocha.js')
    );
  }

  function isNodeInternal(line) {
    return (
      ~line.indexOf('(timers.js:') ||
      ~line.indexOf('(events.js:') ||
      ~line.indexOf('(node.js:') ||
      ~line.indexOf('(module.js:') ||
      ~line.indexOf('GeneratorFunctionPrototype.next (native)') ||
      false
    );
  }

  return function(stack) {
    stack = stack.split('\n');

    stack = stack.reduce(function(list, line) {
      if (isMochaInternal(line)) {
        return list;
      }

      if (is.node && isNodeInternal(line)) {
        return list;
      }

      // Clean up cwd(absolute)
      if (/\(?.+:\d+:\d+\)?$/.test(line)) {
        line = line.replace('(' + cwd, '(');
      }

      list.push(line);
      return list;
    }, []);

    return stack.join('\n');
  };
};

/**
 * Crude, but effective.
 * @api
 * @param {*} value
 * @returns {boolean} Whether or not `value` is a Promise
 */
exports.isPromise = function isPromise(value) {
  return typeof value === 'object' && typeof value.then === 'function';
};

/**
 * It's a noop.
 * @api
 */
exports.noop = function() {};


/***/ }),
/* 166 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var processFn = function (fn, P, opts) {
	return function () {
		var that = this;
		var args = new Array(arguments.length);

		for (var i = 0; i < arguments.length; i++) {
			args[i] = arguments[i];
		}

		return new P(function (resolve, reject) {
			args.push(function (err, result) {
				if (err) {
					reject(err);
				} else if (opts.multiArgs) {
					var results = new Array(arguments.length - 1);

					for (var i = 1; i < arguments.length; i++) {
						results[i - 1] = arguments[i];
					}

					resolve(results);
				} else {
					resolve(result);
				}
			});

			fn.apply(that, args);
		});
	};
};

var pify = module.exports = function (obj, P, opts) {
	if (typeof P !== 'function') {
		opts = P;
		P = Promise;
	}

	opts = opts || {};
	opts.exclude = opts.exclude || [/.+Sync$/];

	var filter = function (key) {
		var match = function (pattern) {
			return typeof pattern === 'string' ? key === pattern : pattern.test(key);
		};

		return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
	};

	var ret = typeof obj === 'function' ? function () {
		if (opts.excludeMain) {
			return obj.apply(this, arguments);
		}

		return processFn(obj, P, opts).apply(this, arguments);
	} : {};

	return Object.keys(obj).reduce(function (ret, key) {
		var x = obj[key];

		ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;

		return ret;
	}, ret);
};

pify.all = pify;


/***/ }),
/* 167 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


if (!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);
    });
  }
}



/***/ }),
/* 168 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export BUFFER_OVERFLOW */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return buffers; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);


var BUFFER_OVERFLOW = "Channel's Buffer overflow!";

var ON_OVERFLOW_THROW = 1;
var ON_OVERFLOW_DROP = 2;
var ON_OVERFLOW_SLIDE = 3;
var ON_OVERFLOW_EXPAND = 4;

var zeroBuffer = { isEmpty: __WEBPACK_IMPORTED_MODULE_0__utils__["k" /* kTrue */], put: __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */], take: __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */] };

function ringBuffer() {
  var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
  var overflowAction = arguments[1];

  var arr = new Array(limit);
  var length = 0;
  var pushIndex = 0;
  var popIndex = 0;

  var push = function push(it) {
    arr[pushIndex] = it;
    pushIndex = (pushIndex + 1) % limit;
    length++;
  };

  var take = function take() {
    if (length != 0) {
      var it = arr[popIndex];
      arr[popIndex] = null;
      length--;
      popIndex = (popIndex + 1) % limit;
      return it;
    }
  };

  var flush = function flush() {
    var items = [];
    while (length) {
      items.push(take());
    }
    return items;
  };

  return {
    isEmpty: function isEmpty() {
      return length == 0;
    },
    put: function put(it) {
      if (length < limit) {
        push(it);
      } else {
        var doubledLimit = void 0;
        switch (overflowAction) {
          case ON_OVERFLOW_THROW:
            throw new Error(BUFFER_OVERFLOW);
          case ON_OVERFLOW_SLIDE:
            arr[pushIndex] = it;
            pushIndex = (pushIndex + 1) % limit;
            popIndex = pushIndex;
            break;
          case ON_OVERFLOW_EXPAND:
            doubledLimit = 2 * limit;

            arr = flush();

            length = arr.length;
            pushIndex = arr.length;
            popIndex = 0;

            arr.length = doubledLimit;
            limit = doubledLimit;

            push(it);
            break;
          default:
          // DROP
        }
      }
    },
    take: take,
    flush: flush
  };
}

var buffers = {
  none: function none() {
    return zeroBuffer;
  },
  fixed: function fixed(limit) {
    return ringBuffer(limit, ON_OVERFLOW_THROW);
  },
  dropping: function dropping(limit) {
    return ringBuffer(limit, ON_OVERFLOW_DROP);
  },
  sliding: function sliding(limit) {
    return ringBuffer(limit, ON_OVERFLOW_SLIDE);
  },
  expanding: function expanding(initialSize) {
    return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);
  }
};

/***/ }),
/* 169 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	readSSHPrivate: readSSHPrivate,
	write: write
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var crypto = __webpack_require__(7);

var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var pem = __webpack_require__(66);
var rfc4253 = __webpack_require__(82);
var SSHBuffer = __webpack_require__(135);
var errors = __webpack_require__(56);

var bcrypt;

function read(buf, options) {
	return (pem.read(buf, options));
}

var MAGIC = 'openssh-key-v1';

function readSSHPrivate(type, buf, options) {
	buf = new SSHBuffer({buffer: buf});

	var magic = buf.readCString();
	assert.strictEqual(magic, MAGIC, 'bad magic string');

	var cipher = buf.readString();
	var kdf = buf.readString();
	var kdfOpts = buf.readBuffer();

	var nkeys = buf.readInt();
	if (nkeys !== 1) {
		throw (new Error('OpenSSH-format key file contains ' +
		    'multiple keys: this is unsupported.'));
	}

	var pubKey = buf.readBuffer();

	if (type === 'public') {
		assert.ok(buf.atEnd(), 'excess bytes left after key');
		return (rfc4253.read(pubKey));
	}

	var privKeyBlob = buf.readBuffer();
	assert.ok(buf.atEnd(), 'excess bytes left after key');

	var kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts });
	switch (kdf) {
	case 'none':
		if (cipher !== 'none') {
			throw (new Error('OpenSSH-format key uses KDF "none" ' +
			     'but specifies a cipher other than "none"'));
		}
		break;
	case 'bcrypt':
		var salt = kdfOptsBuf.readBuffer();
		var rounds = kdfOptsBuf.readInt();
		var cinf = utils.opensshCipherInfo(cipher);
		if (bcrypt === undefined) {
			bcrypt = __webpack_require__(288);
		}

		if (typeof (options.passphrase) === 'string') {
			options.passphrase = Buffer.from(options.passphrase,
			    'utf-8');
		}
		if (!Buffer.isBuffer(options.passphrase)) {
			throw (new errors.KeyEncryptedError(
			    options.filename, 'OpenSSH'));
		}

		var pass = new Uint8Array(options.passphrase);
		var salti = new Uint8Array(salt);
		/* Use the pbkdf to derive both the key and the IV. */
		var out = new Uint8Array(cinf.keySize + cinf.blockSize);
		var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,
		    out, out.length, rounds);
		if (res !== 0) {
			throw (new Error('bcrypt_pbkdf function returned ' +
			    'failure, parameters invalid'));
		}
		out = Buffer.from(out);
		var ckey = out.slice(0, cinf.keySize);
		var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);
		var cipherStream = crypto.createDecipheriv(cinf.opensslName,
		    ckey, iv);
		cipherStream.setAutoPadding(false);
		var chunk, chunks = [];
		cipherStream.once('error', function (e) {
			if (e.toString().indexOf('bad decrypt') !== -1) {
				throw (new Error('Incorrect passphrase ' +
				    'supplied, could not decrypt key'));
			}
			throw (e);
		});
		cipherStream.write(privKeyBlob);
		cipherStream.end();
		while ((chunk = cipherStream.read()) !== null)
			chunks.push(chunk);
		privKeyBlob = Buffer.concat(chunks);
		break;
	default:
		throw (new Error(
		    'OpenSSH-format key uses unknown KDF "' + kdf + '"'));
	}

	buf = new SSHBuffer({buffer: privKeyBlob});

	var checkInt1 = buf.readInt();
	var checkInt2 = buf.readInt();
	if (checkInt1 !== checkInt2) {
		throw (new Error('Incorrect passphrase supplied, could not ' +
		    'decrypt key'));
	}

	var ret = {};
	var key = rfc4253.readInternal(ret, 'private', buf.remainder());

	buf.skip(ret.consumed);

	var comment = buf.readString();
	key.comment = comment;

	return (key);
}

function write(key, options) {
	var pubKey;
	if (PrivateKey.isPrivateKey(key))
		pubKey = key.toPublic();
	else
		pubKey = key;

	var cipher = 'none';
	var kdf = 'none';
	var kdfopts = Buffer.alloc(0);
	var cinf = { blockSize: 8 };
	var passphrase;
	if (options !== undefined) {
		passphrase = options.passphrase;
		if (typeof (passphrase) === 'string')
			passphrase = Buffer.from(passphrase, 'utf-8');
		if (passphrase !== undefined) {
			assert.buffer(passphrase, 'options.passphrase');
			assert.optionalString(options.cipher, 'options.cipher');
			cipher = options.cipher;
			if (cipher === undefined)
				cipher = 'aes128-ctr';
			cinf = utils.opensshCipherInfo(cipher);
			kdf = 'bcrypt';
		}
	}

	var privBuf;
	if (PrivateKey.isPrivateKey(key)) {
		privBuf = new SSHBuffer({});
		var checkInt = crypto.randomBytes(4).readUInt32BE(0);
		privBuf.writeInt(checkInt);
		privBuf.writeInt(checkInt);
		privBuf.write(key.toBuffer('rfc4253'));
		privBuf.writeString(key.comment || '');

		var n = 1;
		while (privBuf._offset % cinf.blockSize !== 0)
			privBuf.writeChar(n++);
		privBuf = privBuf.toBuffer();
	}

	switch (kdf) {
	case 'none':
		break;
	case 'bcrypt':
		var salt = crypto.randomBytes(16);
		var rounds = 16;
		var kdfssh = new SSHBuffer({});
		kdfssh.writeBuffer(salt);
		kdfssh.writeInt(rounds);
		kdfopts = kdfssh.toBuffer();

		if (bcrypt === undefined) {
			bcrypt = __webpack_require__(288);
		}
		var pass = new Uint8Array(passphrase);
		var salti = new Uint8Array(salt);
		/* Use the pbkdf to derive both the key and the IV. */
		var out = new Uint8Array(cinf.keySize + cinf.blockSize);
		var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,
		    out, out.length, rounds);
		if (res !== 0) {
			throw (new Error('bcrypt_pbkdf function returned ' +
			    'failure, parameters invalid'));
		}
		out = Buffer.from(out);
		var ckey = out.slice(0, cinf.keySize);
		var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);

		var cipherStream = crypto.createCipheriv(cinf.opensslName,
		    ckey, iv);
		cipherStream.setAutoPadding(false);
		var chunk, chunks = [];
		cipherStream.once('error', function (e) {
			throw (e);
		});
		cipherStream.write(privBuf);
		cipherStream.end();
		while ((chunk = cipherStream.read()) !== null)
			chunks.push(chunk);
		privBuf = Buffer.concat(chunks);
		break;
	default:
		throw (new Error('Unsupported kdf ' + kdf));
	}

	var buf = new SSHBuffer({});

	buf.writeCString(MAGIC);
	buf.writeString(cipher);	/* cipher */
	buf.writeString(kdf);		/* kdf */
	buf.writeBuffer(kdfopts);	/* kdfoptions */

	buf.writeInt(1);		/* nkeys */
	buf.writeBuffer(pubKey.toBuffer('rfc4253'));

	if (privBuf)
		buf.writeBuffer(privBuf);

	buf = buf.toBuffer();

	var header;
	if (PrivateKey.isPrivateKey(key))
		header = 'OPENSSH PRIVATE KEY';
	else
		header = 'OPENSSH PUBLIC KEY';

	var tmp = buf.toString('base64');
	var len = tmp.length + (tmp.length / 70) +
	    18 + 16 + header.length*2 + 10;
	buf = Buffer.alloc(len);
	var o = 0;
	o += buf.write('-----BEGIN ' + header + '-----\n', o);
	for (var i = 0; i < tmp.length; ) {
		var limit = i + 70;
		if (limit > tmp.length)
			limit = tmp.length;
		o += buf.write(tmp.slice(i, limit), o);
		buf[o++] = 10;
		i = limit;
	}
	o += buf.write('-----END ' + header + '-----\n', o);

	return (buf.slice(0, o));
}


/***/ }),
/* 170 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file config.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

/**
 * Utils
 * 
 * @module utils
 */

/**
 * Utility functions
 * 
 * @class [utils] config
 * @constructor
 */


/// required to define ETH_BIGNUMBER_ROUNDING_MODE
var BigNumber = __webpack_require__(108);

var ETH_UNITS = [
    'wei',
    'kwei',
    'Mwei',
    'Gwei',
    'szabo',
    'finney',
    'femtoether',
    'picoether',
    'nanoether',
    'microether',
    'milliether',
    'nano',
    'micro',
    'milli',
    'ether',
    'grand',
    'Mether',
    'Gether',
    'Tether',
    'Pether',
    'Eether',
    'Zether',
    'Yether',
    'Nether',
    'Dether',
    'Vether',
    'Uether'
];

module.exports = {
    ETH_PADDING: 32,
    ETH_SIGNATURE_LENGTH: 4,
    ETH_UNITS: ETH_UNITS,
    ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN },
    ETH_POLLING_TIMEOUT: 1000/2,
    defaultBlock: 'latest',
    defaultAccount: undefined
};



/***/ }),
/* 171 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file filter.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var formatters = __webpack_require__(68);
var utils = __webpack_require__(17);

/**
* Converts a given topic to a hex string, but also allows null values.
*
* @param {Mixed} value
* @return {String}
*/
var toTopic = function(value){

    if(value === null || typeof value === 'undefined')
        return null;

    value = String(value);

    if(value.indexOf('0x') === 0)
        return value;
    else
        return utils.fromUtf8(value);
};

/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
/// @param should be string or object
/// @returns options string or object
var getOptions = function (options, type) {
    /*jshint maxcomplexity: 6 */

    if (utils.isString(options)) {
        return options;
    }

    options = options || {};


    switch(type) {
        case 'eth':

            // make sure topics, get converted to hex
            options.topics = options.topics || [];
            options.topics = options.topics.map(function(topic){
                return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
            });

            return {
                topics: options.topics,
                from: options.from,
                to: options.to,
                address: options.address,
                fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
                toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
            };
        case 'shh':
            return options;
    }
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method getLogsAtStart
@param {Object} self
@param {function} callback
*/
var getLogsAtStart = function(self, callback){
    // call getFilterLogs for the first watch callback start
    if (!utils.isString(self.options)) {
        self.get(function (err, messages) {
            // don't send all the responses to all the watches again... just to self one
            if (err) {
                callback(err);
            }

            if(utils.isArray(messages)) {
                messages.forEach(function (message) {
                    callback(null, message);
                });
            }
        });
    }
};

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollFilter
@param {Object} self
*/
var pollFilter = function(self) {

    var onMessage = function (error, messages) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isArray(messages)) {
            messages.forEach(function (message) {
                message = self.formatter ? self.formatter(message) : message;
                self.callbacks.forEach(function (callback) {
                    callback(null, message);
                });
            });
        }
    };

    self.requestManager.startPolling({
        method: self.implementation.poll.call,
        params: [self.filterId],
    }, self.filterId, onMessage, self.stopWatching.bind(self));

};

var Filter = function (options, type, requestManager, methods, formatter, callback, filterCreationErrorCallback) {
    var self = this;
    var implementation = {};
    methods.forEach(function (method) {
        method.setRequestManager(requestManager);
        method.attachToObject(implementation);
    });
    this.requestManager = requestManager;
    this.options = getOptions(options, type);
    this.implementation = implementation;
    this.filterId = null;
    this.callbacks = [];
    this.getLogsCallbacks = [];
    this.pollFilters = [];
    this.formatter = formatter;
    this.implementation.newFilter(this.options, function(error, id){
        if(error) {
            self.callbacks.forEach(function(cb){
                cb(error);
            });
            if (typeof filterCreationErrorCallback === 'function') {
              filterCreationErrorCallback(error);
            }
        } else {
            self.filterId = id;

            // check if there are get pending callbacks as a consequence
            // of calling get() with filterId unassigned.
            self.getLogsCallbacks.forEach(function (cb){
                self.get(cb);
            });
            self.getLogsCallbacks = [];

            // get filter logs for the already existing watch calls
            self.callbacks.forEach(function(cb){
                getLogsAtStart(self, cb);
            });
            if(self.callbacks.length > 0)
                pollFilter(self);

            // start to watch immediately
            if(typeof callback === 'function') {
                return self.watch(callback);
            }
        }
    });

    return this;
};

Filter.prototype.watch = function (callback) {
    this.callbacks.push(callback);

    if(this.filterId) {
        getLogsAtStart(this, callback);
        pollFilter(this);
    }

    return this;
};

Filter.prototype.stopWatching = function (callback) {
    this.requestManager.stopPolling(this.filterId);
    this.callbacks = [];
    // remove filter async
    if (callback) {
        this.implementation.uninstallFilter(this.filterId, callback);
    } else {
        return this.implementation.uninstallFilter(this.filterId);
    }
};

Filter.prototype.get = function (callback) {
    var self = this;
    if (utils.isFunction(callback)) {
        if (this.filterId === null) {
            // If filterId is not set yet, call it back
            // when newFilter() assigns it.
            this.getLogsCallbacks.push(callback);
        } else {
            this.implementation.getLogs(this.filterId, function(err, res){
                if (err) {
                    callback(err);
                } else {
                    callback(null, res.map(function (log) {
                        return self.formatter ? self.formatter(log) : log;
                    }));
                }
            });
        }
    } else {
        if (this.filterId === null) {
            throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.');
        }
        var logs = this.implementation.getLogs(this.filterId);
        return logs.map(function (log) {
            return self.formatter ? self.formatter(log) : log;
        });
    }

    return this;
};

module.exports = Filter;



/***/ }),
/* 172 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file iban.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var BigNumber = __webpack_require__(108);

var padLeft = function (string, bytes) {
    var result = string;
    while (result.length < bytes * 2) {
        result = '0' + result;
    }
    return result;
};

/**
 * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
 * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
 *
 * @method iso13616Prepare
 * @param {String} iban the IBAN
 * @returns {String} the prepared IBAN
 */
var iso13616Prepare = function (iban) {
    var A = 'A'.charCodeAt(0);
    var Z = 'Z'.charCodeAt(0);

    iban = iban.toUpperCase();
    iban = iban.substr(4) + iban.substr(0,4);

    return iban.split('').map(function(n){
        var code = n.charCodeAt(0);
        if (code >= A && code <= Z){
            // A = 10, B = 11, ... Z = 35
            return code - A + 10;
        } else {
            return n;
        }
    }).join('');
};

/**
 * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
 *
 * @method mod9710
 * @param {String} iban
 * @returns {Number}
 */
var mod9710 = function (iban) {
    var remainder = iban,
        block;

    while (remainder.length > 2){
        block = remainder.slice(0, 9);
        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }

    return parseInt(remainder, 10) % 97;
};

/**
 * This prototype should be used to create iban object from iban correct string
 *
 * @param {String} iban
 */
var Iban = function (iban) {
    this._iban = iban;
};

/**
 * This method should be used to create iban object from ethereum address
 *
 * @method fromAddress
 * @param {String} address
 * @return {Iban} the IBAN object
 */
Iban.fromAddress = function (address) {
    var asBn = new BigNumber(address, 16);
    var base36 = asBn.toString(36);
    var padded = padLeft(base36, 15);
    return Iban.fromBban(padded.toUpperCase());
};

/**
 * Convert the passed BBAN to an IBAN for this country specification.
 * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
 * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
 *
 * @method fromBban
 * @param {String} bban the BBAN to convert to IBAN
 * @returns {Iban} the IBAN object
 */
Iban.fromBban = function (bban) {
    var countryCode = 'XE';

    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
    var checkDigit = ('0' + (98 - remainder)).slice(-2);

    return new Iban(countryCode + checkDigit + bban);
};

/**
 * Should be used to create IBAN object for given institution and identifier
 *
 * @method createIndirect
 * @param {Object} options, required options are "institution" and "identifier"
 * @return {Iban} the IBAN object
 */
Iban.createIndirect = function (options) {
    return Iban.fromBban('ETH' + options.institution + options.identifier);
};

/**
 * Thos method should be used to check if given string is valid iban object
 *
 * @method isValid
 * @param {String} iban string
 * @return {Boolean} true if it is valid IBAN
 */
Iban.isValid = function (iban) {
    var i = new Iban(iban);
    return i.isValid();
};

/**
 * Should be called to check if iban is correct
 *
 * @method isValid
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isValid = function () {
    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
        mod9710(iso13616Prepare(this._iban)) === 1;
};

/**
 * Should be called to check if iban number is direct
 *
 * @method isDirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isDirect = function () {
    return this._iban.length === 34 || this._iban.length === 35;
};

/**
 * Should be called to check if iban number if indirect
 *
 * @method isIndirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isIndirect = function () {
    return this._iban.length === 20;
};

/**
 * Should be called to get iban checksum
 * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
 *
 * @method checksum
 * @returns {String} checksum
 */
Iban.prototype.checksum = function () {
    return this._iban.substr(2, 2);
};

/**
 * Should be called to get institution identifier
 * eg. XREG
 *
 * @method institution
 * @returns {String} institution identifier
 */
Iban.prototype.institution = function () {
    return this.isIndirect() ? this._iban.substr(7, 4) : '';
};

/**
 * Should be called to get client identifier within institution
 * eg. GAVOFYORK
 *
 * @method client
 * @returns {String} client identifier
 */
Iban.prototype.client = function () {
    return this.isIndirect() ? this._iban.substr(11) : '';
};

/**
 * Should be called to get client direct address
 *
 * @method address
 * @returns {String} client direct address
 */
Iban.prototype.address = function () {
    if (this.isDirect()) {
        var base36 = this._iban.substr(4);
        var asBn = new BigNumber(base36, 36);
        return padLeft(asBn.toString(16), 20);
    } 

    return '';
};

Iban.prototype.toString = function () {
    return this._iban;
};

module.exports = Iban;



/***/ }),
/* 173 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file watches.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(83);

/// @returns an array of objects describing web3.eth.filter api methods
var eth = function () {
    var newFilterCall = function (args) {
        var type = args[0];

        switch(type) {
            case 'latest':
                args.shift();
                this.params = 0;
                return 'eth_newBlockFilter';
            case 'pending':
                args.shift();
                this.params = 0;
                return 'eth_newPendingTransactionFilter';
            default:
                return 'eth_newFilter';
        }
    };

    var newFilter = new Method({
        name: 'newFilter',
        call: newFilterCall,
        params: 1
    });

    var uninstallFilter = new Method({
        name: 'uninstallFilter',
        call: 'eth_uninstallFilter',
        params: 1
    });

    var getLogs = new Method({
        name: 'getLogs',
        call: 'eth_getFilterLogs',
        params: 1
    });

    var poll = new Method({
        name: 'poll',
        call: 'eth_getFilterChanges',
        params: 1
    });

    return [
        newFilter,
        uninstallFilter,
        getLogs,
        poll
    ];
};

/// @returns an array of objects describing web3.shh.watch api methods
var shh = function () {

    return [
        new Method({
            name: 'newFilter',
            call: 'shh_newMessageFilter',
            params: 1
        }),
        new Method({
            name: 'uninstallFilter',
            call: 'shh_deleteMessageFilter',
            params: 1
        }),
        new Method({
            name: 'getLogs',
            call: 'shh_getFilterMessages',
            params: 1
        }),
        new Method({
            name: 'poll',
            call: 'shh_getFilterMessages',
            params: 1
        })
    ];
};

module.exports = {
    eth: eth,
    shh: shh
};



/***/ }),
/* 174 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object.
 *
 * This can be used with JS designed for browsers to improve reuse of code and
 * allow the use of existing libraries.
 *
 * Usage: include("XMLHttpRequest.js") and use XMLHttpRequest per W3C specs.
 *
 * @author Dan DeFelippi <dan@driverdan.com>
 * @contributor David Ellis <d.f.ellis@ieee.org>
 * @license MIT
 */

var Url = __webpack_require__(8);
var spawn = __webpack_require__(39).spawn;
var fs = __webpack_require__(1);

exports.XMLHttpRequest = function() {
  "use strict";

  /**
   * Private variables
   */
  var self = this;
  var http = __webpack_require__(27);
  var https = __webpack_require__(45);

  // Holds http.js objects
  var request;
  var response;

  // Request settings
  var settings = {};

  // Disable header blacklist.
  // Not part of XHR specs.
  var disableHeaderCheck = false;

  // Set some default headers
  var defaultHeaders = {
    "User-Agent": "node-XMLHttpRequest",
    "Accept": "*/*",
  };

  var headers = {};
  var headersCase = {};

  // These headers are not user setable.
  // The following are allowed but banned in the spec:
  // * user-agent
  var forbiddenRequestHeaders = [
    "accept-charset",
    "accept-encoding",
    "access-control-request-headers",
    "access-control-request-method",
    "connection",
    "content-length",
    "content-transfer-encoding",
    "cookie",
    "cookie2",
    "date",
    "expect",
    "host",
    "keep-alive",
    "origin",
    "referer",
    "te",
    "trailer",
    "transfer-encoding",
    "upgrade",
    "via"
  ];

  // These request methods are not allowed
  var forbiddenRequestMethods = [
    "TRACE",
    "TRACK",
    "CONNECT"
  ];

  // Send flag
  var sendFlag = false;
  // Error flag, used when errors occur or abort is called
  var errorFlag = false;

  // Event listeners
  var listeners = {};

  /**
   * Constants
   */

  this.UNSENT = 0;
  this.OPENED = 1;
  this.HEADERS_RECEIVED = 2;
  this.LOADING = 3;
  this.DONE = 4;

  /**
   * Public vars
   */

  // Current state
  this.readyState = this.UNSENT;

  // default ready state change handler in case one is not set or is set late
  this.onreadystatechange = null;

  // Result & response
  this.responseText = "";
  this.responseXML = "";
  this.status = null;
  this.statusText = null;
  
  // Whether cross-site Access-Control requests should be made using
  // credentials such as cookies or authorization headers
  this.withCredentials = false;

  /**
   * Private methods
   */

  /**
   * Check if the specified header is allowed.
   *
   * @param string header Header to validate
   * @return boolean False if not allowed, otherwise true
   */
  var isAllowedHttpHeader = function(header) {
    return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1);
  };

  /**
   * Check if the specified method is allowed.
   *
   * @param string method Request method to validate
   * @return boolean False if not allowed, otherwise true
   */
  var isAllowedHttpMethod = function(method) {
    return (method && forbiddenRequestMethods.indexOf(method) === -1);
  };

  /**
   * Public methods
   */

  /**
   * Open the connection. Currently supports local server requests.
   *
   * @param string method Connection method (eg GET, POST)
   * @param string url URL for the connection.
   * @param boolean async Asynchronous connection. Default is true.
   * @param string user Username for basic authentication (optional)
   * @param string password Password for basic authentication (optional)
   */
  this.open = function(method, url, async, user, password) {
    this.abort();
    errorFlag = false;

    // Check for valid request method
    if (!isAllowedHttpMethod(method)) {
      throw new Error("SecurityError: Request method not allowed");
    }

    settings = {
      "method": method,
      "url": url.toString(),
      "async": (typeof async !== "boolean" ? true : async),
      "user": user || null,
      "password": password || null
    };

    setState(this.OPENED);
  };

  /**
   * Disables or enables isAllowedHttpHeader() check the request. Enabled by default.
   * This does not conform to the W3C spec.
   *
   * @param boolean state Enable or disable header checking.
   */
  this.setDisableHeaderCheck = function(state) {
    disableHeaderCheck = state;
  };

  /**
   * Sets a header for the request or appends the value if one is already set.
   *
   * @param string header Header name
   * @param string value Header value
   */
  this.setRequestHeader = function(header, value) {
    if (this.readyState !== this.OPENED) {
      throw new Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN");
    }
    if (!isAllowedHttpHeader(header)) {
      console.warn("Refused to set unsafe header \"" + header + "\"");
      return;
    }
    if (sendFlag) {
      throw new Error("INVALID_STATE_ERR: send flag is true");
    }
    header = headersCase[header.toLowerCase()] || header;
    headersCase[header.toLowerCase()] = header;
    headers[header] = headers[header] ? headers[header] + ', ' + value : value;
  };

  /**
   * Gets a header from the server response.
   *
   * @param string header Name of header to get.
   * @return string Text of the header or null if it doesn't exist.
   */
  this.getResponseHeader = function(header) {
    if (typeof header === "string"
      && this.readyState > this.OPENED
      && response
      && response.headers
      && response.headers[header.toLowerCase()]
      && !errorFlag
    ) {
      return response.headers[header.toLowerCase()];
    }

    return null;
  };

  /**
   * Gets all the response headers.
   *
   * @return string A string with all response headers separated by CR+LF
   */
  this.getAllResponseHeaders = function() {
    if (this.readyState < this.HEADERS_RECEIVED || errorFlag) {
      return "";
    }
    var result = "";

    for (var i in response.headers) {
      // Cookie headers are excluded
      if (i !== "set-cookie" && i !== "set-cookie2") {
        result += i + ": " + response.headers[i] + "\r\n";
      }
    }
    return result.substr(0, result.length - 2);
  };

  /**
   * Gets a request header
   *
   * @param string name Name of header to get
   * @return string Returns the request header or empty string if not set
   */
  this.getRequestHeader = function(name) {
    if (typeof name === "string" && headersCase[name.toLowerCase()]) {
      return headers[headersCase[name.toLowerCase()]];
    }

    return "";
  };

  /**
   * Sends the request to the server.
   *
   * @param string data Optional data to send as request body.
   */
  this.send = function(data) {
    if (this.readyState !== this.OPENED) {
      throw new Error("INVALID_STATE_ERR: connection must be opened before send() is called");
    }

    if (sendFlag) {
      throw new Error("INVALID_STATE_ERR: send has already been called");
    }

    var ssl = false, local = false;
    var url = Url.parse(settings.url);
    var host;
    // Determine the server
    switch (url.protocol) {
      case "https:":
        ssl = true;
        // SSL & non-SSL both need host, no break here.
      case "http:":
        host = url.hostname;
        break;

      case "file:":
        local = true;
        break;

      case undefined:
      case null:
      case "":
        host = "localhost";
        break;

      default:
        throw new Error("Protocol not supported.");
    }

    // Load files off the local filesystem (file://)
    if (local) {
      if (settings.method !== "GET") {
        throw new Error("XMLHttpRequest: Only GET method is supported");
      }

      if (settings.async) {
        fs.readFile(url.pathname, "utf8", function(error, data) {
          if (error) {
            self.handleError(error);
          } else {
            self.status = 200;
            self.responseText = data;
            setState(self.DONE);
          }
        });
      } else {
        try {
          this.responseText = fs.readFileSync(url.pathname, "utf8");
          this.status = 200;
          setState(self.DONE);
        } catch(e) {
          this.handleError(e);
        }
      }

      return;
    }

    // Default to port 80. If accessing localhost on another port be sure
    // to use http://localhost:port/path
    var port = url.port || (ssl ? 443 : 80);
    // Add query string if one is used
    var uri = url.pathname + (url.search ? url.search : "");

    // Set the defaults if they haven't been set
    for (var name in defaultHeaders) {
      if (!headersCase[name.toLowerCase()]) {
        headers[name] = defaultHeaders[name];
      }
    }

    // Set the Host header or the server may reject the request
    headers.Host = host;
    if (!((ssl && port === 443) || port === 80)) {
      headers.Host += ":" + url.port;
    }

    // Set Basic Auth if necessary
    if (settings.user) {
      if (typeof settings.password === "undefined") {
        settings.password = "";
      }
      var authBuf = new Buffer(settings.user + ":" + settings.password);
      headers.Authorization = "Basic " + authBuf.toString("base64");
    }

    // Set content length header
    if (settings.method === "GET" || settings.method === "HEAD") {
      data = null;
    } else if (data) {
      headers["Content-Length"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);

      if (!headers["Content-Type"]) {
        headers["Content-Type"] = "text/plain;charset=UTF-8";
      }
    } else if (settings.method === "POST") {
      // For a post with no data set Content-Length: 0.
      // This is required by buggy servers that don't meet the specs.
      headers["Content-Length"] = 0;
    }

    var options = {
      host: host,
      port: port,
      path: uri,
      method: settings.method,
      headers: headers,
      agent: false,
      withCredentials: self.withCredentials
    };

    // Reset error flag
    errorFlag = false;

    // Handle async requests
    if (settings.async) {
      // Use the proper protocol
      var doRequest = ssl ? https.request : http.request;

      // Request is being sent, set send flag
      sendFlag = true;

      // As per spec, this is called here for historical reasons.
      self.dispatchEvent("readystatechange");

      // Handler for the response
      var responseHandler = function responseHandler(resp) {
        // Set response var to the response we got back
        // This is so it remains accessable outside this scope
        response = resp;
        // Check for redirect
        // @TODO Prevent looped redirects
        if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {
          // Change URL to the redirect location
          settings.url = response.headers.location;
          var url = Url.parse(settings.url);
          // Set host var in case it's used later
          host = url.hostname;
          // Options for the new request
          var newOptions = {
            hostname: url.hostname,
            port: url.port,
            path: url.path,
            method: response.statusCode === 303 ? "GET" : settings.method,
            headers: headers,
            withCredentials: self.withCredentials
          };

          // Issue the new request
          request = doRequest(newOptions, responseHandler).on("error", errorHandler);
          request.end();
          // @TODO Check if an XHR event needs to be fired here
          return;
        }

        response.setEncoding("utf8");

        setState(self.HEADERS_RECEIVED);
        self.status = response.statusCode;

        response.on("data", function(chunk) {
          // Make sure there's some data
          if (chunk) {
            self.responseText += chunk;
          }
          // Don't emit state changes if the connection has been aborted.
          if (sendFlag) {
            setState(self.LOADING);
          }
        });

        response.on("end", function() {
          if (sendFlag) {
            // Discard the end event if the connection has been aborted
            setState(self.DONE);
            sendFlag = false;
          }
        });

        response.on("error", function(error) {
          self.handleError(error);
        });
      };

      // Error handler for the request
      var errorHandler = function errorHandler(error) {
        self.handleError(error);
      };

      // Create the request
      request = doRequest(options, responseHandler).on("error", errorHandler);

      // Node 0.4 and later won't accept empty data. Make sure it's needed.
      if (data) {
        request.write(data);
      }

      request.end();

      self.dispatchEvent("loadstart");
    } else { // Synchronous
      // Create a temporary file for communication with the other Node process
      var contentFile = ".node-xmlhttprequest-content-" + process.pid;
      var syncFile = ".node-xmlhttprequest-sync-" + process.pid;
      fs.writeFileSync(syncFile, "", "utf8");
      // The async request the other Node process executes
      var execString = "var http = require('http'), https = require('https'), fs = require('fs');"
        + "var doRequest = http" + (ssl ? "s" : "") + ".request;"
        + "var options = " + JSON.stringify(options) + ";"
        + "var responseText = '';"
        + "var req = doRequest(options, function(response) {"
        + "response.setEncoding('utf8');"
        + "response.on('data', function(chunk) {"
        + "  responseText += chunk;"
        + "});"
        + "response.on('end', function() {"
        + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText}}), 'utf8');"
        + "fs.unlinkSync('" + syncFile + "');"
        + "});"
        + "response.on('error', function(error) {"
        + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');"
        + "fs.unlinkSync('" + syncFile + "');"
        + "});"
        + "}).on('error', function(error) {"
        + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');"
        + "fs.unlinkSync('" + syncFile + "');"
        + "});"
        + (data ? "req.write('" + JSON.stringify(data).slice(1,-1).replace(/'/g, "\\'") + "');":"")
        + "req.end();";
      // Start the other Node Process, executing this string
      var syncProc = spawn(process.argv[0], ["-e", execString]);
      while(fs.existsSync(syncFile)) {
        // Wait while the sync file is empty
      }
      var resp = JSON.parse(fs.readFileSync(contentFile, 'utf8'));
      // Kill the child process once the file has data
      syncProc.stdin.end();
      // Remove the temporary file
      fs.unlinkSync(contentFile);

      if (resp.err) {
        self.handleError(resp.err);
      } else {
        response = resp.data;
        self.status = resp.data.statusCode;
        self.responseText = resp.data.text;
        setState(self.DONE);
      }
    }
  };

  /**
   * Called when an error is encountered to deal with it.
   */
  this.handleError = function(error) {
    this.status = 0;
    this.statusText = error;
    this.responseText = error.stack;
    errorFlag = true;
    setState(this.DONE);
    this.dispatchEvent('error');
  };

  /**
   * Aborts a request.
   */
  this.abort = function() {
    if (request) {
      request.abort();
      request = null;
    }

    headers = defaultHeaders;
    this.status = 0;
    this.responseText = "";
    this.responseXML = "";

    errorFlag = true;

    if (this.readyState !== this.UNSENT
        && (this.readyState !== this.OPENED || sendFlag)
        && this.readyState !== this.DONE) {
      sendFlag = false;
      setState(this.DONE);
    }
    this.readyState = this.UNSENT;
    this.dispatchEvent('abort');
  };

  /**
   * Adds an event listener. Preferred method of binding to events.
   */
  this.addEventListener = function(event, callback) {
    if (!(event in listeners)) {
      listeners[event] = [];
    }
    // Currently allows duplicate callbacks. Should it?
    listeners[event].push(callback);
  };

  /**
   * Remove an event callback that has already been bound.
   * Only works on the matching funciton, cannot be a copy.
   */
  this.removeEventListener = function(event, callback) {
    if (event in listeners) {
      // Filter will return a new array with the callback removed
      listeners[event] = listeners[event].filter(function(ev) {
        return ev !== callback;
      });
    }
  };

  /**
   * Dispatch any events, including both "on" methods and events attached using addEventListener.
   */
  this.dispatchEvent = function(event) {
    if (typeof self["on" + event] === "function") {
      self["on" + event]();
    }
    if (event in listeners) {
      for (var i = 0, len = listeners[event].length; i < len; i++) {
        listeners[event][i].call(self);
      }
    }
  };

  /**
   * Changes readyState and calls onreadystatechange.
   *
   * @param int state New state
   */
  var setState = function(state) {
    if (state == self.LOADING || self.readyState !== state) {
      self.readyState = state;

      if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) {
        self.dispatchEvent("readystatechange");
      }

      if (self.readyState === self.DONE && !errorFlag) {
        self.dispatchEvent("load");
        // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie)
        self.dispatchEvent("loadend");
      }
    }
  };
};


/***/ }),
/* 175 */
/***/ (function(module, exports, __webpack_require__) {

// Compares .sol files to their .sol.js counterparts,
// determines which .sol files have been updated.

var path = __webpack_require__(0);
var async = __webpack_require__(28);
var fs = __webpack_require__(1);
var Graph = __webpack_require__(862).Graph;
var isAcyclic = __webpack_require__(361).isAcyclic;
var Parser = __webpack_require__(1149);
var CompileError = __webpack_require__(246);
var expect = __webpack_require__(21);
var find_contracts = __webpack_require__(139);
var debug = __webpack_require__(443)("compile:profiler");

module.exports = {
  updated: function(options, callback) {
    var self = this;

    expect.options(options, [
      "resolver"
    ]);

    var contracts_directory = options.contracts_directory;
    var build_directory = options.contracts_build_directory;

    function getFiles(done) {
      if (options.files) {
        done(null, options.files);
      } else {
        find_contracts(contracts_directory, done);
      }
    }

    var sourceFilesArtifacts = {};
    var sourceFilesArtifactsUpdatedTimes = {};

    var updatedFiles = [];

    async.series([
      // Get all the source files and create an object out of them.
      function(c) {
        getFiles(function(err, files) {
          if (err) return c(err);

          // Use an object for O(1) access.
          files.forEach(function(sourceFile) {
            sourceFilesArtifacts[sourceFile] = [];
          });

          c();
        })
      },
      // Get all the artifact files, and read them, parsing them as JSON
      function(c) {
        fs.readdir(build_directory, function(err, build_files) {
          if (err) {
            // The build directory may not always exist.
            if (err.message.indexOf("ENOENT: no such file or directory") >= 0) {
              // Ignore it.
              build_files = [];
            } else {
              return c(err);
            }
          }

          build_files = build_files.filter(function(build_file) {
            return path.extname(build_file) == ".json";
          });

          async.map(build_files, function(buildFile, finished) {
            fs.readFile(path.join(build_directory, buildFile), "utf8", function(err, body) {
              if (err) return finished(err);
              finished(null, body);
            });
          }, function(err, jsonData) {
            if (err) return c(err);

            try {
              for (var i = 0; i < jsonData.length; i++) {
                var data = JSON.parse(jsonData[i]);

                // In case there are artifacts from other source locations.
                if (sourceFilesArtifacts[data.sourcePath] == null) {
                  sourceFilesArtifacts[data.sourcePath] = [];
                }

                sourceFilesArtifacts[data.sourcePath].push(data);
              }
            } catch (e) {
              return c(e);
            }

            c();
          });
        });
      },
      function(c) {
        // Get the minimum updated time for all of a source file's artifacts
        // (note: one source file might have multiple artifacts).
        Object.keys(sourceFilesArtifacts).forEach(function(sourceFile) {
          var artifacts = sourceFilesArtifacts[sourceFile];

          sourceFilesArtifactsUpdatedTimes[sourceFile] = artifacts.reduce(function(minimum, current) {
            var updatedAt = new Date(current.updatedAt).getTime();

            if (updatedAt < minimum) {
              return updatedAt;
            }
            return minimum;
          }, Number.MAX_SAFE_INTEGER);

          // Empty array?
          if (sourceFilesArtifactsUpdatedTimes[sourceFile] == Number.MAX_SAFE_INTEGER) {
            sourceFilesArtifactsUpdatedTimes[sourceFile] = 0;
          }
        });

        c();
      },
      // Stat all the source files, getting there updated times, and comparing them to
      // the artifact updated times.
      function(c) {
        var sourceFiles = Object.keys(sourceFilesArtifacts);

        async.map(sourceFiles, function(sourceFile, finished) {
          fs.stat(sourceFile, function(err, stat) {
            if (err) {
              // Ignore it. This means the source file was removed
              // but the artifact file possibly exists. Return null
              // to signfy that we should ignore it.
              stat = null;
            }
            finished(null, stat);
          });
        }, function(err, sourceFileStats) {
          if (err) return callback(err);

          sourceFiles.forEach(function(sourceFile, index) {
            var sourceFileStat = sourceFileStats[index];

            // Ignore updating artifacts if source file has been removed.
            if (sourceFileStat == null) {
              return;
            }

            var artifactsUpdatedTime = sourceFilesArtifactsUpdatedTimes[sourceFile] || 0;
            var sourceFileUpdatedTime = (sourceFileStat.mtime || sourceFileStat.ctime).getTime();

            if (sourceFileUpdatedTime > artifactsUpdatedTime) {
              updatedFiles.push(sourceFile);
            }
          });

          c();
        });
      }
    ], function(err) {
      callback(err, updatedFiles);
    });
  },

  required_sources: function(options, callback) {
    var self = this;

    expect.options(options, [
      "paths",
      "base_path",
      "resolver"
    ]);

    var paths = this.convert_to_absolute_paths(options.paths, options.base_path);

    function findRequiredSources(dependsGraph, done) {
      var required = {};

      function hasBeenTraversed(import_path) {
        return required[import_path] != null;
      }

      function include(import_path) {
        //console.log("Including: " + file)

        required[import_path] = dependsGraph.node(import_path);
      }

      function walk_down(import_path) {
        if (hasBeenTraversed(import_path)) {
          return;
        }

        include(import_path);

        var dependencies = dependsGraph.successors(import_path);

        // console.log("At: " + import_path);
        // console.log("   Dependencies: ", dependencies);

        if (dependencies.length > 0) {
          dependencies.forEach(walk_down);
        }
      }

      function walk_from(import_path) {
        if (hasBeenTraversed(import_path)) {
          return;
        }

        var ancestors = dependsGraph.predecessors(import_path);
        var dependencies = dependsGraph.successors(import_path);

        // console.log("At: " + import_path);
        // console.log("   Ancestors: ", ancestors);
        // console.log("   Dependencies: ", dependencies);

        include(import_path);

        if (ancestors && ancestors.length > 0) {
          ancestors.forEach(walk_from);
        }

        if (dependencies && dependencies.length > 0) {
          dependencies.forEach(walk_down);
        }
      }

      paths.forEach(walk_from);

      done(null, required);
    }

    find_contracts(options.base_path, function(err, allPaths) {
      if (err) return callback(err);

      // Include paths for Solidity .sols, specified in options.
      allPaths = allPaths.concat(paths);

      self.dependency_graph(allPaths, options.resolver, function(err, dependsGraph) {
        if (err) return callback(err);

        findRequiredSources(dependsGraph, callback);
      });
    });
  },

  convert_to_absolute_paths: function(paths, base) {
    var self = this;
    return paths.map(function(p) {
      // If it's anabsolute paths, leave it alone.
      if (path.isAbsolute(p)) return p;

      // If it's not explicitly relative, then leave it alone (i.e., it's a module).
      if (!self.isExplicitlyRelative(p)) return p;

      // Path must be explicitly releative, therefore make it absolute.
      return path.resolve(path.join(base, p));
    });
  },

  isExplicitlyRelative: function(import_path) {
    return import_path.indexOf(".") == 0;
  },

  dependency_graph: function(paths, resolver, callback) {
    var self = this;

    // Iterate through all the contracts looking for libraries and building a dependency graph
    var dependsGraph = new Graph();

    var imports_cache = {};

    // For the purposes of determining correct error messages.
    // The second array item denotes which path imported the current path.
    // In the case of the paths passed in, there was none.
    paths = paths.map(function(p) {
      return [p, null];
    });

    async.whilst(function() {
      return paths.length > 0;
    }, function(finished) {
      var current = paths.shift();
      var import_path = current[0];
      var imported_from = current[1];

      if (dependsGraph.hasNode(import_path) && imports_cache[import_path] != null) {
        return finished();
      }

      resolver.resolve(import_path, imported_from, function(err, resolved_body, resolved_path, source) {
        if (err) return finished(err);

        if (dependsGraph.hasNode(resolved_path) && imports_cache[resolved_path] != null) {
          return finished();
        }

        // Add the contract to the depends graph.
        dependsGraph.setNode(resolved_path, resolved_body);

        var imports;

        try {
          imports = Parser.parseImports(resolved_body);
        } catch (e) {
          e.message = "Error parsing " + import_path + ": " + e.message;
          return finished(e);
        }

        // Convert explicitly relative dependencies of modules
        // back into module paths. We also use this loop to update
        // the graph edges.
        imports = imports.map(function(dependency_path) {
          // Convert explicitly relative paths
          if (self.isExplicitlyRelative(dependency_path)) {
            dependency_path = source.resolve_dependency_path(import_path, dependency_path);
          }

          // Update graph edges
          if (!dependsGraph.hasEdge(import_path, dependency_path)) {
            dependsGraph.setEdge(import_path, dependency_path);
          }

          // Return an array that denotes a new import and the path it was imported from.
          return [dependency_path, import_path];
        });

        imports_cache[import_path] = imports;

        Array.prototype.push.apply(paths, imports);

        finished();
      });
    },
    function(err) {
      if (err) return callback(err);
      callback(null, dependsGraph)
    });
  },

  // Parse all source files in the directory and output the names of contracts and their source paths
  // directory can either be a directory or array of files.
  defined_contracts: function(directory, callback) {
    function getFiles(callback) {
      if (Array.isArray(directory)) {
        callback(null, directory);
      } else {
        find_contracts(directory, callback);
      }
    }

    getFiles(function(err, files) {
      if (err) return callback(err);

      var promises = files.map(function(file) {
        return new Promise(function(accept, reject) {
          fs.readFile(file, "utf8", function(err, body) {
            if (err) return reject(err);

            var output;

            try {
              output = Parser.parse(body);
            } catch (e) {
              e.message = "Error parsing " + file + ": " + e.message;
              return reject(e);
            }

            accept(output.contracts);
          });
        }).then(function(contract_names) {
          var returnVal = {};

          contract_names.forEach(function(contract_name) {
            returnVal[contract_name] = file;
          });

          return returnVal;
        });
      });

      Promise.all(promises).then(function(objects) {
        var contract_source_paths = {};

        objects.forEach(function(object) {
          Object.keys(object).forEach(function(contract_name) {
            contract_source_paths[contract_name] = object[contract_name];
          });
        });

        callback(null, contract_source_paths);
      }).catch(callback);
    });
  }
};


/***/ }),
/* 176 */
/***/ (function(module, exports) {

function YError (msg) {
  this.name = 'YError'
  this.message = msg || 'yargs error'
  Error.captureStackTrace(this, YError)
}

YError.prototype = Object.create(Error.prototype)
YError.prototype.constructor = YError

module.exports = YError


/***/ }),
/* 177 */
/***/ (function(module, exports, __webpack_require__) {

var EPMSource = __webpack_require__(1224);
var NPMSource = __webpack_require__(1225);
var FSSource = __webpack_require__(467);
var whilst = __webpack_require__(278);
var contract = __webpack_require__(69);
var expect = __webpack_require__(21);
var provision = __webpack_require__(255);

function Resolver(options) {
  expect.options(options, [
    "working_directory",
    "contracts_build_directory",
  ]);

  this.options = options;

  this.sources = [
    new EPMSource(options.working_directory, options.contracts_build_directory),
    new NPMSource(options.working_directory),
    new FSSource(options.working_directory, options.contracts_build_directory)
  ];
};

// This function might be doing too much. If so, too bad (for now).
Resolver.prototype.require = function(import_path, search_path) {
  var self = this;

  for (var i = 0; i < this.sources.length; i++) {
    var source = this.sources[i];
    var result = source.require(import_path, search_path);
    if (result) {
      var abstraction = contract(result);
      provision(abstraction, self.options);
      return abstraction;
    }
  }
  throw new Error("Could not find artifacts for " + import_path + " from any sources");
};

Resolver.prototype.resolve = function(import_path, imported_from, callback) {
  var self = this;

  if (typeof imported_from == "function") {
    callback = imported_from;
    imported_from = null;
  }

  var resolved_body = null;
  var resolved_path = null;
  var current_index = -1;
  var current_source;

  whilst(function() {
    return !resolved_body && current_index < self.sources.length - 1;
  }, function(next) {
    current_index += 1;
    current_source = self.sources[current_index];

    current_source.resolve(import_path, imported_from, function(err, body, file_path) {
      if (!err && body) {
        resolved_body = body;
        resolved_path = file_path;
      }
      next(err);
    });
  }, function(err) {
    if (err) return callback(err);

    if (!resolved_body) {
      var message = "Could not find " + import_path + " from any sources";

      if (imported_from) {
        message += "; imported from " + imported_from;
      }

      return callback(new Error(message));
    }

    callback(null, resolved_body, resolved_path, current_source);
  })
};

module.exports = Resolver;


/***/ }),
/* 178 */
/***/ (function(module, exports, __webpack_require__) {

!function(e,a){ true?module.exports=a():"function"==typeof define&&define.amd?define("ganache",[],a):"object"==typeof exports?exports.ganache=a():e.ganache=a()}(global,function(){return function(e){var a={};function t(r){if(a[r])return a[r].exports;var c=a[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}return t.m=e,t.c=a,t.d=function(e,a,r){t.o(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,a){if(1&a&&(e=t(e)),8&a)return e;if(4&a&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&a&&"string"!=typeof e)for(var c in e)t.d(r,c,function(a){return e[a]}.bind(null,c));return r},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="",t(t.s=1037)}([function(e,a,t){try{var r=t(1);if("function"!=typeof r.inherits)throw"";e.exports=r.inherits}catch(a){e.exports=t(1021)}},function(e,a){e.exports=__webpack_require__(2)},function(e,a){e.exports=__webpack_require__(0)},function(e,a,t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=t(1024),n=t(91),i=t(11),f=t(52),o=t(9),d=t(30),s=t(7).Buffer;Object.assign(a,t(379)),a.MAX_INTEGER=new o("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),a.TWO_POW256=new o("10000000000000000000000000000000000000000000000000000000000000000",16),a.KECCAK256_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",a.SHA3_NULL_S=a.KECCAK256_NULL_S,a.KECCAK256_NULL=s.from(a.KECCAK256_NULL_S,"hex"),a.SHA3_NULL=a.KECCAK256_NULL,a.KECCAK256_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",a.SHA3_RLP_ARRAY_S=a.KECCAK256_RLP_ARRAY_S,a.KECCAK256_RLP_ARRAY=s.from(a.KECCAK256_RLP_ARRAY_S,"hex"),a.SHA3_RLP_ARRAY=a.KECCAK256_RLP_ARRAY,a.KECCAK256_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",a.SHA3_RLP_S=a.KECCAK256_RLP_S,a.KECCAK256_RLP=s.from(a.KECCAK256_RLP_S,"hex"),a.SHA3_RLP=a.KECCAK256_RLP,a.BN=o,a.rlp=f,a.secp256k1=n,a.zeros=function(e){return s.allocUnsafe(e).fill(0)},a.zeroAddress=function(){var e=a.zeros(20);return a.bufferToHex(e)},a.setLengthLeft=a.setLength=function(e,t,r){var c=a.zeros(t);return e=a.toBuffer(e),r?e.length<t?(e.copy(c),c):e.slice(0,t):e.length<t?(e.copy(c,t-e.length),c):e.slice(-t)},a.setLengthRight=function(e,t){return a.setLength(e,t,!0)},a.unpad=a.stripZeros=function(e){for(var t=(e=a.stripHexPrefix(e))[0];e.length>0&&"0"===t.toString();)t=(e=e.slice(1))[0];return e},a.toBuffer=function(e){if(!s.isBuffer(e))if(Array.isArray(e))e=s.from(e);else if("string"==typeof e)e=a.isHexString(e)?s.from(a.padToEven(a.stripHexPrefix(e)),"hex"):s.from(e);else if("number"==typeof e)e=a.intToBuffer(e);else if(null===e||void 0===e)e=s.allocUnsafe(0);else if(o.isBN(e))e=e.toArrayLike(s);else{if(!e.toArray)throw new Error("invalid type");e=s.from(e.toArray())}return e},a.bufferToInt=function(e){return new o(a.toBuffer(e)).toNumber()},a.bufferToHex=function(e){return"0x"+(e=a.toBuffer(e)).toString("hex")},a.fromSigned=function(e){return new o(e).fromTwos(256)},a.toUnsigned=function(e){return s.from(e.toTwos(256).toArray())},a.keccak=function(e,t){return e=a.toBuffer(e),t||(t=256),c("keccak"+t).update(e).digest()},a.keccak256=function(e){return a.keccak(e)},a.sha3=a.keccak,a.sha256=function(e){return e=a.toBuffer(e),d("sha256").update(e).digest()},a.ripemd160=function(e,t){e=a.toBuffer(e);var r=d("rmd160").update(e).digest();return!0===t?a.setLength(r,32):r},a.rlphash=function(e){return a.keccak(f.encode(e))},a.isValidPrivate=function(e){return n.privateKeyVerify(e)},a.isValidPublic=function(e,a){return 64===e.length?n.publicKeyVerify(s.concat([s.from([4]),e])):!!a&&n.publicKeyVerify(e)},a.pubToAddress=a.publicToAddress=function(e,t){return e=a.toBuffer(e),t&&64!==e.length&&(e=n.publicKeyConvert(e,!1).slice(1)),i(64===e.length),a.keccak(e).slice(-20)};var b=a.privateToPublic=function(e){return e=a.toBuffer(e),n.publicKeyCreate(e,!1).slice(1)};a.importPublic=function(e){return 64!==(e=a.toBuffer(e)).length&&(e=n.publicKeyConvert(e,!1).slice(1)),e},a.ecsign=function(e,a){var t=n.sign(e,a),r={};return r.r=t.signature.slice(0,32),r.s=t.signature.slice(32,64),r.v=t.recovery+27,r},a.hashPersonalMessage=function(e){var t=a.toBuffer("Ethereum Signed Message:\n"+e.length.toString());return a.keccak(s.concat([t,e]))},a.ecrecover=function(e,t,r,c){var i=s.concat([a.setLength(r,32),a.setLength(c,32)],64),f=t-27;if(0!==f&&1!==f)throw new Error("Invalid signature v value");var o=n.recover(e,i,f);return n.publicKeyConvert(o,!1).slice(1)},a.toRpcSig=function(e,t,r){if(27!==e&&28!==e)throw new Error("Invalid recovery id");return a.bufferToHex(s.concat([a.setLengthLeft(t,32),a.setLengthLeft(r,32),a.toBuffer(e-27)]))},a.fromRpcSig=function(e){if(65!==(e=a.toBuffer(e)).length)throw new Error("Invalid signature length");var t=e[64];return t<27&&(t+=27),{v:t,r:e.slice(0,32),s:e.slice(32,64)}},a.privateToAddress=function(e){return a.publicToAddress(b(e))},a.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/.test(e)},a.isZeroAddress=function(e){return a.zeroAddress()===a.addHexPrefix(e)},a.toChecksumAddress=function(e){e=a.stripHexPrefix(e).toLowerCase();for(var t=a.keccak(e).toString("hex"),r="0x",c=0;c<e.length;c++)parseInt(t[c],16)>=8?r+=e[c].toUpperCase():r+=e[c];return r},a.isValidChecksumAddress=function(e){return a.isValidAddress(e)&&a.toChecksumAddress(e)===e},a.generateAddress=function(e,t){return e=a.toBuffer(e),t=(t=new o(t)).isZero()?null:s.from(t.toArray()),a.rlphash([e,t]).slice(-20)},a.isPrecompiled=function(e){var t=a.unpad(e);return 1===t.length&&t[0]>=1&&t[0]<=8},a.addHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e:"0x"+e},a.isValidSignature=function(e,a,t,r){var c=new o("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),n=new o("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);return 32===a.length&&32===t.length&&((27===e||28===e)&&(a=new o(a),t=new o(t),!(a.isZero()||a.gt(n)||t.isZero()||t.gt(n))&&(!1!==r||1!==new o(t).cmp(c))))},a.baToJSON=function(e){if(s.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var t=[],r=0;r<e.length;r++)t.push(a.baToJSON(e[r]));return t}},a.defineProperties=function(e,t,c){if(e.raw=[],e._fields=[],e.toJSON=function(t){if(t){var r={};return e._fields.forEach(function(a){r[a]="0x"+e[a].toString("hex")}),r}return a.baToJSON(this.raw)},e.serialize=function(){return f.encode(e.raw)},t.forEach(function(t,r){function c(){return e.raw[r]}function n(c){"00"!==(c=a.toBuffer(c)).toString("hex")||t.allowZero||(c=s.allocUnsafe(0)),t.allowLess&&t.length?(c=a.stripZeros(c),i(t.length>=c.length,"The field "+t.name+" must not have more "+t.length+" bytes")):t.allowZero&&0===c.length||!t.length||i(t.length===c.length,"The field "+t.name+" must have byte length of "+t.length),e.raw[r]=c}e._fields.push(t.name),Object.defineProperty(e,t.name,{enumerable:!0,configurable:!0,get:c,set:n}),t.default&&(e[t.name]=t.default),t.alias&&Object.defineProperty(e,t.alias,{enumerable:!1,configurable:!0,set:n,get:c})}),c)if("string"==typeof c&&(c=s.from(a.stripHexPrefix(c),"hex")),s.isBuffer(c)&&(c=f.decode(c)),Array.isArray(c)){if(c.length>e._fields.length)throw new Error("wrong number of fields in data");c.forEach(function(t,r){e[e._fields[r]]=a.toBuffer(t)})}else{if("object"!==(void 0===c?"undefined":r(c)))throw new Error("invalid data");var n=Object.keys(c);t.forEach(function(a){-1!==n.indexOf(a.name)&&(e[a.name]=c[a.name]),-1!==n.indexOf(a.alias)&&(e[a.alias]=c[a.alias])})}}},function(e,a){e.exports=function(e){return null==e?"":e.toString()}},function(e,a){e.exports=__webpack_require__(18)},function(e,a){e.exports=__webpack_require__(22)},function(e,a,t){var r=t(24),c=r.Buffer;function n(e,a){for(var t in e)a[t]=e[t]}function i(e,a,t){return c(e,a,t)}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?e.exports=r:(n(r,a),a.Buffer=i),n(c,i),i.from=function(e,a,t){if("number"==typeof e)throw new TypeError("Argument must not be a number");return c(e,a,t)},i.alloc=function(e,a,t){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=c(e);return void 0!==a?"string"==typeof t?r.fill(a,t):r.fill(a):r.fill(0),r},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return c(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,a,t){var r=t(15),c=t(735),n=t(734),i=[],f=t(1);var o=function(){};function d(e){c(e),e.gracefulify=d,e.FileReadStream=p,e.FileWriteStream=h,e.createReadStream=function(e,a){return new p(e,a)},e.createWriteStream=function(e,a){return new h(e,a)};var a=e.readFile;e.readFile=function(e,t,r){"function"==typeof t&&(r=t,t=null);return function e(t,r,c){return a(t,r,function(a){!a||"EMFILE"!==a.code&&"ENFILE"!==a.code?("function"==typeof c&&c.apply(this,arguments),b()):s([e,[t,r,c]])})}(e,t,r)};var t=e.writeFile;e.writeFile=function(e,a,r,c){"function"==typeof r&&(c=r,r=null);return function e(a,r,c,n){return t(a,r,c,function(t){!t||"EMFILE"!==t.code&&"ENFILE"!==t.code?("function"==typeof n&&n.apply(this,arguments),b()):s([e,[a,r,c,n]])})}(e,a,r,c)};var r=e.appendFile;r&&(e.appendFile=function(e,a,t,c){"function"==typeof t&&(c=t,t=null);return function e(a,t,c,n){return r(a,t,c,function(r){!r||"EMFILE"!==r.code&&"ENFILE"!==r.code?("function"==typeof n&&n.apply(this,arguments),b()):s([e,[a,t,c,n]])})}(e,a,t,c)});var i=e.readdir;function f(a){return i.apply(e,a)}if(e.readdir=function(e,a,t){var r=[e];"function"!=typeof a?r.push(a):t=a;return r.push(function(e,a){a&&a.sort&&a.sort(),!e||"EMFILE"!==e.code&&"ENFILE"!==e.code?("function"==typeof t&&t.apply(this,arguments),b()):s([f,[r]])}),f(r)},"v0.8"===process.version.substr(0,4)){var o=n(e);p=o.ReadStream,h=o.WriteStream}var u=e.ReadStream;p.prototype=Object.create(u.prototype),p.prototype.open=function(){var e=this;g(e.path,e.flags,e.mode,function(a,t){a?(e.autoClose&&e.destroy(),e.emit("error",a)):(e.fd=t,e.emit("open",t),e.read())})};var l=e.WriteStream;function p(e,a){return this instanceof p?(u.apply(this,arguments),this):p.apply(Object.create(p.prototype),arguments)}function h(e,a){return this instanceof h?(l.apply(this,arguments),this):h.apply(Object.create(h.prototype),arguments)}h.prototype=Object.create(l.prototype),h.prototype.open=function(){var e=this;g(e.path,e.flags,e.mode,function(a,t){a?(e.destroy(),e.emit("error",a)):(e.fd=t,e.emit("open",t))})},e.ReadStream=p,e.WriteStream=h;var m=e.open;function g(e,a,t,r){return"function"==typeof t&&(r=t,t=null),function e(a,t,r,c){return m(a,t,r,function(n,i){!n||"EMFILE"!==n.code&&"ENFILE"!==n.code?("function"==typeof c&&c.apply(this,arguments),b()):s([e,[a,t,r,c]])})}(e,a,t,r)}return e.open=g,e}function s(e){o("ENQUEUE",e[0].name,e[1]),i.push(e)}function b(){var e=i.shift();e&&(o("RETRY",e[0].name,e[1]),e[0].apply(null,e[1]))}f.debuglog?o=f.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(o=function(){var e=f.format.apply(f,arguments);e="GFS4: "+e.split(/\n/).join("\nGFS4: "),console.error(e)}),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){o(i),t(11).equal(i.length,0)}),e.exports=d(t(291)),process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&(e.exports=d(r)),e.exports.close=r.close=function(e){return function(a,t){return e.call(r,a,function(e){e||b(),"function"==typeof t&&t.apply(this,arguments)})}}(r.close),e.exports.closeSync=r.closeSync=function(e){return function(a){var t=e.apply(r,arguments);return b(),t}}(r.closeSync)},function(e,a,t){(function(e){!function(e,a){"use strict";function r(e,a){if(!e)throw new Error(a||"Assertion failed")}function c(e,a){e.super_=a;var t=function(){};t.prototype=a.prototype,e.prototype=new t,e.prototype.constructor=e}function n(e,a,t){if(n.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=n:a.BN=n,n.BN=n,n.wordSize=26;try{i=t(24).Buffer}catch(e){}function f(e,a,t){for(var r=0,c=Math.min(e.length,t),n=a;n<c;n++){var i=e.charCodeAt(n)-48;r<<=4,r|=i>=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return r}function o(e,a,t,r){for(var c=0,n=Math.min(e.length,t),i=a;i<n;i++){var f=e.charCodeAt(i)-48;c*=r,c+=f>=49?f-49+10:f>=17?f-17+10:f}return c}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,a){return e.cmp(a)>0?e:a},n.min=function(e,a){return e.cmp(a)<0?e:a},n.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),r(a===(0|a)&&a>=2&&a<=36);var c=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&c++,16===a?this._parseHex(e,c):this._parseBase(e,a,c),"-"===e[0]&&(this.negative=1),this.strip(),"le"===t&&this._initArray(this.toArray(),a,t)},n.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):(r(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===t&&this._initArray(this.toArray(),a,t)},n.prototype._initArray=function(e,a,t){if(r("number"==typeof e.length),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 c=0;c<this.length;c++)this.words[c]=0;var n,i,f=0;if("be"===t)for(c=e.length-1,n=0;c>=0;c-=3)i=e[c]|e[c-1]<<8|e[c-2]<<16,this.words[n]|=i<<f&67108863,this.words[n+1]=i>>>26-f&67108863,(f+=24)>=26&&(f-=26,n++);else if("le"===t)for(c=0,n=0;c<e.length;c+=3)i=e[c]|e[c+1]<<8|e[c+2]<<16,this.words[n]|=i<<f&67108863,this.words[n+1]=i>>>26-f&67108863,(f+=24)>=26&&(f-=26,n++);return this.strip()},n.prototype._parseHex=function(e,a){this.length=Math.ceil((e.length-a)/6),this.words=new Array(this.length);for(var t=0;t<this.length;t++)this.words[t]=0;var r,c,n=0;for(t=e.length-6,r=0;t>=a;t-=6)c=f(e,t,t+6),this.words[r]|=c<<n&67108863,this.words[r+1]|=c>>>26-n&4194303,(n+=24)>=26&&(n-=26,r++);t+6!==a&&(c=f(e,a,t+6),this.words[r]|=c<<n&67108863,this.words[r+1]|=c>>>26-n&4194303),this.strip()},n.prototype._parseBase=function(e,a,t){this.words=[0],this.length=1;for(var r=0,c=1;c<=67108863;c*=a)r++;r--,c=c/a|0;for(var n=e.length-t,i=n%r,f=Math.min(n,n-i)+t,d=0,s=t;s<f;s+=r)d=o(e,s,s+r,a),this.imuln(c),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d);if(0!==i){var b=1;for(d=o(e,s,e.length,a),s=0;s<i;s++)b*=a;this.imuln(b),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d)}},n.prototype.copy=function(e){e.words=new Array(this.length);for(var a=0;a<this.length;a++)e.words[a]=this.words[a];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var d=["","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],b=[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 u(e,a,t){t.negative=a.negative^e.negative;var r=e.length+a.length|0;t.length=r,r=r-1|0;var c=0|e.words[0],n=0|a.words[0],i=c*n,f=67108863&i,o=i/67108864|0;t.words[0]=f;for(var d=1;d<r;d++){for(var s=o>>>26,b=67108863&o,u=Math.min(d,a.length-1),l=Math.max(0,d-e.length+1);l<=u;l++){var p=d-l|0;s+=(i=(c=0|e.words[p])*(n=0|a.words[l])+b)/67108864|0,b=67108863&i}t.words[d]=0|b,o=0|s}return 0!==o?t.words[d]=0|o:t.length--,t.strip()}n.prototype.toString=function(e,a){var t;if(e=e||10,a=0|a||1,16===e||"hex"===e){t="";for(var c=0,n=0,i=0;i<this.length;i++){var f=this.words[i],o=(16777215&(f<<c|n)).toString(16);t=0!==(n=f>>>24-c&16777215)||i!==this.length-1?d[6-o.length]+o+t:o+t,(c+=2)>=26&&(c-=26,i--)}for(0!==n&&(t=n.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 u=s[e],l=b[e];t="";var p=this.clone();for(p.negative=0;!p.isZero();){var h=p.modn(l).toString(e);t=(p=p.idivn(l)).isZero()?h+t:d[u-h.length]+h+t}for(this.isZero()&&(t="0"+t);t.length%a!=0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}r(!1,"Base should be between 2 and 36")},n.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>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,a){return r(void 0!==i),this.toArrayLike(i,e,a)},n.prototype.toArray=function(e,a){return this.toArrayLike(Array,e,a)},n.prototype.toArrayLike=function(e,a,t){var c=this.byteLength(),n=t||Math.max(1,c);r(c<=n,"byte array longer than desired length"),r(n>0,"Requested array length <= 0"),this.strip();var i,f,o="le"===a,d=new e(n),s=this.clone();if(o){for(f=0;!s.isZero();f++)i=s.andln(255),s.iushrn(8),d[f]=i;for(;f<n;f++)d[f]=0}else{for(f=0;f<n-c;f++)d[f]=0;for(f=0;!s.isZero();f++)i=s.andln(255),s.iushrn(8),d[n-f-1]=i}return d},Math.clz32?n.prototype._countBits=function(e){return 32-Math.clz32(e)}:n.prototype._countBits=function(e){var a=e,t=0;return 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},n.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},n.prototype.bitLength=function(){var e=this.words[this.length-1],a=this._countBits(e);return 26*(this.length-1)+a},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,a=0;a<this.length;a++){var t=this._zeroBits(this.words[a]);if(e+=t,26!==t)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var a=0;a<e.length;a++)this.words[a]=this.words[a]|e.words[a];return this.strip()},n.prototype.ior=function(e){return r(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var a;a=this.length>e.length?e:this;for(var t=0;t<a.length;t++)this.words[t]=this.words[t]&e.words[t];return this.length=a.length,this.strip()},n.prototype.iand=function(e){return r(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var a,t;this.length>e.length?(a=this,t=e):(a=e,t=this);for(var r=0;r<t.length;r++)this.words[r]=a.words[r]^t.words[r];if(this!==a)for(;r<a.length;r++)this.words[r]=a.words[r];return this.length=a.length,this.strip()},n.prototype.ixor=function(e){return r(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){r("number"==typeof e&&e>=0);var a=0|Math.ceil(e/26),t=e%26;this._expand(a),t>0&&a--;for(var c=0;c<a;c++)this.words[c]=67108863&~this.words[c];return t>0&&(this.words[c]=~this.words[c]&67108863>>26-t),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,a){r("number"==typeof e&&e>=0);var t=e/26|0,c=e%26;return this._expand(t+1),this.words[t]=a?this.words[t]|1<<c:this.words[t]&~(1<<c),this.strip()},n.prototype.iadd=function(e){var a,t,r;if(0!==this.negative&&0===e.negative)return this.negative=0,a=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,a=this.isub(e),e.negative=1,a._normSign();this.length>e.length?(t=this,r=e):(t=e,r=this);for(var c=0,n=0;n<r.length;n++)a=(0|t.words[n])+(0|r.words[n])+c,this.words[n]=67108863&a,c=a>>>26;for(;0!==c&&n<t.length;n++)a=(0|t.words[n])+c,this.words[n]=67108863&a,c=a>>>26;if(this.length=t.length,0!==c)this.words[this.length]=c,this.length++;else if(t!==this)for(;n<t.length;n++)this.words[n]=t.words[n];return this},n.prototype.add=function(e){var a;return 0!==e.negative&&0===this.negative?(e.negative=0,a=this.sub(e),e.negative^=1,a):0===e.negative&&0!==this.negative?(this.negative=0,a=e.sub(this),this.negative=1,a):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.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,c=this.cmp(e);if(0===c)return this.negative=0,this.length=1,this.words[0]=0,this;c>0?(t=this,r=e):(t=e,r=this);for(var n=0,i=0;i<r.length;i++)n=(a=(0|t.words[i])-(0|r.words[i])+n)>>26,this.words[i]=67108863&a;for(;0!==n&&i<t.length;i++)n=(a=(0|t.words[i])+n)>>26,this.words[i]=67108863&a;if(0===n&&i<t.length&&t!==this)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=Math.max(this.length,i),t!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var l=function(e,a,t){var r,c,n,i=e.words,f=a.words,o=t.words,d=0,s=0|i[0],b=8191&s,u=s>>>13,l=0|i[1],p=8191&l,h=l>>>13,m=0|i[2],g=8191&m,v=m>>>13,y=0|i[3],_=8191&y,w=y>>>13,A=0|i[4],k=8191&A,x=A>>>13,E=0|i[5],S=8191&E,T=E>>>13,j=0|i[6],C=8191&j,R=j>>>13,O=0|i[7],B=8191&O,M=O>>>13,N=0|i[8],I=8191&N,P=N>>>13,F=0|i[9],L=8191&F,D=F>>>13,z=0|f[0],q=8191&z,U=z>>>13,H=0|f[1],V=8191&H,G=H>>>13,W=0|f[2],Y=8191&W,K=W>>>13,Q=0|f[3],Z=8191&Q,J=Q>>>13,X=0|f[4],$=8191&X,ee=X>>>13,ae=0|f[5],te=8191&ae,re=ae>>>13,ce=0|f[6],ne=8191&ce,ie=ce>>>13,fe=0|f[7],oe=8191&fe,de=fe>>>13,se=0|f[8],be=8191&se,ue=se>>>13,le=0|f[9],pe=8191&le,he=le>>>13;t.negative=e.negative^a.negative,t.length=19;var me=(d+(r=Math.imul(b,q))|0)+((8191&(c=(c=Math.imul(b,U))+Math.imul(u,q)|0))<<13)|0;d=((n=Math.imul(u,U))+(c>>>13)|0)+(me>>>26)|0,me&=67108863,r=Math.imul(p,q),c=(c=Math.imul(p,U))+Math.imul(h,q)|0,n=Math.imul(h,U);var ge=(d+(r=r+Math.imul(b,V)|0)|0)+((8191&(c=(c=c+Math.imul(b,G)|0)+Math.imul(u,V)|0))<<13)|0;d=((n=n+Math.imul(u,G)|0)+(c>>>13)|0)+(ge>>>26)|0,ge&=67108863,r=Math.imul(g,q),c=(c=Math.imul(g,U))+Math.imul(v,q)|0,n=Math.imul(v,U),r=r+Math.imul(p,V)|0,c=(c=c+Math.imul(p,G)|0)+Math.imul(h,V)|0,n=n+Math.imul(h,G)|0;var ve=(d+(r=r+Math.imul(b,Y)|0)|0)+((8191&(c=(c=c+Math.imul(b,K)|0)+Math.imul(u,Y)|0))<<13)|0;d=((n=n+Math.imul(u,K)|0)+(c>>>13)|0)+(ve>>>26)|0,ve&=67108863,r=Math.imul(_,q),c=(c=Math.imul(_,U))+Math.imul(w,q)|0,n=Math.imul(w,U),r=r+Math.imul(g,V)|0,c=(c=c+Math.imul(g,G)|0)+Math.imul(v,V)|0,n=n+Math.imul(v,G)|0,r=r+Math.imul(p,Y)|0,c=(c=c+Math.imul(p,K)|0)+Math.imul(h,Y)|0,n=n+Math.imul(h,K)|0;var ye=(d+(r=r+Math.imul(b,Z)|0)|0)+((8191&(c=(c=c+Math.imul(b,J)|0)+Math.imul(u,Z)|0))<<13)|0;d=((n=n+Math.imul(u,J)|0)+(c>>>13)|0)+(ye>>>26)|0,ye&=67108863,r=Math.imul(k,q),c=(c=Math.imul(k,U))+Math.imul(x,q)|0,n=Math.imul(x,U),r=r+Math.imul(_,V)|0,c=(c=c+Math.imul(_,G)|0)+Math.imul(w,V)|0,n=n+Math.imul(w,G)|0,r=r+Math.imul(g,Y)|0,c=(c=c+Math.imul(g,K)|0)+Math.imul(v,Y)|0,n=n+Math.imul(v,K)|0,r=r+Math.imul(p,Z)|0,c=(c=c+Math.imul(p,J)|0)+Math.imul(h,Z)|0,n=n+Math.imul(h,J)|0;var _e=(d+(r=r+Math.imul(b,$)|0)|0)+((8191&(c=(c=c+Math.imul(b,ee)|0)+Math.imul(u,$)|0))<<13)|0;d=((n=n+Math.imul(u,ee)|0)+(c>>>13)|0)+(_e>>>26)|0,_e&=67108863,r=Math.imul(S,q),c=(c=Math.imul(S,U))+Math.imul(T,q)|0,n=Math.imul(T,U),r=r+Math.imul(k,V)|0,c=(c=c+Math.imul(k,G)|0)+Math.imul(x,V)|0,n=n+Math.imul(x,G)|0,r=r+Math.imul(_,Y)|0,c=(c=c+Math.imul(_,K)|0)+Math.imul(w,Y)|0,n=n+Math.imul(w,K)|0,r=r+Math.imul(g,Z)|0,c=(c=c+Math.imul(g,J)|0)+Math.imul(v,Z)|0,n=n+Math.imul(v,J)|0,r=r+Math.imul(p,$)|0,c=(c=c+Math.imul(p,ee)|0)+Math.imul(h,$)|0,n=n+Math.imul(h,ee)|0;var we=(d+(r=r+Math.imul(b,te)|0)|0)+((8191&(c=(c=c+Math.imul(b,re)|0)+Math.imul(u,te)|0))<<13)|0;d=((n=n+Math.imul(u,re)|0)+(c>>>13)|0)+(we>>>26)|0,we&=67108863,r=Math.imul(C,q),c=(c=Math.imul(C,U))+Math.imul(R,q)|0,n=Math.imul(R,U),r=r+Math.imul(S,V)|0,c=(c=c+Math.imul(S,G)|0)+Math.imul(T,V)|0,n=n+Math.imul(T,G)|0,r=r+Math.imul(k,Y)|0,c=(c=c+Math.imul(k,K)|0)+Math.imul(x,Y)|0,n=n+Math.imul(x,K)|0,r=r+Math.imul(_,Z)|0,c=(c=c+Math.imul(_,J)|0)+Math.imul(w,Z)|0,n=n+Math.imul(w,J)|0,r=r+Math.imul(g,$)|0,c=(c=c+Math.imul(g,ee)|0)+Math.imul(v,$)|0,n=n+Math.imul(v,ee)|0,r=r+Math.imul(p,te)|0,c=(c=c+Math.imul(p,re)|0)+Math.imul(h,te)|0,n=n+Math.imul(h,re)|0;var Ae=(d+(r=r+Math.imul(b,ne)|0)|0)+((8191&(c=(c=c+Math.imul(b,ie)|0)+Math.imul(u,ne)|0))<<13)|0;d=((n=n+Math.imul(u,ie)|0)+(c>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,r=Math.imul(B,q),c=(c=Math.imul(B,U))+Math.imul(M,q)|0,n=Math.imul(M,U),r=r+Math.imul(C,V)|0,c=(c=c+Math.imul(C,G)|0)+Math.imul(R,V)|0,n=n+Math.imul(R,G)|0,r=r+Math.imul(S,Y)|0,c=(c=c+Math.imul(S,K)|0)+Math.imul(T,Y)|0,n=n+Math.imul(T,K)|0,r=r+Math.imul(k,Z)|0,c=(c=c+Math.imul(k,J)|0)+Math.imul(x,Z)|0,n=n+Math.imul(x,J)|0,r=r+Math.imul(_,$)|0,c=(c=c+Math.imul(_,ee)|0)+Math.imul(w,$)|0,n=n+Math.imul(w,ee)|0,r=r+Math.imul(g,te)|0,c=(c=c+Math.imul(g,re)|0)+Math.imul(v,te)|0,n=n+Math.imul(v,re)|0,r=r+Math.imul(p,ne)|0,c=(c=c+Math.imul(p,ie)|0)+Math.imul(h,ne)|0,n=n+Math.imul(h,ie)|0;var ke=(d+(r=r+Math.imul(b,oe)|0)|0)+((8191&(c=(c=c+Math.imul(b,de)|0)+Math.imul(u,oe)|0))<<13)|0;d=((n=n+Math.imul(u,de)|0)+(c>>>13)|0)+(ke>>>26)|0,ke&=67108863,r=Math.imul(I,q),c=(c=Math.imul(I,U))+Math.imul(P,q)|0,n=Math.imul(P,U),r=r+Math.imul(B,V)|0,c=(c=c+Math.imul(B,G)|0)+Math.imul(M,V)|0,n=n+Math.imul(M,G)|0,r=r+Math.imul(C,Y)|0,c=(c=c+Math.imul(C,K)|0)+Math.imul(R,Y)|0,n=n+Math.imul(R,K)|0,r=r+Math.imul(S,Z)|0,c=(c=c+Math.imul(S,J)|0)+Math.imul(T,Z)|0,n=n+Math.imul(T,J)|0,r=r+Math.imul(k,$)|0,c=(c=c+Math.imul(k,ee)|0)+Math.imul(x,$)|0,n=n+Math.imul(x,ee)|0,r=r+Math.imul(_,te)|0,c=(c=c+Math.imul(_,re)|0)+Math.imul(w,te)|0,n=n+Math.imul(w,re)|0,r=r+Math.imul(g,ne)|0,c=(c=c+Math.imul(g,ie)|0)+Math.imul(v,ne)|0,n=n+Math.imul(v,ie)|0,r=r+Math.imul(p,oe)|0,c=(c=c+Math.imul(p,de)|0)+Math.imul(h,oe)|0,n=n+Math.imul(h,de)|0;var xe=(d+(r=r+Math.imul(b,be)|0)|0)+((8191&(c=(c=c+Math.imul(b,ue)|0)+Math.imul(u,be)|0))<<13)|0;d=((n=n+Math.imul(u,ue)|0)+(c>>>13)|0)+(xe>>>26)|0,xe&=67108863,r=Math.imul(L,q),c=(c=Math.imul(L,U))+Math.imul(D,q)|0,n=Math.imul(D,U),r=r+Math.imul(I,V)|0,c=(c=c+Math.imul(I,G)|0)+Math.imul(P,V)|0,n=n+Math.imul(P,G)|0,r=r+Math.imul(B,Y)|0,c=(c=c+Math.imul(B,K)|0)+Math.imul(M,Y)|0,n=n+Math.imul(M,K)|0,r=r+Math.imul(C,Z)|0,c=(c=c+Math.imul(C,J)|0)+Math.imul(R,Z)|0,n=n+Math.imul(R,J)|0,r=r+Math.imul(S,$)|0,c=(c=c+Math.imul(S,ee)|0)+Math.imul(T,$)|0,n=n+Math.imul(T,ee)|0,r=r+Math.imul(k,te)|0,c=(c=c+Math.imul(k,re)|0)+Math.imul(x,te)|0,n=n+Math.imul(x,re)|0,r=r+Math.imul(_,ne)|0,c=(c=c+Math.imul(_,ie)|0)+Math.imul(w,ne)|0,n=n+Math.imul(w,ie)|0,r=r+Math.imul(g,oe)|0,c=(c=c+Math.imul(g,de)|0)+Math.imul(v,oe)|0,n=n+Math.imul(v,de)|0,r=r+Math.imul(p,be)|0,c=(c=c+Math.imul(p,ue)|0)+Math.imul(h,be)|0,n=n+Math.imul(h,ue)|0;var Ee=(d+(r=r+Math.imul(b,pe)|0)|0)+((8191&(c=(c=c+Math.imul(b,he)|0)+Math.imul(u,pe)|0))<<13)|0;d=((n=n+Math.imul(u,he)|0)+(c>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,r=Math.imul(L,V),c=(c=Math.imul(L,G))+Math.imul(D,V)|0,n=Math.imul(D,G),r=r+Math.imul(I,Y)|0,c=(c=c+Math.imul(I,K)|0)+Math.imul(P,Y)|0,n=n+Math.imul(P,K)|0,r=r+Math.imul(B,Z)|0,c=(c=c+Math.imul(B,J)|0)+Math.imul(M,Z)|0,n=n+Math.imul(M,J)|0,r=r+Math.imul(C,$)|0,c=(c=c+Math.imul(C,ee)|0)+Math.imul(R,$)|0,n=n+Math.imul(R,ee)|0,r=r+Math.imul(S,te)|0,c=(c=c+Math.imul(S,re)|0)+Math.imul(T,te)|0,n=n+Math.imul(T,re)|0,r=r+Math.imul(k,ne)|0,c=(c=c+Math.imul(k,ie)|0)+Math.imul(x,ne)|0,n=n+Math.imul(x,ie)|0,r=r+Math.imul(_,oe)|0,c=(c=c+Math.imul(_,de)|0)+Math.imul(w,oe)|0,n=n+Math.imul(w,de)|0,r=r+Math.imul(g,be)|0,c=(c=c+Math.imul(g,ue)|0)+Math.imul(v,be)|0,n=n+Math.imul(v,ue)|0;var Se=(d+(r=r+Math.imul(p,pe)|0)|0)+((8191&(c=(c=c+Math.imul(p,he)|0)+Math.imul(h,pe)|0))<<13)|0;d=((n=n+Math.imul(h,he)|0)+(c>>>13)|0)+(Se>>>26)|0,Se&=67108863,r=Math.imul(L,Y),c=(c=Math.imul(L,K))+Math.imul(D,Y)|0,n=Math.imul(D,K),r=r+Math.imul(I,Z)|0,c=(c=c+Math.imul(I,J)|0)+Math.imul(P,Z)|0,n=n+Math.imul(P,J)|0,r=r+Math.imul(B,$)|0,c=(c=c+Math.imul(B,ee)|0)+Math.imul(M,$)|0,n=n+Math.imul(M,ee)|0,r=r+Math.imul(C,te)|0,c=(c=c+Math.imul(C,re)|0)+Math.imul(R,te)|0,n=n+Math.imul(R,re)|0,r=r+Math.imul(S,ne)|0,c=(c=c+Math.imul(S,ie)|0)+Math.imul(T,ne)|0,n=n+Math.imul(T,ie)|0,r=r+Math.imul(k,oe)|0,c=(c=c+Math.imul(k,de)|0)+Math.imul(x,oe)|0,n=n+Math.imul(x,de)|0,r=r+Math.imul(_,be)|0,c=(c=c+Math.imul(_,ue)|0)+Math.imul(w,be)|0,n=n+Math.imul(w,ue)|0;var Te=(d+(r=r+Math.imul(g,pe)|0)|0)+((8191&(c=(c=c+Math.imul(g,he)|0)+Math.imul(v,pe)|0))<<13)|0;d=((n=n+Math.imul(v,he)|0)+(c>>>13)|0)+(Te>>>26)|0,Te&=67108863,r=Math.imul(L,Z),c=(c=Math.imul(L,J))+Math.imul(D,Z)|0,n=Math.imul(D,J),r=r+Math.imul(I,$)|0,c=(c=c+Math.imul(I,ee)|0)+Math.imul(P,$)|0,n=n+Math.imul(P,ee)|0,r=r+Math.imul(B,te)|0,c=(c=c+Math.imul(B,re)|0)+Math.imul(M,te)|0,n=n+Math.imul(M,re)|0,r=r+Math.imul(C,ne)|0,c=(c=c+Math.imul(C,ie)|0)+Math.imul(R,ne)|0,n=n+Math.imul(R,ie)|0,r=r+Math.imul(S,oe)|0,c=(c=c+Math.imul(S,de)|0)+Math.imul(T,oe)|0,n=n+Math.imul(T,de)|0,r=r+Math.imul(k,be)|0,c=(c=c+Math.imul(k,ue)|0)+Math.imul(x,be)|0,n=n+Math.imul(x,ue)|0;var je=(d+(r=r+Math.imul(_,pe)|0)|0)+((8191&(c=(c=c+Math.imul(_,he)|0)+Math.imul(w,pe)|0))<<13)|0;d=((n=n+Math.imul(w,he)|0)+(c>>>13)|0)+(je>>>26)|0,je&=67108863,r=Math.imul(L,$),c=(c=Math.imul(L,ee))+Math.imul(D,$)|0,n=Math.imul(D,ee),r=r+Math.imul(I,te)|0,c=(c=c+Math.imul(I,re)|0)+Math.imul(P,te)|0,n=n+Math.imul(P,re)|0,r=r+Math.imul(B,ne)|0,c=(c=c+Math.imul(B,ie)|0)+Math.imul(M,ne)|0,n=n+Math.imul(M,ie)|0,r=r+Math.imul(C,oe)|0,c=(c=c+Math.imul(C,de)|0)+Math.imul(R,oe)|0,n=n+Math.imul(R,de)|0,r=r+Math.imul(S,be)|0,c=(c=c+Math.imul(S,ue)|0)+Math.imul(T,be)|0,n=n+Math.imul(T,ue)|0;var Ce=(d+(r=r+Math.imul(k,pe)|0)|0)+((8191&(c=(c=c+Math.imul(k,he)|0)+Math.imul(x,pe)|0))<<13)|0;d=((n=n+Math.imul(x,he)|0)+(c>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,r=Math.imul(L,te),c=(c=Math.imul(L,re))+Math.imul(D,te)|0,n=Math.imul(D,re),r=r+Math.imul(I,ne)|0,c=(c=c+Math.imul(I,ie)|0)+Math.imul(P,ne)|0,n=n+Math.imul(P,ie)|0,r=r+Math.imul(B,oe)|0,c=(c=c+Math.imul(B,de)|0)+Math.imul(M,oe)|0,n=n+Math.imul(M,de)|0,r=r+Math.imul(C,be)|0,c=(c=c+Math.imul(C,ue)|0)+Math.imul(R,be)|0,n=n+Math.imul(R,ue)|0;var Re=(d+(r=r+Math.imul(S,pe)|0)|0)+((8191&(c=(c=c+Math.imul(S,he)|0)+Math.imul(T,pe)|0))<<13)|0;d=((n=n+Math.imul(T,he)|0)+(c>>>13)|0)+(Re>>>26)|0,Re&=67108863,r=Math.imul(L,ne),c=(c=Math.imul(L,ie))+Math.imul(D,ne)|0,n=Math.imul(D,ie),r=r+Math.imul(I,oe)|0,c=(c=c+Math.imul(I,de)|0)+Math.imul(P,oe)|0,n=n+Math.imul(P,de)|0,r=r+Math.imul(B,be)|0,c=(c=c+Math.imul(B,ue)|0)+Math.imul(M,be)|0,n=n+Math.imul(M,ue)|0;var Oe=(d+(r=r+Math.imul(C,pe)|0)|0)+((8191&(c=(c=c+Math.imul(C,he)|0)+Math.imul(R,pe)|0))<<13)|0;d=((n=n+Math.imul(R,he)|0)+(c>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,r=Math.imul(L,oe),c=(c=Math.imul(L,de))+Math.imul(D,oe)|0,n=Math.imul(D,de),r=r+Math.imul(I,be)|0,c=(c=c+Math.imul(I,ue)|0)+Math.imul(P,be)|0,n=n+Math.imul(P,ue)|0;var Be=(d+(r=r+Math.imul(B,pe)|0)|0)+((8191&(c=(c=c+Math.imul(B,he)|0)+Math.imul(M,pe)|0))<<13)|0;d=((n=n+Math.imul(M,he)|0)+(c>>>13)|0)+(Be>>>26)|0,Be&=67108863,r=Math.imul(L,be),c=(c=Math.imul(L,ue))+Math.imul(D,be)|0,n=Math.imul(D,ue);var Me=(d+(r=r+Math.imul(I,pe)|0)|0)+((8191&(c=(c=c+Math.imul(I,he)|0)+Math.imul(P,pe)|0))<<13)|0;d=((n=n+Math.imul(P,he)|0)+(c>>>13)|0)+(Me>>>26)|0,Me&=67108863;var Ne=(d+(r=Math.imul(L,pe))|0)+((8191&(c=(c=Math.imul(L,he))+Math.imul(D,pe)|0))<<13)|0;return d=((n=Math.imul(D,he))+(c>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,o[0]=me,o[1]=ge,o[2]=ve,o[3]=ye,o[4]=_e,o[5]=we,o[6]=Ae,o[7]=ke,o[8]=xe,o[9]=Ee,o[10]=Se,o[11]=Te,o[12]=je,o[13]=Ce,o[14]=Re,o[15]=Oe,o[16]=Be,o[17]=Me,o[18]=Ne,0!==d&&(o[19]=d,t.length++),t};function p(e,a,t){return(new h).mulp(e,a,t)}function h(e,a){this.x=e,this.y=a}Math.imul||(l=u),n.prototype.mulTo=function(e,a){var t=this.length+e.length;return 10===this.length&&10===e.length?l(this,e,a):t<63?u(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,c=0,n=0;n<t.length-1;n++){var i=c;c=0;for(var f=67108863&r,o=Math.min(n,a.length-1),d=Math.max(0,n-e.length+1);d<=o;d++){var s=n-d,b=(0|e.words[s])*(0|a.words[d]),u=67108863&b;f=67108863&(u=u+f|0),c+=(i=(i=i+(b/67108864|0)|0)+(u>>>26)|0)>>>26,i&=67108863}t.words[n]=f,r=i,i=c}return 0!==r?t.words[n]=r:t.length--,t.strip()}(this,e,a):p(this,e,a)},h.prototype.makeRBT=function(e){for(var a=new Array(e),t=n.prototype._countBits(e)-1,r=0;r<e;r++)a[r]=this.revBin(r,t,e);return a},h.prototype.revBin=function(e,a,t){if(0===e||e===t-1)return e;for(var r=0,c=0;c<a;c++)r|=(1&e)<<a-c-1,e>>=1;return r},h.prototype.permute=function(e,a,t,r,c,n){for(var i=0;i<n;i++)r[i]=a[e[i]],c[i]=t[e[i]]},h.prototype.transform=function(e,a,t,r,c,n){this.permute(n,e,a,t,r,c);for(var i=1;i<c;i<<=1)for(var f=i<<1,o=Math.cos(2*Math.PI/f),d=Math.sin(2*Math.PI/f),s=0;s<c;s+=f)for(var b=o,u=d,l=0;l<i;l++){var p=t[s+l],h=r[s+l],m=t[s+l+i],g=r[s+l+i],v=b*m-u*g;g=b*g+u*m,m=v,t[s+l]=p+m,r[s+l]=h+g,t[s+l+i]=p-m,r[s+l+i]=h-g,l!==f&&(v=o*b-d*u,u=o*u+d*b,b=v)}},h.prototype.guessLen13b=function(e,a){var t=1|Math.max(a,e),r=1&t,c=0;for(t=t/2|0;t;t>>>=1)c++;return 1<<c+1+r},h.prototype.conjugate=function(e,a,t){if(!(t<=1))for(var r=0;r<t/2;r++){var c=e[r];e[r]=e[t-r-1],e[t-r-1]=c,c=a[r],a[r]=-a[t-r-1],a[t-r-1]=-c}},h.prototype.normalize13b=function(e,a){for(var t=0,r=0;r<a/2;r++){var c=8192*Math.round(e[2*r+1]/a)+Math.round(e[2*r]/a)+t;e[r]=67108863&c,t=c<67108864?0:c/67108864|0}return e},h.prototype.convert13b=function(e,a,t,c){for(var n=0,i=0;i<a;i++)n+=0|e[i],t[2*i]=8191&n,n>>>=13,t[2*i+1]=8191&n,n>>>=13;for(i=2*a;i<c;++i)t[i]=0;r(0===n),r(0==(-8192&n))},h.prototype.stub=function(e){for(var a=new Array(e),t=0;t<e;t++)a[t]=0;return a},h.prototype.mulp=function(e,a,t){var r=2*this.guessLen13b(e.length,a.length),c=this.makeRBT(r),n=this.stub(r),i=new Array(r),f=new Array(r),o=new Array(r),d=new Array(r),s=new Array(r),b=new Array(r),u=t.words;u.length=r,this.convert13b(e.words,e.length,i,r),this.convert13b(a.words,a.length,d,r),this.transform(i,n,f,o,r,c),this.transform(d,n,s,b,r,c);for(var l=0;l<r;l++){var p=f[l]*s[l]-o[l]*b[l];o[l]=f[l]*b[l]+o[l]*s[l],f[l]=p}return this.conjugate(f,o,r),this.transform(f,o,u,n,r,c),this.conjugate(u,n,r),this.normalize13b(u,r),t.negative=e.negative^a.negative,t.length=e.length+a.length,t.strip()},n.prototype.mul=function(e){var a=new n(null);return a.words=new Array(this.length+e.length),this.mulTo(e,a)},n.prototype.mulf=function(e){var a=new n(null);return a.words=new Array(this.length+e.length),p(this,e,a)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){r("number"==typeof e),r(e<67108864);for(var a=0,t=0;t<this.length;t++){var c=(0|this.words[t])*e,n=(67108863&c)+(67108863&a);a>>=26,a+=c/67108864|0,a+=n>>>26,this.words[t]=67108863&n}return 0!==a&&(this.words[t]=a,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var a=function(e){for(var a=new Array(e.bitLength()),t=0;t<a.length;t++){var r=t/26|0,c=t%26;a[t]=(e.words[r]&1<<c)>>>c}return a}(e);if(0===a.length)return new n(1);for(var t=this,r=0;r<a.length&&0===a[r];r++,t=t.sqr());if(++r<a.length)for(var c=t.sqr();r<a.length;r++,c=c.sqr())0!==a[r]&&(t=t.mul(c));return t},n.prototype.iushln=function(e){r("number"==typeof e&&e>=0);var a,t=e%26,c=(e-t)/26,n=67108863>>>26-t<<26-t;if(0!==t){var i=0;for(a=0;a<this.length;a++){var f=this.words[a]&n,o=(0|this.words[a])-f<<t;this.words[a]=o|i,i=f>>>26-t}i&&(this.words[a]=i,this.length++)}if(0!==c){for(a=this.length-1;a>=0;a--)this.words[a+c]=this.words[a];for(a=0;a<c;a++)this.words[a]=0;this.length+=c}return this.strip()},n.prototype.ishln=function(e){return r(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,a,t){var c;r("number"==typeof e&&e>=0),c=a?(a-a%26)/26:0;var n=e%26,i=Math.min((e-n)/26,this.length),f=67108863^67108863>>>n<<n,o=t;if(c-=i,c=Math.max(0,c),o){for(var d=0;d<i;d++)o.words[d]=this.words[d];o.length=i}if(0===i);else if(this.length>i)for(this.length-=i,d=0;d<this.length;d++)this.words[d]=this.words[d+i];else this.words[0]=0,this.length=1;var s=0;for(d=this.length-1;d>=0&&(0!==s||d>=c);d--){var b=0|this.words[d];this.words[d]=s<<26-n|b>>>n,s=b&f}return o&&0!==s&&(o.words[o.length++]=s),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,a,t){return r(0===this.negative),this.iushrn(e,a,t)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){r("number"==typeof e&&e>=0);var a=e%26,t=(e-a)/26,c=1<<a;return!(this.length<=t)&&!!(this.words[t]&c)},n.prototype.imaskn=function(e){r("number"==typeof e&&e>=0);var a=e%26,t=(e-a)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=t)return this;if(0!==a&&t++,this.length=Math.min(t,this.length),0!==a){var c=67108863^67108863>>>a<<a;this.words[this.length-1]&=c}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return r("number"==typeof e),r(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var a=0;a<this.length&&this.words[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},n.prototype.isubn=function(e){if(r("number"==typeof e),r(e<67108864),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<this.length&&this.words[a]<0;a++)this.words[a]+=67108864,this.words[a+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,a,t){var c,n,i=e.length+t;this._expand(i);var f=0;for(c=0;c<e.length;c++){n=(0|this.words[c+t])+f;var o=(0|e.words[c])*a;f=((n-=67108863&o)>>26)-(o/67108864|0),this.words[c+t]=67108863&n}for(;c<this.length-t;c++)f=(n=(0|this.words[c+t])+f)>>26,this.words[c+t]=67108863&n;if(0===f)return this.strip();for(r(-1===f),f=0,c=0;c<this.length;c++)f=(n=-(0|this.words[c])+f)>>26,this.words[c]=67108863&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,a){var t=(this.length,e.length),r=this.clone(),c=e,i=0|c.words[c.length-1];0!==(t=26-this._countBits(i))&&(c=c.ushln(t),r.iushln(t),i=0|c.words[c.length-1]);var f,o=r.length-c.length;if("mod"!==a){(f=new n(null)).length=o+1,f.words=new Array(f.length);for(var d=0;d<f.length;d++)f.words[d]=0}var s=r.clone()._ishlnsubmul(c,1,o);0===s.negative&&(r=s,f&&(f.words[o]=1));for(var b=o-1;b>=0;b--){var u=67108864*(0|r.words[c.length+b])+(0|r.words[c.length+b-1]);for(u=Math.min(u/i|0,67108863),r._ishlnsubmul(c,u,b);0!==r.negative;)u--,r.negative=0,r._ishlnsubmul(c,1,b),r.isZero()||(r.negative^=1);f&&(f.words[b]=u)}return f&&f.strip(),r.strip(),"div"!==a&&0!==t&&r.iushrn(t),{div:f||null,mod:r}},n.prototype.divmod=function(e,a,t){return r(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(f=this.neg().divmod(e,a),"mod"!==a&&(c=f.div.neg()),"div"!==a&&(i=f.mod.neg(),t&&0!==i.negative&&i.iadd(e)),{div:c,mod:i}):0===this.negative&&0!==e.negative?(f=this.divmod(e.neg(),a),"mod"!==a&&(c=f.div.neg()),{div:c,mod:f.mod}):0!=(this.negative&e.negative)?(f=this.neg().divmod(e.neg(),a),"div"!==a&&(i=f.mod.neg(),t&&0!==i.negative&&i.isub(e)),{div:f.div,mod:i}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===a?{div:this.divn(e.words[0]),mod:null}:"mod"===a?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,a);var c,i,f},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.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),c=e.andln(1),n=t.cmp(r);return n<0||1===c&&0===n?a.div:0!==a.div.negative?a.div.isubn(1):a.div.iaddn(1)},n.prototype.modn=function(e){r(e<=67108863);for(var a=(1<<26)%e,t=0,c=this.length-1;c>=0;c--)t=(a*t+(0|this.words[c]))%e;return t},n.prototype.idivn=function(e){r(e<=67108863);for(var a=0,t=this.length-1;t>=0;t--){var c=(0|this.words[t])+67108864*a;this.words[t]=c/e|0,a=c%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){r(0===e.negative),r(!e.isZero());var a=this,t=e.clone();a=0!==a.negative?a.umod(e):a.clone();for(var c=new n(1),i=new n(0),f=new n(0),o=new n(1),d=0;a.isEven()&&t.isEven();)a.iushrn(1),t.iushrn(1),++d;for(var s=t.clone(),b=a.clone();!a.isZero();){for(var u=0,l=1;0==(a.words[0]&l)&&u<26;++u,l<<=1);if(u>0)for(a.iushrn(u);u-- >0;)(c.isOdd()||i.isOdd())&&(c.iadd(s),i.isub(b)),c.iushrn(1),i.iushrn(1);for(var p=0,h=1;0==(t.words[0]&h)&&p<26;++p,h<<=1);if(p>0)for(t.iushrn(p);p-- >0;)(f.isOdd()||o.isOdd())&&(f.iadd(s),o.isub(b)),f.iushrn(1),o.iushrn(1);a.cmp(t)>=0?(a.isub(t),c.isub(f),i.isub(o)):(t.isub(a),f.isub(c),o.isub(i))}return{a:f,b:o,gcd:t.iushln(d)}},n.prototype._invmp=function(e){r(0===e.negative),r(!e.isZero());var a=this,t=e.clone();a=0!==a.negative?a.umod(e):a.clone();for(var c,i=new n(1),f=new n(0),o=t.clone();a.cmpn(1)>0&&t.cmpn(1)>0;){for(var d=0,s=1;0==(a.words[0]&s)&&d<26;++d,s<<=1);if(d>0)for(a.iushrn(d);d-- >0;)i.isOdd()&&i.iadd(o),i.iushrn(1);for(var b=0,u=1;0==(t.words[0]&u)&&b<26;++b,u<<=1);if(b>0)for(t.iushrn(b);b-- >0;)f.isOdd()&&f.iadd(o),f.iushrn(1);a.cmp(t)>=0?(a.isub(t),i.isub(f)):(t.isub(a),f.isub(i))}return(c=0===a.cmpn(1)?i:f).cmpn(0)<0&&c.iadd(e),c},n.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 c=a.cmp(t);if(c<0){var n=a;a=t,t=n}else if(0===c||0===t.cmpn(1))break;a.isub(t)}return t.iushln(r)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){r("number"==typeof e);var a=e%26,t=(e-a)/26,c=1<<a;if(this.length<=t)return this._expand(t+1),this.words[t]|=c,this;for(var n=c,i=t;0!==n&&i<this.length;i++){var f=0|this.words[i];n=(f+=n)>>>26,f&=67108863,this.words[i]=f}return 0!==n&&(this.words[i]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.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),r(e<=67108863,"Number is too big");var c=0|this.words[0];a=c===e?0:c<e?-1:1}return 0!==this.negative?0|-a:a},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var a=this.ucmp(e);return 0!==this.negative?0|-a:a},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var a=0,t=this.length-1;t>=0;t--){var r=0|this.words[t],c=0|e.words[t];if(r!==c){r<c?a=-1:r>c&&(a=1);break}}return a},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new A(e)},n.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};function g(e,a){this.name=e,this.p=new n(a,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){g.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){g.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){g.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){g.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function A(e){if("string"==typeof e){var a=n._prime(e);this.m=a.p,this.prime=a}else r(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function k(e){A.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(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)}g.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},g.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=a<this.n?-1:t.ucmp(this.p);return 0===r?(t.words[0]=0,t.length=1):r>0?t.isub(this.p):t.strip(),t},g.prototype.split=function(e,a){e.iushrn(this.n,0,a)},g.prototype.imulK=function(e){return e.imul(this.k)},c(v,g),v.prototype.split=function(e,a){for(var t=Math.min(e.length,9),r=0;r<t;r++)a.words[r]=e.words[r];if(a.length=t,e.length<=9)return e.words[0]=0,void(e.length=1);var c=e.words[9];for(a.words[a.length++]=4194303&c,r=10;r<e.length;r++){var n=0|e.words[r];e.words[r-10]=(4194303&n)<<4|c>>>22,c=n}c>>>=22,e.words[r-10]=c,0===c&&e.length>10?e.length-=10:e.length-=9},v.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<e.length;t++){var r=0|e.words[t];a+=977*r,e.words[t]=67108863&a,a=64*r+(a/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},c(y,g),c(_,g),c(w,g),w.prototype.imulK=function(e){for(var a=0,t=0;t<e.length;t++){var r=19*(0|e.words[t])+a,c=67108863&r;r>>>=26,e.words[t]=c,a=r}return 0!==a&&(e.words[e.length++]=a),e},n._prime=function(e){if(m[e])return m[e];var a;if("k256"===e)a=new v;else if("p224"===e)a=new y;else if("p192"===e)a=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);a=new w}return m[e]=a,a},A.prototype._verify1=function(e){r(0===e.negative,"red works only with positives"),r(e.red,"red works only with red numbers")},A.prototype._verify2=function(e,a){r(0==(e.negative|a.negative),"red works only with positives"),r(e.red&&e.red===a.red,"red works only with red numbers")},A.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},A.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},A.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)},A.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},A.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)},A.prototype.isub=function(e,a){this._verify2(e,a);var t=e.isub(a);return t.cmpn(0)<0&&t.iadd(this.m),t},A.prototype.shl=function(e,a){return this._verify1(e),this.imod(e.ushln(a))},A.prototype.imul=function(e,a){return this._verify2(e,a),this.imod(e.imul(a))},A.prototype.mul=function(e,a){return this._verify2(e,a),this.imod(e.mul(a))},A.prototype.isqr=function(e){return this.imul(e,e.clone())},A.prototype.sqr=function(e){return this.mul(e,e)},A.prototype.sqrt=function(e){if(e.isZero())return e.clone();var a=this.m.andln(3);if(r(a%2==1),3===a){var t=this.m.add(new n(1)).iushrn(2);return this.pow(e,t)}for(var c=this.m.subn(1),i=0;!c.isZero()&&0===c.andln(1);)i++,c.iushrn(1);r(!c.isZero());var f=new n(1).toRed(this),o=f.redNeg(),d=this.m.subn(1).iushrn(1),s=this.m.bitLength();for(s=new n(2*s*s).toRed(this);0!==this.pow(s,d).cmp(o);)s.redIAdd(o);for(var b=this.pow(s,c),u=this.pow(e,c.addn(1).iushrn(1)),l=this.pow(e,c),p=i;0!==l.cmp(f);){for(var h=l,m=0;0!==h.cmp(f);m++)h=h.redSqr();r(m<p);var g=this.pow(b,new n(1).iushln(p-m-1));u=u.redMul(g),b=g.redSqr(),l=l.redMul(b),p=m}return u},A.prototype.invm=function(e){var a=e._invmp(this.m);return 0!==a.negative?(a.negative=0,this.imod(a).redNeg()):this.imod(a)},A.prototype.pow=function(e,a){if(a.isZero())return new n(1);if(0===a.cmpn(1))return e.clone();var t=new Array(16);t[0]=new n(1).toRed(this),t[1]=e;for(var r=2;r<t.length;r++)t[r]=this.mul(t[r-1],e);var c=t[0],i=0,f=0,o=a.bitLength()%26;for(0===o&&(o=26),r=a.length-1;r>=0;r--){for(var d=a.words[r],s=o-1;s>=0;s--){var b=d>>s&1;c!==t[0]&&(c=this.sqr(c)),0!==b||0!==i?(i<<=1,i|=b,(4===++f||0===r&&0===s)&&(c=this.mul(c,t[i]),f=0,i=0)):f=0}o=26}return c},A.prototype.convertTo=function(e){var a=e.umod(this.m);return a===e?a.clone():a},A.prototype.convertFrom=function(e){var a=e.clone();return a.red=null,a},n.mont=function(e){return new k(e)},c(k,A),k.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},k.prototype.convertFrom=function(e){var a=this.imod(e.mul(this.rinv));return a.red=null,a},k.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),c=t.isub(r).iushrn(this.shift),n=c;return c.cmp(this.m)>=0?n=c.isub(this.m):c.cmpn(0)<0&&(n=c.iadd(this.m)),n._forceRed(this)},k.prototype.mul=function(e,a){if(e.isZero()||a.isZero())return new n(0)._forceRed(this);var t=e.mul(a),r=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),c=t.isub(r).iushrn(this.shift),i=c;return c.cmp(this.m)>=0?i=c.isub(this.m):c.cmpn(0)<0&&(i=c.iadd(this.m)),i._forceRed(this)},k.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===e||e,this)}).call(this,t(25)(e))},function(e,a){e.exports=__webpack_require__(7)},function(e,a){e.exports=__webpack_require__(11)},function(e,a,t){"use strict";var r=t(67),c="undefined"==typeof navigator,n=function(){try{var e={};return r.defineProperty(e,"f",{get:function(){return 3}}),3===e.f}catch(e){return!1}}(),i={e:{}},f;function o(){try{var e=f;return f=null,e.apply(this,arguments)}catch(e){return i.e=e,i}}function d(e){return f=e,o}var s=function(e,a){var t={}.hasOwnProperty;function r(){for(var r in this.constructor=e,this.constructor$=a,a.prototype)t.call(a.prototype,r)&&"$"!==r.charAt(r.length-1)&&(this[r+"$"]=a.prototype[r])}return r.prototype=a.prototype,e.prototype=new r,e.prototype};function b(e){return null==e||!0===e||!1===e||"string"==typeof e||"number"==typeof e}function u(e){return!b(e)}function l(e){return b(e)?new Error(E(e)):e}function p(e,a){var t,r=e.length,c=new Array(r+1);for(t=0;t<r;++t)c[t]=e[t];return c[t]=a,c}function h(e,a,t){if(!r.isES5)return{}.hasOwnProperty.call(e,a)?e[a]:void 0;var c=Object.getOwnPropertyDescriptor(e,a);return null!=c?null==c.get&&null==c.set?c.value:t:void 0}function m(e,a,t){if(b(e))return e;var c={value:t,configurable:!0,enumerable:!1,writable:!0};return r.defineProperty(e,a,c),e}function g(e){throw e}var v=function(){var e=[Array.prototype,Object.prototype,Function.prototype],a=function(a){for(var t=0;t<e.length;++t)if(e[t]===a)return!0;return!1};if(r.isES5){var t=Object.getOwnPropertyNames;return function(e){for(var c=[],n=Object.create(null);null!=e&&!a(e);){var i;try{i=t(e)}catch(e){return c}for(var f=0;f<i.length;++f){var o=i[f];if(!n[o]){n[o]=!0;var d=Object.getOwnPropertyDescriptor(e,o);null!=d&&null==d.get&&null==d.set&&c.push(o)}}e=r.getPrototypeOf(e)}return c}}var c={}.hasOwnProperty;return function(t){if(a(t))return[];var r=[];e:for(var n in t)if(c.call(t,n))r.push(n);else{for(var i=0;i<e.length;++i)if(c.call(e[i],n))continue e;r.push(n)}return r}}(),y=/this\s*\.\s*\S+\s*=/;function _(e){try{if("function"==typeof e){var a=r.names(e.prototype),t=r.isES5&&a.length>1,c=a.length>0&&!(1===a.length&&"constructor"===a[0]),n=y.test(e+"")&&r.names(e).length>0;if(t||c||n)return!0}return!1}catch(e){return!1}}function w(e){function a(){}a.prototype=e;for(var t=8;t--;)new a;return e}var A=/^[a-z$_][a-z$_0-9]*$/i;function k(e){return A.test(e)}function x(e,a,t){for(var r=new Array(e),c=0;c<e;++c)r[c]=a+c+t;return r}function E(e){try{return e+""}catch(e){return"[no string representation]"}}function S(e){try{m(e,"isOperational",!0)}catch(e){}}function T(e){return null!=e&&(e instanceof Error.__BluebirdErrorTypes__.OperationalError||!0===e.isOperational)}function j(e){return e instanceof Error&&r.propertyIsWritable(e,"stack")}var C="stack"in new Error?function(e){return j(e)?e:new Error(E(e))}:function(e){if(j(e))return e;try{throw new Error(E(e))}catch(e){return e}};function R(e){return{}.toString.call(e)}function O(e,a,t){for(var c=r.names(e),n=0;n<c.length;++n){var i=c[n];if(t(i))try{r.defineProperty(a,i,r.getDescriptor(e,i))}catch(e){}}}var B={isClass:_,isIdentifier:k,inheritedDataKeys:v,getDataPropertyOrDefault:h,thrower:g,isArray:r.isArray,haveGetters:n,notEnumerableProp:m,isPrimitive:b,isObject:u,canEvaluate:c,errorObj:i,tryCatch:d,inherits:s,withAppended:p,maybeWrapAsError:l,toFastProperties:w,filledRange:x,toString:E,canAttachTrace:j,ensureErrorObject:C,originatesFromRejection:T,markAsOriginatingFromRejection:S,classString:R,copyDescriptors:O,hasDevTools:"undefined"!=typeof chrome&&chrome&&"function"==typeof chrome.loadTimes,isNode:"undefined"!=typeof process&&"[object process]"===R(process).toLowerCase()};B.isRecentNode=B.isNode&&function(){var e=process.versions.node.split(".").map(Number);return 0===e[0]&&e[1]>10||e[0]>0}(),B.isNode&&B.toFastProperties(process);try{throw new Error}catch(e){B.lastLineError=e}e.exports=B},function(e,a,t){"use strict";var r=t(57),c="undefined"==typeof navigator,n={e:{}},i,f="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0!==this?this:null;function o(){try{var e=i;return i=null,e.apply(this,arguments)}catch(e){return n.e=e,n}}function d(e){return i=e,o}var s=function(e,a){var t={}.hasOwnProperty;function r(){for(var r in this.constructor=e,this.constructor$=a,a.prototype)t.call(a.prototype,r)&&"$"!==r.charAt(r.length-1)&&(this[r+"$"]=a.prototype[r])}return r.prototype=a.prototype,e.prototype=new r,e.prototype};function b(e){return null==e||!0===e||!1===e||"string"==typeof e||"number"==typeof e}function u(e){return"function"==typeof e||"object"==typeof e&&null!==e}function l(e){return b(e)?new Error(E(e)):e}function p(e,a){var t,r=e.length,c=new Array(r+1);for(t=0;t<r;++t)c[t]=e[t];return c[t]=a,c}function h(e,a,t){if(!r.isES5)return{}.hasOwnProperty.call(e,a)?e[a]:void 0;var c=Object.getOwnPropertyDescriptor(e,a);return null!=c?null==c.get&&null==c.set?c.value:t:void 0}function m(e,a,t){if(b(e))return e;var c={value:t,configurable:!0,enumerable:!1,writable:!0};return r.defineProperty(e,a,c),e}function g(e){throw e}var v=function(){var e=[Array.prototype,Object.prototype,Function.prototype],a=function(a){for(var t=0;t<e.length;++t)if(e[t]===a)return!0;return!1};if(r.isES5){var t=Object.getOwnPropertyNames;return function(e){for(var c=[],n=Object.create(null);null!=e&&!a(e);){var i;try{i=t(e)}catch(e){return c}for(var f=0;f<i.length;++f){var o=i[f];if(!n[o]){n[o]=!0;var d=Object.getOwnPropertyDescriptor(e,o);null!=d&&null==d.get&&null==d.set&&c.push(o)}}e=r.getPrototypeOf(e)}return c}}var c={}.hasOwnProperty;return function(t){if(a(t))return[];var r=[];e:for(var n in t)if(c.call(t,n))r.push(n);else{for(var i=0;i<e.length;++i)if(c.call(e[i],n))continue e;r.push(n)}return r}}(),y=/this\s*\.\s*\S+\s*=/;function _(e){try{if("function"==typeof e){var a=r.names(e.prototype),t=r.isES5&&a.length>1,c=a.length>0&&!(1===a.length&&"constructor"===a[0]),n=y.test(e+"")&&r.names(e).length>0;if(t||c||n)return!0}return!1}catch(e){return!1}}function w(e){function a(){}a.prototype=e;for(var t=8;t--;)new a;return e}var A=/^[a-z$_][a-z$_0-9]*$/i;function k(e){return A.test(e)}function x(e,a,t){for(var r=new Array(e),c=0;c<e;++c)r[c]=a+c+t;return r}function E(e){try{return e+""}catch(e){return"[no string representation]"}}function S(e){return e instanceof Error||null!==e&&"object"==typeof e&&"string"==typeof e.message&&"string"==typeof e.name}function T(e){try{m(e,"isOperational",!0)}catch(e){}}function j(e){return null!=e&&(e instanceof Error.__BluebirdErrorTypes__.OperationalError||!0===e.isOperational)}function C(e){return S(e)&&r.propertyIsWritable(e,"stack")}var R="stack"in new Error?function(e){return C(e)?e:new Error(E(e))}:function(e){if(C(e))return e;try{throw new Error(E(e))}catch(e){return e}};function O(e){return{}.toString.call(e)}function B(e,a,t){for(var c=r.names(e),n=0;n<c.length;++n){var i=c[n];if(t(i))try{r.defineProperty(a,i,r.getDescriptor(e,i))}catch(e){}}}var M=function(e){return r.isArray(e)?e:null};if("undefined"!=typeof Symbol&&Symbol.iterator){var N="function"==typeof Array.from?function(e){return Array.from(e)}:function(e){for(var a,t=[],r=e[Symbol.iterator]();!(a=r.next()).done;)t.push(a.value);return t};M=function(e){return r.isArray(e)?e:null!=e&&"function"==typeof e[Symbol.iterator]?N(e):null}}var I="undefined"!=typeof process&&"[object process]"===O(process).toLowerCase(),P="undefined"!=typeof process&&void 0!==process.env;function F(e){return P?process.env[e]:void 0}function L(){if("function"==typeof Promise)try{var e=new Promise(function(){});if("[object Promise]"==={}.toString.call(e))return Promise}catch(e){}}function D(e,a){return e.bind(a)}var z={isClass:_,isIdentifier:k,inheritedDataKeys:v,getDataPropertyOrDefault:h,thrower:g,isArray:r.isArray,asArray:M,notEnumerableProp:m,isPrimitive:b,isObject:u,isError:S,canEvaluate:c,errorObj:n,tryCatch:d,inherits:s,withAppended:p,maybeWrapAsError:l,toFastProperties:w,filledRange:x,toString:E,canAttachTrace:C,ensureErrorObject:R,originatesFromRejection:j,markAsOriginatingFromRejection:T,classString:O,copyDescriptors:B,hasDevTools:"undefined"!=typeof chrome&&chrome&&"function"==typeof chrome.loadTimes,isNode:I,hasEnvVariables:P,env:F,global:f,getNativePromise:L,domainBind:D};z.isRecentNode=z.isNode&&function(){var e=process.versions.node.split(".").map(Number);return 0===e[0]&&e[1]>10||e[0]>0}(),z.isNode&&z.toFastProperties(process);try{throw new Error}catch(e){z.lastLineError=e}e.exports=z},function(e,a,t){var r=t(154),c=t(153),n=t(262);e.exports=function(e,a){if(null==e)return r;switch(typeof e){case"function":return void 0!==a?function(t,r,c){return e.call(a,t,r,c)}:e;case"object":return function(a){return n(a,e)};case"string":case"number":return c(e)}}},function(e,a){e.exports=__webpack_require__(1)},function(e,a,t){var r=t(55),c=t(152);e.exports=function(e,a,t){c(e,function(c,n){if(r(e,n))return a.call(t,e[n],n,e)})}},function(e,a){function t(e){return Object.prototype.toString.call(e)}a.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===t(e)},a.isBoolean=function(e){return"boolean"==typeof e},a.isNull=function(e){return null===e},a.isNullOrUndefined=function(e){return null==e},a.isNumber=function(e){return"number"==typeof e},a.isString=function(e){return"string"==typeof e},a.isSymbol=function(e){return"symbol"==typeof e},a.isUndefined=function(e){return void 0===e},a.isRegExp=function(e){return"[object RegExp]"===t(e)},a.isObject=function(e){return"object"==typeof e&&null!==e},a.isDate=function(e){return"[object Date]"===t(e)},a.isError=function(e){return"[object Error]"===t(e)||e instanceof Error},a.isFunction=function(e){return"function"==typeof e},a.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},a.isBuffer=Buffer.isBuffer},function(e,a,t){(function(e){!function(e,t){t(a)}(0,function(a){"use strict";function t(e,a){a|=0;for(var t=Math.max(e.length-a,0),r=Array(t),c=0;c<t;c++)r[c]=e[a+c];return r}var r=function(e){var a=t(arguments,1);return function(){var r=t(arguments);return e.apply(null,a.concat(r))}},c=function(e){return function(){var a=t(arguments),r=a.pop();e.call(this,a,r)}};function n(e){var a=typeof e;return null!=e&&("object"==a||"function"==a)}var i="function"==typeof setImmediate&&setImmediate,f="object"==typeof process&&"function"==typeof process.nextTick;function o(e){setTimeout(e,0)}function d(e){return function(a){var r=t(arguments,1);e(function(){a.apply(null,r)})}}var s=d(i?setImmediate:f?process.nextTick:o);function b(e){return c(function(a,t){var r;try{r=e.apply(this,a)}catch(e){return t(e)}n(r)&&"function"==typeof r.then?r.then(function(e){u(t,null,e)},function(e){u(t,e.message?e:new Error(e))}):t(null,r)})}function u(e,a,t){try{e(a,t)}catch(e){s(l,e)}}function l(e){throw e}var p="function"==typeof Symbol;function h(e){return p&&"AsyncFunction"===e[Symbol.toStringTag]}function m(e){return h(e)?b(e):e}function g(e){return function(a){var r=t(arguments,1),n=c(function(t,r){var c=this;return e(a,function(e,a){m(e).apply(c,t.concat(a))},r)});return r.length?n.apply(this,r):n}}var v="object"==typeof global&&global&&global.Object===Object&&global,y="object"==typeof self&&self&&self.Object===Object&&self,_=v||y||Function("return this")(),w=_.Symbol,A=Object.prototype,k=A.hasOwnProperty,x=A.toString,E=w?w.toStringTag:void 0;var S=Object.prototype.toString;var T="[object Null]",j="[object Undefined]",C=w?w.toStringTag:void 0;function R(e){return null==e?void 0===e?j:T:C&&C in Object(e)?function(e){var a=k.call(e,E),t=e[E];try{e[E]=void 0;var r=!0}catch(e){}var c=x.call(e);return r&&(a?e[E]=t:delete e[E]),c}(e):function(e){return S.call(e)}(e)}var O="[object AsyncFunction]",B="[object Function]",M="[object GeneratorFunction]",N="[object Proxy]";var I=9007199254740991;function P(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=I}function F(e){return null!=e&&P(e.length)&&!function(e){if(!n(e))return!1;var a=R(e);return a==B||a==M||a==O||a==N}(e)}var L={};function D(){}function z(e){return function(){if(null!==e){var a=e;e=null,a.apply(this,arguments)}}}var q="function"==typeof Symbol&&Symbol.iterator,U=function(e){return q&&e[q]&&e[q]()};function H(e){return null!=e&&"object"==typeof e}var V="[object Arguments]";function G(e){return H(e)&&R(e)==V}var W=Object.prototype,Y=W.hasOwnProperty,K=W.propertyIsEnumerable,Q=G(function(){return arguments}())?G:function(e){return H(e)&&Y.call(e,"callee")&&!K.call(e,"callee")},Z=Array.isArray;var J="object"==typeof a&&a&&!a.nodeType&&a,X=J&&"object"==typeof e&&e&&!e.nodeType&&e,$=X&&X.exports===J?_.Buffer:void 0,ee=($?$.isBuffer:void 0)||function(){return!1},ae=9007199254740991,te=/^(?:0|[1-9]\d*)$/;function re(e,a){var t=typeof e;return!!(a=null==a?ae:a)&&("number"==t||"symbol"!=t&&te.test(e))&&e>-1&&e%1==0&&e<a}var ce={};ce["[object Float32Array]"]=ce["[object Float64Array]"]=ce["[object Int8Array]"]=ce["[object Int16Array]"]=ce["[object Int32Array]"]=ce["[object Uint8Array]"]=ce["[object Uint8ClampedArray]"]=ce["[object Uint16Array]"]=ce["[object Uint32Array]"]=!0,ce["[object Arguments]"]=ce["[object Array]"]=ce["[object ArrayBuffer]"]=ce["[object Boolean]"]=ce["[object DataView]"]=ce["[object Date]"]=ce["[object Error]"]=ce["[object Function]"]=ce["[object Map]"]=ce["[object Number]"]=ce["[object Object]"]=ce["[object RegExp]"]=ce["[object Set]"]=ce["[object String]"]=ce["[object WeakMap]"]=!1;var ne="object"==typeof a&&a&&!a.nodeType&&a,ie=ne&&"object"==typeof e&&e&&!e.nodeType&&e,fe=ie&&ie.exports===ne&&v.process,oe=function(){try{var e=ie&&ie.require&&ie.require("util").types;return e||fe&&fe.binding&&fe.binding("util")}catch(e){}}(),de=oe&&oe.isTypedArray,se=de?function(e){return function(a){return e(a)}}(de):function(e){return H(e)&&P(e.length)&&!!ce[R(e)]},be=Object.prototype.hasOwnProperty;function ue(e,a){var t=Z(e),r=!t&&Q(e),c=!t&&!r&&ee(e),n=!t&&!r&&!c&&se(e),i=t||r||c||n,f=i?function(e,a){for(var t=-1,r=Array(e);++t<e;)r[t]=a(t);return r}(e.length,String):[],o=f.length;for(var d in e)!a&&!be.call(e,d)||i&&("length"==d||c&&("offset"==d||"parent"==d)||n&&("buffer"==d||"byteLength"==d||"byteOffset"==d)||re(d,o))||f.push(d);return f}var le=Object.prototype;var pe=function(e,a){return function(t){return e(a(t))}}(Object.keys,Object),he=Object.prototype.hasOwnProperty;function me(e){if(!function(e){var a=e&&e.constructor;return e===("function"==typeof a&&a.prototype||le)}(e))return pe(e);var a=[];for(var t in Object(e))he.call(e,t)&&"constructor"!=t&&a.push(t);return a}function ge(e){return F(e)?ue(e):me(e)}function ve(e){if(F(e))return function(e){var a=-1,t=e.length;return function(){return++a<t?{value:e[a],key:a}:null}}(e);var a=U(e);return a?function(e){var a=-1;return function(){var t=e.next();return t.done?null:(a++,{value:t.value,key:a})}}(a):function(e){var a=ge(e),t=-1,r=a.length;return function(){var c=a[++t];return t<r?{value:e[c],key:c}:null}}(e)}function ye(e){return function(){if(null===e)throw new Error("Callback was already called.");var a=e;e=null,a.apply(this,arguments)}}function _e(e){return function(a,t,r){if(r=z(r||D),e<=0||!a)return r(null);var c=ve(a),n=!1,i=0,f=!1;function o(e,a){if(i-=1,e)n=!0,r(e);else{if(a===L||n&&i<=0)return n=!0,r(null);f||d()}}function d(){for(f=!0;i<e&&!n;){var a=c();if(null===a)return n=!0,void(i<=0&&r(null));i+=1,t(a.value,a.key,ye(o))}f=!1}d()}}function we(e,a,t,r){_e(a)(e,m(t),r)}function Ae(e,a){return function(t,r,c){return e(t,a,r,c)}}function ke(e,a,t){t=z(t||D);var r=0,c=0,n=e.length;function i(e,a){e?t(e):++c!==n&&a!==L||t(null)}for(0===n&&t(null);r<n;r++)a(e[r],r,ye(i))}var xe=Ae(we,1/0),Ee=function(e,a,t){(F(e)?ke:xe)(e,m(a),t)};function Se(e){return function(a,t,r){return e(Ee,a,m(t),r)}}function Te(e,a,t,r){r=r||D,a=a||[];var c=[],n=0,i=m(t);e(a,function(e,a,t){var r=n++;i(e,function(e,a){c[r]=a,t(e)})},function(e){r(e,c)})}var je=Se(Te),Ce=g(je);function Re(e){return function(a,t,r,c){return e(_e(t),a,m(r),c)}}var Oe=Re(Te),Be=Ae(Oe,1),Me=g(Be);function Ne(e,a){for(var t=-1,r=null==e?0:e.length;++t<r&&!1!==a(e[t],t,e););return e}var Ie=function(e){return function(a,t,r){for(var c=-1,n=Object(a),i=r(a),f=i.length;f--;){var o=i[e?f:++c];if(!1===t(n[o],o,n))break}return a}}();function Pe(e,a){return e&&Ie(e,a,ge)}function Fe(e){return e!=e}function Le(e,a,t){return a==a?function(e,a,t){for(var r=t-1,c=e.length;++r<c;)if(e[r]===a)return r;return-1}(e,a,t):function(e,a,t,r){for(var c=e.length,n=t+(r?1:-1);r?n--:++n<c;)if(a(e[n],n,e))return n;return-1}(e,Fe,t)}var De=function(e,a,r){"function"==typeof a&&(r=a,a=null),r=z(r||D);var c=ge(e).length;if(!c)return r(null);a||(a=c);var n={},i=0,f=!1,o=Object.create(null),d=[],s=[],b={};function u(e,a){d.push(function(){!function(e,a){if(f)return;var c=ye(function(a,c){if(i--,arguments.length>2&&(c=t(arguments,1)),a){var d={};Pe(n,function(e,a){d[a]=e}),d[e]=c,f=!0,o=Object.create(null),r(a,d)}else n[e]=c,function(e){Ne(o[e]||[],function(e){e()}),l()}(e)});i++;var d=m(a[a.length-1]);a.length>1?d(n,c):d(c)}(e,a)})}function l(){if(0===d.length&&0===i)return r(null,n);for(;d.length&&i<a;){d.shift()()}}function p(a){var t=[];return Pe(e,function(e,r){Z(e)&&Le(e,a,0)>=0&&t.push(r)}),t}Pe(e,function(a,t){if(!Z(a))return u(t,[a]),void s.push(t);var r=a.slice(0,a.length-1),c=r.length;if(0===c)return u(t,a),void s.push(t);b[t]=c,Ne(r,function(n){if(!e[n])throw new Error("async.auto task `"+t+"` has a non-existent dependency `"+n+"` in "+r.join(", "));!function(e,a){var t=o[e];t||(t=o[e]=[]);t.push(a)}(n,function(){0===--c&&u(t,a)})})}),function(){var e,a=0;for(;s.length;)e=s.pop(),a++,Ne(p(e),function(e){0==--b[e]&&s.push(e)});if(a!==c)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}(),l()};function ze(e,a){for(var t=-1,r=null==e?0:e.length,c=Array(r);++t<r;)c[t]=a(e[t],t,e);return c}var qe="[object Symbol]";var Ue=1/0,He=w?w.prototype:void 0,Ve=He?He.toString:void 0;function Ge(e){if("string"==typeof e)return e;if(Z(e))return ze(e,Ge)+"";if(function(e){return"symbol"==typeof e||H(e)&&R(e)==qe}(e))return Ve?Ve.call(e):"";var a=e+"";return"0"==a&&1/e==-Ue?"-0":a}function We(e,a,t){var r=e.length;return t=void 0===t?r:t,!a&&t>=r?e:function(e,a,t){var r=-1,c=e.length;a<0&&(a=-a>c?0:c+a),(t=t>c?c:t)<0&&(t+=c),c=a>t?0:t-a>>>0,a>>>=0;for(var n=Array(c);++r<c;)n[r]=e[r+a];return n}(e,a,t)}var Ye=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Ke="[\\ud800-\\udfff]",Qe="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Ze="\\ud83c[\\udffb-\\udfff]",Je="[^\\ud800-\\udfff]",Xe="(?:\\ud83c[\\udde6-\\uddff]){2}",$e="[\\ud800-\\udbff][\\udc00-\\udfff]",ea="(?:"+Qe+"|"+Ze+")"+"?",aa="[\\ufe0e\\ufe0f]?"+ea+("(?:\\u200d(?:"+[Je,Xe,$e].join("|")+")[\\ufe0e\\ufe0f]?"+ea+")*"),ta="(?:"+[Je+Qe+"?",Qe,Xe,$e,Ke].join("|")+")",ra=RegExp(Ze+"(?="+Ze+")|"+ta+aa,"g");function ca(e){return function(e){return Ye.test(e)}(e)?function(e){return e.match(ra)||[]}(e):function(e){return e.split("")}(e)}var na=/^\s+|\s+$/g;function ia(e,a,t){if((e=function(e){return null==e?"":Ge(e)}(e))&&(t||void 0===a))return e.replace(na,"");if(!e||!(a=Ge(a)))return e;var r=ca(e),c=ca(a);return We(r,function(e,a){for(var t=-1,r=e.length;++t<r&&Le(a,e[t],0)>-1;);return t}(r,c),function(e,a){for(var t=e.length;t--&&Le(a,e[t],0)>-1;);return t}(r,c)+1).join("")}var fa=/^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,oa=/,/,da=/(=.+)?(\s*)$/,sa=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function ba(e,a){var t={};Pe(e,function(e,a){var r,c=h(e),n=!c&&1===e.length||c&&0===e.length;if(Z(e))r=e.slice(0,-1),e=e[e.length-1],t[a]=r.concat(r.length>0?i:e);else if(n)t[a]=e;else{if(r=function(e){return e=(e=(e=(e=e.toString().replace(sa,"")).match(fa)[2].replace(" ",""))?e.split(oa):[]).map(function(e){return ia(e.replace(da,""))})}(e),0===e.length&&!c&&0===r.length)throw new Error("autoInject task functions require explicit parameters.");c||r.pop(),t[a]=r.concat(i)}function i(a,t){var c=ze(r,function(e){return a[e]});c.push(t),m(e).apply(null,c)}}),De(t,a)}function ua(){this.head=this.tail=null,this.length=0}function la(e,a){e.length=1,e.head=e.tail=a}function pa(e,a,t){if(null==a)a=1;else if(0===a)throw new Error("Concurrency must not be zero");var r=m(e),c=0,n=[],i=!1;function f(e,a,t){if(null!=t&&"function"!=typeof t)throw new Error("task callback must be a function");if(b.started=!0,Z(e)||(e=[e]),0===e.length&&b.idle())return s(function(){b.drain()});for(var r=0,c=e.length;r<c;r++){var n={data:e[r],callback:t||D};a?b._tasks.unshift(n):b._tasks.push(n)}i||(i=!0,s(function(){i=!1,b.process()}))}function o(e){return function(a){c-=1;for(var t=0,r=e.length;t<r;t++){var i=e[t],f=Le(n,i,0);0===f?n.shift():f>0&&n.splice(f,1),i.callback.apply(i,arguments),null!=a&&b.error(a,i.data)}c<=b.concurrency-b.buffer&&b.unsaturated(),b.idle()&&b.drain(),b.process()}}var d=!1,b={_tasks:new ua,concurrency:a,payload:t,saturated:D,unsaturated:D,buffer:a/4,empty:D,drain:D,error:D,started:!1,paused:!1,push:function(e,a){f(e,!1,a)},kill:function(){b.drain=D,b._tasks.empty()},unshift:function(e,a){f(e,!0,a)},remove:function(e){b._tasks.remove(e)},process:function(){if(!d){for(d=!0;!b.paused&&c<b.concurrency&&b._tasks.length;){var e=[],a=[],t=b._tasks.length;b.payload&&(t=Math.min(t,b.payload));for(var i=0;i<t;i++){var f=b._tasks.shift();e.push(f),n.push(f),a.push(f.data)}c+=1,0===b._tasks.length&&b.empty(),c===b.concurrency&&b.saturated();var s=ye(o(e));r(a,s)}d=!1}},length:function(){return b._tasks.length},running:function(){return c},workersList:function(){return n},idle:function(){return b._tasks.length+c===0},pause:function(){b.paused=!0},resume:function(){!1!==b.paused&&(b.paused=!1,s(b.process))}};return b}function ha(e,a){return pa(e,1,a)}ua.prototype.removeLink=function(e){return e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=e.next=null,this.length-=1,e},ua.prototype.empty=function(){for(;this.head;)this.shift();return this},ua.prototype.insertAfter=function(e,a){a.prev=e,a.next=e.next,e.next?e.next.prev=a:this.tail=a,e.next=a,this.length+=1},ua.prototype.insertBefore=function(e,a){a.prev=e.prev,a.next=e,e.prev?e.prev.next=a:this.head=a,e.prev=a,this.length+=1},ua.prototype.unshift=function(e){this.head?this.insertBefore(this.head,e):la(this,e)},ua.prototype.push=function(e){this.tail?this.insertAfter(this.tail,e):la(this,e)},ua.prototype.shift=function(){return this.head&&this.removeLink(this.head)},ua.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)},ua.prototype.toArray=function(){for(var e=Array(this.length),a=this.head,t=0;t<this.length;t++)e[t]=a.data,a=a.next;return e},ua.prototype.remove=function(e){for(var a=this.head;a;){var t=a.next;e(a)&&this.removeLink(a),a=t}return this};var ma=Ae(we,1);function ga(e,a,t,r){r=z(r||D);var c=m(t);ma(e,function(e,t,r){c(a,e,function(e,t){a=t,r(e)})},function(e){r(e,a)})}function va(){var e=ze(arguments,m);return function(){var a=t(arguments),r=this,c=a[a.length-1];"function"==typeof c?a.pop():c=D,ga(e,a,function(e,a,c){a.apply(r,e.concat(function(e){var a=t(arguments,1);c(e,a)}))},function(e,a){c.apply(r,[e].concat(a))})}}var ya=function(){return va.apply(null,t(arguments).reverse())},_a=Array.prototype.concat,wa=function(e,a,r,c){c=c||D;var n=m(r);Oe(e,a,function(e,a){n(e,function(e){return e?a(e):a(null,t(arguments,1))})},function(e,a){for(var t=[],r=0;r<a.length;r++)a[r]&&(t=_a.apply(t,a[r]));return c(e,t)})},Aa=Ae(wa,1/0),ka=Ae(wa,1),xa=function(){var e=t(arguments),a=[null].concat(e);return function(){return arguments[arguments.length-1].apply(this,a)}};function Ea(e){return e}function Sa(e,a){return function(t,r,c,n){n=n||D;var i,f=!1;t(r,function(t,r,n){c(t,function(r,c){r?n(r):e(c)&&!i?(f=!0,i=a(!0,t),n(null,L)):n()})},function(e){e?n(e):n(null,f?i:a(!1))})}}function Ta(e,a){return a}var ja=Se(Sa(Ea,Ta)),Ca=Re(Sa(Ea,Ta)),Ra=Ae(Ca,1);function Oa(e){return function(a){var r=t(arguments,1);r.push(function(a){var r=t(arguments,1);"object"==typeof console&&(a?console.error&&console.error(a):console[e]&&Ne(r,function(a){console[e](a)}))}),m(a).apply(null,r)}}var Ba=Oa("dir");function Ma(e,a,r){r=ye(r||D);var c=m(e),n=m(a);function i(e){if(e)return r(e);var a=t(arguments,1);a.push(f),n.apply(this,a)}function f(e,a){return e?r(e):a?void c(i):r(null)}f(null,!0)}function Na(e,a,r){r=ye(r||D);var c=m(e),n=function(e){if(e)return r(e);var i=t(arguments,1);if(a.apply(this,i))return c(n);r.apply(null,[null].concat(i))};c(n)}function Ia(e,a,t){Na(e,function(){return!a.apply(this,arguments)},t)}function Pa(e,a,t){t=ye(t||D);var r=m(a),c=m(e);function n(e){if(e)return t(e);c(i)}function i(e,a){return e?t(e):a?void r(n):t(null)}c(i)}function Fa(e){return function(a,t,r){return e(a,r)}}function La(e,a,t){Ee(e,Fa(m(a)),t)}function Da(e,a,t,r){_e(a)(e,Fa(m(t)),r)}var za=Ae(Da,1);function qa(e){return h(e)?e:c(function(a,t){var r=!0;a.push(function(){var e=arguments;r?s(function(){t.apply(null,e)}):t.apply(null,e)}),e.apply(this,a),r=!1})}function Ua(e){return!e}var Ha=Se(Sa(Ua,Ua)),Va=Re(Sa(Ua,Ua)),Ga=Ae(Va,1);function Wa(e){return function(a){return null==a?void 0:a[e]}}function Ya(e,a,t,r){var c=new Array(a.length);e(a,function(e,a,r){t(e,function(e,t){c[a]=!!t,r(e)})},function(e){if(e)return r(e);for(var t=[],n=0;n<a.length;n++)c[n]&&t.push(a[n]);r(null,t)})}function Ka(e,a,t,r){var c=[];e(a,function(e,a,r){t(e,function(t,n){t?r(t):(n&&c.push({index:a,value:e}),r())})},function(e){e?r(e):r(null,ze(c.sort(function(e,a){return e.index-a.index}),Wa("value")))})}function Qa(e,a,t,r){(F(a)?Ya:Ka)(e,a,m(t),r||D)}var Za=Se(Qa),Ja=Re(Qa),Xa=Ae(Ja,1);function $a(e,a){var t=ye(a||D),r=m(qa(e));!function e(a){if(a)return t(a);r(e)}()}var et=function(e,a,t,r){r=r||D;var c=m(t);Oe(e,a,function(e,a){c(e,function(t,r){return t?a(t):a(null,{key:r,val:e})})},function(e,a){for(var t={},c=Object.prototype.hasOwnProperty,n=0;n<a.length;n++)if(a[n]){var i=a[n].key,f=a[n].val;c.call(t,i)?t[i].push(f):t[i]=[f]}return r(e,t)})},at=Ae(et,1/0),tt=Ae(et,1),rt=Oa("log");function ct(e,a,t,r){r=z(r||D);var c={},n=m(t);we(e,a,function(e,a,t){n(e,a,function(e,r){if(e)return t(e);c[a]=r,t()})},function(e){r(e,c)})}var nt=Ae(ct,1/0),it=Ae(ct,1);function ft(e,a){return a in e}function ot(e,a){var r=Object.create(null),n=Object.create(null);a=a||Ea;var i=m(e),f=c(function(e,c){var f=a.apply(null,e);ft(r,f)?s(function(){c.apply(null,r[f])}):ft(n,f)?n[f].push(c):(n[f]=[c],i.apply(null,e.concat(function(){var e=t(arguments);r[f]=e;var a=n[f];delete n[f];for(var c=0,i=a.length;c<i;c++)a[c].apply(null,e)})))});return f.memo=r,f.unmemoized=e,f}var dt=d(f?process.nextTick:i?setImmediate:o);function st(e,a,r){r=r||D;var c=F(a)?[]:{};e(a,function(e,a,r){m(e)(function(e,n){arguments.length>2&&(n=t(arguments,1)),c[a]=n,r(e)})},function(e){r(e,c)})}function bt(e,a){st(Ee,e,a)}function ut(e,a,t){st(_e(a),e,t)}var lt=function(e,a){var t=m(e);return pa(function(e,a){t(e[0],a)},a,1)},pt=function(e,a){var t=lt(e,a);return t.push=function(e,a,r){if(null==r&&(r=D),"function"!=typeof r)throw new Error("task callback must be a function");if(t.started=!0,Z(e)||(e=[e]),0===e.length)return s(function(){t.drain()});a=a||0;for(var c=t._tasks.head;c&&a>=c.priority;)c=c.next;for(var n=0,i=e.length;n<i;n++){var f={data:e[n],priority:a,callback:r};c?t._tasks.insertBefore(c,f):t._tasks.push(f)}s(t.process)},delete t.unshift,t};function ht(e,a){if(a=z(a||D),!Z(e))return a(new TypeError("First argument to race must be an array of functions"));if(!e.length)return a();for(var t=0,r=e.length;t<r;t++)m(e[t])(a)}function mt(e,a,r,c){ga(t(e).reverse(),a,r,c)}function gt(e){var a=m(e);return c(function(e,r){return e.push(function(e,a){var c;e?r(null,{error:e}):(c=arguments.length<=2?a:t(arguments,1),r(null,{value:c}))}),a.apply(this,e)})}function vt(e){var a;return Z(e)?a=ze(e,gt):(a={},Pe(e,function(e,t){a[t]=gt.call(this,e)})),a}function yt(e,a,t,r){Qa(e,a,function(e,a){t(e,function(e,t){a(e,!t)})},r)}var _t=Se(yt),wt=Re(yt),At=Ae(wt,1);function kt(e){return function(){return e}}function xt(e,a,t){var r=5,c=0,n={times:r,intervalFunc:kt(c)};if(arguments.length<3&&"function"==typeof e?(t=a||D,a=e):(!function(e,a){if("object"==typeof a)e.times=+a.times||r,e.intervalFunc="function"==typeof a.interval?a.interval:kt(+a.interval||c),e.errorFilter=a.errorFilter;else{if("number"!=typeof a&&"string"!=typeof a)throw new Error("Invalid arguments for async.retry");e.times=+a||r}}(n,e),t=t||D),"function"!=typeof a)throw new Error("Invalid arguments for async.retry");var i=m(a),f=1;!function e(){i(function(a){a&&f++<n.times&&("function"!=typeof n.errorFilter||n.errorFilter(a))?setTimeout(e,n.intervalFunc(f)):t.apply(null,arguments)})}()}var Et=function(e,a){a||(a=e,e=null);var t=m(a);return c(function(a,r){function c(e){t.apply(null,a.concat(e))}e?xt(e,c,r):xt(c,r)})};function St(e,a){st(ma,e,a)}var Tt=Se(Sa(Boolean,Ea)),jt=Re(Sa(Boolean,Ea)),Ct=Ae(jt,1);function Rt(e,a,t){var r=m(a);function c(e,a){var t=e.criteria,r=a.criteria;return t<r?-1:t>r?1:0}je(e,function(e,a){r(e,function(t,r){if(t)return a(t);a(null,{value:e,criteria:r})})},function(e,a){if(e)return t(e);t(null,ze(a.sort(c),Wa("value")))})}function Ot(e,a,t){var r=m(e);return c(function(c,n){var i,f=!1;c.push(function(){f||(n.apply(null,arguments),clearTimeout(i))}),i=setTimeout(function(){var a=e.name||"anonymous",r=new Error('Callback function "'+a+'" timed out.');r.code="ETIMEDOUT",t&&(r.info=t),f=!0,n(r)},a),r.apply(null,c)})}var Bt=Math.ceil,Mt=Math.max;function Nt(e,a,t,r){var c=m(t);Oe(function(e,a,t,r){for(var c=-1,n=Mt(Bt((a-e)/(t||1)),0),i=Array(n);n--;)i[r?n:++c]=e,e+=t;return i}(0,e,1),a,c,r)}var It=Ae(Nt,1/0),Pt=Ae(Nt,1);function Ft(e,a,t,r){arguments.length<=3&&(r=t,t=a,a=Z(e)?[]:{}),r=z(r||D);var c=m(t);Ee(e,function(e,t,r){c(a,e,t,r)},function(e){r(e,a)})}function Lt(e,a){var r,c=null;a=a||D,za(e,function(e,a){m(e)(function(e,n){r=arguments.length>2?t(arguments,1):n,c=e,a(!e)})},function(){a(c,r)})}function Dt(e){return function(){return(e.unmemoized||e).apply(null,arguments)}}function zt(e,a,r){r=ye(r||D);var c=m(a);if(!e())return r(null);var n=function(a){if(a)return r(a);if(e())return c(n);var i=t(arguments,1);r.apply(null,[null].concat(i))};c(n)}function qt(e,a,t){zt(function(){return!e.apply(this,arguments)},a,t)}var Ut=function(e,a){if(a=z(a||D),!Z(e))return a(new Error("First argument to waterfall must be an array of functions"));if(!e.length)return a();var r=0;function c(a){var t=m(e[r++]);a.push(ye(n)),t.apply(null,a)}function n(n){if(n||r===e.length)return a.apply(null,arguments);c(t(arguments,1))}c([])},Ht={apply:r,applyEach:Ce,applyEachSeries:Me,asyncify:b,auto:De,autoInject:ba,cargo:ha,compose:ya,concat:Aa,concatLimit:wa,concatSeries:ka,constant:xa,detect:ja,detectLimit:Ca,detectSeries:Ra,dir:Ba,doDuring:Ma,doUntil:Ia,doWhilst:Na,during:Pa,each:La,eachLimit:Da,eachOf:Ee,eachOfLimit:we,eachOfSeries:ma,eachSeries:za,ensureAsync:qa,every:Ha,everyLimit:Va,everySeries:Ga,filter:Za,filterLimit:Ja,filterSeries:Xa,forever:$a,groupBy:at,groupByLimit:et,groupBySeries:tt,log:rt,map:je,mapLimit:Oe,mapSeries:Be,mapValues:nt,mapValuesLimit:ct,mapValuesSeries:it,memoize:ot,nextTick:dt,parallel:bt,parallelLimit:ut,priorityQueue:pt,queue:lt,race:ht,reduce:ga,reduceRight:mt,reflect:gt,reflectAll:vt,reject:_t,rejectLimit:wt,rejectSeries:At,retry:xt,retryable:Et,seq:va,series:St,setImmediate:s,some:Tt,someLimit:jt,someSeries:Ct,sortBy:Rt,timeout:Ot,times:It,timesLimit:Nt,timesSeries:Pt,transform:Ft,tryEach:Lt,unmemoize:Dt,until:qt,waterfall:Ut,whilst:zt,all:Ha,allLimit:Va,allSeries:Ga,any:Tt,anyLimit:jt,anySeries:Ct,find:ja,findLimit:Ca,findSeries:Ra,forEach:La,forEachSeries:za,forEachLimit:Da,forEachOf:Ee,forEachOfSeries:ma,forEachOfLimit:we,inject:ga,foldl:ga,foldr:mt,select:Za,selectLimit:Ja,selectSeries:Xa,wrapSync:b};a.default=Ht,a.apply=r,a.applyEach=Ce,a.applyEachSeries=Me,a.asyncify=b,a.auto=De,a.autoInject=ba,a.cargo=ha,a.compose=ya,a.concat=Aa,a.concatLimit=wa,a.concatSeries=ka,a.constant=xa,a.detect=ja,a.detectLimit=Ca,a.detectSeries=Ra,a.dir=Ba,a.doDuring=Ma,a.doUntil=Ia,a.doWhilst=Na,a.during=Pa,a.each=La,a.eachLimit=Da,a.eachOf=Ee,a.eachOfLimit=we,a.eachOfSeries=ma,a.eachSeries=za,a.ensureAsync=qa,a.every=Ha,a.everyLimit=Va,a.everySeries=Ga,a.filter=Za,a.filterLimit=Ja,a.filterSeries=Xa,a.forever=$a,a.groupBy=at,a.groupByLimit=et,a.groupBySeries=tt,a.log=rt,a.map=je,a.mapLimit=Oe,a.mapSeries=Be,a.mapValues=nt,a.mapValuesLimit=ct,a.mapValuesSeries=it,a.memoize=ot,a.nextTick=dt,a.parallel=bt,a.parallelLimit=ut,a.priorityQueue=pt,a.queue=lt,a.race=ht,a.reduce=ga,a.reduceRight=mt,a.reflect=gt,a.reflectAll=vt,a.reject=_t,a.rejectLimit=wt,a.rejectSeries=At,a.retry=xt,a.retryable=Et,a.seq=va,a.series=St,a.setImmediate=s,a.some=Tt,a.someLimit=jt,a.someSeries=Ct,a.sortBy=Rt,a.timeout=Ot,a.times=It,a.timesLimit=Nt,a.timesSeries=Pt,a.transform=Ft,a.tryEach=Lt,a.unmemoize=Dt,a.until=qt,a.waterfall=Ut,a.whilst=zt,a.all=Ha,a.allLimit=Va,a.allSeries=Ga,a.any=Tt,a.anyLimit=jt,a.anySeries=Ct,a.find=ja,a.findLimit=Ca,a.findSeries=Ra,a.forEach=La,a.forEachSeries=za,a.forEachLimit=Da,a.forEachOf=Ee,a.forEachOfSeries=ma,a.forEachOfLimit=we,a.inject=ga,a.foldl=ga,a.foldr=mt,a.select=Za,a.selectLimit=Ja,a.selectSeries=Xa,a.wrapSync=b,Object.defineProperty(a,"__esModule",{value:!0})})}).call(this,t(25)(e))},function(e,a,t){var r=t(3);e.exports={hex:function(e){if("string"==typeof e){if("0x"===e)return"0x0";if(0==e.indexOf("0x"))return e;e=new r.BN(e)}return"boolean"==typeof e&&(e=e?1:0),"number"==typeof e&&(e=r.intToHex(e)),"object"==typeof e&&""==(e=e.toString("hex"))&&(e="0"),r.addHexPrefix(e)},rpcQuantityHexString:function(e){return"0x"==(e="0x"+(e=this.hex(e)).replace("0x","").replace(/^0+/,""))&&(e="0x0"),e},rpcDataHexString:function(e,a){if("number"==typeof a)e=this.hex(e).replace("0x",""),e=new Array(a-e.length).fill("0").join("")+e;else{if(0==e.length)return"0x";(e=this.hex(e).replace("0x","")).length%2!=0&&(e="0"+e)}return"0x"+e},hexWithZeroPadding:function(e){const a=(e=this.hex(e)).replace("0x","");return 1&a.length?"0x0"+a:e},number:function(e){return"number"==typeof e?e:"string"==typeof e&&0!=e.indexOf("0x")?parseInt(e):r.bufferToInt(r.toBuffer(e))}}},function(e,a,t){var r;(function(){var t=this,c=t._,n=Array.prototype,i=Object.prototype,f=Function.prototype,o=n.push,d=n.slice,s=i.toString,b=i.hasOwnProperty,u=Array.isArray,l=Object.keys,p=f.bind,h=Object.create,m=function(){},g=function(e){return e instanceof g?e:this instanceof g?void(this._wrapped=e):new g(e)};void 0!==e&&e.exports&&(a=e.exports=g),a._=g,g.VERSION="1.8.3";var v=function(e,a,t){if(void 0===a)return e;switch(null==t?3:t){case 1:return function(t){return e.call(a,t)};case 2:return function(t,r){return e.call(a,t,r)};case 3:return function(t,r,c){return e.call(a,t,r,c)};case 4:return function(t,r,c,n){return e.call(a,t,r,c,n)}}return function(){return e.apply(a,arguments)}},y=function(e,a,t){return null==e?g.identity:g.isFunction(e)?v(e,a,t):g.isObject(e)?g.matcher(e):g.property(e)};g.iteratee=function(e,a){return y(e,a,1/0)};var _=function(e,a){return function(t){var r=arguments.length;if(r<2||null==t)return t;for(var c=1;c<r;c++)for(var n=arguments[c],i=e(n),f=i.length,o=0;o<f;o++){var d=i[o];a&&void 0!==t[d]||(t[d]=n[d])}return t}},w=function(e){if(!g.isObject(e))return{};if(h)return h(e);m.prototype=e;var a=new m;return m.prototype=null,a},A=function(e){return function(a){return null==a?void 0:a[e]}},k=Math.pow(2,53)-1,x=A("length"),E=function(e){var a=x(e);return"number"==typeof a&&a>=0&&a<=k};function S(e){return function(a,t,r,c){t=v(t,c,4);var n=!E(a)&&g.keys(a),i=(n||a).length,f=e>0?0:i-1;return arguments.length<3&&(r=a[n?n[f]:f],f+=e),function(a,t,r,c,n,i){for(;n>=0&&n<i;n+=e){var f=c?c[n]:n;r=t(r,a[f],f,a)}return r}(a,t,r,n,f,i)}}g.each=g.forEach=function(e,a,t){var r,c;if(a=v(a,t),E(e))for(r=0,c=e.length;r<c;r++)a(e[r],r,e);else{var n=g.keys(e);for(r=0,c=n.length;r<c;r++)a(e[n[r]],n[r],e)}return e},g.map=g.collect=function(e,a,t){a=y(a,t);for(var r=!E(e)&&g.keys(e),c=(r||e).length,n=Array(c),i=0;i<c;i++){var f=r?r[i]:i;n[i]=a(e[f],f,e)}return n},g.reduce=g.foldl=g.inject=S(1),g.reduceRight=g.foldr=S(-1),g.find=g.detect=function(e,a,t){var r;if(void 0!==(r=E(e)?g.findIndex(e,a,t):g.findKey(e,a,t))&&-1!==r)return e[r]},g.filter=g.select=function(e,a,t){var r=[];return a=y(a,t),g.each(e,function(e,t,c){a(e,t,c)&&r.push(e)}),r},g.reject=function(e,a,t){return g.filter(e,g.negate(y(a)),t)},g.every=g.all=function(e,a,t){a=y(a,t);for(var r=!E(e)&&g.keys(e),c=(r||e).length,n=0;n<c;n++){var i=r?r[n]:n;if(!a(e[i],i,e))return!1}return!0},g.some=g.any=function(e,a,t){a=y(a,t);for(var r=!E(e)&&g.keys(e),c=(r||e).length,n=0;n<c;n++){var i=r?r[n]:n;if(a(e[i],i,e))return!0}return!1},g.contains=g.includes=g.include=function(e,a,t,r){return E(e)||(e=g.values(e)),("number"!=typeof t||r)&&(t=0),g.indexOf(e,a,t)>=0},g.invoke=function(e,a){var t=d.call(arguments,2),r=g.isFunction(a);return g.map(e,function(e){var c=r?a:e[a];return null==c?c:c.apply(e,t)})},g.pluck=function(e,a){return g.map(e,g.property(a))},g.where=function(e,a){return g.filter(e,g.matcher(a))},g.findWhere=function(e,a){return g.find(e,g.matcher(a))},g.max=function(e,a,t){var r,c,n=-1/0,i=-1/0;if(null==a&&null!=e)for(var f=0,o=(e=E(e)?e:g.values(e)).length;f<o;f++)(r=e[f])>n&&(n=r);else a=y(a,t),g.each(e,function(e,t,r){((c=a(e,t,r))>i||c===-1/0&&n===-1/0)&&(n=e,i=c)});return n},g.min=function(e,a,t){var r,c,n=1/0,i=1/0;if(null==a&&null!=e)for(var f=0,o=(e=E(e)?e:g.values(e)).length;f<o;f++)(r=e[f])<n&&(n=r);else a=y(a,t),g.each(e,function(e,t,r){((c=a(e,t,r))<i||c===1/0&&n===1/0)&&(n=e,i=c)});return n},g.shuffle=function(e){for(var a,t=E(e)?e:g.values(e),r=t.length,c=Array(r),n=0;n<r;n++)(a=g.random(0,n))!==n&&(c[n]=c[a]),c[a]=t[n];return c},g.sample=function(e,a,t){return null==a||t?(E(e)||(e=g.values(e)),e[g.random(e.length-1)]):g.shuffle(e).slice(0,Math.max(0,a))},g.sortBy=function(e,a,t){return a=y(a,t),g.pluck(g.map(e,function(e,t,r){return{value:e,index:t,criteria:a(e,t,r)}}).sort(function(e,a){var t=e.criteria,r=a.criteria;if(t!==r){if(t>r||void 0===t)return 1;if(t<r||void 0===r)return-1}return e.index-a.index}),"value")};var T=function(e){return function(a,t,r){var c={};return t=y(t,r),g.each(a,function(r,n){var i=t(r,n,a);e(c,r,i)}),c}};g.groupBy=T(function(e,a,t){g.has(e,t)?e[t].push(a):e[t]=[a]}),g.indexBy=T(function(e,a,t){e[t]=a}),g.countBy=T(function(e,a,t){g.has(e,t)?e[t]++:e[t]=1}),g.toArray=function(e){return e?g.isArray(e)?d.call(e):E(e)?g.map(e,g.identity):g.values(e):[]},g.size=function(e){return null==e?0:E(e)?e.length:g.keys(e).length},g.partition=function(e,a,t){a=y(a,t);var r=[],c=[];return g.each(e,function(e,t,n){(a(e,t,n)?r:c).push(e)}),[r,c]},g.first=g.head=g.take=function(e,a,t){if(null!=e)return null==a||t?e[0]:g.initial(e,e.length-a)},g.initial=function(e,a,t){return d.call(e,0,Math.max(0,e.length-(null==a||t?1:a)))},g.last=function(e,a,t){if(null!=e)return null==a||t?e[e.length-1]:g.rest(e,Math.max(0,e.length-a))},g.rest=g.tail=g.drop=function(e,a,t){return d.call(e,null==a||t?1:a)},g.compact=function(e){return g.filter(e,g.identity)};var j=function(e,a,t,r){for(var c=[],n=0,i=r||0,f=x(e);i<f;i++){var o=e[i];if(E(o)&&(g.isArray(o)||g.isArguments(o))){a||(o=j(o,a,t));var d=0,s=o.length;for(c.length+=s;d<s;)c[n++]=o[d++]}else t||(c[n++]=o)}return c};function C(e){return function(a,t,r){t=y(t,r);for(var c=x(a),n=e>0?0:c-1;n>=0&&n<c;n+=e)if(t(a[n],n,a))return n;return-1}}function R(e,a,t){return function(r,c,n){var i=0,f=x(r);if("number"==typeof n)e>0?i=n>=0?n:Math.max(n+f,i):f=n>=0?Math.min(n+1,f):n+f+1;else if(t&&n&&f)return r[n=t(r,c)]===c?n:-1;if(c!=c)return(n=a(d.call(r,i,f),g.isNaN))>=0?n+i:-1;for(n=e>0?i:f-1;n>=0&&n<f;n+=e)if(r[n]===c)return n;return-1}}g.flatten=function(e,a){return j(e,a,!1)},g.without=function(e){return g.difference(e,d.call(arguments,1))},g.uniq=g.unique=function(e,a,t,r){g.isBoolean(a)||(r=t,t=a,a=!1),null!=t&&(t=y(t,r));for(var c=[],n=[],i=0,f=x(e);i<f;i++){var o=e[i],d=t?t(o,i,e):o;a?(i&&n===d||c.push(o),n=d):t?g.contains(n,d)||(n.push(d),c.push(o)):g.contains(c,o)||c.push(o)}return c},g.union=function(){return g.uniq(j(arguments,!0,!0))},g.intersection=function(e){for(var a=[],t=arguments.length,r=0,c=x(e);r<c;r++){var n=e[r];if(!g.contains(a,n)){for(var i=1;i<t&&g.contains(arguments[i],n);i++);i===t&&a.push(n)}}return a},g.difference=function(e){var a=j(arguments,!0,!0,1);return g.filter(e,function(e){return!g.contains(a,e)})},g.zip=function(){return g.unzip(arguments)},g.unzip=function(e){for(var a=e&&g.max(e,x).length||0,t=Array(a),r=0;r<a;r++)t[r]=g.pluck(e,r);return t},g.object=function(e,a){for(var t={},r=0,c=x(e);r<c;r++)a?t[e[r]]=a[r]:t[e[r][0]]=e[r][1];return t},g.findIndex=C(1),g.findLastIndex=C(-1),g.sortedIndex=function(e,a,t,r){for(var c=(t=y(t,r,1))(a),n=0,i=x(e);n<i;){var f=Math.floor((n+i)/2);t(e[f])<c?n=f+1:i=f}return n},g.indexOf=R(1,g.findIndex,g.sortedIndex),g.lastIndexOf=R(-1,g.findLastIndex),g.range=function(e,a,t){null==a&&(a=e||0,e=0),t=t||1;for(var r=Math.max(Math.ceil((a-e)/t),0),c=Array(r),n=0;n<r;n++,e+=t)c[n]=e;return c};var O=function(e,a,t,r,c){if(!(r instanceof a))return e.apply(t,c);var n=w(e.prototype),i=e.apply(n,c);return g.isObject(i)?i:n};g.bind=function(e,a){if(p&&e.bind===p)return p.apply(e,d.call(arguments,1));if(!g.isFunction(e))throw new TypeError("Bind must be called on a function");var t=d.call(arguments,2),r=function(){return O(e,r,a,this,t.concat(d.call(arguments)))};return r},g.partial=function(e){var a=d.call(arguments,1),t=function(){for(var r=0,c=a.length,n=Array(c),i=0;i<c;i++)n[i]=a[i]===g?arguments[r++]:a[i];for(;r<arguments.length;)n.push(arguments[r++]);return O(e,t,this,this,n)};return t},g.bindAll=function(e){var a,t,r=arguments.length;if(r<=1)throw new Error("bindAll must be passed function names");for(a=1;a<r;a++)e[t=arguments[a]]=g.bind(e[t],e);return e},g.memoize=function(e,a){var t=function(r){var c=t.cache,n=""+(a?a.apply(this,arguments):r);return g.has(c,n)||(c[n]=e.apply(this,arguments)),c[n]};return t.cache={},t},g.delay=function(e,a){var t=d.call(arguments,2);return setTimeout(function(){return e.apply(null,t)},a)},g.defer=g.partial(g.delay,g,1),g.throttle=function(e,a,t){var r,c,n,i=null,f=0;t||(t={});var o=function(){f=!1===t.leading?0:g.now(),i=null,n=e.apply(r,c),i||(r=c=null)};return function(){var d=g.now();f||!1!==t.leading||(f=d);var s=a-(d-f);return r=this,c=arguments,s<=0||s>a?(i&&(clearTimeout(i),i=null),f=d,n=e.apply(r,c),i||(r=c=null)):i||!1===t.trailing||(i=setTimeout(o,s)),n}},g.debounce=function(e,a,t){var r,c,n,i,f,o=function(){var d=g.now()-i;d<a&&d>=0?r=setTimeout(o,a-d):(r=null,t||(f=e.apply(n,c),r||(n=c=null)))};return function(){n=this,c=arguments,i=g.now();var d=t&&!r;return r||(r=setTimeout(o,a)),d&&(f=e.apply(n,c),n=c=null),f}},g.wrap=function(e,a){return g.partial(a,e)},g.negate=function(e){return function(){return!e.apply(this,arguments)}},g.compose=function(){var e=arguments,a=e.length-1;return function(){for(var t=a,r=e[a].apply(this,arguments);t--;)r=e[t].call(this,r);return r}},g.after=function(e,a){return function(){if(--e<1)return a.apply(this,arguments)}},g.before=function(e,a){var t;return function(){return--e>0&&(t=a.apply(this,arguments)),e<=1&&(a=null),t}},g.once=g.partial(g.before,2);var B=!{toString:null}.propertyIsEnumerable("toString"),M=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function N(e,a){var t=M.length,r=e.constructor,c=g.isFunction(r)&&r.prototype||i,n="constructor";for(g.has(e,n)&&!g.contains(a,n)&&a.push(n);t--;)(n=M[t])in e&&e[n]!==c[n]&&!g.contains(a,n)&&a.push(n)}g.keys=function(e){if(!g.isObject(e))return[];if(l)return l(e);var a=[];for(var t in e)g.has(e,t)&&a.push(t);return B&&N(e,a),a},g.allKeys=function(e){if(!g.isObject(e))return[];var a=[];for(var t in e)a.push(t);return B&&N(e,a),a},g.values=function(e){for(var a=g.keys(e),t=a.length,r=Array(t),c=0;c<t;c++)r[c]=e[a[c]];return r},g.mapObject=function(e,a,t){a=y(a,t);for(var r,c=g.keys(e),n=c.length,i={},f=0;f<n;f++)i[r=c[f]]=a(e[r],r,e);return i},g.pairs=function(e){for(var a=g.keys(e),t=a.length,r=Array(t),c=0;c<t;c++)r[c]=[a[c],e[a[c]]];return r},g.invert=function(e){for(var a={},t=g.keys(e),r=0,c=t.length;r<c;r++)a[e[t[r]]]=t[r];return a},g.functions=g.methods=function(e){var a=[];for(var t in e)g.isFunction(e[t])&&a.push(t);return a.sort()},g.extend=_(g.allKeys),g.extendOwn=g.assign=_(g.keys),g.findKey=function(e,a,t){a=y(a,t);for(var r,c=g.keys(e),n=0,i=c.length;n<i;n++)if(a(e[r=c[n]],r,e))return r},g.pick=function(e,a,t){var r,c,n={},i=e;if(null==i)return n;g.isFunction(a)?(c=g.allKeys(i),r=v(a,t)):(c=j(arguments,!1,!1,1),r=function(e,a,t){return a in t},i=Object(i));for(var f=0,o=c.length;f<o;f++){var d=c[f],s=i[d];r(s,d,i)&&(n[d]=s)}return n},g.omit=function(e,a,t){if(g.isFunction(a))a=g.negate(a);else{var r=g.map(j(arguments,!1,!1,1),String);a=function(e,a){return!g.contains(r,a)}}return g.pick(e,a,t)},g.defaults=_(g.allKeys,!0),g.create=function(e,a){var t=w(e);return a&&g.extendOwn(t,a),t},g.clone=function(e){return g.isObject(e)?g.isArray(e)?e.slice():g.extend({},e):e},g.tap=function(e,a){return a(e),e},g.isMatch=function(e,a){var t=g.keys(a),r=t.length;if(null==e)return!r;for(var c=Object(e),n=0;n<r;n++){var i=t[n];if(a[i]!==c[i]||!(i in c))return!1}return!0};var I=function(e,a,t,r){if(e===a)return 0!==e||1/e==1/a;if(null==e||null==a)return e===a;e instanceof g&&(e=e._wrapped),a instanceof g&&(a=a._wrapped);var c=s.call(e);if(c!==s.call(a))return!1;switch(c){case"[object RegExp]":case"[object String]":return""+e==""+a;case"[object Number]":return+e!=+e?+a!=+a:0==+e?1/+e==1/a:+e==+a;case"[object Date]":case"[object Boolean]":return+e==+a}var n="[object Array]"===c;if(!n){if("object"!=typeof e||"object"!=typeof a)return!1;var i=e.constructor,f=a.constructor;if(i!==f&&!(g.isFunction(i)&&i instanceof i&&g.isFunction(f)&&f instanceof f)&&"constructor"in e&&"constructor"in a)return!1}t=t||[],r=r||[];for(var o=t.length;o--;)if(t[o]===e)return r[o]===a;if(t.push(e),r.push(a),n){if((o=e.length)!==a.length)return!1;for(;o--;)if(!I(e[o],a[o],t,r))return!1}else{var d,b=g.keys(e);if(o=b.length,g.keys(a).length!==o)return!1;for(;o--;)if(d=b[o],!g.has(a,d)||!I(e[d],a[d],t,r))return!1}return t.pop(),r.pop(),!0};g.isEqual=function(e,a){return I(e,a)},g.isEmpty=function(e){return null==e||(E(e)&&(g.isArray(e)||g.isString(e)||g.isArguments(e))?0===e.length:0===g.keys(e).length)},g.isElement=function(e){return!(!e||1!==e.nodeType)},g.isArray=u||function(e){return"[object Array]"===s.call(e)},g.isObject=function(e){var a=typeof e;return"function"===a||"object"===a&&!!e},g.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(e){g["is"+e]=function(a){return s.call(a)==="[object "+e+"]"}}),g.isArguments(arguments)||(g.isArguments=function(e){return g.has(e,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(g.isFunction=function(e){return"function"==typeof e||!1}),g.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},g.isNaN=function(e){return g.isNumber(e)&&e!==+e},g.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"===s.call(e)},g.isNull=function(e){return null===e},g.isUndefined=function(e){return void 0===e},g.has=function(e,a){return null!=e&&b.call(e,a)},g.noConflict=function(){return t._=c,this},g.identity=function(e){return e},g.constant=function(e){return function(){return e}},g.noop=function(){},g.property=A,g.propertyOf=function(e){return null==e?function(){}:function(a){return e[a]}},g.matcher=g.matches=function(e){return e=g.extendOwn({},e),function(a){return g.isMatch(a,e)}},g.times=function(e,a,t){var r=Array(Math.max(0,e));a=v(a,t,1);for(var c=0;c<e;c++)r[c]=a(c);return r},g.random=function(e,a){return null==a&&(a=e,e=0),e+Math.floor(Math.random()*(a-e+1))},g.now=Date.now||function(){return(new Date).getTime()};var P={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},F=g.invert(P),L=function(e){var a=function(a){return e[a]},t="(?:"+g.keys(e).join("|")+")",r=RegExp(t),c=RegExp(t,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(c,a):e}};g.escape=L(P),g.unescape=L(F),g.result=function(e,a,t){var r=null==e?void 0:e[a];return void 0===r&&(r=t),g.isFunction(r)?r.call(e):r};var D=0;g.uniqueId=function(e){var a=++D+"";return e?e+a:a},g.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var z=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},U=/\\|'|\r|\n|\u2028|\u2029/g,H=function(e){return"\\"+q[e]};g.template=function(e,a,t){!a&&t&&(a=t),a=g.defaults({},a,g.templateSettings);var r=RegExp([(a.escape||z).source,(a.interpolate||z).source,(a.evaluate||z).source].join("|")+"|$","g"),c=0,n="__p+='";e.replace(r,function(a,t,r,i,f){return n+=e.slice(c,f).replace(U,H),c=f+a.length,t?n+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":r?n+="'+\n((__t=("+r+"))==null?'':__t)+\n'":i&&(n+="';\n"+i+"\n__p+='"),a}),n+="';\n",a.variable||(n="with(obj||{}){\n"+n+"}\n"),n="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+n+"return __p;\n";try{var i=new Function(a.variable||"obj","_",n)}catch(e){throw e.source=n,e}var f=function(e){return i.call(this,e,g)},o=a.variable||"obj";return f.source="function("+o+"){\n"+n+"}",f},g.chain=function(e){var a=g(e);return a._chain=!0,a};var V=function(e,a){return e._chain?g(a).chain():a};g.mixin=function(e){g.each(g.functions(e),function(a){var t=g[a]=e[a];g.prototype[a]=function(){var e=[this._wrapped];return o.apply(e,arguments),V(this,t.apply(g,e))}})},g.mixin(g),g.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var a=n[e];g.prototype[e]=function(){var t=this._wrapped;return a.apply(t,arguments),"shift"!==e&&"splice"!==e||0!==t.length||delete t[0],V(this,t)}}),g.each(["concat","join","slice"],function(e){var a=n[e];g.prototype[e]=function(){return V(this,a.apply(this._wrapped,arguments))}}),g.prototype.value=function(){return this._wrapped},g.prototype.valueOf=g.prototype.toJSON=g.prototype.value,g.prototype.toString=function(){return""+this._wrapped},void 0===(r=function(){return g}.apply(a,[]))||(e.exports=r)}).call(this)},function(e,a,t){"use strict";var r=t(825),c=t(824);e.exports={errors:r,formatters:c}},function(e,a){e.exports=function(e,a,t){var r=e.length;a=null==a?0:a<0?Math.max(r+a,0):Math.min(a,r),t=null==t?r:t<0?Math.max(r+t,0):Math.min(t,r);for(var c=[];a<t;)c.push(e[a++]);return c}},function(e,a,t){"use strict";var r=a;r.version=t(1010).version,r.utils=t(1009),r.rand=t(1008),r.curve=t(119),r.curves=t(1003),r.ec=t(995),r.eddsa=t(991)},function(e,a){e.exports=__webpack_require__(70)},function(e,a){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,a,t){e.exports={mkdirs:t(163),mkdirsSync:t(162),mkdirp:t(163),mkdirpSync:t(162),ensureDir:t(163),ensureDirSync:t(162)}},function(e,a,t){var r=t(20),c=t(823),n=t(320),i=t(821),f=t(820),o=function(e){if(!n.isHexStrict(e))throw new Error("The parameter must be a valid HEX string.");var a="",t=0,r=e.length;for("0x"===e.substring(0,2)&&(t=2);t<r;t+=2){var c=parseInt(e.substr(t,2),16);a+=String.fromCharCode(c)}return a},d=function(e){if(!e)return"0x00";for(var a="",t=0;t<e.length;t++){var r=e.charCodeAt(t).toString(16);a+=r.length<2?"0"+r:r}return"0x"+a},s=function(e){if(e=e?e.toLowerCase():"ether",!c.unitMap[e])throw new Error('This unit "'+e+"\" doesn't exist, please use the one of the following units"+JSON.stringify(c.unitMap,null,2));return e};e.exports={_fireError:function(e,a,t,c){return!r.isObject(e)||e instanceof Error||!e.data||((r.isObject(e.data)||r.isArray(e.data))&&(e.data=JSON.stringify(e.data,null,2)),e=e.message+"\n"+e.data),r.isString(e)&&(e=new Error(e)),r.isFunction(c)&&c(e),r.isFunction(t)&&((a&&r.isFunction(a.listeners)&&a.listeners("error").length||r.isFunction(c))&&a.catch(function(){}),setTimeout(function(){t(e)},1)),a&&r.isFunction(a.emit)&&setTimeout(function(){a.emit("error",e),a.removeAllListeners()},1),a},_jsonInterfaceMethodToString:function(e){if(r.isObject(e)&&e.name&&-1!==e.name.indexOf("("))return e.name;var a=e.inputs.map(function(e){return e.type}).join(",");return e.name+"("+a+")"},randomHex:f,_:r,BN:n.BN,isBN:n.isBN,isBigNumber:n.isBigNumber,isHex:n.isHex,isHexStrict:n.isHexStrict,sha3:n.sha3,keccak256:n.sha3,soliditySha3:i,isAddress:n.isAddress,checkAddressChecksum:n.checkAddressChecksum,toChecksumAddress:function(e){if(void 0===e)return"";if(!/^(0x)?[0-9a-f]{40}$/i.test(e))throw new Error('Given address "'+e+'" is not a valid Ethereum address.');e=e.toLowerCase().replace(/^0x/i,"");for(var a=n.sha3(e).replace(/^0x/i,""),t="0x",r=0;r<e.length;r++)parseInt(a[r],16)>7?t+=e[r].toUpperCase():t+=e[r];return t},toHex:n.toHex,toBN:n.toBN,bytesToHex:n.bytesToHex,hexToBytes:n.hexToBytes,hexToNumberString:n.hexToNumberString,hexToNumber:n.hexToNumber,toDecimal:n.hexToNumber,numberToHex:n.numberToHex,fromDecimal:n.numberToHex,hexToUtf8:n.hexToUtf8,hexToString:n.hexToUtf8,toUtf8:n.hexToUtf8,utf8ToHex:n.utf8ToHex,stringToHex:n.utf8ToHex,fromUtf8:n.utf8ToHex,hexToAscii:o,toAscii:o,asciiToHex:d,fromAscii:d,unitMap:c.unitMap,toWei:function(e,a){if(a=s(a),!n.isBN(e)&&!r.isString(e))throw new Error("Please pass numbers as strings or BigNumber objects to avoid precision errors.");return n.isBN(e)?c.toWei(e,a):c.toWei(e,a).toString(10)},fromWei:function(e,a){if(a=s(a),!n.isBN(e)&&!r.isString(e))throw new Error("Please pass numbers as strings or BigNumber objects to avoid precision errors.");return n.isBN(e)?c.fromWei(e,a):c.fromWei(e,a).toString(10)},padLeft:n.leftPad,leftPad:n.leftPad,padRight:n.rightPad,rightPad:n.rightPad,toTwosComplement:n.toTwosComplement}},function(e,a){e.exports=function(){throw new Error("define cannot be used indirect")}},function(e,a,t){var r=t(173);r.genesisState=t(890),r.bootstrapNodes=t(889),e.exports=r},function(e,a,t){e.exports=t(10).createHash},function(e,a,t){var r=t(35),c=Array.isArray||function(e){return r(e,"Array")};e.exports=c},function(e,a){e.exports=__webpack_require__(8)},function(e,a,t){"use strict";e.exports={ERROR:{OUT_OF_GAS:"out of gas",STACK_UNDERFLOW:"stack underflow",STACK_OVERFLOW:"stack overflow",INVALID_JUMP:"invalid JUMP",INVALID_OPCODE:"invalid opcode",REVERT:"revert",STATIC_STATE_CHANGE:"static state change",INTERNAL_ERROR:"internal error"},VmError:function(e){this.error=e}}},function(e,a,t){"use strict";var r,c,n=t(67),i=n.freeze,f=t(12),o=f.inherits,d=f.notEnumerableProp;function s(e,a){function t(r){if(!(this instanceof t))return new t(r);d(this,"message","string"==typeof r?r:a),d(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return o(t,Error),t}var b=s("Warning","warning"),u=s("CancellationError","cancellation error"),l=s("TimeoutError","timeout error"),p=s("AggregateError","aggregate error");try{r=TypeError,c=RangeError}catch(e){r=s("TypeError","type error"),c=s("RangeError","range error")}for(var h="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),m=0;m<h.length;++m)"function"==typeof Array.prototype[h[m]]&&(p.prototype[h[m]]=Array.prototype[h[m]]);n.defineProperty(p.prototype,"length",{value:0,configurable:!1,writable:!0,enumerable:!0}),p.prototype.isOperational=!0;var g=0;function v(e){if(!(this instanceof v))return new v(e);d(this,"name","OperationalError"),d(this,"message",e),this.cause=e,this.isOperational=!0,e instanceof Error?(d(this,"message",e.message),d(this,"stack",e.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}p.prototype.toString=function(){var e=Array(4*g+1).join(" "),a="\n"+e+"AggregateError of:\n";g++,e=Array(4*g+1).join(" ");for(var t=0;t<this.length;++t){for(var r=this[t]===this?"[Circular AggregateError]":this[t]+"",c=r.split("\n"),n=0;n<c.length;++n)c[n]=e+c[n];a+=(r=c.join("\n"))+"\n"}return g--,a},o(v,Error);var y=Error.__BluebirdErrorTypes__;y||(y=i({CancellationError:u,TimeoutError:l,OperationalError:v,RejectionError:v,AggregateError:p}),d(Error,"__BluebirdErrorTypes__",y)),e.exports={Error:Error,TypeError:r,RangeError:c,CancellationError:y.CancellationError,OperationalError:y.OperationalError,TimeoutError:y.TimeoutError,AggregateError:y.AggregateError,Warning:b}},function(e,a,t){var r=t(76);e.exports=function(e,a){return r(e)===a}},function(e,a,t){var r=t(20),c=t(27),n=t(9),i=t(306),f=function(e){return r.isNumber(e)&&(e=Math.trunc(e)),new i(c.toTwosComplement(e).replace("0x",""))};e.exports={formatInputInt:f,formatInputBytes:function(e){if(!c.isHexStrict(e))throw new Error('Given parameter is not bytes: "'+e+'"');var a=e.replace(/^0x/i,"");if(a.length%2!=0)throw new Error('Given parameter bytes has an invalid length: "'+e+'"');if(a.length>64)throw new Error('Given parameter bytes is too long: "'+e+'"');var t=Math.floor((a.length+63)/64);return a=c.padRight(a,64*t),new i(a)},formatInputDynamicBytes:function(e){if(!c.isHexStrict(e))throw new Error('Given parameter is not bytes: "'+e+'"');var a=e.replace(/^0x/i,"");if(a.length%2!=0)throw new Error('Given parameter bytes has an invalid length: "'+e+'"');var t=a.length/2,r=Math.floor((a.length+63)/64);return a=c.padRight(a,64*r),new i(f(t).value+a)},formatInputString:function(e){if(!r.isString(e))throw new Error("Given parameter is not a valid string: "+e);var a=c.utf8ToHex(e).replace(/^0x/i,""),t=a.length/2,n=Math.floor((a.length+63)/64);return a=c.padRight(a,64*n),new i(f(t).value+a)},formatInputBool:function(e){return new i("000000000000000000000000000000000000000000000000000000000000000"+(e?"1":"0"))},formatOutputInt:function(e){var a=e.staticPart();if(!a&&!e.rawValue)throw new Error("Couldn't decode "+name+" from ABI: 0x"+e.rawValue);return function(e){return"1"===new n(e.substr(0,1),16).toString(2).substr(0,1)}(a)?new n(a,16).fromTwos(256).toString(10):new n(a,16).toString(10)},formatOutputUInt:function(e,a){var t=e.staticPart();if(!t&&!e.rawValue)throw new Error("Couldn't decode "+a+" from ABI: 0x"+e.rawValue);return new n(t,16).toString(10)},formatOutputBool:function(e,a){var t=e.staticPart();if(!t&&!e.rawValue)throw new Error("Couldn't decode "+a+" from ABI: 0x"+e.rawValue);return"0000000000000000000000000000000000000000000000000000000000000001"===t},formatOutputBytes:function(e,a){var t=a.match(/^bytes([0-9]*)/),r=parseInt(t[1]);if(e.staticPart().slice(0,2*r).length!==2*r)throw new Error("Couldn't decode "+a+" from ABI: 0x"+e.rawValue+" The size doesn't match.");return"0x"+e.staticPart().slice(0,2*r)},formatOutputDynamicBytes:function(e,a){var t=e.dynamicPart().slice(0,64);if(!t)throw new Error("Couldn't decode "+a+" from ABI: 0x"+e.rawValue);var r=2*new n(t,16).toNumber();return"0x"+e.dynamicPart().substr(64,r)},formatOutputString:function(e){var a=e.dynamicPart().slice(0,64);if(!a)throw new Error("ERROR: The returned value is not a convertible string:"+a);var t=2*new n(a,16).toNumber();return t?c.hexToUtf8("0x"+e.dynamicPart().substr(64,t).replace(/^0x/i,"")):""},formatOutputAddress:function(e,a){var t=e.staticPart();if(!t)throw new Error("Couldn't decode "+a+" from ABI: 0x"+e.rawValue);return c.toChecksumAddress("0x"+t.slice(t.length-40,t.length))},toTwosComplement:c.toTwosComplement}},function(e,a,t){"use strict";var r=t(46),c=t(0);function n(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function i(e){return 1===e.length?"0"+e:e}function f(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}a.inherits=c,a.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),r=0;r<e.length;r+=2)t.push(parseInt(e[r]+e[r+1],16))}else for(var r=0;r<e.length;r++){var c=e.charCodeAt(r),n=c>>8,i=255&c;n?t.push(n,i):t.push(i)}else for(r=0;r<e.length;r++)t[r]=0|e[r];return t},a.toHex=function(e){for(var a="",t=0;t<e.length;t++)a+=i(e[t].toString(16));return a},a.htonl=n,a.toHex32=function(e,a){for(var t="",r=0;r<e.length;r++){var c=e[r];"little"===a&&(c=n(c)),t+=f(c.toString(16))}return t},a.zero2=i,a.zero8=f,a.join32=function(e,a,t,c){var n=t-a;r(n%4==0);for(var i=new Array(n/4),f=0,o=a;f<i.length;f++,o+=4){var d;d="big"===c?e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3]:e[o+3]<<24|e[o+2]<<16|e[o+1]<<8|e[o],i[f]=d>>>0}return i},a.split32=function(e,a){for(var t=new Array(4*e.length),r=0,c=0;r<e.length;r++,c+=4){var n=e[r];"big"===a?(t[c]=n>>>24,t[c+1]=n>>>16&255,t[c+2]=n>>>8&255,t[c+3]=255&n):(t[c+3]=n>>>24,t[c+2]=n>>>16&255,t[c+1]=n>>>8&255,t[c]=255&n)}return t},a.rotr32=function(e,a){return e>>>a|e<<32-a},a.rotl32=function(e,a){return e<<a|e>>>32-a},a.sum32=function(e,a){return e+a>>>0},a.sum32_3=function(e,a,t){return e+a+t>>>0},a.sum32_4=function(e,a,t,r){return e+a+t+r>>>0},a.sum32_5=function(e,a,t,r,c){return e+a+t+r+c>>>0},a.sum64=function(e,a,t,r){var c=e[a],n=r+e[a+1]>>>0,i=(n<r?1:0)+t+c;e[a]=i>>>0,e[a+1]=n},a.sum64_hi=function(e,a,t,r){return(a+r>>>0<a?1:0)+e+t>>>0},a.sum64_lo=function(e,a,t,r){return a+r>>>0},a.sum64_4_hi=function(e,a,t,r,c,n,i,f){var o=0,d=a;return o+=(d=d+r>>>0)<a?1:0,o+=(d=d+n>>>0)<n?1:0,e+t+c+i+(o+=(d=d+f>>>0)<f?1:0)>>>0},a.sum64_4_lo=function(e,a,t,r,c,n,i,f){return a+r+n+f>>>0},a.sum64_5_hi=function(e,a,t,r,c,n,i,f,o,d){var s=0,b=a;return s+=(b=b+r>>>0)<a?1:0,s+=(b=b+n>>>0)<n?1:0,s+=(b=b+f>>>0)<f?1:0,e+t+c+i+o+(s+=(b=b+d>>>0)<d?1:0)>>>0},a.sum64_5_lo=function(e,a,t,r,c,n,i,f,o,d){return a+r+n+f+d>>>0},a.rotr64_hi=function(e,a,t){return(a<<32-t|e>>>t)>>>0},a.rotr64_lo=function(e,a,t){return(e<<32-t|a>>>t)>>>0},a.shr64_hi=function(e,a,t){return e>>>t},a.shr64_lo=function(e,a,t){return(e<<32-t|a>>>t)>>>0}},function(e,a,t){var r=t(22);e.exports=function(e,a,t){return function(){var c=r(arguments);return null==c[0]?t:"number"==typeof c[0].length?e.apply(null,c):a.apply(null,c)}}},function(e,a){e.exports=function(){for(var e={},a=0;a<arguments.length;a++){var r=arguments[a];for(var c in r)t.call(r,c)&&(e[c]=r[c])}return e};var t=Object.prototype.hasOwnProperty},function(e,a,t){"use strict";var r;try{throw new Error}catch(e){r=e}var c=t(498),n=t(497),i=t(12);function f(){this._isTickUsed=!1,this._lateQueue=new n(16),this._normalQueue=new n(16),this._trampolineEnabled=!0;var e=this;this.drainQueues=function(){e._drainQueues()},this._schedule=c.isStatic?c(this.drainQueues):c}function o(e,a,t){this._lateQueue.push(e,a,t),this._queueTick()}function d(e,a,t){this._normalQueue.push(e,a,t),this._queueTick()}function s(e){this._normalQueue._pushOne(e),this._queueTick()}f.prototype.disableTrampolineIfNecessary=function(){i.hasDevTools&&(this._trampolineEnabled=!1)},f.prototype.enableTrampoline=function(){this._trampolineEnabled||(this._trampolineEnabled=!0,this._schedule=function(e){setTimeout(e,0)})},f.prototype.haveItemsQueued=function(){return this._normalQueue.length()>0},f.prototype.throwLater=function(e,a){if(1===arguments.length&&(a=e,e=function(){throw a}),"undefined"!=typeof setTimeout)setTimeout(function(){e(a)},0);else try{this._schedule(function(){e(a)})}catch(e){throw new Error("No async scheduler available\n\n    See http://goo.gl/m3OTXk\n")}},i.hasDevTools?(c.isStatic&&(c=function(e){setTimeout(e,0)}),f.prototype.invokeLater=function(e,a,t){this._trampolineEnabled?o.call(this,e,a,t):this._schedule(function(){setTimeout(function(){e.call(a,t)},100)})},f.prototype.invoke=function(e,a,t){this._trampolineEnabled?d.call(this,e,a,t):this._schedule(function(){e.call(a,t)})},f.prototype.settlePromises=function(e){this._trampolineEnabled?s.call(this,e):this._schedule(function(){e._settlePromises()})}):(f.prototype.invokeLater=o,f.prototype.invoke=d,f.prototype.settlePromises=s),f.prototype.invokeFirst=function(e,a,t){this._normalQueue.unshift(e,a,t),this._queueTick()},f.prototype._drainQueue=function(e){for(;e.length()>0;){var a=e.shift();if("function"==typeof a){var t=e.shift(),r=e.shift();a.call(t,r)}else a._settlePromises()}},f.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._drainQueue(this._lateQueue)},f.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},f.prototype._reset=function(){this._isTickUsed=!1},e.exports=new f,e.exports.firstLineError=r},function(e,a,t){var r=0,c={},n=c.path=r++,i=c.mode=r++,f=c.uid=r++,o=c.gid=r++,d=c.size=r++,s=c.mtime=r++,b=c.cksum=r++,u=c.type=r++,l=c.linkpath=r++,p=[];p[n]=100,p[i]=8,p[f]=8,p[o]=8,p[d]=12,p[s]=12,p[b]=8,p[u]=1,p[l]=100;var h=c.ustar=r++,m=c.ustarver=r++,g=c.uname=r++,v=c.gname=r++,y=c.devmaj=r++,_=c.devmin=r++,w=c.prefix=r++,A=c.fill=r++;c[r]=null,p[h]=6,p[m]=2,p[g]=32,p[v]=32,p[y]=8,p[_]=8,p[w]=155,p[A]=12;for(var k={},x={},E=0,S=0;S<r;S++)x[S]=E,k[S]=E+=p[S];Object.keys(c).forEach(function(e){null!==c[e]&&(c[c[e]]=e)});var T={0:"File","\0":"OldFile","":"OldFile",1:"Link",2:"SymbolicLink",3:"CharacterDevice",4:"BlockDevice",5:"Directory",6:"FIFO",7:"ContiguousFile",g:"GlobalExtendedHeader",x:"ExtendedHeader",A:"SolarisACL",D:"GNUDumpDir",I:"Inode",K:"NextFileHasLongLinkpath",L:"NextFileHasLongPath",M:"ContinuationFile",N:"OldGnuLongPath",S:"SparseFile",V:"TapeVolumeHeader",X:"OldExtendedHeader"};Object.keys(T).forEach(function(e){T[T[e]]=T[T[e]]||e});var j={suid:2048,sgid:1024,svtx:512,uread:256,uwrite:128,uexec:64,gread:32,gwrite:16,gexec:8,oread:4,owrite:2,oexec:1,all:4095};Object.keys(j).forEach(function(e){j[j[e]]=j[j[e]]||e});a.fields=c,a.fieldSize=p,a.fieldOffs=x,a.fieldEnds=k,a.types=T,a.modes=j,a.numeric={mode:!0,uid:!0,gid:!0,size:!0,mtime:!0,devmaj:!0,devmin:!0,cksum:!0,atime:!0,ctime:!0,dev:!0,ino:!0,nlink:!0},a.headerSize=512,a.blockSize=512,a.knownExtended={atime:!0,charset:!0,comment:!0,ctime:!0,gid:!0,gname:!0,linkpath:!0,mtime:!0,path:!0,realtime:!0,security:!0,size:!0,uid:!0,uname:!0},a.Pack=t(657),a.Parse=t(648),a.Extract=t(645)},function(e,a,t){"use strict";var r,c,n=t(57),i=n.freeze,f=t(13),o=f.inherits,d=f.notEnumerableProp;function s(e,a){function t(r){if(!(this instanceof t))return new t(r);d(this,"message","string"==typeof r?r:a),d(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return o(t,Error),t}var b=s("Warning","warning"),u=s("CancellationError","cancellation error"),l=s("TimeoutError","timeout error"),p=s("AggregateError","aggregate error");try{r=TypeError,c=RangeError}catch(e){r=s("TypeError","type error"),c=s("RangeError","range error")}for(var h="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),m=0;m<h.length;++m)"function"==typeof Array.prototype[h[m]]&&(p.prototype[h[m]]=Array.prototype[h[m]]);n.defineProperty(p.prototype,"length",{value:0,configurable:!1,writable:!0,enumerable:!0}),p.prototype.isOperational=!0;var g=0;function v(e){if(!(this instanceof v))return new v(e);d(this,"name","OperationalError"),d(this,"message",e),this.cause=e,this.isOperational=!0,e instanceof Error?(d(this,"message",e.message),d(this,"stack",e.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}p.prototype.toString=function(){var e=Array(4*g+1).join(" "),a="\n"+e+"AggregateError of:\n";g++,e=Array(4*g+1).join(" ");for(var t=0;t<this.length;++t){for(var r=this[t]===this?"[Circular AggregateError]":this[t]+"",c=r.split("\n"),n=0;n<c.length;++n)c[n]=e+c[n];a+=(r=c.join("\n"))+"\n"}return g--,a},o(v,Error);var y=Error.__BluebirdErrorTypes__;y||(y=i({CancellationError:u,TimeoutError:l,OperationalError:v,RejectionError:v,AggregateError:p}),n.defineProperty(Error,"__BluebirdErrorTypes__",{value:y,writable:!1,enumerable:!1,configurable:!1})),e.exports={Error:Error,TypeError:r,RangeError:c,CancellationError:y.CancellationError,OperationalError:y.OperationalError,TimeoutError:y.TimeoutError,AggregateError:y.AggregateError,Warning:b}},function(e,a){e.exports=__webpack_require__(27)},function(e,a,t){const r=t(933),c=t(909),n=t(1).inherits,i=t(899);function f(){r.apply(this,arguments),c(this)}e.exports=f,n(f,r),f.prove=i.prove,f.verifyProof=i.verifyProof},function(e,a,t){const r=t(3),c=t(52),n=t(7).Buffer;var i=e.exports=function(e){var a=[{name:"nonce",default:n.alloc(0)},{name:"balance",default:n.alloc(0)},{name:"stateRoot",length:32,default:r.SHA3_RLP},{name:"codeHash",length:32,default:r.SHA3_NULL}];r.defineProperties(this,a,e)};i.prototype.serialize=function(){return c.encode(this.raw)},i.prototype.isContract=function(){return this.codeHash.toString("hex")!==r.SHA3_NULL_S},i.prototype.getCode=function(e,a){this.isContract()?e.getRaw(this.codeHash,a):a(null,n.alloc(0))},i.prototype.setCode=function(e,a,t){var c=this;this.codeHash=r.sha3(a),this.codeHash.toString("hex")!==r.SHA3_NULL_S?e.putRaw(this.codeHash,a,function(e){t(e,c.codeHash)}):t(null,n.alloc(0))},i.prototype.getStorage=function(e,a,t){var r=e.copy();r.root=this.stateRoot,r.get(a,t)},i.prototype.setStorage=function(e,a,t,r){var c=this,n=e.copy();n.root=c.stateRoot,n.put(a,t,function(e){if(e)return r();c.stateRoot=n.root,r()})},i.prototype.isEmpty=function(){return""===this.balance.toString("hex")&&""===this.nonce.toString("hex")&&this.stateRoot.toString("hex")===r.SHA3_RLP_S&&this.codeHash.toString("hex")===r.SHA3_NULL_S}},function(e,a){function t(e,a){if(!e)throw new Error(a||"Assertion failed")}e.exports=t,t.equal=function(e,a,t){if(e!=a)throw new Error(t||"Assertion failed: "+e+" != "+a)}},function(e,a){e.exports=function(e,a,t){if(null!=e)for(var r=-1,c=e.length;++r<c&&!1!==a.call(t,e[r],r,e););}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){a=r(a,t);var c=[];if(null==e)return c;for(var n,i=-1,f=e.length;++i<f;)a(n=e[i],i,e)&&c.push(n);return c}},function(e,a,t){var r=t(36),c=t(306),n=function(e){this._inputFormatter=e.inputFormatter,this._outputFormatter=e.outputFormatter};n.prototype.isType=function(e){throw"This method should be overwritten for type "+e},n.prototype.staticPartLength=function(e){return(this.nestedTypes(e)||["[1]"]).map(function(e){return parseInt(e.slice(1,-1),10)||1}).reduce(function(e,a){return e*a},32)},n.prototype.isDynamicArray=function(e){var a=this.nestedTypes(e);return!!a&&!a[a.length-1].match(/[0-9]{1,}/g)},n.prototype.isStaticArray=function(e){var a=this.nestedTypes(e);return!!a&&!!a[a.length-1].match(/[0-9]{1,}/g)},n.prototype.staticArrayLength=function(e){var a=this.nestedTypes(e);return a?parseInt(a[a.length-1].match(/[0-9]{1,}/g)||1):1},n.prototype.nestedName=function(e){var a=this.nestedTypes(e);return a?e.substr(0,e.length-a[a.length-1].length):e},n.prototype.isDynamicType=function(){return!1},n.prototype.nestedTypes=function(e){return e.match(/(\[[0-9]*\])/g)},n.prototype.encode=function(e,a){var t=this;return this.isDynamicArray(a)?function(){var c=e.length,n=t.nestedName(a),i=[];return i.push(r.formatInputInt(c).encode()),e.forEach(function(e){i.push(t.encode(e,n))}),i}():this.isStaticArray(a)?function(){for(var r=t.staticArrayLength(a),c=t.nestedName(a),n=[],i=0;i<r;i++)n.push(t.encode(e[i],c));return n}():this._inputFormatter(e,a).encode()},n.prototype.decode=function(e,a,t){var r=this;if(this.isDynamicArray(t))return function(){for(var c=parseInt("0x"+e.substr(2*a,64)),n=parseInt("0x"+e.substr(2*c,64)),i=c+32,f=r.nestedName(t),o=r.staticPartLength(f),d=32*Math.floor((o+31)/32),s=[],b=0;b<n*d;b+=d)s.push(r.decode(e,i+b,f));return s}();if(this.isStaticArray(t))return function(){for(var c=r.staticArrayLength(t),n=a,i=r.nestedName(t),f=r.staticPartLength(i),o=32*Math.floor((f+31)/32),d=[],s=0;s<c*o;s+=o)d.push(r.decode(e,n+s,i));return d}();if(this.isDynamicType(t))return function(){var n=parseInt("0x"+e.substr(2*a,64)),i=parseInt("0x"+e.substr(2*n,64)),f=Math.floor((i+31)/32),o=new c(e.substr(2*n,64*(1+f)),0,e);return r._outputFormatter(o,t)}();var n=this.staticPartLength(t),i=new c(e.substr(2*a,2*n),void 0,e);return this._outputFormatter(i,t)},e.exports=n},function(e,a,t){"use strict";var r=t(20),c=t(21).errors,n=t(21).formatters,i=t(27),f=t(310),o=t(114).subscriptions,d=function(e){if(!e.call||!e.name)throw new Error('When creating a method you need to provide at least the "name" and "call" property.');this.name=e.name,this.call=e.call,this.params=e.params||0,this.inputFormatter=e.inputFormatter,this.outputFormatter=e.outputFormatter,this.transformPayload=e.transformPayload,this.extraFormatters=e.extraFormatters,this.requestManager=e.requestManager,this.accounts=e.accounts,this.defaultBlock=e.defaultBlock||"latest",this.defaultAccount=e.defaultAccount||null};d.prototype.setRequestManager=function(e,a){this.requestManager=e,a&&(this.accounts=a)},d.prototype.createFunction=function(e,a){var t=this.buildCall();return t.call=this.call,this.setRequestManager(e||this.requestManager,a||this.accounts),t},d.prototype.attachToObject=function(e){var a=this.buildCall();a.call=this.call;var t=this.name.split(".");t.length>1?(e[t[0]]=e[t[0]]||{},e[t[0]][t[1]]=a):e[t[0]]=a},d.prototype.getCall=function(e){return r.isFunction(this.call)?this.call(e):this.call},d.prototype.extractCallback=function(e){if(r.isFunction(e[e.length-1]))return e.pop()},d.prototype.validateArgs=function(e){if(e.length!==this.params)throw c.InvalidNumberOfParams(e.length,this.params,this.name)},d.prototype.formatInput=function(e){var a=this;return this.inputFormatter?this.inputFormatter.map(function(t,r){return t?t.call(a,e[r]):e[r]}):e},d.prototype.formatOutput=function(e){var a=this;return r.isArray(e)?e.map(function(e){return a.outputFormatter&&e?a.outputFormatter(e):e}):this.outputFormatter&&e?this.outputFormatter(e):e},d.prototype.toPayload=function(e){var a=this.getCall(e),t=this.extractCallback(e),r=this.formatInput(e);this.validateArgs(r);var c={method:a,params:r,callback:t};return this.transformPayload&&(c=this.transformPayload(c)),c},d.prototype._confirmTransaction=function(e,a,t){var c=this,s=!1,b=!0,u=0,l=0,p=null,h=r.isObject(t.params[0])&&t.params[0].gas?t.params[0].gas:null,m=r.isObject(t.params[0])&&t.params[0].data&&t.params[0].from&&!t.params[0].to,g=[new d({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,inputFormatter:[null],outputFormatter:n.outputTransactionReceiptFormatter}),new d({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[n.inputAddressFormatter,n.inputDefaultBlockNumberFormatter]}),new o({name:"subscribe",type:"eth",subscriptions:{newBlockHeaders:{subscriptionName:"newHeads",params:0,outputFormatter:n.outputBlockFormatter}}})],v={};r.each(g,function(e){e.attachToObject(v),e.requestManager=c.requestManager});var y=function(t,r,n,o,d){if(!n)return d||(d={unsubscribe:function(){clearInterval(p)}}),(t?f.resolve(t):v.getTransactionReceipt(a)).catch(function(a){d.unsubscribe(),s=!0,i._fireError({message:"Failed to check for transaction receipt:",data:a},e.eventEmitter,e.reject)}).then(function(a){if(!a||!a.blockHash)throw new Error("Receipt missing or blockHash null");return c.extraFormatters&&c.extraFormatters.receiptFormatter&&(a=c.extraFormatters.receiptFormatter(a)),e.eventEmitter.listeners("confirmation").length>0&&(void 0!==t&&0===l||e.eventEmitter.emit("confirmation",l,a),b=!1,25===++l&&(d.unsubscribe(),e.eventEmitter.removeAllListeners())),a}).then(function(a){if(m&&!s){if(!a.contractAddress)return b&&(d.unsubscribe(),s=!0),void i._fireError(new Error("The transaction receipt didn't contain a contract address."),e.eventEmitter,e.reject);v.getCode(a.contractAddress,function(t,r){r&&(r.length>2?(e.eventEmitter.emit("receipt",a),c.extraFormatters&&c.extraFormatters.contractDeployFormatter?e.resolve(c.extraFormatters.contractDeployFormatter(a)):e.resolve(a),b&&e.eventEmitter.removeAllListeners()):i._fireError(new Error("The contract code couldn't be stored, please check your gas limit."),e.eventEmitter,e.reject),b&&d.unsubscribe(),s=!0)})}return a}).then(function(a){m||s||(a.outOfGas||h&&h===a.gasUsed||!0!==a.status&&"0x1"!==a.status&&void 0!==a.status?(a&&(a=JSON.stringify(a,null,2)),!1===a.status||"0x0"===a.status?i._fireError(new Error("Transaction has been reverted by the EVM:\n"+a),e.eventEmitter,e.reject):i._fireError(new Error("Transaction ran out of gas. Please provide more gas:\n"+a),e.eventEmitter,e.reject)):(e.eventEmitter.emit("receipt",a),e.resolve(a),b&&e.eventEmitter.removeAllListeners()),b&&d.unsubscribe(),s=!0)}).catch(function(){u++,r?u-1>=750&&(d.unsubscribe(),s=!0,i._fireError(new Error("Transaction was not mined within750 seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!"),e.eventEmitter,e.reject)):u-1>=50&&(d.unsubscribe(),s=!0,i._fireError(new Error("Transaction was not mined within 50 blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!"),e.eventEmitter,e.reject))});d.unsubscribe(),s=!0,i._fireError({message:"Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.",data:n},e.eventEmitter,e.reject)},_=function(e){r.isFunction(this.requestManager.provider.on)?v.subscribe("newBlockHeaders",y.bind(null,e,!1)):p=setInterval(y.bind(null,e,!0),1e3)}.bind(this);v.getTransactionReceipt(a).then(function(a){a&&a.blockHash?(e.eventEmitter.listeners("confirmation").length>0&&_(a),y(a,!1)):s||_()}).catch(function(){s||_()})};var s=function(e,a){return r.isNumber(e)?a.wallet[e]:r.isObject(e)&&e.address&&e.privateKey?e:a.wallet[e.toLowerCase()]};d.prototype.buildCall=function(){var e=this,a="eth_sendTransaction"===e.call||"eth_sendRawTransaction"===e.call,t=function(){var t=f(!a),c=e.toPayload(Array.prototype.slice.call(arguments)),n=function(r,n){try{n=e.formatOutput(n)}catch(e){r=e}if(n instanceof Error&&(r=n),r)return r.error&&(r=r.error),i._fireError(r,t.eventEmitter,t.reject,c.callback);c.callback&&c.callback(null,n),a?(t.eventEmitter.emit("transactionHash",n),e._confirmTransaction(t,n,c)):r||t.resolve(n)},o=function(a){var t=r.extend({},c,{method:"eth_sendRawTransaction",params:[a.rawTransaction]});e.requestManager.send(t,n)},b=function(e,a){var c;if(a&&a.accounts&&a.accounts.wallet&&a.accounts.wallet.length)if("eth_sendTransaction"===e.method){var i=e.params[0];if((c=s(r.isObject(i)?i.from:null,a.accounts))&&c.privateKey)return a.accounts.signTransaction(r.omit(i,"from"),c.privateKey).then(o)}else if("eth_sign"===e.method){var f=e.params[1];if((c=s(e.params[0],a.accounts))&&c.privateKey){var d=a.accounts.sign(f,c.privateKey);return e.callback&&e.callback(null,d.signature),void t.resolve(d.signature)}}return a.requestManager.send(e,n)};a&&r.isObject(c.params[0])&&!c.params[0].gasPrice?new d({name:"getGasPrice",call:"eth_gasPrice",params:0}).createFunction(e.requestManager)(function(a,t){t&&(c.params[0].gasPrice=t),b(c,e)}):b(c,e);return t.eventEmitter};return t.method=e,t.request=this.request.bind(this),t},d.prototype.request=function(){var e=this.toPayload(Array.prototype.slice.call(arguments));return e.format=this.formatOutput.bind(this),e},e.exports=d},function(e,a,t){"use strict";var r=t(826),c=t(788);e.exports={packageInit:function(e,a){if(a=Array.prototype.slice.call(a),!e)throw new Error('You need to instantiate using the "new" keyword.');Object.defineProperty(e,"currentProvider",{get:function(){return e._provider},set:function(a){return e.setProvider(a)},enumerable:!0,configurable:!0}),a[0]&&a[0]._requestManager?e._requestManager=new r.Manager(a[0].currentProvider):(e._requestManager=new r.Manager,e._requestManager.setProvider(a[0],a[1])),e.givenProvider=r.Manager.givenProvider,e.providers=r.Manager.providers,e._provider=e._requestManager.provider,e.setProvider||(e.setProvider=function(a,t){return e._requestManager.setProvider(a,t),e._provider=e._requestManager.provider,!0}),e.BatchRequest=r.BatchManager.bind(null,e._requestManager),e.extend=c(e)},addProviders:function(e){e.givenProvider=r.Manager.givenProvider,e.providers=r.Manager.providers}}},function(e,a,t){const r=t(11);function c(e,a){if("00"===e.slice(0,2))throw new Error("invalid RLP: extra zeros");return parseInt(e,a)}function n(e,a){if(e<56)return new Buffer([e+a]);var t=f(e),r=f(a+55+t.length/2);return new Buffer(r+t,"hex")}function i(e){return"0x"===e.slice(0,2)}function f(e){var a=e.toString(16);return a.length%2&&(a="0"+a),a}function o(e){if(!Buffer.isBuffer(e))if("string"==typeof e)e=i(e)?new Buffer(function(e){return e.length%2&&(e="0"+e),e}(function(e){return"string"!=typeof e?e:i(e)?e.slice(2):e}(e)),"hex"):new Buffer(e);else if("number"==typeof e)e=e?function(e){var a=f(e);return new Buffer(a,"hex")}(e):new Buffer([]);else if(null===e||void 0===e)e=new Buffer([]);else{if(!e.toArray)throw new Error("invalid type");e=new Buffer(e.toArray())}return e}a.encode=function(e){if(e instanceof Array){for(var t=[],r=0;r<e.length;r++)t.push(a.encode(e[r]));var c=Buffer.concat(t);return Buffer.concat([n(c.length,192),c])}return 1===(e=o(e)).length&&e[0]<128?e:Buffer.concat([n(e.length,128),e])},a.decode=function(e,a){if(!e||0===e.length)return new Buffer([]);var t=function e(a){var t,r,n,i,f;var o=[];var d=a[0];if(d<=127)return{data:a.slice(0,1),remainder:a.slice(1)};if(d<=183){if(t=d-127,n=128===d?new Buffer([]):a.slice(1,t),2===t&&n[0]<128)throw new Error("invalid rlp encoding: byte must be less 0x80");return{data:n,remainder:a.slice(t)}}if(d<=191){if(r=d-182,t=c(a.slice(1,r).toString("hex"),16),(n=a.slice(r,t+r)).length<t)throw new Error("invalid RLP");return{data:n,remainder:a.slice(t+r)}}if(d<=247){for(t=d-191,i=a.slice(1,t);i.length;)f=e(i),o.push(f.data),i=f.remainder;return{data:o,remainder:a.slice(t)}}r=d-246,t=c(a.slice(1,r).toString("hex"),16);var s=r+t;if(s>a.length)throw new Error("invalid rlp: total length is larger than the data");if(0===(i=a.slice(r,s)).length)throw new Error("invalid rlp, List has a invalid length");for(;i.length;)f=e(i),o.push(f.data),i=f.remainder;return{data:o,remainder:a.slice(s)}}(e=o(e));return a?t:(r.equal(t.remainder.length,0,"invalid remainder"),t.data)},a.getLength=function(e){if(!e||0===e.length)return new Buffer([]);var a=(e=o(e))[0];if(a<=127)return e.length;if(a<=183)return a-127;if(a<=191)return a-182;if(a<=247)return a-191;var t=a-246;return t+c(e.slice(1,t).toString("hex"),16)}},function(e,a){e.exports=function(e){return!!e&&"object"==typeof e&&e.constructor===Object}},function(e,a,t){var r=t(75);e.exports=function(e,a){return-1!==r(e,a)}},function(e,a){e.exports=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)}},function(e,a,t){e.exports=b;var r=t(8),c=t(6).Stream,n=t(0),i=t(2),f=t(109),o=b.hardLinks={},d=t(159);n(b,d);var s=t(277);function b(e,a){var r,c;if(!(this instanceof b))return new b(e,a);switch("string"==typeof e&&(e={path:e}),e.type&&"function"==typeof e.type?c=r=e.type:(r=f(e),c=b),a&&!r&&(e[r=f(a)]=!0,e.type=r),r){case"Directory":c=t(276);break;case"Link":case"File":c=t(275);break;case"SymbolicLink":c=s;break;case"Socket":c=t(656);break;case null:c=t(274)}if(!(this instanceof c))return new c(e);d.call(this),e.path||this.error("Must provide a path",null,!0),this.readable=!0,this.writable=!1,this.type=r,this.props=e,this.depth=e.depth=e.depth||0,this.parent=e.parent||null,this.root=e.root||e.parent&&e.parent.root||this,this._path=this.path=i.resolve(e.path),"win32"===process.platform&&(this.path=this._path=this.path.replace(/\?/g,"_"),this._path.length>=260&&(this._swallowErrors=!0,this._path="\\\\?\\"+this.path.replace(/\//g,"\\"))),this.basename=e.basename=i.basename(this.path),this.dirname=e.dirname=i.dirname(this.path),e.parent=e.root=null,this.size=e.size,this.filter="function"==typeof e.filter?e.filter:null,"alpha"===e.sort&&(e.sort=u),this._stat(a)}function u(e,a){return e===a?0:e.toLowerCase()>a.toLowerCase()?1:e.toLowerCase()<a.toLowerCase()?-1:e>a?1:-1}b.prototype._stat=function(e){var a=this,t=a.props,c=t.follow?"stat":"lstat";function n(e,r){if(e)return a.error(e);if(Object.keys(r).forEach(function(e){t[e]=r[e]}),void 0!==a.size&&t.size!==a.size)return a.error("incorrect size");a.size=t.size;var c=f(t);if(!1!==t.hardlinks&&"Directory"!==c&&t.nlink&&t.nlink>1){var n=t.dev+":"+t.ino;o[n]!==a._path&&o[n]?(c=a.type=a.props.type="Link",a.Link=a.props.Link=!0,a.linkpath=a.props.linkpath=o[n],a._stat=a._read=s.prototype._read):o[n]=a._path}if(a.type&&a.type!==c&&a.error("Unexpected type: "+c),a.filter){var i=a._proxy||a;if(!a.filter.call(i,i,t))return void(a._disowned||(a.abort(),a.emit("end"),a.emit("close")))}var d=["_stat","stat","ready"],b=0;!function e(){if(a._aborted)return a.emit("end"),void a.emit("close");if(a._paused&&"Directory"!==a.type)a.once("resume",e);else{var r=d[b++];if(!r)return a._read();a.emit(r,t),e()}}()}e?process.nextTick(n.bind(null,null,e)):r[c](a._path,n)},b.prototype.pipe=function(e){var a=this;return"function"==typeof e.add&&a.on("entry",function(t){!1===e.add(t)&&a.pause()}),c.prototype.pipe.apply(this,arguments)},b.prototype.pause=function(e){this._paused=!0,e=e||this,this.emit("pause",e),this._stream&&this._stream.pause(e)},b.prototype.resume=function(e){this._paused=!1,e=e||this,this.emit("resume",e),this._stream&&this._stream.resume(e),this._read()},b.prototype._read=function(){this.error("Cannot read unknown type: "+this.type)}},function(e,a){var t=function(){"use strict";return void 0===this}();if(t)e.exports={freeze:Object.freeze,defineProperty:Object.defineProperty,getDescriptor:Object.getOwnPropertyDescriptor,keys:Object.keys,names:Object.getOwnPropertyNames,getPrototypeOf:Object.getPrototypeOf,isArray:Array.isArray,isES5:t,propertyIsWritable:function(e,a){var t=Object.getOwnPropertyDescriptor(e,a);return!(t&&!t.writable&&!t.set)}};else{var r={}.hasOwnProperty,c={}.toString,n={}.constructor.prototype,i=function(e){var a=[];for(var t in e)r.call(e,t)&&a.push(t);return a};e.exports={isArray:function(e){try{return"[object Array]"===c.call(e)}catch(e){return!1}},keys:i,names:i,defineProperty:function(e,a,t){return e[a]=t.value,e},getDescriptor:function(e,a){return{value:e[a]}},freeze:function(e){return e},getPrototypeOf:function(e){try{return Object(e).constructor.prototype}catch(e){return n}},isES5:t,propertyIsWritable:function(){return!0}}}},function(e,a){e.exports=__webpack_require__(141)},function(e,a){e.exports=__webpack_require__(45)},function(e,a){(function(a){e.exports=a}).call(this,{})},function(e,a,t){const r=t(177);function c(e,a){for(var t=0;e[t]===a[t]&&e.length>t;)t++;return t}e.exports={matchingNibbleLength:c,callTogether:function(){var e=arguments,a=e.length,t=a;if(!a)return function(){};return function(){for(a=t;a--;){var r=e[a];if("function"==typeof r)var c=e[a].apply(this,arguments)}return c}},asyncFirstSeries:function(e,a,t){var c=!1;r.eachSeries(e,function(e,r){if(c)return r;a(e,function(e,a){a&&(c=!0,process.nextTick(t.bind(null,null,a))),r(e)})},function(){c||t()})},doKeysMatch:function(e,a){var t=c(e,a);return t===e.length&&t===a.length}}},function(e,a,t){"use strict";var r=t(118),c=Object.keys||function(e){var a=[];for(var t in e)a.push(t);return a};e.exports=b;var n=t(17);n.inherits=t(0);var i=t(342),f=t(339);n.inherits(b,i);for(var o=c(f.prototype),d=0;d<o.length;d++){var s=o[d];b.prototype[s]||(b.prototype[s]=f.prototype[s])}function b(e){if(!(this instanceof b))return new b(e);i.call(this,e),f.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",u)}function u(){this.allowHalfOpen||this._writableState.ended||r.nextTick(l,this)}function l(e){e.end()}Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),b.prototype._destroy=function(e,a){this.push(null),this.end(),r.nextTick(a,e)}},function(e,a,t){var r=t(24).Buffer,c=r.isEncoding||function(e){switch(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}};var n=a.StringDecoder=function(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!c(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=f;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=o;break;default:return void(this.write=i)}this.charBuffer=new r(6),this.charReceived=0,this.charLength=0};function i(e){return e.toString(this.encoding)}function f(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function o(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}n.prototype.write=function(e){for(var a="";this.charLength;){var t=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,t),this.charReceived+=t,this.charReceived<this.charLength)return"";if(e=e.slice(t,e.length),!((c=(a=this.charBuffer.slice(0,this.charLength).toString(this.encoding)).charCodeAt(a.length-1))>=55296&&c<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return a;break}this.charLength+=this.surrogateSize,a=""}this.detectIncompleteChar(e);var r=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,r),r-=this.charReceived);var c;r=(a+=e.toString(this.encoding,0,r)).length-1;if((c=a.charCodeAt(r))>=55296&&c<=56319){var n=this.surrogateSize;return this.charLength+=n,this.charReceived+=n,this.charBuffer.copy(this.charBuffer,n,0,n),e.copy(this.charBuffer,0,0,n),a.substring(0,r)}return a},n.prototype.detectIncompleteChar=function(e){for(var a=e.length>=3?3:e.length;a>0;a--){var t=e[e.length-a];if(1==a&&t>>5==6){this.charLength=2;break}if(a<=2&&t>>4==14){this.charLength=3;break}if(a<=3&&t>>3==30){this.charLength=4;break}}this.charReceived=a},n.prototype.end=function(e){var a="";if(e&&e.length&&(a=this.write(e)),this.charReceived){var t=this.charReceived,r=this.charBuffer,c=this.encoding;a+=r.slice(0,t).toString(c)}return a}},function(e,a,t){e.exports=f;var r=Object.keys||function(e){var a=[];for(var t in e)a.push(t);return a},c=t(17);c.inherits=t(0);var n=t(354),i=t(353);function f(e){if(!(this instanceof f))return new f(e);n.call(this,e),i.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",o)}function o(){this.allowHalfOpen||this._writableState.ended||process.nextTick(this.end.bind(this))}c.inherits(f,n),function(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}(r(i.prototype),function(e){f.prototype[e]||(f.prototype[e]=i.prototype[e])})},function(e,a,t){var r=a.noop=function(){};function c(e,a,t){this.logFunction=t,this.identifier=e,this.uniqueID=a,this.buffer=[]}a.extend=function(e,a){for(var t in a)e[t]=a[t]},a.eventEmitterListenerCount=t(5).EventEmitter.listenerCount||function(e,a){return e.listeners(a).length},a.BufferingLogger=function(e,a){var n=t(115)(e);if(n.enabled){var i=new c(e,a,n),f=i.log.bind(i);return f.printOutput=i.printOutput.bind(i),f.enabled=n.enabled,f}return n.printOutput=r,n},c.prototype.log=function(){return this.buffer.push([new Date,Array.prototype.slice.call(arguments)]),this},c.prototype.clear=function(){return this.buffer=[],this},c.prototype.printOutput=function(e){e||(e=this.logFunction);var a=this.uniqueID;this.buffer.forEach(function(t){var r=t[0].toLocaleString(),c=t[1].slice(),n=c[0];void 0!==n&&null!==n&&(n="%s - %s - "+n.toString(),c.splice(0,1,n,r,a),e.apply(global,c))})}},function(e,a,t){(function(e){var r;
/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */(function(){var c,n=200,i="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",f="Expected a function",o="__lodash_hash_undefined__",d=500,s="__lodash_placeholder__",b=1,u=2,l=4,p=1,h=2,m=1,g=2,v=4,y=8,_=16,w=32,A=64,k=128,x=256,E=512,S=30,T="...",j=800,C=16,R=1,O=2,B=1/0,M=9007199254740991,N=1.7976931348623157e308,I=NaN,P=4294967295,F=P-1,L=P>>>1,D=[["ary",k],["bind",m],["bindKey",g],["curry",y],["curryRight",_],["flip",E],["partial",w],["partialRight",A],["rearg",x]],z="[object Arguments]",q="[object Array]",U="[object AsyncFunction]",H="[object Boolean]",V="[object Date]",G="[object DOMException]",W="[object Error]",Y="[object Function]",K="[object GeneratorFunction]",Q="[object Map]",Z="[object Number]",J="[object Null]",X="[object Object]",$="[object Proxy]",ee="[object RegExp]",ae="[object Set]",te="[object String]",re="[object Symbol]",ce="[object Undefined]",ne="[object WeakMap]",ie="[object WeakSet]",fe="[object ArrayBuffer]",oe="[object DataView]",de="[object Float32Array]",se="[object Float64Array]",be="[object Int8Array]",ue="[object Int16Array]",le="[object Int32Array]",pe="[object Uint8Array]",he="[object Uint8ClampedArray]",me="[object Uint16Array]",ge="[object Uint32Array]",ve=/\b__p \+= '';/g,ye=/\b(__p \+=) '' \+/g,_e=/(__e\(.*?\)|\b__t\)) \+\n'';/g,we=/&(?:amp|lt|gt|quot|#39);/g,Ae=/[&<>"']/g,ke=RegExp(we.source),xe=RegExp(Ae.source),Ee=/<%-([\s\S]+?)%>/g,Se=/<%([\s\S]+?)%>/g,Te=/<%=([\s\S]+?)%>/g,je=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ce=/^\w*$/,Re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oe=/[\\^$.*+?()[\]{}|]/g,Be=RegExp(Oe.source),Me=/^\s+|\s+$/g,Ne=/^\s+/,Ie=/\s+$/,Pe=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Fe=/\{\n\/\* \[wrapped with (.+)\] \*/,Le=/,? & /,De=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ze=/\\(\\)?/g,qe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ue=/\w*$/,He=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Ge=/^\[object .+?Constructor\]$/,We=/^0o[0-7]+$/i,Ye=/^(?:0|[1-9]\d*)$/,Ke=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Qe=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Je="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Xe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",$e="[\\ud800-\\udfff]",ea="["+Xe+"]",aa="["+Je+"]",ta="\\d+",ra="[\\u2700-\\u27bf]",ca="[a-z\\xdf-\\xf6\\xf8-\\xff]",na="[^\\ud800-\\udfff"+Xe+ta+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ia="\\ud83c[\\udffb-\\udfff]",fa="[^\\ud800-\\udfff]",oa="(?:\\ud83c[\\udde6-\\uddff]){2}",da="[\\ud800-\\udbff][\\udc00-\\udfff]",sa="[A-Z\\xc0-\\xd6\\xd8-\\xde]",ba="(?:"+ca+"|"+na+")",ua="(?:"+sa+"|"+na+")",la="(?:"+aa+"|"+ia+")"+"?",pa="[\\ufe0e\\ufe0f]?"+la+("(?:\\u200d(?:"+[fa,oa,da].join("|")+")[\\ufe0e\\ufe0f]?"+la+")*"),ha="(?:"+[ra,oa,da].join("|")+")"+pa,ma="(?:"+[fa+aa+"?",aa,oa,da,$e].join("|")+")",ga=RegExp("['’]","g"),va=RegExp(aa,"g"),ya=RegExp(ia+"(?="+ia+")|"+ma+pa,"g"),_a=RegExp([sa+"?"+ca+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ea,sa,"$"].join("|")+")",ua+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ea,sa+ba,"$"].join("|")+")",sa+"?"+ba+"+(?:['’](?:d|ll|m|re|s|t|ve))?",sa+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ta,ha].join("|"),"g"),wa=RegExp("[\\u200d\\ud800-\\udfff"+Je+"\\ufe0e\\ufe0f]"),Aa=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ka=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],xa=-1,Ea={};Ea[de]=Ea[se]=Ea[be]=Ea[ue]=Ea[le]=Ea[pe]=Ea[he]=Ea[me]=Ea[ge]=!0,Ea[z]=Ea[q]=Ea[fe]=Ea[H]=Ea[oe]=Ea[V]=Ea[W]=Ea[Y]=Ea[Q]=Ea[Z]=Ea[X]=Ea[ee]=Ea[ae]=Ea[te]=Ea[ne]=!1;var Sa={};Sa[z]=Sa[q]=Sa[fe]=Sa[oe]=Sa[H]=Sa[V]=Sa[de]=Sa[se]=Sa[be]=Sa[ue]=Sa[le]=Sa[Q]=Sa[Z]=Sa[X]=Sa[ee]=Sa[ae]=Sa[te]=Sa[re]=Sa[pe]=Sa[he]=Sa[me]=Sa[ge]=!0,Sa[W]=Sa[Y]=Sa[ne]=!1;var Ta={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ja=parseFloat,Ca=parseInt,Ra="object"==typeof global&&global&&global.Object===Object&&global,Oa="object"==typeof self&&self&&self.Object===Object&&self,Ba=Ra||Oa||Function("return this")(),Ma="object"==typeof a&&a&&!a.nodeType&&a,Na=Ma&&"object"==typeof e&&e&&!e.nodeType&&e,Ia=Na&&Na.exports===Ma,Pa=Ia&&Ra.process,Fa=function(){try{var e=Na&&Na.require&&Na.require("util").types;return e||Pa&&Pa.binding&&Pa.binding("util")}catch(e){}}(),La=Fa&&Fa.isArrayBuffer,Da=Fa&&Fa.isDate,za=Fa&&Fa.isMap,qa=Fa&&Fa.isRegExp,Ua=Fa&&Fa.isSet,Ha=Fa&&Fa.isTypedArray;function Va(e,a,t){switch(t.length){case 0:return e.call(a);case 1:return e.call(a,t[0]);case 2:return e.call(a,t[0],t[1]);case 3:return e.call(a,t[0],t[1],t[2])}return e.apply(a,t)}function Ga(e,a,t,r){for(var c=-1,n=null==e?0:e.length;++c<n;){var i=e[c];a(r,i,t(i),e)}return r}function Wa(e,a){for(var t=-1,r=null==e?0:e.length;++t<r&&!1!==a(e[t],t,e););return e}function Ya(e,a){for(var t=null==e?0:e.length;t--&&!1!==a(e[t],t,e););return e}function Ka(e,a){for(var t=-1,r=null==e?0:e.length;++t<r;)if(!a(e[t],t,e))return!1;return!0}function Qa(e,a){for(var t=-1,r=null==e?0:e.length,c=0,n=[];++t<r;){var i=e[t];a(i,t,e)&&(n[c++]=i)}return n}function Za(e,a){return!!(null==e?0:e.length)&&it(e,a,0)>-1}function Ja(e,a,t){for(var r=-1,c=null==e?0:e.length;++r<c;)if(t(a,e[r]))return!0;return!1}function Xa(e,a){for(var t=-1,r=null==e?0:e.length,c=Array(r);++t<r;)c[t]=a(e[t],t,e);return c}function $a(e,a){for(var t=-1,r=a.length,c=e.length;++t<r;)e[c+t]=a[t];return e}function et(e,a,t,r){var c=-1,n=null==e?0:e.length;for(r&&n&&(t=e[++c]);++c<n;)t=a(t,e[c],c,e);return t}function at(e,a,t,r){var c=null==e?0:e.length;for(r&&c&&(t=e[--c]);c--;)t=a(t,e[c],c,e);return t}function tt(e,a){for(var t=-1,r=null==e?0:e.length;++t<r;)if(a(e[t],t,e))return!0;return!1}var rt=st("length");function ct(e,a,t){var r;return t(e,function(e,t,c){if(a(e,t,c))return r=t,!1}),r}function nt(e,a,t,r){for(var c=e.length,n=t+(r?1:-1);r?n--:++n<c;)if(a(e[n],n,e))return n;return-1}function it(e,a,t){return a==a?function(e,a,t){var r=t-1,c=e.length;for(;++r<c;)if(e[r]===a)return r;return-1}(e,a,t):nt(e,ot,t)}function ft(e,a,t,r){for(var c=t-1,n=e.length;++c<n;)if(r(e[c],a))return c;return-1}function ot(e){return e!=e}function dt(e,a){var t=null==e?0:e.length;return t?lt(e,a)/t:I}function st(e){return function(a){return null==a?c:a[e]}}function bt(e){return function(a){return null==e?c:e[a]}}function ut(e,a,t,r,c){return c(e,function(e,c,n){t=r?(r=!1,e):a(t,e,c,n)}),t}function lt(e,a){for(var t,r=-1,n=e.length;++r<n;){var i=a(e[r]);i!==c&&(t=t===c?i:t+i)}return t}function pt(e,a){for(var t=-1,r=Array(e);++t<e;)r[t]=a(t);return r}function ht(e){return function(a){return e(a)}}function mt(e,a){return Xa(a,function(a){return e[a]})}function gt(e,a){return e.has(a)}function vt(e,a){for(var t=-1,r=e.length;++t<r&&it(a,e[t],0)>-1;);return t}function yt(e,a){for(var t=e.length;t--&&it(a,e[t],0)>-1;);return t}var _t=bt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","Ĳ":"IJ","ĳ":"ij","Œ":"Oe","œ":"oe","ŉ":"'n","ſ":"s"}),wt=bt({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function At(e){return"\\"+Ta[e]}function kt(e){return wa.test(e)}function xt(e){var a=-1,t=Array(e.size);return e.forEach(function(e,r){t[++a]=[r,e]}),t}function Et(e,a){return function(t){return e(a(t))}}function St(e,a){for(var t=-1,r=e.length,c=0,n=[];++t<r;){var i=e[t];i!==a&&i!==s||(e[t]=s,n[c++]=t)}return n}function Tt(e,a){return"__proto__"==a?c:e[a]}function jt(e){var a=-1,t=Array(e.size);return e.forEach(function(e){t[++a]=e}),t}function Ct(e){var a=-1,t=Array(e.size);return e.forEach(function(e){t[++a]=[e,e]}),t}function Rt(e){return kt(e)?function(e){var a=ya.lastIndex=0;for(;ya.test(e);)++a;return a}(e):rt(e)}function Ot(e){return kt(e)?function(e){return e.match(ya)||[]}(e):function(e){return e.split("")}(e)}var Bt=bt({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"});var Mt=function e(a){var t=(a=null==a?Ba:Mt.defaults(Ba.Object(),a,Mt.pick(Ba,ka))).Array,r=a.Date,Je=a.Error,Xe=a.Function,$e=a.Math,ea=a.Object,aa=a.RegExp,ta=a.String,ra=a.TypeError,ca=t.prototype,na=Xe.prototype,ia=ea.prototype,fa=a["__core-js_shared__"],oa=na.toString,da=ia.hasOwnProperty,sa=0,ba=function(){var e=/[^.]+$/.exec(fa&&fa.keys&&fa.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),ua=ia.toString,la=oa.call(ea),pa=Ba._,ha=aa("^"+oa.call(da).replace(Oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ma=Ia?a.Buffer:c,ya=a.Symbol,wa=a.Uint8Array,Ta=ma?ma.allocUnsafe:c,Ra=Et(ea.getPrototypeOf,ea),Oa=ea.create,Ma=ia.propertyIsEnumerable,Na=ca.splice,Pa=ya?ya.isConcatSpreadable:c,Fa=ya?ya.iterator:c,rt=ya?ya.toStringTag:c,bt=function(){try{var e=Ln(ea,"defineProperty");return e({},"",{}),e}catch(e){}}(),Nt=a.clearTimeout!==Ba.clearTimeout&&a.clearTimeout,It=r&&r.now!==Ba.Date.now&&r.now,Pt=a.setTimeout!==Ba.setTimeout&&a.setTimeout,Ft=$e.ceil,Lt=$e.floor,Dt=ea.getOwnPropertySymbols,zt=ma?ma.isBuffer:c,qt=a.isFinite,Ut=ca.join,Ht=Et(ea.keys,ea),Vt=$e.max,Gt=$e.min,Wt=r.now,Yt=a.parseInt,Kt=$e.random,Qt=ca.reverse,Zt=Ln(a,"DataView"),Jt=Ln(a,"Map"),Xt=Ln(a,"Promise"),$t=Ln(a,"Set"),er=Ln(a,"WeakMap"),ar=Ln(ea,"create"),tr=er&&new er,rr={},cr=di(Zt),nr=di(Jt),ir=di(Xt),fr=di($t),or=di(er),dr=ya?ya.prototype:c,sr=dr?dr.valueOf:c,br=dr?dr.toString:c;function ur(e){if(Tf(e)&&!mf(e)&&!(e instanceof mr)){if(e instanceof hr)return e;if(da.call(e,"__wrapped__"))return si(e)}return new hr(e)}var lr=function(){function e(){}return function(a){if(!Sf(a))return{};if(Oa)return Oa(a);e.prototype=a;var t=new e;return e.prototype=c,t}}();function pr(){}function hr(e,a){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!a,this.__index__=0,this.__values__=c}function mr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=P,this.__views__=[]}function gr(e){var a=-1,t=null==e?0:e.length;for(this.clear();++a<t;){var r=e[a];this.set(r[0],r[1])}}function vr(e){var a=-1,t=null==e?0:e.length;for(this.clear();++a<t;){var r=e[a];this.set(r[0],r[1])}}function yr(e){var a=-1,t=null==e?0:e.length;for(this.clear();++a<t;){var r=e[a];this.set(r[0],r[1])}}function _r(e){var a=-1,t=null==e?0:e.length;for(this.__data__=new yr;++a<t;)this.add(e[a])}function wr(e){var a=this.__data__=new vr(e);this.size=a.size}function Ar(e,a){var t=mf(e),r=!t&&hf(e),c=!t&&!r&&_f(e),n=!t&&!r&&!c&&If(e),i=t||r||c||n,f=i?pt(e.length,ta):[],o=f.length;for(var d in e)!a&&!da.call(e,d)||i&&("length"==d||c&&("offset"==d||"parent"==d)||n&&("buffer"==d||"byteLength"==d||"byteOffset"==d)||Gn(d,o))||f.push(d);return f}function kr(e){var a=e.length;return a?e[_c(0,a-1)]:c}function xr(e,a){return ii(an(e),Mr(a,0,e.length))}function Er(e){return ii(an(e))}function Sr(e,a,t){(t===c||uf(e[a],t))&&(t!==c||a in e)||Or(e,a,t)}function Tr(e,a,t){var r=e[a];da.call(e,a)&&uf(r,t)&&(t!==c||a in e)||Or(e,a,t)}function jr(e,a){for(var t=e.length;t--;)if(uf(e[t][0],a))return t;return-1}function Cr(e,a,t,r){return Lr(e,function(e,c,n){a(r,e,t(e),n)}),r}function Rr(e,a){return e&&tn(a,ro(a),e)}function Or(e,a,t){"__proto__"==a&&bt?bt(e,a,{configurable:!0,enumerable:!0,value:t,writable:!0}):e[a]=t}function Br(e,a){for(var r=-1,n=a.length,i=t(n),f=null==e;++r<n;)i[r]=f?c:Xf(e,a[r]);return i}function Mr(e,a,t){return e==e&&(t!==c&&(e=e<=t?e:t),a!==c&&(e=e>=a?e:a)),e}function Nr(e,a,t,r,n,i){var f,o=a&b,d=a&u,s=a&l;if(t&&(f=n?t(e,r,n,i):t(e)),f!==c)return f;if(!Sf(e))return e;var p=mf(e);if(p){if(f=function(e){var a=e.length,t=new e.constructor(a);return a&&"string"==typeof e[0]&&da.call(e,"index")&&(t.index=e.index,t.input=e.input),t}(e),!o)return an(e,f)}else{var h=qn(e),m=h==Y||h==K;if(_f(e))return Qc(e,o);if(h==X||h==z||m&&!n){if(f=d||m?{}:Hn(e),!o)return d?function(e,a){return tn(e,zn(e),a)}(e,function(e,a){return e&&tn(a,co(a),e)}(f,e)):function(e,a){return tn(e,Dn(e),a)}(e,Rr(f,e))}else{if(!Sa[h])return n?e:{};f=function(e,a,t){var r=e.constructor;switch(a){case fe:return Zc(e);case H:case V:return new r(+e);case oe:return function(e,a){var t=a?Zc(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}(e,t);case de:case se:case be:case ue:case le:case pe:case he:case me:case ge:return Jc(e,t);case Q:return new r;case Z:case te:return new r(e);case ee:return function(e){var a=new e.constructor(e.source,Ue.exec(e));return a.lastIndex=e.lastIndex,a}(e);case ae:return new r;case re:return function(e){return sr?ea(sr.call(e)):{}}(e)}}(e,h,o)}}i||(i=new wr);var g=i.get(e);if(g)return g;if(i.set(e,f),Bf(e))return e.forEach(function(r){f.add(Nr(r,a,t,r,e,i))}),f;if(jf(e))return e.forEach(function(r,c){f.set(c,Nr(r,a,t,c,e,i))}),f;var v=p?c:(s?d?On:Rn:d?co:ro)(e);return Wa(v||e,function(r,c){v&&(r=e[c=r]),Tr(f,c,Nr(r,a,t,c,e,i))}),f}function Ir(e,a,t){var r=t.length;if(null==e)return!r;for(e=ea(e);r--;){var n=t[r],i=a[n],f=e[n];if(f===c&&!(n in e)||!i(f))return!1}return!0}function Pr(e,a,t){if("function"!=typeof e)throw new ra(f);return ti(function(){e.apply(c,t)},a)}function Fr(e,a,t,r){var c=-1,i=Za,f=!0,o=e.length,d=[],s=a.length;if(!o)return d;t&&(a=Xa(a,ht(t))),r?(i=Ja,f=!1):a.length>=n&&(i=gt,f=!1,a=new _r(a));e:for(;++c<o;){var b=e[c],u=null==t?b:t(b);if(b=r||0!==b?b:0,f&&u==u){for(var l=s;l--;)if(a[l]===u)continue e;d.push(b)}else i(a,u,r)||d.push(b)}return d}ur.templateSettings={escape:Ee,evaluate:Se,interpolate:Te,variable:"",imports:{_:ur}},ur.prototype=pr.prototype,ur.prototype.constructor=ur,hr.prototype=lr(pr.prototype),hr.prototype.constructor=hr,mr.prototype=lr(pr.prototype),mr.prototype.constructor=mr,gr.prototype.clear=function(){this.__data__=ar?ar(null):{},this.size=0},gr.prototype.delete=function(e){var a=this.has(e)&&delete this.__data__[e];return this.size-=a?1:0,a},gr.prototype.get=function(e){var a=this.__data__;if(ar){var t=a[e];return t===o?c:t}return da.call(a,e)?a[e]:c},gr.prototype.has=function(e){var a=this.__data__;return ar?a[e]!==c:da.call(a,e)},gr.prototype.set=function(e,a){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=ar&&a===c?o:a,this},vr.prototype.clear=function(){this.__data__=[],this.size=0},vr.prototype.delete=function(e){var a=this.__data__,t=jr(a,e);return!(t<0||(t==a.length-1?a.pop():Na.call(a,t,1),--this.size,0))},vr.prototype.get=function(e){var a=this.__data__,t=jr(a,e);return t<0?c:a[t][1]},vr.prototype.has=function(e){return jr(this.__data__,e)>-1},vr.prototype.set=function(e,a){var t=this.__data__,r=jr(t,e);return r<0?(++this.size,t.push([e,a])):t[r][1]=a,this},yr.prototype.clear=function(){this.size=0,this.__data__={hash:new gr,map:new(Jt||vr),string:new gr}},yr.prototype.delete=function(e){var a=Pn(this,e).delete(e);return this.size-=a?1:0,a},yr.prototype.get=function(e){return Pn(this,e).get(e)},yr.prototype.has=function(e){return Pn(this,e).has(e)},yr.prototype.set=function(e,a){var t=Pn(this,e),r=t.size;return t.set(e,a),this.size+=t.size==r?0:1,this},_r.prototype.add=_r.prototype.push=function(e){return this.__data__.set(e,o),this},_r.prototype.has=function(e){return this.__data__.has(e)},wr.prototype.clear=function(){this.__data__=new vr,this.size=0},wr.prototype.delete=function(e){var a=this.__data__,t=a.delete(e);return this.size=a.size,t},wr.prototype.get=function(e){return this.__data__.get(e)},wr.prototype.has=function(e){return this.__data__.has(e)},wr.prototype.set=function(e,a){var t=this.__data__;if(t instanceof vr){var r=t.__data__;if(!Jt||r.length<n-1)return r.push([e,a]),this.size=++t.size,this;t=this.__data__=new yr(r)}return t.set(e,a),this.size=t.size,this};var Lr=nn(Wr),Dr=nn(Yr,!0);function zr(e,a){var t=!0;return Lr(e,function(e,r,c){return t=!!a(e,r,c)}),t}function qr(e,a,t){for(var r=-1,n=e.length;++r<n;){var i=e[r],f=a(i);if(null!=f&&(o===c?f==f&&!Nf(f):t(f,o)))var o=f,d=i}return d}function Ur(e,a){var t=[];return Lr(e,function(e,r,c){a(e,r,c)&&t.push(e)}),t}function Hr(e,a,t,r,c){var n=-1,i=e.length;for(t||(t=Vn),c||(c=[]);++n<i;){var f=e[n];a>0&&t(f)?a>1?Hr(f,a-1,t,r,c):$a(c,f):r||(c[c.length]=f)}return c}var Vr=fn(),Gr=fn(!0);function Wr(e,a){return e&&Vr(e,a,ro)}function Yr(e,a){return e&&Gr(e,a,ro)}function Kr(e,a){return Qa(a,function(a){return kf(e[a])})}function Qr(e,a){for(var t=0,r=(a=Gc(a,e)).length;null!=e&&t<r;)e=e[oi(a[t++])];return t&&t==r?e:c}function Zr(e,a,t){var r=a(e);return mf(e)?r:$a(r,t(e))}function Jr(e){return null==e?e===c?ce:J:rt&&rt in ea(e)?function(e){var a=da.call(e,rt),t=e[rt];try{e[rt]=c;var r=!0}catch(e){}var n=ua.call(e);return r&&(a?e[rt]=t:delete e[rt]),n}(e):function(e){return ua.call(e)}(e)}function Xr(e,a){return e>a}function $r(e,a){return null!=e&&da.call(e,a)}function ec(e,a){return null!=e&&a in ea(e)}function ac(e,a,r){for(var n=r?Ja:Za,i=e[0].length,f=e.length,o=f,d=t(f),s=1/0,b=[];o--;){var u=e[o];o&&a&&(u=Xa(u,ht(a))),s=Gt(u.length,s),d[o]=!r&&(a||i>=120&&u.length>=120)?new _r(o&&u):c}u=e[0];var l=-1,p=d[0];e:for(;++l<i&&b.length<s;){var h=u[l],m=a?a(h):h;if(h=r||0!==h?h:0,!(p?gt(p,m):n(b,m,r))){for(o=f;--o;){var g=d[o];if(!(g?gt(g,m):n(e[o],m,r)))continue e}p&&p.push(m),b.push(h)}}return b}function tc(e,a,t){var r=null==(e=ei(e,a=Gc(a,e)))?e:e[oi(wi(a))];return null==r?c:Va(r,e,t)}function rc(e){return Tf(e)&&Jr(e)==z}function cc(e,a,t,r,n){return e===a||(null==e||null==a||!Tf(e)&&!Tf(a)?e!=e&&a!=a:function(e,a,t,r,n,i){var f=mf(e),o=mf(a),d=f?q:qn(e),s=o?q:qn(a),b=(d=d==z?X:d)==X,u=(s=s==z?X:s)==X,l=d==s;if(l&&_f(e)){if(!_f(a))return!1;f=!0,b=!1}if(l&&!b)return i||(i=new wr),f||If(e)?jn(e,a,t,r,n,i):function(e,a,t,r,c,n,i){switch(t){case oe:if(e.byteLength!=a.byteLength||e.byteOffset!=a.byteOffset)return!1;e=e.buffer,a=a.buffer;case fe:return!(e.byteLength!=a.byteLength||!n(new wa(e),new wa(a)));case H:case V:case Z:return uf(+e,+a);case W:return e.name==a.name&&e.message==a.message;case ee:case te:return e==a+"";case Q:var f=xt;case ae:var o=r&p;if(f||(f=jt),e.size!=a.size&&!o)return!1;var d=i.get(e);if(d)return d==a;r|=h,i.set(e,a);var s=jn(f(e),f(a),r,c,n,i);return i.delete(e),s;case re:if(sr)return sr.call(e)==sr.call(a)}return!1}(e,a,d,t,r,n,i);if(!(t&p)){var m=b&&da.call(e,"__wrapped__"),g=u&&da.call(a,"__wrapped__");if(m||g){var v=m?e.value():e,y=g?a.value():a;return i||(i=new wr),n(v,y,t,r,i)}}return!!l&&(i||(i=new wr),function(e,a,t,r,n,i){var f=t&p,o=Rn(e),d=o.length,s=Rn(a).length;if(d!=s&&!f)return!1;for(var b=d;b--;){var u=o[b];if(!(f?u in a:da.call(a,u)))return!1}var l=i.get(e);if(l&&i.get(a))return l==a;var h=!0;i.set(e,a),i.set(a,e);for(var m=f;++b<d;){u=o[b];var g=e[u],v=a[u];if(r)var y=f?r(v,g,u,a,e,i):r(g,v,u,e,a,i);if(!(y===c?g===v||n(g,v,t,r,i):y)){h=!1;break}m||(m="constructor"==u)}if(h&&!m){var _=e.constructor,w=a.constructor;_!=w&&"constructor"in e&&"constructor"in a&&!("function"==typeof _&&_ instanceof _&&"function"==typeof w&&w instanceof w)&&(h=!1)}return i.delete(e),i.delete(a),h}(e,a,t,r,n,i))}(e,a,t,r,cc,n))}function nc(e,a,t,r){var n=t.length,i=n,f=!r;if(null==e)return!i;for(e=ea(e);n--;){var o=t[n];if(f&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++n<i;){var d=(o=t[n])[0],s=e[d],b=o[1];if(f&&o[2]){if(s===c&&!(d in e))return!1}else{var u=new wr;if(r)var l=r(s,b,d,e,a,u);if(!(l===c?cc(b,s,p|h,r,u):l))return!1}}return!0}function ic(e){return!(!Sf(e)||function(e){return!!ba&&ba in e}(e))&&(kf(e)?ha:Ge).test(di(e))}function fc(e){return"function"==typeof e?e:null==e?Ro:"object"==typeof e?mf(e)?lc(e[0],e[1]):uc(e):Do(e)}function oc(e){if(!Zn(e))return Ht(e);var a=[];for(var t in ea(e))da.call(e,t)&&"constructor"!=t&&a.push(t);return a}function dc(e){if(!Sf(e))return function(e){var a=[];if(null!=e)for(var t in ea(e))a.push(t);return a}(e);var a=Zn(e),t=[];for(var r in e)("constructor"!=r||!a&&da.call(e,r))&&t.push(r);return t}function sc(e,a){return e<a}function bc(e,a){var r=-1,c=vf(e)?t(e.length):[];return Lr(e,function(e,t,n){c[++r]=a(e,t,n)}),c}function uc(e){var a=Fn(e);return 1==a.length&&a[0][2]?Xn(a[0][0],a[0][1]):function(t){return t===e||nc(t,e,a)}}function lc(e,a){return Yn(e)&&Jn(a)?Xn(oi(e),a):function(t){var r=Xf(t,e);return r===c&&r===a?$f(t,e):cc(a,r,p|h)}}function pc(e,a,t,r,n){e!==a&&Vr(a,function(i,f){if(Sf(i))n||(n=new wr),function(e,a,t,r,n,i,f){var o=Tt(e,t),d=Tt(a,t),s=f.get(d);if(s)Sr(e,t,s);else{var b=i?i(o,d,t+"",e,a,f):c,u=b===c;if(u){var l=mf(d),p=!l&&_f(d),h=!l&&!p&&If(d);b=d,l||p||h?mf(o)?b=o:yf(o)?b=an(o):p?(u=!1,b=Qc(d,!0)):h?(u=!1,b=Jc(d,!0)):b=[]:Rf(d)||hf(d)?(b=o,hf(o)?b=Hf(o):(!Sf(o)||r&&kf(o))&&(b=Hn(d))):u=!1}u&&(f.set(d,b),n(b,d,r,i,f),f.delete(d)),Sr(e,t,b)}}(e,a,f,t,pc,r,n);else{var o=r?r(Tt(e,f),i,f+"",e,a,n):c;o===c&&(o=i),Sr(e,f,o)}},co)}function hc(e,a){var t=e.length;if(t)return Gn(a+=a<0?t:0,t)?e[a]:c}function mc(e,a,t){var r=-1;return a=Xa(a.length?a:[Ro],ht(In())),function(e,a){var t=e.length;for(e.sort(a);t--;)e[t]=e[t].value;return e}(bc(e,function(e,t,c){return{criteria:Xa(a,function(a){return a(e)}),index:++r,value:e}}),function(e,a){return function(e,a,t){for(var r=-1,c=e.criteria,n=a.criteria,i=c.length,f=t.length;++r<i;){var o=Xc(c[r],n[r]);if(o){if(r>=f)return o;var d=t[r];return o*("desc"==d?-1:1)}}return e.index-a.index}(e,a,t)})}function gc(e,a,t){for(var r=-1,c=a.length,n={};++r<c;){var i=a[r],f=Qr(e,i);t(f,i)&&Ec(n,Gc(i,e),f)}return n}function vc(e,a,t,r){var c=r?ft:it,n=-1,i=a.length,f=e;for(e===a&&(a=an(a)),t&&(f=Xa(e,ht(t)));++n<i;)for(var o=0,d=a[n],s=t?t(d):d;(o=c(f,s,o,r))>-1;)f!==e&&Na.call(f,o,1),Na.call(e,o,1);return e}function yc(e,a){for(var t=e?a.length:0,r=t-1;t--;){var c=a[t];if(t==r||c!==n){var n=c;Gn(c)?Na.call(e,c,1):Fc(e,c)}}return e}function _c(e,a){return e+Lt(Kt()*(a-e+1))}function wc(e,a){var t="";if(!e||a<1||a>M)return t;do{a%2&&(t+=e),(a=Lt(a/2))&&(e+=e)}while(a);return t}function Ac(e,a){return ri($n(e,a,Ro),e+"")}function kc(e){return kr(lo(e))}function xc(e,a){var t=lo(e);return ii(t,Mr(a,0,t.length))}function Ec(e,a,t,r){if(!Sf(e))return e;for(var n=-1,i=(a=Gc(a,e)).length,f=i-1,o=e;null!=o&&++n<i;){var d=oi(a[n]),s=t;if(n!=f){var b=o[d];(s=r?r(b,d,o):c)===c&&(s=Sf(b)?b:Gn(a[n+1])?[]:{})}Tr(o,d,s),o=o[d]}return e}var Sc=tr?function(e,a){return tr.set(e,a),e}:Ro,Tc=bt?function(e,a){return bt(e,"toString",{configurable:!0,enumerable:!1,value:To(a),writable:!0})}:Ro;function jc(e){return ii(lo(e))}function Cc(e,a,r){var c=-1,n=e.length;a<0&&(a=-a>n?0:n+a),(r=r>n?n:r)<0&&(r+=n),n=a>r?0:r-a>>>0,a>>>=0;for(var i=t(n);++c<n;)i[c]=e[c+a];return i}function Rc(e,a){var t;return Lr(e,function(e,r,c){return!(t=a(e,r,c))}),!!t}function Oc(e,a,t){var r=0,c=null==e?r:e.length;if("number"==typeof a&&a==a&&c<=L){for(;r<c;){var n=r+c>>>1,i=e[n];null!==i&&!Nf(i)&&(t?i<=a:i<a)?r=n+1:c=n}return c}return Bc(e,a,Ro,t)}function Bc(e,a,t,r){a=t(a);for(var n=0,i=null==e?0:e.length,f=a!=a,o=null===a,d=Nf(a),s=a===c;n<i;){var b=Lt((n+i)/2),u=t(e[b]),l=u!==c,p=null===u,h=u==u,m=Nf(u);if(f)var g=r||h;else g=s?h&&(r||l):o?h&&l&&(r||!p):d?h&&l&&!p&&(r||!m):!p&&!m&&(r?u<=a:u<a);g?n=b+1:i=b}return Gt(i,F)}function Mc(e,a){for(var t=-1,r=e.length,c=0,n=[];++t<r;){var i=e[t],f=a?a(i):i;if(!t||!uf(f,o)){var o=f;n[c++]=0===i?0:i}}return n}function Nc(e){return"number"==typeof e?e:Nf(e)?I:+e}function Ic(e){if("string"==typeof e)return e;if(mf(e))return Xa(e,Ic)+"";if(Nf(e))return br?br.call(e):"";var a=e+"";return"0"==a&&1/e==-B?"-0":a}function Pc(e,a,t){var r=-1,c=Za,i=e.length,f=!0,o=[],d=o;if(t)f=!1,c=Ja;else if(i>=n){var s=a?null:An(e);if(s)return jt(s);f=!1,c=gt,d=new _r}else d=a?[]:o;e:for(;++r<i;){var b=e[r],u=a?a(b):b;if(b=t||0!==b?b:0,f&&u==u){for(var l=d.length;l--;)if(d[l]===u)continue e;a&&d.push(u),o.push(b)}else c(d,u,t)||(d!==o&&d.push(u),o.push(b))}return o}function Fc(e,a){return null==(e=ei(e,a=Gc(a,e)))||delete e[oi(wi(a))]}function Lc(e,a,t,r){return Ec(e,a,t(Qr(e,a)),r)}function Dc(e,a,t,r){for(var c=e.length,n=r?c:-1;(r?n--:++n<c)&&a(e[n],n,e););return t?Cc(e,r?0:n,r?n+1:c):Cc(e,r?n+1:0,r?c:n)}function zc(e,a){var t=e;return t instanceof mr&&(t=t.value()),et(a,function(e,a){return a.func.apply(a.thisArg,$a([e],a.args))},t)}function qc(e,a,r){var c=e.length;if(c<2)return c?Pc(e[0]):[];for(var n=-1,i=t(c);++n<c;)for(var f=e[n],o=-1;++o<c;)o!=n&&(i[n]=Fr(i[n]||f,e[o],a,r));return Pc(Hr(i,1),a,r)}function Uc(e,a,t){for(var r=-1,n=e.length,i=a.length,f={};++r<n;){var o=r<i?a[r]:c;t(f,e[r],o)}return f}function Hc(e){return yf(e)?e:[]}function Vc(e){return"function"==typeof e?e:Ro}function Gc(e,a){return mf(e)?e:Yn(e,a)?[e]:fi(Vf(e))}var Wc=Ac;function Yc(e,a,t){var r=e.length;return t=t===c?r:t,!a&&t>=r?e:Cc(e,a,t)}var Kc=Nt||function(e){return Ba.clearTimeout(e)};function Qc(e,a){if(a)return e.slice();var t=e.length,r=Ta?Ta(t):new e.constructor(t);return e.copy(r),r}function Zc(e){var a=new e.constructor(e.byteLength);return new wa(a).set(new wa(e)),a}function Jc(e,a){var t=a?Zc(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}function Xc(e,a){if(e!==a){var t=e!==c,r=null===e,n=e==e,i=Nf(e),f=a!==c,o=null===a,d=a==a,s=Nf(a);if(!o&&!s&&!i&&e>a||i&&f&&d&&!o&&!s||r&&f&&d||!t&&d||!n)return 1;if(!r&&!i&&!s&&e<a||s&&t&&n&&!r&&!i||o&&t&&n||!f&&n||!d)return-1}return 0}function $c(e,a,r,c){for(var n=-1,i=e.length,f=r.length,o=-1,d=a.length,s=Vt(i-f,0),b=t(d+s),u=!c;++o<d;)b[o]=a[o];for(;++n<f;)(u||n<i)&&(b[r[n]]=e[n]);for(;s--;)b[o++]=e[n++];return b}function en(e,a,r,c){for(var n=-1,i=e.length,f=-1,o=r.length,d=-1,s=a.length,b=Vt(i-o,0),u=t(b+s),l=!c;++n<b;)u[n]=e[n];for(var p=n;++d<s;)u[p+d]=a[d];for(;++f<o;)(l||n<i)&&(u[p+r[f]]=e[n++]);return u}function an(e,a){var r=-1,c=e.length;for(a||(a=t(c));++r<c;)a[r]=e[r];return a}function tn(e,a,t,r){var n=!t;t||(t={});for(var i=-1,f=a.length;++i<f;){var o=a[i],d=r?r(t[o],e[o],o,t,e):c;d===c&&(d=e[o]),n?Or(t,o,d):Tr(t,o,d)}return t}function rn(e,a){return function(t,r){var c=mf(t)?Ga:Cr,n=a?a():{};return c(t,e,In(r,2),n)}}function cn(e){return Ac(function(a,t){var r=-1,n=t.length,i=n>1?t[n-1]:c,f=n>2?t[2]:c;for(i=e.length>3&&"function"==typeof i?(n--,i):c,f&&Wn(t[0],t[1],f)&&(i=n<3?c:i,n=1),a=ea(a);++r<n;){var o=t[r];o&&e(a,o,r,i)}return a})}function nn(e,a){return function(t,r){if(null==t)return t;if(!vf(t))return e(t,r);for(var c=t.length,n=a?c:-1,i=ea(t);(a?n--:++n<c)&&!1!==r(i[n],n,i););return t}}function fn(e){return function(a,t,r){for(var c=-1,n=ea(a),i=r(a),f=i.length;f--;){var o=i[e?f:++c];if(!1===t(n[o],o,n))break}return a}}function on(e){return function(a){var t=kt(a=Vf(a))?Ot(a):c,r=t?t[0]:a.charAt(0),n=t?Yc(t,1).join(""):a.slice(1);return r[e]()+n}}function dn(e){return function(a){return et(xo(mo(a).replace(ga,"")),e,"")}}function sn(e){return function(){var a=arguments;switch(a.length){case 0:return new e;case 1:return new e(a[0]);case 2:return new e(a[0],a[1]);case 3:return new e(a[0],a[1],a[2]);case 4:return new e(a[0],a[1],a[2],a[3]);case 5:return new e(a[0],a[1],a[2],a[3],a[4]);case 6:return new e(a[0],a[1],a[2],a[3],a[4],a[5]);case 7:return new e(a[0],a[1],a[2],a[3],a[4],a[5],a[6])}var t=lr(e.prototype),r=e.apply(t,a);return Sf(r)?r:t}}function bn(e){return function(a,t,r){var n=ea(a);if(!vf(a)){var i=In(t,3);a=ro(a),t=function(e){return i(n[e],e,n)}}var f=e(a,t,r);return f>-1?n[i?a[f]:f]:c}}function un(e){return Cn(function(a){var t=a.length,r=t,n=hr.prototype.thru;for(e&&a.reverse();r--;){var i=a[r];if("function"!=typeof i)throw new ra(f);if(n&&!o&&"wrapper"==Mn(i))var o=new hr([],!0)}for(r=o?r:t;++r<t;){var d=Mn(i=a[r]),s="wrapper"==d?Bn(i):c;o=s&&Kn(s[0])&&s[1]==(k|y|w|x)&&!s[4].length&&1==s[9]?o[Mn(s[0])].apply(o,s[3]):1==i.length&&Kn(i)?o[d]():o.thru(i)}return function(){var e=arguments,r=e[0];if(o&&1==e.length&&mf(r))return o.plant(r).value();for(var c=0,n=t?a[c].apply(this,e):r;++c<t;)n=a[c].call(this,n);return n}})}function ln(e,a,r,n,i,f,o,d,s,b){var u=a&k,l=a&m,p=a&g,h=a&(y|_),v=a&E,w=p?c:sn(e);return function m(){for(var g=arguments.length,y=t(g),_=g;_--;)y[_]=arguments[_];if(h)var A=Nn(m),k=function(e,a){for(var t=e.length,r=0;t--;)e[t]===a&&++r;return r}(y,A);if(n&&(y=$c(y,n,i,h)),f&&(y=en(y,f,o,h)),g-=k,h&&g<b){var x=St(y,A);return _n(e,a,ln,m.placeholder,r,y,x,d,s,b-g)}var E=l?r:this,S=p?E[e]:e;return g=y.length,d?y=function(e,a){for(var t=e.length,r=Gt(a.length,t),n=an(e);r--;){var i=a[r];e[r]=Gn(i,t)?n[i]:c}return e}(y,d):v&&g>1&&y.reverse(),u&&s<g&&(y.length=s),this&&this!==Ba&&this instanceof m&&(S=w||sn(S)),S.apply(E,y)}}function pn(e,a){return function(t,r){return function(e,a,t,r){return Wr(e,function(e,c,n){a(r,t(e),c,n)}),r}(t,e,a(r),{})}}function hn(e,a){return function(t,r){var n;if(t===c&&r===c)return a;if(t!==c&&(n=t),r!==c){if(n===c)return r;"string"==typeof t||"string"==typeof r?(t=Ic(t),r=Ic(r)):(t=Nc(t),r=Nc(r)),n=e(t,r)}return n}}function mn(e){return Cn(function(a){return a=Xa(a,ht(In())),Ac(function(t){var r=this;return e(a,function(e){return Va(e,r,t)})})})}function gn(e,a){var t=(a=a===c?" ":Ic(a)).length;if(t<2)return t?wc(a,e):a;var r=wc(a,Ft(e/Rt(a)));return kt(a)?Yc(Ot(r),0,e).join(""):r.slice(0,e)}function vn(e){return function(a,r,n){return n&&"number"!=typeof n&&Wn(a,r,n)&&(r=n=c),a=Df(a),r===c?(r=a,a=0):r=Df(r),function(e,a,r,c){for(var n=-1,i=Vt(Ft((a-e)/(r||1)),0),f=t(i);i--;)f[c?i:++n]=e,e+=r;return f}(a,r,n=n===c?a<r?1:-1:Df(n),e)}}function yn(e){return function(a,t){return"string"==typeof a&&"string"==typeof t||(a=Uf(a),t=Uf(t)),e(a,t)}}function _n(e,a,t,r,n,i,f,o,d,s){var b=a&y;a|=b?w:A,(a&=~(b?A:w))&v||(a&=~(m|g));var u=[e,a,n,b?i:c,b?f:c,b?c:i,b?c:f,o,d,s],l=t.apply(c,u);return Kn(e)&&ai(l,u),l.placeholder=r,ci(l,e,a)}function wn(e){var a=$e[e];return function(e,t){if(e=Uf(e),t=null==t?0:Gt(zf(t),292)){var r=(Vf(e)+"e").split("e");return+((r=(Vf(a(r[0]+"e"+(+r[1]+t)))+"e").split("e"))[0]+"e"+(+r[1]-t))}return a(e)}}var An=$t&&1/jt(new $t([,-0]))[1]==B?function(e){return new $t(e)}:Io;function kn(e){return function(a){var t=qn(a);return t==Q?xt(a):t==ae?Ct(a):function(e,a){return Xa(a,function(a){return[a,e[a]]})}(a,e(a))}}function xn(e,a,r,n,i,o,d,b){var u=a&g;if(!u&&"function"!=typeof e)throw new ra(f);var l=n?n.length:0;if(l||(a&=~(w|A),n=i=c),d=d===c?d:Vt(zf(d),0),b=b===c?b:zf(b),l-=i?i.length:0,a&A){var p=n,h=i;n=i=c}var E=u?c:Bn(e),S=[e,a,r,n,i,p,h,o,d,b];if(E&&function(e,a){var t=e[1],r=a[1],c=t|r,n=c<(m|g|k),i=r==k&&t==y||r==k&&t==x&&e[7].length<=a[8]||r==(k|x)&&a[7].length<=a[8]&&t==y;if(!n&&!i)return e;r&m&&(e[2]=a[2],c|=t&m?0:v);var f=a[3];if(f){var o=e[3];e[3]=o?$c(o,f,a[4]):f,e[4]=o?St(e[3],s):a[4]}(f=a[5])&&(o=e[5],e[5]=o?en(o,f,a[6]):f,e[6]=o?St(e[5],s):a[6]),(f=a[7])&&(e[7]=f),r&k&&(e[8]=null==e[8]?a[8]:Gt(e[8],a[8])),null==e[9]&&(e[9]=a[9]),e[0]=a[0],e[1]=c}(S,E),e=S[0],a=S[1],r=S[2],n=S[3],i=S[4],!(b=S[9]=S[9]===c?u?0:e.length:Vt(S[9]-l,0))&&a&(y|_)&&(a&=~(y|_)),a&&a!=m)T=a==y||a==_?function(e,a,r){var n=sn(e);return function i(){for(var f=arguments.length,o=t(f),d=f,s=Nn(i);d--;)o[d]=arguments[d];var b=f<3&&o[0]!==s&&o[f-1]!==s?[]:St(o,s);return(f-=b.length)<r?_n(e,a,ln,i.placeholder,c,o,b,c,c,r-f):Va(this&&this!==Ba&&this instanceof i?n:e,this,o)}}(e,a,b):a!=w&&a!=(m|w)||i.length?ln.apply(c,S):function(e,a,r,c){var n=a&m,i=sn(e);return function a(){for(var f=-1,o=arguments.length,d=-1,s=c.length,b=t(s+o),u=this&&this!==Ba&&this instanceof a?i:e;++d<s;)b[d]=c[d];for(;o--;)b[d++]=arguments[++f];return Va(u,n?r:this,b)}}(e,a,r,n);else var T=function(e,a,t){var r=a&m,c=sn(e);return function a(){return(this&&this!==Ba&&this instanceof a?c:e).apply(r?t:this,arguments)}}(e,a,r);return ci((E?Sc:ai)(T,S),e,a)}function En(e,a,t,r){return e===c||uf(e,ia[t])&&!da.call(r,t)?a:e}function Sn(e,a,t,r,n,i){return Sf(e)&&Sf(a)&&(i.set(a,e),pc(e,a,c,Sn,i),i.delete(a)),e}function Tn(e){return Rf(e)?c:e}function jn(e,a,t,r,n,i){var f=t&p,o=e.length,d=a.length;if(o!=d&&!(f&&d>o))return!1;var s=i.get(e);if(s&&i.get(a))return s==a;var b=-1,u=!0,l=t&h?new _r:c;for(i.set(e,a),i.set(a,e);++b<o;){var m=e[b],g=a[b];if(r)var v=f?r(g,m,b,a,e,i):r(m,g,b,e,a,i);if(v!==c){if(v)continue;u=!1;break}if(l){if(!tt(a,function(e,a){if(!gt(l,a)&&(m===e||n(m,e,t,r,i)))return l.push(a)})){u=!1;break}}else if(m!==g&&!n(m,g,t,r,i)){u=!1;break}}return i.delete(e),i.delete(a),u}function Cn(e){return ri($n(e,c,mi),e+"")}function Rn(e){return Zr(e,ro,Dn)}function On(e){return Zr(e,co,zn)}var Bn=tr?function(e){return tr.get(e)}:Io;function Mn(e){for(var a=e.name+"",t=rr[a],r=da.call(rr,a)?t.length:0;r--;){var c=t[r],n=c.func;if(null==n||n==e)return c.name}return a}function Nn(e){return(da.call(ur,"placeholder")?ur:e).placeholder}function In(){var e=ur.iteratee||Oo;return e=e===Oo?fc:e,arguments.length?e(arguments[0],arguments[1]):e}function Pn(e,a){var t=e.__data__;return function(e){var a=typeof e;return"string"==a||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==e:null===e}(a)?t["string"==typeof a?"string":"hash"]:t.map}function Fn(e){for(var a=ro(e),t=a.length;t--;){var r=a[t],c=e[r];a[t]=[r,c,Jn(c)]}return a}function Ln(e,a){var t=function(e,a){return null==e?c:e[a]}(e,a);return ic(t)?t:c}var Dn=Dt?function(e){return null==e?[]:(e=ea(e),Qa(Dt(e),function(a){return Ma.call(e,a)}))}:Uo,zn=Dt?function(e){for(var a=[];e;)$a(a,Dn(e)),e=Ra(e);return a}:Uo,qn=Jr;function Un(e,a,t){for(var r=-1,c=(a=Gc(a,e)).length,n=!1;++r<c;){var i=oi(a[r]);if(!(n=null!=e&&t(e,i)))break;e=e[i]}return n||++r!=c?n:!!(c=null==e?0:e.length)&&Ef(c)&&Gn(i,c)&&(mf(e)||hf(e))}function Hn(e){return"function"!=typeof e.constructor||Zn(e)?{}:lr(Ra(e))}function Vn(e){return mf(e)||hf(e)||!!(Pa&&e&&e[Pa])}function Gn(e,a){var t=typeof e;return!!(a=null==a?M:a)&&("number"==t||"symbol"!=t&&Ye.test(e))&&e>-1&&e%1==0&&e<a}function Wn(e,a,t){if(!Sf(t))return!1;var r=typeof a;return!!("number"==r?vf(t)&&Gn(a,t.length):"string"==r&&a in t)&&uf(t[a],e)}function Yn(e,a){if(mf(e))return!1;var t=typeof e;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=e&&!Nf(e))||Ce.test(e)||!je.test(e)||null!=a&&e in ea(a)}function Kn(e){var a=Mn(e),t=ur[a];if("function"!=typeof t||!(a in mr.prototype))return!1;if(e===t)return!0;var r=Bn(t);return!!r&&e===r[0]}(Zt&&qn(new Zt(new ArrayBuffer(1)))!=oe||Jt&&qn(new Jt)!=Q||Xt&&"[object Promise]"!=qn(Xt.resolve())||$t&&qn(new $t)!=ae||er&&qn(new er)!=ne)&&(qn=function(e){var a=Jr(e),t=a==X?e.constructor:c,r=t?di(t):"";if(r)switch(r){case cr:return oe;case nr:return Q;case ir:return"[object Promise]";case fr:return ae;case or:return ne}return a});var Qn=fa?kf:Ho;function Zn(e){var a=e&&e.constructor;return e===("function"==typeof a&&a.prototype||ia)}function Jn(e){return e==e&&!Sf(e)}function Xn(e,a){return function(t){return null!=t&&t[e]===a&&(a!==c||e in ea(t))}}function $n(e,a,r){return a=Vt(a===c?e.length-1:a,0),function(){for(var c=arguments,n=-1,i=Vt(c.length-a,0),f=t(i);++n<i;)f[n]=c[a+n];n=-1;for(var o=t(a+1);++n<a;)o[n]=c[n];return o[a]=r(f),Va(e,this,o)}}function ei(e,a){return a.length<2?e:Qr(e,Cc(a,0,-1))}var ai=ni(Sc),ti=Pt||function(e,a){return Ba.setTimeout(e,a)},ri=ni(Tc);function ci(e,a,t){var r=a+"";return ri(e,function(e,a){var t=a.length;if(!t)return e;var r=t-1;return a[r]=(t>1?"& ":"")+a[r],a=a.join(t>2?", ":" "),e.replace(Pe,"{\n/* [wrapped with "+a+"] */\n")}(r,function(e,a){return Wa(D,function(t){var r="_."+t[0];a&t[1]&&!Za(e,r)&&e.push(r)}),e.sort()}(function(e){var a=e.match(Fe);return a?a[1].split(Le):[]}(r),t)))}function ni(e){var a=0,t=0;return function(){var r=Wt(),n=C-(r-t);if(t=r,n>0){if(++a>=j)return arguments[0]}else a=0;return e.apply(c,arguments)}}function ii(e,a){var t=-1,r=e.length,n=r-1;for(a=a===c?r:a;++t<a;){var i=_c(t,n),f=e[i];e[i]=e[t],e[t]=f}return e.length=a,e}var fi=function(e){var a=nf(e,function(e){return t.size===d&&t.clear(),e}),t=a.cache;return a}(function(e){var a=[];return 46===e.charCodeAt(0)&&a.push(""),e.replace(Re,function(e,t,r,c){a.push(r?c.replace(ze,"$1"):t||e)}),a});function oi(e){if("string"==typeof e||Nf(e))return e;var a=e+"";return"0"==a&&1/e==-B?"-0":a}function di(e){if(null!=e){try{return oa.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function si(e){if(e instanceof mr)return e.clone();var a=new hr(e.__wrapped__,e.__chain__);return a.__actions__=an(e.__actions__),a.__index__=e.__index__,a.__values__=e.__values__,a}var bi=Ac(function(e,a){return yf(e)?Fr(e,Hr(a,1,yf,!0)):[]}),ui=Ac(function(e,a){var t=wi(a);return yf(t)&&(t=c),yf(e)?Fr(e,Hr(a,1,yf,!0),In(t,2)):[]}),li=Ac(function(e,a){var t=wi(a);return yf(t)&&(t=c),yf(e)?Fr(e,Hr(a,1,yf,!0),c,t):[]});function pi(e,a,t){var r=null==e?0:e.length;if(!r)return-1;var c=null==t?0:zf(t);return c<0&&(c=Vt(r+c,0)),nt(e,In(a,3),c)}function hi(e,a,t){var r=null==e?0:e.length;if(!r)return-1;var n=r-1;return t!==c&&(n=zf(t),n=t<0?Vt(r+n,0):Gt(n,r-1)),nt(e,In(a,3),n,!0)}function mi(e){return null!=e&&e.length?Hr(e,1):[]}function gi(e){return e&&e.length?e[0]:c}var vi=Ac(function(e){var a=Xa(e,Hc);return a.length&&a[0]===e[0]?ac(a):[]}),yi=Ac(function(e){var a=wi(e),t=Xa(e,Hc);return a===wi(t)?a=c:t.pop(),t.length&&t[0]===e[0]?ac(t,In(a,2)):[]}),_i=Ac(function(e){var a=wi(e),t=Xa(e,Hc);return(a="function"==typeof a?a:c)&&t.pop(),t.length&&t[0]===e[0]?ac(t,c,a):[]});function wi(e){var a=null==e?0:e.length;return a?e[a-1]:c}var Ai=Ac(ki);function ki(e,a){return e&&e.length&&a&&a.length?vc(e,a):e}var xi=Cn(function(e,a){var t=null==e?0:e.length,r=Br(e,a);return yc(e,Xa(a,function(e){return Gn(e,t)?+e:e}).sort(Xc)),r});function Ei(e){return null==e?e:Qt.call(e)}var Si=Ac(function(e){return Pc(Hr(e,1,yf,!0))}),Ti=Ac(function(e){var a=wi(e);return yf(a)&&(a=c),Pc(Hr(e,1,yf,!0),In(a,2))}),ji=Ac(function(e){var a=wi(e);return a="function"==typeof a?a:c,Pc(Hr(e,1,yf,!0),c,a)});function Ci(e){if(!e||!e.length)return[];var a=0;return e=Qa(e,function(e){if(yf(e))return a=Vt(e.length,a),!0}),pt(a,function(a){return Xa(e,st(a))})}function Ri(e,a){if(!e||!e.length)return[];var t=Ci(e);return null==a?t:Xa(t,function(e){return Va(a,c,e)})}var Oi=Ac(function(e,a){return yf(e)?Fr(e,a):[]}),Bi=Ac(function(e){return qc(Qa(e,yf))}),Mi=Ac(function(e){var a=wi(e);return yf(a)&&(a=c),qc(Qa(e,yf),In(a,2))}),Ni=Ac(function(e){var a=wi(e);return a="function"==typeof a?a:c,qc(Qa(e,yf),c,a)}),Ii=Ac(Ci);var Pi=Ac(function(e){var a=e.length,t=a>1?e[a-1]:c;return Ri(e,t="function"==typeof t?(e.pop(),t):c)});function Fi(e){var a=ur(e);return a.__chain__=!0,a}function Li(e,a){return a(e)}var Di=Cn(function(e){var a=e.length,t=a?e[0]:0,r=this.__wrapped__,n=function(a){return Br(a,e)};return!(a>1||this.__actions__.length)&&r instanceof mr&&Gn(t)?((r=r.slice(t,+t+(a?1:0))).__actions__.push({func:Li,args:[n],thisArg:c}),new hr(r,this.__chain__).thru(function(e){return a&&!e.length&&e.push(c),e})):this.thru(n)});var zi=rn(function(e,a,t){da.call(e,t)?++e[t]:Or(e,t,1)});var qi=bn(pi),Ui=bn(hi);function Hi(e,a){return(mf(e)?Wa:Lr)(e,In(a,3))}function Vi(e,a){return(mf(e)?Ya:Dr)(e,In(a,3))}var Gi=rn(function(e,a,t){da.call(e,t)?e[t].push(a):Or(e,t,[a])});var Wi=Ac(function(e,a,r){var c=-1,n="function"==typeof a,i=vf(e)?t(e.length):[];return Lr(e,function(e){i[++c]=n?Va(a,e,r):tc(e,a,r)}),i}),Yi=rn(function(e,a,t){Or(e,t,a)});function Ki(e,a){return(mf(e)?Xa:bc)(e,In(a,3))}var Qi=rn(function(e,a,t){e[t?0:1].push(a)},function(){return[[],[]]});var Zi=Ac(function(e,a){if(null==e)return[];var t=a.length;return t>1&&Wn(e,a[0],a[1])?a=[]:t>2&&Wn(a[0],a[1],a[2])&&(a=[a[0]]),mc(e,Hr(a,1),[])}),Ji=It||function(){return Ba.Date.now()};function Xi(e,a,t){return a=t?c:a,a=e&&null==a?e.length:a,xn(e,k,c,c,c,c,a)}function $i(e,a){var t;if("function"!=typeof a)throw new ra(f);return e=zf(e),function(){return--e>0&&(t=a.apply(this,arguments)),e<=1&&(a=c),t}}var ef=Ac(function(e,a,t){var r=m;if(t.length){var c=St(t,Nn(ef));r|=w}return xn(e,r,a,t,c)}),af=Ac(function(e,a,t){var r=m|g;if(t.length){var c=St(t,Nn(af));r|=w}return xn(a,r,e,t,c)});function tf(e,a,t){var r,n,i,o,d,s,b=0,u=!1,l=!1,p=!0;if("function"!=typeof e)throw new ra(f);function h(a){var t=r,i=n;return r=n=c,b=a,o=e.apply(i,t)}function m(e){var t=e-s;return s===c||t>=a||t<0||l&&e-b>=i}function g(){var e=Ji();if(m(e))return v(e);d=ti(g,function(e){var t=a-(e-s);return l?Gt(t,i-(e-b)):t}(e))}function v(e){return d=c,p&&r?h(e):(r=n=c,o)}function y(){var e=Ji(),t=m(e);if(r=arguments,n=this,s=e,t){if(d===c)return function(e){return b=e,d=ti(g,a),u?h(e):o}(s);if(l)return d=ti(g,a),h(s)}return d===c&&(d=ti(g,a)),o}return a=Uf(a)||0,Sf(t)&&(u=!!t.leading,i=(l="maxWait"in t)?Vt(Uf(t.maxWait)||0,a):i,p="trailing"in t?!!t.trailing:p),y.cancel=function(){d!==c&&Kc(d),b=0,r=s=n=d=c},y.flush=function(){return d===c?o:v(Ji())},y}var rf=Ac(function(e,a){return Pr(e,1,a)}),cf=Ac(function(e,a,t){return Pr(e,Uf(a)||0,t)});function nf(e,a){if("function"!=typeof e||null!=a&&"function"!=typeof a)throw new ra(f);var t=function(){var r=arguments,c=a?a.apply(this,r):r[0],n=t.cache;if(n.has(c))return n.get(c);var i=e.apply(this,r);return t.cache=n.set(c,i)||n,i};return t.cache=new(nf.Cache||yr),t}function ff(e){if("function"!=typeof e)throw new ra(f);return function(){var a=arguments;switch(a.length){case 0:return!e.call(this);case 1:return!e.call(this,a[0]);case 2:return!e.call(this,a[0],a[1]);case 3:return!e.call(this,a[0],a[1],a[2])}return!e.apply(this,a)}}nf.Cache=yr;var of=Wc(function(e,a){var t=(a=1==a.length&&mf(a[0])?Xa(a[0],ht(In())):Xa(Hr(a,1),ht(In()))).length;return Ac(function(r){for(var c=-1,n=Gt(r.length,t);++c<n;)r[c]=a[c].call(this,r[c]);return Va(e,this,r)})}),df=Ac(function(e,a){var t=St(a,Nn(df));return xn(e,w,c,a,t)}),sf=Ac(function(e,a){var t=St(a,Nn(sf));return xn(e,A,c,a,t)}),bf=Cn(function(e,a){return xn(e,x,c,c,c,a)});function uf(e,a){return e===a||e!=e&&a!=a}var lf=yn(Xr),pf=yn(function(e,a){return e>=a}),hf=rc(function(){return arguments}())?rc:function(e){return Tf(e)&&da.call(e,"callee")&&!Ma.call(e,"callee")},mf=t.isArray,gf=La?ht(La):function(e){return Tf(e)&&Jr(e)==fe};function vf(e){return null!=e&&Ef(e.length)&&!kf(e)}function yf(e){return Tf(e)&&vf(e)}var _f=zt||Ho,wf=Da?ht(Da):function(e){return Tf(e)&&Jr(e)==V};function Af(e){if(!Tf(e))return!1;var a=Jr(e);return a==W||a==G||"string"==typeof e.message&&"string"==typeof e.name&&!Rf(e)}function kf(e){if(!Sf(e))return!1;var a=Jr(e);return a==Y||a==K||a==U||a==$}function xf(e){return"number"==typeof e&&e==zf(e)}function Ef(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=M}function Sf(e){var a=typeof e;return null!=e&&("object"==a||"function"==a)}function Tf(e){return null!=e&&"object"==typeof e}var jf=za?ht(za):function(e){return Tf(e)&&qn(e)==Q};function Cf(e){return"number"==typeof e||Tf(e)&&Jr(e)==Z}function Rf(e){if(!Tf(e)||Jr(e)!=X)return!1;var a=Ra(e);if(null===a)return!0;var t=da.call(a,"constructor")&&a.constructor;return"function"==typeof t&&t instanceof t&&oa.call(t)==la}var Of=qa?ht(qa):function(e){return Tf(e)&&Jr(e)==ee};var Bf=Ua?ht(Ua):function(e){return Tf(e)&&qn(e)==ae};function Mf(e){return"string"==typeof e||!mf(e)&&Tf(e)&&Jr(e)==te}function Nf(e){return"symbol"==typeof e||Tf(e)&&Jr(e)==re}var If=Ha?ht(Ha):function(e){return Tf(e)&&Ef(e.length)&&!!Ea[Jr(e)]};var Pf=yn(sc),Ff=yn(function(e,a){return e<=a});function Lf(e){if(!e)return[];if(vf(e))return Mf(e)?Ot(e):an(e);if(Fa&&e[Fa])return function(e){for(var a,t=[];!(a=e.next()).done;)t.push(a.value);return t}(e[Fa]());var a=qn(e);return(a==Q?xt:a==ae?jt:lo)(e)}function Df(e){return e?(e=Uf(e))===B||e===-B?(e<0?-1:1)*N:e==e?e:0:0===e?e:0}function zf(e){var a=Df(e),t=a%1;return a==a?t?a-t:a:0}function qf(e){return e?Mr(zf(e),0,P):0}function Uf(e){if("number"==typeof e)return e;if(Nf(e))return I;if(Sf(e)){var a="function"==typeof e.valueOf?e.valueOf():e;e=Sf(a)?a+"":a}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Me,"");var t=Ve.test(e);return t||We.test(e)?Ca(e.slice(2),t?2:8):He.test(e)?I:+e}function Hf(e){return tn(e,co(e))}function Vf(e){return null==e?"":Ic(e)}var Gf=cn(function(e,a){if(Zn(a)||vf(a))tn(a,ro(a),e);else for(var t in a)da.call(a,t)&&Tr(e,t,a[t])}),Wf=cn(function(e,a){tn(a,co(a),e)}),Yf=cn(function(e,a,t,r){tn(a,co(a),e,r)}),Kf=cn(function(e,a,t,r){tn(a,ro(a),e,r)}),Qf=Cn(Br);var Zf=Ac(function(e,a){e=ea(e);var t=-1,r=a.length,n=r>2?a[2]:c;for(n&&Wn(a[0],a[1],n)&&(r=1);++t<r;)for(var i=a[t],f=co(i),o=-1,d=f.length;++o<d;){var s=f[o],b=e[s];(b===c||uf(b,ia[s])&&!da.call(e,s))&&(e[s]=i[s])}return e}),Jf=Ac(function(e){return e.push(c,Sn),Va(io,c,e)});function Xf(e,a,t){var r=null==e?c:Qr(e,a);return r===c?t:r}function $f(e,a){return null!=e&&Un(e,a,ec)}var eo=pn(function(e,a,t){null!=a&&"function"!=typeof a.toString&&(a=ua.call(a)),e[a]=t},To(Ro)),ao=pn(function(e,a,t){null!=a&&"function"!=typeof a.toString&&(a=ua.call(a)),da.call(e,a)?e[a].push(t):e[a]=[t]},In),to=Ac(tc);function ro(e){return vf(e)?Ar(e):oc(e)}function co(e){return vf(e)?Ar(e,!0):dc(e)}var no=cn(function(e,a,t){pc(e,a,t)}),io=cn(function(e,a,t,r){pc(e,a,t,r)}),fo=Cn(function(e,a){var t={};if(null==e)return t;var r=!1;a=Xa(a,function(a){return a=Gc(a,e),r||(r=a.length>1),a}),tn(e,On(e),t),r&&(t=Nr(t,b|u|l,Tn));for(var c=a.length;c--;)Fc(t,a[c]);return t});var oo=Cn(function(e,a){return null==e?{}:function(e,a){return gc(e,a,function(a,t){return $f(e,t)})}(e,a)});function so(e,a){if(null==e)return{};var t=Xa(On(e),function(e){return[e]});return a=In(a),gc(e,t,function(e,t){return a(e,t[0])})}var bo=kn(ro),uo=kn(co);function lo(e){return null==e?[]:mt(e,ro(e))}var po=dn(function(e,a,t){return a=a.toLowerCase(),e+(t?ho(a):a)});function ho(e){return ko(Vf(e).toLowerCase())}function mo(e){return(e=Vf(e))&&e.replace(Ke,_t).replace(va,"")}var go=dn(function(e,a,t){return e+(t?"-":"")+a.toLowerCase()}),vo=dn(function(e,a,t){return e+(t?" ":"")+a.toLowerCase()}),yo=on("toLowerCase");var _o=dn(function(e,a,t){return e+(t?"_":"")+a.toLowerCase()});var wo=dn(function(e,a,t){return e+(t?" ":"")+ko(a)});var Ao=dn(function(e,a,t){return e+(t?" ":"")+a.toUpperCase()}),ko=on("toUpperCase");function xo(e,a,t){return e=Vf(e),(a=t?c:a)===c?function(e){return Aa.test(e)}(e)?function(e){return e.match(_a)||[]}(e):function(e){return e.match(De)||[]}(e):e.match(a)||[]}var Eo=Ac(function(e,a){try{return Va(e,c,a)}catch(e){return Af(e)?e:new Je(e)}}),So=Cn(function(e,a){return Wa(a,function(a){a=oi(a),Or(e,a,ef(e[a],e))}),e});function To(e){return function(){return e}}var jo=un(),Co=un(!0);function Ro(e){return e}function Oo(e){return fc("function"==typeof e?e:Nr(e,b))}var Bo=Ac(function(e,a){return function(t){return tc(t,e,a)}}),Mo=Ac(function(e,a){return function(t){return tc(e,t,a)}});function No(e,a,t){var r=ro(a),c=Kr(a,r);null!=t||Sf(a)&&(c.length||!r.length)||(t=a,a=e,e=this,c=Kr(a,ro(a)));var n=!(Sf(t)&&"chain"in t&&!t.chain),i=kf(e);return Wa(c,function(t){var r=a[t];e[t]=r,i&&(e.prototype[t]=function(){var a=this.__chain__;if(n||a){var t=e(this.__wrapped__);return(t.__actions__=an(this.__actions__)).push({func:r,args:arguments,thisArg:e}),t.__chain__=a,t}return r.apply(e,$a([this.value()],arguments))})}),e}function Io(){}var Po=mn(Xa),Fo=mn(Ka),Lo=mn(tt);function Do(e){return Yn(e)?st(oi(e)):function(e){return function(a){return Qr(a,e)}}(e)}var zo=vn(),qo=vn(!0);function Uo(){return[]}function Ho(){return!1}var Vo=hn(function(e,a){return e+a},0),Go=wn("ceil"),Wo=hn(function(e,a){return e/a},1),Yo=wn("floor");var Ko=hn(function(e,a){return e*a},1),Qo=wn("round"),Zo=hn(function(e,a){return e-a},0);return ur.after=function(e,a){if("function"!=typeof a)throw new ra(f);return e=zf(e),function(){if(--e<1)return a.apply(this,arguments)}},ur.ary=Xi,ur.assign=Gf,ur.assignIn=Wf,ur.assignInWith=Yf,ur.assignWith=Kf,ur.at=Qf,ur.before=$i,ur.bind=ef,ur.bindAll=So,ur.bindKey=af,ur.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return mf(e)?e:[e]},ur.chain=Fi,ur.chunk=function(e,a,r){a=(r?Wn(e,a,r):a===c)?1:Vt(zf(a),0);var n=null==e?0:e.length;if(!n||a<1)return[];for(var i=0,f=0,o=t(Ft(n/a));i<n;)o[f++]=Cc(e,i,i+=a);return o},ur.compact=function(e){for(var a=-1,t=null==e?0:e.length,r=0,c=[];++a<t;){var n=e[a];n&&(c[r++]=n)}return c},ur.concat=function(){var e=arguments.length;if(!e)return[];for(var a=t(e-1),r=arguments[0],c=e;c--;)a[c-1]=arguments[c];return $a(mf(r)?an(r):[r],Hr(a,1))},ur.cond=function(e){var a=null==e?0:e.length,t=In();return e=a?Xa(e,function(e){if("function"!=typeof e[1])throw new ra(f);return[t(e[0]),e[1]]}):[],Ac(function(t){for(var r=-1;++r<a;){var c=e[r];if(Va(c[0],this,t))return Va(c[1],this,t)}})},ur.conforms=function(e){return function(e){var a=ro(e);return function(t){return Ir(t,e,a)}}(Nr(e,b))},ur.constant=To,ur.countBy=zi,ur.create=function(e,a){var t=lr(e);return null==a?t:Rr(t,a)},ur.curry=function e(a,t,r){var n=xn(a,y,c,c,c,c,c,t=r?c:t);return n.placeholder=e.placeholder,n},ur.curryRight=function e(a,t,r){var n=xn(a,_,c,c,c,c,c,t=r?c:t);return n.placeholder=e.placeholder,n},ur.debounce=tf,ur.defaults=Zf,ur.defaultsDeep=Jf,ur.defer=rf,ur.delay=cf,ur.difference=bi,ur.differenceBy=ui,ur.differenceWith=li,ur.drop=function(e,a,t){var r=null==e?0:e.length;return r?Cc(e,(a=t||a===c?1:zf(a))<0?0:a,r):[]},ur.dropRight=function(e,a,t){var r=null==e?0:e.length;return r?Cc(e,0,(a=r-(a=t||a===c?1:zf(a)))<0?0:a):[]},ur.dropRightWhile=function(e,a){return e&&e.length?Dc(e,In(a,3),!0,!0):[]},ur.dropWhile=function(e,a){return e&&e.length?Dc(e,In(a,3),!0):[]},ur.fill=function(e,a,t,r){var n=null==e?0:e.length;return n?(t&&"number"!=typeof t&&Wn(e,a,t)&&(t=0,r=n),function(e,a,t,r){var n=e.length;for((t=zf(t))<0&&(t=-t>n?0:n+t),(r=r===c||r>n?n:zf(r))<0&&(r+=n),r=t>r?0:qf(r);t<r;)e[t++]=a;return e}(e,a,t,r)):[]},ur.filter=function(e,a){return(mf(e)?Qa:Ur)(e,In(a,3))},ur.flatMap=function(e,a){return Hr(Ki(e,a),1)},ur.flatMapDeep=function(e,a){return Hr(Ki(e,a),B)},ur.flatMapDepth=function(e,a,t){return t=t===c?1:zf(t),Hr(Ki(e,a),t)},ur.flatten=mi,ur.flattenDeep=function(e){return null!=e&&e.length?Hr(e,B):[]},ur.flattenDepth=function(e,a){return null!=e&&e.length?Hr(e,a=a===c?1:zf(a)):[]},ur.flip=function(e){return xn(e,E)},ur.flow=jo,ur.flowRight=Co,ur.fromPairs=function(e){for(var a=-1,t=null==e?0:e.length,r={};++a<t;){var c=e[a];r[c[0]]=c[1]}return r},ur.functions=function(e){return null==e?[]:Kr(e,ro(e))},ur.functionsIn=function(e){return null==e?[]:Kr(e,co(e))},ur.groupBy=Gi,ur.initial=function(e){return null!=e&&e.length?Cc(e,0,-1):[]},ur.intersection=vi,ur.intersectionBy=yi,ur.intersectionWith=_i,ur.invert=eo,ur.invertBy=ao,ur.invokeMap=Wi,ur.iteratee=Oo,ur.keyBy=Yi,ur.keys=ro,ur.keysIn=co,ur.map=Ki,ur.mapKeys=function(e,a){var t={};return a=In(a,3),Wr(e,function(e,r,c){Or(t,a(e,r,c),e)}),t},ur.mapValues=function(e,a){var t={};return a=In(a,3),Wr(e,function(e,r,c){Or(t,r,a(e,r,c))}),t},ur.matches=function(e){return uc(Nr(e,b))},ur.matchesProperty=function(e,a){return lc(e,Nr(a,b))},ur.memoize=nf,ur.merge=no,ur.mergeWith=io,ur.method=Bo,ur.methodOf=Mo,ur.mixin=No,ur.negate=ff,ur.nthArg=function(e){return e=zf(e),Ac(function(a){return hc(a,e)})},ur.omit=fo,ur.omitBy=function(e,a){return so(e,ff(In(a)))},ur.once=function(e){return $i(2,e)},ur.orderBy=function(e,a,t,r){return null==e?[]:(mf(a)||(a=null==a?[]:[a]),mf(t=r?c:t)||(t=null==t?[]:[t]),mc(e,a,t))},ur.over=Po,ur.overArgs=of,ur.overEvery=Fo,ur.overSome=Lo,ur.partial=df,ur.partialRight=sf,ur.partition=Qi,ur.pick=oo,ur.pickBy=so,ur.property=Do,ur.propertyOf=function(e){return function(a){return null==e?c:Qr(e,a)}},ur.pull=Ai,ur.pullAll=ki,ur.pullAllBy=function(e,a,t){return e&&e.length&&a&&a.length?vc(e,a,In(t,2)):e},ur.pullAllWith=function(e,a,t){return e&&e.length&&a&&a.length?vc(e,a,c,t):e},ur.pullAt=xi,ur.range=zo,ur.rangeRight=qo,ur.rearg=bf,ur.reject=function(e,a){return(mf(e)?Qa:Ur)(e,ff(In(a,3)))},ur.remove=function(e,a){var t=[];if(!e||!e.length)return t;var r=-1,c=[],n=e.length;for(a=In(a,3);++r<n;){var i=e[r];a(i,r,e)&&(t.push(i),c.push(r))}return yc(e,c),t},ur.rest=function(e,a){if("function"!=typeof e)throw new ra(f);return Ac(e,a=a===c?a:zf(a))},ur.reverse=Ei,ur.sampleSize=function(e,a,t){return a=(t?Wn(e,a,t):a===c)?1:zf(a),(mf(e)?xr:xc)(e,a)},ur.set=function(e,a,t){return null==e?e:Ec(e,a,t)},ur.setWith=function(e,a,t,r){return r="function"==typeof r?r:c,null==e?e:Ec(e,a,t,r)},ur.shuffle=function(e){return(mf(e)?Er:jc)(e)},ur.slice=function(e,a,t){var r=null==e?0:e.length;return r?(t&&"number"!=typeof t&&Wn(e,a,t)?(a=0,t=r):(a=null==a?0:zf(a),t=t===c?r:zf(t)),Cc(e,a,t)):[]},ur.sortBy=Zi,ur.sortedUniq=function(e){return e&&e.length?Mc(e):[]},ur.sortedUniqBy=function(e,a){return e&&e.length?Mc(e,In(a,2)):[]},ur.split=function(e,a,t){return t&&"number"!=typeof t&&Wn(e,a,t)&&(a=t=c),(t=t===c?P:t>>>0)?(e=Vf(e))&&("string"==typeof a||null!=a&&!Of(a))&&!(a=Ic(a))&&kt(e)?Yc(Ot(e),0,t):e.split(a,t):[]},ur.spread=function(e,a){if("function"!=typeof e)throw new ra(f);return a=null==a?0:Vt(zf(a),0),Ac(function(t){var r=t[a],c=Yc(t,0,a);return r&&$a(c,r),Va(e,this,c)})},ur.tail=function(e){var a=null==e?0:e.length;return a?Cc(e,1,a):[]},ur.take=function(e,a,t){return e&&e.length?Cc(e,0,(a=t||a===c?1:zf(a))<0?0:a):[]},ur.takeRight=function(e,a,t){var r=null==e?0:e.length;return r?Cc(e,(a=r-(a=t||a===c?1:zf(a)))<0?0:a,r):[]},ur.takeRightWhile=function(e,a){return e&&e.length?Dc(e,In(a,3),!1,!0):[]},ur.takeWhile=function(e,a){return e&&e.length?Dc(e,In(a,3)):[]},ur.tap=function(e,a){return a(e),e},ur.throttle=function(e,a,t){var r=!0,c=!0;if("function"!=typeof e)throw new ra(f);return Sf(t)&&(r="leading"in t?!!t.leading:r,c="trailing"in t?!!t.trailing:c),tf(e,a,{leading:r,maxWait:a,trailing:c})},ur.thru=Li,ur.toArray=Lf,ur.toPairs=bo,ur.toPairsIn=uo,ur.toPath=function(e){return mf(e)?Xa(e,oi):Nf(e)?[e]:an(fi(Vf(e)))},ur.toPlainObject=Hf,ur.transform=function(e,a,t){var r=mf(e),c=r||_f(e)||If(e);if(a=In(a,4),null==t){var n=e&&e.constructor;t=c?r?new n:[]:Sf(e)&&kf(n)?lr(Ra(e)):{}}return(c?Wa:Wr)(e,function(e,r,c){return a(t,e,r,c)}),t},ur.unary=function(e){return Xi(e,1)},ur.union=Si,ur.unionBy=Ti,ur.unionWith=ji,ur.uniq=function(e){return e&&e.length?Pc(e):[]},ur.uniqBy=function(e,a){return e&&e.length?Pc(e,In(a,2)):[]},ur.uniqWith=function(e,a){return a="function"==typeof a?a:c,e&&e.length?Pc(e,c,a):[]},ur.unset=function(e,a){return null==e||Fc(e,a)},ur.unzip=Ci,ur.unzipWith=Ri,ur.update=function(e,a,t){return null==e?e:Lc(e,a,Vc(t))},ur.updateWith=function(e,a,t,r){return r="function"==typeof r?r:c,null==e?e:Lc(e,a,Vc(t),r)},ur.values=lo,ur.valuesIn=function(e){return null==e?[]:mt(e,co(e))},ur.without=Oi,ur.words=xo,ur.wrap=function(e,a){return df(Vc(a),e)},ur.xor=Bi,ur.xorBy=Mi,ur.xorWith=Ni,ur.zip=Ii,ur.zipObject=function(e,a){return Uc(e||[],a||[],Tr)},ur.zipObjectDeep=function(e,a){return Uc(e||[],a||[],Ec)},ur.zipWith=Pi,ur.entries=bo,ur.entriesIn=uo,ur.extend=Wf,ur.extendWith=Yf,No(ur,ur),ur.add=Vo,ur.attempt=Eo,ur.camelCase=po,ur.capitalize=ho,ur.ceil=Go,ur.clamp=function(e,a,t){return t===c&&(t=a,a=c),t!==c&&(t=(t=Uf(t))==t?t:0),a!==c&&(a=(a=Uf(a))==a?a:0),Mr(Uf(e),a,t)},ur.clone=function(e){return Nr(e,l)},ur.cloneDeep=function(e){return Nr(e,b|l)},ur.cloneDeepWith=function(e,a){return Nr(e,b|l,a="function"==typeof a?a:c)},ur.cloneWith=function(e,a){return Nr(e,l,a="function"==typeof a?a:c)},ur.conformsTo=function(e,a){return null==a||Ir(e,a,ro(a))},ur.deburr=mo,ur.defaultTo=function(e,a){return null==e||e!=e?a:e},ur.divide=Wo,ur.endsWith=function(e,a,t){e=Vf(e),a=Ic(a);var r=e.length,n=t=t===c?r:Mr(zf(t),0,r);return(t-=a.length)>=0&&e.slice(t,n)==a},ur.eq=uf,ur.escape=function(e){return(e=Vf(e))&&xe.test(e)?e.replace(Ae,wt):e},ur.escapeRegExp=function(e){return(e=Vf(e))&&Be.test(e)?e.replace(Oe,"\\$&"):e},ur.every=function(e,a,t){var r=mf(e)?Ka:zr;return t&&Wn(e,a,t)&&(a=c),r(e,In(a,3))},ur.find=qi,ur.findIndex=pi,ur.findKey=function(e,a){return ct(e,In(a,3),Wr)},ur.findLast=Ui,ur.findLastIndex=hi,ur.findLastKey=function(e,a){return ct(e,In(a,3),Yr)},ur.floor=Yo,ur.forEach=Hi,ur.forEachRight=Vi,ur.forIn=function(e,a){return null==e?e:Vr(e,In(a,3),co)},ur.forInRight=function(e,a){return null==e?e:Gr(e,In(a,3),co)},ur.forOwn=function(e,a){return e&&Wr(e,In(a,3))},ur.forOwnRight=function(e,a){return e&&Yr(e,In(a,3))},ur.get=Xf,ur.gt=lf,ur.gte=pf,ur.has=function(e,a){return null!=e&&Un(e,a,$r)},ur.hasIn=$f,ur.head=gi,ur.identity=Ro,ur.includes=function(e,a,t,r){e=vf(e)?e:lo(e),t=t&&!r?zf(t):0;var c=e.length;return t<0&&(t=Vt(c+t,0)),Mf(e)?t<=c&&e.indexOf(a,t)>-1:!!c&&it(e,a,t)>-1},ur.indexOf=function(e,a,t){var r=null==e?0:e.length;if(!r)return-1;var c=null==t?0:zf(t);return c<0&&(c=Vt(r+c,0)),it(e,a,c)},ur.inRange=function(e,a,t){return a=Df(a),t===c?(t=a,a=0):t=Df(t),function(e,a,t){return e>=Gt(a,t)&&e<Vt(a,t)}(e=Uf(e),a,t)},ur.invoke=to,ur.isArguments=hf,ur.isArray=mf,ur.isArrayBuffer=gf,ur.isArrayLike=vf,ur.isArrayLikeObject=yf,ur.isBoolean=function(e){return!0===e||!1===e||Tf(e)&&Jr(e)==H},ur.isBuffer=_f,ur.isDate=wf,ur.isElement=function(e){return Tf(e)&&1===e.nodeType&&!Rf(e)},ur.isEmpty=function(e){if(null==e)return!0;if(vf(e)&&(mf(e)||"string"==typeof e||"function"==typeof e.splice||_f(e)||If(e)||hf(e)))return!e.length;var a=qn(e);if(a==Q||a==ae)return!e.size;if(Zn(e))return!oc(e).length;for(var t in e)if(da.call(e,t))return!1;return!0},ur.isEqual=function(e,a){return cc(e,a)},ur.isEqualWith=function(e,a,t){var r=(t="function"==typeof t?t:c)?t(e,a):c;return r===c?cc(e,a,c,t):!!r},ur.isError=Af,ur.isFinite=function(e){return"number"==typeof e&&qt(e)},ur.isFunction=kf,ur.isInteger=xf,ur.isLength=Ef,ur.isMap=jf,ur.isMatch=function(e,a){return e===a||nc(e,a,Fn(a))},ur.isMatchWith=function(e,a,t){return t="function"==typeof t?t:c,nc(e,a,Fn(a),t)},ur.isNaN=function(e){return Cf(e)&&e!=+e},ur.isNative=function(e){if(Qn(e))throw new Je(i);return ic(e)},ur.isNil=function(e){return null==e},ur.isNull=function(e){return null===e},ur.isNumber=Cf,ur.isObject=Sf,ur.isObjectLike=Tf,ur.isPlainObject=Rf,ur.isRegExp=Of,ur.isSafeInteger=function(e){return xf(e)&&e>=-M&&e<=M},ur.isSet=Bf,ur.isString=Mf,ur.isSymbol=Nf,ur.isTypedArray=If,ur.isUndefined=function(e){return e===c},ur.isWeakMap=function(e){return Tf(e)&&qn(e)==ne},ur.isWeakSet=function(e){return Tf(e)&&Jr(e)==ie},ur.join=function(e,a){return null==e?"":Ut.call(e,a)},ur.kebabCase=go,ur.last=wi,ur.lastIndexOf=function(e,a,t){var r=null==e?0:e.length;if(!r)return-1;var n=r;return t!==c&&(n=(n=zf(t))<0?Vt(r+n,0):Gt(n,r-1)),a==a?function(e,a,t){for(var r=t+1;r--;)if(e[r]===a)return r;return r}(e,a,n):nt(e,ot,n,!0)},ur.lowerCase=vo,ur.lowerFirst=yo,ur.lt=Pf,ur.lte=Ff,ur.max=function(e){return e&&e.length?qr(e,Ro,Xr):c},ur.maxBy=function(e,a){return e&&e.length?qr(e,In(a,2),Xr):c},ur.mean=function(e){return dt(e,Ro)},ur.meanBy=function(e,a){return dt(e,In(a,2))},ur.min=function(e){return e&&e.length?qr(e,Ro,sc):c},ur.minBy=function(e,a){return e&&e.length?qr(e,In(a,2),sc):c},ur.stubArray=Uo,ur.stubFalse=Ho,ur.stubObject=function(){return{}},ur.stubString=function(){return""},ur.stubTrue=function(){return!0},ur.multiply=Ko,ur.nth=function(e,a){return e&&e.length?hc(e,zf(a)):c},ur.noConflict=function(){return Ba._===this&&(Ba._=pa),this},ur.noop=Io,ur.now=Ji,ur.pad=function(e,a,t){e=Vf(e);var r=(a=zf(a))?Rt(e):0;if(!a||r>=a)return e;var c=(a-r)/2;return gn(Lt(c),t)+e+gn(Ft(c),t)},ur.padEnd=function(e,a,t){e=Vf(e);var r=(a=zf(a))?Rt(e):0;return a&&r<a?e+gn(a-r,t):e},ur.padStart=function(e,a,t){e=Vf(e);var r=(a=zf(a))?Rt(e):0;return a&&r<a?gn(a-r,t)+e:e},ur.parseInt=function(e,a,t){return t||null==a?a=0:a&&(a=+a),Yt(Vf(e).replace(Ne,""),a||0)},ur.random=function(e,a,t){if(t&&"boolean"!=typeof t&&Wn(e,a,t)&&(a=t=c),t===c&&("boolean"==typeof a?(t=a,a=c):"boolean"==typeof e&&(t=e,e=c)),e===c&&a===c?(e=0,a=1):(e=Df(e),a===c?(a=e,e=0):a=Df(a)),e>a){var r=e;e=a,a=r}if(t||e%1||a%1){var n=Kt();return Gt(e+n*(a-e+ja("1e-"+((n+"").length-1))),a)}return _c(e,a)},ur.reduce=function(e,a,t){var r=mf(e)?et:ut,c=arguments.length<3;return r(e,In(a,4),t,c,Lr)},ur.reduceRight=function(e,a,t){var r=mf(e)?at:ut,c=arguments.length<3;return r(e,In(a,4),t,c,Dr)},ur.repeat=function(e,a,t){return a=(t?Wn(e,a,t):a===c)?1:zf(a),wc(Vf(e),a)},ur.replace=function(){var e=arguments,a=Vf(e[0]);return e.length<3?a:a.replace(e[1],e[2])},ur.result=function(e,a,t){var r=-1,n=(a=Gc(a,e)).length;for(n||(n=1,e=c);++r<n;){var i=null==e?c:e[oi(a[r])];i===c&&(r=n,i=t),e=kf(i)?i.call(e):i}return e},ur.round=Qo,ur.runInContext=e,ur.sample=function(e){return(mf(e)?kr:kc)(e)},ur.size=function(e){if(null==e)return 0;if(vf(e))return Mf(e)?Rt(e):e.length;var a=qn(e);return a==Q||a==ae?e.size:oc(e).length},ur.snakeCase=_o,ur.some=function(e,a,t){var r=mf(e)?tt:Rc;return t&&Wn(e,a,t)&&(a=c),r(e,In(a,3))},ur.sortedIndex=function(e,a){return Oc(e,a)},ur.sortedIndexBy=function(e,a,t){return Bc(e,a,In(t,2))},ur.sortedIndexOf=function(e,a){var t=null==e?0:e.length;if(t){var r=Oc(e,a);if(r<t&&uf(e[r],a))return r}return-1},ur.sortedLastIndex=function(e,a){return Oc(e,a,!0)},ur.sortedLastIndexBy=function(e,a,t){return Bc(e,a,In(t,2),!0)},ur.sortedLastIndexOf=function(e,a){if(null!=e&&e.length){var t=Oc(e,a,!0)-1;if(uf(e[t],a))return t}return-1},ur.startCase=wo,ur.startsWith=function(e,a,t){return e=Vf(e),t=null==t?0:Mr(zf(t),0,e.length),a=Ic(a),e.slice(t,t+a.length)==a},ur.subtract=Zo,ur.sum=function(e){return e&&e.length?lt(e,Ro):0},ur.sumBy=function(e,a){return e&&e.length?lt(e,In(a,2)):0},ur.template=function(e,a,t){var r=ur.templateSettings;t&&Wn(e,a,t)&&(a=c),e=Vf(e),a=Yf({},a,r,En);var n,i,f=Yf({},a.imports,r.imports,En),o=ro(f),d=mt(f,o),s=0,b=a.interpolate||Qe,u="__p += '",l=aa((a.escape||Qe).source+"|"+b.source+"|"+(b===Te?qe:Qe).source+"|"+(a.evaluate||Qe).source+"|$","g"),p="//# sourceURL="+("sourceURL"in a?a.sourceURL:"lodash.templateSources["+ ++xa+"]")+"\n";e.replace(l,function(a,t,r,c,f,o){return r||(r=c),u+=e.slice(s,o).replace(Ze,At),t&&(n=!0,u+="' +\n__e("+t+") +\n'"),f&&(i=!0,u+="';\n"+f+";\n__p += '"),r&&(u+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),s=o+a.length,a}),u+="';\n";var h=a.variable;h||(u="with (obj) {\n"+u+"\n}\n"),u=(i?u.replace(ve,""):u).replace(ye,"$1").replace(_e,"$1;"),u="function("+(h||"obj")+") {\n"+(h?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(n?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+u+"return __p\n}";var m=Eo(function(){return Xe(o,p+"return "+u).apply(c,d)});if(m.source=u,Af(m))throw m;return m},ur.times=function(e,a){if((e=zf(e))<1||e>M)return[];var t=P,r=Gt(e,P);a=In(a),e-=P;for(var c=pt(r,a);++t<e;)a(t);return c},ur.toFinite=Df,ur.toInteger=zf,ur.toLength=qf,ur.toLower=function(e){return Vf(e).toLowerCase()},ur.toNumber=Uf,ur.toSafeInteger=function(e){return e?Mr(zf(e),-M,M):0===e?e:0},ur.toString=Vf,ur.toUpper=function(e){return Vf(e).toUpperCase()},ur.trim=function(e,a,t){if((e=Vf(e))&&(t||a===c))return e.replace(Me,"");if(!e||!(a=Ic(a)))return e;var r=Ot(e),n=Ot(a);return Yc(r,vt(r,n),yt(r,n)+1).join("")},ur.trimEnd=function(e,a,t){if((e=Vf(e))&&(t||a===c))return e.replace(Ie,"");if(!e||!(a=Ic(a)))return e;var r=Ot(e);return Yc(r,0,yt(r,Ot(a))+1).join("")},ur.trimStart=function(e,a,t){if((e=Vf(e))&&(t||a===c))return e.replace(Ne,"");if(!e||!(a=Ic(a)))return e;var r=Ot(e);return Yc(r,vt(r,Ot(a))).join("")},ur.truncate=function(e,a){var t=S,r=T;if(Sf(a)){var n="separator"in a?a.separator:n;t="length"in a?zf(a.length):t,r="omission"in a?Ic(a.omission):r}var i=(e=Vf(e)).length;if(kt(e)){var f=Ot(e);i=f.length}if(t>=i)return e;var o=t-Rt(r);if(o<1)return r;var d=f?Yc(f,0,o).join(""):e.slice(0,o);if(n===c)return d+r;if(f&&(o+=d.length-o),Of(n)){if(e.slice(o).search(n)){var s,b=d;for(n.global||(n=aa(n.source,Vf(Ue.exec(n))+"g")),n.lastIndex=0;s=n.exec(b);)var u=s.index;d=d.slice(0,u===c?o:u)}}else if(e.indexOf(Ic(n),o)!=o){var l=d.lastIndexOf(n);l>-1&&(d=d.slice(0,l))}return d+r},ur.unescape=function(e){return(e=Vf(e))&&ke.test(e)?e.replace(we,Bt):e},ur.uniqueId=function(e){var a=++sa;return Vf(e)+a},ur.upperCase=Ao,ur.upperFirst=ko,ur.each=Hi,ur.eachRight=Vi,ur.first=gi,No(ur,function(){var e={};return Wr(ur,function(a,t){da.call(ur.prototype,t)||(e[t]=a)}),e}(),{chain:!1}),ur.VERSION="4.17.10",Wa(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){ur[e].placeholder=ur}),Wa(["drop","take"],function(e,a){mr.prototype[e]=function(t){t=t===c?1:Vt(zf(t),0);var r=this.__filtered__&&!a?new mr(this):this.clone();return r.__filtered__?r.__takeCount__=Gt(t,r.__takeCount__):r.__views__.push({size:Gt(t,P),type:e+(r.__dir__<0?"Right":"")}),r},mr.prototype[e+"Right"]=function(a){return this.reverse()[e](a).reverse()}}),Wa(["filter","map","takeWhile"],function(e,a){var t=a+1,r=t==R||3==t;mr.prototype[e]=function(e){var a=this.clone();return a.__iteratees__.push({iteratee:In(e,3),type:t}),a.__filtered__=a.__filtered__||r,a}}),Wa(["head","last"],function(e,a){var t="take"+(a?"Right":"");mr.prototype[e]=function(){return this[t](1).value()[0]}}),Wa(["initial","tail"],function(e,a){var t="drop"+(a?"":"Right");mr.prototype[e]=function(){return this.__filtered__?new mr(this):this[t](1)}}),mr.prototype.compact=function(){return this.filter(Ro)},mr.prototype.find=function(e){return this.filter(e).head()},mr.prototype.findLast=function(e){return this.reverse().find(e)},mr.prototype.invokeMap=Ac(function(e,a){return"function"==typeof e?new mr(this):this.map(function(t){return tc(t,e,a)})}),mr.prototype.reject=function(e){return this.filter(ff(In(e)))},mr.prototype.slice=function(e,a){e=zf(e);var t=this;return t.__filtered__&&(e>0||a<0)?new mr(t):(e<0?t=t.takeRight(-e):e&&(t=t.drop(e)),a!==c&&(t=(a=zf(a))<0?t.dropRight(-a):t.take(a-e)),t)},mr.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},mr.prototype.toArray=function(){return this.take(P)},Wr(mr.prototype,function(e,a){var t=/^(?:filter|find|map|reject)|While$/.test(a),r=/^(?:head|last)$/.test(a),n=ur[r?"take"+("last"==a?"Right":""):a],i=r||/^find/.test(a);n&&(ur.prototype[a]=function(){var a=this.__wrapped__,f=r?[1]:arguments,o=a instanceof mr,d=f[0],s=o||mf(a),b=function(e){var a=n.apply(ur,$a([e],f));return r&&u?a[0]:a};s&&t&&"function"==typeof d&&1!=d.length&&(o=s=!1);var u=this.__chain__,l=!!this.__actions__.length,p=i&&!u,h=o&&!l;if(!i&&s){a=h?a:new mr(this);var m=e.apply(a,f);return m.__actions__.push({func:Li,args:[b],thisArg:c}),new hr(m,u)}return p&&h?e.apply(this,f):(m=this.thru(b),p?r?m.value()[0]:m.value():m)})}),Wa(["pop","push","shift","sort","splice","unshift"],function(e){var a=ca[e],t=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);ur.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var c=this.value();return a.apply(mf(c)?c:[],e)}return this[t](function(t){return a.apply(mf(t)?t:[],e)})}}),Wr(mr.prototype,function(e,a){var t=ur[a];if(t){var r=t.name+"";(rr[r]||(rr[r]=[])).push({name:a,func:t})}}),rr[ln(c,g).name]=[{name:"wrapper",func:c}],mr.prototype.clone=function(){var e=new mr(this.__wrapped__);return e.__actions__=an(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=an(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=an(this.__views__),e},mr.prototype.reverse=function(){if(this.__filtered__){var e=new mr(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},mr.prototype.value=function(){var e=this.__wrapped__.value(),a=this.__dir__,t=mf(e),r=a<0,c=t?e.length:0,n=function(e,a,t){for(var r=-1,c=t.length;++r<c;){var n=t[r],i=n.size;switch(n.type){case"drop":e+=i;break;case"dropRight":a-=i;break;case"take":a=Gt(a,e+i);break;case"takeRight":e=Vt(e,a-i)}}return{start:e,end:a}}(0,c,this.__views__),i=n.start,f=n.end,o=f-i,d=r?f:i-1,s=this.__iteratees__,b=s.length,u=0,l=Gt(o,this.__takeCount__);if(!t||!r&&c==o&&l==o)return zc(e,this.__actions__);var p=[];e:for(;o--&&u<l;){for(var h=-1,m=e[d+=a];++h<b;){var g=s[h],v=g.iteratee,y=g.type,_=v(m);if(y==O)m=_;else if(!_){if(y==R)continue e;break e}}p[u++]=m}return p},ur.prototype.at=Di,ur.prototype.chain=function(){return Fi(this)},ur.prototype.commit=function(){return new hr(this.value(),this.__chain__)},ur.prototype.next=function(){this.__values__===c&&(this.__values__=Lf(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?c:this.__values__[this.__index__++]}},ur.prototype.plant=function(e){for(var a,t=this;t instanceof pr;){var r=si(t);r.__index__=0,r.__values__=c,a?n.__wrapped__=r:a=r;var n=r;t=t.__wrapped__}return n.__wrapped__=e,a},ur.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof mr){var a=e;return this.__actions__.length&&(a=new mr(this)),(a=a.reverse()).__actions__.push({func:Li,args:[Ei],thisArg:c}),new hr(a,this.__chain__)}return this.thru(Ei)},ur.prototype.toJSON=ur.prototype.valueOf=ur.prototype.value=function(){return zc(this.__wrapped__,this.__actions__)},ur.prototype.first=ur.prototype.head,Fa&&(ur.prototype[Fa]=function(){return this}),ur}();Ba._=Mt,(r=function(){return Mt}.call(a,t,a,e))===c||(e.exports=r)}).call(this)}).call(this,t(25)(e))},function(e,a){var t=function(){"use strict";return void 0===this}();if(t)e.exports={freeze:Object.freeze,defineProperty:Object.defineProperty,getDescriptor:Object.getOwnPropertyDescriptor,keys:Object.keys,names:Object.getOwnPropertyNames,getPrototypeOf:Object.getPrototypeOf,isArray:Array.isArray,isES5:t,propertyIsWritable:function(e,a){var t=Object.getOwnPropertyDescriptor(e,a);return!(t&&!t.writable&&!t.set)}};else{var r={}.hasOwnProperty,c={}.toString,n={}.constructor.prototype,i=function(e){var a=[];for(var t in e)r.call(e,t)&&a.push(t);return a};e.exports={isArray:function(e){try{return"[object Array]"===c.call(e)}catch(e){return!1}},keys:i,names:i,defineProperty:function(e,a,t){return e[a]=t.value,e},getDescriptor:function(e,a){return{value:e[a]}},freeze:function(e){return e},getPrototypeOf:function(e){try{return Object(e).constructor.prototype}catch(e){return n}},isES5:t,propertyIsWritable:function(){return!0}}}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).toUpperCase()}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"Number")}},function(e,a,t){var r=t(31);e.exports=function(e){return"number"==typeof e?e:e?"string"==typeof e?parseFloat(e):r(e)?NaN:Number(e):0}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"Object")}},function(e,a,t){var r=t(149),c=t(104),n=t(256);e.exports=function(e,a){return e=null==e?r:~~e,a=null==a?c:~~a,Math.round(n(e-.5,a+.499999999999))}},function(e,a){e.exports=function(e,a){return e===a?0!==e||1/e==1/a:e!=e&&a!=a}},function(e,a,t){var r=t(48);function c(e,a){return e===a}e.exports=function(e,a){return a=a||c,r(e,function(e,t,r){for(var c=r.length;++t<c;)if(a(e,r[t]))return!1;return!0})}},function(e,a){e.exports=function(e,a,t){if(t=t||0,null==e)return-1;for(var r=e.length,c=t<0?r+t:t;c<r;){if(e[c]===a)return c;c++}return-1}},function(e,a){var t,r=/^\[object (.*)\]$/,c=Object.prototype.toString;e.exports=function(e){return null===e?"Null":e===t?"Undefined":r.exec(c.call(e))[1]}},function(e,a){e.exports=function(e,a){if(null==a)return e;for(var t=e.length,r=-1,c=a.length;++r<c;)e[t+r]=a[r];return e}},function(e,a,t){e.exports=h;var r=t(8),c=t(0),n=t(273),i=t(160),f=t(2),o="win32"===process.platform?0:process.umask(),d=t(109),s=t(159);c(h,s),h.dirmode=parseInt("0777",8)&~o,h.filemode=parseInt("0666",8)&~o;var b=t(268),u=t(267),l=t(266),p=t(265);function h(e,a){"string"==typeof e&&(e={path:e});var t=h;switch(d(e)){case"Directory":t=b;break;case"File":t=l;break;case"Link":case"SymbolicLink":t=u;break;case null:default:t=p}if(!(this instanceof t))return new t(e);s.call(this),e.path||this.error("Must provide a path",null,!0),this.type=e.type,this.props=e,this.depth=e.depth||0,this.clobber=!1!==e.clobber||e.clobber,this.parent=e.parent||null,this.root=e.root||e.parent&&e.parent.root||this,this._path=this.path=f.resolve(e.path),"win32"===process.platform&&(this.path=this._path=this.path.replace(/\?/g,"_"),this._path.length>=260&&(this._swallowErrors=!0,this._path="\\\\?\\"+this.path.replace(/\//g,"\\"))),this.basename=f.basename(e.path),this.dirname=f.dirname(e.path),this.linkpath=e.linkpath||null,e.parent=e.root=null,this.size=e.size,"string"==typeof e.mode&&(e.mode=parseInt(e.mode,8)),this.readable=!1,this.writable=!0,this._buffer=[],this.ready=!1,this.filter="function"==typeof e.filter?e.filter:null,this._stat(a)}function m(e){i(f.dirname(e._path),h.dirmode,function(a,t){return a?e.error(a):(e._madeDir=t,e._create())})}function g(e,a,t,c,n){var i=a.mode,f=a.follow||"SymbolicLink"!==e.type?"chmod":"lchmod";if(!r[f])return n();if("number"!=typeof i)return n();var o=t.mode&parseInt("0777",8);if((i&=parseInt("0777",8))===o)return n();r[f](c,i,n)}function v(e,a,t,c,n){if("win32"===process.platform)return n();if(!process.getuid||0!==process.getuid())return n();if("number"!=typeof a.uid&&"number"!=typeof a.gid)return n();if(t.uid===a.uid&&t.gid===a.gid)return n();var i=e.props.follow||"SymbolicLink"!==e.type?"chown":"lchown";if(!r[i])return n();"number"!=typeof a.uid&&(a.uid=t.uid),"number"!=typeof a.gid&&(a.gid=t.gid),r[i](c,a.uid,a.gid,n)}function y(e,a,t,c,n){if(!r.utimes||"win32"===process.platform)return n();var i=a.follow||"SymbolicLink"!==e.type?"utimes":"lutimes";if("lutimes"!==i||r[i]||(i="utimes"),!r[i])return n();var f=t.atime,o=t.mtime,d=a.atime,s=a.mtime;if(void 0===d&&(d=f),void 0===s&&(s=o),_(d)||(d=new Date(d)),_(s)||(d=new Date(s)),d.getTime()===f.getTime()&&s.getTime()===o.getTime())return n();r[i](c,d,s,n)}function _(e){return"object"==typeof e&&"[object Date]"===function(e){return Object.prototype.toString.call(e)}(e)}h.prototype._create=function(){var e=this;r[e.props.follow?"stat":"lstat"](e._path,function(a){if(a)return e.warn("Cannot create "+e._path+"\nUnsupported type: "+e.type,"ENOTSUP");e._finish()})},h.prototype._stat=function(e){var a=this,t=a.props.follow?"stat":"lstat",c=a._proxy||a;function i(e,t){return a.filter&&!a.filter.call(c,c,t)?(a._aborted=!0,a.emit("end"),void a.emit("close")):e||!t?m(a):(a._old=t,d(t)!==a.type?n(a._path,function(e){if(e)return a.error(e);a._old=null,m(a)}):void m(a))}e?i(null,e):r[t](a._path,i)},h.prototype._finish=function(){var e=this;if(e._finishing);else{e._finishing=!0;var a=0,t=null,c=!1;if(e._old)e._old.atime=new Date(0),e._old.mtime=new Date(0),i(e._old);else{var n=e.props.follow?"stat":"lstat";r[n](e._path,function(a,t){if(a)return"ENOENT"!==a.code||"Link"!==e.type&&"SymbolicLink"!==e.type||"win32"!==process.platform?e.error(a):(e.ready=!0,e.emit("ready"),e.emit("end"),e.emit("close"),void(e.end=e._finish=function(){}));i(e._old=t)})}}function i(t){a+=3,g(e,e.props,t,e._path,o("chmod")),v(e,e.props,t,e._path,o("chown")),y(e,e.props,t,e._path,o("utimes"))}function o(n){return function(i){if(!t){if(i)return i.fstream_finish_call=n,e.error(t=i);if(!(--a>0||c)){if(c=!0,!e._madeDir)return o();!function e(a,t,c){var n=a._madeDir;var i=f.dirname(t);!function(e,a,t){var c={};Object.keys(e.props).forEach(function(a){c[a]=e.props[a],"mode"===a&&"Directory"!==e.type&&(c[a]=c[a]|parseInt("0111",8))});var n=3,i=null;function f(e){if(!i)return e?t(i=e):0==--n?t():void 0}r.stat(a,function(r,n){if(r)return t(i=r);g(e,c,n,a,f),v(e,c,n,a,f),y(e,c,n,a,f)})}(a,i,function(t){return t?c(t):i===n?c():void e(a,i,c)})}(e,e._path,o)}}function o(a){if(a)return a.fstream_finish_call="setupMadeDir",e.error(a);e.emit("end"),e.emit("close")}}}},h.prototype.pipe=function(){this.error("Can't pipe from writable stream")},h.prototype.add=function(){this.error("Can't add to non-Directory type")},h.prototype.write=function(){return!0}},function(e,a,t){a.Abstract=t(159),a.Reader=t(56),a.Writer=t(78),a.File={Reader:t(275),Writer:t(266)},a.Dir={Reader:t(276),Writer:t(268)},a.Link={Reader:t(277),Writer:t(267)},a.Proxy={Reader:t(274),Writer:t(265)},a.Reader.Dir=a.DirReader=a.Dir.Reader,a.Reader.File=a.FileReader=a.File.Reader,a.Reader.Link=a.LinkReader=a.Link.Reader,a.Reader.Proxy=a.ProxyReader=a.Proxy.Reader,a.Writer.Dir=a.DirWriter=a.Dir.Writer,a.Writer.File=a.FileWriter=a.File.Writer,a.Writer.Link=a.LinkWriter=a.Link.Writer,a.Writer.Proxy=a.ProxyWriter=a.Proxy.Writer,a.collect=t(155)},function(e,a,t){var r=a;r.Reporter=t(758).Reporter,r.DecoderBuffer=t(301).DecoderBuffer,r.EncoderBuffer=t(301).EncoderBuffer,r.Node=t(757)},function(e,a,t){var r=a;r.bignum=t(9),r.define=t(760).define,r.base=t(80),r.constants=t(300),r.decoders=t(755),r.encoders=t(753)},function(e,a,t){e.exports=t(787)().Promise},function(e,a,t){var r=a.noop=function(){};function c(e,a,t){this.logFunction=t,this.identifier=e,this.uniqueID=a,this.buffer=[]}a.extend=function(e,a){for(var t in a)e[t]=a[t]},a.eventEmitterListenerCount=t(5).EventEmitter.listenerCount||function(e,a){return e.listeners(a).length},a.BufferingLogger=function(e,a){var n=t(115)(e);if(n.enabled){var i=new c(e,a,n),f=i.log.bind(i);return f.printOutput=i.printOutput.bind(i),f.enabled=n.enabled,f}return n.printOutput=r,n},c.prototype.log=function(){return this.buffer.push([new Date,Array.prototype.slice.call(arguments)]),this},c.prototype.clear=function(){return this.buffer=[],this},c.prototype.printOutput=function(e){e||(e=this.logFunction);var a=this.uniqueID;this.buffer.forEach(function(t){var r=t[0].toLocaleString(),c=t[1].slice(),n=c[0];void 0!==n&&null!==n&&(n="%s - %s - "+n.toString(),c.splice(0,1,n,r,a),e.apply(global,c))})}},function(e,a){e.exports=__webpack_require__(5)},function(e,a,t){e.exports=t(10).randomBytes},function(e,a,t){var r=t(351).create,c=r("LevelUPError"),n=r("NotFoundError",c);n.prototype.notFound=!0,n.prototype.status=404,e.exports={LevelUPError:c,InitializationError:r("InitializationError",c),OpenError:r("OpenError",c),ReadError:r("ReadError",c),WriteError:r("WriteError",c),NotFoundError:n,EncodingError:r("EncodingError",c)}},function(e,a,t){const r=t(362),c=t(361),n=t(44),i=r.BN,f=r.rlp,o=t(898),d=t(897),s=t(333);var b=e.exports=function(e){var a,t;this.transactions=[],this.uncleHeaders=[],this._inBlockChain=!1,this.txTrie=new n,Object.defineProperty(this,"raw",{get:function(){return this.serialize(!1)}}),e||(e=[[],[],[]]),Buffer.isBuffer(e)&&(e=f.decode(e)),Array.isArray(e)?(this.header=new d(e[0]),a=e[1],t=e[2]):(this.header=new d(e.header),a=e.transactions,t=e.uncleHeaders);for(var r=0;r<t.length;r++)this.uncleHeaders.push(new d(t[r]));var i=this.isHomestead();for(r=0;r<a.length;r++){var o=new c(a[r]);o._homestead=i,this.transactions.push(o)}};function u(e){try{return e.reduce(function(e,a){return e&&(e+=" "),e+a})}catch(e){return""}}b.prototype.hash=function(){return this.header.hash()},b.prototype.isGenesis=function(){return this.header.isGenesis()},b.prototype.isHomestead=function(){return this.header.isHomestead()},b.prototype.setGenesisParams=function(){this.header.gasLimit=s.genesisGasLimit.v,this.header.difficulty=s.genesisDifficulty.v,this.header.extraData=s.genesisExtraData.v,this.header.nonce=s.genesisNonce.v,this.header.stateRoot=s.genesisStateRoot.v,this.header.number=new Buffer([])},b.prototype.serialize=function(e){var a=[this.header.raw,[],[]];return void 0===e&&(e=!0),this.transactions.forEach(function(e){a[1].push(e.raw)}),this.uncleHeaders.forEach(function(e){a[2].push(e.raw)}),e?f.encode(a):a},b.prototype.genTxTrie=function(e){var a=0,t=this;o.eachSeries(this.transactions,function(e,r){t.txTrie.put(f.encode(a),e.serialize(),r),a++},e)},b.prototype.validateTransactionsTrie=function(){var e=this.header.transactionsTrie.toString("hex");return this.transactions.length?e===this.txTrie.root.toString("hex"):e===r.SHA3_RLP.toString("hex")},b.prototype.validateTransactions=function(e){var a=[];return this.transactions.forEach(function(e,t){var r=e.validate(!0);r&&(r+=" at tx "+t),a.push(r)}),void 0===e||!1===e?0===a.length:u(a)},b.prototype.validate=function(e,a){var t=this,r=[];o.parallel([t.validateUncles.bind(t,e),t.header.validate.bind(t.header,e),t.genTxTrie.bind(t)],function(e){e&&r.push(e),t.validateTransactionsTrie()||r.push("invalid transaction true");var c=t.validateTransactions(!0);""!==c&&r.push(c),t.validateUnclesHash()||r.push("invild uncle hash"),a(u(r))})},b.prototype.validateUnclesHash=function(){var e=[];return this.uncleHeaders.forEach(function(a){e.push(a.raw)}),e=f.encode(e),r.sha3(e).toString("hex")===this.header.uncleHash.toString("hex")},b.prototype.validateUncles=function(e,a){if(this.isGenesis())return a();var t=this;if(t.uncleHeaders.length>2)return a("too many uncle headers");var r=t.uncleHeaders.map(function(e){return e.hash().toString("hex")});if(new Set(r).size!==r.length)return a("dublicate unlces");o.each(t.uncleHeaders,function(a,r){var c=new i(t.header.number);o.parallel([a.validate.bind(a,e,c),function(t){e.getDetails(a.hash(),function(e,a){a&&a.isUncle?t(e||"uncle already included"):t()})}],r)},a)},b.prototype.toJSON=function(e){if(e){var a={header:this.header.toJSON(!0),transactions:[],uncleHeaders:[]};return this.transactions.forEach(function(t){a.transactions.push(t.toJSON(e))}),this.uncleHeaders.forEach(function(e){a.uncleHeaders.push(e.toJSON())}),a}return r.baToJSON(this.raw)}},function(e,a,t){const r=t(363);function c(){}e.exports=c,c.prototype.setEngine=function(e){const a=this;a.engine=e,e.on("block",function(e){a.currentBlock=e})},c.prototype.handleRequest=function(e,a,t){throw new Error("Subproviders should override `handleRequest`.")},c.prototype.emitPayload=function(e,a){this.engine.sendAsync(r(e),a)}},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.isAsync=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(t(957));var c="function"==typeof Symbol;function n(e){return c&&"AsyncFunction"===e[Symbol.toStringTag]}a.default=function(e){return n(e)?(0,r.default)(e):e},a.isAsync=n},function(e,a,t){"use strict";var r=t(37),c=t(46);function n(){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}a.BlockHash=n,n.prototype.update=function(e,a){if(e=r.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=r.join32(e,0,e.length-t,this.endian);for(var c=0;c<e.length;c+=this._delta32)this._update(e,c,c+this._delta32)}return this},n.prototype.digest=function(e){return this.update(this._pad()),c(null===this.pending),this._digest(e)},n.prototype._pad=function(){var e=this.pendingTotal,a=this._delta8,t=a-(e+this.padLength)%a,r=new Array(t+this.padLength);r[0]=128;for(var c=1;c<t;c++)r[c]=0;if(e<<=3,"big"===this.endian){for(var n=8;n<this.padLength;n++)r[c++]=0;r[c++]=0,r[c++]=0,r[c++]=0,r[c++]=0,r[c++]=e>>>24&255,r[c++]=e>>>16&255,r[c++]=e>>>8&255,r[c++]=255&e}else for(r[c++]=255&e,r[c++]=e>>>8&255,r[c++]=e>>>16&255,r[c++]=e>>>24&255,r[c++]=0,r[c++]=0,r[c++]=0,r[c++]=0,n=8;n<this.padLength;n++)r[c++]=0;return r}},function(e,a,t){"use strict";e.exports=t(1015)(t(1011))},function(e,a){a.getArg=function(e,a,t){if(a in e)return e[a];if(3===arguments.length)return t;throw new Error('"'+a+'" is a required argument.')};var t=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,r=/^data:.+\,.+$/;function c(e){var a=e.match(t);return a?{scheme:a[1],auth:a[2],host:a[3],port:a[4],path:a[5]}:null}function n(e){var a="";return e.scheme&&(a+=e.scheme+":"),a+="//",e.auth&&(a+=e.auth+"@"),e.host&&(a+=e.host),e.port&&(a+=":"+e.port),e.path&&(a+=e.path),a}function i(e){var t=e,r=c(e);if(r){if(!r.path)return e;t=r.path}for(var i,f=a.isAbsolute(t),o=t.split(/\/+/),d=0,s=o.length-1;s>=0;s--)"."===(i=o[s])?o.splice(s,1):".."===i?d++:d>0&&(""===i?(o.splice(s+1,d),d=0):(o.splice(s,2),d--));return""===(t=o.join("/"))&&(t=f?"/":"."),r?(r.path=t,n(r)):t}function f(e,a){""===e&&(e="."),""===a&&(a=".");var t=c(a),f=c(e);if(f&&(e=f.path||"/"),t&&!t.scheme)return f&&(t.scheme=f.scheme),n(t);if(t||a.match(r))return a;if(f&&!f.host&&!f.path)return f.host=a,n(f);var o="/"===a.charAt(0)?a:i(e.replace(/\/+$/,"")+"/"+a);return f?(f.path=o,n(f)):o}a.urlParse=c,a.urlGenerate=n,a.normalize=i,a.join=f,a.isAbsolute=function(e){return"/"===e.charAt(0)||t.test(e)},a.relative=function(e,a){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==a.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return a;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return a;++t}return Array(t+1).join("../")+a.substr(e.length+1)};var o=!("__proto__"in Object.create(null));function d(e){return e}function s(e){if(!e)return!1;var a=e.length;if(a<9)return!1;if(95!==e.charCodeAt(a-1)||95!==e.charCodeAt(a-2)||111!==e.charCodeAt(a-3)||116!==e.charCodeAt(a-4)||111!==e.charCodeAt(a-5)||114!==e.charCodeAt(a-6)||112!==e.charCodeAt(a-7)||95!==e.charCodeAt(a-8)||95!==e.charCodeAt(a-9))return!1;for(var t=a-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function b(e,a){return e===a?0:null===e?1:null===a?-1:e>a?1:-1}a.toSetString=o?d:function(e){return s(e)?"$"+e:e},a.fromSetString=o?d:function(e){return s(e)?e.slice(1):e},a.compareByOriginalPositions=function(e,a,t){var r=b(e.source,a.source);return 0!==r?r:0!=(r=e.originalLine-a.originalLine)?r:0!=(r=e.originalColumn-a.originalColumn)||t?r:0!=(r=e.generatedColumn-a.generatedColumn)?r:0!=(r=e.generatedLine-a.generatedLine)?r:b(e.name,a.name)},a.compareByGeneratedPositionsDeflated=function(e,a,t){var r=e.generatedLine-a.generatedLine;return 0!==r?r:0!=(r=e.generatedColumn-a.generatedColumn)||t?r:0!==(r=b(e.source,a.source))?r:0!=(r=e.originalLine-a.originalLine)?r:0!=(r=e.originalColumn-a.originalColumn)?r:b(e.name,a.name)},a.compareByGeneratedPositionsInflated=function(e,a){var t=e.generatedLine-a.generatedLine;return 0!==t?t:0!=(t=e.generatedColumn-a.generatedColumn)?t:0!==(t=b(e.source,a.source))?t:0!=(t=e.originalLine-a.originalLine)?t:0!=(t=e.originalColumn-a.originalColumn)?t:b(e.name,a.name)},a.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))},a.computeSourceURL=function(e,a,t){if(a=a||"",e&&("/"!==e[e.length-1]&&"/"!==a[0]&&(e+="/"),a=e+a),t){var r=c(t);if(!r)throw new Error("sourceMapURL could not be parsed");if(r.path){var o=r.path.lastIndexOf("/");o>=0&&(r.path=r.path.substring(0,o+1))}a=f(n(r),a)}return i(a)}},function(e,a,t){var r=t(19),c=t(117),n=t(3);e.exports={toJSON:function(e,a){for(var t=0,c=0;c<a.transactions.length;c++){if(a.transactions[c].hash().equals(e.hash())){t=c;break}}var n={hash:r.hex(e.hash()),nonce:r.hex(e.nonce),blockHash:r.hex(a.hash()),blockNumber:r.hex(a.header.number),transactionIndex:r.hex(t),from:r.hex(e.from),to:r.hex(e.to),value:r.hex(e.value),gas:r.hex(e.gasLimit),gasPrice:r.hex(e.gasPrice),input:r.hex(e.data)};return e.v&&e.v.length>0&&e.r&&e.r.length>0&&e.s&&e.s.length>0&&(n.v=r.hex(e.v),n.r=r.hex(e.r),n.s=r.hex(e.s)),n},fromJSON:function(e){var a=new c({nonce:n.toBuffer(r.hex(e.nonce)),from:n.toBuffer(r.hex(e.from)),value:n.toBuffer(r.hex(e.value)),gasLimit:n.toBuffer(r.hex(e.gas)),gasPrice:n.toBuffer(r.hex(e.gasPrice)),data:n.toBuffer(r.hex(e.input))});if(e.v&&e.v.length>0&&e.r&&e.r.length>0&&e.s&&e.s.length>0&&(a.v=n.toBuffer(r.hex(e.v)),a.r=n.toBuffer(r.hex(e.r)),a.s=n.toBuffer(r.hex(e.s))),e.to){var t=n.toBuffer(r.hex(e.to));t.equals(n.toBuffer("0x0"))||(a.to=n.setLengthLeft(t,20))}return a}}},function(e,a){a.from=Buffer.from||function(e,a){return a?new Buffer(e,a):new Buffer(e)},a.alloc=Buffer.alloc||function(e){return new Buffer(e)}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).toLowerCase()}},function(e,a){e.exports=[" ","\n","\r","\t","\f","\v"," "," ","᠎"," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," ","　"]},function(e,a){e.exports=function(e){e=e.replace(/#.*/,"");var a=/\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(e);return a?decodeURIComponent(a[0].replace(/\+/g," ")):""}},function(e,a,t){var r=t(141),c=t(70);e.exports=function(e,a,t){return e=c(e),r(""+e,a,t||"0")}},function(e,a,t){var r=t(16);function c(e,a){this[a]=e}e.exports=function(e,a){for(var t,n=0,i=arguments.length;++n<i;)null!=(t=arguments[n])&&r(t,c,e);return e}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"Date")}},function(e,a,t){var r=t(16);e.exports=function(e){var a=[];return r(e,function(e,t){a.push(e)}),a}},function(e,a,t){var r=t(16),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n=!1;return r(e,function(t,r){if(a(t,r,e))return n=!0,!1}),n}},function(e,a){e.exports=function(e,a,t){return e=Math.floor(e/a),t?e%t:e}},function(e,a){e.exports=2147483647},function(e,a,t){var r=t(14);e.exports=function(e,a,t){if(null!=e&&e.length){if(e.length&&!a)return Math.max.apply(Math,e);a=r(a,t);for(var c,n,i,f=-1/0,o=-1,d=e.length;++o<d;)(i=a(n=e[o],o,e))>f&&(f=i,c=n);return c}return 1/0}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){a=r(a,t);var c=[];if(null==e)return c;for(var n=-1,i=e.length;++n<i;)c[n]=a(e[n],n,e);return c}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){a=r(a,t);var c=!0;if(null==e)return c;for(var n=-1,i=e.length;++n<i;)if(!a(e[n],n,e)){c=!1;break}return c}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){a=r(a,t);var c=!1;if(null==e)return c;for(var n=-1,i=e.length;++n<i;)if(a(e[n],n,e)){c=!0;break}return c}},function(e,a){e.exports=function(e){var a,t=["Directory","File","SymbolicLink","Link","BlockDevice","CharacterDevice","FIFO","Socket"];if(e.type&&-1!==t.indexOf(e.type))return e[e.type]=!0,e.type;for(var r=0,c=t.length;r<c;r++){a=t[r];var n=e[a]||e["is"+a];if("function"==typeof n&&(n=n.call(e)),n)return e[a]=!0,e.type=a,a}return null}},function(e,a,t){e.exports=f;t(111);var r=t(41),c=(t(11).ok,t(6).Stream),n=t(0),i=t(79).Abstract;function f(e,a,t){c.call(this),this.readable=!0,this.writable=!0,this._needDrain=!1,this._paused=!1,this._reading=!1,this._ending=!1,this._ended=!1,this._remaining=0,this._abort=!1,this._queue=[],this._index=0,this._queueLen=0,this._read=this._read.bind(this),this.props={},this._header=e,this._extended=a||{},this._global={};var r=this;Object.keys(t||{}).forEach(function(e){r._global[e]=t[e]}),this._setProps()}n(f,c),f.prototype.write=function(e){this._ending&&this.error("write() after end()",null,!0),0===this._remaining&&this.error("invalid bytes past eof"),e.length>this._remaining&&(e=e.slice(0,this._remaining)),this._remaining-=e.length;var a=this._queueLen;return this._queue.push(e),this._queueLen++,this._read(),!(this._paused||a>0)||(this._needDrain=!0,!1)},f.prototype.end=function(e){e&&this.write(e),this._ending=!0,this._read()},f.prototype.pause=function(){this._paused=!0,this.emit("pause")},f.prototype.resume=function(){return this.emit("resume"),this._paused=!1,this._read(),this._queueLen-this._index>1},f.prototype._read=function(){if(!(this._paused||this._reading||this._ended)){for(this._reading=!0;this._index<this._queueLen&&!this._paused;){var e=this._queue[this._index++];this.emit("data",e)}this._index>=this._queueLen&&(this._queue.length=this._queueLen=this._index=0,this._needDrain&&(this._needDrain=!1,this.emit("drain")),this._ending&&(this._ended=!0,this.emit("end")));var a=this._maxQueueLen;this._queueLen>a&&this._index>0&&(a=Math.min(this._index,a),this._index-=a,this._queueLen-=a,this._queue=this._queue.slice(a)),this._reading=!1}},f.prototype._setProps=function(){for(var e,a=this._header,t=this._extended,c=this._global,n=this.props,i=r.fields,f=0;null!==i[f];f++){var o=i[f],d=a[o];void 0!==d&&(n[o]=d)}switch([c,t].forEach(function(e){Object.keys(e).forEach(function(a){void 0!==e[a]&&(n[a]=e[a])})}),["path","linkpath"].forEach(function(e){n.hasOwnProperty(e)&&(n[e]=n[e].split("\0")[0])}),["mtime","ctime","atime"].forEach(function(e){n.hasOwnProperty(e)&&(n[e]=new Date(1e3*n[e]))}),r.types[n.type]){case"OldFile":case"ContiguousFile":e="File";break;case"GNUDumpDir":e="Directory";break;case void 0:e="Unknown";break;case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":default:e=r.types[n.type]}this.type=e,this.path=n.path,this.size=n.size,this._remaining=n.size},f.prototype.abort=function(){this._abort=!0},f.prototype.warn=i.warn,f.prototype.error=i.error},function(e,a,t){e.exports=l;var r=t(41),c=r.fields,n=r.fieldOffs,i=r.fieldEnds,f=r.fieldSize,o=r.numeric,d=t(11).ok,s=" ".charCodeAt(0),b="/".charCodeAt(0),u="win32"===process.platform?"\\".charCodeAt(0):null;function l(e){if(!(this instanceof l))return new l(e);e&&this.decode(e)}function p(e){if(!(e||this instanceof l))throw new Error("encode must be called on a TarHeader, or supplied an object");var a=(e=e||this).block=new Buffer(512);e.prefix&&(e.path=e.prefix+"/"+e.path,e.prefix=""),e.needExtended=!1,e.mode&&("string"==typeof e.mode&&(e.mode=parseInt(e.mode,8)),e.mode=511&e.mode);for(var t=0;null!==c[t];t++){var d,s=c[t],p=n[t],h=i[t];switch(s){case"cksum":case"prefix":break;case"type":var y=e.type||"0";y.length>1&&((y=r.types[e.type])||(y="0")),g(a,p,h,y);break;case"path":var _=Buffer.byteLength(e.path),w=f[c.path],A=f[c.prefix];if(_>w&&_<=w+A){for(var k=_-1-w,x=A,E=!1,S=new Buffer(e.path),T=k;T<=x;T++)if(S[T]===b||S[T]===u){E=T;break}if(!1!==E){prefix=S.slice(0,E).toString("utf8"),path=S.slice(E+1).toString("utf8"),d=g(a,p,h,path),d=g(a,p=n[c.prefix],h=i[c.prefix],prefix)||d;break}}g(a,n[c.prefix],i[c.prefix],"");default:d=o[s]?m(a,p,h,e[s]):g(a,p,h,e[s]||"")}e.needExtended=e.needExtended||d}return m(a,p=n[c.cksum],h=i[c.cksum],v.call(this,a)),a}l.prototype={decode:y,encode:p,calcSum:v,checkSum:function(e){var a=v.call(this,e),t=(e=e||this.block).slice(n[c.cksum],i[c.cksum]);return(t=_(t))===a}},l.parseNumeric=_,l.encode=p,l.decode=y;var h={12:8589934591,11:1073741823,8:2097151,7:262143};function m(e,a,t,r){var c=t-a,n=h[c]||0;if(((r=r||0)instanceof Date||"[object Date]"===Object.prototype.toString.call(r))&&(r=r.getTime()/1e3),r>n||r<0)return function(e,a,t,r){var c=e.slice(a,t),n=r>=0;c[0]=n?128:255,n||(r*=-1);var i=[];do{var f=r%256;i.push(f),r=(r-f)/256}while(r);for(var o=i.length,d=c.length-o,s=1;s<d;s++)c[s]=n?0:255;var b=!0;for(s=o;s>0;s--){var u=i[o-s];n?c[d+s]=u:b&&0===u?c[d+s]=0:b?(b=!1,c[d+s]=256-u):c[d+s]=255-u}}(e,a,t,r),!0;var i=Math.floor(r).toString(8);if(r<h[c-1]&&(i+=" "),i.length<c&&(i=new Array(c-i.length).join("0")+i),i.length!==c-1)throw new Error("invalid length: "+JSON.stringify(i)+"\nexpected: "+c);e.write(i,a,c,"utf8"),e[t-1]=0}function g(e,a,t,r){var c=Buffer.byteLength(r),n=Math.min(c,t-a),i=c!==r.length||c>n;n>0&&e.write(r,a,n,"utf8");for(var f=a+n;f<t;f++)e[f]=0;return i}function v(e){if(e=e||this.block,d(Buffer.isBuffer(e)&&512===e.length),!e)throw new Error("Need block to checksum");for(var a=0,t=n[c.cksum],r=i[c.cksum],f=0;f<n[c.cksum];f++)a+=e[f];for(f=t;f<r;f++)a+=s;for(f=r;f<512;f++)a+=e[f];return a}function y(e){e=e||this.block,d(Buffer.isBuffer(e)&&512===e.length),this.block=e,this.cksumValid=this.checkSum();for(var a=null,t=0;null!==c[t];t++){var r=c[t],f=e.slice(n[t],i[t]);switch(r){case"ustar":if("ustar\0"!==f.toString())return void(this.ustar=!1);this.ustar=f.toString();break;case"prefix":var b=_(f.slice(131,143)),u=_(f.slice(143,155));0!==f[130]&&f[130]!==s||"number"!=typeof b||"number"!=typeof u||f[143]!==s||f[155]!==s||(this.atime=b,this.ctime=u,f=f.slice(0,130)),a=f.toString("utf8").replace(/\0+$/,"");break;default:o[r]?this[r]=_(f):this[r]=f.toString("utf8").replace(/\0+$/,"")}}a&&(this.path=a+"/"+this.path)}function _(e){if(128&e[0])return function(e){var a;if(128===e[0])a=!0;else{if(255!==e[0])return null;a=!1}for(var t=!1,r=[],c=e.length-1;c>0;c--){var n=e[c];a?r.push(n):t&&0===n?r.push(0):t?(t=!1,r.push(256-n)):r.push(255-n)}for(var i=0,f=(c=0,r.length);c<f;c++)i+=r[c]*Math.pow(256,c);return a?i:-1*i}(e);var a=e.toString("utf8").split("\0")[0].trim(),t=parseInt(a,8);return isNaN(t)?null:t}},function(e,a,t){"use strict";const r=t(725);e.exports={remove:function(e,a){const t={disableGlob:!0};return r(e,t,a||function(){})},removeSync:function(e){return r.sync(e,{disableGlob:!0})}}},function(e,a,t){"use strict";var r=t(51),c=t(50),n=t(27),i=function(){var e=this;r.packageInit(this,arguments),[new c({name:"getId",call:"net_version",params:0,outputFormatter:n.hexToNumber}),new c({name:"isListening",call:"net_listening",params:0}),new c({name:"getPeerCount",call:"net_peerCount",params:0,outputFormatter:n.hexToNumber})].forEach(function(a){a.attachToObject(e),a.setRequestManager(e._requestManager)})};r.addProviders(i),e.exports=i},function(e,a,t){"use strict";var r=t(784),c=function(e){this.name=e.name,this.type=e.type,this.subscriptions=e.subscriptions||{},this.requestManager=null};c.prototype.setRequestManager=function(e){this.requestManager=e},c.prototype.attachToObject=function(e){var a=this.buildCall();a.call=this.call;var t=this.name.split(".");t.length>1?(e[t[0]]=e[t[0]]||{},e[t[0]][t[1]]=a):e[t[0]]=a},c.prototype.buildCall=function(){var e=this;return function(){e.subscriptions[arguments[0]]||console.warn("Subscription "+JSON.stringify(arguments[0])+" doesn't exist. Subscribing anyway.");var a=new r({subscription:e.subscriptions[arguments[0]],requestManager:e.requestManager,type:e.type});return a.subscribe.apply(a,arguments)}},e.exports={subscriptions:c,subscription:r}},function(e,a,t){"undefined"!=typeof process&&"renderer"===process.type?e.exports=t(812):e.exports=t(810)},function(e,a,t){"use strict";var r=t(827).version,c=t(51),n=t(783),i=t(113),f=t(308),o=t(739),d=t(738),s=t(27),b=function(){var e=this;c.packageInit(this,arguments),this.version=r,this.utils=s,this.eth=new n(this),this.shh=new o(this),this.bzz=new d(this);var a=this.setProvider;this.setProvider=function(t,r){return a.apply(e,arguments),this.eth.setProvider(t,r),this.shh.setProvider(t,r),this.bzz.setProvider(t),!0}};b.version=r,b.utils=s,b.modules={Eth:n,Net:i,Personal:f,Shh:o,Bzz:d},c.addProviders(b),e.exports=b},function(e,a,t){"use strict";const r=t(861),c=t(3);e.exports=class extends r{constructor(e){super(e);var a=this;Object.defineProperty(this,"from",{enumerable:!0,configurable:!0,get:this.getSenderAddress.bind(a),set:function(e){a._from=c.toBuffer(e)}}),e&&e.from&&(this.from=e.from)}hash(e){if(e&&this._from){let e=Buffer.concat([this._from,this._from.slice(0,12)]);this.sign(e)}return super.hash(e)}}},function(e,a,t){"use strict";!process.version||0===process.version.indexOf("v0.")||0===process.version.indexOf("v1.")&&0!==process.version.indexOf("v1.8.")?e.exports={nextTick:function(e,a,t,r){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var c,n,i=arguments.length;switch(i){case 0:case 1:return process.nextTick(e);case 2:return process.nextTick(function(){e.call(null,a)});case 3:return process.nextTick(function(){e.call(null,a,t)});case 4:return process.nextTick(function(){e.call(null,a,t,r)});default:for(c=new Array(i-1),n=0;n<c.length;)c[n++]=arguments[n];return process.nextTick(function(){e.apply(null,c)})}}}:e.exports=process},function(e,a,t){"use strict";var r=a;r.base=t(1007),r.short=t(1006),r.mont=t(1005),r.edwards=t(1004)},function(e,a,t){var r=t(1),c=t(65),n=t(5).EventEmitter,i=t(187),f=t(400),o=t(399).Validation;const d="open";var s="setImmediate"in global?global.setImmediate.bind(global):process.nextTick.bind(process),b=0;function u(e,a,t,r,o){if(this._debug=c.BufferingLogger("websocket:connection",++b),this._debug("constructor"),this._debug.enabled&&function(e,a){if(!e._debug.enabled)return;var t=a.emit;for(var r in a.emit=function(a){e._debug("||| Socket Event  '%s'",a),t.apply(this,arguments)},a)"function"==typeof a[r]&&-1===["emit"].indexOf(r)&&function(t){var r=a[t];a[t]="on"!==t?function(){return e._debug("||| Socket method called:  %s",t),r.apply(this,arguments)}:function(){return e._debug("||| Socket method called:  %s (%s)",t,arguments[0]),r.apply(this,arguments)}}(r)}(this,e),n.call(this),this._pingListenerCount=0,this.on("newListener",function(e){"ping"===e&&this._pingListenerCount++}).on("removeListener",function(e){"ping"===e&&this._pingListenerCount--}),this.config=o,this.socket=e,this.protocol=t,this.extensions=a,this.remoteAddress=e.remoteAddress,this.closeReasonCode=-1,this.closeDescription=null,this.closeEventEmitted=!1,this.maskOutgoingPackets=r,this.maskBytes=new Buffer(4),this.frameHeader=new Buffer(10),this.bufferList=new f,this.currentFrame=new i(this.maskBytes,this.frameHeader,this.config),this.fragmentationSize=0,this.frameQueue=[],this.connected=!0,this.state=d,this.waitingForCloseResponse=!1,this.receivedEnd=!1,this.closeTimeout=this.config.closeTimeout,this.assembleFragments=this.config.assembleFragments,this.maxReceivedMessageSize=this.config.maxReceivedMessageSize,this.outputBufferFull=!1,this.inputPaused=!1,this.receivedDataHandler=this.processReceivedData.bind(this),this._closeTimerHandler=this.handleCloseTimer.bind(this),this.socket.setNoDelay(this.config.disableNagleAlgorithm),this.socket.setTimeout(0),this.config.keepalive&&!this.config.useNativeKeepalive){if("number"!=typeof this.config.keepaliveInterval)throw new Error("keepaliveInterval must be specified and numeric if keepalive is true.");if(this._keepaliveTimerHandler=this.handleKeepaliveTimer.bind(this),this.setKeepaliveTimer(),this.config.dropConnectionOnKeepaliveTimeout){if("number"!=typeof this.config.keepaliveGracePeriod)throw new Error("keepaliveGracePeriod  must be specified and numeric if dropConnectionOnKeepaliveTimeout is true.");this._gracePeriodTimerHandler=this.handleGracePeriodTimer.bind(this)}}else if(this.config.keepalive&&this.config.useNativeKeepalive){if(!("setKeepAlive"in this.socket))throw new Error("Unable to use native keepalive: unsupported by this version of Node.");this.socket.setKeepAlive(!0,this.config.keepaliveInterval)}this.socket.removeAllListeners("error")}function l(e){return!(e<1e3)&&(e>=1e3&&e<=2999?-1!==[1e3,1001,1002,1003,1007,1008,1009,1010,1011,1012,1013,1014].indexOf(e):e>=3e3&&e<=3999||(e>=4e3&&e<=4999||!(e>=5e3)&&void 0))}u.CLOSE_REASON_NORMAL=1e3,u.CLOSE_REASON_GOING_AWAY=1001,u.CLOSE_REASON_PROTOCOL_ERROR=1002,u.CLOSE_REASON_UNPROCESSABLE_INPUT=1003,u.CLOSE_REASON_RESERVED=1004,u.CLOSE_REASON_NOT_PROVIDED=1005,u.CLOSE_REASON_ABNORMAL=1006,u.CLOSE_REASON_INVALID_DATA=1007,u.CLOSE_REASON_POLICY_VIOLATION=1008,u.CLOSE_REASON_MESSAGE_TOO_BIG=1009,u.CLOSE_REASON_EXTENSION_REQUIRED=1010,u.CLOSE_REASON_INTERNAL_SERVER_ERROR=1011,u.CLOSE_REASON_TLS_HANDSHAKE_FAILED=1015,u.CLOSE_DESCRIPTIONS={1000:"Normal connection closure",1001:"Remote peer is going away",1002:"Protocol error",1003:"Unprocessable input",1004:"Reserved",1005:"Reason not provided",1006:"Abnormal closure, no further detail available",1007:"Invalid data received",1008:"Policy violation",1009:"Message too big",1010:"Extension requested by client is required",1011:"Internal Server Error",1015:"TLS Handshake Failed"},r.inherits(u,n),u.prototype._addSocketEventListeners=function(){this.socket.on("error",this.handleSocketError.bind(this)),this.socket.on("end",this.handleSocketEnd.bind(this)),this.socket.on("close",this.handleSocketClose.bind(this)),this.socket.on("drain",this.handleSocketDrain.bind(this)),this.socket.on("pause",this.handleSocketPause.bind(this)),this.socket.on("resume",this.handleSocketResume.bind(this)),this.socket.on("data",this.handleSocketData.bind(this))},u.prototype.setKeepaliveTimer=function(){this._debug("setKeepaliveTimer"),this.config.keepalive&&!this.config.useNativeKeepalive&&(this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this._keepaliveTimeoutID=setTimeout(this._keepaliveTimerHandler,this.config.keepaliveInterval))},u.prototype.clearKeepaliveTimer=function(){this._keepaliveTimeoutID&&clearTimeout(this._keepaliveTimeoutID)},u.prototype.handleKeepaliveTimer=function(){this._debug("handleKeepaliveTimer"),this._keepaliveTimeoutID=null,this.ping(),this.config.dropConnectionOnKeepaliveTimeout?this.setGracePeriodTimer():this.setKeepaliveTimer()},u.prototype.setGracePeriodTimer=function(){this._debug("setGracePeriodTimer"),this.clearGracePeriodTimer(),this._gracePeriodTimeoutID=setTimeout(this._gracePeriodTimerHandler,this.config.keepaliveGracePeriod)},u.prototype.clearGracePeriodTimer=function(){this._gracePeriodTimeoutID&&clearTimeout(this._gracePeriodTimeoutID)},u.prototype.handleGracePeriodTimer=function(){this._debug("handleGracePeriodTimer"),this._gracePeriodTimeoutID=null,this.drop(u.CLOSE_REASON_ABNORMAL,"Peer not responding.",!0)},u.prototype.handleSocketData=function(e){this._debug("handleSocketData"),this.setKeepaliveTimer(),this.bufferList.write(e),this.processReceivedData()},u.prototype.processReceivedData=function(){if(this._debug("processReceivedData"),this.connected&&!this.inputPaused){var e=this.currentFrame;if(e.addData(this.bufferList)){var a=this;if(e.protocolError)return this._debug("-- protocol error"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_PROTOCOL_ERROR,e.dropReason)});if(e.frameTooLarge)return this._debug("-- frame too large"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_MESSAGE_TOO_BIG,e.dropReason)});if(e.rsv1||e.rsv2||e.rsv3)return this._debug("-- illegal rsv flag"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unsupported usage of rsv bits without negotiated extension.")});this.assembleFragments||(this._debug("-- emitting frame"),process.nextTick(function(){a.emit("frame",e)})),process.nextTick(function(){a.processFrame(e)}),this.currentFrame=new i(this.maskBytes,this.frameHeader,this.config),this.bufferList.length>0&&s(this.receivedDataHandler)}else this._debug("-- insufficient data for frame")}},u.prototype.handleSocketError=function(e){this._debug("handleSocketError: %j",e),"closed"!==this.state?(this.closeReasonCode=u.CLOSE_REASON_ABNORMAL,this.closeDescription="Socket Error: "+e.syscall+" "+e.code,this.connected=!1,this.state="closed",this.fragmentationSize=0,c.eventEmitterListenerCount(this,"error")>0&&this.emit("error",e),this.socket.destroy(e),this._debug.printOutput()):this._debug("  --- Socket 'error' after 'close'")},u.prototype.handleSocketEnd=function(){this._debug("handleSocketEnd: received socket end.  state = %s",this.state),this.receivedEnd=!0,"closed"!==this.state?"peer_requested_close"!==this.state&&"ending"!==this.state&&(this._debug("  --- UNEXPECTED socket end."),this.socket.end()):this._debug("  --- Socket 'end' after 'close'")},u.prototype.handleSocketClose=function(e){this._debug("handleSocketClose: received socket close"),this.socketHadError=e,this.connected=!1,this.state="closed",-1===this.closeReasonCode&&(this.closeReasonCode=u.CLOSE_REASON_ABNORMAL,this.closeDescription="Connection dropped by remote peer."),this.clearCloseTimer(),this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this.closeEventEmitted||(this.closeEventEmitted=!0,this._debug("-- Emitting WebSocketConnection close event"),this.emit("close",this.closeReasonCode,this.closeDescription))},u.prototype.handleSocketDrain=function(){this._debug("handleSocketDrain: socket drain event"),this.outputBufferFull=!1,this.emit("drain")},u.prototype.handleSocketPause=function(){this._debug("handleSocketPause: socket pause event"),this.inputPaused=!0,this.emit("pause")},u.prototype.handleSocketResume=function(){this._debug("handleSocketResume: socket resume event"),this.inputPaused=!1,this.emit("resume"),this.processReceivedData()},u.prototype.pause=function(){this._debug("pause: pause requested"),this.socket.pause()},u.prototype.resume=function(){this._debug("resume: resume requested"),this.socket.resume()},u.prototype.close=function(e,a){if(this.connected){if(this._debug("close: Initating clean WebSocket close sequence."),"number"!=typeof e&&(e=u.CLOSE_REASON_NORMAL),!l(e))throw new Error("Close code "+e+" is not valid.");"string"!=typeof a&&(a=u.CLOSE_DESCRIPTIONS[e]),this.closeReasonCode=e,this.closeDescription=a,this.setCloseTimer(),this.sendCloseFrame(this.closeReasonCode,this.closeDescription),this.state="ending",this.connected=!1}},u.prototype.drop=function(e,a,t){this._debug("drop"),"number"!=typeof e&&(e=u.CLOSE_REASON_PROTOCOL_ERROR),"string"!=typeof a&&(a=u.CLOSE_DESCRIPTIONS[e]),this._debug("Forcefully dropping connection. skipCloseFrame: %s, code: %d, description: %s",t,e,a),this.closeReasonCode=e,this.closeDescription=a,this.frameQueue=[],this.fragmentationSize=0,t||this.sendCloseFrame(e,a),this.connected=!1,this.state="closed",this.clearCloseTimer(),this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this.closeEventEmitted||(this.closeEventEmitted=!0,this._debug("Emitting WebSocketConnection close event"),this.emit("close",this.closeReasonCode,this.closeDescription)),this._debug("Drop: destroying socket"),this.socket.destroy()},u.prototype.setCloseTimer=function(){this._debug("setCloseTimer"),this.clearCloseTimer(),this._debug("Setting close timer"),this.waitingForCloseResponse=!0,this.closeTimer=setTimeout(this._closeTimerHandler,this.closeTimeout)},u.prototype.clearCloseTimer=function(){this._debug("clearCloseTimer"),this.closeTimer&&(this._debug("Clearing close timer"),clearTimeout(this.closeTimer),this.waitingForCloseResponse=!1,this.closeTimer=null)},u.prototype.handleCloseTimer=function(){this._debug("handleCloseTimer"),this.closeTimer=null,this.waitingForCloseResponse&&(this._debug("Close response not received from client.  Forcing socket end."),this.waitingForCloseResponse=!1,this.state="closed",this.socket.end())},u.prototype.processFrame=function(e){if(this._debug("processFrame"),this._debug(" -- frame: %s",e),0!==this.frameQueue.length&&e.opcode>0&&e.opcode<8)this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Illegal frame opcode 0x"+e.opcode.toString(16)+" received in middle of fragmented message.");else switch(e.opcode){case 2:this._debug("-- Binary Frame"),this.assembleFragments&&(e.fin?(this._debug("---- Emitting 'message' event"),this.emit("message",{type:"binary",binaryData:e.binaryPayload})):(this.frameQueue.push(e),this.fragmentationSize=e.length));break;case 1:if(this._debug("-- Text Frame"),this.assembleFragments)if(e.fin){if(!o.isValidUTF8(e.binaryPayload))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this._debug("---- Emitting 'message' event"),this.emit("message",{type:"utf8",utf8Data:e.binaryPayload.toString("utf8")})}else this.frameQueue.push(e),this.fragmentationSize=e.length;break;case 0:if(this._debug("-- Continuation Frame"),this.assembleFragments){if(0===this.frameQueue.length)return void this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unexpected Continuation Frame");if(this.fragmentationSize+=e.length,this.fragmentationSize>this.maxReceivedMessageSize)return void this.drop(u.CLOSE_REASON_MESSAGE_TOO_BIG,"Maximum message size exceeded.");if(this.frameQueue.push(e),e.fin){var a=0,t=new Buffer(this.fragmentationSize),r=this.frameQueue[0].opcode;switch(this.frameQueue.forEach(function(e){e.binaryPayload.copy(t,a),a+=e.binaryPayload.length}),this.frameQueue=[],this.fragmentationSize=0,r){case 2:this.emit("message",{type:"binary",binaryData:t});break;case 1:if(!o.isValidUTF8(t))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this.emit("message",{type:"utf8",utf8Data:t.toString("utf8")});break;default:return void this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unexpected first opcode in fragmentation sequence: 0x"+r.toString(16))}}}break;case 9:if(this._debug("-- Ping Frame"),this._pingListenerCount>0){var c=!1;this.emit("ping",function(){c=!0},e.binaryPayload),c||this.pong(e.binaryPayload)}else this.pong(e.binaryPayload);break;case 10:this._debug("-- Pong Frame"),this.emit("pong",e.binaryPayload);break;case 8:if(this._debug("-- Close Frame"),this.waitingForCloseResponse)return this._debug("---- Got close response from peer.  Completing closing handshake."),this.clearCloseTimer(),this.waitingForCloseResponse=!1,this.state="closed",void this.socket.end();var n;if(this._debug("---- Closing handshake initiated by peer."),this.state="peer_requested_close",e.invalidCloseFrameLength?(this.closeReasonCode=1005,n=u.CLOSE_REASON_PROTOCOL_ERROR):-1===e.closeStatus||l(e.closeStatus)?(this.closeReasonCode=e.closeStatus,n=u.CLOSE_REASON_NORMAL):(this.closeReasonCode=e.closeStatus,n=u.CLOSE_REASON_PROTOCOL_ERROR),e.binaryPayload.length>1){if(!o.isValidUTF8(e.binaryPayload))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this.closeDescription=e.binaryPayload.toString("utf8")}else this.closeDescription=u.CLOSE_DESCRIPTIONS[this.closeReasonCode];this._debug("------ Remote peer %s - code: %d - %s - close frame payload length: %d",this.remoteAddress,this.closeReasonCode,this.closeDescription,e.length),this._debug("------ responding to remote peer's close request."),this.sendCloseFrame(n,null),this.connected=!1;break;default:this._debug("-- Unrecognized Opcode %d",e.opcode),this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unrecognized Opcode: 0x"+e.opcode.toString(16))}},u.prototype.send=function(e,a){if(this._debug("send"),Buffer.isBuffer(e))this.sendBytes(e,a);else{if("function"!=typeof e.toString)throw new Error("Data provided must either be a Node Buffer or implement toString()");this.sendUTF(e,a)}},u.prototype.sendUTF=function(e,a){e=new Buffer(e.toString(),"utf8"),this._debug("sendUTF: %d bytes",e.length);var t=new i(this.maskBytes,this.frameHeader,this.config);t.opcode=1,t.binaryPayload=e,this.fragmentAndSend(t,a)},u.prototype.sendBytes=function(e,a){if(this._debug("sendBytes"),!Buffer.isBuffer(e))throw new Error("You must pass a Node Buffer object to WebSocketConnection.prototype.sendBytes()");var t=new i(this.maskBytes,this.frameHeader,this.config);t.opcode=2,t.binaryPayload=e,this.fragmentAndSend(t,a)},u.prototype.ping=function(e){this._debug("ping");var a=new i(this.maskBytes,this.frameHeader,this.config);a.opcode=9,a.fin=!0,e&&(Buffer.isBuffer(e)||(e=new Buffer(e.toString(),"utf8")),e.length>125&&(this._debug("WebSocket: Data for ping is longer than 125 bytes.  Truncating."),e=e.slice(0,124)),a.binaryPayload=e),this.sendFrame(a)},u.prototype.pong=function(e){this._debug("pong");var a=new i(this.maskBytes,this.frameHeader,this.config);a.opcode=10,Buffer.isBuffer(e)&&e.length>125&&(this._debug("WebSocket: Data for pong is longer than 125 bytes.  Truncating."),e=e.slice(0,124)),a.binaryPayload=e,a.fin=!0,this.sendFrame(a)},u.prototype.fragmentAndSend=function(e,a){if(this._debug("fragmentAndSend"),e.opcode>7)throw new Error("You cannot fragment control frames.");var t=this.config.fragmentationThreshold,r=e.binaryPayload.length;if(!this.config.fragmentOutgoingMessages||e.binaryPayload&&r<=t)return e.fin=!0,void this.sendFrame(e,a);for(var c=Math.ceil(r/t),n=0,f=function(e){e?"function"==typeof a&&(a(e),a=null):++n===c&&"function"==typeof a&&a()},o=1;o<=c;o++){var d=new i(this.maskBytes,this.frameHeader,this.config);d.opcode=1===o?e.opcode:0,d.fin=o===c;var s=o===c?r-t*(o-1):t,b=t*(o-1);d.binaryPayload=e.binaryPayload.slice(b,b+s),this.sendFrame(d,f)}},u.prototype.sendCloseFrame=function(e,a,t){if("number"!=typeof e&&(e=u.CLOSE_REASON_NORMAL),this._debug("sendCloseFrame state: %s, reasonCode: %d, description: %s",this.state,e,a),this.state===d||"peer_requested_close"===this.state){var r=new i(this.maskBytes,this.frameHeader,this.config);r.fin=!0,r.opcode=8,r.closeStatus=e,"string"==typeof a&&(r.binaryPayload=new Buffer(a,"utf8")),this.sendFrame(r,t),this.socket.end()}},u.prototype.sendFrame=function(e,a){this._debug("sendFrame"),e.mask=this.maskOutgoingPackets;var t=this.socket.write(e.toBuffer(),a);return this.outputBufferFull=!t,t},e.exports=u},function(e,a,t){e.exports=f;var r=Object.keys||function(e){var a=[];for(var t in e)a.push(t);return a},c=t(17);c.inherits=t(0);var n=t(201),i=t(200);function f(e){if(!(this instanceof f))return new f(e);n.call(this,e),i.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",o)}function o(){this.allowHalfOpen||this._writableState.ended||process.nextTick(this.end.bind(this))}c.inherits(f,n),function(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}(r(i.prototype),function(e){f.prototype[e]||(f.prototype[e]=i.prototype[e])})},function(e,a,t){var r=t(351).create,c=r("LevelUPError"),n=r("NotFoundError",c);n.prototype.notFound=!0,n.prototype.status=404,e.exports={LevelUPError:c,InitializationError:r("InitializationError",c),OpenError:r("OpenError",c),ReadError:r("ReadError",c),WriteError:r("WriteError",c),NotFoundError:n,EncodingError:r("EncodingError",c)}},function(e,a,t){"use strict";var r=t(441),c=t(439),n=t(437),i=t(436),f=t(39),o=t(435);e.exports=function(e,a){return"function"==typeof e.sublevel&&"function"==typeof e.clone?e.clone(a):function(e,a){return a=f(e.options,a),c(r(e,n,i),[],o,a)}(e,a)}},function(e,a,t){"use strict";var r={UNKNOWN:{errno:-1,message:"unknown error"},OK:{errno:0,message:"success"},EOF:{errno:1,message:"end of file"},EADDRINFO:{errno:2,message:"getaddrinfo error"},EACCES:{errno:3,message:"permission denied"},EAGAIN:{errno:4,message:"resource temporarily unavailable"},EADDRINUSE:{errno:5,message:"address already in use"},EADDRNOTAVAIL:{errno:6,message:"address not available"},EAFNOSUPPORT:{errno:7,message:"address family not supported"},EALREADY:{errno:8,message:"connection already in progress"},EBADF:{errno:9,message:"bad file descriptor"},EBUSY:{errno:10,message:"resource busy or locked"},ECONNABORTED:{errno:11,message:"software caused connection abort"},ECONNREFUSED:{errno:12,message:"connection refused"},ECONNRESET:{errno:13,message:"connection reset by peer"},EDESTADDRREQ:{errno:14,message:"destination address required"},EFAULT:{errno:15,message:"bad address in system call argument"},EHOSTUNREACH:{errno:16,message:"host is unreachable"},EINTR:{errno:17,message:"interrupted system call"},EINVAL:{errno:18,message:"invalid argument"},EISCONN:{errno:19,message:"socket is already connected"},EMFILE:{errno:20,message:"too many open files"},EMSGSIZE:{errno:21,message:"message too long"},ENETDOWN:{errno:22,message:"network is down"},ENETUNREACH:{errno:23,message:"network is unreachable"},ENFILE:{errno:24,message:"file table overflow"},ENOBUFS:{errno:25,message:"no buffer space available"},ENOMEM:{errno:26,message:"not enough memory"},ENOTDIR:{errno:27,message:"not a directory"},EISDIR:{errno:28,message:"illegal operation on a directory"},ENONET:{errno:29,message:"machine is not on the network"},ENOTCONN:{errno:31,message:"socket is not connected"},ENOTSOCK:{errno:32,message:"socket operation on non-socket"},ENOTSUP:{errno:33,message:"operation not supported on socket"},ENOENT:{errno:34,message:"no such file or directory"},ENOSYS:{errno:35,message:"function not implemented"},EPIPE:{errno:36,message:"broken pipe"},EPROTO:{errno:37,message:"protocol error"},EPROTONOSUPPORT:{errno:38,message:"protocol not supported"},EPROTOTYPE:{errno:39,message:"protocol wrong type for socket"},ETIMEDOUT:{errno:40,message:"connection timed out"},ECHARSET:{errno:41,message:"invalid Unicode character"},EAIFAMNOSUPPORT:{errno:42,message:"address family for hostname not supported"},EAISERVICE:{errno:44,message:"servname not supported for ai_socktype"},EAISOCKTYPE:{errno:45,message:"ai_socktype not supported"},ESHUTDOWN:{errno:46,message:"cannot send after transport endpoint shutdown"},EEXIST:{errno:47,message:"file already exists"},ESRCH:{errno:48,message:"no such process"},ENAMETOOLONG:{errno:49,message:"name too long"},EPERM:{errno:50,message:"operation not permitted"},ELOOP:{errno:51,message:"too many symbolic links encountered"},EXDEV:{errno:52,message:"cross-device link not permitted"},ENOTEMPTY:{errno:53,message:"directory not empty"},ENOSPC:{errno:54,message:"no space left on device"},EIO:{errno:55,message:"i/o error"},EROFS:{errno:56,message:"read-only file system"},ENODEV:{errno:57,message:"no such device"},ESPIPE:{errno:58,message:"invalid seek"},ECANCELED:{errno:59,message:"peration canceled"}};function c(e,a){if(!r.hasOwnProperty(e))throw new Error("Programmer error, invalid error code: "+e);Error.call(this);var t=r[e],n=e+", "+t.message;a&&(n+=" '"+a+"'"),this.message=n,this.code=e,this.errno=t.errno,void 0!==a&&(this.path=a),Error.captureStackTrace(this,c)}c.prototype=new Error,e.exports=c},function(e,a,t){"use strict";var r=0,c=256,n=128,i=64,f=32,o=16,d=8,s=4,b=2,u=1;function l(){return process.getuid&&process.getuid()}function p(){return process.getgid&&process.getgid()}function h(){var e=Date.now();this._atime=new Date(e),this._ctime=new Date(e),this._birthtime=new Date(e),this._mtime=new Date(e),this._mode=438,this._uid=l(),this._gid=p(),this._id=++r,this.links=0}h.prototype.canRead=function(){var e=l(),a=p();return 0===e||(e===this._uid?(c&this._mode)===c:a===this._gid?(f&this._mode)===f:(s&this._mode)===s)},h.prototype.canWrite=function(){var e=l(),a=p();return 0===e||(e===this._uid?(n&this._mode)===n:a===this._gid?(o&this._mode)===o:(b&this._mode)===b)},h.prototype.canExecute=function(){var e=l(),a=p();return 0===e||(e===this._uid?(i&this._mode)===i:a===this._gid?(d&this._mode)===d:(u&this._mode)===u)},h.prototype.getATime=function(){return this._atime},h.prototype.setATime=function(e){this._atime=e},h.prototype.getCTime=function(){return this._ctime},h.prototype.setCTime=function(e){this._ctime=e},h.prototype.getBirthtime=function(){return this._birthtime},h.prototype.setBirthtime=function(e){this._birthtime=e},h.prototype.getMTime=function(){return this._mtime},h.prototype.setMTime=function(e){this._mtime=e},h.prototype.getMode=function(){return this._mode},h.prototype.setMode=function(e){this.setCTime(new Date),this._mode=e},h.prototype.getUid=function(){return this._uid},h.prototype.setUid=function(e){this.setCTime(new Date),this._uid=e},h.prototype.getGid=function(){return this._gid},h.prototype.setGid=function(e){this.setCTime(new Date),this._gid=e},h.prototype.getStats=function(){return{dev:8675309,nlink:this.links,uid:this.getUid(),gid:this.getGid(),rdev:0,blksize:4096,ino:this._id,atime:this.getATime(),mtime:this.getMTime(),ctime:this.getCTime(),birthtime:this.getBirthtime()}},h.prototype.toString=function(){return"["+this.constructor.name+"]"},e.exports=h},function(e,a,t){var r=t(4),c=/([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g;e.exports=function(e,a){return null==a&&(a=" "),e=(e=(e=r(e)).replace(c,function(e,t,r){return t+a+r})).toLowerCase()}},function(e,a,t){var r=t(4),c=t(130),n=t(129),i=t(128);e.exports=function(e,a){return e=r(e),null==a&&(a="-"),e=c(e),e=n(e),e=i(e).replace(/ +/g,a).toLowerCase()}},function(e,a,t){var r=t(4),c=t(96),n=t(214),i=t(213);e.exports=function(e,a){return e=r(e),n(i(e,a=a||c),a)}},function(e,a,t){var r=t(4),c=/[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g;e.exports=function(e){return(e=r(e)).replace(c,"")}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).search(/[\xC0-\xFF]/g)>-1&&(e=e.replace(/[\xC0-\xC5]/g,"A").replace(/[\xC6]/g,"AE").replace(/[\xC7]/g,"C").replace(/[\xC8-\xCB]/g,"E").replace(/[\xCC-\xCF]/g,"I").replace(/[\xD0]/g,"D").replace(/[\xD1]/g,"N").replace(/[\xD2-\xD6\xD8]/g,"O").replace(/[\xD9-\xDC]/g,"U").replace(/[\xDD]/g,"Y").replace(/[\xDE]/g,"P").replace(/[\xE0-\xE5]/g,"a").replace(/[\xE6]/g,"ae").replace(/[\xE7]/g,"c").replace(/[\xE8-\xEB]/g,"e").replace(/[\xEC-\xEF]/g,"i").replace(/[\xF1]/g,"n").replace(/[\xF2-\xF6\xF8]/g,"o").replace(/[\xF9-\xFC]/g,"u").replace(/[\xFE]/g,"p").replace(/[\xFD\xFF]/g,"y")),e}},function(e,a,t){var r=t(148);e.exports=function(){return r()>=.5}},function(e,a,t){var r=t(72),c=t(31);e.exports=function(e){var a=1===arguments.length&&c(e)?e:arguments;return a[r(0,a.length-1)]}},function(e,a){var t;e.exports=function(e){return null===e||"null"===e?null:"true"===e||"false"!==e&&(e===t||"undefined"===e?t:""===e||isNaN(e)?e:parseFloat(e))}},function(e,a,t){t(230);e.exports=function(e,a){for(var t=a.split("."),r=t.pop();a=t.shift();)if(null==(e=e[a]))return;return e[r]}},function(e,a,t){var r=t(76),c=t(136);e.exports=function(e){var a,t=[],n=r(e);if(null!=e)if(null==e.length||"String"===n||"Function"===n||"RegExp"===n||e===c)t[t.length]=e;else for(a=e.length;a--;)t[a]=e[a];return t}},function(e,a){e.exports=Function("return this")()},function(e,a){function t(){return t.get()}t.get="function"==typeof Date.now?Date.now:function(){return+new Date},e.exports=t},function(e,a,t){var r=t(98);e.exports=function(e){var a=e.getTimezoneOffset(),t=Math.abs(a),c=r(Math.floor(t/60),2),n=r(t%60,2);return(a>0?"-":"+")+c+n}},function(e,a){e.exports=function(e){return~~e}},function(e,a,t){var r=t(4),c=t(139);e.exports=function(e,a){var t="";if(e=r(e),(a=c(a))<1)return"";for(;a>0;)a%2&&(t+=e),a=Math.floor(a/2),e+=e;return t}},function(e,a,t){var r=t(4),c=t(140);e.exports=function(e,a,t){return e=r(e),t=t||" ",e.length<a?c(t,a-e.length)+e:e}},function(e,a,t){var r=t(76),c=t(53),n=t(99);e.exports=function(e){switch(r(e)){case"Object":return function(e){return c(e)?n({},e):e}(e);case"Array":return function(e){return e.slice()}(e);case"RegExp":return function(e){var a="";return a+=e.multiline?"m":"",a+=e.global?"g":"",a+=e.ignoreCase?"i":"",new RegExp(e.source,a)}(e);case"Date":return function(e){return new Date(+e)}(e);default:return e}}},function(e,a,t){var r=t(100);e.exports=function(e){return r(e)&&(e=e.getFullYear()),e%400==0||e%100!=0&&e%4==0}},function(e,a,t){t(100);e.exports=function(e){return(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())-Date.UTC(e.getFullYear(),0,1))/864e5+1}},function(e,a,t){var r=t(16);e.exports=function(e){var a=0;return r(e,function(){a++}),a}},function(e,a,t){var r=t(16),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n=!0;return r(e,function(t,r){if(!a(t,r,e))return n=!1,!1}),n}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"Function")}},function(e,a){function t(){return t.get()}t.get=Math.random,e.exports=t},function(e,a){e.exports=-2147483648},function(e,a,t){var r=t(14);e.exports=function(e,a,t){if(null!=e&&e.length){if(e.length&&!a)return Math.min.apply(Math,e);a=r(a,t);for(var c,n,i,f=1/0,o=-1,d=e.length;++o<d;)(i=a(n=e[o],o,e))<f&&(f=i,c=n);return c}return-1/0}},function(e,a,t){var r=t(259);e.exports=function(e,a,t){var c=r(e,a,t);return c>=0?e[c]:void 0}},function(e,a,t){var r,c,n=t(55);function i(e,a,t,r){return e.call(r,a[t],t,a)}e.exports=function(e,a,t){var f,o=0;for(f in null==r&&function(){for(var e in c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],r=!0,{toString:null})r=!1}(),e)if(!1===i(a,e,f,t))break;if(r)for(var d=e.constructor,s=!!d&&e===d.prototype;(f=c[o++])&&("constructor"===f&&(s||!n(e,f))||e[f]===Object.prototype[f]||!1!==i(a,e,f,t)););}},function(e,a){e.exports=function(e){return function(a){return a[e]}}},function(e,a){e.exports=function(e){return e}},function(e,a){e.exports=function e(a){if(a._collected)return;if(a._paused)return a.on("resume",e.bind(null,a));a._collected=!0;a.pause();a.on("data",r);a.on("end",r);var t=[];function r(e){"string"==typeof e&&(e=new Buffer(e)),Buffer.isBuffer(e)&&!e.length||t.push(e)}a.on("entry",n);var c=[];function n(a){e(a),c.push(a)}a.on("proxy",function(e){e.pause()});a.pipe=function(e){return function(i){var f=0;return function o(){var d=c[f++];if(!d)return function(){a.removeListener("entry",n),a.removeListener("data",r),a.removeListener("end",r),a.pipe=e,i&&a.pipe(i);t.forEach(function(e){e?a.emit("data",e):a.emit("end")}),a.resume()}();d.on("end",o),i?i.add(d):a.emit("entry",d)}(),i}}(a.pipe)}},function(e,a,t){var r=t(269);function c(e){var a=function(){return a.called?a.value:(a.called=!0,a.value=e.apply(this,arguments))};return a.called=!1,a}function n(e){var a=function(){if(a.called)throw new Error(a.onceError);return a.called=!0,a.value=e.apply(this,arguments)},t=e.name||"Function wrapped with `once`";return a.onceError=t+" shouldn't be called more than once",a.called=!1,a}e.exports=r(c),e.exports.strict=r(n),c.proto=c(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return c(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return n(this)},configurable:!0})})},function(e,a,t){"use strict";function r(e){return"/"===e.charAt(0)}function c(e){var a=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(e),t=a[1]||"",r=Boolean(t&&":"!==t.charAt(1));return Boolean(a[2]||r)}e.exports="win32"===process.platform?c:r,e.exports.posix=r,e.exports.win32=c},function(e,a,t){e.exports=p,p.Minimatch=h;var r={sep:"/"};try{r=t(2)}catch(e){}var c=p.GLOBSTAR=h.GLOBSTAR={},n=t(654),i={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},f="[^/]",o=f+"*?",d="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",s="(?:(?!(?:\\/|^)\\.).)*?",b=function(e){return e.split("").reduce(function(e,a){return e[a]=!0,e},{})}("().*{}+?[]^$\\!");var u=/\/+/;function l(e,a){e=e||{},a=a||{};var t={};return Object.keys(a).forEach(function(e){t[e]=a[e]}),Object.keys(e).forEach(function(a){t[a]=e[a]}),t}function p(e,a,t){if("string"!=typeof a)throw new TypeError("glob pattern string required");return t||(t={}),!(!t.nocomment&&"#"===a.charAt(0))&&(""===a.trim()?""===e:new h(a,t).match(e))}function h(e,a){if(!(this instanceof h))return new h(e,a);if("string"!=typeof e)throw new TypeError("glob pattern string required");a||(a={}),e=e.trim(),"/"!==r.sep&&(e=e.split(r.sep).join("/")),this.options=a,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function m(e,a){if(a||(a=this instanceof h?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return a.nobrace||!e.match(/\{.*\}/)?[e]:n(e)}p.filter=function(e,a){return a=a||{},function(t,r,c){return p(t,e,a)}},p.defaults=function(e){if(!e||!Object.keys(e).length)return p;var a=p,t=function(t,r,c){return a.minimatch(t,r,l(e,c))};return t.Minimatch=function(t,r){return new a.Minimatch(t,l(e,r))},t},h.defaults=function(e){return e&&Object.keys(e).length?p.defaults(e).Minimatch:h},h.prototype.debug=function(){},h.prototype.make=function(){if(this._made)return;var e=this.pattern,a=this.options;if(!a.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var t=this.globSet=this.braceExpand();a.debug&&(this.debug=console.error);this.debug(this.pattern,t),t=this.globParts=t.map(function(e){return e.split(u)}),this.debug(this.pattern,t),t=t.map(function(e,a,t){return e.map(this.parse,this)},this),this.debug(this.pattern,t),t=t.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,t),this.set=t},h.prototype.parseNegate=function(){var e=this.pattern,a=!1,t=0;if(this.options.nonegate)return;for(var r=0,c=e.length;r<c&&"!"===e.charAt(r);r++)a=!a,t++;t&&(this.pattern=e.substr(t));this.negate=a},p.braceExpand=function(e,a){return m(e,a)},h.prototype.braceExpand=m,h.prototype.parse=function(e,a){if(e.length>65536)throw new TypeError("pattern is too long");var t=this.options;if(!t.noglobstar&&"**"===e)return c;if(""===e)return"";var r,n="",d=!!t.nocase,s=!1,u=[],l=[],p=!1,h=-1,m=-1,v="."===e.charAt(0)?"":t.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",y=this;function _(){if(r){switch(r){case"*":n+=o,d=!0;break;case"?":n+=f,d=!0;break;default:n+="\\"+r}y.debug("clearStateChar %j %j",r,n),r=!1}}for(var w,A=0,k=e.length;A<k&&(w=e.charAt(A));A++)if(this.debug("%s\t%s %s %j",e,A,n,w),s&&b[w])n+="\\"+w,s=!1;else switch(w){case"/":return!1;case"\\":_(),s=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,A,n,w),p){this.debug("  in class"),"!"===w&&A===m+1&&(w="^"),n+=w;continue}y.debug("call clearStateChar %j",r),_(),r=w,t.noext&&_();continue;case"(":if(p){n+="(";continue}if(!r){n+="\\(";continue}u.push({type:r,start:A-1,reStart:n.length,open:i[r].open,close:i[r].close}),n+="!"===r?"(?:(?!(?:":"(?:",this.debug("plType %j %j",r,n),r=!1;continue;case")":if(p||!u.length){n+="\\)";continue}_(),d=!0;var x=u.pop();n+=x.close,"!"===x.type&&l.push(x),x.reEnd=n.length;continue;case"|":if(p||!u.length||s){n+="\\|",s=!1;continue}_(),n+="|";continue;case"[":if(_(),p){n+="\\"+w;continue}p=!0,m=A,h=n.length,n+=w;continue;case"]":if(A===m+1||!p){n+="\\"+w,s=!1;continue}if(p){var E=e.substring(m+1,A);try{RegExp("["+E+"]")}catch(e){var S=this.parse(E,g);n=n.substr(0,h)+"\\["+S[0]+"\\]",d=d||S[1],p=!1;continue}}d=!0,p=!1,n+=w;continue;default:_(),s?s=!1:!b[w]||"^"===w&&p||(n+="\\"),n+=w}p&&(E=e.substr(m+1),S=this.parse(E,g),n=n.substr(0,h)+"\\["+S[0],d=d||S[1]);for(x=u.pop();x;x=u.pop()){var T=n.slice(x.reStart+x.open.length);this.debug("setting tail",n,x),T=T.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,a,t){return t||(t="\\"),a+a+t+"|"}),this.debug("tail=%j\n   %s",T,T,x,n);var j="*"===x.type?o:"?"===x.type?f:"\\"+x.type;d=!0,n=n.slice(0,x.reStart)+j+"\\("+T}_(),s&&(n+="\\\\");var C=!1;switch(n.charAt(0)){case".":case"[":case"(":C=!0}for(var R=l.length-1;R>-1;R--){var O=l[R],B=n.slice(0,O.reStart),M=n.slice(O.reStart,O.reEnd-8),N=n.slice(O.reEnd-8,O.reEnd),I=n.slice(O.reEnd);N+=I;var P=B.split("(").length-1,F=I;for(A=0;A<P;A++)F=F.replace(/\)[+*?]?/,"");var L="";""===(I=F)&&a!==g&&(L="$");var D=B+M+I+L+N;n=D}""!==n&&d&&(n="(?=.)"+n);C&&(n=v+n);if(a===g)return[n,d];if(!d)return function(e){return e.replace(/\\(.)/g,"$1")}(e);var z=t.nocase?"i":"";try{var q=new RegExp("^"+n+"$",z)}catch(e){return new RegExp("$.")}return q._glob=e,q._src=n,q};var g={};p.makeRe=function(e,a){return new h(e,a||{}).makeRe()},h.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var a=this.options,t=a.noglobstar?o:a.dot?d:s,r=a.nocase?"i":"",n=e.map(function(e){return e.map(function(e){return e===c?t:"string"==typeof e?function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}(e):e._src}).join("\\/")}).join("|");n="^(?:"+n+")$",this.negate&&(n="^(?!"+n+").*$");try{this.regexp=new RegExp(n,r)}catch(e){this.regexp=!1}return this.regexp},p.match=function(e,a,t){var r=new h(a,t=t||{});return e=e.filter(function(e){return r.match(e)}),r.options.nonull&&!e.length&&e.push(a),e},h.prototype.match=function(e,a){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&a)return!0;var t=this.options;"/"!==r.sep&&(e=e.split(r.sep).join("/"));e=e.split(u),this.debug(this.pattern,"split",e);var c,n,i=this.set;for(this.debug(this.pattern,"set",i),n=e.length-1;n>=0&&!(c=e[n]);n--);for(n=0;n<i.length;n++){var f=i[n],o=e;t.matchBase&&1===f.length&&(o=[c]);var d=this.matchOne(o,f,a);if(d)return!!t.flipNegate||!this.negate}return!t.flipNegate&&this.negate},h.prototype.matchOne=function(e,a,t){var r=this.options;this.debug("matchOne",{this:this,file:e,pattern:a}),this.debug("matchOne",e.length,a.length);for(var n=0,i=0,f=e.length,o=a.length;n<f&&i<o;n++,i++){this.debug("matchOne loop");var d,s=a[i],b=e[n];if(this.debug(a,s,b),!1===s)return!1;if(s===c){this.debug("GLOBSTAR",[a,s,b]);var u=n,l=i+1;if(l===o){for(this.debug("** at the end");n<f;n++)if("."===e[n]||".."===e[n]||!r.dot&&"."===e[n].charAt(0))return!1;return!0}for(;u<f;){var p=e[u];if(this.debug("\nglobstar while",e,u,a,l,p),this.matchOne(e.slice(u),a.slice(l),t))return this.debug("globstar found match!",u,f,p),!0;if("."===p||".."===p||!r.dot&&"."===p.charAt(0)){this.debug("dot detected!",e,u,a,l);break}this.debug("globstar swallow a segment, and continue"),u++}return!(!t||(this.debug("\n>>> no match, partial?",e,u,a,l),u!==f))}if("string"==typeof s?(d=r.nocase?b.toLowerCase()===s.toLowerCase():b===s,this.debug("string match",s,b,d)):(d=b.match(s),this.debug("pattern match",s,b,d)),!d)return!1}if(n===f&&i===o)return!0;if(n===f)return t;if(i===o)return n===f-1&&""===e[n];throw new Error("wtf?")}},function(e,a,t){e.exports=c;var r=t(6).Stream;function c(){r.call(this)}function n(e,a,t){return e instanceof Error||(e=new Error(e)),e.code=e.code||a,e.path=e.path||t.path,e.fstream_type=e.fstream_type||t.type,e.fstream_path=e.fstream_path||t.path,t._path!==t.path&&(e.fstream_unc_path=e.fstream_unc_path||t._path),t.linkpath&&(e.fstream_linkpath=e.fstream_linkpath||t.linkpath),e.fstream_class=e.fstream_class||t.constructor.name,e.fstream_stack=e.fstream_stack||(new Error).stack.split(/\n/).slice(3).map(function(e){return e.replace(/^ {4}at /,"")}),e}t(0)(c,r),c.prototype.on=function(e,a){return"ready"===e&&this.ready?process.nextTick(a.bind(this)):r.prototype.on.call(this,e,a),this},c.prototype.abort=function(){this._aborted=!0,this.emit("abort")},c.prototype.destroy=function(){},c.prototype.warn=function(e,a){var t=n(e,a,this);this.listeners("warn")?this.emit("warn",t):console.error("%s %s\npath = %s\nsyscall = %s\nfstream_type = %s\nfstream_path = %s\nfstream_unc_path = %s\nfstream_class = %s\nfstream_stack =\n%s\n",a||"UNKNOWN",t.stack,t.path,t.syscall,t.fstream_type,t.fstream_path,t.fstream_unc_path,t.fstream_class,t.fstream_stack.join("\n"))},c.prototype.info=function(e,a){this.emit("info",e,a)},c.prototype.error=function(e,a,t){var r=n(e,a,this);if(t)throw r;this.emit("error",r)}},function(e,a,t){var r=t(2),c=t(15),n=parseInt("0777",8);function i(e,a,t,f){"function"==typeof a?(t=a,a={}):a&&"object"==typeof a||(a={mode:a});var o=a.mode,d=a.fs||c;void 0===o&&(o=n&~process.umask()),f||(f=null);var s=t||function(){};e=r.resolve(e),d.mkdir(e,o,function(t){if(!t)return s(null,f=f||e);switch(t.code){case"ENOENT":i(r.dirname(e),a,function(t,r){t?s(t,r):i(e,a,s,r)});break;default:d.stat(e,function(e,a){e||!a.isDirectory()?s(t,f):s(null,f)})}})}e.exports=i.mkdirp=i.mkdirP=i,i.sync=function e(a,t,i){t&&"object"==typeof t||(t={mode:t});var f=t.mode,o=t.fs||c;void 0===f&&(f=n&~process.umask()),i||(i=null),a=r.resolve(a);try{o.mkdirSync(a,f),i=i||a}catch(c){switch(c.code){case"ENOENT":e(a,t,i=e(r.dirname(a),t,i));break;default:var d;try{d=o.statSync(a)}catch(e){throw c}if(!d.isDirectory())throw c}}return i}},function(e,a,t){"use strict";const r=t(723);e.exports={readJson:r.readFile,readJSON:r.readFile,readJsonSync:r.readFileSync,readJSONSync:r.readFileSync,writeJson:r.writeFile,writeJSON:r.writeFile,writeJsonSync:r.writeFileSync,writeJSONSync:r.writeFileSync,spaces:2}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(288).invalidWin32Path,i=parseInt("0777",8);e.exports=function e(a,t,f){t&&"object"==typeof t||(t={mode:t});let o=t.mode;const d=t.fs||r;if("win32"===process.platform&&n(a)){const e=new Error(a+" contains invalid WIN32 path characters.");throw e.code="EINVAL",e}void 0===o&&(o=i&~process.umask()),f||(f=null),a=c.resolve(a);try{d.mkdirSync(a,o),f=f||a}catch(r){switch(r.code){case"ENOENT":if(c.dirname(a)===a)throw r;e(a,t,f=e(c.dirname(a),t,f));break;default:let n;try{n=d.statSync(a)}catch(e){throw r}if(!n.isDirectory())throw r}}return f}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(288).invalidWin32Path,i=parseInt("0777",8);e.exports=function e(a,t,f,o){if("function"==typeof t?(f=t,t={}):t&&"object"==typeof t||(t={mode:t}),"win32"===process.platform&&n(a)){const e=new Error(a+" contains invalid WIN32 path characters.");return e.code="EINVAL",f(e)}let d=t.mode;const s=t.fs||r;void 0===d&&(d=i&~process.umask()),o||(o=null),f=f||function(){},a=c.resolve(a),s.mkdir(a,d,r=>{if(!r)return f(null,o=o||a);switch(r.code){case"ENOENT":if(c.dirname(a)===a)return f(r);e(c.dirname(a),t,(r,c)=>{r?f(r,c):e(a,t,f,c)});break;default:s.stat(a,(e,a)=>{e||!a.isDirectory()?f(r,o):f(null,o)})}})}},function(e,a,t){a.publicEncrypt=t(762),a.privateDecrypt=t(745),a.privateEncrypt=function(e,t){return a.publicEncrypt(e,t,!0)},a.publicDecrypt=function(e,t){return a.privateDecrypt(e,t,!0)}},function(e,a,t){t(772);var r=function(e,a){return parseInt(e.slice(2*a+2,2*a+4),16)},c=function(e){return(e.length-2)/2},n=function(e){for(var a=[],t=2,r=e.length;t<r;t+=2)a.push(parseInt(e.slice(t,t+2),16));return a},i=function(e){for(var a="0x",t=0,r=e.length;t<r;++t){var c=e[t];a+=(c<16?"0":"")+c.toString(16)}return a};e.exports={random:function(e){var a=void 0;a="undefined"!=typeof window&&window.crypto&&window.crypto.getRandomValues?window.crypto.getRandomValues(new Uint8Array(e)):t(10).randomBytes(e);for(var r="0x",c=0;c<e;++c)r+=("00"+a[c].toString(16)).slice(-2);return r},length:c,concat:function(e,a){return e.concat(a.slice(2))},flatten:function(e){return"0x"+e.reduce(function(e,a){return e+a.slice(2)},"")},slice:function(e,a,t){return"0x"+t.slice(2*e+2,2*a+2)},reverse:function(e){for(var a="0x",t=0,r=c(e);t<r;++t)a+=e.slice(2*(r-t),2*(r-t+1));return a},pad:function e(a,t){return t.length===2*a+2?t:e(a,"0x0"+t.slice(2))},padRight:function e(a,t){return t.length===2*a+2?t:e(a,t+"0")},fromAscii:function(e){for(var a="0x",t=0;t<e.length;++t)a+=("00"+e.charCodeAt(t).toString(16)).slice(-2);return a},toAscii:function(e){for(var a="",t=2;t<e.length;t+=2)a+=String.fromCharCode(parseInt(e.slice(t,t+2),16));return a},fromString:function(e){for(var a=function(e){var a=e.toString(16);return a.length<2?"0"+a:a},t="0x",r=0;r!=e.length;r++){var c=e.charCodeAt(r);if(c<128)t+=a(c);else{if(c<2048)t+=a(c>>6|192);else{if(c>55295&&c<56320){if(++r==e.length)return null;var n=e.charCodeAt(r);if(n<56320||n>57343)return null;t+=a((c=65536+((1023&c)<<10)+(1023&n))>>18|240),t+=a(c>>12&63|128)}else t+=a(c>>12|224);t+=a(c>>6&63|128)}t+=a(63&c|128)}}return t},toString:function(e){for(var a="",t=0,n=c(e);t<n;){var i=r(e,t++);if(i>127){if(i>191&&i<224){if(t>=n)return null;i=(31&i)<<6|63&r(e,t)}else if(i>223&&i<240){if(t+1>=n)return null;i=(15&i)<<12|(63&r(e,t))<<6|63&r(e,++t)}else{if(!(i>239&&i<248))return null;if(t+2>=n)return null;i=(7&i)<<18|(63&r(e,t))<<12|(63&r(e,++t))<<6|63&r(e,++t)}++t}if(i<=65535)a+=String.fromCharCode(i);else{if(!(i<=1114111))return null;i-=65536,a+=String.fromCharCode(i>>10|55296),a+=String.fromCharCode(1023&i|56320)}}return a},fromNumber:function(e){var a=e.toString(16);return a.length%2==0?"0x"+a:"0x0"+a},toNumber:function(e){return parseInt(e.slice(2),16)},fromNat:function(e){return"0x0"===e?"0x":e.length%2==0?e:"0x0"+e.slice(2)},toNat:function(e){return"0"===e[2]?"0x"+e.slice(3):e},fromArray:i,toArray:n,fromUint8Array:function(e){return i([].slice.call(e,0))},toUint8Array:function(e){return new Uint8Array(n(e))}}},function(e,a,t){var r=t(1),c=t(83),n=t(5).EventEmitter,i=t(314),f=t(805),o=t(804).Validation;const d="open";var s="setImmediate"in global?global.setImmediate.bind(global):process.nextTick.bind(process),b=0;function u(e,a,t,r,o){if(this._debug=c.BufferingLogger("websocket:connection",++b),this._debug("constructor"),this._debug.enabled&&function(e,a){if(!e._debug.enabled)return;var t=a.emit;for(var r in a.emit=function(a){e._debug("||| Socket Event  '%s'",a),t.apply(this,arguments)},a)"function"==typeof a[r]&&-1===["emit"].indexOf(r)&&function(t){var r=a[t];a[t]="on"!==t?function(){return e._debug("||| Socket method called:  %s",t),r.apply(this,arguments)}:function(){return e._debug("||| Socket method called:  %s (%s)",t,arguments[0]),r.apply(this,arguments)}}(r)}(this,e),n.call(this),this._pingListenerCount=0,this.on("newListener",function(e){"ping"===e&&this._pingListenerCount++}).on("removeListener",function(e){"ping"===e&&this._pingListenerCount--}),this.config=o,this.socket=e,this.protocol=t,this.extensions=a,this.remoteAddress=e.remoteAddress,this.closeReasonCode=-1,this.closeDescription=null,this.closeEventEmitted=!1,this.maskOutgoingPackets=r,this.maskBytes=new Buffer(4),this.frameHeader=new Buffer(10),this.bufferList=new f,this.currentFrame=new i(this.maskBytes,this.frameHeader,this.config),this.fragmentationSize=0,this.frameQueue=[],this.connected=!0,this.state=d,this.waitingForCloseResponse=!1,this.receivedEnd=!1,this.closeTimeout=this.config.closeTimeout,this.assembleFragments=this.config.assembleFragments,this.maxReceivedMessageSize=this.config.maxReceivedMessageSize,this.outputBufferFull=!1,this.inputPaused=!1,this.receivedDataHandler=this.processReceivedData.bind(this),this._closeTimerHandler=this.handleCloseTimer.bind(this),this.socket.setNoDelay(this.config.disableNagleAlgorithm),this.socket.setTimeout(0),this.config.keepalive&&!this.config.useNativeKeepalive){if("number"!=typeof this.config.keepaliveInterval)throw new Error("keepaliveInterval must be specified and numeric if keepalive is true.");if(this._keepaliveTimerHandler=this.handleKeepaliveTimer.bind(this),this.setKeepaliveTimer(),this.config.dropConnectionOnKeepaliveTimeout){if("number"!=typeof this.config.keepaliveGracePeriod)throw new Error("keepaliveGracePeriod  must be specified and numeric if dropConnectionOnKeepaliveTimeout is true.");this._gracePeriodTimerHandler=this.handleGracePeriodTimer.bind(this)}}else if(this.config.keepalive&&this.config.useNativeKeepalive){if(!("setKeepAlive"in this.socket))throw new Error("Unable to use native keepalive: unsupported by this version of Node.");this.socket.setKeepAlive(!0,this.config.keepaliveInterval)}this.socket.removeAllListeners("error")}function l(e){return!(e<1e3)&&(e>=1e3&&e<=2999?-1!==[1e3,1001,1002,1003,1007,1008,1009,1010,1011,1012,1013,1014].indexOf(e):e>=3e3&&e<=3999||(e>=4e3&&e<=4999||!(e>=5e3)&&void 0))}u.CLOSE_REASON_NORMAL=1e3,u.CLOSE_REASON_GOING_AWAY=1001,u.CLOSE_REASON_PROTOCOL_ERROR=1002,u.CLOSE_REASON_UNPROCESSABLE_INPUT=1003,u.CLOSE_REASON_RESERVED=1004,u.CLOSE_REASON_NOT_PROVIDED=1005,u.CLOSE_REASON_ABNORMAL=1006,u.CLOSE_REASON_INVALID_DATA=1007,u.CLOSE_REASON_POLICY_VIOLATION=1008,u.CLOSE_REASON_MESSAGE_TOO_BIG=1009,u.CLOSE_REASON_EXTENSION_REQUIRED=1010,u.CLOSE_REASON_INTERNAL_SERVER_ERROR=1011,u.CLOSE_REASON_TLS_HANDSHAKE_FAILED=1015,u.CLOSE_DESCRIPTIONS={1000:"Normal connection closure",1001:"Remote peer is going away",1002:"Protocol error",1003:"Unprocessable input",1004:"Reserved",1005:"Reason not provided",1006:"Abnormal closure, no further detail available",1007:"Invalid data received",1008:"Policy violation",1009:"Message too big",1010:"Extension requested by client is required",1011:"Internal Server Error",1015:"TLS Handshake Failed"},r.inherits(u,n),u.prototype._addSocketEventListeners=function(){this.socket.on("error",this.handleSocketError.bind(this)),this.socket.on("end",this.handleSocketEnd.bind(this)),this.socket.on("close",this.handleSocketClose.bind(this)),this.socket.on("drain",this.handleSocketDrain.bind(this)),this.socket.on("pause",this.handleSocketPause.bind(this)),this.socket.on("resume",this.handleSocketResume.bind(this)),this.socket.on("data",this.handleSocketData.bind(this))},u.prototype.setKeepaliveTimer=function(){this._debug("setKeepaliveTimer"),this.config.keepalive&&!this.config.useNativeKeepalive&&(this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this._keepaliveTimeoutID=setTimeout(this._keepaliveTimerHandler,this.config.keepaliveInterval))},u.prototype.clearKeepaliveTimer=function(){this._keepaliveTimeoutID&&clearTimeout(this._keepaliveTimeoutID)},u.prototype.handleKeepaliveTimer=function(){this._debug("handleKeepaliveTimer"),this._keepaliveTimeoutID=null,this.ping(),this.config.dropConnectionOnKeepaliveTimeout?this.setGracePeriodTimer():this.setKeepaliveTimer()},u.prototype.setGracePeriodTimer=function(){this._debug("setGracePeriodTimer"),this.clearGracePeriodTimer(),this._gracePeriodTimeoutID=setTimeout(this._gracePeriodTimerHandler,this.config.keepaliveGracePeriod)},u.prototype.clearGracePeriodTimer=function(){this._gracePeriodTimeoutID&&clearTimeout(this._gracePeriodTimeoutID)},u.prototype.handleGracePeriodTimer=function(){this._debug("handleGracePeriodTimer"),this._gracePeriodTimeoutID=null,this.drop(u.CLOSE_REASON_ABNORMAL,"Peer not responding.",!0)},u.prototype.handleSocketData=function(e){this._debug("handleSocketData"),this.setKeepaliveTimer(),this.bufferList.write(e),this.processReceivedData()},u.prototype.processReceivedData=function(){if(this._debug("processReceivedData"),this.connected&&!this.inputPaused){var e=this.currentFrame;if(e.addData(this.bufferList)){var a=this;if(e.protocolError)return this._debug("-- protocol error"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_PROTOCOL_ERROR,e.dropReason)});if(e.frameTooLarge)return this._debug("-- frame too large"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_MESSAGE_TOO_BIG,e.dropReason)});if(e.rsv1||e.rsv2||e.rsv3)return this._debug("-- illegal rsv flag"),void process.nextTick(function(){a.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unsupported usage of rsv bits without negotiated extension.")});this.assembleFragments||(this._debug("-- emitting frame"),process.nextTick(function(){a.emit("frame",e)})),process.nextTick(function(){a.processFrame(e)}),this.currentFrame=new i(this.maskBytes,this.frameHeader,this.config),this.bufferList.length>0&&s(this.receivedDataHandler)}else this._debug("-- insufficient data for frame")}},u.prototype.handleSocketError=function(e){this._debug("handleSocketError: %j",e),"closed"!==this.state?(this.closeReasonCode=u.CLOSE_REASON_ABNORMAL,this.closeDescription="Socket Error: "+e.syscall+" "+e.code,this.connected=!1,this.state="closed",this.fragmentationSize=0,c.eventEmitterListenerCount(this,"error")>0&&this.emit("error",e),this.socket.destroy(e),this._debug.printOutput()):this._debug("  --- Socket 'error' after 'close'")},u.prototype.handleSocketEnd=function(){this._debug("handleSocketEnd: received socket end.  state = %s",this.state),this.receivedEnd=!0,"closed"!==this.state?"peer_requested_close"!==this.state&&"ending"!==this.state&&(this._debug("  --- UNEXPECTED socket end."),this.socket.end()):this._debug("  --- Socket 'end' after 'close'")},u.prototype.handleSocketClose=function(e){this._debug("handleSocketClose: received socket close"),this.socketHadError=e,this.connected=!1,this.state="closed",-1===this.closeReasonCode&&(this.closeReasonCode=u.CLOSE_REASON_ABNORMAL,this.closeDescription="Connection dropped by remote peer."),this.clearCloseTimer(),this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this.closeEventEmitted||(this.closeEventEmitted=!0,this._debug("-- Emitting WebSocketConnection close event"),this.emit("close",this.closeReasonCode,this.closeDescription))},u.prototype.handleSocketDrain=function(){this._debug("handleSocketDrain: socket drain event"),this.outputBufferFull=!1,this.emit("drain")},u.prototype.handleSocketPause=function(){this._debug("handleSocketPause: socket pause event"),this.inputPaused=!0,this.emit("pause")},u.prototype.handleSocketResume=function(){this._debug("handleSocketResume: socket resume event"),this.inputPaused=!1,this.emit("resume"),this.processReceivedData()},u.prototype.pause=function(){this._debug("pause: pause requested"),this.socket.pause()},u.prototype.resume=function(){this._debug("resume: resume requested"),this.socket.resume()},u.prototype.close=function(e,a){if(this.connected){if(this._debug("close: Initating clean WebSocket close sequence."),"number"!=typeof e&&(e=u.CLOSE_REASON_NORMAL),!l(e))throw new Error("Close code "+e+" is not valid.");"string"!=typeof a&&(a=u.CLOSE_DESCRIPTIONS[e]),this.closeReasonCode=e,this.closeDescription=a,this.setCloseTimer(),this.sendCloseFrame(this.closeReasonCode,this.closeDescription),this.state="ending",this.connected=!1}},u.prototype.drop=function(e,a,t){this._debug("drop"),"number"!=typeof e&&(e=u.CLOSE_REASON_PROTOCOL_ERROR),"string"!=typeof a&&(a=u.CLOSE_DESCRIPTIONS[e]),this._debug("Forcefully dropping connection. skipCloseFrame: %s, code: %d, description: %s",t,e,a),this.closeReasonCode=e,this.closeDescription=a,this.frameQueue=[],this.fragmentationSize=0,t||this.sendCloseFrame(e,a),this.connected=!1,this.state="closed",this.clearCloseTimer(),this.clearKeepaliveTimer(),this.clearGracePeriodTimer(),this.closeEventEmitted||(this.closeEventEmitted=!0,this._debug("Emitting WebSocketConnection close event"),this.emit("close",this.closeReasonCode,this.closeDescription)),this._debug("Drop: destroying socket"),this.socket.destroy()},u.prototype.setCloseTimer=function(){this._debug("setCloseTimer"),this.clearCloseTimer(),this._debug("Setting close timer"),this.waitingForCloseResponse=!0,this.closeTimer=setTimeout(this._closeTimerHandler,this.closeTimeout)},u.prototype.clearCloseTimer=function(){this._debug("clearCloseTimer"),this.closeTimer&&(this._debug("Clearing close timer"),clearTimeout(this.closeTimer),this.waitingForCloseResponse=!1,this.closeTimer=null)},u.prototype.handleCloseTimer=function(){this._debug("handleCloseTimer"),this.closeTimer=null,this.waitingForCloseResponse&&(this._debug("Close response not received from client.  Forcing socket end."),this.waitingForCloseResponse=!1,this.state="closed",this.socket.end())},u.prototype.processFrame=function(e){if(this._debug("processFrame"),this._debug(" -- frame: %s",e),0!==this.frameQueue.length&&e.opcode>0&&e.opcode<8)this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Illegal frame opcode 0x"+e.opcode.toString(16)+" received in middle of fragmented message.");else switch(e.opcode){case 2:this._debug("-- Binary Frame"),this.assembleFragments&&(e.fin?(this._debug("---- Emitting 'message' event"),this.emit("message",{type:"binary",binaryData:e.binaryPayload})):(this.frameQueue.push(e),this.fragmentationSize=e.length));break;case 1:if(this._debug("-- Text Frame"),this.assembleFragments)if(e.fin){if(!o.isValidUTF8(e.binaryPayload))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this._debug("---- Emitting 'message' event"),this.emit("message",{type:"utf8",utf8Data:e.binaryPayload.toString("utf8")})}else this.frameQueue.push(e),this.fragmentationSize=e.length;break;case 0:if(this._debug("-- Continuation Frame"),this.assembleFragments){if(0===this.frameQueue.length)return void this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unexpected Continuation Frame");if(this.fragmentationSize+=e.length,this.fragmentationSize>this.maxReceivedMessageSize)return void this.drop(u.CLOSE_REASON_MESSAGE_TOO_BIG,"Maximum message size exceeded.");if(this.frameQueue.push(e),e.fin){var a=0,t=new Buffer(this.fragmentationSize),r=this.frameQueue[0].opcode;switch(this.frameQueue.forEach(function(e){e.binaryPayload.copy(t,a),a+=e.binaryPayload.length}),this.frameQueue=[],this.fragmentationSize=0,r){case 2:this.emit("message",{type:"binary",binaryData:t});break;case 1:if(!o.isValidUTF8(t))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this.emit("message",{type:"utf8",utf8Data:t.toString("utf8")});break;default:return void this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unexpected first opcode in fragmentation sequence: 0x"+r.toString(16))}}}break;case 9:if(this._debug("-- Ping Frame"),this._pingListenerCount>0){var c=!1;this.emit("ping",function(){c=!0},e.binaryPayload),c||this.pong(e.binaryPayload)}else this.pong(e.binaryPayload);break;case 10:this._debug("-- Pong Frame"),this.emit("pong",e.binaryPayload);break;case 8:if(this._debug("-- Close Frame"),this.waitingForCloseResponse)return this._debug("---- Got close response from peer.  Completing closing handshake."),this.clearCloseTimer(),this.waitingForCloseResponse=!1,this.state="closed",void this.socket.end();var n;if(this._debug("---- Closing handshake initiated by peer."),this.state="peer_requested_close",e.invalidCloseFrameLength?(this.closeReasonCode=1005,n=u.CLOSE_REASON_PROTOCOL_ERROR):-1===e.closeStatus||l(e.closeStatus)?(this.closeReasonCode=e.closeStatus,n=u.CLOSE_REASON_NORMAL):(this.closeReasonCode=e.closeStatus,n=u.CLOSE_REASON_PROTOCOL_ERROR),e.binaryPayload.length>1){if(!o.isValidUTF8(e.binaryPayload))return void this.drop(u.CLOSE_REASON_INVALID_DATA,"Invalid UTF-8 Data Received");this.closeDescription=e.binaryPayload.toString("utf8")}else this.closeDescription=u.CLOSE_DESCRIPTIONS[this.closeReasonCode];this._debug("------ Remote peer %s - code: %d - %s - close frame payload length: %d",this.remoteAddress,this.closeReasonCode,this.closeDescription,e.length),this._debug("------ responding to remote peer's close request."),this.sendCloseFrame(n,null),this.connected=!1;break;default:this._debug("-- Unrecognized Opcode %d",e.opcode),this.drop(u.CLOSE_REASON_PROTOCOL_ERROR,"Unrecognized Opcode: 0x"+e.opcode.toString(16))}},u.prototype.send=function(e,a){if(this._debug("send"),Buffer.isBuffer(e))this.sendBytes(e,a);else{if("function"!=typeof e.toString)throw new Error("Data provided must either be a Node Buffer or implement toString()");this.sendUTF(e,a)}},u.prototype.sendUTF=function(e,a){e=new Buffer(e.toString(),"utf8"),this._debug("sendUTF: %d bytes",e.length);var t=new i(this.maskBytes,this.frameHeader,this.config);t.opcode=1,t.binaryPayload=e,this.fragmentAndSend(t,a)},u.prototype.sendBytes=function(e,a){if(this._debug("sendBytes"),!Buffer.isBuffer(e))throw new Error("You must pass a Node Buffer object to WebSocketConnection.prototype.sendBytes()");var t=new i(this.maskBytes,this.frameHeader,this.config);t.opcode=2,t.binaryPayload=e,this.fragmentAndSend(t,a)},u.prototype.ping=function(e){this._debug("ping");var a=new i(this.maskBytes,this.frameHeader,this.config);a.opcode=9,a.fin=!0,e&&(Buffer.isBuffer(e)||(e=new Buffer(e.toString(),"utf8")),e.length>125&&(this._debug("WebSocket: Data for ping is longer than 125 bytes.  Truncating."),e=e.slice(0,124)),a.binaryPayload=e),this.sendFrame(a)},u.prototype.pong=function(e){this._debug("pong");var a=new i(this.maskBytes,this.frameHeader,this.config);a.opcode=10,Buffer.isBuffer(e)&&e.length>125&&(this._debug("WebSocket: Data for pong is longer than 125 bytes.  Truncating."),e=e.slice(0,124)),a.binaryPayload=e,a.fin=!0,this.sendFrame(a)},u.prototype.fragmentAndSend=function(e,a){if(this._debug("fragmentAndSend"),e.opcode>7)throw new Error("You cannot fragment control frames.");var t=this.config.fragmentationThreshold,r=e.binaryPayload.length;if(!this.config.fragmentOutgoingMessages||e.binaryPayload&&r<=t)return e.fin=!0,void this.sendFrame(e,a);for(var c=Math.ceil(r/t),n=0,f=function(e){e?"function"==typeof a&&(a(e),a=null):++n===c&&"function"==typeof a&&a()},o=1;o<=c;o++){var d=new i(this.maskBytes,this.frameHeader,this.config);d.opcode=1===o?e.opcode:0,d.fin=o===c;var s=o===c?r-t*(o-1):t,b=t*(o-1);d.binaryPayload=e.binaryPayload.slice(b,b+s),this.sendFrame(d,f)}},u.prototype.sendCloseFrame=function(e,a,t){if("number"!=typeof e&&(e=u.CLOSE_REASON_NORMAL),this._debug("sendCloseFrame state: %s, reasonCode: %d, description: %s",this.state,e,a),this.state===d||"peer_requested_close"===this.state){var r=new i(this.maskBytes,this.frameHeader,this.config);r.fin=!0,r.opcode=8,r.closeStatus=e,"string"==typeof a&&(r.binaryPayload=new Buffer(a,"utf8")),this.sendFrame(r,t),this.socket.end()}},u.prototype.sendFrame=function(e,a){this._debug("sendFrame"),e.mask=this.maskOutgoingPackets;var t=this.socket.write(e.toBuffer(),a);return this.outputBufferFull=!t,t},e.exports=u},function(e,a,t){var r=t(19);function c(e,a,t,r,c,n,i){this.tx=e,this.block=a,this.logs=t,this.gasUsed=r,this.contractAddress=c,this.status=n,this.logsBloom=i,this.transactionIndex=0;for(var f=0;f<a.transactions.length;f++){if(a.transactions[f].hash().equals(e.hash())){this.transactionIndex=f;break}}}c.prototype.toJSON=function(){return null!=this.data?data:{transactionHash:r.rpcDataHexString(this.tx.hash()),transactionIndex:r.rpcQuantityHexString(this.transactionIndex),blockHash:r.rpcDataHexString(this.block.hash()),blockNumber:r.rpcQuantityHexString(this.block.header.number),gasUsed:r.rpcQuantityHexString(this.gasUsed),cumulativeGasUsed:r.rpcQuantityHexString(this.block.header.gasUsed),contractAddress:null!=this.contractAddress?r.rpcDataHexString(this.contractAddress):null,logs:this.logs.map(function(e){return e.toJSON()}),status:r.rpcQuantityHexString(this.status),logsBloom:r.rpcDataHexString(this.logsBloom)}},e.exports=c},function(e,a,t){var r=t(19);function c(e){var a=this;Object.keys(e).forEach(function(t){a[t]=e[t]})}c.prototype.toJSON=function(){return{logIndex:r.rpcQuantityHexString(this.logIndex),transactionIndex:r.rpcQuantityHexString(this.transactionIndex),transactionHash:r.rpcDataHexString(this.transactionHash),blockHash:r.rpcDataHexString(this.block.hash()),blockNumber:r.rpcQuantityHexString(this.block.header.number),address:r.rpcDataHexString(this.address),data:r.rpcDataHexString(this.data),topics:this.topics,type:"mined"}},e.exports=c},function(e,a){var t=Math.pow(2,30)-1;function r(e,a){if("string"!=typeof e&&!Buffer.isBuffer(e))throw new TypeError(a+" must be a buffer or string")}e.exports=function(e,a,c,n){if(r(e,"Password"),r(a,"Salt"),"number"!=typeof c)throw new TypeError("Iterations not a number");if(c<0)throw new TypeError("Bad iterations");if("number"!=typeof n)throw new TypeError("Key length not a number");if(n<0||n>t||n!=n)throw new TypeError("Bad key length")}},function(e,a,t){var r=t(169),c=t(10);c.pbkdf2Sync&&-1!==c.pbkdf2Sync.toString().indexOf("keylen, digest")?(a.pbkdf2Sync=function(e,a,t,n,i){return r(e,a,t,n),i=i||"sha1",c.pbkdf2Sync(e,a,t,n,i)},a.pbkdf2=function(e,a,t,n,i,f){if(r(e,a,t,n),"function"==typeof i&&(f=i,i="sha1"),"function"!=typeof f)throw new Error("No callback provided to pbkdf2");return c.pbkdf2(e,a,t,n,i,f)}):(a.pbkdf2Sync=t(329),a.pbkdf2=t(851))},function(e,a,t){var r=t(1).inherits,c=t(19),n=t(330);function i(e,a){Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.results={},this.hashes=[],this.combine(e,a)}r(i,Error),i.prototype.combine=function(e,a){if(e instanceof i)for(var t=e,r=Object.keys(t.results),f=0;f<r.length;f++){var o=r[f];this.results[o]=t.results[o],Array.prototype.push.apply(this.hashes,t.hashes)}else{var d=a.results;for(f=0;f<e.length;f++){var s=e[f],b=d[f];if(1!=b.vm.exception){var u=c.hex(s.hash());this.hashes.push(u);var l=void 0,p=b.vm.return;p&&"08c379a0"===p.slice(0,4).toString("hex")&&(l=n.rawDecode(["string"],p.slice(4))[0]),this.results[u]={error:b.vm.exceptionError.error||b.vm.exceptionError,program_counter:b.vm.runState.programCounter,return:c.hex(b.vm.return),reason:l}}}}if(1==this.hashes.length){var h="VM Exception while processing transaction: "+(m=this.results[this.hashes[0]]).error;m.reason&&(h+=" "+m.reason),this.message=h}else{for(h="Multiple VM Exceptions while processing transactions: \n\n",f=0;f<this.hashes.length;f++){var m;h+=(u=this.hashes[f])+": "+(m=this.results[u]).error,m.reason&&(h+=" "+m.reason),h+="\n"}this.message=h}},i.prototype.count=function(){return Object.keys(this.results).length},i.fromResults=function(e,a){var t=new i(e,a);return 0==t.count()?null:t},e.exports=i},function(e,a,t){const r=t(878);e.exports=r},function(e){e.exports={genesisGasLimit:{v:5e3,d:"Gas limit of the Genesis block."},genesisDifficulty:{v:17179869184,d:"Difficulty of the Genesis block."},genesisNonce:{v:"0x0000000000000042",d:"the geneis nonce"},genesisExtraData:{v:"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",d:"extra data "},genesisHash:{v:"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",d:"genesis hash"},genesisStateRoot:{v:"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",d:"the genesis state root"},minGasLimit:{v:5e3,d:"Minimum the gas limit may ever be."},gasLimitBoundDivisor:{v:1024,d:"The bound divisor of the gas limit, used in update calculations."},minimumDifficulty:{v:131072,d:"The minimum that the difficulty may ever be."},difficultyBoundDivisor:{v:2048,d:"The bound divisor of the difficulty, used in the update calculations."},durationLimit:{v:13,d:"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not."},maximumExtraDataSize:{v:32,d:"Maximum size extra data may be after Genesis."},epochDuration:{v:3e4,d:"Duration between proof-of-work epochs."},stackLimit:{v:1024,d:"Maximum size of VM stack allowed."},callCreateDepth:{v:1024,d:"Maximum depth of call/create stack."},tierStepGas:{v:[0,2,3,5,8,10,20],d:"Once per operation, for a selection of them."},expGas:{v:10,d:"Once per EXP instuction."},expByteGas:{v:50,d:"Times ceil(log256(exponent)) for the EXP instruction."},sha3Gas:{v:30,d:"Once per SHA3 operation."},sha3WordGas:{v:6,d:"Once per word of the SHA3 operation's data."},sloadGas:{v:50,d:"Once per SLOAD operation."},sstoreSetGas:{v:2e4,d:"Once per SSTORE operation if the zeroness changes from zero."},sstoreResetGas:{v:5e3,d:"Once per SSTORE operation if the zeroness does not change from zero."},sstoreRefundGas:{v:15e3,d:"Once per SSTORE operation if the zeroness changes to zero."},jumpdestGas:{v:1,d:"Refunded gas, once per SSTORE operation if the zeroness changes to zero."},logGas:{v:375,d:"Per LOG* operation."},logDataGas:{v:8,d:"Per byte in a LOG* operation's data."},logTopicGas:{v:375,d:"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas."},createGas:{v:32e3,d:"Once per CREATE operation & contract-creation transaction."},callGas:{v:40,d:"Once per CALL operation & message call transaction."},callStipend:{v:2300,d:"Free gas given at beginning of call."},callValueTransferGas:{v:9e3,d:"Paid for CALL when the value transfor is non-zero."},callNewAccountGas:{v:25e3,d:"Paid for CALL when the destination address didn't exist prior."},suicideRefundGas:{v:24e3,d:"Refunded following a suicide operation."},memoryGas:{v:3,d:"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL."},quadCoeffDiv:{v:512,d:"Divisor for the quadratic particle of the memory cost equation."},createDataGas:{v:200,d:""},txGas:{v:21e3,d:"Per transaction. NOTE: Not payable on data of calls between transactions."},txCreation:{v:32e3,d:"the cost of creating a contract via tx"},txDataZeroGas:{v:4,d:"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions."},txDataNonZeroGas:{v:68,d:"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions."},copyGas:{v:3,d:"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added."},ecrecoverGas:{v:3e3,d:""},sha256Gas:{v:60,d:""},sha256WordGas:{v:12,d:""},ripemd160Gas:{v:600,d:""},ripemd160WordGas:{v:120,d:""},identityGas:{v:15,d:""},identityWordGas:{v:3,d:""},modexpGquaddivisor:{v:20,d:"Gquaddivisor from modexp precompile for gas calculation."},ecAddGas:{v:500,d:"Gas costs for curve addition precompile."},ecMulGas:{v:4e4,d:"Gas costs for curve multiplication precompile."},ecPairingGas:{v:1e5,d:"Base gas costs for curve pairing precompile."},ecPairingWordGas:{v:8e4,d:"Gas costs regarding curve pairing precompile input length."},minerReward:{v:"3000000000000000000",d:"the amount a miner get rewarded for mining a block"},homeSteadForkNumber:{v:115e4,d:"the block that the Homestead fork started at"},homesteadRepriceForkNumber:{v:2463e3,d:"the block that the Homestead Reprice (EIP150) fork started at"},timebombPeriod:{v:1e5,d:"Exponential difficulty timebomb period"},freeBlockPeriod:{v:2}}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(1),n=t(3),i=t(893),f=t(45),o=t(886),d=n.BN,s=t(884),b=t(883),u=t(882),l=t(881),p=t(880),h=t(879),m=t(877),g=t(876);function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.opts=e,e.stateManager?this.stateManager=e.stateManager:this.stateManager=new i({trie:e.state,blockchain:e.blockchain}),this.allowUnlimitedContractSize=void 0!==e.allowUnlimitedContractSize&&e.allowUnlimitedContractSize,this.blockchain=this.stateManager.blockchain,this.trie=this.stateManager.trie,this._precompiled={},this._precompiled["0000000000000000000000000000000000000001"]=s,this._precompiled["0000000000000000000000000000000000000002"]=b,this._precompiled["0000000000000000000000000000000000000003"]=u,this._precompiled["0000000000000000000000000000000000000004"]=l,this._precompiled["0000000000000000000000000000000000000005"]=p,this._precompiled["0000000000000000000000000000000000000006"]=h,this._precompiled["0000000000000000000000000000000000000007"]=m,this._precompiled["0000000000000000000000000000000000000008"]=g,this.opts.activatePrecompiles)for(var a=1;a<=7;a++)this.trie.put(new d(a).toArrayLike(r,"be",20),(new f).serialize());o.call(this)}e.exports=v,v.deps={ethUtil:n,Account:t(45),Trie:t(44),rlp:t(3).rlp},c.inherits(v,o),v.prototype.runCode=t(875),v.prototype.runJIT=t(869),v.prototype.runBlock=t(867),v.prototype.runTx=t(866),v.prototype.runCall=t(865),v.prototype.runBlockchain=t(864),v.prototype.copy=function(){return new v({stateManager:this.stateManager.copy()})},v.prototype.loadCompiled=function(e,a,t){this.trie.db.put(e,a,t)},v.prototype.populateCache=function(e,a){this.stateManager.warmCache(e,a)}},function(e,a,t){e.exports=f;var r=Object.keys||function(e){var a=[];for(var t in e)a.push(t);return a},c=t(17);c.inherits=t(0);var n=t(336),i=t(335);function f(e){if(!(this instanceof f))return new f(e);n.call(this,e),i.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",o)}function o(){this.allowHalfOpen||this._writableState.ended||process.nextTick(this.end.bind(this))}c.inherits(f,n),function(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}(r(i.prototype),function(e){f.prototype[e]||(f.prototype[e]=i.prototype[e])})},function(e,a,t){const r=t(52),c=t(3);function n(e,a,t){if(Array.isArray(e))this.parseNode(e);else if(this.type=e,"branch"===e){var r=a;this.raw=Array.apply(null,Array(17)),r&&r.forEach(function(e){this.set.apply(this,e)})}else this.raw=Array(2),this.setValue(t),this.setKey(a)}function i(e,a){return e.length%2?e.unshift(1):(e.unshift(0),e.unshift(0)),a&&(e[0]+=2),e}function f(e){return e=e[0]%2?e.slice(1):e.slice(2)}function o(e){return e[0]>1}function d(e){for(var a=new Buffer(e),t=[],r=0;r<a.length;r++){var c=2*r;t[c]=a[r]>>4,t[++c]=a[r]%16}return t}function s(e){for(var a=new Buffer(e.length/2),t=0;t<a.length;t++){var r=2*t;a[t]=(e[r]<<4)+e[++r]}return a}function b(e){return 17===e.length?"branch":2===e.length?o(d(e[0]))?"leaf":"extention":void 0}e.exports=n,n.isRawNode=function(e){return Array.isArray(e)&&!Buffer.isBuffer(e)},n.addHexPrefix=i,n.removeHexPrefix=f,n.isTerminator=o,n.stringToNibbles=d,n.nibblesToBuffer=s,n.getNodeType=b,Object.defineProperty(n.prototype,"value",{get:function(){return this.getValue()},set:function(e){this.setValue(e)}}),Object.defineProperty(n.prototype,"key",{get:function(){return this.getKey()},set:function(e){this.setKey(e)}}),n.prototype.parseNode=function(e){this.raw=e,this.type=b(e)},n.prototype.setValue=function(e,a){"branch"!==this.type?this.raw[1]=e:(1===arguments.length&&(a=e,e=16),this.raw[e]=a)},n.prototype.getValue=function(e){if("branch"!==this.type)return this.raw[1];0===arguments.length&&(e=16);var a=this.raw[e];return null!==a&&void 0!==a&&0!==a.length?a:void 0},n.prototype.setKey=function(e){"branch"!==this.type&&(e=i(e=Buffer.isBuffer(e)?d(e):e.slice(0),"leaf"===this.type),this.raw[0]=s(e))},n.prototype.getKey=function(){if("branch"!==this.type){var e=this.raw[0];return e=f(d(e))}},n.prototype.serialize=function(){return r.encode(this.raw)},n.prototype.hash=function(){return c.sha3(this.serialize())},n.prototype.toString=function(){var e=this.type;return e+=": [",this.raw.forEach(function(a){Buffer.isBuffer(a)?e+=a.toString("hex")+", ":e+=a?"object, ":"empty, "}),e=e.slice(0,-2),e+="]"},n.prototype.getChildren=function(){var e=[];switch(this.type){case"leaf":break;case"extention":e.push([this.key,this.getValue()]);break;case"branch":for(var a=0;a<16;a++){var t=this.getValue(a);t&&e.push([[a],t])}}return e}},function(e,a,t){var r;
/*!
 * async
 * https://github.com/caolan/async
 *
 * Copyright 2010-2014 Caolan McMahon
 * Released under the MIT license
 */
/*!
 * async
 * https://github.com/caolan/async
 *
 * Copyright 2010-2014 Caolan McMahon
 * Released under the MIT license
 */
!function(){var t,c={};function n(){}function i(e){return e}function f(e){return!!e}function o(e){return!e}var d="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this;function s(e){return function(){if(null===e)throw new Error("Callback was already called.");e.apply(this,arguments),e=null}}function b(e){return function(){null!==e&&(e.apply(this,arguments),e=null)}}null!=d&&(t=d.async),c.noConflict=function(){return d.async=t,c};var u=Object.prototype.toString,l=Array.isArray||function(e){return"[object Array]"===u.call(e)};function p(e){return l(e)||"number"==typeof e.length&&e.length>=0&&e.length%1==0}function h(e,a){for(var t=-1,r=e.length;++t<r;)a(e[t],t,e)}function m(e,a){for(var t=-1,r=e.length,c=Array(r);++t<r;)c[t]=a(e[t],t,e);return c}function g(e){return m(Array(e),function(e,a){return a})}function v(e,a){for(var t=0;t<e.length;t++)if(e[t]===a)return t;return-1}var y=Object.keys||function(e){var a=[];for(var t in e)e.hasOwnProperty(t)&&a.push(t);return a};function _(e){var a,t,r=-1;return p(e)?(a=e.length,function(){return++r<a?r:null}):(t=y(e),a=t.length,function(){return++r<a?t[r]:null})}function w(e,a){return a=null==a?e.length-1:+a,function(){for(var t=Math.max(arguments.length-a,0),r=Array(t),c=0;c<t;c++)r[c]=arguments[c+a];switch(a){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r)}}}function A(e){return function(a,t,r){return e(a,r)}}var k="function"==typeof setImmediate&&setImmediate,x=k?function(e){k(e)}:function(e){setTimeout(e,0)};function E(e){return function(a,t,r){r=b(r||n);var c=_(a=a||[]);if(e<=0)return r(null);var i=!1,f=0,o=!1;!function n(){if(i&&f<=0)return r(null);for(;f<e&&!o;){var d=c();if(null===d)return i=!0,void(f<=0&&r(null));f+=1,t(a[d],d,s(function(e){f-=1,e?(r(e),o=!0):n()}))}}()}}function S(e){return function(a,t,r){return e(c.eachOf,a,t,r)}}function T(e){return function(a,t,r,c){return e(E(t),a,r,c)}}function j(e){return function(a,t,r){return e(c.eachOfSeries,a,t,r)}}function C(e,a,t,r){r=b(r||n);var c=p(a=a||[])?[]:{};e(a,function(e,a,r){t(e,function(e,t){c[a]=t,r(e)})},function(e){r(e,c)})}function R(e,a,t,r){var c=[];e(a,function(e,a,r){t(e,function(t){t&&c.push({index:a,value:e}),r()})},function(){r(m(c.sort(function(e,a){return e.index-a.index}),function(e){return e.value}))})}function O(e,a,t,r){R(e,a,function(e,a){t(e,function(e){a(!e)})},r)}function B(e,a,t){return function(r,c,n,i){function f(){i&&i(t(!1,void 0))}function o(e,r,c){if(!i)return c();n(e,function(r){i&&a(r)&&(i(t(!0,e)),i=n=!1),c()})}arguments.length>3?e(r,c,o,f):(i=n,n=c,e(r,o,f))}}function M(e,a){return a}function N(e,a,t){t=t||n;var r=p(a)?[]:{};e(a,function(e,a,t){e(w(function(e,c){c.length<=1&&(c=c[0]),r[a]=c,t(e)}))},function(e){t(e,r)})}function I(e,a,t,r){var c=[];e(a,function(e,a,r){t(e,function(e,a){c=c.concat(a||[]),r(e)})},function(e){r(e,c)})}function P(e,a,t){if(null==a)a=1;else if(0===a)throw new Error("Concurrency must not be zero");function r(e,a,t,r){if(null!=r&&"function"!=typeof r)throw new Error("task callback must be a function");if(e.started=!0,l(a)||(a=[a]),0===a.length&&e.idle())return c.setImmediate(function(){e.drain()});h(a,function(a){var c={data:a,callback:r||n};t?e.tasks.unshift(c):e.tasks.push(c),e.tasks.length===e.concurrency&&e.saturated()}),c.setImmediate(e.process)}function i(e,a){return function(){f-=1;var t=!1,r=arguments;h(a,function(e){h(o,function(a,r){a!==e||t||(o.splice(r,1),t=!0)}),e.callback.apply(e,r)}),e.tasks.length+f===0&&e.drain(),e.process()}}var f=0,o=[],d={tasks:[],concurrency:a,payload:t,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(e,a){r(d,e,!1,a)},kill:function(){d.drain=n,d.tasks=[]},unshift:function(e,a){r(d,e,!0,a)},process:function(){for(;!d.paused&&f<d.concurrency&&d.tasks.length;){var a=d.payload?d.tasks.splice(0,d.payload):d.tasks.splice(0,d.tasks.length),t=m(a,function(e){return e.data});0===d.tasks.length&&d.empty(),f+=1,o.push(a[0]);var r=s(i(d,a));e(t,r)}},length:function(){return d.tasks.length},running:function(){return f},workersList:function(){return o},idle:function(){return d.tasks.length+f===0},pause:function(){d.paused=!0},resume:function(){if(!1!==d.paused){d.paused=!1;for(var e=Math.min(d.concurrency,d.tasks.length),a=1;a<=e;a++)c.setImmediate(d.process)}}};return d}function F(e){return w(function(a,t){a.apply(null,t.concat([w(function(a,t){"object"==typeof console&&(a?console.error&&console.error(a):console[e]&&h(t,function(a){console[e](a)}))})]))})}function L(e){return function(a,t,r){e(g(a),t,r)}}function D(e){return w(function(a,t){var r=w(function(t){var r=this,c=t.pop();return e(a,function(e,a,c){e.apply(r,t.concat([c]))},c)});return t.length?r.apply(this,t):r})}function z(e){return w(function(a){var t=a.pop();a.push(function(){var e=arguments;r?c.setImmediate(function(){t.apply(null,e)}):t.apply(null,e)});var r=!0;e.apply(this,a),r=!1})}"object"==typeof process&&"function"==typeof process.nextTick?c.nextTick=process.nextTick:c.nextTick=x,c.setImmediate=k?x:c.nextTick,c.forEach=c.each=function(e,a,t){return c.eachOf(e,A(a),t)},c.forEachSeries=c.eachSeries=function(e,a,t){return c.eachOfSeries(e,A(a),t)},c.forEachLimit=c.eachLimit=function(e,a,t,r){return E(a)(e,A(t),r)},c.forEachOf=c.eachOf=function(e,a,t){t=b(t||n);for(var r,c=_(e=e||[]),i=0;null!=(r=c());)i+=1,a(e[r],r,s(f));function f(e){i--,e?t(e):null===r&&i<=0&&t(null)}0===i&&t(null)},c.forEachOfSeries=c.eachOfSeries=function(e,a,t){t=b(t||n);var r=_(e=e||[]),i=r();!function n(){var f=!0;if(null===i)return t(null);a(e[i],i,s(function(e){if(e)t(e);else{if(null===(i=r()))return t(null);f?c.setImmediate(n):n()}})),f=!1}()},c.forEachOfLimit=c.eachOfLimit=function(e,a,t,r){E(a)(e,t,r)},c.map=S(C),c.mapSeries=j(C),c.mapLimit=T(C),c.inject=c.foldl=c.reduce=function(e,a,t,r){c.eachOfSeries(e,function(e,r,c){t(a,e,function(e,t){a=t,c(e)})},function(e){r(e,a)})},c.foldr=c.reduceRight=function(e,a,t,r){var n=m(e,i).reverse();c.reduce(n,a,t,r)},c.transform=function(e,a,t,r){3===arguments.length&&(r=t,t=a,a=l(e)?[]:{}),c.eachOf(e,function(e,r,c){t(a,e,r,c)},function(e){r(e,a)})},c.select=c.filter=S(R),c.selectLimit=c.filterLimit=T(R),c.selectSeries=c.filterSeries=j(R),c.reject=S(O),c.rejectLimit=T(O),c.rejectSeries=j(O),c.any=c.some=B(c.eachOf,f,i),c.someLimit=B(c.eachOfLimit,f,i),c.all=c.every=B(c.eachOf,o,o),c.everyLimit=B(c.eachOfLimit,o,o),c.detect=B(c.eachOf,i,M),c.detectSeries=B(c.eachOfSeries,i,M),c.detectLimit=B(c.eachOfLimit,i,M),c.sortBy=function(e,a,t){function r(e,a){var t=e.criteria,r=a.criteria;return t<r?-1:t>r?1:0}c.map(e,function(e,t){a(e,function(a,r){a?t(a):t(null,{value:e,criteria:r})})},function(e,a){if(e)return t(e);t(null,m(a.sort(r),function(e){return e.value}))})},c.auto=function(e,a,t){"function"==typeof arguments[1]&&(t=a,a=null),t=b(t||n);var r=y(e),i=r.length;if(!i)return t(null);a||(a=i);var f={},o=0,d=!1,s=[];function u(e){s.unshift(e)}function p(){i--,h(s.slice(0),function(e){e()})}u(function(){i||t(null,f)}),h(r,function(r){if(!d){for(var n,i=l(e[r])?e[r]:[e[r]],b=w(function(e,a){if(o--,a.length<=1&&(a=a[0]),e){var n={};!function(e,a){h(y(e),function(t){a(e[t],t)})}(f,function(e,a){n[a]=e}),n[r]=a,d=!0,t(e,n)}else f[r]=a,c.setImmediate(p)}),m=i.slice(0,i.length-1),g=m.length;g--;){if(!(n=e[m[g]]))throw new Error("Has nonexistent dependency in "+m.join(", "));if(l(n)&&v(n,r)>=0)throw new Error("Has cyclic dependencies")}_()?(o++,i[i.length-1](b,f)):u(function e(){_()&&(o++,function(e){var a=v(s,e);a>=0&&s.splice(a,1)}(e),i[i.length-1](b,f))})}function _(){return o<a&&function(e,a,t){return h(e,function(e,r,c){t=a(t,e,r,c)}),t}(m,function(e,a){return e&&f.hasOwnProperty(a)},!0)&&!f.hasOwnProperty(r)}})},c.retry=function(e,a,t){var r=5,n=0,i=[],f={times:r,interval:n};var o=arguments.length;if(o<1||o>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");function d(e,a){function t(e,t){return function(r){e(function(e,a){r(!e||t,{err:e,result:a})},a)}}function r(e){return function(a){setTimeout(function(){a(null)},e)}}for(;f.times;){var n=!(f.times-=1);i.push(t(f.task,n)),!n&&f.interval>0&&i.push(r(f.interval))}c.series(i,function(a,t){t=t[t.length-1],(e||f.callback)(t.err,t.result)})}return o<=2&&"function"==typeof e&&(t=a,a=e),"function"!=typeof e&&function(e,a){if("number"==typeof a)e.times=parseInt(a,10)||r;else{if("object"!=typeof a)throw new Error("Unsupported argument type for 'times': "+typeof a);e.times=parseInt(a.times,10)||r,e.interval=parseInt(a.interval,10)||n}}(f,e),f.callback=t,f.task=a,f.callback?d():d},c.waterfall=function(e,a){if(a=b(a||n),!l(e)){var t=new Error("First argument to waterfall must be an array of functions");return a(t)}if(!e.length)return a();!function e(t){return w(function(r,c){if(r)a.apply(null,[r].concat(c));else{var n=t.next();n?c.push(e(n)):c.push(a),z(t).apply(null,c)}})}(c.iterator(e))()},c.parallel=function(e,a){N(c.eachOf,e,a)},c.parallelLimit=function(e,a,t){N(E(a),e,t)},c.series=function(e,a){N(c.eachOfSeries,e,a)},c.iterator=function(e){return function a(t){function r(){return e.length&&e[t].apply(null,arguments),r.next()}return r.next=function(){return t<e.length-1?a(t+1):null},r}(0)},c.apply=w(function(e,a){return w(function(t){return e.apply(null,a.concat(t))})}),c.concat=S(I),c.concatSeries=j(I),c.whilst=function(e,a,t){if(t=t||n,e()){var r=w(function(c,n){c?t(c):e.apply(this,n)?a(r):t.apply(null,[null].concat(n))});a(r)}else t(null)},c.doWhilst=function(e,a,t){var r=0;return c.whilst(function(){return++r<=1||a.apply(this,arguments)},e,t)},c.until=function(e,a,t){return c.whilst(function(){return!e.apply(this,arguments)},a,t)},c.doUntil=function(e,a,t){return c.doWhilst(e,function(){return!a.apply(this,arguments)},t)},c.during=function(e,a,t){t=t||n;var r=w(function(a,r){a?t(a):(r.push(c),e.apply(this,r))}),c=function(e,c){e?t(e):c?a(r):t(null)};e(c)},c.doDuring=function(e,a,t){var r=0;c.during(function(e){r++<1?e(null,!0):a.apply(this,arguments)},e,t)},c.queue=function(e,a){return P(function(a,t){e(a[0],t)},a,1)},c.priorityQueue=function(e,a){function t(e,a){return e.priority-a.priority}var r=c.queue(e,a);return r.push=function(e,a,i){!function(e,a,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");if(e.started=!0,l(a)||(a=[a]),0===a.length)return c.setImmediate(function(){e.drain()});h(a,function(a){var f={data:a,priority:r,callback:"function"==typeof i?i:n};e.tasks.splice(function(e,a,t){for(var r=-1,c=e.length-1;r<c;){var n=r+(c-r+1>>>1);t(a,e[n])>=0?r=n:c=n-1}return r}(e.tasks,f,t)+1,0,f),e.tasks.length===e.concurrency&&e.saturated(),c.setImmediate(e.process)})}(r,e,a,i)},delete r.unshift,r},c.cargo=function(e,a){return P(e,1,a)},c.log=F("log"),c.dir=F("dir"),c.memoize=function(e,a){var t={},r={},n=Object.prototype.hasOwnProperty;a=a||i;var f=w(function(i){var f=i.pop(),o=a.apply(null,i);n.call(t,o)?c.setImmediate(function(){f.apply(null,t[o])}):n.call(r,o)?r[o].push(f):(r[o]=[f],e.apply(null,i.concat([w(function(e){t[o]=e;var a=r[o];delete r[o];for(var c=0,n=a.length;c<n;c++)a[c].apply(null,e)})])))});return f.memo=t,f.unmemoized=e,f},c.unmemoize=function(e){return function(){return(e.unmemoized||e).apply(null,arguments)}},c.times=L(c.map),c.timesSeries=L(c.mapSeries),c.timesLimit=function(e,a,t,r){return c.mapLimit(g(e),a,t,r)},c.seq=function(){var e=arguments;return w(function(a){var t=this,r=a[a.length-1];"function"==typeof r?a.pop():r=n,c.reduce(e,a,function(e,a,r){a.apply(t,e.concat([w(function(e,a){r(e,a)})]))},function(e,a){r.apply(t,[e].concat(a))})})},c.compose=function(){return c.seq.apply(null,Array.prototype.reverse.call(arguments))},c.applyEach=D(c.eachOf),c.applyEachSeries=D(c.eachOfSeries),c.forever=function(e,a){var t=s(a||n),r=z(e);!function e(a){if(a)return t(a);r(e)}()},c.ensureAsync=z,c.constant=w(function(e){var a=[null].concat(e);return function(e){return e.apply(this,a)}}),c.wrapSync=c.asyncify=function(e){return w(function(a){var t,r=a.pop();try{t=e.apply(this,a)}catch(e){return r(e)}!function(e){var a=typeof e;return"function"===a||"object"===a&&!!e}(t)||"function"!=typeof t.then?r(null,t):t.then(function(e){r(null,e)}).catch(function(e){r(e.message?e:new Error(e))})})},"object"==typeof e&&e.exports?e.exports=c:void 0===(r=function(){return c}.apply(a,[]))||(e.exports=r)}()},function(e,a){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},function(e,a,t){var r=t(5).EventEmitter,c=t(1).inherits,n=t(1).deprecate,i=t(39),f=t(359),o=t(932),d=t(929),s=t(925),b=t(924),u=t(922),l=t(86),p=t(350),h=l.WriteError,m=l.ReadError,g=l.NotFoundError,v=l.OpenError,y=l.EncodingError,_=l.InitializationError,w=l.LevelUPError,A=p.getOptions,k=p.defaultOptions,x=p.dispatchError;function E(e,a){return"function"==typeof e?e:a}function S(e,a,t){if(!(this instanceof S))return new S(e,a,t);var c;if(r.call(this),this.setMaxListeners(1/0),"function"==typeof e?((a="object"==typeof a?a:{}).db=e,e=null):"object"==typeof e&&"function"==typeof e.db&&(a=e,e=null),"function"==typeof a&&(t=a,a={}),(!a||"function"!=typeof a.db)&&"string"!=typeof e){if(c=new _("Must provide a location for the database"),t)return process.nextTick(function(){t(c)});throw c}a=A(a),this.options=i(k,a),this._codec=new b(this.options),this._status="new",f(this,"location",e,"e"),this.open(t)}function T(e,a,t){if(!e._isOpening()&&!e.isOpen())return x(e,new m("Database is not open"),t),!0}function j(e,a,t){x(e,new h(a),t)}function C(e,a,t){x(e,new m(a),t)}function R(e){return function(a,t){u()[e](a,t||function(){})}}c(S,r),S.prototype.open=function(e){var a,t,r=this;if(this.isOpen())return e&&process.nextTick(function(){e(null,r)}),this;if(this._isOpening())return e&&this.once("open",function(){e(null,r)});if(this.emit("opening"),this._status="opening",this.db=new o(this.location),"function"!=typeof this.options.db&&"function"!=typeof u)throw new w("missing db factory, you need to set options.db");a=this.options.db||u(),(t=a(this.location)).open(this.options,function(a){if(a)return x(r,new v(a),e);r.db.setDb(t),r.db=t,r._status="open",e&&e(null,r),r.emit("open"),r.emit("ready")})},S.prototype.close=function(e){var a=this;if(this.isOpen())this._status="closing",this.db.close(function(){a._status="closed",a.emit("closed"),e&&e.apply(null,arguments)}),this.emit("closing"),this.db=new o(this.location);else{if("closed"===this._status&&e)return process.nextTick(e);"closing"===this._status&&e?this.once("closed",e):this._isOpening()&&this.once("open",function(){a.close(e)})}},S.prototype.isOpen=function(){return"open"===this._status},S.prototype._isOpening=function(){return"opening"===this._status},S.prototype.isClosed=function(){return/^clos/.test(this._status)},S.prototype.get=function(e,a,t){var r,c=this;if(!T(this,0,t=E(a,t))){if(null===e||void 0===e||"function"!=typeof t)return C(this,"get() requires key and callback arguments",t);a=p.getOptions(a),r=this._codec.encodeKey(e,a),a.asBuffer=this._codec.valueAsBuffer(a),this.db.get(r,a,function(r,n){if(r)return r=/notfound/i.test(r)||r.notFound?new g("Key not found in database ["+e+"]",r):new m(r),x(c,r,t);if(t){try{n=c._codec.decodeValue(n,a)}catch(e){return t(new y(e))}t(null,n)}})}},S.prototype.put=function(e,a,t,r){var c,n,i=this;if(r=E(t,r),null===e||void 0===e)return j(this,"put() requires a key argument",r);T(this,0,r)||(t=A(t),c=this._codec.encodeKey(e,t),n=this._codec.encodeValue(a,t),this.db.put(c,n,t,function(t){if(t)return x(i,new h(t),r);i.emit("put",e,a),r&&r()}))},S.prototype.del=function(e,a,t){var r,c=this;if(t=E(a,t),null===e||void 0===e)return j(this,"del() requires a key argument",t);T(this,0,t)||(a=A(a),r=this._codec.encodeKey(e,a),this.db.del(r,a,function(a){if(a)return x(c,new h(a),t);c.emit("del",e),t&&t()}))},S.prototype.batch=function(e,a,t){var r,c=this;return arguments.length?(t=E(a,t),Array.isArray(e)?void(T(this,0,t)||(a=A(a),r=(r=c._codec.encodeBatch(e,a)).map(function(e){return e.type||void 0===e.key||void 0===e.value||(e.type="put"),e}),this.db.batch(r,a,function(a){if(a)return x(c,new h(a),t);c.emit("batch",e),t&&t()}))):j(this,"batch() requires an array argument",t)):new s(this,this._codec)},S.prototype.approximateSize=n(function(e,a,t,r){var c,n,i=this;if(r=E(t,r),t=A(t),null===e||void 0===e||null===a||void 0===a||"function"!=typeof r)return C(this,"approximateSize() requires start, end and callback arguments",r);c=this._codec.encodeKey(e,t),n=this._codec.encodeKey(a,t),this.db.approximateSize(c,n,function(e,a){if(e)return x(i,new v(e),r);r&&r(null,a)})},"db.approximateSize() is deprecated. Use db.db.approximateSize() instead"),S.prototype.readStream=S.prototype.createReadStream=function(e){return(e=i({keys:!0,values:!0},this.options,e)).keyEncoding=e.keyEncoding,e.valueEncoding=e.valueEncoding,(e=this._codec.encodeLtgt(e)).keyAsBuffer=this._codec.keyAsBuffer(e),e.valueAsBuffer=this._codec.valueAsBuffer(e),"number"!=typeof e.limit&&(e.limit=-1),new d(this.db.iterator(e),i(e,{decoder:this._codec.createStreamDecoder(e)}))},S.prototype.keyStream=S.prototype.createKeyStream=function(e){return this.createReadStream(i(e,{keys:!0,values:!1}))},S.prototype.valueStream=S.prototype.createValueStream=function(e){return this.createReadStream(i(e,{keys:!1,values:!0}))},S.prototype.toString=function(){return"LevelUP"},e.exports=S,e.exports.errors=t(86),e.exports.destroy=n(R("destroy"),"levelup.destroy() is deprecated. Use leveldown.destroy() instead"),e.exports.repair=n(R("repair"),"levelup.repair() is deprecated. Use leveldown.repair() instead")},function(e,a,t){try{e.exports=t(!function(){var e=new Error("Cannot find module 'sha3'");throw e.code="MODULE_NOT_FOUND",e}()).SHA3Hash}catch(a){e.exports=t(936)}},function(e,a){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,a){e.exports=function(){}},function(e,a,t){var r=t(376),c=t(979),n=t(978),i="[object Null]",f="[object Undefined]",o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?f:i:o&&o in Object(e)?c(e):n(e)}},function(e,a,t){var r=t(980),c=t(372);e.exports=function(e){return null!=e&&c(e.length)&&!r(e)}},function(e,a,t){var r=a;r.utils=t(37),r.common=t(90),r.sha=t(1002),r.ripemd=t(998),r.hmac=t(997),r.sha1=r.sha.sha1,r.sha256=r.sha.sha256,r.sha224=r.sha.sha224,r.sha384=r.sha.sha384,r.sha512=r.sha.sha512,r.ripemd160=r.ripemd.ripemd160},function(e,a,t){var r=t(65),c=r.extend,n=t(1),i=t(5).EventEmitter,f=t(43),o=t(59),d=t(32),s=t(10),b=t(120),u=["(",")","<",">","@",",",";",":","\\",'"',"/","[","]","?","=","{","}"," ",String.fromCharCode(9)];function l(e){var a;(i.call(this),this.config={maxReceivedFrameSize:1048576,maxReceivedMessageSize:8388608,fragmentOutgoingMessages:!0,fragmentationThreshold:16384,webSocketVersion:13,assembleFragments:!0,disableNagleAlgorithm:!0,closeTimeout:5e3,tlsOptions:{}},e)&&(e.tlsOptions?(a=e.tlsOptions,delete e.tlsOptions):a={},c(this.config,e),c(this.config.tlsOptions,a));switch(this._req=null,this.config.webSocketVersion){case 8:case 13:break;default:throw new Error("Requested webSocketVersion is not supported. Allowed values are 8 and 13.")}}n.inherits(l,i),l.prototype.connect=function(e,a,t,n,i){var s=this;if("string"==typeof a&&(a=a.length>0?[a]:[]),a instanceof Array||(a=[]),this.protocols=a,this.origin=t,this.url="string"==typeof e?d.parse(e):e,!this.url.protocol)throw new Error("You must specify a full WebSocket URL, including protocol.");if(!this.url.host)throw new Error("You must specify a full WebSocket URL, including hostname. Relative URLs are not supported.");this.secure="wss:"===this.url.protocol,this.protocols.forEach(function(e){for(var a=0;a<e.length;a++){var t=e.charCodeAt(a),r=e.charAt(a);if(t<33||t>126||-1!==u.indexOf(r))throw new Error('Protocol list contains invalid character "'+String.fromCharCode(t)+'"')}});this.url.port||(this.url.port={"ws:":"80","wss:":"443"}[this.url.protocol]);for(var b=new Buffer(16),l=0;l<16;l++)b[l]=Math.round(255*Math.random());this.base64nonce=b.toString("base64");var p=this.url.hostname;("ws:"===this.url.protocol&&"80"!==this.url.port||"wss:"===this.url.protocol&&"443"!==this.url.port)&&(p+=":"+this.url.port);var h,m=n||{};function g(e){s._req=null,s.emit("connectFailed",e)}c(m,{Upgrade:"websocket",Connection:"Upgrade","Sec-WebSocket-Version":this.config.webSocketVersion.toString(10),"Sec-WebSocket-Key":this.base64nonce,Host:m.Host||p}),this.protocols.length>0&&(m["Sec-WebSocket-Protocol"]=this.protocols.join(", ")),this.origin&&(13===this.config.webSocketVersion?m.Origin=this.origin:8===this.config.webSocketVersion&&(m["Sec-WebSocket-Origin"]=this.origin)),h=this.url.pathname?this.url.path:this.url.path?"/"+this.url.path:"/";var v={agent:!1};if(i&&c(v,i),c(v,{hostname:this.url.hostname,port:this.url.port,method:"GET",path:h,headers:m}),this.secure)for(var y in s.config.tlsOptions)s.config.tlsOptions.hasOwnProperty(y)&&(v[y]=s.config.tlsOptions[y]);var _=this._req=(this.secure?o:f).request(v);_.on("upgrade",function(e,a,t){s._req=null,_.removeListener("error",g),s.socket=a,s.response=e,s.firstDataChunk=t,s.validateHandshake()}),_.on("error",g),_.on("response",function(e){if(s._req=null,r.eventEmitterListenerCount(s,"httpResponse")>0)s.emit("httpResponse",e,s),e.socket&&e.socket.end();else{var a=[];for(var t in e.headers)a.push(t+": "+e.headers[t]);s.failHandshake("Server responded with a non-101 status: "+e.statusCode+" "+e.statusMessage+"\nResponse Headers Follow:\n"+a.join("\n")+"\n")}}),_.end()},l.prototype.validateHandshake=function(){var e=this.response.headers;if(this.protocols.length>0){if(this.protocol=e["sec-websocket-protocol"],!this.protocol)return void this.failHandshake("Expected a Sec-WebSocket-Protocol header.");if(-1===this.protocols.indexOf(this.protocol))return void this.failHandshake("Server did not respond with a requested protocol.")}if(e.connection&&"upgrade"===e.connection.toLocaleLowerCase())if(e.upgrade&&"websocket"===e.upgrade.toLocaleLowerCase()){var a=s.createHash("sha1");a.update(this.base64nonce+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11");var t=a.digest("base64");e["sec-websocket-accept"]?e["sec-websocket-accept"]===t?this.succeedHandshake():this.failHandshake("Sec-WebSocket-Accept header from server didn't match expected value of "+t):this.failHandshake("Expected Sec-WebSocket-Accept header from server")}else this.failHandshake("Expected an Upgrade: websocket header from the server");else this.failHandshake("Expected a Connection: Upgrade header from the server")},l.prototype.failHandshake=function(e){this.socket&&this.socket.writable&&this.socket.end(),this.emit("connectFailed",new Error(e))},l.prototype.succeedHandshake=function(){var e=new b(this.socket,[],this.protocol,!0,this.config);e.webSocketVersion=this.config.webSocketVersion,e._addSocketEventListeners(),this.emit("connect",e),this.firstDataChunk.length>0&&e.handleSocketData(this.firstDataChunk),this.firstDataChunk=null},l.prototype.abort=function(){this._req&&this._req.abort()},e.exports=l},function(e,a,t){var r=t(402).BufferUtil;const c=1;function n(e,a,t){this.maskBytes=e,this.frameHeader=a,this.config=t,this.maxReceivedFrameSize=t.maxReceivedFrameSize,this.protocolError=!1,this.frameTooLarge=!1,this.invalidCloseFrameLength=!1,this.parseState=c,this.closeStatus=-1}n.prototype.addData=function(e){if(this.parseState===c&&e.length>=2){e.joinInto(this.frameHeader,0,0,2),e.advance(2);var a=this.frameHeader[0],t=this.frameHeader[1];if(this.fin=Boolean(128&a),this.rsv1=Boolean(64&a),this.rsv2=Boolean(32&a),this.rsv3=Boolean(16&a),this.mask=Boolean(128&t),this.opcode=15&a,this.length=127&t,this.opcode>=8){if(this.length>125)return this.protocolError=!0,this.dropReason="Illegal control frame longer than 125 bytes.",!0;if(!this.fin)return this.protocolError=!0,this.dropReason="Control frames must not be fragmented.",!0}126===this.length?this.parseState=2:127===this.length?this.parseState=3:this.parseState=4}if(2===this.parseState)e.length>=2&&(e.joinInto(this.frameHeader,2,0,2),e.advance(2),this.length=this.frameHeader.readUInt16BE(2),this.parseState=4);else if(3===this.parseState&&e.length>=8){e.joinInto(this.frameHeader,2,0,8),e.advance(8);var n=[this.frameHeader.readUInt32BE(2),this.frameHeader.readUInt32BE(6)];if(0!==n[0])return this.protocolError=!0,this.dropReason="Unsupported 64-bit length frame received",!0;this.length=n[1],this.parseState=4}if(4===this.parseState&&(this.mask?e.length>=4&&(e.joinInto(this.maskBytes,0,0,4),e.advance(4),this.parseState=5):this.parseState=5),5===this.parseState){if(this.length>this.maxReceivedFrameSize)return this.frameTooLarge=!0,this.dropReason="Frame size of "+this.length.toString(10)+" bytes exceeds maximum accepted frame size",!0;if(0===this.length)return this.binaryPayload=new Buffer(0),this.parseState=6,!0;if(e.length>=this.length)return this.binaryPayload=e.take(this.length),e.advance(this.length),this.mask&&r.unmask(this.binaryPayload,this.maskBytes),8===this.opcode&&(1===this.length&&(this.binaryPayload=new Buffer(0),this.invalidCloseFrameLength=!0),this.length>=2&&(this.closeStatus=this.binaryPayload.readUInt16BE(0),this.binaryPayload=this.binaryPayload.slice(2))),this.parseState=6,!0}return!1},n.prototype.throwAwayPayload=function(e){return e.length>=this.length&&(e.advance(this.length),this.parseState=6,!0)},n.prototype.toBuffer=function(e){var a,t,c,n=2,i=0,f=0;this.fin&&(i|=128),this.rsv1&&(i|=64),this.rsv2&&(i|=32),this.rsv3&&(i|=16),this.mask&&(f|=128),i|=15&this.opcode,8===this.opcode?(this.length=2,this.binaryPayload&&(this.length+=this.binaryPayload.length),(t=new Buffer(this.length)).writeUInt16BE(this.closeStatus,0),this.length>2&&this.binaryPayload.copy(t,2)):this.binaryPayload?(t=this.binaryPayload,this.length=t.length):this.length=0,this.length<=125?f|=127&this.length:this.length>125&&this.length<=65535?(f|=126,n+=2):this.length>65535&&(f|=127,n+=8);var o=new Buffer(this.length+n+(this.mask?4:0));return o[0]=i,o[1]=f,c=2,this.length>125&&this.length<=65535?(o.writeUInt16BE(this.length,c),c+=2):this.length>65535&&(o.writeUInt32BE(0,c),o.writeUInt32BE(this.length,c+4),c+=8),this.mask?(a=e?0:4294967295*Math.random()>>>0,this.maskBytes.writeUInt32BE(a,0),this.maskBytes.copy(o,c),c+=4,t&&r.mask(t,this.maskBytes,o,c,this.length)):t&&t.copy(o,c),o},n.prototype.toString=function(){return"Opcode: "+this.opcode+", fin: "+this.fin+", length: "+this.length+", hasPayload: "+Boolean(this.binaryPayload)+", masked: "+this.mask},e.exports=n},function(e,a,t){for(var r=t(10),c=t(1),n=t(32),i=t(5).EventEmitter,f=t(120),o=/,\s*/,d=/;\s*/,s=/[\r\n]/g,b=/,\s*/,u=["(",")","<",">","@",",",";",":","\\",'"',"/","[","]","?","=","{","}"," ",String.fromCharCode(9)],l=[String.fromCharCode(127)],p=0;p<31;p++)l.push(String.fromCharCode(p));var h=/([\x00-\x20\x22\x28\x29\x2c\x2f\x3a-\x3f\x40\x5b-\x5e\x7b\x7d\x7f])/,m=/[^\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]/,g=/^"[^"]*"$/,v=/[\x00-\x20\x3b]/g,y=/[;,] */,_={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",406:"Not Acceptable",407:"Proxy Authorization Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Long",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};function w(e,a,t){i.call(this),this.socket=e,this.httpRequest=a,this.resource=a.url,this.remoteAddress=e.remoteAddress,this.remoteAddresses=[this.remoteAddress],this.serverConfig=t,this._socketIsClosing=!1,this._socketCloseHandler=this._handleSocketCloseBeforeAccept.bind(this),this.socket.on("end",this._socketCloseHandler),this.socket.on("close",this._socketCloseHandler),this._resolved=!1}function A(e){process.nextTick(function(){e.drop(1006,"TCP connection lost before handshake completed.",!0)})}c.inherits(w,i),w.prototype.readHandshake=function(){var e=this,a=this.httpRequest;if(this.resourceURL=n.parse(this.resource,!0),this.host=a.headers.host,!this.host)throw new Error("Client must provide a Host header.");if(this.key=a.headers["sec-websocket-key"],!this.key)throw new Error("Client must provide a value for Sec-WebSocket-Key.");if(this.webSocketVersion=parseInt(a.headers["sec-websocket-version"],10),!this.webSocketVersion||isNaN(this.webSocketVersion))throw new Error("Client must provide a value for Sec-WebSocket-Version.");switch(this.webSocketVersion){case 8:case 13:break;default:var t=new Error("Unsupported websocket client version: "+this.webSocketVersion+"Only versions 8 and 13 are supported.");throw t.httpCode=426,t.headers={"Sec-WebSocket-Version":"13"},t}13===this.webSocketVersion?this.origin=a.headers.origin:8===this.webSocketVersion&&(this.origin=a.headers["sec-websocket-origin"]);var r=a.headers["sec-websocket-protocol"];(this.protocolFullCaseMap={},this.requestedProtocols=[],r)&&r.split(o).forEach(function(a){var t=a.toLocaleLowerCase();e.requestedProtocols.push(t),e.protocolFullCaseMap[t]=a});if(!this.serverConfig.ignoreXForwardedFor&&a.headers["x-forwarded-for"]){var c=this.remoteAddress;this.remoteAddresses=a.headers["x-forwarded-for"].split(b),this.remoteAddresses.push(c),this.remoteAddress=this.remoteAddresses[0]}var i=a.headers["sec-websocket-extensions"];this.requestedExtensions=this.parseExtensions(i);var f=a.headers.cookie;this.cookies=this.parseCookies(f)},w.prototype.parseExtensions=function(e){if(!e||0===e.length)return[];var a=e.toLocaleLowerCase().split(o);return a.forEach(function(e,a,t){var r=e.split(d),c=r[0],n=r.slice(1);n.forEach(function(e,a,t){var r=e.split("="),c={name:r[0],value:r[1]};t.splice(a,1,c)});var i={name:c,params:n};t.splice(a,1,i)}),a},w.prototype.parseCookies=function(e){if(!e||"string"!=typeof e)return[];var a=[];return e.split(y).forEach(function(e){var t=e.indexOf("=");if(-1!==t){var r=e.substr(0,t).trim(),c=e.substr(++t,e.length).trim();'"'===c[0]&&(c=c.slice(1,-1)),a.push({name:r,value:decodeURIComponent(c)})}else a.push({name:e,value:null})}),a},w.prototype.accept=function(e,a,t){var c;this._verifyResolution(),e?void 0===(c=this.protocolFullCaseMap[e.toLocaleLowerCase()])&&(c=e):c=e,this.protocolFullCaseMap=null;var n=r.createHash("sha1");n.update(this.key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11");var i="HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "+n.digest("base64")+"\r\n";if(c){for(var o=0;o<c.length;o++){var d=c.charCodeAt(o),b=c.charAt(o);if(d<33||d>126||-1!==u.indexOf(b))throw this.reject(500),new Error('Illegal character "'+String.fromCharCode(b)+'" in subprotocol.')}if(-1===this.requestedProtocols.indexOf(e))throw this.reject(500),new Error("Specified protocol was not requested by the client.");c=c.replace(s,""),i+="Sec-WebSocket-Protocol: "+c+"\r\n"}if(this.requestedProtocols=null,a&&(a=a.replace(s,""),13===this.webSocketVersion?i+="Origin: "+a+"\r\n":8===this.webSocketVersion&&(i+="Sec-WebSocket-Origin: "+a+"\r\n")),t){if(!Array.isArray(t))throw this.reject(500),new Error('Value supplied for "cookies" argument must be an array.');var l={};t.forEach(function(e){if(!e.name||!e.value)throw this.reject(500),new Error('Each cookie to set must at least provide a "name" and "value"');if(e.name=e.name.replace(v,""),e.value=e.value.replace(v,""),l[e.name])throw this.reject(500),new Error("You may not specify the same cookie name twice.");l[e.name]=!0;var a=e.name.match(h);if(a)throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie name");if(a=e.value.match(g)?e.value.slice(1,-1).match(m):e.value.match(m))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie value");var t=[e.name+"="+e.value];if(e.path){if(a=e.path.match(v))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie path");t.push("Path="+e.path)}if(e.domain){if("string"!=typeof e.domain)throw this.reject(500),new Error("Domain must be specified and must be a string.");if(a=e.domain.match(v))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie domain");t.push("Domain="+e.domain.toLowerCase())}if(e.expires){if(!(e.expires instanceof Date))throw this.reject(500),new Error('Value supplied for cookie "expires" must be a vaild date object');t.push("Expires="+e.expires.toGMTString())}if(e.maxage){var r=e.maxage;if("string"==typeof r&&(r=parseInt(r,10)),isNaN(r)||r<=0)throw this.reject(500),new Error('Value supplied for cookie "maxage" must be a non-zero number');r=Math.round(r),t.push("Max-Age="+r.toString(10))}if(e.secure){if("boolean"!=typeof e.secure)throw this.reject(500),new Error('Value supplied for cookie "secure" must be of type boolean');t.push("Secure")}if(e.httponly){if("boolean"!=typeof e.httponly)throw this.reject(500),new Error('Value supplied for cookie "httponly" must be of type boolean');t.push("HttpOnly")}i+="Set-Cookie: "+t.join(";")+"\r\n"}.bind(this))}this._resolved=!0,this.emit("requestResolved",this),i+="\r\n";var p=new f(this.socket,[],e,!1,this.serverConfig);p.webSocketVersion=this.webSocketVersion,p.remoteAddress=this.remoteAddress,p.remoteAddresses=this.remoteAddresses;var y=this;return this._socketIsClosing?A(p):this.socket.write(i,"ascii",function(e){e?A(p):(y._removeSocketCloseListeners(),p._addSocketEventListeners())}),this.emit("requestAccepted",p),p},w.prototype.reject=function(e,a,t){this._verifyResolution(),this._resolved=!0,this.emit("requestResolved",this),"number"!=typeof e&&(e=403);var r="HTTP/1.1 "+e+" "+_[e]+"\r\nConnection: close\r\n";if(a&&(r+="X-WebSocket-Reject-Reason: "+(a=a.replace(s,""))+"\r\n"),t)for(var c in t){var n=t[c].toString().replace(s,"");r+=c.replace(s,"")+": "+n+"\r\n"}r+="\r\n",this.socket.end(r,"ascii"),this.emit("requestRejected",this)},w.prototype._handleSocketCloseBeforeAccept=function(){this._socketIsClosing=!0,this._removeSocketCloseListeners()},w.prototype._removeSocketCloseListeners=function(){this.socket.removeListener("end",this._socketCloseHandler),this.socket.removeListener("close",this._socketCloseHandler)},w.prototype._verifyResolution=function(){if(this._resolved)throw new Error("WebSocketRequest may only be accepted or rejected one time.")},e.exports=w},function(e,a,t){var r=t(19),c=t(93);e.exports={toJSON:function(e,a){return{number:r.rpcQuantityHexString(e.header.number),hash:r.hex(e.hash()),parentHash:r.hex(e.header.parentHash),mixHash:r.hex(e.header.mixHash),nonce:r.rpcDataHexString(r.hex(e.header.nonce),16),sha3Uncles:r.hex(e.header.uncleHash),logsBloom:r.hex(e.header.bloom),transactionsRoot:r.hex(e.header.transactionsTrie),stateRoot:r.hex(e.header.stateRoot),receiptsRoot:r.hex(e.header.receiptTrie),miner:r.hex(e.header.coinbase),difficulty:r.rpcQuantityHexString(e.header.difficulty),totalDifficulty:r.rpcQuantityHexString(e.header.difficulty),extraData:r.rpcDataHexString(e.header.extraData),size:r.hex(1e3),gasLimit:r.rpcQuantityHexString(e.header.gasLimit),gasUsed:r.rpcQuantityHexString(e.header.gasUsed),timestamp:r.rpcQuantityHexString(e.header.timestamp),transactions:e.transactions.map(function(t){return a?c.toJSON(t,e):r.hex(t.hash())}),uncles:[]}}}},function(e,a,t){t(19);var r=t(191),c=t(18),n=t(87);e.exports={encode:function(e,a){var t=e.toJSON(!0);c.map(e.transactions,function(e,a){r.encode(e,a)},function(e,r){if(e)return a(e);t.transactions=r,a(null,t)})},decode:function(e,a){var t=e.transactions;e.transactions=[];var i=new n(e);c.eachSeries(t,function(e,a){r.decode(e,function(e,t){if(e)return a(e);i.transactions.push(t),a()})},function(e){if(e)return a(e);a(null,i)})}}},function(e,a,t){var r=t(19),c=t(3),n=t(117);e.exports={encode:function(e,a){var t=e.toJSON(!0);t.from=r.hex(e.from),t.hash=r.hex(e.hash()),a(null,t)},decode:function(e,a){a(null,new n({nonce:c.toBuffer(e.nonce),value:c.toBuffer(e.value),to:c.toBuffer(e.to),from:c.toBuffer(e.from),gasLimit:c.toBuffer(e.gasLimit),gasPrice:c.toBuffer(e.gasPrice),data:c.toBuffer(e.data),v:c.toBuffer(e.v),r:c.toBuffer(e.r),s:c.toBuffer(e.s)}))}}},function(e,a){function t(e){this._db=e,this._operations=[],this._written=!1}t.prototype._serializeKey=function(e){return this._db._serializeKey(e)},t.prototype._serializeValue=function(e){return this._db._serializeValue(e)},t.prototype._checkWritten=function(){if(this._written)throw new Error("write() already called on this batch")},t.prototype.put=function(e,a){this._checkWritten();var t=this._db._checkKey(e,"key",this._db._isBuffer);if(t)throw t;return e=this._serializeKey(e),a=this._serializeValue(a),"function"==typeof this._put?this._put(e,a):this._operations.push({type:"put",key:e,value:a}),this},t.prototype.del=function(e){this._checkWritten();var a=this._db._checkKey(e,"key",this._db._isBuffer);if(a)throw a;return e=this._serializeKey(e),"function"==typeof this._del?this._del(e):this._operations.push({type:"del",key:e}),this},t.prototype.clear=function(){return this._checkWritten(),this._operations=[],"function"==typeof this._clear&&this._clear(),this},t.prototype.write=function(e,a){if(this._checkWritten(),"function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("write() requires a callback argument");return"object"!=typeof e&&(e={}),this._written=!0,"function"==typeof this._write?this._write(a):"function"==typeof this._db._batch?this._db._batch(this._operations,e,a):void process.nextTick(a)},e.exports=t},function(e,a){function t(e){this.db=e,this._ended=!1,this._nexting=!1}t.prototype.next=function(e){var a=this;if("function"!=typeof e)throw new Error("next() requires a callback argument");return a._ended?e(new Error("cannot call next() after end()")):a._nexting?e(new Error("cannot call next() before previous next() has completed")):(a._nexting=!0,"function"==typeof a._next?a._next(function(){a._nexting=!1,e.apply(null,arguments)}):void process.nextTick(function(){a._nexting=!1,e()}))},t.prototype.end=function(e){if("function"!=typeof e)throw new Error("end() requires a callback argument");return this._ended?e(new Error("end() already called on iterator")):(this._ended=!0,"function"==typeof this._end?this._end(e):void process.nextTick(e))},e.exports=t},function(e,a,t){var r=t(39),c=t(193),n=t(192);function i(e){if(!arguments.length||void 0===e)throw new Error("constructor requires at least a location argument");if("string"!=typeof e)throw new Error("constructor requires a location string argument");this.location=e,this.status="new"}i.prototype.open=function(e,a){var t=this,r=this.status;if("function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("open() requires a callback argument");"object"!=typeof e&&(e={}),e.createIfMissing=0!=e.createIfMissing,e.errorIfExists=!!e.errorIfExists,"function"==typeof this._open?(this.status="opening",this._open(e,function(e){if(e)return t.status=r,a(e);t.status="open",a()})):(this.status="open",process.nextTick(a))},i.prototype.close=function(e){var a=this,t=this.status;if("function"!=typeof e)throw new Error("close() requires a callback argument");"function"==typeof this._close?(this.status="closing",this._close(function(r){if(r)return a.status=t,e(r);a.status="closed",e()})):(this.status="closed",process.nextTick(e))},i.prototype.get=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("get() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),a.asBuffer=0!=a.asBuffer,"function"==typeof this._get?this._get(e,a,t):void process.nextTick(function(){t(new Error("NotFound"))}))},i.prototype.put=function(e,a,t,r){var c;if("function"==typeof t&&(r=t),"function"!=typeof r)throw new Error("put() requires a callback argument");return(c=this._checkKey(e,"key"))?r(c):(e=this._serializeKey(e),a=this._serializeValue(a),"object"!=typeof t&&(t={}),"function"==typeof this._put?this._put(e,a,t,r):void process.nextTick(r))},i.prototype.del=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("del() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),"function"==typeof this._del?this._del(e,a,t):void process.nextTick(t))},i.prototype.batch=function(e,a,t){if(!arguments.length)return this._chainedBatch();if("function"==typeof a&&(t=a),"function"==typeof e&&(t=e),"function"!=typeof t)throw new Error("batch(array) requires a callback argument");if(!Array.isArray(e))return t(new Error("batch(array) requires an array argument"));a&&"object"==typeof a||(a={});for(var r,c,n=0,i=e.length;n<i;n++)if("object"==typeof(r=e[n])){if(c=this._checkKey(r.type,"type"))return t(c);if(c=this._checkKey(r.key,"key"))return t(c)}if("function"==typeof this._batch)return this._batch(e,a,t);process.nextTick(t)},i.prototype.approximateSize=function(e,a,t){if(null==e||null==a||"function"==typeof e||"function"==typeof a)throw new Error("approximateSize() requires valid `start`, `end` and `callback` arguments");if("function"!=typeof t)throw new Error("approximateSize() requires a callback argument");if(e=this._serializeKey(e),a=this._serializeKey(a),"function"==typeof this._approximateSize)return this._approximateSize(e,a,t);process.nextTick(function(){t(null,0)})},i.prototype._setupIteratorOptions=function(e){var a=this;return e=r(e),["start","end","gt","gte","lt","lte"].forEach(function(t){e[t]&&a._isBuffer(e[t])&&0===e[t].length&&delete e[t]}),e.reverse=!!e.reverse,e.keys=0!=e.keys,e.values=0!=e.values,e.limit="limit"in e?e.limit:-1,e.keyAsBuffer=0!=e.keyAsBuffer,e.valueAsBuffer=0!=e.valueAsBuffer,e},i.prototype.iterator=function(e){return"object"!=typeof e&&(e={}),e=this._setupIteratorOptions(e),"function"==typeof this._iterator?this._iterator(e):new c(this)},i.prototype._chainedBatch=function(){return new n(this)},i.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},i.prototype._serializeKey=function(e){return this._isBuffer(e)?e:String(e)},i.prototype._serializeValue=function(e){return null==e?"":this._isBuffer(e)||process.browser?e:String(e)},i.prototype._checkKey=function(e,a){return null===e||void 0===e?new Error(a+" cannot be `null` or `undefined`"):this._isBuffer(e)&&0===e.length?new Error(a+" cannot be an empty Buffer"):""===String(e)?new Error(a+" cannot be an empty String"):void 0},e.exports=i},function(e,a){function t(e){this._db=e,this._operations=[],this._written=!1}t.prototype._serializeKey=function(e){return this._db._serializeKey(e)},t.prototype._serializeValue=function(e){return this._db._serializeValue(e)},t.prototype._checkWritten=function(){if(this._written)throw new Error("write() already called on this batch")},t.prototype.put=function(e,a){this._checkWritten();var t=this._db._checkKey(e,"key",this._db._isBuffer);if(t)throw t;return e=this._serializeKey(e),a=this._serializeValue(a),"function"==typeof this._put?this._put(e,a):this._operations.push({type:"put",key:e,value:a}),this},t.prototype.del=function(e){this._checkWritten();var a=this._db._checkKey(e,"key",this._db._isBuffer);if(a)throw a;return e=this._serializeKey(e),"function"==typeof this._del?this._del(e):this._operations.push({type:"del",key:e}),this},t.prototype.clear=function(){return this._checkWritten(),this._operations=[],"function"==typeof this._clear&&this._clear(),this},t.prototype.write=function(e,a){if(this._checkWritten(),"function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("write() requires a callback argument");return"object"!=typeof e&&(e={}),this._written=!0,"function"==typeof this._write?this._write(a):"function"==typeof this._db._batch?this._db._batch(this._operations,e,a):void process.nextTick(a)},e.exports=t},function(e,a){function t(e){this.db=e,this._ended=!1,this._nexting=!1}t.prototype.next=function(e){var a=this;if("function"!=typeof e)throw new Error("next() requires a callback argument");return a._ended?e(new Error("cannot call next() after end()")):a._nexting?e(new Error("cannot call next() before previous next() has completed")):(a._nexting=!0,"function"==typeof a._next?a._next(function(){a._nexting=!1,e.apply(null,arguments)}):void process.nextTick(function(){a._nexting=!1,e()}))},t.prototype.end=function(e){if("function"!=typeof e)throw new Error("end() requires a callback argument");return this._ended?e(new Error("end() already called on iterator")):(this._ended=!0,"function"==typeof this._end?this._end(e):void process.nextTick(e))},e.exports=t},function(e,a,t){var r=t(39),c=t(196),n=t(195);function i(e){if(!arguments.length||void 0===e)throw new Error("constructor requires at least a location argument");if("string"!=typeof e)throw new Error("constructor requires a location string argument");this.location=e,this.status="new"}i.prototype.open=function(e,a){var t=this,r=this.status;if("function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("open() requires a callback argument");"object"!=typeof e&&(e={}),e.createIfMissing=0!=e.createIfMissing,e.errorIfExists=!!e.errorIfExists,"function"==typeof this._open?(this.status="opening",this._open(e,function(e){if(e)return t.status=r,a(e);t.status="open",a()})):(this.status="open",process.nextTick(a))},i.prototype.close=function(e){var a=this,t=this.status;if("function"!=typeof e)throw new Error("close() requires a callback argument");"function"==typeof this._close?(this.status="closing",this._close(function(r){if(r)return a.status=t,e(r);a.status="closed",e()})):(this.status="closed",process.nextTick(e))},i.prototype.get=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("get() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),a.asBuffer=0!=a.asBuffer,"function"==typeof this._get?this._get(e,a,t):void process.nextTick(function(){t(new Error("NotFound"))}))},i.prototype.put=function(e,a,t,r){var c;if("function"==typeof t&&(r=t),"function"!=typeof r)throw new Error("put() requires a callback argument");return(c=this._checkKey(e,"key"))?r(c):(e=this._serializeKey(e),a=this._serializeValue(a),"object"!=typeof t&&(t={}),"function"==typeof this._put?this._put(e,a,t,r):void process.nextTick(r))},i.prototype.del=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("del() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),"function"==typeof this._del?this._del(e,a,t):void process.nextTick(t))},i.prototype.batch=function(e,a,t){if(!arguments.length)return this._chainedBatch();if("function"==typeof a&&(t=a),"function"==typeof e&&(t=e),"function"!=typeof t)throw new Error("batch(array) requires a callback argument");if(!Array.isArray(e))return t(new Error("batch(array) requires an array argument"));a&&"object"==typeof a||(a={});for(var r,c,n=0,i=e.length;n<i;n++)if("object"==typeof(r=e[n])){if(c=this._checkKey(r.type,"type"))return t(c);if(c=this._checkKey(r.key,"key"))return t(c)}if("function"==typeof this._batch)return this._batch(e,a,t);process.nextTick(t)},i.prototype.approximateSize=function(e,a,t){if(null==e||null==a||"function"==typeof e||"function"==typeof a)throw new Error("approximateSize() requires valid `start`, `end` and `callback` arguments");if("function"!=typeof t)throw new Error("approximateSize() requires a callback argument");if(e=this._serializeKey(e),a=this._serializeKey(a),"function"==typeof this._approximateSize)return this._approximateSize(e,a,t);process.nextTick(function(){t(null,0)})},i.prototype._setupIteratorOptions=function(e){var a=this;return e=r(e),["start","end","gt","gte","lt","lte"].forEach(function(t){e[t]&&a._isBuffer(e[t])&&0===e[t].length&&delete e[t]}),e.reverse=!!e.reverse,e.keys=0!=e.keys,e.values=0!=e.values,e.limit="limit"in e?e.limit:-1,e.keyAsBuffer=0!=e.keyAsBuffer,e.valueAsBuffer=0!=e.valueAsBuffer,e},i.prototype.iterator=function(e){return"object"!=typeof e&&(e={}),e=this._setupIteratorOptions(e),"function"==typeof this._iterator?this._iterator(e):new c(this)},i.prototype._chainedBatch=function(){return new n(this)},i.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},i.prototype._serializeKey=function(e){return this._isBuffer(e)?e:String(e)},i.prototype._serializeValue=function(e){return null==e?"":this._isBuffer(e)||process.browser?e:String(e)},i.prototype._checkKey=function(e,a){return null===e||void 0===e?new Error(a+" cannot be `null` or `undefined`"):this._isBuffer(e)&&0===e.length?new Error(a+" cannot be an empty Buffer"):""===String(e)?new Error(a+" cannot be an empty String"):void 0},e.exports=i},function(e,a){e.exports=function(){for(var e={},a=0;a<arguments.length;a++){var t=arguments[a];for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}return e}},function(e,a,t){e.exports=i;var r=t(121),c=t(17);function n(e,a){this.afterTransform=function(e,t){return function(e,a,t){var r=e._transformState;r.transforming=!1;var c=r.writecb;if(!c)return e.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,null!==t&&void 0!==t&&e.push(t);c&&c(a);var n=e._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&e._read(n.highWaterMark)}(a,e,t)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(e){if(!(this instanceof i))return new i(e);r.call(this,e);this._transformState=new n(e,this);var a=this;this._readableState.needReadable=!0,this._readableState.sync=!1,this.once("finish",function(){"function"==typeof this._flush?this._flush(function(e){f(a,e)}):f(a)})}function f(e,a){if(a)return e.emit("error",a);var t=e._writableState,r=(e._readableState,e._transformState);if(t.length)throw new Error("calling transform done when ws.length != 0");if(r.transforming)throw new Error("calling transform done when still transforming");return e.push(null)}c.inherits=t(0),c.inherits(i,r),i.prototype.push=function(e,a){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,a)},i.prototype._transform=function(e,a,t){throw new Error("not implemented")},i.prototype._write=function(e,a,t){var r=this._transformState;if(r.writecb=t,r.writechunk=e,r.writeencoding=a,!r.transforming){var c=this._readableState;(r.needTransform||c.needReadable||c.length<c.highWaterMark)&&this._read(c.highWaterMark)}},i.prototype._read=function(e){var a=this._transformState;null!==a.writechunk&&a.writecb&&!a.transforming?(a.transforming=!0,this._transform(a.writechunk,a.writeencoding,a.afterTransform)):a.needTransform=!0}},function(e,a,t){e.exports=f;var r=t(24).Buffer;f.WritableState=i;var c=t(17);c.inherits=t(0);var n=t(6);function i(e,a){var t=(e=e||{}).highWaterMark;this.highWaterMark=t||0===t?t:16384,this.objectMode=!!e.objectMode,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var r=!1===e.decodeStrings;this.decodeStrings=!r,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,a){var t=e._writableState,r=t.sync,c=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,c){t?process.nextTick(function(){c(r)}):c(r);e._writableState.errorEmitted=!0,e.emit("error",r)}(e,0,r,a,c);else{var n=s(e,t);n||t.bufferProcessing||!t.buffer.length||function(e,a){a.bufferProcessing=!0;for(var t=0;t<a.buffer.length;t++){var r=a.buffer[t],c=r.chunk,n=r.encoding,i=r.callback,f=a.objectMode?1:c.length;if(o(e,a,f,c,n,i),a.writing){t++;break}}a.bufferProcessing=!1,t<a.buffer.length?a.buffer=a.buffer.slice(t):a.buffer.length=0}(e,t),r?process.nextTick(function(){d(e,t,n,c)}):d(e,t,n,c)}}(a,e)},this.writecb=null,this.writelen=0,this.buffer=[],this.errorEmitted=!1}function f(e){var a=t(121);if(!(this instanceof f||this instanceof a))return new f(e);this._writableState=new i(e,this),this.writable=!0,n.call(this)}function o(e,a,t,r,c,n){a.writelen=t,a.writecb=n,a.writing=!0,a.sync=!0,e._write(r,c,a.onwrite),a.sync=!1}function d(e,a,t,r){t||function(e,a){0===a.length&&a.needDrain&&(a.needDrain=!1,e.emit("drain"))}(e,a),r(),t&&b(e,a)}function s(e,a){return a.ending&&0===a.length&&!a.finished&&!a.writing}function b(e,a){var t=s(0,a);return t&&(a.finished=!0,e.emit("finish")),t}c.inherits(f,n),f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))},f.prototype.write=function(e,a,t){var c=this._writableState,n=!1;return"function"==typeof a&&(t=a,a=null),r.isBuffer(e)?a="buffer":a||(a=c.defaultEncoding),"function"!=typeof t&&(t=function(){}),c.ended?function(e,a,t){var r=new Error("write after end");e.emit("error",r),process.nextTick(function(){t(r)})}(this,0,t):function(e,a,t,c){var n=!0;if(!r.isBuffer(t)&&"string"!=typeof t&&null!==t&&void 0!==t&&!a.objectMode){var i=new TypeError("Invalid non-string/buffer chunk");e.emit("error",i),process.nextTick(function(){c(i)}),n=!1}return n}(this,c,e,t)&&(n=function(e,a,t,c,n){t=function(e,a,t){return e.objectMode||!1===e.decodeStrings||"string"!=typeof a||(a=new r(a,t)),a}(a,t,c),r.isBuffer(t)&&(c="buffer");var i=a.objectMode?1:t.length;a.length+=i;var f=a.length<a.highWaterMark;f||(a.needDrain=!0);a.writing?a.buffer.push(new function(e,a,t){this.chunk=e,this.encoding=a,this.callback=t}(t,c,n)):o(e,a,i,t,c,n);return f}(this,c,e,a,t)),n},f.prototype._write=function(e,a,t){t(new Error("not implemented"))},f.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),void 0!==e&&null!==e&&this.write(e,a),r.ending||r.finished||function(e,a,t){a.ending=!0,b(e,a),t&&(a.finished?process.nextTick(t):e.once("finish",t));a.ended=!0}(this,r,t)}},function(e,a,t){e.exports=s;var r=t(178),c=t(24).Buffer;s.ReadableState=d;var n=t(5).EventEmitter;n.listenerCount||(n.listenerCount=function(e,a){return e.listeners(a).length});var i,f=t(6),o=t(17);function d(e,a){var r=(e=e||{}).highWaterMark;this.highWaterMark=r||0===r?r:16384,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=!1,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.calledRead=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.objectMode=!!e.objectMode,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(i||(i=t(63).StringDecoder),this.decoder=new i(e.encoding),this.encoding=e.encoding)}function s(e){if(!(this instanceof s))return new s(e);this._readableState=new d(e,this),this.readable=!0,f.call(this)}function b(e,a,t,r,n){var i=function(e,a){var t=null;c.isBuffer(a)||"string"==typeof a||null===a||void 0===a||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk"));return t}(a,t);if(i)e.emit("error",i);else if(null===t||void 0===t)a.reading=!1,a.ended||function(e,a){if(a.decoder&&!a.ended){var t=a.decoder.end();t&&t.length&&(a.buffer.push(t),a.length+=a.objectMode?1:t.length)}a.ended=!0,a.length>0?p(e):_(e)}(e,a);else if(a.objectMode||t&&t.length>0)if(a.ended&&!n){var f=new Error("stream.push() after EOF");e.emit("error",f)}else if(a.endEmitted&&n){f=new Error("stream.unshift() after end event");e.emit("error",f)}else!a.decoder||n||r||(t=a.decoder.write(t)),a.length+=a.objectMode?1:t.length,n?a.buffer.unshift(t):(a.reading=!1,a.buffer.push(t)),a.needReadable&&p(e),function(e,a){a.readingMore||(a.readingMore=!0,process.nextTick(function(){!function(e,a){var t=a.length;for(;!a.reading&&!a.flowing&&!a.ended&&a.length<a.highWaterMark&&(e.read(0),t!==a.length);)t=a.length;a.readingMore=!1}(e,a)}))}(e,a);else n||(a.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}o.inherits=t(0),o.inherits(s,f),s.prototype.push=function(e,a){var t=this._readableState;return"string"!=typeof e||t.objectMode||(a=a||t.defaultEncoding)!==t.encoding&&(e=new c(e,a),a=""),b(this,t,e,a,!1)},s.prototype.unshift=function(e){return b(this,this._readableState,e,"",!0)},s.prototype.setEncoding=function(e){i||(i=t(63).StringDecoder),this._readableState.decoder=new i(e),this._readableState.encoding=e};var u=8388608;function l(e,a){return 0===a.length&&a.ended?0:a.objectMode?0===e?0:1:null===e||isNaN(e)?a.flowing&&a.buffer.length?a.buffer[0].length:a.length:e<=0?0:(e>a.highWaterMark&&(a.highWaterMark=function(e){if(e>=u)e=u;else{e--;for(var a=1;a<32;a<<=1)e|=e>>a;e++}return e}(e)),e>a.length?a.ended?a.length:(a.needReadable=!0,0):e)}function p(e){var a=e._readableState;a.needReadable=!1,a.emittedReadable||(a.emittedReadable=!0,a.sync?process.nextTick(function(){h(e)}):h(e))}function h(e){e.emit("readable")}function m(e){var a,t=e._readableState;function r(e,r,c){!1===e.write(a)&&t.awaitDrain++}for(t.awaitDrain=0;t.pipesCount&&null!==(a=e.read());)if(1===t.pipesCount?r(t.pipes):w(t.pipes,r),e.emit("data",a),t.awaitDrain>0)return;if(0===t.pipesCount)return t.flowing=!1,void(n.listenerCount(e,"data")>0&&v(e));t.ranOut=!0}function g(){this._readableState.ranOut&&(this._readableState.ranOut=!1,m(this))}function v(e,a){if(e._readableState.flowing)throw new Error("Cannot switch to old mode now.");var t=a||!1,r=!1;e.readable=!0,e.pipe=f.prototype.pipe,e.on=e.addListener=f.prototype.on,e.on("readable",function(){var a;for(r=!0;!t&&null!==(a=e.read());)e.emit("data",a);null===a&&(r=!1,e._readableState.needReadable=!0)}),e.pause=function(){t=!0,this.emit("pause")},e.resume=function(){t=!1,r?process.nextTick(function(){e.emit("readable")}):this.read(0),this.emit("resume")},e.emit("readable")}function y(e,a){var t,r=a.buffer,n=a.length,i=!!a.decoder,f=!!a.objectMode;if(0===r.length)return null;if(0===n)t=null;else if(f)t=r.shift();else if(!e||e>=n)t=i?r.join(""):c.concat(r,n),r.length=0;else{if(e<r[0].length)t=(b=r[0]).slice(0,e),r[0]=b.slice(e);else if(e===r[0].length)t=r.shift();else{t=i?"":new c(e);for(var o=0,d=0,s=r.length;d<s&&o<e;d++){var b=r[0],u=Math.min(e-o,b.length);i?t+=b.slice(0,u):b.copy(t,o,0,u),u<b.length?r[0]=b.slice(u):r.shift(),o+=u}}}return t}function _(e){var a=e._readableState;if(a.length>0)throw new Error("endReadable called on non-empty stream");!a.endEmitted&&a.calledRead&&(a.ended=!0,process.nextTick(function(){a.endEmitted||0!==a.length||(a.endEmitted=!0,e.readable=!1,e.emit("end"))}))}function w(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}s.prototype.read=function(e){var a=this._readableState;a.calledRead=!0;var t,r=e;if(("number"!=typeof e||e>0)&&(a.emittedReadable=!1),0===e&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return p(this),null;if(0===(e=l(e,a))&&a.ended)return t=null,a.length>0&&a.decoder&&(t=y(e,a),a.length-=t.length),0===a.length&&_(this),t;var c=a.needReadable;return a.length-e<=a.highWaterMark&&(c=!0),(a.ended||a.reading)&&(c=!1),c&&(a.reading=!0,a.sync=!0,0===a.length&&(a.needReadable=!0),this._read(a.highWaterMark),a.sync=!1),c&&!a.reading&&(e=l(r,a)),null===(t=e>0?y(e,a):null)&&(a.needReadable=!0,e=0),a.length-=e,0!==a.length||a.ended||(a.needReadable=!0),a.ended&&!a.endEmitted&&0===a.length&&_(this),t},s.prototype._read=function(e){this.emit("error",new Error("not implemented"))},s.prototype.pipe=function(e,a){var t=this,c=this._readableState;switch(c.pipesCount){case 0:c.pipes=e;break;case 1:c.pipes=[c.pipes,e];break;default:c.pipes.push(e)}c.pipesCount+=1;var i=(!a||!1!==a.end)&&e!==process.stdout&&e!==process.stderr?o:s;function f(e){e===t&&s()}function o(){e.end()}c.endEmitted?process.nextTick(i):t.once("end",i),e.on("unpipe",f);var d=function(e){return function(){var a=e._readableState;a.awaitDrain--,0===a.awaitDrain&&m(e)}}(t);function s(){e.removeListener("close",u),e.removeListener("finish",l),e.removeListener("drain",d),e.removeListener("error",b),e.removeListener("unpipe",f),t.removeListener("end",o),t.removeListener("end",s),e._writableState&&!e._writableState.needDrain||d()}function b(a){p(),e.removeListener("error",b),0===n.listenerCount(e,"error")&&e.emit("error",a)}function u(){e.removeListener("finish",l),p()}function l(){e.removeListener("close",u),p()}function p(){t.unpipe(e)}return e.on("drain",d),e._events&&e._events.error?r(e._events.error)?e._events.error.unshift(b):e._events.error=[b,e._events.error]:e.on("error",b),e.once("close",u),e.once("finish",l),e.emit("pipe",t),c.flowing||(this.on("readable",g),c.flowing=!0,process.nextTick(function(){m(t)})),e},s.prototype.unpipe=function(e){var a=this._readableState;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,this.removeListener("readable",g),a.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var t=a.pipes,r=a.pipesCount;a.pipes=null,a.pipesCount=0,this.removeListener("readable",g),a.flowing=!1;for(var c=0;c<r;c++)t[c].emit("unpipe",this);return this}return-1===(c=function(e,a){for(var t=0,r=e.length;t<r;t++)if(e[t]===a)return t;return-1}(a.pipes,e))?this:(a.pipes.splice(c,1),a.pipesCount-=1,1===a.pipesCount&&(a.pipes=a.pipes[0]),e.emit("unpipe",this),this)},s.prototype.on=function(e,a){var t=f.prototype.on.call(this,e,a);if("data"!==e||this._readableState.flowing||v(this),"readable"===e&&this.readable){var r=this._readableState;r.readableListening||(r.readableListening=!0,r.emittedReadable=!1,r.needReadable=!0,r.reading?r.length&&p(this):this.read(0))}return t},s.prototype.addListener=s.prototype.on,s.prototype.resume=function(){v(this),this.read(0),this.emit("resume")},s.prototype.pause=function(){v(this,!0),this.emit("pause")},s.prototype.wrap=function(e){var a=this._readableState,t=!1,r=this;for(var c in e.on("end",function(){if(a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&r.push(e)}r.push(null)}),e.on("data",function(c){(a.decoder&&(c=a.decoder.write(c)),!a.objectMode||null!==c&&void 0!==c)&&((a.objectMode||c&&c.length)&&(r.push(c)||(t=!0,e.pause())))}),e)"function"==typeof e[c]&&void 0===this[c]&&(this[c]=function(a){return function(){return e[a].apply(e,arguments)}}(c));return w(["error","close","destroy","pause","resume"],function(a){e.on(a,r.emit.bind(r,a))}),r._read=function(a){t&&(t=!1,e.resume())},r},s._fromList=y},function(e,a){var t=["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le"];e.exports=function(){function e(e){return void 0===e||null===e||Buffer.isBuffer(e)}var a={};return a.utf8=a["utf-8"]={encode:function(a){return e(a)?a:String(a)},decode:function(e){return e},buffer:!1,type:"utf8"},a.json={encode:JSON.stringify,decode:JSON.parse,buffer:!1,type:"json"},a.binary={encode:function(a){return e(a)?a:new Buffer(a)},decode:function(e){return e},buffer:!0,type:"binary"},t.forEach(function(t){a[t]||(a[t]={encode:function(a){return e(a)?a:new Buffer(a,t)},decode:function(e){return e.toString(t)},buffer:!0,type:t})}),a}()},function(e,a){function t(e,a){return Object.hasOwnProperty.call(e,a)}function r(e){return void 0!==e&&""!==e}function t(e,a){return Object.hasOwnProperty.call(e,a)}function c(e,a){return Object.hasOwnProperty.call(e,a)&&a}a.compare=function(e,a){if(Buffer.isBuffer(e)){for(var t=Math.min(e.length,a.length),r=0;r<t;r++){var c=e[r]-a[r];if(c)return c}return e.length-a.length}return e<a?-1:e>a?1:0};var n=a.lowerBoundKey=function(e){return c(e,"gt")||c(e,"gte")||c(e,"min")||(e.reverse?c(e,"end"):c(e,"start"))||void 0},i=a.lowerBound=function(e){var a=n(e);return a&&e[a]},f=a.lowerBoundInclusive=function(e){return!t(e,"gt")},o=a.upperBoundInclusive=function(e){return!t(e,"lt")},d=a.lowerBoundExclusive=function(e){return!f(e)},s=a.upperBoundExclusive=function(e){return!o(e)},b=a.upperBoundKey=function(e){return c(e,"lt")||c(e,"lte")||c(e,"max")||(e.reverse?c(e,"start"):c(e,"end"))||void 0},u=a.upperBound=function(e){var a=b(e);return a&&e[a]};function l(e){return e}a.toLtgt=function(e,r,c,n,i){r=r||{},c=c||l;var f=arguments.length>3,o=a.lowerBoundKey(e),d=a.upperBoundKey(e);return o?"gt"===o?r.gt=c(e.gt,!1):r.gte=c(e[o],!1):f&&(r.gte=c(n,!1)),d?"lt"===d?r.lt=c(e.lt,!0):r.lte=c(e[d],!0):f&&(r.lte=c(i,!0)),null!=e.reverse&&(r.reverse=!!e.reverse),t(r,"max")&&delete r.max,t(r,"min")&&delete r.min,t(r,"start")&&delete r.start,t(r,"end")&&delete r.end,r},a.contains=function(e,t,c){c=c||a.compare;var n=i(e);if(r(n)&&((f=c(t,n))<0||0===f&&d(e)))return!1;var f,o=u(e);if(r(o)&&((f=c(t,o))>0||0===f&&s(e)))return!1;return!0},a.filter=function(e,t){return function(r){return a.contains(e,r,t)}}},function(e,a,t){var r=t(203);function c(e){return Array.isArray(e)||Buffer.isBuffer(e)}function n(e){return"string"==typeof e||"number"==typeof e}function i(e,a){return Object.hasOwnProperty.call(e,a)}function f(e,a){if(c(e)&&c(a)){for(var t=Math.min(e.length,a.length),r=0;r<t;r++){var i=f(e[r],a[r]);if(i)return i}return e.length-a.length}if(n(e)&&n(a))return e<a?-1:e>a?1:0;throw new Error("items not comparable:"+JSON.stringify(e)+" "+JSON.stringify(a))}function o(e,a){if(e.length>a.length)return!1;var t=e.length-1,r=e[t],n=a[t];if(typeof r!=typeof n)return!1;if("string"==typeof r&&0!=n.indexOf(r))return!1;for(1==e.length&&c(r)&&t++;t--;)if(f(e[t],a[t]))return!1;return!0}(a=e.exports=function(e,a,t){return t=t||f,c(e)?o(e,a):r.contains(e,a,t)}).compare=f,a.prefix=o,a.addPrefix=function(e,a){var t=r.toLtgt(a,null,function(a){return[e,a]});return i(t,"gte")||i(t,"lte")?t:[e]}},function(e,a,t){t(449);var r=function(e,a){return parseInt(e.slice(2*a+2,2*a+4),16)},c=function(e){return(e.length-2)/2},n=function(e){for(var a=[],t=2,r=e.length;t<r;t+=2)a.push(parseInt(e.slice(t,t+2),16));return a},i=function(e){for(var a="0x",t=0,r=e.length;t<r;++t){var c=e[t];a+=(c<16?"0":"")+c.toString(16)}return a};e.exports={random:function(e){var a=void 0;a="undefined"!=typeof window&&window.crypto&&window.crypto.getRandomValues?window.crypto.getRandomValues(new Uint8Array(e)):t(10).randomBytes(e);for(var r="0x",c=0;c<e;++c)r+=("00"+a[c].toString(16)).slice(-2);return r},length:c,concat:function(e,a){return e.concat(a.slice(2))},flatten:function(e){return"0x"+e.reduce(function(e,a){return e+a.slice(2)},"")},slice:function(e,a,t){return"0x"+t.slice(2*e+2,2*a+2)},reverse:function(e){for(var a="0x",t=0,r=c(e);t<r;++t)a+=e.slice(2*(r-t),2*(r-t+1));return a},pad:function e(a,t){return t.length===2*a+2?t:e(a,"0x0"+t.slice(2))},padRight:function e(a,t){return t.length===2*a+2?t:e(a,t+"0")},fromAscii:function(e){for(var a="0x",t=0;t<e.length;++t)a+=("00"+e.charCodeAt(t).toString(16)).slice(-2);return a},toAscii:function(e){for(var a="",t=2;t<e.length;t+=2)a+=String.fromCharCode(parseInt(e.slice(t,t+2),16));return a},fromString:function(e){for(var a=function(e){var a=e.toString(16);return a.length<2?"0"+a:a},t="0x",r=0;r!=e.length;r++){var c=e.charCodeAt(r);if(c<128)t+=a(c);else{if(c<2048)t+=a(c>>6|192);else{if(c>55295&&c<56320){if(++r==e.length)return null;var n=e.charCodeAt(r);if(n<56320||n>57343)return null;t+=a((c=65536+((1023&c)<<10)+(1023&n))>>18|240),t+=a(c>>12&63|128)}else t+=a(c>>12|224);t+=a(c>>6&63|128)}t+=a(63&c|128)}}return t},toString:function(e){for(var a="",t=0,n=c(e);t<n;){var i=r(e,t++);if(i>127){if(i>191&&i<224){if(t>=n)return null;i=(31&i)<<6|63&r(e,t)}else if(i>223&&i<240){if(t+1>=n)return null;i=(15&i)<<12|(63&r(e,t))<<6|63&r(e,++t)}else{if(!(i>239&&i<248))return null;if(t+2>=n)return null;i=(7&i)<<18|(63&r(e,t))<<12|(63&r(e,++t))<<6|63&r(e,++t)}++t}if(i<=65535)a+=String.fromCharCode(i);else{if(!(i<=1114111))return null;i-=65536,a+=String.fromCharCode(i>>10|55296),a+=String.fromCharCode(1023&i|56320)}}return a},fromNumber:function(e){var a=e.toString(16);return a.length%2==0?"0x"+a:"0x0"+a},toNumber:function(e){return parseInt(e.slice(2),16)},fromNat:function(e){return"0x0"===e?"0x":e.length%2==0?e:"0x0"+e.slice(2)},toNat:function(e){return"0"===e[2]?"0x"+e.slice(3):e},fromArray:i,toArray:n,fromUint8Array:function(e){return i([].slice.call(e,0))},toUint8Array:function(e){return new Uint8Array(n(e))}}},function(e,a){e.exports=function(e,a,t){var r=a.toLowerCase();e[a]||e[r]||(e[a]=t)}},function(e,a,t){"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/var r=Object.getOwnPropertySymbols,c=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var a={},t=0;t<10;t++)a["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(a).map(function(e){return a[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,a){for(var t,i,f=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),o=1;o<arguments.length;o++){for(var d in t=Object(arguments[o]))c.call(t,d)&&(f[d]=t[d]);if(r){i=r(t);for(var s=0;s<i.length;s++)n.call(t,i[s])&&(f[i[s]]=t[i[s]])}}return f}},function(e,a,t){"use strict";var r=t(84),c=t(2),n=t(210),i=t(211),f=t(124),o=t(209),d="win32"===process.platform;function s(e){var a=c._makeLong(c.resolve(e)).split(c.sep);if(a.shift(),d){a.shift();var t="\\\\"+a.shift()+"\\"+a.shift().toLowerCase();a.unshift(t)}return""===a[a.length-1]&&a.pop(),a}function b(e){var a=!("createCwd"in(e=e||{}))||e.createCwd,t=!("createTmp"in e)||e.createTmp,c=new n,i=[];a&&i.push(process.cwd()),t&&i.push(r.tmpdir&&r.tmpdir()||r.tmpDir()),i.forEach(function(e){var a,t,r,i,f=s(e),o=c;for(a=0,t=f.length;a<t;++a)if(r=f[a],i=o.getItem(r)){if(!(i instanceof n))throw new Error("Failed to create directory: "+e);o=i}else o=o.addItem(r,new n)}),this._root=c}function u(e,a,t){var r;if("string"==typeof t||Buffer.isBuffer(t))(r=new i).setContent(t);else if("function"==typeof t)r=t();else{if("object"!=typeof t)throw new Error("Unsupported type: "+typeof t+" of item "+a);for(var c in r=new n,t)u(r,c,t[c])}r instanceof n&&0===r.list().length&&e.getItem(a)instanceof n||e.addItem(a,r)}b.prototype.getRoot=function(){return this._root},b.prototype.getItem=function(e){for(var a,t=s(e),r=s(process.cwd()),i=this._root,d="/",b=0,u=t.length;b<u;++b){for(a=t[b];i instanceof o;)d=c.resolve(c.dirname(d),i.getPath()),i=this.getItem(d);if(i){if(i instanceof n&&a!==r[b]&&!i.canExecute())throw new f("EACCES",e);i=i.getItem(a)}if(!i)break;d=c.resolve(d,a)}return i},b.create=function(e,a){var t=new b(a);for(var r in e){var c,i,f,o,d=s(r),l=t._root;for(c=0,i=d.length-1;c<i;++c)if(f=d[c],o=l.getItem(f)){if(!(o instanceof n))throw new Error("Failed to create directory: "+r);l=o}else l=l.addItem(f,new n);u(l,d[c],e[r])}return t},b.file=function(e){return e=e||{},function(){var a=new i;return e.hasOwnProperty("content")&&a.setContent(e.content),e.hasOwnProperty("mode")?a.setMode(e.mode):a.setMode(438),e.hasOwnProperty("uid")&&a.setUid(e.uid),e.hasOwnProperty("gid")&&a.setGid(e.gid),e.hasOwnProperty("atime")&&a.setATime(e.atime),e.hasOwnProperty("ctime")&&a.setCTime(e.ctime),e.hasOwnProperty("mtime")&&a.setMTime(e.mtime),e.hasOwnProperty("birthtime")&&a.setBirthtime(e.birthtime),a}},b.symlink=function(e){return e=e||{},function(){var a=new o;if(e.hasOwnProperty("mode")?a.setMode(e.mode):a.setMode(438),e.hasOwnProperty("uid")&&a.setUid(e.uid),e.hasOwnProperty("gid")&&a.setGid(e.gid),!e.hasOwnProperty("path"))throw new Error('Missing "path" property');return a.setPath(e.path),e.hasOwnProperty("atime")&&a.setATime(e.atime),e.hasOwnProperty("ctime")&&a.setCTime(e.ctime),e.hasOwnProperty("mtime")&&a.setMTime(e.mtime),e.hasOwnProperty("birthtime")&&a.setBirthtime(e.birthtime),a}},b.directory=function(e){return e=e||{},function(){var a=new n;if(e.hasOwnProperty("mode")&&a.setMode(e.mode),e.hasOwnProperty("uid")&&a.setUid(e.uid),e.hasOwnProperty("gid")&&a.setGid(e.gid),e.hasOwnProperty("items"))for(var t in e.items)u(a,t,e.items[t]);return e.hasOwnProperty("atime")&&a.setATime(e.atime),e.hasOwnProperty("ctime")&&a.setCTime(e.ctime),e.hasOwnProperty("mtime")&&a.setMTime(e.mtime),e.hasOwnProperty("birthtime")&&a.setBirthtime(e.birthtime),a}},(e.exports=b).getPathParts=s},function(e,a,t){"use strict";var r=t(1),c=t(125),n=t(58);function i(){c.call(this),this._path=void 0}r.inherits(i,c),i.prototype.setPath=function(e){this._path=e},i.prototype.getPath=function(){return this._path},i.prototype.getStats=function(){var e=this._path.length,a=c.prototype.getStats.call(this);return a.mode=this.getMode()|n.S_IFLNK,a.size=e,a.blocks=Math.ceil(e/512),a},e.exports=i},function(e,a,t){"use strict";var r=t(1),c=t(125),n=t(58);function i(){c.call(this),this._items={},this._mode=511}r.inherits(i,c),i.prototype.addItem=function(e,a){if(this._items.hasOwnProperty(e))throw new Error("Item with the same name already exists: "+e);return this._items[e]=a,++a.links,a instanceof i&&(++a.links,++this.links),this.setMTime(new Date),a},i.prototype.getItem=function(e){var a=null;return this._items.hasOwnProperty(e)&&(a=this._items[e]),a},i.prototype.removeItem=function(e){if(!this._items.hasOwnProperty(e))throw new Error("Item does not exist in directory: "+e);var a=this._items[e];return delete this._items[e],--a.links,a instanceof i&&(--a.links,--this.links),this.setMTime(new Date),a},i.prototype.list=function(){return Object.keys(this._items).sort()},i.prototype.getStats=function(){var e=c.prototype.getStats.call(this);return e.mode=this.getMode()|n.S_IFDIR,e.size=1,e.blocks=1,e},e.exports=i},function(e,a,t){"use strict";var r=t(1),c=t(125),n=t(94).from,i=(0,t(94).alloc)(0),f=t(58);function o(){c.call(this),this._content=i}r.inherits(o,c),o.prototype.getContent=function(){return this.setATime(new Date),this._content},o.prototype.setContent=function(e){if("string"==typeof e)e=n(e);else if(!Buffer.isBuffer(e))throw new Error("File content must be a string or buffer");this._content=e;var a=Date.now();this.setCTime(new Date(a)),this.setMTime(new Date(a))},o.prototype.getStats=function(){var e=this._content.length,a=c.prototype.getStats.call(this);return a.mode=this.getMode()|f.S_IFREG,a.size=e,a.blocks=Math.ceil(e/512),a},e.exports=o},function(e,a,t){"use strict";var r=t(12),c=r.maybeWrapAsError,n=t(34),i=n.TimeoutError,f=n.OperationalError,o=r.haveGetters,d=t(67);var s,b=/^(?:name|message|stack|cause)$/;function u(e){var a;if(function(e){return e instanceof Error&&d.getPrototypeOf(e)===Error.prototype}(e)){(a=new f(e)).name=e.name,a.message=e.message,a.stack=e.stack;for(var t=d.keys(e),c=0;c<t.length;++c){var n=t[c];b.test(n)||(a[n]=e[n])}return a}return r.markAsOriginatingFromRejection(e),e}function l(e){return function(a,t){if(null!==e){if(a){var r=u(c(a));e._attachExtraTrace(r),e._reject(r)}else if(arguments.length>2){for(var n=arguments.length,i=new Array(n-1),f=1;f<n;++f)i[f-1]=arguments[f];e._fulfill(i)}else e._fulfill(t);e=null}}}if(s=o?function(e){this.promise=e}:function(e){this.promise=e,this.asCallback=l(e),this.callback=this.asCallback},o){var p={get:function(){return l(this.promise)}};d.defineProperty(s.prototype,"asCallback",p),d.defineProperty(s.prototype,"callback",p)}s._nodebackForPromise=l,s.prototype.toString=function(){return"[object PromiseResolver]"},s.prototype.resolve=s.prototype.fulfill=function(e){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");this.promise._resolveCallback(e)},s.prototype.reject=function(e){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");this.promise._rejectCallback(e)},s.prototype.progress=function(e){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n    See http://goo.gl/sdkXL9\n");this.promise._progress(e)},s.prototype.cancel=function(e){this.promise.cancel(e)},s.prototype.timeout=function(){this.reject(new i("timeout"))},s.prototype.isResolved=function(){return this.promise.isResolved()},s.prototype.toJSON=function(){return this.promise.toJSON()},e.exports=s},function(e,a,t){var r=t(4),c=t(96);e.exports=function(e,a){e=r(e),a=a||c;for(var t,n,i=e.length-1,f=a.length,o=!0;o&&i>=0;)for(o=!1,t=-1,n=e.charAt(i);++t<f;)if(n===a[t]){o=!0,i--;break}return i>=0?e.substring(0,i+1):""}},function(e,a,t){var r=t(4),c=t(96);e.exports=function(e,a){e=r(e),a=a||c;for(var t,n,i=0,f=e.length,o=a.length,d=!0;d&&i<f;)for(d=!1,t=-1,n=e.charAt(i);++t<o;)if(n===a[t]){d=!0,i++;break}return i>=f?"":e.substr(i,f)}},function(e,a,t){var r=t(4),c=t(128);e.exports=function(e,a,t,n){return e=r(e),t=t||"...",a=n?a+1:a,(e=c(e)).length<=a?e:(e=e.substr(0,a-t.length),(e=n?e.substr(0,e.lastIndexOf(" ")):c(e))+t)}},function(e,a,t){var r=t(4),c=t(130),n=t(129),i=t(68),f=t(95);e.exports=function(e){return e=r(e),e=c(e),e=n(e).replace(/[\-_]/g," ").replace(/\s[a-z]/g,i).replace(/\s+/g,"").replace(/^[A-Z]/g,f)}},function(e,a,t){var r=t(132),c="0123456789abcdef".split("");e.exports=function(e){e=e&&e>0?e:6;for(var a="";e--;)a+=r(c);return a}},function(e,a,t){var r=t(133),c=t(31),n=t(55);e.exports=function(e,a){for(var t,i,f,o,d=(e||"").replace("?","").split("&"),s=-1,b={};i=d[++s];)t=i.indexOf("="),o=i.substring(0,t),f=decodeURIComponent(i.substring(t+1)),!1!==a&&(f=r(f)),n(b,o)?c(b[o])?b[o].push(f):b[o]=[b[o],f]:b[o]=f;return b}},function(e,a,t){var r=t(47);e.exports=function(e,a){return a?(r(a.split("."),function(a){e[a]||(e[a]={}),e=e[a]}),e):e}},function(e,a,t){var r=t(16),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n={};return r(e,function(e,t,r){n[t]=a(e,t,r)}),n}},function(e,a,t){var r,c=t(134);e.exports=function(e,a){return c(e,a)!==r}},function(e,a,t){var r=t(16),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n={};return r(e,function(e,t,r){a(e,t,r)&&(n[t]=e)}),n}},function(e,a,t){var r=t(152);e.exports=function(e){var a=[];return r(e,function(e,t){"function"==typeof e&&a.push(t)}),a.sort()}},function(e,a){e.exports=function(e){var a=e%100;if(a>=10&&a<=20)return"th";switch(e%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}},function(e,a,t){var r=t(70);e.exports=function(e,a){e=r(e);var t=Math.pow(10,a);return+(Math.round(e*t)/t).toFixed(a)}},function(e,a){e.exports=function(e,a,t){if(e<a||e>t)throw new RangeError("value ("+e+") must be between "+a+" and "+t);return e===t?1:(e-a)/(t-a)}},function(e,a){e.exports=function(e,a,t){return a+(t-a)*e}},function(e,a){e.exports=function(e,a,t){return e<a?a:e>t?t:e}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"String")}},function(e,a){e.exports=function(e){switch(typeof e){case"string":case"number":case"boolean":return!0}return null==e}},function(e,a){e.exports=function(e){return"number"==typeof e&&e!=e}},function(e,a,t){var r=t(55),c=t(146),n=t(71),i=t(73);function f(e,a){return r(this,a)}e.exports=function(e,a,t){return t=t||i,n(e)&&n(a)?c(e,function(e){return function(a,t){return r(this,t)&&e(a,this[t])}}(t),a)&&c(a,f,e):t(e,a)}},function(e,a,t){var r=t(142),c=t(16),n=t(76),i=t(53);function f(e,a){switch(n(e)){case"Object":return function(e,a){if(i(e)){var t={};return c(e,function(e,t){this[t]=f(e,a)},t),t}return a?a(e):e}(e,a);case"Array":return function(e,a){var t=[],r=-1,c=e.length;for(;++r<c;)t[r]=f(e[r],a);return t}(e,a);default:return r(e)}}e.exports=f},function(e,a,t){var r=t(99);e.exports=function(e,a){function t(){}return t.prototype=e,r(new t,a)}},function(e,a,t){var r=t(22);function c(e){var a=r(arguments,1);return function(){for(var t=a.concat(r(arguments)),n=t.length;n--;)t[n]===c._&&(t[n]=t.splice(-1)[0]);return e.apply(this,t)}}c._={},e.exports=c},function(e,a,t){var r=t(22);e.exports=function(e,a,t){var c=r(arguments,2);return function(){return e.apply(a,c.concat(r(arguments)))}}},function(e,a,t){var r=t(22);e.exports=function(e,a,t){var c=r(arguments,3);return setTimeout(function(){e.apply(t,c)},a)}},function(e,a,t){e.exports={awaitDelay:t(597),bind:t(236),compose:t(596),constant:t(595),debounce:t(594),func:t(593),identity:t(154),makeIterator_:t(14),partial:t(235),prop:t(153),series:t(592),throttle:t(591),timeout:t(237),times:t(590),wrap:t(589)}},function(e,a,t){var r=t(144);e.exports=function(e,a){a=null==a?0:a;var t=r(e),c=6-a-(7+e.getDay()-a)%7;return Math.floor((t+c)/7)}},function(e,a,t){var r=t(138);e.exports=function(e){var a=/\(([A-Z]{3,4})\)/.exec(e.toString());return a?a[1]:r(e)}},function(e,a,t){var r=t(142);e.exports=function(e,a){switch(e=r(e),a){case"year":e.setMonth(0);case"month":e.setDate(1);case"week":case"day":e.setHours(0);case"hour":e.setMinutes(0);case"minute":e.setSeconds(0);case"second":e.setMilliseconds(0);break;default:throw new Error('"'+a+'" is not a valid period')}if("week"===a){var t=e.getDay(),c=e.getDate();t&&(t>=c&&e.setDate(0),e.setDate(e.getDate()-e.getDay()))}return e}},function(e,a,t){var r=t(99),c=t(602),n=r({},c,{set:function(e){r(n,e)}});e.exports=n},function(e,a){function t(e){switch(e){case"ms":case"millisecond":return 1;case"s":case"second":return 1e3;case"m":case"minute":return 6e4;case"h":case"hour":return 36e5;case"d":case"day":return 864e5;case"w":case"week":return 6048e5;default:throw new Error('"'+e+'" is not a valid unit')}}e.exports=function(e,a,r){return r=r||"ms",e*t(a)/t(r)}},function(e,a,t){var r=t(143);e.exports=function(e){return r(e)?366:365}},function(e,a,t){var r=t(100),c=t(143),n=[31,28,31,30,31,30,31,31,30,31,30,31];e.exports=function(e,a){return r(e)&&(a=e.getMonth()),1===a&&c(e)?29:n[a]}},function(e,a,t){var r=t(16),c=t(145);e.exports=function(e,a,t,n){var i=arguments.length>2;if(!c(e)&&!i)throw new Error("reduce of empty object with no initial value");return r(e,function(e,r,c){i?t=a.call(n,t,e,r,c):(t=e,i=!0)}),t}},function(e,a,t){var r=t(150),c=t(101);e.exports=function(e,a){return r(c(e),a)}},function(e,a,t){var r=t(105),c=t(101);e.exports=function(e,a){return r(c(e),a)}},function(e,a,t){var r=t(71),c=t(101),n=t(106),i=t(14);e.exports=function(e,a,t){return a=i(a,t),r(e)&&null==e.length&&(e=c(e)),n(e,function(e,t,r){return a(e,t,r)})}},function(e,a,t){var r=t(102),c=t(14);e.exports=function(e,a,t){var n;return a=c(a,t),r(e,function(e,t,r){if(a(e,t,r))return n=e,!0}),n}},function(e,a,t){var r=t(38),c=t(47),n=t(16);e.exports=r(c,n)},function(e,a,t){var r=t(251),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n=[];return e?(r(e,function(e,t,r){a(e,t,r)&&(n[n.length]=e)}),n):n}},function(e,a,t){var r=t(102);e.exports=function(e,a){return r(e,function(e){return e===a})}},function(e,a){function t(e,a){return e<a?-1:e>a?1:0}e.exports=function e(a,r){return null==a?[]:a.length<2?a:(null==r&&(r=t),c=~~(a.length/2),function(e,a,t){for(var r=[];e.length&&a.length;)t(e[0],a[0])<=0?r.push(e.shift()):r.push(a.shift());return e.length&&r.push.apply(r,e),a.length&&r.push.apply(r,a),r}(e(a.slice(0,c),r),e(a.slice(c,a.length),r),r));var c}},function(e,a){e.exports=function(e,a,t){var r=arguments.length>2,c=t;if(null==e||!e.length){if(r)return t;throw new Error("reduce of empty array with no initial value")}for(var n=-1,i=e.length;++n<i;)r?c=a(c,e[n],n,e):(c=e[n],r=!0);return c}},function(e,a,t){var r=t(148),c=t(149),n=t(104);e.exports=function(e,a){return(e=null==e?c:e)+((a=null==a?n:a)-e)*r()}},function(e,a,t){var r=t(48);function c(e){return null!=e&&""!==e}e.exports=function(e,a){return a=a||"",r(e,c).join(a)}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){if(a=r(a,t),null==e)return-1;for(var c=e.length;--c>=0;)if(a(e[c],c,e))return c;return-1}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){if(a=r(a,t),null==e)return-1;for(var c=-1,n=e.length;++c<n;)if(a(e[c],c,e))return c;return-1}},function(e,a,t){var r=t(73),c=t(31),n=t(107);e.exports=function(e,a,t){return t=t||r,c(e)&&c(a)?e.length===a.length&&n(e,function(e){return function(a,t){return t in this&&e(a,this[t])}}(t),a):t(e,a)}},function(e,a,t){var r=t(74),c=t(48),n=t(108),i=t(54),f=t(22);e.exports=function(e){var a=f(arguments,1);return c(r(e),function(e){return!n(a,function(a){return i(a,e)})})}},function(e,a,t){var r=t(16),c=t(31);function n(e,a){for(var t=-1,r=e.length;++t<r;)if(i(e[t],a))return!0;return!1}function i(e,a){return e&&"object"==typeof e?c(e)&&c(a)?function(e,a){for(var t=-1,r=a.length;++t<r;)if(!n(e,a[t]))return!1;return!0}(e,a):function(e,a){var t=!0;return r(a,function(a,r){if(!i(e[r],a))return t=!1}),t}(e,a):e===a}e.exports=i},function(e,a,t){e.exports=o;var r=t(0),c=t(278);r(o,c);var n=t(41),i=t(2),f=t(111);function o(e){var a=this;if(!(a instanceof o))return new o(e);a.fields=e;var t={path:("PaxHeader"+i.join("/",e.path||"")).replace(/\\/g,"/").substr(0,100),mode:e.mode||438,uid:e.uid||0,gid:e.gid||0,size:0,mtime:e.mtime||Date.now()/1e3,type:"x",linkpath:"",ustar:"ustar\0",ustarver:"00",uname:e.uname||"",gname:e.gname||"",devmaj:e.devmaj||0,devmin:e.devmin||0};c.call(a,t),a.props=t,a._meta=!0}function d(e,a,t){if(e.charAt(0)===e.charAt(0).toLowerCase()){var r=e.split(".")[0];n.knownExtended[r]||(e="NODETAR."+e)}if(t&&e.charAt(0)!==e.charAt(0).toLowerCase())return[];"number"==typeof val&&(val=val.toString(10));var c=new Buffer(" "+e+"="+a+"\n"),i=Math.floor(Math.log(c.length)/Math.log(10))+1;c.length+i>=Math.pow(10,i)&&(i+=1);var f=i+c.length,o=new Buffer(""+f);if(o.length+c.length!==f)throw new Error("Bad length calculation\nlen="+f+"\nlenBuf="+JSON.stringify(o.toString())+"\nlenBuf.length="+o.length+"\ndigits="+i+"\ns="+JSON.stringify(c.toString())+"\ns.length="+c.length);return[o,c]}o.prototype.end=function(){var e=this;if(!e._ended){if(e._ended=!0,e._encodeFields(),0===e.props.size)return e._ready=!0,void e._stream.end();e._stream.write(f.encode(e.props)),e.body.forEach(function(a){e._stream.write(a)}),e._ready=!0,this._stream.end()}},o.prototype._encodeFields=function(){this.body=[],this.fields.prefix&&(this.fields.path=this.fields.prefix+"/"+this.fields.path,this.fields.prefix=""),function e(a,t,r,c){Object.keys(a).forEach(function(i){var f=a[i];n.numeric[i];if(t&&(i=t+"."+i),i!==a.type||!0!==f){switch(i){case"mode":case"cksum":case"ustar":case"ustarver":case"prefix":case"basename":case"dirname":case"needExtended":case"block":case"filter":return;case"rdev":if(0===f)return;break;case"nlink":case"dev":case"ino":i="SCHILY."+i}if(f&&"object"==typeof f&&!Buffer.isBuffer(f))e(f,i,r,c);else{if(null===f||void 0===f)return;r.push.apply(r,d(i,f,c))}}});return r}(this.fields,"",this.body,this.fields.noProprietary);var e=this;this.body.forEach(function(a){e.props.size+=a.length})}},function(e,a,t){e.exports=i;var r=t(6).Stream,c=t(0),n=t(11).ok;process.env.DEBUG&&console.error;function i(e,a){if(this.writable=this.readable=!0,this._opt=a||{},this._chunkSize=e||512,this._offset=0,this._buffer=[],this._bufferLength=0,this._opt.nopad)this._zeroes=!1;else{this._zeroes=new Buffer(this._chunkSize);for(var t=0;t<this._chunkSize;t++)this._zeroes[t]=0}}c(i,r),i.prototype.write=function(e){if(this._ended)throw new Error("BlockStream: write after end");if(e&&!Buffer.isBuffer(e)&&(e=new Buffer(e+"")),e.length&&(this._buffer.push(e),this._bufferLength+=e.length),this._bufferLength>=this._chunkSize){if(this._paused)return this._needDrain=!0,!1;this._emitChunk()}return!0},i.prototype.pause=function(){this._paused=!0},i.prototype.resume=function(){return this._paused=!1,this._emitChunk()},i.prototype.end=function(e){"function"==typeof e&&(cb=e,e=null),e&&this.write(e),this._ended=!0,this.flush()},i.prototype.flush=function(){this._emitChunk(!0)},i.prototype._emitChunk=function(e){if(e&&this._zeroes){var a=this._bufferLength%this._chunkSize;0!==a&&(a=this._chunkSize-a),a>0&&(this._buffer.push(this._zeroes.slice(0,a)),this._bufferLength+=a)}if(!this._emitting&&!this._paused){this._emitting=!0;for(var t=0;this._bufferLength>=this._chunkSize&&(e||!this._paused);){for(var r=0,c=this._chunkSize;c>0&&(e||!this._paused);){var i=(s=this._buffer[t]).length-this._offset;o||i<c?(o=o||new Buffer(this._chunkSize),s.copy(o,r,this._offset,this._offset+Math.min(i,c))):o=s.length===c&&0===this._offset?s:s.slice(this._offset,this._offset+c),i>c?(this._offset+=c,c=0):(c-=i,r+=i,t++,this._offset=0)}this._bufferLength-=this._chunkSize,n(o.length===this._chunkSize),this.emit("data",o),o=null}if(this._buffer=this._buffer.slice(t),this._paused)return this._needsDrain=!0,void(this._emitting=!1);var f=this._buffer.length;if(e&&!this._zeroes&&f){if(1===f)this._offset?this.emit("data",this._buffer[0].slice(this._offset)):this.emit("data",this._buffer[0]);else{c=this._bufferLength;for(var o=new Buffer(c),d=(r=0,0);d<f;d++){var s;i=(s=this._buffer[d]).length-this._offset;s.copy(o,r,this._offset),this._offset=0,r+=i,this._bufferLength-=i}this.emit("data",o)}this._buffer.length=0,this._bufferLength=0,this._offset=0}this._needDrain&&(this._needDrain=!1,this.emit("drain")),0===this._bufferLength&&this._ended&&!this._endEmitted&&(this._endEmitted=!0,this.emit("end")),this._emitting=!1}}},function(e,a,t){e.exports=o;var r=t(78),c=t(109),n=t(0),i=t(155),f=t(15);function o(e){if(!(this instanceof o))throw new Error("ProxyWriter must be called as constructor.");this.props=e,this._needDrain=!1,r.call(this,e)}n(o,r),o.prototype._stat=function(){var e=this,a=e.props,t=a.follow?"stat":"lstat";f[t](a.path,function(t,n){var i;i=t||!n?"File":c(n),a[i]=!0,a.type=e.type=i,e._old=n,e._addProxy(r(a,n))})},o.prototype._addProxy=function(e){var a=this;if(a._proxy)return a.error("proxy already set");a._proxy=e,["ready","error","close","pipe","drain","warn"].forEach(function(t){e.on(t,a.emit.bind(a,t))}),a.emit("proxy",e),a._buffer.forEach(function(a){e[a[0]].apply(e,a[1])}),a._buffer.length=0,a._needsDrain&&a.emit("drain")},o.prototype.add=function(e){return i(e),this._proxy?this._proxy.add(e):(this._buffer.push(["add",[e]]),this._needDrain=!0,!1)},o.prototype.write=function(e){return this._proxy?this._proxy.write(e):(this._buffer.push(["write",[e]]),this._needDrain=!0,!1)},o.prototype.end=function(e){return this._proxy?this._proxy.end(e):(this._buffer.push(["end",[e]]),!1)}},function(e,a,t){e.exports=i;var r=t(8),c=t(78),n={};function i(e){if(!(this instanceof i))throw new Error("FileWriter must be called as constructor.");if("File"!==e.type||!e.File)throw new Error("Non-file type "+e.type);this._buffer=[],this._bytesWritten=0,c.call(this,e)}t(0)(i,c),i.prototype._create=function(){var e=this;if(!e._stream){var a={};e.props.flags&&(a.flags=e.props.flags),a.mode=c.filemode,e._old&&e._old.blksize&&(a.bufferSize=e._old.blksize),e._stream=r.createWriteStream(e._path,a),e._stream.on("open",function(){e.ready=!0,e._buffer.forEach(function(a){a===n?e._stream.end():e._stream.write(a)}),e.emit("ready"),e.emit("drain")}),e._stream.on("error",function(a){e.emit("error",a)}),e._stream.on("drain",function(){e.emit("drain")}),e._stream.on("close",function(){e._finish()})}},i.prototype.write=function(e){if(this._bytesWritten+=e.length,!this.ready){if(!Buffer.isBuffer(e)&&"string"!=typeof e)throw new Error("invalid write data");return this._buffer.push(e),!1}var a=this._stream.write(e);return!1===a&&this._stream._queue?this._stream._queue.length<=2:a},i.prototype.end=function(e){return e&&this.write(e),this.ready?this._stream.end():(this._buffer.push(n),!1)},i.prototype._finish=function(){"number"==typeof this.size&&this._bytesWritten!==this.size&&this.error("Did not get expected byte count.\nexpect: "+this.size+"\nactual: "+this._bytesWritten),c.prototype._finish.call(this)}},function(e,a,t){e.exports=o;var r=t(8),c=t(78),n=t(0),i=t(2),f=t(273);function o(e){if(!(this instanceof o))throw new Error("LinkWriter must be called as constructor.");if(!("Link"===e.type&&e.Link||"SymbolicLink"===e.type&&e.SymbolicLink))throw new Error("Non-link type "+e.type);""===e.linkpath&&(e.linkpath="."),e.linkpath||this.error("Need linkpath property to create "+e.type),c.call(this,e)}function d(e,a,t){f(e._path,function(c){if(c)return e.error(c);!function(e,a,t){r[t](a,e._path,function(a){if(a){if("ENOENT"!==a.code&&"EACCES"!==a.code&&"EPERM"!==a.code||"win32"!==process.platform)return e.error(a);e.ready=!0,e.emit("ready"),e.emit("end"),e.emit("close"),e.end=e._finish=function(){}}s(e)})}(e,a,t)})}function s(e){e.ready=!0,e.emit("ready"),e._ended&&!e._finished&&e._finish()}n(o,c),o.prototype._create=function(){var e=this,a="Link"===e.type||"win32"===process.platform,t=a?"link":"symlink",c=a?i.resolve(e.dirname,e.linkpath):e.linkpath;if(a)return d(e,c,t);r.readlink(e._path,function(a,r){if(r&&r===c)return s(e);d(e,c,t)})},o.prototype.end=function(){this._ended=!0,this.ready&&(this._finished=!0,this._finish())}},function(e,a,t){e.exports=o;var r=t(78),c=t(0),n=t(160),i=t(2),f=t(155);function o(e){this instanceof o||this.error("DirWriter must be called as constructor.",null,!0),"Directory"===e.type&&e.Directory||this.error("Non-directory type "+e.type+" "+JSON.stringify(e),null,!0),r.call(this,e)}c(o,r),o.prototype._create=function(){var e=this;n(e._path,r.dirmode,function(a){if(a)return e.error(a);e.ready=!0,e.emit("ready"),e._process()})},o.prototype.write=function(){return!0},o.prototype.end=function(){this._ended=!0,this._process()},o.prototype.add=function(e){return f(e),!this.ready||this._currentEntry?(this._buffer.push(e),!1):this._ended?this.error("add after end"):(this._buffer.push(e),this._process(),0===this._buffer.length)},o.prototype._process=function(){var e=this;if(!e._processing){var a=e._buffer.shift();if(!a)return e.emit("drain"),void(e._ended&&e._finish());e._processing=!0,e.emit("entry",a);var t,c=a;do{if((t=c._path||c.path)===e.root._path||t===e._path||t&&0===t.indexOf(e._path))return e._processing=!1,a._collected&&a.pipe(),e._process();c=c.parent}while(c);var n={parent:e,root:e.root||e,type:a.type,depth:e.depth+1};t=a._path||a.path||a.props.path,a.parent&&(t=t.substr(a.parent._path.length+1)),n.path=i.join(e.path,i.join("/",t)),n.filter=e.filter,Object.keys(a.props).forEach(function(e){n.hasOwnProperty(e)||(n[e]=a.props[e])});var f=e._currentChild=new r(n);f.on("ready",function(){a.pipe(f),a.resume()}),f.on("error",function(a){f._swallowErrors?(e.warn(a),f.emit("end"),f.emit("close")):e.emit("error",a)}),f.on("close",function(){if(o)return;o=!0,e._currentChild=null,e._processing=!1,e._process()});var o=!1}}},function(e,a){e.exports=function e(a,t){if(a&&t)return e(a)(t);if("function"!=typeof a)throw new TypeError("need wrapper function");Object.keys(a).forEach(function(e){r[e]=a[e]});return r;function r(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];var r=a.apply(this,e),c=e[e.length-1];return"function"==typeof r&&r!==c&&Object.keys(c).forEach(function(e){r[e]=c[e]}),r}}},function(e,a,t){function r(e,a){return Object.prototype.hasOwnProperty.call(e,a)}a.alphasort=d,a.alphasorti=o,a.setopts=function(e,a,t){t||(t={});if(t.matchBase&&-1===a.indexOf("/")){if(t.noglobstar)throw new Error("base matching requires globstar");a="**/"+a}e.silent=!!t.silent,e.pattern=a,e.strict=!1!==t.strict,e.realpath=!!t.realpath,e.realpathCache=t.realpathCache||Object.create(null),e.follow=!!t.follow,e.dot=!!t.dot,e.mark=!!t.mark,e.nodir=!!t.nodir,e.nodir&&(e.mark=!0);e.sync=!!t.sync,e.nounique=!!t.nounique,e.nonull=!!t.nonull,e.nosort=!!t.nosort,e.nocase=!!t.nocase,e.stat=!!t.stat,e.noprocess=!!t.noprocess,e.absolute=!!t.absolute,e.maxLength=t.maxLength||1/0,e.cache=t.cache||Object.create(null),e.statCache=t.statCache||Object.create(null),e.symlinks=t.symlinks||Object.create(null),function(e,a){e.ignore=a.ignore||[],Array.isArray(e.ignore)||(e.ignore=[e.ignore]);e.ignore.length&&(e.ignore=e.ignore.map(s))}(e,t),e.changedCwd=!1;var n=process.cwd();r(t,"cwd")?(e.cwd=c.resolve(t.cwd),e.changedCwd=e.cwd!==n):e.cwd=n;e.root=t.root||c.resolve(e.cwd,"/"),e.root=c.resolve(e.root),"win32"===process.platform&&(e.root=e.root.replace(/\\/g,"/"));e.cwdAbs=i(e.cwd)?e.cwd:b(e,e.cwd),"win32"===process.platform&&(e.cwdAbs=e.cwdAbs.replace(/\\/g,"/"));e.nomount=!!t.nomount,t.nonegate=!0,t.nocomment=!0,e.minimatch=new f(a,t),e.options=e.minimatch.options},a.ownProp=r,a.makeAbs=b,a.finish=function(e){for(var a=e.nounique,t=a?[]:Object.create(null),r=0,c=e.matches.length;r<c;r++){var n=e.matches[r];if(n&&0!==Object.keys(n).length){var i=Object.keys(n);a?t.push.apply(t,i):i.forEach(function(e){t[e]=!0})}else if(e.nonull){var f=e.minimatch.globSet[r];a?t.push(f):t[f]=!0}}a||(t=Object.keys(t));e.nosort||(t=t.sort(e.nocase?o:d));if(e.mark){for(var r=0;r<t.length;r++)t[r]=e._mark(t[r]);e.nodir&&(t=t.filter(function(a){var t=!/\/$/.test(a),r=e.cache[a]||e.cache[b(e,a)];return t&&r&&(t="DIR"!==r&&!Array.isArray(r)),t}))}e.ignore.length&&(t=t.filter(function(a){return!u(e,a)}));e.found=t},a.mark=function(e,a){var t=b(e,a),r=e.cache[t],c=a;if(r){var n="DIR"===r||Array.isArray(r),i="/"===a.slice(-1);if(n&&!i?c+="/":!n&&i&&(c=c.slice(0,-1)),c!==a){var f=b(e,c);e.statCache[f]=e.statCache[t],e.cache[f]=e.cache[t]}}return c},a.isIgnored=u,a.childrenIgnored=function(e,a){return!!e.ignore.length&&e.ignore.some(function(e){return!(!e.gmatcher||!e.gmatcher.match(a))})};var c=t(2),n=t(158),i=t(157),f=n.Minimatch;function o(e,a){return e.toLowerCase().localeCompare(a.toLowerCase())}function d(e,a){return e.localeCompare(a)}function s(e){var a=null;if("/**"===e.slice(-3)){var t=e.replace(/(\/\*\*)+$/,"");a=new f(t,{dot:!0})}return{matcher:new f(e,{dot:!0}),gmatcher:a}}function b(e,a){var t=a;return t="/"===a.charAt(0)?c.join(e.root,a):i(a)||""===a?a:e.changedCwd?c.resolve(e.cwd,a):c.resolve(a),"win32"===process.platform&&(t=t.replace(/\\/g,"/")),t}function u(e,a){return!!e.ignore.length&&e.ignore.some(function(e){return e.matcher.match(a)||!(!e.gmatcher||!e.gmatcher.match(a))})}},function(e,a,t){e.exports=s,s.realpath=s,s.sync=b,s.realpathSync=b,s.monkeypatch=function(){r.realpath=s,r.realpathSync=b},s.unmonkeypatch=function(){r.realpath=c,r.realpathSync=n};var r=t(15),c=r.realpath,n=r.realpathSync,i=process.version,f=/^v[0-5]\./.test(i),o=t(655);function d(e){return e&&"realpath"===e.syscall&&("ELOOP"===e.code||"ENOMEM"===e.code||"ENAMETOOLONG"===e.code)}function s(e,a,t){if(f)return c(e,a,t);"function"==typeof a&&(t=a,a=null),c(e,a,function(r,c){d(r)?o.realpath(e,a,t):t(r,c)})}function b(e,a){if(f)return n(e,a);try{return n(e,a)}catch(t){if(d(t))return o.realpathSync(e,a);throw t}}},function(e,a,t){e.exports=y;var r=t(15),c=t(271),n=t(158),i=(n.Minimatch,t(0)),f=t(5).EventEmitter,o=t(2),d=t(11),s=t(157),b=t(651),u=t(270),l=(u.alphasort,u.alphasorti,u.setopts),p=u.ownProp,h=t(650),m=(t(1),u.childrenIgnored),g=u.isIgnored,v=t(156);function y(e,a,t){if("function"==typeof a&&(t=a,a={}),a||(a={}),a.sync){if(t)throw new TypeError("callback provided to sync glob");return b(e,a)}return new w(e,a,t)}y.sync=b;var _=y.GlobSync=b.GlobSync;function w(e,a,t){if("function"==typeof a&&(t=a,a=null),a&&a.sync){if(t)throw new TypeError("callback provided to sync glob");return new _(e,a)}if(!(this instanceof w))return new w(e,a,t);l(this,e,a),this._didRealPath=!1;var r=this.minimatch.set.length;this.matches=new Array(r),"function"==typeof t&&(t=v(t),this.on("error",t),this.on("end",function(e){t(null,e)}));var c=this;if(this._processing=0,this._emitQueue=[],this._processQueue=[],this.paused=!1,this.noprocess)return this;if(0===r)return f();for(var n=!0,i=0;i<r;i++)this._process(this.minimatch.set[i],i,!1,f);function f(){--c._processing,c._processing<=0&&(n?process.nextTick(function(){c._finish()}):c._finish())}n=!1}y.glob=y,y.hasMagic=function(e,a){var t=function(e,a){if(null===a||"object"!=typeof a)return e;for(var t=Object.keys(a),r=t.length;r--;)e[t[r]]=a[t[r]];return e}({},a);t.noprocess=!0;var r=new w(e,t).minimatch.set;if(!e)return!1;if(r.length>1)return!0;for(var c=0;c<r[0].length;c++)if("string"!=typeof r[0][c])return!0;return!1},y.Glob=w,i(w,f),w.prototype._finish=function(){if(d(this instanceof w),!this.aborted){if(this.realpath&&!this._didRealpath)return this._realpath();u.finish(this),this.emit("end",this.found)}},w.prototype._realpath=function(){if(!this._didRealpath){this._didRealpath=!0;var e=this.matches.length;if(0===e)return this._finish();for(var a=this,t=0;t<this.matches.length;t++)this._realpathSet(t,r)}function r(){0==--e&&a._finish()}},w.prototype._realpathSet=function(e,a){var t=this.matches[e];if(!t)return a();var r=Object.keys(t),n=this,i=r.length;if(0===i)return a();var f=this.matches[e]=Object.create(null);r.forEach(function(t,r){t=n._makeAbs(t),c.realpath(t,n.realpathCache,function(r,c){r?"stat"===r.syscall?f[t]=!0:n.emit("error",r):f[c]=!0,0==--i&&(n.matches[e]=f,a())})})},w.prototype._mark=function(e){return u.mark(this,e)},w.prototype._makeAbs=function(e){return u.makeAbs(this,e)},w.prototype.abort=function(){this.aborted=!0,this.emit("abort")},w.prototype.pause=function(){this.paused||(this.paused=!0,this.emit("pause"))},w.prototype.resume=function(){if(this.paused){if(this.emit("resume"),this.paused=!1,this._emitQueue.length){var e=this._emitQueue.slice(0);this._emitQueue.length=0;for(var a=0;a<e.length;a++){var t=e[a];this._emitMatch(t[0],t[1])}}if(this._processQueue.length){var r=this._processQueue.slice(0);this._processQueue.length=0;for(a=0;a<r.length;a++){var c=r[a];this._processing--,this._process(c[0],c[1],c[2],c[3])}}}},w.prototype._process=function(e,a,t,r){if(d(this instanceof w),d("function"==typeof r),!this.aborted)if(this._processing++,this.paused)this._processQueue.push([e,a,t,r]);else{for(var c,i=0;"string"==typeof e[i];)i++;switch(i){case e.length:return void this._processSimple(e.join("/"),a,r);case 0:c=null;break;default:c=e.slice(0,i).join("/")}var f,o=e.slice(i);null===c?f=".":s(c)||s(e.join("/"))?(c&&s(c)||(c="/"+c),f=c):f=c;var b=this._makeAbs(f);if(m(this,f))return r();o[0]===n.GLOBSTAR?this._processGlobStar(c,f,b,o,a,t,r):this._processReaddir(c,f,b,o,a,t,r)}},w.prototype._processReaddir=function(e,a,t,r,c,n,i){var f=this;this._readdir(t,n,function(o,d){return f._processReaddir2(e,a,t,r,c,n,d,i)})},w.prototype._processReaddir2=function(e,a,t,r,c,n,i,f){if(!i)return f();for(var d=r[0],s=!!this.minimatch.negate,b=d._glob,u=this.dot||"."===b.charAt(0),l=[],p=0;p<i.length;p++){if("."!==(m=i[p]).charAt(0)||u)(s&&!e?!m.match(d):m.match(d))&&l.push(m)}var h=l.length;if(0===h)return f();if(1===r.length&&!this.mark&&!this.stat){this.matches[c]||(this.matches[c]=Object.create(null));for(p=0;p<h;p++){var m=l[p];e&&(m="/"!==e?e+"/"+m:e+m),"/"!==m.charAt(0)||this.nomount||(m=o.join(this.root,m)),this._emitMatch(c,m)}return f()}r.shift();for(p=0;p<h;p++){m=l[p];e&&(m="/"!==e?e+"/"+m:e+m),this._process([m].concat(r),c,n,f)}f()},w.prototype._emitMatch=function(e,a){if(!this.aborted&&!g(this,a))if(this.paused)this._emitQueue.push([e,a]);else{var t=s(a)?a:this._makeAbs(a);if(this.mark&&(a=this._mark(a)),this.absolute&&(a=t),!this.matches[e][a]){if(this.nodir){var r=this.cache[t];if("DIR"===r||Array.isArray(r))return}this.matches[e][a]=!0;var c=this.statCache[t];c&&this.emit("stat",a,c),this.emit("match",a)}}},w.prototype._readdirInGlobStar=function(e,a){if(!this.aborted){if(this.follow)return this._readdir(e,!1,a);var t=this,c=h("lstat\0"+e,function(r,c){if(r&&"ENOENT"===r.code)return a();var n=c&&c.isSymbolicLink();t.symlinks[e]=n,n||!c||c.isDirectory()?t._readdir(e,!1,a):(t.cache[e]="FILE",a())});c&&r.lstat(e,c)}},w.prototype._readdir=function(e,a,t){if(!this.aborted&&(t=h("readdir\0"+e+"\0"+a,t))){if(a&&!p(this.symlinks,e))return this._readdirInGlobStar(e,t);if(p(this.cache,e)){var c=this.cache[e];if(!c||"FILE"===c)return t();if(Array.isArray(c))return t(null,c)}r.readdir(e,function(e,a,t){return function(r,c){r?e._readdirError(a,r,t):e._readdirEntries(a,c,t)}}(this,e,t))}},w.prototype._readdirEntries=function(e,a,t){if(!this.aborted){if(!this.mark&&!this.stat)for(var r=0;r<a.length;r++){var c=a[r];c="/"===e?e+c:e+"/"+c,this.cache[c]=!0}return this.cache[e]=a,t(null,a)}},w.prototype._readdirError=function(e,a,t){if(!this.aborted){switch(a.code){case"ENOTSUP":case"ENOTDIR":var r=this._makeAbs(e);if(this.cache[r]="FILE",r===this.cwdAbs){var c=new Error(a.code+" invalid cwd "+this.cwd);c.path=this.cwd,c.code=a.code,this.emit("error",c),this.abort()}break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(e)]=!1;break;default:this.cache[this._makeAbs(e)]=!1,this.strict&&(this.emit("error",a),this.abort()),this.silent||console.error("glob error",a)}return t()}},w.prototype._processGlobStar=function(e,a,t,r,c,n,i){var f=this;this._readdir(t,n,function(o,d){f._processGlobStar2(e,a,t,r,c,n,d,i)})},w.prototype._processGlobStar2=function(e,a,t,r,c,n,i,f){if(!i)return f();var o=r.slice(1),d=e?[e]:[],s=d.concat(o);this._process(s,c,!1,f);var b=this.symlinks[t],u=i.length;if(b&&n)return f();for(var l=0;l<u;l++){if("."!==i[l].charAt(0)||this.dot){var p=d.concat(i[l],o);this._process(p,c,!0,f);var h=d.concat(i[l],r);this._process(h,c,!0,f)}}f()},w.prototype._processSimple=function(e,a,t){var r=this;this._stat(e,function(c,n){r._processSimple2(e,a,c,n,t)})},w.prototype._processSimple2=function(e,a,t,r,c){if(this.matches[a]||(this.matches[a]=Object.create(null)),!r)return c();if(e&&s(e)&&!this.nomount){var n=/[\/\\]$/.test(e);"/"===e.charAt(0)?e=o.join(this.root,e):(e=o.resolve(this.root,e),n&&(e+="/"))}"win32"===process.platform&&(e=e.replace(/\\/g,"/")),this._emitMatch(a,e),c()},w.prototype._stat=function(e,a){var t=this._makeAbs(e),c="/"===e.slice(-1);if(e.length>this.maxLength)return a();if(!this.stat&&p(this.cache,t)){var n=this.cache[t];if(Array.isArray(n)&&(n="DIR"),!c||"DIR"===n)return a(null,n);if(c&&"FILE"===n)return a()}var i=this.statCache[t];if(void 0!==i){if(!1===i)return a(null,i);var f=i.isDirectory()?"DIR":"FILE";return c&&"FILE"===f?a():a(null,f,i)}var o=this,d=h("stat\0"+t,function(c,n){if(n&&n.isSymbolicLink())return r.stat(t,function(r,c){r?o._stat2(e,t,null,n,a):o._stat2(e,t,r,c,a)});o._stat2(e,t,c,n,a)});d&&r.lstat(t,d)},w.prototype._stat2=function(e,a,t,r,c){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return this.statCache[a]=!1,c();var n="/"===e.slice(-1);if(this.statCache[a]=r,"/"===a.slice(-1)&&r&&!r.isDirectory())return c(null,!1,r);var i=!0;return r&&(i=r.isDirectory()?"DIR":"FILE"),this.cache[a]=this.cache[a]||i,n&&"FILE"===i?c():c(null,i,r)}},function(e,a,t){e.exports=u,u.sync=g;var r=t(11),c=t(2),n=t(15),i=t(272),f=parseInt("666",8),o={nosort:!0,silent:!0},d=0,s="win32"===process.platform;function b(e){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach(function(a){e[a]=e[a]||n[a],e[a+="Sync"]=e[a]||n[a]}),e.maxBusyTries=e.maxBusyTries||3,e.emfileWait=e.emfileWait||1e3,!1===e.glob&&(e.disableGlob=!0),e.disableGlob=e.disableGlob||!1,e.glob=e.glob||o}function u(e,a,t){"function"==typeof a&&(t=a,a={}),r(e,"rimraf: missing path"),r.equal(typeof e,"string","rimraf: path should be a string"),r.equal(typeof t,"function","rimraf: callback function required"),r(a,"rimraf: invalid options argument provided"),r.equal(typeof a,"object","rimraf: options should be object"),b(a);var c=0,n=null,f=0;if(a.disableGlob||!i.hasMagic(e))return o(null,[e]);function o(e,r){return e?t(e):0===(f=r.length)?t():void r.forEach(function(e){l(e,a,function r(i){if(i){if(("EBUSY"===i.code||"ENOTEMPTY"===i.code||"EPERM"===i.code)&&c<a.maxBusyTries)return c++,setTimeout(function(){l(e,a,r)},100*c);if("EMFILE"===i.code&&d<a.emfileWait)return setTimeout(function(){l(e,a,r)},d++);"ENOENT"===i.code&&(i=null)}d=0,function(e){n=n||e,0==--f&&t(n)}(i)})})}a.lstat(e,function(t,r){if(!t)return o(null,[e]);i(e,a.glob,o)})}function l(e,a,t){r(e),r(a),r("function"==typeof t),a.lstat(e,function(r,c){return r&&"ENOENT"===r.code?t(null):(r&&"EPERM"===r.code&&s&&p(e,a,r,t),c&&c.isDirectory()?m(e,a,r,t):void a.unlink(e,function(r){if(r){if("ENOENT"===r.code)return t(null);if("EPERM"===r.code)return s?p(e,a,r,t):m(e,a,r,t);if("EISDIR"===r.code)return m(e,a,r,t)}return t(r)}))})}function p(e,a,t,c){r(e),r(a),r("function"==typeof c),t&&r(t instanceof Error),a.chmod(e,f,function(r){r?c("ENOENT"===r.code?null:t):a.stat(e,function(r,n){r?c("ENOENT"===r.code?null:t):n.isDirectory()?m(e,a,t,c):a.unlink(e,c)})})}function h(e,a,t){r(e),r(a),t&&r(t instanceof Error);try{a.chmodSync(e,f)}catch(e){if("ENOENT"===e.code)return;throw t}try{var c=a.statSync(e)}catch(e){if("ENOENT"===e.code)return;throw t}c.isDirectory()?v(e,a,t):a.unlinkSync(e)}function m(e,a,t,n){r(e),r(a),t&&r(t instanceof Error),r("function"==typeof n),a.rmdir(e,function(i){!i||"ENOTEMPTY"!==i.code&&"EEXIST"!==i.code&&"EPERM"!==i.code?i&&"ENOTDIR"===i.code?n(t):n(i):function(e,a,t){r(e),r(a),r("function"==typeof t),a.readdir(e,function(r,n){if(r)return t(r);var i,f=n.length;if(0===f)return a.rmdir(e,t);n.forEach(function(r){u(c.join(e,r),a,function(r){if(!i)return r?t(i=r):void(0==--f&&a.rmdir(e,t))})})})}(e,a,n)})}function g(e,a){var t;if(b(a=a||{}),r(e,"rimraf: missing path"),r.equal(typeof e,"string","rimraf: path should be a string"),r(a,"rimraf: missing options"),r.equal(typeof a,"object","rimraf: options should be object"),a.disableGlob||!i.hasMagic(e))t=[e];else try{a.lstatSync(e),t=[e]}catch(r){t=i.sync(e,a.glob)}if(t.length)for(var c=0;c<t.length;c++){e=t[c];try{var n=a.lstatSync(e)}catch(t){if("ENOENT"===t.code)return;"EPERM"===t.code&&s&&h(e,a,t)}try{n&&n.isDirectory()?v(e,a,null):a.unlinkSync(e)}catch(t){if("ENOENT"===t.code)return;if("EPERM"===t.code)return s?h(e,a,t):v(e,a,t);if("EISDIR"!==t.code)throw t;v(e,a,t)}}}function v(e,a,t){r(e),r(a),t&&r(t instanceof Error);try{a.rmdirSync(e)}catch(n){if("ENOENT"===n.code)return;if("ENOTDIR"===n.code)throw t;"ENOTEMPTY"!==n.code&&"EEXIST"!==n.code&&"EPERM"!==n.code||function(e,a){r(e),r(a),a.readdirSync(e).forEach(function(t){g(c.join(e,t),a)});var t=s?100:1,n=0;for(;;){var i=!0;try{var f=a.rmdirSync(e,a);return i=!1,f}finally{if(++n<t&&i)continue}}}(e,a)}}},function(e,a,t){e.exports=f;var r=t(56),c=t(109),n=t(0),i=t(8);function f(e){if(!(this instanceof f))throw new Error("ProxyReader must be called as constructor.");this.props=e,this._buffer=[],this.ready=!1,r.call(this,e)}n(f,r),f.prototype._stat=function(){var e=this,a=e.props,t=a.follow?"stat":"lstat";i[t](a.path,function(t,n){var i;i=t||!n?"File":c(n),a[i]=!0,a.type=e.type=i,e._old=n,e._addProxy(r(a,n))})},f.prototype._addProxy=function(e){var a=this;if(a._proxyTarget)return a.error("proxy already set");a._proxyTarget=e,e._proxy=a,["error","data","end","close","linkpath","entry","entryEnd","child","childEnd","warn","stat"].forEach(function(t){e.on(t,a.emit.bind(a,t))}),a.emit("proxy",e),e.on("ready",function(){a.ready=!0,a.emit("ready")});var t=a._buffer;a._buffer.length=0,t.forEach(function(a){e[a[0]].apply(e,a[1])})},f.prototype.pause=function(){return!!this._proxyTarget&&this._proxyTarget.pause()},f.prototype.resume=function(){return!!this._proxyTarget&&this._proxyTarget.resume()}},function(e,a,t){e.exports=o;var r=t(8),c=t(0),n=t(56),i={EOF:!0},f={CLOSE:!0};function o(e){if(!(this instanceof o))throw new Error("FileReader must be called as constructor.");if(!("Link"===e.type&&e.Link||"File"===e.type&&e.File))throw new Error("Non-file type "+e.type);this._buffer=[],this._bytesEmitted=0,n.call(this,e)}c(o,n),o.prototype._getStream=function(){var e=this,a=e._stream=r.createReadStream(e._path,e.props);e.props.blksize&&(a.bufferSize=e.props.blksize),a.on("open",e.emit.bind(e,"open")),a.on("data",function(a){e._bytesEmitted+=a.length,a.length&&(e._paused||e._buffer.length?(e._buffer.push(a),e._read()):e.emit("data",a))}),a.on("end",function(){e._paused||e._buffer.length?(e._buffer.push(i),e._read()):e.emit("end"),e._bytesEmitted!==e.props.size&&e.error("Didn't get expected byte count\nexpect: "+e.props.size+"\nactual: "+e._bytesEmitted)}),a.on("close",function(){e._paused||e._buffer.length?(e._buffer.push(f),e._read()):e.emit("close")}),a.on("error",function(a){e.emit("error",a)}),e._read()},o.prototype._read=function(){if(!this._paused){if(!this._stream)return this._getStream();if(this._buffer.length){for(var e=this._buffer,a=0,t=e.length;a<t;a++){var r=e[a];if(r===i?this.emit("end"):r===f?this.emit("close"):this.emit("data",r),this._paused)return void(this._buffer=e.slice(a))}this._buffer.length=0}}},o.prototype.pause=function(e){this._paused||(e=e||this,this._paused=!0,this._stream&&this._stream.pause(),this.emit("pause",e))},o.prototype.resume=function(e){this._paused&&(e=e||this,this.emit("resume",e),this._paused=!1,this._stream&&this._stream.resume(),this._read())}},function(e,a,t){e.exports=o;var r=t(8),c=t(0),n=t(2),i=t(56),f=t(11).ok;function o(e){if(!(this instanceof o))throw new Error("DirReader must be called as constructor.");if("Directory"!==e.type||!e.Directory)throw new Error("Non-directory type "+e.type);this.entries=null,this._index=-1,this._paused=!1,this._length=-1,e.sort&&(this.sort=e.sort),i.call(this,e)}c(o,i),o.prototype._getEntries=function(){var e=this;e._gotEntries||(e._gotEntries=!0,r.readdir(e._path,function(a,t){if(a)return e.error(a);function r(){e._length=e.entries.length,"function"==typeof e.sort&&(e.entries=e.entries.sort(e.sort.bind(e))),e._read()}e.entries=t,e.emit("entries",t),e._paused?e.once("resume",r):r()}))},o.prototype._read=function(){var e=this;if(!e.entries)return e._getEntries();if(!(e._paused||e._currentEntry||e._aborted))if(e._index++,e._index>=e.entries.length)e._ended||(e._ended=!0,e.emit("end"),e.emit("close"));else{var a=n.resolve(e._path,e.entries[e._index]);f(a!==e._path),f(e.entries[e._index]),e._currentEntry=a,r[e.props.follow?"stat":"lstat"](a,function(t,r){if(t)return e.error(t);var c=e._proxy||e;r.path=a,r.basename=n.basename(a),r.dirname=n.dirname(a);var f=e.getChildProps.call(c,r);f.path=a,f.basename=n.basename(a),f.dirname=n.dirname(a);var o=i(f,r);e._currentEntry=o,o.on("pause",function(a){e._paused||o._disowned||e.pause(a)}),o.on("resume",function(a){e._paused&&!o._disowned&&e.resume(a)}),o.on("stat",function(a){e.emit("_entryStat",o,a),o._aborted||(o._paused?o.once("resume",function(){e.emit("entryStat",o,a)}):e.emit("entryStat",o,a))}),o.on("ready",function a(){if(e._paused)return o.pause(e),e.once("resume",a);"Socket"===o.type?e.emit("socket",o):e.emitEntry(o)});var d=!1;function s(){d||(d=!0,e.emit("childEnd",o),e.emit("entryEnd",o),e._currentEntry=null,e._paused||e._read())}o.on("close",s),o.on("disown",s),o.on("error",function(a){o._swallowErrors?(e.warn(a),o.emit("end"),o.emit("close")):e.emit("error",a)}),["child","childEnd","warn"].forEach(function(a){o.on(a,e.emit.bind(e,a))})})}},o.prototype.disown=function(e){e.emit("beforeDisown"),e._disowned=!0,e.parent=e.root=null,e===this._currentEntry&&(this._currentEntry=null),e.emit("disown")},o.prototype.getChildProps=function(){return{depth:this.depth+1,root:this.root||this,parent:this,follow:this.follow,filter:this.filter,sort:this.props.sort,hardlinks:this.props.hardlinks}},o.prototype.pause=function(e){this._paused||(e=e||this,this._paused=!0,this._currentEntry&&this._currentEntry.pause&&this._currentEntry.pause(e),this.emit("pause",e))},o.prototype.resume=function(e){this._paused&&(e=e||this,this._paused=!1,this.emit("resume",e),this._paused||(this._currentEntry?this._currentEntry.resume&&this._currentEntry.resume(e):this._read()))},o.prototype.emitEntry=function(e){this.emit("entry",e),this.emit("child",e)}},function(e,a,t){e.exports=i;var r=t(8),c=t(0),n=t(56);function i(e){if(!(this instanceof i))throw new Error("LinkReader must be called as constructor.");if(!("Link"===e.type&&e.Link||"SymbolicLink"===e.type&&e.SymbolicLink))throw new Error("Non-link type "+e.type);n.call(this,e)}c(i,n),i.prototype._stat=function(e){var a=this;r.readlink(a._path,function(t,r){if(t)return a.error(t);a.linkpath=a.props.linkpath=r,a.emit("linkpath",r),n.prototype._stat.call(a,e)})},i.prototype._read=function(){this._paused||this._ended||(this.emit("end"),this.emit("close"),this._ended=!0)}},function(e,a,t){e.exports=d;t(41);var r,c=t(111),n=(t(110),t(0)),i=t(264),f=t(6).Stream,o={};function d(e){var a=this;if(!(a instanceof d))return new d(e);f.apply(this),a.writable=!0,a.readable=!0,a._stream=new i(512),a._stream.on("data",function(e){a.emit("data",e)}),a._stream.on("drain",function(){a.emit("drain")}),a._stream.on("end",function(){a.emit("end"),a.emit("close")}),a.props=e,"Directory"===e.type&&(e.size=0),e.ustar="ustar\0",e.ustarver="00",a.path=e.path,a._buffer=[],a._didHeader=!1,a._meta=!1,a.on("pipe",function(){a._process()})}n(d,f),d.prototype.write=function(e){return this._ended?this.emit("error",new Error("write after end")):(this._buffer.push(e),this._process(),this._needDrain=this._buffer.length>0,!this._needDrain)},d.prototype.end=function(e){e&&this._buffer.push(e),this._buffer.push(o),this._ended=!0,this._process(),this._needDrain=this._buffer.length>0},d.prototype.pause=function(){this._paused=!0,this.emit("pause")},d.prototype.resume=function(){this._paused=!1,this.emit("resume"),this._process()},d.prototype.add=function(e){return this.parent?(this._ended||this.end(),this.parent.add(e)):this.emit("error",new Error("no parent"))},d.prototype._header=function(){if(!this._didHeader){this._didHeader=!0;var e=c.encode(this.props);if(this.props.needExtended&&!this._meta){var a=this;(r=r||t(263))(this.props).on("data",function(e){a.emit("data",e)}).on("error",function(e){a.emit("error",e)}).end()}this.emit("data",e),this.emit("header")}},d.prototype._process=function(){if(this._didHeader||this._meta||this._header(),!this._paused&&!this._processing){this._processing=!0;for(var e=this._buffer,a=0;a<e.length;a++){var t=e[a];if(t===o?this._stream.end():this._stream.write(t),this._paused)return this._processing=!1,void(a<e.length&&(this._needDrain=!0,this._buffer=e.slice(a+1)))}this._buffer.length=0,this._processing=!1,this.emit("drain")}},d.prototype.destroy=function(){}},function(e,a){e.exports=__webpack_require__(87)},function(e,a,t){"use strict";const r=t(6).PassThrough,c=t(279),n=t(671);e.exports=(e=>{if(-1===["gzip","deflate"].indexOf(e.headers["content-encoding"]))return e;const a=c.createUnzip(),t=new r;return n(e,t),a.on("error",e=>{"Z_BUF_ERROR"!==e.code?t.emit("error",e):t.end()}),e.pipe(a).pipe(t),t})},function(e,a,t){"use strict";e.exports=function(e,a){if(e.timeoutTimer)return e;var t=isNaN(a)?a:{socket:a,connect:a},r=e._headers?" to "+e._headers.host:"";function c(){e.timeoutTimer&&(clearTimeout(e.timeoutTimer),e.timeoutTimer=null)}function n(){c(),void 0!==t.socket&&e.setTimeout(t.socket,function(){e.abort();var a=new Error("Socket timed out on request"+r);a.code="ESOCKETTIMEDOUT",e.emit("error",a)})}return void 0!==t.connect&&(e.timeoutTimer=setTimeout(function(){e.abort();var a=new Error("Connection timed out on request"+r);a.code="ETIMEDOUT",e.emit("error",a)},t.connect)),e.on("socket",function(e){e.connecting||e._connecting?e.once("connect",n):n()}),e.on("error",c)}},function(e,a){e.exports=__webpack_require__(85)},function(e,a,t){"use strict";var r=t(13),c=r.maybeWrapAsError,n=t(42).OperationalError,i=t(57);var f=/^(?:name|message|stack|cause)$/;function o(e){var a;if(function(e){return e instanceof Error&&i.getPrototypeOf(e)===Error.prototype}(e)){(a=new n(e)).name=e.name,a.message=e.message,a.stack=e.stack;for(var t=i.keys(e),c=0;c<t.length;++c){var o=t[c];f.test(o)||(a[o]=e[o])}return a}return r.markAsOriginatingFromRejection(e),e}e.exports=function(e,a){return function(t,r){if(null!==e){if(t){var n=o(c(t));e._attachExtraTrace(n),e._reject(n)}else if(a){for(var i=arguments.length,f=new Array(Math.max(i-1,0)),d=1;d<i;++d)f[d-1]=arguments[d];e._fulfill(f)}else e._fulfill(r);e=null}}}},function(e,a,t){"use strict";e.exports=function(e){var a=t(13),r=t(57).keys,c=a.tryCatch,n=a.errorObj;return function(t,i,f){return function(o){var d=f._boundValue();e:for(var s=0;s<t.length;++s){var b=t[s];if(b===Error||null!=b&&b.prototype instanceof Error){if(o instanceof b)return c(i).call(d,o)}else if("function"==typeof b){var u=c(b).call(d,o);if(u===n)return u;if(u)return c(i).call(d,o)}else if(a.isObject(o)){for(var l=r(b),p=0;p<l.length;++p){var h=l[p];if(b[h]!=o[h])continue e}return c(i).call(d,o)}}return e}}}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(26),i=t(161);e.exports=function(e,a,t,f){"function"==typeof t&&(f=t,t={});const o=c.dirname(e);r.exists(o,r=>{if(r)return i.writeJson(e,a,t,f);n.mkdirs(o,r=>{if(r)return f(r);i.writeJson(e,a,t,f)})})}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(26),i=t(161);e.exports=function(e,a,t){const f=c.dirname(e);r.existsSync(f)||n.mkdirsSync(f),i.writeJsonSync(e,a,t)}},function(e,a,t){e.exports={copySync:t(727)}},function(e,a,t){"use strict";const r=t(2);function c(e){return(e=r.normalize(r.resolve(e)).split(r.sep)).length>0?e[0]:null}const n=/[<>:"|?*]/;e.exports={getRootPath:c,invalidWin32Path:function(e){const a=c(e);return e=e.replace(a,""),n.test(e)}}},function(e,a,t){var r=t(8),c=t(2),n=t(728);e.exports=function(e,a,t,i){i||(i=t,t={});var f=process.cwd(),o=c.resolve(f,e),d=c.resolve(f,a),s=t.filter,b=t.transform,u=t.overwrite;void 0===u&&(u=t.clobber),void 0===u&&(u=!0);var l=t.errorOnExist,p=t.dereference,h=!0===t.preserveTimestamps,m=0,g=0,v=0,y=!1;function _(e){if(m++,s)if(s instanceof RegExp){if(console.warn("Warning: fs-extra: Passing a RegExp filter is deprecated, use a function"),!s.test(e))return T(!0)}else if("function"==typeof s&&!s(e,a))return T(!0);return function(e){var a=p?r.stat:r.lstat;v++,a(e,function(a,t){if(a)return S(a);var n={name:e,mode:t.mode,mtime:t.mtime,atime:t.atime,stats:t};return t.isDirectory()?function(e){var a=e.name.replace(o,d.replace("$","$$$$"));E(a,function(t){if(t)return function(e,a){r.mkdir(a,e.mode,function(t){if(t)return S(t);r.chmod(a,e.mode,function(a){if(a)return S(a);k(e.name)})})}(e,a);k(e.name)})}(n):t.isFile()||t.isCharacterDevice()||t.isBlockDevice()?function(e){var a=e.name.replace(o,d.replace("$","$$$$"));E(a,function(t){t?w(e,a):u?A(a,function(){w(e,a)}):l?S(new Error(a+" already exists")):T()})}(n):t.isSymbolicLink()?function(e){var a=e.replace(o,d);r.readlink(e,function(e,t){if(e)return S(e);!function(e,a){p&&(e=c.resolve(f,e)),E(a,function(t){if(t)return x(e,a);r.readlink(a,function(t,r){return t?S(t):(p&&(r=c.resolve(f,r)),r===e?T():A(a,function(){x(e,a)}))})})}(t,a)})}(e):void 0})}(e)}function w(e,a){var t=r.createReadStream(e.name),c=r.createWriteStream(a,{mode:e.mode});t.on("error",S),c.on("error",S),b?b(t,c,e):c.on("open",function(){t.pipe(c)}),c.once("close",function(){r.chmod(a,e.mode,function(t){if(t)return S(t);h?n.utimesMillis(a,e.atime,e.mtime,function(e){return e?S(e):T()}):T()})})}function A(e,a){r.unlink(e,function(e){return e?S(e):a()})}function k(e){r.readdir(e,function(a,t){return a?S(a):(t.forEach(function(a){_(c.join(e,a))}),T())})}function x(e,a){r.symlink(e,a,function(e){return e?S(e):T()})}function E(e,a){r.lstat(e,function(e){return e&&"ENOENT"===e.code?a(!0):a(!1)})}function S(e){if(!y&&void 0!==i)return y=!0,i(e)}function T(e){if(e||v--,m===++g&&0===v&&void 0!==i)return i(null)}_(o)}},function(e,a,t){var r=t(733);function c(e,a,t){return n(e,a,t,r)}function n(e,a,t,r){return a||(a={},t=Object.keys(e)),Array.isArray(a)&&(t=a,a={}),t||(t=Object.keys(e)),"function"==typeof e&&(a=r(e)),t.forEach(function(t){"function"==typeof e[t]&&(a[t]=r(e[t]))}),Object.keys(e).forEach(function(t){(function(e,a){var t=Object.getOwnPropertyDescriptor(e,a);return!(!t||!t.get)&&"deprecated"===t.get.name})(e,t)||a[t]||(a[t]=e[t])}),a}e.exports=c,c.withCallback=function(e,a,t){return n(e,a,t,r.withCallback)},c.thenify=r},function(e,a,t){"use strict";var r=t(15);e.exports=function(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Object)var a={__proto__:e.__proto__};else var a=Object.create(null);return Object.getOwnPropertyNames(e).forEach(function(t){Object.defineProperty(a,t,Object.getOwnPropertyDescriptor(e,t))}),a}(r)},function(e,a,t){"use strict";var r=t(736),c=t(732),n=(t(82),t(290));Array.prototype.slice;n.withCallback(c,a,["copy","emptyDir","ensureFile","ensureDir","ensureLink","ensureSymlink","mkdirs","move","outputFile","outputJson","readJson","remove","writeJson","createFile","createLink","createSymlink","emptydir","mkdirp","readJSON","outputJSON","writeJSON"]);["rename","ftruncate","chown","fchown","lchown","chmod","fchmod","stat","lstat","fstat","link","symlink","readlink","realpath","unlink","rmdir","mkdir","mkdtemp","readdir","close","open","utimes","futimes","fsync","fdatasync","write","read","readFile","writeFile","appendFile","access","truncate","exists"].forEach(function(e){a[e]=r[e]})},function(e,a,t){var r=t(9),c=t(85);function n(e,a){var t=function(e){var a=i(e);return{blinder:a.toRed(r.mont(e.modulus)).redPow(new r(e.publicExponent)).fromRed(),unblinder:a.invm(e.modulus)}}(a),c=a.modulus.byteLength(),n=(r.mont(a.modulus),new r(e).mul(t.blinder).umod(a.modulus)),f=n.toRed(r.mont(a.prime1)),o=n.toRed(r.mont(a.prime2)),d=a.coefficient,s=a.prime1,b=a.prime2,u=f.redPow(a.exponent1),l=o.redPow(a.exponent2);u=u.fromRed(),l=l.fromRed();var p=u.isub(l).imul(d).umod(s);return p.imul(b),l.iadd(p),new Buffer(l.imul(t.unblinder).umod(a.modulus).toArray(!1,c))}function i(e){for(var a=e.modulus.byteLength(),t=new r(c(a));t.cmp(e.modulus)>=0||!t.umod(e.prime1)||!t.umod(e.prime2);)t=new r(c(a));return t}e.exports=n,n.getr=i},function(e,a,t){var r=t(9);e.exports=function(e,a){return new Buffer(e.toRed(r.mont(a.modulus)).redPow(new r(a.publicExponent)).fromRed().toArray())}},function(e,a){e.exports=function(e,a){for(var t=e.length,r=-1;++r<t;)e[r]^=a[r];return e}},function(e,a,t){var r=t(30);function c(e){var a=new Buffer(4);return a.writeUInt32BE(e,0),a}e.exports=function(e,a){for(var t,n=new Buffer(""),i=0;n.length<a;)t=c(i++),n=Buffer.concat([n,r("sha1").update(e).update(t).digest()]);return n.slice(0,a)}},function(e,a,t){var r=t(10);a.createCipher=a.Cipher=r.createCipher,a.createCipheriv=a.Cipheriv=r.createCipheriv,a.createDecipher=a.Decipher=r.createDecipher,a.createDecipheriv=a.Decipheriv=r.createDecipheriv,a.listCiphers=a.getCiphers=r.getCiphers},function(e,a,t){var r=t(0),c=t(24).Buffer,n=t(81),i=n.base,f=n.constants.der;function o(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new d,this.tree._init(e.body)}function d(e){i.Node.call(this,"der",e)}function s(e){return e<10?"0"+e:e}e.exports=o,o.prototype.encode=function(e,a){return this.tree._encode(e,a).join()},r(d,i.Node),d.prototype._encodeComposite=function(e,a,t,r){var n,i=function(e,a,t,r){var c;"seqof"===e?e="seq":"setof"===e&&(e="set");if(f.tagByName.hasOwnProperty(e))c=f.tagByName[e];else{if("number"!=typeof e||(0|e)!==e)return r.error("Unknown tag: "+e);c=e}if(c>=31)return r.error("Multi-octet tag encoding unsupported");a||(c|=32);return c|=f.tagClassByName[t||"universal"]<<6}(e,a,t,this.reporter);if(r.length<128)return(n=new c(2))[0]=i,n[1]=r.length,this._createEncoderBuffer([n,r]);for(var o=1,d=r.length;d>=256;d>>=8)o++;(n=new c(2+o))[0]=i,n[1]=128|o;d=1+o;for(var s=r.length;s>0;d--,s>>=8)n[d]=255&s;return this._createEncoderBuffer([n,r])},d.prototype._encodeStr=function(e,a){if("bitstr"===a)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===a){for(var t=new c(2*e.length),r=0;r<e.length;r++)t.writeUInt16BE(e.charCodeAt(r),2*r);return this._createEncoderBuffer(t)}return"numstr"===a?this._isNumstr(e)?this._createEncoderBuffer(e):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===a?this._isPrintstr(e)?this._createEncoderBuffer(e):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"):/str$/.test(a)?this._createEncoderBuffer(e):"objDesc"===a?this._createEncoderBuffer(e):this.reporter.error("Encoding of string type: "+a+" unsupported")},d.prototype._encodeObjid=function(e,a,t){if("string"==typeof e){if(!a)return this.reporter.error("string objid given, but no values map found");if(!a.hasOwnProperty(e))return this.reporter.error("objid not found in values map");e=a[e].split(/[\s\.]+/g);for(var r=0;r<e.length;r++)e[r]|=0}else if(Array.isArray(e)){e=e.slice();for(r=0;r<e.length;r++)e[r]|=0}if(!Array.isArray(e))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(e));if(!t){if(e[1]>=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}var n=0;for(r=0;r<e.length;r++){var i=e[r];for(n++;i>=128;i>>=7)n++}var f=new c(n),o=f.length-1;for(r=e.length-1;r>=0;r--){i=e[r];for(f[o--]=127&i;(i>>=7)>0;)f[o--]=128|127&i}return this._createEncoderBuffer(f)},d.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")},d.prototype._encodeNull=function(){return this._createEncoderBuffer("")},d.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&&!c.isBuffer(e)){var t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=new c(t)}if(c.isBuffer(e)){var r=e.length;0===e.length&&r++;var n=new c(r);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]);r=1;for(var i=e;i>=256;i>>=8)r++;for(i=(n=new Array(r)).length-1;i>=0;i--)n[i]=255&e,e>>=8;return 128&n[0]&&n.unshift(0),this._createEncoderBuffer(new c(n))},d.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},d.prototype._use=function(e,a){return"function"==typeof e&&(e=e(a)),e._getEncoder("der").tree},d.prototype._skipDefault=function(e,a,t){var r,c=this._baseState;if(null===c.default)return!1;var n=e.join();if(void 0===c.defaultBuffer&&(c.defaultBuffer=this._encodeValue(c.default,a,t).join()),n.length!==c.defaultBuffer.length)return!1;for(r=0;r<n.length;r++)if(n[r]!==c.defaultBuffer[r])return!1;return!0}},function(e,a,t){var r=t(0),c=t(81),n=c.base,i=c.bignum,f=c.constants.der;function o(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new d,this.tree._init(e.body)}function d(e){n.Node.call(this,"der",e)}function s(e,a){var t=e.readUInt8(a);if(e.isError(t))return t;var r=f.tagClass[t>>6],c=0==(32&t);if(31==(31&t)){var n=t;for(t=0;128==(128&n);){if(n=e.readUInt8(a),e.isError(n))return n;t<<=7,t|=127&n}}else t&=31;return{cls:r,primitive:c,tag:t,tagStr:f.tag[t]}}function b(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 c=127&r;if(c>4)return e.error("length octect is too long");r=0;for(var n=0;n<c;n++){r<<=8;var i=e.readUInt8(t);if(e.isError(i))return i;r|=i}return r}e.exports=o,o.prototype.decode=function(e,a){return e instanceof n.DecoderBuffer||(e=new n.DecoderBuffer(e,a)),this.tree._decode(e,a)},r(d,n.Node),d.prototype._peekTag=function(e,a,t){if(e.isEmpty())return!1;var r=e.save(),c=s(e,'Failed to peek tag: "'+a+'"');return e.isError(c)?c:(e.restore(r),c.tag===a||c.tagStr===a||c.tagStr+"of"===a||t)},d.prototype._decodeTag=function(e,a,t){var r=s(e,'Failed to decode tag of "'+a+'"');if(e.isError(r))return r;var c=b(e,r.primitive,'Failed to get length of "'+a+'"');if(e.isError(c))return c;if(!t&&r.tag!==a&&r.tagStr!==a&&r.tagStr+"of"!==a)return e.error('Failed to match tag: "'+a+'"');if(r.primitive||null!==c)return e.skip(c,'Failed to match body of: "'+a+'"');var n=e.save(),i=this._skipUntilEnd(e,'Failed to skip indefinite length body: "'+this.tag+'"');return e.isError(i)?i:(c=e.offset-n.offset,e.restore(n),e.skip(c,'Failed to match body of: "'+a+'"'))},d.prototype._skipUntilEnd=function(e,a){for(;;){var t=s(e,a);if(e.isError(t))return t;var r,c=b(e,t.primitive,a);if(e.isError(c))return c;if(r=t.primitive||null!==c?e.skip(c):this._skipUntilEnd(e,a),e.isError(r))return r;if("end"===t.tagStr)break}},d.prototype._decodeList=function(e,a,t,r){for(var c=[];!e.isEmpty();){var n=this._peekTag(e,"end");if(e.isError(n))return n;var i=t.decode(e,"der",r);if(e.isError(i)&&n)break;c.push(i)}return c},d.prototype._decodeStr=function(e,a){if("bitstr"===a){var t=e.readUInt8();return e.isError(t)?t:{unused:t,data:e.raw()}}if("bmpstr"===a){var r=e.raw();if(r.length%2==1)return e.error("Decoding of string type: bmpstr length mismatch");for(var c="",n=0;n<r.length/2;n++)c+=String.fromCharCode(r.readUInt16BE(2*n));return c}if("numstr"===a){var i=e.raw().toString("ascii");return this._isNumstr(i)?i:e.error("Decoding of string type: numstr unsupported characters")}if("octstr"===a)return e.raw();if("objDesc"===a)return e.raw();if("printstr"===a){var f=e.raw().toString("ascii");return this._isPrintstr(f)?f:e.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(a)?e.raw().toString():e.error("Decoding of string type: "+a+" unsupported")},d.prototype._decodeObjid=function(e,a,t){for(var r,c=[],n=0;!e.isEmpty();){var i=e.readUInt8();n<<=7,n|=127&i,0==(128&i)&&(c.push(n),n=0)}128&i&&c.push(n);var f=c[0]/40|0,o=c[0]%40;if(r=t?c:[f,o].concat(c.slice(1)),a){var d=a[r.join(" ")];void 0===d&&(d=a[r.join(".")]),void 0!==d&&(r=d)}return r},d.prototype._decodeTime=function(e,a){var t=e.raw().toString();if("gentime"===a)var r=0|t.slice(0,4),c=0|t.slice(4,6),n=0|t.slice(6,8),i=0|t.slice(8,10),f=0|t.slice(10,12),o=0|t.slice(12,14);else{if("utctime"!==a)return e.error("Decoding "+a+" time is not supported yet");r=0|t.slice(0,2),c=0|t.slice(2,4),n=0|t.slice(4,6),i=0|t.slice(6,8),f=0|t.slice(8,10),o=0|t.slice(10,12);r=r<70?2e3+r:1900+r}return Date.UTC(r,c-1,n,i,f,o,0)},d.prototype._decodeNull=function(e){return null},d.prototype._decodeBool=function(e){var a=e.readUInt8();return e.isError(a)?a:0!==a},d.prototype._decodeInt=function(e,a){var t=e.raw(),r=new i(t);return a&&(r=a[r.toString(10)]||r),r},d.prototype._use=function(e,a){return"function"==typeof e&&(e=e(a)),e._getDecoder("der").tree}},function(e,a,t){var r=a;r._reverse=function(e){var a={};return Object.keys(e).forEach(function(t){(0|t)==t&&(t|=0);var r=e[t];a[r]=t}),a},r.der=t(756)},function(e,a,t){var r=t(0),c=t(80).Reporter,n=t(24).Buffer;function i(e,a){c.call(this,a),n.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error("Input not Buffer")}function f(e,a){if(Array.isArray(e))this.length=0,this.value=e.map(function(e){return e instanceof f||(e=new f(e,a)),this.length+=e.length,e},this);else if("number"==typeof e){if(!(0<=e&&e<=255))return a.error("non-byte EncoderBuffer value");this.value=e,this.length=1}else if("string"==typeof e)this.value=e,this.length=n.byteLength(e);else{if(!n.isBuffer(e))return a.error("Unsupported type: "+typeof e);this.value=e,this.length=e.length}}r(i,c),a.DecoderBuffer=i,i.prototype.save=function(){return{offset:this.offset,reporter:c.prototype.save.call(this)}},i.prototype.restore=function(e){var a=new i(this.base);return a.offset=e.offset,a.length=this.offset,this.offset=e.offset,c.prototype.restore.call(this,e.reporter),a},i.prototype.isEmpty=function(){return this.offset===this.length},i.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||"DecoderBuffer overrun")},i.prototype.skip=function(e,a){if(!(this.offset+e<=this.length))return this.error(a||"DecoderBuffer overrun");var t=new i(this.base);return t._reporterState=this._reporterState,t.offset=this.offset,t.length=this.offset+e,this.offset+=e,t},i.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},a.EncoderBuffer=f,f.prototype.join=function(e,a){return e||(e=new n(this.length)),a||(a=0),0===this.length?e:(Array.isArray(this.value)?this.value.forEach(function(t){t.join(e,a),a+=t.length}):("number"==typeof this.value?e[a]=this.value:"string"==typeof this.value?e.write(this.value,a):n.isBuffer(this.value)&&this.value.copy(e,a),a+=this.length),e)}},function(e,a,t){var r=t(761),c=t(750),n=t(749),i=t(297),f=t(170);function o(e){var a;"object"!=typeof e||Buffer.isBuffer(e)||(a=e.passphrase,e=e.key),"string"==typeof e&&(e=new Buffer(e));var t,o,d=n(e,a),s=d.tag,b=d.data;switch(s){case"CERTIFICATE":o=r.certificate.decode(b,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(o||(o=r.PublicKey.decode(b,"der")),t=o.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return r.RSAPublicKey.decode(o.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return o.subjectPrivateKey=o.subjectPublicKey,{type:"ec",data:o};case"1.2.840.10040.4.1":return o.algorithm.params.pub_key=r.DSAparam.decode(o.subjectPublicKey.data,"der"),{type:"dsa",data:o.algorithm.params};default:throw new Error("unknown key id "+t)}throw new Error("unknown key type "+s);case"ENCRYPTED PRIVATE KEY":b=function(e,a){var t=e.algorithm.decrypt.kde.kdeparams.salt,r=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),n=c[e.algorithm.decrypt.cipher.algo.join(".")],o=e.algorithm.decrypt.cipher.iv,d=e.subjectPrivateKey,s=parseInt(n.split("-")[1],10)/8,b=f.pbkdf2Sync(a,t,r,s),u=i.createDecipheriv(n,b,o),l=[];return l.push(u.update(d)),l.push(u.final()),Buffer.concat(l)}(b=r.EncryptedPrivateKey.decode(b,"der"),a);case"PRIVATE KEY":switch(t=(o=r.PrivateKey.decode(b,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return r.RSAPrivateKey.decode(o.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:o.algorithm.curve,privateKey:r.ECPrivateKey.decode(o.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return o.algorithm.params.priv_key=r.DSAparam.decode(o.subjectPrivateKey,"der"),{type:"dsa",params:o.algorithm.params};default:throw new Error("unknown key id "+t)}throw new Error("unknown key type "+s);case"RSA PUBLIC KEY":return r.RSAPublicKey.decode(b,"der");case"RSA PRIVATE KEY":return r.RSAPrivateKey.decode(b,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:r.DSAPrivateKey.decode(b,"der")};case"EC PRIVATE KEY":return{curve:(b=r.ECPrivateKey.decode(b,"der")).parameters.value,privateKey:b.privateKey};default:throw new Error("unknown key type "+s)}}e.exports=o,o.signature=r.signature},function(e,a){var t="0123456789abcdef".split(""),r=[1,256,65536,16777216],c=[0,8,16,24],n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],i=function(e){var a,t,r,c,i,f,o,d,s,b,u,l,p,h,m,g,v,y,_,w,A,k,x,E,S,T,j,C,R,O,B,M,N,I,P,F,L,D,z,q,U,H,V,G,W,Y,K,Q,Z,J,X,$,ee,ae,te,re,ce,ne,ie,fe,oe,de,se;for(r=0;r<48;r+=2)c=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],f=e[2]^e[12]^e[22]^e[32]^e[42],o=e[3]^e[13]^e[23]^e[33]^e[43],d=e[4]^e[14]^e[24]^e[34]^e[44],s=e[5]^e[15]^e[25]^e[35]^e[45],b=e[6]^e[16]^e[26]^e[36]^e[46],u=e[7]^e[17]^e[27]^e[37]^e[47],a=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(f<<1|o>>>31),t=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(o<<1|f>>>31),e[0]^=a,e[1]^=t,e[10]^=a,e[11]^=t,e[20]^=a,e[21]^=t,e[30]^=a,e[31]^=t,e[40]^=a,e[41]^=t,a=c^(d<<1|s>>>31),t=i^(s<<1|d>>>31),e[2]^=a,e[3]^=t,e[12]^=a,e[13]^=t,e[22]^=a,e[23]^=t,e[32]^=a,e[33]^=t,e[42]^=a,e[43]^=t,a=f^(b<<1|u>>>31),t=o^(u<<1|b>>>31),e[4]^=a,e[5]^=t,e[14]^=a,e[15]^=t,e[24]^=a,e[25]^=t,e[34]^=a,e[35]^=t,e[44]^=a,e[45]^=t,a=d^(l<<1|p>>>31),t=s^(p<<1|l>>>31),e[6]^=a,e[7]^=t,e[16]^=a,e[17]^=t,e[26]^=a,e[27]^=t,e[36]^=a,e[37]^=t,e[46]^=a,e[47]^=t,a=b^(c<<1|i>>>31),t=u^(i<<1|c>>>31),e[8]^=a,e[9]^=t,e[18]^=a,e[19]^=t,e[28]^=a,e[29]^=t,e[38]^=a,e[39]^=t,e[48]^=a,e[49]^=t,h=e[0],m=e[1],Y=e[11]<<4|e[10]>>>28,K=e[10]<<4|e[11]>>>28,C=e[20]<<3|e[21]>>>29,R=e[21]<<3|e[20]>>>29,fe=e[31]<<9|e[30]>>>23,oe=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,V=e[41]<<18|e[40]>>>14,I=e[2]<<1|e[3]>>>31,P=e[3]<<1|e[2]>>>31,g=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,Q=e[22]<<10|e[23]>>>22,Z=e[23]<<10|e[22]>>>22,O=e[33]<<13|e[32]>>>19,B=e[32]<<13|e[33]>>>19,de=e[42]<<2|e[43]>>>30,se=e[43]<<2|e[42]>>>30,ae=e[5]<<30|e[4]>>>2,te=e[4]<<30|e[5]>>>2,F=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,y=e[25]<<11|e[24]>>>21,_=e[24]<<11|e[25]>>>21,J=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,M=e[45]<<29|e[44]>>>3,N=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,S=e[7]<<28|e[6]>>>4,re=e[17]<<23|e[16]>>>9,ce=e[16]<<23|e[17]>>>9,D=e[26]<<25|e[27]>>>7,z=e[27]<<25|e[26]>>>7,w=e[36]<<21|e[37]>>>11,A=e[37]<<21|e[36]>>>11,$=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,G=e[8]<<27|e[9]>>>5,W=e[9]<<27|e[8]>>>5,T=e[18]<<20|e[19]>>>12,j=e[19]<<20|e[18]>>>12,ne=e[29]<<7|e[28]>>>25,ie=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,U=e[39]<<8|e[38]>>>24,k=e[48]<<14|e[49]>>>18,x=e[49]<<14|e[48]>>>18,e[0]=h^~g&y,e[1]=m^~v&_,e[10]=E^~T&C,e[11]=S^~j&R,e[20]=I^~F&D,e[21]=P^~L&z,e[30]=G^~Y&Q,e[31]=W^~K&Z,e[40]=ae^~re&ne,e[41]=te^~ce&ie,e[2]=g^~y&w,e[3]=v^~_&A,e[12]=T^~C&O,e[13]=j^~R&B,e[22]=F^~D&q,e[23]=L^~z&U,e[32]=Y^~Q&J,e[33]=K^~Z&X,e[42]=re^~ne&fe,e[43]=ce^~ie&oe,e[4]=y^~w&k,e[5]=_^~A&x,e[14]=C^~O&M,e[15]=R^~B&N,e[24]=D^~q&H,e[25]=z^~U&V,e[34]=Q^~J&$,e[35]=Z^~X&ee,e[44]=ne^~fe&de,e[45]=ie^~oe&se,e[6]=w^~k&h,e[7]=A^~x&m,e[16]=O^~M&E,e[17]=B^~N&S,e[26]=q^~H&I,e[27]=U^~V&P,e[36]=J^~$&G,e[37]=X^~ee&W,e[46]=fe^~de&ae,e[47]=oe^~se&te,e[8]=k^~h&g,e[9]=x^~m&v,e[18]=M^~E&T,e[19]=N^~S&j,e[28]=H^~I&F,e[29]=V^~P&L,e[38]=$^~G&Y,e[39]=ee^~W&K,e[48]=de^~ae&re,e[49]=se^~te&ce,e[0]^=n[r],e[1]^=n[r+1]},f=function(e){return function(a){var n;if("0x"===a.slice(0,2)){n=[];for(var f=2,o=a.length;f<o;f+=2)n.push(parseInt(a.slice(f,f+2),16))}else n=a;return function(e,a){for(var n,f=a.length,o=e.blocks,d=e.blockCount<<2,s=e.blockCount,b=e.outputBlocks,u=e.s,l=0;l<f;){if(e.reset)for(e.reset=!1,o[0]=e.block,m=1;m<s+1;++m)o[m]=0;if("string"!=typeof a)for(m=e.start;l<f&&m<d;++l)o[m>>2]|=a[l]<<c[3&m++];else for(m=e.start;l<f&&m<d;++l)(n=a.charCodeAt(l))<128?o[m>>2]|=n<<c[3&m++]:n<2048?(o[m>>2]|=(192|n>>6)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]):n<55296||n>=57344?(o[m>>2]|=(224|n>>12)<<c[3&m++],o[m>>2]|=(128|n>>6&63)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]):(n=65536+((1023&n)<<10|1023&a.charCodeAt(++l)),o[m>>2]|=(240|n>>18)<<c[3&m++],o[m>>2]|=(128|n>>12&63)<<c[3&m++],o[m>>2]|=(128|n>>6&63)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]);if(e.lastByteIndex=m,m>=d){for(e.start=m-d,e.block=o[s],m=0;m<s;++m)u[m]^=o[m];i(u),e.reset=!0}else e.start=m}if(o[(m=e.lastByteIndex)>>2]|=r[3&m],e.lastByteIndex===d)for(o[0]=o[s],m=1;m<s+1;++m)o[m]=0;for(o[s-1]|=2147483648,m=0;m<s;++m)u[m]^=o[m];i(u);for(var p,h="",m=0,g=0;g<b;){for(m=0;m<s&&g<b;++m,++g)p=u[m],h+=t[p>>4&15]+t[15&p]+t[p>>12&15]+t[p>>8&15]+t[p>>20&15]+t[p>>16&15]+t[p>>28&15]+t[p>>24&15];g%s==0&&(i(u),m=0)}return"0x"+h}(function(e){return{blocks:[],reset:!0,block:0,start:0,blockCount:1600-(e<<1)>>5,outputBlocks:e>>5,s:function(e){return[].concat(e,e,e,e,e)}([0,0,0,0,0,0,0,0,0,0])}}(e),n)}};e.exports={keccak256:f(256),keccak512:f(512),keccak256s:f(256),keccak512s:f(512)}},function(e,a){e.exports={encode:function(e){var a=function(e){return function(e){return e.length%2==0?e:"0"+e}(e.toString(16))},t=function(e,t){return e<56?a(t+e):a(t+a(e).length/2+55)+a(e)};return"0x"+function e(a){if("string"==typeof a){var r=a.slice(2);return(2!=r.length||r>="80"?t(r.length/2,128):"")+r}var c=a.map(e).join("");return t(c.length/2,192)+c}(e)},decode:function(e){var a=2,t=function(){if(a>=e.length)throw"";var t=e.slice(a,a+2);return t<"80"?(a+=2,"0x"+t):t<"c0"?c():n()},r=function(){var t=parseInt(e.slice(a,a+=2),16)%64;return t<56?t:parseInt(e.slice(a,a+=2*(t-55)),16)},c=function(){var t=r();return"0x"+e.slice(a,a+=2*t)},n=function(){for(var e=2*r()+a,c=[];a<e;)c.push(t());return c};try{return t()}catch(e){return[]}}}},function(e,a,t){var r=t(9),c=t(165),n=function(e){return new r(e.slice(2),16)},i=function(e){var a="0x"+("0x"===e.slice(0,2)?new r(e.slice(2),16):new r(e,10)).toString("hex");return"0x0"===a?"0x":a},f=function(e){return"string"==typeof e?/^0x/.test(e)?e:"0x"+e:"0x"+new r(e).toString("hex")},o=function(e){return n(e).toNumber()},d=function(e){return function(a,t){return function(e){return"0x"+e.toString("hex")}(n(a)[e](n(t)))}},s=d("add"),b=d("mul"),u=d("div"),l=d("sub");e.exports={toString:function(e){return n(e).toString(10)},fromString:i,toNumber:o,fromNumber:f,toEther:function(e){return o(u(e,i("10000000000")))/1e8},fromEther:function(e){return b(f(Math.floor(1e8*e)),i("10000000000"))},toUint256:function(e){return c.pad(32,e)},add:s,mul:b,div:u,sub:l}},function(e,a,t){var r=t(36),c=function(e,a,t){this.value=e||"",this.offset=a,this.rawValue=t};c.prototype.dynamicPartLength=function(){return this.dynamicPart().length/2},c.prototype.withOffset=function(e){return new c(this.value,e)},c.prototype.combine=function(e){return new c(this.value+e.value)},c.prototype.isDynamic=function(){return void 0!==this.offset},c.prototype.offsetAsBytes=function(){return this.isDynamic()?r.toTwosComplement(this.offset).replace("0x",""):""},c.prototype.staticPart=function(){return this.isDynamic()?this.offsetAsBytes():this.value},c.prototype.dynamicPart=function(){return this.isDynamic()?this.value:""},c.prototype.encode=function(){return this.staticPart()+this.dynamicPart()},c.encodeList=function(e){var a=32*e.length,t=e.map(function(e){if(!e.isDynamic())return e;var t=a;return a+=e.dynamicPartLength(),e.withOffset(t)});return t.reduce(function(e,a){return e+a.dynamicPart()},t.reduce(function(e,a){return e+a.staticPart()},""))},e.exports=c},function(e,a,t){var r=t(20),c=t(27),n=t(36),i=t(781),f=t(780),o=t(779),d=t(778),s=t(777),b=t(776),u=t(775),l=function(e,a){return e.isDynamicType(a)||e.isDynamicArray(a)};function p(){}var h=function(e){this._types=e};h.prototype._requireType=function(e){var a=this._types.filter(function(a){return a.isType(e)})[0];if(!a)throw Error("Invalid solidity type: "+e);return a},h.prototype._getOffsets=function(e,a){for(var t=a.map(function(a,t){return a.staticPartLength(e[t])}),r=1;r<t.length;r++)t[r]+=t[r-1];return t.map(function(t,r){return t-a[r].staticPartLength(e[r])})},h.prototype._getSolidityTypes=function(e){var a=this;return e.map(function(e){return a._requireType(e)})},h.prototype._encodeMultiWithOffset=function(e,a,t,r){var c="",i=this;return e.forEach(function(f,o){if(l(a[o],e[o])){c+=n.formatInputInt(r).encode();var d=i._encodeWithOffset(e[o],a[o],t[o],r);r+=d.length/2}else c+=i._encodeWithOffset(e[o],a[o],t[o],r)}),e.forEach(function(n,f){if(l(a[f],e[f])){var o=i._encodeWithOffset(e[f],a[f],t[f],r);r+=o.length/2,c+=o}}),c},h.prototype._encodeWithOffset=function(e,a,t,r){var c=this;return a.isDynamicArray(e)?function(){var i=a.nestedName(e),f=a.staticPartLength(i),o=t[0];return function(){var e=2;if(a.isDynamicArray(i))for(var c=1;c<t.length;c++)e+=+t[c-1][0]||0,o+=n.formatInputInt(r+c*f+32*e).encode()}(),function(){for(var e=0;e<t.length-1;e++){var n=o/2;o+=c._encodeWithOffset(i,a,t[e+1],r+n)}}(),o}():a.isStaticArray(e)?function(){var i=a.nestedName(e),f=a.staticPartLength(i),o="";return a.isDynamicArray(i)&&function(){for(var e=0,a=0;a<t.length;a++)e+=+(t[a-1]||[])[0]||0,o+=n.formatInputInt(r+a*f+32*e).encode()}(),function(){for(var e=0;e<t.length;e++){var n=o/2;o+=c._encodeWithOffset(i,a,t[e],r+n)}}(),o}():t},h.prototype.encodeFunctionSignature=function(e){return r.isObject(e)&&(e=c._jsonInterfaceMethodToString(e)),c.sha3(e).slice(0,10)},h.prototype.encodeEventSignature=function(e){return r.isObject(e)&&(e=c._jsonInterfaceMethodToString(e)),c.sha3(e)},h.prototype.encodeParameter=function(e,a){return this.encodeParameters([e],[a])},h.prototype.encodeParameters=function(e,a){r.isObject(e)&&e.inputs&&(e=r.map(e.inputs,function(e){return e.type}));var t=this._getSolidityTypes(e),c=t.map(function(t,r){return t.encode(a[r],e[r])}),n=t.reduce(function(a,r,c){var n=r.staticPartLength(e[c]),i=32*Math.floor((n+31)/32);return a+(l(t[c],e[c])?32:i)},0);return"0x"+this._encodeMultiWithOffset(e,t,c,n)},h.prototype.encodeFunctionCall=function(e,a){return this.encodeFunctionSignature(e)+this.encodeParameters(e,a).replace("0x","")},h.prototype.decodeParameter=function(e,a){if(!r.isString(e))throw new Error("Given parameter type is not a string: "+e);return this.decodeParameters([{type:e}],a)[0]},h.prototype.decodeParameters=function(e,a){var t=r.isArray(e)&&r.isString(e[0]),c=t?e:[];t||e.forEach(function(e){c.push(e.type)});var n=this._getSolidityTypes(c),i=this._getOffsets(c,n),f=new p;f.__length__=0;var o=0;return e.forEach(function(e,t){var d=n[o].decode(a.replace(/^0x/i,""),i[o],c[o],o);d="0x"===d?null:d,f[t]=d,r.isObject(e)&&e.name&&(f[e.name]=d),f.__length__++,o++}),f},h.prototype.decodeLog=function(e,a,t){a=a||"";var c=[],n=[];e.forEach(function(e,a){e.indexed?n[a]=e:c[a]=e});var i=a.slice(2),f=r.isArray(t)?t.map(function(e){return e.slice(2)}).join(""):t,o=this.decodeParameters(c,i),d=this.decodeParameters(n,f),s=new p;return s.__length__=0,e.forEach(function(e,a){s[a]="string"===e.type?"":null,o[a]&&(s[a]=o[a]),d[a]&&(s[a]=d[a]),e.name&&(s[e.name]=s[a]),s.__length__++}),s};var m=new h([new i,new f,new o,new d,new s,new u,new b]);e.exports=m},function(e,a,t){"use strict";var r=t(51),c=t(50),n=t(27),i=t(113),f=t(21).formatters,o=function(){var e=this;r.packageInit(this,arguments),this.net=new i(this.currentProvider);var a=null,t="latest";Object.defineProperty(this,"defaultAccount",{get:function(){return a},set:function(e){return e&&(a=n.toChecksumAddress(f.inputAddressFormatter(e))),o.forEach(function(e){e.defaultAccount=a}),e},enumerable:!0}),Object.defineProperty(this,"defaultBlock",{get:function(){return t},set:function(e){return t=e,o.forEach(function(e){e.defaultBlock=t}),e},enumerable:!0});var o=[new c({name:"getAccounts",call:"personal_listAccounts",params:0,outputFormatter:n.toChecksumAddress}),new c({name:"newAccount",call:"personal_newAccount",params:1,inputFormatter:[null],outputFormatter:n.toChecksumAddress}),new c({name:"unlockAccount",call:"personal_unlockAccount",params:3,inputFormatter:[f.inputAddressFormatter,null,null]}),new c({name:"lockAccount",call:"personal_lockAccount",params:1,inputFormatter:[f.inputAddressFormatter]}),new c({name:"importRawKey",call:"personal_importRawKey",params:2}),new c({name:"sendTransaction",call:"personal_sendTransaction",params:2,inputFormatter:[f.inputTransactionFormatter,null]}),new c({name:"signTransaction",call:"personal_signTransaction",params:2,inputFormatter:[f.inputTransactionFormatter,null]}),new c({name:"sign",call:"personal_sign",params:3,inputFormatter:[f.inputSignFormatter,f.inputAddressFormatter,null]}),new c({name:"ecRecover",call:"personal_ecRecover",params:2,inputFormatter:[f.inputSignFormatter,null]})];o.forEach(function(a){a.attachToObject(e),a.setRequestManager(e._requestManager),a.defaultBlock=e.defaultBlock,a.defaultAccount=e.defaultAccount})};r.addProviders(o),e.exports=o},function(e,a,t){"use strict";var r="function"!=typeof Object.create&&"~";function c(e,a,t){this.fn=e,this.context=a,this.once=t||!1}function n(){}n.prototype._events=void 0,n.prototype.listeners=function(e,a){var t=r?r+e:e,c=this._events&&this._events[t];if(a)return!!c;if(!c)return[];if(c.fn)return[c.fn];for(var n=0,i=c.length,f=new Array(i);n<i;n++)f[n]=c[n].fn;return f},n.prototype.emit=function(e,a,t,c,n,i){var f=r?r+e:e;if(!this._events||!this._events[f])return!1;var o,d,s=this._events[f],b=arguments.length;if("function"==typeof s.fn){switch(s.once&&this.removeListener(e,s.fn,void 0,!0),b){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,a),!0;case 3:return s.fn.call(s.context,a,t),!0;case 4:return s.fn.call(s.context,a,t,c),!0;case 5:return s.fn.call(s.context,a,t,c,n),!0;case 6:return s.fn.call(s.context,a,t,c,n,i),!0}for(d=1,o=new Array(b-1);d<b;d++)o[d-1]=arguments[d];s.fn.apply(s.context,o)}else{var u,l=s.length;for(d=0;d<l;d++)switch(s[d].once&&this.removeListener(e,s[d].fn,void 0,!0),b){case 1:s[d].fn.call(s[d].context);break;case 2:s[d].fn.call(s[d].context,a);break;case 3:s[d].fn.call(s[d].context,a,t);break;default:if(!o)for(u=1,o=new Array(b-1);u<b;u++)o[u-1]=arguments[u];s[d].fn.apply(s[d].context,o)}}return!0},n.prototype.on=function(e,a,t){var n=new c(a,t||this),i=r?r+e:e;return this._events||(this._events=r?{}:Object.create(null)),this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],n]:this._events[i].push(n):this._events[i]=n,this},n.prototype.once=function(e,a,t){var n=new c(a,t||this,!0),i=r?r+e:e;return this._events||(this._events=r?{}:Object.create(null)),this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],n]:this._events[i].push(n):this._events[i]=n,this},n.prototype.removeListener=function(e,a,t,c){var n=r?r+e:e;if(!this._events||!this._events[n])return this;var i=this._events[n],f=[];if(a)if(i.fn)(i.fn!==a||c&&!i.once||t&&i.context!==t)&&f.push(i);else for(var o=0,d=i.length;o<d;o++)(i[o].fn!==a||c&&!i[o].once||t&&i[o].context!==t)&&f.push(i[o]);return f.length?this._events[n]=1===f.length?f[0]:f:delete this._events[n],this},n.prototype.removeAllListeners=function(e){return this._events?(e?delete this._events[r?r+e:e]:this._events=r?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=r,e.exports=n},function(e,a,t){"use strict";var r=t(309),c=t(82),n=function(e){var a,t,n=new c(function(){a=arguments[0],t=arguments[1]});if(e)return{resolve:a,reject:t,eventEmitter:n};var i=new r;return n._events=i._events,n.emit=i.emit,n.on=i.on,n.once=i.once,n.off=i.off,n.listeners=i.listeners,n.addListener=i.addListener,n.removeListener=i.removeListener,n.removeAllListeners=i.removeAllListeners,{resolve:a,reject:t,eventEmitter:n}};n.resolve=function(e){var a=n(!0);return a.resolve(e),a.eventEmitter},e.exports=n},function(e,a,t){e.exports={EventTarget:t(798),Event:t(797)}},function(e,a,t){var r=t(799).strict;e.exports=function(e){if(r(e)){var a=Buffer.from(e.buffer);return e.byteLength!==e.buffer.byteLength&&(a=a.slice(e.byteOffset,e.byteOffset+e.byteLength)),a}return Buffer.from(e)}},function(e,a,t){var r=t(83),c=r.extend,n=t(1),i=t(5).EventEmitter,f=t(43),o=t(59),d=t(32),s=t(10),b=t(166),u=["(",")","<",">","@",",",";",":","\\",'"',"/","[","]","?","=","{","}"," ",String.fromCharCode(9)];function l(e){var a;(i.call(this),this.config={maxReceivedFrameSize:1048576,maxReceivedMessageSize:8388608,fragmentOutgoingMessages:!0,fragmentationThreshold:16384,webSocketVersion:13,assembleFragments:!0,disableNagleAlgorithm:!0,closeTimeout:5e3,tlsOptions:{}},e)&&(e.tlsOptions?(a=e.tlsOptions,delete e.tlsOptions):a={},c(this.config,e),c(this.config.tlsOptions,a));switch(this._req=null,this.config.webSocketVersion){case 8:case 13:break;default:throw new Error("Requested webSocketVersion is not supported. Allowed values are 8 and 13.")}}n.inherits(l,i),l.prototype.connect=function(e,a,t,n,i){var s=this;if("string"==typeof a&&(a=a.length>0?[a]:[]),a instanceof Array||(a=[]),this.protocols=a,this.origin=t,this.url="string"==typeof e?d.parse(e):e,!this.url.protocol)throw new Error("You must specify a full WebSocket URL, including protocol.");if(!this.url.host)throw new Error("You must specify a full WebSocket URL, including hostname. Relative URLs are not supported.");this.secure="wss:"===this.url.protocol,this.protocols.forEach(function(e){for(var a=0;a<e.length;a++){var t=e.charCodeAt(a),r=e.charAt(a);if(t<33||t>126||-1!==u.indexOf(r))throw new Error('Protocol list contains invalid character "'+String.fromCharCode(t)+'"')}});this.url.port||(this.url.port={"ws:":"80","wss:":"443"}[this.url.protocol]);for(var b=new Buffer(16),l=0;l<16;l++)b[l]=Math.round(255*Math.random());this.base64nonce=b.toString("base64");var p=this.url.hostname;("ws:"===this.url.protocol&&"80"!==this.url.port||"wss:"===this.url.protocol&&"443"!==this.url.port)&&(p+=":"+this.url.port);var h,m=n||{};function g(e){s._req=null,s.emit("connectFailed",e)}c(m,{Upgrade:"websocket",Connection:"Upgrade","Sec-WebSocket-Version":this.config.webSocketVersion.toString(10),"Sec-WebSocket-Key":this.base64nonce,Host:m.Host||p}),this.protocols.length>0&&(m["Sec-WebSocket-Protocol"]=this.protocols.join(", ")),this.origin&&(13===this.config.webSocketVersion?m.Origin=this.origin:8===this.config.webSocketVersion&&(m["Sec-WebSocket-Origin"]=this.origin)),h=this.url.pathname?this.url.path:this.url.path?"/"+this.url.path:"/";var v={agent:!1};if(i&&c(v,i),c(v,{hostname:this.url.hostname,port:this.url.port,method:"GET",path:h,headers:m}),this.secure)for(var y in s.config.tlsOptions)s.config.tlsOptions.hasOwnProperty(y)&&(v[y]=s.config.tlsOptions[y]);var _=this._req=(this.secure?o:f).request(v);_.on("upgrade",function(e,a,t){s._req=null,_.removeListener("error",g),s.socket=a,s.response=e,s.firstDataChunk=t,s.validateHandshake()}),_.on("error",g),_.on("response",function(e){if(s._req=null,r.eventEmitterListenerCount(s,"httpResponse")>0)s.emit("httpResponse",e,s),e.socket&&e.socket.end();else{var a=[];for(var t in e.headers)a.push(t+": "+e.headers[t]);s.failHandshake("Server responded with a non-101 status: "+e.statusCode+" "+e.statusMessage+"\nResponse Headers Follow:\n"+a.join("\n")+"\n")}}),_.end()},l.prototype.validateHandshake=function(){var e=this.response.headers;if(this.protocols.length>0){if(this.protocol=e["sec-websocket-protocol"],!this.protocol)return void this.failHandshake("Expected a Sec-WebSocket-Protocol header.");if(-1===this.protocols.indexOf(this.protocol))return void this.failHandshake("Server did not respond with a requested protocol.")}if(e.connection&&"upgrade"===e.connection.toLocaleLowerCase())if(e.upgrade&&"websocket"===e.upgrade.toLocaleLowerCase()){var a=s.createHash("sha1");a.update(this.base64nonce+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11");var t=a.digest("base64");e["sec-websocket-accept"]?e["sec-websocket-accept"]===t?this.succeedHandshake():this.failHandshake("Sec-WebSocket-Accept header from server didn't match expected value of "+t):this.failHandshake("Expected Sec-WebSocket-Accept header from server")}else this.failHandshake("Expected an Upgrade: websocket header from the server");else this.failHandshake("Expected a Connection: Upgrade header from the server")},l.prototype.failHandshake=function(e){this.socket&&this.socket.writable&&this.socket.end(),this.emit("connectFailed",new Error(e))},l.prototype.succeedHandshake=function(){var e=new b(this.socket,[],this.protocol,!0,this.config);e.webSocketVersion=this.config.webSocketVersion,e._addSocketEventListeners(),this.emit("connect",e),this.firstDataChunk.length>0&&e.handleSocketData(this.firstDataChunk),this.firstDataChunk=null},l.prototype.abort=function(){this._req&&this._req.abort()},e.exports=l},function(e,a,t){var r=t(807).BufferUtil;const c=1;function n(e,a,t){this.maskBytes=e,this.frameHeader=a,this.config=t,this.maxReceivedFrameSize=t.maxReceivedFrameSize,this.protocolError=!1,this.frameTooLarge=!1,this.invalidCloseFrameLength=!1,this.parseState=c,this.closeStatus=-1}n.prototype.addData=function(e){if(this.parseState===c&&e.length>=2){e.joinInto(this.frameHeader,0,0,2),e.advance(2);var a=this.frameHeader[0],t=this.frameHeader[1];if(this.fin=Boolean(128&a),this.rsv1=Boolean(64&a),this.rsv2=Boolean(32&a),this.rsv3=Boolean(16&a),this.mask=Boolean(128&t),this.opcode=15&a,this.length=127&t,this.opcode>=8){if(this.length>125)return this.protocolError=!0,this.dropReason="Illegal control frame longer than 125 bytes.",!0;if(!this.fin)return this.protocolError=!0,this.dropReason="Control frames must not be fragmented.",!0}126===this.length?this.parseState=2:127===this.length?this.parseState=3:this.parseState=4}if(2===this.parseState)e.length>=2&&(e.joinInto(this.frameHeader,2,0,2),e.advance(2),this.length=this.frameHeader.readUInt16BE(2),this.parseState=4);else if(3===this.parseState&&e.length>=8){e.joinInto(this.frameHeader,2,0,8),e.advance(8);var n=[this.frameHeader.readUInt32BE(2),this.frameHeader.readUInt32BE(6)];if(0!==n[0])return this.protocolError=!0,this.dropReason="Unsupported 64-bit length frame received",!0;this.length=n[1],this.parseState=4}if(4===this.parseState&&(this.mask?e.length>=4&&(e.joinInto(this.maskBytes,0,0,4),e.advance(4),this.parseState=5):this.parseState=5),5===this.parseState){if(this.length>this.maxReceivedFrameSize)return this.frameTooLarge=!0,this.dropReason="Frame size of "+this.length.toString(10)+" bytes exceeds maximum accepted frame size",!0;if(0===this.length)return this.binaryPayload=new Buffer(0),this.parseState=6,!0;if(e.length>=this.length)return this.binaryPayload=e.take(this.length),e.advance(this.length),this.mask&&r.unmask(this.binaryPayload,this.maskBytes),8===this.opcode&&(1===this.length&&(this.binaryPayload=new Buffer(0),this.invalidCloseFrameLength=!0),this.length>=2&&(this.closeStatus=this.binaryPayload.readUInt16BE(0),this.binaryPayload=this.binaryPayload.slice(2))),this.parseState=6,!0}return!1},n.prototype.throwAwayPayload=function(e){return e.length>=this.length&&(e.advance(this.length),this.parseState=6,!0)},n.prototype.toBuffer=function(e){var a,t,c,n=2,i=0,f=0;this.fin&&(i|=128),this.rsv1&&(i|=64),this.rsv2&&(i|=32),this.rsv3&&(i|=16),this.mask&&(f|=128),i|=15&this.opcode,8===this.opcode?(this.length=2,this.binaryPayload&&(this.length+=this.binaryPayload.length),(t=new Buffer(this.length)).writeUInt16BE(this.closeStatus,0),this.length>2&&this.binaryPayload.copy(t,2)):this.binaryPayload?(t=this.binaryPayload,this.length=t.length):this.length=0,this.length<=125?f|=127&this.length:this.length>125&&this.length<=65535?(f|=126,n+=2):this.length>65535&&(f|=127,n+=8);var o=new Buffer(this.length+n+(this.mask?4:0));return o[0]=i,o[1]=f,c=2,this.length>125&&this.length<=65535?(o.writeUInt16BE(this.length,c),c+=2):this.length>65535&&(o.writeUInt32BE(0,c),o.writeUInt32BE(this.length,c+4),c+=8),this.mask?(a=e?0:4294967295*Math.random()>>>0,this.maskBytes.writeUInt32BE(a,0),this.maskBytes.copy(o,c),c+=4,t&&r.mask(t,this.maskBytes,o,c,this.length)):t&&t.copy(o,c),o},n.prototype.toString=function(){return"Opcode: "+this.opcode+", fin: "+this.fin+", length: "+this.length+", hasPayload: "+Boolean(this.binaryPayload)+", masked: "+this.mask},e.exports=n},function(e,a,t){for(var r=t(10),c=t(1),n=t(32),i=t(5).EventEmitter,f=t(166),o=/,\s*/,d=/;\s*/,s=/[\r\n]/g,b=/,\s*/,u=["(",")","<",">","@",",",";",":","\\",'"',"/","[","]","?","=","{","}"," ",String.fromCharCode(9)],l=[String.fromCharCode(127)],p=0;p<31;p++)l.push(String.fromCharCode(p));var h=/([\x00-\x20\x22\x28\x29\x2c\x2f\x3a-\x3f\x40\x5b-\x5e\x7b\x7d\x7f])/,m=/[^\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]/,g=/^"[^"]*"$/,v=/[\x00-\x20\x3b]/g,y=/[;,] */,_={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",406:"Not Acceptable",407:"Proxy Authorization Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Long",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};function w(e,a,t){i.call(this),this.socket=e,this.httpRequest=a,this.resource=a.url,this.remoteAddress=e.remoteAddress,this.remoteAddresses=[this.remoteAddress],this.serverConfig=t,this._socketIsClosing=!1,this._socketCloseHandler=this._handleSocketCloseBeforeAccept.bind(this),this.socket.on("end",this._socketCloseHandler),this.socket.on("close",this._socketCloseHandler),this._resolved=!1}function A(e){process.nextTick(function(){e.drop(1006,"TCP connection lost before handshake completed.",!0)})}c.inherits(w,i),w.prototype.readHandshake=function(){var e=this,a=this.httpRequest;if(this.resourceURL=n.parse(this.resource,!0),this.host=a.headers.host,!this.host)throw new Error("Client must provide a Host header.");if(this.key=a.headers["sec-websocket-key"],!this.key)throw new Error("Client must provide a value for Sec-WebSocket-Key.");if(this.webSocketVersion=parseInt(a.headers["sec-websocket-version"],10),!this.webSocketVersion||isNaN(this.webSocketVersion))throw new Error("Client must provide a value for Sec-WebSocket-Version.");switch(this.webSocketVersion){case 8:case 13:break;default:var t=new Error("Unsupported websocket client version: "+this.webSocketVersion+"Only versions 8 and 13 are supported.");throw t.httpCode=426,t.headers={"Sec-WebSocket-Version":"13"},t}13===this.webSocketVersion?this.origin=a.headers.origin:8===this.webSocketVersion&&(this.origin=a.headers["sec-websocket-origin"]);var r=a.headers["sec-websocket-protocol"];(this.protocolFullCaseMap={},this.requestedProtocols=[],r)&&r.split(o).forEach(function(a){var t=a.toLocaleLowerCase();e.requestedProtocols.push(t),e.protocolFullCaseMap[t]=a});if(!this.serverConfig.ignoreXForwardedFor&&a.headers["x-forwarded-for"]){var c=this.remoteAddress;this.remoteAddresses=a.headers["x-forwarded-for"].split(b),this.remoteAddresses.push(c),this.remoteAddress=this.remoteAddresses[0]}var i=a.headers["sec-websocket-extensions"];this.requestedExtensions=this.parseExtensions(i);var f=a.headers.cookie;this.cookies=this.parseCookies(f)},w.prototype.parseExtensions=function(e){if(!e||0===e.length)return[];var a=e.toLocaleLowerCase().split(o);return a.forEach(function(e,a,t){var r=e.split(d),c=r[0],n=r.slice(1);n.forEach(function(e,a,t){var r=e.split("="),c={name:r[0],value:r[1]};t.splice(a,1,c)});var i={name:c,params:n};t.splice(a,1,i)}),a},w.prototype.parseCookies=function(e){if(!e||"string"!=typeof e)return[];var a=[];return e.split(y).forEach(function(e){var t=e.indexOf("=");if(-1!==t){var r=e.substr(0,t).trim(),c=e.substr(++t,e.length).trim();'"'===c[0]&&(c=c.slice(1,-1)),a.push({name:r,value:decodeURIComponent(c)})}else a.push({name:e,value:null})}),a},w.prototype.accept=function(e,a,t){var c;this._verifyResolution(),e?void 0===(c=this.protocolFullCaseMap[e.toLocaleLowerCase()])&&(c=e):c=e,this.protocolFullCaseMap=null;var n=r.createHash("sha1");n.update(this.key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11");var i="HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "+n.digest("base64")+"\r\n";if(c){for(var o=0;o<c.length;o++){var d=c.charCodeAt(o),b=c.charAt(o);if(d<33||d>126||-1!==u.indexOf(b))throw this.reject(500),new Error('Illegal character "'+String.fromCharCode(b)+'" in subprotocol.')}if(-1===this.requestedProtocols.indexOf(e))throw this.reject(500),new Error("Specified protocol was not requested by the client.");c=c.replace(s,""),i+="Sec-WebSocket-Protocol: "+c+"\r\n"}if(this.requestedProtocols=null,a&&(a=a.replace(s,""),13===this.webSocketVersion?i+="Origin: "+a+"\r\n":8===this.webSocketVersion&&(i+="Sec-WebSocket-Origin: "+a+"\r\n")),t){if(!Array.isArray(t))throw this.reject(500),new Error('Value supplied for "cookies" argument must be an array.');var l={};t.forEach(function(e){if(!e.name||!e.value)throw this.reject(500),new Error('Each cookie to set must at least provide a "name" and "value"');if(e.name=e.name.replace(v,""),e.value=e.value.replace(v,""),l[e.name])throw this.reject(500),new Error("You may not specify the same cookie name twice.");l[e.name]=!0;var a=e.name.match(h);if(a)throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie name");if(a=e.value.match(g)?e.value.slice(1,-1).match(m):e.value.match(m))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie value");var t=[e.name+"="+e.value];if(e.path){if(a=e.path.match(v))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie path");t.push("Path="+e.path)}if(e.domain){if("string"!=typeof e.domain)throw this.reject(500),new Error("Domain must be specified and must be a string.");if(a=e.domain.match(v))throw this.reject(500),new Error("Illegal character "+a[0]+" in cookie domain");t.push("Domain="+e.domain.toLowerCase())}if(e.expires){if(!(e.expires instanceof Date))throw this.reject(500),new Error('Value supplied for cookie "expires" must be a vaild date object');t.push("Expires="+e.expires.toGMTString())}if(e.maxage){var r=e.maxage;if("string"==typeof r&&(r=parseInt(r,10)),isNaN(r)||r<=0)throw this.reject(500),new Error('Value supplied for cookie "maxage" must be a non-zero number');r=Math.round(r),t.push("Max-Age="+r.toString(10))}if(e.secure){if("boolean"!=typeof e.secure)throw this.reject(500),new Error('Value supplied for cookie "secure" must be of type boolean');t.push("Secure")}if(e.httponly){if("boolean"!=typeof e.httponly)throw this.reject(500),new Error('Value supplied for cookie "httponly" must be of type boolean');t.push("HttpOnly")}i+="Set-Cookie: "+t.join(";")+"\r\n"}.bind(this))}this._resolved=!0,this.emit("requestResolved",this),i+="\r\n";var p=new f(this.socket,[],e,!1,this.serverConfig);p.webSocketVersion=this.webSocketVersion,p.remoteAddress=this.remoteAddress,p.remoteAddresses=this.remoteAddresses;var y=this;return this._socketIsClosing?A(p):this.socket.write(i,"ascii",function(e){e?A(p):(y._removeSocketCloseListeners(),p._addSocketEventListeners())}),this.emit("requestAccepted",p),p},w.prototype.reject=function(e,a,t){this._verifyResolution(),this._resolved=!0,this.emit("requestResolved",this),"number"!=typeof e&&(e=403);var r="HTTP/1.1 "+e+" "+_[e]+"\r\nConnection: close\r\n";if(a&&(r+="X-WebSocket-Reject-Reason: "+(a=a.replace(s,""))+"\r\n"),t)for(var c in t){var n=t[c].toString().replace(s,"");r+=c.replace(s,"")+": "+n+"\r\n"}r+="\r\n",this.socket.end(r,"ascii"),this.emit("requestRejected",this)},w.prototype._handleSocketCloseBeforeAccept=function(){this._socketIsClosing=!0,this._removeSocketCloseListeners()},w.prototype._removeSocketCloseListeners=function(){this.socket.removeListener("end",this._socketCloseHandler),this.socket.removeListener("close",this._socketCloseHandler)},w.prototype._verifyResolution=function(){if(this._resolved)throw new Error("WebSocketRequest may only be accepted or rejected one time.")},e.exports=w},function(e,a,t){var r;function c(e){function t(){if(t.enabled){var e=t,c=+new Date,n=c-(r||c);e.diff=n,e.prev=r,e.curr=c,r=c;for(var i=new Array(arguments.length),f=0;f<i.length;f++)i[f]=arguments[f];i[0]=a.coerce(i[0]),"string"!=typeof i[0]&&i.unshift("%O");var o=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(t,r){if("%%"===t)return t;o++;var c=a.formatters[r];if("function"==typeof c){var n=i[o];t=c.call(e,n),i.splice(o,1),o--}return t}),a.formatArgs.call(e,i),(t.log||a.log||console.log.bind(console)).apply(e,i)}}return t.namespace=e,t.enabled=a.enabled(e),t.useColors=a.useColors(),t.color=function(e){var t,r=0;for(t in e)r=(r<<5)-r+e.charCodeAt(t),r|=0;return a.colors[Math.abs(r)%a.colors.length]}(e),"function"==typeof a.init&&a.init(t),t}(a=e.exports=c.debug=c.default=c).coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){a.enable("")},a.enable=function(e){a.save(e),a.names=[],a.skips=[];for(var t=("string"==typeof e?e:"").split(/[\s,]+/),r=t.length,c=0;c<r;c++)t[c]&&("-"===(e=t[c].replace(/\*/g,".*?"))[0]?a.skips.push(new RegExp("^"+e.substr(1)+"$")):a.names.push(new RegExp("^"+e+"$")))},a.enabled=function(e){var t,r;for(t=0,r=a.skips.length;t<r;t++)if(a.skips[t].test(e))return!1;for(t=0,r=a.names.length;t<r;t++)if(a.names[t].test(e))return!0;return!1},a.humanize=t(811),a.names=[],a.skips=[],a.formatters={}},function(e,a,t){"use strict";var r={messageId:0,toPayload:function(e,a){if(!e)throw new Error('JSONRPC method should be specified for params: "'+JSON.stringify(a)+'"!');return r.messageId++,{jsonrpc:"2.0",id:r.messageId,method:e,params:a||[]}},isValidResponse:function(e){return Array.isArray(e)?e.every(a):a(e);function a(e){return!(!e||e.error||"2.0"!==e.jsonrpc||"number"!=typeof e.id&&"string"!=typeof e.id||void 0===e.result)}},toBatchPayload:function(e){return e.map(function(e){return r.toPayload(e.method,e.params)})}};e.exports=r},function(e,a,t){"use strict";var r=t(27),c=t(9),n=function(e){var a="A".charCodeAt(0),t="Z".charCodeAt(0);return(e=(e=e.toUpperCase()).substr(4)+e.substr(0,4)).split("").map(function(e){var r=e.charCodeAt(0);return r>=a&&r<=t?r-a+10:e}).join("")},i=function(e){for(var a,t=e;t.length>2;)a=t.slice(0,9),t=parseInt(a,10)%97+t.slice(a.length);return parseInt(t,10)%97},f=function(e){this._iban=e};f.toAddress=function(e){if(!(e=new f(e)).isDirect())throw new Error("IBAN is indirect and can't be converted");return e.toAddress()},f.toIban=function(e){return f.fromAddress(e).toString()},f.fromAddress=function(e){if(!r.isAddress(e))throw new Error("Provided address is not a valid address: "+e);e=e.replace("0x","").replace("0X","");var a=function(e,a){for(var t=e;t.length<2*a;)t="0"+t;return t}(new c(e,16).toString(36),15);return f.fromBban(a.toUpperCase())},f.fromBban=function(e){var a=("0"+(98-i(n("XE00"+e)))).slice(-2);return new f("XE"+a+e)},f.createIndirect=function(e){return f.fromBban("ETH"+e.institution+e.identifier)},f.isValid=function(e){return new f(e).isValid()},f.prototype.isValid=function(){return/^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban)&&1===i(n(this._iban))},f.prototype.isDirect=function(){return 34===this._iban.length||35===this._iban.length},f.prototype.isIndirect=function(){return 20===this._iban.length},f.prototype.checksum=function(){return this._iban.substr(2,2)},f.prototype.institution=function(){return this.isIndirect()?this._iban.substr(7,4):""},f.prototype.client=function(){return this.isIndirect()?this._iban.substr(11):""},f.prototype.toAddress=function(){if(this.isDirect()){var e=this._iban.substr(4),a=new c(e,36);return r.toChecksumAddress(a.toString(16,20))}return""},f.prototype.toString=function(){return this._iban},e.exports=f},function(e,a){var t="0123456789abcdef".split(""),r=[1,256,65536,16777216],c=[0,8,16,24],n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],i=function(e){var a,t,r,c,i,f,o,d,s,b,u,l,p,h,m,g,v,y,_,w,A,k,x,E,S,T,j,C,R,O,B,M,N,I,P,F,L,D,z,q,U,H,V,G,W,Y,K,Q,Z,J,X,$,ee,ae,te,re,ce,ne,ie,fe,oe,de,se;for(r=0;r<48;r+=2)c=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],f=e[2]^e[12]^e[22]^e[32]^e[42],o=e[3]^e[13]^e[23]^e[33]^e[43],d=e[4]^e[14]^e[24]^e[34]^e[44],s=e[5]^e[15]^e[25]^e[35]^e[45],b=e[6]^e[16]^e[26]^e[36]^e[46],u=e[7]^e[17]^e[27]^e[37]^e[47],a=(l=e[8]^e[18]^e[28]^e[38]^e[48])^(f<<1|o>>>31),t=(p=e[9]^e[19]^e[29]^e[39]^e[49])^(o<<1|f>>>31),e[0]^=a,e[1]^=t,e[10]^=a,e[11]^=t,e[20]^=a,e[21]^=t,e[30]^=a,e[31]^=t,e[40]^=a,e[41]^=t,a=c^(d<<1|s>>>31),t=i^(s<<1|d>>>31),e[2]^=a,e[3]^=t,e[12]^=a,e[13]^=t,e[22]^=a,e[23]^=t,e[32]^=a,e[33]^=t,e[42]^=a,e[43]^=t,a=f^(b<<1|u>>>31),t=o^(u<<1|b>>>31),e[4]^=a,e[5]^=t,e[14]^=a,e[15]^=t,e[24]^=a,e[25]^=t,e[34]^=a,e[35]^=t,e[44]^=a,e[45]^=t,a=d^(l<<1|p>>>31),t=s^(p<<1|l>>>31),e[6]^=a,e[7]^=t,e[16]^=a,e[17]^=t,e[26]^=a,e[27]^=t,e[36]^=a,e[37]^=t,e[46]^=a,e[47]^=t,a=b^(c<<1|i>>>31),t=u^(i<<1|c>>>31),e[8]^=a,e[9]^=t,e[18]^=a,e[19]^=t,e[28]^=a,e[29]^=t,e[38]^=a,e[39]^=t,e[48]^=a,e[49]^=t,h=e[0],m=e[1],Y=e[11]<<4|e[10]>>>28,K=e[10]<<4|e[11]>>>28,C=e[20]<<3|e[21]>>>29,R=e[21]<<3|e[20]>>>29,fe=e[31]<<9|e[30]>>>23,oe=e[30]<<9|e[31]>>>23,H=e[40]<<18|e[41]>>>14,V=e[41]<<18|e[40]>>>14,I=e[2]<<1|e[3]>>>31,P=e[3]<<1|e[2]>>>31,g=e[13]<<12|e[12]>>>20,v=e[12]<<12|e[13]>>>20,Q=e[22]<<10|e[23]>>>22,Z=e[23]<<10|e[22]>>>22,O=e[33]<<13|e[32]>>>19,B=e[32]<<13|e[33]>>>19,de=e[42]<<2|e[43]>>>30,se=e[43]<<2|e[42]>>>30,ae=e[5]<<30|e[4]>>>2,te=e[4]<<30|e[5]>>>2,F=e[14]<<6|e[15]>>>26,L=e[15]<<6|e[14]>>>26,y=e[25]<<11|e[24]>>>21,_=e[24]<<11|e[25]>>>21,J=e[34]<<15|e[35]>>>17,X=e[35]<<15|e[34]>>>17,M=e[45]<<29|e[44]>>>3,N=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,S=e[7]<<28|e[6]>>>4,re=e[17]<<23|e[16]>>>9,ce=e[16]<<23|e[17]>>>9,D=e[26]<<25|e[27]>>>7,z=e[27]<<25|e[26]>>>7,w=e[36]<<21|e[37]>>>11,A=e[37]<<21|e[36]>>>11,$=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,G=e[8]<<27|e[9]>>>5,W=e[9]<<27|e[8]>>>5,T=e[18]<<20|e[19]>>>12,j=e[19]<<20|e[18]>>>12,ne=e[29]<<7|e[28]>>>25,ie=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,U=e[39]<<8|e[38]>>>24,k=e[48]<<14|e[49]>>>18,x=e[49]<<14|e[48]>>>18,e[0]=h^~g&y,e[1]=m^~v&_,e[10]=E^~T&C,e[11]=S^~j&R,e[20]=I^~F&D,e[21]=P^~L&z,e[30]=G^~Y&Q,e[31]=W^~K&Z,e[40]=ae^~re&ne,e[41]=te^~ce&ie,e[2]=g^~y&w,e[3]=v^~_&A,e[12]=T^~C&O,e[13]=j^~R&B,e[22]=F^~D&q,e[23]=L^~z&U,e[32]=Y^~Q&J,e[33]=K^~Z&X,e[42]=re^~ne&fe,e[43]=ce^~ie&oe,e[4]=y^~w&k,e[5]=_^~A&x,e[14]=C^~O&M,e[15]=R^~B&N,e[24]=D^~q&H,e[25]=z^~U&V,e[34]=Q^~J&$,e[35]=Z^~X&ee,e[44]=ne^~fe&de,e[45]=ie^~oe&se,e[6]=w^~k&h,e[7]=A^~x&m,e[16]=O^~M&E,e[17]=B^~N&S,e[26]=q^~H&I,e[27]=U^~V&P,e[36]=J^~$&G,e[37]=X^~ee&W,e[46]=fe^~de&ae,e[47]=oe^~se&te,e[8]=k^~h&g,e[9]=x^~m&v,e[18]=M^~E&T,e[19]=N^~S&j,e[28]=H^~I&F,e[29]=V^~P&L,e[38]=$^~G&Y,e[39]=ee^~W&K,e[48]=de^~ae&re,e[49]=se^~te&ce,e[0]^=n[r],e[1]^=n[r+1]},f=function(e){return function(a){var n;if("0x"===a.slice(0,2)){n=[];for(var f=2,o=a.length;f<o;f+=2)n.push(parseInt(a.slice(f,f+2),16))}else n=a;return function(e,a){for(var n,f=a.length,o=e.blocks,d=e.blockCount<<2,s=e.blockCount,b=e.outputBlocks,u=e.s,l=0;l<f;){if(e.reset)for(e.reset=!1,o[0]=e.block,m=1;m<s+1;++m)o[m]=0;if("string"!=typeof a)for(m=e.start;l<f&&m<d;++l)o[m>>2]|=a[l]<<c[3&m++];else for(m=e.start;l<f&&m<d;++l)(n=a.charCodeAt(l))<128?o[m>>2]|=n<<c[3&m++]:n<2048?(o[m>>2]|=(192|n>>6)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]):n<55296||n>=57344?(o[m>>2]|=(224|n>>12)<<c[3&m++],o[m>>2]|=(128|n>>6&63)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]):(n=65536+((1023&n)<<10|1023&a.charCodeAt(++l)),o[m>>2]|=(240|n>>18)<<c[3&m++],o[m>>2]|=(128|n>>12&63)<<c[3&m++],o[m>>2]|=(128|n>>6&63)<<c[3&m++],o[m>>2]|=(128|63&n)<<c[3&m++]);if(e.lastByteIndex=m,m>=d){for(e.start=m-d,e.block=o[s],m=0;m<s;++m)u[m]^=o[m];i(u),e.reset=!0}else e.start=m}if(o[(m=e.lastByteIndex)>>2]|=r[3&m],e.lastByteIndex===d)for(o[0]=o[s],m=1;m<s+1;++m)o[m]=0;for(o[s-1]|=2147483648,m=0;m<s;++m)u[m]^=o[m];i(u);for(var p,h="",m=0,g=0;g<b;){for(m=0;m<s&&g<b;++m,++g)p=u[m],h+=t[p>>4&15]+t[15&p]+t[p>>12&15]+t[p>>8&15]+t[p>>20&15]+t[p>>16&15]+t[p>>28&15]+t[p>>24&15];g%s==0&&(i(u),m=0)}return"0x"+h}(function(e){return{blocks:[],reset:!0,block:0,start:0,blockCount:1600-(e<<1)>>5,outputBlocks:e>>5,s:function(e){return[].concat(e,e,e,e,e)}([0,0,0,0,0,0,0,0,0,0])}}(e),n)}};e.exports={keccak256:f(256),keccak512:f(512),keccak256s:f(256),keccak512s:f(512)}},function(e,a,t){var r=t(20),c=t(9),n=t(321),i=t(822),f=t(319),o=function(e){return e instanceof c||e&&e.constructor&&"BN"===e.constructor.name},d=function(e){return e&&e.constructor&&"BigNumber"===e.constructor.name},s=function(e){try{return n.apply(null,arguments)}catch(a){throw new Error(a+' Given value: "'+e+'"')}},b=function(e){return!!/^(0x)?[0-9a-f]{40}$/i.test(e)&&(!(!/^(0x|0X)?[0-9a-f]{40}$/.test(e)&&!/^(0x|0X)?[0-9A-F]{40}$/.test(e))||u(e))},u=function(e){e=e.replace(/^0x/i,"");for(var a=g(e.toLowerCase()).replace(/^0x/i,""),t=0;t<40;t++)if(parseInt(a[t],16)>7&&e[t].toUpperCase()!==e[t]||parseInt(a[t],16)<=7&&e[t].toLowerCase()!==e[t])return!1;return!0},l=function(e){var a="";e=(e=(e=(e=(e=i.encode(e)).replace(/^(?:\u0000)*/,"")).split("").reverse().join("")).replace(/^(?:\u0000)*/,"")).split("").reverse().join("");for(var t=0;t<e.length;t++){var r=e.charCodeAt(t).toString(16);a+=r.length<2?"0"+r:r}return"0x"+a},p=function(e){if(r.isNull(e)||r.isUndefined(e))return e;if(!isFinite(e)&&!m(e))throw new Error('Given input "'+e+'" is not a number.');var a=s(e),t=a.toString(16);return a.lt(new c(0))?"-0x"+t.substr(1):"0x"+t},h=function(e){if(e=e.toString(16),!m(e))throw new Error('Given value "'+e+'" is not a valid hex string.');e=e.replace(/^0x/i,"");for(var a=[],t=0;t<e.length;t+=2)a.push(parseInt(e.substr(t,2),16));return a},m=function(e){return(r.isString(e)||r.isNumber(e))&&/^(-)?0x[0-9a-f]*$/i.test(e)},g=function(e){m(e)&&/^0x/i.test(e.toString())&&(e=h(e));var a=f.keccak256(e);return"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"===a?null:a};g._Hash=f,e.exports={BN:c,isBN:o,isBigNumber:d,toBN:s,isAddress:b,isBloom:function(e){return!(!/^(0x)?[0-9a-f]{512}$/i.test(e)||!/^(0x)?[0-9a-f]{512}$/.test(e)&&!/^(0x)?[0-9A-F]{512}$/.test(e))},isTopic:function(e){return!(!/^(0x)?[0-9a-f]{64}$/i.test(e)||!/^(0x)?[0-9a-f]{64}$/.test(e)&&!/^(0x)?[0-9A-F]{64}$/.test(e))},checkAddressChecksum:u,utf8ToHex:l,hexToUtf8:function(e){if(!m(e))throw new Error('The parameter "'+e+'" must be a valid HEX string.');for(var a="",t=0,r=(e=(e=(e=(e=(e=e.replace(/^0x/i,"")).replace(/^(?:00)*/,"")).split("").reverse().join("")).replace(/^(?:00)*/,"")).split("").reverse().join("")).length,c=0;c<r;c+=2)t=parseInt(e.substr(c,2),16),a+=String.fromCharCode(t);return i.decode(a)},hexToNumber:function(e){return e?s(e).toNumber():e},hexToNumberString:function(e){return e?s(e).toString(10):e},numberToHex:p,toHex:function(e,a){if(b(e))return a?"address":"0x"+e.toLowerCase().replace(/^0x/i,"");if(r.isBoolean(e))return a?"bool":e?"0x01":"0x00";if(r.isObject(e)&&!d(e)&&!o(e))return a?"string":l(JSON.stringify(e));if(r.isString(e)){if(0===e.indexOf("-0x")||0===e.indexOf("-0X"))return a?"int256":p(e);if(0===e.indexOf("0x")||0===e.indexOf("0X"))return a?"bytes":e;if(!isFinite(e))return a?"string":l(e)}return a?e<0?"int256":"uint256":p(e)},hexToBytes:h,bytesToHex:function(e){for(var a=[],t=0;t<e.length;t++)a.push((e[t]>>>4).toString(16)),a.push((15&e[t]).toString(16));return"0x"+a.join("")},isHex:function(e){return(r.isString(e)||r.isNumber(e))&&/^(-0x|0x)?[0-9a-f]*$/i.test(e)},isHexStrict:m,leftPad:function(e,a,t){var r=/^0x/i.test(e)||"number"==typeof e,c=a-(e=e.toString(16).replace(/^0x/i,"")).length+1>=0?a-e.length+1:0;return(r?"0x":"")+new Array(c).join(t||"0")+e},rightPad:function(e,a,t){var r=/^0x/i.test(e)||"number"==typeof e,c=a-(e=e.toString(16).replace(/^0x/i,"")).length+1>=0?a-e.length+1:0;return(r?"0x":"")+e+new Array(c).join(t||"0")},toTwosComplement:function(e){return"0x"+s(e).toTwos(256).toString(16,64)},sha3:g}},function(e,a,t){var r=t(9),c=t(377);e.exports=function(e){if("string"==typeof e||"number"==typeof e){var a=new r(1),t=String(e).toLowerCase().trim(),n="0x"===t.substr(0,2)||"-0x"===t.substr(0,3),i=c(t);if("-"===i.substr(0,1)&&(i=c(i.slice(1)),a=new r(-1,10)),!(i=""===i?"0":i).match(/^-?[0-9]+$/)&&i.match(/^[0-9A-Fa-f]+$/)||i.match(/^[a-fA-F]+$/)||!0===n&&i.match(/^[0-9A-Fa-f]+$/))return new r(i,16).mul(a);if((i.match(/^-?[0-9]+$/)||""===i)&&!1===n)return new r(i,10).mul(a)}else if("object"==typeof e&&e.toString&&!e.pop&&!e.push&&e.toString(10).match(/^-?[0-9]+$/)&&(e.mul||e.dividedToIntegerBy))return new r(e.toString(10),10);throw new Error("[number-to-bn] while converting number "+JSON.stringify(e)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}},function(e,a,t){var r=t(19),c=t(45),n=t(87),i=t(168),f=t(167),o=t(174),d=t(171),s=t(44),b=(t(116),t(3)),u=t(18),l=t(445),p=t(443),h=t(5),m=t(66);function g(e){if(h.apply(this),this.options=e=this._applyDefaultOptions(e||{}),this.logger=e.logger||console,this.data=new p(e),null!=e.trie&&null!=e.db_path)throw new Error("Can't initialize a TestRPC with a db and a custom trie.");this.pending_transactions=[],this.blockGasLimit=e.gasLimit,this.defaultTransactionGasLimit=e.defaultTransactionGasLimit,this.timeAdjustment=0}const v={gasLimit:"0x6691b7",defaultTransactionGasLimit:"0x15f90",time:null,debug:!1,allowUnlimitedContractSize:!1};g.prototype=Object.create(h.prototype),g.prototype.constructor=g,g.prototype._applyDefaultOptions=function(e){return m.merge(e,v,Object.assign({},e))},g.prototype.initialize=function(e,a){var t=this;this.data.initialize(function(c){if(c)return a(c);t.latestBlock(function(c,n){if(c)return a(c);var i=t.options,f=null;if(n&&(f=n.header.stateRoot),t.stateTrie=t.createStateTrie(t.data.trie_db,f),t.vm=i.vm||new o({state:t.stateTrie,blockchain:{getBlock:function(e,a){try{e=r.number(e)}catch(e){}t.getBlock(e,a)}},enableHomestead:!0,activatePrecompiles:!0,allowUnlimitedContractSize:i.allowUnlimitedContractSize}),1==i.debug&&t.vm.on("step",function(e){var a=e.opcode.name,c=e.opcode.in;if(c){var n=e.stack.slice(-c).map(e=>r.hex(e)).join(" ");t.logger.log(`${a} ${n}`)}else t.logger.log(a)}),i.time&&t.setTime(i.time),n)return t.emit("block",n),a();t.createGenesisBlock(function(r,c){if(r)return a(r);e=e||[],u.eachSeries(e,function(e,a){t.putAccount(e.account,e.address,a)},function(e){if(e)return a(e);t.putBlock(c,[],[],a)})})})})},g.prototype.createStateTrie=function(e,a){return new s(this.data.trie_db,a)},g.prototype.createGenesisBlock=function(e){this.createBlock(e)},g.prototype.latestBlock=function(e){this.data.blocks.last(function(a,t){if(a)return e(a);e(null,t)})},g.prototype.getEffectiveBlockNumber=function(e,a){return"string"!=typeof e&&(e=r.hex(e)),e.indexOf("0x")>=0?a(null,r.number(e)):"latest"==e||"pending"==e?this.getHeight(a):"earliest"==e?a(null,0):void 0},g.prototype.getBlock=function(e,a){var t=this;if("string"!=typeof e&&(e=r.hex(e)),e.indexOf("0x")>=0){var c=e;if(!(c.length>40))return this.data.blocks.get(r.number(c),a);this.data.blockHashes.get(r.hex(c),function(e,r){return e?a(e):t.data.blocks.get(r,a)})}else{if("latest"==e||"pending"==e)return this.latestBlock(a);if("earliest"==e)return this.data.blocks.first(a)}},g.prototype.putBlock=function(e,a,t,c){var n=this;e.header.stateRoot=this.stateTrie.root,this.data.blocks.length(function(i,f){if(i)return c(i);var o=[n.data.blocks.push.bind(n.data.blocks,e),n.data.blockLogs.push.bind(n.data.blockLogs,a),n.data.blockHashes.set.bind(n.data.blockHashes,r.hex(e.hash()),f)];e.transactions.forEach(function(e,a){var c=r.hex(e.hash());o.push(n.data.transactions.set.bind(n.data.transactions,c,e),n.data.transactionReceipts.set.bind(n.data.transactionReceipts,c,t[a]))}),u.parallel(o,(a,t)=>{a||n.emit("block",e),c(a,t)})})},g.prototype.popBlock=function(e){var a=this;this.data.blocks.last(function(t,c){if(t)return e(t);if(null==c)return e(null,null);var n=[],i=r.hex(c.hash());c.transactions.forEach(function(e,t){var c=r.hex(e.hash());n.push(a.data.transactions.del.bind(a.data.transactions,c),a.data.transactionReceipts.del.bind(a.data.transactionReceipts,c))}),n.push(a.data.blockLogs.pop.bind(a.data.blockLogs),a.data.blockHashes.del.bind(a.data.blockHashes,i),a.data.blocks.pop.bind(a.data.blocks)),u.series(n,function(t){if(t)return e(t);a.data.blocks.last(function(t,r){if(t)return e(t);a.stateTrie.root=r.header.stateRoot,e(null,c)})})})},g.prototype.clearPendingTransactions=function(){this.pending_transactions=[]},g.prototype.putAccount=function(e,a,t){var r=this;a=b.toBuffer(a),this.vm.stateManager.putAccount(a,e,function(e){if(e)return t(e);r.vm.stateManager.cache.flush(t)})},g.prototype.createBlock=function(e,a){var t=this;"function"==typeof e&&(a=e,e=null);var c=new n;!function(a){if(e)return a(null,e);t.latestBlock(a)}(function(e,n){if(e)return a(e);var i=null!=n?r.number(n.header.number):-1;c.header.gasLimit=t.blockGasLimit,c.header.number=r.hex(i+1),c.header.timestamp=r.hex(t.currentTime()),null!=n&&(c.header.parentHash=r.hex(n.hash())),a(null,c)})},g.prototype.getQueuedNonce=function(e,a){var t=null;if(this.pending_transactions.forEach(function(a){if(r.hex(a.from)==r.hex(e)){var c=r.number(a.nonce);(null===t||c>t)&&(t=c)}}),null!=t)return a(null,t+1);this.stateTrie.get(e,function(e,t){if(e)return a(e);var r=new c(t);a(null,r.nonce)})},g.prototype.queueTransaction=function(e){this.pending_transactions.push(e)},g.prototype.sortByPriceAndNonce=function(){var e={};this.pending_transactions.forEach(a=>{e[r.hex(a.from)]?e[r.hex(a.from)].push(a):e[r.hex(a.from)]=[a]});var a=function(e,a){return parseInt(r.hex(e.nonce),16)-parseInt(r.hex(a.nonce),16)};Object.keys(e).forEach(t=>{e[t].sort(a)});var t=new l(function(e,a){return parseInt(r.hex(a.gasPrice),16)-parseInt(r.hex(e.gasPrice),16)});Object.keys(e).forEach(a=>{t.push(e[a].shift())});const c=[];for(;t.size()>0;){const a=t.pop();let n=r.hex(a.from);e[n].length>0&&t.push(e[n].shift()),c.push(a)}this.pending_transactions=c},g.prototype.processCall=function(e,a,t){var r,c=this,n=function(e,a,n){c.vm.stateManager.revert(function(i){n&&(c.stateTrie.root=r),t(e||i,a)})},i=function(e,a,i,f){if(i)return t(i);a&&(r=c.stateTrie.root,c.stateTrie.root=f.header.stateRoot),c.createBlock(f,function(t,r){r.transactions.push(e),c.vm.stateManager.checkpoint();var i={tx:e,block:r,skipBalance:!0,skipNonce:!0};c.vm.runTx(i,function(t,r){if(t&&t instanceof Error==0&&(t=new Error("VM error: "+t)),t)return n(t);t=d.fromResults([e],{results:[r]}),n(t,r,a)})})};"latest"===a?c.latestBlock(i.bind(null,e,!1)):c.getBlock(a,i.bind(null,e,!0))},g.prototype.processBlock=function(e,a,t){var c=this;"function"==typeof a&&(t=a,a=!0);c.stateTrie.root;c.vm.stateManager.checkpoint();var n=function(e){c.vm.stateManager.revert(function(a){t(e||a)})};c.vm.runBlock({block:e,generate:!0},function(o,s){if(o&&o instanceof Error==0&&(o=new Error("VM error: "+o)),o)return n(o);o=d.fromResults(e.transactions,s);var u=[],l=[],p=0;s.results.forEach(function(e){p+=r.number(e.gasUsed)}),e.header.gasUsed=b.toBuffer(r.hex(p));for(var h=0;h<s.receipts.length;h++){var m=s.results[h],g=s.receipts[h],v=e.transactions[h],y=v.hash(),_=[];if(1==m.vm.exception)for(var w=0;w<g.logs.length;w++){for(var A=g.logs[w],k=r.hex(A[0]),x=[],E=0;E<A[1].length;E++)x.push(r.hex(A[1][E]));var S=r.hex(A[2]);A=new i({logIndex:r.hex(w),transactionIndex:r.hex(h),transactionHash:y,block:e,address:k,data:S,topics:x,type:"mined"});u.push(A),_.push(A)}l.push(new f(v,e,_,g.gasUsed,m.createdAddress,g.status,r.hex(m.bloom.bitvector)))}!function(t){!0===a?c.vm.stateManager.commit(function(a){if(a)return n(a);c.putBlock(e,u,l,t)}):c.vm.stateManager.revert(t)}(function(a){if(a)return t(a);t(o,e.transactions,s)})})},g.prototype.processNextBlock=function(e,a){var t=this;"function"==typeof e&&(a=e,e=void 0),t.sortByPriceAndNonce();for(var c=[],n=0,i=r.number(t.blockGasLimit);t.pending_transactions.length>0;){var f=t.pending_transactions[0],o=r.number(f.gasLimit);if(!(n+o<=i))break;n+=o,t.pending_transactions.shift(),c.push(f)}if(0==c.length&&t.pending_transactions.length>0)return a("Unexpected error condition: next transaction exceeds block gas limit");this.createBlock(function(n,i){if(n)return a(n);e&&(t.data.blocks.last(function(a,c){c&&r.number(c.header.timestamp)>e&&t.logger.log("Waring: Setting the block timestamp ("+e+") that is earlier than the parent block one.")}),i.header.timestamp=r.hex(e),t.setTime(new Date(1e3*e))),Array.prototype.push.apply(i.transactions,c),t.processBlock(i,!0,a)})},g.prototype.processTransactionTrace=function(e,a,t){var c=this,n=r.hex(e),i="",f=null,o={currentDepth:-1,stack:[]},d={gas:0,returnValue:"",structLogs:[]};function s(e,t){var n=r.number(e.gasLeft),i=r.number(f.gasLimit)-n-d.gas;d.gas+=i;var s=null;if(!a.disableMemory&&(s=(s=Buffer.from(e.memory).toString("hex")).match(/.{1,64}/g)||[]).length>0){var b=s[s.length-1];b.length<64&&(s[s.length-1]=b+new Array(64-b.length+1).join("0"))}var u=a.disableStack?null:e.stack.map(function(e){return r.rpcDataHexString(e,64).replace("0x","")}),l={depth:e.depth,error:"",gas:n,gasCost:i,memory:s,op:e.opcode.name,pc:e.pc,stack:u,storage:null};a.disableStorage?(d.structLogs.push(l),t()):l=c.processStorageTrace(l,o,e,function(e,a){if(e)return t(e);d.structLogs.push(a),t()})}function b(e){f=e,(i=r.hex(e.hash()))==n&&c.vm.on("step",s)}function u(){i==n&&(c.vm.removeListener("step",s),c.vm.removeListener("beforeTx",b),c.vm.removeListener("afterTx",u))}c.vm.on("beforeTx",b),c.vm.on("afterTx",u),this.getTransactionReceipt(n,function(e,a){if(e)return t(e);if(!a)return t(new Error("Unknown transaction "+n));var i=a.block;c.getBlock(i.header.parentHash,function(e,a){if(e)return t(e);var f=c.stateTrie.root;c.stateTrie.root=a.header.stateRoot,c.createBlock(a,function(e,a){if(e)return t(e);for(var o=0;o<i.transactions.length;o++){var l=i.transactions[o];if(a.transactions.push(l),r.hex(l.hash())==n)break}c.processBlock(a,!1,function(e,a,r){e&&0==e.message.indexOf("VM Exception")&&(e=null),c.stateTrie.root=f,c.vm.removeListener("beforeTx",b),c.vm.removeListener("afterTx",u),c.vm.removeListener("step",s),t(e,d)})})})})},g.prototype.processStorageTrace=function(e,a,t,c){var n,i,f=t.opcode.name,o=t.opcode.in,d=t.stack.slice(-o).map(e=>r.hex(e));switch(a.currentDepth>t.depth&&a.stack.pop(),a.currentDepth<t.depth&&a.stack.push({}),a.currentDepth=t.depth,f){case"SSTORE":n=r.rpcDataHexString(d[1],64).replace("0x",""),i=r.rpcDataHexString(d[0],64).replace("0x",""),e.storage=Object.assign({},a.stack[a.currentDepth]),c(null,e),a.stack[a.currentDepth][n]=i;break;case"SLOAD":n=r.rpcDataHexString(d[0],64).replace("0x",""),this.vm.stateManager.getContractStorage(t.address,"0x"+n,function(t,f){if(t)return c(t);i=r.rpcDataHexString(f,64).replace("0x",""),a.stack[a.currentDepth][n]=i,e.storage=Object.assign({},a.stack[a.currentDepth]),c(null,e)});break;default:e.storage=Object.assign({},a.stack[a.currentDepth]),c(null,e)}},g.prototype.getAccount=function(e,a,t){var r=this;this.getBlock(a,function(a,n){if(a)return t(a);var i=r.stateTrie,f=i.root;r.stateTrie.root=n.header.stateRoot,i.get(b.toBuffer(e),function(e,a){if(i.root=f,e)return t(e);var r=new c(a);r.exists=!!a,t(null,r)})})},g.prototype.getNonce=function(e,a,t){this.getAccount(e,a,function(e,a){if(e)return t(e);t(null,a.nonce)})},g.prototype.getBalance=function(e,a,t){this.getAccount(e,a,function(e,a){if(e)return t(e);t(null,a.balance)})},g.prototype.getStorage=function(e,a,t,r){var n=this;this.getBlock(t,function(t,i){if(t)return r(t);var f=n.stateTrie,o=f.root;n.stateTrie.root=i.header.stateRoot,f.get(b.toBuffer(e),function(e,t){if(null!=e)return f.root=o,r(e);var n=new c(t);f.root=n.stateRoot,f.get(b.setLengthLeft(b.toBuffer(a),32),function(e,a){if(f.root=o,null!=e)return r(e);r(null,a)})})})},g.prototype.getCode=function(e,a,t){var r=this;this.getBlock(a,function(a,n){if(a)return t(a);var i=r.stateTrie,f=i.root;r.stateTrie.root=n.header.stateRoot,i.get(b.toBuffer(e),function(e,a){if(null!=e)return i.root=f,t(e);new c(a).getCode(i,function(e,a){if(i.root=f,e)return t(e);t(null,a)})})})},g.prototype.getTransaction=function(e,a){e=r.hex(e),this.data.transactions.get(e,function(e,t){if(e)return e.notFound?a(null,null):a(e);a(null,t)})},g.prototype.getTransactionReceipt=function(e,a){e=r.hex(e),this.data.transactionReceipts.get(e,function(e,t){if(e)return e.notFound?a(null,null):a(e);a(e,t)})},g.prototype.getBlockLogs=function(e,a){var t=this;this.getEffectiveBlockNumber(e,function(e,r){if(e)return a(e);t.data.blockLogs.get(r,a)})},g.prototype.getHeight=function(e){this.data.blocks.length(function(a,t){if(a)return e(a);e(null,t-1)})},g.prototype.currentTime=function(){return((new Date).getTime()/1e3|0)+this.timeAdjustment},g.prototype.increaseTime=function(e){return e<0&&(e=0),this.timeAdjustment+=e,this.timeAdjustment},g.prototype.setTime=function(e){var a=(new Date).getTime()/1e3|0,t=e.getTime()/1e3|0;this.timeAdjustment=t-a},g.prototype.close=function(e){this.data.close(e)},e.exports=g},function(e,a){e.exports=__webpack_require__(39)},function(e,a){function t(e){return"function"==typeof e?Buffer("","utf8"):e instanceof Buffer?e:"string"==typeof e?new Buffer(e,"utf8"):new Buffer(String(e||""),"utf8")}function r(e){return"number"!=typeof e?null:(e=Math.round(e))<1?null:e>256?null:e}e.exports=function(e,a,c,n){return{password:t(e),salt:t(a),options:function(e){return{maxmem:function(e){if("number"!=typeof e)return null;for(var a=4;a<=2048;a*=2){var t=1048576*a;if(t>e)return null;if(t==e)return t}return null}((e=null!==e&&"object"==typeof e?e:{}).maxmem)||33554432,cost:function(e){if("number"!=typeof e)return null;for(var a=8;a<=64;a++){var t=Math.pow(2,a);if(t>e)return null;if(t==e)return t}return null}(e.cost)||Math.pow(2,14),blockSize:r(e.blockSize)||8,parallel:r(e.parallel)||1,size:function(e){return"number"!=typeof e?null:(e=Math.round(e))<1?null:e>2048?null:e}(e.size)||64}}(c),callback:function(e){return"function"==typeof e?e:null}(arguments[arguments.length-1])}}},function(e,a,t){var r=t(841);e.exports=function(e,a,t,c,n,i,f){return r.hashSync(e,{N:t,r:c,p:n},i,a)}},function(e,a,t){var r=t(842),c=t(10),n=t(325),i=t(836),f=t(834);function o(e,a){if(!e)throw new Error(a||"Assertion failed")}function d(e,a){return Buffer.concat([e.update(a),e.final()])}var s=function(e,a){if(e&&a)throw new Error("Cannot supply both a private and a public key to the constructor");if(e&&!r.isValidPrivate(e))throw new Error("Private key does not satisfy the curve requirements (ie. it is invalid)");if(a&&!r.isValidPublic(a))throw new Error("Invalid public key");this._privKey=e,this._pubKey=a};Object.defineProperty(s.prototype,"privKey",{get:function(){return o(this._privKey,"This is a public key only wallet"),this._privKey}}),Object.defineProperty(s.prototype,"pubKey",{get:function(){return this._pubKey||(this._pubKey=r.privateToPublic(this.privKey)),this._pubKey}}),s.generate=function(e){if(!e)return new s(c.randomBytes(32));for(;;){var a=c.randomBytes(32);if(0===r.privateToAddress(a)[0])return new s(a)}},s.prototype.getPrivateKey=function(){return this.privKey},s.prototype.getPrivateKeyString=function(){return r.bufferToHex(this.getPrivateKey())},s.prototype.getPublicKey=function(){return this.pubKey},s.prototype.getPublicKeyString=function(){return r.bufferToHex(this.getPublicKey())},s.prototype.getAddress=function(){return r.publicToAddress(this.pubKey)},s.prototype.getAddressString=function(){return r.bufferToHex(this.getAddress())},s.prototype.getChecksumAddressString=function(){return r.toChecksumAddress(this.getAddressString())},s.prototype.toV3=function(e,a){o(this._privKey,"This is a public key only wallet");var t,f=(a=a||{}).salt||c.randomBytes(32),d=a.iv||c.randomBytes(16),s=a.kdf||"scrypt",b={dklen:a.dklen||32,salt:f.toString("hex")};if("pbkdf2"===s)b.c=a.c||262144,b.prf="hmac-sha256",t=c.pbkdf2Sync(new Buffer(e),f,b.c,b.dklen,"sha256");else{if("scrypt"!==s)throw new Error("Unsupported kdf");b.n=a.n||262144,b.r=a.r||8,b.p=a.p||1,t=n(new Buffer(e),f,b.n,b.r,b.p,b.dklen)}var u=c.createCipheriv(a.cipher||"aes-128-ctr",t.slice(0,16),d);if(!u)throw new Error("Unsupported cipher");var l=Buffer.concat([u.update(this.privKey),u.final()]),p=r.sha3(Buffer.concat([t.slice(16,32),new Buffer(l,"hex")]));return{version:3,id:i.v4({random:a.uuid||c.randomBytes(16)}),address:this.getAddress().toString("hex"),crypto:{ciphertext:l.toString("hex"),cipherparams:{iv:d.toString("hex")},cipher:a.cipher||"aes-128-ctr",kdf:s,kdfparams:b,mac:p.toString("hex")}}},s.prototype.getV3Filename=function(e){return["UTC--",(e?new Date(e):new Date).toJSON().replace(/:/g,"-"),"--",this.getAddress().toString("hex")].join("")},s.prototype.toV3String=function(e,a){return JSON.stringify(this.toV3(e,a))},s.fromPublicKey=function(e,a){return a&&(e=r.importPublic(e)),new s(null,e)},s.fromExtendedPublicKey=function(e){return o("xpub"===e.slice(0,4),"Not an extended public key"),e=f.decode(e).slice(45),s.fromPublicKey(e,!0)},s.fromPrivateKey=function(e){return new s(e)},s.fromExtendedPrivateKey=function(e){o("xprv"===e.slice(0,4),"Not an extended private key");var a=f.decode(e);return o(0===a[45],"Invalid extended private key"),s.fromPrivateKey(a.slice(46))},s.fromV1=function(e,a){o("string"==typeof a);var t="object"==typeof e?e:JSON.parse(e);if("1"!==t.Version)throw new Error("Not a V1 wallet");if("scrypt"!==t.Crypto.KeyHeader.Kdf)throw new Error("Unsupported key derivation scheme");var i=t.Crypto.KeyHeader.KdfParams,f=n(new Buffer(a),new Buffer(t.Crypto.Salt,"hex"),i.N,i.R,i.P,i.DkLen),b=new Buffer(t.Crypto.CipherText,"hex");if(r.sha3(Buffer.concat([f.slice(16,32),b])).toString("hex")!==t.Crypto.MAC)throw new Error("Key derivation failed - possibly wrong passphrase");var u=d(c.createDecipheriv("aes-128-cbc",r.sha3(f.slice(0,16)).slice(0,16),new Buffer(t.Crypto.IV,"hex")),b);return new s(u)},s.fromV3=function(e,a,t){o("string"==typeof a);var i,f,b="object"==typeof e?e:JSON.parse(t?e.toLowerCase():e);if(3!==b.version)throw new Error("Not a V3 wallet");if("scrypt"===b.crypto.kdf)f=b.crypto.kdfparams,i=n(new Buffer(a),new Buffer(f.salt,"hex"),f.n,f.r,f.p,f.dklen);else{if("pbkdf2"!==b.crypto.kdf)throw new Error("Unsupported key derivation scheme");if("hmac-sha256"!==(f=b.crypto.kdfparams).prf)throw new Error("Unsupported parameters to PBKDF2");i=c.pbkdf2Sync(new Buffer(a),new Buffer(f.salt,"hex"),f.c,f.dklen,"sha256")}var u=new Buffer(b.crypto.ciphertext,"hex");if(r.sha3(Buffer.concat([i.slice(16,32),u])).toString("hex")!==b.crypto.mac)throw new Error("Key derivation failed - possibly wrong passphrase");var l=d(c.createDecipheriv(b.crypto.cipher,i.slice(0,16),new Buffer(b.crypto.cipherparams.iv,"hex")),u);return new s(l)},s.fromEthSale=function(e,a){o("string"==typeof a);var t="object"==typeof e?e:JSON.parse(e),n=new Buffer(t.encseed,"hex"),i=c.pbkdf2Sync(a,a,2e3,32,"sha256").slice(0,16),f=d(c.createDecipheriv("aes-128-cbc",i,n.slice(0,16)),n.slice(16)),b=new s(r.sha3(f));if(b.getAddress().toString("hex")!==t.ethaddr)throw new Error("Decoded key mismatch - possibly wrong passphrase");return b},e.exports=s},function(e,a){var t;process.browser?t="utf-8":t=parseInt(process.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary";e.exports=t},function(e,a,t){e.exports=t(10).createHmac},function(e,a,t){var r={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20},c=t(328),n=t(169),i=t(327),f=t(7).Buffer;e.exports=function(e,a,t,o,d){n(e,a,t,o),f.isBuffer(e)||(e=f.from(e,i)),f.isBuffer(a)||(a=f.from(a,i)),d=d||"sha1";var s=f.allocUnsafe(o),b=f.allocUnsafe(a.length+4);a.copy(b,0,0,a.length);for(var u=0,l=r[d],p=Math.ceil(o/l),h=1;h<=p;h++){b.writeUInt32BE(h,a.length);for(var m=c(d,e).update(b).digest(),g=m,v=1;v<t;v++){g=c(d,e).update(g).digest();for(var y=0;y<l;y++)m[y]^=g[y]}m.copy(s,u),u+=l}return s}},function(e,a,t){e.exports=t(863)},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(11),n=t(3),i=e.exports=function(e){e?(c(256===e.length,"bitvectors must be 2048 bits long"),this.bitvector=e):this.bitvector=n.zeros(256)};i.prototype.add=function(e){e=n.sha3(e);for(var a=0;a<3;a++){var t=2047&e.readUInt16BE(2*a),r=t>>3,c=1<<t%8;this.bitvector[256-r-1]|=c}},i.prototype.check=function(e){e=n.sha3(e);for(var a=!0,t=0;t<3&&a;t++){var r=511&e.readUInt16BE(2*t),c=r>>3,i=1<<r%8;a=this.bitvector[256-c-1]&i}return Boolean(a)},i.prototype.multiCheck=function(e){var a=this;return e.every(function(e){return r.isBuffer(e)||(e=r.from(e,"hex")),a.check(e)})},i.prototype.or=function(e){if(e)for(var a=0;a<=256;a++)this.bitvector[a]=this.bitvector[a]|e.bitvector[a]}},function(e,a,t){const r=t(3),c=t(361),n=t(44),i=r.BN,f=r.rlp,o=t(18),d=t(874),s=t(173);var b=e.exports=function(e){var a,t;this.transactions=[],this.uncleHeaders=[],this._inBlockChain=!1,this.txTrie=new n,Object.defineProperty(this,"raw",{get:function(){return this.serialize(!1)}}),e||(e=[[],[],[]]),Buffer.isBuffer(e)&&(e=f.decode(e)),Array.isArray(e)?(this.header=new d(e[0]),a=e[1],t=e[2]):(this.header=new d(e.header),a=e.transactions||[],t=e.uncleHeaders||[]);for(var r=0;r<t.length;r++)this.uncleHeaders.push(new d(t[r]));for(r=0;r<a.length;r++){var i=new c(a[r]);i._homestead=!0,this.transactions.push(i)}};function u(e){try{return e.reduce(function(e,a){return e&&(e+=" "),e+a})}catch(e){return""}}b.Header=d,b.prototype.hash=function(){return this.header.hash()},b.prototype.isGenesis=function(){return this.header.isGenesis()},b.prototype.setGenesisParams=function(){this.header.gasLimit=s.genesisGasLimit.v,this.header.difficulty=s.genesisDifficulty.v,this.header.extraData=s.genesisExtraData.v,this.header.nonce=s.genesisNonce.v,this.header.stateRoot=s.genesisStateRoot.v,this.header.number=new Buffer([])},b.prototype.serialize=function(e){var a=[this.header.raw,[],[]];return void 0===e&&(e=!0),this.transactions.forEach(function(e){a[1].push(e.raw)}),this.uncleHeaders.forEach(function(e){a[2].push(e.raw)}),e?f.encode(a):a},b.prototype.genTxTrie=function(e){var a=0,t=this;o.eachSeries(this.transactions,function(e,r){t.txTrie.put(f.encode(a),e.serialize(),r),a++},e)},b.prototype.validateTransactionsTrie=function(){var e=this.header.transactionsTrie.toString("hex");return this.transactions.length?e===this.txTrie.root.toString("hex"):e===r.SHA3_RLP.toString("hex")},b.prototype.validateTransactions=function(e){var a=[];return this.transactions.forEach(function(e,t){var r=e.validate(!0);r&&a.push(r+" at tx "+t)}),void 0===e||!1===e?0===a.length:u(a)},b.prototype.validate=function(e,a){var t=this,r=[];o.parallel([t.validateUncles.bind(t,e),t.header.validate.bind(t.header,e),t.genTxTrie.bind(t)],function(e){e&&r.push(e),t.validateTransactionsTrie()||r.push("invalid transaction true");var c=t.validateTransactions(!0);""!==c&&r.push(c),t.validateUnclesHash()||r.push("invild uncle hash"),a(u(r))})},b.prototype.validateUnclesHash=function(){var e=[];return this.uncleHeaders.forEach(function(a){e.push(a.raw)}),e=f.encode(e),r.sha3(e).toString("hex")===this.header.uncleHash.toString("hex")},b.prototype.validateUncles=function(e,a){if(this.isGenesis())return a();var t=this;if(t.uncleHeaders.length>2)return a("too many uncle headers");var r=t.uncleHeaders.map(function(e){return e.hash().toString("hex")});if(new Set(r).size!==r.length)return a("dublicate unlces");o.each(t.uncleHeaders,function(a,r){var c=new i(t.header.number);o.parallel([a.validate.bind(a,e,c),function(t){e.getDetails(a.hash(),function(e,a){a&&a.isUncle?t(e||"uncle already included"):t()})}],r)},a)},b.prototype.toJSON=function(e){if(e){var a={header:this.header.toJSON(!0),transactions:[],uncleHeaders:[]};return this.transactions.forEach(function(t){a.transactions.push(t.toJSON(e))}),this.uncleHeaders.forEach(function(e){a.uncleHeaders.push(e.toJSON())}),a}return r.baToJSON(this.raw)}},function(e,a,t){var r=t(896);r.genesisState=t(895),r.bootstrapNodes=t(894),e.exports=r},function(e,a,t){e.exports=i;var r=t(175),c=t(17);function n(e,a){this.afterTransform=function(e,t){return function(e,a,t){var r=e._transformState;r.transforming=!1;var c=r.writecb;if(!c)return e.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,null!==t&&void 0!==t&&e.push(t);c&&c(a);var n=e._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&e._read(n.highWaterMark)}(a,e,t)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(e){if(!(this instanceof i))return new i(e);r.call(this,e);this._transformState=new n(e,this);var a=this;this._readableState.needReadable=!0,this._readableState.sync=!1,this.once("finish",function(){"function"==typeof this._flush?this._flush(function(e){f(a,e)}):f(a)})}function f(e,a){if(a)return e.emit("error",a);var t=e._writableState,r=(e._readableState,e._transformState);if(t.length)throw new Error("calling transform done when ws.length != 0");if(r.transforming)throw new Error("calling transform done when still transforming");return e.push(null)}c.inherits=t(0),c.inherits(i,r),i.prototype.push=function(e,a){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,a)},i.prototype._transform=function(e,a,t){throw new Error("not implemented")},i.prototype._write=function(e,a,t){var r=this._transformState;if(r.writecb=t,r.writechunk=e,r.writeencoding=a,!r.transforming){var c=this._readableState;(r.needTransform||c.needReadable||c.length<c.highWaterMark)&&this._read(c.highWaterMark)}},i.prototype._read=function(e){var a=this._transformState;null!==a.writechunk&&a.writecb&&!a.transforming?(a.transforming=!0,this._transform(a.writechunk,a.writeencoding,a.afterTransform)):a.needTransform=!0}},function(e,a,t){e.exports=f;var r=t(24).Buffer;f.WritableState=i;var c=t(17);c.inherits=t(0);var n=t(6);function i(e,a){var t=(e=e||{}).highWaterMark;this.highWaterMark=t||0===t?t:16384,this.objectMode=!!e.objectMode,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var r=!1===e.decodeStrings;this.decodeStrings=!r,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,a){var t=e._writableState,r=t.sync,c=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,c){t?process.nextTick(function(){c(r)}):c(r);e._writableState.errorEmitted=!0,e.emit("error",r)}(e,0,r,a,c);else{var n=s(e,t);n||t.bufferProcessing||!t.buffer.length||function(e,a){a.bufferProcessing=!0;for(var t=0;t<a.buffer.length;t++){var r=a.buffer[t],c=r.chunk,n=r.encoding,i=r.callback,f=a.objectMode?1:c.length;if(o(e,a,f,c,n,i),a.writing){t++;break}}a.bufferProcessing=!1,t<a.buffer.length?a.buffer=a.buffer.slice(t):a.buffer.length=0}(e,t),r?process.nextTick(function(){d(e,t,n,c)}):d(e,t,n,c)}}(a,e)},this.writecb=null,this.writelen=0,this.buffer=[],this.errorEmitted=!1}function f(e){var a=t(175);if(!(this instanceof f||this instanceof a))return new f(e);this._writableState=new i(e,this),this.writable=!0,n.call(this)}function o(e,a,t,r,c,n){a.writelen=t,a.writecb=n,a.writing=!0,a.sync=!0,e._write(r,c,a.onwrite),a.sync=!1}function d(e,a,t,r){t||function(e,a){0===a.length&&a.needDrain&&(a.needDrain=!1,e.emit("drain"))}(e,a),r(),t&&b(e,a)}function s(e,a){return a.ending&&0===a.length&&!a.finished&&!a.writing}function b(e,a){var t=s(0,a);return t&&(a.finished=!0,e.emit("finish")),t}c.inherits(f,n),f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))},f.prototype.write=function(e,a,t){var c=this._writableState,n=!1;return"function"==typeof a&&(t=a,a=null),r.isBuffer(e)?a="buffer":a||(a=c.defaultEncoding),"function"!=typeof t&&(t=function(){}),c.ended?function(e,a,t){var r=new Error("write after end");e.emit("error",r),process.nextTick(function(){t(r)})}(this,0,t):function(e,a,t,c){var n=!0;if(!r.isBuffer(t)&&"string"!=typeof t&&null!==t&&void 0!==t&&!a.objectMode){var i=new TypeError("Invalid non-string/buffer chunk");e.emit("error",i),process.nextTick(function(){c(i)}),n=!1}return n}(this,c,e,t)&&(n=function(e,a,t,c,n){t=function(e,a,t){return e.objectMode||!1===e.decodeStrings||"string"!=typeof a||(a=new r(a,t)),a}(a,t,c),r.isBuffer(t)&&(c="buffer");var i=a.objectMode?1:t.length;a.length+=i;var f=a.length<a.highWaterMark;f||(a.needDrain=!0);a.writing?a.buffer.push(new function(e,a,t){this.chunk=e,this.encoding=a,this.callback=t}(t,c,n)):o(e,a,i,t,c,n);return f}(this,c,e,a,t)),n},f.prototype._write=function(e,a,t){t(new Error("not implemented"))},f.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),void 0!==e&&null!==e&&this.write(e,a),r.ending||r.finished||function(e,a,t){a.ending=!0,b(e,a),t&&(a.finished?process.nextTick(t):e.once("finish",t));a.ended=!0}(this,r,t)}},function(e,a,t){e.exports=s;var r=t(178),c=t(24).Buffer;s.ReadableState=d;var n=t(5).EventEmitter;n.listenerCount||(n.listenerCount=function(e,a){return e.listeners(a).length});var i,f=t(6),o=t(17);function d(e,a){var r=(e=e||{}).highWaterMark;this.highWaterMark=r||0===r?r:16384,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=!1,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.calledRead=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.objectMode=!!e.objectMode,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(i||(i=t(63).StringDecoder),this.decoder=new i(e.encoding),this.encoding=e.encoding)}function s(e){if(!(this instanceof s))return new s(e);this._readableState=new d(e,this),this.readable=!0,f.call(this)}function b(e,a,t,r,n){var i=function(e,a){var t=null;c.isBuffer(a)||"string"==typeof a||null===a||void 0===a||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk"));return t}(a,t);if(i)e.emit("error",i);else if(null===t||void 0===t)a.reading=!1,a.ended||function(e,a){if(a.decoder&&!a.ended){var t=a.decoder.end();t&&t.length&&(a.buffer.push(t),a.length+=a.objectMode?1:t.length)}a.ended=!0,a.length>0?p(e):_(e)}(e,a);else if(a.objectMode||t&&t.length>0)if(a.ended&&!n){var f=new Error("stream.push() after EOF");e.emit("error",f)}else if(a.endEmitted&&n){f=new Error("stream.unshift() after end event");e.emit("error",f)}else!a.decoder||n||r||(t=a.decoder.write(t)),a.length+=a.objectMode?1:t.length,n?a.buffer.unshift(t):(a.reading=!1,a.buffer.push(t)),a.needReadable&&p(e),function(e,a){a.readingMore||(a.readingMore=!0,process.nextTick(function(){!function(e,a){var t=a.length;for(;!a.reading&&!a.flowing&&!a.ended&&a.length<a.highWaterMark&&(e.read(0),t!==a.length);)t=a.length;a.readingMore=!1}(e,a)}))}(e,a);else n||(a.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}o.inherits=t(0),o.inherits(s,f),s.prototype.push=function(e,a){var t=this._readableState;return"string"!=typeof e||t.objectMode||(a=a||t.defaultEncoding)!==t.encoding&&(e=new c(e,a),a=""),b(this,t,e,a,!1)},s.prototype.unshift=function(e){return b(this,this._readableState,e,"",!0)},s.prototype.setEncoding=function(e){i||(i=t(63).StringDecoder),this._readableState.decoder=new i(e),this._readableState.encoding=e};var u=8388608;function l(e,a){return 0===a.length&&a.ended?0:a.objectMode?0===e?0:1:null===e||isNaN(e)?a.flowing&&a.buffer.length?a.buffer[0].length:a.length:e<=0?0:(e>a.highWaterMark&&(a.highWaterMark=function(e){if(e>=u)e=u;else{e--;for(var a=1;a<32;a<<=1)e|=e>>a;e++}return e}(e)),e>a.length?a.ended?a.length:(a.needReadable=!0,0):e)}function p(e){var a=e._readableState;a.needReadable=!1,a.emittedReadable||(a.emittedReadable=!0,a.sync?process.nextTick(function(){h(e)}):h(e))}function h(e){e.emit("readable")}function m(e){var a,t=e._readableState;function r(e,r,c){!1===e.write(a)&&t.awaitDrain++}for(t.awaitDrain=0;t.pipesCount&&null!==(a=e.read());)if(1===t.pipesCount?r(t.pipes):w(t.pipes,r),e.emit("data",a),t.awaitDrain>0)return;if(0===t.pipesCount)return t.flowing=!1,void(n.listenerCount(e,"data")>0&&v(e));t.ranOut=!0}function g(){this._readableState.ranOut&&(this._readableState.ranOut=!1,m(this))}function v(e,a){if(e._readableState.flowing)throw new Error("Cannot switch to old mode now.");var t=a||!1,r=!1;e.readable=!0,e.pipe=f.prototype.pipe,e.on=e.addListener=f.prototype.on,e.on("readable",function(){var a;for(r=!0;!t&&null!==(a=e.read());)e.emit("data",a);null===a&&(r=!1,e._readableState.needReadable=!0)}),e.pause=function(){t=!0,this.emit("pause")},e.resume=function(){t=!1,r?process.nextTick(function(){e.emit("readable")}):this.read(0),this.emit("resume")},e.emit("readable")}function y(e,a){var t,r=a.buffer,n=a.length,i=!!a.decoder,f=!!a.objectMode;if(0===r.length)return null;if(0===n)t=null;else if(f)t=r.shift();else if(!e||e>=n)t=i?r.join(""):c.concat(r,n),r.length=0;else{if(e<r[0].length)t=(b=r[0]).slice(0,e),r[0]=b.slice(e);else if(e===r[0].length)t=r.shift();else{t=i?"":new c(e);for(var o=0,d=0,s=r.length;d<s&&o<e;d++){var b=r[0],u=Math.min(e-o,b.length);i?t+=b.slice(0,u):b.copy(t,o,0,u),u<b.length?r[0]=b.slice(u):r.shift(),o+=u}}}return t}function _(e){var a=e._readableState;if(a.length>0)throw new Error("endReadable called on non-empty stream");!a.endEmitted&&a.calledRead&&(a.ended=!0,process.nextTick(function(){a.endEmitted||0!==a.length||(a.endEmitted=!0,e.readable=!1,e.emit("end"))}))}function w(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}s.prototype.read=function(e){var a=this._readableState;a.calledRead=!0;var t,r=e;if(("number"!=typeof e||e>0)&&(a.emittedReadable=!1),0===e&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return p(this),null;if(0===(e=l(e,a))&&a.ended)return t=null,a.length>0&&a.decoder&&(t=y(e,a),a.length-=t.length),0===a.length&&_(this),t;var c=a.needReadable;return a.length-e<=a.highWaterMark&&(c=!0),(a.ended||a.reading)&&(c=!1),c&&(a.reading=!0,a.sync=!0,0===a.length&&(a.needReadable=!0),this._read(a.highWaterMark),a.sync=!1),c&&!a.reading&&(e=l(r,a)),null===(t=e>0?y(e,a):null)&&(a.needReadable=!0,e=0),a.length-=e,0!==a.length||a.ended||(a.needReadable=!0),a.ended&&!a.endEmitted&&0===a.length&&_(this),t},s.prototype._read=function(e){this.emit("error",new Error("not implemented"))},s.prototype.pipe=function(e,a){var t=this,c=this._readableState;switch(c.pipesCount){case 0:c.pipes=e;break;case 1:c.pipes=[c.pipes,e];break;default:c.pipes.push(e)}c.pipesCount+=1;var i=(!a||!1!==a.end)&&e!==process.stdout&&e!==process.stderr?o:s;function f(e){e===t&&s()}function o(){e.end()}c.endEmitted?process.nextTick(i):t.once("end",i),e.on("unpipe",f);var d=function(e){return function(){var a=e._readableState;a.awaitDrain--,0===a.awaitDrain&&m(e)}}(t);function s(){e.removeListener("close",u),e.removeListener("finish",l),e.removeListener("drain",d),e.removeListener("error",b),e.removeListener("unpipe",f),t.removeListener("end",o),t.removeListener("end",s),e._writableState&&!e._writableState.needDrain||d()}function b(a){p(),e.removeListener("error",b),0===n.listenerCount(e,"error")&&e.emit("error",a)}function u(){e.removeListener("finish",l),p()}function l(){e.removeListener("close",u),p()}function p(){t.unpipe(e)}return e.on("drain",d),e._events&&e._events.error?r(e._events.error)?e._events.error.unshift(b):e._events.error=[b,e._events.error]:e.on("error",b),e.once("close",u),e.once("finish",l),e.emit("pipe",t),c.flowing||(this.on("readable",g),c.flowing=!0,process.nextTick(function(){m(t)})),e},s.prototype.unpipe=function(e){var a=this._readableState;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,this.removeListener("readable",g),a.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var t=a.pipes,r=a.pipesCount;a.pipes=null,a.pipesCount=0,this.removeListener("readable",g),a.flowing=!1;for(var c=0;c<r;c++)t[c].emit("unpipe",this);return this}return-1===(c=function(e,a){for(var t=0,r=e.length;t<r;t++)if(e[t]===a)return t;return-1}(a.pipes,e))?this:(a.pipes.splice(c,1),a.pipesCount-=1,1===a.pipesCount&&(a.pipes=a.pipes[0]),e.emit("unpipe",this),this)},s.prototype.on=function(e,a){var t=f.prototype.on.call(this,e,a);if("data"!==e||this._readableState.flowing||v(this),"readable"===e&&this.readable){var r=this._readableState;r.readableListening||(r.readableListening=!0,r.emittedReadable=!1,r.needReadable=!0,r.reading?r.length&&p(this):this.read(0))}return t},s.prototype.addListener=s.prototype.on,s.prototype.resume=function(){v(this),this.read(0),this.emit("resume")},s.prototype.pause=function(){v(this,!0),this.emit("pause")},s.prototype.wrap=function(e){var a=this._readableState,t=!1,r=this;for(var c in e.on("end",function(){if(a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&r.push(e)}r.push(null)}),e.on("data",function(c){(a.decoder&&(c=a.decoder.write(c)),!a.objectMode||null!==c&&void 0!==c)&&((a.objectMode||c&&c.length)&&(r.push(c)||(t=!0,e.pause())))}),e)"function"==typeof e[c]&&void 0===this[c]&&(this[c]=function(a){return function(){return e[a].apply(e,arguments)}}(c));return w(["error","close","destroy","pause","resume"],function(a){e.on(a,r.emit.bind(r,a))}),r._read=function(a){t&&(t=!1,e.resume())},r},s._fromList=y},function(e,a,t){"use strict";e.exports=n;var r=t(62),c=t(17);function n(e){if(!(this instanceof n))return new n(e);r.call(this,e),this._transformState={afterTransform:function(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 c=this._readableState;c.reading=!1,(c.needReadable||c.length<c.highWaterMark)&&this._read(c.highWaterMark)}.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",i)}function i(){var e=this;"function"==typeof this._flush?this._flush(function(a,t){f(e,a,t)}):f(this,null,null)}function f(e,a,t){if(a)return e.emit("error",a);if(null!=t&&e.push(t),e._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(e._transformState.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}c.inherits=t(0),c.inherits(n,r),n.prototype.push=function(e,a){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,a)},n.prototype._transform=function(e,a,t){throw new Error("_transform() is not implemented")},n.prototype._write=function(e,a,t){var r=this._transformState;if(r.writecb=t,r.writechunk=e,r.writeencoding=a,!r.transforming){var c=this._readableState;(r.needTransform||c.needReadable||c.length<c.highWaterMark)&&this._read(c.highWaterMark)}},n.prototype._read=function(e){var a=this._transformState;null!==a.writechunk&&a.writecb&&!a.transforming?(a.transforming=!0,this._transform(a.writechunk,a.writeencoding,a.afterTransform)):a.needTransform=!0},n.prototype._destroy=function(e,a){var t=this;r.prototype._destroy.call(this,e,function(e){a(e),t.emit("close")})}},function(e,a,t){"use strict";var r=t(7).Buffer,c=r.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 n(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&&(r.isEncoding===c||!c(e)))throw new Error("Unknown encoding: "+e);return a||e}(e),this.encoding){case"utf16le":this.text=o,this.end=d,a=4;break;case"utf8":this.fillLast=f,a=4;break;case"base64":this.text=s,this.end=b,a=3;break;default:return this.write=u,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(a)}function i(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function f(e){var a=this.lastTotal-this.lastNeed,t=function(e,a,t){if(128!=(192&a[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&a.length>1){if(128!=(192&a[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&a.length>2&&128!=(192&a[2]))return e.lastNeed=2,"�"}}(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 d(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 s(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 b(e){var a=e&&e.length?this.write(e):"";return this.lastNeed?a+this.lastChar.toString("base64",0,3-this.lastNeed):a}function u(e){return e.toString(this.encoding)}function l(e){return e&&e.length?this.write(e):""}a.StringDecoder=n,n.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<e.length?a?a+this.text(e,t):this.text(e,t):a||""},n.prototype.end=function(e){var a=e&&e.length?this.write(e):"";return this.lastNeed?a+"�":a},n.prototype.text=function(e,a){var t=function(e,a,t){var r=a.length-1;if(r<t)return 0;var c=i(a[r]);if(c>=0)return c>0&&(e.lastNeed=c-1),c;if(--r<t||-2===c)return 0;if((c=i(a[r]))>=0)return c>0&&(e.lastNeed=c-2),c;if(--r<t||-2===c)return 0;if((c=i(a[r]))>=0)return c>0&&(2===c?c=0:e.lastNeed=c-3),c;return 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)},n.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}},function(e,a,t){"use strict";var r=t(118);function c(e){var a=this;this.next=null,this.entry=null,this.finish=function(){!function(e,a,t){var r=e.entry;e.entry=null;for(;r;){var c=r.callback;a.pendingcb--,c(t),r=r.next}a.corkedRequestsFree?a.corkedRequestsFree.next=e:a.corkedRequestsFree=e}(a,e)}}e.exports=m;var n,i=!process.browser&&["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:r.nextTick;m.WritableState=h;var f=t(17);f.inherits=t(0);var o={deprecate:t(912)},d=t(341),s=t(7).Buffer,b=global.Uint8Array||function(){};var u,l=t(340);function p(){}function h(e,a){n=n||t(62),e=e||{};var f=a instanceof n;this.objectMode=!!e.objectMode,f&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,d=e.writableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:f&&(d||0===d)?d: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 b=!1===e.decodeStrings;this.decodeStrings=!b,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,c=t.sync,n=t.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(t),a)!function(e,a,t,c,n){--a.pendingcb,t?(r.nextTick(n,c),r.nextTick(A,e,a),e._writableState.errorEmitted=!0,e.emit("error",c)):(n(c),e._writableState.errorEmitted=!0,e.emit("error",c),A(e,a))}(e,t,c,a,n);else{var f=_(t);f||t.corked||t.bufferProcessing||!t.bufferedRequest||y(e,t),c?i(v,e,t,f,n):v(e,t,f,n)}}(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 c(this)}function m(e){if(n=n||t(62),!(u.call(m,this)||this instanceof n))return new m(e);this._writableState=new h(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)),d.call(this)}function g(e,a,t,r,c,n,i){a.writelen=r,a.writecb=i,a.writing=!0,a.sync=!0,t?e._writev(c,a.onwrite):e._write(c,n,a.onwrite),a.sync=!1}function v(e,a,t,r){t||function(e,a){0===a.length&&a.needDrain&&(a.needDrain=!1,e.emit("drain"))}(e,a),a.pendingcb--,r(),A(e,a)}function y(e,a){a.bufferProcessing=!0;var t=a.bufferedRequest;if(e._writev&&t&&t.next){var r=a.bufferedRequestCount,n=new Array(r),i=a.corkedRequestsFree;i.entry=t;for(var f=0,o=!0;t;)n[f]=t,t.isBuf||(o=!1),t=t.next,f+=1;n.allBuffers=o,g(e,a,!0,a.length,n,"",i.finish),a.pendingcb++,a.lastBufferedRequest=null,i.next?(a.corkedRequestsFree=i.next,i.next=null):a.corkedRequestsFree=new c(a),a.bufferedRequestCount=0}else{for(;t;){var d=t.chunk,s=t.encoding,b=t.callback;if(g(e,a,!1,a.objectMode?1:d.length,d,s,b),t=t.next,a.bufferedRequestCount--,a.writing)break}null===t&&(a.lastBufferedRequest=null)}a.bufferedRequest=t,a.bufferProcessing=!1}function _(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function w(e,a){e._final(function(t){a.pendingcb--,t&&e.emit("error",t),a.prefinished=!0,e.emit("prefinish"),A(e,a)})}function A(e,a){var t=_(a);return t&&(!function(e,a){a.prefinished||a.finalCalled||("function"==typeof e._final?(a.pendingcb++,a.finalCalled=!0,r.nextTick(w,e,a)):(a.prefinished=!0,e.emit("prefinish")))}(e,a),0===a.pendingcb&&(a.finished=!0,e.emit("finish"))),t}f.inherits(m,d),h.prototype.getBuffer=function(){for(var e=this.bufferedRequest,a=[];e;)a.push(e),e=e.next;return a},function(){try{Object.defineProperty(h.prototype,"buffer",{get:o.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]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(m,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===m&&(e&&e._writableState instanceof h)}})):u=function(e){return e instanceof this},m.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},m.prototype.write=function(e,a,t){var c=this._writableState,n=!1,i=!c.objectMode&&function(e){return s.isBuffer(e)||e instanceof b}(e);return i&&!s.isBuffer(e)&&(e=function(e){return s.from(e)}(e)),"function"==typeof a&&(t=a,a=null),i?a="buffer":a||(a=c.defaultEncoding),"function"!=typeof t&&(t=p),c.ended?function(e,a){var t=new Error("write after end");e.emit("error",t),r.nextTick(a,t)}(this,t):(i||function(e,a,t,c){var n=!0,i=!1;return null===t?i=new TypeError("May not write null values to stream"):"string"==typeof t||void 0===t||a.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),r.nextTick(c,i),n=!1),n}(this,c,e,t))&&(c.pendingcb++,n=function(e,a,t,r,c,n){if(!t){var i=function(e,a,t){e.objectMode||!1===e.decodeStrings||"string"!=typeof a||(a=s.from(a,t));return a}(a,r,c);r!==i&&(t=!0,c="buffer",r=i)}var f=a.objectMode?1:r.length;a.length+=f;var o=a.length<a.highWaterMark;o||(a.needDrain=!0);if(a.writing||a.corked){var d=a.lastBufferedRequest;a.lastBufferedRequest={chunk:r,encoding:c,isBuf:t,callback:n,next:null},d?d.next=a.lastBufferedRequest:a.bufferedRequest=a.lastBufferedRequest,a.bufferedRequestCount+=1}else g(e,a,!1,f,r,c,n);return o}(this,c,i,e,a,t)),n},m.prototype.cork=function(){this._writableState.corked++},m.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||y(this,e))},m.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(m.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),m.prototype._write=function(e,a,t){t(new Error("_write() is not implemented"))},m.prototype._writev=null,m.prototype.end=function(e,a,t){var c=this._writableState;"function"==typeof e?(t=e,e=null,a=null):"function"==typeof a&&(t=a,a=null),null!==e&&void 0!==e&&this.write(e,a),c.corked&&(c.corked=1,this.uncork()),c.ending||c.finished||function(e,a,t){a.ending=!0,A(e,a),t&&(a.finished?r.nextTick(t):e.once("finish",t));a.ended=!0,e.writable=!1}(this,c,t)},Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),m.prototype.destroy=l.destroy,m.prototype._undestroy=l.undestroy,m.prototype._destroy=function(e,a){this.end(),a(e)}},function(e,a,t){"use strict";var r=t(118);function c(e,a){e.emit("error",a)}e.exports={destroy:function(e,a){var t=this,n=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return n||i?(a?a(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(c,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!a&&e?(r.nextTick(c,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)}}},function(e,a,t){e.exports=t(6)},function(e,a,t){"use strict";var r=t(118);e.exports=v;var c,n=t(914);v.ReadableState=g;t(5).EventEmitter;var i=function(e,a){return e.listeners(a).length},f=t(341),o=t(7).Buffer,d=global.Uint8Array||function(){};var s=t(17);s.inherits=t(0);var b=t(1),u=void 0;u=b&&b.debuglog?b.debuglog("stream"):function(){};var l,p=t(913),h=t(340);s.inherits(v,f);var m=["error","close","destroy","pause","resume"];function g(e,a){c=c||t(62),e=e||{};var r=a instanceof c;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var n=e.highWaterMark,i=e.readableHighWaterMark,f=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:r&&(i||0===i)?i:f,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new p,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&&(l||(l=t(338).StringDecoder),this.decoder=new l(e.encoding),this.encoding=e.encoding)}function v(e){if(c=c||t(62),!(this instanceof v))return new v(e);this._readableState=new g(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),f.call(this)}function y(e,a,t,r,c){var n,i=e._readableState;null===a?(i.reading=!1,function(e,a){if(a.ended)return;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,k(e)}(e,i)):(c||(n=function(e,a){var t;(function(e){return o.isBuffer(e)||e instanceof d})(a)||"string"==typeof a||void 0===a||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk"));return t}(i,a)),n?e.emit("error",n):i.objectMode||a&&a.length>0?("string"==typeof a||i.objectMode||Object.getPrototypeOf(a)===o.prototype||(a=function(e){return o.from(e)}(a)),r?i.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):_(e,i,a,!0):i.ended?e.emit("error",new Error("stream.push() after EOF")):(i.reading=!1,i.decoder&&!t?(a=i.decoder.write(a),i.objectMode||0!==a.length?_(e,i,a,!1):E(e,i)):_(e,i,a,!1))):r||(i.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(i)}function _(e,a,t,r){a.flowing&&0===a.length&&!a.sync?(e.emit("data",t),e.read(0)):(a.length+=a.objectMode?1:t.length,r?a.buffer.unshift(t):a.buffer.push(t),a.needReadable&&k(e)),E(e,a)}Object.defineProperty(v.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),v.prototype.destroy=h.destroy,v.prototype._undestroy=h.undestroy,v.prototype._destroy=function(e,a){this.push(null),a(e)},v.prototype.push=function(e,a){var t,r=this._readableState;return r.objectMode?t=!0:"string"==typeof e&&((a=a||r.defaultEncoding)!==r.encoding&&(e=o.from(e,a),a=""),t=!0),y(this,e,a,!1,t)},v.prototype.unshift=function(e){return y(this,e,null,!0,!1)},v.prototype.isPaused=function(){return!1===this._readableState.flowing},v.prototype.setEncoding=function(e){return l||(l=t(338).StringDecoder),this._readableState.decoder=new l(e),this._readableState.encoding=e,this};var w=8388608;function A(e,a){return e<=0||0===a.length&&a.ended?0:a.objectMode?1:e!=e?a.flowing&&a.length?a.buffer.head.data.length:a.length:(e>a.highWaterMark&&(a.highWaterMark=function(e){return e>=w?e=w:(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 k(e){var a=e._readableState;a.needReadable=!1,a.emittedReadable||(u("emitReadable",a.flowing),a.emittedReadable=!0,a.sync?r.nextTick(x,e):x(e))}function x(e){u("emit readable"),e.emit("readable"),C(e)}function E(e,a){a.readingMore||(a.readingMore=!0,r.nextTick(S,e,a))}function S(e,a){for(var t=a.length;!a.reading&&!a.flowing&&!a.ended&&a.length<a.highWaterMark&&(u("maybeReadMore read 0"),e.read(0),t!==a.length);)t=a.length;a.readingMore=!1}function T(e){u("readable nexttick read 0"),e.read(0)}function j(e,a){a.reading||(u("resume read 0"),e.read(0)),a.resumeScheduled=!1,a.awaitDrain=0,e.emit("resume"),C(e),a.flowing&&!a.reading&&e.read(0)}function C(e){var a=e._readableState;for(u("flow",a.flowing);a.flowing&&null!==e.read(););}function R(e,a){return 0===a.length?null:(a.objectMode?t=a.buffer.shift():!e||e>=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;e<a.head.data.length?(r=a.head.data.slice(0,e),a.head.data=a.head.data.slice(e)):r=e===a.head.data.length?a.shift():t?function(e,a){var t=a.head,r=1,c=t.data;e-=c.length;for(;t=t.next;){var n=t.data,i=e>n.length?n.length:e;if(i===n.length?c+=n:c+=n.slice(0,e),0===(e-=i)){i===n.length?(++r,t.next?a.head=t.next:a.head=a.tail=null):(a.head=t,t.data=n.slice(i));break}++r}return a.length-=r,c}(e,a):function(e,a){var t=o.allocUnsafe(e),r=a.head,c=1;r.data.copy(t),e-=r.data.length;for(;r=r.next;){var n=r.data,i=e>n.length?n.length:e;if(n.copy(t,t.length-e,0,i),0===(e-=i)){i===n.length?(++c,r.next?a.head=r.next:a.head=a.tail=null):(a.head=r,r.data=n.slice(i));break}++c}return a.length-=c,t}(e,a);return r}(e,a.buffer,a.decoder),t);var t}function O(e){var a=e._readableState;if(a.length>0)throw new Error('"endReadable()" called on non-empty stream');a.endEmitted||(a.ended=!0,r.nextTick(B,a,e))}function B(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<r;t++)if(e[t]===a)return t;return-1}v.prototype.read=function(e){u("read",e),e=parseInt(e,10);var a=this._readableState,t=e;if(0!==e&&(a.emittedReadable=!1),0===e&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return u("read: emitReadable",a.length,a.ended),0===a.length&&a.ended?O(this):k(this),null;if(0===(e=A(e,a))&&a.ended)return 0===a.length&&O(this),null;var r,c=a.needReadable;return u("need readable",c),(0===a.length||a.length-e<a.highWaterMark)&&u("length less than watermark",c=!0),a.ended||a.reading?u("reading or ended",c=!1):c&&(u("do read"),a.reading=!0,a.sync=!0,0===a.length&&(a.needReadable=!0),this._read(a.highWaterMark),a.sync=!1,a.reading||(e=A(t,a))),null===(r=e>0?R(e,a):null)?(a.needReadable=!0,e=0):a.length-=e,0===a.length&&(a.ended||(a.needReadable=!0),t!==e&&a.ended&&O(this)),null!==r&&this.emit("data",r),r},v.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},v.prototype.pipe=function(e,a){var t=this,c=this._readableState;switch(c.pipesCount){case 0:c.pipes=e;break;case 1:c.pipes=[c.pipes,e];break;default:c.pipes.push(e)}c.pipesCount+=1,u("pipe count=%d opts=%j",c.pipesCount,a);var f=(!a||!1!==a.end)&&e!==process.stdout&&e!==process.stderr?d:v;function o(a,r){u("onunpipe"),a===t&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,u("cleanup"),e.removeListener("close",m),e.removeListener("finish",g),e.removeListener("drain",s),e.removeListener("error",h),e.removeListener("unpipe",o),t.removeListener("end",d),t.removeListener("end",v),t.removeListener("data",p),b=!0,!c.awaitDrain||e._writableState&&!e._writableState.needDrain||s())}function d(){u("onend"),e.end()}c.endEmitted?r.nextTick(f):t.once("end",f),e.on("unpipe",o);var s=function(e){return function(){var a=e._readableState;u("pipeOnDrain",a.awaitDrain),a.awaitDrain&&a.awaitDrain--,0===a.awaitDrain&&i(e,"data")&&(a.flowing=!0,C(e))}}(t);e.on("drain",s);var b=!1;var l=!1;function p(a){u("ondata"),l=!1,!1!==e.write(a)||l||((1===c.pipesCount&&c.pipes===e||c.pipesCount>1&&-1!==M(c.pipes,e))&&!b&&(u("false write response, pause",t._readableState.awaitDrain),t._readableState.awaitDrain++,l=!0),t.pause())}function h(a){u("onerror",a),v(),e.removeListener("error",h),0===i(e,"error")&&e.emit("error",a)}function m(){e.removeListener("finish",g),v()}function g(){u("onfinish"),e.removeListener("close",m),v()}function v(){u("unpipe"),t.unpipe(e)}return t.on("data",p),function(e,a,t){if("function"==typeof e.prependListener)return e.prependListener(a,t);e._events&&e._events[a]?n(e._events[a])?e._events[a].unshift(t):e._events[a]=[t,e._events[a]]:e.on(a,t)}(e,"error",h),e.once("close",m),e.once("finish",g),e.emit("pipe",t),c.flowing||(u("pipe resume"),t.resume()),e},v.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,c=a.pipesCount;a.pipes=null,a.pipesCount=0,a.flowing=!1;for(var n=0;n<c;n++)r[n].emit("unpipe",this,t);return this}var i=M(a.pipes,e);return-1===i?this:(a.pipes.splice(i,1),a.pipesCount-=1,1===a.pipesCount&&(a.pipes=a.pipes[0]),e.emit("unpipe",this,t),this)},v.prototype.on=function(e,a){var t=f.prototype.on.call(this,e,a);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var c=this._readableState;c.endEmitted||c.readableListening||(c.readableListening=c.needReadable=!0,c.emittedReadable=!1,c.reading?c.length&&k(this):r.nextTick(T,this))}return t},v.prototype.addListener=v.prototype.on,v.prototype.resume=function(){var e=this._readableState;return e.flowing||(u("resume"),e.flowing=!0,function(e,a){a.resumeScheduled||(a.resumeScheduled=!0,r.nextTick(j,e,a))}(this,e)),this},v.prototype.pause=function(){return u("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(u("pause"),this._readableState.flowing=!1,this.emit("pause")),this},v.prototype.wrap=function(e){var a=this,t=this._readableState,r=!1;for(var c in e.on("end",function(){if(u("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&a.push(e)}a.push(null)}),e.on("data",function(c){(u("wrapped data"),t.decoder&&(c=t.decoder.write(c)),!t.objectMode||null!==c&&void 0!==c)&&((t.objectMode||c&&c.length)&&(a.push(c)||(r=!0,e.pause())))}),e)void 0===this[c]&&"function"==typeof e[c]&&(this[c]=function(a){return function(){return e[a].apply(e,arguments)}}(c));for(var n=0;n<m.length;n++)e.on(m[n],this.emit.bind(this,m[n]));return this._read=function(a){u("wrapped _read",a),r&&(r=!1,e.resume())},this},Object.defineProperty(v.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),v._fromList=R},function(e,a,t){var r=t(6);"disable"===process.env.READABLE_STREAM&&r?(e.exports=r,(a=e.exports=r.Readable).Readable=r.Readable,a.Writable=r.Writable,a.Duplex=r.Duplex,a.Transform=r.Transform,a.PassThrough=r.PassThrough,a.Stream=r):((a=e.exports=t(342)).Stream=r||a,a.Readable=a,a.Writable=t(339),a.Duplex=t(62),a.Transform=t(337),a.PassThrough=t(911))},function(e,a,t){"use strict";e.exports=function(e){return new d(e||p,null)};var r=0,c=1;function n(e,a,t,r,c,n){this._color=e,this.key=a,this.value=t,this.left=r,this.right=c,this._count=n}function i(e){return new n(e._color,e.key,e.value,e.left,e.right,e._count)}function f(e,a){return new n(e,a.key,a.value,a.left,a.right,a._count)}function o(e){e._count=1+(e.left?e.left._count:0)+(e.right?e.right._count:0)}function d(e,a){this._compare=e,this.root=a}var s=d.prototype;function b(e,a){this.tree=e,this._stack=a}Object.defineProperty(s,"keys",{get:function(){var e=[];return this.forEach(function(a,t){e.push(a)}),e}}),Object.defineProperty(s,"values",{get:function(){var e=[];return this.forEach(function(a,t){e.push(t)}),e}}),Object.defineProperty(s,"length",{get:function(){return this.root?this.root._count:0}}),s.insert=function(e,a){for(var t=this._compare,i=this.root,s=[],b=[];i;){var u=t(e,i.key);s.push(i),b.push(u),i=u<=0?i.left:i.right}s.push(new n(r,e,a,null,null,1));for(var l=s.length-2;l>=0;--l){i=s[l];b[l]<=0?s[l]=new n(i._color,i.key,i.value,s[l+1],i.right,i._count+1):s[l]=new n(i._color,i.key,i.value,i.left,s[l+1],i._count+1)}for(l=s.length-1;l>1;--l){var p=s[l-1];i=s[l];if(p._color===c||i._color===c)break;var h=s[l-2];if(h.left===p)if(p.left===i){if(!(m=h.right)||m._color!==r){if(h._color=r,h.left=p.right,p._color=c,p.right=h,s[l-2]=p,s[l-1]=i,o(h),o(p),l>=3)(g=s[l-3]).left===h?g.left=p:g.right=p;break}p._color=c,h.right=f(c,m),h._color=r,l-=1}else{if(!(m=h.right)||m._color!==r){if(p.right=i.left,h._color=r,h.left=i.right,i._color=c,i.left=p,i.right=h,s[l-2]=i,s[l-1]=p,o(h),o(p),o(i),l>=3)(g=s[l-3]).left===h?g.left=i:g.right=i;break}p._color=c,h.right=f(c,m),h._color=r,l-=1}else if(p.right===i){if(!(m=h.left)||m._color!==r){if(h._color=r,h.right=p.left,p._color=c,p.left=h,s[l-2]=p,s[l-1]=i,o(h),o(p),l>=3)(g=s[l-3]).right===h?g.right=p:g.left=p;break}p._color=c,h.left=f(c,m),h._color=r,l-=1}else{var m;if(!(m=h.left)||m._color!==r){var g;if(p.left=i.right,h._color=r,h.right=i.left,i._color=c,i.right=p,i.left=h,s[l-2]=i,s[l-1]=p,o(h),o(p),o(i),l>=3)(g=s[l-3]).right===h?g.right=i:g.left=i;break}p._color=c,h.left=f(c,m),h._color=r,l-=1}}return s[0]._color=c,new d(t,s[0])},s.forEach=function(e,a,t){if(this.root)switch(arguments.length){case 1:return function e(a,t){var r;if(t.left&&(r=e(a,t.left)))return r;return(r=a(t.key,t.value))||(t.right?e(a,t.right):void 0)}(e,this.root);case 2:return function e(a,t,r,c){if(t(a,c.key)<=0){var n;if(c.left&&(n=e(a,t,r,c.left)))return n;if(n=r(c.key,c.value))return n}if(c.right)return e(a,t,r,c.right)}(a,this._compare,e,this.root);case 3:if(this._compare(a,t)>=0)return;return function e(a,t,r,c,n){var i,f=r(a,n.key),o=r(t,n.key);if(f<=0){if(n.left&&(i=e(a,t,r,c,n.left)))return i;if(o>0&&(i=c(n.key,n.value)))return i}if(o>0&&n.right)return e(a,t,r,c,n.right)}(a,t,this._compare,e,this.root)}},Object.defineProperty(s,"begin",{get:function(){for(var e=[],a=this.root;a;)e.push(a),a=a.left;return new b(this,e)}}),Object.defineProperty(s,"end",{get:function(){for(var e=[],a=this.root;a;)e.push(a),a=a.right;return new b(this,e)}}),s.at=function(e){if(e<0)return new b(this,[]);for(var a=this.root,t=[];;){if(t.push(a),a.left){if(e<a.left._count){a=a.left;continue}e-=a.left._count}if(!e)return new b(this,t);if(e-=1,!a.right)break;if(e>=a.right._count)break;a=a.right}return new b(this,[])},s.ge=function(e){for(var a=this._compare,t=this.root,r=[],c=0;t;){var n=a(e,t.key);r.push(t),n<=0&&(c=r.length),t=n<=0?t.left:t.right}return r.length=c,new b(this,r)},s.gt=function(e){for(var a=this._compare,t=this.root,r=[],c=0;t;){var n=a(e,t.key);r.push(t),n<0&&(c=r.length),t=n<0?t.left:t.right}return r.length=c,new b(this,r)},s.lt=function(e){for(var a=this._compare,t=this.root,r=[],c=0;t;){var n=a(e,t.key);r.push(t),n>0&&(c=r.length),t=n<=0?t.left:t.right}return r.length=c,new b(this,r)},s.le=function(e){for(var a=this._compare,t=this.root,r=[],c=0;t;){var n=a(e,t.key);r.push(t),n>=0&&(c=r.length),t=n<0?t.left:t.right}return r.length=c,new b(this,r)},s.find=function(e){for(var a=this._compare,t=this.root,r=[];t;){var c=a(e,t.key);if(r.push(t),0===c)return new b(this,r);t=c<=0?t.left:t.right}return new b(this,[])},s.remove=function(e){var a=this.find(e);return a?a.remove():this},s.get=function(e){for(var a=this._compare,t=this.root;t;){var r=a(e,t.key);if(0===r)return t.value;t=r<=0?t.left:t.right}};var u=b.prototype;function l(e,a){e.key=a.key,e.value=a.value,e.left=a.left,e.right=a.right,e._color=a._color,e._count=a._count}function p(e,a){return e<a?-1:e>a?1:0}Object.defineProperty(u,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(u,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),u.clone=function(){return new b(this.tree,this._stack.slice())},u.remove=function(){var e=this._stack;if(0===e.length)return this.tree;var a=new Array(e.length),t=e[e.length-1];a[a.length-1]=new n(t._color,t.key,t.value,t.left,t.right,t._count);for(var s=e.length-2;s>=0;--s){(t=e[s]).left===e[s+1]?a[s]=new n(t._color,t.key,t.value,a[s+1],t.right,t._count):a[s]=new n(t._color,t.key,t.value,t.left,a[s+1],t._count)}if((t=a[a.length-1]).left&&t.right){var b=a.length;for(t=t.left;t.right;)a.push(t),t=t.right;var u=a[b-1];a.push(new n(t._color,u.key,u.value,t.left,t.right,t._count)),a[b-1].key=t.key,a[b-1].value=t.value;for(s=a.length-2;s>=b;--s)t=a[s],a[s]=new n(t._color,t.key,t.value,t.left,a[s+1],t._count);a[b-1].left=a[b]}if((t=a[a.length-1])._color===r){var p=a[a.length-2];p.left===t?p.left=null:p.right===t&&(p.right=null),a.pop();for(s=0;s<a.length;++s)a[s]._count--;return new d(this.tree._compare,a[0])}if(t.left||t.right){t.left?l(t,t.left):t.right&&l(t,t.right),t._color=c;for(s=0;s<a.length-1;++s)a[s]._count--;return new d(this.tree._compare,a[0])}if(1===a.length)return new d(this.tree._compare,null);for(s=0;s<a.length;++s)a[s]._count--;var h=a[a.length-2];return function(e){for(var a,t,n,d,s=e.length-1;s>=0;--s){if(a=e[s],0===s)return void(a._color=c);if((t=e[s-1]).left===a){if((n=t.right).right&&n.right._color===r)return d=(n=t.right=i(n)).right=i(n.right),t.right=n.left,n.left=t,n.right=d,n._color=t._color,a._color=c,t._color=c,d._color=c,o(t),o(n),s>1&&((b=e[s-2]).left===t?b.left=n:b.right=n),void(e[s-1]=n);if(n.left&&n.left._color===r)return d=(n=t.right=i(n)).left=i(n.left),t.right=d.left,n.left=d.right,d.left=t,d.right=n,d._color=t._color,t._color=c,n._color=c,a._color=c,o(t),o(n),o(d),s>1&&((b=e[s-2]).left===t?b.left=d:b.right=d),void(e[s-1]=d);if(n._color===c){if(t._color===r)return t._color=c,void(t.right=f(r,n));t.right=f(r,n);continue}n=i(n),t.right=n.left,n.left=t,n._color=t._color,t._color=r,o(t),o(n),s>1&&((b=e[s-2]).left===t?b.left=n:b.right=n),e[s-1]=n,e[s]=t,s+1<e.length?e[s+1]=a:e.push(a),s+=2}else{if((n=t.left).left&&n.left._color===r)return d=(n=t.left=i(n)).left=i(n.left),t.left=n.right,n.right=t,n.left=d,n._color=t._color,a._color=c,t._color=c,d._color=c,o(t),o(n),s>1&&((b=e[s-2]).right===t?b.right=n:b.left=n),void(e[s-1]=n);if(n.right&&n.right._color===r)return d=(n=t.left=i(n)).right=i(n.right),t.left=d.right,n.right=d.left,d.right=t,d.left=n,d._color=t._color,t._color=c,n._color=c,a._color=c,o(t),o(n),o(d),s>1&&((b=e[s-2]).right===t?b.right=d:b.left=d),void(e[s-1]=d);if(n._color===c){if(t._color===r)return t._color=c,void(t.left=f(r,n));t.left=f(r,n);continue}var b;n=i(n),t.left=n.right,n.right=t,n._color=t._color,t._color=r,o(t),o(n),s>1&&((b=e[s-2]).right===t?b.right=n:b.left=n),e[s-1]=n,e[s]=t,s+1<e.length?e[s+1]=a:e.push(a),s+=2}}}(a),h.left===t?h.left=null:h.right=null,new d(this.tree._compare,a[0])},Object.defineProperty(u,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(u,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(u,"index",{get:function(){var e=0,a=this._stack;if(0===a.length){var t=this.tree.root;return t?t._count:0}a[a.length-1].left&&(e=a[a.length-1].left._count);for(var r=a.length-2;r>=0;--r)a[r+1]===a[r].right&&(++e,a[r].left&&(e+=a[r].left._count));return e},enumerable:!0}),u.next=function(){var e=this._stack;if(0!==e.length){var a=e[e.length-1];if(a.right)for(a=a.right;a;)e.push(a),a=a.left;else for(e.pop();e.length>0&&e[e.length-1].right===a;)a=e[e.length-1],e.pop()}},Object.defineProperty(u,"hasNext",{get:function(){var e=this._stack;if(0===e.length)return!1;if(e[e.length-1].right)return!0;for(var a=e.length-1;a>0;--a)if(e[a-1].left===e[a])return!0;return!1}}),u.update=function(e){var a=this._stack;if(0===a.length)throw new Error("Can't update empty node!");var t=new Array(a.length),r=a[a.length-1];t[t.length-1]=new n(r._color,r.key,e,r.left,r.right,r._count);for(var c=a.length-2;c>=0;--c)(r=a[c]).left===a[c+1]?t[c]=new n(r._color,r.key,r.value,t[c+1],r.right,r._count):t[c]=new n(r._color,r.key,r.value,r.left,t[c+1],r._count);return new d(this.tree._compare,t[0])},u.prev=function(){var e=this._stack;if(0!==e.length){var a=e[e.length-1];if(a.left)for(a=a.left;a;)e.push(a),a=a.right;else for(e.pop();e.length>0&&e[e.length-1].left===a;)a=e[e.length-1],e.pop()}},Object.defineProperty(u,"hasPrev",{get:function(){var e=this._stack;if(0===e.length)return!1;if(e[e.length-1].left)return!0;for(var a=e.length-1;a>0;--a)if(e[a-1].right===e[a])return!0;return!1}})},function(e,a){function t(e){this._db=e,this._operations=[],this._written=!1}t.prototype._serializeKey=function(e){return this._db._serializeKey(e)},t.prototype._serializeValue=function(e){return this._db._serializeValue(e)},t.prototype._checkWritten=function(){if(this._written)throw new Error("write() already called on this batch")},t.prototype.put=function(e,a){this._checkWritten();var t=this._db._checkKey(e,"key",this._db._isBuffer);if(t)throw t;return e=this._serializeKey(e),a=this._serializeValue(a),"function"==typeof this._put?this._put(e,a):this._operations.push({type:"put",key:e,value:a}),this},t.prototype.del=function(e){this._checkWritten();var a=this._db._checkKey(e,"key",this._db._isBuffer);if(a)throw a;return e=this._serializeKey(e),"function"==typeof this._del?this._del(e):this._operations.push({type:"del",key:e}),this},t.prototype.clear=function(){return this._checkWritten(),this._operations=[],"function"==typeof this._clear&&this._clear(),this},t.prototype.write=function(e,a){if(this._checkWritten(),"function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("write() requires a callback argument");return"object"!=typeof e&&(e={}),this._written=!0,"function"==typeof this._write?this._write(a):"function"==typeof this._db._batch?this._db._batch(this._operations,e,a):void process.nextTick(a)},e.exports=t},function(e,a){function t(e){this.db=e,this._ended=!1,this._nexting=!1}t.prototype.next=function(e){var a=this;if("function"!=typeof e)throw new Error("next() requires a callback argument");return a._ended?e(new Error("cannot call next() after end()")):a._nexting?e(new Error("cannot call next() before previous next() has completed")):(a._nexting=!0,"function"==typeof a._next?a._next(function(){a._nexting=!1,e.apply(null,arguments)}):void process.nextTick(function(){a._nexting=!1,e()}))},t.prototype.end=function(e){if("function"!=typeof e)throw new Error("end() requires a callback argument");return this._ended?e(new Error("end() already called on iterator")):(this._ended=!0,"function"==typeof this._end?this._end(e):void process.nextTick(e))},e.exports=t},function(e,a,t){var r=t(39),c=t(346),n=t(345);function i(e){if(!arguments.length||void 0===e)throw new Error("constructor requires at least a location argument");if("string"!=typeof e)throw new Error("constructor requires a location string argument");this.location=e,this.status="new"}i.prototype.open=function(e,a){var t=this,r=this.status;if("function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("open() requires a callback argument");"object"!=typeof e&&(e={}),e.createIfMissing=0!=e.createIfMissing,e.errorIfExists=!!e.errorIfExists,"function"==typeof this._open?(this.status="opening",this._open(e,function(e){if(e)return t.status=r,a(e);t.status="open",a()})):(this.status="open",process.nextTick(a))},i.prototype.close=function(e){var a=this,t=this.status;if("function"!=typeof e)throw new Error("close() requires a callback argument");"function"==typeof this._close?(this.status="closing",this._close(function(r){if(r)return a.status=t,e(r);a.status="closed",e()})):(this.status="closed",process.nextTick(e))},i.prototype.get=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("get() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),a.asBuffer=0!=a.asBuffer,"function"==typeof this._get?this._get(e,a,t):void process.nextTick(function(){t(new Error("NotFound"))}))},i.prototype.put=function(e,a,t,r){var c;if("function"==typeof t&&(r=t),"function"!=typeof r)throw new Error("put() requires a callback argument");return(c=this._checkKey(e,"key"))?r(c):(e=this._serializeKey(e),a=this._serializeValue(a),"object"!=typeof t&&(t={}),"function"==typeof this._put?this._put(e,a,t,r):void process.nextTick(r))},i.prototype.del=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("del() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),"function"==typeof this._del?this._del(e,a,t):void process.nextTick(t))},i.prototype.batch=function(e,a,t){if(!arguments.length)return this._chainedBatch();if("function"==typeof a&&(t=a),"function"==typeof e&&(t=e),"function"!=typeof t)throw new Error("batch(array) requires a callback argument");if(!Array.isArray(e))return t(new Error("batch(array) requires an array argument"));a&&"object"==typeof a||(a={});for(var r,c,n=0,i=e.length;n<i;n++)if("object"==typeof(r=e[n])){if(c=this._checkKey(r.type,"type"))return t(c);if(c=this._checkKey(r.key,"key"))return t(c)}if("function"==typeof this._batch)return this._batch(e,a,t);process.nextTick(t)},i.prototype.approximateSize=function(e,a,t){if(null==e||null==a||"function"==typeof e||"function"==typeof a)throw new Error("approximateSize() requires valid `start`, `end` and `callback` arguments");if("function"!=typeof t)throw new Error("approximateSize() requires a callback argument");if(e=this._serializeKey(e),a=this._serializeKey(a),"function"==typeof this._approximateSize)return this._approximateSize(e,a,t);process.nextTick(function(){t(null,0)})},i.prototype._setupIteratorOptions=function(e){var a=this;return e=r(e),["start","end","gt","gte","lt","lte"].forEach(function(t){e[t]&&a._isBuffer(e[t])&&0===e[t].length&&delete e[t]}),e.reverse=!!e.reverse,e.keys=0!=e.keys,e.values=0!=e.values,e.limit="limit"in e?e.limit:-1,e.keyAsBuffer=0!=e.keyAsBuffer,e.valueAsBuffer=0!=e.valueAsBuffer,e},i.prototype.iterator=function(e){return"object"!=typeof e&&(e={}),e=this._setupIteratorOptions(e),"function"==typeof this._iterator?this._iterator(e):new c(this)},i.prototype._chainedBatch=function(){return new n(this)},i.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},i.prototype._serializeKey=function(e){return this._isBuffer(e)?e:String(e)},i.prototype._serializeValue=function(e){return null==e?"":this._isBuffer(e)||process.browser?e:String(e)},i.prototype._checkKey=function(e,a){return null===e||void 0===e?new Error(a+" cannot be `null` or `undefined`"):this._isBuffer(e)&&0===e.length?new Error(a+" cannot be an empty Buffer"):""===String(e)?new Error(a+" cannot be an empty String"):void 0},e.exports=i},function(e,a,t){a.AbstractLevelDOWN=t(347),a.AbstractIterator=t(346),a.AbstractChainedBatch=t(345),a.isLevelDOWN=t(919)},function(e,a,t){var r=t(0),c=t(348).AbstractLevelDOWN,n=t(348).AbstractIterator,i=t(918),f=t(344),o=t(7).Buffer,d={},s=t(917);function b(e){return i.compare(e,this._end)>0}function u(e){return i.compare(e,this._end)>=0}function l(e){return i.compare(e,this._end)<0}function p(e){return i.compare(e,this._end)<=0}function h(e,a){n.call(this,e),this._limit=a.limit,-1===this._limit&&(this._limit=1/0);var t=e._store[e._location];this.keyAsBuffer=!1!==a.keyAsBuffer,this.valueAsBuffer=!1!==a.valueAsBuffer,this._reverse=a.reverse,this._options=a,this._done=0,this._reverse?(this._incr="prev",this._start=i.upperBound(a),this._end=i.lowerBound(a),void 0===this._start?this._tree=t.end:i.upperBoundInclusive(a)?this._tree=t.le(this._start):this._tree=t.lt(this._start),this._end&&(i.lowerBoundInclusive(a)?this._test=u:this._test=b)):(this._incr="next",this._start=i.lowerBound(a),this._end=i.upperBound(a),void 0===this._start?this._tree=t.begin:i.lowerBoundInclusive(a)?this._tree=t.ge(this._start):this._tree=t.gt(this._start),this._end&&(i.upperBoundInclusive(a)?this._test=p:this._test=l))}function m(e){if(!(this instanceof m))return new m(e);c.call(this,"string"==typeof e?e:""),this._location=this.location?"$"+this.location:"_tree",this._store=this.location?d:this,this._store[this._location]=this._store[this._location]||f(i.compare)}r(h,n),h.prototype._next=function(e){var a,t;return this._done++>=this._limit?s(e):this._tree.valid?(a=this._tree.key,t=this._tree.value,this._test(a)?(this.keyAsBuffer&&(a=o.from(a)),this.valueAsBuffer&&(t=o.from(t)),this._tree[this._incr](),void s(function(){e(null,a,t)})):s(e)):s(e)},h.prototype._test=function(){return!0},m.clearGlobalStore=function(e){e?Object.keys(d).forEach(function(e){delete d[e]}):d={}},r(m,c),m.prototype._open=function(e,a){var t=this;s(function(){a(null,t)})},m.prototype._put=function(e,a,t,r){void 0!==a&&null!==a||(a="");var c=this._store[this._location].find(e);c.valid?this._store[this._location]=c.update(a):this._store[this._location]=this._store[this._location].insert(e,a),s(r)},m.prototype._get=function(e,a,t){var r=this._store[this._location].get(e);if(void 0===r)return s(function(){t(new Error("NotFound"))});!1===a.asBuffer||this._isBuffer(r)||(r=o.from(String(r))),s(function(){t(null,r)})},m.prototype._del=function(e,a,t){this._store[this._location]=this._store[this._location].remove(e),s(t)},m.prototype._batch=function(e,a,t){for(var r,c,n,i=-1,f=e.length,o=this._store[this._location];++i<f;)e[i]&&(r=this._isBuffer(e[i].key)?e[i].key:String(e[i].key),n=o.find(r),"put"===e[i].type?(c=this._isBuffer(e[i].value)?e[i].value:String(e[i].value),o=n.valid?n.update(c):o.insert(r,c)):o=n.remove());this._store[this._location]=o,s(t)},m.prototype._iterator=function(e){return new h(this,e)},m.prototype._isBuffer=function(e){return o.isBuffer(e)},m.destroy=function(e,a){var t="$"+e;t in d&&delete d[t],s(a)},e.exports=m.default=m},function(e,a){e.exports={defaultOptions:{createIfMissing:!0,errorIfExists:!1,keyEncoding:"utf8",valueEncoding:"utf8",compression:!0},getOptions:function(e){return"string"==typeof e&&(e={valueEncoding:e}),"object"!=typeof e&&(e={}),e},dispatchError:function(e,a,t){"function"==typeof t?t(a):e.emit("error",a)},isDefined:function(e){return void 0!==e}}},function(e,a,t){var r=e.exports.all=[{errno:-2,code:"ENOENT",description:"no such file or directory"},{errno:-1,code:"UNKNOWN",description:"unknown error"},{errno:0,code:"OK",description:"success"},{errno:1,code:"EOF",description:"end of file"},{errno:2,code:"EADDRINFO",description:"getaddrinfo error"},{errno:3,code:"EACCES",description:"permission denied"},{errno:4,code:"EAGAIN",description:"resource temporarily unavailable"},{errno:5,code:"EADDRINUSE",description:"address already in use"},{errno:6,code:"EADDRNOTAVAIL",description:"address not available"},{errno:7,code:"EAFNOSUPPORT",description:"address family not supported"},{errno:8,code:"EALREADY",description:"connection already in progress"},{errno:9,code:"EBADF",description:"bad file descriptor"},{errno:10,code:"EBUSY",description:"resource busy or locked"},{errno:11,code:"ECONNABORTED",description:"software caused connection abort"},{errno:12,code:"ECONNREFUSED",description:"connection refused"},{errno:13,code:"ECONNRESET",description:"connection reset by peer"},{errno:14,code:"EDESTADDRREQ",description:"destination address required"},{errno:15,code:"EFAULT",description:"bad address in system call argument"},{errno:16,code:"EHOSTUNREACH",description:"host is unreachable"},{errno:17,code:"EINTR",description:"interrupted system call"},{errno:18,code:"EINVAL",description:"invalid argument"},{errno:19,code:"EISCONN",description:"socket is already connected"},{errno:20,code:"EMFILE",description:"too many open files"},{errno:21,code:"EMSGSIZE",description:"message too long"},{errno:22,code:"ENETDOWN",description:"network is down"},{errno:23,code:"ENETUNREACH",description:"network is unreachable"},{errno:24,code:"ENFILE",description:"file table overflow"},{errno:25,code:"ENOBUFS",description:"no buffer space available"},{errno:26,code:"ENOMEM",description:"not enough memory"},{errno:27,code:"ENOTDIR",description:"not a directory"},{errno:28,code:"EISDIR",description:"illegal operation on a directory"},{errno:29,code:"ENONET",description:"machine is not on the network"},{errno:31,code:"ENOTCONN",description:"socket is not connected"},{errno:32,code:"ENOTSOCK",description:"socket operation on non-socket"},{errno:33,code:"ENOTSUP",description:"operation not supported on socket"},{errno:34,code:"ENOENT",description:"no such file or directory"},{errno:35,code:"ENOSYS",description:"function not implemented"},{errno:36,code:"EPIPE",description:"broken pipe"},{errno:37,code:"EPROTO",description:"protocol error"},{errno:38,code:"EPROTONOSUPPORT",description:"protocol not supported"},{errno:39,code:"EPROTOTYPE",description:"protocol wrong type for socket"},{errno:40,code:"ETIMEDOUT",description:"connection timed out"},{errno:41,code:"ECHARSET",description:"invalid Unicode character"},{errno:42,code:"EAIFAMNOSUPPORT",description:"address family for hostname not supported"},{errno:44,code:"EAISERVICE",description:"servname not supported for ai_socktype"},{errno:45,code:"EAISOCKTYPE",description:"ai_socktype not supported"},{errno:46,code:"ESHUTDOWN",description:"cannot send after transport endpoint shutdown"},{errno:47,code:"EEXIST",description:"file already exists"},{errno:48,code:"ESRCH",description:"no such process"},{errno:49,code:"ENAMETOOLONG",description:"name too long"},{errno:50,code:"EPERM",description:"operation not permitted"},{errno:51,code:"ELOOP",description:"too many symbolic links encountered"},{errno:52,code:"EXDEV",description:"cross-device link not permitted"},{errno:53,code:"ENOTEMPTY",description:"directory not empty"},{errno:54,code:"ENOSPC",description:"no space left on device"},{errno:55,code:"EIO",description:"i/o error"},{errno:56,code:"EROFS",description:"read-only file system"},{errno:57,code:"ENODEV",description:"no such device"},{errno:58,code:"ESPIPE",description:"invalid seek"},{errno:59,code:"ECANCELED",description:"operation canceled"}];e.exports.errno={},e.exports.code={},r.forEach(function(a){e.exports.errno[a.errno]=a,e.exports.code[a.code]=a}),e.exports.custom=t(926)(e.exports),e.exports.create=e.exports.custom.createError},function(e,a,t){e.exports=i;var r=t(64),c=t(17);function n(e,a){this.afterTransform=function(e,t){return function(e,a,t){var r=e._transformState;r.transforming=!1;var n=r.writecb;if(!n)return e.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,c.isNullOrUndefined(t)||e.push(t);n&&n(a);var i=e._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&e._read(i.highWaterMark)}(a,e,t)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(e){if(!(this instanceof i))return new i(e);r.call(this,e),this._transformState=new n(e,this);var a=this;this._readableState.needReadable=!0,this._readableState.sync=!1,this.once("prefinish",function(){c.isFunction(this._flush)?this._flush(function(e){f(a,e)}):f(a)})}function f(e,a){if(a)return e.emit("error",a);var t=e._writableState,r=e._transformState;if(t.length)throw new Error("calling transform done when ws.length != 0");if(r.transforming)throw new Error("calling transform done when still transforming");return e.push(null)}c.inherits=t(0),c.inherits(i,r),i.prototype.push=function(e,a){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,a)},i.prototype._transform=function(e,a,t){throw new Error("not implemented")},i.prototype._write=function(e,a,t){var r=this._transformState;if(r.writecb=t,r.writechunk=e,r.writeencoding=a,!r.transforming){var c=this._readableState;(r.needTransform||c.needReadable||c.length<c.highWaterMark)&&this._read(c.highWaterMark)}},i.prototype._read=function(e){var a=this._transformState;c.isNull(a.writechunk)||!a.writecb||a.transforming?a.needTransform=!0:(a.transforming=!0,this._transform(a.writechunk,a.writeencoding,a.afterTransform))}},function(e,a,t){e.exports=f;var r=t(24).Buffer;f.WritableState=i;var c=t(17);c.inherits=t(0);var n=t(6);function i(e,a){var r=t(64),c=(e=e||{}).highWaterMark,n=e.objectMode?16:16384;this.highWaterMark=c||0===c?c:n,this.objectMode=!!e.objectMode,a instanceof r&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var i=!1===e.decodeStrings;this.decodeStrings=!i,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,c=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,c){t?process.nextTick(function(){a.pendingcb--,c(r)}):(a.pendingcb--,c(r));e._writableState.errorEmitted=!0,e.emit("error",r)}(e,t,r,a,c);else{var n=b(e,t);n||t.corked||t.bufferProcessing||!t.buffer.length||s(e,t),r?process.nextTick(function(){d(e,t,n,c)}):d(e,t,n,c)}}(a,e)},this.writecb=null,this.writelen=0,this.buffer=[],this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1}function f(e){var a=t(64);if(!(this instanceof f||this instanceof a))return new f(e);this._writableState=new i(e,this),this.writable=!0,n.call(this)}function o(e,a,t,r,c,n,i){a.writelen=r,a.writecb=i,a.writing=!0,a.sync=!0,t?e._writev(c,a.onwrite):e._write(c,n,a.onwrite),a.sync=!1}function d(e,a,t,r){t||function(e,a){0===a.length&&a.needDrain&&(a.needDrain=!1,e.emit("drain"))}(e,a),a.pendingcb--,r(),l(e,a)}function s(e,a){if(a.bufferProcessing=!0,e._writev&&a.buffer.length>1){for(var t=[],r=0;r<a.buffer.length;r++)t.push(a.buffer[r].callback);a.pendingcb++,o(e,a,!0,a.length,a.buffer,"",function(e){for(var r=0;r<t.length;r++)a.pendingcb--,t[r](e)}),a.buffer=[]}else{for(r=0;r<a.buffer.length;r++){var c=a.buffer[r],n=c.chunk,i=c.encoding,f=c.callback,d=a.objectMode?1:n.length;if(o(e,a,!1,d,n,i,f),a.writing){r++;break}}r<a.buffer.length?a.buffer=a.buffer.slice(r):a.buffer.length=0}a.bufferProcessing=!1}function b(e,a){return a.ending&&0===a.length&&!a.finished&&!a.writing}function u(e,a){a.prefinished||(a.prefinished=!0,e.emit("prefinish"))}function l(e,a){var t=b(0,a);return t&&(0===a.pendingcb?(u(e,a),a.finished=!0,e.emit("finish")):u(e,a)),t}c.inherits(f,n),f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))},f.prototype.write=function(e,a,t){var n=this._writableState,i=!1;return c.isFunction(a)&&(t=a,a=null),c.isBuffer(e)?a="buffer":a||(a=n.defaultEncoding),c.isFunction(t)||(t=function(){}),n.ended?function(e,a,t){var r=new Error("write after end");e.emit("error",r),process.nextTick(function(){t(r)})}(this,0,t):function(e,a,t,r){var n=!0;if(!(c.isBuffer(t)||c.isString(t)||c.isNullOrUndefined(t)||a.objectMode)){var i=new TypeError("Invalid non-string/buffer chunk");e.emit("error",i),process.nextTick(function(){r(i)}),n=!1}return n}(this,n,e,t)&&(n.pendingcb++,i=function(e,a,t,n,i){t=function(e,a,t){return!e.objectMode&&!1!==e.decodeStrings&&c.isString(a)&&(a=new r(a,t)),a}(a,t,n),c.isBuffer(t)&&(n="buffer");var f=a.objectMode?1:t.length;a.length+=f;var d=a.length<a.highWaterMark;d||(a.needDrain=!0);a.writing||a.corked?a.buffer.push(new function(e,a,t){this.chunk=e,this.encoding=a,this.callback=t}(t,n,i)):o(e,a,!1,f,t,n,i);return d}(this,n,e,a,t)),i},f.prototype.cork=function(){this._writableState.corked++},f.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.buffer.length||s(this,e))},f.prototype._write=function(e,a,t){t(new Error("not implemented"))},f.prototype._writev=null,f.prototype.end=function(e,a,t){var r=this._writableState;c.isFunction(e)?(t=e,e=null,a=null):c.isFunction(a)&&(t=a,a=null),c.isNullOrUndefined(e)||this.write(e,a),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,a,t){a.ending=!0,l(e,a),t&&(a.finished?process.nextTick(t):e.once("finish",t));a.ended=!0}(this,r,t)}},function(e,a,t){e.exports=b;var r=t(178),c=t(24).Buffer;b.ReadableState=s;var n=t(5).EventEmitter;n.listenerCount||(n.listenerCount=function(e,a){return e.listeners(a).length});var i,f=t(6),o=t(17);o.inherits=t(0);var d=t(1);function s(e,a){var r=t(64),c=(e=e||{}).highWaterMark,n=e.objectMode?16:16384;this.highWaterMark=c||0===c?c:n,this.highWaterMark=~~this.highWaterMark,this.buffer=[],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.objectMode=!!e.objectMode,a instanceof r&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(i||(i=t(63).StringDecoder),this.decoder=new i(e.encoding),this.encoding=e.encoding)}function b(e){t(64);if(!(this instanceof b))return new b(e);this._readableState=new s(e,this),this.readable=!0,f.call(this)}function u(e,a,t,r,c){var n=function(e,a){var t=null;o.isBuffer(a)||o.isString(a)||o.isNullOrUndefined(a)||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk"));return t}(a,t);if(n)e.emit("error",n);else if(o.isNullOrUndefined(t))a.reading=!1,a.ended||function(e,a){if(a.decoder&&!a.ended){var t=a.decoder.end();t&&t.length&&(a.buffer.push(t),a.length+=a.objectMode?1:t.length)}a.ended=!0,h(e)}(e,a);else if(a.objectMode||t&&t.length>0)if(a.ended&&!c){var i=new Error("stream.push() after EOF");e.emit("error",i)}else if(a.endEmitted&&c){i=new Error("stream.unshift() after end event");e.emit("error",i)}else!a.decoder||c||r||(t=a.decoder.write(t)),c||(a.reading=!1),a.flowing&&0===a.length&&!a.sync?(e.emit("data",t),e.read(0)):(a.length+=a.objectMode?1:t.length,c?a.buffer.unshift(t):a.buffer.push(t),a.needReadable&&h(e)),function(e,a){a.readingMore||(a.readingMore=!0,process.nextTick(function(){!function(e,a){var t=a.length;for(;!a.reading&&!a.flowing&&!a.ended&&a.length<a.highWaterMark&&(d("maybeReadMore read 0"),e.read(0),t!==a.length);)t=a.length;a.readingMore=!1}(e,a)}))}(e,a);else c||(a.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}d=d&&d.debuglog?d.debuglog("stream"):function(){},o.inherits(b,f),b.prototype.push=function(e,a){var t=this._readableState;return o.isString(e)&&!t.objectMode&&(a=a||t.defaultEncoding)!==t.encoding&&(e=new c(e,a),a=""),u(this,t,e,a,!1)},b.prototype.unshift=function(e){return u(this,this._readableState,e,"",!0)},b.prototype.setEncoding=function(e){return i||(i=t(63).StringDecoder),this._readableState.decoder=new i(e),this._readableState.encoding=e,this};var l=8388608;function p(e,a){return 0===a.length&&a.ended?0:a.objectMode?0===e?0:1:isNaN(e)||o.isNull(e)?a.flowing&&a.buffer.length?a.buffer[0].length:a.length:e<=0?0:(e>a.highWaterMark&&(a.highWaterMark=function(e){if(e>=l)e=l;else{e--;for(var a=1;a<32;a<<=1)e|=e>>a;e++}return e}(e)),e>a.length?a.ended?a.length:(a.needReadable=!0,0):e)}function h(e){var a=e._readableState;a.needReadable=!1,a.emittedReadable||(d("emitReadable",a.flowing),a.emittedReadable=!0,a.sync?process.nextTick(function(){m(e)}):m(e))}function m(e){d("emit readable"),e.emit("readable"),g(e)}function g(e){var a=e._readableState;if(d("flow",a.flowing),a.flowing)do{var t=e.read()}while(null!==t&&a.flowing)}function v(e,a){var t,r=a.buffer,n=a.length,i=!!a.decoder,f=!!a.objectMode;if(0===r.length)return null;if(0===n)t=null;else if(f)t=r.shift();else if(!e||e>=n)t=i?r.join(""):c.concat(r,n),r.length=0;else{if(e<r[0].length)t=(b=r[0]).slice(0,e),r[0]=b.slice(e);else if(e===r[0].length)t=r.shift();else{t=i?"":new c(e);for(var o=0,d=0,s=r.length;d<s&&o<e;d++){var b=r[0],u=Math.min(e-o,b.length);i?t+=b.slice(0,u):b.copy(t,o,0,u),u<b.length?r[0]=b.slice(u):r.shift(),o+=u}}}return t}function y(e){var a=e._readableState;if(a.length>0)throw new Error("endReadable called on non-empty stream");a.endEmitted||(a.ended=!0,process.nextTick(function(){a.endEmitted||0!==a.length||(a.endEmitted=!0,e.readable=!1,e.emit("end"))}))}b.prototype.read=function(e){d("read",e);var a=this._readableState,t=e;if((!o.isNumber(e)||e>0)&&(a.emittedReadable=!1),0===e&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return d("read: emitReadable",a.length,a.ended),0===a.length&&a.ended?y(this):h(this),null;if(0===(e=p(e,a))&&a.ended)return 0===a.length&&y(this),null;var r,c=a.needReadable;return d("need readable",c),(0===a.length||a.length-e<a.highWaterMark)&&d("length less than watermark",c=!0),(a.ended||a.reading)&&d("reading or ended",c=!1),c&&(d("do read"),a.reading=!0,a.sync=!0,0===a.length&&(a.needReadable=!0),this._read(a.highWaterMark),a.sync=!1),c&&!a.reading&&(e=p(t,a)),r=e>0?v(e,a):null,o.isNull(r)&&(a.needReadable=!0,e=0),a.length-=e,0!==a.length||a.ended||(a.needReadable=!0),t!==e&&a.ended&&0===a.length&&y(this),o.isNull(r)||this.emit("data",r),r},b.prototype._read=function(e){this.emit("error",new Error("not implemented"))},b.prototype.pipe=function(e,a){var t=this,c=this._readableState;switch(c.pipesCount){case 0:c.pipes=e;break;case 1:c.pipes=[c.pipes,e];break;default:c.pipes.push(e)}c.pipesCount+=1,d("pipe count=%d opts=%j",c.pipesCount,a);var i=(!a||!1!==a.end)&&e!==process.stdout&&e!==process.stderr?o:b;function f(e){d("onunpipe"),e===t&&b()}function o(){d("onend"),e.end()}c.endEmitted?process.nextTick(i):t.once("end",i),e.on("unpipe",f);var s=function(e){return function(){var a=e._readableState;d("pipeOnDrain",a.awaitDrain),a.awaitDrain&&a.awaitDrain--,0===a.awaitDrain&&n.listenerCount(e,"data")&&(a.flowing=!0,g(e))}}(t);function b(){d("cleanup"),e.removeListener("close",p),e.removeListener("finish",h),e.removeListener("drain",s),e.removeListener("error",l),e.removeListener("unpipe",f),t.removeListener("end",o),t.removeListener("end",b),t.removeListener("data",u),!c.awaitDrain||e._writableState&&!e._writableState.needDrain||s()}function u(a){d("ondata"),!1===e.write(a)&&(d("false write response, pause",t._readableState.awaitDrain),t._readableState.awaitDrain++,t.pause())}function l(a){d("onerror",a),m(),e.removeListener("error",l),0===n.listenerCount(e,"error")&&e.emit("error",a)}function p(){e.removeListener("finish",h),m()}function h(){d("onfinish"),e.removeListener("close",p),m()}function m(){d("unpipe"),t.unpipe(e)}return e.on("drain",s),t.on("data",u),e._events&&e._events.error?r(e._events.error)?e._events.error.unshift(l):e._events.error=[l,e._events.error]:e.on("error",l),e.once("close",p),e.once("finish",h),e.emit("pipe",t),c.flowing||(d("pipe resume"),t.resume()),e},b.prototype.unpipe=function(e){var a=this._readableState;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),this);if(!e){var t=a.pipes,r=a.pipesCount;a.pipes=null,a.pipesCount=0,a.flowing=!1;for(var c=0;c<r;c++)t[c].emit("unpipe",this);return this}return-1===(c=function(e,a){for(var t=0,r=e.length;t<r;t++)if(e[t]===a)return t;return-1}(a.pipes,e))?this:(a.pipes.splice(c,1),a.pipesCount-=1,1===a.pipesCount&&(a.pipes=a.pipes[0]),e.emit("unpipe",this),this)},b.prototype.on=function(e,a){var t=f.prototype.on.call(this,e,a);if("data"===e&&!1!==this._readableState.flowing&&this.resume(),"readable"===e&&this.readable){var r=this._readableState;if(!r.readableListening)if(r.readableListening=!0,r.emittedReadable=!1,r.needReadable=!0,r.reading)r.length&&h(this);else{var c=this;process.nextTick(function(){d("readable nexttick read 0"),c.read(0)})}}return t},b.prototype.addListener=b.prototype.on,b.prototype.resume=function(){var e=this._readableState;return e.flowing||(d("resume"),e.flowing=!0,e.reading||(d("resume read 0"),this.read(0)),function(e,a){a.resumeScheduled||(a.resumeScheduled=!0,process.nextTick(function(){!function(e,a){a.resumeScheduled=!1,e.emit("resume"),g(e),a.flowing&&!a.reading&&e.read(0)}(e,a)}))}(this,e)),this},b.prototype.pause=function(){return d("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(d("pause"),this._readableState.flowing=!1,this.emit("pause")),this},b.prototype.wrap=function(e){var a=this._readableState,t=!1,r=this;for(var c in e.on("end",function(){if(d("wrapped end"),a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&r.push(e)}r.push(null)}),e.on("data",function(c){(d("wrapped data"),a.decoder&&(c=a.decoder.write(c)),c&&(a.objectMode||c.length))&&(r.push(c)||(t=!0,e.pause()))}),e)o.isFunction(e[c])&&o.isUndefined(this[c])&&(this[c]=function(a){return function(){return e[a].apply(e,arguments)}}(c));return function(e,a){for(var t=0,r=e.length;t<r;t++)a(e[t],t)}(["error","close","destroy","pause","resume"],function(a){e.on(a,r.emit.bind(r,a))}),r._read=function(a){d("wrapped _read",a),t&&(t=!1,e.resume())},r},b._fromList=v},function(e,a){function t(e){this._db=e,this._operations=[],this._written=!1}t.prototype._serializeKey=function(e){return this._db._serializeKey(e)},t.prototype._serializeValue=function(e){return this._db._serializeValue(e)},t.prototype._checkWritten=function(){if(this._written)throw new Error("write() already called on this batch")},t.prototype.put=function(e,a){this._checkWritten();var t=this._db._checkKey(e,"key",this._db._isBuffer);if(t)throw t;return e=this._serializeKey(e),a=this._serializeValue(a),"function"==typeof this._put?this._put(e,a):this._operations.push({type:"put",key:e,value:a}),this},t.prototype.del=function(e){this._checkWritten();var a=this._db._checkKey(e,"key",this._db._isBuffer);if(a)throw a;return e=this._serializeKey(e),"function"==typeof this._del?this._del(e):this._operations.push({type:"del",key:e}),this},t.prototype.clear=function(){return this._checkWritten(),this._operations=[],"function"==typeof this._clear&&this._clear(),this},t.prototype.write=function(e,a){if(this._checkWritten(),"function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("write() requires a callback argument");return"object"!=typeof e&&(e={}),this._written=!0,"function"==typeof this._write?this._write(a):"function"==typeof this._db._batch?this._db._batch(this._operations,e,a):void process.nextTick(a)},e.exports=t},function(e,a){function t(e){this.db=e,this._ended=!1,this._nexting=!1}t.prototype.next=function(e){var a=this;if("function"!=typeof e)throw new Error("next() requires a callback argument");return a._ended?e(new Error("cannot call next() after end()")):a._nexting?e(new Error("cannot call next() before previous next() has completed")):(a._nexting=!0,"function"==typeof a._next?a._next(function(){a._nexting=!1,e.apply(null,arguments)}):void process.nextTick(function(){a._nexting=!1,e()}))},t.prototype.end=function(e){if("function"!=typeof e)throw new Error("end() requires a callback argument");return this._ended?e(new Error("end() already called on iterator")):(this._ended=!0,"function"==typeof this._end?this._end(e):void process.nextTick(e))},e.exports=t},function(e,a,t){var r=t(39),c=t(356),n=t(355);function i(e){if(!arguments.length||void 0===e)throw new Error("constructor requires at least a location argument");if("string"!=typeof e)throw new Error("constructor requires a location string argument");this.location=e,this.status="new"}i.prototype.open=function(e,a){var t=this,r=this.status;if("function"==typeof e&&(a=e),"function"!=typeof a)throw new Error("open() requires a callback argument");"object"!=typeof e&&(e={}),e.createIfMissing=0!=e.createIfMissing,e.errorIfExists=!!e.errorIfExists,"function"==typeof this._open?(this.status="opening",this._open(e,function(e){if(e)return t.status=r,a(e);t.status="open",a()})):(this.status="open",process.nextTick(a))},i.prototype.close=function(e){var a=this,t=this.status;if("function"!=typeof e)throw new Error("close() requires a callback argument");"function"==typeof this._close?(this.status="closing",this._close(function(r){if(r)return a.status=t,e(r);a.status="closed",e()})):(this.status="closed",process.nextTick(e))},i.prototype.get=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("get() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),a.asBuffer=0!=a.asBuffer,"function"==typeof this._get?this._get(e,a,t):void process.nextTick(function(){t(new Error("NotFound"))}))},i.prototype.put=function(e,a,t,r){var c;if("function"==typeof t&&(r=t),"function"!=typeof r)throw new Error("put() requires a callback argument");return(c=this._checkKey(e,"key"))?r(c):(e=this._serializeKey(e),a=this._serializeValue(a),"object"!=typeof t&&(t={}),"function"==typeof this._put?this._put(e,a,t,r):void process.nextTick(r))},i.prototype.del=function(e,a,t){var r;if("function"==typeof a&&(t=a),"function"!=typeof t)throw new Error("del() requires a callback argument");return(r=this._checkKey(e,"key"))?t(r):(e=this._serializeKey(e),"object"!=typeof a&&(a={}),"function"==typeof this._del?this._del(e,a,t):void process.nextTick(t))},i.prototype.batch=function(e,a,t){if(!arguments.length)return this._chainedBatch();if("function"==typeof a&&(t=a),"function"==typeof e&&(t=e),"function"!=typeof t)throw new Error("batch(array) requires a callback argument");if(!Array.isArray(e))return t(new Error("batch(array) requires an array argument"));a&&"object"==typeof a||(a={});for(var r,c,n=0,i=e.length;n<i;n++)if("object"==typeof(r=e[n])){if(c=this._checkKey(r.type,"type"))return t(c);if(c=this._checkKey(r.key,"key"))return t(c)}if("function"==typeof this._batch)return this._batch(e,a,t);process.nextTick(t)},i.prototype.approximateSize=function(e,a,t){if(null==e||null==a||"function"==typeof e||"function"==typeof a)throw new Error("approximateSize() requires valid `start`, `end` and `callback` arguments");if("function"!=typeof t)throw new Error("approximateSize() requires a callback argument");if(e=this._serializeKey(e),a=this._serializeKey(a),"function"==typeof this._approximateSize)return this._approximateSize(e,a,t);process.nextTick(function(){t(null,0)})},i.prototype._setupIteratorOptions=function(e){var a=this;return e=r(e),["start","end","gt","gte","lt","lte"].forEach(function(t){e[t]&&a._isBuffer(e[t])&&0===e[t].length&&delete e[t]}),e.reverse=!!e.reverse,e.keys=0!=e.keys,e.values=0!=e.values,e.limit="limit"in e?e.limit:-1,e.keyAsBuffer=0!=e.keyAsBuffer,e.valueAsBuffer=0!=e.valueAsBuffer,e},i.prototype.iterator=function(e){return"object"!=typeof e&&(e={}),e=this._setupIteratorOptions(e),"function"==typeof this._iterator?this._iterator(e):new c(this)},i.prototype._chainedBatch=function(){return new n(this)},i.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},i.prototype._serializeKey=function(e){return this._isBuffer(e)?e:String(e)},i.prototype._serializeValue=function(e){return null==e?"":this._isBuffer(e)||process.browser?e:String(e)},i.prototype._checkKey=function(e,a){return null===e||void 0===e?new Error(a+" cannot be `null` or `undefined`"):this._isBuffer(e)&&0===e.length?new Error(a+" cannot be an empty Buffer"):""===String(e)?new Error(a+" cannot be an empty String"):void 0},e.exports=i},function(e,a,t){a.AbstractLevelDOWN=t(357),a.AbstractIterator=t(356),a.AbstractChainedBatch=t(355),a.isLevelDOWN=t(931)},function(e,a){
/*!
  * prr
  * (c) 2013 Rod Vagg <rod@vagg.org>
  * https://github.com/rvagg/prr
  * License: MIT
  */
!function(a,t,r){void 0!==e&&e.exports?e.exports=r():t.prr=r()}(0,this,function(){var e="function"==typeof Object.defineProperty?function(e,a,t){return Object.defineProperty(e,a,t),e}:function(e,a,t){return e[a]=t.value,e};return function(a,t,r,c){var n;if(c=function(e,a){var t="object"==typeof a,r=!t&&"string"==typeof a,c=function(e){return t?!!a[e]:!!r&&a.indexOf(e[0])>-1};return{enumerable:c("enumerable"),configurable:c("configurable"),writable:c("writable"),value:e}}(r,c),"object"==typeof t){for(n in t)Object.hasOwnProperty.call(t,n)&&(c.value=t[n],e(a,n,c));return a}return e(a,t,c)}})},function(e){e.exports={genesisGasLimit:{v:5e3,d:"Gas limit of the Genesis block."},genesisDifficulty:{v:17179869184,d:"Difficulty of the Genesis block."},genesisNonce:{v:"0x0000000000000042",d:"the geneis nonce"},genesisExtraData:{v:"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",d:"extra data "},genesisHash:{v:"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",d:"genesis hash"},genesisStateRoot:{v:"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",d:"the genesis state root"},minGasLimit:{v:5e3,d:"Minimum the gas limit may ever be."},gasLimitBoundDivisor:{v:1024,d:"The bound divisor of the gas limit, used in update calculations."},minimumDifficulty:{v:131072,d:"The minimum that the difficulty may ever be."},difficultyBoundDivisor:{v:2048,d:"The bound divisor of the difficulty, used in the update calculations."},durationLimit:{v:13,d:"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not."},maximumExtraDataSize:{v:32,d:"Maximum size extra data may be after Genesis."},epochDuration:{v:3e4,d:"Duration between proof-of-work epochs."},stackLimit:{v:1024,d:"Maximum size of VM stack allowed."},callCreateDepth:{v:1024,d:"Maximum depth of call/create stack."},tierStepGas:{v:[0,2,3,5,8,10,20],d:"Once per operation, for a selection of them."},expGas:{v:10,d:"Once per EXP instuction."},expByteGas:{v:10,d:"Times ceil(log256(exponent)) for the EXP instruction."},sha3Gas:{v:30,d:"Once per SHA3 operation."},sha3WordGas:{v:6,d:"Once per word of the SHA3 operation's data."},sloadGas:{v:50,d:"Once per SLOAD operation."},sstoreSetGas:{v:2e4,d:"Once per SSTORE operation if the zeroness changes from zero."},sstoreResetGas:{v:5e3,d:"Once per SSTORE operation if the zeroness does not change from zero."},sstoreRefundGas:{v:15e3,d:"Once per SSTORE operation if the zeroness changes to zero."},jumpdestGas:{v:1,d:"Refunded gas, once per SSTORE operation if the zeroness changes to zero."},logGas:{v:375,d:"Per LOG* operation."},logDataGas:{v:8,d:"Per byte in a LOG* operation's data."},logTopicGas:{v:375,d:"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas."},createGas:{v:32e3,d:"Once per CREATE operation & contract-creation transaction."},callGas:{v:40,d:"Once per CALL operation & message call transaction."},callStipend:{v:2300,d:"Free gas given at beginning of call."},callValueTransferGas:{v:9e3,d:"Paid for CALL when the value transfor is non-zero."},callNewAccountGas:{v:25e3,d:"Paid for CALL when the destination address didn't exist prior."},suicideRefundGas:{v:24e3,d:"Refunded following a suicide operation."},memoryGas:{v:3,d:"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL."},quadCoeffDiv:{v:512,d:"Divisor for the quadratic particle of the memory cost equation."},createDataGas:{v:200,d:""},txGas:{v:21e3,d:"Per transaction. NOTE: Not payable on data of calls between transactions."},txCreation:{v:32e3,d:"the cost of creating a contract via tx"},txDataZeroGas:{v:4,d:"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions."},txDataNonZeroGas:{v:68,d:"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions."},copyGas:{v:3,d:"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added."},ecrecoverGas:{v:3e3,d:""},sha256Gas:{v:60,d:""},sha256WordGas:{v:12,d:""},ripemd160Gas:{v:600,d:""},ripemd160WordGas:{v:120,d:""},identityGas:{v:15,d:""},identityWordGas:{v:3,d:""},minerReward:{v:"5000000000000000000",d:"the amount a miner get rewarded for mining a block"},ommerReward:{v:"625000000000000000",d:"The amount of wei a miner of an uncle block gets for being inculded in the blockchain"},niblingReward:{v:"156250000000000000",d:"the amount a miner gets for inculding a uncle"},homeSteadForkNumber:{v:115e4,d:"the block that the Homestead fork started at"},homesteadRepriceForkNumber:{v:2463e3,d:"the block that the Homestead Reprice (EIP150) fork started at"},timebombPeriod:{v:1e5,d:"Exponential difficulty timebomb period"},freeBlockPeriod:{v:2}}},function(e,a,t){"use strict";var r=t(3),c=t(360),n=r.BN,i=new n("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),f=function(){function e(a){!function(e,a){if(!(e instanceof a))throw new TypeError("Cannot call a class as a function")}(this,e),a=a||{};var t=[{name:"nonce",length:32,allowLess:!0,default:new Buffer([])},{name:"gasPrice",length:32,allowLess:!0,default:new Buffer([])},{name:"gasLimit",alias:"gas",length:32,allowLess:!0,default:new Buffer([])},{name:"to",allowZero:!0,length:20,default:new Buffer([])},{name:"value",length:32,allowLess:!0,default:new Buffer([])},{name:"data",alias:"input",allowZero:!0,default:new Buffer([])},{name:"v",allowZero:!0,default:new Buffer([28])},{name:"r",length:32,allowZero:!0,allowLess:!0,default:new Buffer([])},{name:"s",length:32,allowZero:!0,allowLess:!0,default:new Buffer([])}];r.defineProperties(this,t,a),Object.defineProperty(this,"from",{enumerable:!0,configurable:!0,get:this.getSenderAddress.bind(this)});var c=r.bufferToInt(this.v),n=Math.floor((c-35)/2);n<0&&(n=0),this._chainId=n||a.chainId||0,this._homestead=!0}return e.prototype.toCreationAddress=function(){return""===this.to.toString("hex")},e.prototype.hash=function(e){void 0===e&&(e=!0);var a=void 0;if(e)a=this.raw;else if(this._chainId>0){var t=this.raw.slice();this.v=this._chainId,this.r=0,this.s=0,a=this.raw,this.raw=t}else a=this.raw.slice(0,6);return r.rlphash(a)},e.prototype.getChainId=function(){return this._chainId},e.prototype.getSenderAddress=function(){if(this._from)return this._from;var e=this.getSenderPublicKey();return this._from=r.publicToAddress(e),this._from},e.prototype.getSenderPublicKey=function(){if(!(this._senderPubKey&&this._senderPubKey.length||this.verifySignature()))throw new Error("Invalid Signature");return this._senderPubKey},e.prototype.verifySignature=function(){var e=this.hash(!1);if(this._homestead&&1===new n(this.s).cmp(i))return!1;try{var a=r.bufferToInt(this.v);this._chainId>0&&(a-=2*this._chainId+8),this._senderPubKey=r.ecrecover(e,a,this.r,this.s)}catch(e){return!1}return!!this._senderPubKey},e.prototype.sign=function(e){var a=this.hash(!1),t=r.ecsign(a,e);this._chainId>0&&(t.v+=2*this._chainId+8),Object.assign(this,t)},e.prototype.getDataFee=function(){for(var e=this.raw[5],a=new n(0),t=0;t<e.length;t++)0===e[t]?a.iaddn(c.txDataZeroGas.v):a.iaddn(c.txDataNonZeroGas.v);return a},e.prototype.getBaseFee=function(){var e=this.getDataFee().iaddn(c.txGas.v);return this._homestead&&this.toCreationAddress()&&e.iaddn(c.txCreation.v),e},e.prototype.getUpfrontCost=function(){return new n(this.gasLimit).imul(new n(this.gasPrice)).iadd(new n(this.value))},e.prototype.validate=function(e){var a=[];return this.verifySignature()||a.push("Invalid Signature"),this.getBaseFee().cmp(new n(this.gasLimit))>0&&a.push(["gas limit is too low. Need at least "+this.getBaseFee()]),void 0===e||!1===e?0===a.length:a.join(" ")},e}();e.exports=f},function(e,a,t){const r=t(180),c=t(91),n=t(11),i=t(52),f=t(9),o=t(30);a.MAX_INTEGER=new f("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),a.TWO_POW256=new f("10000000000000000000000000000000000000000000000000000000000000000",16),a.SHA3_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",a.SHA3_NULL=new Buffer(a.SHA3_NULL_S,"hex"),a.SHA3_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",a.SHA3_RLP_ARRAY=new Buffer(a.SHA3_RLP_ARRAY_S,"hex"),a.SHA3_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",a.SHA3_RLP=new Buffer(a.SHA3_RLP_S,"hex"),a.BN=f,a.rlp=i,a.secp256k1=c,a.zeros=function(e){var a=new Buffer(e);return a.fill(0),a},a.setLengthLeft=a.setLength=function(e,t,r){var c=a.zeros(t);return e=a.toBuffer(e),r?e.length<t?(e.copy(c),c):e.slice(0,t):e.length<t?(e.copy(c,t-e.length),c):e.slice(-t)},a.setLengthRight=function(e,t){return a.setLength(e,t,!0)},a.unpad=a.stripZeros=function(e){for(var t=(e=a.stripHexPrefix(e))[0];e.length>0&&"0"===t.toString();)t=(e=e.slice(1))[0];return e},a.toBuffer=function(e){if(!Buffer.isBuffer(e))if(Array.isArray(e))e=new Buffer(e);else if("string"==typeof e)e=a.isHexPrefixed(e)?new Buffer(a.padToEven(a.stripHexPrefix(e)),"hex"):new Buffer(e);else if("number"==typeof e)e=a.intToBuffer(e);else if(null===e||void 0===e)e=new Buffer([]);else{if(!e.toArray)throw new Error("invalid type");e=new Buffer(e.toArray())}return e},a.intToHex=function(e){n(e%1==0,"number is not a integer"),n(e>=0,"number must be positive");var a=e.toString(16);return a.length%2&&(a="0"+a),"0x"+a},a.intToBuffer=function(e){var t=a.intToHex(e);return new Buffer(t.slice(2),"hex")},a.bufferToInt=function(e){return parseInt(a.bufferToHex(e),16)},a.bufferToHex=function(e){return 0===(e=a.toBuffer(e)).length?0:"0x"+e.toString("hex")},a.fromSigned=function(e){return new f(e).fromTwos(256)},a.toUnsigned=function(e){return new Buffer(e.toTwos(256).toArray())},a.sha3=function(e,t){e=a.toBuffer(e),t||(t=256);var c=new r(t);return e&&c.update(e),new Buffer(c.digest("hex"),"hex")},a.sha256=function(e){return e=a.toBuffer(e),o("sha256").update(e).digest()},a.ripemd160=function(e,t){e=a.toBuffer(e);var r=o("rmd160").update(e).digest();return!0===t?a.setLength(r,32):r},a.rlphash=function(e){return a.sha3(i.encode(e))},a.isValidPrivate=function(e){return c.privateKeyVerify(e)},a.isValidPublic=function(e,a){return 64===e.length?c.publicKeyVerify(Buffer.concat([new Buffer([4]),e])):!!a&&c.publicKeyVerify(e)},a.pubToAddress=a.publicToAddress=function(e,t){return e=a.toBuffer(e),t&&64!==e.length&&(e=c.publicKeyConvert(e,!1).slice(1)),n(64===e.length),a.sha3(e).slice(-20)};var d=a.privateToPublic=function(e){return e=a.toBuffer(e),c.publicKeyCreate(e,!1).slice(1)};a.importPublic=function(e){return 64!==(e=a.toBuffer(e)).length&&(e=c.publicKeyConvert(e,!1).slice(1)),e},a.ecsign=function(e,a){var t=c.sign(e,a),r={};return r.r=t.signature.slice(0,32),r.s=t.signature.slice(32,64),r.v=t.recovery+27,r},a.ecrecover=function(e,t,r,n){var i=Buffer.concat([a.setLength(r,32),a.setLength(n,32)],64),f=a.bufferToInt(t)-27;if(0!==f&&1!==f)throw new Error("Invalid signature v value");var o=c.recover(e,i,f);return c.publicKeyConvert(o,!1).slice(1)},a.toRpcSig=function(e,t,r){return a.bufferToHex(Buffer.concat([t,r,a.toBuffer(e-27)]))},a.fromRpcSig=function(e){var t=(e=a.toBuffer(e))[64];return t<27&&(t+=27),{v:t,r:e.slice(0,32),s:e.slice(32,64)}},a.privateToAddress=function(e){return a.publicToAddress(d(e))},a.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/i.test(e)},a.toChecksumAddress=function(e){e=a.stripHexPrefix(e).toLowerCase();for(var t=a.sha3(e).toString("hex"),r="0x",c=0;c<e.length;c++)parseInt(t[c],16)>=8?r+=e[c].toUpperCase():r+=e[c];return r},a.isValidChecksumAddress=function(e){return a.isValidAddress(e)&&a.toChecksumAddress(e)===e},a.generateAddress=function(e,t){return e=a.toBuffer(e),t=(t=new f(t)).isZero()?null:new Buffer(t.toArray()),a.rlphash([e,t]).slice(-20)},a.isPrecompiled=function(e){var t=a.unpad(e);return 1===t.length&&t[0]>0&&t[0]<5},a.isHexPrefixed=function(e){return"0x"===e.slice(0,2)},a.stripHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e.slice(2):e},a.addHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e:"0x"+e},a.padToEven=function(e){return e.length%2&&(e="0"+e),e},a.baToJSON=function(e){if(Buffer.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var t=[],r=0;r<e.length;r++)t.push(a.baToJSON(e[r]));return t}},a.defineProperties=function(e,t,r){if(e.raw=[],e._fields=[],e.toJSON=function(t){if(t){var r={};return e._fields.forEach(function(a){r[a]="0x"+e[a].toString("hex")}),r}return a.baToJSON(this.raw)},e.serialize=function(){return i.encode(e.raw)},t.forEach(function(t,r){function c(){return e.raw[r]}function i(c){"00"!==(c=a.toBuffer(c)).toString("hex")||t.allowZero||(c=new Buffer([])),t.allowLess&&t.length?(c=a.stripZeros(c),n(t.length>=c.length,"The field "+t.name+" must not have more "+t.length+" bytes")):t.allowZero&&0===c.length||!t.length||n(t.length===c.length,"The field "+t.name+" must have byte length of "+t.length),e.raw[r]=c}e._fields.push(t.name),Object.defineProperty(e,t.name,{enumerable:!0,configurable:!0,get:c,set:i}),t.default&&(e[t.name]=t.default),t.alias&&Object.defineProperty(e,t.alias,{enumerable:!1,configurable:!0,set:i,get:c})}),r)if("string"==typeof r&&(r=new Buffer(a.stripHexPrefix(r),"hex")),Buffer.isBuffer(r)&&(r=i.decode(r)),Array.isArray(r)){if(r.length>e._fields.length)throw new Error("wrong number of fields in data");r.forEach(function(t,r){e[e._fields[r]]=a.toBuffer(t)})}else{if("object"!=typeof r)throw new Error("invalid data");for(var c in r)-1!==e._fields.indexOf(c)&&(e[c]=r[c])}}},function(e,a,t){const r=t(946),c=t(39);e.exports=function(e){return c({id:r(),jsonrpc:"2.0",params:[]},e)}},function(e,a,t){const r=t(5).EventEmitter,c=t(1).inherits;function n(){r.call(this),this.isLocked=!0}e.exports=n,c(n,r),n.prototype.go=function(){this.isLocked=!1,this.emit("unlock")},n.prototype.stop=function(){this.isLocked=!0,this.emit("lock")},n.prototype.await=function(e){const a=this;a.isLocked?a.once("unlock",e):setTimeout(e)}},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r=n(t(953)),c=n(t(366));function n(e){return e&&e.__esModule?e:{default:e}}a.default=(0,c.default)(r.default,1),e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a){return function(t,r,c){return e(t,a,r,c)}},e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a){a|=0;for(var t=Math.max(e.length-a,0),r=Array(t),c=0;c<t;c++)r[c]=e[a+c];return r},e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(){if(null===e)throw new Error("Callback was already called.");var a=e;e=null,a.apply(this,arguments)}},e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(){if(null!==e){var a=e;e=null,a.apply(this,arguments)}}},e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(a,t,o){if(o=(0,c.default)(o||r.default),e<=0||!a)return o(null);var d=(0,n.default)(a),s=!1,b=0,u=!1;function l(e,a){if(b-=1,e)s=!0,o(e);else{if(a===f.default||s&&b<=0)return s=!0,o(null);u||p()}}function p(){for(u=!0;b<e&&!s;){var a=d();if(null===a)return s=!0,void(b<=0&&o(null));b+=1,t(a.value,a.key,(0,i.default)(l))}u=!1}p()}};var r=o(t(182)),c=o(t(369)),n=o(t(976)),i=o(t(368)),f=o(t(371));function o(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default={},e.exports=a.default},function(e,a){var t=9007199254740991;e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}},function(e,a){e.exports=function(e){var a=typeof e;return null!=e&&("object"==a||"function"==a)}},function(e,a){var t="object"==typeof global&&global&&global.Object===Object&&global;e.exports=t},function(e,a,t){var r=t(374),c="object"==typeof self&&self&&self.Object===Object&&self,n=r||c||Function("return this")();e.exports=n},function(e,a,t){var r=t(375).Symbol;e.exports=r},function(e,a,t){var r=t(378);e.exports=function(e){return"string"!=typeof e?e:r(e)?e.slice(2):e}},function(e,a){e.exports=function(e){if("string"!=typeof e)throw new Error("[is-hex-prefixed] value must be type 'string', is currently type "+typeof e+", while checking isHexPrefixed.");return"0x"===e.slice(0,2)}},function(e,a,t){"use strict";var r=t(378),c=t(377);function n(e){var a=e;if("string"!=typeof a)throw new Error("[ethjs-util] while padding to even, value must be string, is currently "+typeof a+", while padToEven.");return a.length%2&&(a="0"+a),a}function i(e){return"0x"+n(e.toString(16))}e.exports={arrayContainsArray:function(e,a,t){if(!0!==Array.isArray(e))throw new Error("[ethjs-util] method arrayContainsArray requires input 'superset' to be an array got type '"+typeof e+"'");if(!0!==Array.isArray(a))throw new Error("[ethjs-util] method arrayContainsArray requires input 'subset' to be an array got type '"+typeof a+"'");return a[Boolean(t)?"some":"every"](function(a){return e.indexOf(a)>=0})},intToBuffer:function(e){var a=i(e);return new Buffer(a.slice(2),"hex")},getBinarySize:function(e){if("string"!=typeof e)throw new Error("[ethjs-util] while getting binary size, method getBinarySize requires input 'str' to be type String, got '"+typeof e+"'.");return Buffer.byteLength(e,"utf8")},isHexPrefixed:r,stripHexPrefix:c,padToEven:n,intToHex:i,fromAscii:function(e){for(var a="",t=0;t<e.length;t++){var r=e.charCodeAt(t).toString(16);a+=r.length<2?"0"+r:r}return"0x"+a},fromUtf8:function(e){return"0x"+n(new Buffer(e,"utf8").toString("hex")).replace(/^0+|0+$/g,"")},toAscii:function(e){var a="",t=0,r=e.length;for("0x"===e.substring(0,2)&&(t=2);t<r;t+=2){var c=parseInt(e.substr(t,2),16);a+=String.fromCharCode(c)}return a},toUtf8:function(e){return new Buffer(n(c(e).replace(/^0+|0+$/g,"")),"hex").toString("utf8")},getKeys:function(e,a,t){if(!Array.isArray(e))throw new Error("[ethjs-util] method getKeys expecting type Array as 'params' input, got '"+typeof e+"'");if("string"!=typeof a)throw new Error("[ethjs-util] method getKeys expecting type String for input 'key' got '"+typeof a+"'.");for(var r=[],c=0;c<e.length;c++){var n=e[c][a];if(t&&!n)n="";else if("string"!=typeof n)throw new Error("invalid abi");r.push(n)}return r},isHexString:function(e,a){return!("string"!=typeof e||!e.match(/^0x[0-9A-Fa-f]*$/)||a&&e.length!==2+2*a)}}},function(e,a,t){"use strict";var r=t(37),c=t(90),n=t(46),i=r.rotr64_hi,f=r.rotr64_lo,o=r.shr64_hi,d=r.shr64_lo,s=r.sum64,b=r.sum64_hi,u=r.sum64_lo,l=r.sum64_4_hi,p=r.sum64_4_lo,h=r.sum64_5_hi,m=r.sum64_5_lo,g=c.BlockHash,v=[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];function y(){if(!(this instanceof y))return new y;g.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=v,this.W=new Array(160)}function _(e,a,t,r,c){var n=e&t^~e&c;return n<0&&(n+=4294967296),n}function w(e,a,t,r,c,n){var i=a&r^~a&n;return i<0&&(i+=4294967296),i}function A(e,a,t,r,c){var n=e&t^e&c^t&c;return n<0&&(n+=4294967296),n}function k(e,a,t,r,c,n){var i=a&r^a&n^r&n;return i<0&&(i+=4294967296),i}function x(e,a){var t=i(e,a,28)^i(a,e,2)^i(a,e,7);return t<0&&(t+=4294967296),t}function E(e,a){var t=f(e,a,28)^f(a,e,2)^f(a,e,7);return t<0&&(t+=4294967296),t}function S(e,a){var t=i(e,a,14)^i(e,a,18)^i(a,e,9);return t<0&&(t+=4294967296),t}function T(e,a){var t=f(e,a,14)^f(e,a,18)^f(a,e,9);return t<0&&(t+=4294967296),t}function j(e,a){var t=i(e,a,1)^i(e,a,8)^o(e,a,7);return t<0&&(t+=4294967296),t}function C(e,a){var t=f(e,a,1)^f(e,a,8)^d(e,a,7);return t<0&&(t+=4294967296),t}function R(e,a){var t=i(e,a,19)^i(a,e,29)^o(e,a,6);return t<0&&(t+=4294967296),t}function O(e,a){var t=f(e,a,19)^f(a,e,29)^d(e,a,6);return t<0&&(t+=4294967296),t}r.inherits(y,g),e.exports=y,y.blockSize=1024,y.outSize=512,y.hmacStrength=192,y.padLength=128,y.prototype._prepareBlock=function(e,a){for(var t=this.W,r=0;r<32;r++)t[r]=e[a+r];for(;r<t.length;r+=2){var c=R(t[r-4],t[r-3]),n=O(t[r-4],t[r-3]),i=t[r-14],f=t[r-13],o=j(t[r-30],t[r-29]),d=C(t[r-30],t[r-29]),s=t[r-32],b=t[r-31];t[r]=l(c,n,i,f,o,d,s,b),t[r+1]=p(c,n,i,f,o,d,s,b)}},y.prototype._update=function(e,a){this._prepareBlock(e,a);var t=this.W,r=this.h[0],c=this.h[1],i=this.h[2],f=this.h[3],o=this.h[4],d=this.h[5],l=this.h[6],p=this.h[7],g=this.h[8],v=this.h[9],y=this.h[10],j=this.h[11],C=this.h[12],R=this.h[13],O=this.h[14],B=this.h[15];n(this.k.length===t.length);for(var M=0;M<t.length;M+=2){var N=O,I=B,P=S(g,v),F=T(g,v),L=_(g,v,y,j,C),D=w(g,v,y,j,C,R),z=this.k[M],q=this.k[M+1],U=t[M],H=t[M+1],V=h(N,I,P,F,L,D,z,q,U,H),G=m(N,I,P,F,L,D,z,q,U,H);N=x(r,c),I=E(r,c),P=A(r,c,i,f,o),F=k(r,c,i,f,o,d);var W=b(N,I,P,F),Y=u(N,I,P,F);O=C,B=R,C=y,R=j,y=g,j=v,g=b(l,p,V,G),v=u(p,p,V,G),l=o,p=d,o=i,d=f,i=r,f=c,r=b(V,G,W,Y),c=u(V,G,W,Y)}s(this.h,0,r,c),s(this.h,2,i,f),s(this.h,4,o,d),s(this.h,6,l,p),s(this.h,8,g,v),s(this.h,10,y,j),s(this.h,12,C,R),s(this.h,14,O,B)},y.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h,"big"):r.split32(this.h,"big")}},function(e,a,t){"use strict";var r=t(37),c=t(90),n=t(382),i=t(46),f=r.sum32,o=r.sum32_4,d=r.sum32_5,s=n.ch32,b=n.maj32,u=n.s0_256,l=n.s1_256,p=n.g0_256,h=n.g1_256,m=c.BlockHash,g=[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];function v(){if(!(this instanceof v))return new v;m.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=g,this.W=new Array(64)}r.inherits(v,m),e.exports=v,v.blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(e,a){for(var t=this.W,r=0;r<16;r++)t[r]=e[a+r];for(;r<t.length;r++)t[r]=o(h(t[r-2]),t[r-7],p(t[r-15]),t[r-16]);var c=this.h[0],n=this.h[1],m=this.h[2],g=this.h[3],v=this.h[4],y=this.h[5],_=this.h[6],w=this.h[7];for(i(this.k.length===t.length),r=0;r<t.length;r++){var A=d(w,l(v),s(v,y,_),this.k[r],t[r]),k=f(u(c),b(c,n,m));w=_,_=y,y=v,v=f(g,A),g=m,m=n,n=c,c=f(A,k)}this.h[0]=f(this.h[0],c),this.h[1]=f(this.h[1],n),this.h[2]=f(this.h[2],m),this.h[3]=f(this.h[3],g),this.h[4]=f(this.h[4],v),this.h[5]=f(this.h[5],y),this.h[6]=f(this.h[6],_),this.h[7]=f(this.h[7],w)},v.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h,"big"):r.split32(this.h,"big")}},function(e,a,t){"use strict";var r=t(37).rotr32;function c(e,a,t){return e&a^~e&t}function n(e,a,t){return e&a^e&t^a&t}function i(e,a,t){return e^a^t}a.ft_1=function(e,a,t,r){return 0===e?c(a,t,r):1===e||3===e?i(a,t,r):2===e?n(a,t,r):void 0},a.ch32=c,a.maj32=n,a.p32=i,a.s0_256=function(e){return r(e,2)^r(e,13)^r(e,22)},a.s1_256=function(e){return r(e,6)^r(e,11)^r(e,25)},a.g0_256=function(e){return r(e,7)^r(e,18)^e>>>3},a.g1_256=function(e){return r(e,17)^r(e,19)^e>>>10}},function(e,a,t){"use strict";var r=a;function c(e){return 1===e.length?"0"+e:e}function n(e){for(var a="",t=0;t<e.length;t++)a+=c(e[t].toString(16));return a}r.toArray=function(e,a){if(Array.isArray(e))return e.slice();if(!e)return[];var t=[];if("string"!=typeof e){for(var r=0;r<e.length;r++)t[r]=0|e[r];return t}if("hex"===a)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),r=0;r<e.length;r+=2)t.push(parseInt(e[r]+e[r+1],16));else for(r=0;r<e.length;r++){var c=e.charCodeAt(r),n=c>>8,i=255&c;n?t.push(n,i):t.push(i)}return t},r.zero2=c,r.toHex=n,r.encode=function(e,a){return"hex"===a?n(e):e}},function(e){e.exports={COMPRESSED_TYPE_INVALID:"compressed should be a boolean",EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid",EC_PRIVATE_KEY_RANGE_INVALID:"private key range is invalid",EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid",EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format",EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array",EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer",EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid",EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again",EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid",ECDH_FAIL:"scalar was invalid (zero or overflow)",ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer",ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature",ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature",ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid",ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",MSG32_TYPE_INVALID:"message should be a Buffer",MSG32_LENGTH_INVALID:"message length is invalid",OPTIONS_TYPE_INVALID:"options should be an Object",OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer",OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function",RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4",TWEAK_TYPE_INVALID:"tweak should be a Buffer",TWEAK_LENGTH_INVALID:"tweak length is invalid"}},function(e,a){function t(e){var a=new Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}t.keys=function(){return[]},t.resolve=t,e.exports=t,t.id=385},function(e,a,t){"use strict";var r=t(1022),c=t(1020);e.exports=function(e){var a=r(e),t=c(e);return function(e,r){switch("string"==typeof e?e.toLowerCase():e){case"keccak224":return new a(1152,448,null,224,r);case"keccak256":return new a(1088,512,null,256,r);case"keccak384":return new a(832,768,null,384,r);case"keccak512":return new a(576,1024,null,512,r);case"sha3-224":return new a(1152,448,6,224,r);case"sha3-256":return new a(1088,512,6,256,r);case"sha3-384":return new a(832,768,6,384,r);case"sha3-512":return new a(576,1024,6,512,r);case"shake128":return new t(1344,256,31,r);case"shake256":return new t(1088,512,31,r);default:throw new Error("Invald algorithm: "+e)}}}},function(e,a,t){let r=t(1025),c=t(945),n=t(941),i=t(940),f=t(939),o=t(938),d=t(408),s=t(171),b=t(5),u=t(66);function l(e){const a=this;b.call(this),this.options=e=a._applyDefaultOptions(e||{});let t=new o(e,this);this.engine=new r({blockTracker:new d({blockchain:t.state.blockchain})});let s=new c;this.engine.manager=t,this.engine.addProvider(new n),this.engine.addProvider(new i),this.engine.addProvider(s),this.engine.addProvider(new f),this.engine.addProvider(t),this.engine.setMaxListeners(100),this.engine.start(),this.manager=t,this.sendAsync=this.send.bind(this),this.send=this.send.bind(this),this.close=this.close.bind(this),this._queueRequest=this._queueRequest.bind(this),this._processRequestQueue=this._processRequestQueue.bind(this),s.on("data",function(e,t){a.emit("data",e,t)})}const p={vmErrorsOnRPCResponse:!0,verbose:!1,asyncRequestProcessing:!1,logger:{log:function(){}}};l.prototype=Object.create(b.prototype),l.prototype.constructor=l,l.prototype._applyDefaultOptions=function(e){return u.merge({},p,e)},l.prototype.send=function(e,a){if("function"!=typeof a)throw new Error("No callback provided to provider's send function. As of web3 1.0, provider.send is no longer synchronous and must be passed a callback as its final argument.");let t=this,r=function(e){return u.cloneDeep(e)};e=Array.isArray(e)?e.map(r):r(e);let c=function(r,c){let n;if(c=u.cloneDeep(c),Array.isArray(c)){n=[];for(let a=0;a<c.length;a++)n.push(t.reportErrorInResponse(e[a],r,c[a]))}else n=t.reportErrorInResponse(e,r,c);t.options.verbose&&t.options.logger.log(" <   "+JSON.stringify(n,null,2).split("\n").join("\n <   ")),a(n.error?r:null,n)};t.options.verbose&&t.options.logger.log("   > "+JSON.stringify(e,null,2).split("\n").join("\n   > ")),t.options.asyncRequestProcessing?t.engine.sendAsync(e,c):t._queueRequest(e,c)},l.prototype.close=function(e){this.manager.state.blockchain.close(e),this.engine.stop()},l.prototype._queueRequest=function(e,a){this._requestQueue||(this._requestQueue=[]),this._requestQueue.push({payload:e,callback:a}),setImmediate(this._processRequestQueue)},l.prototype._processRequestQueue=function(){const e=this;if(e._requestInProgress)return;e._requestInProgress=!0;let a=e._requestQueue.shift();a?e.engine.sendAsync(a.payload,(t,r)=>{e._requestQueue.length>0&&setImmediate(e._processRequestQueue),a.callback(t,r),e._requestInProgress=!1}):(e._requestInProgress=!1,e._requestQueue.length>0&&setImmediate(e._processRequestQueue))},l.prototype.cleanUpErrorObject=function(e,a){if(!e||!a.error)return a;let t={error:{data:{}}};return e.message?(t.error.message=e.message,t.error.data.stack=e.stack,t.error.data.name=e.name):a.error||(t.error={message:e.toString()}),u.merge(a,t)};let h=["eth_sendTransaction","eth_sendRawTransaction","personal_sendTransaction"];l.prototype._isTransactionRequest=function(e){return-1!=h.indexOf(e.method)},l.prototype.reportErrorInResponse=function(e,a,t){const r=this;return a?(r._isTransactionRequest(e)&&a instanceof s&&(t.result=a.hashes[0],r.options.vmErrorsOnRPCResponse?(t.error.data||(t.error.data={}),t.error.data[a.hashes[0]]=a.results[a.hashes[0]]):delete t.error),"eth_call"===e.method&&a instanceof s&&(r.options.vmErrorsOnRPCResponse?(t.error.data||(t.error.data={}),t.error.data[a.hashes[0]]=a.results[a.hashes[0]]):(t.result=a.results[a.hashes[0]].return||"0x",delete t.error)),r.cleanUpErrorObject(a,t)):t},e.exports=l},function(e,a,t){var r=t(92),c=Object.prototype.hasOwnProperty,n="undefined"!=typeof Map;function i(){this._array=[],this._set=n?new Map:Object.create(null)}i.fromArray=function(e,a){for(var t=new i,r=0,c=e.length;r<c;r++)t.add(e[r],a);return t},i.prototype.size=function(){return n?this._set.size:Object.getOwnPropertyNames(this._set).length},i.prototype.add=function(e,a){var t=n?e:r.toSetString(e),i=n?this.has(e):c.call(this._set,t),f=this._array.length;i&&!a||this._array.push(e),i||(n?this._set.set(e,f):this._set[t]=f)},i.prototype.has=function(e){if(n)return this._set.has(e);var a=r.toSetString(e);return c.call(this._set,a)},i.prototype.indexOf=function(e){if(n){var a=this._set.get(e);if(a>=0)return a}else{var t=r.toSetString(e);if(c.call(this._set,t))return this._set[t]}throw new Error('"'+e+'" is not in the set.')},i.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},i.prototype.toArray=function(){return this._array.slice()},a.ArraySet=i},function(e,a,t){var r=t(1033);a.encode=function(e){var a,t="",c=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{a=31&c,(c>>>=5)>0&&(a|=32),t+=r.encode(a)}while(c>0);return t},a.decode=function(e,a,t){var c,n,i=e.length,f=0,o=0;do{if(a>=i)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(n=r.decode(e.charCodeAt(a++))))throw new Error("Invalid base64 digit: "+e.charAt(a-1));c=!!(32&n),f+=(n&=31)<<o,o+=5}while(c);t.value=function(e){var a=e>>1;return 1==(1&e)?-a:a}(f),t.rest=a}},function(e,a,t){var r=t(389),c=t(92),n=t(388).ArraySet,i=t(1032).MappingList;function f(e){e||(e={}),this._file=c.getArg(e,"file",null),this._sourceRoot=c.getArg(e,"sourceRoot",null),this._skipValidation=c.getArg(e,"skipValidation",!1),this._sources=new n,this._names=new n,this._mappings=new i,this._sourcesContents=null}f.prototype._version=3,f.fromSourceMap=function(e){var a=e.sourceRoot,t=new f({file:e.file,sourceRoot:a});return e.eachMapping(function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=a&&(r.source=c.relative(a,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),t.addMapping(r)}),e.sources.forEach(function(r){var n=r;null!==a&&(n=c.relative(a,r)),t._sources.has(n)||t._sources.add(n);var i=e.sourceContentFor(r);null!=i&&t.setSourceContent(r,i)}),t},f.prototype.addMapping=function(e){var a=c.getArg(e,"generated"),t=c.getArg(e,"original",null),r=c.getArg(e,"source",null),n=c.getArg(e,"name",null);this._skipValidation||this._validateMapping(a,t,r,n),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=n&&(n=String(n),this._names.has(n)||this._names.add(n)),this._mappings.add({generatedLine:a.line,generatedColumn:a.column,originalLine:null!=t&&t.line,originalColumn:null!=t&&t.column,source:r,name:n})},f.prototype.setSourceContent=function(e,a){var t=e;null!=this._sourceRoot&&(t=c.relative(this._sourceRoot,t)),null!=a?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[c.toSetString(t)]=a):this._sourcesContents&&(delete this._sourcesContents[c.toSetString(t)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},f.prototype.applySourceMap=function(e,a,t){var r=a;if(null==a){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=e.file}var i=this._sourceRoot;null!=i&&(r=c.relative(i,r));var f=new n,o=new n;this._mappings.unsortedForEach(function(a){if(a.source===r&&null!=a.originalLine){var n=e.originalPositionFor({line:a.originalLine,column:a.originalColumn});null!=n.source&&(a.source=n.source,null!=t&&(a.source=c.join(t,a.source)),null!=i&&(a.source=c.relative(i,a.source)),a.originalLine=n.line,a.originalColumn=n.column,null!=n.name&&(a.name=n.name))}var d=a.source;null==d||f.has(d)||f.add(d);var s=a.name;null==s||o.has(s)||o.add(s)},this),this._sources=f,this._names=o,e.sources.forEach(function(a){var r=e.sourceContentFor(a);null!=r&&(null!=t&&(a=c.join(t,a)),null!=i&&(a=c.relative(i,a)),this.setSourceContent(a,r))},this)},f.prototype._validateMapping=function(e,a,t,r){if(a&&"number"!=typeof a.line&&"number"!=typeof a.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||a||t||r)&&!(e&&"line"in e&&"column"in e&&a&&"line"in a&&"column"in a&&e.line>0&&e.column>=0&&a.line>0&&a.column>=0&&t))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:t,original:a,name:r}))},f.prototype._serializeMappings=function(){for(var e,a,t,n,i=0,f=1,o=0,d=0,s=0,b=0,u="",l=this._mappings.toArray(),p=0,h=l.length;p<h;p++){if(e="",(a=l[p]).generatedLine!==f)for(i=0;a.generatedLine!==f;)e+=";",f++;else if(p>0){if(!c.compareByGeneratedPositionsInflated(a,l[p-1]))continue;e+=","}e+=r.encode(a.generatedColumn-i),i=a.generatedColumn,null!=a.source&&(n=this._sources.indexOf(a.source),e+=r.encode(n-b),b=n,e+=r.encode(a.originalLine-1-d),d=a.originalLine-1,e+=r.encode(a.originalColumn-o),o=a.originalColumn,null!=a.name&&(t=this._names.indexOf(a.name),e+=r.encode(t-s),s=t)),u+=e}return u},f.prototype._generateSourcesContent=function(e,a){return e.map(function(e){if(!this._sourcesContents)return null;null!=a&&(e=c.relative(a,e));var t=c.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,t)?this._sourcesContents[t]:null},this)},f.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},f.prototype.toString=function(){return JSON.stringify(this.toJSON())},a.SourceMapGenerator=f},function(e,a,t){var r=t(43);e.exports=function(e,a){var t=r.createServer(function(t,r){t.headers;var c=t.method,n=(t.url,[]);t.on("error",function(e){}).on("data",function(e){n.push(e)}).on("end",function(){n=Buffer.concat(n).toString();var t={"Access-Control-Allow-Headers":"Origin, X-Requested-With, Content-Type, Accept, User-Agent","Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"*"};switch(c){case"OPTIONS":t["Content-Type"]="text/plain",r.writeHead(200,t),r.end("");break;case"POST":var i;try{i=JSON.parse(n)}catch(e){return t["Content-Type"]="text/plain",r.writeHead(400,t),void r.end("400 Bad Request")}if(i instanceof Array)for(var f=0;f<i.length;f++){var o=i[f];a.log(o.method)}else a.log(i.method);e.send(i,function(e,a){t["Content-Type"]="application/json",r.writeHead(200,t),r.end(JSON.stringify(a))});break;default:r.writeHead(400,{"Access-Control-Allow-Headers":"Origin, X-Requested-With, Content-Type, Accept, User-Agent","Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"*","Content-Type":"text/plain"}),r.end("400 Bad Request")}})});return t.ganacheProvider=e,t}},function(e){e.exports={_args:[["websocket@1.0.26","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"websocket@1.0.26",_id:"websocket@1.0.26",_inBundle:!1,_integrity:"sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==",_location:"/ganache-core/websocket",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"websocket@1.0.26",name:"websocket",escapedName:"websocket",rawSpec:"1.0.26",saveSpec:null,fetchSpec:"1.0.26"},_requiredBy:["/ganache-core"],_resolved:"https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz",_spec:"1.0.26",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",author:{name:"Brian McKelvey",email:"brian@worlize.com",url:"https://www.worlize.com/"},browser:"lib/browser.js",bugs:{url:"https://github.com/theturtle32/WebSocket-Node/issues"},config:{verbose:!1},contributors:[{name:"Iñaki Baz Castillo",email:"ibc@aliax.net",url:"http://dev.sipdoc.net"}],dependencies:{debug:"^2.2.0",nan:"^2.3.3","typedarray-to-buffer":"^3.1.2",yaeti:"^0.0.6"},description:"Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.",devDependencies:{"buffer-equal":"^1.0.0",faucet:"^0.0.1",gulp:"git+https://github.com/gulpjs/gulp.git#4.0","gulp-jshint":"^2.0.4",jshint:"^2.0.0","jshint-stylish":"^2.2.1",tape:"^4.0.1"},directories:{lib:"./lib"},engines:{node:">=0.10.0"},homepage:"https://github.com/theturtle32/WebSocket-Node",keywords:["websocket","websockets","socket","networking","comet","push","RFC-6455","realtime","server","client"],license:"Apache-2.0",main:"index",name:"websocket",repository:{type:"git",url:"git+https://github.com/theturtle32/WebSocket-Node.git"},scripts:{gulp:"gulp",install:"(node-gyp rebuild 2> builderror.log) || (exit 0)",test:"faucet test/unit"},version:"1.0.26"}},function(e,a,t){e.exports=t(392).version},function(e,a){var t={disableWarnings:!1,deprecationWarningMap:{},warn:function(e){!this.disableWarnings&&this.deprecationWarningMap[e]&&(console.warn("DEPRECATION WARNING: "+this.deprecationWarningMap[e]),this.deprecationWarningMap[e]=!1)}};e.exports=t},function(e,a,t){var r=t(186),c=t(312),n=t(311);const i=0,f=1,o=2,d=3;function s(e,a,t,c,o,s){n.EventTarget.call(this),(s=s||{}).assembleFragments=!0;var h=this;this._url=e,this._readyState=i,this._protocol=void 0,this._extensions="",this._bufferedAmount=0,this._binaryType="arraybuffer",this._connection=void 0,this._client=new r(s),this._client.on("connect",function(e){(function(e){var a=this;this._readyState=f,this._connection=e,this._protocol=e.protocol,this._extensions=e.extensions,this._connection.on("close",function(e,t){(function(e,a){p.call(this),this._readyState=d,this.dispatchEvent(b(e,a||""))}).call(a,e,t)}),this._connection.on("message",function(e){(function(e){if(e.utf8Data)this.dispatchEvent(u(e.utf8Data));else if(e.binaryData&&"arraybuffer"===this.binaryType){for(var a=e.binaryData,t=new ArrayBuffer(a.length),r=new Uint8Array(t),c=0,n=a.length;c<n;++c)r[c]=a[c];this.dispatchEvent(u(t))}}).call(a,e)}),this.dispatchEvent(new n.Event("open"))}).call(h,e)}),this._client.on("connectFailed",function(){l.call(h)}),this._client.connect(e,a,t,c,o)}function b(e,a){var t=new n.Event("close");return t.code=e,t.reason=a,t.wasClean=void 0===e||1e3===e,t}function u(e){var a=new n.Event("message");return a.data=e,a}function l(){p.call(this),this._readyState=d;try{this.dispatchEvent(new n.Event("error"))}finally{this.dispatchEvent(b(1006,"connection failed"))}}function p(){this._client.removeAllListeners(),this._connection&&this._connection.removeAllListeners()}e.exports=s,Object.defineProperties(s.prototype,{url:{get:function(){return this._url}},readyState:{get:function(){return this._readyState}},protocol:{get:function(){return this._protocol}},extensions:{get:function(){return this._extensions}},bufferedAmount:{get:function(){return this._bufferedAmount}}}),Object.defineProperties(s.prototype,{binaryType:{get:function(){return this._binaryType},set:function(e){if("arraybuffer"!==e)throw new SyntaxError('just "arraybuffer" type allowed for "binaryType" attribute');this._binaryType=e}}}),[["CONNECTING",i],["OPEN",f],["CLOSING",o],["CLOSED",d]].forEach(function(e){Object.defineProperty(s.prototype,e[0],{get:function(){return e[1]}})}),[["CONNECTING",i],["OPEN",f],["CLOSING",o],["CLOSED",d]].forEach(function(e){Object.defineProperty(s,e[0],{get:function(){return e[1]}})}),s.prototype.send=function(e){if(this._readyState!==f)throw new Error("cannot call send() while not connected");if("string"==typeof e||e instanceof String)this._connection.sendUTF(e);else if(e instanceof Buffer)this._connection.sendBytes(e);else{if(!e.byteLength&&0!==e.byteLength)throw new Error("unknown binary data:",e);e=c(e),this._connection.sendBytes(e)}},s.prototype.close=function(e,a){switch(this._readyState){case i:l.call(this),this._client.on("connect",function(t){e?t.close(e,a):t.close()});break;case f:this._readyState=o,e?this._connection.close(e,a):this._connection.close()}}},function(e,a,t){var r=t(1),c=t(5).EventEmitter;function n(e,a){c.call(this),this.webSocketRequest=e,this.protocol="____no_protocol____"===a?null:a,this.origin=e.origin,this.resource=e.resource,this.resourceURL=e.resourceURL,this.httpRequest=e.httpRequest,this.remoteAddress=e.remoteAddress,this.webSocketVersion=e.webSocketVersion,this.requestedExtensions=e.requestedExtensions,this.cookies=e.cookies}r.inherits(n,c),n.prototype.accept=function(e,a){var t=this.webSocketRequest.accept(this.protocol,e,a);return this.emit("requestAccepted",t),t},n.prototype.reject=function(e,a,t){this.webSocketRequest.reject(e,a,t),this.emit("requestRejected",this)},e.exports=n},function(e,a,t){var r=t(65).extend,c=t(1),n=t(5).EventEmitter,i=t(396);function f(e){n.call(this),this.config={server:null},e&&r(this.config,e),this.handlers=[],this._requestHandler=this.handleRequest.bind(this),this.config.server&&this.attachServer(this.config.server)}c.inherits(f,n),f.prototype.attachServer=function(e){if(!e)throw new Error("You must specify a WebSocketServer instance to attach to.");this.server=e,this.server.on("request",this._requestHandler)},f.prototype.detachServer=function(){if(!this.server)throw new Error("Cannot detach from server: not attached.");this.server.removeListener("request",this._requestHandler),this.server=null},f.prototype.mount=function(e,a,t){if(!e)throw new Error("You must specify a path for this handler.");if(a||(a="____no_protocol____"),!t)throw new Error("You must specify a callback for this handler.");if(!((e=this.pathToRegExp(e))instanceof RegExp))throw new Error("Path must be specified as either a string or a RegExp.");var r=e.toString();if(a=a.toLocaleLowerCase(),-1!==this.findHandlerIndex(r,a))throw new Error("You may only mount one handler per path/protocol combination.");this.handlers.push({path:e,pathString:r,protocol:a,callback:t})},f.prototype.unmount=function(e,a){var t=this.findHandlerIndex(this.pathToRegExp(e).toString(),a);if(-1===t)throw new Error("Unable to find a route matching the specified path and protocol.");this.handlers.splice(t,1)},f.prototype.findHandlerIndex=function(e,a){a=a.toLocaleLowerCase();for(var t=0,r=this.handlers.length;t<r;t++){var c=this.handlers[t];if(c.pathString===e&&c.protocol===a)return t}return-1},f.prototype.pathToRegExp=function(e){return"string"==typeof e&&("*"===e?e=/^.*$/:(e=e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),e=new RegExp("^"+e+"$"))),e},f.prototype.handleRequest=function(e){var a=e.requestedProtocols;0===a.length&&(a=["____no_protocol____"]);for(var t=0;t<a.length;t++)for(var r=a[t].toLocaleLowerCase(),c=0,n=this.handlers.length;c<n;c++){var f=this.handlers[c];if(f.path.test(e.resourceURL.pathname)&&(r===f.protocol||"*"===f.protocol)){var o=new i(e,r);return void f.callback(o)}}e.reject(404,"No handler is available for the given request.")},e.exports=f},function(e,a){
/*!
 * UTF-8 Validation Fallback Code originally from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
e.exports.Validation={isValidUTF8:function(){return!0}}},function(e,a,t){
/*!
 * UTF-8 Validation Code originally from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/Release/validation'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/default/validation'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(398)}catch(e){throw console.error("validation.node seems not to have been built. Run npm install."),e}}}},function(e,a,t){var r=t(24).Buffer,c=t(5).EventEmitter;function n(e){if(!(this instanceof n))return new n(e);c.call(this);var a=this;void 0===e&&(e={}),a.encoding=e.encoding,a.construct=e.construct||r;var t={next:null,buffer:null},i={next:null,buffer:null},f=0;a.__defineGetter__("length",function(){return f});var o=0;a.write=function(e){return t.buffer?(i.next={next:null,buffer:e},i=i.next):(t.buffer=e,i=t),f+=e.length,a.emit("write",e),!0},a.end=function(e){r.isBuffer(e)&&a.write(e)},a.push=function(){return[].concat.apply([],arguments).forEach(a.write),a},a.forEach=function(e){if(!t.buffer)return new a.construct(0);if(t.buffer.length-o<=0)return a;for(var r={buffer:t.buffer.slice(o),next:t.next};r&&r.buffer;){if(e(r.buffer))break;r=r.next}return a},a.join=function(e,r){if(!t.buffer)return new a.construct(0);void 0==e&&(e=0),void 0==r&&(r=a.length);var c=new a.construct(r-e),n=0;return a.forEach(function(a){if(e<n+a.length&&n<r&&a.copy(c,Math.max(0,n-e),Math.max(0,e-n),Math.min(a.length,r-n)),(n+=a.length)>r)return!0}),c},a.joinInto=function(e,r,c,n){if(!t.buffer)return new a.construct(0);void 0==c&&(c=0),void 0==n&&(n=a.length);var i=e;if(i.length-r<n-c)throw new Error("Insufficient space available in target Buffer.");var f=0;return a.forEach(function(e){if(c<f+e.length&&f<n&&e.copy(i,Math.max(r,r+f-c),Math.max(0,c-f),Math.min(e.length,n-f)),(f+=e.length)>n)return!0}),i},a.advance=function(e){for(o+=e,f-=e;t.buffer&&o>=t.buffer.length;)o-=t.buffer.length,t=t.next?t.next:{buffer:null,next:null};return null===t.buffer&&(i={next:null,buffer:null}),a.emit("advance",e),a},a.take=function(e,t){void 0==e?e=a.length:"number"!=typeof e&&(t=e,e=a.length);if(t||(t=a.encoding),t){var r="";return a.forEach(function(a){if(e<=0)return!0;r+=a.toString(t,0,Math.min(e,a.length)),e-=a.length}),r}return a.join(0,e)},a.toString=function(){return a.take("binary")}}e.exports=n,e.exports.BufferList=n,t(1).inherits(n,c)},function(e,a){
/*!
 * Copied from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
e.exports.BufferUtil={merge:function(e,a){for(var t=0,r=0,c=a.length;r<c;++r){var n=a[r];n.copy(e,t),t+=n.length}},mask:function(e,a,t,r,c){for(var n=a.readUInt32LE(0),i=0;i<c-3;i+=4){var f=n^e.readUInt32LE(i);f<0&&(f=4294967296+f),t.writeUInt32LE(f,r+i)}switch(c%4){case 3:t[r+i+2]=e[i+2]^a[2];case 2:t[r+i+1]=e[i+1]^a[1];case 1:t[r+i]=e[i]^a[0]}},unmask:function(e,a){for(var t=a.readUInt32LE(0),r=e.length,c=0;c<r-3;c+=4){var n=t^e.readUInt32LE(c);n<0&&(n=4294967296+n),e.writeUInt32LE(n,c)}switch(r%4){case 3:e[c+2]=e[c+2]^a[2];case 2:e[c+1]=e[c+1]^a[1];case 1:e[c]=e[c]^a[0]}}}},function(e,a,t){
/*!
 * Copied from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/Release/bufferutil'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/default/bufferutil'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(401)}catch(e){throw console.error("bufferutil.node seems to not have been built. Run npm install."),e}}}},function(e,a,t){var r=t(65).extend,c=t(65),n=t(1),i=t(115)("websocket:server"),f=t(5).EventEmitter,o=t(188),d=function(e){f.call(this),this._handlers={upgrade:this.handleUpgrade.bind(this),requestAccepted:this.handleRequestAccepted.bind(this),requestResolved:this.handleRequestResolved.bind(this)},this.connections=[],this.pendingRequests=[],e&&this.mount(e)};n.inherits(d,f),d.prototype.mount=function(e){if(this.config={httpServer:null,maxReceivedFrameSize:65536,maxReceivedMessageSize:1048576,fragmentOutgoingMessages:!0,fragmentationThreshold:16384,keepalive:!0,keepaliveInterval:2e4,dropConnectionOnKeepaliveTimeout:!0,keepaliveGracePeriod:1e4,useNativeKeepalive:!1,assembleFragments:!0,autoAcceptConnections:!1,ignoreXForwardedFor:!1,disableNagleAlgorithm:!0,closeTimeout:5e3},r(this.config,e),!this.config.httpServer)throw new Error("You must specify an httpServer on which to mount the WebSocket server.");Array.isArray(this.config.httpServer)||(this.config.httpServer=[this.config.httpServer]);var a=this._handlers.upgrade;this.config.httpServer.forEach(function(e){e.on("upgrade",a)})},d.prototype.unmount=function(){var e=this._handlers.upgrade;this.config.httpServer.forEach(function(a){a.removeListener("upgrade",e)})},d.prototype.closeAllConnections=function(){this.connections.forEach(function(e){e.close()}),this.pendingRequests.forEach(function(e){process.nextTick(function(){e.reject(503)})})},d.prototype.broadcast=function(e){Buffer.isBuffer(e)?this.broadcastBytes(e):"function"==typeof e.toString&&this.broadcastUTF(e)},d.prototype.broadcastUTF=function(e){this.connections.forEach(function(a){a.sendUTF(e)})},d.prototype.broadcastBytes=function(e){this.connections.forEach(function(a){a.sendBytes(e)})},d.prototype.shutDown=function(){this.unmount(),this.closeAllConnections()},d.prototype.handleUpgrade=function(e,a){var t=new o(a,e,this.config);try{t.readHandshake()}catch(e){return t.reject(e.httpCode?e.httpCode:400,e.message,e.headers),void i("Invalid handshake: %s",e.message)}this.pendingRequests.push(t),t.once("requestAccepted",this._handlers.requestAccepted),t.once("requestResolved",this._handlers.requestResolved),!this.config.autoAcceptConnections&&c.eventEmitterListenerCount(this,"request")>0?this.emit("request",t):this.config.autoAcceptConnections?t.accept(t.requestedProtocols[0],t.origin):t.reject(404,"No handler is configured to accept the connection.")},d.prototype.handleRequestAccepted=function(e){var a=this;e.once("close",function(t,r){a.handleConnectionClose(e,t,r)}),this.connections.push(e),this.emit("connect",e)},d.prototype.handleConnectionClose=function(e,a,t){var r=this.connections.indexOf(e);-1!==r&&this.connections.splice(r,1),this.emit("close",e,a,t)},d.prototype.handleRequestResolved=function(e){var a=this.pendingRequests.indexOf(e);-1!==a&&this.pendingRequests.splice(a,1)},e.exports=d},function(e,a,t){e.exports={server:t(403),client:t(186),router:t(397),frame:t(187),request:t(188),connection:t(120),w3cwebsocket:t(395),deprecation:t(394),version:t(393)}},function(e,a,t){e.exports=t(404)},function(e,a,t){var r=t(405).server;t(19);function c(e,a){const t=this;t.provider=e,t.logger=a,t.connectionsBySubscriptionId={},t.connections={},t.connectionCounter=0,t._updateSubscriptions=t._updateSubscriptions.bind(t),t.manageConnection=t.manageConnection.bind(t),t._logPayload=t._logPayload.bind(t),t._handleRequest=t._handleRequest.bind(t),e.on("data",function(e,a){t._updateSubscriptions.call(t,a)})}e.exports=function(e,a,t){var n=new c(a,t),i=new r({httpServer:e,autoAcceptConnections:!0});return i.on("connect",n.manageConnection),i},c.prototype.manageConnection=function(e){const a=this;e.id=++a.connectionCounter,a.connections[e.id]={connection:e,subscriptions:{}},e.on("message",function(t){try{var r=JSON.parse(t.utf8Data)}catch(a){e.reject(400,"Bad Request")}a._logPayload(r),a._handleRequest(e,r)}),e.on("close",function(){Object.keys(a.connections[e.id].subscriptions).forEach(e=>{a.provider.send({jsonrpc:"2.0",method:"eth_unsubscribe",params:[e],id:(new Date).getTime()},function(t,r){delete a.connectionsBySubscriptionId[e]})}),delete a.connections[e.id]})},c.prototype._handleRequest=function(e,a){const t=this;switch(a.method){case"eth_subscribe":t.provider.send(a,function(a,r){!a&&r.result&&(t.connections[e.id].subscriptions[r.result]=!0,t.connectionsBySubscriptionId[r.result]=t.connections[e.id]),e.send(JSON.stringify(r))});break;case"eth_unsubscribe":t.provider.send(a,function(r,c){r||c.error?e&&e.send&&e.send(JSON.stringify(c)):(e=t.connectionsBySubscriptionId[a.params[0]],delete t.connections[e.id].subscriptions[a.params[0]],delete t.connectionsBySubscriptionId[a.params[0]],e.send(JSON.stringify(c)))});break;default:t.provider.send(a,function(a,t){e.send(JSON.stringify(t))})}},c.prototype._logPayload=function(e){const a=this;if(e instanceof Array)for(var t=0;t<e.length;t++){var r=e[t];a.logger.log(r.method)}else a.logger.log(e.method)},c.prototype._updateSubscriptions=function(e){this.connectionsBySubscriptionId[e.params.subscription].connection.send(JSON.stringify(e))}},function(e,a,t){var r=t(387),c=t(406),n=t(391),i=t(66);e.exports={create:function(e){var a=(e=o(e||{})).logger,t=new r(e),i=n(t,a);let f=0;const d={};i.on("connection",e=>{let a=f++;d[a]=e,e.on("close",()=>delete d[a])});var s=i.listen;i.listen=function(){var e=Array.prototype.slice.call(arguments),a=function(){};e.length>0&&("function"==typeof e[e.length-1]&&(a=e.pop()));e.push(function(e){if(e)return a(e);i.provider.manager.waitForInitialization(a)}),s.apply(i,e)},i.provider=t;e.ws&&c(i,t,a);var b=i.close;return i.close=function(e){var a=Array.prototype.slice.call(arguments);b.apply(i,a),i.provider.close(function(a){if(a)return e(a);Object.keys(d).forEach(e=>{try{d[e].destroy()}catch(e){}})})},i}};const f={logger:{log:function(){}},ws:!0};var o=function(e){return i.merge({},f,e)}},function(e,a,t){const r=t(5);t(190);var c=t(189);t(19);function n(e){if(e=e||{},r.apply(this),!e.blockchain)throw new Error("RpcBlockTracker - no blockchain specified.");if(!e.blockchain.on)throw new Error("RpcBlockTracker - blockchain is not an EventEmitter.");this._blockchain=e.blockchain,this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.getTrackingBlock=this.getTrackingBlock.bind(this),this.awaitCurrentBlock=this.awaitCurrentBlock.bind(this),this._setCurrentBlock=this._setCurrentBlock.bind(this)}n.prototype=Object.create(r.prototype),n.prototype.constructor=n,n.prototype.getTrackingBlock=function(){return this._currentBlock},n.prototype.getCurrentBlock=function(){return this._currentBlock},n.prototype.awaitCurrentBlock=function(){const e=this;return this._currentBlock?this._currentBlock:new Promise(e=>this.once("block",e)).then(()=>e._currentBlock)},n.prototype.start=function(e={}){return this._blockchain.on("block",this._setCurrentBlock),Promise.resolve()},n.prototype.stop=function(){this._isRunning=!1,this._blockchain.removeListener("block",this._setCurrentBlock)},n.prototype._setCurrentBlock=function(e){let a=c.toJSON(e,!0);if(this._currentBlock&&this._currentBlock.hash===a.hash)return;const t=this._currentBlock;this._currentBlock=a,this.emit("latest",a),this.emit("sync",{block:a,oldBlock:t}),this.emit("block",a)},e.exports=n},function(e){e.exports={_from:"ganache-core@2.2.1",_id:"ganache-core@2.2.1",_inBundle:!1,_integrity:"sha512-JMLZj7CKxtC5M0qceQYn8FLOx+CZyfISpSRfGdwnKy3juXO8siSAodjq8hviqUY1J0tEdEGqvNm16wSUxtiRjQ==",_location:"/ganache-core",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"ganache-core@2.2.1",name:"ganache-core",escapedName:"ganache-core",rawSpec:"2.2.1",saveSpec:null,fetchSpec:"2.2.1"},_requiredBy:["#DEV:/"],_resolved:"https://registry.npmjs.org/ganache-core/-/ganache-core-2.2.1.tgz",_shasum:"c0125d77d3e28d627a812dd002dac21e1d2cc8b7",_shrinkwrap:{name:"ganache-core",version:"2.2.1",lockfileVersion:1,requires:!0,dependencies:{"abstract-leveldown":{version:"3.0.0",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz",integrity:"sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==",requires:{xtend:"4.0.1"}},accepts:{version:"1.3.5",resolved:"https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",integrity:"sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",requires:{"mime-types":"2.1.18",negotiator:"0.6.1"}},"aes-js":{version:"0.2.4",resolved:"https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz",integrity:"sha1-lLiBq3FyhtAV+iGeCPtmcJ3aWj0="},ajv:{version:"5.5.2",resolved:"https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",integrity:"sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",requires:{co:"4.6.0","fast-deep-equal":"1.1.0","fast-json-stable-stringify":"2.0.0","json-schema-traverse":"0.3.1"}},"ansi-regex":{version:"2.1.1",resolved:"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",integrity:"sha1-w7M6te42DYbg5ijwRorn7yfWVN8="},"ansi-styles":{version:"2.2.1",resolved:"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",integrity:"sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="},"any-promise":{version:"1.3.0",resolved:"https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",integrity:"sha1-q8av7tzqUugJzcA3au0845Y10X8="},argsarray:{version:"0.0.1",resolved:"https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",integrity:"sha1-bnIHtOzbObCviDA/pa4ivajfYcs="},"array-flatten":{version:"1.1.1",resolved:"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",integrity:"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="},asn1:{version:"0.2.3",resolved:"https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",integrity:"sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="},"asn1.js":{version:"4.10.1",resolved:"https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",integrity:"sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",requires:{"bn.js":"4.11.6",inherits:"2.0.3","minimalistic-assert":"1.0.1"}},assert:{version:"1.4.1",resolved:"https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",integrity:"sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",dev:!0,requires:{util:"0.10.3"}},"assert-match":{version:"1.1.1",resolved:"https://registry.npmjs.org/assert-match/-/assert-match-1.1.1.tgz",integrity:"sha512-c0QY2kpYVrH/jis6cCq9Mnt4/bIdGALDh1N8HY9ZARZedsMs5LSbgywxkjd5A1uNVLN0L8evANxBPxKiabVoZw==",dev:!0,requires:{assert:"1.4.1","babel-runtime":"6.26.0","es-to-primitive":"1.1.1","lodash.merge":"4.6.1"}},"assert-plus":{version:"1.0.0",resolved:"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",integrity:"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="},"assertion-error":{version:"1.1.0",resolved:"https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",integrity:"sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="},async:{version:"2.6.1",resolved:"https://registry.npmjs.org/async/-/async-2.6.1.tgz",integrity:"sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",requires:{lodash:"4.17.10"}},"async-eventemitter":{version:"0.2.4",resolved:"https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",integrity:"sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",requires:{async:"2.6.1"}},"async-limiter":{version:"1.0.0",resolved:"https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",integrity:"sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="},asynckit:{version:"0.4.0",resolved:"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",integrity:"sha1-x57Zf380y48robyXkLzDZkdLS3k="},"aws-sign2":{version:"0.7.0",resolved:"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",integrity:"sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="},aws4:{version:"1.7.0",resolved:"https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",integrity:"sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="},"babel-code-frame":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",integrity:"sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",requires:{chalk:"1.1.3",esutils:"2.0.2","js-tokens":"3.0.2"}},"babel-core":{version:"6.26.3",resolved:"https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",integrity:"sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",requires:{"babel-code-frame":"6.26.0","babel-generator":"6.26.1","babel-helpers":"6.24.1","babel-messages":"6.23.0","babel-register":"6.26.0","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0",babylon:"6.18.0","convert-source-map":"1.5.1",debug:"2.6.9",json5:"0.5.1",lodash:"4.17.10",minimatch:"3.0.4","path-is-absolute":"1.0.1",private:"0.1.8",slash:"1.0.0","source-map":"0.5.7"}},"babel-generator":{version:"6.26.1",resolved:"https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",integrity:"sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",requires:{"babel-messages":"6.23.0","babel-runtime":"6.26.0","babel-types":"6.26.0","detect-indent":"4.0.0",jsesc:"1.3.0",lodash:"4.17.10","source-map":"0.5.7","trim-right":"1.0.1"},dependencies:{jsesc:{version:"1.3.0",resolved:"https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",integrity:"sha1-RsP+yMGJKxKwgz25vHYiF226s0s="}}},"babel-helper-builder-binary-assignment-operator-visitor":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",integrity:"sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",requires:{"babel-helper-explode-assignable-expression":"6.24.1","babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-helper-call-delegate":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",integrity:"sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",requires:{"babel-helper-hoist-variables":"6.24.1","babel-runtime":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-helper-define-map":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",integrity:"sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",requires:{"babel-helper-function-name":"6.24.1","babel-runtime":"6.26.0","babel-types":"6.26.0",lodash:"4.17.10"}},"babel-helper-explode-assignable-expression":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",integrity:"sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",requires:{"babel-runtime":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-helper-function-name":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",integrity:"sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",requires:{"babel-helper-get-function-arity":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-helper-get-function-arity":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",integrity:"sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-helper-hoist-variables":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",integrity:"sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-helper-optimise-call-expression":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",integrity:"sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-helper-regex":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",integrity:"sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0",lodash:"4.17.10"}},"babel-helper-remap-async-to-generator":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",integrity:"sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",requires:{"babel-helper-function-name":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-helper-replace-supers":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",integrity:"sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",requires:{"babel-helper-optimise-call-expression":"6.24.1","babel-messages":"6.23.0","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-helpers":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",integrity:"sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",requires:{"babel-runtime":"6.26.0","babel-template":"6.26.0"}},"babel-messages":{version:"6.23.0",resolved:"https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",integrity:"sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-check-es2015-constants":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",integrity:"sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-syntax-async-functions":{version:"6.13.0",resolved:"https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",integrity:"sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="},"babel-plugin-syntax-exponentiation-operator":{version:"6.13.0",resolved:"https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",integrity:"sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="},"babel-plugin-syntax-trailing-function-commas":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",integrity:"sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="},"babel-plugin-transform-async-to-generator":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",integrity:"sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",requires:{"babel-helper-remap-async-to-generator":"6.24.1","babel-plugin-syntax-async-functions":"6.13.0","babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-arrow-functions":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",integrity:"sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-block-scoped-functions":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",integrity:"sha1-u8UbSflk1wy42OC5ToICRs46YUE=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-block-scoping":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",integrity:"sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",requires:{"babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0",lodash:"4.17.10"}},"babel-plugin-transform-es2015-classes":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",integrity:"sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",requires:{"babel-helper-define-map":"6.26.0","babel-helper-function-name":"6.24.1","babel-helper-optimise-call-expression":"6.24.1","babel-helper-replace-supers":"6.24.1","babel-messages":"6.23.0","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-computed-properties":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",integrity:"sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",requires:{"babel-runtime":"6.26.0","babel-template":"6.26.0"}},"babel-plugin-transform-es2015-destructuring":{version:"6.23.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",integrity:"sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-duplicate-keys":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",integrity:"sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-for-of":{version:"6.23.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",integrity:"sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-function-name":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",integrity:"sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",requires:{"babel-helper-function-name":"6.24.1","babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-literals":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",integrity:"sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-modules-amd":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",integrity:"sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",requires:{"babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-runtime":"6.26.0","babel-template":"6.26.0"}},"babel-plugin-transform-es2015-modules-commonjs":{version:"6.26.2",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",integrity:"sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",requires:{"babel-plugin-transform-strict-mode":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-modules-systemjs":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",integrity:"sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",requires:{"babel-helper-hoist-variables":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0"}},"babel-plugin-transform-es2015-modules-umd":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",integrity:"sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",requires:{"babel-plugin-transform-es2015-modules-amd":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0"}},"babel-plugin-transform-es2015-object-super":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",integrity:"sha1-JM72muIcuDp/hgPa0CH1cusnj40=",requires:{"babel-helper-replace-supers":"6.24.1","babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-parameters":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",integrity:"sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",requires:{"babel-helper-call-delegate":"6.24.1","babel-helper-get-function-arity":"6.24.1","babel-runtime":"6.26.0","babel-template":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-shorthand-properties":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",integrity:"sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-spread":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",integrity:"sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-sticky-regex":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",integrity:"sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",requires:{"babel-helper-regex":"6.26.0","babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-plugin-transform-es2015-template-literals":{version:"6.22.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",integrity:"sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-typeof-symbol":{version:"6.23.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",integrity:"sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",requires:{"babel-runtime":"6.26.0"}},"babel-plugin-transform-es2015-unicode-regex":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",integrity:"sha1-04sS9C6nMj9yk4fxinxa4frrNek=",requires:{"babel-helper-regex":"6.26.0","babel-runtime":"6.26.0","regexpu-core":"2.0.0"}},"babel-plugin-transform-exponentiation-operator":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",integrity:"sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",requires:{"babel-helper-builder-binary-assignment-operator-visitor":"6.24.1","babel-plugin-syntax-exponentiation-operator":"6.13.0","babel-runtime":"6.26.0"}},"babel-plugin-transform-regenerator":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",integrity:"sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",requires:{"regenerator-transform":"0.10.1"}},"babel-plugin-transform-strict-mode":{version:"6.24.1",resolved:"https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",integrity:"sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0"}},"babel-preset-env":{version:"1.7.0",resolved:"https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz",integrity:"sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",requires:{"babel-plugin-check-es2015-constants":"6.22.0","babel-plugin-syntax-trailing-function-commas":"6.22.0","babel-plugin-transform-async-to-generator":"6.24.1","babel-plugin-transform-es2015-arrow-functions":"6.22.0","babel-plugin-transform-es2015-block-scoped-functions":"6.22.0","babel-plugin-transform-es2015-block-scoping":"6.26.0","babel-plugin-transform-es2015-classes":"6.24.1","babel-plugin-transform-es2015-computed-properties":"6.24.1","babel-plugin-transform-es2015-destructuring":"6.23.0","babel-plugin-transform-es2015-duplicate-keys":"6.24.1","babel-plugin-transform-es2015-for-of":"6.23.0","babel-plugin-transform-es2015-function-name":"6.24.1","babel-plugin-transform-es2015-literals":"6.22.0","babel-plugin-transform-es2015-modules-amd":"6.24.1","babel-plugin-transform-es2015-modules-commonjs":"6.26.2","babel-plugin-transform-es2015-modules-systemjs":"6.24.1","babel-plugin-transform-es2015-modules-umd":"6.24.1","babel-plugin-transform-es2015-object-super":"6.24.1","babel-plugin-transform-es2015-parameters":"6.24.1","babel-plugin-transform-es2015-shorthand-properties":"6.24.1","babel-plugin-transform-es2015-spread":"6.22.0","babel-plugin-transform-es2015-sticky-regex":"6.24.1","babel-plugin-transform-es2015-template-literals":"6.22.0","babel-plugin-transform-es2015-typeof-symbol":"6.23.0","babel-plugin-transform-es2015-unicode-regex":"6.24.1","babel-plugin-transform-exponentiation-operator":"6.24.1","babel-plugin-transform-regenerator":"6.26.0",browserslist:"3.2.8",invariant:"2.2.4",semver:"5.4.1"}},"babel-register":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",integrity:"sha1-btAhFz4vy0htestFxgCahW9kcHE=",requires:{"babel-core":"6.26.3","babel-runtime":"6.26.0","core-js":"2.5.6","home-or-tmp":"2.0.0",lodash:"4.17.10",mkdirp:"0.5.1","source-map-support":"0.4.18"}},"babel-runtime":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",integrity:"sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",requires:{"core-js":"2.5.6","regenerator-runtime":"0.11.1"}},"babel-template":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",integrity:"sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",requires:{"babel-runtime":"6.26.0","babel-traverse":"6.26.0","babel-types":"6.26.0",babylon:"6.18.0",lodash:"4.17.10"}},"babel-traverse":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",integrity:"sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",requires:{"babel-code-frame":"6.26.0","babel-messages":"6.23.0","babel-runtime":"6.26.0","babel-types":"6.26.0",babylon:"6.18.0",debug:"2.6.9",globals:"9.18.0",invariant:"2.2.4",lodash:"4.17.10"}},"babel-types":{version:"6.26.0",resolved:"https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",integrity:"sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",requires:{"babel-runtime":"6.26.0",esutils:"2.0.2",lodash:"4.17.10","to-fast-properties":"1.0.3"}},babelify:{version:"7.3.0",resolved:"https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz",integrity:"sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=",requires:{"babel-core":"6.26.3","object-assign":"4.1.1"}},babylon:{version:"6.18.0",resolved:"https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",integrity:"sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="},backoff:{version:"2.5.0",resolved:"https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",integrity:"sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",requires:{precond:"0.2.3"}},"balanced-match":{version:"1.0.0",resolved:"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",integrity:"sha1-ibTRmasr7kneFk6gK4nORi1xt2c="},"base-x":{version:"1.1.0",resolved:"https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz",integrity:"sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w="},"base64-js":{version:"1.3.0",resolved:"https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",integrity:"sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="},"bcrypt-pbkdf":{version:"1.0.1",resolved:"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",integrity:"sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",optional:!0,requires:{tweetnacl:"0.14.5"}},bindings:{version:"1.3.0",resolved:"https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",integrity:"sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw=="},bip39:{version:"2.4.0",resolved:"https://registry.npmjs.org/bip39/-/bip39-2.4.0.tgz",integrity:"sha512-1++HywqIyPtWDo7gm4v0ylYbwkLvHkuwVSKbBlZBbTCP/mnkyrlARBny906VLAwxJbC5xw9EvuJasHFIZaIFMQ==",requires:{"create-hash":"1.2.0",pbkdf2:"3.0.16",randombytes:"2.0.6","safe-buffer":"5.1.2",unorm:"1.4.1"}},bip66:{version:"1.1.5",resolved:"https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",integrity:"sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",requires:{"safe-buffer":"5.1.2"}},bl:{version:"0.8.2",resolved:"https://registry.npmjs.org/bl/-/bl-0.8.2.tgz",integrity:"sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=",requires:{"readable-stream":"1.0.34"},dependencies:{"readable-stream":{version:"1.0.34",resolved:"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",integrity:"sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",requires:{"core-util-is":"1.0.2",inherits:"2.0.3",isarray:"0.0.1",string_decoder:"0.10.31"}}}},"block-stream":{version:"0.0.9",resolved:"https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",integrity:"sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",requires:{inherits:"2.0.3"}},bluebird:{version:"3.5.1",resolved:"https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",integrity:"sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="},"bn.js":{version:"4.11.6",resolved:"https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",integrity:"sha1-UzRK2xRhehP26N0s4okF0cC6MhU="},"body-parser":{version:"1.18.3",resolved:"https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",integrity:"sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",requires:{bytes:"3.0.0","content-type":"1.0.4",debug:"2.6.9",depd:"1.1.2","http-errors":"1.6.3","iconv-lite":"0.4.23","on-finished":"2.3.0",qs:"6.5.2","raw-body":"2.3.3","type-is":"1.6.16"}},"brace-expansion":{version:"1.1.11",resolved:"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",integrity:"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",requires:{"balanced-match":"1.0.0","concat-map":"0.0.1"}},brorand:{version:"1.1.0",resolved:"https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",integrity:"sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="},"browser-stdout":{version:"1.3.1",resolved:"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",integrity:"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",dev:!0},"browserify-aes":{version:"1.2.0",resolved:"https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",integrity:"sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",requires:{"buffer-xor":"1.0.3","cipher-base":"1.0.4","create-hash":"1.2.0",evp_bytestokey:"1.0.3",inherits:"2.0.3","safe-buffer":"5.1.2"}},"browserify-cipher":{version:"1.0.1",resolved:"https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",integrity:"sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",requires:{"browserify-aes":"1.2.0","browserify-des":"1.0.1",evp_bytestokey:"1.0.3"}},"browserify-des":{version:"1.0.1",resolved:"https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",integrity:"sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",requires:{"cipher-base":"1.0.4","des.js":"1.0.0",inherits:"2.0.3"}},"browserify-rsa":{version:"4.0.1",resolved:"https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",integrity:"sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",requires:{"bn.js":"4.11.6",randombytes:"2.0.6"}},"browserify-sha3":{version:"0.0.1",resolved:"https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz",integrity:"sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=",requires:{"js-sha3":"0.3.1"}},"browserify-sign":{version:"4.0.4",resolved:"https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",integrity:"sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",requires:{"bn.js":"4.11.6","browserify-rsa":"4.0.1","create-hash":"1.2.0","create-hmac":"1.1.7",elliptic:"6.4.0",inherits:"2.0.3","parse-asn1":"5.1.1"}},browserslist:{version:"3.2.8",resolved:"https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",integrity:"sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",requires:{"caniuse-lite":"1.0.30000850","electron-to-chromium":"1.3.47"}},bs58:{version:"3.1.0",resolved:"https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz",integrity:"sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=",requires:{"base-x":"1.1.0"}},bs58check:{version:"1.3.4",resolved:"https://registry.npmjs.org/bs58check/-/bs58check-1.3.4.tgz",integrity:"sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=",requires:{bs58:"3.1.0","create-hash":"1.2.0"}},buffer:{version:"5.1.0",resolved:"https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz",integrity:"sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==",requires:{"base64-js":"1.3.0",ieee754:"1.1.11"}},"buffer-alloc":{version:"1.1.0",resolved:"https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz",integrity:"sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=",requires:{"buffer-alloc-unsafe":"0.1.1","buffer-fill":"0.1.1"}},"buffer-alloc-unsafe":{version:"0.1.1",resolved:"https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz",integrity:"sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo="},"buffer-crc32":{version:"0.2.13",resolved:"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",integrity:"sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="},"buffer-fill":{version:"0.1.1",resolved:"https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz",integrity:"sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q=="},"buffer-from":{version:"0.1.2",resolved:"https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",integrity:"sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="},"buffer-to-arraybuffer":{version:"0.0.5",resolved:"https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz",integrity:"sha1-YGSkD6dutDxyOrqe+PbhIW0QURo="},"buffer-xor":{version:"1.0.3",resolved:"https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",integrity:"sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="},"builtin-modules":{version:"1.1.1",resolved:"https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",integrity:"sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="},bytes:{version:"3.0.0",resolved:"https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",integrity:"sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="},bytewise:{version:"1.1.0",resolved:"https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz",integrity:"sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=",requires:{"bytewise-core":"1.2.3",typewise:"1.0.3"}},"bytewise-core":{version:"1.2.3",resolved:"https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz",integrity:"sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=",requires:{"typewise-core":"1.2.0"}},cachedown:{version:"1.0.0",resolved:"https://registry.npmjs.org/cachedown/-/cachedown-1.0.0.tgz",integrity:"sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=",requires:{"abstract-leveldown":"2.7.2","lru-cache":"3.2.0"},dependencies:{"abstract-leveldown":{version:"2.7.2",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",integrity:"sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",requires:{xtend:"4.0.1"}}}},camelcase:{version:"3.0.0",resolved:"https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",integrity:"sha1-MvxLn82vhF/N9+c7uXysImHwqwo="},"caniuse-lite":{version:"1.0.30000850",resolved:"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000850.tgz",integrity:"sha512-iHK48UR/InydhpPAzgSmsJXRAR925T0kwJhZ1wk0xRatpGMvi2f06LABg6HXfV4WW4P2wChzlcFa/TEmbTyXQA=="},caseless:{version:"0.12.0",resolved:"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",integrity:"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="},chai:{version:"3.5.0",resolved:"https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",integrity:"sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",requires:{"assertion-error":"1.1.0","deep-eql":"0.1.3","type-detect":"1.0.0"}},chalk:{version:"1.1.3",resolved:"https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",integrity:"sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",requires:{"ansi-styles":"2.2.1","escape-string-regexp":"1.0.5","has-ansi":"2.0.0","strip-ansi":"3.0.1","supports-color":"2.0.0"}},"checkpoint-store":{version:"1.1.0",resolved:"https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz",integrity:"sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=",requires:{"functional-red-black-tree":"1.0.1"}},"cipher-base":{version:"1.0.4",resolved:"https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",integrity:"sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",requires:{inherits:"2.0.3","safe-buffer":"5.1.2"}},cliui:{version:"3.2.0",resolved:"https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",integrity:"sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",requires:{"string-width":"1.0.2","strip-ansi":"3.0.1","wrap-ansi":"2.1.0"}},clone:{version:"2.1.1",resolved:"https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",integrity:"sha1-0hfR6WERjjrJpLi7oyhVU79kfNs="},co:{version:"4.6.0",resolved:"https://registry.npmjs.org/co/-/co-4.6.0.tgz",integrity:"sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="},"code-point-at":{version:"1.1.0",resolved:"https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",integrity:"sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="},coinstring:{version:"2.3.0",resolved:"https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz",integrity:"sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=",requires:{bs58:"2.0.1","create-hash":"1.2.0"},dependencies:{bs58:{version:"2.0.1",resolved:"https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz",integrity:"sha1-VZCNWPGYKrogCPob7Y+RmYopv40="}}},"combined-stream":{version:"1.0.6",resolved:"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",integrity:"sha1-cj599ugBrFYTETp+RFqbactjKBg=",requires:{"delayed-stream":"1.0.0"}},commander:{version:"2.8.1",resolved:"https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",integrity:"sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",requires:{"graceful-readlink":"1.0.1"}},"concat-map":{version:"0.0.1",resolved:"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",integrity:"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="},"concat-stream":{version:"1.6.2",resolved:"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",integrity:"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",requires:{"buffer-from":"1.1.0",inherits:"2.0.3","readable-stream":"2.3.6",typedarray:"0.0.6"},dependencies:{"buffer-from":{version:"1.1.0",resolved:"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",integrity:"sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="}}},"content-disposition":{version:"0.5.2",resolved:"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",integrity:"sha1-DPaLud318r55YcOoUXjLhdunjLQ="},"content-type":{version:"1.0.4",resolved:"https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",integrity:"sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="},"convert-source-map":{version:"1.5.1",resolved:"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",integrity:"sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="},cookie:{version:"0.3.1",resolved:"https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",integrity:"sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="},"cookie-signature":{version:"1.0.6",resolved:"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",integrity:"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="},"core-js":{version:"2.5.6",resolved:"https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz",integrity:"sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ=="},"core-util-is":{version:"1.0.2",resolved:"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",integrity:"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="},cors:{version:"2.8.4",resolved:"https://registry.npmjs.org/cors/-/cors-2.8.4.tgz",integrity:"sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=",requires:{"object-assign":"4.1.1",vary:"1.1.2"}},"create-ecdh":{version:"4.0.3",resolved:"https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",integrity:"sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",requires:{"bn.js":"4.11.6",elliptic:"6.4.0"}},"create-hash":{version:"1.2.0",resolved:"https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",integrity:"sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",requires:{"cipher-base":"1.0.4",inherits:"2.0.3","md5.js":"1.3.4",ripemd160:"2.0.2","sha.js":"2.4.11"}},"create-hmac":{version:"1.1.7",resolved:"https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",integrity:"sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",requires:{"cipher-base":"1.0.4","create-hash":"1.2.0",inherits:"2.0.3",ripemd160:"2.0.2","safe-buffer":"5.1.2","sha.js":"2.4.11"}},"cross-fetch":{version:"2.2.1",resolved:"https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.1.tgz",integrity:"sha1-lshZEE113vyWf7XbYkdOdUJrArA=",requires:{"node-fetch":"2.1.2","whatwg-fetch":"2.0.4"}},"crypto-browserify":{version:"3.12.0",resolved:"https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",integrity:"sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",requires:{"browserify-cipher":"1.0.1","browserify-sign":"4.0.4","create-ecdh":"4.0.3","create-hash":"1.2.0","create-hmac":"1.1.7","diffie-hellman":"5.0.3",inherits:"2.0.3",pbkdf2:"3.0.16","public-encrypt":"4.0.2",randombytes:"2.0.6",randomfill:"1.0.4"}},d64:{version:"1.0.0",resolved:"https://registry.npmjs.org/d64/-/d64-1.0.0.tgz",integrity:"sha1-QAKofoUMv8n52XBrYPymE6MzbpA="},dashdash:{version:"1.14.1",resolved:"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",integrity:"sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",requires:{"assert-plus":"1.0.0"}},debug:{version:"2.6.9",resolved:"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",integrity:"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",requires:{ms:"2.0.0"}},decamelize:{version:"1.2.0",resolved:"https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",integrity:"sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="},"decode-uri-component":{version:"0.2.0",resolved:"https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",integrity:"sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="},decompress:{version:"4.2.0",resolved:"https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",integrity:"sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",requires:{"decompress-tar":"4.1.1","decompress-tarbz2":"4.1.1","decompress-targz":"4.1.1","decompress-unzip":"4.0.1","graceful-fs":"4.1.11","make-dir":"1.3.0",pify:"2.3.0","strip-dirs":"2.1.0"},dependencies:{pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="}}},"decompress-response":{version:"3.3.0",resolved:"https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",integrity:"sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",requires:{"mimic-response":"1.0.0"}},"decompress-tar":{version:"4.1.1",resolved:"https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",integrity:"sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",requires:{"file-type":"5.2.0","is-stream":"1.1.0","tar-stream":"1.6.1"}},"decompress-tarbz2":{version:"4.1.1",resolved:"https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",integrity:"sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",requires:{"decompress-tar":"4.1.1","file-type":"6.2.0","is-stream":"1.1.0","seek-bzip":"1.0.5","unbzip2-stream":"1.2.5"},dependencies:{"file-type":{version:"6.2.0",resolved:"https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",integrity:"sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="}}},"decompress-targz":{version:"4.1.1",resolved:"https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",integrity:"sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",requires:{"decompress-tar":"4.1.1","file-type":"5.2.0","is-stream":"1.1.0"}},"decompress-unzip":{version:"4.0.1",resolved:"https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",integrity:"sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",requires:{"file-type":"3.9.0","get-stream":"2.3.1",pify:"2.3.0",yauzl:"2.9.1"},dependencies:{"file-type":{version:"3.9.0",resolved:"https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",integrity:"sha1-JXoHg4TR24CHvESdEH1SpSZyuek="},"get-stream":{version:"2.3.1",resolved:"https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",integrity:"sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",requires:{"object-assign":"4.1.1","pinkie-promise":"2.0.1"}},pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="}}},"deep-eql":{version:"0.1.3",resolved:"https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",integrity:"sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",requires:{"type-detect":"0.1.1"},dependencies:{"type-detect":{version:"0.1.1",resolved:"https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",integrity:"sha1-C6XsKohWQORw6k6FBZcZANrFiCI="}}},"deep-equal":{version:"1.0.1",resolved:"https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",integrity:"sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="},"deferred-leveldown":{version:"1.2.2",resolved:"https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",integrity:"sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==",requires:{"abstract-leveldown":"2.6.3"},dependencies:{"abstract-leveldown":{version:"2.6.3",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz",integrity:"sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==",requires:{xtend:"4.0.1"}}}},"define-properties":{version:"1.1.2",resolved:"https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",integrity:"sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",requires:{foreach:"2.0.5","object-keys":"1.0.11"},dependencies:{"object-keys":{version:"1.0.11",resolved:"https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",integrity:"sha1-xUYBd4rVYPEULODgG8yotW0TQm0="}}},defined:{version:"1.0.0",resolved:"https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",integrity:"sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="},"delayed-stream":{version:"1.0.0",resolved:"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",integrity:"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="},depd:{version:"1.1.2",resolved:"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",integrity:"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="},"des.js":{version:"1.0.0",resolved:"https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",integrity:"sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",requires:{inherits:"2.0.3","minimalistic-assert":"1.0.1"}},destroy:{version:"1.0.4",resolved:"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",integrity:"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="},"detect-indent":{version:"4.0.0",resolved:"https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",integrity:"sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",requires:{repeating:"2.0.1"}},diff:{version:"3.5.0",resolved:"https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",integrity:"sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",dev:!0},"diffie-hellman":{version:"5.0.3",resolved:"https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",integrity:"sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",requires:{"bn.js":"4.11.6","miller-rabin":"4.0.1",randombytes:"2.0.6"}},"dom-walk":{version:"0.1.1",resolved:"https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",integrity:"sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="},"drbg.js":{version:"1.0.1",resolved:"https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",integrity:"sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=",requires:{"browserify-aes":"1.2.0","create-hash":"1.2.0","create-hmac":"1.1.7"}},duplexer3:{version:"0.1.4",resolved:"https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",integrity:"sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="},"ecc-jsbn":{version:"0.1.1",resolved:"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",integrity:"sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",optional:!0,requires:{jsbn:"0.1.1"}},"ee-first":{version:"1.1.1",resolved:"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",integrity:"sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="},"electron-to-chromium":{version:"1.3.47",resolved:"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz",integrity:"sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ="},elliptic:{version:"6.4.0",resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",integrity:"sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",requires:{"bn.js":"4.11.6",brorand:"1.1.0","hash.js":"1.1.3","hmac-drbg":"1.0.1",inherits:"2.0.3","minimalistic-assert":"1.0.1","minimalistic-crypto-utils":"1.0.1"}},encodeurl:{version:"1.0.2",resolved:"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",integrity:"sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="},encoding:{version:"0.1.12",resolved:"https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",integrity:"sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",requires:{"iconv-lite":"0.4.23"}},"end-of-stream":{version:"1.4.1",resolved:"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",integrity:"sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",requires:{once:"1.4.0"}},errno:{version:"0.1.7",resolved:"https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",integrity:"sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",requires:{prr:"1.0.1"}},"error-ex":{version:"1.3.1",resolved:"https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",integrity:"sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",requires:{"is-arrayish":"0.2.1"}},"es-abstract":{version:"1.12.0",resolved:"https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",integrity:"sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",requires:{"es-to-primitive":"1.1.1","function-bind":"1.1.1",has:"1.0.3","is-callable":"1.1.3","is-regex":"1.0.4"}},"es-to-primitive":{version:"1.1.1",resolved:"https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",integrity:"sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",requires:{"is-callable":"1.1.3","is-date-object":"1.0.1","is-symbol":"1.0.1"}},"escape-html":{version:"1.0.3",resolved:"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",integrity:"sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="},"escape-string-regexp":{version:"1.0.5",resolved:"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",integrity:"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="},esutils:{version:"2.0.2",resolved:"https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",integrity:"sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="},etag:{version:"1.8.1",resolved:"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",integrity:"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="},"eth-block-tracker":{version:"3.0.1",resolved:"https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz",integrity:"sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug==",requires:{"eth-query":"2.1.2","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethjs-util":"0.1.4","json-rpc-engine":"3.7.3",pify:"2.3.0",tape:"4.9.0"},dependencies:{pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="}}},"eth-json-rpc-infura":{version:"3.1.2",resolved:"https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.1.2.tgz",integrity:"sha512-IuK5Iowfs6taluA/3Okmu6EfZcFMq6MQuyrUL1PrCoJstuuBr3TvVeSy3keDyxfbrjFB34nCo538I8G+qMtsbw==",requires:{"cross-fetch":"2.2.1","eth-json-rpc-middleware":"1.6.0","json-rpc-engine":"3.7.3","json-rpc-error":"2.0.0",tape:"4.9.0"}},"eth-json-rpc-middleware":{version:"1.6.0",resolved:"https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz",integrity:"sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==",requires:{async:"2.6.1","eth-query":"2.1.2","eth-tx-summary":"3.2.3","ethereumjs-block":"1.7.1","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethereumjs-vm":"2.3.5","fetch-ponyfill":"4.1.0","json-rpc-engine":"3.7.3","json-rpc-error":"2.0.0","json-stable-stringify":"1.0.1","promise-to-callback":"1.0.0",tape:"4.9.0"},dependencies:{"ethereum-common":{version:"0.2.0",resolved:"https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",integrity:"sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA=="},"ethereumjs-block":{version:"1.7.1",resolved:"https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz",integrity:"sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==",requires:{async:"2.6.1","ethereum-common":"0.2.0","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","merkle-patricia-tree":"2.3.1"}}}},"eth-lib":{version:"0.1.27",resolved:"https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz",integrity:"sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==",requires:{"bn.js":"4.11.6",elliptic:"6.4.0",keccakjs:"0.2.1","nano-json-stream-parser":"0.1.2",servify:"0.1.12",ws:"3.3.3","xhr-request-promise":"0.1.2"}},"eth-query":{version:"2.1.2",resolved:"https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz",integrity:"sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=",requires:{"json-rpc-random-id":"1.0.1",xtend:"4.0.1"}},"eth-sig-util":{version:"2.0.2",resolved:"https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.0.2.tgz",integrity:"sha512-tB6E8jf/aZQ943bo3+iojl8xRe3Jzcl+9OT6v8K7kWis6PdIX19SB2vYvN849cB9G9m/XLjYFK381SgdbsnpTA==",requires:{"ethereumjs-abi":"0.6.5","ethereumjs-util":"5.2.0"}},"eth-tx-summary":{version:"3.2.3",resolved:"https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.3.tgz",integrity:"sha512-1gZpA5fKarJOVSb5OUlPnhDQuIazqAkI61zlVvf5LdG47nEgw+/qhyZnuj3CUdE/TLTKuRzPLeyXLjaB4qWTRQ==",requires:{async:"2.6.1","bn.js":"4.11.8",clone:"2.1.1","concat-stream":"1.6.2","end-of-stream":"1.4.1","eth-query":"2.1.2","ethereumjs-block":"1.7.1","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethereumjs-vm":"2.3.4",through2:"2.0.3",treeify:"1.1.0","web3-provider-engine":"13.8.0"},dependencies:{"async-eventemitter":{version:"github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c",requires:{async:"2.6.1"}},"bn.js":{version:"4.11.8",resolved:"https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",integrity:"sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="},"eth-block-tracker":{version:"2.3.1",resolved:"https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-2.3.1.tgz",integrity:"sha512-NamWuMBIl8kmkJFVj8WzGatySTzQPQag4Xr677yFxdVtIxACFbL/dQowk0MzEqIKk93U1TwY3MjVU6mOcwZnKA==",requires:{"async-eventemitter":"github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c","eth-query":"2.1.2","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethjs-util":"0.1.4","json-rpc-engine":"3.7.3",pify:"2.3.0",tape:"4.9.0"}},"eth-sig-util":{version:"1.4.2",resolved:"https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz",integrity:"sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=",requires:{"ethereumjs-abi":"git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7","ethereumjs-util":"5.2.0"}},"ethereum-common":{version:"0.2.0",resolved:"https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",integrity:"sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA=="},"ethereumjs-abi":{version:"git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7",requires:{"bn.js":"4.11.8","ethereumjs-util":"5.2.0"}},"ethereumjs-block":{version:"1.7.1",resolved:"https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz",integrity:"sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==",requires:{async:"2.6.1","ethereum-common":"0.2.0","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","merkle-patricia-tree":"2.3.1"}},"ethereumjs-vm":{version:"2.3.4",resolved:"https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.4.tgz",integrity:"sha512-Y4SlzNDqxrCO58jhp98HdnZVdjOqB+HC0hoU+N/DEp1aU+hFkRX/nru5F7/HkQRPIlA6aJlQp/xIA6xZs1kspw==",requires:{async:"2.6.1","async-eventemitter":"github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c","ethereum-common":"0.2.0","ethereumjs-account":"2.0.5","ethereumjs-block":"1.7.1","ethereumjs-util":"5.2.0","fake-merkle-patricia-tree":"1.0.1","functional-red-black-tree":"1.0.1","merkle-patricia-tree":"2.3.1","rustbn.js":"0.1.2","safe-buffer":"5.1.2"}},pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="},"web3-provider-engine":{version:"13.8.0",resolved:"https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz",integrity:"sha512-fZXhX5VWwWpoFfrfocslyg6P7cN3YWPG/ASaevNfeO80R+nzgoPUBXcWQekSGSsNDkeRTis4aMmpmofYf1TNtQ==",requires:{async:"2.6.1",clone:"2.1.1","eth-block-tracker":"2.3.1","eth-sig-util":"1.4.2","ethereumjs-block":"1.7.1","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethereumjs-vm":"2.3.4","fetch-ponyfill":"4.1.0","json-rpc-error":"2.0.0","json-stable-stringify":"1.0.1","promise-to-callback":"1.0.0","readable-stream":"2.3.6",request:"2.87.0",semaphore:"1.1.0",solc:"0.4.24",tape:"4.9.0",xhr:"2.5.0",xtend:"4.0.1"}}}},"ethereum-common":{version:"0.0.16",resolved:"https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.16.tgz",integrity:"sha1-mh4Wnq00q3XgifUMpRK/0PvRJlU="},"ethereumjs-abi":{version:"0.6.5",resolved:"https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz",integrity:"sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE=",requires:{"bn.js":"4.11.6","ethereumjs-util":"4.5.0"},dependencies:{"ethereumjs-util":{version:"4.5.0",resolved:"https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz",integrity:"sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=",requires:{"bn.js":"4.11.6","create-hash":"1.2.0",keccakjs:"0.2.1",rlp:"2.0.0",secp256k1:"3.5.0"}}}},"ethereumjs-account":{version:"2.0.5",resolved:"https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz",integrity:"sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==",requires:{"ethereumjs-util":"5.2.0",rlp:"2.0.0","safe-buffer":"5.1.2"}},"ethereumjs-block":{version:"1.2.2",resolved:"https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.2.2.tgz",integrity:"sha1-LsdTSlkCG47JuDww5JaQxuuu3aE=",requires:{async:"1.5.2","ethereum-common":"0.0.16","ethereumjs-tx":"1.3.4","ethereumjs-util":"4.5.0","merkle-patricia-tree":"2.3.1"},dependencies:{async:{version:"1.5.2",resolved:"https://registry.npmjs.org/async/-/async-1.5.2.tgz",integrity:"sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="},"ethereumjs-util":{version:"4.5.0",resolved:"https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz",integrity:"sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=",requires:{"bn.js":"4.11.6","create-hash":"1.2.0",keccakjs:"0.2.1",rlp:"2.0.0",secp256k1:"3.5.0"}}}},"ethereumjs-tx":{version:"1.3.4",resolved:"https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz",integrity:"sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==",requires:{"ethereum-common":"0.0.18","ethereumjs-util":"5.2.0"},dependencies:{"ethereum-common":{version:"0.0.18",resolved:"https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz",integrity:"sha1-L9w1dvIykDNYl26znaeDIT/5Uj8="}}},"ethereumjs-util":{version:"5.2.0",resolved:"https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz",integrity:"sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==",requires:{"bn.js":"4.11.6","create-hash":"1.2.0","ethjs-util":"0.1.4",keccak:"1.4.0",rlp:"2.0.0","safe-buffer":"5.1.2",secp256k1:"3.5.0"}},"ethereumjs-vm":{version:"2.3.5",resolved:"https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz",integrity:"sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==",requires:{async:"2.6.1","async-eventemitter":"0.2.4","ethereum-common":"0.2.0","ethereumjs-account":"2.0.5","ethereumjs-block":"1.7.1","ethereumjs-util":"5.2.0","fake-merkle-patricia-tree":"1.0.1","functional-red-black-tree":"1.0.1","merkle-patricia-tree":"2.3.1","rustbn.js":"0.1.2","safe-buffer":"5.1.2"},dependencies:{"ethereum-common":{version:"0.2.0",resolved:"https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",integrity:"sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA=="},"ethereumjs-block":{version:"1.7.1",resolved:"https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz",integrity:"sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==",requires:{async:"2.6.1","ethereum-common":"0.2.0","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","merkle-patricia-tree":"2.3.1"}}}},"ethereumjs-wallet":{version:"0.6.0",resolved:"https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz",integrity:"sha1-gnY7Fpfuenlr5xVdqd+0my+Yz9s=",requires:{"aes-js":"0.2.4",bs58check:"1.3.4","ethereumjs-util":"4.5.0",hdkey:"0.7.1","scrypt.js":"0.2.0",utf8:"2.1.2",uuid:"2.0.3"},dependencies:{"ethereumjs-util":{version:"4.5.0",resolved:"https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz",integrity:"sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=",requires:{"bn.js":"4.11.6","create-hash":"1.2.0",keccakjs:"0.2.1",rlp:"2.0.0",secp256k1:"3.5.0"}}}},"ethjs-unit":{version:"0.1.6",resolved:"https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",integrity:"sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=",requires:{"bn.js":"4.11.6","number-to-bn":"1.7.0"}},"ethjs-util":{version:"0.1.4",resolved:"https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz",integrity:"sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=",requires:{"is-hex-prefixed":"1.0.0","strip-hex-prefix":"1.0.0"}},eventemitter3:{version:"1.1.1",resolved:"https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz",integrity:"sha1-R3hr2qCHyvext15zq8XH1UAVjNA="},evp_bytestokey:{version:"1.0.3",resolved:"https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",integrity:"sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",requires:{"md5.js":"1.3.4","safe-buffer":"5.1.2"}},express:{version:"4.16.3",resolved:"https://registry.npmjs.org/express/-/express-4.16.3.tgz",integrity:"sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",requires:{accepts:"1.3.5","array-flatten":"1.1.1","body-parser":"1.18.2","content-disposition":"0.5.2","content-type":"1.0.4",cookie:"0.3.1","cookie-signature":"1.0.6",debug:"2.6.9",depd:"1.1.2",encodeurl:"1.0.2","escape-html":"1.0.3",etag:"1.8.1",finalhandler:"1.1.1",fresh:"0.5.2","merge-descriptors":"1.0.1",methods:"1.1.2","on-finished":"2.3.0",parseurl:"1.3.2","path-to-regexp":"0.1.7","proxy-addr":"2.0.3",qs:"6.5.1","range-parser":"1.2.0","safe-buffer":"5.1.1",send:"0.16.2","serve-static":"1.13.2",setprototypeof:"1.1.0",statuses:"1.4.0","type-is":"1.6.16","utils-merge":"1.0.1",vary:"1.1.2"},dependencies:{"body-parser":{version:"1.18.2",resolved:"https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",integrity:"sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",requires:{bytes:"3.0.0","content-type":"1.0.4",debug:"2.6.9",depd:"1.1.2","http-errors":"1.6.3","iconv-lite":"0.4.19","on-finished":"2.3.0",qs:"6.5.1","raw-body":"2.3.2","type-is":"1.6.16"}},"iconv-lite":{version:"0.4.19",resolved:"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",integrity:"sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="},qs:{version:"6.5.1",resolved:"https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",integrity:"sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="},"raw-body":{version:"2.3.2",resolved:"https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",integrity:"sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",requires:{bytes:"3.0.0","http-errors":"1.6.2","iconv-lite":"0.4.19",unpipe:"1.0.0"},dependencies:{depd:{version:"1.1.1",resolved:"https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",integrity:"sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="},"http-errors":{version:"1.6.2",resolved:"https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",integrity:"sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",requires:{depd:"1.1.1",inherits:"2.0.3",setprototypeof:"1.0.3",statuses:"1.4.0"}},setprototypeof:{version:"1.0.3",resolved:"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",integrity:"sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="}}},"safe-buffer":{version:"5.1.1",resolved:"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",integrity:"sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="},statuses:{version:"1.4.0",resolved:"https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",integrity:"sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="}}},extend:{version:"3.0.1",resolved:"https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",integrity:"sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="},extsprintf:{version:"1.3.0",resolved:"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",integrity:"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="},"fake-merkle-patricia-tree":{version:"1.0.1",resolved:"https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz",integrity:"sha1-S4w6z7Ugr635hgsfFM2M40As3dM=",requires:{"checkpoint-store":"1.1.0"}},"fast-deep-equal":{version:"1.1.0",resolved:"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",integrity:"sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="},"fast-json-stable-stringify":{version:"2.0.0",resolved:"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",integrity:"sha1-1RQsDK7msRifh9OnYREGT4bIu/I="},"fd-slicer":{version:"1.0.1",resolved:"https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",integrity:"sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",requires:{pend:"1.2.0"}},"fetch-ponyfill":{version:"4.1.0",resolved:"https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz",integrity:"sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=",requires:{"node-fetch":"1.7.3"},dependencies:{"node-fetch":{version:"1.7.3",resolved:"https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",integrity:"sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",requires:{encoding:"0.1.12","is-stream":"1.1.0"}}}},"file-type":{version:"5.2.0",resolved:"https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",integrity:"sha1-LdvqfHP/42No365J3DOMBYwritY="},finalhandler:{version:"1.1.1",resolved:"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",integrity:"sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",requires:{debug:"2.6.9",encodeurl:"1.0.2","escape-html":"1.0.3","on-finished":"2.3.0",parseurl:"1.3.2",statuses:"1.4.0",unpipe:"1.0.0"},dependencies:{statuses:{version:"1.4.0",resolved:"https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",integrity:"sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="}}},"find-up":{version:"1.1.2",resolved:"https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",integrity:"sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",requires:{"path-exists":"2.1.0","pinkie-promise":"2.0.1"}},"for-each":{version:"0.3.2",resolved:"https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz",integrity:"sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=",requires:{"is-function":"1.0.1"}},foreach:{version:"2.0.5",resolved:"https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",integrity:"sha1-C+4AUBiusmDQo6865ljdATbsG5k="},"forever-agent":{version:"0.6.1",resolved:"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",integrity:"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="},"form-data":{version:"2.3.2",resolved:"https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",integrity:"sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",requires:{asynckit:"0.4.0","combined-stream":"1.0.6","mime-types":"2.1.18"}},forwarded:{version:"0.1.2",resolved:"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",integrity:"sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="},fresh:{version:"0.5.2",resolved:"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",integrity:"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="},"fs-constants":{version:"1.0.0",resolved:"https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",integrity:"sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="},"fs-extra":{version:"0.30.0",resolved:"https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",integrity:"sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",requires:{"graceful-fs":"4.1.11",jsonfile:"2.4.0",klaw:"1.3.1","path-is-absolute":"1.0.1",rimraf:"2.6.2"}},"fs-promise":{version:"2.0.3",resolved:"https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz",integrity:"sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=",requires:{"any-promise":"1.3.0","fs-extra":"2.1.2",mz:"2.7.0","thenify-all":"1.6.0"},dependencies:{"fs-extra":{version:"2.1.2",resolved:"https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",integrity:"sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",requires:{"graceful-fs":"4.1.11",jsonfile:"2.4.0"}}}},"fs.realpath":{version:"1.0.0",resolved:"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",integrity:"sha1-FQStJSMVjKpA20onh8sBQRmU6k8="},fstream:{version:"1.0.11",resolved:"https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",integrity:"sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",requires:{"graceful-fs":"4.1.11",inherits:"2.0.3",mkdirp:"0.5.1",rimraf:"2.6.2"}},"function-bind":{version:"1.1.1",resolved:"https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",integrity:"sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="},"functional-red-black-tree":{version:"1.0.1",resolved:"https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",integrity:"sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="},"generic-pool":{version:"2.0.4",resolved:"https://registry.npmjs.org/generic-pool/-/generic-pool-2.0.4.tgz",integrity:"sha1-+XGN7agvoSXtXEPjQcmiFadm2aM="},"get-caller-file":{version:"1.0.2",resolved:"https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",integrity:"sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="},"get-stream":{version:"3.0.0",resolved:"https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",integrity:"sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="},getpass:{version:"0.1.7",resolved:"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",integrity:"sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",requires:{"assert-plus":"1.0.0"}},glob:{version:"7.1.2",resolved:"https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",integrity:"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",requires:{"fs.realpath":"1.0.0",inflight:"1.0.6",inherits:"2.0.3",minimatch:"3.0.4",once:"1.4.0","path-is-absolute":"1.0.1"}},global:{version:"4.3.2",resolved:"https://registry.npmjs.org/global/-/global-4.3.2.tgz",integrity:"sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",requires:{"min-document":"2.19.0",process:"0.5.2"}},globals:{version:"9.18.0",resolved:"https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",integrity:"sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="},got:{version:"7.1.0",resolved:"https://registry.npmjs.org/got/-/got-7.1.0.tgz",integrity:"sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",requires:{"decompress-response":"3.3.0",duplexer3:"0.1.4","get-stream":"3.0.0","is-plain-obj":"1.1.0","is-retry-allowed":"1.1.0","is-stream":"1.1.0",isurl:"1.0.0","lowercase-keys":"1.0.1","p-cancelable":"0.3.0","p-timeout":"1.2.1","safe-buffer":"5.1.2","timed-out":"4.0.1","url-parse-lax":"1.0.0","url-to-options":"1.0.1"}},"graceful-fs":{version:"4.1.11",resolved:"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",integrity:"sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="},"graceful-readlink":{version:"1.0.1",resolved:"https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",integrity:"sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="},growl:{version:"1.10.3",resolved:"https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",integrity:"sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",dev:!0},"har-schema":{version:"2.0.0",resolved:"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",integrity:"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="},"har-validator":{version:"5.0.3",resolved:"https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",integrity:"sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",requires:{ajv:"5.5.2","har-schema":"2.0.0"}},has:{version:"1.0.3",resolved:"https://registry.npmjs.org/has/-/has-1.0.3.tgz",integrity:"sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",requires:{"function-bind":"1.1.1"}},"has-ansi":{version:"2.0.0",resolved:"https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",integrity:"sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",requires:{"ansi-regex":"2.1.1"}},"has-flag":{version:"2.0.0",resolved:"https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",integrity:"sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",dev:!0},"has-localstorage":{version:"1.0.1",resolved:"https://registry.npmjs.org/has-localstorage/-/has-localstorage-1.0.1.tgz",integrity:"sha1-/mJAbEdn+9bXhNrGkFkoEIuClxs="},"has-symbol-support-x":{version:"1.4.2",resolved:"https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",integrity:"sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="},"has-to-string-tag-x":{version:"1.4.1",resolved:"https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",integrity:"sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",requires:{"has-symbol-support-x":"1.4.2"}},"hash-base":{version:"3.0.4",resolved:"https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",integrity:"sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",requires:{inherits:"2.0.3","safe-buffer":"5.1.2"}},"hash.js":{version:"1.1.3",resolved:"https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",integrity:"sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",requires:{inherits:"2.0.3","minimalistic-assert":"1.0.1"}},hdkey:{version:"0.7.1",resolved:"https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz",integrity:"sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=",requires:{coinstring:"2.3.0",secp256k1:"3.5.0"}},he:{version:"1.1.1",resolved:"https://registry.npmjs.org/he/-/he-1.1.1.tgz",integrity:"sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",dev:!0},heap:{version:"0.2.6",resolved:"https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",integrity:"sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw="},"hmac-drbg":{version:"1.0.1",resolved:"https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",integrity:"sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",requires:{"hash.js":"1.1.3","minimalistic-assert":"1.0.1","minimalistic-crypto-utils":"1.0.1"}},"home-or-tmp":{version:"2.0.0",resolved:"https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",integrity:"sha1-42w/LSyufXRqhX440Y1fMqeILbg=",requires:{"os-homedir":"1.0.2","os-tmpdir":"1.0.2"}},"hosted-git-info":{version:"2.6.0",resolved:"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",integrity:"sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw=="},"http-errors":{version:"1.6.3",resolved:"https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",integrity:"sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",requires:{depd:"1.1.2",inherits:"2.0.3",setprototypeof:"1.1.0",statuses:"1.5.0"}},"http-https":{version:"1.0.0",resolved:"https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",integrity:"sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs="},"http-signature":{version:"1.2.0",resolved:"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",integrity:"sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",requires:{"assert-plus":"1.0.0",jsprim:"1.4.1",sshpk:"1.14.2"}},"humble-localstorage":{version:"1.4.2",resolved:"https://registry.npmjs.org/humble-localstorage/-/humble-localstorage-1.4.2.tgz",integrity:"sha1-0Fqw1SbE7b3b98amDfb/WAUoNGk=",requires:{"has-localstorage":"1.0.1","localstorage-memory":"1.0.2"}},"iconv-lite":{version:"0.4.23",resolved:"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",integrity:"sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",requires:{"safer-buffer":"2.1.2"}},ieee754:{version:"1.1.11",resolved:"https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",integrity:"sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg=="},immediate:{version:"3.2.3",resolved:"https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",integrity:"sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="},inflight:{version:"1.0.6",resolved:"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",integrity:"sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",requires:{once:"1.4.0",wrappy:"1.0.2"}},inherits:{version:"2.0.3",resolved:"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",integrity:"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="},invariant:{version:"2.2.4",resolved:"https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",integrity:"sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",requires:{"loose-envify":"1.3.1"}},"invert-kv":{version:"1.0.0",resolved:"https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",integrity:"sha1-EEqOSqym09jNFXqO+L+rLXo//bY="},"ipaddr.js":{version:"1.6.0",resolved:"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",integrity:"sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="},"is-arrayish":{version:"0.2.1",resolved:"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",integrity:"sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="},"is-builtin-module":{version:"1.0.0",resolved:"https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",integrity:"sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",requires:{"builtin-modules":"1.1.1"}},"is-callable":{version:"1.1.3",resolved:"https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",integrity:"sha1-hut1OSgF3cM69xySoO7fdO52BLI="},"is-date-object":{version:"1.0.1",resolved:"https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",integrity:"sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="},"is-finite":{version:"1.0.2",resolved:"https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",integrity:"sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",requires:{"number-is-nan":"1.0.1"}},"is-fn":{version:"1.0.0",resolved:"https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz",integrity:"sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw="},"is-fullwidth-code-point":{version:"1.0.0",resolved:"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",integrity:"sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",requires:{"number-is-nan":"1.0.1"}},"is-function":{version:"1.0.1",resolved:"https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",integrity:"sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="},"is-hex-prefixed":{version:"1.0.0",resolved:"https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",integrity:"sha1-fY035q135dEnFIkTxXPggtd39VQ="},"is-natural-number":{version:"4.0.1",resolved:"https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",integrity:"sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="},"is-object":{version:"1.0.1",resolved:"https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",integrity:"sha1-iVJojF7C/9awPsyF52ngKQMINHA="},"is-plain-obj":{version:"1.1.0",resolved:"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",integrity:"sha1-caUMhCnfync8kqOQpKA7OfzVHT4="},"is-regex":{version:"1.0.4",resolved:"https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",integrity:"sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",requires:{has:"1.0.3"}},"is-retry-allowed":{version:"1.1.0",resolved:"https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",integrity:"sha1-EaBgVotnM5REAz0BJaYaINVk+zQ="},"is-stream":{version:"1.1.0",resolved:"https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",integrity:"sha1-EtSj3U5o4Lec6428hBc66A2RykQ="},"is-symbol":{version:"1.0.1",resolved:"https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",integrity:"sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="},"is-typedarray":{version:"1.0.0",resolved:"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",integrity:"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="},"is-utf8":{version:"0.2.1",resolved:"https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",integrity:"sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="},isarray:{version:"0.0.1",resolved:"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",integrity:"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="},isstream:{version:"0.1.2",resolved:"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",integrity:"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="},isurl:{version:"1.0.0",resolved:"https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",integrity:"sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",requires:{"has-to-string-tag-x":"1.4.1","is-object":"1.0.1"}},"js-scrypt":{version:"0.2.0",resolved:"https://registry.npmjs.org/js-scrypt/-/js-scrypt-0.2.0.tgz",integrity:"sha1-emK3AbRhbnCtDN5URiequ5nX/jk=",requires:{"generic-pool":"2.0.4"}},"js-sha3":{version:"0.3.1",resolved:"https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz",integrity:"sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM="},"js-tokens":{version:"3.0.2",resolved:"https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",integrity:"sha1-mGbfOVECEw449/mWvOtlRDIJwls="},jsbn:{version:"0.1.1",resolved:"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",integrity:"sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",optional:!0},jsesc:{version:"0.5.0",resolved:"https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",integrity:"sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="},"json-rpc-engine":{version:"3.7.3",resolved:"https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.7.3.tgz",integrity:"sha512-+FO3UWu/wafh/+MZ6BXy0HZU+f5plwUn82FgxpC0scJkEh5snOjFrAAtqCITPDfvfLHRUFOG5pQDUx2pspfERQ==",requires:{async:"2.6.1","babel-preset-env":"1.7.0",babelify:"7.3.0",clone:"2.1.1","json-rpc-error":"2.0.0","promise-to-callback":"1.0.0"}},"json-rpc-error":{version:"2.0.0",resolved:"https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz",integrity:"sha1-p6+cICg4tekFxyUOVH8a/3cligI=",requires:{inherits:"2.0.3"}},"json-rpc-random-id":{version:"1.0.1",resolved:"https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz",integrity:"sha1-uknZat7RRE27jaPSA3SKy7zeyMg="},"json-schema":{version:"0.2.3",resolved:"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",integrity:"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="},"json-schema-traverse":{version:"0.3.1",resolved:"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",integrity:"sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="},"json-stable-stringify":{version:"1.0.1",resolved:"https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",integrity:"sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",requires:{jsonify:"0.0.0"}},"json-stringify-safe":{version:"5.0.1",resolved:"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",integrity:"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="},json5:{version:"0.5.1",resolved:"https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",integrity:"sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="},jsonfile:{version:"2.4.0",resolved:"https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",integrity:"sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",requires:{"graceful-fs":"4.1.11"}},jsonify:{version:"0.0.0",resolved:"https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",integrity:"sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="},jsprim:{version:"1.4.1",resolved:"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",integrity:"sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",requires:{"assert-plus":"1.0.0",extsprintf:"1.3.0","json-schema":"0.2.3",verror:"1.10.0"}},keccak:{version:"1.4.0",resolved:"https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz",integrity:"sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==",requires:{bindings:"1.3.0",inherits:"2.0.3",nan:"2.10.0","safe-buffer":"5.1.2"}},keccakjs:{version:"0.2.1",resolved:"https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz",integrity:"sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=",requires:{"browserify-sha3":"0.0.1",sha3:"1.2.2"}},klaw:{version:"1.3.1",resolved:"https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",integrity:"sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",requires:{"graceful-fs":"4.1.11"}},lcid:{version:"1.0.0",resolved:"https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",integrity:"sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",requires:{"invert-kv":"1.0.0"}},"level-codec":{version:"7.0.1",resolved:"https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz",integrity:"sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ=="},"level-errors":{version:"1.0.5",resolved:"https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz",integrity:"sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==",requires:{errno:"0.1.7"}},"level-iterator-stream":{version:"1.3.1",resolved:"https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz",integrity:"sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=",requires:{inherits:"2.0.3","level-errors":"1.0.5","readable-stream":"1.1.14",xtend:"4.0.1"},dependencies:{"readable-stream":{version:"1.1.14",resolved:"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",integrity:"sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",requires:{"core-util-is":"1.0.2",inherits:"2.0.3",isarray:"0.0.1",string_decoder:"0.10.31"}}}},"level-post":{version:"1.0.7",resolved:"https://registry.npmjs.org/level-post/-/level-post-1.0.7.tgz",integrity:"sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==",requires:{ltgt:"2.2.1"}},"level-sublevel":{version:"6.6.2",resolved:"https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.2.tgz",integrity:"sha512-+hptqmFYPKFju9QG4F6scvx3ZXkhrSmmhYui+hPzRn/jiC3DJ6VNZRKsIhGMpeajVBWfRV7XiysUThrJ/7PgXQ==",requires:{bytewise:"1.1.0",levelup:"0.19.1",ltgt:"2.1.3","pull-defer":"0.2.2","pull-level":"2.0.4","pull-stream":"3.6.8",typewiselite:"1.0.0",xtend:"4.0.1"},dependencies:{"abstract-leveldown":{version:"0.12.4",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz",integrity:"sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=",requires:{xtend:"3.0.0"},dependencies:{xtend:{version:"3.0.0",resolved:"https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",integrity:"sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="}}},"deferred-leveldown":{version:"0.2.0",resolved:"https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz",integrity:"sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=",requires:{"abstract-leveldown":"0.12.4"}},levelup:{version:"0.19.1",resolved:"https://registry.npmjs.org/levelup/-/levelup-0.19.1.tgz",integrity:"sha1-86anIFJyxLXzXkEv8ASgOgrt9Qs=",requires:{bl:"0.8.2","deferred-leveldown":"0.2.0",errno:"0.1.7",prr:"0.0.0","readable-stream":"1.0.34",semver:"5.1.1",xtend:"3.0.0"},dependencies:{xtend:{version:"3.0.0",resolved:"https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",integrity:"sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="}}},ltgt:{version:"2.1.3",resolved:"https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz",integrity:"sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ="},prr:{version:"0.0.0",resolved:"https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",integrity:"sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="},"readable-stream":{version:"1.0.34",resolved:"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",integrity:"sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",requires:{"core-util-is":"1.0.2",inherits:"2.0.3",isarray:"0.0.1",string_decoder:"0.10.31"}},semver:{version:"5.1.1",resolved:"https://registry.npmjs.org/semver/-/semver-5.1.1.tgz",integrity:"sha1-oykqNz5vPgeY2gsgZBuanFvEfhk="}}},"level-ws":{version:"0.0.0",resolved:"https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz",integrity:"sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=",requires:{"readable-stream":"1.0.34",xtend:"2.1.2"},dependencies:{"readable-stream":{version:"1.0.34",resolved:"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",integrity:"sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",requires:{"core-util-is":"1.0.2",inherits:"2.0.3",isarray:"0.0.1",string_decoder:"0.10.31"}},xtend:{version:"2.1.2",resolved:"https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",integrity:"sha1-bv7MKk2tjmlixJAbM3znuoe10os=",requires:{"object-keys":"0.4.0"}}}},levelup:{version:"1.3.9",resolved:"https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",integrity:"sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",requires:{"deferred-leveldown":"1.2.2","level-codec":"7.0.1","level-errors":"1.0.5","level-iterator-stream":"1.3.1",prr:"1.0.1",semver:"5.4.1",xtend:"4.0.1"}},"load-json-file":{version:"1.1.0",resolved:"https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",integrity:"sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",requires:{"graceful-fs":"4.1.11","parse-json":"2.2.0",pify:"2.3.0","pinkie-promise":"2.0.1","strip-bom":"2.0.0"},dependencies:{pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="}}},"localstorage-down":{version:"0.6.7",resolved:"https://registry.npmjs.org/localstorage-down/-/localstorage-down-0.6.7.tgz",integrity:"sha1-0Hmak7MebF+lGI7AYkLrHM6dbRU=",requires:{"abstract-leveldown":"0.12.3",argsarray:"0.0.1","buffer-from":"0.1.2",d64:"1.0.0","humble-localstorage":"1.4.2",inherits:"2.0.3","tiny-queue":"0.2.0"},dependencies:{"abstract-leveldown":{version:"0.12.3",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.3.tgz",integrity:"sha1-EWsexcdxDvei1XBnaLvbREC+EHA=",requires:{xtend:"3.0.0"}},xtend:{version:"3.0.0",resolved:"https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",integrity:"sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="}}},"localstorage-memory":{version:"1.0.2",resolved:"https://registry.npmjs.org/localstorage-memory/-/localstorage-memory-1.0.2.tgz",integrity:"sha1-zUqPIQ5V3VGckp9LTMgoKbWPmlE="},lodash:{version:"4.17.10",resolved:"https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",integrity:"sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="},"lodash.assign":{version:"4.2.0",resolved:"https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",integrity:"sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="},"lodash.merge":{version:"4.6.1",resolved:"https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",integrity:"sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",dev:!0},looper:{version:"2.0.0",resolved:"https://registry.npmjs.org/looper/-/looper-2.0.0.tgz",integrity:"sha1-Zs0Md0rz1P7axTeU90LbVtqPCew="},"loose-envify":{version:"1.3.1",resolved:"https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",integrity:"sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",requires:{"js-tokens":"3.0.2"}},"lowercase-keys":{version:"1.0.1",resolved:"https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",integrity:"sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="},"lru-cache":{version:"3.2.0",resolved:"https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz",integrity:"sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=",requires:{pseudomap:"1.0.2"}},ltgt:{version:"2.2.1",resolved:"https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",integrity:"sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="},"make-dir":{version:"1.3.0",resolved:"https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",integrity:"sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",requires:{pify:"3.0.0"}},"md5.js":{version:"1.3.4",resolved:"https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",integrity:"sha1-6b296UogpawYsENA/Fdk1bCdkB0=",requires:{"hash-base":"3.0.4",inherits:"2.0.3"}},"media-typer":{version:"0.3.0",resolved:"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",integrity:"sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="},memdown:{version:"1.4.1",resolved:"https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",integrity:"sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",requires:{"abstract-leveldown":"2.7.2","functional-red-black-tree":"1.0.1",immediate:"3.2.3",inherits:"2.0.3",ltgt:"2.2.1","safe-buffer":"5.1.2"},dependencies:{"abstract-leveldown":{version:"2.7.2",resolved:"https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",integrity:"sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",requires:{xtend:"4.0.1"}}}},memorystream:{version:"0.3.1",resolved:"https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",integrity:"sha1-htcJCzDORV1j+64S3aUaR93K+bI="},"merge-descriptors":{version:"1.0.1",resolved:"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",integrity:"sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="},"merkle-patricia-tree":{version:"2.3.1",resolved:"https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz",integrity:"sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==",requires:{async:"1.5.2","ethereumjs-util":"5.2.0","level-ws":"0.0.0",levelup:"1.3.9",memdown:"1.4.1","readable-stream":"2.3.6",rlp:"2.0.0",semaphore:"1.1.0"},dependencies:{async:{version:"1.5.2",resolved:"https://registry.npmjs.org/async/-/async-1.5.2.tgz",integrity:"sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="}}},methods:{version:"1.1.2",resolved:"https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",integrity:"sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="},"miller-rabin":{version:"4.0.1",resolved:"https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",integrity:"sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",requires:{"bn.js":"4.11.6",brorand:"1.1.0"}},mime:{version:"1.4.1",resolved:"https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",integrity:"sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="},"mime-db":{version:"1.33.0",resolved:"https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",integrity:"sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="},"mime-types":{version:"2.1.18",resolved:"https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",integrity:"sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",requires:{"mime-db":"1.33.0"}},"mimic-response":{version:"1.0.0",resolved:"https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz",integrity:"sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4="},"min-document":{version:"2.19.0",resolved:"https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",integrity:"sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",requires:{"dom-walk":"0.1.1"}},"minimalistic-assert":{version:"1.0.1",resolved:"https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",integrity:"sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="},"minimalistic-crypto-utils":{version:"1.0.1",resolved:"https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",integrity:"sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="},minimatch:{version:"3.0.4",resolved:"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",integrity:"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",requires:{"brace-expansion":"1.1.11"}},minimist:{version:"0.0.8",resolved:"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",integrity:"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="},mkdirp:{version:"0.5.1",resolved:"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",integrity:"sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",requires:{minimist:"0.0.8"}},"mkdirp-promise":{version:"5.0.1",resolved:"https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz",integrity:"sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=",requires:{mkdirp:"0.5.1"}},mocha:{version:"5.1.1",resolved:"https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz",integrity:"sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==",dev:!0,requires:{"browser-stdout":"1.3.1",commander:"2.11.0",debug:"3.1.0",diff:"3.5.0","escape-string-regexp":"1.0.5",glob:"7.1.2",growl:"1.10.3",he:"1.1.1",minimatch:"3.0.4",mkdirp:"0.5.1","supports-color":"4.4.0"},dependencies:{commander:{version:"2.11.0",resolved:"https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",integrity:"sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",dev:!0},debug:{version:"3.1.0",resolved:"https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",integrity:"sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",dev:!0,requires:{ms:"2.0.0"}},"supports-color":{version:"4.4.0",resolved:"https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",integrity:"sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",dev:!0,requires:{"has-flag":"2.0.0"}}}},"mock-fs":{version:"4.5.0",resolved:"https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz",integrity:"sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w=="},mout:{version:"0.11.1",resolved:"https://registry.npmjs.org/mout/-/mout-0.11.1.tgz",integrity:"sha1-ujYR318OWx/7/QEWa48C0fX6K5k="},ms:{version:"2.0.0",resolved:"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",integrity:"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="},mz:{version:"2.7.0",resolved:"https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",integrity:"sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",requires:{"any-promise":"1.3.0","object-assign":"4.1.1","thenify-all":"1.6.0"}},nan:{version:"2.10.0",resolved:"https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",integrity:"sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="},"nano-json-stream-parser":{version:"0.1.2",resolved:"https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz",integrity:"sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18="},negotiator:{version:"0.6.1",resolved:"https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",integrity:"sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="},"node-fetch":{version:"2.1.2",resolved:"https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",integrity:"sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="},"normalize-package-data":{version:"2.4.0",resolved:"https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",integrity:"sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",requires:{"hosted-git-info":"2.6.0","is-builtin-module":"1.0.0",semver:"5.4.1","validate-npm-package-license":"3.0.3"}},"number-is-nan":{version:"1.0.1",resolved:"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",integrity:"sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="},"number-to-bn":{version:"1.7.0",resolved:"https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",integrity:"sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=",requires:{"bn.js":"4.11.6","strip-hex-prefix":"1.0.0"}},"oauth-sign":{version:"0.8.2",resolved:"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",integrity:"sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="},"object-assign":{version:"4.1.1",resolved:"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",integrity:"sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="},"object-inspect":{version:"1.5.0",resolved:"https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz",integrity:"sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw=="},"object-keys":{version:"0.4.0",resolved:"https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",integrity:"sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="},oboe:{version:"2.1.3",resolved:"https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz",integrity:"sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=",requires:{"http-https":"1.0.0"}},"on-finished":{version:"2.3.0",resolved:"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",integrity:"sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",requires:{"ee-first":"1.1.1"}},once:{version:"1.4.0",resolved:"https://registry.npmjs.org/once/-/once-1.4.0.tgz",integrity:"sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",requires:{wrappy:"1.0.2"}},"os-homedir":{version:"1.0.2",resolved:"https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",integrity:"sha1-/7xJiDNuDoM94MFox+8VISGqf7M="},"os-locale":{version:"1.4.0",resolved:"https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",integrity:"sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",requires:{lcid:"1.0.0"}},"os-tmpdir":{version:"1.0.2",resolved:"https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",integrity:"sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="},"p-cancelable":{version:"0.3.0",resolved:"https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",integrity:"sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="},"p-finally":{version:"1.0.0",resolved:"https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",integrity:"sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="},"p-timeout":{version:"1.2.1",resolved:"https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",integrity:"sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",requires:{"p-finally":"1.0.0"}},"parse-asn1":{version:"5.1.1",resolved:"https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",integrity:"sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",requires:{"asn1.js":"4.10.1","browserify-aes":"1.2.0","create-hash":"1.2.0",evp_bytestokey:"1.0.3",pbkdf2:"3.0.16"}},"parse-headers":{version:"2.0.1",resolved:"https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz",integrity:"sha1-aug6eqJanZtwCswoaYzR8e1+lTY=",requires:{"for-each":"0.3.2",trim:"0.0.1"}},"parse-json":{version:"2.2.0",resolved:"https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",integrity:"sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",requires:{"error-ex":"1.3.1"}},parseurl:{version:"1.3.2",resolved:"https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",integrity:"sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="},"path-exists":{version:"2.1.0",resolved:"https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",integrity:"sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",requires:{"pinkie-promise":"2.0.1"}},"path-is-absolute":{version:"1.0.1",resolved:"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",integrity:"sha1-F0uSaHNVNP+8es5r9TpanhtcX18="},"path-parse":{version:"1.0.5",resolved:"https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",integrity:"sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="},"path-to-regexp":{version:"0.1.7",resolved:"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",integrity:"sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="},"path-type":{version:"1.1.0",resolved:"https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",integrity:"sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",requires:{"graceful-fs":"4.1.11",pify:"2.3.0","pinkie-promise":"2.0.1"},dependencies:{pify:{version:"2.3.0",resolved:"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",integrity:"sha1-7RQaasBDqEnqWISY59yosVMw6Qw="}}},pbkdf2:{version:"3.0.16",resolved:"https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",integrity:"sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",requires:{"create-hash":"1.2.0","create-hmac":"1.1.7",ripemd160:"2.0.2","safe-buffer":"5.1.2","sha.js":"2.4.11"}},pend:{version:"1.2.0",resolved:"https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",integrity:"sha1-elfrVQpng/kRUzH89GY9XI4AelA="},"performance-now":{version:"2.1.0",resolved:"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",integrity:"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="},pify:{version:"3.0.0",resolved:"https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",integrity:"sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="},pinkie:{version:"2.0.4",resolved:"https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",integrity:"sha1-clVrgM+g1IqXToDnckjoDtT3+HA="},"pinkie-promise":{version:"2.0.1",resolved:"https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",integrity:"sha1-ITXW36ejWMBprJsXh3YogihFD/o=",requires:{pinkie:"2.0.4"}},precond:{version:"0.2.3",resolved:"https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",integrity:"sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw="},"prepend-file":{version:"1.3.1",resolved:"https://registry.npmjs.org/prepend-file/-/prepend-file-1.3.1.tgz",integrity:"sha1-g7FuC0rBkB/OiNvZRaIvTMgd9Xk=",requires:{tmp:"0.0.31"}},"prepend-http":{version:"1.0.4",resolved:"https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",integrity:"sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="},private:{version:"0.1.8",resolved:"https://registry.npmjs.org/private/-/private-0.1.8.tgz",integrity:"sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="},process:{version:"0.5.2",resolved:"https://registry.npmjs.org/process/-/process-0.5.2.tgz",integrity:"sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="},"process-nextick-args":{version:"2.0.0",resolved:"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",integrity:"sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="},"promise-to-callback":{version:"1.0.0",resolved:"https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz",integrity:"sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=",requires:{"is-fn":"1.0.0","set-immediate-shim":"1.0.1"}},"proxy-addr":{version:"2.0.3",resolved:"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",integrity:"sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",requires:{forwarded:"0.1.2","ipaddr.js":"1.6.0"}},prr:{version:"1.0.1",resolved:"https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",integrity:"sha1-0/wRS6BplaRexok/SEzrHXj19HY="},pseudomap:{version:"1.0.2",resolved:"https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",integrity:"sha1-8FKijacOYYkX7wqKw0wa5aaChrM="},"public-encrypt":{version:"4.0.2",resolved:"https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",integrity:"sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",requires:{"bn.js":"4.11.6","browserify-rsa":"4.0.1","create-hash":"1.2.0","parse-asn1":"5.1.1",randombytes:"2.0.6"}},"pull-cat":{version:"1.1.11",resolved:"https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz",integrity:"sha1-tkLdElXaN2pwa220+pYvX9t0wxs="},"pull-defer":{version:"0.2.2",resolved:"https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz",integrity:"sha1-CIew/7MK8ypW2+z6csFnInHwexM="},"pull-level":{version:"2.0.4",resolved:"https://registry.npmjs.org/pull-level/-/pull-level-2.0.4.tgz",integrity:"sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==",requires:{"level-post":"1.0.7","pull-cat":"1.1.11","pull-live":"1.0.1","pull-pushable":"2.2.0","pull-stream":"3.6.8","pull-window":"2.1.4","stream-to-pull-stream":"1.7.2"}},"pull-live":{version:"1.0.1",resolved:"https://registry.npmjs.org/pull-live/-/pull-live-1.0.1.tgz",integrity:"sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=",requires:{"pull-cat":"1.1.11","pull-stream":"3.6.8"}},"pull-pushable":{version:"2.2.0",resolved:"https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz",integrity:"sha1-Xy867UethpGfAbEqLpnW8b13ZYE="},"pull-stream":{version:"3.6.8",resolved:"https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz",integrity:"sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A=="},"pull-window":{version:"2.1.4",resolved:"https://registry.npmjs.org/pull-window/-/pull-window-2.1.4.tgz",integrity:"sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=",requires:{looper:"2.0.0"}},punycode:{version:"1.4.1",resolved:"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",integrity:"sha1-wNWmOycYgArY4esPpSachN1BhF4="},qs:{version:"6.5.2",resolved:"https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",integrity:"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="},"query-string":{version:"5.1.1",resolved:"https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",integrity:"sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",requires:{"decode-uri-component":"0.2.0","object-assign":"4.1.1","strict-uri-encode":"1.1.0"}},randombytes:{version:"2.0.6",resolved:"https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",integrity:"sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",requires:{"safe-buffer":"5.1.2"}},randomfill:{version:"1.0.4",resolved:"https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",integrity:"sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",requires:{randombytes:"2.0.6","safe-buffer":"5.1.2"}},randomhex:{version:"0.1.5",resolved:"https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz",integrity:"sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU="},"range-parser":{version:"1.2.0",resolved:"https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",integrity:"sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="},"raw-body":{version:"2.3.3",resolved:"https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",integrity:"sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",requires:{bytes:"3.0.0","http-errors":"1.6.3","iconv-lite":"0.4.23",unpipe:"1.0.0"}},"read-pkg":{version:"1.1.0",resolved:"https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",integrity:"sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",requires:{"load-json-file":"1.1.0","normalize-package-data":"2.4.0","path-type":"1.1.0"}},"read-pkg-up":{version:"1.0.1",resolved:"https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",integrity:"sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",requires:{"find-up":"1.1.2","read-pkg":"1.1.0"}},"readable-stream":{version:"2.3.6",resolved:"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",integrity:"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",requires:{"core-util-is":"1.0.2",inherits:"2.0.3",isarray:"1.0.0","process-nextick-args":"2.0.0","safe-buffer":"5.1.2",string_decoder:"1.1.1","util-deprecate":"1.0.2"},dependencies:{isarray:{version:"1.0.0",resolved:"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",integrity:"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="},string_decoder:{version:"1.1.1",resolved:"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",integrity:"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",requires:{"safe-buffer":"5.1.2"}}}},regenerate:{version:"1.4.0",resolved:"https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",integrity:"sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="},"regenerator-runtime":{version:"0.11.1",resolved:"https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",integrity:"sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="},"regenerator-transform":{version:"0.10.1",resolved:"https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",integrity:"sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",requires:{"babel-runtime":"6.26.0","babel-types":"6.26.0",private:"0.1.8"}},"regexpu-core":{version:"2.0.0",resolved:"https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",integrity:"sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",requires:{regenerate:"1.4.0",regjsgen:"0.2.0",regjsparser:"0.1.5"}},regjsgen:{version:"0.2.0",resolved:"https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",integrity:"sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="},regjsparser:{version:"0.1.5",resolved:"https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",integrity:"sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",requires:{jsesc:"0.5.0"}},repeating:{version:"2.0.1",resolved:"https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",integrity:"sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",requires:{"is-finite":"1.0.2"}},request:{version:"2.87.0",resolved:"https://registry.npmjs.org/request/-/request-2.87.0.tgz",integrity:"sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",requires:{"aws-sign2":"0.7.0",aws4:"1.7.0",caseless:"0.12.0","combined-stream":"1.0.6",extend:"3.0.1","forever-agent":"0.6.1","form-data":"2.3.2","har-validator":"5.0.3","http-signature":"1.2.0","is-typedarray":"1.0.0",isstream:"0.1.2","json-stringify-safe":"5.0.1","mime-types":"2.1.18","oauth-sign":"0.8.2","performance-now":"2.1.0",qs:"6.5.2","safe-buffer":"5.1.2","tough-cookie":"2.3.4","tunnel-agent":"0.6.0",uuid:"3.2.1"},dependencies:{uuid:{version:"3.2.1",resolved:"https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",integrity:"sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="}}},"require-directory":{version:"2.1.1",resolved:"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",integrity:"sha1-jGStX9MNqxyXbiNE/+f3kqam30I="},"require-from-string":{version:"1.2.1",resolved:"https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",integrity:"sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg="},"require-main-filename":{version:"1.0.1",resolved:"https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",integrity:"sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="},resolve:{version:"1.5.0",resolved:"https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",integrity:"sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",requires:{"path-parse":"1.0.5"}},resumer:{version:"0.0.0",resolved:"https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",integrity:"sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",requires:{through:"2.3.8"}},rimraf:{version:"2.6.2",resolved:"https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",integrity:"sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",requires:{glob:"7.1.2"}},ripemd160:{version:"2.0.2",resolved:"https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",integrity:"sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",requires:{"hash-base":"3.0.4",inherits:"2.0.3"}},rlp:{version:"2.0.0",resolved:"https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz",integrity:"sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A="},"rustbn.js":{version:"0.1.2",resolved:"https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz",integrity:"sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg=="},"safe-buffer":{version:"5.1.2",resolved:"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",integrity:"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="},"safer-buffer":{version:"2.1.2",resolved:"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",integrity:"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="},scrypt:{version:"6.0.3",resolved:"https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz",integrity:"sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=",requires:{nan:"2.10.0"}},"scrypt.js":{version:"0.2.0",resolved:"https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz",integrity:"sha1-r40UZbcemZARC+38WTuUeeA6ito=",requires:{scrypt:"6.0.3",scryptsy:"1.2.1"}},scryptsy:{version:"1.2.1",resolved:"https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz",integrity:"sha1-oyJfpLJST4AnAHYeKFW987LZIWM=",requires:{pbkdf2:"3.0.16"}},secp256k1:{version:"3.5.0",resolved:"https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz",integrity:"sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==",requires:{bindings:"1.3.0",bip66:"1.1.5","bn.js":"4.11.6","create-hash":"1.2.0","drbg.js":"1.0.1",elliptic:"6.4.0",nan:"2.10.0","safe-buffer":"5.1.2"}},seedrandom:{version:"2.4.3",resolved:"https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz",integrity:"sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw="},"seek-bzip":{version:"1.0.5",resolved:"https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",integrity:"sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",requires:{commander:"2.8.1"}},semaphore:{version:"1.1.0",resolved:"https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",integrity:"sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA=="},semver:{version:"5.4.1",resolved:"https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",integrity:"sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="},send:{version:"0.16.2",resolved:"https://registry.npmjs.org/send/-/send-0.16.2.tgz",integrity:"sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",requires:{debug:"2.6.9",depd:"1.1.2",destroy:"1.0.4",encodeurl:"1.0.2","escape-html":"1.0.3",etag:"1.8.1",fresh:"0.5.2","http-errors":"1.6.3",mime:"1.4.1",ms:"2.0.0","on-finished":"2.3.0","range-parser":"1.2.0",statuses:"1.4.0"},dependencies:{statuses:{version:"1.4.0",resolved:"https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",integrity:"sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="}}},"serve-static":{version:"1.13.2",resolved:"https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",integrity:"sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",requires:{encodeurl:"1.0.2","escape-html":"1.0.3",parseurl:"1.3.2",send:"0.16.2"}},servify:{version:"0.1.12",resolved:"https://registry.npmjs.org/servify/-/servify-0.1.12.tgz",integrity:"sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==",requires:{"body-parser":"1.18.3",cors:"2.8.4",express:"4.16.3",request:"2.87.0",xhr:"2.5.0"}},"set-blocking":{version:"2.0.0",resolved:"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",integrity:"sha1-BF+XgtARrppoA93TgrJDkrPYkPc="},"set-immediate-shim":{version:"1.0.1",resolved:"https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",integrity:"sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="},setimmediate:{version:"1.0.5",resolved:"https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",integrity:"sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="},setprototypeof:{version:"1.1.0",resolved:"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",integrity:"sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="},"sha.js":{version:"2.4.11",resolved:"https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",integrity:"sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",requires:{inherits:"2.0.3","safe-buffer":"5.1.2"}},sha3:{version:"1.2.2",resolved:"https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz",integrity:"sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=",requires:{nan:"2.10.0"}},"shebang-loader":{version:"0.0.1",resolved:"https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz",integrity:"sha1-pAAEldRMzu++xjQ157FphWn6Uuw="},"simple-concat":{version:"1.0.0",resolved:"https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",integrity:"sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="},"simple-get":{version:"2.8.1",resolved:"https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",integrity:"sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",requires:{"decompress-response":"3.3.0",once:"1.4.0","simple-concat":"1.0.0"}},slash:{version:"1.0.0",resolved:"https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",integrity:"sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="},solc:{version:"0.4.24",resolved:"https://registry.npmjs.org/solc/-/solc-0.4.24.tgz",integrity:"sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==",requires:{"fs-extra":"0.30.0",memorystream:"0.3.1","require-from-string":"1.2.1",semver:"5.4.1",yargs:"4.8.1"},dependencies:{yargs:{version:"4.8.1",resolved:"https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",integrity:"sha1-wMQpJMpKqmsObaFznfshZDn53cA=",requires:{cliui:"3.2.0",decamelize:"1.2.0","get-caller-file":"1.0.2","lodash.assign":"4.2.0","os-locale":"1.4.0","read-pkg-up":"1.0.1","require-directory":"2.1.1","require-main-filename":"1.0.1","set-blocking":"2.0.0","string-width":"1.0.2","which-module":"1.0.0","window-size":"0.2.0",y18n:"3.2.1","yargs-parser":"2.4.1"}}}},"source-map":{version:"0.5.7",resolved:"https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",integrity:"sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="},"source-map-support":{version:"0.4.18",resolved:"https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",integrity:"sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",requires:{"source-map":"0.5.7"}},"spdx-correct":{version:"3.0.0",resolved:"https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",integrity:"sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",requires:{"spdx-expression-parse":"3.0.0","spdx-license-ids":"3.0.0"}},"spdx-exceptions":{version:"2.1.0",resolved:"https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",integrity:"sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="},"spdx-expression-parse":{version:"3.0.0",resolved:"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",integrity:"sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",requires:{"spdx-exceptions":"2.1.0","spdx-license-ids":"3.0.0"}},"spdx-license-ids":{version:"3.0.0",resolved:"https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",integrity:"sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="},sshpk:{version:"1.14.2",resolved:"https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",integrity:"sha1-xvxhZIo9nE52T9P8306hBeSSupg=",requires:{asn1:"0.2.3","assert-plus":"1.0.0","bcrypt-pbkdf":"1.0.1",dashdash:"1.14.1","ecc-jsbn":"0.1.1",getpass:"0.1.7",jsbn:"0.1.1","safer-buffer":"2.1.2",tweetnacl:"0.14.5"}},statuses:{version:"1.5.0",resolved:"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",integrity:"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="},"stream-to-pull-stream":{version:"1.7.2",resolved:"https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz",integrity:"sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=",requires:{looper:"3.0.0","pull-stream":"3.6.8"},dependencies:{looper:{version:"3.0.0",resolved:"https://registry.npmjs.org/looper/-/looper-3.0.0.tgz",integrity:"sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k="}}},"strict-uri-encode":{version:"1.1.0",resolved:"https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",integrity:"sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="},"string-width":{version:"1.0.2",resolved:"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",integrity:"sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",requires:{"code-point-at":"1.1.0","is-fullwidth-code-point":"1.0.0","strip-ansi":"3.0.1"}},"string.prototype.trim":{version:"1.1.2",resolved:"https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",integrity:"sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",requires:{"define-properties":"1.1.2","es-abstract":"1.12.0","function-bind":"1.1.1"}},string_decoder:{version:"0.10.31",resolved:"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",integrity:"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="},"strip-ansi":{version:"3.0.1",resolved:"https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",integrity:"sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",requires:{"ansi-regex":"2.1.1"}},"strip-bom":{version:"2.0.0",resolved:"https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",integrity:"sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",requires:{"is-utf8":"0.2.1"}},"strip-dirs":{version:"2.1.0",resolved:"https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",integrity:"sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",requires:{"is-natural-number":"4.0.1"}},"strip-hex-prefix":{version:"1.0.0",resolved:"https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",integrity:"sha1-DF8VX+8RUTczd96du1iNoFUA428=",requires:{"is-hex-prefixed":"1.0.0"}},"supports-color":{version:"2.0.0",resolved:"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",integrity:"sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="},"swarm-js":{version:"0.1.37",resolved:"https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz",integrity:"sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==",requires:{bluebird:"3.5.1",buffer:"5.1.0",decompress:"4.2.0","eth-lib":"0.1.27","fs-extra":"2.1.2","fs-promise":"2.0.3",got:"7.1.0","mime-types":"2.1.18","mkdirp-promise":"5.0.1","mock-fs":"4.5.0",setimmediate:"1.0.5","tar.gz":"1.0.7","xhr-request-promise":"0.1.2"},dependencies:{"fs-extra":{version:"2.1.2",resolved:"https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",integrity:"sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",requires:{"graceful-fs":"4.1.11",jsonfile:"2.4.0"}}}},tape:{version:"4.9.0",resolved:"https://registry.npmjs.org/tape/-/tape-4.9.0.tgz",integrity:"sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==",requires:{"deep-equal":"1.0.1",defined:"1.0.0","for-each":"0.3.2","function-bind":"1.1.1",glob:"7.1.2",has:"1.0.3",inherits:"2.0.3",minimist:"1.2.0","object-inspect":"1.5.0",resolve:"1.5.0",resumer:"0.0.0","string.prototype.trim":"1.1.2",through:"2.3.8"},dependencies:{minimist:{version:"1.2.0",resolved:"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",integrity:"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="}}},tar:{version:"2.2.1",resolved:"https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",integrity:"sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",requires:{"block-stream":"0.0.9",fstream:"1.0.11",inherits:"2.0.3"}},"tar-stream":{version:"1.6.1",resolved:"https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",integrity:"sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",requires:{bl:"1.2.2","buffer-alloc":"1.1.0","end-of-stream":"1.4.1","fs-constants":"1.0.0","readable-stream":"2.3.6","to-buffer":"1.1.1",xtend:"4.0.1"},dependencies:{bl:{version:"1.2.2",resolved:"https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",integrity:"sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",requires:{"readable-stream":"2.3.6","safe-buffer":"5.1.2"}}}},"tar.gz":{version:"1.0.7",resolved:"https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz",integrity:"sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==",requires:{bluebird:"2.11.0",commander:"2.8.1",fstream:"1.0.11",mout:"0.11.1",tar:"2.2.1"},dependencies:{bluebird:{version:"2.11.0",resolved:"https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",integrity:"sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="}}},temp:{version:"0.8.3",resolved:"https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",integrity:"sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",requires:{"os-tmpdir":"1.0.2",rimraf:"2.2.8"},dependencies:{rimraf:{version:"2.2.8",resolved:"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",integrity:"sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="}}},thenify:{version:"3.3.0",resolved:"https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",integrity:"sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",requires:{"any-promise":"1.3.0"}},"thenify-all":{version:"1.6.0",resolved:"https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",integrity:"sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",requires:{thenify:"3.3.0"}},through:{version:"2.3.8",resolved:"https://registry.npmjs.org/through/-/through-2.3.8.tgz",integrity:"sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="},through2:{version:"2.0.3",resolved:"https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",integrity:"sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",requires:{"readable-stream":"2.3.6",xtend:"4.0.1"}},"timed-out":{version:"4.0.1",resolved:"https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",integrity:"sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="},"tiny-queue":{version:"0.2.0",resolved:"https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.0.tgz",integrity:"sha1-xJ/LXIdVW+G0pd9+uHEB1beLydw="},tmp:{version:"0.0.31",resolved:"https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",integrity:"sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",requires:{"os-tmpdir":"1.0.2"}},"to-buffer":{version:"1.1.1",resolved:"https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",integrity:"sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="},"to-fast-properties":{version:"1.0.3",resolved:"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",integrity:"sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="},"tough-cookie":{version:"2.3.4",resolved:"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",integrity:"sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",requires:{punycode:"1.4.1"}},treeify:{version:"1.1.0",resolved:"https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz",integrity:"sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A=="},trim:{version:"0.0.1",resolved:"https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",integrity:"sha1-WFhUf2spB1fulczMZm+1AITEYN0="},"trim-right":{version:"1.0.1",resolved:"https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",integrity:"sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="},"tunnel-agent":{version:"0.6.0",resolved:"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",integrity:"sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",requires:{"safe-buffer":"5.1.2"}},tweetnacl:{version:"0.14.5",resolved:"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",integrity:"sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",optional:!0},"type-detect":{version:"1.0.0",resolved:"https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",integrity:"sha1-diIXzAbbJY7EiQihKY6LlRIejqI="},"type-is":{version:"1.6.16",resolved:"https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",integrity:"sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",requires:{"media-typer":"0.3.0","mime-types":"2.1.18"}},typedarray:{version:"0.0.6",resolved:"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",integrity:"sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="},"typedarray-to-buffer":{version:"3.1.5",resolved:"https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",integrity:"sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",requires:{"is-typedarray":"1.0.0"}},typewise:{version:"1.0.3",resolved:"https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz",integrity:"sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=",requires:{"typewise-core":"1.2.0"}},"typewise-core":{version:"1.2.0",resolved:"https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz",integrity:"sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU="},typewiselite:{version:"1.0.0",resolved:"https://registry.npmjs.org/typewiselite/-/typewiselite-1.0.0.tgz",integrity:"sha1-yIgvobsQksBgBal/NO9chQjjZk4="},ultron:{version:"1.1.1",resolved:"https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",integrity:"sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="},"unbzip2-stream":{version:"1.2.5",resolved:"https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz",integrity:"sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==",requires:{buffer:"3.6.0",through:"2.3.8"},dependencies:{"base64-js":{version:"0.0.8",resolved:"https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",integrity:"sha1-EQHpVE9KdrG8OybUUsqW16NeeXg="},buffer:{version:"3.6.0",resolved:"https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",integrity:"sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",requires:{"base64-js":"0.0.8",ieee754:"1.1.11",isarray:"1.0.0"}},isarray:{version:"1.0.0",resolved:"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",integrity:"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="}}},underscore:{version:"1.8.3",resolved:"https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",integrity:"sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="},unorm:{version:"1.4.1",resolved:"https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",integrity:"sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA="},unpipe:{version:"1.0.0",resolved:"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",integrity:"sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="},"url-parse-lax":{version:"1.0.0",resolved:"https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",integrity:"sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",requires:{"prepend-http":"1.0.4"}},"url-set-query":{version:"1.0.0",resolved:"https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz",integrity:"sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk="},"url-to-options":{version:"1.0.1",resolved:"https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",integrity:"sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="},utf8:{version:"2.1.2",resolved:"https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz",integrity:"sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY="},util:{version:"0.10.3",resolved:"https://registry.npmjs.org/util/-/util-0.10.3.tgz",integrity:"sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",dev:!0,requires:{inherits:"2.0.1"},dependencies:{inherits:{version:"2.0.1",resolved:"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",integrity:"sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",dev:!0}}},"util-deprecate":{version:"1.0.2",resolved:"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",integrity:"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="},"utils-merge":{version:"1.0.1",resolved:"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",integrity:"sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="},uuid:{version:"2.0.3",resolved:"https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",integrity:"sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="},"validate-npm-package-license":{version:"3.0.3",resolved:"https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",integrity:"sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",requires:{"spdx-correct":"3.0.0","spdx-expression-parse":"3.0.0"}},vary:{version:"1.1.2",resolved:"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",integrity:"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="},verror:{version:"1.10.0",resolved:"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",integrity:"sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",requires:{"assert-plus":"1.0.0","core-util-is":"1.0.2",extsprintf:"1.3.0"}},web3:{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3/-/web3-1.0.0-beta.34.tgz",integrity:"sha1-NH5WG3hAmMtVYzFfSQR5odkfKrE=",requires:{"web3-bzz":"1.0.0-beta.34","web3-core":"1.0.0-beta.34","web3-eth":"1.0.0-beta.34","web3-eth-personal":"1.0.0-beta.34","web3-net":"1.0.0-beta.34","web3-shh":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-bzz":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.34.tgz",integrity:"sha1-Bo03d3q2Xlxg+OyLmlDP5FJ3kpw=",requires:{got:"7.1.0","swarm-js":"0.1.37",underscore:"1.8.3"}},"web3-core":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.34.tgz",integrity:"sha1-EhvoVV6fsA0sXQXd0zgdDJ5GmH4=",requires:{"web3-core-helpers":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-core-requestmanager":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-core-helpers":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.34.tgz",integrity:"sha1-sWjaANPhnhVrwVriAyA91N/uLQM=",requires:{underscore:"1.8.3","web3-eth-iban":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-core-method":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.34.tgz",integrity:"sha1-7BY8iixJD6AqfsFVWfpzB/x8xt0=",requires:{underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34","web3-core-promievent":"1.0.0-beta.34","web3-core-subscriptions":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-core-promievent":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.34.tgz",integrity:"sha1-pPT6Z4S7KT6CxglgrltWqUzQPtw=",requires:{"any-promise":"1.3.0",eventemitter3:"1.1.1"}},"web3-core-requestmanager":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.34.tgz",integrity:"sha1-Afj2zyrmtvC3DDi64e90G1urIVw=",requires:{underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34","web3-providers-http":"1.0.0-beta.34","web3-providers-ipc":"1.0.0-beta.34","web3-providers-ws":"1.0.0-beta.34"}},"web3-core-subscriptions":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.34.tgz",integrity:"sha1-n+0UQDPyIcPPIQYDAv/a9e8t4t4=",requires:{eventemitter3:"1.1.1",underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34"}},"web3-eth":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.34.tgz",integrity:"sha1-dAhgAIUMb+b1Ne9Jg31tS7YRMmg=",requires:{underscore:"1.8.3","web3-core":"1.0.0-beta.34","web3-core-helpers":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-core-subscriptions":"1.0.0-beta.34","web3-eth-abi":"1.0.0-beta.34","web3-eth-accounts":"1.0.0-beta.34","web3-eth-contract":"1.0.0-beta.34","web3-eth-iban":"1.0.0-beta.34","web3-eth-personal":"1.0.0-beta.34","web3-net":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-eth-abi":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.34.tgz",integrity:"sha1-A0Uz46ovfln/MXk+rqaFwO1a9no=",requires:{"bn.js":"4.11.6",underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-eth-accounts":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.34.tgz",integrity:"sha1-4JFC7uzHl6w0WbdemyOUbTaV8zM=",requires:{"any-promise":"1.3.0","crypto-browserify":"3.12.0","eth-lib":"0.2.7","scrypt.js":"0.2.0",underscore:"1.8.3",uuid:"2.0.1","web3-core":"1.0.0-beta.34","web3-core-helpers":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"},dependencies:{"eth-lib":{version:"0.2.7",resolved:"https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz",integrity:"sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=",requires:{"bn.js":"4.11.6",elliptic:"6.4.0","xhr-request-promise":"0.1.2"}},uuid:{version:"2.0.1",resolved:"https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",integrity:"sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w="}}},"web3-eth-contract":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.34.tgz",integrity:"sha1-nbs4+udkOoCEJ6IBgEcOx0FckeY=",requires:{underscore:"1.8.3","web3-core":"1.0.0-beta.34","web3-core-helpers":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-core-promievent":"1.0.0-beta.34","web3-core-subscriptions":"1.0.0-beta.34","web3-eth-abi":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-eth-iban":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.34.tgz",integrity:"sha1-mvRYYFhnzPdOqXmq8yazi6alugw=",requires:{"bn.js":"4.11.6","web3-utils":"1.0.0-beta.34"}},"web3-eth-personal":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.34.tgz",integrity:"sha1-mvuhZzQuveVCC81YlcP2w0OI8gU=",requires:{"web3-core":"1.0.0-beta.34","web3-core-helpers":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-net":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-net":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.34.tgz",integrity:"sha1-QnzqL0MYgUScjjjVIykPFz+f9j0=",requires:{"web3-core":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"}},"web3-provider-engine":{version:"14.0.6",resolved:"https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz",integrity:"sha512-tr5cGSyxfSC/JqiUpBlJtfZpwQf1yAA8L/zy1C6fDFm0ntR974pobJ4v4676atpZne4Ze5VFy3kPPahHe9gQiQ==",requires:{async:"2.6.1",backoff:"2.5.0",clone:"2.1.1","cross-fetch":"2.2.1","eth-block-tracker":"3.0.1","eth-json-rpc-infura":"3.1.2","eth-sig-util":"1.4.2","ethereumjs-block":"1.2.2","ethereumjs-tx":"1.3.4","ethereumjs-util":"5.2.0","ethereumjs-vm":"2.3.5","json-rpc-error":"2.0.0","json-stable-stringify":"1.0.1","promise-to-callback":"1.0.0","readable-stream":"2.3.6",request:"2.87.0",semaphore:"1.1.0",tape:"4.9.0",ws:"5.2.0",xhr:"2.5.0",xtend:"4.0.1"},dependencies:{"eth-sig-util":{version:"1.4.2",resolved:"https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz",integrity:"sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=",requires:{"ethereumjs-abi":"git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7","ethereumjs-util":"5.2.0"}},"ethereumjs-abi":{version:"git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7",requires:{"bn.js":"4.11.6","ethereumjs-util":"5.2.0"}},ws:{version:"5.2.0",resolved:"https://registry.npmjs.org/ws/-/ws-5.2.0.tgz",integrity:"sha512-c18dMeW+PEQdDFzkhDsnBAlS4Z8KGStBQQUcQ5mf7Nf689jyGk0594L+i9RaQuf4gog6SvWLJorz2NfSaqxZ7w==",requires:{"async-limiter":"1.0.0"}}}},"web3-providers-http":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.34.tgz",integrity:"sha1-5WG1K7tDdmKCAH1AKFv+NVDCfno=",requires:{"web3-core-helpers":"1.0.0-beta.34",xhr2:"0.1.4"}},"web3-providers-ipc":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.34.tgz",integrity:"sha1-obd/GjBtc2SanAOQUuQMtxMo0Ao=",requires:{oboe:"2.1.3",underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34"}},"web3-providers-ws":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.34.tgz",integrity:"sha1-fecPG4Py3jZHZ3IVa+z+9uNRbrM=",requires:{underscore:"1.8.3","web3-core-helpers":"1.0.0-beta.34",websocket:"git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2"},dependencies:{websocket:{version:"git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",requires:{debug:"2.6.9",nan:"2.10.0","typedarray-to-buffer":"3.1.5",yaeti:"0.0.6"}}}},"web3-shh":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.34.tgz",integrity:"sha1-l1Bh1x6uxCzO5Xb3vY9w8DhEr+A=",requires:{"web3-core":"1.0.0-beta.34","web3-core-method":"1.0.0-beta.34","web3-core-subscriptions":"1.0.0-beta.34","web3-net":"1.0.0-beta.34"}},"web3-utils":{version:"1.0.0-beta.34",resolved:"https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.34.tgz",integrity:"sha1-lBH8OarvOcpOBhafdiKX2f8CCXA=",requires:{"bn.js":"4.11.6","eth-lib":"0.1.27","ethjs-unit":"0.1.6","number-to-bn":"1.7.0",randomhex:"0.1.5",underscore:"1.8.3",utf8:"2.1.1"},dependencies:{utf8:{version:"2.1.1",resolved:"https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz",integrity:"sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g="}}},websocket:{version:"1.0.26",resolved:"https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz",integrity:"sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==",requires:{debug:"2.6.9",nan:"2.10.0","typedarray-to-buffer":"3.1.5",yaeti:"0.0.6"}},"whatwg-fetch":{version:"2.0.4",resolved:"https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",integrity:"sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="},"which-module":{version:"1.0.0",resolved:"https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",integrity:"sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="},"window-size":{version:"0.2.0",resolved:"https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",integrity:"sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU="},"wrap-ansi":{version:"2.1.0",resolved:"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",integrity:"sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",requires:{"string-width":"1.0.2","strip-ansi":"3.0.1"}},wrappy:{version:"1.0.2",resolved:"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",integrity:"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="},ws:{version:"3.3.3",resolved:"https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",integrity:"sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",requires:{"async-limiter":"1.0.0","safe-buffer":"5.1.2",ultron:"1.1.1"}},xhr:{version:"2.5.0",resolved:"https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz",integrity:"sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==",requires:{global:"4.3.2","is-function":"1.0.1","parse-headers":"2.0.1",xtend:"4.0.1"}},"xhr-request":{version:"1.1.0",resolved:"https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz",integrity:"sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==",requires:{"buffer-to-arraybuffer":"0.0.5","object-assign":"4.1.1","query-string":"5.1.1","simple-get":"2.8.1","timed-out":"4.0.1","url-set-query":"1.0.0",xhr:"2.5.0"}},"xhr-request-promise":{version:"0.1.2",resolved:"https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz",integrity:"sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=",requires:{"xhr-request":"1.1.0"}},xhr2:{version:"0.1.4",resolved:"https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz",integrity:"sha1-f4dliEdxbbUCYyOBL4GMras4el8="},xtend:{version:"4.0.1",resolved:"https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",integrity:"sha1-pcbVMr5lbiPbgg77lDofBJmNY68="},y18n:{version:"3.2.1",resolved:"https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",integrity:"sha1-bRX7qITAhnnA136I53WegR4H+kE="},yaeti:{version:"0.0.6",resolved:"https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",integrity:"sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="},yargs:{version:"7.1.0",resolved:"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",integrity:"sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",requires:{camelcase:"3.0.0",cliui:"3.2.0",decamelize:"1.2.0","get-caller-file":"1.0.2","os-locale":"1.4.0","read-pkg-up":"1.0.1","require-directory":"2.1.1","require-main-filename":"1.0.1","set-blocking":"2.0.0","string-width":"1.0.2","which-module":"1.0.0",y18n:"3.2.1","yargs-parser":"5.0.0"},dependencies:{"yargs-parser":{version:"5.0.0",resolved:"https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",integrity:"sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",requires:{camelcase:"3.0.0"}}}},"yargs-parser":{version:"2.4.1",resolved:"https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",integrity:"sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",requires:{camelcase:"3.0.0","lodash.assign":"4.2.0"}},yauzl:{version:"2.9.1",resolved:"https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz",integrity:"sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=",requires:{"buffer-crc32":"0.2.13","fd-slicer":"1.0.1"}}}},_spec:"ganache-core@2.2.1",_where:"/home/benjamincburns/projects/consensys/ganache-cli",bugs:{url:"https://github.com/trufflesuite/ganache-core/issues"},bundleDependencies:!1,dependencies:{"abstract-leveldown":"^3.0.0",async:"^2.5.0",bip39:"~2.4.0","bn.js":"4.11.6",cachedown:"^1.0.0",chai:"^3.5.0",clone:"^2.1.1","eth-sig-util":"^2.0.2","ethereumjs-abi":"^0.6.5","ethereumjs-account":"~2.0.4","ethereumjs-block":"~1.2.2","ethereumjs-tx":"1.3.4","ethereumjs-util":"^5.2.0","ethereumjs-vm":"2.3.5","ethereumjs-wallet":"0.6.0","fake-merkle-patricia-tree":"~1.0.1",heap:"~0.2.6","js-scrypt":"^0.2.0","level-sublevel":"^6.6.1",levelup:"^1.1.0","localstorage-down":"^0.6.7",lodash:"^4.17.5","merkle-patricia-tree":"^2.2.0",pify:"^3.0.0","prepend-file":"^1.3.1",request:"^2.87.0",seedrandom:"~2.4.2","shebang-loader":"0.0.1",solc:"0.4.24",temp:"^0.8.3",tmp:"0.0.31",web3:"^1.0.0-beta.34","web3-provider-engine":"^14.0.6",websocket:"^1.0.24",yargs:"^7.0.2"},deprecated:!1,description:"[![npm](https://img.shields.io/npm/v/ganache-core.svg)]() [![npm](https://img.shields.io/npm/dm/ganache-core.svg)]() [![Build Status](https://travis-ci.org/trufflesuite/ganache-core.svg?branch=master)](https://travis-ci.org/trufflesuite/ganache-core) # Ganache Core",devDependencies:{"assert-match":"^1.1.1",memdown:"^1.3.1",mocha:"~5.1.1"},directories:{lib:"./lib"},engines:{node:">=8.9.0"},homepage:"https://github.com/trufflesuite/ganache-core#readme",license:"MIT",main:"./index.js",name:"ganache-core",repository:{type:"git",url:"git+https://github.com/trufflesuite/ganache-core.git"},scripts:{test:"mocha --check-leaks --globals _scratch,sanitizedData"},version:"2.2.1"}},function(e,a,t){function r(e){Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e}(0,t(1).inherits)(r,Error),e.exports=r},function(e,a){e.exports={randomBytes:function(e,a){for(var t=[],r=0;r<e;r++)t.push(255*a());return Buffer.from(t)},randomAlphaNumericString:function(e,a){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let r="";for(var c=0;c<e;c++)r+=t.charAt(Math.floor((a||Math.random)()*t.length));return r}}},function(e,a,t){const r=t(3),c=t(330),n={type:"object",properties:{types:{type:"object",additionalProperties:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string"}},required:["name","type"]}}},primaryType:{type:"string"},domain:{type:"object"},message:{type:"object"}},required:["types","primaryType","domain","message"]},i={encodeData(e,a,t){const n=["bytes32"],i=[this.hashType(e,t)];for(const c of t[e]){let e=a[c.name];if(void 0!==e)if("string"===c.type||"bytes"===c.type)n.push("bytes32"),e=r.sha3(e),i.push(e);else if(void 0!==t[c.type])n.push("bytes32"),e=r.sha3(this.encodeData(c.type,e,t)),i.push(e);else{if(c.type.lastIndexOf("]")===c.type.length-1)throw new Error("Arrays currently unimplemented in encodeData");n.push(c.type),i.push(e)}}return c.rawEncode(n,i)},encodeType(e,a){let t="",r=this.findTypeDependencies(e,a).filter(a=>a!==e);r=[e].concat(r.sort());for(const e of r){if(!a[e])throw new Error(`No type definition specified: ${e}`);t+=`${e}(${a[e].map(({name:e,type:a})=>`${a} ${e}`).join(",")})`}return t},findTypeDependencies(e,a,t=[]){if(t.includes(e)||void 0===a[e])return t;t.push(e);for(const r of a[e])for(const e of this.findTypeDependencies(r.type,a,t))!t.includes(e)&&t.push(e);return t},hashStruct(e,a,t){return r.sha3(this.encodeData(e,a,t))},hashType(e,a){return r.sha3(this.encodeType(e,a))},sanitizeData(e){const a={};for(const t in n.properties)e[t]&&(a[t]=e[t]);return a},sign(e){sanitizedData=this.sanitizeData(e);const a=[Buffer.from("1901","hex")];return a.push(this.hashStruct("EIP712Domain",sanitizedData.domain,sanitizedData.types)),a.push(this.hashStruct(sanitizedData.primaryType,sanitizedData.message,sanitizedData.types)),r.sha3(Buffer.concat(a))}};function f(e){const a=new Error("Expect argument to be non-empty array");if("object"!=typeof e||!e.length)throw a;const t=e.map(function(e){return"bytes"===e.type?r.toBuffer(e.value):e.value}),n=e.map(function(e){return e.type}),i=e.map(function(e){if(!e.name)throw a;return e.type+" "+e.name});return c.soliditySHA3(["bytes32","bytes32"],[c.soliditySHA3(new Array(e.length).fill("string"),i),c.soliditySHA3(n,t)])}function o(e,a){const t=r.toBuffer(a),c=r.fromRpcSig(t);return r.ecrecover(e,c.v,c.r,c.s)}function d(e){const a=r.toBuffer(e.data);return o(r.hashPersonalMessage(a),e.sig)}function s(e,a){for(var t=""+e;t.length<a;)t="0"+t;return t}e.exports={TYPED_MESSAGE_SCHEMA:n,TypedDataUtils:i,concatSig:function(e,a,t){const c=r.fromSigned(a),n=r.fromSigned(t),i=r.bufferToInt(e),f=s(r.toUnsigned(c).toString("hex"),64),o=s(r.toUnsigned(n).toString("hex"),64),d=r.stripHexPrefix(r.intToHex(i));return r.addHexPrefix(f.concat(o,d)).toString("hex")},normalize:function(e){if(e){if("number"==typeof e){const a=r.toBuffer(e);e=r.bufferToHex(a)}if("string"!=typeof e){var a="eth-sig-util.normalize() requires hex string or integer input.";throw new Error(a+=" received "+typeof e+": "+e)}return r.addHexPrefix(e.toLowerCase())}},personalSign:function(e,a){var t=r.toBuffer(a.data),c=r.hashPersonalMessage(t),n=r.ecsign(c,e);return r.bufferToHex(this.concatSig(n.v,n.r,n.s))},recoverPersonalSignature:function(e){const a=d(e),t=r.publicToAddress(a);return r.bufferToHex(t)},extractPublicKey:function(e){return"0x"+d(e).toString("hex")},typedSignatureHash:function(e){const a=f(e);return r.bufferToHex(a)},signTypedDataLegacy:function(e,a){const t=f(a.data),c=r.ecsign(t,e);return r.bufferToHex(this.concatSig(c.v,c.r,c.s))},recoverTypedSignatureLegacy:function(e){const a=o(f(e.data),e.sig),t=r.publicToAddress(a);return r.bufferToHex(t)},signTypedData:function(e,a){const t=i.sign(a.data),c=r.ecsign(t,e);return r.bufferToHex(this.concatSig(c.v,c.r,c.s))},recoverTypedSignature:function(e){const a=o(i.sign(e.data),e.sig),t=r.publicToAddress(a);return r.bufferToHex(t)}}},function(e,a,t){var r=t(44),c=(t(45),t(3)),n=t(1).inherits,i=t(116),f=t(19);t(18);function o(e,a,t){r.call(this,e,a),this.address=t.address,this.fork=t.fork,this.fork_block_number=t.fork_block_number,this.blockchain=t.blockchain,this.web3=new i,this.web3.setProvider(this.fork),this.checkpoints=[]}n(o,r),o.prototype.keyExists=function(e,a){e=c.toBuffer(e),this.findPath(e,function(e,t,r,c){var n=!1;t&&0===r.length&&(n=!0),a(e,n)})},o.prototype.get=function(e,a,t){var n=this;"function"==typeof a&&(t=a,a=n.fork_block_number),a=f.rpcQuantityHexString(a),e=c.toBuffer(e),this.keyExists(e,function(i,o){if(i)return t(i);o?r.prototype.get.call(n,e,function(e,a){t(e,a)}):null==n.address?n.blockchain.fetchAccountFromFallback(e,a,function(e,a){if(e)return t(e);t(null,a.serialize())}):n.web3.eth.getStorageAt(f.hex(n.address),f.hex(e),a,function(e,a){if(e)return t(e);a=c.toBuffer(a),a=c.rlp.encode(a),t(null,a)})})},o.prototype.customCheckpoint=function(){this.checkpoints.push(this.root)},o.prototype.customRevert=function(){this.root=this.checkpoints.pop()},e.exports=o},function(e,a,t){var r=t(322),c=(t(174),t(45)),n=t(87),i=t(168),f=t(167),o=t(3),d=t(413),s=t(116),b=t(19),u=t(18),l=t(93),p=t(9);function h(e){if(this.options=e||{},null==e.fork)throw new Error("ForkedBlockchain must be passed a fork parameter.");if(this.fork=e.fork,this.fork_block_number=e.fork_block_number,this.fork_version=null,"string"==typeof this.fork){if(this.fork.indexOf("@")>=0){var a=this.fork.split("@");this.fork=a[0],this.fork_block_number=parseInt(a[1])}this.fork=new s.providers.HttpProvider(this.fork)}this.time=e.time,this.storageTrieCache={},r.call(this,e),this.web3=new s(this.fork)}(0,t(1).inherits)(h,r),h.prototype.initialize=function(e,a){var t=this;this.web3.eth.net.getId(function(c,n){if(c)return a(c);t.fork_version=n,r.prototype.initialize.call(t,e,function(e){if(e)return a(e);t.vm.stateManager._lookupStorageTrie=t.lookupStorageTrie.bind(t),t.vm.stateManager.cache._lookupAccount=t.getAccount.bind(t),t.vm.stateManager.getContractCode=t.getCode.bind(t),t.vm.stateManager.putContractCode=t.putCode.bind(t),a()})})},h.prototype.createStateTrie=function(e,a){return new d(e,a,{fork:this.fork,fork_block_number:this.fork_block_number,blockchain:this})},h.prototype.createGenesisBlock=function(e){var a=this,t=this.fork_block_number||"latest";a.web3.eth.getBlock(t,function(r,c){if(r)return e(r);!a.time&&a.fork_block_number&&(a.time=a.options.time=new Date(1e3*b.number(c.timestamp)),a.setTime(a.time)),t=b.hex(c.number),a.fork_block_number=a.options.fork_block_number=t,a.stateTrie.fork_block_number=t,a.createBlock(function(a,t){if(a)return e(a);t.header.number=o.toBuffer(b.number(c.number)+1),t.header.parentHash=o.toBuffer(c.hash),e(null,t)})})},h.prototype.createForkedStorageTrie=function(e){e=b.hex(e);var a=new d(this.data.trie_db,null,{address:e,stateTrie:this.stateTrie,blockchain:this,fork:this.fork,fork_block_number:this.fork_block_number});return this.storageTrieCache[e]=a,a},h.prototype.lookupStorageTrie=function(e,a){if(e=b.hex(e),null!=this.storageTrieCache[e])return a(null,this.storageTrieCache[e]);a(null,this.createForkedStorageTrie(e))},h.prototype.isFallbackBlock=function(e,a){var t=this;t.getEffectiveBlockNumber(e,function(e,r){if(e)return a(e);a(null,r<=b.number(t.fork_block_number))})},h.prototype.isBlockHash=function(e){return"string"==typeof e&&0==e.indexOf("0x")&&e.length>42},h.prototype.isFallbackBlockHash=function(e,a){if(!this.isBlockHash(e))return a(null,!1);this.data.blockHashes.get(e,function(e,t){if(e)return e.notFound?a(null,!0):a(e);a(null,!1)})},h.prototype.getFallbackBlock=function(e,a){"string"==typeof e&&e.length<66&&(e=this.web3.utils.toBN(e)),this.web3.eth.getBlock(e,!0,function(e,t){if(e)return a(e);if(null==t)return a();var r=new n;r.header.parentHash=o.toBuffer(t.parentHash),r.header.uncleHash=o.toBuffer(t.sha3Uncles),r.header.coinbase=o.toBuffer(t.miner),r.header.stateRoot=o.toBuffer(t.stateRoot),r.header.transactionTrie=o.toBuffer(t.transactionsRoot),r.header.receiptTrie=o.toBuffer(t.receiptsRoot),r.header.bloom=o.toBuffer(t.logsBloom),r.header.difficulty=o.toBuffer("0x"+t.totalDifficulty.toString(16)),r.header.number=o.toBuffer(t.number),r.header.gasLimit=o.toBuffer(t.gasLimit),r.header.gasUsed=o.toBuffer(t.gasUsed),r.header.timestamp=o.toBuffer(t.timestamp),r.header.extraData=o.toBuffer(t.extraData),(t.transactions||[]).forEach(function(e,a){r.transactions.push(l.fromJSON(e))}),r.hash=function(){return o.toBuffer(t.hash)},a(null,r)})},h.prototype.getBlock=function(e,a){var t=this;this.isFallbackBlockHash(e,function(c,n){return c?a(c):n?t.getFallbackBlock(e,a):void t.isFallbackBlock(e,function(c,n){if(c)return a(c);if(n)return t.getFallbackBlock(e,a);!function(e,a){t.isBlockHash(e)?a(null,e):t.getRelativeBlockNumber(e,a)}(e,function(e,c){if(e)return a(e);r.prototype.getBlock.call(t,c,a)})})})},h.prototype.getStorage=function(e,a,t,r){this.lookupStorageTrie(e,function(e,t){if(e)return r(e);t.get(a,r)})},h.prototype.getCode=function(e,a,t){var c=this;"function"==typeof a&&(t=a,a="latest"),a||(a="latest"),this.getEffectiveBlockNumber(a,function(n,i){a=i,c.stateTrie.keyExists(e,function(n,i){i&&a>b.number(c.fork_block_number)?r.prototype.getCode.call(c,e,a,t):(a>b.number(c.fork_block_number)&&(a="latest"),c.fetchCodeFromFallback(e,a,function(e,a){a&&(a=o.toBuffer(a)),t(e,a)}))})})},h.prototype.putCode=function(e,a,t){var r=this;r.vm.stateManager.cache.flush(()=>{e=o.toBuffer(e),this.stateTrie.get(e,function(n,i){if(n)return t(n);var f=new c(i);f.setCode(r.stateTrie,a,function(a,c){if(a)return t(a);r.stateTrie.put(e,f.serialize(),function(a){if(a)return t(a);r.vm.stateManager.putAccount(e,f,t)})})})})},h.prototype.getAccount=function(e,a,t){var c=this;"function"==typeof a&&(t=a,a="latest"),this.getEffectiveBlockNumber(a,function(n,i){if(n)return t(n);a=i,c.stateTrie.keyExists(e,function(n,i){if(n)return t(n);i&&a>b.number(c.fork_block_number)?r.prototype.getAccount.call(c,e,a,function(e,a){if(e)return t(e);t(null,a)}):c.fetchAccountFromFallback(e,a,t)})})},h.prototype.getTransaction=function(e,a){var t=this;r.prototype.getTransaction.call(this,e,function(r,c){return r?a(r):null!=c?a(null,c):void t.web3.eth.getTransaction(e,function(e,t){if(e)return a(e);t&&(t=l.fromJSON(t)),a(null,t)})})},h.prototype.getTransactionReceipt=function(e,a){var t=this;r.prototype.getTransactionReceipt.call(this,e,function(r,c){return r?a(r):c?a(null,c):void t.web3.eth.getTransactionReceipt(e,function(r,c){return r?a(r):c?void u.parallel({tx:t.getTransaction.bind(t,e),block:t.getBlock.bind(t,c.blockNumber)},function(e,t){if(e)return a(e);var r=c.logs.map(function(e){return new i(e)}),n=new f(t.tx,t.block,r,c.cumulativeGasUsed,c.contractAddress,c.status,b.hex(c.logsBloom));a(null,n)}):a()})})},h.prototype.fetchAccountFromFallback=function(e,a,t){var r=this;e=b.hex(e),u.parallel({code:this.fetchCodeFromFallback.bind(this,e,a),balance:this.fetchBalanceFromFallback.bind(this,e,a),nonce:this.fetchNonceFromFallback.bind(this,e,a)},function(e,a){if(e)return t(e);var n=a.code,i=a.balance,f=a.nonce,d=new c({nonce:f,balance:i});d.exists="0x0"!=n||"0x0"!=i||"0x0"!=f,d.setCode(r.stateTrie,o.toBuffer(n),function(e){if(e)return t(e);t(null,d)})})},h.prototype.fetchCodeFromFallback=function(e,a,t){var r=this;e=b.hex(e),"function"==typeof a&&(t=a,a=this.fork_block_number),this.getSafeFallbackBlockNumber(a,function(a,c){if(a)return t(a);r.web3.eth.getCode(e,c,function(e,a){if(e)return t(e);a="0x"+o.toBuffer(a).toString("hex"),t(null,a)})})},h.prototype.fetchBalanceFromFallback=function(e,a,t){var r=this;e=b.hex(e),"function"==typeof a&&(t=a,a=this.fork_block_number),this.getSafeFallbackBlockNumber(a,function(a,c){if(a)return t(a);r.web3.eth.getBalance(e,c,function(e,a){if(e)return t(e);a="0x"+new p(a).toString(16),t(null,a)})})},h.prototype.fetchNonceFromFallback=function(e,a,t){var r=this;e=b.hex(e),"function"==typeof a&&(t=a,a=this.fork_block_number),this.getSafeFallbackBlockNumber(a,function(a,c){if(a)return t(a);r.web3.eth.getTransactionCount(e,c,function(e,a){if(e)return t(e);a="0x"+r.web3.utils.toBN(a).toString(16),t(null,a)})})},h.prototype.getHeight=function(e){this.latestBlock(function(a,t){if(a)return e(a);e(null,b.number(t.header.number))})},h.prototype.getRelativeBlockNumber=function(e,a){var t=this;this.getEffectiveBlockNumber(e,function(e,r){if(e)return a(e);a(null,r-b.number(t.fork_block_number)-1)})},h.prototype.getSafeFallbackBlockNumber=function(e,a){var t=b.number(this.fork_block_number);if(null==e)return a(null,t);this.getEffectiveBlockNumber(e,function(e,r){r>t&&(r=t),a(null,r)})},h.prototype.getBlockLogs=function(e,a){var t=this;this.getEffectiveBlockNumber(e,function(c,n){if(c)return a(c);t.getRelativeBlockNumber(n,function(c,n){if(c)return a(c);n<0?t.getBlock(e,function(r,c){if(r)return a(r);t.web3.currentProvider.send({jsonrpc:"2.0",method:"eth_getLogs",params:[{fromBlock:b.hex(e),toBlock:b.hex(e)}],id:(new Date).getTime()},function(e,t){if(e)return a(e);var r=t.result.map(function(e){return e.block=c,new i(e)});a(null,r)})}):r.prototype.getBlockLogs.call(t,n,a)})})},h.prototype._checkpointTrie=function(){var e=this;r.prototype._checkpointTrie.call(this),Object.keys(this.storageTrieCache).forEach(function(a){e.storageTrieCache[a].customCheckpoint()})},h.prototype._revertTrie=function(){var e=this;r.prototype._revertTrie.call(this),Object.keys(this.storageTrieCache).forEach(function(a){var t=e.storageTrieCache[a];0==t.checkpoints.length?delete e.storageTrieCache[a]:t.customRevert()})},e.exports=h},function(e,a,t){"use strict";var r="win32"===process.platform,c=r?/[^:]\\$/:/.\/$/;e.exports=function(){var e;return e=r?process.env.TEMP||process.env.TMP||(process.env.SystemRoot||process.env.windir)+"\\temp":process.env.TMPDIR||process.env.TMP||process.env.TEMP||"/tmp",c.test(e)&&(e=e.slice(0,-1)),e}},function(e,a,t){
/*!
 * Tmp
 *
 * Copyright (c) 2011-2015 KARASZI Istvan <github@spam.raszi.hu>
 *
 * MIT Licensed
 */
var r=t(15),c=t(2),n=t(10),i=t(415),f=process.binding("constants"),o=i(),d="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",s=/XXXXXX/,b=3,u=(f.O_CREAT||f.fs.O_CREAT)|(f.O_EXCL||f.fs.O_EXCL)|(f.O_RDWR||f.fs.O_RDWR),l=f.EBADF||f.os.errno.EBADF,p=f.ENOENT||f.os.errno.ENOENT,h=448,m=384,g=[],v=!1,y=!1;function _(e){var a=[],t=null;try{t=n.randomBytes(e)}catch(a){t=n.pseudoRandomBytes(e)}for(var r=0;r<e;r++)a.push(d[t[r]%d.length]);return a.join("")}function w(e,a){if("function"==typeof e){var t=e;e=a||{},a=t}else void 0===e&&(e={});return[e,a]}function A(e){if(e.name)return c.join(e.dir||o,e.name);if(e.template)return e.template.replace(s,_(6));var a=[e.prefix||"tmp-",process.pid,_(12),e.postfix||""].join("");return c.join(e.dir||o,a)}function k(e,a){var t=w(e,a),c=t[0],n=t[1],i=c.tries||b;return isNaN(i)||i<0?n(new Error("Invalid tries")):c.template&&!c.template.match(s)?n(new Error("Invalid template provided")):void function e(){var a=A(c);r.stat(a,function(t){if(!t)return i-- >0?e():n(new Error("Could not get a unique tmp filename, max tries reached "+a));n(null,a)})}()}function x(e){var a=w(e)[0],t=a.tries||b;if(isNaN(t)||t<0)throw new Error("Invalid tries");if(a.template&&!a.template.match(s))throw new Error("Invalid template provided");do{var c=A(a);try{r.statSync(c)}catch(e){return c}}while(t-- >0);throw new Error("Could not get a unique tmp filename, max tries reached")}function E(e){var a=[e];do{for(var t=a.pop(),n=!1,i=r.readdirSync(t),f=0,o=i.length;f<o;f++){var d=c.join(t,i[f]);r.lstatSync(d).isDirectory()?(n||(n=!0,a.push(t)),a.push(d)):r.unlinkSync(d)}n||r.rmdirSync(t)}while(0!==a.length)}function S(e,a,t){var c=j(function(e){try{0<=e[0]&&r.closeSync(e[0])}catch(e){if(e.errno!=-l&&e.errno!=-p)throw e}r.unlinkSync(e[1])},[a,e]);return t.keep||g.unshift(c),c}function T(e,a){var t=j(a.unsafeCleanup?E:r.rmdirSync.bind(r),e);return a.keep||g.unshift(t),t}function j(e,a){var t=!1;return function r(c){if(!t){var n=g.indexOf(r);n>=0&&g.splice(n,1),t=!0,e(a)}c&&c(null)}}function C(){if(!y||v)for(;g.length;)try{g[0].call(null)}catch(e){}}var R=process.versions.node.split(".").map(function(e){return parseInt(e,10)});0===R[0]&&(R[1]<9||9===R[1]&&R[2]<5)&&process.addListener("uncaughtException",function(e){throw y=!0,C(),e}),process.addListener("exit",function(e){e&&(y=!0),C()}),e.exports.tmpdir=o,e.exports.dir=function(e,a){var t=w(e,a),c=t[0],n=t[1];k(c,function(e,a){if(e)return n(e);r.mkdir(a,c.mode||h,function(e){if(e)return n(e);n(null,a,T(a,c))})})},e.exports.dirSync=function(e){var a=w(e)[0],t=x(a);return r.mkdirSync(t,a.mode||h),{name:t,removeCallback:T(t,a)}},e.exports.file=function(e,a){var t=w(e,a),c=t[0],n=t[1];c.postfix=function(e){return void 0===e}(c.postfix)?".tmp":c.postfix,k(c,function(e,a){if(e)return n(e);r.open(a,u,c.mode||m,function(e,t){return e?n(e):c.discardDescriptor?r.close(t,function(e){if(e){try{r.unlinkSync(a)}catch(a){e=a}return n(e)}n(null,a,void 0,S(a,-1,c))}):c.detachDescriptor?n(null,a,t,S(a,-1,c)):void n(null,a,t,S(a,t,c))})})},e.exports.fileSync=function(e){var a=w(e)[0];a.postfix=a.postfix||".tmp";var t=x(a),c=r.openSync(t,u,a.mode||m);return{name:t,fd:c,removeCallback:S(t,c,a)}},e.exports.tmpName=k,e.exports.tmpNameSync=x,e.exports.setGracefulCleanup=function(){v=!0}},function(e,a,t){t(19);var r=t(167),c=t(18);function n(e){this.database=e}n.prototype.encode=function(e,a){a(null,e.toJSON())},n.prototype.decode=function(e,a){var t=this;this.database.transactions.get(e.transactionHash,function(n,i){if(n)return a(n);t.database.blockHashes.get(e.blockHash,function(n,f){if(n)return a(n);c.parallel({block:t.database.blocks.get.bind(t.database.blocks,f),logs:t.database.blockLogs.get.bind(t.database.blockLogs,f)},function(t,c){if(t)return a(t);a(null,new r(i,c.block,c.logs,e.gasUsed,e.contractAddress,e.status,e.logsBloom))})})})},e.exports=n},function(e,a,t){t(19);var r=t(168),c=t(18);function n(e){this.database=e}n.prototype.encode=function(e,a){a(null,e=e.map(function(e){return e.toJSON()}))},n.prototype.decode=function(e,a){var t=this;if(0==e.length)return a(null,[]);this.database.blockHashes.get(e[0].blockHash,function(n,i){if(n)return a(n);t.database.blocks.get(i,function(t,n){if(t)return a(t);c.map(e,function(e,a){a(null,new r({block:n,logIndex:e.logIndex,transactionIndex:e.transactionIndex,transactionHash:e.transactionHash,address:e.address,data:e.data,topics:e.topics,type:e.type}))},function(e,t){if(e)return a(e);a(null,t)})})})},e.exports=n},function(e,a,t){var r=t(3),c=t(19);e.exports={encode:function(e,a){a(null,c.hex(e))},decode:function(e,a){a(null,r.toBuffer(e))}}},function(e,a){var t=Object.prototype.hasOwnProperty;function r(e){if(!(this instanceof r))throw new TypeError("Constructor PseudoMap requires 'new'");if(this.clear(),e)if(e instanceof r||"function"==typeof Map&&e instanceof Map)e.forEach(function(e,a){this.set(a,e)},this);else{if(!Array.isArray(e))throw new TypeError("invalid argument");e.forEach(function(e){this.set(e[0],e[1])},this)}}function c(e,a){return e===a||e!=e&&a!=a}function n(e,a){for(var r=0,n="_"+a,i=n;t.call(e,i);i=n+r++)if(c(e[i].key,a))return e[i]}e.exports=r,r.prototype.forEach=function(e,a){a=a||this,Object.keys(this._data).forEach(function(t){"size"!==t&&e.call(a,this._data[t].value,this._data[t].key)},this)},r.prototype.has=function(e){return!!n(this._data,e)},r.prototype.get=function(e){var a=n(this._data,e);return a&&a.value},r.prototype.set=function(e,a){!function(e,a,r){for(var n=0,i="_"+a,f=i;t.call(e,f);f=i+n++)if(c(e[f].key,a))return void(e[f].value=r);e.size++,e[f]=new function(e,a,t){this.key=e,this.value=a,this._index=t}(a,r,f)}(this._data,e,a)},r.prototype.delete=function(e){var a=n(this._data,e);a&&(delete this._data[a._index],this._data.size--)},r.prototype.clear=function(){var e=Object.create(null);e.size=0,Object.defineProperty(this,"_data",{value:e,enumerable:!1,configurable:!0,writable:!1})},Object.defineProperty(r.prototype,"size",{get:function(){return this._data.size},set:function(e){},enumerable:!0,configurable:!0}),r.prototype.values=r.prototype.keys=r.prototype.entries=function(){throw new Error("iterators are not implemented in this version")}},function(e,a,t){"pseudomap"===process.env.npm_package_name&&"test"===process.env.npm_lifecycle_script&&(process.env.TEST_PSEUDOMAP="true"),"function"!=typeof Map||process.env.TEST_PSEUDOMAP?e.exports=t(420):e.exports=Map},function(e,a,t){e.exports=n;var r=t(421);function c(){return 1}function n(e){if(!(this instanceof n))return new n(e);"number"==typeof e&&(e={max:e}),e||(e={}),this._max=e.max,(!this._max||"number"!=typeof this._max||this._max<=0)&&(this._max=1/0),this._lengthCalculator=e.length||c,"function"!=typeof this._lengthCalculator&&(this._lengthCalculator=c),this._allowStale=e.stale||!1,this._maxAge=e.maxAge||null,this._dispose=e.dispose,this.reset()}function i(e){var a=e.size,t=new Array(a),r=a;return e.forEach(function(e,a){t[--r]=a}),t}function f(e,a,t,r){d(e,t)&&(u(e,t),e._allowStale||(t=void 0)),t&&a.call(r,t.value,t.key,e)}function o(e,a,t){var r=e._cache.get(a);return r&&(d(e,r)?(u(e,r),e._allowStale||(r=void 0)):t&&function(e,a){b(e,a),a.lu=e._mru,h(e),e._lruList.set(a.lu,a)}(e,r),r&&(r=r.value)),r}function d(e,a){if(!a||!a.maxAge&&!e._maxAge)return!1;var t=Date.now()-a.now;return a.maxAge?t>a.maxAge:e._maxAge&&t>e._maxAge}function s(e){if(e._length>e._max)for(var a=i(e._lruList),t=a.length-1;e._length>e._max;t--)e._lru=a[t-1],u(e,e._lruList.get(a[t]))}function b(e,a){e._lruList.delete(a.lu),a.lu===e._lru&&(e._lru=i(e._lruList).pop())}function u(e,a){a&&(e._dispose&&e._dispose(a.key,a.value),e._length-=a.length,e._cache.delete(a.key),b(e,a))}Object.defineProperty(n.prototype,"max",{set:function(e){(!e||"number"!=typeof e||e<=0)&&(e=1/0),this._max=e,this._length>this._max&&s(this)},get:function(){return this._max},enumerable:!0}),Object.defineProperty(n.prototype,"lengthCalculator",{set:function(e){"function"!=typeof e?(this._lengthCalculator=c,this._length=this._lruList.size,this._cache.forEach(function(e,a){e.length=1})):(this._lengthCalculator=e,this._length=0,this._cache.forEach(function(e,a){e.length=this._lengthCalculator(e.value,a),this._length+=e.length},this)),this._length>this._max&&s(this)},get:function(){return this._lengthCalculator},enumerable:!0}),Object.defineProperty(n.prototype,"length",{get:function(){return this._length},enumerable:!0}),Object.defineProperty(n.prototype,"itemCount",{get:function(){return this._lruList.size},enumerable:!0}),n.prototype.rforEach=function(e,a){a=a||this,this._lruList.forEach(function(t){f(this,e,t,a)},this)},n.prototype.forEach=function(e,a){a=a||this;for(var t=i(this._lruList),r=0;r<t.length;r++){f(this,e,this._lruList.get(t[r]),a)}},n.prototype.keys=function(){return i(this._lruList).map(function(e){return this._lruList.get(e).key},this)},n.prototype.values=function(){return i(this._lruList).map(function(e){return this._lruList.get(e).value},this)},n.prototype.reset=function(){this._dispose&&this._cache&&this._cache.forEach(function(e,a){this._dispose(a,e.value)},this),this._cache=new r,this._lruList=new r,this._mru=0,this._lru=0,this._length=0},n.prototype.dump=function(){this._lruList.size;return i(this._lruList).map(function(e){var a=this._lruList.get(e);if(!d(this,a))return{k:a.key,v:a.value,e:a.now+(a.maxAge||0)}},this).filter(function(e){return e})},n.prototype.dumpLru=function(){return this._lruList},n.prototype.set=function(e,a,t){var r=(t=t||this._maxAge)?Date.now():0,c=this._lengthCalculator(a,e);if(this._cache.has(e)){if(c>this._max)return u(this,this._cache.get(e)),!1;var n=this._cache.get(e);return this._dispose&&this._dispose(e,n.value),n.now=r,n.maxAge=t,n.value=a,this._length+=c-n.length,n.length=c,this.get(e),this._length>this._max&&s(this),!0}var i=new function(e,a,t,r,c,n){this.key=e,this.value=a,this.lu=t,this.length=r,this.now=c,n&&(this.maxAge=n)}(e,a,this._mru,c,r,t);return h(this),i.length>this._max?(this._dispose&&this._dispose(e,a),!1):(this._length+=i.length,this._cache.set(e,i),this._lruList.set(i.lu,i),this._length>this._max&&s(this),!0)},n.prototype.has=function(e){return!!this._cache.has(e)&&!d(this,this._cache.get(e))},n.prototype.get=function(e){return o(this,e,!0)},n.prototype.peek=function(e){return o(this,e,!1)},n.prototype.pop=function(){var e=this._lruList.get(this._lru);return u(this,e),e||null},n.prototype.del=function(e){u(this,this._cache.get(e))},n.prototype.load=function(e){this.reset();for(var a=Date.now(),t=e.length-1;t>=0;t--){var r=e[t],c=r.e||0;if(0===c)this.set(r.k,r.v);else{var n=c-a;n>0&&this.set(r.k,r.v,n)}}};var l=Number.MAX_SAFE_INTEGER||9007199254740991;function p(e){return e===l?0:e+1}function h(e){do{e._mru=p(e._mru)}while(e._lruList.has(e._mru))}},function(e,a,t){var r=t(194);e.exports=function(e){return!(!e||"object"!=typeof e)&&Object.keys(r.prototype).filter(function(e){return"_"!=e[0]&&"approximateSize"!=e}).every(function(a){return"function"==typeof e[a]})}},function(e,a,t){a.AbstractLevelDOWN=t(194),a.AbstractIterator=t(193),a.AbstractChainedBatch=t(192),a.isLevelDOWN=t(423)},function(e,a,t){var r,c=t(424).AbstractLevelDOWN,n=t(1).inherits,i=(t(5).EventEmitter,t(422));function f(e,a){var t=this;if(!(this instanceof f))return new f(e,a);"object"==typeof e&&(a=e,e=void 0),a=a||r,this._down=new a(e),this._cache=new i,["_open","_close","_iterator"].forEach(function(e){e in t._down&&(t[e]=t._down[e].bind(t._down))}),void 0===e?c.call(this):c.call(this,e)}n(f,c),f.prototype._put=function(e,a,t,r){return void 0!==a&&null!==a||(a=""),this._cachePut(e,a),this._down._put.apply(this._down,arguments)},f.prototype._get=function(e,a,t){var r=this;if(this._cacheHas(e)){var c=this._cacheGet(e);return!1===a.asBuffer||this._isBuffer(c)||(c=new Buffer(String(c))),process.nextTick(function(){t(null,c)})}return this._down._get(e,a,function(a,c){if(a)return t(a);r._cachePut(e,c),t(a,c)})},f.prototype._del=function(e,a,t){return this._cacheDel(e),this._down._del.apply(this._down,arguments)},f.prototype._batch=function(e,a,t){var r=this;return e.forEach(function(e){"del"===e.type?r._cacheDel(e.key):"put"===e.type&&r._cachePut(e.key,e.value)}),this._down._batch.apply(this._down,arguments)},f.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},f.prototype.clearCache=function(){return this._cache.reset(),this},f.prototype._cachePut=function(e,a){this._cache.set(e,a)},f.prototype._cacheGet=function(e){return this._cache.get(e)},f.prototype._cacheHas=function(e){return this._cache.has(e)},f.prototype._cacheDel=function(e,a){this._cache.del(e)},f.prototype.maxSize=function(e){return this._cache.max=e,this},f.setLeveldown=function(e){r=e},e.exports=f,e.exports.factory=function(){var e=Array.prototype.slice.call(arguments);return function(){return f.apply(null,e)}}},function(e,a,t){var r=t(197);e.exports=function(e){return!(!e||"object"!=typeof e)&&Object.keys(r.prototype).filter(function(e){return"_"!=e[0]&&"approximateSize"!=e}).every(function(a){return"function"==typeof e[a]})}},function(e,a,t){a.AbstractLevelDOWN=t(197),a.AbstractIterator=t(196),a.AbstractChainedBatch=t(195),a.isLevelDOWN=t(426)},function(e,a,t){var r=t(1),c=t(427).AbstractLevelDOWN,n=t(18),i=t(15),f=t(2);function o(e){this.location=e,c.call(this,e)}r.inherits(o,c),o.prototype._open=function(e,a){a(null,this)},o.prototype._put=function(e,a,t,r){i.writeFile(f.join(this.location,e),a,"utf8",r)},o.prototype._get=function(e,a,t){i.readFile(f.join(this.location,e),"utf8",function(e,a){if(e)return t(new Error("NotFound"));t(null,a)})},o.prototype._del=function(e,a,t){i.unlink(f.join(this.location,e),function(e){if(e)return e.message.indexOf("ENOENT")>=0?t():t(e);t()})},o.prototype._batch=function(e,a,t){var r=this;n.each(e,function(e,t){"put"==e.type?r.put(e.key,e.value,a,t):"del"==e.type?r.del(e.key,a,t):t(new Error("Unknown batch type",e.type))},function(e){if(e)return t(e);t()})},e.exports=function(e){return new o(e)}},function(e,a,t){var r=t(123),c=t(18);function n(e,a,t,c,n){this.db=r(a,n),this.db=this.db.sublevel(e),this.name=e,this.valueserializer=t||{encode:function(e,a){a(null,e)},decode:function(e,a){a(null,e)}},this.keyserializer=c||{encode:function(e,a){a(null,e)},decode:function(e,a){a(null,e)}}}n.prototype.get=function(e,a,t){var r=this;"function"==typeof a&&(t=a,a={}),this.keyserializer.encode(e,function(e,a){if(e)return t(e);r.db.get(a,function(e,a){if(e)return t(e);r.valueserializer.decode(a,function(e,a){if(e)return t(e);t(null,a)})})})},n.prototype.put=function(e,a,t,r){var c=this;"function"==typeof t&&(r=t,t={}),this.keyserializer.encode(e,function(e,t){if(e)return r(e);c.valueserializer.encode(a,function(e,a){if(e)return r(e);c.db.put(t,a,r)})})},n.prototype.set=n.prototype.put,n.prototype.del=function(e,a){var t=this;this.keyserializer.encode(e,function(e,r){if(e)return a(e);t.db.del(r,a)})},n.prototype.batch=function(e,a,t){var r=this;c.each(e,function(e,t){"put"==e.type?r.put(e.key,e.value,a,t):"del"==e.type?r.del(e.key,t):t(new Error("Unknown batch type",e.type))},function(e){if(e)return t(e);t()})},n.prototype.isOpen=function(){return!0},e.exports=n},function(e,a){var t;a=e.exports=W,t="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},a.SEMVER_SPEC_VERSION="2.0.0";var r=256,c=Number.MAX_SAFE_INTEGER||9007199254740991,n=a.re=[],i=a.src=[],f=0,o=f++;i[o]="0|[1-9]\\d*";var d=f++;i[d]="[0-9]+";var s=f++;i[s]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var b=f++;i[b]="("+i[o]+")\\.("+i[o]+")\\.("+i[o]+")";var u=f++;i[u]="("+i[d]+")\\.("+i[d]+")\\.("+i[d]+")";var l=f++;i[l]="(?:"+i[o]+"|"+i[s]+")";var p=f++;i[p]="(?:"+i[d]+"|"+i[s]+")";var h=f++;i[h]="(?:-("+i[l]+"(?:\\."+i[l]+")*))";var m=f++;i[m]="(?:-?("+i[p]+"(?:\\."+i[p]+")*))";var g=f++;i[g]="[0-9A-Za-z-]+";var v=f++;i[v]="(?:\\+("+i[g]+"(?:\\."+i[g]+")*))";var y=f++,_="v?"+i[b]+i[h]+"?"+i[v]+"?";i[y]="^"+_+"$";var w="[v=\\s]*"+i[u]+i[m]+"?"+i[v]+"?",A=f++;i[A]="^"+w+"$";var k=f++;i[k]="((?:<|>)?=?)";var x=f++;i[x]=i[d]+"|x|X|\\*";var E=f++;i[E]=i[o]+"|x|X|\\*";var S=f++;i[S]="[v=\\s]*("+i[E]+")(?:\\.("+i[E]+")(?:\\.("+i[E]+")(?:"+i[h]+")?"+i[v]+"?)?)?";var T=f++;i[T]="[v=\\s]*("+i[x]+")(?:\\.("+i[x]+")(?:\\.("+i[x]+")(?:"+i[m]+")?"+i[v]+"?)?)?";var j=f++;i[j]="^"+i[k]+"\\s*"+i[S]+"$";var C=f++;i[C]="^"+i[k]+"\\s*"+i[T]+"$";var R=f++;i[R]="(?:~>?)";var O=f++;i[O]="(\\s*)"+i[R]+"\\s+",n[O]=new RegExp(i[O],"g");var B=f++;i[B]="^"+i[R]+i[S]+"$";var M=f++;i[M]="^"+i[R]+i[T]+"$";var N=f++;i[N]="(?:\\^)";var I=f++;i[I]="(\\s*)"+i[N]+"\\s+",n[I]=new RegExp(i[I],"g");var P=f++;i[P]="^"+i[N]+i[S]+"$";var F=f++;i[F]="^"+i[N]+i[T]+"$";var L=f++;i[L]="^"+i[k]+"\\s*("+w+")$|^$";var D=f++;i[D]="^"+i[k]+"\\s*("+_+")$|^$";var z=f++;i[z]="(\\s*)"+i[k]+"\\s*("+w+"|"+i[S]+")",n[z]=new RegExp(i[z],"g");var q=f++;i[q]="^\\s*("+i[S]+")\\s+-\\s+("+i[S]+")\\s*$";var U=f++;i[U]="^\\s*("+i[T]+")\\s+-\\s+("+i[T]+")\\s*$";var H=f++;i[H]="(<|>)?=?\\s*\\*";for(var V=0;V<f;V++)t(V,i[V]),n[V]||(n[V]=new RegExp(i[V]));function G(e,a){if(e instanceof W)return e;if("string"!=typeof e)return null;if(e.length>r)return null;if(!(a?n[A]:n[y]).test(e))return null;try{return new W(e,a)}catch(e){return null}}function W(e,a){if(e instanceof W){if(e.loose===a)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>r)throw new TypeError("version is longer than "+r+" characters");if(!(this instanceof W))return new W(e,a);t("SemVer",e,a),this.loose=a;var i=e.trim().match(a?n[A]:n[y]);if(!i)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>c||this.major<0)throw new TypeError("Invalid major version");if(this.minor>c||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>c||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var a=+e;if(a>=0&&a<c)return a}return e}):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}a.parse=G,a.valid=function(e,a){var t=G(e,a);return t?t.version:null},a.clean=function(e,a){var t=G(e.trim().replace(/^[=v]+/,""),a);return t?t.version:null},a.SemVer=W,W.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},W.prototype.toString=function(){return this.version},W.prototype.compare=function(e){return t("SemVer.compare",this.version,this.loose,e),e instanceof W||(e=new W(e,this.loose)),this.compareMain(e)||this.comparePre(e)},W.prototype.compareMain=function(e){return e instanceof W||(e=new W(e,this.loose)),K(this.major,e.major)||K(this.minor,e.minor)||K(this.patch,e.patch)},W.prototype.comparePre=function(e){if(e instanceof W||(e=new W(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var a=0;do{var r=this.prerelease[a],c=e.prerelease[a];if(t("prerelease compare",a,r,c),void 0===r&&void 0===c)return 0;if(void 0===c)return 1;if(void 0===r)return-1;if(r!==c)return K(r,c)}while(++a)},W.prototype.inc=function(e,a){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",a);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",a);break;case"prepatch":this.prerelease.length=0,this.inc("patch",a),this.inc("pre",a);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",a),this.inc("pre",a);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var t=this.prerelease.length;--t>=0;)"number"==typeof this.prerelease[t]&&(this.prerelease[t]++,t=-2);-1===t&&this.prerelease.push(0)}a&&(this.prerelease[0]===a?isNaN(this.prerelease[1])&&(this.prerelease=[a,0]):this.prerelease=[a,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},a.inc=function(e,a,t,r){"string"==typeof t&&(r=t,t=void 0);try{return new W(e,t).inc(a,r).version}catch(e){return null}},a.diff=function(e,a){if($(e,a))return null;var t=G(e),r=G(a);if(t.prerelease.length||r.prerelease.length){for(var c in t)if(("major"===c||"minor"===c||"patch"===c)&&t[c]!==r[c])return"pre"+c;return"prerelease"}for(var c in t)if(("major"===c||"minor"===c||"patch"===c)&&t[c]!==r[c])return c},a.compareIdentifiers=K;var Y=/^[0-9]+$/;function K(e,a){var t=Y.test(e),r=Y.test(a);return t&&r&&(e=+e,a=+a),t&&!r?-1:r&&!t?1:e<a?-1:e>a?1:0}function Q(e,a,t){return new W(e,t).compare(a)}function Z(e,a,t){return Q(a,e,t)}function J(e,a,t){return Q(e,a,t)>0}function X(e,a,t){return Q(e,a,t)<0}function $(e,a,t){return 0===Q(e,a,t)}function ee(e,a,t){return 0!==Q(e,a,t)}function ae(e,a,t){return Q(e,a,t)>=0}function te(e,a,t){return Q(e,a,t)<=0}function re(e,a,t,r){var c;switch(a){case"===":"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),c=e===t;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),c=e!==t;break;case"":case"=":case"==":c=$(e,t,r);break;case"!=":c=ee(e,t,r);break;case">":c=J(e,t,r);break;case">=":c=ae(e,t,r);break;case"<":c=X(e,t,r);break;case"<=":c=te(e,t,r);break;default:throw new TypeError("Invalid operator: "+a)}return c}function ce(e,a){if(e instanceof ce){if(e.loose===a)return e;e=e.value}if(!(this instanceof ce))return new ce(e,a);t("comparator",e,a),this.loose=a,this.parse(e),this.semver===ne?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}a.rcompareIdentifiers=function(e,a){return K(a,e)},a.major=function(e,a){return new W(e,a).major},a.minor=function(e,a){return new W(e,a).minor},a.patch=function(e,a){return new W(e,a).patch},a.compare=Q,a.compareLoose=function(e,a){return Q(e,a,!0)},a.rcompare=Z,a.sort=function(e,t){return e.sort(function(e,r){return a.compare(e,r,t)})},a.rsort=function(e,t){return e.sort(function(e,r){return a.rcompare(e,r,t)})},a.gt=J,a.lt=X,a.eq=$,a.neq=ee,a.gte=ae,a.lte=te,a.cmp=re,a.Comparator=ce;var ne={};function ie(e,a){if(e instanceof ie&&e.loose===a)return e;if(!(this instanceof ie))return new ie(e,a);if(this.loose=a,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function fe(e){return!e||"x"===e.toLowerCase()||"*"===e}function oe(e,a,t,r,c,n,i,f,o,d,s,b,u){return((a=fe(t)?"":fe(r)?">="+t+".0.0":fe(c)?">="+t+"."+r+".0":">="+a)+" "+(f=fe(o)?"":fe(d)?"<"+(+o+1)+".0.0":fe(s)?"<"+o+"."+(+d+1)+".0":b?"<="+o+"."+d+"."+s+"-"+b:"<="+f)).trim()}function de(e,a){for(var r=0;r<e.length;r++)if(!e[r].test(a))return!1;if(a.prerelease.length){for(r=0;r<e.length;r++)if(t(e[r].semver),e[r].semver!==ne&&e[r].semver.prerelease.length>0){var c=e[r].semver;if(c.major===a.major&&c.minor===a.minor&&c.patch===a.patch)return!0}return!1}return!0}function se(e,a,t){try{a=new ie(a,t)}catch(e){return!1}return a.test(e)}function be(e,a,t,r){var c,n,i,f,o;switch(e=new W(e,r),a=new ie(a,r),t){case">":c=J,n=te,i=X,f=">",o=">=";break;case"<":c=X,n=ae,i=J,f="<",o="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(se(e,a,r))return!1;for(var d=0;d<a.set.length;++d){var s=null,b=null;if(a.set[d].forEach(function(e){e.semver===ne&&(e=new ce(">=0.0.0")),s=s||e,b=b||e,c(e.semver,s.semver,r)?s=e:i(e.semver,b.semver,r)&&(b=e)}),s.operator===f||s.operator===o)return!1;if((!b.operator||b.operator===f)&&n(e,b.semver))return!1;if(b.operator===o&&i(e,b.semver))return!1}return!0}ce.prototype.parse=function(e){var a=this.loose?n[L]:n[D],t=e.match(a);if(!t)throw new TypeError("Invalid comparator: "+e);this.operator=t[1],"="===this.operator&&(this.operator=""),t[2]?this.semver=new W(t[2],this.loose):this.semver=ne},ce.prototype.toString=function(){return this.value},ce.prototype.test=function(e){return t("Comparator.test",e,this.loose),this.semver===ne||("string"==typeof e&&(e=new W(e,this.loose)),re(e,this.operator,this.semver,this.loose))},a.Range=ie,ie.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},ie.prototype.toString=function(){return this.range},ie.prototype.parseRange=function(e){var a=this.loose;e=e.trim(),t("range",e,a);var r=a?n[U]:n[q];e=e.replace(r,oe),t("hyphen replace",e),e=e.replace(n[z],"$1$2$3"),t("comparator trim",e,n[z]),e=(e=(e=e.replace(n[O],"$1~")).replace(n[I],"$1^")).split(/\s+/).join(" ");var c=a?n[L]:n[D],i=e.split(" ").map(function(e){return function(e,a){return t("comp",e),e=function(e,a){return e.trim().split(/\s+/).map(function(e){return function(e,a){t("caret",e,a);var r=a?n[F]:n[P];return e.replace(r,function(a,r,c,n,i){var f;return t("caret",e,a,r,c,n,i),fe(r)?f="":fe(c)?f=">="+r+".0.0 <"+(+r+1)+".0.0":fe(n)?f="0"===r?">="+r+"."+c+".0 <"+r+"."+(+c+1)+".0":">="+r+"."+c+".0 <"+(+r+1)+".0.0":i?(t("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),f="0"===r?"0"===c?">="+r+"."+c+"."+n+i+" <"+r+"."+c+"."+(+n+1):">="+r+"."+c+"."+n+i+" <"+r+"."+(+c+1)+".0":">="+r+"."+c+"."+n+i+" <"+(+r+1)+".0.0"):(t("no pr"),f="0"===r?"0"===c?">="+r+"."+c+"."+n+" <"+r+"."+c+"."+(+n+1):">="+r+"."+c+"."+n+" <"+r+"."+(+c+1)+".0":">="+r+"."+c+"."+n+" <"+(+r+1)+".0.0"),t("caret return",f),f})}(e,a)}).join(" ")}(e,a),t("caret",e),e=function(e,a){return e.trim().split(/\s+/).map(function(e){return function(e,a){var r=a?n[M]:n[B];return e.replace(r,function(a,r,c,n,i){var f;return t("tilde",e,a,r,c,n,i),fe(r)?f="":fe(c)?f=">="+r+".0.0 <"+(+r+1)+".0.0":fe(n)?f=">="+r+"."+c+".0 <"+r+"."+(+c+1)+".0":i?(t("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),f=">="+r+"."+c+"."+n+i+" <"+r+"."+(+c+1)+".0"):f=">="+r+"."+c+"."+n+" <"+r+"."+(+c+1)+".0",t("tilde return",f),f})}(e,a)}).join(" ")}(e,a),t("tildes",e),e=function(e,a){return t("replaceXRanges",e,a),e.split(/\s+/).map(function(e){return function(e,a){e=e.trim();var r=a?n[C]:n[j];return e.replace(r,function(a,r,c,n,i,f){t("xRange",e,a,r,c,n,i,f);var o=fe(c),d=o||fe(n),s=d||fe(i),b=s;return"="===r&&b&&(r=""),o?a=">"===r||"<"===r?"<0.0.0":"*":r&&b?(d&&(n=0),s&&(i=0),">"===r?(r=">=",d?(c=+c+1,n=0,i=0):s&&(n=+n+1,i=0)):"<="===r&&(r="<",d?c=+c+1:n=+n+1),a=r+c+"."+n+"."+i):d?a=">="+c+".0.0 <"+(+c+1)+".0.0":s&&(a=">="+c+"."+n+".0 <"+c+"."+(+n+1)+".0"),t("xRange return",a),a})}(e,a)}).join(" ")}(e,a),t("xrange",e),e=function(e,a){return t("replaceStars",e,a),e.trim().replace(n[H],"")}(e,a),t("stars",e),e}(e,a)}).join(" ").split(/\s+/);return this.loose&&(i=i.filter(function(e){return!!e.match(c)})),i=i.map(function(e){return new ce(e,a)})},a.toComparators=function(e,a){return new ie(e,a).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})},ie.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new W(e,this.loose));for(var a=0;a<this.set.length;a++)if(de(this.set[a],e))return!0;return!1},a.satisfies=se,a.maxSatisfying=function(e,a,t){return e.filter(function(e){return se(e,a,t)}).sort(function(e,a){return Z(e,a,t)})[0]||null},a.validRange=function(e,a){try{return new ie(e,a).range||"*"}catch(e){return null}},a.ltr=function(e,a,t){return be(e,a,"<",t)},a.gtr=function(e,a,t){return be(e,a,">",t)},a.outside=be},function(e){e.exports={_args:[["levelup@0.19.1","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"levelup@0.19.1",_id:"levelup@0.19.1",_inBundle:!1,_integrity:"sha1-86anIFJyxLXzXkEv8ASgOgrt9Qs=",_location:"/ganache-core/level-sublevel/levelup",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"levelup@0.19.1",name:"levelup",escapedName:"levelup",rawSpec:"0.19.1",saveSpec:null,fetchSpec:"0.19.1"},_requiredBy:["/ganache-core/level-sublevel"],_resolved:"https://registry.npmjs.org/levelup/-/levelup-0.19.1.tgz",_spec:"0.19.1",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",browser:{leveldown:!1,"leveldown/package":!1,semver:!1},bugs:{url:"https://github.com/rvagg/node-levelup/issues"},contributors:[{name:"Rod Vagg",email:"r@va.gg",url:"https://github.com/rvagg"},{name:"John Chesley",email:"john@chesl.es",url:"https://github.com/chesles/"},{name:"Jake Verbaten",email:"raynos2@gmail.com",url:"https://github.com/raynos"},{name:"Dominic Tarr",email:"dominic.tarr@gmail.com",url:"https://github.com/dominictarr"},{name:"Max Ogden",email:"max@maxogden.com",url:"https://github.com/maxogden"},{name:"Lars-Magnus Skog",email:"lars.magnus.skog@gmail.com",url:"https://github.com/ralphtheninja"},{name:"David Björklund",email:"david.bjorklund@gmail.com",url:"https://github.com/kesla"},{name:"Julian Gruber",email:"julian@juliangruber.com",url:"https://github.com/juliangruber"},{name:"Paolo Fragomeni",email:"paolo@async.ly",url:"https://github.com/hij1nx"},{name:"Anton Whalley",email:"anton.whalley@nearform.com",url:"https://github.com/No9"},{name:"Matteo Collina",email:"matteo.collina@gmail.com",url:"https://github.com/mcollina"},{name:"Pedro Teixeira",email:"pedro.teixeira@gmail.com",url:"https://github.com/pgte"},{name:"James Halliday",email:"mail@substack.net",url:"https://github.com/substack"}],dependencies:{bl:"~0.8.1","deferred-leveldown":"~0.2.0",errno:"~0.1.1",prr:"~0.0.0","readable-stream":"~1.0.26",semver:"~5.1.0",xtend:"~3.0.0"},description:"Fast & simple storage - a Node.js-style LevelDB wrapper",devDependencies:{async:"*",boganipsum:"*",bustermove:"~1.0.1",delayed:"*",du:"*",fstream:"*",leveldown:"~0.10.0",memdown:"^0.11.0",mkfiletree:"*","msgpack-js":"*",readfiletree:"*",referee:"*",rimraf:"*","slow-stream":">=0.0.4",tap:"2.x.x",tape:"4.x.x",tar:"*"},homepage:"https://github.com/rvagg/node-levelup",keywords:["leveldb","stream","database","db","store","storage","json"],license:"MIT",main:"lib/levelup.js",name:"levelup",repository:{type:"git",url:"git+https://github.com/rvagg/node-levelup.git"},scripts:{alltests:"npm test && npm run-script functionaltests",functionaltests:"node ./test/functional/fstream-test.js && node ./test/functional/binary-data-test.js && node ./test/functional/compat-test.js",test:"tap test/*-test.js"},version:"0.19.1"}},function(e,a,t){var r,c=t(198),n=t(122).LevelUPError,i=t(202),f={createIfMissing:!0,errorIfExists:!1,keyEncoding:"utf8",valueEncoding:"utf8",compression:!0},o=function(){var e={};for(var a in i)e[a]={valueEncoding:i[a]};return e}();e.exports={defaultOptions:f,copy:function(e,a,t){e.readStream().pipe(a.writeStream()).on("close",t||function(){}).on("error",t||function(e){throw e})},getOptions:function(e,a){var t="string"==typeof a;return!t&&a&&a.encoding&&!a.valueEncoding&&(a.valueEncoding=a.encoding),c(e&&e.options||{},t?o[a]||o[f.valueEncoding]:a)},getLevelDOWN:function(){if(r)return r;var e,a=t(431).devDependencies.leveldown;try{e=t(!function(){var e=new Error("Cannot find module 'leveldown/package'");throw e.code="MODULE_NOT_FOUND",e}()).version}catch(e){throw new n("Could not locate LevelDOWN, try `npm install leveldown`")}if(!t(430).satisfies(e,a))throw new n("Installed version of LevelDOWN ("+e+") does not match required version ("+a+")");try{return r=t(!function(){var e=new Error("Cannot find module 'leveldown'");throw e.code="MODULE_NOT_FOUND",e}())}catch(e){throw new n("Could not locate LevelDOWN, try `npm install leveldown`")}},dispatchError:function(e,a,t){return"function"==typeof t?t(a):e.emit("error",a)},isDefined:function(e){return void 0!==e}}},function(e,a,t){e.exports=n;var r=t(199),c=t(17);function n(e){if(!(this instanceof n))return new n(e);r.call(this,e)}c.inherits=t(0),c.inherits(n,r),n.prototype._transform=function(e,a,t){t(null,e)}},function(e,a,t){var r=t(6);(a=e.exports=t(201)).Stream=r,a.Readable=a,a.Writable=t(200),a.Duplex=t(121),a.Transform=t(199),a.PassThrough=t(433),process.browser||"disable"!==process.env.READABLE_STREAM||(e.exports=t(6))},function(e,a,t){var r=t(434).Readable,c=t(1).inherits,n=(t(198),t(122).EncodingError);t(432);function i(e,a){if(!(this instanceof i))return new i(e,a);r.call(this,{objectMode:!0,highWaterMark:e.highWaterMark}),this._waiting=!1,this._options=e,this._makeData=a}c(i,r),i.prototype.setIterator=function(e){return this._iterator=e,this._destroyed?e.end(function(){}):this._waiting?(this._waiting=!1,this._read()):this},i.prototype._read=function(){var e=this;if(!e._destroyed)return e._iterator?void e._iterator.next(function(a,t,r){if(a||void 0===t&&void 0===r)return a||e._destroyed||e.push(null),e._cleanup(a);try{r=e._makeData(t,r)}catch(a){return e._cleanup(new n(a))}e._destroyed||e.push(r)}):this._waiting=!0},i.prototype._cleanup=function(e){if(!this._destroyed){this._destroyed=!0;var a=this;e&&a.emit("error",e),a._iterator?a._iterator.end(function(){a._iterator=null,a.emit("close")}):a.emit("close")}},i.prototype.destroy=function(){this._cleanup()},i.prototype.toString=function(){return"LevelUP.ReadStream"},e.exports=i},function(e,a,t){var r=t(202);function c(e,a){var t=a&&a.keyEncoding||e.keyEncoding||"utf8";return r[t]||t}function n(e,a){var t=a&&(a.valueEncoding||a.encoding)||e.valueEncoding||e.encoding||"utf8";return r[t]||t}e.exports={encodeKey:function(e,a,t){return c(a,t).encode(e)},encodeValue:function(e,a,t){return n(a,t).encode(e)},isValueAsBuffer:function(e,a){return n(e,a).buffer},isKeyAsBuffer:function(e,a){return c(e,a).buffer},decodeValue:function(e,a){return n(a).decode(e)},decodeKey:function(e,a){return c(a).decode(e)}}},function(e,a){a.encode=function(e){return"!"+e[0].join("#")+"!"+e[1]},a.decode=function(e){var a=e.indexOf("!",1);return[e.substring(1,a).split("#").filter(Boolean),e.substring(++a)]},a.buffer=!1,a.lowerBound="\0",a.upperBound=""},function(e){e.exports={_args:[["level-sublevel@6.6.2","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"level-sublevel@6.6.2",_id:"level-sublevel@6.6.2",_inBundle:!1,_integrity:"sha512-+hptqmFYPKFju9QG4F6scvx3ZXkhrSmmhYui+hPzRn/jiC3DJ6VNZRKsIhGMpeajVBWfRV7XiysUThrJ/7PgXQ==",_location:"/ganache-core/level-sublevel",_phantomChildren:{bl:"0.8.2","core-util-is":"1.0.2",errno:"0.1.7",inherits:"2.0.3",isarray:"0.0.1",string_decoder:"0.10.31"},_requested:{type:"version",registry:!0,raw:"level-sublevel@6.6.2",name:"level-sublevel",escapedName:"level-sublevel",rawSpec:"6.6.2",saveSpec:null,fetchSpec:"6.6.2"},_requiredBy:["/ganache-core"],_resolved:"https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.2.tgz",_spec:"6.6.2",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",author:{name:"Dominic Tarr",email:"dominic.tarr@gmail.com",url:"http://dominictarr.com"},bugs:{url:"https://github.com/dominictarr/level-sublevel/issues"},dependencies:{bytewise:"~1.1.0",levelup:"~0.19.0",ltgt:"~2.1.1","pull-defer":"^0.2.2","pull-level":"^2.0.3","pull-stream":"^3.6.8",typewiselite:"~1.0.0",xtend:"~4.0.0"},description:"partition levelup databases",devDependencies:{level:"^3.0.1","level-test":"^3.0.0","monotonic-timestamp":"0.0.8","pull-level":"~1.1.1",rimraf:"~2.1.4",shasum:"0.0.2","stream-to-pull-stream":"~1.2.0",tape:"~2.14.0",through:"~2.3.4"},homepage:"https://github.com/dominictarr/level-sublevel",license:"MIT",name:"level-sublevel",repository:{type:"git",url:"git://github.com/dominictarr/level-sublevel.git"},scripts:{test:"set -e; for t in test/*.js; do node $t; done"},stability:"unstable",testling:{files:"test/*.js",browsers:["ie/8..latest","firefox/17..latest","firefox/nightly","chrome/22..latest","chrome/canary","opera/12..latest","opera/next","safari/5.1..latest","ipad/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]},version:"6.6.2"}},function(e,a,t){var r=t(5).EventEmitter,c=t(204).addPrefix,n=t(122);function i(e){return"function"==typeof e}function f(e){return"string"==typeof e}function o(e){return e&&"object"==typeof e}var d=t(438).version,s=e.exports=function(e,a,t,b){var u=new r;function l(e){e&&u.emit("error",e)}function p(e){var a={};if(b)for(var t in b)void 0!=b[t]&&(a[t]=b[t]);if(e)for(var t in e)void 0!=e[t]&&(a[t]=e[t]);return a}return u.sublevels={},u.options=b,u.version=d,u.methods={},a=a||[],t=t||function(e){return e},u.put=function(t,r,c,n){"function"==typeof c&&(n=c,c={}),n||(n=l),e.apply([{key:t,value:r,prefix:a.slice(),type:"put"}],p(c),function(e){if(e||(u.emit("put",t,r),n(null)),e)return n(e)})},u.prefix=function(){return a.slice()},u.del=function(t,r,c){"function"==typeof r&&(c=r,r={}),c||(c=l),e.apply([{key:t,prefix:a.slice(),type:"del"}],p(r),function(e){if(e||(u.emit("del",t),c(null)),e)return c(e)})},u.batch=function(t,r,c){"function"==typeof r&&(c=r,r={}),c||(c=l),t=t.map(function(e){return{key:e.key,value:e.value,prefix:e.prefix||a,keyEncoding:e.keyEncoding,valueEncoding:e.valueEncoding,type:e.type}}),e.apply(t,p(r),function(e){if(e||(u.emit("batch",t),c(null)),e)return c(e)})},u.get=function(t,r,c){"function"==typeof r&&(c=r,r={}),e.get(t,a,p(r),function(e,a){e?c(new n.NotFoundError("Key not found in database",e)):c(null,a)})},u.clone=function(r){return s(e,a,t,p(r))},u.sublevel=function(r,c){return u.sublevels[r]=u.sublevels[r]||s(e,a.concat(r),t,p(c))},u.pre=function(t,r){if(i(t))return e.pre([a],t);if(f(t))return e.pre([a,t],r);if(o(t))return e.pre(c(a,t),r);throw new Error("not implemented yet")},u.post=function(t,r){if(i(t))return e.post([a],t);if(f(t))return e.post([a,t],r);if(o(t))return e.post(c(a,t),r);throw new Error("not implemented yet")},u.readStream=u.createReadStream=function(r){var c;(r=p(r)).prefix=a;var n=e.iterator(r,function(e,a){c.setIterator(a)});return c=t(r,e.createDecoder(r)),n&&c.setIterator(n),c},u.valueStream=u.createValueStream=function(e){return(e=e||{}).values=!0,e.keys=!1,u.createReadStream(e)},u.keyStream=u.createKeyStream=function(e){return(e=e||{}).values=!1,e.keys=!0,u.createReadStream(e)},u.close=function(t){t=t||function(){},a.length?process.nextTick(t):e.close(t)},u.isOpen=e.isOpen,u.isClosed=e.isClosed,u.location=e.location,u}},function(e,a,t){var r=t(204);e.exports=function(e){var a=[];return{add:function(e,t){var r={range:e,hook:t};return a.push(r),function(){var e=a.indexOf(r);if(~e)return a.splice(e,1)}},removeAll:function(e){throw new Error("not implemented")},trigger:function(t,c){for(var n=0;n<a.length;n++){var i=a[n];r(i.range,t,e)&&i.hook.apply(this,c)}}}}},function(e,a,t){var r=t(440),c=t(203);function n(e){return"function"==typeof e}function i(e){return null==e?e:n(e.prefix)?e.prefix():e}e.exports=function(e,a,t,f){var o=r(f),d=r(f),s=[],b=!1;function u(e,r,c,n){return a.encode([e,t.encodeKey(r,c,n)])}function l(e,a){return a&&a.options&&(e.keyEncoding=e.keyEncoding||a.options.keyEncoding,e.valueEncoding=e.valueEncoding||a.options.valueEncoding),e}function p(){for(b=!0;s.length;)s.shift()()}return n(e.isOpen)&&e.isOpen()?b=!0:e.open(p),{location:e.location,apply:function(a,r,c){for(var n=0;n<a.length;n++){var f=a[n];function s(e){if(!1===e)return delete a[n];a.push(e)}l(f,f.prefix),f.prefix=i(f.prefix),o.trigger([f.prefix,f.key],[f,s,a])}if("object"!=typeof(r=r||{}))throw new Error("opts must be object, was:"+r);"function"==typeof r&&(c=r,r={}),a.length?(e.db||e).batch(a.map(function(e){return{key:u(e.prefix,e.key,r,e),value:"del"!==e.type?t.encodeValue(e.value,r,e):void 0,type:e.type||(void 0===e.value?"del":"put")}}),r,function(e){if(e)return c(e);a.forEach(function(e){d.trigger([e.prefix,e.key],[e])}),c()}):c()},get:function(a,r,c,n){return c.asBuffer=t.isValueAsBuffer(c),(e.db||e).get(u(r,a,c),c,function(e,a){e?n(e):n(null,t.decodeValue(a,c))})},pre:o.add,post:d.add,createDecoder:function(e){return!1!==e.keys&&!1!==e.values?function(r,c){return{key:t.decodeKey(a.decode(r)[1],e),value:t.decodeValue(c,e)}}:!1!==e.values?function(a,r){return t.decodeValue(r,e)}:!1!==e.keys?function(r){return t.decodeKey(a.decode(r)[1],e)}:function(){}},isOpen:function(){return e.db&&n(e.db.isOpen)?e.db.isOpen():e.isOpen()},isClosed:function(){return e.db&&n(e.db.isClosed)?e.db.isClosed():e.isClosed()},close:function(a){return e.close(a)},iterator:function(r,n){var i=function(e){var a={};for(var t in e)a[t]=e[t];return a}(r||{}),f=r.prefix||[];function o(e){return{next:function(a){return e.next(a)},end:function(a){e.end(a)}}}if(c.toLtgt(r,i,function(e){return u(f,e,i,{})},a.lowerBound,a.upperBound),i.prefix=null,i.keyAsBuffer=i.valueAsBuffer=!1,"number"!=typeof i.limit&&(i.limit=-1),i.keyAsBuffer=a.buffer,i.valueAsBuffer=t.isValueAsBuffer(i),b)return o((e.db||e).iterator(i));s.push(function(){n(null,o((e.db||e).iterator(i)))})}}}},function(e,a,t){var r=t(123);function c(e,a,t){this.db=r(a),this.db=this.db.sublevel(e),this.name=e,this.serializer=t||{encode:function(e,a){a(null,e)},decode:function(e,a){a(null,e)}}}c.prototype.length=function(e){this.db.get("length",function(a,t){if(a)return a.notFound?e(null,0):e(a);e(null,t)})},c.prototype._get=function(e,a){var t=this;this.db.get(e,function(e,r){if(e)return a(e);t.serializer.decode(r,a)})},c.prototype._put=function(e,a,t){var r=this;this.serializer.encode(a,function(a,c){if(a)return t(a);r.db.put(e,c,t)})},c.prototype.get=function(e,a){var t=this;this.length(function(r,c){return r?a(r):e>=c?a(new Error("LevelUpArrayAdapter named '"+t.name+"' index out of range: index "+e+"; length: "+c)):void t._get(e,a)})},c.prototype.push=function(e,a){var t=this;this.length(function(r,c){if(r)return a(r);t._put(c+"",e,function(e){if(e)return a(e);t.db.put("length",c+1,a)})})},c.prototype.pop=function(e){var a=this;this.length(function(t,r){if(t)return e(t);var c=r-1;a._get(c+"",function(t,r){if(t)return e(t);a.db.del(c+"",function(t){if(t)return e(t);a.db.put("length",c,function(a){if(a)return e(a);e(null,r)})})})})},c.prototype.last=function(e){var a=this;this.length(function(t,r){return t?e(t):0==r?e(null,null):void a._get(r-1+"",e)})},c.prototype.first=function(e){this._get("0",e)},e.exports=c},function(e,a,t){var r=t(442),c=t(429),n=t(179),i=t(428),f=t(425),o=(t(123),t(87),t(191)),d=t(190),s=t(419),b=t(418),u=t(417),l=(t(19),t(3),t(117),t(416));function p(e){this.options=e}p.prototype.initialize=function(e){var a=this;function t(t,n){if(t)return e(t);a.db=n,a.blocks=new r("blocks",a.db,d),a.blockLogs=new r("blockLogs",a.db,new b(a)),a.blockHashes=new c("blockHashes",a.db),a.transactions=new c("transactions",a.db,o),a.transactionReceipts=new c("transactionReceipts",a.db,new u(a)),a.trie_db=new c("trie_db",a.db,s,s),e()}!function(e){a.options.db_path?e(null,a.options.db_path):l.dir(e)}(function(r,c){if(r)return e(r);n(c,{valueEncoding:"json",db:function(e){return a.options.db?a.options.db:f(e,i).maxSize(100)}},t)})},p.prototype.close=function(e){e()},e.exports=p},function(e,a,t){var r,c,n;(function(){var t,i,f,o,d,s,b,u,l,p,h,m,g,v,y;f=Math.floor,p=Math.min,i=function(e,a){return e<a?-1:e>a?1:0},l=function(e,a,t,r,c){var n;if(null==t&&(t=0),null==c&&(c=i),t<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);t<r;)c(a,e[n=f((t+r)/2)])<0?r=n:t=n+1;return[].splice.apply(e,[t,t-t].concat(a)),a},s=function(e,a,t){return null==t&&(t=i),e.push(a),v(e,0,e.length-1,t)},d=function(e,a){var t,r;return null==a&&(a=i),t=e.pop(),e.length?(r=e[0],e[0]=t,y(e,0,a)):r=t,r},u=function(e,a,t){var r;return null==t&&(t=i),r=e[0],e[0]=a,y(e,0,t),r},b=function(e,a,t){var r;return null==t&&(t=i),e.length&&t(e[0],a)<0&&(a=(r=[e[0],a])[0],e[0]=r[1],y(e,0,t)),a},o=function(e,a){var t,r,c,n,o,d;for(null==a&&(a=i),o=[],r=0,c=(n=function(){d=[];for(var a=0,t=f(e.length/2);0<=t?a<t:a>t;0<=t?a++:a--)d.push(a);return d}.apply(this).reverse()).length;r<c;r++)t=n[r],o.push(y(e,t,a));return o},g=function(e,a,t){var r;if(null==t&&(t=i),-1!==(r=e.indexOf(a)))return v(e,0,r,t),y(e,r,t)},h=function(e,a,t){var r,c,n,f,d;if(null==t&&(t=i),!(c=e.slice(0,a)).length)return c;for(o(c,t),n=0,f=(d=e.slice(a)).length;n<f;n++)r=d[n],b(c,r,t);return c.sort(t).reverse()},m=function(e,a,t){var r,c,n,f,s,b,u,h,m;if(null==t&&(t=i),10*a<=e.length){if(!(n=e.slice(0,a).sort(t)).length)return n;for(c=n[n.length-1],f=0,b=(u=e.slice(a)).length;f<b;f++)t(r=u[f],c)<0&&(l(n,r,0,null,t),n.pop(),c=n[n.length-1]);return n}for(o(e,t),m=[],s=0,h=p(a,e.length);0<=h?s<h:s>h;0<=h?++s:--s)m.push(d(e,t));return m},v=function(e,a,t,r){var c,n,f;for(null==r&&(r=i),c=e[t];t>a&&r(c,n=e[f=t-1>>1])<0;)e[t]=n,t=f;return e[t]=c},y=function(e,a,t){var r,c,n,f,o;for(null==t&&(t=i),c=e.length,o=a,n=e[a],r=2*a+1;r<c;)(f=r+1)<c&&!(t(e[r],e[f])<0)&&(r=f),e[a]=e[r],r=2*(a=r)+1;return e[a]=n,v(e,o,a,t)},t=function(){function e(e){this.cmp=null!=e?e:i,this.nodes=[]}return e.push=s,e.pop=d,e.replace=u,e.pushpop=b,e.heapify=o,e.updateItem=g,e.nlargest=h,e.nsmallest=m,e.prototype.push=function(e){return s(this.nodes,e,this.cmp)},e.prototype.pop=function(){return d(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return u(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return b(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return o(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return g(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var a;return(a=new e).nodes=this.nodes.slice(0),a},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),c=[],void 0===(n="function"==typeof(r=function(){return t})?r.apply(a,c):r)||(e.exports=n)}).call(this)},function(e,a,t){e.exports=t(444)},function(e,a){e.exports=function(e){var a=e.fsp,t=e.files,r=e.os,c=e.path,n=e.child_process,i=e.mimetype,f=e.defaultArchives,o=e.request,d=e.downloadUrl,s=e.bytes,b=e.hash,u=e.pick,l=function(e){return function(a){for(var t={},r=0,c=e.length;r<c;++r)t[e[r]]=a[r];return t}},p=function(e){return function(a){return e+"/bzzr:/"+a}},h=function(e){return function(a){return o(p(e)(a),{responseType:"arraybuffer"}).then(function(e){var a=new Uint8Array(e);if(function(e){return function(a){if(e.length!==a.length)return!1;var t=0;for(e.length;t<e;++t)if(e[t]!==a[t])return!1;return!0}}(a)([52,48,52,32,112,97,103,101,32,110,111,116,32,102,111,117,110,100,10]))throw"Error 404.";return a})}},m=function(e){return function(a){return function a(t){return function(r){return function(c){var n=function(e){return void 0===e.path?Promise.resolve():"application/bzz-manifest+json"===e.contentType?a(e.hash)(r+e.path)(c):Promise.resolve(function(e){return function(a){return function(t){return t[e]=a,t}}}(r+e.path)(function(e){return{type:e.contentType,hash:e.hash}}(e))(c))};return h(e)(t).then(function(e){return JSON.parse(P(e)).entries}).then(function(e){return Promise.all(e.map(n))}).then(function(){return c})}}}(a)("")({})}},g=function(e){return function(a){return m(e)(a).then(function(e){return l(Object.keys(e))(Object.keys(e).map(function(a){return e[a].hash}))})}},v=function(e){return function(a){return m(e)(a).then(function(a){var t=Object.keys(a),r=t.map(function(e){return a[e].hash}),c=t.map(function(e){return a[e].type}),n=r.map(h(e));return Promise.all(n).then(function(e){return l(t)(function(e){return e.map(function(e,a){return{type:c[a],data:e}})}(e))})})}},y=function(e){return function(a){return function(r){return t.download(p(e)(a))(r)}}},_=function(e){return function(a){return function(t){return g(e)(a).then(function(a){var r=[];for(var n in a)if(n.length>0){var i=c.join(t,n);r.push(y(e)(a[n])(i))}return Promise.all(r).then(function(){return t})})}}},w=function(e){return function(a){return o(e+"/bzzr:/",{body:"string"==typeof a?F(a):a,method:"POST"})}},A=function(e){return function(a){return function(t){return function(r){return function c(n){var i="/"===t[0]?t:"/"+t,f=e+"/bzz:/"+a+i,d={method:"PUT",headers:{"Content-Type":r.type},body:r.data};return o(f,d).then(function(e){if(-1!==e.indexOf("error"))throw e;return e}).catch(function(e){return n>0&&c(n-1)})}(3)}}}},k=function(e){return function(a){return E(e)({"":a})}},x=function(e){return function(t){return a.readFile(t).then(function(a){return k(e)({type:i.lookup(t),data:a})})}},E=function(e){return function(a){return w(e)("{}").then(function(t){return Object.keys(a).reduce(function(t,r){return t.then(function(t){return function(r){return A(e)(r)(t)(a[t])}}(r))},Promise.resolve(t))})}},S=function(e){return function(t){return a.readFile(t).then(w(e))}},T=function(e){return function(r){return function(c){return t.directoryTree(c).then(function(e){return Promise.all(e.map(function(e){return a.readFile(e)})).then(function(a){var t=e.map(function(e){return e.slice(c.length)}),r=e.map(function(e){return i.lookup(e)||"text/plain"});return l(t)(a.map(function(e,a){return{type:r[a],data:e}}))})}).then(function(e){return function(e){return function(a){var t={};for(var r in e)t[r]=e[r];for(var c in a)t[c]=a[c];return t}}(r?{"":e[r]}:{})(e)}).then(E(e))}}},j=function(e){return function(a){if("data"===a.pick)return u.data().then(w(e));if("file"===a.pick)return u.file().then(k(e));if("directory"===a.pick)return u.directory().then(E(e));if(a.path)switch(a.kind){case"data":return S(e)(a.path);case"file":return x(e)(a.path);case"directory":return T(e)(a.defaultFile)(a.path)}else{if(a.length||"string"==typeof a)return w(e)(a);if(a instanceof Object)return E(e)(a)}return Promise.reject(new Error("Bad arguments"))}},C=function(e){return function(a){return function(t){return N(e)(a).then(function(r){return r?t?_(e)(a)(t):v(e)(a):t?y(e)(a)(t):h(e)(a)})}}},R=function(e,a){var c=r.platform().replace("win32","windows")+"-"+("x64"===r.arch()?"amd64":"386"),n=(a||f)[c],i=d+n.archive+".tar.gz",o=n.archiveMD5,s=n.binaryMD5;return t.safeDownloadArchived(i)(o)(s)(e)},O=function(e){return new Promise(function(a,t){var r=n.spawn,c=function(e){return function(a){return-1!==(""+a).indexOf(e)}},i=e.account,f=e.password,o=e.dataDir,d=e.ensApi,s=e.privateKey,b=0,u=r(e.binPath,["--bzzaccount",i||s,"--datadir",o,"--ens-api",d]),l=function(e){0===b&&c("Passphrase")(e)?setTimeout(function(){b=1,u.stdin.write(f+"\n")},500):c("Swarm http proxy started")(e)&&(b=2,clearTimeout(p),a(u))};u.stdout.on("data",l),u.stderr.on("data",l);var p=setTimeout(function(){return t(new Error("Couldn't start swarm process."))},2e4)})},B=function(e){return new Promise(function(a,t){e.stderr.removeAllListeners("data"),e.stdout.removeAllListeners("data"),e.stdin.removeAllListeners("error"),e.removeAllListeners("error"),e.removeAllListeners("exit"),e.kill("SIGINT");var r=setTimeout(function(){return e.kill("SIGKILL")},8e3);e.once("close",function(){clearTimeout(r),a()})})},M=function(e){return w(e)("test").then(function(e){return"c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7"===e}).catch(function(){return!1})},N=function(e){return function(a){return h(e)(a).then(function(e){try{return!!JSON.parse(P(e)).entries}catch(e){return!1}})}},I=function(e){return function(a,t,r,c,n){var i;return void 0!==a&&(i=e(a)),void 0!==t&&(i=e(t)),void 0!==r&&(i=e(r)),void 0!==c&&(i=e(c)),void 0!==n&&(i=e(n)),i}},P=function(e){return s.toString(s.fromUint8Array(e))},F=function(e){return s.toUint8Array(s.fromString(e))},L=function(e){return{download:function(a,t){return C(e)(a)(t)},downloadData:I(h(e)),downloadDataToDisk:I(y(e)),downloadDirectory:I(v(e)),downloadDirectoryToDisk:I(_(e)),downloadEntries:I(m(e)),downloadRoutes:I(g(e)),isAvailable:function(){return M(e)},upload:function(a){return j(e)(a)},uploadData:I(w(e)),uploadFile:I(k(e)),uploadFileFromDisk:I(k(e)),uploadDataFromDisk:I(S(e)),uploadDirectory:I(E(e)),uploadDirectoryFromDisk:I(T(e)),uploadToManifest:I(A(e)),pick:u,hash:b,fromString:F,toString:P}};return{at:L,local:function(e){return function(a){return M("http://localhost:8500").then(function(t){return t?a(L("http://localhost:8500")).then(function(){}):R(e.binPath,e.archives).onData(function(a){return(e.onProgress||function(){})(a.length)}).then(function(){return O(e)}).then(function(e){return a(L("http://localhost:8500")).then(function(){return e})}).then(B)})}},download:C,downloadBinary:R,downloadData:h,downloadDataToDisk:y,downloadDirectory:v,downloadDirectoryToDisk:_,downloadEntries:m,downloadRoutes:g,isAvailable:M,startProcess:O,stopProcess:B,upload:j,uploadData:w,uploadDataFromDisk:S,uploadFile:k,uploadFileFromDisk:x,uploadDirectory:E,uploadDirectoryFromDisk:T,uploadToManifest:A,pick:u,hash:b,fromString:F,toString:P}}},function(e,a){var t=function(e){return function(){return new Promise(function(a,t){var r=function(t){var r={},c=t.target.files.length,n=0;[].map.call(t.target.files,function(t){var i=new FileReader;i.onload=function(i){var f=new Uint8Array(i.target.result);if("directory"===e){var o=t.webkitRelativePath;r[o.slice(o.indexOf("/")+1)]={type:"text/plain",data:f},++n===c&&a(r)}else if("file"===e){var d=t.webkitRelativePath;a({type:mimetype.lookup(d),data:f})}else a(f)},i.readAsArrayBuffer(t)})},c=void 0;"directory"===e?((c=document.createElement("input")).addEventListener("change",r),c.type="file",c.webkitdirectory=!0,c.mozdirectory=!0,c.msdirectory=!0,c.odirectory=!0,c.directory=!0):((c=document.createElement("input")).addEventListener("change",r),c.type="file");var n=document.createEvent("MouseEvents");n.initEvent("click",!0,!1),c.dispatchEvent(n)})}};e.exports={data:t("data"),file:t("file"),directory:t("directory")}},function(e,a,t){var r=t(319).keccak256,c=t(205),n=function(e,a){var t=c.reverse(c.pad(6,c.fromNumber(e))),n=c.flatten([t,"0x0000",a]);return r(n).slice(2)};e.exports=function e(a){"string"==typeof a&&"0x"!==a.slice(0,2)?a=c.fromString(a):"string"!=typeof a&&void 0!==a.length&&(a=c.fromUint8Array(a));var t=c.length(a);if(t<=4096)return n(t,a);for(var r=4096;128*r<t;)r*=128;for(var i=[],f=0;f<t;f+=r){var o=r<t-f?r:t-f;i.push(e(c.slice(a,f,f+o)))}return n(t,c.flatten(i))}},function(e,a){var t=function(e,a){for(var t=[],r=0;r<e;++r)t.push(a(r));return t};e.exports={generate:t,replicate:function(e,a){return t(e,function(){return a})},concat:function(e,a){return e.concat(a)},flatten:function(e){for(var a=[],t=0,r=e.length;t<r;++t)for(var c=0,n=e[t].length;c<n;++c)a.push(e[t][c]);return a},chunksOf:function(e,a){for(var t=[],r=0,c=a.length;r<c;r+=e)t.push(a.slice(r,r+e));return t}}},function(e,a){e.exports=function(e,a){return a?{statusCode:a.statusCode,headers:a.headers,method:e.method,url:e.url,rawRequest:a.rawRequest?a.rawRequest:a}:null}},function(e,a,t){!function(t){var r=new Buffer(0).buffer instanceof ArrayBuffer?function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}:function(e){for(var a=new ArrayBuffer(e.length),t=new Uint8Array(a),r=0;r<e.length;++r)t[r]=e[r];return a};void 0!==e&&e.exports&&(a=e.exports=r),a.bufferToArrayBuffer=r}()},function(e,a){e.exports=function(e,a){var t=[];e.on("data",function(e){t.push(e)}),e.once("end",function(){a&&a(null,Buffer.concat(t)),a=null}),e.once("error",function(e){a&&a(e),a=null})}},function(e,a,t){e.exports=s;var r=t(452),c=t(43),n=t(59),i=t(156),f=t(282),o=t(280),d=t(32);function s(e,a){if(e="string"==typeof e?{url:e}:Object.assign({},e),a=i(a),e.headers=Object.assign({},e.headers),Object.keys(e.headers).forEach(function(a){a.toLowerCase()!==a&&(e.headers[a.toLowerCase()]=e.headers[a],delete e.headers[a])}),e.url){var t=d.parse(e.url);t.hostname&&(e.hostname=t.hostname),t.port&&(e.port=t.port),t.protocol&&(e.protocol=t.protocol),t.auth&&(e.auth=t.auth),e.path=t.path,delete e.url}var r;null==e.maxRedirects&&(e.maxRedirects=10),e.method&&(e.method=e.method.toUpperCase()),e.body?r=e.json&&!b(e.body)?JSON.stringify(e.body):e.body:e.form&&(r="string"==typeof e.form?e.form:f.stringify(e.form),e.headers["content-type"]="application/x-www-form-urlencoded"),delete e.body,delete e.form,r&&(e.method||(e.method="POST"),b(r)||(e.headers["content-length"]=Buffer.byteLength(r)),e.json&&(e.headers["content-type"]="application/json")),e.json&&(e.headers.accept="application/json"),e.headers["accept-encoding"]||(e.headers["accept-encoding"]="gzip, deflate");var u=("https:"===e.protocol?n:c).request(e,function(t){if(t.statusCode>=300&&t.statusCode<400&&"location"in t.headers)return e.url=t.headers.location,delete e.headers.host,t.resume(),301!==t.statusCode&&302!==t.statusCode||"POST"!==e.method||(e.method="GET",delete e.headers["content-length"],delete e.headers["content-type"]),0===e.maxRedirects?a(new Error("too many redirects")):(e.maxRedirects-=1,s(e,a));var r="function"==typeof o&&"HEAD"!==e.method;a(null,r?o(t):t)});return u.on("timeout",function(){u.abort(),a(new Error("Request timed out"))}),u.on("error",a),r&&b(r)?r.on("error",a).pipe(u):u.end(r),u}function b(e){return"function"==typeof e.pipe}s.concat=function(e,a){return s(e,function(t,c){if(t)return a(t);r(c,function(t,r){if(t)return a(t);if(e.json)try{r=JSON.parse(r.toString())}catch(t){return a(t,c,r)}a(null,c,r)})})},["get","post","put","patch","head","delete"].forEach(function(e){s[e]=function(a,t){return"string"==typeof a&&(a={url:a}),a.method=e.toUpperCase(),s(a,t)}})},function(e,a,t){var r=t(453),c=t(451),n=t(450),i=t(281),f=t(206),o=["text","arraybuffer","json"];e.exports=function(e,a){var t=e.responseType;if(t&&-1===o.indexOf(t))throw new TypeError("invalid responseType for node: "+t);f(e.headers,"User-Agent","https://github.com/Jam3/xhr-request");var d=r.concat(e,function(r,i,f){if(!r)if("arraybuffer"===t)f=c(f);else if("json"===t)try{f=JSON.parse(f.toString())}catch(e){r=e}else f=f.toString();i=n(e,i),r?a(r,null,i):a(null,f,i)});"number"==typeof e.timeout&&0!==e.timeout&&i(d,e.timeout);return d}},function(e,a){e.exports=function(e,a){if(a){a=(a=a.trim().replace(/^(\?|#|&)/,""))?"?"+a:a;var t=e.split(/[\?\#]/),r=t[0];a&&/\:\/\/[^\/]*$/.test(r)&&(r+="/");var c=e.match(/(\#.*)$/);e=r+a,c&&(e+=c[0])}return e}},function(e,a,t){"use strict";var r=new RegExp("%[a-f0-9]{2}","gi"),c=new RegExp("(%[a-f0-9]{2})+","gi");function n(e,a){try{return decodeURIComponent(e.join(""))}catch(e){}if(1===e.length)return e;a=a||1;var t=e.slice(0,a),r=e.slice(a);return Array.prototype.concat.call([],n(t),n(r))}function i(e){try{return decodeURIComponent(e)}catch(c){for(var a=e.match(r),t=1;t<a.length;t++)a=(e=n(a,t).join("")).match(r);return e}}e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof e+"`");try{return e=e.replace(/\+/g," "),decodeURIComponent(e)}catch(a){return function(e){for(var a={"%FE%FF":"��","%FF%FE":"��"},t=c.exec(e);t;){try{a[t[0]]=decodeURIComponent(t[0])}catch(e){var r=i(t[0]);r!==t[0]&&(a[t[0]]=r)}t=c.exec(e)}a["%C2"]="�";for(var n=Object.keys(a),f=0;f<n.length;f++){var o=n[f];e=e.replace(new RegExp(o,"g"),a[o])}return e}(e)}}},function(e,a,t){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}},function(e,a,t){"use strict";var r=t(457),c=t(207),n=t(456);function i(e,a){return a.encode?a.strict?r(e):encodeURIComponent(e):e}function f(e){var a=e.indexOf("?");return-1===a?"":e.slice(a+1)}function o(e,a){var t=function(e){var a;switch(e.arrayFormat){case"index":return function(e,t,r){a=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),a?(void 0===r[e]&&(r[e]={}),r[e][a[1]]=t):r[e]=t};case"bracket":return function(e,t,r){a=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),a?void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=[t]:r[e]=t};default:return function(e,a,t){void 0!==t[e]?t[e]=[].concat(t[e],a):t[e]=a}}}(a=c({arrayFormat:"none"},a)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^[?#&]/,""))?(e.split("&").forEach(function(e){var a=e.replace(/\+/g," ").split("="),c=a.shift(),i=a.length>0?a.join("="):void 0;i=void 0===i?null:n(i),t(n(c),i,r)}),Object.keys(r).sort().reduce(function(e,a){var t=r[a];return Boolean(t)&&"object"==typeof t&&!Array.isArray(t)?e[a]=function e(a){return Array.isArray(a)?a.sort():"object"==typeof a?e(Object.keys(a)).sort(function(e,a){return Number(e)-Number(a)}).map(function(e){return a[e]}):a}(t):e[a]=t,e},Object.create(null))):r}a.extract=f,a.parse=o,a.stringify=function(e,a){!1===(a=c({encode:!0,strict:!0,arrayFormat:"none"},a)).sort&&(a.sort=function(){});var t=function(e){switch(e.arrayFormat){case"index":return function(a,t,r){return null===t?[i(a,e),"[",r,"]"].join(""):[i(a,e),"[",i(r,e),"]=",i(t,e)].join("")};case"bracket":return function(a,t){return null===t?i(a,e):[i(a,e),"[]=",i(t,e)].join("")};default:return function(a,t){return null===t?i(a,e):[i(a,e),"=",i(t,e)].join("")}}}(a);return e?Object.keys(e).sort(a.sort).map(function(r){var c=e[r];if(void 0===c)return"";if(null===c)return i(r,a);if(Array.isArray(c)){var n=[];return c.slice().forEach(function(e){void 0!==e&&n.push(t(r,e,n.length))}),n.join("&")}return i(r,a)+"="+i(c,a)}).filter(function(e){return e.length>0}).join("&"):""},a.parseUrl=function(e,a){return{url:e.split("?")[0]||"",query:o(f(e),a)}}},function(e,a,t){var r=t(458),c=t(455),n=t(207),i=t(206),f=t(454),o="application/json",d=function(){};e.exports=function(e,a,t){if(!e||"string"!=typeof e)throw new TypeError("must specify a URL");"function"==typeof a&&(t=a,a={});if(t&&"function"!=typeof t)throw new TypeError("expected cb to be undefined or a function");t=t||d;var s=(a=a||{}).json?"json":"text",b=(a=n({responseType:s},a)).headers||{},u=(a.method||"GET").toUpperCase(),l=a.query;l&&("string"!=typeof l&&(l=r.stringify(l)),e=c(e,l));"json"===a.responseType&&i(b,"Accept",o);a.json&&"GET"!==u&&"HEAD"!==u&&(i(b,"Content-Type",o),a.body=JSON.stringify(a.body));return a.method=u,a.url=e,a.headers=b,delete a.query,delete a.json,f(a,t)}},function(e,a,t){var r=t(459);e.exports=function(e,a){return new Promise(function(t,c){r(e,a,function(e,a){e?c(e):t(a)})})}},function(e){e.exports={"windows-amd64":{archive:"swarm-windows-amd64-1.6.7.exe",binaryMD5:"c2d827dc4553d9b91a7d6c1d5a6140fd",archiveMD5:"059196d21548060a18a12e17cc0ee59a"},"linux-amd64":{archive:"swarm-linux-amd64-1.6.7",binaryMD5:"85002d79b8ebc2d2f2f10fb198636a81",archiveMD5:"3e8874299ab8c0e3043d70ebb6673879"},"linux-386":{archive:"swarm-linux-386-1.6.7",binaryMD5:"35bc2ab976f60f96a2cede117e0df19d",archiveMD5:"7868a86c9cbdf8ac7ac2e5682b4ce40f"},"darwin-amd64":{archive:"swarm-darwin-amd64-1.6.7",binaryMD5:"c499b186645229260dd6ab685dd58f07",archiveMD5:"0794d111e5018eac3b657bcb29851121"},"linux-arm5":{archive:"swarm-linux-arm5-1.6.7",binaryMD5:"516fcd85246c905529442cd9b689c12f",archiveMD5:"47312708d417cb196b07ba0af1d3abb4"},"linux-arm6":{archive:"swarm-linux-arm6-1.6.7",binaryMD5:"82ff7bdbe388b4a190f4101c5150d3b4",archiveMD5:"350276de7bb175a15c314cfc4cb7f8fd"},"linux-mips":{archive:"swarm-linux-mips-1.6.7",binaryMD5:"e1e95280441c0ca35633927792ef5317",archiveMD5:"8fb4b64e94cd73aa718db787b9d4c53e"},"linux-arm7":{archive:"swarm-linux-arm7-1.6.7",binaryMD5:"bfc0b4d1c86d8a975af052fc7854bdd3",archiveMD5:"4378641d8e1e1fbb947f941c8fca8613"},"linux-arm64":{archive:"swarm-linux-arm64-1.6.7",binaryMD5:"bbac21a6c6fa8208f67ca4123d3f948a",archiveMD5:"4e503160327c5fbcca0414f17c54e5ee"},"linux-mipsle":{archive:"swarm-linux-mipsle-1.6.7",binaryMD5:"a82f191b2f9d2c470d0273219c820657",archiveMD5:"3016bdb6d237ae654c0cdf36fe85dc7c"},"windows-386":{archive:"swarm-windows-386-1.6.7.exe",binaryMD5:"ce0b34640642e58068ae5a359faef102",archiveMD5:"640aede4da08a3a9d8a6ac0434ba7c0f"},"linux-mips64":{archive:"swarm-linux-mips64-1.6.7",binaryMD5:"9da967664f384817adb5083fd1ffe8f1",archiveMD5:"357a33be470f8f89ba2619957a08deff"},"linux-mips64le":{archive:"swarm-linux-mips64le-1.6.7",binaryMD5:"ec1abcf7b216e87645ec83954d8344cd",archiveMD5:"a81fd0158190d99813c738ffa4f87627"}}},function(e){e.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana"},"application/3gpp-ims+xml":{source:"iana"},"application/a2l":{source:"iana"},"application/activemessage":{source:"iana"},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana"},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",extensions:["atomsvc"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana"},"application/bacnet-xdd+zip":{source:"iana"},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana"},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana"},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/cbor":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana"},"application/ccxml+xml":{source:"iana",extensions:["ccxml"]},"application/cdfx+xml":{source:"iana"},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana"},"application/cellml+xml":{source:"iana"},"application/cfw":{source:"iana"},"application/clue_info+xml":{source:"iana"},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana"},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana"},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana"},"application/cstadata+xml":{source:"iana"},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",extensions:["mpd"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana"},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana"},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/docbook+xml":{source:"apache",extensions:["dbk"]},"application/dskpp+xml":{source:"iana"},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/emergencycalldata.comment+xml":{source:"iana"},"application/emergencycalldata.control+xml":{source:"iana"},"application/emergencycalldata.deviceinfo+xml":{source:"iana"},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana"},"application/emergencycalldata.serviceinfo+xml":{source:"iana"},"application/emergencycalldata.subscriberinfo+xml":{source:"iana"},"application/emergencycalldata.veds+xml":{source:"iana"},"application/emma+xml":{source:"iana",extensions:["emma"]},"application/emotionml+xml":{source:"iana"},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana"},"application/epub+zip":{source:"iana",extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana"},"application/fhir+xml":{source:"iana"},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1,extensions:["woff"]},"application/framework-attributes+xml":{source:"iana"},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geoxacml+xml":{source:"iana"},"application/gml+xml":{source:"iana",extensions:["gml"]},"application/gpx+xml":{source:"apache",extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana"},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana"},"application/ibe-pkg-reply+xml":{source:"iana"},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana"},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana"},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana"},"application/kpml-response+xml":{source:"iana"},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana"},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana"},"application/lost+xml":{source:"iana",extensions:["lostxml"]},"application/lostsync+xml":{source:"iana"},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",extensions:["mads"]},"application/manifest+json":{charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",extensions:["mathml"]},"application/mathml-content+xml":{source:"iana"},"application/mathml-presentation+xml":{source:"iana"},"application/mbms-associated-procedure-description+xml":{source:"iana"},"application/mbms-deregister+xml":{source:"iana"},"application/mbms-envelope+xml":{source:"iana"},"application/mbms-msk+xml":{source:"iana"},"application/mbms-msk-response+xml":{source:"iana"},"application/mbms-protection-description+xml":{source:"iana"},"application/mbms-reception-report+xml":{source:"iana"},"application/mbms-register+xml":{source:"iana"},"application/mbms-register-response+xml":{source:"iana"},"application/mbms-schedule+xml":{source:"iana"},"application/mbms-user-service-description+xml":{source:"iana"},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana"},"application/media_control+xml":{source:"iana"},"application/mediaservercontrol+xml":{source:"iana",extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",extensions:["metalink"]},"application/metalink4+xml":{source:"iana",extensions:["meta4"]},"application/mets+xml":{source:"iana",extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mmt-usd+xml":{source:"iana"},"application/mods+xml":{source:"iana",extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana"},"application/mrb-publish+xml":{source:"iana"},"application/msc-ivr+xml":{source:"iana"},"application/msc-mixer+xml":{source:"iana"},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana"},"application/n-triples":{source:"iana"},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana"},"application/news-groupinfo":{source:"iana"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana"},"application/node":{source:"iana"},"application/nss":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p2p-overlay+xml":{source:"iana"},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana"},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana"},"application/pidf-diff+xml":{source:"iana"},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",extensions:["pls"]},"application/poc-settings+xml":{source:"iana"},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana"},"application/provenance+xml":{source:"iana"},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.hpub+zip":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana"},"application/pskc+xml":{source:"iana",extensions:["pskcxml"]},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf"]},"application/reginfo+xml":{source:"iana",extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",extensions:["rld"]},"application/rfc+xml":{source:"iana"},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana"},"application/rls-services+xml":{source:"iana",extensions:["rs"]},"application/route-apd+xml":{source:"iana"},"application/route-s-tsid+xml":{source:"iana"},"application/route-usd+xml":{source:"iana"},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana"},"application/samlmetadata+xml":{source:"iana"},"application/sbml+xml":{source:"iana",extensions:["sbml"]},"application/scaip+xml":{source:"iana"},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/sep+xml":{source:"iana"},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",extensions:["shf"]},"application/sieve":{source:"iana"},"application/simple-filter+xml":{source:"iana"},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",extensions:["srx"]},"application/spirits-event+xml":{source:"iana"},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",extensions:["grxml"]},"application/sru+xml":{source:"iana",extensions:["sru"]},"application/ssdl+xml":{source:"apache",extensions:["ssdl"]},"application/ssml+xml":{source:"iana",extensions:["ssml"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/tei+xml":{source:"iana",extensions:["tei","teicorpus"]},"application/thraud+xml":{source:"iana",extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tnauthlist":{source:"iana"},"application/trig":{source:"iana"},"application/ttml+xml":{source:"iana"},"application/tve-trigger":{source:"iana"},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana"},"application/urc-ressheet+xml":{source:"iana"},"application/urc-targetdesc+xml":{source:"iana"},"application/urc-uisocketdesc+xml":{source:"iana"},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana"},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana"},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana"},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana"},"application/vnd.3gpp.bsf+xml":{source:"iana"},"application/vnd.3gpp.gmop+xml":{source:"iana"},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana"},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana"},"application/vnd.3gpp.mcptt-info+xml":{source:"iana"},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana"},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana"},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana"},"application/vnd.3gpp.mid-call+xml":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana"},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana"},"application/vnd.3gpp.srvcc-info+xml":{source:"iana"},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana"},"application/vnd.3gpp.ussd+xml":{source:"iana"},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana"},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",extensions:["mpkg"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana"},"application/vnd.balsamiq.bmml+xml":{source:"iana"},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana"},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana"},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana"},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",extensions:["wbs"]},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana"},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana"},"application/vnd.cybank":{source:"iana"},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume-movie":{source:"iana"},"application/vnd.desmume.movie":{source:"apache"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana"},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana"},"application/vnd.dvb.notif-container+xml":{source:"iana"},"application/vnd.dvb.notif-generic+xml":{source:"iana"},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana"},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana"},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana"},"application/vnd.dvb.notif-init+xml":{source:"iana"},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana"},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana"},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana"},"application/vnd.eszigno3+xml":{source:"iana",extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana"},"application/vnd.etsi.asic-e+zip":{source:"iana"},"application/vnd.etsi.asic-s+zip":{source:"iana"},"application/vnd.etsi.cug+xml":{source:"iana"},"application/vnd.etsi.iptvcommand+xml":{source:"iana"},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana"},"application/vnd.etsi.iptvprofile+xml":{source:"iana"},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana"},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana"},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana"},"application/vnd.etsi.iptvservice+xml":{source:"iana"},"application/vnd.etsi.iptvsync+xml":{source:"iana"},"application/vnd.etsi.iptvueprofile+xml":{source:"iana"},"application/vnd.etsi.mcid+xml":{source:"iana"},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana"},"application/vnd.etsi.pstn+xml":{source:"iana"},"application/vnd.etsi.sci+xml":{source:"iana"},"application/vnd.etsi.simservs+xml":{source:"iana"},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana"},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana"},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana"},"application/vnd.gov.sk.e-form+zip":{source:"iana"},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana"},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana"},"application/vnd.imagemeter.image+zip":{source:"iana"},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana"},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana"},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana"},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana"},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana"},"application/vnd.iptc.g2.newsitem+xml":{source:"iana"},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana"},"application/vnd.iptc.g2.packageitem+xml":{source:"iana"},"application/vnd.iptc.g2.planningitem+xml":{source:"iana"},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",extensions:["lasxml"]},"application/vnd.liberty-request+xml":{source:"iana"},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",extensions:["lbe"]},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana"},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana"},"application/vnd.marlin.drm.conftoken+xml":{source:"iana"},"application/vnd.marlin.drm.license+xml":{source:"iana"},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana"},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana"},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana"},"application/vnd.ms-printing.printticket+xml":{source:"apache"},"application/vnd.ms-printschematicket+xml":{source:"iana"},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana"},"application/vnd.nokia.iptv.config+xml":{source:"iana"},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana"},"application/vnd.nokia.landmarkcollection+xml":{source:"iana"},"application/vnd.nokia.n-gage.ac+xml":{source:"iana"},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana"},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana"},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana"},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana"},"application/vnd.oipf.dae.xhtml+xml":{source:"iana"},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana"},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana"},"application/vnd.oipf.spdlist+xml":{source:"iana"},"application/vnd.oipf.ueprofile+xml":{source:"iana"},"application/vnd.oipf.userprofile+xml":{source:"iana"},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana"},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana"},"application/vnd.oma.bcast.imd+xml":{source:"iana"},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana"},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana"},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana"},"application/vnd.oma.bcast.sprov+xml":{source:"iana"},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana"},"application/vnd.oma.cab-feature-handler+xml":{source:"iana"},"application/vnd.oma.cab-pcc+xml":{source:"iana"},"application/vnd.oma.cab-subs-invite+xml":{source:"iana"},"application/vnd.oma.cab-user-prefs+xml":{source:"iana"},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana"},"application/vnd.oma.group-usage-list+xml":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana"},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana"},"application/vnd.oma.poc.final-report+xml":{source:"iana"},"application/vnd.oma.poc.groups+xml":{source:"iana"},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana"},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana"},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana"},"application/vnd.oma.xcap-directory+xml":{source:"iana"},"application/vnd.omads-email+xml":{source:"iana"},"application/vnd.omads-file+xml":{source:"iana"},"application/vnd.omads-folder+xml":{source:"iana"},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana"},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana"},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana"},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana"},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana"},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana"},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos+xml":{source:"iana"},"application/vnd.paos.xml":{source:"apache"},"application/vnd.patentdive":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana"},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana"},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana"},"application/vnd.radisys.msml+xml":{source:"iana"},"application/vnd.radisys.msml-audit+xml":{source:"iana"},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana"},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana"},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana"},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana"},"application/vnd.radisys.msml-conf+xml":{source:"iana"},"application/vnd.radisys.msml-dialog+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana"},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana"},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana"},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.software602.filler.form+xml":{source:"iana"},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana"},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana"},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.tmd.mediaflex.api+xml":{source:"iana"},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana"},"application/vnd.wv.ssp+xml":{source:"iana"},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana"},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",extensions:["zaz"]},"application/voicexml+xml":{source:"iana",extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana"},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"apache",extensions:["der","crt","pem"]},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana"},"application/xaml+xml":{source:"apache",extensions:["xaml"]},"application/xcap-att+xml":{source:"iana"},"application/xcap-caps+xml":{source:"iana"},"application/xcap-diff+xml":{source:"iana",extensions:["xdf"]},"application/xcap-el+xml":{source:"iana"},"application/xcap-error+xml":{source:"iana"},"application/xcap-ns+xml":{source:"iana"},"application/xcon-conference-info+xml":{source:"iana"},"application/xcon-conference-info-diff+xml":{source:"iana"},"application/xenc+xml":{source:"iana",extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache"},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana"},"application/xmpp+xml":{source:"iana"},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",extensions:["xpl"]},"application/xslt+xml":{source:"iana",extensions:["xslt"]},"application/xspf+xml":{source:"apache",extensions:["xspf"]},"application/xv+xml":{source:"iana",extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana"},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana"},"application/yin+xml":{source:"iana",extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana"},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana"},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tone":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana"},"image/apng":{compressible:!1,extensions:["apng"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana"},"image/emf":{source:"iana"},"image/fits":{source:"iana"},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana"},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana"},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana"},"image/tiff":{source:"iana",compressible:!1,extensions:["tiff","tif"]},"image/tiff-fx":{source:"iana"},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana"},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana"},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana"},"image/vnd.valve.source.texture":{source:"iana"},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana"},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana"},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/vnd.collada+xml":{source:"iana",extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana"},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana"},"model/vnd.parasolid.transmit.binary":{source:"iana"},"model/vnd.parasolid.transmit.text":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.valve.source.compiled-map":{source:"iana"},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana"},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana"},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana",compressible:!1},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fwdred":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shex":{extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana"},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vp8":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}},function(e,a,t){
/*!
 * mime-db
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */
e.exports=t(462)},function(e,a,t){"use strict";
/*!
 * mime-types
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */var r=t(463),c=t(2).extname,n=/^\s*([^;\s]*)(?:;|\s|$)/,i=/^text\//i;function f(e){if(!e||"string"!=typeof e)return!1;var a=n.exec(e),t=a&&r[a[1].toLowerCase()];return t&&t.charset?t.charset:!(!a||!i.test(a[1]))&&"UTF-8"}a.charset=f,a.charsets={lookup:f},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var t=-1===e.indexOf("/")?a.lookup(e):e;if(!t)return!1;if(-1===t.indexOf("charset")){var r=a.charset(t);r&&(t+="; charset="+r.toLowerCase())}return t},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var t=n.exec(e),r=t&&a.extensions[t[1].toLowerCase()];if(!r||!r.length)return!1;return r[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var t=c("x."+e).toLowerCase().substr(1);if(!t)return!1;return a.types[t]||!1},a.types=Object.create(null),function(e,a){var t=["nginx","apache",void 0,"iana"];Object.keys(r).forEach(function(c){var n=r[c],i=n.extensions;if(i&&i.length){e[c]=i;for(var f=0;f<i.length;f++){var o=i[f];if(a[o]){var d=t.indexOf(r[a[o]].source),s=t.indexOf(n.source);if("application/octet-stream"!==a[o]&&(d>s||d===s&&"application/"===a[o].substr(0,12)))continue}a[o]=c}}})}(a.extensions,a.types)},function(e,a,t){"use strict";var r=t(58);function c(e){this._flags=e,this._item=null,this._position=0}c.prototype.setItem=function(e){this._item=e},c.prototype.getItem=function(){return this._item},c.prototype.getPosition=function(){return this._position},c.prototype.setPosition=function(e){this._position=e},c.prototype.isAppend=function(){return(this._flags&r.O_APPEND)===r.O_APPEND},c.prototype.isCreate=function(){return(this._flags&r.O_CREAT)===r.O_CREAT},c.prototype.isRead=function(){return this._flags===r.O_RDONLY||this._flags===(r.O_RDONLY|r.O_SYNC)||(this._flags&r.O_RDWR)===r.O_RDWR},c.prototype.isWrite=function(){return(this._flags&r.O_WRONLY)===r.O_WRONLY||(this._flags&r.O_RDWR)===r.O_RDWR},c.prototype.isTruncate=function(){return(this._flags&r.O_TRUNC)===r.O_TRUNC},c.prototype.isExclusive=function(){return(this._flags&r.O_EXCL)===r.O_EXCL},e.exports=c},function(e,a,t){"use strict";var r,c=t(2),n=t(211),i=t(465),f=t(210),o=t(209),d=t(124),s=t(58),b=t(208).getPathParts,u=t(94).from,l=t(94).alloc,p=process.binding("fs");r=p.statValues?p.statValues:p.getStatValues?p.getStatValues():[];function h(e,a,t){if(!e||"function"!=typeof e)return t.call(a);var r,c=null;try{r=t.call(a)}catch(e){c=e}process.nextTick(function(){void 0===r?e(c):e(c,r)})}function m(e){return e&&"function"==typeof e.oncomplete&&(e=e.oncomplete.bind(e)),e}function g(e){return e&&"function"==typeof e.oncomplete&&(e=e.oncomplete.bind(e)),"function"==typeof e?function(a,t){t&&_(t,r),e.apply(this,arguments)}:e}function v(e){for(var a in e)this[a]=e[a];_(e,this)}function y(e){this._system=e,this.Stats=v,this._openFiles={},this._counter=0}function _(e,a){a[0]=e.dev,a[1]=e.mode,a[2]=e.nlink,a[3]=e.uid,a[4]=e.gid,a[5]=e.rdev,a[6]=e.blksize,a[7]=e.ino,a[8]=e.size,a[9]=e.blocks,a[10]=+e.atime,a[11]=+e.mtime,a[12]=+e.ctime,a[13]=+e.birthtime}v.prototype._checkModeProperty=function(e){return(this.mode&s.S_IFMT)===e},v.prototype.isDirectory=function(){return this._checkModeProperty(s.S_IFDIR)},v.prototype.isFile=function(){return this._checkModeProperty(s.S_IFREG)},v.prototype.isBlockDevice=function(){return this._checkModeProperty(s.S_IFBLK)},v.prototype.isCharacterDevice=function(){return this._checkModeProperty(s.S_IFCHR)},v.prototype.isSymbolicLink=function(){return this._checkModeProperty(s.S_IFLNK)},v.prototype.isFIFO=function(){return this._checkModeProperty(s.S_IFIFO)},v.prototype.isSocket=function(){return this._checkModeProperty(s.S_IFSOCK)},y.prototype.getSystem=function(){return this._system},y.prototype.setSystem=function(e){this._system=e},y.prototype._getDescriptorById=function(e){if(!this._openFiles.hasOwnProperty(e))throw new d("EBADF");return this._openFiles[e]},y.prototype._trackDescriptor=function(e){var a=++this._counter;return this._openFiles[a]=e,a},y.prototype._untrackDescriptorById=function(e){if(!this._openFiles.hasOwnProperty(e))throw new d("EBADF");delete this._openFiles[e]},y.prototype.realpath=function(e,a,t){return h(m(t),this,function(){var t;Buffer.isBuffer(e)&&(e=e.toString());var r,n,i,s=c.resolve(e),l=b(s),p=this._system.getRoot(),h="/";for(n=0,i=l.length;n<i;++n){for(r=l[n];p instanceof o;)h=c.resolve(c.dirname(h),p.getPath()),p=this._system.getItem(h);if(!p)throw new d("ENOENT",e);if(!(p instanceof f))throw new d("ENOTDIR",e);h=c.resolve(h,r),p=p.getItem(r)}if(!p)throw new d("ENOENT",e);for(;p instanceof o;)h=c.resolve(c.dirname(h),p.getPath()),p=this._system.getItem(h);return t=h,"buffer"===a&&(t=u(t)),t})},y.prototype.stat=function(e,a){return h(g(a),this,function(){var t=this._system.getItem(e);if(t instanceof o&&(t=this._system.getItem(c.resolve(c.dirname(e),t.getPath()))),!t)throw new d("ENOENT",e);var n=t.getStats();if(!(a instanceof Float64Array))return _(n,r),new v(n);_(n,a)})},y.prototype.fstat=function(e,a){return h(g(a),this,function(){var t=this._getDescriptorById(e).getItem().getStats();if(!(a instanceof Float64Array))return _(t,r),new v(t);_(t,a)})},y.prototype.close=function(e,a){h(m(a),this,function(){this._untrackDescriptorById(e)})},y.prototype.open=function(e,a,t,r){return h(m(r),this,function(){for(var r=new i(a),s=this._system.getItem(e);s instanceof o;)s=this._system.getItem(c.resolve(c.dirname(e),s.getPath()));if(r.isExclusive()&&s)throw new d("EEXIST",e);if(r.isCreate()&&!s){var b=this._system.getItem(c.dirname(e));if(!b)throw new d("ENOENT",e);if(!(b instanceof f))throw new d("ENOTDIR",e);s=new n,t&&s.setMode(t),b.addItem(c.basename(e),s)}if(r.isRead()){if(!s)throw new d("ENOENT",e);if(!s.canRead())throw new d("EACCES",e)}if(r.isWrite()&&!s.canWrite())throw new d("EACCES",e);return r.isTruncate()&&s.setContent(""),(r.isTruncate()||r.isAppend())&&r.setPosition(s.getContent().length),r.setItem(s),this._trackDescriptor(r)})},y.prototype.read=function(e,a,t,r,c,i){return h(m(i),this,function(){var i=this._getDescriptorById(e);if(!i.isRead())throw new d("EBADF");var f=i.getItem();if(!(f instanceof n))throw new d("EBADF");("number"!=typeof c||c<0)&&(c=i.getPosition());var o=f.getContent(),s=Math.min(c,o.length),b=Math.min(c+r,o.length),u=s<b?o.copy(a,t,s,b):0;return i.setPosition(c+u),u})},y.prototype.writeBuffers=function(e,a,t,r){return h(m(r),this,function(){var r=this._getDescriptorById(e);if(!r.isWrite())throw new d("EBADF");var c=r.getItem();if(!(c instanceof n))throw new d("EBADF");("number"!=typeof t||t<0)&&(t=r.getPosition());var i=c.getContent(),f=Buffer.concat(a),o=t+f.length;if(i.length<o){var s=l(o);i.copy(s),i=s}var b=f.copy(i,t);return c.setContent(i),r.setPosition(o),b})},y.prototype.writeBuffer=function(e,a,t,r,c,i){return h(m(i),this,function(){var i=this._getDescriptorById(e);if(!i.isWrite())throw new d("EBADF");var f=i.getItem();if(!(f instanceof n))throw new d("EBADF");("number"!=typeof c||c<0)&&(c=i.getPosition());var o=f.getContent(),s=c+r;if(o.length<s){var b=l(s);o.copy(b),o=b}var u=Math.min(t+r,a.length),p=a.copy(o,c,t,u);return f.setContent(o),i.setPosition(s),p})},y.prototype.write=y.prototype.writeBuffer,y.prototype.writeString=function(e,a,t,r,c){var n,i=u(a,r);return c&&(c.oncomplete&&(c=c.oncomplete.bind(c)),n=function(e,t,r){c(e,t,r&&a)}),this.writeBuffer(e,i,0,a.length,t,n)},y.prototype.rename=function(e,a,t){return h(m(t),this,function(){var t=this._system.getItem(e);if(!t)throw new d("ENOENT",e);var r=this._system.getItem(c.dirname(e)),i=c.basename(e),o=this._system.getItem(a),s=this._system.getItem(c.dirname(a)),b=c.basename(a);if(o){if(t instanceof n){if(o instanceof f)throw new d("EISDIR",a)}else if(t instanceof f){if(!(o instanceof f))throw new d("ENOTDIR",a);if(o.list().length>0)throw new d("ENOTEMPTY",a)}s.removeItem(b)}else{if(!s)throw new d("ENOENT",a);if(!(s instanceof f))throw new d("ENOTDIR",a)}r.removeItem(i),s.addItem(b,t)})},y.prototype.readdir=function(e,a,t){return a&&"string"!=typeof a&&(t=a,a="utf-8"),h(m(t),this,function(){for(var t=e,r=this._system.getItem(e);r instanceof o;)t=c.resolve(c.dirname(t),r.getPath()),r=this._system.getItem(t);if(!r)throw new d("ENOENT",e);if(!(r instanceof f))throw new d("ENOTDIR",e);var n=r.list();return"buffer"===a&&(n=n.map(function(e){return u(e)})),n})},y.prototype.mkdir=function(e,a,t){h(m(t),this,function(){if(this._system.getItem(e))throw new d("EEXIST",e);var t=this._system.getItem(c.dirname(e));if(!t)throw new d("ENOENT",e);this.access(c.dirname(e),parseInt("0002",8));var r=new f;a&&r.setMode(a),t.addItem(c.basename(e),r)})},y.prototype.rmdir=function(e,a){h(m(a),this,function(){var a=this._system.getItem(e);if(!a)throw new d("ENOENT",e);if(!(a instanceof f))throw new d("ENOTDIR",e);if(a.list().length>0)throw new d("ENOTEMPTY",e);this.access(c.dirname(e),parseInt("0002",8)),this._system.getItem(c.dirname(e)).removeItem(c.basename(e))})};var w="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";y.prototype.mkdtemp=function(e,a,t){return a&&"string"!=typeof a&&(t=a,a="utf-8"),h(m(t),this,function(){e=e.replace(/X{0,6}$/,"XXXXXX");var t=c.dirname(e),r=this._system.getItem(t);if(!r)throw new d("ENOENT",e);if(!(r instanceof f))throw new d("ENOTDIR",e);this.access(t,parseInt("0002",8));for(var n,i=c.basename(e),o=!1,s=0;!o&&s<238328;){for(var b=i.length-1,l="";"X"===i.charAt(b);)l+=w.charAt(Math.floor(w.length*Math.random())),b-=1;var p=i.slice(0,b+1)+l;r.getItem(p)||(n=p,o=!0),s+=1}if(!n)throw new d("EEXIST",e);var h=new f;r.addItem(n,h);var m=c.join(t,n);return"buffer"===a&&(m=u(m)),m})},y.prototype.ftruncate=function(e,a,t){h(m(t),this,function(){var t=this._getDescriptorById(e);if(!t.isWrite())throw new d("EINVAL");var r=t.getItem();if(!(r instanceof n))throw new d("EINVAL");var c=r.getContent(),i=l(a);c.copy(i),r.setContent(i)})},y.prototype.truncate=y.prototype.ftruncate,y.prototype.chown=function(e,a,t,r){h(m(r),this,function(){var r=this._system.getItem(e);if(!r)throw new d("ENOENT",e);r.setUid(a),r.setGid(t)})},y.prototype.fchown=function(e,a,t,r){h(m(r),this,function(){var r=this._getDescriptorById(e).getItem();r.setUid(a),r.setGid(t)})},y.prototype.chmod=function(e,a,t){h(m(t),this,function(){var t=this._system.getItem(e);if(!t)throw new d("ENOENT",e);t.setMode(a)})},y.prototype.fchmod=function(e,a,t){h(m(t),this,function(){this._getDescriptorById(e).getItem().setMode(a)})},y.prototype.unlink=function(e,a){h(m(a),this,function(){var a=this._system.getItem(e);if(!a)throw new d("ENOENT",e);if(a instanceof f)throw new d("EPERM",e);this._system.getItem(c.dirname(e)).removeItem(c.basename(e))})},y.prototype.utimes=function(e,a,t,r){h(m(r),this,function(){var r=this._system.getItem(e);if(!r)throw new d("ENOENT",e);r.setATime(new Date(1e3*a)),r.setMTime(new Date(1e3*t))})},y.prototype.futimes=function(e,a,t,r){h(m(r),this,function(){var r=this._getDescriptorById(e).getItem();r.setATime(new Date(1e3*a)),r.setMTime(new Date(1e3*t))})},y.prototype.fsync=function(e,a){h(m(a),this,function(){this._getDescriptorById(e)})},y.prototype.fdatasync=function(e,a){h(m(a),this,function(){this._getDescriptorById(e)})},y.prototype.link=function(e,a,t){h(m(t),this,function(){var t=this._system.getItem(e);if(!t)throw new d("ENOENT",e);if(t instanceof f)throw new d("EPERM",e);if(this._system.getItem(a))throw new d("EEXIST",a);var r=this._system.getItem(c.dirname(a));if(!r)throw new d("ENOENT",a);if(!(r instanceof f))throw new d("ENOTDIR",a);r.addItem(c.basename(a),t)})},y.prototype.symlink=function(e,a,t,r){h(m(r),this,function(){if(this._system.getItem(a))throw new d("EEXIST",a);var t=this._system.getItem(c.dirname(a));if(!t)throw new d("ENOENT",a);if(!(t instanceof f))throw new d("ENOTDIR",a);var r=new o;r.setPath(e),t.addItem(c.basename(a),r)})},y.prototype.readlink=function(e,a,t){return a&&"string"!=typeof a&&(t=a,a="utf-8"),h(m(t),this,function(){var t=this._system.getItem(e);if(!t)throw new d("ENOENT",e);if(!(t instanceof o))throw new d("EINVAL",e);var r=t.getPath();return"buffer"===a&&(r=u(r)),r})},y.prototype.lstat=function(e,a){return h(g(a),this,function(){var t=this._system.getItem(e);if(!t)throw new d("ENOENT",e);var c=t.getStats();if(!(a instanceof Float64Array))return _(c,r),new v(t.getStats());_(c,a)})},y.prototype.access=function(e,a,t){h(m(t),this,function(){for(var t=this._system.getItem(e),r=0;t instanceof o;){if(r>50)throw new d("ELOOP",e);e=c.resolve(c.dirname(e),t.getPath()),t=this._system.getItem(e),++r}if(!t)throw new d("ENOENT",e);if(a&&process.getuid&&process.getgid){var n=t.getMode();if(t.getUid()===process.getuid()){if((n&64*a)!=64*a)throw new d("EACCES",e)}else if(t.getGid()===process.getgid()){if((n&8*a)!=8*a)throw new d("EACCES",e)}else if((n&a)!==a)throw new d("EACCES",e)}})},y.prototype.StatWatcher=function(){throw new Error("Method not implemented")},e.exports=y},function(e,a,t){"use strict";var r=t(466),c=t(124),n=t(208),i=process.binding("fs"),f=t(2),o=Object.assign({},i),d={cwd:process.cwd,chdir:process.chdir};(a=e.exports=function(e,a){var t=n.create(e,a),o=new r(t);!function(e){for(var a in e)"function"==typeof e[a]?i[a]=e[a].bind(e):i[a]=e[a]}(o);var d=process.cwd();!function(e,a){process.cwd=e,process.chdir=a}(function(){return d},function(e){if(!o.stat(f._makeLong(e)).isDirectory())throw new c("ENOTDIR");d=f.resolve(d,e)})}).getMockRoot=function(){return void 0===i.getSystem?{}:i.getSystem().getRoot()},a.restore=function(){!function(){var e;for(e in o)i[e]=o[e];for(e in i)void 0===o[e]&&delete i[e]}(),function(){for(var e in d)process[e]=d[e]}()},a.file=n.file,a.directory=n.directory,a.symlink=n.symlink},function(e,a,t){"use strict";e.exports=function(e,a){var t=e.map;e.prototype.filter=function(e,r){return t(this,e,r,a)},e.filter=function(e,r,c){return t(e,r,c,a)}}},function(e,a,t){"use strict";e.exports=function(e,a){var r=t(12),c=e.TimeoutError,n=function(e){return i(+this).thenReturn(e)},i=e.delay=function(t,r){if(void 0===r){r=t,t=void 0;var c=new e(a);return setTimeout(function(){c._fulfill()},r),c}return r=+r,e.resolve(t)._then(n,null,null,r,void 0)};function f(e){var a=this;return a instanceof Number&&(a=+a),clearTimeout(a),e}function o(e){var a=this;throw a instanceof Number&&(a=+a),clearTimeout(a),e}e.prototype.delay=function(e){return i(this,e)},e.prototype.timeout=function(e,a){e=+e;var t=this.then().cancellable();t._cancellationParent=this;var n=setTimeout(function(){!function(e,a){var t;e.isPending()&&(!r.isPrimitive(a)&&a instanceof Error?t=a:("string"!=typeof a&&(a="operation timed out"),t=new c(a)),r.markAsOriginatingFromRejection(t),e._attachExtraTrace(t),e._cancel(t))}(t,a)},e);return t._then(f,o,void 0,n,void 0)}}},function(e,a,t){"use strict";e.exports=function(e,a){var t=e.reduce;e.prototype.each=function(e){return t(this,e,null,a)},e.each=function(e,r){return t(e,r,null,a)}}},function(e,a,t){"use strict";e.exports=function(e){var a=e._SomePromiseArray;function t(e){var t=new a(e),r=t.promise();return t.setHowMany(1),t.setUnwrap(),t.init(),r}e.any=function(e){return t(e)},e.prototype.any=function(){return t(this)}}},function(e,a,t){"use strict";e.exports=function(e,a){var r={},c=t(12),n=t(212)._nodebackForPromise,i=c.withAppended,f=c.maybeWrapAsError,o=c.canEvaluate,d=t(34).TypeError,s={__isPromisified__:!0},b=new RegExp("^(?:"+["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"].join("|")+")$"),u=function(e){return c.isIdentifier(e)&&"_"!==e.charAt(0)&&"constructor"!==e};function l(e){return!b.test(e)}function p(e){try{return!0===e.__isPromisified__}catch(e){return!1}}function h(e,a,t){var r=c.getDataPropertyOrDefault(e,a+t,s);return!!r&&p(r)}function m(e,a,t,r){for(var n=c.inheritedDataKeys(e),i=[],f=0;f<n.length;++f){var o=n[f],s=e[o],b=r===u||u(o,s,e);"function"!=typeof s||p(s)||h(e,o,a)||!r(o,s,e,b)||i.push(o,s)}return function(e,a,t){for(var r=0;r<e.length;r+=2){var c=e[r];if(t.test(c))for(var n=c.replace(t,""),i=0;i<e.length;i+=2)if(e[i]===n)throw new d("Cannot promisify an API that has normal methods with '%s'-suffix\n\n    See http://goo.gl/iWrZbw\n".replace("%s",a))}}(i,a,t),i}var g=function(e){return e.replace(/([$])/,"\\$")},v=function(e){return c.filledRange(e,"_arg","")};var y=o?function(t,o,d,s){var b=Math.max(0,function(e){return"number"==typeof e.length?Math.max(Math.min(e.length,1024),0):0}(s)-1),u=function(e){for(var a=[e],t=Math.max(0,e-1-3),r=e-1;r>=t;--r)a.push(r);for(r=e+1;r<=3;++r)a.push(r);return a}(b),l="string"==typeof t||o===r;function p(e){var a=v(e).join(", "),t=e>0?", ":"";return(l?"ret = callback.call(this, {{args}}, nodeback); break;\n":void 0===o?"ret = callback({{args}}, nodeback); break;\n":"ret = callback.call(receiver, {{args}}, nodeback); break;\n").replace("{{args}}",a).replace(", ",t)}var h="string"==typeof t?"this != null ? this['"+t+"'] : fn":"fn";return new Function("Promise","fn","receiver","withAppended","maybeWrapAsError","nodebackForPromise","tryCatch","errorObj","notEnumerableProp","INTERNAL","'use strict';                            \n        var ret = function (Parameters) {                                    \n            'use strict';                                                    \n            var len = arguments.length;                                      \n            var promise = new Promise(INTERNAL);                             \n            promise._captureStackTrace();                                    \n            var nodeback = nodebackForPromise(promise);                      \n            var ret;                                                         \n            var callback = tryCatch([GetFunctionCode]);                      \n            switch(len) {                                                    \n                [CodeForSwitchCase]                                          \n            }                                                                \n            if (ret === errorObj) {                                          \n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n            }                                                                \n            return promise;                                                  \n        };                                                                   \n        notEnumerableProp(ret, '__isPromisified__', true);                   \n        return ret;                                                          \n        ".replace("Parameters",function(e){return c.filledRange(Math.max(e,3),"_arg","")}(b)).replace("[CodeForSwitchCase]",function(){for(var e="",a=0;a<u.length;++a)e+="case "+u[a]+":"+p(u[a]);return e+="                                                             \n        default:                                                             \n            var args = new Array(len + 1);                                   \n            var i = 0;                                                       \n            for (var i = 0; i < len; ++i) {                                  \n               args[i] = arguments[i];                                       \n            }                                                                \n            args[i] = nodeback;                                              \n            [CodeForCall]                                                    \n            break;                                                           \n        ".replace("[CodeForCall]",l?"ret = callback.apply(this, args);\n":"ret = callback.apply(receiver, args);\n")}()).replace("[GetFunctionCode]",h))(e,s,o,i,f,n,c.tryCatch,c.errorObj,c.notEnumerableProp,a)}:function(t,o,d,s){var b=function(){return this}(),u=t;function l(){var c=o;o===r&&(c=this);var d=new e(a);d._captureStackTrace();var s="string"==typeof u&&this!==b?this[u]:t,l=n(d);try{s.apply(c,i(arguments,l))}catch(e){d._rejectCallback(f(e),!0,!0)}return d}return"string"==typeof u&&(t=s),c.notEnumerableProp(l,"__isPromisified__",!0),l};function _(e,a,t,n){for(var i=new RegExp(g(a)+"$"),f=m(e,a,i,t),o=0,d=f.length;o<d;o+=2){var s=f[o],b=f[o+1],u=s+a;if(n===y)e[u]=y(s,r,s,b,a);else{var l=n(b,function(){return y(s,r,s,b,a)});c.notEnumerableProp(l,"__isPromisified__",!0),e[u]=l}}return c.toFastProperties(e),e}e.promisify=function(e,a){if("function"!=typeof e)throw new d("fn must be a function\n\n    See http://goo.gl/916lJJ\n");if(p(e))return e;var t=function(e,a){return y(e,a,void 0,e)}(e,arguments.length<2?r:a);return c.copyDescriptors(e,t,l),t},e.promisifyAll=function(e,a){if("function"!=typeof e&&"object"!=typeof e)throw new d("the target of promisifyAll must be an object or a function\n\n    See http://goo.gl/9ITlV0\n");var t=(a=Object(a)).suffix;"string"!=typeof t&&(t="Async");var r=a.filter;"function"!=typeof r&&(r=u);var n=a.promisifier;if("function"!=typeof n&&(n=y),!c.isIdentifier(t))throw new RangeError("suffix must be a valid identifier\n\n    See http://goo.gl/8FZo5V\n");for(var i=c.inheritedDataKeys(e),f=0;f<i.length;++f){var o=e[i[f]];"constructor"!==i[f]&&c.isClass(o)&&(_(o.prototype,t,r,n),_(o,t,r,n))}return _(e,t,r,n)}}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=t(12),n=t(34).RangeError,i=t(34).AggregateError,f=c.isArray;function o(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function d(e,a){if((0|a)!==a||a<0)return r("expecting a positive integer\n\n    See http://goo.gl/1wAmHx\n");var t=new o(e),c=t.promise();return t.setHowMany(a),t.init(),c}c.inherits(o,a),o.prototype._init=function(){if(this._initialized)if(0!==this._howMany){this._init$(void 0,-5);var e=f(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}else this._resolve([])},o.prototype.init=function(){this._initialized=!0,this._init()},o.prototype.setUnwrap=function(){this._unwrap=!0},o.prototype.howMany=function(){return this._howMany},o.prototype.setHowMany=function(e){this._howMany=e},o.prototype._promiseFulfilled=function(e){this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values))},o.prototype._promiseRejected=function(e){if(this._addRejected(e),this.howMany()>this._canPossiblyFulfill()){for(var a=new i,t=this.length();t<this._values.length;++t)a.push(this._values[t]);this._reject(a)}},o.prototype._fulfilled=function(){return this._totalResolved},o.prototype._rejected=function(){return this._values.length-this.length()},o.prototype._addRejected=function(e){this._values.push(e)},o.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},o.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},o.prototype._getRangeError=function(e){var a="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new n(a)},o.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(e,a){return d(e,a)},e.prototype.some=function(e){return d(this,e)},e._SomePromiseArray=o}},function(e,a,t){"use strict";e.exports=function(e,a){var r=e.PromiseInspection;function c(e){this.constructor$(e)}t(12).inherits(c,a),c.prototype._promiseResolved=function(e,a){this._values[e]=a,++this._totalResolved>=this._length&&this._resolve(this._values)},c.prototype._promiseFulfilled=function(e,a){var t=new r;t._bitField=268435456,t._settledValue=e,this._promiseResolved(a,t)},c.prototype._promiseRejected=function(e,a){var t=new r;t._bitField=134217728,t._settledValue=e,this._promiseResolved(a,t)},e.settle=function(e){return new c(e).promise()},e.prototype.settle=function(){return new c(this).promise()}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n){var i=e._getDomain,f=t(40),o=t(12),d=o.tryCatch,s=o.errorObj;function b(a,t,r,o){this.constructor$(a),this._promise._captureStackTrace(),this._preservedValues=o===n?[]:null,this._zerothIsAccum=void 0===r,this._gotAccum=!1,this._reducingIndex=this._zerothIsAccum?1:0,this._valuesPhase=void 0;var d=c(r,this._promise),s=!1,b=d instanceof e;b&&((d=d._target())._isPending()?d._proxyPromiseArray(this,-1):d._isFulfilled()?(r=d._value(),this._gotAccum=!0):(this._reject(d._reason()),s=!0)),b||this._zerothIsAccum||(this._gotAccum=!0);var l=i();this._callback=null===l?t:l.bind(t),this._accum=r,s||f.invoke(u,this,void 0)}function u(){this._init$(void 0,-5)}function l(e,a,t,c){return"function"!=typeof a?r("fn must be a function\n\n    See http://goo.gl/916lJJ\n"):new b(e,a,t,c).promise()}o.inherits(b,a),b.prototype._init=function(){},b.prototype._resolveEmptyArray=function(){(this._gotAccum||this._zerothIsAccum)&&this._resolve(null!==this._preservedValues?[]:this._accum)},b.prototype._promiseFulfilled=function(a,t){var r=this._values;r[t]=a;var n,i=this.length(),f=this._preservedValues,o=null!==f,b=this._gotAccum,u=this._valuesPhase;if(!u)for(u=this._valuesPhase=new Array(i),n=0;n<i;++n)u[n]=0;if(n=u[t],0===t&&this._zerothIsAccum?(this._accum=a,this._gotAccum=b=!0,u[t]=0===n?1:2):-1===t?(this._accum=a,this._gotAccum=b=!0):0===n?u[t]=1:(u[t]=2,this._accum=a),b){for(var l,p=this._callback,h=this._promise._boundValue(),m=this._reducingIndex;m<i;++m)if(2!==(n=u[m])){if(1!==n)return;if(a=r[m],this._promise._pushContext(),o?(f.push(a),l=d(p).call(h,a,m,i)):l=d(p).call(h,this._accum,a,m,i),this._promise._popContext(),l===s)return this._reject(l.e);var g=c(l,this._promise);if(g instanceof e){if((g=g._target())._isPending())return u[m]=4,g._proxyPromiseArray(this,m);if(!g._isFulfilled())return this._reject(g._reason());l=g._value()}this._reducingIndex=m+1,this._accum=l}else this._reducingIndex=m+1;this._resolve(o?f:this._accum)}},e.prototype.reduce=function(e,a){return l(this,e,a,null)},e.reduce=function(e,a,t,r){return l(e,a,t,r)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(12).isArray,i=function(e){return e.then(function(a){return f(a,e)})};function f(t,f){var o=r(t);if(o instanceof e)return i(o);if(!n(t))return c("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n");var d=new e(a);void 0!==f&&d._propagateFrom(f,5);for(var s=d._fulfill,b=d._reject,u=0,l=t.length;u<l;++u){var p=t[u];(void 0!==p||u in t)&&e.cast(p)._then(s,b,void 0,d,null)}return d}e.race=function(e){return f(e,void 0)},e.prototype.race=function(){return f(this,void 0)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(12),i=n.isObject,f=t(67);function o(e){for(var a=f.keys(e),t=a.length,r=new Array(2*t),c=0;c<t;++c){var n=a[c];r[c]=e[n],r[c+t]=n}this.constructor$(r)}function d(a){var t,n=r(a);return i(n)?(t=n instanceof e?n._then(e.props,void 0,void 0,void 0,void 0):new o(n).promise(),n instanceof e&&t._propagateFrom(n,4),t):c("cannot await properties of a non-object\n\n    See http://goo.gl/OsFKC8\n")}n.inherits(o,a),o.prototype._init=function(){this._init$(void 0,-3)},o.prototype._promiseFulfilled=function(e,a){if(this._values[a]=e,++this._totalResolved>=this._length){for(var t={},r=this.length(),c=0,n=this.length();c<n;++c)t[this._values[c+r]]=this._values[c];this._resolve(t)}},o.prototype._promiseProgressed=function(e,a){this._promise._progress({key:this._values[a+this.length()],value:e})},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(e){return e>>1},e.prototype.props=function(){return d(this)},e.props=function(e){return d(e)}}},function(e,a,t){"use strict";var r=Object.create;if(r){var c=r(null),n=r(null);c[" size"]=n[" size"]=0}e.exports=function(e){var a,r,i=t(12),f=i.canEvaluate,o=i.isIdentifier,d=function(e){return new Function("ensureMethod","                                    \n        return function(obj) {                                               \n            'use strict'                                                     \n            var len = this.length;                                           \n            ensureMethod(obj, 'methodName');                                 \n            switch(len) {                                                    \n                case 1: return obj.methodName(this[0]);                      \n                case 2: return obj.methodName(this[0], this[1]);             \n                case 3: return obj.methodName(this[0], this[1], this[2]);    \n                case 0: return obj.methodName();                             \n                default:                                                     \n                    return obj.methodName.apply(obj, this);                  \n            }                                                                \n        };                                                                   \n        ".replace(/methodName/g,e))(u)},s=function(e){return new Function("obj","                                             \n        'use strict';                                                        \n        return obj.propertyName;                                             \n        ".replace("propertyName",e))},b=function(e,a,t){var r=t[e];if("function"!=typeof r){if(!o(e))return null;if(r=a(e),t[e]=r,t[" size"]++,t[" size"]>512){for(var c=Object.keys(t),n=0;n<256;++n)delete t[c[n]];t[" size"]=c.length-256}}return r};function u(a,t){var r;if(null!=a&&(r=a[t]),"function"!=typeof r){var c="Object "+i.classString(a)+" has no method '"+i.toString(t)+"'";throw new e.TypeError(c)}return r}function l(e){return u(e,this.pop()).apply(e,this)}function p(e){return e[this]}function h(e){var a=+this;return a<0&&(a=Math.max(0,a+e.length)),e[a]}a=function(e){return b(e,d,c)},r=function(e){return b(e,s,n)},e.prototype.call=function(e){for(var t=arguments.length,r=new Array(t-1),c=1;c<t;++c)r[c-1]=arguments[c];if(f){var n=a(e);if(null!==n)return this._then(n,void 0,void 0,r,void 0)}return r.push(e),this._then(l,void 0,void 0,r,void 0)},e.prototype.get=function(e){var a;if("number"==typeof e)a=h;else if(f){var t=r(e);a=null!==t?t:p}else a=p;return this._then(a,void 0,void 0,e,void 0)}}},function(e,a,t){"use strict";e.exports=function(e){var a=t(12),r=t(40),c=a.tryCatch,n=a.errorObj;function i(e,t){if(!a.isArray(e))return f.call(this,e,t);var i=c(t).apply(this._boundValue(),[null].concat(e));i===n&&r.throwLater(i.e)}function f(e,a){var t=this._boundValue(),i=void 0===e?c(a).call(t,null):c(a).call(t,null,e);i===n&&r.throwLater(i.e)}function o(e,a){if(!e){var t=this._target()._getCarriedStackTrace();t.cause=e,e=t}var i=c(a).call(this._boundValue(),e);i===n&&r.throwLater(i.e)}e.prototype.asCallback=e.prototype.nodeify=function(e,a){if("function"==typeof e){var t=f;void 0!==a&&Object(a).spread&&(t=i),this._then(t,o,void 0,this,e)}return this}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(34).TypeError,i=t(12),f=i.errorObj,o=i.tryCatch,d=[];function s(a,t,c,n){(this._promise=new e(r))._captureStackTrace(),this._stack=n,this._generatorFunction=a,this._receiver=t,this._generator=void 0,this._yieldHandlers="function"==typeof c?[c].concat(d):d}s.prototype.promise=function(){return this._promise},s.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._next(void 0)},s.prototype._continue=function(a){if(a===f)return this._promise._rejectCallback(a.e,!1,!0);var t=a.value;if(!0===a.done)this._promise._resolveCallback(t);else{var r=c(t,this._promise);if(!(r instanceof e)&&null===(r=function(a,t,r){for(var n=0;n<t.length;++n){r._pushContext();var i=o(t[n])(a);if(r._popContext(),i===f){r._pushContext();var d=e.reject(f.e);return r._popContext(),d}var s=c(i,r);if(s instanceof e)return s}return null}(r,this._yieldHandlers,this._promise)))return void this._throw(new n("A value %s was yielded that could not be treated as a promise\n\n    See http://goo.gl/4Y4pDk\n\n".replace("%s",t)+"From coroutine:\n"+this._stack.split("\n").slice(1,-7).join("\n")));r._then(this._next,this._throw,void 0,this,null)}},s.prototype._throw=function(e){this._promise._attachExtraTrace(e),this._promise._pushContext();var a=o(this._generator.throw).call(this._generator,e);this._promise._popContext(),this._continue(a)},s.prototype._next=function(e){this._promise._pushContext();var a=o(this._generator.next).call(this._generator,e);this._promise._popContext(),this._continue(a)},e.coroutine=function(e,a){if("function"!=typeof e)throw new n("generatorFunction must be a function\n\n    See http://goo.gl/6Vqhm0\n");var t=Object(a).yieldHandler,r=s,c=(new Error).stack;return function(){var a=e.apply(this,arguments),n=new r(void 0,void 0,t,c);return n._generator=a,n._next(void 0),n.promise()}},e.coroutine.addYieldHandler=function(e){if("function"!=typeof e)throw new n("fn must be a function\n\n    See http://goo.gl/916lJJ\n");d.push(e)},e.spawn=function(t){if("function"!=typeof t)return a("generatorFunction must be a function\n\n    See http://goo.gl/6Vqhm0\n");var r=new s(t,this),c=r.promise();return r._run(e.spawn),c}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(34).TypeError,i=t(12).inherits,f=e.PromiseInspection;function o(a){for(var t=a.length,r=0;r<t;++r){var c=a[r];if(c.isRejected())return e.reject(c.error());a[r]=c._settledValue}return a}function d(e){setTimeout(function(){throw e},0)}function s(a,t){var c=0,n=a.length,i=e.defer();return function f(){if(c>=n)return i.resolve();var o=function(e){var a=r(e);return a!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&a._setDisposable(e._getDisposer()),a}(a[c++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(t),a.promise)}catch(e){return d(e)}if(o instanceof e)return o._then(f,d,null,null,null)}f()}(),i.promise}function b(e){var a=new f;return a._settledValue=e,a._bitField=268435456,s(this,a).thenReturn(e)}function u(e){var a=new f;return a._settledValue=e,a._bitField=134217728,s(this,a).thenThrow(e)}function l(e,a,t){this._data=e,this._promise=a,this._context=t}function p(e,a,t){this.constructor$(e,a,t)}function h(e){return l.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}l.prototype.data=function(){return this._data},l.prototype.promise=function(){return this._promise},l.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():null},l.prototype.tryDispose=function(e){var a=this.resource(),t=this._context;void 0!==t&&t._pushContext();var r=null!==a?this.doDispose(a,e):null;return void 0!==t&&t._popContext(),this._promise._unsetDisposable(),this._data=null,r},l.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},i(p,l),p.prototype.doDispose=function(e,a){return this.data().call(e,e,a)},e.using=function(){var t=arguments.length;if(t<2)return a("you must pass at least 2 arguments to Promise.using");var c,n=arguments[t-1];if("function"!=typeof n)return a("fn must be a function\n\n    See http://goo.gl/916lJJ\n");var i=!0;2===t&&Array.isArray(arguments[0])?(t=(c=arguments[0]).length,i=!1):(c=arguments,t--);for(var f=new Array(t),d=0;d<t;++d){var s=c[d];if(l.isDisposer(s)){var p=s;(s=s.promise())._setDisposable(p)}else{var m=r(s);m instanceof e&&(s=m._then(h,null,null,{resources:f,index:d},void 0))}f[d]=s}var g=e.settle(f).then(o).then(function(e){var a;g._pushContext();try{a=i?n.apply(void 0,e):n.call(void 0,e)}finally{g._popContext()}return a})._then(b,u,void 0,f,void 0);return f.promise=g,g},e.prototype._setDisposable=function(e){this._bitField=262144|this._bitField,this._disposer=e},e.prototype._isDisposable=function(){return(262144&this._bitField)>0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-262145&this._bitField,this._disposer=void 0},e.prototype.disposer=function(e){if("function"==typeof e)return new p(e,this,c());throw new n}}},function(e,a,t){"use strict";e.exports=function(e){var a=t(34),r=t(40),c=a.CancellationError;e.prototype._cancel=function(e){if(!this.isCancellable())return this;for(var a,t=this;void 0!==(a=t._cancellationParent)&&a.isCancellable();)t=a;this._unsetCancellable(),t._target()._rejectCallback(e,!1,!0)},e.prototype.cancel=function(e){return this.isCancellable()?(void 0===e&&(e=new c),r.invokeLater(this._cancel,this,e),this):this},e.prototype.cancellable=function(){return this._cancellable()?this:(r.enableTrampoline(),this._setCancellable(),this._cancellationParent=void 0,this)},e.prototype.uncancellable=function(){var e=this.then();return e._unsetCancellable(),e},e.prototype.fork=function(e,a,t){var r=this._then(e,a,t,void 0,void 0);return r._setCancellable(),r._cancellationParent=void 0,r}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n){var i=e._getDomain,f=t(40),o=t(12),d=o.tryCatch,s=o.errorObj,b={},u=[];function l(e,a,t,r){this.constructor$(e),this._promise._captureStackTrace();var c=i();this._callback=null===c?a:c.bind(a),this._preservedValues=r===n?new Array(this.length()):null,this._limit=t,this._inFlight=0,this._queue=t>=1?[]:u,f.invoke(p,this,void 0)}function p(){this._init$(void 0,-2)}function h(e,a,t,r){var c="object"==typeof t&&null!==t?t.concurrency:0;return new l(e,a,c="number"==typeof c&&isFinite(c)&&c>=1?c:0,r)}o.inherits(l,a),l.prototype._init=function(){},l.prototype._promiseFulfilled=function(a,t){var r=this._values,n=this.length(),i=this._preservedValues,f=this._limit;if(r[t]===b){if(r[t]=a,f>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return}else{if(f>=1&&this._inFlight>=f)return r[t]=a,void this._queue.push(t);null!==i&&(i[t]=a);var o=this._callback,u=this._promise._boundValue();this._promise._pushContext();var l=d(o).call(u,a,t,n);if(this._promise._popContext(),l===s)return this._reject(l.e);var p=c(l,this._promise);if(p instanceof e){if((p=p._target())._isPending())return f>=1&&this._inFlight++,r[t]=b,p._proxyPromiseArray(this,t);if(!p._isFulfilled())return this._reject(p._reason());l=p._value()}r[t]=l}++this._totalResolved>=n&&(null!==i?this._filter(r,i):this._resolve(r))},l.prototype._drainQueue=function(){for(var e=this._queue,a=this._limit,t=this._values;e.length>0&&this._inFlight<a;){if(this._isResolved())return;var r=e.pop();this._promiseFulfilled(t[r],r)}},l.prototype._filter=function(e,a){for(var t=a.length,r=new Array(t),c=0,n=0;n<t;++n)e[n]&&(r[c++]=a[n]);r.length=c,this._resolve(r)},l.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(e,a){return"function"!=typeof e?r("fn must be a function\n\n    See http://goo.gl/916lJJ\n"):h(this,e,a,null).promise()},e.map=function(e,a,t,c){return"function"!=typeof a?r("fn must be a function\n\n    See http://goo.gl/916lJJ\n"):h(e,a,t,c).promise()}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(12),i=n.canEvaluate,f=n.tryCatch,o=n.errorObj;if(i){for(var d=function(e){return new Function("value","holder","                             \n            'use strict';                                                    \n            holder.pIndex = value;                                           \n            holder.checkFulfillment(this);                                   \n            ".replace(/Index/g,e))},s=function(e){for(var a=[],t=1;t<=e;++t)a.push("holder.p"+t);return new Function("holder","                                      \n            'use strict';                                                    \n            var callback = holder.fn;                                        \n            return callback(values);                                         \n            ".replace(/values/g,a.join(", ")))},b=[],u=[void 0],l=1;l<=5;++l)b.push(d(l)),u.push(s(l));var p=function(e,a){this.p1=this.p2=this.p3=this.p4=this.p5=null,this.fn=a,this.total=e,this.now=0};p.prototype.callers=u,p.prototype.checkFulfillment=function(e){var a=this.now;a++;var t=this.total;if(a>=t){var r=this.callers[t];e._pushContext();var c=f(r)(this);e._popContext(),c===o?e._rejectCallback(c.e,!1,!0):e._resolveCallback(c)}else this.now=a};var h=function(e){this._reject(e)}}e.join=function(){var t,n=arguments.length-1;if(n>0&&"function"==typeof arguments[n]&&(t=arguments[n],n<6&&i)){(g=new e(c))._captureStackTrace();for(var f=new p(n,t),o=b,d=0;d<n;++d){var s=r(arguments[d],g);s instanceof e?(s=s._target())._isPending()?s._then(o[d],h,void 0,g,f):s._isFulfilled()?o[d].call(g,s._value(),f):g._reject(s._reason()):o[d].call(g,s,f)}return g}for(var u=arguments.length,l=new Array(u),m=0;m<u;++m)l[m]=arguments[m];t&&l.pop();var g=new a(l).promise();return void 0!==t?g.spread(t):g}}},function(e,a,t){"use strict";e.exports=function(e){function a(e){void 0!==e?(e=e._target(),this._bitField=e._bitField,this._settledValue=e._settledValue):(this._bitField=0,this._settledValue=void 0)}a.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/hc1DLj\n");return this._settledValue},a.prototype.error=a.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/hPuiwB\n");return this._settledValue},a.prototype.isFulfilled=e.prototype._isFulfilled=function(){return(268435456&this._bitField)>0},a.prototype.isRejected=e.prototype._isRejected=function(){return(134217728&this._bitField)>0},a.prototype.isPending=e.prototype._isPending=function(){return 0==(402653184&this._bitField)},a.prototype.isResolved=e.prototype._isResolved=function(){return(402653184&this._bitField)>0},e.prototype.isPending=function(){return this._target()._isPending()},e.prototype.isRejected=function(){return this._target()._isRejected()},e.prototype.isFulfilled=function(){return this._target()._isFulfilled()},e.prototype.isResolved=function(){return this._target()._isResolved()},e.prototype._value=function(){return this._settledValue},e.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue},e.prototype.value=function(){var e=this._target();if(!e.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/hc1DLj\n");return e._settledValue},e.prototype.reason=function(){var e=this._target();if(!e.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/hPuiwB\n");return e._unsetRejectionIsUnhandled(),e._settledValue},e.PromiseInspection=a}},function(e,a,t){"use strict";var r=t(12).isPrimitive;e.exports=function(e){var a=function(){return this},t=function(){throw this},c=function(){},n=function(){throw void 0},i=function(e,a){return 1===a?function(){throw e}:2===a?function(){return e}:void 0};e.prototype.return=e.prototype.thenReturn=function(t){return void 0===t?this.then(c):r(t)?this._then(i(t,2),void 0,void 0,void 0,void 0):(t instanceof e&&t._ignoreRejections(),this._then(a,void 0,void 0,t,void 0))},e.prototype.throw=e.prototype.thenThrow=function(e){return void 0===e?this.then(n):r(e)?this._then(i(e,1),void 0,void 0,void 0,void 0):this._then(t,void 0,void 0,e,void 0)}}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=t(12),n=c.isPrimitive,i=c.thrower;function f(){return this}function o(){throw this}function d(e,a,t){var r;return r=n(a)?t?function(e){return function(){return e}}(a):function(e){return function(){throw e}}(a):t?f:o,e._then(r,i,void 0,a,void 0)}function s(t){var c=this.promise,n=this.handler,i=c._isBound()?n.call(c._boundValue()):n();if(void 0!==i){var f=r(i,c);if(f instanceof e)return d(f=f._target(),t,c.isFulfilled())}return c.isRejected()?(a.e=t,a):t}function b(a){var t=this.promise,c=this.handler,n=t._isBound()?c.call(t._boundValue(),a):c(a);if(void 0!==n){var i=r(n,t);if(i instanceof e)return d(i=i._target(),a,!0)}return a}e.prototype._passThroughHandler=function(e,a){if("function"!=typeof e)return this.then();var t={promise:this,handler:e};return this._then(a?s:b,a?s:void 0,void 0,t,void 0)},e.prototype.lastly=e.prototype.finally=function(e){return this._passThroughHandler(e,!0)},e.prototype.tap=function(e){return this._passThroughHandler(e,!1)}}},function(e,a,t){"use strict";e.exports=function(e,a,t){var r=function(e,a){this._reject(a)},c=function(e,a){a.promiseRejectionQueued=!0,a.bindingPromise._then(r,r,null,this,e)},n=function(e,a){this._isPending()&&this._resolveCallback(a.target)},i=function(e,a){a.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(r){var f=t(r),o=new e(a);o._propagateFrom(this,1);var d=this._target();if(o._setBoundTo(f),f instanceof e){var s={promiseRejectionQueued:!1,promise:o,target:d,bindingPromise:f};d._then(a,c,o._progress,o,s),f._then(n,i,o._progress,o,s)}else o._resolveCallback(d);return o},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=131072|this._bitField,this._boundTo=e):this._bitField=-131073&this._bitField},e.prototype._isBound=function(){return 131072==(131072&this._bitField)},e.bind=function(r,c){var n=t(r),i=new e(a);return i._setBoundTo(n),n instanceof e?n._then(function(){i._resolveCallback(c)},i._reject,i._progress,i,null):i._resolveCallback(c),i}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(12),i=n.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("fn must be a function\n\n    See http://goo.gl/916lJJ\n");return function(){var r=new e(a);r._captureStackTrace(),r._pushContext();var c=i(t).apply(this,arguments);return r._popContext(),r._resolveFromSyncValue(c),r}},e.attempt=e.try=function(t,r,f){if("function"!=typeof t)return c("fn must be a function\n\n    See http://goo.gl/916lJJ\n");var o=new e(a);o._captureStackTrace(),o._pushContext();var d=n.isArray(r)?i(t).apply(f,r):i(t).call(f,r);return o._popContext(),o._resolveFromSyncValue(d),o},e.prototype._resolveFromSyncValue=function(e){e===n.errorObj?this._rejectCallback(e.e,!1,!0):this._resolveCallback(e,!0)}}},function(e,a,t){"use strict";e.exports=function(e,a){var r=t(12),c=t(40),n=r.tryCatch,i=r.errorObj;e.prototype.progressed=function(e){return this._then(void 0,void 0,e,void 0,void 0)},e.prototype._progress=function(e){this._isFollowingOrFulfilledOrRejected()||this._target()._progressUnchecked(e)},e.prototype._progressHandlerAt=function(e){return 0===e?this._progressHandler0:this[(e<<2)+e-5+2]},e.prototype._doProgressWith=function(a){var t=a.value,c=a.handler,f=a.promise,o=a.receiver,d=n(c).call(o,t);if(d===i){if(null!=d.e&&"StopProgressPropagation"!==d.e.name){var s=r.canAttachTrace(d.e)?d.e:new Error(r.toString(d.e));f._attachExtraTrace(s),f._progress(d.e)}}else d instanceof e?d._then(f._progress,null,null,f,void 0):f._progress(d)},e.prototype._progressUnchecked=function(t){for(var r=this._length(),n=this._progress,i=0;i<r;i++){var f=this._progressHandlerAt(i),o=this._promiseAt(i);if(o instanceof e)"function"==typeof f?c.invoke(this._doProgressWith,this,{handler:f,promise:o,receiver:this._receiverAt(i),value:t}):c.invoke(n,o,t);else{var d=this._receiverAt(i);"function"==typeof f?f.call(d,t,o):d instanceof a&&!d._isResolved()&&d._promiseProgressed(t,o)}}}}},function(e,a,t){"use strict";e.exports=function(e){var a=t(12),r=t(34),c=a.tryCatch,n=a.errorObj,i=t(67).keys,f=r.TypeError;function o(e,a,t){this._instances=e,this._callback=a,this._promise=t}function d(e,a){var t={},r=c(e).call(t,a);return r===n?r:i(t).length?(n.e=new f("Catch filter must inherit from Error or be a simple predicate function\n\n    See http://goo.gl/o84o68\n"),n):r}return o.prototype.doFilter=function(a){for(var t=this._callback,r=this._promise._boundValue(),i=0,f=this._instances.length;i<f;++i){var o=this._instances[i],s=o===Error||null!=o&&o.prototype instanceof Error;if(s&&a instanceof o)return(b=c(t).call(r,a))===n?(e.e=b.e,e):b;if("function"==typeof o&&!s){var b,u=d(o,a);if(u===n){a=n.e;break}if(u)return(b=c(t).call(r,a))===n?(e.e=b.e,e):b}}return e.e=a,e},o}},function(e,a,t){"use strict";e.exports=function(e,a,t){var r=[];function c(){this._trace=new a(n())}function n(){var e=r.length-1;if(e>=0)return r[e]}return c.prototype._pushContext=function(){t()&&void 0!==this._trace&&r.push(this._trace)},c.prototype._popContext=function(){t()&&void 0!==this._trace&&r.pop()},e.prototype._peekContext=n,e.prototype._pushContext=c.prototype._pushContext,e.prototype._popContext=c.prototype._popContext,function(){if(t())return new c}}},function(e,a,t){"use strict";e.exports=function(e,a){var r,c,n=e._getDomain,i=t(40),f=t(34).Warning,o=t(12),d=o.canAttachTrace,s=o.isNode&&(!!process.env.BLUEBIRD_DEBUG||!1);return o.isNode&&0==process.env.BLUEBIRD_DEBUG&&(s=!1),s&&i.disableTrampolineIfNecessary(),e.prototype._ignoreRejections=function(){this._unsetRejectionIsUnhandled(),this._bitField=16777216|this._bitField},e.prototype._ensurePossibleRejectionHandled=function(){0==(16777216&this._bitField)&&(this._setRejectionIsUnhandled(),i.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){a.fireRejectionEvent("rejectionHandled",r,void 0,this)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._getCarriedStackTrace()||this._settledValue;this._setUnhandledRejectionIsNotified(),a.fireRejectionEvent("unhandledRejection",c,e,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=524288|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-524289&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(524288&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=2097152|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-2097153&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(2097152&this._bitField)>0},e.prototype._setCarriedStackTrace=function(e){this._bitField=1048576|this._bitField,this._fulfillmentHandler0=e},e.prototype._isCarryingStackTrace=function(){return(1048576&this._bitField)>0},e.prototype._getCarriedStackTrace=function(){return this._isCarryingStackTrace()?this._fulfillmentHandler0:void 0},e.prototype._captureStackTrace=function(){return s&&(this._trace=new a(this._peekContext())),this},e.prototype._attachExtraTrace=function(e,t){if(s&&d(e)){var r=this._trace;if(void 0!==r&&t&&(r=r._parent),void 0!==r)r.attachExtraTrace(e);else if(!e.__stackCleaned__){var c=a.parseStackAndMessage(e);o.notEnumerableProp(e,"stack",c.message+"\n"+c.stack.join("\n")),o.notEnumerableProp(e,"__stackCleaned__",!0)}}},e.prototype._warn=function(e){var t=new f(e),r=this._peekContext();if(r)r.attachExtraTrace(t);else{var c=a.parseStackAndMessage(t);t.stack=c.message+"\n"+c.stack.join("\n")}a.formatAndLogError(t,"")},e.onPossiblyUnhandledRejection=function(e){var a=n();c="function"==typeof e?null===a?e:a.bind(e):void 0},e.onUnhandledRejectionHandled=function(e){var a=n();r="function"==typeof e?null===a?e:a.bind(e):void 0},e.longStackTraces=function(){if(i.haveItemsQueued()&&!1===s)throw new Error("cannot enable long stack traces after promises have been created\n\n    See http://goo.gl/DT1qyG\n");(s=a.isSupported())&&i.disableTrampolineIfNecessary()},e.hasLongStackTraces=function(){return s&&a.isSupported()},a.isSupported()||(e.longStackTraces=function(){},s=!1),function(){return s}}},function(e,a,t){"use strict";e.exports=function(){var e,a=t(40),r=t(12),c=/[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/,n=null,i=null,f=!1;function o(e){this._parent=e;var a=this._length=1+(void 0===e?0:e._length);h(this,o),a>32&&this.uncycle()}function d(e){for(var a=[],t=0;t<e.length;++t){var r=e[t],c=n.test(r)||"    (No stack trace)"===r,i=c&&b(r);c&&!i&&(f&&" "!==r.charAt(0)&&(r="    "+r),a.push(r))}return a}function s(e){var a;if("function"==typeof e)a="[function "+(e.name||"anonymous")+"]";else{a=e.toString();if(/\[object [a-zA-Z0-9$_]+\]/.test(a))try{a=JSON.stringify(e)}catch(e){}0===a.length&&(a="(empty array)")}return"(<"+function(e){if(e.length<41)return e;return e.substr(0,38)+"..."}(a)+">, no stack trace)"}r.inherits(o,Error),o.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var a=[],t={},r=0,c=this;void 0!==c;++r)a.push(c),c=c._parent;for(r=(e=this._length=r)-1;r>=0;--r){var n=a[r].stack;void 0===t[n]&&(t[n]=r)}for(r=0;r<e;++r){var i=t[a[r].stack];if(void 0!==i&&i!==r){i>0&&(a[i-1]._parent=void 0,a[i-1]._length=1),a[r]._parent=void 0,a[r]._length=1;var f=r>0?a[r-1]:this;i<e-1?(f._parent=a[i+1],f._parent.uncycle(),f._length=f._parent._length+1):(f._parent=void 0,f._length=1);for(var o=f._length+1,d=r-2;d>=0;--d)a[d]._length=o,o++;return}}}},o.prototype.parent=function(){return this._parent},o.prototype.hasParent=function(){return void 0!==this._parent},o.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var a=o.parseStackAndMessage(e),t=a.message,c=[a.stack],n=this;void 0!==n;)c.push(d(n.stack.split("\n"))),n=n._parent;!function(e){for(var a=e[0],t=1;t<e.length;++t){for(var r=e[t],c=a.length-1,n=a[c],i=-1,f=r.length-1;f>=0;--f)if(r[f]===n){i=f;break}for(var f=i;f>=0;--f){var o=r[f];if(a[c]!==o)break;a.pop(),c--}a=r}}(c),function(e){for(var a=0;a<e.length;++a)(0===e[a].length||a+1<e.length&&e[a][0]===e[a+1][0])&&(e.splice(a,1),a--)}(c),r.notEnumerableProp(e,"stack",function(e,a){for(var t=0;t<a.length-1;++t)a[t].push("From previous event:"),a[t]=a[t].join("\n");t<a.length&&(a[t]=a[t].join("\n"));return e+"\n"+a.join("\n")}(t,c)),r.notEnumerableProp(e,"__stackCleaned__",!0)}},o.parseStackAndMessage=function(e){var a=e.stack;return{message:e.toString(),stack:d(a="string"==typeof a&&a.length>0?function(e){for(var a=e.stack.replace(/\s+$/g,"").split("\n"),t=0;t<a.length;++t){var r=a[t];if("    (No stack trace)"===r||n.test(r))break}return t>0&&(a=a.slice(t)),a}(e):["    (No stack trace)"])}},o.formatAndLogError=function(a,t){if("undefined"!=typeof console){var r;if("object"==typeof a||"function"==typeof a){var c=a.stack;r=t+i(c,a)}else r=t+String(a);"function"==typeof e?e(r):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(r)}},o.unhandledRejection=function(e){o.formatAndLogError(e,"^--- With additional stack trace: ")},o.isSupported=function(){return"function"==typeof h},o.fireRejectionEvent=function(e,t,r,c){var n=!1;try{"function"==typeof t&&(n=!0,"rejectionHandled"===e?t(c):t(r,c))}catch(e){a.throwLater(e)}var i=!1;try{i=m(e,r,c)}catch(e){i=!0,a.throwLater(e)}var f=!1;if(p)try{f=p(e.toLowerCase(),{reason:r,promise:c})}catch(e){f=!0,a.throwLater(e)}i||n||f||"unhandledRejection"!==e||o.formatAndLogError(r,"Unhandled rejection ")};var b=function(){return!1},u=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;function l(e){var a=e.match(u);if(a)return{fileName:a[1],line:parseInt(a[2],10)}}o.setBounds=function(e,a){if(o.isSupported()){for(var t,r,n=e.stack.split("\n"),i=a.stack.split("\n"),f=-1,d=-1,s=0;s<n.length;++s){if(u=l(n[s])){t=u.fileName,f=u.line;break}}for(s=0;s<i.length;++s){var u;if(u=l(i[s])){r=u.fileName,d=u.line;break}}f<0||d<0||!t||!r||t!==r||f>=d||(b=function(e){if(c.test(e))return!0;var a=l(e);return!!(a&&a.fileName===t&&f<=a.line&&a.line<=d)})}};var p,h=function(){var e=/^\s*at\s*/,a=function(e,a){return"string"==typeof e?e:void 0!==a.name&&void 0!==a.message?a.toString():s(a)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit=Error.stackTraceLimit+6,n=e,i=a;var t=Error.captureStackTrace;return b=function(e){return c.test(e)},function(e,a){Error.stackTraceLimit=Error.stackTraceLimit+6,t(e,a),Error.stackTraceLimit=Error.stackTraceLimit-6}}var r,o=new Error;if("string"==typeof o.stack&&o.stack.split("\n")[0].indexOf("stackDetection@")>=0)return n=/@/,i=a,f=!0,function(e){e.stack=(new Error).stack};try{throw new Error}catch(e){r="stack"in e}return"stack"in o||!r||"number"!=typeof Error.stackTraceLimit?(i=function(e,a){return"string"==typeof e?e:"object"!=typeof a&&"function"!=typeof a||void 0===a.name||void 0===a.message?s(a):a.toString()},null):(n=e,i=a,function(e){Error.stackTraceLimit=Error.stackTraceLimit+6;try{throw new Error}catch(a){e.stack=a.stack}Error.stackTraceLimit=Error.stackTraceLimit-6})}(),m=function(){if(r.isNode)return function(e,a,t){return"rejectionHandled"===e?process.emit(e,t):process.emit(e,a,t)};var e=!1,a=!0;try{var t=new self.CustomEvent("test");e=t instanceof CustomEvent}catch(e){}if(!e)try{var c=document.createEvent("CustomEvent");c.initCustomEvent("testingtheevent",!1,!0,{}),self.dispatchEvent(c)}catch(e){a=!1}a&&(p=function(a,t){var r;return e?r=new self.CustomEvent(a,{detail:t,bubbles:!1,cancelable:!0}):self.dispatchEvent&&(r=document.createEvent("CustomEvent")).initCustomEvent(a,!1,!0,t),!!r&&!self.dispatchEvent(r)});var n={};return n.unhandledRejection="onunhandledRejection".toLowerCase(),n.rejectionHandled="onrejectionHandled".toLowerCase(),function(e,a,t){var r=n[e],c=self[r];return!!c&&("rejectionHandled"===e?c.call(self,t):c.call(self,a,t),!0)}}();return"undefined"!=typeof console&&void 0!==console.warn&&(e=function(e){console.warn(e)},r.isNode&&process.stderr.isTTY?e=function(e){process.stderr.write("[31m"+e+"[39m\n")}:r.isNode||"string"!=typeof(new Error).stack||(e=function(e){console.warn("%c"+e,"color: red")})),o}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(12).isArray;function i(t){var r,c=this._promise=new e(a);t instanceof e&&(r=t,c._propagateFrom(r,5)),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}return i.prototype.length=function(){return this._length},i.prototype.promise=function(){return this._promise},i.prototype._init=function a(t,i){var f=r(this._values,this._promise);if(f instanceof e){if(f=f._target(),this._values=f,!f._isFulfilled())return f._isPending()?void f._then(a,this._reject,void 0,this,i):void this._reject(f._reason());if(f=f._value(),!n(f)){var o=new e.TypeError("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n");return void this.__hardReject__(o)}}else if(!n(f))return void this._promise._reject(c("expecting an array, a promise or a thenable\n\n    See http://goo.gl/s8MMhc\n")._reason());if(0!==f.length){var d=this.getActualLength(f.length);this._length=d,this._values=this.shouldCopyValues()?new Array(d):this._values;for(var s=this._promise,b=0;b<d;++b){var u=this._isResolved(),l=r(f[b],s);l instanceof e?(l=l._target(),u?l._ignoreRejections():l._isPending()?l._proxyPromiseArray(this,b):l._isFulfilled()?this._promiseFulfilled(l._value(),b):this._promiseRejected(l._reason(),b)):u||this._promiseFulfilled(l,b)}}else-5===i?this._resolveEmptyArray():this._resolve(function(e){switch(e){case-2:return[];case-3:return{}}}(i))},i.prototype._isResolved=function(){return null===this._values},i.prototype._resolve=function(e){this._values=null,this._promise._fulfill(e)},i.prototype.__hardReject__=i.prototype._reject=function(e){this._values=null,this._promise._rejectCallback(e,!1,!0)},i.prototype._promiseProgressed=function(e,a){this._promise._progress({index:a,value:e})},i.prototype._promiseFulfilled=function(e,a){this._values[a]=e,++this._totalResolved>=this._length&&this._resolve(this._values)},i.prototype._promiseRejected=function(e,a){this._totalResolved++,this._reject(e)},i.prototype.shouldCopyValues=function(){return!0},i.prototype.getActualLength=function(e){return e},i}},function(e,a,t){"use strict";e.exports=function(e,a){var r=t(12),c=r.errorObj,n=r.isObject;function i(e){return e.then}var f={}.hasOwnProperty;return function(t,o){if(n(t)){if(t instanceof e)return t;if(function(e){return f.call(e,"_promise0")}(t)){var d=new e(a);return t._then(d._fulfillUnchecked,d._rejectUncheckedCheckError,d._progressUnchecked,d,null),d}var s=r.tryCatch(i)(t);if(s===c)return o&&o._pushContext(),d=e.reject(s.e),o&&o._popContext(),d;if("function"==typeof s)return function(t,n,i){var f=new e(a),o=f;i&&i._pushContext(),f._captureStackTrace(),i&&i._popContext();var d=!0,s=r.tryCatch(n).call(t,function(e){f&&(f._resolveCallback(e),f=null)},function(e){f&&(f._rejectCallback(e,d,!0),f=null)},function(e){f&&"function"==typeof f._progress&&f._progress(e)});return d=!1,f&&s===c&&(f._rejectCallback(s.e,!0,!0),f=null),o}(t,s,o)}return t}}},function(e,a,t){"use strict";function r(e){this._capacity=e,this._length=0,this._front=0}r.prototype._willBeOverCapacity=function(e){return this._capacity<e},r.prototype._pushOne=function(e){var a=this.length();this._checkCapacity(a+1),this[this._front+a&this._capacity-1]=e,this._length=a+1},r.prototype._unshiftOne=function(e){var a=this._capacity;this._checkCapacity(this.length()+1);var t=(this._front-1&a-1^a)-a;this[t]=e,this._front=t,this._length=this.length()+1},r.prototype.unshift=function(e,a,t){this._unshiftOne(t),this._unshiftOne(a),this._unshiftOne(e)},r.prototype.push=function(e,a,t){var r=this.length()+3;if(this._willBeOverCapacity(r))return this._pushOne(e),this._pushOne(a),void this._pushOne(t);var c=this._front+r-3;this._checkCapacity(r);var n=this._capacity-1;this[c+0&n]=e,this[c+1&n]=a,this[c+2&n]=t,this._length=r},r.prototype.shift=function(){var e=this._front,a=this[e];return this[e]=void 0,this._front=e+1&this._capacity-1,this._length--,a},r.prototype.length=function(){return this._length},r.prototype._checkCapacity=function(e){this._capacity<e&&this._resizeTo(this._capacity<<1)},r.prototype._resizeTo=function(e){var a=this._capacity;this._capacity=e,function(e,a,t,r,c){for(var n=0;n<c;++n)t[n+r]=e[n+a],e[n+a]=void 0}(this,0,this,a,this._front+this._length&a-1)},e.exports=r},function(e,a,t){"use strict";var r,c=t(12);if(c.isNode&&"undefined"==typeof MutationObserver){var n=global.setImmediate,i=process.nextTick;r=c.isRecentNode?function(e){n.call(global,e)}:function(e){i.call(process,e)}}else"undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&window.navigator.standalone?r="undefined"!=typeof setImmediate?function(e){setImmediate(e)}:"undefined"!=typeof setTimeout?function(e){setTimeout(e,0)}:function(){throw new Error("No async scheduler available\n\n    See http://goo.gl/m3OTXk\n")}:(r=function(e){var a=document.createElement("div");return new MutationObserver(e).observe(a,{attributes:!0}),function(){a.classList.toggle("foo")}}).isStatic=!0;e.exports=r},function(e,a,t){"use strict";e.exports=function(){var a,r=function(){return new s("circular promise resolution chain\n\n    See http://goo.gl/LhFpo0\n")},c=function(){return new x.PromiseInspection(this._target())},n=function(e){return x.reject(new s(e))},i=t(12);a=i.isNode?function(){var e=process.domain;return void 0===e&&(e=null),e}:function(){return null},i.notEnumerableProp(x,"_getDomain",a);var f={},o=t(40),d=t(34),s=x.TypeError=d.TypeError;x.RangeError=d.RangeError,x.CancellationError=d.CancellationError,x.TimeoutError=d.TimeoutError,x.OperationalError=d.OperationalError,x.RejectionError=d.OperationalError,x.AggregateError=d.AggregateError;var b=function(){},u={},l={e:null},p=t(496)(x,b),h=t(495)(x,b,p,n),m=t(494)(),g=t(493)(x,m),v=t(492)(x,m,g),y=t(491)(l),_=t(212),w=_._nodebackForPromise,A=i.errorObj,k=i.tryCatch;function x(e){if("function"!=typeof e)throw new s("the promise constructor requires a resolver function\n\n    See http://goo.gl/EC22Yn\n");if(this.constructor!==x)throw new s("the promise constructor cannot be invoked directly\n\n    See http://goo.gl/KsIlge\n");this._bitField=0,this._fulfillmentHandler0=void 0,this._rejectionHandler0=void 0,this._progressHandler0=void 0,this._promise0=void 0,this._receiver0=void 0,this._settledValue=void 0,e!==b&&this._resolveFromResolver(e)}function E(e){var a=new x(b);a._fulfillmentHandler0=e,a._rejectionHandler0=e,a._progressHandler0=e,a._promise0=e,a._receiver0=e,a._settledValue=e}return x.prototype.toString=function(){return"[object Promise]"},x.prototype.caught=x.prototype.catch=function(e){var a=arguments.length;if(a>1){var t,r=new Array(a-1),c=0;for(t=0;t<a-1;++t){var n=arguments[t];if("function"!=typeof n)return x.reject(new s("Catch filter must inherit from Error or be a simple predicate function\n\n    See http://goo.gl/o84o68\n"));r[c++]=n}r.length=c,e=arguments[t];var i=new y(r,e,this);return this._then(void 0,i.doFilter,void 0,i,void 0)}return this._then(void 0,e,void 0,void 0,void 0)},x.prototype.reflect=function(){return this._then(c,c,void 0,this,void 0)},x.prototype.then=function(e,a,t){if(g()&&arguments.length>0&&"function"!=typeof e&&"function"!=typeof a){var r=".then() only accepts functions but was passed: "+i.classString(e);arguments.length>1&&(r+=", "+i.classString(a)),this._warn(r)}return this._then(e,a,t,void 0,void 0)},x.prototype.done=function(e,a,t){this._then(e,a,t,void 0,void 0)._setIsFinal()},x.prototype.spread=function(e,a){return this.all()._then(e,a,void 0,u,void 0)},x.prototype.isCancellable=function(){return!this.isResolved()&&this._cancellable()},x.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},x.prototype.all=function(){return new h(this).promise()},x.prototype.error=function(e){return this.caught(i.originatesFromRejection,e)},x.getNewLibraryCopy=e.exports,x.is=function(e){return e instanceof x},x.fromNode=function(e){var a=new x(b),t=k(e)(w(a));return t===A&&a._rejectCallback(t.e,!0,!0),a},x.all=function(e){return new h(e).promise()},x.defer=x.pending=function(){var e=new x(b);return new _(e)},x.cast=function(e){var a=p(e);if(!(a instanceof x)){var t=a;(a=new x(b))._fulfillUnchecked(t)}return a},x.resolve=x.fulfilled=x.cast,x.reject=x.rejected=function(e){var a=new x(b);return a._captureStackTrace(),a._rejectCallback(e,!0),a},x.setScheduler=function(e){if("function"!=typeof e)throw new s("fn must be a function\n\n    See http://goo.gl/916lJJ\n");var a=o._schedule;return o._schedule=e,a},x.prototype._then=function(e,t,r,c,n){var i=void 0!==n,f=i?n:new x(b);i||(f._propagateFrom(this,5),f._captureStackTrace());var d=this._target();d!==this&&(void 0===c&&(c=this._boundTo),i||f._setIsMigrated());var s=d._addCallbacks(e,t,r,f,c,a());return d._isResolved()&&!d._isSettlePromisesQueued()&&o.invoke(d._settlePromiseAtPostResolution,d,s),f},x.prototype._settlePromiseAtPostResolution=function(e){this._isRejectionUnhandled()&&this._unsetRejectionIsUnhandled(),this._settlePromiseAt(e)},x.prototype._length=function(){return 131071&this._bitField},x.prototype._isFollowingOrFulfilledOrRejected=function(){return(939524096&this._bitField)>0},x.prototype._isFollowing=function(){return 536870912==(536870912&this._bitField)},x.prototype._setLength=function(e){this._bitField=-131072&this._bitField|131071&e},x.prototype._setFulfilled=function(){this._bitField=268435456|this._bitField},x.prototype._setRejected=function(){this._bitField=134217728|this._bitField},x.prototype._setFollowing=function(){this._bitField=536870912|this._bitField},x.prototype._setIsFinal=function(){this._bitField=33554432|this._bitField},x.prototype._isFinal=function(){return(33554432&this._bitField)>0},x.prototype._cancellable=function(){return(67108864&this._bitField)>0},x.prototype._setCancellable=function(){this._bitField=67108864|this._bitField},x.prototype._unsetCancellable=function(){this._bitField=-67108865&this._bitField},x.prototype._setIsMigrated=function(){this._bitField=4194304|this._bitField},x.prototype._unsetIsMigrated=function(){this._bitField=-4194305&this._bitField},x.prototype._isMigrated=function(){return(4194304&this._bitField)>0},x.prototype._receiverAt=function(e){var a=0===e?this._receiver0:this[5*e-5+4];if(a!==f)return void 0===a&&this._isBound()?this._boundValue():a},x.prototype._promiseAt=function(e){return 0===e?this._promise0:this[5*e-5+3]},x.prototype._fulfillmentHandlerAt=function(e){return 0===e?this._fulfillmentHandler0:this[5*e-5+0]},x.prototype._rejectionHandlerAt=function(e){return 0===e?this._rejectionHandler0:this[5*e-5+1]},x.prototype._boundValue=function(){var e=this._boundTo;return void 0!==e&&e instanceof x?e.isFulfilled()?e.value():void 0:e},x.prototype._migrateCallbacks=function(e,a){var t=e._fulfillmentHandlerAt(a),r=e._rejectionHandlerAt(a),c=e._progressHandlerAt(a),n=e._promiseAt(a),i=e._receiverAt(a);n instanceof x&&n._setIsMigrated(),void 0===i&&(i=f),this._addCallbacks(t,r,c,n,i,null)},x.prototype._addCallbacks=function(e,a,t,r,c,n){var i=this._length();if(i>=131066&&(i=0,this._setLength(0)),0===i)this._promise0=r,void 0!==c&&(this._receiver0=c),"function"!=typeof e||this._isCarryingStackTrace()||(this._fulfillmentHandler0=null===n?e:n.bind(e)),"function"==typeof a&&(this._rejectionHandler0=null===n?a:n.bind(a)),"function"==typeof t&&(this._progressHandler0=null===n?t:n.bind(t));else{var f=5*i-5;this[f+3]=r,this[f+4]=c,"function"==typeof e&&(this[f+0]=null===n?e:n.bind(e)),"function"==typeof a&&(this[f+1]=null===n?a:n.bind(a)),"function"==typeof t&&(this[f+2]=null===n?t:n.bind(t))}return this._setLength(i+1),i},x.prototype._setProxyHandlers=function(e,a){var t=this._length();if(t>=131066&&(t=0,this._setLength(0)),0===t)this._promise0=a,this._receiver0=e;else{var r=5*t-5;this[r+3]=a,this[r+4]=e}this._setLength(t+1)},x.prototype._proxyPromiseArray=function(e,a){this._setProxyHandlers(e,a)},x.prototype._resolveCallback=function(e,a){if(!this._isFollowingOrFulfilledOrRejected()){if(e===this)return this._rejectCallback(r(),!1,!0);var t=p(e,this);if(!(t instanceof x))return this._fulfill(e);var c=1|(a?4:0);this._propagateFrom(t,c);var n=t._target();if(n._isPending()){for(var i=this._length(),f=0;f<i;++f)n._migrateCallbacks(this,f);this._setFollowing(),this._setLength(0),this._setFollowee(n)}else n._isFulfilled()?this._fulfillUnchecked(n._value()):this._rejectUnchecked(n._reason(),n._getCarriedStackTrace())}},x.prototype._rejectCallback=function(e,a,t){t||i.markAsOriginatingFromRejection(e);var r=i.ensureErrorObject(e),c=r===e;this._attachExtraTrace(r,!!a&&c),this._reject(e,c?void 0:r)},x.prototype._resolveFromResolver=function(e){var a=this;this._captureStackTrace(),this._pushContext();var t=!0,r=k(e)(function(e){null!==a&&(a._resolveCallback(e),a=null)},function(e){null!==a&&(a._rejectCallback(e,t),a=null)});t=!1,this._popContext(),void 0!==r&&r===A&&null!==a&&(a._rejectCallback(r.e,!0,!0),a=null)},x.prototype._settlePromiseFromHandler=function(e,a,t,c){var n;if(!c._isRejected())if(c._pushContext(),n=a!==u||this._isRejected()?k(e).call(a,t):k(e).apply(this._boundValue(),t),c._popContext(),n===A||n===c||n===l){var i=n===c?r():n.e;c._rejectCallback(i,!1,!0)}else c._resolveCallback(n)},x.prototype._target=function(){for(var e=this;e._isFollowing();)e=e._followee();return e},x.prototype._followee=function(){return this._rejectionHandler0},x.prototype._setFollowee=function(e){this._rejectionHandler0=e},x.prototype._cleanValues=function(){this._cancellable()&&(this._cancellationParent=void 0)},x.prototype._propagateFrom=function(e,a){(1&a)>0&&e._cancellable()&&(this._setCancellable(),this._cancellationParent=e),(4&a)>0&&e._isBound()&&this._setBoundTo(e._boundTo)},x.prototype._fulfill=function(e){this._isFollowingOrFulfilledOrRejected()||this._fulfillUnchecked(e)},x.prototype._reject=function(e,a){this._isFollowingOrFulfilledOrRejected()||this._rejectUnchecked(e,a)},x.prototype._settlePromiseAt=function(e){var a=this._promiseAt(e),t=a instanceof x;if(t&&a._isMigrated())return a._unsetIsMigrated(),o.invoke(this._settlePromiseAt,this,e);var r=this._isFulfilled()?this._fulfillmentHandlerAt(e):this._rejectionHandlerAt(e),c=this._isCarryingStackTrace()?this._getCarriedStackTrace():void 0,n=this._settledValue,i=this._receiverAt(e);this._clearCallbackDataAtIndex(e),"function"==typeof r?t?this._settlePromiseFromHandler(r,i,n,a):r.call(i,n,a):i instanceof h?i._isResolved()||(this._isFulfilled()?i._promiseFulfilled(n,a):i._promiseRejected(n,a)):t&&(this._isFulfilled()?a._fulfill(n):a._reject(n,c)),e>=4&&4==(31&e)&&o.invokeLater(this._setLength,this,0)},x.prototype._clearCallbackDataAtIndex=function(e){if(0===e)this._isCarryingStackTrace()||(this._fulfillmentHandler0=void 0),this._rejectionHandler0=this._progressHandler0=this._receiver0=this._promise0=void 0;else{var a=5*e-5;this[a+3]=this[a+4]=this[a+0]=this[a+1]=this[a+2]=void 0}},x.prototype._isSettlePromisesQueued=function(){return-1073741824==(-1073741824&this._bitField)},x.prototype._setSettlePromisesQueued=function(){this._bitField=-1073741824|this._bitField},x.prototype._unsetSettlePromisesQueued=function(){this._bitField=1073741823&this._bitField},x.prototype._queueSettlePromises=function(){o.settlePromises(this),this._setSettlePromisesQueued()},x.prototype._fulfillUnchecked=function(e){if(e===this){var a=r();return this._attachExtraTrace(a),this._rejectUnchecked(a,void 0)}this._setFulfilled(),this._settledValue=e,this._cleanValues(),this._length()>0&&this._queueSettlePromises()},x.prototype._rejectUncheckedCheckError=function(e){var a=i.ensureErrorObject(e);this._rejectUnchecked(e,a===e?void 0:a)},x.prototype._rejectUnchecked=function(e,a){if(e===this){var t=r();return this._attachExtraTrace(t),this._rejectUnchecked(t)}this._setRejected(),this._settledValue=e,this._cleanValues(),this._isFinal()?o.throwLater(function(e){throw"stack"in e&&o.invokeFirst(m.unhandledRejection,void 0,e),e},void 0===a?e:a):(void 0!==a&&a!==e&&this._setCarriedStackTrace(a),this._length()>0?this._queueSettlePromises():this._ensurePossibleRejectionHandled())},x.prototype._settlePromises=function(){this._unsetSettlePromisesQueued();for(var e=this._length(),a=0;a<e;a++)this._settlePromiseAt(a)},i.notEnumerableProp(x,"_makeSelfResolutionError",r),t(490)(x,h),t(489)(x,b,p,n),t(488)(x,b,p),t(487)(x,l,p),t(486)(x),t(485)(x),t(484)(x,h,p,b),x.version="2.11.0",x.Promise=x,t(483)(x,h,n,p,b),t(482)(x),t(481)(x,n,p,v),t(480)(x,n,b,p),t(479)(x),t(478)(x),t(477)(x,h,p,n),t(476)(x,b,p,n),t(475)(x,h,n,p,b),t(474)(x,h),t(473)(x,h,n),t(472)(x,b),t(471)(x),t(470)(x,b),t(469)(x,b),t(468)(x,b),i.toFastProperties(x),i.toFastProperties(x.prototype),E({a:1}),E({b:2}),E({c:3}),E(1),E(function(){}),E(void 0),E(!1),E(new x(b)),m.setBounds(o.firstLineError,i.lastLineError),x}},function(e,a,t){"use strict";var r;"undefined"!=typeof Promise&&(r=Promise);var c=t(499)();c.noConflict=function(){try{Promise===c&&(Promise=r)}catch(e){}return c},e.exports=c},function(e,a,t){var r=t(103),c=t(98),n=36e5,i=6e4,f=1e3;e.exports=function(e){var a=e<n?0:r(e,n),t=e<i?0:r(e,i,60),o=e<f?0:r(e,f,60),d="";return d+=a?a+":":"",d+=c(t,2)+":",d+=c(o,2)}},function(e,a,t){var r=t(103);e.exports=function(e){return{milliseconds:r(e,1,1e3),seconds:r(e,1e3,60),minutes:r(e,6e4,60),hours:r(e,36e5,24),days:r(e,864e5)}}},function(e,a,t){e.exports={convert:t(243),now:t(137),parseMs:t(502),toTimeString:t(501)}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).replace(/(\w)(-)(\w)/g,"$1 $3")}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).replace(/\\u[0-9a-f]{4}/g,function(e){var a=parseInt(e.slice(2),16);return String.fromCharCode(a)})}},function(e,a,t){var r=t(4);e.exports=function(e){return e=r(e).replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#0*39;/g,"'").replace(/&quot;/g,'"')}},function(e,a,t){var r=t(4),c=t(127),n=t(126);e.exports=function(e){return e=r(e),e=n(e),c(e,"_")}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).replace(/<[^>]*>/g,"")}},function(e,a,t){var r=t(4);e.exports=function(e,a){return e=r(e),a=r(a),0===e.indexOf(a)}},function(e,a,t){var r=t(4),c=t(95),n=t(68);e.exports=function(e){return e=r(e),c(e).replace(/(^\w)|\.\s+(\w)/gm,n)}},function(e,a,t){var r=t(4),c=t(140);e.exports=function(e,a,t){return e=r(e),t=t||" ",e.length<a?e+c(t,a-e.length):e}},function(e,a,t){var r=t(4),c=t(135);e.exports=function(e,a,t){e=r(e),a=c(a),t=c(t);var n=a.length,i=t.length;if(1!==i&&n!==i)throw new Error("Unequal number of searches and replacements");for(var f=-1;++f<n;)e=e.replace(a[f],t[1===i?0:f]);return e}},function(e,a,t){var r=t(4);e.exports=function(e){return(e=r(e)).replace(/[^\x20-\x7E]/g,"")}},function(e,a,t){var r=t(4),c=t(95),n=t(68);e.exports=function(e){return e=r(e),c(e).replace(/^\w|\s\w/g,n)}},function(e,a,t){var r=t(4),c=t(216),n=t(68);e.exports=function(e){return e=r(e),c(e).replace(/^[a-z]/,n)}},function(e,a,t){var r=t(4);e.exports=function(e,a){return e=r(e),a=a||"\n",e.replace(/\r\n/g,a).replace(/\r/g,a).replace(/\n/g,a)}},function(e,a,t){var r=t(257),c=t(22);e.exports=function(e){return r(c(arguments),"/").replace(/([^:\/]|^)\/{2,}/g,"$1/")}},function(e,a,t){var r=t(4),c=t(134),n=/\{\{([^\}]+)\}\}/g;e.exports=function(e,a,t){return(e=r(e)).replace(t||n,function(e,t){return r(c(a,t))})}},function(e,a,t){var r=t(228),c=t(4);e.exports=function(e,a,t){return e=c(e),a<0&&(a=e.length+a),a=r(a,0,e.length),e.substr(0,a)+t+e.substr(a)}},function(e,a,t){var r=t(4),c=t(127),n=t(126);e.exports=function(e){return e=r(e),e=n(e),c(e,"-")}},function(e,a,t){var r=t(4);e.exports=function(e,a){return(e=r(e)).replace(/[\s\S]/g,function(e){return!a&&/[\x20-\x7E]/.test(e)?e:"\\u"+("000"+e.charCodeAt(0).toString(16)).slice(-4)})}},function(e,a,t){var r=t(4);e.exports=function(e){return r(e).replace(/\W/g,"\\$&")}},function(e,a,t){var r=t(4);e.exports=function(e){return e=r(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")}},function(e,a,t){var r=t(4);e.exports=function(e,a){return e=r(e),a=r(a),-1!==e.indexOf(a,e.length-a.length)}},function(e,a,t){var r=t(4),c=t(215);e.exports=function(e,a,t){return e=r(e),c(e,a,t,!0)}},function(e,a,t){var r=t(4);e.exports=function(e,a,t){return e=r(e),a=r(a),-1!==e.indexOf(a,t)}},function(e,a,t){e.exports={WHITE_SPACES:t(96),camelCase:t(216),contains:t(526),crop:t(525),endsWith:t(524),escapeHtml:t(523),escapeRegExp:t(522),escapeUnicode:t(521),hyphenate:t(520),insert:t(519),interpolate:t(518),lowerCase:t(95),lpad:t(141),ltrim:t(214),makePath:t(517),normalizeLineBreaks:t(516),pascalCase:t(515),properCase:t(514),removeNonASCII:t(513),removeNonWord:t(129),repeat:t(140),replace:t(512),replaceAccents:t(130),rpad:t(511),rtrim:t(213),sentenceCase:t(510),slugify:t(127),startsWith:t(509),stripHtmlTags:t(508),trim:t(128),truncate:t(215),typecast:t(133),unCamelCase:t(126),underscore:t(507),unescapeHtml:t(506),unescapeUnicode:t(505),unhyphenate:t(504),upperCase:t(68)}},function(e,a,t){var r=t(69),c=t(229),n=t(72),i="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";e.exports=function(e,a){(!r(e)||e<=0)&&(e=8),(!c(a)||a.length<1)&&(a=i);for(var t="",f=a.length-1;e--;)t+=a[n(0,f)];return t}},function(e,a,t){var r=t(131);e.exports=function(){return r()?1:-1}},function(e,a,t){var r=t(131);e.exports=function(){return r()?1:0}},function(e,a,t){var r=t(217),c=t(132);e.exports=function(){return r(8)+"-"+r(4)+"-4"+r(3)+"-"+c(8,9,"a","b")+r(3)+"-"+r(12)}},function(e,a,t){e.exports={choice:t(132),guid:t(531),rand:t(256),randBit:t(530),randBool:t(131),randHex:t(217),randInt:t(72),randSign:t(529),randString:t(528),random:t(148)}},function(e,a){e.exports=function(e,a,t){e=e||"";var r=new RegExp("(\\?|&)"+a+"=[^&]*"),c=a+"="+encodeURIComponent(t);return r.test(e)?e.replace(r,"$1"+c):(-1===e.indexOf("?")&&(e+="?"),-1!==e.indexOf("=")&&(e+="&"),e+c)}},function(e,a,t){var r=t(218),c=t(97);e.exports=function(e,a){return r(c(e),a)}},function(e,a,t){var r=t(133),c=t(97);e.exports=function(e,a,t){var n=new RegExp("(\\?|&)"+a+"=([^&]*)").exec(c(e)),i=n&&n[2]?n[2]:null;return!1===t?i:r(i)}},function(e,a,t){var r=t(16),c=t(31),n=t(47);e.exports=function(e){var a,t,i=[];return r(e,function(e,r){c(e)?(a=r+"=",t=new RegExp("&"+r+"+=$"),n(e,function(e){a+=encodeURIComponent(e)+"&"+r+"="}),i.push(a.replace(t,""))):i.push(r+"="+encodeURIComponent(e))}),i.length?"?"+i.join("&"):""}},function(e,a,t){var r=t(97);e.exports=function(e,a){return new RegExp("(\\?|&)"+a+"=","g").test(r(e))}},function(e,a,t){e.exports={contains:t(537),decode:t(218),encode:t(536),getParam:t(535),getQuery:t(97),parse:t(534),setParam:t(533)}},function(e,a,t){var r=t(221);e.exports=function(e,a){if(r(e,a)){for(var t=a.split("."),c=t.pop();a=t.shift();)e=e[a];return delete e[c]}return!0}},function(e,a,t){var r=t(219);e.exports=function(e,a,t){var c=/^(.+)\.(.+)$/.exec(a);c?r(e,c[1])[c[2]]=t:e[a]=t}},function(e,a,t){var r=t(147);e.exports=function(e,a){var t=e[a];if(void 0!==t)return r(t)?t.call(e):t}},function(e,a,t){var r=t(222),c=t(14);e.exports=function(e,a,t){return a=c(a,t),r(e,function(e,t,r){return!a(e,t,r)},t)}},function(e,a,t){var r=t(220),c=t(153);e.exports=function(e,a){return r(e,c(a))}},function(e,a,t){var r=t(22);e.exports=function(e,a){for(var t,c="string"!=typeof arguments[1]?arguments[1]:r(arguments,1),n={},i=0;t=c[i++];)n[t]=e[t];return n}},function(e,a,t){var r=t(22),c=t(54);e.exports=function(e,a){var t="string"!=typeof arguments[1]?arguments[1]:r(arguments,1),n={};for(var i in e)e.hasOwnProperty(i)&&!c(t,i)&&(n[i]=e[i]);return n}},function(e,a,t){var r=t(55),c=t(233),n=t(71);e.exports=function e(){var a,t,i,f,o=1;for(f=c(arguments[0]);i=arguments[o++];)for(a in i)r(i,a)&&(t=i[a],n(t)&&n(f[a])?f[a]=e(f[a],t):f[a]=c(t));return f}},function(e,a,t){var r=t(16);e.exports=function(e,a){var t=!0;return r(a,function(a,r){if(e[r]!==a)return t=!1}),t}},function(e,a,t){var r=t(16),c=Object.keys||function(e){var a=[];return r(e,function(e,t){a.push(t)}),a};e.exports=c},function(e,a,t){var r=t(16),c=t(53);e.exports=function(e,a){return null==e?{}:function e(a,t,n,i){return r(a,function(a,r){var f=n?n+"."+r:r;0!==i&&c(a)?e(a,t,f,i-1):t[f]=a}),t}(e,{},"",a=null==a?-1:a)}},function(e,a,t){var r=t(47),c=t(22),n=t(16);e.exports=function(e,a){return r(c(arguments,1),function(a){n(a,function(a,t){null==e[t]&&(e[t]=a)})}),e}},function(e,a,t){var r=t(16),c=t(53);function n(e,a){for(var t,c=0,n=arguments.length;++c<n;)(t=arguments[c])&&r(t,i,e);return e}function i(e,a){var t=this[a];c(e)&&c(t)?n(t,e):this[a]=e}e.exports=n},function(e,a,t){var r=t(16),c=t(53);e.exports=function e(a,t){for(var n,i=0,f=arguments.length;++i<f;)(n=arguments[i])&&r(n,function(t,r){var n=a[r];null==n?a[r]=t:c(n)&&c(t)&&e(n,t)});return a}},function(e,a,t){var r=t(223),c=t(236),n=t(47),i=t(22);e.exports=function(e,a){var t=arguments.length>1?i(arguments,1):r(e);n(t,function(a){e[a]=c(e[a],e)})}},function(e,a,t){e.exports={bindAll:t(553),contains:t(253),deepFillIn:t(552),deepMatches:t(262),deepMixIn:t(551),equals:t(232),every:t(146),fillIn:t(550),filter:t(222),find:t(250),flatten:t(549),forIn:t(152),forOwn:t(16),functions:t(223),get:t(134),has:t(221),hasOwn:t(55),keys:t(548),map:t(220),matches:t(547),max:t(248),merge:t(546),min:t(247),mixIn:t(99),namespace:t(219),omit:t(545),pick:t(544),pluck:t(543),reduce:t(246),reject:t(542),result:t(541),set:t(540),size:t(145),some:t(102),unset:t(539),values:t(101)}},function(e,a,t){var r=t(104);e.exports=function(e){return e<=0?0:e>r?~~(e%(r+1)):~~e}},function(e,a){e.exports=function(e){return e>>>0}},function(e,a,t){var r=t(70);e.exports=function(e){var a=r(e);return 0===a?a:isNaN(a)?a:a<0?-1:1}},function(e,a){e.exports=function(e,a){return e>>a|e<<32-a}},function(e,a){e.exports=function(e,a){return e<<a|e>>32-a}},function(e,a,t){var r=t(139),c=t(224);e.exports=function(e){return(e=r(e))+c(e)}},function(e,a,t){var r=t(70);e.exports=function(e,a,t,c){e=r(e),a=null==a?2:a,t=null==t?".":t,c=null==c?",":c;var n=e.toFixed(a),i=new RegExp("^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{"+a+"}))?$").exec(n);return i?i[1]+i[2].replace(/\d{3}/g,c+"$&")+(i[4]?t+i[4]:""):n.replace(".",t)}},function(e,a,t){var r=t(225),c={thousand:"K",million:"M",billion:"B"};e.exports=function(e,a,t){var n;return a=null!=a?a:1,t=t||c,(e=r(e,a))<1e6?(n=r(e/1e3,a))<1e3?n+t.thousand:1+t.million:e<1e9?(n=r(e/1e6,a))<1e3?n+t.million:1+t.billion:r(e/1e9,a)+t.billion}},function(e,a){e.exports=4294967295},function(e,a){e.exports=9007199254740991},function(e,a,t){e.exports={MAX_INT:t(104),MAX_SAFE_INTEGER:t(564),MAX_UINT:t(563),MIN_INT:t(149),abbreviate:t(562),currencyFormat:t(561),enforcePrecision:t(225),isNaN:t(231),nth:t(224),ordinal:t(560),pad:t(98),rol:t(559),ror:t(558),sign:t(557),toInt:t(139),toUInt:t(556),toUInt31:t(555)}},function(e,a){e.exports=function(e,a){return a=a||1,Math.round(e/a)*a}},function(e,a,t){var r=t(227),c=t(226);e.exports=function(e,a,t,n,i){return r(c(e,a,t),n,i)}},function(e,a){e.exports=function(e,a,t){return e<a?t:e>t?a:e}},function(e,a){e.exports=function(e,a,t){return Math.abs(e-a)<=t}},function(e,a){e.exports=function(e,a,t,r){return e+(r=r||0)>=a&&e-r<=t}},function(e,a){e.exports=function(e,a){return a=Math.abs(a||1),Math.floor(e/a)*a}},function(e,a){e.exports=function(e,a){return a=Math.abs(a||1),Math.ceil(e/a)*a}},function(e,a,t){e.exports={ceil:t(572),clamp:t(228),countSteps:t(103),floor:t(571),inRange:t(570),isNear:t(569),lerp:t(227),loop:t(568),map:t(567),norm:t(226),round:t(566)}},function(e,a,t){var r=t(73);e.exports=function(e,a){return!r(e,a)}},function(e,a){var t;e.exports=function(e){return e===t}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"RegExp")}},function(e,a){e.exports=function(e){return null===e}},function(e,a,t){var r=t(69),c=t(231);e.exports=function(e){return!r(e)||c(Number(e))}},function(e,a,t){var r=t(69);e.exports=function(e){return r(e)&&e%1==0}},function(e,a,t){var r=t(69),c=t(136);e.exports=function(e){var a=!1;return"string"==typeof e&&""!==e?a=c.isFinite(parseFloat(e)):r(e)&&(a=c.isFinite(e)),a}},function(e,a,t){var r=t(16),c=t(31);e.exports=function(e){if(null==e)return!0;if("string"==typeof e||c(e))return!e.length;if("object"==typeof e){var a=!0;return r(e,function(){return a=!1,!1}),a}return!0}},function(e,a,t){var r=t(35);e.exports=function(e){return r(e,"Boolean")}},function(e,a,t){var r=t(35),c=r(arguments,"Arguments")?function(e){return r(e,"Arguments")}:function(e){return!(!e||!Object.prototype.hasOwnProperty.call(e,"callee"))};e.exports=c},function(e,a,t){var r=t(234);e.exports=function(e,a){var t=r(a.prototype);return t.constructor=e,e.prototype=t,e.super_=a,t}},function(e,a,t){var r=t(135),c=t(151);function n(e){return null!=e}e.exports=function(e){return c(r(arguments),n)}},function(e,a,t){var r=t(73),c=t(71),n=t(31),i=t(232),f=t(260);e.exports=function e(a,t,o){o=o||r;var d=c(a)&&c(t),s=!d&&n(a)&&n(t);if(!d&&!s)return o(a,t);return(d?i:f)(a,t,function(a,t){return e(a,t,o)})}},function(e,a){function t(){}e.exports=function(e,a){t.prototype=e.prototype;var r=new t;return e.apply(r,a),r}},function(e,a,t){e.exports={GLOBAL:t(136),clone:t(142),createObject:t(234),ctorApply:t(587),deepClone:t(233),deepEquals:t(586),defaults:t(585),inheritPrototype:t(584),is:t(73),isArguments:t(583),isArray:t(31),isBoolean:t(582),isDate:t(100),isEmpty:t(581),isFinite:t(580),isFunction:t(147),isInteger:t(579),isKind:t(35),isNaN:t(578),isNull:t(577),isNumber:t(69),isObject:t(71),isPlainObject:t(53),isPrimitive:t(230),isRegExp:t(576),isString:t(229),isUndefined:t(575),isnt:t(574),kindOf:t(76),toArray:t(135),toNumber:t(70),toString:t(4)}},function(e,a,t){var r=t(235);e.exports=function(e,a){return r(a,e)}},function(e,a){e.exports=function(e,a,t){for(var r=-1;++r<e&&!1!==a.call(t,r););}},function(e,a,t){var r=t(137);e.exports=function(e,a){var t,c,n,i,f,o=0;function d(){o=r(),c=null,n=e.apply(t,i)}function s(){return t=this,i=arguments,(f=a-(r()-o))<=0?(clearTimeout(c),d()):c||(c=setTimeout(d,f)),n}return s.cancel=function(){clearTimeout(c)},s}},function(e,a){e.exports=function(){var e=arguments;return function(){for(var a=0,t=e.length;a<t;)e[a].apply(this,arguments),a+=1}}},function(e,a){e.exports=function(e){return function(a){return a[e]()}}},function(e,a){e.exports=function(e,a,t){var r,c;function n(){var n=arguments,i=this;return r?clearTimeout(r):t&&(c=e.apply(i,n)),r=setTimeout(function(){t||(c=e.apply(i,n)),r=null},a),c}return n.cancel=function(){clearTimeout(r)},n}},function(e,a){e.exports=function(e){return function(){return e}}},function(e,a){e.exports=function(){var e=arguments;return function(a){for(var t=e.length;t--;)a=e[t].call(this,a);return a}}},function(e,a,t){var r=t(137),c=t(237),n=t(77);e.exports=function(e,a){var t=r()+a;return function(){var a=Math.max(t-r(),4);return c.apply(this,n([e,a,this],arguments))}}},function(e,a,t){var r=t(98),c=t(141),n=t(242),i=t(144),f=t(138),o=t(240),d=t(239),s={D:"%m/%d/%y",F:"%Y-%m-%d",r:"%I:%M:%S %p",R:"%H:%M",T:"%H:%M:%S",x:"locale",X:"locale",c:"locale"};function b(e,a,t){if(a in s){var r=s[a];return"locale"===r?t[a]:r}return"%"+a}function u(e,a,t){switch(a){case"a":return t.days_abbr[e.getDay()];case"A":return t.days[e.getDay()];case"h":case"b":return t.months_abbr[e.getMonth()];case"B":return t.months[e.getMonth()];case"C":return r(Math.floor(e.getFullYear()/100),2);case"d":return r(e.getDate(),2);case"e":return r(e.getDate(),2," ");case"H":return r(e.getHours(),2);case"I":return r(e.getHours()%12,2);case"j":return r(i(e),3);case"l":return c(e.getHours()%12,2);case"L":return r(e.getMilliseconds(),3);case"m":return r(e.getMonth()+1,2);case"M":return r(e.getMinutes(),2);case"n":return"\n";case"p":return e.getHours()>=12?t.pm:t.am;case"P":return u(e,"p",t).toLowerCase();case"s":return e.getTime()/1e3;case"S":return r(e.getSeconds(),2);case"t":return"\t";case"u":var n=e.getDay();return 0===n?7:n;case"U":return r(d(e),2);case"w":return e.getDay();case"W":return r(d(e,1),2);case"y":return r(e.getFullYear()%100,2);case"Y":return r(e.getFullYear(),4);case"z":return f(e);case"Z":return o(e);case"%":return"%";default:return"%"+a}}e.exports=function(e,a,t){t=t||n;var r=/%([a-z%])/gi;function c(a){return function(r,c){return a(e,c,t)}}return a.replace(r,c(b)).replace(r,c(u))}},function(e,a){e.exports=function(e){var a=e.getMonth();return a<3?1:a<6?2:a<9?3:4}},function(e,a,t){var r=t(108),c=[/^([0-9]{4})$/,/^([0-9]{4})-([0-9]{2})$/,/^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/],n=/^([0-9]{4})-?([0-9]{3})$/,i=[/^([0-9]{2}(?:\.[0-9]*)?)$/,/^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/,/^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/],f=/^(.+)T(.+)$/,o=/^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/;function d(e,a){var t;return r(a,function(a){return!!(t=a.exec(e))})?t:null}function s(e){var a;return null===(a=d(e,c))?function(e){var a=n.exec(e);if(a){var t=+a[1],r=+a[2],c=new Date(Date.UTC(t,0,r));if(c.getUTCFullYear()===t)return+c}return NaN}(e):function(e,a,t){var r=new Date(Date.UTC(e,a,t));return r.setUTCFullYear(e),r.getUTCFullYear()===e&&r.getUTCMonth()===a&&r.getUTCDate()===t?+r:NaN}(void 0===a[1]?0:+a[1],void 0===a[2]?0:+a[2]-1,void 0===a[3]?1:+a[3])}function b(e,a,t){return e<24&&e>=0&&a<60&&a>=0&&t<60&&a>=0||24===e&&0===a&&0===t?1e3*(60*(60*e+a)+t):NaN}function u(e){var a,t=function(e){var a;if("Z"===e.charAt(e.length-1))e=e.substring(0,e.length-1);else if(a=o.exec(e)){var t=b(+a[3],void 0===a[4]?0:+a[4],0);return"-"===a[2]&&(t*=-1),{offset:t,time:a[1]}}return{offset:0,time:e}}(e);return e=t.time,t=t.offset,isNaN(t)?NaN:null===(a=d(e,i))?NaN:b(void 0===a[1]?0:+a[1],void 0===a[2]?0:+a[2],void 0===a[3]?0:+a[3])-t}e.exports=function(e){var a=f.exec(e);return a?s(a[1])+u(a[2]):s(e)}},function(e,a,t){var r=t(241);e.exports=function(e,a,t){return t&&(e=r(e,t),a=r(a,t)),Number(e)===Number(a)}},function(e,a){e.exports={am:"AM",pm:"PM",x:"%m/%d/%y",X:"%H:%M:%S",c:"%a %d %b %Y %I:%M:%S %p %Z",months:["January","February","March","April","May","June","July","August","September","October","November","December"],months_abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],days_abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}},function(e,a,t){var r=t(245),c=t(244),n=t(243);function i(e,a,t){if(e>a){var d=e;e=a,a=d}var s;return"month"===t?s=function(e,a){return function(e,a){var t=a.getMonth()-e.getMonth();t<0&&(t+=12);e.getDate()>a.getDate()&&(t-=1);return t}(e,a)+12*o(e,a)+function(e,a){var t=0,c=e.getDate(),n=a.getDate();if(c!==n){var i,f,o=r(e),d=r(a);if(c>n){var s=o-c;f=n+s,i=c>d?d+s+1:c+s}else f=n-c,i=d;t=f/i}return t}(e,a)}(e,a):"year"===t?s=function(e,a){var t=o(e,a);return t+function(e,a,t){return i(t?new Date(a.getFullYear(),e.getMonth(),e.getDate()):e,a,"day")/c(a)}(e,a,t)}(e,a):null!=t?("day"===t&&(e=f(e),a=f(a)),s=n(a-e,"ms",t)):s=a-e,s}function f(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function o(e,a){var t=a.getFullYear()-e.getFullYear();return e.getMonth()>a.getMonth()&&(t-=1),t}e.exports=i},function(e,a,t){e.exports={dayOfTheYear:t(144),diff:t(603),i18n_:t(242),isLeapYear:t(143),isSame:t(601),parseIso:t(600),quarter:t(599),startOf:t(241),strftime:t(598),timezoneAbbr:t(240),timezoneOffset:t(138),totalDaysInMonth:t(245),totalDaysInYear:t(244),weekOfTheYear:t(239)}},function(e,a,t){var r=t(38),c=t(108),n=t(102);e.exports=r(c,n)},function(e,a,t){var r=t(31),c=t(145);e.exports=function(e){return e?r(e)?e.length:c(e):0}},function(e,a,t){var r=t(252),c=t(14);e.exports=function(e,a,t){return a=c(a,t),r(e,function(e,t,r){return!a(e,t,r)},t)}},function(e,a,t){var r=t(38),c=t(255),n=t(246);e.exports=r(c,n)},function(e,a,t){var r=t(249);e.exports=function(e,a){return r(e,function(e){return e[a]})}},function(e,a,t){var r=t(38),c=t(150),n=t(247);e.exports=r(c,n)},function(e,a,t){var r=t(38),c=t(105),n=t(248);e.exports=r(c,n)},function(e,a,t){var r=t(38),c=t(151),n=t(250);e.exports=r(c,n)},function(e,a,t){var r=t(38),c=t(107),n=t(146);e.exports=r(c,n)},function(e,a,t){var r=t(38),c=t(54),n=t(253);e.exports=r(c,n)},function(e,a,t){e.exports={contains:t(614),every:t(613),filter:t(252),find:t(612),forEach:t(251),make_:t(38),map:t(249),max:t(611),min:t(610),pluck:t(609),reduce:t(608),reject:t(607),size:t(606),some:t(605)}},function(e,a,t){var r=t(105),c=t(106);function n(e){return null==e?0:e.length}e.exports=function(e){for(var a=e?r(c(arguments,n)):0,t=[],i=-1;++i<a;)t.push(c(arguments,function(e){return null==e?void 0:e[i]}));return t}},function(e,a,t){var r=t(74),c=t(48),n=t(54);e.exports=function(e,a){e=r(e),a=r(a);var t=c(e,function(e){return!n(a,e)}),i=c(a,function(a){return!n(e,a)});return t.concat(i)}},function(e,a,t){var r=t(74),c=t(77);e.exports=function(e){for(var a=[],t=-1,n=arguments.length;++t<n;)c(a,arguments[t]);return r(a)}},function(e,a,t){var r=t(147);e.exports=function(e,a){var t={};if(null==e)return t;var c,n=-1,i=e.length;if(r(a))for(;++n<i;)t[a(c=e[n])]=c;else for(;++n<i;)t[(c=e[n])[a]]=c;return t}},function(e,a){e.exports=function(e,a,t){var r=-1,c=[];if(t)for(;++r<e;)c[r]=a.call(t,r,e);else for(;++r<e;)c[r]=a(r,e);return c}},function(e,a){e.exports=function(e,a){a=a||2;var t=[];if(null==e)return t;for(var r,c=Math.floor(e.length/a),n=e.length%a,i=0,f=e.length,o=0;i<f;)r=c,o<n&&r++,t.push(e.slice(i,i+r)),o++,i+=r;return t}},function(e,a,t){var r=t(254),c=t(14);e.exports=function(e,a,t){return a=c(a,t),r(e,function(e,t){return(e=a(e))<(t=a(t))?-1:e>t?1:0})}},function(e,a,t){var r=t(72);e.exports=function(e){var a,t=[];if(null==e)return t;for(var c=-1,n=e.length;++c<n;)c?(a=r(0,c),t[c]=t[a],t[a]=e[c]):t[0]=e[0];return t}},function(e,a){e.exports=function(e){var a=e.slice();return a.reverse(),a}},function(e,a,t){var r=t(75);e.exports=function(e,a){for(var t=r(e,a);-1!==t;)e.splice(t,1),t=r(e,a,t)}},function(e,a,t){var r=t(75);e.exports=function(e,a){var t=r(e,a);-1!==t&&e.splice(t,1)}},function(e,a,t){var r=t(14);e.exports=function(e,a,t){a=r(a,t);var c=[];if(null==e)return c;for(var n,i=-1,f=e.length;++i<f;)a(n=e[i],i,e)||c.push(n);return c}},function(e,a){e.exports=function(e,a,t){var r=arguments.length>2;if(null==e||!e.length){if(r)return t;throw new Error("reduce of empty array with no initial value")}for(var c,n=e.length,i=t;--n>=0;)c=e[n],r?i=a(i,c,n,e):(i=c,r=!0);return i}},function(e,a,t){var r=t(103);e.exports=function(e,a,t){null==a&&(a=e,e=0);for(var c=[],n=(r(a-e,t=t||1),e);n<=a;)c.push(n),n+=t;return c}},function(e,a,t){var r=t(106);e.exports=function(e,a){return r(e,a)}},function(e,a,t){var r=t(72);function c(e){var a=r(0,e.length-1);return e.splice(a,1)[0]}e.exports=function(e,a){if(null!=a){var t=[];if(a>0&&e&&e.length)for(a=a>e.length?e.length:a;a--;)t.push(c(e));return t}return e&&e.length?c(e):void 0}},function(e,a){e.exports=function(e,a,t){if(null==e)return-1;var r=e.length;for(t=(t=null==t||t>=r?r-1:t)<0?r+t:t;t>=0;){if(e[t]===a)return t;t--}return-1}},function(e,a){e.exports=function(e){if(!(null==e||e.length<1))return e[e.length-1]}},function(e,a,t){var r=t(22);e.exports=function(e,a,t){if(null==e)return e;for(var c,n=r(arguments,2),i=-1,f=e.length;++i<f;)(c=e[i])[a].apply(c,n);return e}},function(e,a,t){var r=t(74),c=t(48),n=t(107),i=t(54),f=t(22);e.exports=function(e){var a=f(arguments,1);return c(r(e),function(e){return n(a,function(a){return i(a,e)})})}},function(e,a,t){var r=t(261),c=t(22);e.exports=function(e,a){var t=r(c(arguments,1),e);return t.length&&Array.prototype.push.apply(e,t),e.length}},function(e,a,t){var r=t(47),c=t(154),n=t(14);e.exports=function(e,a,t){a=a?n(a,t):c;var i={};return r(e,function(e){var t=a(e);t in i||(i[t]=[]),i[t].push(e)}),i}},function(e,a,t){var r=t(31),c=t(77);e.exports=function(e,a){return null==e?[]:function e(a,t,n){if(0===n)return c(t,a),t;for(var i,f=-1,o=a.length;++f<o;)i=a[f],r(i)?e(i,t,n-1):t.push(i);return t}(e,[],a=null==a?-1:a)}},function(e,a,t){var r=t(258);e.exports=function(e,a,t){var c=r(e,a,t);return c>=0?e[c]:void 0}},function(e,a,t){var r=t(48);e.exports=function(e){return r(e,function(e){return null!=e})}},function(e,a,t){var r=t(75);e.exports=function(e,a){if(null==a)return e;for(var t=-1,c=a.length;++t<c;)-1===r(e,a[t])&&e.push(a[t]);return e}},function(e,a,t){var r=t(77),c=t(14);e.exports=function(e,a,t){a=c(a,t);var n=[];if(null==e)return n;for(var i=-1,f=e.length;++i<f;){var o=a(e[i],i,e);null!=o&&r(n,o)}return n}},function(e,a,t){e.exports={append:t(77),collect:t(642),combine:t(641),compact:t(640),contains:t(54),difference:t(261),equals:t(260),every:t(107),filter:t(48),find:t(151),findIndex:t(259),findLast:t(639),findLastIndex:t(258),flatten:t(638),forEach:t(47),groupBy:t(637),indexOf:t(75),insert:t(636),intersection:t(635),invoke:t(634),join:t(257),last:t(633),lastIndexOf:t(632),map:t(106),max:t(105),min:t(150),pick:t(631),pluck:t(630),range:t(629),reduce:t(255),reduceRight:t(628),reject:t(627),remove:t(626),removeAll:t(625),reverse:t(624),shuffle:t(623),slice:t(22),some:t(108),sort:t(254),sortBy:t(622),split:t(621),take:t(620),toLookup:t(619),union:t(618),unique:t(74),xor:t(617),zip:t(616)}},function(e,a,t){
/**@license
 * mout v0.11.1 | http://moutjs.com | MIT license
 */
e.exports={VERSION:"0.11.1",array:t(643),collection:t(615),date:t(604),function:t(238),lang:t(588),math:t(573),number:t(565),object:t(554),queryString:t(538),random:t(532),string:t(527),time:t(503),fn:t(238)}},function(e,a,t){e.exports=f;var r=t(41),c=t(79),n=t(0),i=t(2);function f(e){if(!(this instanceof f))return new f(e);r.Parse.apply(this),"object"!=typeof e&&(e={path:e}),e.path=e.path||i.resolve("node-tar-extract"),e.type="Directory",e.Directory=!0,e.strip=+e.strip,(!e.strip||e.strip<=0)&&(e.strip=0),this._fst=c.Writer(e),this.pause();var a=this;a.on("entry",function(a){if(e.strip){var t=a.path.split("/").slice(e.strip).join("/");if(a.path=a.props.path=t,a.linkpath){var r=a.linkpath.split("/").slice(e.strip).join("/");a.linkpath=a.props.linkpath=r}}if("Link"===a.type&&(a.linkpath=a.props.linkpath=i.join(e.path,i.join("/",a.props.linkpath))),"SymbolicLink"===a.type){var c=i.dirname(a.path)||"",n=a.props.linkpath;0!==i.resolve(e.path,c,n).indexOf(e.path)&&(n=i.join(e.path,i.join("/",n))),a.linkpath=a.props.linkpath=n}}),this._fst.on("ready",function(){a.pipe(a._fst,{end:!1}),a.resume()}),this._fst.on("error",function(e){a.emit("error",e)}),this._fst.on("drain",function(){a.emit("drain")}),this._fst.on("close",function(){a.emit("finish"),a.emit("end"),a.emit("close")})}n(f,r.Parse),f.prototype._streamEnd=function(){this._ended&&!this._entry||this.error("unexpected eof"),this._fst.end()}},function(e,a,t){e.exports=f;var r=t(110),c=t(0),n=t(41).numeric,i={"SCHILY.dev":"dev","SCHILY.ino":"ino","SCHILY.nlink":"nlink"};function f(){r.apply(this,arguments),this.on("data",this._parse),this.fields={},this._position=0,this._fieldPos=0,this._state=s,this._sizeBuf=[],this._keyBuf=[],this._valBuf=[],this._size=-1,this._key=""}c(f,r),f.prototype._parse=function(e){if(this._state===l)return;for(var a=0,t=e.length;a<t;this._position++,this._fieldPos++,a++){var r=e[a];if(this._size>=0&&this._fieldPos>this._size)return void y(this,"field exceeds length="+this._size);switch(this._state){case l:return;case s:if(r===m){this._state=b,this._size=parseInt(new Buffer(this._sizeBuf).toString(),10),this._sizeBuf.length=0;continue}if(r<p||r>h)return void y(this,"expected ["+p+".."+h+"], got "+r);this._sizeBuf.push(r);continue;case b:if(r===g){this._state=u,this._key=new Buffer(this._keyBuf).toString(),i[this._key]&&(this._key=i[this._key]),this._keyBuf.length=0;continue}this._keyBuf.push(r);continue;case u:if(this._fieldPos===this._size-1){if(r!==v)return void y(this,"expected \\n at end of field");var c=new Buffer(this._valBuf).toString();n[this._key]&&(c=parseFloat(c)),this.fields[this._key]=c,this._valBuf.length=0,this._state=s,this._size=-1,this._fieldPos=-1;continue}this._valBuf.push(r);continue}}};var o=0,d=f.states={},s=d.SIZE=o++,b=d.KEY=o++,u=d.VAL=o++,l=d.ERR=o++;Object.keys(d).forEach(function(e){d[d[e]]=d[e]}),d[o]=null;var p="0".charCodeAt(0),h="9".charCodeAt(0),m=(".".charCodeAt(0),"a".charCodeAt(0),"Z".charCodeAt(0),"a".charCodeAt(0),"z".charCodeAt(0)," ".charCodeAt(0)),g="=".charCodeAt(0),v="\n".charCodeAt(0);function y(e,a){a="invalid header: "+a+"\nposition="+e._position+"\nfield position="+e._fieldPos,e.error(a),e.state=l}},function(e,a,t){e.exports=n;var r=t(0),c=t(110);function n(){c.apply(this,arguments),this._buffer=new Buffer(this.props.size),this._offset=0,this.body="",this.on("end",function(){this.body=this._buffer.toString().slice(0,-1)})}r(n,c),n.prototype.write=function(e){e.copy(this._buffer,this._offset),this._offset+=e.length,c.prototype.write.call(this,e)}},function(e,a,t){e.exports=b.create=b;var r=t(6).Stream,c=t(264),n=t(41),i=t(111),f=t(110),o=t(647),d=t(646),s=t(11).ok;function b(){var e=this;if(!(e instanceof b))return new b;r.apply(e),e.writable=!0,e.readable=!0,e._stream=new c(512),e.position=0,e._ended=!1,e._stream.on("error",function(a){e.emit("error",a)}),e._stream.on("data",function(a){e._process(a)}),e._stream.on("end",function(){e._streamEnd()}),e._stream.on("drain",function(){e.emit("drain")})}t(0)(b,t(79).Reader),b.prototype._streamEnd=function(){this._ended&&!this._entry||this.error("unexpected eof"),this.emit("end")},b.prototype.write=function(e){if(!this._ended)return this._stream.write(e);for(var a=0,t=e.length;a>t;a++)if(0!==e[a])return this.error("write() after end()")},b.prototype.end=function(e){return this._ended=!0,this._stream.end(e)},b.prototype._read=function(){},b.prototype._process=function(e){if(s(e&&512===e.length,"block size should be 512"),this._entry){var a=this._entry;a._abort?(a._remaining-=e.length,a._remaining<0&&(a._remaining=0)):a.write(e),0===a._remaining&&(a.end(),this._entry=null)}else{for(var t=!0,r=0;r<512&&t;r++)t=0===e[r];t?(this._eofStarted&&(this._ended=!0),this._eofStarted=!0):(this._eofStarted=!1,this._startEntry(e))}this.position+=512},b.prototype._startEntry=function(e){var a,t,r,c,s=new i(e),b=this,u=!1;if(null===s.size||!s.cksumValid){var l=new Error("invalid tar file");return l.header=s,l.tar_file_offset=this.position,l.tar_block=this.position/512,this.emit("error",l)}switch(n.types[s.type]){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":r=f,t="entry";break;case"GlobalExtendedHeader":r=d,c=function(){b._global=b._global||{},Object.keys(a.fields).forEach(function(e){b._global[e]=a.fields[e]})},t="globalExtendedHeader",u=!0;break;case"ExtendedHeader":case"OldExtendedHeader":r=d,c=function(){b._extended=a.fields},t="extendedHeader",u=!0;break;case"NextFileHasLongLinkpath":r=o,c=function(){b._extended=b._extended||{},b._extended.linkpath=a.body},t="longLinkpath",u=!0;break;case"NextFileHasLongPath":case"OldGnuLongPath":r=o,c=function(){b._extended=b._extended||{},b._extended.path=a.body},t="longPath",u=!0;break;default:r=f,t="ignoredEntry"}if(u)p=h=null;else{var p=this._global,h=this._extended;this._extended=null}(a=new r(s,h,p)).meta=u,u||a.on("data",function(e){m.emit("data",e)}),c&&a.on("end",c),this._entry=a;var m=this;a.on("pause",function(){m.pause()}),a.on("resume",function(){m.resume()}),this.listeners("*").length&&this.emit("*",t,a),this.emit(t,a),0===a.props.size&&(a.end(),this._entry=null)}},function(e,a,t){e.exports=c;var r=t(263);function c(e){if(!(this instanceof c))return new c(e);r.call(this,e),this.props.type="g"}t(0)(c,r)},function(e,a,t){var r=t(269),c=Object.create(null),n=t(156);e.exports=r(function(e,a){return c[e]?(c[e].push(a),null):(c[e]=[a],function(e){return n(function a(){var t=c[e],r=t.length,n=function(e){for(var a=e.length,t=[],r=0;r<a;r++)t[r]=e[r];return t}(arguments);try{for(var i=0;i<r;i++)t[i].apply(null,n)}finally{t.length>r?(t.splice(0,r),process.nextTick(function(){a.apply(null,n)})):delete c[e]}})}(e))})},function(e,a,t){e.exports=p,p.GlobSync=h;var r=t(15),c=t(271),n=t(158),i=(n.Minimatch,t(272).Glob,t(1),t(2)),f=t(11),o=t(157),d=t(270),s=(d.alphasort,d.alphasorti,d.setopts),b=d.ownProp,u=d.childrenIgnored,l=d.isIgnored;function p(e,a){if("function"==typeof a||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");return new h(e,a).found}function h(e,a){if(!e)throw new Error("must provide pattern");if("function"==typeof a||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");if(!(this instanceof h))return new h(e,a);if(s(this,e,a),this.noprocess)return this;var t=this.minimatch.set.length;this.matches=new Array(t);for(var r=0;r<t;r++)this._process(this.minimatch.set[r],r,!1);this._finish()}h.prototype._finish=function(){if(f(this instanceof h),this.realpath){var e=this;this.matches.forEach(function(a,t){var r=e.matches[t]=Object.create(null);for(var n in a)try{n=e._makeAbs(n),r[c.realpathSync(n,e.realpathCache)]=!0}catch(a){if("stat"!==a.syscall)throw a;r[e._makeAbs(n)]=!0}})}d.finish(this)},h.prototype._process=function(e,a,t){f(this instanceof h);for(var r,c=0;"string"==typeof e[c];)c++;switch(c){case e.length:return void this._processSimple(e.join("/"),a);case 0:r=null;break;default:r=e.slice(0,c).join("/")}var i,d=e.slice(c);null===r?i=".":o(r)||o(e.join("/"))?(r&&o(r)||(r="/"+r),i=r):i=r;var s=this._makeAbs(i);u(this,i)||(d[0]===n.GLOBSTAR?this._processGlobStar(r,i,s,d,a,t):this._processReaddir(r,i,s,d,a,t))},h.prototype._processReaddir=function(e,a,t,r,c,n){var f=this._readdir(t,n);if(f){for(var o=r[0],d=!!this.minimatch.negate,s=o._glob,b=this.dot||"."===s.charAt(0),u=[],l=0;l<f.length;l++){if("."!==(m=f[l]).charAt(0)||b)(d&&!e?!m.match(o):m.match(o))&&u.push(m)}var p=u.length;if(0!==p)if(1!==r.length||this.mark||this.stat){r.shift();for(l=0;l<p;l++){var h;m=u[l];h=e?[e,m]:[m],this._process(h.concat(r),c,n)}}else{this.matches[c]||(this.matches[c]=Object.create(null));for(var l=0;l<p;l++){var m=u[l];e&&(m="/"!==e.slice(-1)?e+"/"+m:e+m),"/"!==m.charAt(0)||this.nomount||(m=i.join(this.root,m)),this._emitMatch(c,m)}}}},h.prototype._emitMatch=function(e,a){if(!l(this,a)){var t=this._makeAbs(a);if(this.mark&&(a=this._mark(a)),this.absolute&&(a=t),!this.matches[e][a]){if(this.nodir){var r=this.cache[t];if("DIR"===r||Array.isArray(r))return}this.matches[e][a]=!0,this.stat&&this._stat(a)}}},h.prototype._readdirInGlobStar=function(e){if(this.follow)return this._readdir(e,!1);var a,t;try{t=r.lstatSync(e)}catch(e){if("ENOENT"===e.code)return null}var c=t&&t.isSymbolicLink();return this.symlinks[e]=c,c||!t||t.isDirectory()?a=this._readdir(e,!1):this.cache[e]="FILE",a},h.prototype._readdir=function(e,a){if(a&&!b(this.symlinks,e))return this._readdirInGlobStar(e);if(b(this.cache,e)){var t=this.cache[e];if(!t||"FILE"===t)return null;if(Array.isArray(t))return t}try{return this._readdirEntries(e,r.readdirSync(e))}catch(a){return this._readdirError(e,a),null}},h.prototype._readdirEntries=function(e,a){if(!this.mark&&!this.stat)for(var t=0;t<a.length;t++){var r=a[t];r="/"===e?e+r:e+"/"+r,this.cache[r]=!0}return this.cache[e]=a,a},h.prototype._readdirError=function(e,a){switch(a.code){case"ENOTSUP":case"ENOTDIR":var t=this._makeAbs(e);if(this.cache[t]="FILE",t===this.cwdAbs){var r=new Error(a.code+" invalid cwd "+this.cwd);throw r.path=this.cwd,r.code=a.code,r}break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(e)]=!1;break;default:if(this.cache[this._makeAbs(e)]=!1,this.strict)throw a;this.silent||console.error("glob error",a)}},h.prototype._processGlobStar=function(e,a,t,r,c,n){var i=this._readdir(t,n);if(i){var f=r.slice(1),o=e?[e]:[],d=o.concat(f);this._process(d,c,!1);var s=i.length;if(!this.symlinks[t]||!n)for(var b=0;b<s;b++){if("."!==i[b].charAt(0)||this.dot){var u=o.concat(i[b],f);this._process(u,c,!0);var l=o.concat(i[b],r);this._process(l,c,!0)}}}},h.prototype._processSimple=function(e,a){var t=this._stat(e);if(this.matches[a]||(this.matches[a]=Object.create(null)),t){if(e&&o(e)&&!this.nomount){var r=/[\/\\]$/.test(e);"/"===e.charAt(0)?e=i.join(this.root,e):(e=i.resolve(this.root,e),r&&(e+="/"))}"win32"===process.platform&&(e=e.replace(/\\/g,"/")),this._emitMatch(a,e)}},h.prototype._stat=function(e){var a=this._makeAbs(e),t="/"===e.slice(-1);if(e.length>this.maxLength)return!1;if(!this.stat&&b(this.cache,a)){var c=this.cache[a];if(Array.isArray(c)&&(c="DIR"),!t||"DIR"===c)return c;if(t&&"FILE"===c)return!1}var n=this.statCache[a];if(!n){var i;try{i=r.lstatSync(a)}catch(e){if(e&&("ENOENT"===e.code||"ENOTDIR"===e.code))return this.statCache[a]=!1,!1}if(i&&i.isSymbolicLink())try{n=r.statSync(a)}catch(e){n=i}else n=i}this.statCache[a]=n;c=!0;return n&&(c=n.isDirectory()?"DIR":"FILE"),this.cache[a]=this.cache[a]||c,(!t||"FILE"!==c)&&c},h.prototype._mark=function(e){return d.mark(this,e)},h.prototype._makeAbs=function(e){return d.makeAbs(this,e)}},function(e,a,t){"use strict";function r(e,a,t){e instanceof RegExp&&(e=c(e,t)),a instanceof RegExp&&(a=c(a,t));var r=n(e,a,t);return r&&{start:r[0],end:r[1],pre:t.slice(0,r[0]),body:t.slice(r[0]+e.length,r[1]),post:t.slice(r[1]+a.length)}}function c(e,a){var t=a.match(e);return t?t[0]:null}function n(e,a,t){var r,c,n,i,f,o=t.indexOf(e),d=t.indexOf(a,o+1),s=o;if(o>=0&&d>0){for(r=[],n=t.length;s>=0&&!f;)s==o?(r.push(s),o=t.indexOf(e,s+1)):1==r.length?f=[r.pop(),d]:((c=r.pop())<n&&(n=c,i=d),d=t.indexOf(a,s+1)),s=o<d&&o>=0?o:d;r.length&&(f=[n,i])}return f}e.exports=r,r.range=n},function(e,a){e.exports=function(e,a){for(var r=[],c=0;c<e.length;c++){var n=a(e[c],c);t(n)?r.push.apply(r,n):r.push(n)}return r};var t=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,a,t){var r=t(653),c=t(652);e.exports=function(e){if(!e)return[];"{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2));return function e(a,t){var n=[];var i=c("{","}",a);if(!i||/\$$/.test(i.pre))return[a];var o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body);var d=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body);var b=o||d;var m=i.body.indexOf(",")>=0;if(!b&&!m)return i.post.match(/,.*\}/)?(a=i.pre+"{"+i.body+f+i.post,e(a)):[a];var g;if(b)g=i.body.split(/\.\./);else if(1===(g=function e(a){if(!a)return[""];var t=[];var r=c("{","}",a);if(!r)return a.split(",");var n=r.pre;var i=r.body;var f=r.post;var o=n.split(",");o[o.length-1]+="{"+i+"}";var d=e(f);f.length&&(o[o.length-1]+=d.shift(),o.push.apply(o,d));t.push.apply(t,o);return t}(i.body)).length&&1===(g=e(g[0],!1).map(u)).length){var v=i.post.length?e(i.post,!1):[""];return v.map(function(e){return i.pre+g[0]+e})}var y=i.pre;var v=i.post.length?e(i.post,!1):[""];var _;if(b){var w=s(g[0]),A=s(g[1]),k=Math.max(g[0].length,g[1].length),x=3==g.length?Math.abs(s(g[2])):1,E=p,S=A<w;S&&(x*=-1,E=h);var T=g.some(l);_=[];for(var j=w;E(j,A);j+=x){var C;if(d)"\\"===(C=String.fromCharCode(j))&&(C="");else if(C=String(j),T){var R=k-C.length;if(R>0){var O=new Array(R+1).join("0");C=j<0?"-"+O+C.slice(1):O+C}}_.push(C)}}else _=r(g,function(a){return e(a,!1)});for(var B=0;B<_.length;B++)for(var M=0;M<v.length;M++){var N=y+_[B]+v[M];(!t||b||N)&&n.push(N)}return n}(function(e){return e.split("\\\\").join(n).split("\\{").join(i).split("\\}").join(f).split("\\,").join(o).split("\\.").join(d)}(e),!0).map(b)};var n="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",f="\0CLOSE"+Math.random()+"\0",o="\0COMMA"+Math.random()+"\0",d="\0PERIOD"+Math.random()+"\0";function s(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function b(e){return e.split(n).join("\\").split(i).join("{").split(f).join("}").split(o).join(",").split(d).join(".")}function u(e){return"{"+e+"}"}function l(e){return/^-?0\d/.test(e)}function p(e,a){return e<=a}function h(e,a){return e>=a}},function(e,a,t){var r=t(2),c="win32"===process.platform,n=t(15),i=process.env.NODE_DEBUG&&/fs/.test(process.env.NODE_DEBUG);function f(e){return"function"==typeof e?e:function(){var e;if(i){var a=new Error;e=function(e){e&&(a.message=e.message,t(e=a))}}else e=t;return e;function t(e){if(e){if(process.throwDeprecation)throw e;if(!process.noDeprecation){var a="fs: missing callback "+(e.stack||e.message);process.traceDeprecation?console.trace(a):console.error(a)}}}}()}r.normalize;if(c)var o=/(.*?)(?:[\/\\]+|$)/g;else o=/(.*?)(?:[\/]+|$)/g;if(c)var d=/^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;else d=/^[\/]*/;a.realpathSync=function(e,a){if(e=r.resolve(e),a&&Object.prototype.hasOwnProperty.call(a,e))return a[e];var t,i,f,s,b=e,u={},l={};function p(){var a=d.exec(e);t=a[0].length,i=a[0],f=a[0],s="",c&&!l[f]&&(n.lstatSync(f),l[f]=!0)}for(p();t<e.length;){o.lastIndex=t;var h=o.exec(e);if(s=i,i+=h[0],f=s+h[1],t=o.lastIndex,!(l[f]||a&&a[f]===f)){var m;if(a&&Object.prototype.hasOwnProperty.call(a,f))m=a[f];else{var g=n.lstatSync(f);if(!g.isSymbolicLink()){l[f]=!0,a&&(a[f]=f);continue}var v=null;if(!c){var y=g.dev.toString(32)+":"+g.ino.toString(32);u.hasOwnProperty(y)&&(v=u[y])}null===v&&(n.statSync(f),v=n.readlinkSync(f)),m=r.resolve(s,v),a&&(a[f]=m),c||(u[y]=v)}e=r.resolve(m,e.slice(t)),p()}}return a&&(a[b]=e),e},a.realpath=function(e,a,t){if("function"!=typeof t&&(t=f(a),a=null),e=r.resolve(e),a&&Object.prototype.hasOwnProperty.call(a,e))return process.nextTick(t.bind(null,null,a[e]));var i,s,b,u,l=e,p={},h={};function m(){var a=d.exec(e);i=a[0].length,s=a[0],b=a[0],u="",c&&!h[b]?n.lstat(b,function(e){if(e)return t(e);h[b]=!0,g()}):process.nextTick(g)}function g(){if(i>=e.length)return a&&(a[l]=e),t(null,e);o.lastIndex=i;var r=o.exec(e);return u=s,s+=r[0],b=u+r[1],i=o.lastIndex,h[b]||a&&a[b]===b?process.nextTick(g):a&&Object.prototype.hasOwnProperty.call(a,b)?_(a[b]):n.lstat(b,v)}function v(e,r){if(e)return t(e);if(!r.isSymbolicLink())return h[b]=!0,a&&(a[b]=b),process.nextTick(g);if(!c){var i=r.dev.toString(32)+":"+r.ino.toString(32);if(p.hasOwnProperty(i))return y(null,p[i],b)}n.stat(b,function(e){if(e)return t(e);n.readlink(b,function(e,a){c||(p[i]=a),y(e,a)})})}function y(e,c,n){if(e)return t(e);var i=r.resolve(u,c);a&&(a[n]=i),_(i)}function _(a){e=r.resolve(a,e.slice(i)),m()}m()}},function(e,a,t){e.exports=n;var r=t(0),c=t(56);function n(e){if(!(this instanceof n))throw new Error("SocketReader must be called as constructor.");if("Socket"!==e.type||!e.Socket)throw new Error("Non-socket type "+e.type);c.call(this,e)}r(n,c),n.prototype._read=function(){this._paused||this._ended||(this.emit("end"),this.emit("close"),this._ended=!0)}},function(e,a,t){e.exports=b;for(var r=t(278),c=t(6).Stream,n=t(2),i=t(0),f=t(649),o=t(79).collect,d=new Buffer(512),s=0;s<512;s++)d[s]=0;function b(e){var a=this;if(!(a instanceof b))return new b(e);a._noProprietary=!!e&&e.noProprietary,a._global=e,a.readable=!0,a.writable=!0,a._buffer=[],a._currentEntry=null,a._processing=!1,a._pipeRoot=null,a.on("pipe",function(e){e.root!==a._pipeRoot&&(a._pipeRoot=e,e.on("end",function(){a._pipeRoot=null}),a.add(e))})}i(b,c),b.prototype.addGlobal=function(e){if(!this._didGlobal){this._didGlobal=!0;var a=this;f(e).on("data",function(e){a.emit("data",e)}).end()}},b.prototype.add=function(e){return this._global&&!this._didGlobal&&this.addGlobal(this._global),this._ended?this.emit("error",new Error("add after end")):(o(e),this._buffer.push(e),this._process(),this._needDrain=this._buffer.length>0,!this._needDrain)},b.prototype.pause=function(){this._paused=!0,this._currentEntry&&this._currentEntry.pause(),this.emit("pause")},b.prototype.resume=function(){this._paused=!1,this._currentEntry&&this._currentEntry.resume(),this.emit("resume"),this._process()},b.prototype.end=function(){this._ended=!0,this._buffer.push(d),this._process()},b.prototype._process=function(){var e=this;if(!e._paused&&!e._processing){var a=e._buffer.shift();if(a){if(!1===a.ready)return e._buffer.unshift(a),void a.on("ready",function(){e._process()});if(e._processing=!0,a===d)return e.emit("data",d),e.emit("data",d),e.emit("end"),void e.emit("close");var t=n.dirname((a.root||a).path);e._global&&e._global.fromBase&&a.root&&a.root.path&&(t=a.root.path);var c={};switch(Object.keys(a.props||{}).forEach(function(e){c[e]=a.props[e]}),e._noProprietary&&(c.noProprietary=!0),c.path=n.relative(t,a.path||""),"win32"===process.platform&&(c.path=c.path.replace(/\\/g,"/")),c.type||(c.type="Directory"),c.type){case"Socket":return;case"Directory":c.path+="/",c.size=0;break;case"Link":var i=n.resolve(n.dirname(a.path),a.linkpath);c.linkpath=n.relative(t,i)||".",c.size=0;break;case"SymbolicLink":i=n.resolve(n.dirname(a.path),a.linkpath);c.linkpath=n.relative(n.dirname(a.path),i)||".",c.size=0}var f=e._currentEntry=r(c);f.parent=e,f.on("data",function(a){e.emit("data",a)}),f.on("header",function(){Buffer.prototype.toJSON=function(){return this.toString().split(/\0/).join(".")},0===f.props.size&&s()}),f.on("close",s);var o=!1;f.on("error",function(a){e.emit("error",a)}),a===e._pipeRoot&&(f.add=null),a.pipe(f)}else e._needDrain&&e.emit("drain")}function s(){o||(o=!0,e._currentEntry=null,e._processing=!1,e._process())}},b.prototype.destroy=function(){},b.prototype.write=function(){}},function(e,a,t){var r=t(41),c=t(79),n=t(279),i=t(644),f=t(15),o=t(500),d=e.exports=function(e,a){if(!(this instanceof d))return new d(e,a);this._options={zlib:e?i.lang.deepClone(e):{},tar:a?i.lang.deepClone(a):{}}};d.prototype.createReadStream=function(e){var a=c.Reader(e),t=r.Pack(this._options.tar),i=n.createGzip(this._options.zlib);return this._bubble(i,t,a),a.pipe(t).pipe(i)},d.prototype.createWriteStream=function(e){var a=n.createGunzip(this._options.zlib),t=r.Extract({path:e,strip:this._options.tar.strip||0});return this._bubble(a,t),a.pipe(t),a},d.prototype.createParseStream=function(){var e=n.createGunzip(this._options.zlib),a=r.Parse();return this._bubble(e,a),a.on("entry",function(a){e.emit("entry",a)}),e.pipe(a),e},d.prototype.compress=o.method(function(e,a,t){var r=o.defer();r.promise.then(function(){t&&process.nextTick(function(){t()})}).catch(function(e){t&&process.nextTick(function(){t(e)})});var c=f.createWriteStream(a),n=this.createReadStream(e);return c.on("error",r.callback),c.on("finish",r.callback),n.on("error",r.callback),n.pipe(c),r.promise}),d.prototype.extract=o.method(function(e,a,t){var r=o.defer();r.promise.then(function(){t&&process.nextTick(function(){t()})}).catch(function(e){t&&process.nextTick(function(){t(e)})});var c=f.createReadStream(e),n=this.createWriteStream(a);return n.on("error",r.callback),n.on("finish",r.callback),c.on("error",r.callback),c.pipe(n),r.promise}),d.prototype._bubble=function(){var e=Array.prototype.slice.call(arguments),a=e.shift();e.forEach(function(e){e.on("error",function(e){a.emit("error",e)})})}},function(e,a,t){"use strict";const r=t(160);e.exports=function(e,a){return new Promise((t,c)=>{r(e,a,(e,a)=>null===e?t(a):c(e))})}},function(e,a){e.exports={}},function(e){e.exports={_args:[["got@7.1.0","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"got@7.1.0",_id:"got@7.1.0",_inBundle:!1,_integrity:"sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",_location:"/ganache-core/got",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"got@7.1.0",name:"got",escapedName:"got",rawSpec:"7.1.0",saveSpec:null,fetchSpec:"7.1.0"},_requiredBy:["/ganache-core/swarm-js","/ganache-core/web3-bzz"],_resolved:"https://registry.npmjs.org/got/-/got-7.1.0.tgz",_spec:"7.1.0",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",ava:{concurrency:4},browser:{"decompress-response":!1},bugs:{url:"https://github.com/sindresorhus/got/issues"},dependencies:{"decompress-response":"^3.2.0",duplexer3:"^0.1.4","get-stream":"^3.0.0","is-plain-obj":"^1.1.0","is-retry-allowed":"^1.0.0","is-stream":"^1.0.0",isurl:"^1.0.0-alpha5","lowercase-keys":"^1.0.0","p-cancelable":"^0.3.0","p-timeout":"^1.1.1","safe-buffer":"^5.0.1","timed-out":"^4.0.0","url-parse-lax":"^1.0.0","url-to-options":"^1.0.1"},description:"Simplified HTTP requests",devDependencies:{ava:"^0.20.0",coveralls:"^2.11.4","form-data":"^2.1.1","get-port":"^3.0.0","into-stream":"^3.0.0",nyc:"^11.0.2",pem:"^1.4.4",pify:"^3.0.0",tempfile:"^2.0.0",tempy:"^0.1.0","universal-url":"^1.0.0-alpha",xo:"^0.18.0"},engines:{node:">=4"},files:["index.js"],homepage:"https://github.com/sindresorhus/got#readme",keywords:["http","https","get","got","url","uri","request","util","utility","simple","curl","wget","fetch","net","network","electron"],license:"MIT",maintainers:[{name:"Sindre Sorhus",email:"sindresorhus@gmail.com",url:"sindresorhus.com"},{name:"Vsevolod Strukchinsky",email:"floatdrop@gmail.com",url:"github.com/floatdrop"},{name:"Alexander Tesfamichael",email:"alex.tesfamichael@gmail.com",url:"alextes.me"}],name:"got",repository:{type:"git",url:"git+https://github.com/sindresorhus/got.git"},scripts:{coveralls:"nyc report --reporter=text-lcov | coveralls",test:"xo && nyc ava"},version:"7.1.0"}},function(e,a,t){"use strict";e.exports=((e,a)=>(a=a||(()=>{}),e.then(e=>new Promise(e=>{e(a())}).then(()=>e),e=>new Promise(e=>{e(a())}).then(()=>{throw e}))))},function(e,a,t){"use strict";const r=t(662);class c extends Error{constructor(e){super(e),this.name="TimeoutError"}}e.exports=((e,a,t)=>new Promise((n,i)=>{if("number"!=typeof a||a<0)throw new TypeError("Expected `ms` to be a positive number");const f=setTimeout(()=>{if("function"==typeof t)return void n(t());const e="string"==typeof t?t:`Promise timed out after ${a} milliseconds`,r=t instanceof Error?t:new c(e);i(r)},a);r(e.then(n,i),()=>{clearTimeout(f)})})),e.exports.TimeoutError=c},function(e,a,t){"use strict";class r extends Error{constructor(){super("Promise was canceled"),this.name="CancelError"}}class c{static fn(e){return function(){const a=[].slice.apply(arguments);return new c((t,r,c)=>{a.unshift(t),e.apply(null,a).then(r,c)})}}constructor(e){this._pending=!0,this._canceled=!1,this._promise=new Promise((a,t)=>(this._reject=t,e(e=>{this._cancel=e},e=>{this._pending=!1,a(e)},e=>{this._pending=!1,t(e)})))}then(){return this._promise.then.apply(this._promise,arguments)}catch(){return this._promise.catch.apply(this._promise,arguments)}cancel(){if(this._pending&&!this._canceled){if("function"==typeof this._cancel)try{this._cancel()}catch(e){this._reject(e)}this._canceled=!0,this._reject(new r)}}get canceled(){return this._canceled}}Object.setPrototypeOf(c.prototype,Promise.prototype),e.exports=c,e.exports.CancelError=r},function(e,a,t){"use strict";var r=Object.prototype.toString;e.exports=function(e){var a;return"[object Object]"===r.call(e)&&(null===(a=Object.getPrototypeOf(e))||a===Object.getPrototypeOf({}))}},function(e,a,t){"use strict";e.exports=function(e){return"object"==typeof e&&null!==e}},function(e,a,t){"use strict";
/**
 * @file Tests if ES6 Symbol is supported.
 * @version 1.4.2
 * @author Xotic750 <Xotic750@gmail.com>
 * @copyright  Xotic750
 * @license {@link <https://opensource.org/licenses/MIT> MIT}
 * @module has-symbol-support-x
 */e.exports="function"==typeof Symbol&&"symbol"==typeof Symbol("")},function(e,a,t){"use strict";
/**
 * @file Tests if ES6 @@toStringTag is supported.
 * @see {@link http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag|26.3.1 @@toStringTag}
 * @version 1.4.1
 * @author Xotic750 <Xotic750@gmail.com>
 * @copyright  Xotic750
 * @license {@link <https://opensource.org/licenses/MIT> MIT}
 * @module has-to-string-tag-x
 */e.exports=t(667)&&"symbol"==typeof Symbol.toStringTag},function(e,a,t){"use strict";const r=t(668),c=t(666),n=Object.prototype.toString,i=(e,a)=>!!c(e)&&(!r&&"[object URL]"===n.call(e)||"href"in e&&("protocol"in e&&("username"in e&&("password"in e&&("hostname"in e&&("port"in e&&("host"in e&&("pathname"in e&&("search"in e&&("hash"in e&&!(!0!==a&&!c(e.searchParams))))))))))));i.lenient=(e=>i(e,!0)),e.exports=i},function(e,a,t){"use strict";var r=["ETIMEDOUT","ECONNRESET","EADDRINUSE","ESOCKETTIMEDOUT","ECONNREFUSED","EPIPE"],c=["ENOTFOUND","ENETUNREACH","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_CRL","UNABLE_TO_DECRYPT_CERT_SIGNATURE","UNABLE_TO_DECRYPT_CRL_SIGNATURE","UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY","CERT_SIGNATURE_FAILURE","CRL_SIGNATURE_FAILURE","CERT_NOT_YET_VALID","CERT_HAS_EXPIRED","CRL_NOT_YET_VALID","CRL_HAS_EXPIRED","ERROR_IN_CERT_NOT_BEFORE_FIELD","ERROR_IN_CERT_NOT_AFTER_FIELD","ERROR_IN_CRL_LAST_UPDATE_FIELD","ERROR_IN_CRL_NEXT_UPDATE_FIELD","OUT_OF_MEM","DEPTH_ZERO_SELF_SIGNED_CERT","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","UNABLE_TO_VERIFY_LEAF_SIGNATURE","CERT_CHAIN_TOO_LONG","CERT_REVOKED","INVALID_CA","PATH_LENGTH_EXCEEDED","INVALID_PURPOSE","CERT_UNTRUSTED","CERT_REJECTED"];e.exports=function(e){return!e||!e.code||(-1!==r.indexOf(e.code)||-1===c.indexOf(e.code))}},function(e,a,t){"use strict";const r=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];e.exports=((e,a)=>{const t=Object.keys(a),c=new Set(Object.keys(e).concat(r));for(const r of c)-1===t.indexOf(r)&&(a[r]="function"==typeof e[r]?e[r].bind(e):e[r])})},function(e,a,t){"use strict";e.exports=function(e){for(var a={},t=Object.keys(Object(e)),r=0;r<t.length;r++)a[t[r].toLowerCase()]=e[t[r]];return a}},function(e,a,t){"use strict";e.exports=function(e){var a={protocol:e.protocol,hostname:e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:`${e.pathname}${e.search}`,href:e.href};return""!==e.port&&(a.port=Number(e.port)),(e.username||e.password)&&(a.auth=`${e.username}:${e.password}`),a}},function(e,a,t){"use strict";e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string, got "+typeof e);return e=e.trim(),/^\.*\/|^(?!localhost)\w+:/.test(e)?e:e.replace(/^(?!(?:\w+:)?\/\/)/,"http://")}},function(e,a,t){"use strict";var r=t(32),c=t(674);e.exports=function(e){var a=c(e),t=r.parse(a);return a!==e&&(t.protocol=null),t}},function(e,a,t){"use strict";const r=t(6).PassThrough;e.exports=(e=>{const a=(e=Object.assign({},e)).array;let t=e.encoding;const c="buffer"===t;let n=!1;a?n=!(t||c):t=t||"utf8",c&&(t=null);let i=0;const f=[],o=new r({objectMode:n});return t&&o.setEncoding(t),o.on("data",e=>{f.push(e),n?i=f.length:i+=e.length}),o.getBufferedValue=(()=>a?f:c?Buffer.concat(f,i):f.join("")),o.getBufferedLength=(()=>i),o})},function(e,a,t){"use strict";const r=t(676);function c(e,a){if(!e)return Promise.reject(new Error("Expected a stream"));const t=(a=Object.assign({maxBuffer:1/0},a)).maxBuffer;let c,n;const i=new Promise((i,f)=>{const o=e=>{e&&(e.bufferedData=c.getBufferedValue()),f(e)};c=r(a),e.once("error",o),e.pipe(c),c.on("data",()=>{c.getBufferedLength()>t&&f(new Error("maxBuffer exceeded"))}),c.once("error",o),c.on("end",i),n=(()=>{e.unpipe&&e.unpipe(c)})});return i.then(n,n),i.then(()=>c.getBufferedValue())}e.exports=c,e.exports.buffer=((e,a)=>c(e,Object.assign({},a,{encoding:"buffer"}))),e.exports.array=((e,a)=>c(e,Object.assign({},a,{array:!0})))},function(e,a,t){"use strict";var r=e.exports=function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.pipe};r.writable=function(e){return r(e)&&!1!==e.writable&&"function"==typeof e._write&&"object"==typeof e._writableState},r.readable=function(e){return r(e)&&!1!==e.readable&&"function"==typeof e._read&&"object"==typeof e._readableState},r.duplex=function(e){return r.writable(e)&&r.readable(e)},r.transform=function(e){return r.duplex(e)&&"function"==typeof e._transform&&"object"==typeof e._transformState}},function(e,a,t){"use strict";var r=t(6);function c(e,a,t){void 0===t&&(t=a,a=e,e=null),r.Duplex.call(this,e),"function"!=typeof t.read&&(t=new r.Readable(e).wrap(t)),this._writable=a,this._readable=t,this._waiting=!1;var c=this;a.once("finish",function(){c.end()}),this.once("finish",function(){a.end()}),t.on("readable",function(){c._waiting&&(c._waiting=!1,c._read())}),t.once("end",function(){c.push(null)}),e&&void 0!==e.bubbleErrors&&!e.bubbleErrors||(a.on("error",function(e){c.emit("error",e)}),t.on("error",function(e){c.emit("error",e)}))}c.prototype=Object.create(r.Duplex.prototype,{constructor:{value:c}}),c.prototype._write=function(e,a,t){this._writable.write(e,a,t)},c.prototype._read=function(){for(var e,a=0;null!==(e=this._readable.read());)this.push(e),a++;0===a&&(this._waiting=!0)},e.exports=function(e,a,t){return new c(e,a,t)},e.exports.DuplexWrapper=c},function(e,a,t){"use strict";const r=t(5),c=t(43),n=t(59),i=t(6).PassThrough,f=t(32),o=t(282),d=t(679),s=t(678),b=t(677),u=t(281),l=t(675),p=t(673),h=t(672),m=t(280),g=t(670),v=t(7).Buffer,y=t(669),_=t(665),w=t(664),A=t(663),k=t(661),x=new Set([300,301,302,303,304,305,307,308]),E=new Set([300,303,307,308]);function S(e){e=e||{};const a=new r,i=e.href||f.resolve(f.format(e),e.path),o=[];let d,s=0;const b=e=>{if("http:"!==e.protocol&&"https:"!==e.protocol)return void a.emit("error",new j.UnsupportedProtocolError(e));let r="https:"===e.protocol?n:c;if(e.useElectronNet&&process.versions.electron){const e=t(660);r=e.net||e.remote.net}const l=r.request(e,t=>{const r=t.statusCode;t.url=d||i,t.requestUrl=i;const c=e.followRedirect&&"location"in t.headers,n=c&&x.has(r);if(c&&E.has(r)||n&&("GET"===e.method||"HEAD"===e.method)){if(t.resume(),303===r&&(e.method="GET"),o.length>=10)return void a.emit("error",new j.MaxRedirectsError(r,o,e),null,t);const c=v.from(t.headers.location,"binary").toString();d=f.resolve(f.format(e),c),o.push(d);const n=Object.assign({},e,f.parse(d));return a.emit("redirect",t,n),void b(n)}setImmediate(()=>{const r=!0===e.decompress&&"function"==typeof m&&"HEAD"!==l.method?m(t):t;e.decompress||-1===["gzip","deflate"].indexOf(t.headers["content-encoding"])||(e.encoding=null),r.redirectUrls=o,a.emit("response",r)})});l.once("error",t=>{const r=e.retries(++s,t);r?setTimeout(b,r,e):a.emit("error",new j.RequestError(t,e))}),e.gotTimeout&&u(l,e.gotTimeout),setImmediate(()=>{a.emit("request",l)})};return setImmediate(()=>{b(e)}),a}function T(e,a){if("string"!=typeof e&&"object"!=typeof e)throw new TypeError(`Parameter \`url\` must be a string or object, not ${typeof e}`);if("string"==typeof e?(e=e.replace(/^unix:/,"http://$&"),e=l(e)):y.lenient(e)&&(e=p(e)),e.auth)throw new Error("Basic authentication must be done with auth option");(a=Object.assign({path:"",retries:2,decompress:!0,useElectronNet:!0},e,{protocol:e.protocol||"http:"},a)).headers=Object.assign({"user-agent":`${k.name}/${k.version} (https://github.com/sindresorhus/got)`,"accept-encoding":"gzip,deflate"},h(a.headers));const t=a.query;t&&("string"!=typeof t&&(a.query=o.stringify(t)),a.path=`${a.path.split("?")[0]}?${a.query}`,delete a.query),a.json&&void 0===a.headers.accept&&(a.headers.accept="application/json");const r=a.body;if(null!==r&&void 0!==r){const e=a.headers;if(!(s(r)||"string"==typeof r||v.isBuffer(r)||a.form||a.json))throw new TypeError("options.body must be a ReadableStream, string, Buffer or plain Object");const t=_(r)||Array.isArray(r);if((a.form||a.json)&&!t)throw new TypeError("options.body must be a plain Object or Array when options.form or options.json is used");if(s(r)&&"function"==typeof r.getBoundary?e["content-type"]=e["content-type"]||`multipart/form-data; boundary=${r.getBoundary()}`:a.form&&t?(e["content-type"]=e["content-type"]||"application/x-www-form-urlencoded",a.body=o.stringify(r)):a.json&&t&&(e["content-type"]=e["content-type"]||"application/json",a.body=JSON.stringify(r)),void 0===e["content-length"]&&void 0===e["transfer-encoding"]&&!s(r)){const t="string"==typeof a.body?v.byteLength(a.body):a.body.length;e["content-length"]=t}a.method=(a.method||"POST").toUpperCase()}else a.method=(a.method||"GET").toUpperCase();if("unix"===a.hostname){const e=/(.+?):(.+)/.exec(a.path);e&&(a.socketPath=e[1],a.path=e[2],a.host=null)}if("function"!=typeof a.retries){const e=a.retries;a.retries=((a,t)=>{if(a>e||!g(t))return 0;return 1e3*(1<<a)+100*Math.random()})}return void 0===a.followRedirect&&(a.followRedirect=!0),a.timeout&&("number"==typeof a.timeout?a.gotTimeout={request:a.timeout}:a.gotTimeout=a.timeout,delete a.timeout),a}function j(e,a){try{return function(e){return(a=>e.gotTimeout&&e.gotTimeout.request?A(a,e.gotTimeout.request,new j.RequestError({message:"Request timed out",code:"ETIMEDOUT"},e)):a)(new w((a,t,r)=>{const c=S(e);let n=!1;a(()=>{n=!0}),c.on("request",t=>{if(n&&t.abort(),a(()=>{t.abort()}),s(e.body))return e.body.pipe(t),void(e.body=void 0);t.end(e.body)}),c.on("response",a=>{(null===e.encoding?b.buffer(a):b(a,e)).catch(a=>r(new j.ReadError(a,e))).then(r=>{const c=a.statusCode,n=e.followRedirect?299:399;if(a.body=r,e.json&&a.body)try{a.body=JSON.parse(a.body)}catch(a){if(c>=200&&c<300)throw new j.ParseError(a,c,e,r)}if(304!==c&&(c<200||c>n))throw new j.HTTPError(c,a.headers,e);t(a)}).catch(e=>{Object.defineProperty(e,"response",{value:a}),r(e)})}),c.on("error",r)}))}(T(e,a))}catch(e){return Promise.reject(e)}}j.stream=((e,a)=>(function(e){const a=new i,t=new i,r=d(a,t);let c;if(e.gotTimeout&&e.gotTimeout.request&&(c=setTimeout(()=>{r.emit("error",new j.RequestError({message:"Request timed out",code:"ETIMEDOUT"},e))},e.gotTimeout.request)),e.json)throw new Error("got can not be used as stream when options.json is used");e.body&&(r.write=(()=>{throw new Error("got's stream is not writable when options.body is used")}));const n=S(e);return n.on("request",t=>{r.emit("request",t),s(e.body)?e.body.pipe(t):e.body?t.end(e.body):"POST"!==e.method&&"PUT"!==e.method&&"PATCH"!==e.method?t.end():a.pipe(t)}),n.on("response",a=>{clearTimeout(c);const n=a.statusCode;a.pipe(t),304!==n&&(n<200||n>299)?r.emit("error",new j.HTTPError(n,a.headers,e),null,a):r.emit("response",a)}),n.on("redirect",r.emit.bind(r,"redirect")),n.on("error",r.emit.bind(r,"error")),r})(T(e,a)));const C=["get","post","put","patch","head","delete"];for(const e of C)j[e]=((a,t)=>j(a,Object.assign({},t,{method:e}))),j.stream[e]=((a,t)=>j.stream(a,Object.assign({},t,{method:e})));class R extends Error{constructor(e,a,t){super(e),this.name="StdError",void 0!==a.code&&(this.code=a.code),Object.assign(this,{host:t.host,hostname:t.hostname,method:t.method,path:t.path,protocol:t.protocol,url:t.href})}}j.RequestError=class extends R{constructor(e,a){super(e.message,e,a),this.name="RequestError"}},j.ReadError=class extends R{constructor(e,a){super(e.message,e,a),this.name="ReadError"}},j.ParseError=class extends R{constructor(e,a,t,r){super(`${e.message} in "${f.format(t)}": \n${r.slice(0,77)}...`,e,t),this.name="ParseError",this.statusCode=a,this.statusMessage=c.STATUS_CODES[this.statusCode]}},j.HTTPError=class extends R{constructor(e,a,t){const r=c.STATUS_CODES[e];super(`Response code ${e} (${r})`,{},t),this.name="HTTPError",this.statusCode=e,this.statusMessage=r,this.headers=a}},j.MaxRedirectsError=class extends R{constructor(e,a,t){super("Redirected 10 times. Aborting.",{},t),this.name="MaxRedirectsError",this.statusCode=e,this.statusMessage=c.STATUS_CODES[this.statusCode],this.redirectUrls=a}},j.UnsupportedProtocolError=class extends R{constructor(e){super(`Unsupported protocol "${e.protocol}"`,{},e),this.name="UnsupportedProtocolError"}},e.exports=j},function(e,a,t){"use strict";e.exports=function(e){var a=e._SomePromiseArray;function t(e){var t=new a(e),r=t.promise();return t.setHowMany(1),t.setUnwrap(),t.init(),r}e.any=function(e){return t(e)},e.prototype.any=function(){return t(this)}}},function(e,a,t){"use strict";e.exports=function(e,a){var t=e.reduce,r=e.all;function c(){return r(this)}e.prototype.each=function(e){return t(this,e,a,0)._then(c,void 0,void 0,this,void 0)},e.prototype.mapSeries=function(e){return t(this,e,a,a)},e.each=function(e,r){return t(e,r,a,0)._then(c,void 0,void 0,e,void 0)},e.mapSeries=function(e,r){return t(e,r,a,a)}}},function(e,a,t){"use strict";e.exports=function(e,a){var t=e.map;e.prototype.filter=function(e,r){return t(this,e,r,a)},e.filter=function(e,r,c){return t(e,r,c,a)}}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=t(13),n=t(42).RangeError,i=t(42).AggregateError,f=c.isArray,o={};function d(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function s(e,a){if((0|a)!==a||a<0)return r("expecting a positive integer\n\n    See http://goo.gl/MqrFmX\n");var t=new d(e),c=t.promise();return t.setHowMany(a),t.init(),c}c.inherits(d,a),d.prototype._init=function(){if(this._initialized)if(0!==this._howMany){this._init$(void 0,-5);var e=f(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}else this._resolve([])},d.prototype.init=function(){this._initialized=!0,this._init()},d.prototype.setUnwrap=function(){this._unwrap=!0},d.prototype.howMany=function(){return this._howMany},d.prototype.setHowMany=function(e){this._howMany=e},d.prototype._promiseFulfilled=function(e){return this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0)},d.prototype._promiseRejected=function(e){return this._addRejected(e),this._checkOutcome()},d.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(o),this._checkOutcome())},d.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var e=new i,a=this.length();a<this._values.length;++a)this._values[a]!==o&&e.push(this._values[a]);return e.length>0?this._reject(e):this._cancel(),!0}return!1},d.prototype._fulfilled=function(){return this._totalResolved},d.prototype._rejected=function(){return this._values.length-this.length()},d.prototype._addRejected=function(e){this._values.push(e)},d.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},d.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},d.prototype._getRangeError=function(e){var a="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new n(a)},d.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(e,a){return s(e,a)},e.prototype.some=function(e){return s(this,e)},e._SomePromiseArray=d}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=e.PromiseInspection;function n(e){this.constructor$(e)}t(13).inherits(n,a),n.prototype._promiseResolved=function(e,a){return this._values[e]=a,++this._totalResolved>=this._length&&(this._resolve(this._values),!0)},n.prototype._promiseFulfilled=function(e,a){var t=new c;return t._bitField=33554432,t._settledValueField=e,this._promiseResolved(a,t)},n.prototype._promiseRejected=function(e,a){var t=new c;return t._bitField=16777216,t._settledValueField=e,this._promiseResolved(a,t)},e.settle=function(e){return r.deprecated(".settle()",".reflect()"),new n(e).promise()},e.prototype.settle=function(){return e.settle(this)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n,i){var f=e._getDomain,o=t(13),d=o.tryCatch;function s(a,t,r,c){this.constructor$(a);var i=f();this._fn=null===i?t:o.domainBind(i,t),void 0!==r&&(r=e.resolve(r))._attachCancellationCallback(this),this._initialValue=r,this._currentCancellable=null,this._eachValues=c===n?Array(this._length):0===c?null:void 0,this._promise._captureStackTrace(),this._init$(void 0,-5)}function b(e,a){this.isFulfilled()?a._resolve(e):a._reject(e)}function u(e,a,t,c){return"function"!=typeof a?r("expecting a function but got "+o.classString(a)):new s(e,a,t,c).promise()}function l(a){this.accum=a,this.array._gotAccum(a);var t=c(this.value,this.array._promise);return t instanceof e?(this.array._currentCancellable=t,t._then(p,void 0,void 0,this,void 0)):p.call(this,t)}function p(a){var t,r=this.array,c=r._promise,n=d(r._fn);c._pushContext(),(t=void 0!==r._eachValues?n.call(c._boundValue(),a,this.index,this.length):n.call(c._boundValue(),this.accum,a,this.index,this.length))instanceof e&&(r._currentCancellable=t);var f=c._popContext();return i.checkForgottenReturns(t,f,void 0!==r._eachValues?"Promise.each":"Promise.reduce",c),t}o.inherits(s,a),s.prototype._gotAccum=function(e){void 0!==this._eachValues&&null!==this._eachValues&&e!==n&&this._eachValues.push(e)},s.prototype._eachComplete=function(e){return null!==this._eachValues&&this._eachValues.push(e),this._eachValues},s.prototype._init=function(){},s.prototype._resolveEmptyArray=function(){this._resolve(void 0!==this._eachValues?this._eachValues:this._initialValue)},s.prototype.shouldCopyValues=function(){return!1},s.prototype._resolve=function(e){this._promise._resolveCallback(e),this._values=null},s.prototype._resultCancelled=function(a){if(a===this._initialValue)return this._cancel();this._isResolved()||(this._resultCancelled$(),this._currentCancellable instanceof e&&this._currentCancellable.cancel(),this._initialValue instanceof e&&this._initialValue.cancel())},s.prototype._iterate=function(a){var t,r;this._values=a;var c=a.length;if(void 0!==this._initialValue?(t=this._initialValue,r=0):(t=e.resolve(a[0]),r=1),this._currentCancellable=t,!t.isRejected())for(;r<c;++r){var n={accum:null,value:a[r],index:r,length:c,array:this};t=t._then(l,void 0,void 0,n,void 0)}void 0!==this._eachValues&&(t=t._then(this._eachComplete,void 0,void 0,this,void 0)),t._then(b,b,void 0,t,this)},e.prototype.reduce=function(e,a){return u(this,e,a,null)},e.reduce=function(e,a,t,r){return u(e,a,t,r)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(13),i=function(e){return e.then(function(a){return f(a,e)})};function f(t,f){var o=r(t);if(o instanceof e)return i(o);if(null===(t=n.asArray(t)))return c("expecting an array or an iterable object but got "+n.classString(t));var d=new e(a);void 0!==f&&d._propagateFrom(f,3);for(var s=d._fulfill,b=d._reject,u=0,l=t.length;u<l;++u){var p=t[u];(void 0!==p||u in t)&&e.cast(p)._then(s,b,void 0,d,null)}return d}e.race=function(e){return f(e,void 0)},e.prototype.race=function(){return f(this,void 0)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n,i=t(13),f=i.isObject,o=t(57);"function"==typeof Map&&(n=Map);var d=function(){var e=0,a=0;function t(t,r){this[e]=t,this[e+a]=r,e++}return function(r){a=r.size,e=0;var c=new Array(2*r.size);return r.forEach(t,c),c}}();function s(e){var a,t=!1;if(void 0!==n&&e instanceof n)a=d(e),t=!0;else{var r=o.keys(e),c=r.length;a=new Array(2*c);for(var i=0;i<c;++i){var f=r[i];a[i]=e[f],a[i+c]=f}}this.constructor$(a),this._isMap=t,this._init$(void 0,t?-6:-3)}function b(a){var t,n=r(a);return f(n)?(t=n instanceof e?n._then(e.props,void 0,void 0,void 0,void 0):new s(n).promise(),n instanceof e&&t._propagateFrom(n,2),t):c("cannot await properties of a non-object\n\n    See http://goo.gl/MqrFmX\n")}i.inherits(s,a),s.prototype._init=function(){},s.prototype._promiseFulfilled=function(e,a){if(this._values[a]=e,++this._totalResolved>=this._length){var t;if(this._isMap)t=function(e){for(var a=new n,t=e.length/2|0,r=0;r<t;++r){var c=e[t+r],i=e[r];a.set(c,i)}return a}(this._values);else{t={};for(var r=this.length(),c=0,i=this.length();c<i;++c)t[this._values[c+r]]=this._values[c]}return this._resolve(t),!0}return!1},s.prototype.shouldCopyValues=function(){return!1},s.prototype.getActualLength=function(e){return e>>1},e.prototype.props=function(){return b(this)},e.props=function(e){return b(e)}}},function(e,a,t){"use strict";e.exports=function(e,a){var r={},c=t(13),n=t(283),i=c.withAppended,f=c.maybeWrapAsError,o=c.canEvaluate,d=t(42).TypeError,s={__isPromisified__:!0},b=new RegExp("^(?:"+["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"].join("|")+")$"),u=function(e){return c.isIdentifier(e)&&"_"!==e.charAt(0)&&"constructor"!==e};function l(e){return!b.test(e)}function p(e){try{return!0===e.__isPromisified__}catch(e){return!1}}function h(e,a,t){var r=c.getDataPropertyOrDefault(e,a+t,s);return!!r&&p(r)}function m(e,a,t,r){for(var n=c.inheritedDataKeys(e),i=[],f=0;f<n.length;++f){var o=n[f],s=e[o],b=r===u||u(o,s,e);"function"!=typeof s||p(s)||h(e,o,a)||!r(o,s,e,b)||i.push(o,s)}return function(e,a,t){for(var r=0;r<e.length;r+=2){var c=e[r];if(t.test(c))for(var n=c.replace(t,""),i=0;i<e.length;i+=2)if(e[i]===n)throw new d("Cannot promisify an API that has normal methods with '%s'-suffix\n\n    See http://goo.gl/MqrFmX\n".replace("%s",a))}}(i,a,t),i}var g=function(e){return e.replace(/([$])/,"\\$")},v=function(e){return c.filledRange(e,"_arg","")};var y=o?function(t,o,d,s,b,u){var l=Math.max(0,function(e){return"number"==typeof e.length?Math.max(Math.min(e.length,1024),0):0}(s)-1),p=function(e){for(var a=[e],t=Math.max(0,e-1-3),r=e-1;r>=t;--r)a.push(r);for(r=e+1;r<=3;++r)a.push(r);return a}(l),h="string"==typeof t||o===r;function m(e){var a=v(e).join(", "),t=e>0?", ":"";return(h?"ret = callback.call(this, {{args}}, nodeback); break;\n":void 0===o?"ret = callback({{args}}, nodeback); break;\n":"ret = callback.call(receiver, {{args}}, nodeback); break;\n").replace("{{args}}",a).replace(", ",t)}var g="string"==typeof t?"this != null ? this['"+t+"'] : fn":"fn",y="'use strict';                                                \n        var ret = function (Parameters) {                                    \n            'use strict';                                                    \n            var len = arguments.length;                                      \n            var promise = new Promise(INTERNAL);                             \n            promise._captureStackTrace();                                    \n            var nodeback = nodebackForPromise(promise, "+u+");   \n            var ret;                                                         \n            var callback = tryCatch([GetFunctionCode]);                      \n            switch(len) {                                                    \n                [CodeForSwitchCase]                                          \n            }                                                                \n            if (ret === errorObj) {                                          \n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n            }                                                                \n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \n            return promise;                                                  \n        };                                                                   \n        notEnumerableProp(ret, '__isPromisified__', true);                   \n        return ret;                                                          \n    ".replace("[CodeForSwitchCase]",function(){for(var e="",a=0;a<p.length;++a)e+="case "+p[a]+":"+m(p[a]);return e+="                                                             \n        default:                                                             \n            var args = new Array(len + 1);                                   \n            var i = 0;                                                       \n            for (var i = 0; i < len; ++i) {                                  \n               args[i] = arguments[i];                                       \n            }                                                                \n            args[i] = nodeback;                                              \n            [CodeForCall]                                                    \n            break;                                                           \n        ".replace("[CodeForCall]",h?"ret = callback.apply(this, args);\n":"ret = callback.apply(receiver, args);\n")}()).replace("[GetFunctionCode]",g);return y=y.replace("Parameters",function(e){return c.filledRange(Math.max(e,3),"_arg","")}(l)),new Function("Promise","fn","receiver","withAppended","maybeWrapAsError","nodebackForPromise","tryCatch","errorObj","notEnumerableProp","INTERNAL",y)(e,s,o,i,f,n,c.tryCatch,c.errorObj,c.notEnumerableProp,a)}:function(t,o,d,s,b,u){var l=function(){return this}(),p=t;function h(){var c=o;o===r&&(c=this);var d=new e(a);d._captureStackTrace();var s="string"==typeof p&&this!==l?this[p]:t,b=n(d,u);try{s.apply(c,i(arguments,b))}catch(e){d._rejectCallback(f(e),!0,!0)}return d._isFateSealed()||d._setAsyncGuaranteed(),d}return"string"==typeof p&&(t=s),c.notEnumerableProp(h,"__isPromisified__",!0),h};function _(e,a,t,n,i){for(var f=new RegExp(g(a)+"$"),o=m(e,a,f,t),d=0,s=o.length;d<s;d+=2){var b=o[d],u=o[d+1],l=b+a;if(n===y)e[l]=y(b,r,b,u,a,i);else{var p=n(u,function(){return y(b,r,b,u,a,i)});c.notEnumerableProp(p,"__isPromisified__",!0),e[l]=p}}return c.toFastProperties(e),e}e.promisify=function(e,a){if("function"!=typeof e)throw new d("expecting a function but got "+c.classString(e));if(p(e))return e;var t=function(e,a,t){return y(e,a,void 0,e,null,t)}(e,void 0===(a=Object(a)).context?r:a.context,!!a.multiArgs);return c.copyDescriptors(e,t,l),t},e.promisifyAll=function(e,a){if("function"!=typeof e&&"object"!=typeof e)throw new d("the target of promisifyAll must be an object or a function\n\n    See http://goo.gl/MqrFmX\n");var t=!!(a=Object(a)).multiArgs,r=a.suffix;"string"!=typeof r&&(r="Async");var n=a.filter;"function"!=typeof n&&(n=u);var i=a.promisifier;if("function"!=typeof i&&(i=y),!c.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n    See http://goo.gl/MqrFmX\n");for(var f=c.inheritedDataKeys(e),o=0;o<f.length;++o){var s=e[f[o]];"constructor"!==f[o]&&c.isClass(s)&&(_(s.prototype,r,n,i,t),_(s,r,n,i,t))}return _(e,r,n,i,t)}}},function(e,a,t){"use strict";e.exports=function(e){var a=t(13),r=e._async,c=a.tryCatch,n=a.errorObj;function i(e,t){if(!a.isArray(e))return f.call(this,e,t);var i=c(t).apply(this._boundValue(),[null].concat(e));i===n&&r.throwLater(i.e)}function f(e,a){var t=this._boundValue(),i=void 0===e?c(a).call(t,null):c(a).call(t,null,e);i===n&&r.throwLater(i.e)}function o(e,a){if(!e){var t=new Error(e+"");t.cause=e,e=t}var i=c(a).call(this._boundValue(),e);i===n&&r.throwLater(i.e)}e.prototype.asCallback=e.prototype.nodeify=function(e,a){if("function"==typeof e){var t=f;void 0!==a&&Object(a).spread&&(t=i),this._then(t,o,void 0,this,e)}return this}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n,i){var f=t(42).TypeError,o=t(13),d=o.errorObj,s=o.tryCatch,b=[];function u(a,t,c,n){if(i.cancellation()){var f=new e(r),o=this._finallyPromise=new e(r);this._promise=f.lastly(function(){return o}),f._captureStackTrace(),f._setOnCancel(this)}else{(this._promise=new e(r))._captureStackTrace()}this._stack=n,this._generatorFunction=a,this._receiver=t,this._generator=void 0,this._yieldHandlers="function"==typeof c?[c].concat(b):b,this._yieldedPromise=null,this._cancellationPhase=!1}o.inherits(u,n),u.prototype._isResolved=function(){return null===this._promise},u.prototype._cleanup=function(){this._promise=this._generator=null,i.cancellation()&&null!==this._finallyPromise&&(this._finallyPromise._fulfill(),this._finallyPromise=null)},u.prototype._promiseCancelled=function(){if(!this._isResolved()){var a;if(void 0!==this._generator.return)this._promise._pushContext(),a=s(this._generator.return).call(this._generator,void 0),this._promise._popContext();else{var t=new e.CancellationError("generator .return() sentinel");e.coroutine.returnSentinel=t,this._promise._attachExtraTrace(t),this._promise._pushContext(),a=s(this._generator.throw).call(this._generator,t),this._promise._popContext()}this._cancellationPhase=!0,this._yieldedPromise=null,this._continue(a)}},u.prototype._promiseFulfilled=function(e){this._yieldedPromise=null,this._promise._pushContext();var a=s(this._generator.next).call(this._generator,e);this._promise._popContext(),this._continue(a)},u.prototype._promiseRejected=function(e){this._yieldedPromise=null,this._promise._attachExtraTrace(e),this._promise._pushContext();var a=s(this._generator.throw).call(this._generator,e);this._promise._popContext(),this._continue(a)},u.prototype._resultCancelled=function(){if(this._yieldedPromise instanceof e){var a=this._yieldedPromise;this._yieldedPromise=null,a.cancel()}},u.prototype.promise=function(){return this._promise},u.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._promiseFulfilled(void 0)},u.prototype._continue=function(a){var t=this._promise;if(a===d)return this._cleanup(),this._cancellationPhase?t.cancel():t._rejectCallback(a.e,!1);var r=a.value;if(!0===a.done)return this._cleanup(),this._cancellationPhase?t.cancel():t._resolveCallback(r);var n=c(r,this._promise);if(n instanceof e||null!==(n=function(a,t,r){for(var n=0;n<t.length;++n){r._pushContext();var i=s(t[n])(a);if(r._popContext(),i===d){r._pushContext();var f=e.reject(d.e);return r._popContext(),f}var o=c(i,r);if(o instanceof e)return o}return null}(n,this._yieldHandlers,this._promise))){var i=(n=n._target())._bitField;0==(50397184&i)?(this._yieldedPromise=n,n._proxy(this,null)):0!=(33554432&i)?e._async.invoke(this._promiseFulfilled,this,n._value()):0!=(16777216&i)?e._async.invoke(this._promiseRejected,this,n._reason()):this._promiseCancelled()}else this._promiseRejected(new f("A value %s was yielded that could not be treated as a promise\n\n    See http://goo.gl/MqrFmX\n\n".replace("%s",String(r))+"From coroutine:\n"+this._stack.split("\n").slice(1,-7).join("\n")))},e.coroutine=function(e,a){if("function"!=typeof e)throw new f("generatorFunction must be a function\n\n    See http://goo.gl/MqrFmX\n");var t=Object(a).yieldHandler,r=u,c=(new Error).stack;return function(){var a=e.apply(this,arguments),n=new r(void 0,void 0,t,c),i=n.promise();return n._generator=a,n._promiseFulfilled(void 0),i}},e.coroutine.addYieldHandler=function(e){if("function"!=typeof e)throw new f("expecting a function but got "+o.classString(e));b.push(e)},e.spawn=function(t){if(i.deprecated("Promise.spawn()","Promise.coroutine()"),"function"!=typeof t)return a("generatorFunction must be a function\n\n    See http://goo.gl/MqrFmX\n");var r=new u(t,this),c=r.promise();return r._run(e.spawn),c}}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=t(13),n=e.TimeoutError;function i(e){this.handle=e}i.prototype._resultCancelled=function(){clearTimeout(this.handle)};var f=function(e){return o(+this).thenReturn(e)},o=e.delay=function(t,c){var n,o;return void 0!==c?(n=e.resolve(c)._then(f,null,null,t,void 0),r.cancellation()&&c instanceof e&&n._setOnCancel(c)):(n=new e(a),o=setTimeout(function(){n._fulfill()},+t),r.cancellation()&&n._setOnCancel(new i(o)),n._captureStackTrace()),n._setAsyncGuaranteed(),n};e.prototype.delay=function(e){return o(e,this)};function d(e){return clearTimeout(this.handle),e}function s(e){throw clearTimeout(this.handle),e}e.prototype.timeout=function(e,a){var t,f;e=+e;var o=new i(setTimeout(function(){t.isPending()&&function(e,a,t){var r;r="string"!=typeof a?a instanceof Error?a:new n("operation timed out"):new n(a),c.markAsOriginatingFromRejection(r),e._attachExtraTrace(r),e._reject(r),null!=t&&t.cancel()}(t,a,f)},e));return r.cancellation()?(f=this.then(),(t=f._then(d,s,void 0,o,void 0))._setOnCancel(o)):t=this._then(d,s,void 0,o,void 0),t}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n,i){var f=t(13),o=t(42).TypeError,d=t(13).inherits,s=f.errorObj,b=f.tryCatch,u={};function l(e){setTimeout(function(){throw e},0)}function p(a,t){var c=0,i=a.length,f=new e(n);return function n(){if(c>=i)return f._fulfill();var o=function(e){var a=r(e);return a!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&a._setDisposable(e._getDisposer()),a}(a[c++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(t),a.promise)}catch(e){return l(e)}if(o instanceof e)return o._then(n,l,null,null,null)}n()}(),f}function h(e,a,t){this._data=e,this._promise=a,this._context=t}function m(e,a,t){this.constructor$(e,a,t)}function g(e){return h.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}function v(e){this.length=e,this.promise=null,this[e-1]=null}h.prototype.data=function(){return this._data},h.prototype.promise=function(){return this._promise},h.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():u},h.prototype.tryDispose=function(e){var a=this.resource(),t=this._context;void 0!==t&&t._pushContext();var r=a!==u?this.doDispose(a,e):null;return void 0!==t&&t._popContext(),this._promise._unsetDisposable(),this._data=null,r},h.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},d(m,h),m.prototype.doDispose=function(e,a){return this.data().call(e,e,a)},v.prototype._resultCancelled=function(){for(var a=this.length,t=0;t<a;++t){var r=this[t];r instanceof e&&r.cancel()}},e.using=function(){var t=arguments.length;if(t<2)return a("you must pass at least 2 arguments to Promise.using");var c,n=arguments[t-1];if("function"!=typeof n)return a("expecting a function but got "+f.classString(n));var o=!0;2===t&&Array.isArray(arguments[0])?(t=(c=arguments[0]).length,o=!1):(c=arguments,t--);for(var d=new v(t),u=0;u<t;++u){var l=c[u];if(h.isDisposer(l)){var m=l;(l=l.promise())._setDisposable(m)}else{var y=r(l);y instanceof e&&(l=y._then(g,null,null,{resources:d,index:u},void 0))}d[u]=l}var _=new Array(d.length);for(u=0;u<_.length;++u)_[u]=e.resolve(d[u]).reflect();var w=e.all(_).then(function(e){for(var a=0;a<e.length;++a){var t=e[a];if(t.isRejected())return s.e=t.error(),s;if(!t.isFulfilled())return void w.cancel();e[a]=t.value()}A._pushContext(),n=b(n);var r=o?n.apply(void 0,e):n(e),c=A._popContext();return i.checkForgottenReturns(r,c,"Promise.using",A),r}),A=w.lastly(function(){var a=new e.PromiseInspection(w);return p(d,a)});return d.promise=A,A._setOnCancel(d),A},e.prototype._setDisposable=function(e){this._bitField=131072|this._bitField,this._disposer=e},e.prototype._isDisposable=function(){return(131072&this._bitField)>0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(e){if("function"==typeof e)return new m(e,this,c());throw new o}}},function(e,a,t){"use strict";var r=Object.create;if(r){var c=r(null),n=r(null);c[" size"]=n[" size"]=0}e.exports=function(e){var a,r,i=t(13),f=i.canEvaluate,o=i.isIdentifier,d=function(e){return new Function("ensureMethod","                                    \n        return function(obj) {                                               \n            'use strict'                                                     \n            var len = this.length;                                           \n            ensureMethod(obj, 'methodName');                                 \n            switch(len) {                                                    \n                case 1: return obj.methodName(this[0]);                      \n                case 2: return obj.methodName(this[0], this[1]);             \n                case 3: return obj.methodName(this[0], this[1], this[2]);    \n                case 0: return obj.methodName();                             \n                default:                                                     \n                    return obj.methodName.apply(obj, this);                  \n            }                                                                \n        };                                                                   \n        ".replace(/methodName/g,e))(u)},s=function(e){return new Function("obj","                                             \n        'use strict';                                                        \n        return obj.propertyName;                                             \n        ".replace("propertyName",e))},b=function(e,a,t){var r=t[e];if("function"!=typeof r){if(!o(e))return null;if(r=a(e),t[e]=r,t[" size"]++,t[" size"]>512){for(var c=Object.keys(t),n=0;n<256;++n)delete t[c[n]];t[" size"]=c.length-256}}return r};function u(a,t){var r;if(null!=a&&(r=a[t]),"function"!=typeof r){var c="Object "+i.classString(a)+" has no method '"+i.toString(t)+"'";throw new e.TypeError(c)}return r}function l(e){return u(e,this.pop()).apply(e,this)}function p(e){return e[this]}function h(e){var a=+this;return a<0&&(a=Math.max(0,a+e.length)),e[a]}a=function(e){return b(e,d,c)},r=function(e){return b(e,s,n)},e.prototype.call=function(e){for(var t=arguments.length,r=new Array(Math.max(t-1,0)),c=1;c<t;++c)r[c-1]=arguments[c];if(f){var n=a(e);if(null!==n)return this._then(n,void 0,void 0,r,void 0)}return r.push(e),this._then(l,void 0,void 0,r,void 0)},e.prototype.get=function(e){var a;if("number"==typeof e)a=h;else if(f){var t=r(e);a=null!==t?t:p}else a=p;return this._then(a,void 0,void 0,e,void 0)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n,i){var f=e._getDomain,o=t(13),d=o.tryCatch,s=o.errorObj,b=e._async;function u(e,a,t,r){this.constructor$(e),this._promise._captureStackTrace();var c=f();this._callback=null===c?a:o.domainBind(c,a),this._preservedValues=r===n?new Array(this.length()):null,this._limit=t,this._inFlight=0,this._queue=[],b.invoke(this._asyncInit,this,void 0)}function l(a,t,c,n){if("function"!=typeof t)return r("expecting a function but got "+o.classString(t));var i=0;if(void 0!==c){if("object"!=typeof c||null===c)return e.reject(new TypeError("options argument must be an object but it is "+o.classString(c)));if("number"!=typeof c.concurrency)return e.reject(new TypeError("'concurrency' must be a number but it is "+o.classString(c.concurrency)));i=c.concurrency}return new u(a,t,i="number"==typeof i&&isFinite(i)&&i>=1?i:0,n).promise()}o.inherits(u,a),u.prototype._asyncInit=function(){this._init$(void 0,-2)},u.prototype._init=function(){},u.prototype._promiseFulfilled=function(a,t){var r=this._values,n=this.length(),f=this._preservedValues,o=this._limit;if(t<0){if(r[t=-1*t-1]=a,o>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(o>=1&&this._inFlight>=o)return r[t]=a,this._queue.push(t),!1;null!==f&&(f[t]=a);var b=this._promise,u=this._callback,l=b._boundValue();b._pushContext();var p=d(u).call(l,a,t,n),h=b._popContext();if(i.checkForgottenReturns(p,h,null!==f?"Promise.filter":"Promise.map",b),p===s)return this._reject(p.e),!0;var m=c(p,this._promise);if(m instanceof e){var g=(m=m._target())._bitField;if(0==(50397184&g))return o>=1&&this._inFlight++,r[t]=m,m._proxy(this,-1*(t+1)),!1;if(0==(33554432&g))return 0!=(16777216&g)?(this._reject(m._reason()),!0):(this._cancel(),!0);p=m._value()}r[t]=p}return++this._totalResolved>=n&&(null!==f?this._filter(r,f):this._resolve(r),!0)},u.prototype._drainQueue=function(){for(var e=this._queue,a=this._limit,t=this._values;e.length>0&&this._inFlight<a;){if(this._isResolved())return;var r=e.pop();this._promiseFulfilled(t[r],r)}},u.prototype._filter=function(e,a){for(var t=a.length,r=new Array(t),c=0,n=0;n<t;++n)e[n]&&(r[c++]=a[n]);r.length=c,this._resolve(r)},u.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(e,a){return l(this,e,a,null)},e.map=function(e,a,t,r){return l(e,a,t,r)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n,i){var f,o=t(13),d=o.canEvaluate,s=o.tryCatch,b=o.errorObj;if(d){for(var u=function(e){return new Function("value","holder","                             \n            'use strict';                                                    \n            holder.pIndex = value;                                           \n            holder.checkFulfillment(this);                                   \n            ".replace(/Index/g,e))},l=function(e){return new Function("promise","holder","                           \n            'use strict';                                                    \n            holder.pIndex = promise;                                         \n            ".replace(/Index/g,e))},p=function(a){for(var t=new Array(a),r=0;r<t.length;++r)t[r]="this.p"+(r+1);var c=t.join(" = ")+" = null;",i="var promise;\n"+t.map(function(e){return"                                                         \n                promise = "+e+";                                      \n                if (promise instanceof Promise) {                            \n                    promise.cancel();                                        \n                }                                                            \n            "}).join("\n"),f=t.join(", "),o="Holder$"+a,d="return function(tryCatch, errorObj, Promise, async) {    \n            'use strict';                                                    \n            function [TheName](fn) {                                         \n                [TheProperties]                                              \n                this.fn = fn;                                                \n                this.asyncNeeded = true;                                     \n                this.now = 0;                                                \n            }                                                                \n                                                                             \n            [TheName].prototype._callFunction = function(promise) {          \n                promise._pushContext();                                      \n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \n                promise._popContext();                                       \n                if (ret === errorObj) {                                      \n                    promise._rejectCallback(ret.e, false);                   \n                } else {                                                     \n                    promise._resolveCallback(ret);                           \n                }                                                            \n            };                                                               \n                                                                             \n            [TheName].prototype.checkFulfillment = function(promise) {       \n                var now = ++this.now;                                        \n                if (now === [TheTotal]) {                                    \n                    if (this.asyncNeeded) {                                  \n                        async.invoke(this._callFunction, this, promise);     \n                    } else {                                                 \n                        this._callFunction(promise);                         \n                    }                                                        \n                                                                             \n                }                                                            \n            };                                                               \n                                                                             \n            [TheName].prototype._resultCancelled = function() {              \n                [CancellationCode]                                           \n            };                                                               \n                                                                             \n            return [TheName];                                                \n        }(tryCatch, errorObj, Promise, async);                               \n        ";return d=d.replace(/\[TheName\]/g,o).replace(/\[TheTotal\]/g,a).replace(/\[ThePassedArguments\]/g,f).replace(/\[TheProperties\]/g,c).replace(/\[CancellationCode\]/g,i),new Function("tryCatch","errorObj","Promise","async",d)(s,b,e,n)},h=[],m=[],g=[],v=0;v<8;++v)h.push(p(v+1)),m.push(u(v+1)),g.push(l(v+1));f=function(e){this._reject(e)}}e.join=function(){var t,n=arguments.length-1;if(n>0&&"function"==typeof arguments[n]&&(t=arguments[n],n<=8&&d)){(A=new e(c))._captureStackTrace();for(var s=new(0,h[n-1])(t),b=m,u=0;u<n;++u){var l=r(arguments[u],A);if(l instanceof e){var p=(l=l._target())._bitField;0==(50397184&p)?(l._then(b[u],f,void 0,A,s),g[u](l,s),s.asyncNeeded=!1):0!=(33554432&p)?b[u].call(A,l._value(),s):0!=(16777216&p)?A._reject(l._reason()):A._cancel()}else b[u].call(A,l,s)}if(!A._isFateSealed()){if(s.asyncNeeded){var v=i();null!==v&&(s.fn=o.domainBind(v,s.fn))}A._setAsyncGuaranteed(),A._setOnCancel(s)}return A}for(var y=arguments.length,_=new Array(y),w=0;w<y;++w)_[w]=arguments[w];t&&_.pop();var A=new a(_).promise();return void 0!==t?A.spread(t):A}}},function(e,a,t){"use strict";e.exports=function(e){function a(e){void 0!==e?(e=e._target(),this._bitField=e._bitField,this._settledValueField=e._isFateSealed()?e._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}a.prototype._settledValue=function(){return this._settledValueField};var t=a.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/MqrFmX\n");return this._settledValue()},r=a.prototype.error=a.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/MqrFmX\n");return this._settledValue()},c=a.prototype.isFulfilled=function(){return 0!=(33554432&this._bitField)},n=a.prototype.isRejected=function(){return 0!=(16777216&this._bitField)},i=a.prototype.isPending=function(){return 0==(50397184&this._bitField)},f=a.prototype.isResolved=function(){return 0!=(50331648&this._bitField)};a.prototype.isCancelled=function(){return 0!=(8454144&this._bitField)},e.prototype.__isCancelled=function(){return 65536==(65536&this._bitField)},e.prototype._isCancelled=function(){return this._target().__isCancelled()},e.prototype.isCancelled=function(){return 0!=(8454144&this._target()._bitField)},e.prototype.isPending=function(){return i.call(this._target())},e.prototype.isRejected=function(){return n.call(this._target())},e.prototype.isFulfilled=function(){return c.call(this._target())},e.prototype.isResolved=function(){return f.call(this._target())},e.prototype.value=function(){return t.call(this._target())},e.prototype.reason=function(){var e=this._target();return e._unsetRejectionIsUnhandled(),r.call(e)},e.prototype._value=function(){return this._settledValue()},e.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},e.PromiseInspection=a}},function(e,a,t){"use strict";e.exports=function(e){function a(){return this.value}function t(){throw this.reason}e.prototype.return=e.prototype.thenReturn=function(t){return t instanceof e&&t.suppressUnhandledRejections(),this._then(a,void 0,void 0,{value:t},void 0)},e.prototype.throw=e.prototype.thenThrow=function(e){return this._then(t,void 0,void 0,{reason:e},void 0)},e.prototype.catchThrow=function(e){if(arguments.length<=1)return this._then(void 0,t,void 0,{reason:e},void 0);var a=arguments[1];return this.caught(e,function(){throw a})},e.prototype.catchReturn=function(t){if(arguments.length<=1)return t instanceof e&&t.suppressUnhandledRejections(),this._then(void 0,a,void 0,{value:t},void 0);var r=arguments[1];r instanceof e&&r.suppressUnhandledRejections();return this.caught(t,function(){return r})}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c){var n=t(13),i=n.tryCatch,f=n.errorObj,o=e._async;e.prototype.break=e.prototype.cancel=function(){if(!c.cancellation())return this._warn("cancellation is disabled");for(var e=this,a=e;e._isCancellable();){if(!e._cancelBy(a)){a._isFollowing()?a._followee().cancel():a._cancelBranched();break}var t=e._cancellationParent;if(null==t||!t._isCancellable()){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}e._isFollowing()&&e._followee().cancel(),e._setWillBeCancelled(),a=e,e=t}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(e){return e===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),!!this._enoughBranchesHaveCancelled()&&(this._invokeOnCancel(),!0))},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),o.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(e,a){if(n.isArray(e))for(var t=0;t<e.length;++t)this._doInvokeOnCancel(e[t],a);else if(void 0!==e)if("function"==typeof e){if(!a){var r=i(e).call(this._boundValue());r===f&&(this._attachExtraTrace(r.e),o.throwLater(r.e))}}else e._resultCancelled(this)},e.prototype._invokeOnCancel=function(){var e=this._onCancel();this._unsetOnCancel(),o.invoke(this._doInvokeOnCancel,this,e)},e.prototype._invokeInternalOnCancel=function(){this._isCancellable()&&(this._doInvokeOnCancel(this._onCancel(),!0),this._unsetOnCancel())},e.prototype._resultCancelled=function(){this.cancel()}}},function(e,a,t){"use strict";e.exports=function(e,a,t,r){var c=!1,n=function(e,a){this._reject(a)},i=function(e,a){a.promiseRejectionQueued=!0,a.bindingPromise._then(n,n,null,this,e)},f=function(e,a){0==(50397184&this._bitField)&&this._resolveCallback(a.target)},o=function(e,a){a.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(n){c||(c=!0,e.prototype._propagateFrom=r.propagateFromFunction(),e.prototype._boundValue=r.boundValueFunction());var d=t(n),s=new e(a);s._propagateFrom(this,1);var b=this._target();if(s._setBoundTo(d),d instanceof e){var u={promiseRejectionQueued:!1,promise:s,target:b,bindingPromise:d};b._then(a,i,void 0,s,u),d._then(f,o,void 0,s,u),s._setOnCancel(d)}else s._resolveCallback(b);return s},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=2097152|this._bitField,this._boundTo=e):this._bitField=-2097153&this._bitField},e.prototype._isBound=function(){return 2097152==(2097152&this._bitField)},e.bind=function(a,t){return e.resolve(t).bind(a)}}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n){var i=t(13),f=i.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+i.classString(t));return function(){var r=new e(a);r._captureStackTrace(),r._pushContext();var c=f(t).apply(this,arguments),i=r._popContext();return n.checkForgottenReturns(c,i,"Promise.method",r),r._resolveFromSyncValue(c),r}},e.attempt=e.try=function(t){if("function"!=typeof t)return c("expecting a function but got "+i.classString(t));var r,o=new e(a);if(o._captureStackTrace(),o._pushContext(),arguments.length>1){n.deprecated("calling Promise.try with more than 1 argument");var d=arguments[1],s=arguments[2];r=i.isArray(d)?f(t).apply(s,d):f(t).call(s,d)}else r=f(t)();var b=o._popContext();return n.checkForgottenReturns(r,b,"Promise.try",o),o._resolveFromSyncValue(r),o},e.prototype._resolveFromSyncValue=function(e){e===i.errorObj?this._rejectCallback(e.e,!1):this._resolveCallback(e,!0)}}},function(e,a,t){"use strict";e.exports=function(e,a,r){var c=t(13),n=e.CancellationError,i=c.errorObj,f=t(284)(r);function o(e,a,t){this.promise=e,this.type=a,this.handler=t,this.called=!1,this.cancelPromise=null}function d(e){this.finallyHandler=e}function s(e,a){return null!=e.cancelPromise&&(arguments.length>1?e.cancelPromise._reject(a):e.cancelPromise._cancel(),e.cancelPromise=null,!0)}function b(){return l.call(this,this.promise._target()._settledValue())}function u(e){if(!s(this,e))return i.e=e,i}function l(t){var c=this.promise,f=this.handler;if(!this.called){this.called=!0;var o=this.isFinallyHandler()?f.call(c._boundValue()):f.call(c._boundValue(),t);if(o===r)return o;if(void 0!==o){c._setReturnedNonUndefined();var l=a(o,c);if(l instanceof e){if(null!=this.cancelPromise){if(l._isCancelled()){var p=new n("late cancellation observer");return c._attachExtraTrace(p),i.e=p,i}l.isPending()&&l._attachCancellationCallback(new d(this))}return l._then(b,u,void 0,this,void 0)}}}return c.isRejected()?(s(this),i.e=t,i):(s(this),t)}return o.prototype.isFinallyHandler=function(){return 0===this.type},d.prototype._resultCancelled=function(){s(this.finallyHandler)},e.prototype._passThrough=function(e,a,t,r){return"function"!=typeof e?this.then():this._then(t,r,void 0,new o(this,a,e),void 0)},e.prototype.lastly=e.prototype.finally=function(e){return this._passThrough(e,0,l,l)},e.prototype.tap=function(e){return this._passThrough(e,1,l)},e.prototype.tapCatch=function(a){var t=arguments.length;if(1===t)return this._passThrough(a,1,void 0,l);var r,n=new Array(t-1),i=0;for(r=0;r<t-1;++r){var o=arguments[r];if(!c.isObject(o))return e.reject(new TypeError("tapCatch statement predicate: expecting an object but got "+c.classString(o)));n[i++]=o}n.length=i;var d=arguments[r];return this._passThrough(f(n,d,this),1,void 0,l)},o}},function(e,a,t){"use strict";e.exports=function(e,a){var r,c,n,i=e._getDomain,f=e._async,o=t(42).Warning,d=t(13),s=d.canAttachTrace,b=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,u=/\((?:timers\.js):\d+:\d+\)/,l=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,p=null,h=null,m=!1,g=!(0==d.env("BLUEBIRD_DEBUG")||!d.env("BLUEBIRD_DEBUG")&&"development"!==d.env("NODE_ENV")),v=!(0==d.env("BLUEBIRD_WARNINGS")||!g&&!d.env("BLUEBIRD_WARNINGS")),y=!(0==d.env("BLUEBIRD_LONG_STACK_TRACES")||!g&&!d.env("BLUEBIRD_LONG_STACK_TRACES")),_=0!=d.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(v||!!d.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var e=this._target();e._bitField=-1048577&e._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){if(0==(524288&this._bitField)){this._setRejectionIsUnhandled();var e=this;setTimeout(function(){e._notifyUnhandledRejection()},1)}},e.prototype._notifyUnhandledRejectionIsHandled=function(){U("rejectionHandled",r,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!=(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._settledValue();this._setUnhandledRejectionIsNotified(),U("unhandledRejection",c,e,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(e,a,t){return L(e,a,t||this)},e.onPossiblyUnhandledRejection=function(e){var a=i();c="function"==typeof e?null===a?e:d.domainBind(a,e):void 0},e.onUnhandledRejectionHandled=function(e){var a=i();r="function"==typeof e?null===a?e:d.domainBind(a,e):void 0};var w=function(){};e.longStackTraces=function(){if(f.haveItemsQueued()&&!Z.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n    See http://goo.gl/MqrFmX\n");if(!Z.longStackTraces&&V()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace;Z.longStackTraces=!0,w=function(){if(f.haveItemsQueued()&&!Z.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n    See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,a.deactivateLongStackTraces(),f.enableTrampoline(),Z.longStackTraces=!1},e.prototype._captureStackTrace=P,e.prototype._attachExtraTrace=F,a.activateLongStackTraces(),f.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return Z.longStackTraces&&V()};var A=function(){try{if("function"==typeof CustomEvent){var e=new CustomEvent("CustomEvent");return d.global.dispatchEvent(e),function(e,a){var t=new CustomEvent(e.toLowerCase(),{detail:a,cancelable:!0});return!d.global.dispatchEvent(t)}}if("function"==typeof Event){e=new Event("CustomEvent");return d.global.dispatchEvent(e),function(e,a){var t=new Event(e.toLowerCase(),{cancelable:!0});return t.detail=a,!d.global.dispatchEvent(t)}}return(e=document.createEvent("CustomEvent")).initCustomEvent("testingtheevent",!1,!0,{}),d.global.dispatchEvent(e),function(e,a){var t=document.createEvent("CustomEvent");return t.initCustomEvent(e.toLowerCase(),!1,!0,a),!d.global.dispatchEvent(t)}}catch(e){}return function(){return!1}}(),k=d.isNode?function(){return process.emit.apply(process,arguments)}:d.global?function(e){var a="on"+e.toLowerCase(),t=d.global[a];return!!t&&(t.apply(d.global,[].slice.call(arguments,1)),!0)}:function(){return!1};function x(e,a){return{promise:a}}var E={promiseCreated:x,promiseFulfilled:x,promiseRejected:x,promiseResolved:x,promiseCancelled:x,promiseChained:function(e,a,t){return{promise:a,child:t}},warning:function(e,a){return{warning:a}},unhandledRejection:function(e,a,t){return{reason:a,promise:t}},rejectionHandled:x},S=function(e){var a=!1;try{a=k.apply(null,arguments)}catch(e){f.throwLater(e),a=!0}var t=!1;try{t=A(e,E[e].apply(null,arguments))}catch(e){f.throwLater(e),t=!0}return t||a};function T(){return!1}function j(e,a,t){var r=this;try{e(a,t,function(e){if("function"!=typeof e)throw new TypeError("onCancel must be a function, got: "+d.toString(e));r._attachCancellationCallback(e)})}catch(e){return e}}function C(e){if(!this._isCancellable())return this;var a=this._onCancel();void 0!==a?d.isArray(a)?a.push(e):this._setOnCancel([a,e]):this._setOnCancel(e)}function R(){return this._onCancelField}function O(e){this._onCancelField=e}function B(){this._cancellationParent=void 0,this._onCancelField=void 0}function M(e,a){if(0!=(1&a)){this._cancellationParent=e;var t=e._branchesRemainingToCancel;void 0===t&&(t=0),e._branchesRemainingToCancel=t+1}0!=(2&a)&&e._isBound()&&this._setBoundTo(e._boundTo)}e.config=function(a){if("longStackTraces"in(a=Object(a))&&(a.longStackTraces?e.longStackTraces():!a.longStackTraces&&e.hasLongStackTraces()&&w()),"warnings"in a){var t=a.warnings;Z.warnings=!!t,_=Z.warnings,d.isObject(t)&&"wForgottenReturn"in t&&(_=!!t.wForgottenReturn)}if("cancellation"in a&&a.cancellation&&!Z.cancellation){if(f.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=B,e.prototype._propagateFrom=M,e.prototype._onCancel=R,e.prototype._setOnCancel=O,e.prototype._attachCancellationCallback=C,e.prototype._execute=j,N=M,Z.cancellation=!0}return"monitoring"in a&&(a.monitoring&&!Z.monitoring?(Z.monitoring=!0,e.prototype._fireEvent=S):!a.monitoring&&Z.monitoring&&(Z.monitoring=!1,e.prototype._fireEvent=T)),e},e.prototype._fireEvent=T,e.prototype._execute=function(e,a,t){try{e(a,t)}catch(e){return e}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(e){},e.prototype._attachCancellationCallback=function(e){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(e,a){};var N=function(e,a){0!=(2&a)&&e._isBound()&&this._setBoundTo(e._boundTo)};function I(){var a=this._boundTo;return void 0!==a&&a instanceof e?a.isFulfilled()?a.value():void 0:a}function P(){this._trace=new K(this._peekContext())}function F(e,a){if(s(e)){var t=this._trace;if(void 0!==t&&a&&(t=t._parent),void 0!==t)t.attachExtraTrace(e);else if(!e.__stackCleaned__){var r=z(e);d.notEnumerableProp(e,"stack",r.message+"\n"+r.stack.join("\n")),d.notEnumerableProp(e,"__stackCleaned__",!0)}}}function L(a,t,r){if(Z.warnings){var c,n=new o(a);if(t)r._attachExtraTrace(n);else if(Z.longStackTraces&&(c=e._peekContext()))c.attachExtraTrace(n);else{var i=z(n);n.stack=i.message+"\n"+i.stack.join("\n")}S("warning",n)||q(n,"",!0)}}function D(e){for(var a=[],t=0;t<e.length;++t){var r=e[t],c="    (No stack trace)"===r||p.test(r),n=c&&G(r);c&&!n&&(m&&" "!==r.charAt(0)&&(r="    "+r),a.push(r))}return a}function z(e){var a=e.stack,t=e.toString();return a="string"==typeof a&&a.length>0?function(e){for(var a=e.stack.replace(/\s+$/g,"").split("\n"),t=0;t<a.length;++t){var r=a[t];if("    (No stack trace)"===r||p.test(r))break}return t>0&&"SyntaxError"!=e.name&&(a=a.slice(t)),a}(e):["    (No stack trace)"],{message:t,stack:"SyntaxError"==e.name?a:D(a)}}function q(e,a,t){if("undefined"!=typeof console){var r;if(d.isObject(e)){var c=e.stack;r=a+h(c,e)}else r=a+String(e);"function"==typeof n?n(r,t):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(r)}}function U(e,a,t,r){var c=!1;try{"function"==typeof a&&(c=!0,"rejectionHandled"===e?a(r):a(t,r))}catch(e){f.throwLater(e)}"unhandledRejection"===e?S(e,t,r)||c||q(t,"Unhandled rejection "):S(e,r)}function H(e){var a;if("function"==typeof e)a="[function "+(e.name||"anonymous")+"]";else{a=e&&"function"==typeof e.toString?e.toString():d.toString(e);if(/\[object [a-zA-Z0-9$_]+\]/.test(a))try{a=JSON.stringify(e)}catch(e){}0===a.length&&(a="(empty array)")}return"(<"+function(e){if(e.length<41)return e;return e.substr(0,38)+"..."}(a)+">, no stack trace)"}function V(){return"function"==typeof Q}var G=function(){return!1},W=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;function Y(e){var a=e.match(W);if(a)return{fileName:a[1],line:parseInt(a[2],10)}}function K(e){this._parent=e,this._promisesCreated=0;var a=this._length=1+(void 0===e?0:e._length);Q(this,K),a>32&&this.uncycle()}d.inherits(K,Error),a.CapturedTrace=K,K.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var a=[],t={},r=0,c=this;void 0!==c;++r)a.push(c),c=c._parent;for(r=(e=this._length=r)-1;r>=0;--r){var n=a[r].stack;void 0===t[n]&&(t[n]=r)}for(r=0;r<e;++r){var i=t[a[r].stack];if(void 0!==i&&i!==r){i>0&&(a[i-1]._parent=void 0,a[i-1]._length=1),a[r]._parent=void 0,a[r]._length=1;var f=r>0?a[r-1]:this;i<e-1?(f._parent=a[i+1],f._parent.uncycle(),f._length=f._parent._length+1):(f._parent=void 0,f._length=1);for(var o=f._length+1,d=r-2;d>=0;--d)a[d]._length=o,o++;return}}}},K.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var a=z(e),t=a.message,r=[a.stack],c=this;void 0!==c;)r.push(D(c.stack.split("\n"))),c=c._parent;!function(e){for(var a=e[0],t=1;t<e.length;++t){for(var r=e[t],c=a.length-1,n=a[c],i=-1,f=r.length-1;f>=0;--f)if(r[f]===n){i=f;break}for(f=i;f>=0;--f){var o=r[f];if(a[c]!==o)break;a.pop(),c--}a=r}}(r),function(e){for(var a=0;a<e.length;++a)(0===e[a].length||a+1<e.length&&e[a][0]===e[a+1][0])&&(e.splice(a,1),a--)}(r),d.notEnumerableProp(e,"stack",function(e,a){for(var t=0;t<a.length-1;++t)a[t].push("From previous event:"),a[t]=a[t].join("\n");return t<a.length&&(a[t]=a[t].join("\n")),e+"\n"+a.join("\n")}(t,r)),d.notEnumerableProp(e,"__stackCleaned__",!0)}};var Q=function(){var e=/^\s*at\s*/,a=function(e,a){return"string"==typeof e?e:void 0!==a.name&&void 0!==a.message?a.toString():H(a)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,p=e,h=a;var t=Error.captureStackTrace;return G=function(e){return b.test(e)},function(e,a){Error.stackTraceLimit+=6,t(e,a),Error.stackTraceLimit-=6}}var r,c=new Error;if("string"==typeof c.stack&&c.stack.split("\n")[0].indexOf("stackDetection@")>=0)return p=/@/,h=a,m=!0,function(e){e.stack=(new Error).stack};try{throw new Error}catch(e){r="stack"in e}return"stack"in c||!r||"number"!=typeof Error.stackTraceLimit?(h=function(e,a){return"string"==typeof e?e:"object"!=typeof a&&"function"!=typeof a||void 0===a.name||void 0===a.message?H(a):a.toString()},null):(p=e,h=a,function(e){Error.stackTraceLimit+=6;try{throw new Error}catch(a){e.stack=a.stack}Error.stackTraceLimit-=6})}();"undefined"!=typeof console&&void 0!==console.warn&&(n=function(e){console.warn(e)},d.isNode&&process.stderr.isTTY?n=function(e,a){var t=a?"[33m":"[31m";console.warn(t+e+"[0m\n")}:d.isNode||"string"!=typeof(new Error).stack||(n=function(e,a){console.warn("%c"+e,a?"color: darkorange":"color: red")}));var Z={warnings:v,longStackTraces:!1,cancellation:!1,monitoring:!1};return y&&e.longStackTraces(),{longStackTraces:function(){return Z.longStackTraces},warnings:function(){return Z.warnings},cancellation:function(){return Z.cancellation},monitoring:function(){return Z.monitoring},propagateFromFunction:function(){return N},boundValueFunction:function(){return I},checkForgottenReturns:function(e,a,t,r,c){if(void 0===e&&null!==a&&_){if(void 0!==c&&c._returnedNonUndefined())return;if(0==(65535&r._bitField))return;t&&(t+=" ");var n="",i="";if(a._trace){for(var f=a._trace.stack.split("\n"),o=D(f),d=o.length-1;d>=0;--d){var s=o[d];if(!u.test(s)){var b=s.match(l);b&&(n="at "+b[1]+":"+b[2]+":"+b[3]+" ");break}}if(o.length>0){var p=o[0];for(d=0;d<f.length;++d)if(f[d]===p){d>0&&(i="\n"+f[d-1]);break}}}var h="a promise was created in a "+t+"handler "+n+"but was not returned from it, see http://goo.gl/rRqMUw"+i;r._warn(h,!0,a)}},setBounds:function(e,a){if(V()){for(var t,r,c=e.stack.split("\n"),n=a.stack.split("\n"),i=-1,f=-1,o=0;o<c.length;++o)if(d=Y(c[o])){t=d.fileName,i=d.line;break}for(o=0;o<n.length;++o){var d;if(d=Y(n[o])){r=d.fileName,f=d.line;break}}i<0||f<0||!t||!r||t!==r||i>=f||(G=function(e){if(b.test(e))return!0;var a=Y(e);return!!(a&&a.fileName===t&&i<=a.line&&a.line<=f)})}},warn:L,deprecated:function(e,a){var t=e+" is deprecated and will be removed in a future version.";return a&&(t+=" Use "+a+" instead."),L(t)},CapturedTrace:K,fireDomEvent:A,fireGlobalEvent:k}}},function(e,a,t){"use strict";e.exports=function(e){var a=!1,t=[];function r(){this._trace=new r.CapturedTrace(c())}function c(){var e=t.length-1;if(e>=0)return t[e]}return e.prototype._promiseCreated=function(){},e.prototype._pushContext=function(){},e.prototype._popContext=function(){return null},e._peekContext=e.prototype._peekContext=function(){},r.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,t.push(this._trace))},r.prototype._popContext=function(){if(void 0!==this._trace){var e=t.pop(),a=e._promiseCreated;return e._promiseCreated=null,a}return null},r.CapturedTrace=null,r.create=function(){if(a)return new r},r.deactivateLongStackTraces=function(){},r.activateLongStackTraces=function(){var t=e.prototype._pushContext,n=e.prototype._popContext,i=e._peekContext,f=e.prototype._peekContext,o=e.prototype._promiseCreated;r.deactivateLongStackTraces=function(){e.prototype._pushContext=t,e.prototype._popContext=n,e._peekContext=i,e.prototype._peekContext=f,e.prototype._promiseCreated=o,a=!1},a=!0,e.prototype._pushContext=r.prototype._pushContext,e.prototype._popContext=r.prototype._popContext,e._peekContext=e.prototype._peekContext=c,e.prototype._promiseCreated=function(){var e=this._peekContext();e&&null==e._promiseCreated&&(e._promiseCreated=this)}},r}},function(e,a,t){"use strict";e.exports=function(e,a,r,c,n){var i=t(13);i.isArray;function f(t){var r=this._promise=new e(a);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}return i.inherits(f,n),f.prototype.length=function(){return this._length},f.prototype.promise=function(){return this._promise},f.prototype._init=function a(t,n){var f=r(this._values,this._promise);if(f instanceof e){var o=(f=f._target())._bitField;if(this._values=f,0==(50397184&o))return this._promise._setAsyncGuaranteed(),f._then(a,this._reject,void 0,this,n);if(0==(33554432&o))return 0!=(16777216&o)?this._reject(f._reason()):this._cancel();f=f._value()}if(null!==(f=i.asArray(f)))0!==f.length?this._iterate(f):-5===n?this._resolveEmptyArray():this._resolve(function(e){switch(e){case-2:return[];case-3:return{};case-6:return new Map}}(n));else{var d=c("expecting an array or an iterable object but got "+i.classString(f)).reason();this._promise._rejectCallback(d,!1)}},f.prototype._iterate=function(a){var t=this.getActualLength(a.length);this._length=t,this._values=this.shouldCopyValues()?new Array(t):this._values;for(var c=this._promise,n=!1,i=null,f=0;f<t;++f){var o=r(a[f],c);i=o instanceof e?(o=o._target())._bitField:null,n?null!==i&&o.suppressUnhandledRejections():null!==i?0==(50397184&i)?(o._proxy(this,f),this._values[f]=o):n=0!=(33554432&i)?this._promiseFulfilled(o._value(),f):0!=(16777216&i)?this._promiseRejected(o._reason(),f):this._promiseCancelled(f):n=this._promiseFulfilled(o,f)}n||c._setAsyncGuaranteed()},f.prototype._isResolved=function(){return null===this._values},f.prototype._resolve=function(e){this._values=null,this._promise._fulfill(e)},f.prototype._cancel=function(){!this._isResolved()&&this._promise._isCancellable()&&(this._values=null,this._promise._cancel())},f.prototype._reject=function(e){this._values=null,this._promise._rejectCallback(e,!1)},f.prototype._promiseFulfilled=function(e,a){return this._values[a]=e,++this._totalResolved>=this._length&&(this._resolve(this._values),!0)},f.prototype._promiseCancelled=function(){return this._cancel(),!0},f.prototype._promiseRejected=function(e){return this._totalResolved++,this._reject(e),!0},f.prototype._resultCancelled=function(){if(!this._isResolved()){var a=this._values;if(this._cancel(),a instanceof e)a.cancel();else for(var t=0;t<a.length;++t)a[t]instanceof e&&a[t].cancel()}},f.prototype.shouldCopyValues=function(){return!0},f.prototype.getActualLength=function(e){return e},f}},function(e,a,t){"use strict";e.exports=function(e,a){var r=t(13),c=r.errorObj,n=r.isObject;var i={}.hasOwnProperty;return function(t,f){if(n(t)){if(t instanceof e)return t;var o=function(e){try{return function(e){return e.then}(e)}catch(e){return c.e=e,c}}(t);if(o===c){f&&f._pushContext();var d=e.reject(o.e);return f&&f._popContext(),d}if("function"==typeof o)return function(e){try{return i.call(e,"_promise0")}catch(e){return!1}}(t)?(d=new e(a),t._then(d._fulfill,d._reject,void 0,d,null),d):function(t,n,i){var f=new e(a),o=f;i&&i._pushContext(),f._captureStackTrace(),i&&i._popContext();var d=!0,s=r.tryCatch(n).call(t,function(e){f&&(f._resolveCallback(e),f=null)},function(e){f&&(f._rejectCallback(e,d,!0),f=null)});return d=!1,f&&s===c&&(f._rejectCallback(s.e,!0,!0),f=null),o}(t,o,f)}return t}}},function(e,a,t){"use strict";function r(e){this._capacity=e,this._length=0,this._front=0}r.prototype._willBeOverCapacity=function(e){return this._capacity<e},r.prototype._pushOne=function(e){var a=this.length();this._checkCapacity(a+1),this[this._front+a&this._capacity-1]=e,this._length=a+1},r.prototype.push=function(e,a,t){var r=this.length()+3;if(this._willBeOverCapacity(r))return this._pushOne(e),this._pushOne(a),void this._pushOne(t);var c=this._front+r-3;this._checkCapacity(r);var n=this._capacity-1;this[c+0&n]=e,this[c+1&n]=a,this[c+2&n]=t,this._length=r},r.prototype.shift=function(){var e=this._front,a=this[e];return this[e]=void 0,this._front=e+1&this._capacity-1,this._length--,a},r.prototype.length=function(){return this._length},r.prototype._checkCapacity=function(e){this._capacity<e&&this._resizeTo(this._capacity<<1)},r.prototype._resizeTo=function(e){var a=this._capacity;this._capacity=e,function(e,a,t,r,c){for(var n=0;n<c;++n)t[n+r]=e[n+a],e[n+a]=void 0}(this,0,this,a,this._front+this._length&a-1)},e.exports=r},function(e,a,t){"use strict";var r,c=t(13),n=c.getNativePromise();if(c.isNode&&"undefined"==typeof MutationObserver){var i=global.setImmediate,f=process.nextTick;r=c.isRecentNode?function(e){i.call(global,e)}:function(e){f.call(process,e)}}else if("function"==typeof n&&"function"==typeof n.resolve){var o=n.resolve();r=function(e){o.then(e)}}else r="undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&(window.navigator.standalone||window.cordova)?"undefined"!=typeof setImmediate?function(e){setImmediate(e)}:"undefined"!=typeof setTimeout?function(e){setTimeout(e,0)}:function(){throw new Error("No async scheduler available\n\n    See http://goo.gl/MqrFmX\n")}:function(){var e=document.createElement("div"),a={attributes:!0},t=!1,r=document.createElement("div");new MutationObserver(function(){e.classList.toggle("foo"),t=!1}).observe(r,a);return function(c){var n=new MutationObserver(function(){n.disconnect(),c()});n.observe(e,a),t||(t=!0,r.classList.toggle("foo"))}}();e.exports=r},function(e,a,t){"use strict";var r;try{throw new Error}catch(e){r=e}var c=t(708),n=t(707),i=t(13);function f(){this._customScheduler=!1,this._isTickUsed=!1,this._lateQueue=new n(16),this._normalQueue=new n(16),this._haveDrainedQueues=!1,this._trampolineEnabled=!0;var e=this;this.drainQueues=function(){e._drainQueues()},this._schedule=c}function o(e,a,t){this._lateQueue.push(e,a,t),this._queueTick()}function d(e,a,t){this._normalQueue.push(e,a,t),this._queueTick()}function s(e){this._normalQueue._pushOne(e),this._queueTick()}f.prototype.setScheduler=function(e){var a=this._schedule;return this._schedule=e,this._customScheduler=!0,a},f.prototype.hasCustomScheduler=function(){return this._customScheduler},f.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},f.prototype.disableTrampolineIfNecessary=function(){i.hasDevTools&&(this._trampolineEnabled=!1)},f.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},f.prototype.fatalError=function(e,a){a?(process.stderr.write("Fatal "+(e instanceof Error?e.stack:e)+"\n"),process.exit(2)):this.throwLater(e)},f.prototype.throwLater=function(e,a){if(1===arguments.length&&(a=e,e=function(){throw a}),"undefined"!=typeof setTimeout)setTimeout(function(){e(a)},0);else try{this._schedule(function(){e(a)})}catch(e){throw new Error("No async scheduler available\n\n    See http://goo.gl/MqrFmX\n")}},i.hasDevTools?(f.prototype.invokeLater=function(e,a,t){this._trampolineEnabled?o.call(this,e,a,t):this._schedule(function(){setTimeout(function(){e.call(a,t)},100)})},f.prototype.invoke=function(e,a,t){this._trampolineEnabled?d.call(this,e,a,t):this._schedule(function(){e.call(a,t)})},f.prototype.settlePromises=function(e){this._trampolineEnabled?s.call(this,e):this._schedule(function(){e._settlePromises()})}):(f.prototype.invokeLater=o,f.prototype.invoke=d,f.prototype.settlePromises=s),f.prototype._drainQueue=function(e){for(;e.length()>0;){var a=e.shift();if("function"==typeof a){var t=e.shift(),r=e.shift();a.call(t,r)}else a._settlePromises()}},f.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},f.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},f.prototype._reset=function(){this._isTickUsed=!1},e.exports=f,e.exports.firstLineError=r},function(e,a,t){"use strict";e.exports=function(){var a=function(){return new l("circular promise resolution chain\n\n    See http://goo.gl/MqrFmX\n")},r=function(){return new j.PromiseInspection(this._target())},c=function(e){return j.reject(new l(e))};function n(){}var i,f={},o=t(13);i=o.isNode?function(){var e=process.domain;return void 0===e&&(e=null),e}:function(){return null},o.notEnumerableProp(j,"_getDomain",i);var d=t(57),s=t(709),b=new s;d.defineProperty(j,"_async",{value:b});var u=t(42),l=j.TypeError=u.TypeError;j.RangeError=u.RangeError;var p=j.CancellationError=u.CancellationError;j.TimeoutError=u.TimeoutError,j.OperationalError=u.OperationalError,j.RejectionError=u.OperationalError,j.AggregateError=u.AggregateError;var h=function(){},m={},g={},v=t(706)(j,h),y=t(705)(j,h,v,c,n),_=t(704)(j),w=_.create,A=t(703)(j,_),k=(A.CapturedTrace,t(702)(j,v,g)),x=t(284)(g),E=t(283),S=o.errorObj,T=o.tryCatch;function j(e){e!==h&&function(e,a){if(null==e||e.constructor!==j)throw new l("the promise constructor cannot be invoked directly\n\n    See http://goo.gl/MqrFmX\n");if("function"!=typeof a)throw new l("expecting a function but got "+o.classString(a))}(this,e),this._bitField=0,this._fulfillmentHandler0=void 0,this._rejectionHandler0=void 0,this._promise0=void 0,this._receiver0=void 0,this._resolveFromExecutor(e),this._promiseCreated(),this._fireEvent("promiseCreated",this)}function C(e){this.promise._resolveCallback(e)}function R(e){this.promise._rejectCallback(e,!1)}function O(e){var a=new j(h);a._fulfillmentHandler0=e,a._rejectionHandler0=e,a._promise0=e,a._receiver0=e}return j.prototype.toString=function(){return"[object Promise]"},j.prototype.caught=j.prototype.catch=function(e){var a=arguments.length;if(a>1){var t,r=new Array(a-1),n=0;for(t=0;t<a-1;++t){var i=arguments[t];if(!o.isObject(i))return c("Catch statement predicate: expecting an object but got "+o.classString(i));r[n++]=i}return r.length=n,e=arguments[t],this.then(void 0,x(r,e,this))}return this.then(void 0,e)},j.prototype.reflect=function(){return this._then(r,r,void 0,this,void 0)},j.prototype.then=function(e,a){if(A.warnings()&&arguments.length>0&&"function"!=typeof e&&"function"!=typeof a){var t=".then() only accepts functions but was passed: "+o.classString(e);arguments.length>1&&(t+=", "+o.classString(a)),this._warn(t)}return this._then(e,a,void 0,void 0,void 0)},j.prototype.done=function(e,a){this._then(e,a,void 0,void 0,void 0)._setIsFinal()},j.prototype.spread=function(e){return"function"!=typeof e?c("expecting a function but got "+o.classString(e)):this.all()._then(e,void 0,void 0,m,void 0)},j.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},j.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new y(this).promise()},j.prototype.error=function(e){return this.caught(o.originatesFromRejection,e)},j.getNewLibraryCopy=e.exports,j.is=function(e){return e instanceof j},j.fromNode=j.fromCallback=function(e){var a=new j(h);a._captureStackTrace();var t=arguments.length>1&&!!Object(arguments[1]).multiArgs,r=T(e)(E(a,t));return r===S&&a._rejectCallback(r.e,!0),a._isFateSealed()||a._setAsyncGuaranteed(),a},j.all=function(e){return new y(e).promise()},j.cast=function(e){var a=v(e);return a instanceof j||((a=new j(h))._captureStackTrace(),a._setFulfilled(),a._rejectionHandler0=e),a},j.resolve=j.fulfilled=j.cast,j.reject=j.rejected=function(e){var a=new j(h);return a._captureStackTrace(),a._rejectCallback(e,!0),a},j.setScheduler=function(e){if("function"!=typeof e)throw new l("expecting a function but got "+o.classString(e));return b.setScheduler(e)},j.prototype._then=function(e,a,t,r,c){var n=void 0!==c,f=n?c:new j(h),d=this._target(),s=d._bitField;n||(f._propagateFrom(this,3),f._captureStackTrace(),void 0===r&&0!=(2097152&this._bitField)&&(r=0!=(50397184&s)?this._boundValue():d===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,f));var u=i();if(0!=(50397184&s)){var l,m,g=d._settlePromiseCtx;0!=(33554432&s)?(m=d._rejectionHandler0,l=e):0!=(16777216&s)?(m=d._fulfillmentHandler0,l=a,d._unsetRejectionIsUnhandled()):(g=d._settlePromiseLateCancellationObserver,m=new p("late cancellation observer"),d._attachExtraTrace(m),l=a),b.invoke(g,d,{handler:null===u?l:"function"==typeof l&&o.domainBind(u,l),promise:f,receiver:r,value:m})}else d._addCallbacks(e,a,f,r,u);return f},j.prototype._length=function(){return 65535&this._bitField},j.prototype._isFateSealed=function(){return 0!=(117506048&this._bitField)},j.prototype._isFollowing=function(){return 67108864==(67108864&this._bitField)},j.prototype._setLength=function(e){this._bitField=-65536&this._bitField|65535&e},j.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},j.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},j.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},j.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},j.prototype._isFinal=function(){return(4194304&this._bitField)>0},j.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},j.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},j.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},j.prototype._setAsyncGuaranteed=function(){b.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},j.prototype._receiverAt=function(e){var a=0===e?this._receiver0:this[4*e-4+3];if(a!==f)return void 0===a&&this._isBound()?this._boundValue():a},j.prototype._promiseAt=function(e){return this[4*e-4+2]},j.prototype._fulfillmentHandlerAt=function(e){return this[4*e-4+0]},j.prototype._rejectionHandlerAt=function(e){return this[4*e-4+1]},j.prototype._boundValue=function(){},j.prototype._migrateCallback0=function(e){e._bitField;var a=e._fulfillmentHandler0,t=e._rejectionHandler0,r=e._promise0,c=e._receiverAt(0);void 0===c&&(c=f),this._addCallbacks(a,t,r,c,null)},j.prototype._migrateCallbackAt=function(e,a){var t=e._fulfillmentHandlerAt(a),r=e._rejectionHandlerAt(a),c=e._promiseAt(a),n=e._receiverAt(a);void 0===n&&(n=f),this._addCallbacks(t,r,c,n,null)},j.prototype._addCallbacks=function(e,a,t,r,c){var n=this._length();if(n>=65531&&(n=0,this._setLength(0)),0===n)this._promise0=t,this._receiver0=r,"function"==typeof e&&(this._fulfillmentHandler0=null===c?e:o.domainBind(c,e)),"function"==typeof a&&(this._rejectionHandler0=null===c?a:o.domainBind(c,a));else{var i=4*n-4;this[i+2]=t,this[i+3]=r,"function"==typeof e&&(this[i+0]=null===c?e:o.domainBind(c,e)),"function"==typeof a&&(this[i+1]=null===c?a:o.domainBind(c,a))}return this._setLength(n+1),n},j.prototype._proxy=function(e,a){this._addCallbacks(void 0,void 0,a,e,null)},j.prototype._resolveCallback=function(e,t){if(0==(117506048&this._bitField)){if(e===this)return this._rejectCallback(a(),!1);var r=v(e,this);if(!(r instanceof j))return this._fulfill(e);t&&this._propagateFrom(r,2);var c=r._target();if(c!==this){var n=c._bitField;if(0==(50397184&n)){var i=this._length();i>0&&c._migrateCallback0(this);for(var f=1;f<i;++f)c._migrateCallbackAt(this,f);this._setFollowing(),this._setLength(0),this._setFollowee(c)}else if(0!=(33554432&n))this._fulfill(c._value());else if(0!=(16777216&n))this._reject(c._reason());else{var o=new p("late cancellation observer");c._attachExtraTrace(o),this._reject(o)}}else this._reject(a())}},j.prototype._rejectCallback=function(e,a,t){var r=o.ensureErrorObject(e),c=r===e;if(!c&&!t&&A.warnings()){var n="a promise was rejected with a non-error: "+o.classString(e);this._warn(n,!0)}this._attachExtraTrace(r,!!a&&c),this._reject(e)},j.prototype._resolveFromExecutor=function(e){if(e!==h){var a=this;this._captureStackTrace(),this._pushContext();var t=!0,r=this._execute(e,function(e){a._resolveCallback(e)},function(e){a._rejectCallback(e,t)});t=!1,this._popContext(),void 0!==r&&a._rejectCallback(r,!0)}},j.prototype._settlePromiseFromHandler=function(e,a,t,r){var c=r._bitField;if(0==(65536&c)){var n;r._pushContext(),a===m?t&&"number"==typeof t.length?n=T(e).apply(this._boundValue(),t):(n=S).e=new l("cannot .spread() a non-array: "+o.classString(t)):n=T(e).call(a,t);var i=r._popContext();0==(65536&(c=r._bitField))&&(n===g?r._reject(t):n===S?r._rejectCallback(n.e,!1):(A.checkForgottenReturns(n,i,"",r,this),r._resolveCallback(n)))}},j.prototype._target=function(){for(var e=this;e._isFollowing();)e=e._followee();return e},j.prototype._followee=function(){return this._rejectionHandler0},j.prototype._setFollowee=function(e){this._rejectionHandler0=e},j.prototype._settlePromise=function(e,a,t,c){var i=e instanceof j,f=this._bitField,o=0!=(134217728&f);0!=(65536&f)?(i&&e._invokeInternalOnCancel(),t instanceof k&&t.isFinallyHandler()?(t.cancelPromise=e,T(a).call(t,c)===S&&e._reject(S.e)):a===r?e._fulfill(r.call(t)):t instanceof n?t._promiseCancelled(e):i||e instanceof y?e._cancel():t.cancel()):"function"==typeof a?i?(o&&e._setAsyncGuaranteed(),this._settlePromiseFromHandler(a,t,c,e)):a.call(t,c,e):t instanceof n?t._isResolved()||(0!=(33554432&f)?t._promiseFulfilled(c,e):t._promiseRejected(c,e)):i&&(o&&e._setAsyncGuaranteed(),0!=(33554432&f)?e._fulfill(c):e._reject(c))},j.prototype._settlePromiseLateCancellationObserver=function(e){var a=e.handler,t=e.promise,r=e.receiver,c=e.value;"function"==typeof a?t instanceof j?this._settlePromiseFromHandler(a,r,c,t):a.call(r,c,t):t instanceof j&&t._reject(c)},j.prototype._settlePromiseCtx=function(e){this._settlePromise(e.promise,e.handler,e.receiver,e.value)},j.prototype._settlePromise0=function(e,a,t){var r=this._promise0,c=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,e,c,a)},j.prototype._clearCallbackDataAtIndex=function(e){var a=4*e-4;this[a+2]=this[a+3]=this[a+0]=this[a+1]=void 0},j.prototype._fulfill=function(e){var t=this._bitField;if(!((117506048&t)>>>16)){if(e===this){var r=a();return this._attachExtraTrace(r),this._reject(r)}this._setFulfilled(),this._rejectionHandler0=e,(65535&t)>0&&(0!=(134217728&t)?this._settlePromises():b.settlePromises(this))}},j.prototype._reject=function(e){var a=this._bitField;if(!((117506048&a)>>>16)){if(this._setRejected(),this._fulfillmentHandler0=e,this._isFinal())return b.fatalError(e,o.isNode);(65535&a)>0?b.settlePromises(this):this._ensurePossibleRejectionHandled()}},j.prototype._fulfillPromises=function(e,a){for(var t=1;t<e;t++){var r=this._fulfillmentHandlerAt(t),c=this._promiseAt(t),n=this._receiverAt(t);this._clearCallbackDataAtIndex(t),this._settlePromise(c,r,n,a)}},j.prototype._rejectPromises=function(e,a){for(var t=1;t<e;t++){var r=this._rejectionHandlerAt(t),c=this._promiseAt(t),n=this._receiverAt(t);this._clearCallbackDataAtIndex(t),this._settlePromise(c,r,n,a)}},j.prototype._settlePromises=function(){var e=this._bitField,a=65535&e;if(a>0){if(0!=(16842752&e)){var t=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,t,e),this._rejectPromises(a,t)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,e),this._fulfillPromises(a,r)}this._setLength(0)}this._clearCancellationData()},j.prototype._settledValue=function(){var e=this._bitField;return 0!=(33554432&e)?this._rejectionHandler0:0!=(16777216&e)?this._fulfillmentHandler0:void 0},j.defer=j.pending=function(){return A.deprecated("Promise.defer","new Promise"),{promise:new j(h),resolve:C,reject:R}},o.notEnumerableProp(j,"_makeSelfResolutionError",a),t(701)(j,h,v,c,A),t(700)(j,h,v,A),t(699)(j,y,c,A),t(698)(j),t(697)(j),t(696)(j,y,v,h,b,i),j.Promise=j,j.version="3.5.1",t(695)(j,y,c,v,h,A),t(694)(j),t(693)(j,c,v,w,h,A),t(692)(j,h,A),t(691)(j,c,h,v,n,A),t(690)(j),t(689)(j,h),t(688)(j,y,v,c),t(687)(j,h,v,c),t(686)(j,y,c,v,h,A),t(685)(j,y,A),t(684)(j,y,c),t(683)(j,h),t(682)(j,h),t(681)(j),o.toFastProperties(j),o.toFastProperties(j.prototype),O({a:1}),O({b:2}),O({c:3}),O(1),O(function(){}),O(void 0),O(!1),O(new j(h)),A.setBounds(s.firstLineError,o.lastLineError),j}},function(e,a,t){"use strict";var r;"undefined"!=typeof Promise&&(r=Promise);var c=t(710)();c.noConflict=function(){try{Promise===c&&(Promise=r)}catch(e){}return c},e.exports=c},function(e,a,t){var r=t(711),c=t(11),n=t(10),i=t(15),f=t(292),o=t(680),d=t(659),s=t(2),b=t(658),u=function(e){return function(a){var t=r.resolve(d(s.dirname(a))).then(function(){return new r(function(r,c){var n=i.createWriteStream(a),f=o.stream(e);f.on("end",function(){return r(a)}),f.on("data",function(e){return t.onDataCallback(e)}),f.on("error",c),f.pipe(n)})});return t.onDataCallback=function(){},t.onData=function(e){return t.onDataCallback=e||function(){},t},t}},l=function(e){return function(a){return new r(function(t,r){var c=i.ReadStream(a),f=n.createHash(e);c.on("data",function(e){return f.update(e)}),c.on("end",function(){return t(f.digest("hex"))}),c.on("error",r)})}},p=function(e){return function(a){return l("md5")(a).then(function(a){return a===e}).then(c).then(function(){return a})}},h=function(e){return function(a){return b().extract(e,a).then(function(){return a})}},m=function(e){return f.readFile(e,{encoding:"utf8"})},g=function(e){var a=[];return r.all(function e(t){return function(e){return f.exists(e).then(c).then(function(){return f.lstat(e)}).then(function(e){return e.isDirectory()}).catch(function(){return!1})}(t).then(function(c){if(c)return r.all(r.map(f.readdir(t),function(a){return e(s.join(t,a))}));a.push(t)})}(e)).then(function(){return a})},v=function(e){return function(a){return g(a).then(function(a){return a.filter(function(a){return e.test(a)})})}},y=function(e){return function(a){return function(t){return function(c){var n=s.dirname(c),i=s.basename(c),o=s.join(n,".swarm_downloads/files.tar.gz"),b=s.dirname(o),m=r.resolve(d(b)).then(function(){return p(t)(c)}).then(function(){return c}).catch(function(){return f.exists(b).then(function(e){return e?null:f.mkdir(b)}).then(function(){return u(e)(o).onData(m.onDataCallback)}).then(function(){return l("md5")(o)}).then(function(){return a?p(a)(o):null}).then(function(){return h(o)(b)}).then(function(){return v(new RegExp(i+"$"))(b)}).then(function(e){return f.rename(e[0],c)}).then(function(){return f.unlink(o)}).then(function(){return t?p(t)(c):null}).then(function(){return c})});return m.onDataCallback=function(){},m.onData=function(e){return m.onDataCallback=e||function(){},m},m}}}};e.exports={download:u,hash:l,checksum:p,downloadAndCheck:function(e){return function(a){return function(t){return u(e)(a).then(p(t))}}},extract:h,readUTF8:m,safeDownloadArchived:y,directoryTree:g,downloadArchived:function(e){return function(a){return y(e)(null)(null)(a)}},search:v,test:function(){var e="d3b07384d113edec49eaa6238ad5ff00",a=new Buffer([31,139,8,0,241,52,175,88,0,3,237,207,61,14,131,48,12,134,97,102,78,225,19,84,206,15,201,121,88,178,70,130,20,113,124,210,6,49,82,117,64,8,233,125,150,79,150,61,124,78,57,191,202,90,186,43,169,106,240,94,62,25,195,240,77,181,109,222,121,49,78,7,23,156,181,49,138,26,171,198,119,162,151,182,218,189,231,50,78,181,202,242,227,174,158,165,116,178,111,143,200,145,15,145,114,238,239,238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,223,6,179,42,218,237,0,40,0,0]),r=(t(10),t(467)({"/swarm":{}}),t(43).createServer(function(e,t){return t.end(a)}).listen(12534));return y("http://localhost:12534")("7fa45f946bb2a696bdd9972e0fbceac2")(e)("/swarm/foo.txt").then(p(e)).then(m).then(function(e){return"foo\n"===e}).then(c).then(function(){return y("http://localhost:12534")("7fa45f946bb2a696bdd9972e0fbceac2")(e)("/swarm/foo.txt")}).then(function(){return!0}).catch(!1).finally(function(){return r.close()})}}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(26);e.exports={outputFile:function(e,a,t,i){"function"==typeof t&&(i=t,t="utf8");const f=c.dirname(e);r.exists(f,c=>{if(c)return r.writeFile(e,a,t,i);n.mkdirs(f,c=>{if(c)return i(c);r.writeFile(e,a,t,i)})})},outputFileSync:function(e,a,t){const i=c.dirname(e);if(r.existsSync(i))return r.writeFileSync.apply(r,arguments);n.mkdirsSync(i),r.writeFileSync.apply(r,arguments)}}},function(e,a,t){"use strict";const r=t(8);e.exports={symlinkType:function(e,a,t){if(t="function"==typeof a?a:t,a="function"!=typeof a&&a)return t(null,a);r.lstat(e,(e,r)=>{if(e)return t(null,"file");a=r&&r.isDirectory()?"dir":"file",t(null,a)})},symlinkTypeSync:function(e,a){let t;if(a)return a;try{t=r.lstatSync(e)}catch(e){return"file"}return t&&t.isDirectory()?"dir":"file"}}},function(e,a,t){"use strict";const r=t(2),c=t(8);e.exports={symlinkPaths:function(e,a,t){if(r.isAbsolute(e))return c.lstat(e,(a,r)=>a?(a.message=a.message.replace("lstat","ensureSymlink"),t(a)):t(null,{toCwd:e,toDst:e}));{const n=r.dirname(a),i=r.join(n,e);return c.exists(i,a=>a?t(null,{toCwd:i,toDst:e}):c.lstat(e,(a,c)=>a?(a.message=a.message.replace("lstat","ensureSymlink"),t(a)):t(null,{toCwd:e,toDst:r.relative(n,e)})))}},symlinkPathsSync:function(e,a){let t;if(r.isAbsolute(e)){if(!(t=c.existsSync(e)))throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}{const n=r.dirname(a),i=r.join(n,e);if(t=c.existsSync(i))return{toCwd:i,toDst:e};if(!(t=c.existsSync(e)))throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:r.relative(n,e)}}}}},function(e,a,t){"use strict";const r=t(2),c=t(8),n=t(26),i=n.mkdirs,f=n.mkdirsSync,o=t(715),d=o.symlinkPaths,s=o.symlinkPathsSync,b=t(714),u=b.symlinkType,l=b.symlinkTypeSync;function p(e,a,t,n){n="function"==typeof t?t:n,t="function"!=typeof t&&t,c.exists(a,f=>{if(f)return n(null);d(e,a,(f,o)=>{if(f)return n(f);e=o.toDst,u(o.toCwd,t,(t,f)=>{if(t)return n(t);const o=r.dirname(a);c.exists(o,t=>{if(t)return c.symlink(e,a,f,n);i(o,t=>{if(t)return n(t);c.symlink(e,a,f,n)})})})})})}function h(e,a,t,n){if(n="function"==typeof t?t:n,t="function"!=typeof t&&t,c.existsSync(a))return;const i=s(e,a);e=i.toDst,t=l(i.toCwd,t);const o=r.dirname(a);return c.existsSync(o)?c.symlinkSync(e,a,t):(f(o),c.symlinkSync(e,a,t))}e.exports={createSymlink:p,createSymlinkSync:h,ensureSymlink:p,ensureSymlinkSync:h}},function(e,a,t){"use strict";const r=t(2),c=t(8),n=t(26);function i(e,a,t){function i(e,a){c.link(e,a,e=>{if(e)return t(e);t(null)})}c.exists(a,f=>{if(f)return t(null);c.lstat(e,(f,o)=>{if(f)return f.message=f.message.replace("lstat","ensureLink"),t(f);const d=r.dirname(a);c.exists(d,r=>{if(r)return i(e,a);n.mkdirs(d,r=>{if(r)return t(r);i(e,a)})})})})}function f(e,a,t){if(c.existsSync(a))return;try{c.lstatSync(e)}catch(e){throw e.message=e.message.replace("lstat","ensureLink"),e}const i=r.dirname(a);return c.existsSync(i)?c.linkSync(e,a):(n.mkdirsSync(i),c.linkSync(e,a))}e.exports={createLink:i,createLinkSync:f,ensureLink:i,ensureLinkSync:f}},function(e,a,t){"use strict";const r=t(2),c=t(8),n=t(26);function i(e,a){function t(){c.writeFile(e,"",e=>{if(e)return a(e);a()})}c.exists(e,i=>{if(i)return a();const f=r.dirname(e);c.exists(f,e=>{if(e)return t();n.mkdirs(f,e=>{if(e)return a(e);t()})})})}function f(e){if(c.existsSync(e))return;const a=r.dirname(e);c.existsSync(a)||n.mkdirsSync(a),c.writeFileSync(e,"")}e.exports={createFile:i,createFileSync:f,ensureFile:i,ensureFileSync:f}},function(e,a,t){"use strict";const r=t(718),c=t(717),n=t(716);e.exports={createFile:r.createFile,createFileSync:r.createFileSync,ensureFile:r.createFile,ensureFileSync:r.createFileSync,createLink:c.createLink,createLinkSync:c.createLinkSync,ensureLink:c.createLink,ensureLinkSync:c.createLinkSync,createSymlink:n.createSymlink,createSymlinkSync:n.createSymlinkSync,ensureSymlink:n.createSymlink,ensureSymlinkSync:n.createSymlinkSync}},function(e,a,t){"use strict";const r=t(15),c=t(2),n=t(26),i=t(112);function f(e,a){a=a||function(){},r.readdir(e,(t,r)=>{if(t)return n.mkdirs(e,a);r=r.map(a=>c.join(e,a)),function e(){const t=r.pop();if(!t)return a();i.remove(t,t=>{if(t)return a(t);e()})}()})}function o(e){let a;try{a=r.readdirSync(e)}catch(a){return n.mkdirsSync(e)}a.forEach(a=>{a=c.join(e,a),i.removeSync(a)})}e.exports={emptyDirSync:o,emptydirSync:o,emptyDir:f,emptydir:f}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(287).copySync,i=t(112).removeSync,f=t(26).mkdirsSync;function o(e,a,t){return r.statSync(e).isDirectory()?function(e,a,t){const r={overwrite:!1};t?(i(a),c()):c();function c(){return n(e,a,r),i(e)}}(e,a,t):function(e,a,t){const c=new Buffer(65536),n=t?"w":"wx",i=r.openSync(e,"r"),f=r.fstatSync(i),o=r.openSync(a,n,f.mode);let d=1,s=0;for(;d>0;)d=r.readSync(i,c,0,65536,s),r.writeSync(o,c,0,d),s+=d;return r.closeSync(i),r.closeSync(o),r.unlinkSync(e)}(e,a,t)}e.exports={moveSync:function e(a,t,n){const d=(n=n||{}).overwrite||n.clobber||!1;if(a=c.resolve(a),t=c.resolve(t),a!==t){if(function(e,a){try{return r.statSync(e).isDirectory()&&e!==a&&a.indexOf(e)>-1&&a.split(c.dirname(e)+c.sep)[1].split(c.sep)[0]===c.basename(e)}catch(e){return!1}}(a,t))throw new Error(`Cannot move '${a}' into itself '${t}'.`);f(c.dirname(t)),function(){if(d)try{r.renameSync(a,t)}catch(r){if("ENOTEMPTY"===r.code||"EEXIST"===r.code||"EPERM"===r.code)return i(t),n.overwrite=!1,e(a,t,n);if("EXDEV"!==r.code)throw r;return o(a,t,d)}else try{r.linkSync(a,t),r.unlinkSync(a)}catch(e){if("EXDEV"===e.code||"EISDIR"===e.code||"EPERM"===e.code||"ENOTSUP"===e.code)return o(a,t,d);throw e}}()}}}},function(e,a,t){"use strict";const r=t(8),c=t(289),n=t(2),i=t(112).remove,f=t(26).mkdirs;function o(e,a,t,c){r.stat(e,(n,i)=>{n?c(n):i.isDirectory()?d(e,a,t,c):function(e,a,t,c){const n=t?"w":"wx",i=r.createReadStream(e),f=r.createWriteStream(a,{flags:n});function o(){r.unlink(e,c)}i.on("error",n=>{i.destroy(),f.destroy(),f.removeListener("close",o),r.unlink(a,()=>{"EISDIR"===n.code||"EPERM"===n.code?d(e,a,t,c):c(n)})}),f.on("error",e=>{i.destroy(),f.destroy(),f.removeListener("close",o),c(e)}),f.once("close",o),i.pipe(f)}(e,a,t,c)})}function d(e,a,t,r){const n={overwrite:!1};function f(){c(e,a,n,a=>{if(a)return r(a);i(e,r)})}t?i(a,e=>{if(e)return r(e);f()}):f()}e.exports={move:function e(a,t,c,d){"function"==typeof c&&(d=c,c={});const s=!("mkdirp"in c)||c.mkdirp,b=c.overwrite||c.clobber||!1;function u(){n.resolve(a)===n.resolve(t)?setImmediate(d):b?r.rename(a,t,r=>{if(!r)return d();if("ENOTEMPTY"!==r.code&&"EEXIST"!==r.code){if("EPERM"!==r.code)return"EXDEV"!==r.code?d(r):void o(a,t,b,d);setTimeout(()=>{i(t,r=>{if(r)return d(r);c.overwrite=!1,e(a,t,c,d)})},200)}else i(t,r=>{if(r)return d(r);c.overwrite=!1,e(a,t,c,d)})}):r.link(a,t,e=>{if(e)return"EXDEV"===e.code||"EISDIR"===e.code||"EPERM"===e.code||"ENOTSUP"===e.code?void o(a,t,b,d):void d(e);r.unlink(a,d)})}s?f(n.dirname(t),e=>{if(e)return d(e);u()}):u()}}},function(e,a,t){var r;try{r=t(8)}catch(e){r=t(15)}function c(e){return Buffer.isBuffer(e)&&(e=e.toString("utf8")),e=e.replace(/^\uFEFF/,"")}var n={spaces:null,readFile:function(e,a,t){null==t&&(t=a,a={}),"string"==typeof a&&(a={encoding:a});var n=(a=a||{}).fs||r,i=!0;"passParsingErrors"in a?i=a.passParsingErrors:"throws"in a&&(i=a.throws),n.readFile(e,a,function(r,n){if(r)return t(r);var f;n=c(n);try{f=JSON.parse(n,a?a.reviver:null)}catch(a){return i?(a.message=e+": "+a.message,t(a)):t(null,null)}t(null,f)})},readFileSync:function(e,a){"string"==typeof(a=a||{})&&(a={encoding:a});var t=a.fs||r,n=!0;"passParsingErrors"in a?n=a.passParsingErrors:"throws"in a&&(n=a.throws);var i=t.readFileSync(e,a);i=c(i);try{return JSON.parse(i,a.reviver)}catch(a){if(n)throw a.message=e+": "+a.message,a;return null}},writeFile:function(e,a,t,c){null==c&&(c=t,t={});var n=(t=t||{}).fs||r,i="object"==typeof t&&null!==t&&"spaces"in t?t.spaces:this.spaces,f="";try{f=JSON.stringify(a,t?t.replacer:null,i)+"\n"}catch(e){if(c)return c(e,null)}n.writeFile(e,f,t,c)},writeFileSync:function(e,a,t){var c=(t=t||{}).fs||r,n="object"==typeof t&&null!==t&&"spaces"in t?t.spaces:this.spaces,i=JSON.stringify(a,t.replacer,n)+"\n";return c.writeFileSync(e,i,t)}};e.exports=n},function(e,a,t){"use strict";const r=t(161);r.outputJsonSync=t(286),r.outputJson=t(285),r.outputJSONSync=t(286),r.outputJSON=t(285),e.exports=r},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(11),i="win32"===process.platform;function f(e){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach(a=>{e[a]=e[a]||r[a],e[a+="Sync"]=e[a]||r[a]}),e.maxBusyTries=e.maxBusyTries||3}function o(e,a,t){let r=0;"function"==typeof a&&(t=a,a={}),n(e,"rimraf: missing path"),n.equal(typeof e,"string","rimraf: path should be a string"),n.equal(typeof t,"function","rimraf: callback function required"),n(a,"rimraf: invalid options argument provided"),n.equal(typeof a,"object","rimraf: options should be object"),f(a),d(e,a,function c(n){if(n){if(i&&("EBUSY"===n.code||"ENOTEMPTY"===n.code||"EPERM"===n.code)&&r<a.maxBusyTries){return r++,setTimeout(()=>d(e,a,c),100*r)}"ENOENT"===n.code&&(n=null)}t(n)})}function d(e,a,t){n(e),n(a),n("function"==typeof t),a.lstat(e,(r,c)=>r&&"ENOENT"===r.code?t(null):r&&"EPERM"===r.code&&i?s(e,a,r,t):c&&c.isDirectory()?u(e,a,r,t):void a.unlink(e,r=>{if(r){if("ENOENT"===r.code)return t(null);if("EPERM"===r.code)return i?s(e,a,r,t):u(e,a,r,t);if("EISDIR"===r.code)return u(e,a,r,t)}return t(r)}))}function s(e,a,t,r){n(e),n(a),n("function"==typeof r),t&&n(t instanceof Error),a.chmod(e,666,c=>{c?r("ENOENT"===c.code?null:t):a.stat(e,(c,n)=>{c?r("ENOENT"===c.code?null:t):n.isDirectory()?u(e,a,t,r):a.unlink(e,r)})})}function b(e,a,t){let r;n(e),n(a),t&&n(t instanceof Error);try{a.chmodSync(e,666)}catch(e){if("ENOENT"===e.code)return;throw t}try{r=a.statSync(e)}catch(e){if("ENOENT"===e.code)return;throw t}r.isDirectory()?p(e,a,t):a.unlinkSync(e)}function u(e,a,t,r){n(e),n(a),t&&n(t instanceof Error),n("function"==typeof r),a.rmdir(e,i=>{!i||"ENOTEMPTY"!==i.code&&"EEXIST"!==i.code&&"EPERM"!==i.code?i&&"ENOTDIR"===i.code?r(t):r(i):function(e,a,t){n(e),n(a),n("function"==typeof t),a.readdir(e,(r,n)=>{if(r)return t(r);let i,f=n.length;if(0===f)return a.rmdir(e,t);n.forEach(r=>{o(c.join(e,r),a,r=>{if(!i)return r?t(i=r):void(0==--f&&a.rmdir(e,t))})})})}(e,a,r)})}function l(e,a){let t;f(a=a||{}),n(e,"rimraf: missing path"),n.equal(typeof e,"string","rimraf: path should be a string"),n(a,"rimraf: missing options"),n.equal(typeof a,"object","rimraf: options should be object");try{t=a.lstatSync(e)}catch(t){if("ENOENT"===t.code)return;"EPERM"===t.code&&i&&b(e,a,t)}try{t&&t.isDirectory()?p(e,a,null):a.unlinkSync(e)}catch(t){if("ENOENT"===t.code)return;if("EPERM"===t.code)return i?b(e,a,t):p(e,a,t);if("EISDIR"!==t.code)throw t;p(e,a,t)}}function p(e,a,t){n(e),n(a),t&&n(t instanceof Error);try{a.rmdirSync(e)}catch(r){if("ENOENT"===r.code)return;if("ENOTDIR"===r.code)throw t;"ENOTEMPTY"!==r.code&&"EEXIST"!==r.code&&"EPERM"!==r.code||function(e,a){n(e),n(a),a.readdirSync(e).forEach(t=>l(c.join(e,t),a)),a.rmdirSync(e,a)}(e,a)}}e.exports=o,o.sync=l},function(e,a,t){"use strict";const r=t(8),c=65536,n=new Buffer(c);e.exports=function(e,a,t){const i=t.overwrite,f=t.errorOnExist,o=t.preserveTimestamps;if(r.existsSync(a)){if(!i){if(f)throw new Error(`${a} already exists`);return}r.unlinkSync(a)}const d=r.openSync(e,"r"),s=r.fstatSync(d),b=r.openSync(a,"w",s.mode);let u=1,l=0;for(;u>0;)u=r.readSync(d,n,0,c,l),r.writeSync(b,n,0,u),l+=u;o&&r.futimesSync(b,s.atime,s.mtime),r.closeSync(d),r.closeSync(b)}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(726),i=t(26);e.exports=function e(a,t,f){("function"==typeof f||f instanceof RegExp)&&(f={filter:f}),(f=f||{}).recursive=!!f.recursive,f.clobber=!("clobber"in f&&!f.clobber),f.overwrite="overwrite"in f?!!f.overwrite:f.clobber,f.dereference="dereference"in f&&!!f.dereference,f.preserveTimestamps="preserveTimestamps"in f&&!!f.preserveTimestamps,f.filter=f.filter||function(){return!0},f.preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n    see https://github.com/jprichardson/node-fs-extra/issues/269");const o=f.recursive&&!f.dereference?r.lstatSync(a):r.statSync(a),d=c.dirname(t),s=r.existsSync(d);let b=!1;if(f.filter instanceof RegExp?(console.warn("Warning: fs-extra: Passing a RegExp filter is deprecated, use a function"),b=f.filter.test(a)):"function"==typeof f.filter&&(b=f.filter(a,t)),o.isFile()&&b)s||i.mkdirsSync(d),n(a,t,{overwrite:f.overwrite,errorOnExist:f.errorOnExist,preserveTimestamps:f.preserveTimestamps});else if(o.isDirectory()&&b)r.existsSync(t)||i.mkdirsSync(t),r.readdirSync(a).forEach(r=>{const n=f;n.recursive=!0,e(c.join(a,r),c.join(t,r),n)});else if(f.recursive&&o.isSymbolicLink()&&b){const e=r.readlinkSync(a);r.symlinkSync(e,t)}}},function(e,a,t){"use strict";const r=t(8),c=t(84),n=t(2);e.exports={hasMillisRes:function(e){let a=n.join("millis-test"+Date.now().toString()+Math.random().toString().slice(2));a=n.join(c.tmpdir(),a);const t=new Date(1435410243862);r.writeFile(a,"https://github.com/jprichardson/node-fs-extra/pull/141",c=>{if(c)return e(c);r.open(a,"r+",(c,n)=>{if(c)return e(c);r.futimes(n,t,t,t=>{if(t)return e(t);r.close(n,t=>{if(t)return e(t);r.stat(a,(a,t)=>{if(a)return e(a);e(null,t.mtime>1435410243e3)})})})})})},hasMillisResSync:function(){let e=n.join("millis-test-sync"+Date.now().toString()+Math.random().toString().slice(2));e=n.join(c.tmpdir(),e);const a=new Date(1435410243862);r.writeFileSync(e,"https://github.com/jprichardson/node-fs-extra/pull/141");const t=r.openSync(e,"r+");return r.futimesSync(t,a,a),r.closeSync(t),r.statSync(e).mtime>1435410243e3},timeRemoveMillis:function(e){if("number"==typeof e)return 1e3*Math.floor(e/1e3);if(e instanceof Date)return new Date(1e3*Math.floor(e.getTime()/1e3));throw new Error("fs-extra: timeRemoveMillis() unknown parameter type")},utimesMillis:function(e,a,t,c){r.open(e,"r+",(e,n)=>{if(e)return c(e);r.futimes(n,a,t,e=>{r.close(n,a=>{c&&c(e||a)})})})}}},function(e,a,t){"use strict";const r=t(8),c=t(2),n=t(289),i=t(26);e.exports=function(e,a,t,f){"function"!=typeof t||f?("function"==typeof t||t instanceof RegExp)&&(t={filter:t}):(f=t,t={}),f=f||function(){},(t=t||{}).preserveTimestamps&&"ia32"===process.arch&&console.warn("fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n\n    see https://github.com/jprichardson/node-fs-extra/issues/269");const o=process.cwd();if(c.resolve(o,e)===c.resolve(o,a))return f(new Error("Source and destination must not be the same."));r.lstat(e,(o,d)=>{if(o)return f(o);let s=null;if(d.isDirectory()){const e=a.split(c.sep);e.pop(),s=e.join(c.sep)}else s=c.dirname(a);r.exists(s,r=>{if(r)return n(e,a,t,f);i.mkdirs(s,r=>{if(r)return f(r);n(e,a,t,f)})})})}},function(e,a,t){e.exports={copy:t(729)}},function(e,a,t){"use strict";e.exports=function(){const e=[].slice.call(arguments).filter(e=>e),a=e.shift();return e.forEach(e=>{Object.keys(e).forEach(t=>{a[t]=e[t]})}),a}},function(e,a,t){"use strict";const r=t(731),c={},n=t(8);Object.keys(n).forEach(e=>{c[e]=n[e]});const i=c;r(i,t(730)),r(i,t(287)),r(i,t(26)),r(i,t(112)),r(i,t(724)),r(i,t(722)),r(i,t(721)),r(i,t(720)),r(i,t(719)),r(i,t(713)),e.exports=i;const f={};Object.defineProperty(f,"spaces",{get:()=>i.spaces,set:e=>{i.spaces=e}}),e.exports.jsonfile=f},function(module,exports,__webpack_require__){var Promise=__webpack_require__(82),assert=__webpack_require__(11);function thenify($$__fn__$$,options){return assert("function"==typeof $$__fn__$$),eval(createWrapper($$__fn__$$.name,options))}function createCallback(e,a,t){return function(r,c){if(r)return a(r);var n=arguments.length;if(n<=2||!t)return e(c);if(Array.isArray(t)){for(var i={},f=1;f<n;f++)i[t[f-1]]=arguments[f];return e(i)}for(i=new Array(n-1),f=1;f<n;++f)i[f-1]=arguments[f];e(i)}}function createWrapper(e,a){e=(e||"").replace(/\s|bound(?!$)/g,"");var t=void 0===(a=a||{}).multiArgs||a.multiArgs;return"(function "+e+"() {\nvar self = this\nvar len = arguments.length\n"+(t="var multiArgs = "+JSON.stringify(t)+"\n")+(a.withCallback?'var lastType = typeof arguments[len - 1]\nif (lastType === "function") return $$__fn__$$.apply(self, arguments)\n':"")+"var args = new Array(len + 1)\nfor (var i = 0; i < len; ++i) args[i] = arguments[i]\nvar lastIndex = i\nreturn new Promise(function (resolve, reject) {\nargs[lastIndex] = createCallback(resolve, reject, multiArgs)\n$$__fn__$$.apply(self, args)\n})\n})"}module.exports=thenify,thenify.withCallback=function($$__fn__$$,options){return assert("function"==typeof $$__fn__$$),options=options||{},options.withCallback=!0,void 0===options.multiArgs&&(options.multiArgs=!0),eval(createWrapper($$__fn__$$.name,options))}},function(e,a,t){var r=t(6).Stream;e.exports=function(e){return{ReadStream:function a(t,c){if(!(this instanceof a))return new a(t,c);r.call(this);var n=this;this.path=t;this.fd=null;this.readable=!0;this.paused=!1;this.flags="r";this.mode=438;this.bufferSize=65536;c=c||{};var i=Object.keys(c);for(var f=0,o=i.length;f<o;f++){var d=i[f];this[d]=c[d]}this.encoding&&this.setEncoding(this.encoding);if(void 0!==this.start){if("number"!=typeof this.start)throw TypeError("start must be a Number");if(void 0===this.end)this.end=1/0;else if("number"!=typeof this.end)throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(null!==this.fd)return void process.nextTick(function(){n._read()});e.open(this.path,this.flags,this.mode,function(e,a){if(e)return n.emit("error",e),void(n.readable=!1);n.fd=a,n.emit("open",a),n._read()})},WriteStream:function a(t,c){if(!(this instanceof a))return new a(t,c);r.call(this);this.path=t;this.fd=null;this.writable=!0;this.flags="w";this.encoding="binary";this.mode=438;this.bytesWritten=0;c=c||{};var n=Object.keys(c);for(var i=0,f=n.length;i<f;i++){var o=n[i];this[o]=c[o]}if(void 0!==this.start){if("number"!=typeof this.start)throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1;this._queue=[];null===this.fd&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}}},function(e,a,t){var r=t(291),c=t(58),n=process.cwd,i=null,f=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return i||(i=n.call(process)),i};try{process.cwd()}catch(e){}var o=process.chdir;function d(e){return e?function(a,t,c){return e.call(r,a,t,function(e){h(e)&&(e=null),c&&c.apply(this,arguments)})}:e}function s(e){return e?function(a,t){try{return e.call(r,a,t)}catch(e){if(!h(e))throw e}}:e}function b(e){return e?function(a,t,c,n){return e.call(r,a,t,c,function(e){h(e)&&(e=null),n&&n.apply(this,arguments)})}:e}function u(e){return e?function(a,t,c){try{return e.call(r,a,t,c)}catch(e){if(!h(e))throw e}}:e}function l(e){return e?function(a,t){return e.call(r,a,function(e,a){if(!a)return t.apply(this,arguments);a.uid<0&&(a.uid+=4294967296),a.gid<0&&(a.gid+=4294967296),t&&t.apply(this,arguments)})}:e}function p(e){return e?function(a){var t=e.call(r,a);return t.uid<0&&(t.uid+=4294967296),t.gid<0&&(t.gid+=4294967296),t}:e}function h(e){return!e||("ENOSYS"===e.code||!(process.getuid&&0===process.getuid()||"EINVAL"!==e.code&&"EPERM"!==e.code))}process.chdir=function(e){i=null,o.call(process,e)},e.exports=function(e){c.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&function(e){e.lchmod=function(a,t,r){e.open(a,c.O_WRONLY|c.O_SYMLINK,t,function(a,c){a?r&&r(a):e.fchmod(c,t,function(a){e.close(c,function(e){r&&r(a||e)})})})},e.lchmodSync=function(a,t){var r,n=e.openSync(a,c.O_WRONLY|c.O_SYMLINK,t),i=!0;try{r=e.fchmodSync(n,t),i=!1}finally{if(i)try{e.closeSync(n)}catch(e){}else e.closeSync(n)}return r}}(e);e.lutimes||function(e){c.hasOwnProperty("O_SYMLINK")?(e.lutimes=function(a,t,r,n){e.open(a,c.O_SYMLINK,function(a,c){a?n&&n(a):e.futimes(c,t,r,function(a){e.close(c,function(e){n&&n(a||e)})})})},e.lutimesSync=function(a,t,r){var n,i=e.openSync(a,c.O_SYMLINK),f=!0;try{n=e.futimesSync(i,t,r),f=!1}finally{if(f)try{e.closeSync(i)}catch(e){}else e.closeSync(i)}return n}):(e.lutimes=function(e,a,t,r){r&&process.nextTick(r)},e.lutimesSync=function(){})}(e);e.chown=b(e.chown),e.fchown=b(e.fchown),e.lchown=b(e.lchown),e.chmod=d(e.chmod),e.fchmod=d(e.fchmod),e.lchmod=d(e.lchmod),e.chownSync=u(e.chownSync),e.fchownSync=u(e.fchownSync),e.lchownSync=u(e.lchownSync),e.chmodSync=s(e.chmodSync),e.fchmodSync=s(e.fchmodSync),e.lchmodSync=s(e.lchmodSync),e.stat=l(e.stat),e.fstat=l(e.fstat),e.lstat=l(e.lstat),e.statSync=p(e.statSync),e.fstatSync=p(e.fstatSync),e.lstatSync=p(e.lstatSync),e.lchmod||(e.lchmod=function(e,a,t){t&&process.nextTick(t)},e.lchmodSync=function(){});e.lchown||(e.lchown=function(e,a,t,r){r&&process.nextTick(r)},e.lchownSync=function(){});"win32"===f&&(e.rename=function(a){return function(t,r,c){var n=Date.now(),i=0;a(t,r,function f(o){if(o&&("EACCES"===o.code||"EPERM"===o.code)&&Date.now()-n<6e4)return setTimeout(function(){e.stat(r,function(e,n){e&&"ENOENT"===e.code?a(t,r,f):c(o)})},i),void(i<100&&(i+=10));c&&c(o)})}}(e.rename));e.read=function(a){return function(t,r,c,n,i,f){var o;if(f&&"function"==typeof f){var d=0;o=function(s,b,u){if(s&&"EAGAIN"===s.code&&d<10)return d++,a.call(e,t,r,c,n,i,o);f.apply(this,arguments)}}return a.call(e,t,r,c,n,i,o)}}(e.read),e.readSync=function(a){return function(t,r,c,n,i){for(var f=0;;)try{return a.call(e,t,r,c,n,i)}catch(e){if("EAGAIN"===e.code&&f<10){f++;continue}throw e}}}(e.readSync)}},function(e,a,t){var r,c=t(82);try{r=t(8)}catch(e){r=t(15)}var n=["appendFile","chmod","chown","close","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchown","link","lstat","mkdir","open","read","readFile","readdir","readlink","realpath","rename","rmdir","stat","symlink","truncate","unlink","utimes","write","writeFile"];"function"==typeof r.access&&n.push("access"),"function"==typeof r.copyFile&&n.push("copyFile"),"function"==typeof r.mkdtemp&&n.push("mkdtemp"),t(290).withCallback(r,a,n),a.exists=function(e,a){return"function"==typeof a?r.stat(e,function(e){a(null,!e)}):new c(function(a){r.stat(e,function(e){a(!e)})})}},function(e,a,t){var r=t(292),c=t(712),n=t(84),i=t(2),f=t(323),o=t(464),d=t(461),s=t(460),b=t(205),u=t(448),l=t(447),p=t(446);e.exports=p({fsp:r,files:c,os:n,path:i,child_process:f,defaultArchives:d,mimetype:o,request:function(e,a){var t={};for(var r in a)t[r]=a[r];return void 0!==t.body&&(t.body=t.body instanceof Buffer?t.body:new Buffer(t.body)),s(e,t)},downloadUrl:"http://ethereum-mist.s3.amazonaws.com/swarm/",bytes:b,hash:u,pick:l})},function(e,a,t){"use strict";var r=t(20),c=t(737),n=function e(a){this.givenProvider=e.givenProvider,a&&a._requestManager&&(a=a.currentProvider),"undefined"!=typeof document&&(this.pick=c.pick),this.setProvider(a)};n.givenProvider=null,"undefined"!=typeof ethereumProvider&&ethereumProvider.bzz&&(n.givenProvider=ethereumProvider.bzz),n.prototype.setProvider=function(e){if(r.isObject(e)&&r.isString(e.bzz)&&(e=e.bzz),!r.isString(e)){this.currentProvider=null;var a=new Error("No provider set, please set one using bzz.setProvider().");return this.download=this.upload=this.isAvailable=function(){throw a},!1}return this.currentProvider=e,this.download=c.at(e).download,this.upload=c.at(e).upload,this.isAvailable=c.at(e).isAvailable,!0},e.exports=n},function(e,a,t){"use strict";var r=t(51),c=t(114).subscriptions,n=t(50),i=t(113),f=function(){var e=this;r.packageInit(this,arguments);var a=this.setProvider;this.setProvider=function(){a.apply(e,arguments),e.net.setProvider.apply(e,arguments)},this.clearSubscriptions=e._requestManager.clearSubscriptions,this.net=new i(this.currentProvider),[new c({name:"subscribe",type:"shh",subscriptions:{messages:{params:1}}}),new n({name:"getVersion",call:"shh_version",params:0}),new n({name:"getInfo",call:"shh_info",params:0}),new n({name:"setMaxMessageSize",call:"shh_setMaxMessageSize",params:1}),new n({name:"setMinPoW",call:"shh_setMinPoW",params:1}),new n({name:"markTrustedPeer",call:"shh_markTrustedPeer",params:1}),new n({name:"newKeyPair",call:"shh_newKeyPair",params:0}),new n({name:"addPrivateKey",call:"shh_addPrivateKey",params:1}),new n({name:"deleteKeyPair",call:"shh_deleteKeyPair",params:1}),new n({name:"hasKeyPair",call:"shh_hasKeyPair",params:1}),new n({name:"getPublicKey",call:"shh_getPublicKey",params:1}),new n({name:"getPrivateKey",call:"shh_getPrivateKey",params:1}),new n({name:"newSymKey",call:"shh_newSymKey",params:0}),new n({name:"addSymKey",call:"shh_addSymKey",params:1}),new n({name:"generateSymKeyFromPassword",call:"shh_generateSymKeyFromPassword",params:1}),new n({name:"hasSymKey",call:"shh_hasSymKey",params:1}),new n({name:"getSymKey",call:"shh_getSymKey",params:1}),new n({name:"deleteSymKey",call:"shh_deleteSymKey",params:1}),new n({name:"newMessageFilter",call:"shh_newMessageFilter",params:1}),new n({name:"getFilterMessages",call:"shh_getFilterMessages",params:1}),new n({name:"deleteMessageFilter",call:"shh_deleteMessageFilter",params:1}),new n({name:"post",call:"shh_post",params:1,inputFormatter:[null]})].forEach(function(a){a.attachToObject(e),a.setRequestManager(e._requestManager)})};r.addProviders(f),e.exports=f},function(e,a,t){"use strict";var r=t(20);e.exports=function(e){var a,t=this;return this.net.getId().then(function(e){return a=e,t.getBlock(0)}).then(function(t){var c="private";return"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"===t.hash&&1===a&&(c="main"),"0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303"===t.hash&&2===a&&(c="morden"),"0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"===t.hash&&3===a&&(c="ropsten"),"0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177"===t.hash&&4===a&&(c="rinkeby"),"0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9"===t.hash&&42===a&&(c="kovan"),r.isFunction(e)&&e(null,c),c}).catch(function(a){if(!r.isFunction(e))throw a;e(a)})}},function(e,a,t){var r=t(10).randomBytes;e.exports=function(){return r(16)}},function(e,a,t){for(var r=t(741),c=[],n={},i=0;i<256;i++)c[i]=(i+256).toString(16).substr(1),n[c[i]]=i;function f(e,a){var t=a||0,r=c;return r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]}var o=r(),d=[1|o[0],o[1],o[2],o[3],o[4],o[5]],s=16383&(o[6]<<8|o[7]),b=0,u=0;function l(e,a,t){var c=a&&t||0;"string"==typeof e&&(a="binary"==e?new Array(16):null,e=null);var n=(e=e||{}).random||(e.rng||r)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,a)for(var i=0;i<16;i++)a[c+i]=n[i];return a||f(n)}var p=l;p.v1=function(e,a,t){var r=a&&t||0,c=a||[],n=void 0!==(e=e||{}).clockseq?e.clockseq:s,i=void 0!==e.msecs?e.msecs:(new Date).getTime(),o=void 0!==e.nsecs?e.nsecs:u+1,l=i-b+(o-u)/1e4;if(l<0&&void 0===e.clockseq&&(n=n+1&16383),(l<0||i>b)&&void 0===e.nsecs&&(o=0),o>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");b=i,u=o,s=n;var p=(1e4*(268435455&(i+=122192928e5))+o)%4294967296;c[r++]=p>>>24&255,c[r++]=p>>>16&255,c[r++]=p>>>8&255,c[r++]=255&p;var h=i/4294967296*1e4&268435455;c[r++]=h>>>8&255,c[r++]=255&h,c[r++]=h>>>24&15|16,c[r++]=h>>>16&255,c[r++]=n>>>8|128,c[r++]=255&n;for(var m=e.node||d,g=0;g<6;g++)c[r+g]=m[g];return a||f(c)},p.v4=l,p.parse=function(e,a,t){var r=a&&t||0,c=0;for(a=a||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(e){c<16&&(a[r+c++]=n[e])});c<16;)a[r+c++]=0;return a},p.unparse=f,e.exports=p},function(e,a,t){"use strict";function r(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var c=t(7),n=t(85),i=c.Buffer,f=c.kMaxLength,o=global.crypto||global.msCrypto,d=Math.pow(2,32)-1;function s(e,a){if("number"!=typeof e||e!=e)throw new TypeError("offset must be a number");if(e>d||e<0)throw new TypeError("offset must be a uint32");if(e>f||e>a)throw new RangeError("offset out of range")}function b(e,a,t){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>d||e<0)throw new TypeError("size must be a uint32");if(e+a>t||e>f)throw new RangeError("buffer too small")}function u(e,a,t,r){if(process.browser){var c=e.buffer,i=new Uint8Array(c,a,t);return o.getRandomValues(i),r?void process.nextTick(function(){r(null,e)}):e}if(!r)return n(t).copy(e,a),e;n(t,function(t,c){if(t)return r(t);c.copy(e,a),r(null,e)})}o&&o.getRandomValues||!process.browser?(a.randomFill=function(e,a,t,r){if(!(i.isBuffer(e)||e instanceof global.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof a)r=a,a=0,t=e.length;else if("function"==typeof t)r=t,t=e.length-a;else if("function"!=typeof r)throw new TypeError('"cb" argument must be a function');return s(a,e.length),b(t,a,e.length),u(e,a,t,r)},a.randomFillSync=function(e,a,t){void 0===a&&(a=0);if(!(i.isBuffer(e)||e instanceof global.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');s(a,e.length),void 0===t&&(t=e.length-a);return b(t,a,e.length),u(e,a,t)}):(a.randomFill=r,a.randomFillSync=r)},function(e,a,t){var r=t(10);"function"==typeof r.randomFill&&"function"==typeof r.randomFillSync?(a.randomFill=r.randomFill,a.randomFillSync=r.randomFillSync):e.exports=t(743)},function(e,a,t){var r=t(302),c=t(296),n=t(295),i=t(9),f=t(293),o=t(30),d=t(294);e.exports=function(e,a,t){var s;s=e.padding?e.padding:t?1:4;var b,u=r(e),l=u.modulus.byteLength();if(a.length>l||new i(a).cmp(u.modulus)>=0)throw new Error("decryption error");b=t?d(new i(a),u):f(a,u);var p=new Buffer(l-b.length);if(p.fill(0),b=Buffer.concat([p,b],l),4===s)return function(e,a){e.modulus;var t=e.modulus.byteLength(),r=(a.length,o("sha1").update(new Buffer("")).digest()),i=r.length;if(0!==a[0])throw new Error("decryption error");var f=a.slice(1,i+1),d=a.slice(i+1),s=n(f,c(d,i)),b=n(d,c(s,t-i-1));if(function(e,a){e=new Buffer(e),a=new Buffer(a);var t=0,r=e.length;e.length!==a.length&&(t++,r=Math.min(e.length,a.length));var c=-1;for(;++c<r;)t+=e[c]^a[c];return t}(r,b.slice(0,i)))throw new Error("decryption error");var u=i;for(;0===b[u];)u++;if(1!==b[u++])throw new Error("decryption error");return b.slice(u)}(u,b);if(1===s)return function(e,a,t){var r=a.slice(0,2),c=2,n=0;for(;0!==a[c++];)if(c>=a.length){n++;break}var i=a.slice(2,c-1);a.slice(c-1,c);("0002"!==r.toString("hex")&&!t||"0001"!==r.toString("hex")&&t)&&n++;i.length<8&&n++;if(n)throw new Error("decryption error");return a.slice(c)}(0,b,t);if(3===s)return b;throw new Error("unknown padding")}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(6).Transform;function n(e){c.call(this),this._block=r.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}t(0)(n,c),n.prototype._transform=function(e,a,t){var r=null;try{this.update(e,a)}catch(e){r=e}t(r)},n.prototype._flush=function(e){var a=null;try{this.push(this.digest())}catch(e){a=e}e(a)},n.prototype.update=function(e,a){if(function(e,a){if(!r.isBuffer(e)&&"string"!=typeof e)throw new TypeError(a+" must be a string or a buffer")}(e,"Data"),this._finalized)throw new Error("Digest already called");r.isBuffer(e)||(e=r.from(e,a));for(var t=this._block,c=0;this._blockOffset+e.length-c>=this._blockSize;){for(var n=this._blockOffset;n<this._blockSize;)t[n++]=e[c++];this._update(),this._blockOffset=0}for(;c<e.length;)t[this._blockOffset++]=e[c++];for(var i=0,f=8*e.length;f>0;++i)this._length[i]+=f,(f=this._length[i]/4294967296|0)>0&&(this._length[i]-=4294967296*f);return this},n.prototype._update=function(){throw new Error("_update is not implemented")},n.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},n.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=n},function(e,a,t){"use strict";var r=t(0),c=t(746),n=new Array(16);function i(){c.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(e,a){return e<<a|e>>>32-a}function o(e,a,t,r,c,n,i){return f(e+(a&t|~a&r)+c+n|0,i)+a|0}function d(e,a,t,r,c,n,i){return f(e+(a&r|t&~r)+c+n|0,i)+a|0}function s(e,a,t,r,c,n,i){return f(e+(a^t^r)+c+n|0,i)+a|0}function b(e,a,t,r,c,n,i){return f(e+(t^(a|~r))+c+n|0,i)+a|0}r(i,c),i.prototype._update=function(){for(var e=n,a=0;a<16;++a)e[a]=this._block.readInt32LE(4*a);var t=this._a,r=this._b,c=this._c,i=this._d;r=b(r=b(r=b(r=b(r=s(r=s(r=s(r=s(r=d(r=d(r=d(r=d(r=o(r=o(r=o(r=o(r,c=o(c,i=o(i,t=o(t,r,c,i,e[0],3614090360,7),r,c,e[1],3905402710,12),t,r,e[2],606105819,17),i,t,e[3],3250441966,22),c=o(c,i=o(i,t=o(t,r,c,i,e[4],4118548399,7),r,c,e[5],1200080426,12),t,r,e[6],2821735955,17),i,t,e[7],4249261313,22),c=o(c,i=o(i,t=o(t,r,c,i,e[8],1770035416,7),r,c,e[9],2336552879,12),t,r,e[10],4294925233,17),i,t,e[11],2304563134,22),c=o(c,i=o(i,t=o(t,r,c,i,e[12],1804603682,7),r,c,e[13],4254626195,12),t,r,e[14],2792965006,17),i,t,e[15],1236535329,22),c=d(c,i=d(i,t=d(t,r,c,i,e[1],4129170786,5),r,c,e[6],3225465664,9),t,r,e[11],643717713,14),i,t,e[0],3921069994,20),c=d(c,i=d(i,t=d(t,r,c,i,e[5],3593408605,5),r,c,e[10],38016083,9),t,r,e[15],3634488961,14),i,t,e[4],3889429448,20),c=d(c,i=d(i,t=d(t,r,c,i,e[9],568446438,5),r,c,e[14],3275163606,9),t,r,e[3],4107603335,14),i,t,e[8],1163531501,20),c=d(c,i=d(i,t=d(t,r,c,i,e[13],2850285829,5),r,c,e[2],4243563512,9),t,r,e[7],1735328473,14),i,t,e[12],2368359562,20),c=s(c,i=s(i,t=s(t,r,c,i,e[5],4294588738,4),r,c,e[8],2272392833,11),t,r,e[11],1839030562,16),i,t,e[14],4259657740,23),c=s(c,i=s(i,t=s(t,r,c,i,e[1],2763975236,4),r,c,e[4],1272893353,11),t,r,e[7],4139469664,16),i,t,e[10],3200236656,23),c=s(c,i=s(i,t=s(t,r,c,i,e[13],681279174,4),r,c,e[0],3936430074,11),t,r,e[3],3572445317,16),i,t,e[6],76029189,23),c=s(c,i=s(i,t=s(t,r,c,i,e[9],3654602809,4),r,c,e[12],3873151461,11),t,r,e[15],530742520,16),i,t,e[2],3299628645,23),c=b(c,i=b(i,t=b(t,r,c,i,e[0],4096336452,6),r,c,e[7],1126891415,10),t,r,e[14],2878612391,15),i,t,e[5],4237533241,21),c=b(c,i=b(i,t=b(t,r,c,i,e[12],1700485571,6),r,c,e[3],2399980690,10),t,r,e[10],4293915773,15),i,t,e[1],2240044497,21),c=b(c,i=b(i,t=b(t,r,c,i,e[8],1873313359,6),r,c,e[15],4264355552,10),t,r,e[6],2734768916,15),i,t,e[13],1309151649,21),c=b(c,i=b(i,t=b(t,r,c,i,e[4],4149444226,6),r,c,e[11],3174756917,10),t,r,e[2],718787259,15),i,t,e[9],3951481745,21),this._a=this._a+t|0,this._b=this._b+r|0,this._c=this._c+c|0,this._d=this._d+i|0},i.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=new Buffer(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=i},function(e,a,t){var r=t(7).Buffer,c=t(747);e.exports=function(e,a,t,n){if(r.isBuffer(e)||(e=r.from(e,"binary")),a&&(r.isBuffer(a)||(a=r.from(a,"binary")),8!==a.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var i=t/8,f=r.alloc(i),o=r.alloc(n||0),d=r.alloc(0);i>0||n>0;){var s=new c;s.update(d),s.update(e),a&&s.update(a),d=s.digest();var b=0;if(i>0){var u=f.length-i;b=Math.min(i,d.length),d.copy(f,u,0,b),i-=b}if(b<d.length&&n>0){var l=o.length-n,p=Math.min(n,d.length-b);d.copy(o,l,b,b+p),n-=p}}return d.fill(0),{key:f,iv:o}}},function(e,a,t){var r=/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,c=/^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----/m,n=/^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m,i=t(748),f=t(297);e.exports=function(e,a){var t,o=e.toString(),d=o.match(r);if(d){var s="aes"+d[1],b=new Buffer(d[2],"hex"),u=new Buffer(d[3].replace(/[\r\n]/g,""),"base64"),l=i(a,b.slice(0,8),parseInt(d[1],10)).key,p=[],h=f.createDecipheriv(s,l,b);p.push(h.update(u)),p.push(h.final()),t=Buffer.concat(p)}else{var m=o.match(n);t=new Buffer(m[2].replace(/[\r\n]/g,""),"base64")}return{tag:o.match(c)[1],data:t}}},function(e){e.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"}},function(e,a,t){"use strict";var r=t(81),c=r.define("Time",function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})}),n=r.define("AttributeTypeValue",function(){this.seq().obj(this.key("type").objid(),this.key("value").any())}),i=r.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional())}),f=r.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(i),this.key("subjectPublicKey").bitstr())}),o=r.define("RelativeDistinguishedName",function(){this.setof(n)}),d=r.define("RDNSequence",function(){this.seqof(o)}),s=r.define("Name",function(){this.choice({rdnSequence:this.use(d)})}),b=r.define("Validity",function(){this.seq().obj(this.key("notBefore").use(c),this.key("notAfter").use(c))}),u=r.define("Extension",function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())}),l=r.define("TBSCertificate",function(){this.seq().obj(this.key("version").explicit(0).int(),this.key("serialNumber").int(),this.key("signature").use(i),this.key("issuer").use(s),this.key("validity").use(b),this.key("subject").use(s),this.key("subjectPublicKeyInfo").use(f),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(u).optional())}),p=r.define("X509Certificate",function(){this.seq().obj(this.key("tbsCertificate").use(l),this.key("signatureAlgorithm").use(i),this.key("signatureValue").bitstr())});e.exports=p},function(e,a,t){var r=t(0),c=t(298);function n(e){c.call(this,e),this.enc="pem"}r(n,c),e.exports=n,n.prototype.encode=function(e,a){for(var t=c.prototype.encode.call(this,e).toString("base64"),r=["-----BEGIN "+a.label+"-----"],n=0;n<t.length;n+=64)r.push(t.slice(n,n+64));return r.push("-----END "+a.label+"-----"),r.join("\n")}},function(e,a,t){var r=a;r.der=t(298),r.pem=t(752)},function(e,a,t){var r=t(0),c=t(24).Buffer,n=t(299);function i(e){n.call(this,e),this.enc="pem"}r(i,n),e.exports=i,i.prototype.decode=function(e,a){for(var t=e.toString().split(/[\r\n]+/g),r=a.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,f=-1,o=-1,d=0;d<t.length;d++){var s=t[d].match(i);if(null!==s&&s[2]===r){if(-1!==f){if("END"!==s[1])break;o=d;break}if("BEGIN"!==s[1])break;f=d}}if(-1===f||-1===o)throw new Error("PEM section not found for: "+r);var b=t.slice(f+1,o).join("");b.replace(/[^a-z0-9\+\/=]+/gi,"");var u=new c(b,"base64");return n.prototype.decode.call(this,u,a)}},function(e,a,t){var r=a;r.der=t(299),r.pem=t(754)},function(e,a,t){var r=t(300);a.tagClass={0:"universal",1:"application",2:"context",3:"private"},a.tagClassByName=r._reverse(a.tagClass),a.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},a.tagByName=r._reverse(a.tag)},function(e,a,t){var r=t(80).Reporter,c=t(80).EncoderBuffer,n=t(80).DecoderBuffer,i=t(46),f=["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"],o=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(f);function d(e,a){var t={};this._baseState=t,t.enc=e,t.parent=a||null,t.children=null,t.tag=null,t.args=null,t.reverseArgs=null,t.choice=null,t.optional=!1,t.any=!1,t.obj=!1,t.use=null,t.useDecoder=null,t.key=null,t.default=null,t.explicit=null,t.implicit=null,t.contains=null,t.parent||(t.children=[],this._wrap())}e.exports=d;var s=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];d.prototype.clone=function(){var e=this._baseState,a={};s.forEach(function(t){a[t]=e[t]});var t=new this.constructor(a.parent);return t._baseState=a,t},d.prototype._wrap=function(){var e=this._baseState;o.forEach(function(a){this[a]=function(){var t=new this.constructor(this);return e.children.push(t),t[a].apply(t,arguments)}},this)},d.prototype._init=function(e){var a=this._baseState;i(null===a.parent),e.call(this),a.children=a.children.filter(function(e){return e._baseState.parent===this},this),i.equal(a.children.length,1,"Root node can have only one child")},d.prototype._useArgs=function(e){var a=this._baseState,t=e.filter(function(e){return e instanceof this.constructor},this);e=e.filter(function(e){return!(e instanceof this.constructor)},this),0!==t.length&&(i(null===a.children),a.children=t,t.forEach(function(e){e._baseState.parent=this},this)),0!==e.length&&(i(null===a.args),a.args=e,a.reverseArgs=e.map(function(e){if("object"!=typeof e||e.constructor!==Object)return e;var a={};return Object.keys(e).forEach(function(t){t==(0|t)&&(t|=0);var r=e[t];a[r]=t}),a}))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach(function(e){d.prototype[e]=function(){var a=this._baseState;throw new Error(e+" not implemented for encoding: "+a.enc)}}),f.forEach(function(e){d.prototype[e]=function(){var a=this._baseState,t=Array.prototype.slice.call(arguments);return i(null===a.tag),a.tag=e,this._useArgs(t),this}}),d.prototype.use=function(e){i(e);var a=this._baseState;return i(null===a.use),a.use=e,this},d.prototype.optional=function(){return this._baseState.optional=!0,this},d.prototype.def=function(e){var a=this._baseState;return i(null===a.default),a.default=e,a.optional=!0,this},d.prototype.explicit=function(e){var a=this._baseState;return i(null===a.explicit&&null===a.implicit),a.explicit=e,this},d.prototype.implicit=function(e){var a=this._baseState;return i(null===a.explicit&&null===a.implicit),a.implicit=e,this},d.prototype.obj=function(){var e=this._baseState,a=Array.prototype.slice.call(arguments);return e.obj=!0,0!==a.length&&this._useArgs(a),this},d.prototype.key=function(e){var a=this._baseState;return i(null===a.key),a.key=e,this},d.prototype.any=function(){return this._baseState.any=!0,this},d.prototype.choice=function(e){var a=this._baseState;return i(null===a.choice),a.choice=e,this._useArgs(Object.keys(e).map(function(a){return e[a]})),this},d.prototype.contains=function(e){var a=this._baseState;return i(null===a.use),a.contains=e,this},d.prototype._decode=function(e,a){var t=this._baseState;if(null===t.parent)return e.wrapResult(t.children[0]._decode(e,a));var r,c=t.default,i=!0,f=null;if(null!==t.key&&(f=e.enterKey(t.key)),t.optional){var o=null;if(null!==t.explicit?o=t.explicit:null!==t.implicit?o=t.implicit:null!==t.tag&&(o=t.tag),null!==o||t.any){if(i=this._peekTag(e,o,t.any),e.isError(i))return i}else{var d=e.save();try{null===t.choice?this._decodeGeneric(t.tag,e,a):this._decodeChoice(e,a),i=!0}catch(e){i=!1}e.restore(d)}}if(t.obj&&i&&(r=e.enterObject()),i){if(null!==t.explicit){var s=this._decodeTag(e,t.explicit);if(e.isError(s))return s;e=s}var b=e.offset;if(null===t.use&&null===t.choice){if(t.any)d=e.save();var u=this._decodeTag(e,null!==t.implicit?t.implicit:t.tag,t.any);if(e.isError(u))return u;t.any?c=e.raw(d):e=u}if(a&&a.track&&null!==t.tag&&a.track(e.path(),b,e.length,"tagged"),a&&a.track&&null!==t.tag&&a.track(e.path(),e.offset,e.length,"content"),c=t.any?c:null===t.choice?this._decodeGeneric(t.tag,e,a):this._decodeChoice(e,a),e.isError(c))return c;if(t.any||null!==t.choice||null===t.children||t.children.forEach(function(t){t._decode(e,a)}),t.contains&&("octstr"===t.tag||"bitstr"===t.tag)){var l=new n(c);c=this._getUse(t.contains,e._reporterState.obj)._decode(l,a)}}return t.obj&&i&&(c=e.leaveObject(r)),null===t.key||null===c&&!0!==i?null!==f&&e.exitKey(f):e.leaveKey(f,t.key,c),c},d.prototype._decodeGeneric=function(e,a,t){var r=this._baseState;return"seq"===e||"set"===e?null:"seqof"===e||"setof"===e?this._decodeList(a,e,r.args[0],t):/str$/.test(e)?this._decodeStr(a,e,t):"objid"===e&&r.args?this._decodeObjid(a,r.args[0],r.args[1],t):"objid"===e?this._decodeObjid(a,null,null,t):"gentime"===e||"utctime"===e?this._decodeTime(a,e,t):"null_"===e?this._decodeNull(a,t):"bool"===e?this._decodeBool(a,t):"objDesc"===e?this._decodeStr(a,e,t):"int"===e||"enum"===e?this._decodeInt(a,r.args&&r.args[0],t):null!==r.use?this._getUse(r.use,a._reporterState.obj)._decode(a,t):a.error("unknown tag: "+e)},d.prototype._getUse=function(e,a){var t=this._baseState;return t.useDecoder=this._use(e,a),i(null===t.useDecoder._baseState.parent),t.useDecoder=t.useDecoder._baseState.children[0],t.implicit!==t.useDecoder._baseState.implicit&&(t.useDecoder=t.useDecoder.clone(),t.useDecoder._baseState.implicit=t.implicit),t.useDecoder},d.prototype._decodeChoice=function(e,a){var t=this._baseState,r=null,c=!1;return Object.keys(t.choice).some(function(n){var i=e.save(),f=t.choice[n];try{var o=f._decode(e,a);if(e.isError(o))return!1;r={type:n,value:o},c=!0}catch(a){return e.restore(i),!1}return!0},this),c?r:e.error("Choice not matched")},d.prototype._createEncoderBuffer=function(e){return new c(e,this.reporter)},d.prototype._encode=function(e,a,t){var r=this._baseState;if(null===r.default||r.default!==e){var c=this._encodeValue(e,a,t);if(void 0!==c&&!this._skipDefault(c,a,t))return c}},d.prototype._encodeValue=function(e,a,t){var c=this._baseState;if(null===c.parent)return c.children[0]._encode(e,a||new r);var n=null;if(this.reporter=a,c.optional&&void 0===e){if(null===c.default)return;e=c.default}var i=null,f=!1;if(c.any)n=this._createEncoderBuffer(e);else if(c.choice)n=this._encodeChoice(e,a);else if(c.contains)i=this._getUse(c.contains,t)._encode(e,a),f=!0;else if(c.children)i=c.children.map(function(t){if("null_"===t._baseState.tag)return t._encode(null,a,e);if(null===t._baseState.key)return a.error("Child should have a key");var r=a.enterKey(t._baseState.key);if("object"!=typeof e)return a.error("Child expected, but input is not object");var c=t._encode(e[t._baseState.key],a,e);return a.leaveKey(r),c},this).filter(function(e){return e}),i=this._createEncoderBuffer(i);else if("seqof"===c.tag||"setof"===c.tag){if(!c.args||1!==c.args.length)return a.error("Too many args for : "+c.tag);if(!Array.isArray(e))return a.error("seqof/setof, but data is not Array");var o=this.clone();o._baseState.implicit=null,i=this._createEncoderBuffer(e.map(function(t){var r=this._baseState;return this._getUse(r.args[0],e)._encode(t,a)},o))}else null!==c.use?n=this._getUse(c.use,t)._encode(e,a):(i=this._encodePrimitive(c.tag,e),f=!0);if(!c.any&&null===c.choice){var d=null!==c.implicit?c.implicit:c.tag,s=null===c.implicit?"universal":"context";null===d?null===c.use&&a.error("Tag could be omitted only for .use()"):null===c.use&&(n=this._encodeComposite(d,f,s,i))}return null!==c.explicit&&(n=this._encodeComposite(c.explicit,!1,"context",n)),n},d.prototype._encodeChoice=function(e,a){var t=this._baseState,r=t.choice[e.type];return r||i(!1,e.type+" not found in "+JSON.stringify(Object.keys(t.choice))),r._encode(e.value,a)},d.prototype._encodePrimitive=function(e,a){var t=this._baseState;if(/str$/.test(e))return this._encodeStr(a,e);if("objid"===e&&t.args)return this._encodeObjid(a,t.reverseArgs[0],t.args[1]);if("objid"===e)return this._encodeObjid(a,null,null);if("gentime"===e||"utctime"===e)return this._encodeTime(a,e);if("null_"===e)return this._encodeNull();if("int"===e||"enum"===e)return this._encodeInt(a,t.args&&t.reverseArgs[0]);if("bool"===e)return this._encodeBool(a);if("objDesc"===e)return this._encodeStr(a,e);throw new Error("Unsupported tag: "+e)},d.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},d.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(e)}},function(e,a,t){var r=t(0);function c(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function n(e,a){this.path=e,this.rethrow(a)}a.Reporter=c,c.prototype.isError=function(e){return e instanceof n},c.prototype.save=function(){var e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},c.prototype.restore=function(e){var a=this._reporterState;a.obj=e.obj,a.path=a.path.slice(0,e.pathLen)},c.prototype.enterKey=function(e){return this._reporterState.path.push(e)},c.prototype.exitKey=function(e){var a=this._reporterState;a.path=a.path.slice(0,e-1)},c.prototype.leaveKey=function(e,a,t){var r=this._reporterState;this.exitKey(e),null!==r.obj&&(r.obj[a]=t)},c.prototype.path=function(){return this._reporterState.path.join("/")},c.prototype.enterObject=function(){var e=this._reporterState,a=e.obj;return e.obj={},a},c.prototype.leaveObject=function(e){var a=this._reporterState,t=a.obj;return a.obj=e,t},c.prototype.error=function(e){var a,t=this._reporterState,r=e instanceof n;if(a=r?e:new n(t.path.map(function(e){return"["+JSON.stringify(e)+"]"}).join(""),e.message||e,e.stack),!t.options.partial)throw a;return r||t.errors.push(a),a},c.prototype.wrapResult=function(e){var a=this._reporterState;return a.options.partial?{result:this.isError(e)?null:e,errors:a.errors}:e},r(n,Error),n.prototype.rethrow=function(e){if(this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,n),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},function(e,a){e.exports=__webpack_require__(86)},function(e,a,t){var r=t(81),c=t(0);function n(e,a){this.name=e,this.body=a,this.decoders={},this.encoders={}}a.define=function(e,a){return new n(e,a)},n.prototype._createNamed=function(e){var a;try{a=t(759).runInThisContext("(function "+this.name+"(entity) {\n  this._initNamed(entity);\n})")}catch(e){a=function(e){this._initNamed(e)}}return c(a,e),a.prototype._initNamed=function(a){e.call(this,a)},new a(this)},n.prototype._getDecoder=function(e){return e=e||"der",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(r.decoders[e])),this.decoders[e]},n.prototype.decode=function(e,a,t){return this._getDecoder(a).decode(e,t)},n.prototype._getEncoder=function(e){return e=e||"der",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(r.encoders[e])),this.encoders[e]},n.prototype.encode=function(e,a,t){return this._getEncoder(a).encode(e,t)}},function(e,a,t){"use strict";var r=t(81);a.certificate=t(751);var c=r.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())});a.RSAPrivateKey=c;var n=r.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});a.RSAPublicKey=n;var i=r.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(f),this.key("subjectPublicKey").bitstr())});a.PublicKey=i;var f=r.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())}),o=r.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(f),this.key("subjectPrivateKey").octstr())});a.PrivateKey=o;var d=r.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())});a.EncryptedPrivateKey=d;var s=r.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())});a.DSAPrivateKey=s,a.DSAparam=r.define("DSAparam",function(){this.int()});var b=r.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(u),this.key("publicKey").optional().explicit(1).bitstr())});a.ECPrivateKey=b;var u=r.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});a.signature=r.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(e,a,t){var r=t(302),c=t(85),n=t(30),i=t(296),f=t(295),o=t(9),d=t(294),s=t(293);e.exports=function(e,a,t){var b;b=e.padding?e.padding:t?1:4;var u,l=r(e);if(4===b)u=function(e,a){var t=e.modulus.byteLength(),r=a.length,d=n("sha1").update(new Buffer("")).digest(),s=d.length,b=2*s;if(r>t-b-2)throw new Error("message too long");var u=new Buffer(t-r-b-2);u.fill(0);var l=t-s-1,p=c(s),h=f(Buffer.concat([d,u,new Buffer([1]),a],l),i(p,l)),m=f(p,i(h,s));return new o(Buffer.concat([new Buffer([0]),m,h],t))}(l,a);else if(1===b)u=function(e,a,t){var r,n=a.length,i=e.modulus.byteLength();if(n>i-11)throw new Error("message too long");t?(r=new Buffer(i-n-3)).fill(255):r=function(e,a){var t,r=new Buffer(e),n=0,i=c(2*e),f=0;for(;n<e;)f===i.length&&(i=c(2*e),f=0),(t=i[f++])&&(r[n++]=t);return r}(i-n-3);return new o(Buffer.concat([new Buffer([0,t?1:2]),r,new Buffer([0]),a],i))}(l,a,t);else{if(3!==b)throw new Error("unknown padding");if((u=new o(a)).cmp(l.modulus)>=0)throw new Error("data too long for modulus")}return t?s(u,l):d(u,l)}},function(e,a,t){var r=t(10);"function"!=typeof r.publicEncrypt&&(r=t(164)),a.publicEncrypt=r.publicEncrypt,a.privateDecrypt=r.privateDecrypt,"function"!=typeof r.privateEncrypt?a.privateEncrypt=t(164).privateEncrypt:a.privateEncrypt=r.privateEncrypt,"function"!=typeof r.publicDecrypt?a.publicDecrypt=t(164).publicDecrypt:a.publicDecrypt=r.publicDecrypt},function(e,a,t){var r=t(23),c=t(9);e.exports=function(e){return new i(e)};var n={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}};function i(e){this.curveType=n[e],this.curveType||(this.curveType={name:e}),this.curve=new r.ec(this.curveType.name),this.keys=void 0}function f(e,a,t){Array.isArray(e)||(e=e.toArray());var r=new Buffer(e);if(t&&r.length<t){var c=new Buffer(t-r.length);c.fill(0),r=Buffer.concat([c,r])}return a?r.toString(a):r}n.p224=n.secp224r1,n.p256=n.secp256r1=n.prime256v1,n.p192=n.secp192r1=n.prime192v1,n.p384=n.secp384r1,n.p521=n.secp521r1,i.prototype.generateKeys=function(e,a){return this.keys=this.curve.genKeyPair(),this.getPublicKey(e,a)},i.prototype.computeSecret=function(e,a,t){return a=a||"utf8",Buffer.isBuffer(e)||(e=new Buffer(e,a)),f(this.curve.keyFromPublic(e).getPublic().mul(this.keys.getPrivate()).getX(),t,this.curveType.byteLength)},i.prototype.getPublicKey=function(e,a){var t=this.keys.getPublic("compressed"===a,!0);return"hybrid"===a&&(t[t.length-1]%2?t[0]=7:t[0]=6),f(t,e)},i.prototype.getPrivateKey=function(e){return f(this.keys.getPrivate(),e)},i.prototype.setPublicKey=function(e,a){return a=a||"utf8",Buffer.isBuffer(e)||(e=new Buffer(e,a)),this.keys._importPublic(e),this},i.prototype.setPrivateKey=function(e,a){a=a||"utf8",Buffer.isBuffer(e)||(e=new Buffer(e,a));var t=new c(e);return t=t.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(t),this}},function(e,a,t){var r=t(10).createECDH;e.exports=r||t(764)},function(e,a,t){var r=t(10);a.createSign=r.createSign,a.Sign=r.Sign,a.createVerify=r.createVerify,a.Verify=r.Verify},function(e,a,t){var r=t(10);a.DiffieHellmanGroup=r.DiffieHellmanGroup,a.createDiffieHellmanGroup=r.createDiffieHellmanGroup,a.getDiffieHellman=r.getDiffieHellman,a.createDiffieHellman=r.createDiffieHellman,a.DiffieHellman=r.DiffieHellman},function(e,a,t){var r=t(10);a.createCipher=a.Cipher=r.createCipher,a.createCipheriv=a.Cipheriv=r.createCipheriv,a.createDecipher=a.Decipher=r.createDecipher,a.createDecipheriv=a.Decipheriv=r.createDecipheriv,a.listCiphers=a.getCiphers=r.getCiphers},function(e){e.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"}}},function(e,a,t){e.exports=t(769)},function(e,a,t){"use strict";a.randomBytes=a.rng=a.pseudoRandomBytes=a.prng=t(85),a.createHash=a.Hash=t(30),a.createHmac=a.Hmac=t(328);var r=t(770),c=Object.keys(r),n=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(c);a.getHashes=function(){return n};var i=t(170);a.pbkdf2=i.pbkdf2,a.pbkdf2Sync=i.pbkdf2Sync;var f=t(768);a.Cipher=f.Cipher,a.createCipher=f.createCipher,a.Cipheriv=f.Cipheriv,a.createCipheriv=f.createCipheriv,a.Decipher=f.Decipher,a.createDecipher=f.createDecipher,a.Decipheriv=f.Decipheriv,a.createDecipheriv=f.createDecipheriv,a.getCiphers=f.getCiphers,a.listCiphers=f.listCiphers;var o=t(767);a.DiffieHellmanGroup=o.DiffieHellmanGroup,a.createDiffieHellmanGroup=o.createDiffieHellmanGroup,a.getDiffieHellman=o.getDiffieHellman,a.createDiffieHellman=o.createDiffieHellman,a.DiffieHellman=o.DiffieHellman;var d=t(766);a.createSign=d.createSign,a.Sign=d.Sign,a.createVerify=d.createVerify,a.Verify=d.Verify,a.createECDH=t(765);var s=t(763);a.publicEncrypt=s.publicEncrypt,a.privateEncrypt=s.privateEncrypt,a.publicDecrypt=s.publicDecrypt,a.privateDecrypt=s.privateDecrypt;var b=t(744);a.randomFill=b.randomFill,a.randomFillSync=b.randomFillSync,a.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))},a.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}},function(e,a){var t=function(e,a){for(var t=[],r=0;r<e;++r)t.push(a(r));return t};e.exports={generate:t,replicate:function(e,a){return t(e,function(){return a})},concat:function(e,a){return e.concat(a)},flatten:function(e){for(var a=[],t=0,r=e.length;t<r;++t)for(var c=0,n=e[t].length;c<n;++c)a.push(e[t][c]);return a},chunksOf:function(e,a){for(var t=[],r=0,c=a.length;r<c;r+=e)t.push(a.slice(r,r+e));return t}}},function(e,a,t){var r=function(){return function(e,a){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,a){var t=[],r=!0,c=!1,n=void 0;try{for(var i,f=e[Symbol.iterator]();!(r=(i=f.next()).done)&&(t.push(i.value),!a||t.length!==a);r=!0);}catch(e){c=!0,n=e}finally{try{!r&&f.return&&f.return()}finally{if(c)throw n}}return t}(e,a);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=t(165),n=t(305),i=t(23),f=(t(304),new i.ec("secp256k1")),o=t(303),d=o.keccak256,s=o.keccak256s,b=function(e){for(var a=s(e.slice(2)),t="0x",r=0;r<40;r++)t+=parseInt(a[r+2],16)>7?e[r+2].toUpperCase():e[r+2];return t},u=function(e){var a=new Buffer(e.slice(2),"hex"),t="0x"+f.keyFromPrivate(a).getPublic(!1,"hex").slice(2),r=d(t);return{address:b("0x"+r.slice(-40)),privateKey:e}},l=function(e){var a=r(e,3),t=a[0],n=c.pad(32,a[1]),i=c.pad(32,a[2]);return c.flatten([n,i,t])},p=function(e){return[c.slice(64,c.length(e),e),c.slice(0,32,e),c.slice(32,64,e)]},h=function(e){return function(a,t){var r=f.keyFromPrivate(new Buffer(t.slice(2),"hex")).sign(new Buffer(a.slice(2),"hex"),{canonical:!0});return l([n.fromString(c.fromNumber(e+r.recoveryParam)),c.pad(32,c.fromNat("0x"+r.r.toString(16))),c.pad(32,c.fromNat("0x"+r.s.toString(16)))])}},m=h(27);e.exports={create:function(e){var a=d(c.concat(c.random(32),e||c.random(32))),t=c.concat(c.concat(c.random(32),a),c.random(32)),r=d(t);return u(r)},toChecksum:b,fromPrivate:u,sign:m,makeSigner:h,recover:function(e,a){var t=p(a),r={v:c.toNumber(t[0]),r:t[1].slice(2),s:t[2].slice(2)},n="0x"+f.recoverPubKey(new Buffer(e.slice(2),"hex"),r,r.v<2?r.v:1-r.v%2).encode("hex",!1).slice(2),i=d(n);return b("0x"+i.slice(-40))},encodeSignature:l,decodeSignature:p}},function(e,a,t){"use strict";var r=t(20),c=t(51),n=t(50),i=t(82),f=t(773),o=t(303),d=t(304),s=t(305),b=t(165),u="undefined"==typeof global?t(771):t(10),l=t(325),p=t(742),h=t(27),m=t(21),g=function(e){return r.isUndefined(e)||r.isNull(e)},v=function(e){for(;e&&e.startsWith("0x0");)e="0x"+e.slice(3);return e},y=function(e){return e.length%2==1&&(e=e.replace("0x","0x0")),e},_=function(){var e=this;c.packageInit(this,arguments),delete this.BatchRequest,delete this.extend;var a=[new n({name:"getId",call:"net_version",params:0,outputFormatter:h.hexToNumber}),new n({name:"getGasPrice",call:"eth_gasPrice",params:0}),new n({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[function(e){if(h.isAddress(e))return e;throw new Error("Address "+e+' is not a valid address to get the "transactionCount".')},function(){return"latest"}]})];this._ethereumCall={},r.each(a,function(a){a.attachToObject(e._ethereumCall),a.setRequestManager(e._requestManager)}),this.wallet=new w(this)};function w(e){this._accounts=e,this.length=0,this.defaultKeyName="web3js_wallet"}_.prototype._addAccountFunctions=function(e){var a=this;return e.signTransaction=function(t,r){return a.signTransaction(t,e.privateKey,r)},e.sign=function(t){return a.sign(t,e.privateKey)},e.encrypt=function(t,r){return a.encrypt(e.privateKey,t,r)},e},_.prototype.create=function(e){return this._addAccountFunctions(f.create(e||h.randomHex(32)))},_.prototype.privateKeyToAccount=function(e){return this._addAccountFunctions(f.fromPrivate(e))},_.prototype.signTransaction=function(e,a,t){var c,n=!1;if(t=t||function(){},!e)return n=new Error("No transaction object given!"),t(n),i.reject(n);function u(e){if(e.gas||e.gasLimit||(n=new Error('"gas" is missing')),(e.nonce<0||e.gas<0||e.gasPrice<0||e.chainId<0)&&(n=new Error("Gas, gasPrice, nonce or chainId is lower than 0")),n)return t(n),i.reject(new Error('"gas" is missing'));try{var r=e=m.formatters.inputCallFormatter(e);r.to=e.to||"0x",r.data=e.data||"0x",r.value=e.value||"0x",r.chainId=h.numberToHex(e.chainId);var u=d.encode([b.fromNat(r.nonce),b.fromNat(r.gasPrice),b.fromNat(r.gas),r.to.toLowerCase(),b.fromNat(r.value),r.data,b.fromNat(r.chainId||"0x1"),"0x","0x"]),l=o.keccak256(u),p=f.makeSigner(2*s.toNumber(r.chainId||"0x1")+35)(o.keccak256(u),a),g=d.decode(u).slice(0,6).concat(f.decodeSignature(p));g[6]=y(v(g[6])),g[7]=y(v(g[7])),g[8]=y(v(g[8]));var _=d.encode(g),w=d.decode(_);c={messageHash:l,v:v(w[6]),r:v(w[7]),s:v(w[8]),rawTransaction:_}}catch(e){return t(e),i.reject(e)}return t(null,c),c}return void 0!==e.nonce&&void 0!==e.chainId&&void 0!==e.gasPrice?i.resolve(u(e)):i.all([g(e.chainId)?this._ethereumCall.getId():e.chainId,g(e.gasPrice)?this._ethereumCall.getGasPrice():e.gasPrice,g(e.nonce)?this._ethereumCall.getTransactionCount(this.privateKeyToAccount(a).address):e.nonce]).then(function(a){if(g(a[0])||g(a[1])||g(a[2]))throw new Error('One of the values "chainId", "gasPrice", or "nonce" couldn\'t be fetched: '+JSON.stringify(a));return u(r.extend(e,{chainId:a[0],gasPrice:a[1],nonce:a[2]}))})},_.prototype.recoverTransaction=function(e){var a=d.decode(e),t=f.encodeSignature(a.slice(6,9)),r=b.toNumber(a[6]),c=r<35?[]:[b.fromNumber(r-35>>1),"0x","0x"],n=a.slice(0,6).concat(c),i=d.encode(n);return f.recover(o.keccak256(i),t)},_.prototype.hashMessage=function(e){var a=h.isHexStrict(e)?h.hexToBytes(e):e,t=Buffer.from(a),r="Ethereum Signed Message:\n"+a.length,c=Buffer.from(r),n=Buffer.concat([c,t]);return o.keccak256s(n)},_.prototype.sign=function(e,a){var t=this.hashMessage(e),r=f.sign(t,a),c=f.decodeSignature(r);return{message:e,messageHash:t,v:c[0],r:c[1],s:c[2],signature:r}},_.prototype.recover=function(e,a,t){var c=[].slice.apply(arguments);return r.isObject(e)?this.recover(e.messageHash,f.encodeSignature([e.v,e.r,e.s]),!0):(t||(e=this.hashMessage(e)),c.length>=4?(t=c.slice(-1)[0],t=!!r.isBoolean(t)&&!!t,this.recover(e,f.encodeSignature(c.slice(1,4)),t)):f.recover(e,a))},_.prototype.decrypt=function(e,a,t){if(!r.isString(a))throw new Error("No password given.");var c,n,i=r.isObject(e)?e:JSON.parse(t?e.toLowerCase():e);if(3!==i.version)throw new Error("Not a valid V3 wallet");if("scrypt"===i.crypto.kdf)n=i.crypto.kdfparams,c=l(new Buffer(a),new Buffer(n.salt,"hex"),n.n,n.r,n.p,n.dklen);else{if("pbkdf2"!==i.crypto.kdf)throw new Error("Unsupported key derivation scheme");if("hmac-sha256"!==(n=i.crypto.kdfparams).prf)throw new Error("Unsupported parameters to PBKDF2");c=u.pbkdf2Sync(new Buffer(a),new Buffer(n.salt,"hex"),n.c,n.dklen,"sha256")}var f=new Buffer(i.crypto.ciphertext,"hex");if(h.sha3(Buffer.concat([c.slice(16,32),f])).replace("0x","")!==i.crypto.mac)throw new Error("Key derivation failed - possibly wrong password");var o=u.createDecipheriv(i.crypto.cipher,c.slice(0,16),new Buffer(i.crypto.cipherparams.iv,"hex")),d="0x"+Buffer.concat([o.update(f),o.final()]).toString("hex");return this.privateKeyToAccount(d)},_.prototype.encrypt=function(e,a,t){var r,c=this.privateKeyToAccount(e),n=(t=t||{}).salt||u.randomBytes(32),i=t.iv||u.randomBytes(16),f=t.kdf||"scrypt",o={dklen:t.dklen||32,salt:n.toString("hex")};if("pbkdf2"===f)o.c=t.c||262144,o.prf="hmac-sha256",r=u.pbkdf2Sync(new Buffer(a),n,o.c,o.dklen,"sha256");else{if("scrypt"!==f)throw new Error("Unsupported kdf");o.n=t.n||8192,o.r=t.r||8,o.p=t.p||1,r=l(new Buffer(a),n,o.n,o.r,o.p,o.dklen)}var d=u.createCipheriv(t.cipher||"aes-128-ctr",r.slice(0,16),i);if(!d)throw new Error("Unsupported cipher");var s=Buffer.concat([d.update(new Buffer(c.privateKey.replace("0x",""),"hex")),d.final()]),b=h.sha3(Buffer.concat([r.slice(16,32),new Buffer(s,"hex")])).replace("0x","");return{version:3,id:p.v4({random:t.uuid||u.randomBytes(16)}),address:c.address.toLowerCase().replace("0x",""),crypto:{ciphertext:s.toString("hex"),cipherparams:{iv:i.toString("hex")},cipher:t.cipher||"aes-128-ctr",kdf:f,kdfparams:o,mac:b.toString("hex")}}},w.prototype._findSafeIndex=function(e){return e=e||0,r.has(this,e)?this._findSafeIndex(e+1):e},w.prototype._currentIndexes=function(){return Object.keys(this).map(function(e){return parseInt(e)}).filter(function(e){return e<9e20})},w.prototype.create=function(e,a){for(var t=0;t<e;++t)this.add(this._accounts.create(a).privateKey);return this},w.prototype.add=function(e){return r.isString(e)&&(e=this._accounts.privateKeyToAccount(e)),this[e.address]?this[e.address]:((e=this._accounts.privateKeyToAccount(e.privateKey)).index=this._findSafeIndex(),this[e.index]=e,this[e.address]=e,this[e.address.toLowerCase()]=e,this.length++,e)},w.prototype.remove=function(e){var a=this[e];return!(!a||!a.address)&&(this[a.address].privateKey=null,delete this[a.address],this[a.address.toLowerCase()].privateKey=null,delete this[a.address.toLowerCase()],this[a.index].privateKey=null,delete this[a.index],this.length--,!0)},w.prototype.clear=function(){var e=this;return this._currentIndexes().forEach(function(a){e.remove(a)}),this},w.prototype.encrypt=function(e,a){var t=this;return this._currentIndexes().map(function(r){return t[r].encrypt(e,a)})},w.prototype.decrypt=function(e,a){var t=this;return e.forEach(function(e){var r=t._accounts.decrypt(e,a);if(!r)throw new Error("Couldn't decrypt accounts. Password wrong?");t.add(r)}),this},w.prototype.save=function(e,a){return localStorage.setItem(a||this.defaultKeyName,JSON.stringify(this.encrypt(e))),!0},w.prototype.load=function(e,a){var t=localStorage.getItem(a||this.defaultKeyName);if(t)try{t=JSON.parse(t)}catch(e){}return this.decrypt(t||[],e)},"undefined"==typeof localStorage&&(delete w.prototype.save,delete w.prototype.load),e.exports=_},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputBytes,this._outputFormatter=r.formatOutputBytes};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/)},e.exports=n},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputString,this._outputFormatter=r.formatOutputString};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^string(\[([0-9]*)\])*$/)},n.prototype.isDynamicType=function(){return!0},e.exports=n},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputDynamicBytes,this._outputFormatter=r.formatOutputDynamicBytes};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^bytes(\[([0-9]*)\])*$/)},n.prototype.isDynamicType=function(){return!0},e.exports=n},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputInt,this._outputFormatter=r.formatOutputUInt};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},e.exports=n},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputInt,this._outputFormatter=r.formatOutputInt};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^int([0-9]*)?(\[([0-9]*)\])*$/)},e.exports=n},function(e,a,t){var r=t(36),c=t(49),n=function(){this._inputFormatter=r.formatInputBool,this._outputFormatter=r.formatOutputBool};(n.prototype=new c({})).constructor=n,n.prototype.isType=function(e){return!!e.match(/^bool(\[([0-9]*)\])*$/)},e.exports=n},function(e,a,t){var r=t(36),c=t(21).formatters,n=t(49),i=function(){this._inputFormatter=function(){var e=Array.prototype.slice.call(arguments);return e[0]=e[0]&&"0x0"!==e[0]?c.inputAddressFormatter(e[0]):"",r.formatInputInt.apply(this,e)},this._outputFormatter=r.formatOutputAddress};(i.prototype=new n({})).constructor=i,i.prototype.isType=function(e){return!!e.match(/address(\[([0-9]*)\])?/)},e.exports=i},function(e,a,t){"use strict";var r=t(20),c=t(51),n=t(50),i=t(27),f=t(114).subscription,o=t(21).formatters,d=t(21).errors,s=t(310),b=t(307),u=function e(a,t,n){var f=this,d=Array.prototype.slice.call(arguments);if(!(this instanceof e))throw new Error('Please use the "new" keyword to instantiate a web3.eth.contract() object!');if(c.packageInit(this,[this.constructor.currentProvider]),this.clearSubscriptions=this._requestManager.clearSubscriptions,!a||!Array.isArray(a))throw new Error("You must provide the json interface of the contract when instantiating a contract object.");this.options={};var s=d[d.length-1];r.isObject(s)&&!r.isArray(s)&&(n=s,this.options=r.extend(this.options,this._getOrSetDefaultOptions(n)),r.isObject(t)&&(t=null)),Object.defineProperty(this.options,"address",{set:function(e){e&&(f._address=i.toChecksumAddress(o.inputAddressFormatter(e)))},get:function(){return f._address},enumerable:!0}),Object.defineProperty(this.options,"jsonInterface",{set:function(e){return f.methods={},f.events={},f._jsonInterface=e.map(function(e){var a,t;if(e.name&&(t=i._jsonInterfaceMethodToString(e)),"function"===e.type){if(e.signature=b.encodeFunctionSignature(t),a=f._createTxObject.bind({method:e,parent:f}),f.methods[e.name]){var r=f._createTxObject.bind({method:e,parent:f,nextMethod:f.methods[e.name]});f.methods[e.name]=r}else f.methods[e.name]=a;f.methods[e.signature]=a,f.methods[t]=a}else if("event"===e.type){e.signature=b.encodeEventSignature(t);var c=f._on.bind(f,e.signature);f.events[e.name]&&"bound "!==f.events[e.name].name||(f.events[e.name]=c),f.events[e.signature]=c,f.events[t]=c}return e}),f.events.allEvents=f._on.bind(f,"allevents"),f._jsonInterface},get:function(){return f._jsonInterface},enumerable:!0});var u=this.constructor.defaultAccount,l=this.constructor.defaultBlock||"latest";Object.defineProperty(this,"defaultAccount",{get:function(){return u},set:function(e){return e&&(u=i.toChecksumAddress(o.inputAddressFormatter(e))),e},enumerable:!0}),Object.defineProperty(this,"defaultBlock",{get:function(){return l},set:function(e){return l=e,e},enumerable:!0}),this.methods={},this.events={},this._address=null,this._jsonInterface=[],this.options.address=t,this.options.jsonInterface=a};u.setProvider=function(e,a){c.packageInit(this,[e]),this._ethAccounts=a},u.prototype._getCallback=function(e){if(e&&r.isFunction(e[e.length-1]))return e.pop()},u.prototype._checkListener=function(e,a){if(a===e)throw new Error('The event "'+e+"\" is a reserved event name, you can't use it.")},u.prototype._getOrSetDefaultOptions=function(e){var a=e.gasPrice?String(e.gasPrice):null,t=e.from?i.toChecksumAddress(o.inputAddressFormatter(e.from)):null;return e.data=e.data||this.options.data,e.from=t||this.options.from,e.gasPrice=a||this.options.gasPrice,e.gas=e.gas||e.gasLimit||this.options.gas,delete e.gasLimit,e},u.prototype._encodeEventABI=function(e,a){var t=(a=a||{}).filter||{},c={};if(["fromBlock","toBlock"].filter(function(e){return void 0!==a[e]}).forEach(function(e){c[e]=o.inputBlockNumberFormatter(a[e])}),r.isArray(a.topics))c.topics=a.topics;else{if(c.topics=[],e&&!e.anonymous&&"ALLEVENTS"!==e.name&&c.topics.push(e.signature),"ALLEVENTS"!==e.name){var n=e.inputs.filter(function(e){return!0===e.indexed}).map(function(e){var a=t[e.name];return a?r.isArray(a)?a.map(function(a){return b.encodeParameter(e.type,a)}):b.encodeParameter(e.type,a):null});c.topics=c.topics.concat(n)}c.topics.length||delete c.topics}return this.options.address&&(c.address=this.options.address.toLowerCase()),c},u.prototype._decodeEventABI=function(e){var a=this;e.data=e.data||"",e.topics=e.topics||[];var t=o.outputLogFormatter(e);"ALLEVENTS"===a.name&&(a=a.jsonInterface.find(function(a){return a.signature===e.topics[0]})||{anonymous:!0}),a.inputs=a.inputs||[];var r=a.anonymous?e.topics:e.topics.slice(1);return t.returnValues=b.decodeLog(a.inputs,e.data,r),delete t.returnValues.__length__,t.event=a.name,t.signature=a.anonymous||!e.topics[0]?null:e.topics[0],t.raw={data:t.data,topics:t.topics},delete t.data,delete t.topics,t},u.prototype._encodeMethodABI=function(){var e=this._method.signature,a=this.arguments||[],t=!1,c=this._parent.options.jsonInterface.filter(function(a){return"constructor"===e&&a.type===e||(a.signature===e||a.signature===e.replace("0x","")||a.name===e)&&"function"===a.type}).map(function(e){var c=r.isArray(e.inputs)?e.inputs.length:0;if(c!==a.length)throw new Error("The number of arguments is not matching the methods required number. You need to pass "+c+" arguments.");return"function"===e.type&&(t=e.signature),r.isArray(e.inputs)?e.inputs.map(function(e){return e.type}):[]}).map(function(e){return b.encodeParameters(e,a).replace("0x","")})[0]||"";if("constructor"===e){if(!this._deployData)throw new Error("The contract has no contract data option set. This is necessary to append the constructor parameters.");return this._deployData+c}var n=t?t+c:c;if(n)return n;throw new Error("Couldn't find a matching contract method named \""+this._method.name+'".')},u.prototype._decodeMethodReturn=function(e,a){if(!a)return null;a=a.length>=2?a.slice(2):a;var t=b.decodeParameters(e,a);return 1===t.__length__?t[0]:(delete t.__length__,t)},u.prototype.deploy=function(e,a){if((e=e||{}).arguments=e.arguments||[],!(e=this._getOrSetDefaultOptions(e)).data)return i._fireError(new Error('No "data" specified in neither the given options, nor the default options.'),null,null,a);var t=r.find(this.options.jsonInterface,function(e){return"constructor"===e.type})||{};return t.signature="constructor",this._createTxObject.apply({method:t,parent:this,deployData:e.data,_ethAccounts:this.constructor._ethAccounts},e.arguments)},u.prototype._generateEventOptions=function(){var e=Array.prototype.slice.call(arguments),a=this._getCallback(e),t=r.isObject(e[e.length-1])?e.pop():{},c=r.isString(e[0])?e[0]:"allevents";if(!(c="allevents"===c.toLowerCase()?{name:"ALLEVENTS",jsonInterface:this.options.jsonInterface}:this.options.jsonInterface.find(function(e){return"event"===e.type&&(e.name===c||e.signature==="0x"+c.replace("0x",""))})))throw new Error('Event "'+c.name+"\" doesn't exist in this contract.");if(!i.isAddress(this.options.address))throw new Error("This contract object doesn't have address set yet, please set an address first.");return{params:this._encodeEventABI(c,t),event:c,callback:a}},u.prototype.clone=function(){return new this.constructor(this.options.jsonInterface,this.options.address,this.options)},u.prototype.once=function(e,a,t){var c=Array.prototype.slice.call(arguments);if(!(t=this._getCallback(c)))throw new Error("Once requires a callback as the second parameter.");a&&delete a.fromBlock,this._on(e,a,function(e,a,c){c.unsubscribe(),r.isFunction(t)&&t(e,a,c)})},u.prototype._on=function(){var e=this._generateEventOptions.apply(this,arguments);this._checkListener("newListener",e.event.name,e.callback),this._checkListener("removeListener",e.event.name,e.callback);var a=new f({subscription:{params:1,inputFormatter:[o.inputLogFormatter],outputFormatter:this._decodeEventABI.bind(e.event),subscriptionHandler:function(e){e.removed?this.emit("changed",e):this.emit("data",e),r.isFunction(this.callback)&&this.callback(null,e,this)}},type:"eth",requestManager:this._requestManager});return a.subscribe("logs",e.params,e.callback||function(){}),a},u.prototype.getPastEvents=function(){var e=this._generateEventOptions.apply(this,arguments),a=new n({name:"getPastLogs",call:"eth_getLogs",params:1,inputFormatter:[o.inputLogFormatter],outputFormatter:this._decodeEventABI.bind(e.event)});a.setRequestManager(this._requestManager);var t=a.buildCall();return a=null,t(e.params,e.callback)},u.prototype._createTxObject=function(){var e=Array.prototype.slice.call(arguments),a={};if("function"===this.method.type&&(a.call=this.parent._executeMethod.bind(a,"call"),a.call.request=this.parent._executeMethod.bind(a,"call",!0)),a.send=this.parent._executeMethod.bind(a,"send"),a.send.request=this.parent._executeMethod.bind(a,"send",!0),a.encodeABI=this.parent._encodeMethodABI.bind(a),a.estimateGas=this.parent._executeMethod.bind(a,"estimate"),e&&this.method.inputs&&e.length!==this.method.inputs.length){if(this.nextMethod)return this.nextMethod.apply(null,e);throw d.InvalidNumberOfParams(e.length,this.method.inputs.length,this.method.name)}return a.arguments=e||[],a._method=this.method,a._parent=this.parent,a._ethAccounts=this.parent.constructor._ethAccounts||this._ethAccounts,this.deployData&&(a._deployData=this.deployData),a},u.prototype._processExecuteArguments=function(e,a){var t={};if(t.type=e.shift(),t.callback=this._parent._getCallback(e),"call"===t.type&&!0!==e[e.length-1]&&(r.isString(e[e.length-1])||isFinite(e[e.length-1]))&&(t.defaultBlock=e.pop()),t.options=r.isObject(e[e.length-1])?e.pop():{},t.generateRequest=!0===e[e.length-1]&&e.pop(),t.options=this._parent._getOrSetDefaultOptions(t.options),t.options.data=this.encodeABI(),!this._deployData&&!i.isAddress(this._parent.options.address))throw new Error("This contract object doesn't have address set yet, please set an address first.");return this._deployData||(t.options.to=this._parent.options.address),t.options.data?t:i._fireError(new Error("Couldn't find a matching contract method, or the number of parameters is wrong."),a.eventEmitter,a.reject,t.callback)},u.prototype._executeMethod=function(){var e=this,a=this._parent._processExecuteArguments.call(this,Array.prototype.slice.call(arguments),t),t=s("send"!==a.type),c=e.constructor._ethAccounts||e._ethAccounts;if(a.generateRequest){var f={params:[o.inputCallFormatter.call(this._parent,a.options)],callback:a.callback};return"call"===a.type?(f.params.push(o.inputDefaultBlockNumberFormatter.call(this._parent,a.defaultBlock)),f.method="eth_call",f.format=this._parent._decodeMethodReturn.bind(null,this._method.outputs)):f.method="eth_sendTransaction",f}switch(a.type){case"estimate":return new n({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[o.inputCallFormatter],outputFormatter:i.hexToNumber,requestManager:e._parent._requestManager,accounts:c,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock}).createFunction()(a.options,a.callback);case"call":return new n({name:"call",call:"eth_call",params:2,inputFormatter:[o.inputCallFormatter,o.inputDefaultBlockNumberFormatter],outputFormatter:function(a){return e._parent._decodeMethodReturn(e._method.outputs,a)},requestManager:e._parent._requestManager,accounts:c,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock}).createFunction()(a.options,a.defaultBlock,a.callback);case"send":if(!i.isAddress(a.options.from))return i._fireError(new Error('No "from" address specified in neither the given options, nor the default options.'),t.eventEmitter,t.reject,a.callback);if(r.isBoolean(this._method.payable)&&!this._method.payable&&a.options.value&&a.options.value>0)return i._fireError(new Error("Can not send value to non-payable contract method or constructor"),t.eventEmitter,t.reject,a.callback);var d={receiptFormatter:function(a){if(r.isArray(a.logs)){var t=r.map(a.logs,function(a){return e._parent._decodeEventABI.call({name:"ALLEVENTS",jsonInterface:e._parent.options.jsonInterface},a)});a.events={};var c=0;t.forEach(function(e){e.event?a.events[e.event]?Array.isArray(a.events[e.event])?a.events[e.event].push(e):a.events[e.event]=[a.events[e.event],e]:a.events[e.event]=e:(a.events[c]=e,c++)}),delete a.logs}return a},contractDeployFormatter:function(a){var t=e._parent.clone();return t.options.address=a.contractAddress,t}};return new n({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[o.inputTransactionFormatter],requestManager:e._parent._requestManager,accounts:e.constructor._ethAccounts||e._ethAccounts,defaultAccount:e._parent.defaultAccount,defaultBlock:e._parent.defaultBlock,extraFormatters:d}).createFunction()(a.options,a.callback)}},e.exports=u},function(e,a,t){"use strict";var r=t(20),c=t(51),n=t(21),i=t(114).subscriptions,f=t(50),o=t(27),d=t(113),s=t(308),b=t(782),u=t(318),l=t(774),p=t(307),h=t(740),m=n.formatters,g=function(e){return r.isString(e[0])&&0===e[0].indexOf("0x")?"eth_getBlockByHash":"eth_getBlockByNumber"},v=function(e){return r.isString(e[0])&&0===e[0].indexOf("0x")?"eth_getTransactionByBlockHashAndIndex":"eth_getTransactionByBlockNumberAndIndex"},y=function(e){return r.isString(e[0])&&0===e[0].indexOf("0x")?"eth_getUncleByBlockHashAndIndex":"eth_getUncleByBlockNumberAndIndex"},_=function(e){return r.isString(e[0])&&0===e[0].indexOf("0x")?"eth_getBlockTransactionCountByHash":"eth_getBlockTransactionCountByNumber"},w=function(e){return r.isString(e[0])&&0===e[0].indexOf("0x")?"eth_getUncleCountByBlockHash":"eth_getUncleCountByBlockNumber"},A=function(){var e=this;c.packageInit(this,arguments);var a=this.setProvider;this.setProvider=function(){a.apply(e,arguments),e.net.setProvider.apply(e,arguments),e.personal.setProvider.apply(e,arguments),e.accounts.setProvider.apply(e,arguments),e.Contract.setProvider(e.currentProvider,e.accounts)};var t=null,n="latest";Object.defineProperty(this,"defaultAccount",{get:function(){return t},set:function(a){return a&&(t=o.toChecksumAddress(m.inputAddressFormatter(a))),e.Contract.defaultAccount=t,e.personal.defaultAccount=t,k.forEach(function(e){e.defaultAccount=t}),a},enumerable:!0}),Object.defineProperty(this,"defaultBlock",{get:function(){return n},set:function(a){return n=a,e.Contract.defaultBlock=n,e.personal.defaultBlock=n,k.forEach(function(e){e.defaultBlock=n}),a},enumerable:!0}),this.clearSubscriptions=e._requestManager.clearSubscriptions,this.net=new d(this.currentProvider),this.net.getNetworkType=h.bind(this),this.accounts=new l(this.currentProvider),this.personal=new s(this.currentProvider),this.personal.defaultAccount=this.defaultAccount;var A=function(){b.apply(this,arguments)};A.setProvider=function(){b.setProvider.apply(this,arguments)},(A.prototype=Object.create(b.prototype)).constructor=A,this.Contract=A,this.Contract.defaultAccount=this.defaultAccount,this.Contract.defaultBlock=this.defaultBlock,this.Contract.setProvider(this.currentProvider,this.accounts),this.Iban=u,this.abi=p;var k=[new f({name:"getNodeInfo",call:"web3_clientVersion"}),new f({name:"getProtocolVersion",call:"eth_protocolVersion",params:0}),new f({name:"getCoinbase",call:"eth_coinbase",params:0}),new f({name:"isMining",call:"eth_mining",params:0}),new f({name:"getHashrate",call:"eth_hashrate",params:0,outputFormatter:o.hexToNumber}),new f({name:"isSyncing",call:"eth_syncing",params:0,outputFormatter:m.outputSyncingFormatter}),new f({name:"getGasPrice",call:"eth_gasPrice",params:0,outputFormatter:m.outputBigNumberFormatter}),new f({name:"getAccounts",call:"eth_accounts",params:0,outputFormatter:o.toChecksumAddress}),new f({name:"getBlockNumber",call:"eth_blockNumber",params:0,outputFormatter:o.hexToNumber}),new f({name:"getBalance",call:"eth_getBalance",params:2,inputFormatter:[m.inputAddressFormatter,m.inputDefaultBlockNumberFormatter],outputFormatter:m.outputBigNumberFormatter}),new f({name:"getStorageAt",call:"eth_getStorageAt",params:3,inputFormatter:[m.inputAddressFormatter,o.numberToHex,m.inputDefaultBlockNumberFormatter]}),new f({name:"getCode",call:"eth_getCode",params:2,inputFormatter:[m.inputAddressFormatter,m.inputDefaultBlockNumberFormatter]}),new f({name:"getBlock",call:g,params:2,inputFormatter:[m.inputBlockNumberFormatter,function(e){return!!e}],outputFormatter:m.outputBlockFormatter}),new f({name:"getUncle",call:y,params:2,inputFormatter:[m.inputBlockNumberFormatter,o.numberToHex],outputFormatter:m.outputBlockFormatter}),new f({name:"getBlockTransactionCount",call:_,params:1,inputFormatter:[m.inputBlockNumberFormatter],outputFormatter:o.hexToNumber}),new f({name:"getBlockUncleCount",call:w,params:1,inputFormatter:[m.inputBlockNumberFormatter],outputFormatter:o.hexToNumber}),new f({name:"getTransaction",call:"eth_getTransactionByHash",params:1,inputFormatter:[null],outputFormatter:m.outputTransactionFormatter}),new f({name:"getTransactionFromBlock",call:v,params:2,inputFormatter:[m.inputBlockNumberFormatter,o.numberToHex],outputFormatter:m.outputTransactionFormatter}),new f({name:"getTransactionReceipt",call:"eth_getTransactionReceipt",params:1,inputFormatter:[null],outputFormatter:m.outputTransactionReceiptFormatter}),new f({name:"getTransactionCount",call:"eth_getTransactionCount",params:2,inputFormatter:[m.inputAddressFormatter,m.inputDefaultBlockNumberFormatter],outputFormatter:o.hexToNumber}),new f({name:"sendSignedTransaction",call:"eth_sendRawTransaction",params:1,inputFormatter:[null]}),new f({name:"signTransaction",call:"eth_signTransaction",params:1,inputFormatter:[m.inputTransactionFormatter]}),new f({name:"sendTransaction",call:"eth_sendTransaction",params:1,inputFormatter:[m.inputTransactionFormatter]}),new f({name:"sign",call:"eth_sign",params:2,inputFormatter:[m.inputSignFormatter,m.inputAddressFormatter],transformPayload:function(e){return e.params.reverse(),e}}),new f({name:"call",call:"eth_call",params:2,inputFormatter:[m.inputCallFormatter,m.inputDefaultBlockNumberFormatter]}),new f({name:"estimateGas",call:"eth_estimateGas",params:1,inputFormatter:[m.inputCallFormatter],outputFormatter:o.hexToNumber}),new f({name:"getCompilers",call:"eth_getCompilers",params:0}),new f({name:"compile.solidity",call:"eth_compileSolidity",params:1}),new f({name:"compile.lll",call:"eth_compileLLL",params:1}),new f({name:"compile.serpent",call:"eth_compileSerpent",params:1}),new f({name:"submitWork",call:"eth_submitWork",params:3}),new f({name:"getWork",call:"eth_getWork",params:0}),new f({name:"getPastLogs",call:"eth_getLogs",params:1,inputFormatter:[m.inputLogFormatter],outputFormatter:m.outputLogFormatter}),new i({name:"subscribe",type:"eth",subscriptions:{newBlockHeaders:{subscriptionName:"newHeads",params:0,outputFormatter:m.outputBlockFormatter},pendingTransactions:{subscriptionName:"newPendingTransactions",params:0},logs:{params:1,inputFormatter:[m.inputLogFormatter],outputFormatter:m.outputLogFormatter,subscriptionHandler:function(e){e.removed?this.emit("changed",e):this.emit("data",e),r.isFunction(this.callback)&&this.callback(null,e,this)}},syncing:{params:0,outputFormatter:m.outputSyncingFormatter,subscriptionHandler:function(e){var a=this;!0!==this._isSyncing?(this._isSyncing=!0,this.emit("changed",a._isSyncing),r.isFunction(this.callback)&&this.callback(null,a._isSyncing,this),setTimeout(function(){a.emit("data",e),r.isFunction(a.callback)&&a.callback(null,e,a)},0)):(this.emit("data",e),r.isFunction(a.callback)&&this.callback(null,e,this),clearTimeout(this._isSyncingTimeout),this._isSyncingTimeout=setTimeout(function(){e.currentBlock>e.highestBlock-200&&(a._isSyncing=!1,a.emit("changed",a._isSyncing),r.isFunction(a.callback)&&a.callback(null,a._isSyncing,a))},500))}}}})];k.forEach(function(a){a.attachToObject(e),a.setRequestManager(e._requestManager,e.accounts),a.defaultBlock=e.defaultBlock,a.defaultAccount=e.defaultAccount})};c.addProviders(A),e.exports=A},function(e,a,t){"use strict";var r=t(20),c=t(21).errors,n=t(309);function i(e){n.call(this),this.id=null,this.callback=null,this.arguments=null,this._reconnectIntervalId=null,this.options={subscription:e.subscription,type:e.type,requestManager:e.requestManager}}i.prototype=Object.create(n.prototype),i.prototype.constructor=i,i.prototype._extractCallback=function(e){if(r.isFunction(e[e.length-1]))return e.pop()},i.prototype._validateArgs=function(e){var a=this.options.subscription;if(a||(a={}),a.params||(a.params=0),e.length!==a.params)throw c.InvalidNumberOfParams(e.length,a.params+1,e[0])},i.prototype._formatInput=function(e){var a=this.options.subscription;return a&&a.inputFormatter?a.inputFormatter.map(function(a,t){return a?a(e[t]):e[t]}):e},i.prototype._formatOutput=function(e){var a=this.options.subscription;return a&&a.outputFormatter&&e?a.outputFormatter(e):e},i.prototype._toPayload=function(e){var a=[];if(this.callback=this._extractCallback(e),this.subscriptionMethod||(this.subscriptionMethod=e.shift(),this.options.subscription.subscriptionName&&(this.subscriptionMethod=this.options.subscription.subscriptionName)),this.arguments||(this.arguments=this._formatInput(e),this._validateArgs(this.arguments),e=[]),a.push(this.subscriptionMethod),a=a.concat(this.arguments),e.length)throw new Error("Only a callback is allowed as parameter on an already instantiated subscription.");return{method:this.options.type+"_subscribe",params:a}},i.prototype.unsubscribe=function(e){this.options.requestManager.removeSubscription(this.id,e),this.id=null,this.removeAllListeners(),clearInterval(this._reconnectIntervalId)},i.prototype.subscribe=function(){var e=this,a=Array.prototype.slice.call(arguments),t=this._toPayload(a);if(!t)return this;if(!this.options.requestManager.provider){var c=new Error("No provider set.");return this.callback(c,null,this),this.emit("error",c),this}if(!this.options.requestManager.provider.on){var n=new Error("The current provider doesn't support subscriptions: "+this.options.requestManager.provider.constructor.name);return this.callback(n,null,this),this.emit("error",n),this}return this.id&&this.unsubscribe(),this.options.params=t.params[1],"logs"===t.params[0]&&r.isObject(t.params[1])&&t.params[1].hasOwnProperty("fromBlock")&&isFinite(t.params[1].fromBlock)&&this.options.requestManager.send({method:"eth_getLogs",params:[t.params[1]]},function(a,t){a?(e.callback(a,null,e),e.emit("error",a)):t.forEach(function(a){var t=e._formatOutput(a);e.callback(null,t,e),e.emit("data",t)})}),"object"==typeof t.params[1]&&delete t.params[1].fromBlock,this.options.requestManager.send(t,function(a,c){!a&&c?(e.id=c,e.options.requestManager.addSubscription(e.id,t.params[0],e.options.type,function(a,t){a?(e.options.requestManager.removeSubscription(e.id),e.options.requestManager.provider.once&&(e._reconnectIntervalId=setInterval(function(){e.options.requestManager.provider.reconnect&&e.options.requestManager.provider.reconnect()},500),e.options.requestManager.provider.once("connect",function(){clearInterval(e._reconnectIntervalId),e.subscribe(e.callback)})),e.emit("error",a),r.isFunction(e.callback)&&e.callback(a,null,e)):(r.isArray(t)||(t=[t]),t.forEach(function(a){var t=e._formatOutput(a);if(r.isFunction(e.options.subscription.subscriptionHandler))return e.options.subscription.subscriptionHandler.call(e,t);e.emit("data",t),r.isFunction(e.callback)&&e.callback(null,t,e)}))})):r.isFunction(e.callback)?(e.callback(a,null,e),e.emit("error",a)):e.emit("error",a)}),this},e.exports=i},function(e,a){function t(e){var a=new Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}t.keys=function(){return[]},t.resolve=t,e.exports=t,t.id=785},function(e,a,t){"use strict";var r=null;e.exports=function(e,a){return function(t,c){t=t||null;var n=!1!==(c=c||{}).global;if(null===r&&n&&(r=e["@@any-promise/REGISTRATION"]||null),null!==r&&null!==t&&r.implementation!==t)throw new Error('any-promise already defined as "'+r.implementation+'".  You can only register an implementation before the first  call to require("any-promise") and an implementation cannot be changed');return null===r&&(r=null!==t&&void 0!==c.Promise?{Promise:c.Promise,implementation:t}:a(t),n&&(e["@@any-promise/REGISTRATION"]=r)),r}}},function(e,a,t){"use strict";function r(e){var a=null;if(function(e){if(e)return"global.Promise"===e;if(void 0!==global.Promise){var a=/v(\d+)\.(\d+)\.(\d+)/.exec(process.version);return!(a&&0==+a[1]&&+a[2]<12)}return!1}(e))a={Promise:global.Promise,implementation:"global.Promise"};else if(e){var c=t(785)(e);a={Promise:c.Promise||c,implementation:e}}else a=function(){for(var e=["es6-promise","promise","native-promise-only","bluebird","rsvp","when","q","pinkie","lie","vow"],a=0,t=e.length;a<t;a++)try{return r(e[a])}catch(e){}return null}();if(null===a)throw new Error('Cannot find any-promise implementation nor global.Promise. You must install polyfill or call require("any-promise/register") with your preferred implementation, e.g. require("any-promise/register/bluebird") on application load prior to any require("any-promise").');return a}e.exports=t(786)(global,r)},function(e,a,t){"use strict";var r=t(21).formatters,c=t(50),n=t(27);e.exports=function(e){var a=function(a){var t;return a.property?(e[a.property]||(e[a.property]={}),t=e[a.property]):t=e,a.methods&&a.methods.forEach(function(a){a instanceof c||(a=new c(a)),a.attachToObject(t),a.setRequestManager(e._requestManager)}),e};return a.formatters=r,a.utils=n,a.Method=c,a}},function(e,a,t){var r=a.http=t(43),c=a.https=t(59),n=t(32);function i(e){return"string"==typeof e&&(e=n.parse(e)),"https:"===e.protocol?c:r}a.get=function(e,a){return i(e).get(e,a)},a.request=function(e,a){return i(e).request(e,a)},a.getModule=i},function(e,a,t){e.exports=function(){var e=i(function(e,a){var t=a.length;return i(function(r){for(var c=0;c<r.length;c++)a[t+c]=r[c];return a.length=t+r.length,e.apply(this,a)})});i(function(e){var a=_(e);function t(e,a){return[n(e,a)]}return i(function(e){return x(t,e,a)[0]})});function a(e,a){return function(){return e.call(this,a.apply(this,arguments))}}function r(e){return function(a){return a[e]}}var c=i(function(e){return i(function(a){for(var t,r=0;r<u(e);r++)if(t=n(a,e[r]))return t})});function n(e,a){return a.apply(void 0,e)}function i(e){var a=e.length-1,t=Array.prototype.slice;if(0==a)return function(){return e.call(this,t.call(arguments))};if(1==a)return function(){return e.call(this,arguments[0],t.call(arguments,1))};var r=Array(e.length);return function(){for(var c=0;c<a;c++)r[c]=arguments[c];return r[a]=t.call(arguments,a),e.apply(this,r)}}function f(e,a){return function(t){return e(t)&&a(t)}}function o(){}function d(){return!0}function s(e){return function(){return e}}function b(e,a){return a&&a.constructor===e}var u=r("length"),l=e(b,String);function p(e){return void 0!==e}function h(e,a){return a instanceof Object&&function e(a,t){return!t||a(v(t))&&e(a,y(t))}(function(e){return e in a},e)}function m(e,a){return[e,a]}var g=null,v=r(0),y=r(1);function _(e){return S(e.reduce(function(e){return function(a,t){return e(t,a)}}(m),g))}var w=i(_);function A(e){return x(function(e,a){return e.unshift(a),e},[],e)}function k(e,a){return a?m(e(v(a)),k(e,y(a))):g}function x(e,a,t){return t?e(x(e,a,y(t)),v(t)):a}function E(e,a,t){return function e(t,r){return t?a(v(t))?(r(v(t)),y(t)):m(v(t),e(y(t),r)):g}(e,t||o)}function S(e){return function e(a,t){return a?e(y(a),m(v(a),t)):t}(e,g)}function T(e){"use strict";var a,t,r,c=e(Z).emit,n=e(J).emit,i=e(X).emit,f=e(H).emit,o=65536,d=/[\\"\n]/g,s=0,b=s++,u=s++,l=s++,p=s++,h=s++,m=s++,g=s++,v=s++,y=s++,_=s++,w=s++,A=s++,k=s++,x=s++,E=s++,S=s++,T=s++,j=s++,C=s++,R=s++,O=s,B=o,M=void 0,N="",I=!1,P=!1,F=b,L=[],D=null,z=0,q=0,U=0,V=0,G=1;function W(e){void 0!==M&&(n(M),i(),M=void 0),a=Error(e+"\nLn: "+G+"\nCol: "+V+"\nChr: "+t),f($(void 0,void 0,a))}function Q(e){return"\r"==e||"\n"==e||" "==e||"\t"==e}e(Y).on(function(e){if(a)return;if(P)return W("Cannot write after close");var f=0;t=e[0];for(;t&&(r=t,t=e[f++]);)switch(U++,"\n"==t?(G++,V=0):V++,F){case b:if("{"===t)F=l;else if("["===t)F=h;else if(!Q(t))return W("Non-whitespace before {[.");continue;case v:case l:if(Q(t))continue;if(F===v)L.push(y);else{if("}"===t){n({}),i(),F=L.pop()||u;continue}L.push(p)}if('"'!==t)return W('Malformed object key should start with " ');F=g;continue;case y:case p:if(Q(t))continue;if(":"===t)F===p?(L.push(p),void 0!==M&&(n({}),c(M),M=void 0),q++):void 0!==M&&(c(M),M=void 0),F=u;else if("}"===t)void 0!==M&&(n(M),i(),M=void 0),i(),q--,F=L.pop()||u;else{if(","!==t)return W("Bad object");F===p&&L.push(p),void 0!==M&&(n(M),i(),M=void 0),F=v}continue;case h:case u:if(Q(t))continue;if(F===h){if(n([]),q++,F=u,"]"===t){i(),q--,F=L.pop()||u;continue}L.push(m)}if('"'===t)F=g;else if("{"===t)F=l;else if("["===t)F=h;else if("t"===t)F=_;else if("f"===t)F=k;else if("n"===t)F=T;else if("-"===t)N+=t;else if("0"===t)N+=t,F=O;else{if(-1==="123456789".indexOf(t))return W("Bad value");N+=t,F=O}continue;case m:if(","===t)L.push(m),void 0!==M&&(n(M),i(),M=void 0),F=u;else{if("]"!==t){if(Q(t))continue;return W("Bad array")}void 0!==M&&(n(M),i(),M=void 0),i(),q--,F=L.pop()||u}continue;case g:void 0===M&&(M="");var s=f-1;e:for(;;){for(;z>0;)if(D+=t,t=e.charAt(f++),4===z?(M+=String.fromCharCode(parseInt(D,16)),z=0,s=f-1):z++,!t)break e;if('"'===t&&!I){F=L.pop()||u,M+=e.substring(s,f-1);break}if(!("\\"!==t||I||(I=!0,M+=e.substring(s,f-1),t=e.charAt(f++))))break;if(I){if(I=!1,"n"===t?M+="\n":"r"===t?M+="\r":"t"===t?M+="\t":"f"===t?M+="\f":"b"===t?M+="\b":"u"===t?(z=1,D=""):M+=t,t=e.charAt(f++),s=f-1,t)continue;break}d.lastIndex=f;var H=d.exec(e);if(!H){f=e.length+1,M+=e.substring(s,f-1);break}if(f=H.index+1,!(t=e.charAt(H.index))){M+=e.substring(s,f-1);break}}continue;case _:if(!t)continue;if("r"!==t)return W("Invalid true started with t"+t);F=w;continue;case w:if(!t)continue;if("u"!==t)return W("Invalid true started with tr"+t);F=A;continue;case A:if(!t)continue;if("e"!==t)return W("Invalid true started with tru"+t);n(!0),i(),F=L.pop()||u;continue;case k:if(!t)continue;if("a"!==t)return W("Invalid false started with f"+t);F=x;continue;case x:if(!t)continue;if("l"!==t)return W("Invalid false started with fa"+t);F=E;continue;case E:if(!t)continue;if("s"!==t)return W("Invalid false started with fal"+t);F=S;continue;case S:if(!t)continue;if("e"!==t)return W("Invalid false started with fals"+t);n(!1),i(),F=L.pop()||u;continue;case T:if(!t)continue;if("u"!==t)return W("Invalid null started with n"+t);F=j;continue;case j:if(!t)continue;if("l"!==t)return W("Invalid null started with nu"+t);F=C;continue;case C:if(!t)continue;if("l"!==t)return W("Invalid null started with nul"+t);n(null),i(),F=L.pop()||u;continue;case R:if("."!==t)return W("Leading zero not followed by .");N+=t,F=O;continue;case O:if(-1!=="0123456789".indexOf(t))N+=t;else if("."===t){if(-1!==N.indexOf("."))return W("Invalid number has two dots");N+=t}else if("e"===t||"E"===t){if(-1!==N.indexOf("e")||-1!==N.indexOf("E"))return W("Invalid number has two exponential");N+=t}else if("+"===t||"-"===t){if("e"!==r&&"E"!==r)return W("Invalid symbol in number");N+=t}else N&&(n(parseFloat(N)),i(),N=""),f--,F=L.pop()||u;continue;default:return W("Unknown state: "+F)}U>=B&&function(){var e=0;void 0!==M&&M.length>o&&(W("Max buffer length exceeded: textNode"),e=Math.max(e,M.length)),N.length>o&&(W("Max buffer length exceeded: numberNode"),e=Math.max(e,N.length)),B=o-e+U}()}),e(K).on(function(){if(F==b)return n({}),i(),void(P=!0);F===u&&0===q||W("Unexpected end");void 0!==M&&(n(M),i(),M=void 0);P=!0})}var j=s(t(789));function C(e,a,r,c,n,i){"use strict";var f=!1;function o(a){a.on("data",function(a){f||e(Y).emit(a.toString())}),a.on("end",function(){f||e(K).emit()})}l(c)?function(){if(!c.match(/https?:\/\//))throw new Error('Supported protocols when passing a URL into Oboe are http and https. If you wish to use another protocol, please pass a ReadableStream (http://nodejs.org/api/stream.html#stream_class_stream_readable) like oboe(fs.createReadStream("my_file")). I was given the URL: '+c);var d=function(e){var c=t(32).parse(e);return a.request({hostname:c.hostname,port:c.port,path:c.path,method:r,headers:i,protocol:c.protocol})}(c);d.on("response",function(a){var t=a.statusCode,r=2==String(t)[0];e(W).emit(a.statusCode,a.headers),r?o(a):function(e,a){var t="";e.on("data",function(e){t+=e.toString()}),e.on("end",function(){a(t)})}(a,function(a){e(H).emit($(t,a))})}),d.on("error",function(a){e(H).emit($(void 0,void 0,a))}),e(Q).on(function(){f=!0,d.abort()}),n&&d.write(n),d.end()}():o(c)}var R=function(){var e=i(function(e){return e.unshift(/^/),function(e){return e.exec.bind(e)}(RegExp(e.map(r("source")).join("")))}),a=/(\$?)/,t=/(?:{([\w ]*?)})?/,n=e(a,/([\w-_]+|\*)/,t),f=e(a,/\["([^"]+)"\]/,t),o=e(a,/\[(\d+|\*)\]/,t),d=e(a,/()/,/{([\w ]*?)}/),s=e(/\.\./),b=e(/\./),u=e(a,/!/),l=e(/$/);return function(e){return e(c(n,f,o,d),s,b,u,l)}}();function O(e,a){return{key:e,node:a}}var B=r("key"),M=r("node"),N={};function I(e){var a=e(D).emit,t=e(z).emit,r=e(G).emit,c=e(V).emit;function n(e,a,t){M(v(e))[a]=t}function i(e,t,r){e&&n(e,t,r);var c=m(O(t,r),e);return a(c),c}var f={};return f[J]=function(e,a){if(!e)return r(a),i(e,N,a);var t=function(e,a){var t=M(v(e));return b(Array,t)?i(e,u(t),a):e}(e,a),c=y(t),f=B(v(t));return n(c,f,a),m(O(f,a),c)},f[X]=function(e){return t(e),y(e)||c(M(v(e)))},f[Z]=i,f}var P=R(function(t,r,n,i,o){var s=1,b=2,l=3,p=a(B,v),m=a(M,v);function g(e,a){return!!a[s]?f(e,v):e}function A(e){if(e==d)return d;return f(function(e){return p(e)!=N},a(e,y))}function k(){return function(e){return p(e)==N}}function E(e,a,t,r,c){var n=e(t);if(n){var i=function(e,a,t){return x(function(e,a){return a(e,t)},a,e)}(a,r,n);return c(t.substr(u(n[0])),i)}}function S(a,t){return e(E,a,t)}var T=c(S(t,w(g,function(t,r){var c=r[l];return c?f(a(e(h,_(c.split(/\W+/))),m),t):t},function(e,a){var t=a[b];return f(t&&"*"!=t?function(e){return p(e)==t}:d,e)},A)),S(r,w(function(e){if(e==d)return d;var a=k(),t=e,r=A(function(e){return n(e)}),n=c(a,t,r);return n})),S(n,w()),S(i,w(g,k)),S(o,w(function(e){return function(a){var t=e(a);return!0===t?v(a):t}})),function(e){throw Error('"'+e+'" could not be tokenised')});function j(e,a){return a}function C(e,a){return T(e,a,e?C:j)}return function(e){try{return C(e,d)}catch(a){throw Error('Could not compile "'+e+'" because '+a.message)}}});function F(e,a,t){var r,c;function n(e){return function(a){return a.id==e}}return{on:function(t,n){var i={listener:t,id:n||t};return a&&a.emit(e,t,i.id),r=m(i,r),c=m(t,c),this},emit:function(){!function e(a,t){a&&(v(a).apply(null,t),e(y(a),t))}(c,arguments)},un:function(a){var i;r=E(r,n(a),function(e){i=e}),i&&(c=E(c,function(e){return e==i.listener}),t&&t.emit(e,i.listener,i.id))},listeners:function(){return c},hasListener:function(e){return p(function e(a,t){return t&&(a(v(t))?v(t):e(a,y(t)))}(e?n(e):d,r))}}}var L=1,D=L++,z=L++,q=L++,U=L++,H="fail",V=L++,G=L++,W="start",Y="data",K="end",Q=L++,Z=L++,J=L++,X=L++;function $(e,a,t){try{var r=JSON.parse(a)}catch(e){}return{statusCode:e,body:a,jsonBody:r,thrown:t}}function ee(e,a){var t={node:e(z),path:e(D)};function r(a,t,r){var c=e(a).emit;t.on(function(e){var a=r(e);!1!==a&&function(e,a,t){var r=S(t);e(a,A(y(k(B,r))),A(k(M,r)))}(c,M(a),e)},a),e("removeListener").on(function(r){r==a&&(e(r).listeners()||t.un(a))})}e("newListener").on(function(e){var c=/(node|path):(.*)/.exec(e);if(c){var n=t[c[1]];n.hasListener(e)||r(e,n,a(c[2]))}})}function ae(a,t){var r,c=/^(node|path):./,f=a(V),d=a(U).emit,b=a(q).emit,u=i(function(e,t){if(r[e])n(t,r[e]);else{var i=a(e),f=t[0];c.test(e)?h(i,f):i.on(f)}return r});function h(e,a,t){t=t||a;var c=m(a);return e.on(function(){var a=!1;r.forget=function(){a=!0},n(arguments,c),delete r.forget,a&&e.un(t)},t),r}function m(e){return function(){try{return e.apply(r,arguments)}catch(e){setTimeout(function(){throw e})}}}function g(e,t,r){var c;c="node"==e?function(e){return function(){var a=e.apply(this,arguments);p(a)&&(a==ce.drop?d():b(a))}}(r):r,h(function(e,t){return a(e+":"+t)}(e,t),c,r)}function v(e,a,t){return l(a)?g(e,a,t):function(e,a){for(var t in a)g(e,t,a[t])}(e,a),r}return a(G).on(function(e){r.root=s(e)}),a(W).on(function(e,a){r.header=function(e){return e?a[e]:a}}),r={on:u,addListener:u,removeListener:function(e,t,c){if("done"==e)f.un(t);else if("node"==e||"path"==e)a.un(e+":"+t,c);else{var n=t;a(e).un(n)}return r},emit:a.emit,node:e(v,"node"),path:e(v,"path"),done:e(h,f),start:e(function(e,t){return a(e).on(m(t),t),r},W),fail:a(H).on,abort:a(Q).emit,header:o,root:o,source:t}}function te(e,a,t,r,c){var f=function(){var e={},a=r("newListener"),t=r("removeListener");function r(r){return e[r]=F(r,a,t)}function c(a){return e[a]||r(a)}return["emit","on","un"].forEach(function(e){c[e]=i(function(a,t){n(t,c(a)[e])})}),c}();return a&&C(f,j(),e,a,t,r),T(f),function(e,a){"use strict";var t,r={};function c(e){return function(a){t=e(t,a)}}for(var n in a)e(n).on(c(a[n]),r);e(q).on(function(e){var a=v(t),r=B(a),c=y(t);c&&(M(v(c))[r]=e)}),e(U).on(function(){var e=v(t),a=B(e),r=y(t);r&&delete M(v(r))[a]}),e(Q).on(function(){for(var t in a)e(t).un(r)})}(f,I(f)),ee(f,P),ae(f,a)}function re(e,a,t,r,c,n,i){return c=c?JSON.parse(JSON.stringify(c)):{},r?l(r)||(r=JSON.stringify(r),c["Content-Type"]=c["Content-Type"]||"application/json"):r=null,e(t||"GET",function(e,a){return!1===a&&(-1==e.indexOf("?")?e+="?":e+="&",e+="_="+(new Date).getTime()),e}(a,i),r,c,n||!1)}function ce(a){var t=w("resume","pause","pipe"),r=e(h,t);return a?r(a)||l(a)?re(te,a):re(te,a.url,a.method,a.body,a.headers,a.withCredentials,a.cached):te()}return ce.drop=function(){return ce.drop},ce}()},function(e,a,t){"use strict";var r=t(20),c=t(21).errors,n=t(790),i=function(e,a){var t=this;this.responseCallbacks={},this.notificationCallbacks=[],this.path=e,this.connection=a.connect({path:this.path}),this.addDefaultEvents();var c=function(e){var a=null;r.isArray(e)?e.forEach(function(e){t.responseCallbacks[e.id]&&(a=e.id)}):a=e.id,a||-1===e.method.indexOf("_subscription")?t.responseCallbacks[a]&&(t.responseCallbacks[a](null,e),delete t.responseCallbacks[a]):t.notificationCallbacks.forEach(function(a){r.isFunction(a)&&a(e)})};"Socket"===a.constructor.name?n(this.connection).done(c):this.connection.on("data",function(e){t._parseResponse(e.toString()).forEach(c)})};i.prototype.addDefaultEvents=function(){var e=this;this.connection.on("connect",function(){}),this.connection.on("error",function(){e._timeout()}),this.connection.on("end",function(){e._timeout()}),this.connection.on("timeout",function(){e._timeout()})},i.prototype._parseResponse=function(e){var a=this,t=[];return e.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|").forEach(function(e){a.lastChunk&&(e=a.lastChunk+e);var r=null;try{r=JSON.parse(e)}catch(t){return a.lastChunk=e,clearTimeout(a.lastChunkTimeout),void(a.lastChunkTimeout=setTimeout(function(){throw a._timeout(),c.InvalidResponse(e)},15e3))}clearTimeout(a.lastChunkTimeout),a.lastChunk=null,r&&t.push(r)}),t},i.prototype._addResponseCallback=function(e,a){var t=e.id||e[0].id,r=e.method||e[0].method;this.responseCallbacks[t]=a,this.responseCallbacks[t].method=r},i.prototype._timeout=function(){for(var e in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(e)&&(this.responseCallbacks[e](c.InvalidConnection("on IPC")),delete this.responseCallbacks[e])},i.prototype.reconnect=function(){this.connection.connect({path:this.path})},i.prototype.send=function(e,a){this.connection.writable||this.connection.connect({path:this.path}),this.connection.write(JSON.stringify(e)),this._addResponseCallback(e,a)},i.prototype.on=function(e,a){if("function"!=typeof a)throw new Error("The second parameter callback must be a function.");switch(e){case"data":this.notificationCallbacks.push(a);break;default:this.connection.on(e,a)}},i.prototype.once=function(e,a){if("function"!=typeof a)throw new Error("The second parameter callback must be a function.");this.connection.once(e,a)},i.prototype.removeListener=function(e,a){var t=this;switch(e){case"data":this.notificationCallbacks.forEach(function(e,r){e===a&&t.notificationCallbacks.splice(r,1)});break;default:this.connection.removeListener(e,a)}},i.prototype.removeAllListeners=function(e){switch(e){case"data":this.notificationCallbacks=[];break;default:this.connection.removeAllListeners(e)}},i.prototype.reset=function(){this._timeout(),this.notificationCallbacks=[],this.connection.removeAllListeners("error"),this.connection.removeAllListeners("end"),this.connection.removeAllListeners("timeout"),this.addDefaultEvents()},e.exports=i},function(e,a,t){(function(){var a,r,c,n,i,f,o,d,s,b,u,l,p=function(e,a){for(var t in a)h.call(a,t)&&(e[t]=a[t]);function r(){this.constructor=e}return r.prototype=a.prototype,e.prototype=new r,e.__super__=a.prototype,e},h={}.hasOwnProperty;o=function(){function e(){this.onloadstart=null,this.onprogress=null,this.onabort=null,this.onerror=null,this.onload=null,this.ontimeout=null,this.onloadend=null,this._listeners={}}return e.prototype.onloadstart=null,e.prototype.onprogress=null,e.prototype.onabort=null,e.prototype.onerror=null,e.prototype.onload=null,e.prototype.ontimeout=null,e.prototype.onloadend=null,e.prototype.addEventListener=function(e,a){var t;e=e.toLowerCase(),(t=this._listeners)[e]||(t[e]=[]),this._listeners[e].push(a)},e.prototype.removeEventListener=function(e,a){var t;e=e.toLowerCase(),this._listeners[e]&&-1!==(t=this._listeners[e].indexOf(a))&&this._listeners[e].splice(t,1)},e.prototype.dispatchEvent=function(e){var a,t,r,c,n;if(e.currentTarget=e.target=this,a=e.type,n=this._listeners[a])for(t=0,r=n.length;t<r;t++)(c=n[t]).call(this,e);(c=this["on"+a])&&c.call(this,e)},e}(),s=t(43),b=t(59),u=t(84),l=t(32),f=function(e){function t(e){t.__super__.constructor.call(this),this.onreadystatechange=null,this._anonymous=e&&e.anon,this.readyState=t.UNSENT,this.response=null,this.responseText="",this.responseType="",this.responseURL="",this.status=0,this.statusText="",this.timeout=0,this.upload=new d(this),this._method=null,this._url=null,this._sync=!1,this._headers=null,this._loweredHeaders=null,this._mimeOverride=null,this._request=null,this._response=null,this._responseParts=null,this._responseHeaders=null,this._aborting=null,this._error=null,this._loadedBytes=0,this._totalBytes=0,this._lengthComputable=!1}return p(t,o),t.prototype.onreadystatechange=null,t.prototype.readyState=null,t.prototype.response=null,t.prototype.responseText=null,t.prototype.responseType=null,t.prototype.status=null,t.prototype.timeout=null,t.prototype.upload=null,t.prototype.open=function(e,a,r,c,i){var f;if((e=e.toUpperCase())in this._restrictedMethods)throw new n("HTTP method "+e+" is not allowed in XHR");switch(f=this._parseUrl(a),void 0===r&&(r=!0),this.readyState){case t.UNSENT:case t.OPENED:case t.DONE:break;case t.HEADERS_RECEIVED:case t.LOADING:}this._method=e,this._url=f,this._sync=!r,this._headers={},this._loweredHeaders={},this._mimeOverride=null,this._setReadyState(t.OPENED),this._request=null,this._response=null,this.status=0,this.statusText="",this._responseParts=[],this._responseHeaders=null,this._loadedBytes=0,this._totalBytes=0,this._lengthComputable=!1},t.prototype.setRequestHeader=function(e,r){var c;if(this.readyState!==t.OPENED)throw new a("XHR readyState must be OPENED");c=e.toLowerCase(),this._restrictedHeaders[c]||/^sec\-/.test(c)||/^proxy-/.test(c)?console.warn('Refused to set unsafe header "'+e+'"'):(r=r.toString(),c in this._loweredHeaders?(e=this._loweredHeaders[c],this._headers[e]=this._headers[e]+", "+r):(this._loweredHeaders[c]=e,this._headers[e]=r))},t.prototype.send=function(e){if(this.readyState!==t.OPENED)throw new a("XHR readyState must be OPENED");if(this._request)throw new a("send() already called");switch(this._url.protocol){case"file:":this._sendFile(e);break;case"http:":case"https:":this._sendHttp(e);break;default:throw new r("Unsupported protocol "+this._url.protocol)}},t.prototype.abort=function(){this._request&&(this._request.abort(),this._setError(),this._dispatchProgress("abort"),this._dispatchProgress("loadend"))},t.prototype.getResponseHeader=function(e){var a;return this._responseHeaders&&(a=e.toLowerCase())in this._responseHeaders?this._responseHeaders[a]:null},t.prototype.getAllResponseHeaders=function(){var e,a;return this._responseHeaders?function(){var t,r;for(e in r=[],t=this._responseHeaders)a=t[e],r.push(e+": "+a);return r}.call(this).join("\r\n"):""},t.prototype.overrideMimeType=function(e){if(this.readyState===t.LOADING||this.readyState===t.DONE)throw new a("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=e.toLowerCase()},t.prototype.nodejsSet=function(e){var a;if("httpAgent"in e&&(this.nodejsHttpAgent=e.httpAgent),"httpsAgent"in e&&(this.nodejsHttpsAgent=e.httpsAgent),"baseUrl"in e){if(null!==(a=e.baseUrl)&&!l.parse(a,!1,!0).protocol)throw new i("baseUrl must be an absolute URL");this.nodejsBaseUrl=a}},t.nodejsSet=function(e){t.prototype.nodejsSet(e)},t.prototype.UNSENT=0,t.UNSENT=0,t.prototype.OPENED=1,t.OPENED=1,t.prototype.HEADERS_RECEIVED=2,t.HEADERS_RECEIVED=2,t.prototype.LOADING=3,t.LOADING=3,t.prototype.DONE=4,t.DONE=4,t.prototype.nodejsHttpAgent=s.globalAgent,t.prototype.nodejsHttpsAgent=b.globalAgent,t.prototype.nodejsBaseUrl=null,t.prototype._restrictedMethods={CONNECT:!0,TRACE:!0,TRACK:!0},t.prototype._restrictedHeaders={"accept-charset":!0,"accept-encoding":!0,"access-control-request-headers":!0,"access-control-request-method":!0,connection:!0,"content-length":!0,cookie:!0,cookie2:!0,date:!0,dnt:!0,expect:!0,host:!0,"keep-alive":!0,origin:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,via:!0},t.prototype._privateHeaders={"set-cookie":!0,"set-cookie2":!0},t.prototype._userAgent="Mozilla/5.0 ("+u.type()+" "+u.arch()+") node.js/"+process.versions.node+" v8/"+process.versions.v8,t.prototype._setReadyState=function(e){var a;this.readyState=e,a=new c("readystatechange"),this.dispatchEvent(a)},t.prototype._sendFile=function(){if("GET"!==this._url.method)throw new r("The file protocol only supports GET");throw new Error("Protocol file: not implemented")},t.prototype._sendHttp=function(e){if(this._sync)throw new Error("Synchronous XHR processing not implemented");null==e||"GET"!==this._method&&"HEAD"!==this._method?e||(e=""):(console.warn("Discarding entity body for "+this._method+" requests"),e=null),this.upload._setData(e),this._finalizeHeaders(),this._sendHxxpRequest()},t.prototype._sendHxxpRequest=function(){var e,a,t;"http:"===this._url.protocol?(a=s,e=this.nodejsHttpAgent):(a=b,e=this.nodejsHttpsAgent),t=a.request({hostname:this._url.hostname,port:this._url.port,path:this._url.path,auth:this._url.auth,method:this._method,headers:this._headers,agent:e}),this._request=t,this.timeout&&t.setTimeout(this.timeout,function(e){return function(){return e._onHttpTimeout(t)}}(this)),t.on("response",function(e){return function(a){return e._onHttpResponse(t,a)}}(this)),t.on("error",function(e){return function(a){return e._onHttpRequestError(t,a)}}(this)),this.upload._startUpload(t),this._request===t&&this._dispatchProgress("loadstart")},t.prototype._finalizeHeaders=function(){this._headers.Connection="keep-alive",this._headers.Host=this._url.host,this._anonymous&&(this._headers.Referer="about:blank"),this._headers["User-Agent"]=this._userAgent,this.upload._finalizeHeaders(this._headers,this._loweredHeaders)},t.prototype._onHttpResponse=function(e,a){var r;if(this._request===e){switch(a.statusCode){case 301:case 302:case 303:case 307:case 308:return this._url=this._parseUrl(a.headers.location),this._method="GET","content-type"in this._loweredHeaders&&(delete this._headers[this._loweredHeaders["content-type"]],delete this._loweredHeaders["content-type"]),"Content-Type"in this._headers&&delete this._headers["Content-Type"],delete this._headers["Content-Length"],this.upload._reset(),this._finalizeHeaders(),void this._sendHxxpRequest()}return this._response=a,this._response.on("data",function(e){return function(t){return e._onHttpResponseData(a,t)}}(this)),this._response.on("end",function(e){return function(){return e._onHttpResponseEnd(a)}}(this)),this._response.on("close",function(e){return function(){return e._onHttpResponseClose(a)}}(this)),this.responseURL=this._url.href.split("#")[0],this.status=this._response.statusCode,this.statusText=s.STATUS_CODES[this.status],this._parseResponseHeaders(a),(r=this._responseHeaders["content-length"])?(this._totalBytes=parseInt(r),this._lengthComputable=!0):this._lengthComputable=!1,this._setReadyState(t.HEADERS_RECEIVED)}},t.prototype._onHttpResponseData=function(e,a){if(this._response===e)return this._responseParts.push(a),this._loadedBytes+=a.length,this.readyState!==t.LOADING&&this._setReadyState(t.LOADING),this._dispatchProgress("progress")},t.prototype._onHttpResponseEnd=function(e){if(this._response===e)return this._parseResponse(),this._request=null,this._response=null,this._setReadyState(t.DONE),this._dispatchProgress("load"),this._dispatchProgress("loadend")},t.prototype._onHttpResponseClose=function(e){var a;if(this._response===e)return a=this._request,this._setError(),a.abort(),this._setReadyState(t.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")},t.prototype._onHttpTimeout=function(e){if(this._request===e)return this._setError(),e.abort(),this._setReadyState(t.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend")},t.prototype._onHttpRequestError=function(e,a){if(this._request===e)return this._setError(),e.abort(),this._setReadyState(t.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")},t.prototype._dispatchProgress=function(e){var a;(a=new c(e)).lengthComputable=this._lengthComputable,a.loaded=this._loadedBytes,a.total=this._totalBytes,this.dispatchEvent(a)},t.prototype._setError=function(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null},t.prototype._parseUrl=function(e){var a,t,r,c,n;return a=null===this.nodejsBaseUrl?e:l.resolve(this.nodejsBaseUrl,e),(n=l.parse(a,!1,!0)).hash=null,n.auth&&(void 0!==c&&null!==c||void 0!==r&&null!==r)&&(-1===(t=n.auth.indexOf(":"))?c||(c=n.auth):(c||(c=n.substring(0,t)),r||(r=n.substring(t+1)))),(c||r)&&(n.auth=c+":"+r),n},t.prototype._parseResponseHeaders=function(e){var a,t,r,c;for(t in this._responseHeaders={},r=e.headers)c=r[t],a=t.toLowerCase(),this._privateHeaders[a]||(null!==this._mimeOverride&&"content-type"===a&&(c=this._mimeOverride),this._responseHeaders[a]=c);null===this._mimeOverride||"content-type"in this._responseHeaders||(this._responseHeaders["content-type"]=this._mimeOverride)},t.prototype._parseResponse=function(){var e,a,t,r,c,n;switch(a=Buffer.concat?Buffer.concat(this._responseParts):this._concatBuffers(this._responseParts),this._responseParts=null,this.responseType){case"text":this._parseTextResponse(a);break;case"json":this.responseText=null;try{this.response=JSON.parse(a.toString("utf-8"))}catch(e){e,this.response=null}break;case"buffer":this.responseText=null,this.response=a;break;case"arraybuffer":for(this.responseText=null,e=new ArrayBuffer(a.length),n=new Uint8Array(e),t=r=0,c=a.length;0<=c?r<c:r>c;t=0<=c?++r:--r)n[t]=a[t];this.response=e;break;default:this._parseTextResponse(a)}},t.prototype._parseTextResponse=function(e){try{this.responseText=e.toString(this._parseResponseEncoding())}catch(a){a,this.responseText=e.toString("binary")}this.response=this.responseText},t.prototype._parseResponseEncoding=function(){var e,a;return null,(e=this._responseHeaders["content-type"])&&(a=/\;\s*charset\=(.*)$/.exec(e))?a[1]:"utf-8"},t.prototype._concatBuffers=function(e){var a,t,r,c,n,i,f;if(0===e.length)return new Buffer(0);if(1===e.length)return e[0];for(i=0,t=0,c=e.length;t<c;t++)i+=(a=e[t]).length;for(f=new Buffer(i),i=0,r=0,n=e.length;r<n;r++)(a=e[r]).copy(f,i),i+=a.length;return f},t}(),e.exports=f,f.XMLHttpRequest=f,n=function(e){function a(){a.__super__.constructor.apply(this,arguments)}return p(a,e),a}(Error),f.SecurityError=n,a=function(e){function a(){a.__super__.constructor.apply(this,arguments)}return p(a,e),a}(Error),a=function(e){function a(){return a.__super__.constructor.apply(this,arguments)}return p(a,e),a}(Error),f.InvalidStateError=a,r=function(e){function a(){a.__super__.constructor.apply(this,arguments)}return p(a,e),a}(Error),f.SyntaxError=i,i=function(e){function a(){a.__super__.constructor.apply(this,arguments)}return p(a,e),a}(Error),c=function(){function e(e){this.type=e,this.target=null,this.currentTarget=null,this.lengthComputable=!1,this.loaded=0,this.total=0}return e.prototype.bubbles=!1,e.prototype.cancelable=!1,e.prototype.target=null,e.prototype.loaded=null,e.prototype.lengthComputable=null,e.prototype.total=null,e}(),f.ProgressEvent=c,d=function(e){function a(e){a.__super__.constructor.call(this),this._request=e,this._reset()}return p(a,o),a.prototype._reset=function(){this._contentType=null,this._body=null},a.prototype._setData=function(e){var a,t,r,c,n,i,f,o;if(void 0!==e&&null!==e)if("string"==typeof e)0!==e.length&&(this._contentType="text/plain;charset=UTF-8"),this._body=new Buffer(e,"utf8");else if(Buffer.isBuffer(e))this._body=e;else if(e instanceof ArrayBuffer){for(a=new Buffer(e.byteLength),o=new Uint8Array(e),t=r=0,i=e.byteLength;0<=i?r<i:r>i;t=0<=i?++r:--r)a[t]=o[t];this._body=a}else{if(!(e.buffer&&e.buffer instanceof ArrayBuffer))throw new Error("Unsupported send() data "+e);for(a=new Buffer(e.byteLength),n=e.byteOffset,o=new Uint8Array(e.buffer),t=c=0,f=e.byteLength;0<=f?c<f:c>f;t=0<=f?++c:--c)a[t]=o[t+n];this._body=a}},a.prototype._finalizeHeaders=function(e,a){this._contentType&&("content-type"in a||(e["Content-Type"]=this._contentType)),this._body&&(e["Content-Length"]=this._body.length.toString())},a.prototype._startUpload=function(e){this._body&&e.write(this._body),e.end()},a}(),f.XMLHttpRequestUpload=d}).call(this)},function(e,a,t){var r=t(21).errors,c=t(792),n=function(e,a,t){this.host=e||"http://localhost:8545",this.timeout=a||0,this.connected=!1,this.headers=t};n.prototype._prepareRequest=function(){var e=new c;return e.open("POST",this.host,!0),e.setRequestHeader("Content-Type","application/json"),this.headers&&this.headers.forEach(function(a){e.setRequestHeader(a.name,a.value)}),e},n.prototype.send=function(e,a){var t=this,c=this._prepareRequest();c.onreadystatechange=function(){if(4===c.readyState&&1!==c.timeout){var e=c.responseText,n=null;try{e=JSON.parse(e)}catch(e){n=r.InvalidResponse(c.responseText)}t.connected=!0,a(n,e)}},c.ontimeout=function(){t.connected=!1,a(r.ConnectionTimeout(this.timeout))};try{c.send(JSON.stringify(e))}catch(e){this.connected=!1,a(r.InvalidConnection(this.host))}},e.exports=n},function(e){e.exports={_from:"websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",_id:"websocket@1.0.26",_inBundle:!1,_integrity:"sha1-RdbukWUIqpEt2mS/9BVbg4q2F5I=",_location:"/ganache-core/web3-providers-ws/websocket",_phantomChildren:{},_requested:{type:"git",raw:"websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",name:"websocket",escapedName:"websocket",rawSpec:"git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",saveSpec:"git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",fetchSpec:"git://github.com/frozeman/WebSocket-Node.git",gitCommittish:"6c72925e3f8aaaea8dc8450f97627e85263999f2"},_requiredBy:["/ganache-core/web3-providers-ws"],_resolved:"git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",_spec:"websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",author:{name:"Brian McKelvey",email:"brian@worlize.com",url:"https://www.worlize.com/"},browser:"lib/browser.js",bugs:{url:"https://github.com/theturtle32/WebSocket-Node/issues"},bundleDependencies:!1,config:{verbose:!1},contributors:[{name:"Iñaki Baz Castillo",email:"ibc@aliax.net",url:"http://dev.sipdoc.net"}],dependencies:{debug:"^2.2.0",nan:"^2.3.3","typedarray-to-buffer":"^3.1.2",yaeti:"^0.0.6"},deprecated:!1,description:"Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.",devDependencies:{"buffer-equal":"^1.0.0",faucet:"^0.0.1",gulp:"git+https://github.com/gulpjs/gulp.git#4.0","gulp-jshint":"^2.0.4",jshint:"^2.0.0","jshint-stylish":"^2.2.1",tape:"^4.0.1"},directories:{lib:"./lib"},engines:{node:">=0.10.0"},homepage:"https://github.com/theturtle32/WebSocket-Node",keywords:["websocket","websockets","socket","networking","comet","push","RFC-6455","realtime","server","client"],license:"Apache-2.0",main:"index",name:"websocket",repository:{type:"git",url:"git+https://github.com/theturtle32/WebSocket-Node.git"},scripts:{gulp:"gulp",install:"(node-gyp rebuild 2> builderror.log) || (exit 0)",test:"faucet test/unit"},version:"1.0.26"}},function(e,a,t){e.exports=t(794).version},function(e,a){var t={disableWarnings:!1,deprecationWarningMap:{},warn:function(e){!this.disableWarnings&&this.deprecationWarningMap[e]&&(console.warn("DEPRECATION WARNING: "+this.deprecationWarningMap[e]),this.deprecationWarningMap[e]=!1)}};e.exports=t},function(e,a){e.exports=function(e){this.type=e,this.isTrusted=!1,this._yaeti=!0}},function(e,a){function t(){"function"!=typeof this.addEventListener&&(this._listeners={},this.addEventListener=r,this.removeEventListener=c,this.dispatchEvent=n)}function r(e,a){var t,r,c;if(e&&a){for(void 0===(t=this._listeners[e])&&(this._listeners[e]=t=[]),r=0;c=t[r];r++)if(c===a)return;t.push(a)}}function c(e,a){var t,r,c;if(e&&a&&void 0!==(t=this._listeners[e])){for(r=0;c=t[r];r++)if(c===a){t.splice(r,1);break}0===t.length&&delete this._listeners[e]}}function n(e){var a,t,r,c,n,i=!1;if(!e||"string"!=typeof e.type)throw new Error("`event` must have a valid `type` property");e._yaeti&&(e.target=this,e.cancelable=!0);try{e.stopImmediatePropagation=function(){i=!0}}catch(e){}for(a=e.type,t=this._listeners[a]||[],"function"==typeof(r=this["on"+a])&&r.call(this,e),c=0;(n=t[c])&&!i;c++)n.call(this,e);return!e.defaultPrevented}e.exports=t,Object.defineProperties(t.prototype,{listeners:{get:function(){return this._listeners}}})},function(e,a){e.exports=c,c.strict=n,c.loose=i;var t=Object.prototype.toString,r={"[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 c(e){return n(e)||i(e)}function n(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 i(e){return r[t.call(e)]}},function(e,a,t){var r=t(313),c=t(312),n=t(311);const i=0,f=1,o=2,d=3;function s(e,a,t,c,o,s){n.EventTarget.call(this),(s=s||{}).assembleFragments=!0;var h=this;this._url=e,this._readyState=i,this._protocol=void 0,this._extensions="",this._bufferedAmount=0,this._binaryType="arraybuffer",this._connection=void 0,this._client=new r(s),this._client.on("connect",function(e){(function(e){var a=this;this._readyState=f,this._connection=e,this._protocol=e.protocol,this._extensions=e.extensions,this._connection.on("close",function(e,t){(function(e,a){p.call(this),this._readyState=d,this.dispatchEvent(b(e,a||""))}).call(a,e,t)}),this._connection.on("message",function(e){(function(e){if(e.utf8Data)this.dispatchEvent(u(e.utf8Data));else if(e.binaryData&&"arraybuffer"===this.binaryType){for(var a=e.binaryData,t=new ArrayBuffer(a.length),r=new Uint8Array(t),c=0,n=a.length;c<n;++c)r[c]=a[c];this.dispatchEvent(u(t))}}).call(a,e)}),this.dispatchEvent(new n.Event("open"))}).call(h,e)}),this._client.on("connectFailed",function(){l.call(h)}),this._client.connect(e,a,t,c,o)}function b(e,a){var t=new n.Event("close");return t.code=e,t.reason=a,t.wasClean=void 0===e||1e3===e,t}function u(e){var a=new n.Event("message");return a.data=e,a}function l(){p.call(this),this._readyState=d;try{this.dispatchEvent(new n.Event("error"))}finally{this.dispatchEvent(b(1006,"connection failed"))}}function p(){this._client.removeAllListeners(),this._connection&&this._connection.removeAllListeners()}e.exports=s,Object.defineProperties(s.prototype,{url:{get:function(){return this._url}},readyState:{get:function(){return this._readyState}},protocol:{get:function(){return this._protocol}},extensions:{get:function(){return this._extensions}},bufferedAmount:{get:function(){return this._bufferedAmount}}}),Object.defineProperties(s.prototype,{binaryType:{get:function(){return this._binaryType},set:function(e){if("arraybuffer"!==e)throw new SyntaxError('just "arraybuffer" type allowed for "binaryType" attribute');this._binaryType=e}}}),[["CONNECTING",i],["OPEN",f],["CLOSING",o],["CLOSED",d]].forEach(function(e){Object.defineProperty(s.prototype,e[0],{get:function(){return e[1]}})}),[["CONNECTING",i],["OPEN",f],["CLOSING",o],["CLOSED",d]].forEach(function(e){Object.defineProperty(s,e[0],{get:function(){return e[1]}})}),s.prototype.send=function(e){if(this._readyState!==f)throw new Error("cannot call send() while not connected");if("string"==typeof e||e instanceof String)this._connection.sendUTF(e);else if(e instanceof Buffer)this._connection.sendBytes(e);else{if(!e.byteLength&&0!==e.byteLength)throw new Error("unknown binary data:",e);e=c(e),this._connection.sendBytes(e)}},s.prototype.close=function(e,a){switch(this._readyState){case i:l.call(this),this._client.on("connect",function(t){e?t.close(e,a):t.close()});break;case f:this._readyState=o,e?this._connection.close(e,a):this._connection.close()}}},function(e,a,t){var r=t(1),c=t(5).EventEmitter;function n(e,a){c.call(this),this.webSocketRequest=e,this.protocol="____no_protocol____"===a?null:a,this.origin=e.origin,this.resource=e.resource,this.resourceURL=e.resourceURL,this.httpRequest=e.httpRequest,this.remoteAddress=e.remoteAddress,this.webSocketVersion=e.webSocketVersion,this.requestedExtensions=e.requestedExtensions,this.cookies=e.cookies}r.inherits(n,c),n.prototype.accept=function(e,a){var t=this.webSocketRequest.accept(this.protocol,e,a);return this.emit("requestAccepted",t),t},n.prototype.reject=function(e,a,t){this.webSocketRequest.reject(e,a,t),this.emit("requestRejected",this)},e.exports=n},function(e,a,t){var r=t(83).extend,c=t(1),n=t(5).EventEmitter,i=t(801);function f(e){n.call(this),this.config={server:null},e&&r(this.config,e),this.handlers=[],this._requestHandler=this.handleRequest.bind(this),this.config.server&&this.attachServer(this.config.server)}c.inherits(f,n),f.prototype.attachServer=function(e){if(!e)throw new Error("You must specify a WebSocketServer instance to attach to.");this.server=e,this.server.on("request",this._requestHandler)},f.prototype.detachServer=function(){if(!this.server)throw new Error("Cannot detach from server: not attached.");this.server.removeListener("request",this._requestHandler),this.server=null},f.prototype.mount=function(e,a,t){if(!e)throw new Error("You must specify a path for this handler.");if(a||(a="____no_protocol____"),!t)throw new Error("You must specify a callback for this handler.");if(!((e=this.pathToRegExp(e))instanceof RegExp))throw new Error("Path must be specified as either a string or a RegExp.");var r=e.toString();if(a=a.toLocaleLowerCase(),-1!==this.findHandlerIndex(r,a))throw new Error("You may only mount one handler per path/protocol combination.");this.handlers.push({path:e,pathString:r,protocol:a,callback:t})},f.prototype.unmount=function(e,a){var t=this.findHandlerIndex(this.pathToRegExp(e).toString(),a);if(-1===t)throw new Error("Unable to find a route matching the specified path and protocol.");this.handlers.splice(t,1)},f.prototype.findHandlerIndex=function(e,a){a=a.toLocaleLowerCase();for(var t=0,r=this.handlers.length;t<r;t++){var c=this.handlers[t];if(c.pathString===e&&c.protocol===a)return t}return-1},f.prototype.pathToRegExp=function(e){return"string"==typeof e&&("*"===e?e=/^.*$/:(e=e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),e=new RegExp("^"+e+"$"))),e},f.prototype.handleRequest=function(e){var a=e.requestedProtocols;0===a.length&&(a=["____no_protocol____"]);for(var t=0;t<a.length;t++)for(var r=a[t].toLocaleLowerCase(),c=0,n=this.handlers.length;c<n;c++){var f=this.handlers[c];if(f.path.test(e.resourceURL.pathname)&&(r===f.protocol||"*"===f.protocol)){var o=new i(e,r);return void f.callback(o)}}e.reject(404,"No handler is available for the given request.")},e.exports=f},function(e,a){
/*!
 * UTF-8 Validation Fallback Code originally from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
e.exports.Validation={isValidUTF8:function(){return!0}}},function(e,a,t){
/*!
 * UTF-8 Validation Code originally from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/Release/validation'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/default/validation'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(803)}catch(e){throw console.error("validation.node seems not to have been built. Run npm install."),e}}}},function(e,a,t){var r=t(24).Buffer,c=t(5).EventEmitter;function n(e){if(!(this instanceof n))return new n(e);c.call(this);var a=this;void 0===e&&(e={}),a.encoding=e.encoding,a.construct=e.construct||r;var t={next:null,buffer:null},i={next:null,buffer:null},f=0;a.__defineGetter__("length",function(){return f});var o=0;a.write=function(e){return t.buffer?(i.next={next:null,buffer:e},i=i.next):(t.buffer=e,i=t),f+=e.length,a.emit("write",e),!0},a.end=function(e){r.isBuffer(e)&&a.write(e)},a.push=function(){return[].concat.apply([],arguments).forEach(a.write),a},a.forEach=function(e){if(!t.buffer)return new a.construct(0);if(t.buffer.length-o<=0)return a;for(var r={buffer:t.buffer.slice(o),next:t.next};r&&r.buffer;){if(e(r.buffer))break;r=r.next}return a},a.join=function(e,r){if(!t.buffer)return new a.construct(0);void 0==e&&(e=0),void 0==r&&(r=a.length);var c=new a.construct(r-e),n=0;return a.forEach(function(a){if(e<n+a.length&&n<r&&a.copy(c,Math.max(0,n-e),Math.max(0,e-n),Math.min(a.length,r-n)),(n+=a.length)>r)return!0}),c},a.joinInto=function(e,r,c,n){if(!t.buffer)return new a.construct(0);void 0==c&&(c=0),void 0==n&&(n=a.length);var i=e;if(i.length-r<n-c)throw new Error("Insufficient space available in target Buffer.");var f=0;return a.forEach(function(e){if(c<f+e.length&&f<n&&e.copy(i,Math.max(r,r+f-c),Math.max(0,c-f),Math.min(e.length,n-f)),(f+=e.length)>n)return!0}),i},a.advance=function(e){for(o+=e,f-=e;t.buffer&&o>=t.buffer.length;)o-=t.buffer.length,t=t.next?t.next:{buffer:null,next:null};return null===t.buffer&&(i={next:null,buffer:null}),a.emit("advance",e),a},a.take=function(e,t){void 0==e?e=a.length:"number"!=typeof e&&(t=e,e=a.length);if(t||(t=a.encoding),t){var r="";return a.forEach(function(a){if(e<=0)return!0;r+=a.toString(t,0,Math.min(e,a.length)),e-=a.length}),r}return a.join(0,e)},a.toString=function(){return a.take("binary")}}e.exports=n,e.exports.BufferList=n,t(1).inherits(n,c)},function(e,a){
/*!
 * Copied from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
e.exports.BufferUtil={merge:function(e,a){for(var t=0,r=0,c=a.length;r<c;++r){var n=a[r];n.copy(e,t),t+=n.length}},mask:function(e,a,t,r,c){for(var n=a.readUInt32LE(0),i=0;i<c-3;i+=4){var f=n^e.readUInt32LE(i);f<0&&(f=4294967296+f),t.writeUInt32LE(f,r+i)}switch(c%4){case 3:t[r+i+2]=e[i+2]^a[2];case 2:t[r+i+1]=e[i+1]^a[1];case 1:t[r+i]=e[i]^a[0]}},unmask:function(e,a){for(var t=a.readUInt32LE(0),r=e.length,c=0;c<r-3;c+=4){var n=t^e.readUInt32LE(c);n<0&&(n=4294967296+n),e.writeUInt32LE(n,c)}switch(r%4){case 3:e[c+2]=e[c+2]^a[2];case 2:e[c+1]=e[c+1]^a[1];case 1:e[c]=e[c]^a[0]}}}},function(e,a,t){
/*!
 * Copied from:
 * ws: a node.js websocket client
 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
 * MIT Licensed
 */
try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/Release/bufferutil'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(!function(){var e=new Error("Cannot find module '../build/default/bufferutil'");throw e.code="MODULE_NOT_FOUND",e}())}catch(a){try{e.exports=t(806)}catch(e){throw console.error("bufferutil.node seems to not have been built. Run npm install."),e}}}},function(e,a){e.exports=__webpack_require__(32)},function(e,a){e.exports=__webpack_require__(33)},function(e,a,t){var r=t(809),c=t(1);(a=e.exports=t(316)).init=function(e){e.inspectOpts={};for(var t=Object.keys(a.inspectOpts),r=0;r<t.length;r++)e.inspectOpts[t[r]]=a.inspectOpts[t[r]]},a.log=function(){return i.write(c.format.apply(c,arguments)+"\n")},a.formatArgs=function(e){var t=this.namespace;if(this.useColors){var r=this.color,c="  [3"+r+";1m"+t+" [0m";e[0]=c+e[0].split("\n").join("\n"+c),e.push("[3"+r+"m+"+a.humanize(this.diff)+"[0m")}else e[0]=(new Date).toUTCString()+" "+t+" "+e[0]},a.save=function(e){null==e?delete process.env.DEBUG:process.env.DEBUG=e},a.load=f,a.useColors=function(){return"colors"in a.inspectOpts?Boolean(a.inspectOpts.colors):r.isatty(n)},a.colors=[6,2,3,4,5,1],a.inspectOpts=Object.keys(process.env).filter(function(e){return/^debug_/i.test(e)}).reduce(function(e,a){var t=a.substring(6).toLowerCase().replace(/_([a-z])/g,function(e,a){return a.toUpperCase()}),r=process.env[a];return r=!!/^(yes|on|true|enabled)$/i.test(r)||!/^(no|off|false|disabled)$/i.test(r)&&("null"===r?null:Number(r)),e[t]=r,e},{});var n=parseInt(process.env.DEBUG_FD,10)||2;1!==n&&2!==n&&c.deprecate(function(){},"except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();var i=1===n?process.stdout:2===n?process.stderr:function(e){var a;switch(process.binding("tty_wrap").guessHandleType(e)){case"TTY":(a=new r.WriteStream(e))._type="tty",a._handle&&a._handle.unref&&a._handle.unref();break;case"FILE":var c=t(15);(a=new c.SyncWriteStream(e,{autoClose:!1}))._type="fs";break;case"PIPE":case"TCP":var n=t(808);(a=new n.Socket({fd:e,readable:!1,writable:!0})).readable=!1,a.read=null,a._type="pipe",a._handle&&a._handle.unref&&a._handle.unref();break;default:throw new Error("Implement me. Unknown stream file type!")}return a.fd=e,a._isStdio=!0,a}(n);function f(){return process.env.DEBUG}a.formatters.o=function(e){return this.inspectOpts.colors=this.useColors,c.inspect(e,this.inspectOpts).split("\n").map(function(e){return e.trim()}).join(" ")},a.formatters.O=function(e){return this.inspectOpts.colors=this.useColors,c.inspect(e,this.inspectOpts)},a.enable(f())},function(e,a){var t=1e3,r=60*t,c=60*r,n=24*c,i=365.25*n;function f(e,a,t){if(!(e<a))return e<1.5*a?Math.floor(e/a)+" "+t:Math.ceil(e/a)+" "+t+"s"}e.exports=function(e,a){a=a||{};var o=typeof e;if("string"===o&&e.length>0)return function(e){if((e=String(e)).length>100)return;var a=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!a)return;var f=parseFloat(a[1]);switch((a[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return f*i;case"days":case"day":case"d":return f*n;case"hours":case"hour":case"hrs":case"hr":case"h":return f*c;case"minutes":case"minute":case"mins":case"min":case"m":return f*r;case"seconds":case"second":case"secs":case"sec":case"s":return f*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return f;default:return}}(e);if("number"===o&&!1===isNaN(e))return a.long?function(e){return f(e,n,"day")||f(e,c,"hour")||f(e,r,"minute")||f(e,t,"second")||e+" ms"}(e):function(e){if(e>=n)return Math.round(e/n)+"d";if(e>=c)return Math.round(e/c)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,a,t){function r(){var e;try{e=a.storage.debug}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}(a=e.exports=t(316)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},a.formatArgs=function(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+a.humanize(this.diff),!t)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var c=0,n=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&"%c"===e&&(n=++c)}),e.splice(n,0,r)},a.save=function(e){try{null==e?a.storage.removeItem("debug"):a.storage.debug=e}catch(e){}},a.load=r,a.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},a.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),a.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],a.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},a.enable(r())},function(e,a,t){var r=t(83).extend,c=t(83),n=t(1),i=t(115)("websocket:server"),f=t(5).EventEmitter,o=t(315),d=function(e){f.call(this),this._handlers={upgrade:this.handleUpgrade.bind(this),requestAccepted:this.handleRequestAccepted.bind(this),requestResolved:this.handleRequestResolved.bind(this)},this.connections=[],this.pendingRequests=[],e&&this.mount(e)};n.inherits(d,f),d.prototype.mount=function(e){if(this.config={httpServer:null,maxReceivedFrameSize:65536,maxReceivedMessageSize:1048576,fragmentOutgoingMessages:!0,fragmentationThreshold:16384,keepalive:!0,keepaliveInterval:2e4,dropConnectionOnKeepaliveTimeout:!0,keepaliveGracePeriod:1e4,useNativeKeepalive:!1,assembleFragments:!0,autoAcceptConnections:!1,ignoreXForwardedFor:!1,disableNagleAlgorithm:!0,closeTimeout:5e3},r(this.config,e),!this.config.httpServer)throw new Error("You must specify an httpServer on which to mount the WebSocket server.");Array.isArray(this.config.httpServer)||(this.config.httpServer=[this.config.httpServer]);var a=this._handlers.upgrade;this.config.httpServer.forEach(function(e){e.on("upgrade",a)})},d.prototype.unmount=function(){var e=this._handlers.upgrade;this.config.httpServer.forEach(function(a){a.removeListener("upgrade",e)})},d.prototype.closeAllConnections=function(){this.connections.forEach(function(e){e.close()}),this.pendingRequests.forEach(function(e){process.nextTick(function(){e.reject(503)})})},d.prototype.broadcast=function(e){Buffer.isBuffer(e)?this.broadcastBytes(e):"function"==typeof e.toString&&this.broadcastUTF(e)},d.prototype.broadcastUTF=function(e){this.connections.forEach(function(a){a.sendUTF(e)})},d.prototype.broadcastBytes=function(e){this.connections.forEach(function(a){a.sendBytes(e)})},d.prototype.shutDown=function(){this.unmount(),this.closeAllConnections()},d.prototype.handleUpgrade=function(e,a){var t=new o(a,e,this.config);try{t.readHandshake()}catch(e){return t.reject(e.httpCode?e.httpCode:400,e.message,e.headers),void i("Invalid handshake: %s",e.message)}this.pendingRequests.push(t),t.once("requestAccepted",this._handlers.requestAccepted),t.once("requestResolved",this._handlers.requestResolved),!this.config.autoAcceptConnections&&c.eventEmitterListenerCount(this,"request")>0?this.emit("request",t):this.config.autoAcceptConnections?t.accept(t.requestedProtocols[0],t.origin):t.reject(404,"No handler is configured to accept the connection.")},d.prototype.handleRequestAccepted=function(e){var a=this;e.once("close",function(t,r){a.handleConnectionClose(e,t,r)}),this.connections.push(e),this.emit("connect",e)},d.prototype.handleConnectionClose=function(e,a,t){var r=this.connections.indexOf(e);-1!==r&&this.connections.splice(r,1),this.emit("close",e,a,t)},d.prototype.handleRequestResolved=function(e){var a=this.pendingRequests.indexOf(e);-1!==a&&this.pendingRequests.splice(a,1)},e.exports=d},function(e,a,t){e.exports={server:t(813),client:t(313),router:t(802),frame:t(314),request:t(315),connection:t(166),w3cwebsocket:t(800),deprecation:t(796),version:t(795)}},function(e,a,t){e.exports=t(814)},function(e,a,t){"use strict";var r=t(20),c=t(21).errors,n=null,i=null,f=null;"undefined"!=typeof window?(n=window.WebSocket,i=btoa,f=function(e){return new URL(e)}):(n=t(815).w3cwebsocket,i=function(e){return Buffer(e).toString("base64")},f=t(32).parse);var o=function(e,a){var t=this;this.responseCallbacks={},this.notificationCallbacks=[],a=a||{},this._customTimeout=a.timeout;var c=f(e),o=a.headers||{};c.username&&c.password&&(o.authorization="Basic "+i(c.username+":"+c.password)),this.connection=new n(e,void 0,void 0,o),this.addDefaultEvents(),this.connection.onmessage=function(e){var a="string"==typeof e.data?e.data:"";t._parseResponse(a).forEach(function(e){var a=null;r.isArray(e)?e.forEach(function(e){t.responseCallbacks[e.id]&&(a=e.id)}):a=e.id,a||-1===e.method.indexOf("_subscription")?t.responseCallbacks[a]&&(t.responseCallbacks[a](null,e),delete t.responseCallbacks[a]):t.notificationCallbacks.forEach(function(a){r.isFunction(a)&&a(e)})})}};o.prototype.addDefaultEvents=function(){var e=this;this.connection.onerror=function(){e._timeout()},this.connection.onclose=function(){e._timeout(),e.reset()}},o.prototype._parseResponse=function(e){var a=this,t=[];return e.replace(/\}[\n\r]?\{/g,"}|--|{").replace(/\}\][\n\r]?\[\{/g,"}]|--|[{").replace(/\}[\n\r]?\[\{/g,"}|--|[{").replace(/\}\][\n\r]?\{/g,"}]|--|{").split("|--|").forEach(function(e){a.lastChunk&&(e=a.lastChunk+e);var r=null;try{r=JSON.parse(e)}catch(t){return a.lastChunk=e,clearTimeout(a.lastChunkTimeout),void(a.lastChunkTimeout=setTimeout(function(){throw a._timeout(),c.InvalidResponse(e)},15e3))}clearTimeout(a.lastChunkTimeout),a.lastChunk=null,r&&t.push(r)}),t},o.prototype._addResponseCallback=function(e,a){var t=e.id||e[0].id,r=e.method||e[0].method;this.responseCallbacks[t]=a,this.responseCallbacks[t].method=r;var n=this;this._customTimeout&&setTimeout(function(){n.responseCallbacks[t]&&(n.responseCallbacks[t](c.ConnectionTimeout(n._customTimeout)),delete n.responseCallbacks[t])},this._customTimeout)},o.prototype._timeout=function(){for(var e in this.responseCallbacks)this.responseCallbacks.hasOwnProperty(e)&&(this.responseCallbacks[e](c.InvalidConnection("on WS")),delete this.responseCallbacks[e])},o.prototype.send=function(e,a){var t=this;if(this.connection.readyState!==this.connection.CONNECTING){if(this.connection.readyState!==this.connection.OPEN)return console.error("connection not open on send()"),"function"==typeof this.connection.onerror?this.connection.onerror(new Error("connection not open")):console.error("no error callback"),void a(new Error("connection not open"));this.connection.send(JSON.stringify(e)),this._addResponseCallback(e,a)}else setTimeout(function(){t.send(e,a)},10)},o.prototype.on=function(e,a){if("function"!=typeof a)throw new Error("The second parameter callback must be a function.");switch(e){case"data":this.notificationCallbacks.push(a);break;case"connect":this.connection.onopen=a;break;case"end":this.connection.onclose=a;break;case"error":this.connection.onerror=a}},o.prototype.removeListener=function(e,a){var t=this;switch(e){case"data":this.notificationCallbacks.forEach(function(e,r){e===a&&t.notificationCallbacks.splice(r,1)})}},o.prototype.removeAllListeners=function(e){switch(e){case"data":this.notificationCallbacks=[];break;case"connect":this.connection.onopen=null;break;case"end":this.connection.onclose=null;break;case"error":this.connection.onerror=null}},o.prototype.reset=function(){this._timeout(),this.notificationCallbacks=[],this.addDefaultEvents()},e.exports=o},function(e,a,t){"use strict";var r=null,c=Function("return this")();void 0!==c.ethereumProvider?r=c.ethereumProvider:void 0!==c.web3&&c.web3.currentProvider&&(c.web3.currentProvider.sendAsync&&(c.web3.currentProvider.send=c.web3.currentProvider.sendAsync,delete c.web3.currentProvider.sendAsync),!c.web3.currentProvider.on&&c.web3.currentProvider.connection&&"ipcProviderWrapper"===c.web3.currentProvider.connection.constructor.name&&(c.web3.currentProvider.on=function(e,a){if("function"!=typeof a)throw new Error("The second parameter callback must be a function.");switch(e){case"data":this.connection.on("data",function(e){var t="";e=e.toString();try{t=JSON.parse(e)}catch(t){return a(new Error("Couldn't parse response data"+e))}t.id||-1===t.method.indexOf("_subscription")||a(null,t)});break;default:this.connection.on(e,a)}}),r=c.web3.currentProvider),e.exports=r},function(e,a,t){"use strict";var r=t(317),c=t(21).errors,n=function(e){this.requestManager=e,this.requests=[]};n.prototype.add=function(e){this.requests.push(e)},n.prototype.execute=function(){var e=this.requests;this.requestManager.sendBatch(e,function(a,t){t=t||[],e.map(function(e,a){return t[a]||{}}).forEach(function(a,t){if(e[t].callback){if(a&&a.error)return e[t].callback(c.ErrorResponse(a));if(!r.isValidResponse(a))return e[t].callback(c.InvalidResponse(a));e[t].callback(null,e[t].format?e[t].format(a.result):a.result)}})})},e.exports=n},function(e,a,t){e.exports=t(10)},function(e,a,t){e.exports=function(e,a){var r=t(819),c="function"==typeof a;if(e>65536){if(!c)throw new Error("Requested too many random bytes.");a(new Error("Requested too many random bytes."))}if(void 0!==r&&r.randomBytes){if(!c)return"0x"+r.randomBytes(e).toString("hex");r.randomBytes(e,function(e,t){e?a(o):a(null,"0x"+t.toString("hex"))})}else{var n;if(void 0!==r?n=r:"undefined"!=typeof msCrypto&&(n=msCrypto),n&&n.getRandomValues){var i=n.getRandomValues(new Uint8Array(e)),f="0x"+Array.from(i).map(function(e){return e.toString(16)}).join("");if(!c)return f;a(null,f)}else{var o=new Error('No "crypto" object available. This Browser doesn\'t support generating secure random bytes.');if(!c)throw o;a(o)}}}},function(e,a,t){var r=t(20),c=t(9),n=t(320),i=function(e){var a=typeof e;if("string"===a)return n.isHexStrict(e)?new c(e.replace(/0x/i,""),16):new c(e,10);if("number"===a)return new c(e);if(n.isBigNumber(e))return new c(e.toString(10));if(n.isBN(e))return e;throw new Error(e+" is not a number")},f=function(e,a,t){var r,f;if("bytes"===(e=function(e){return e.startsWith("int[")?"int256"+e.slice(3):"int"===e?"int256":e.startsWith("uint[")?"uint256"+e.slice(4):"uint"===e?"uint256":e.startsWith("fixed[")?"fixed128x128"+e.slice(5):"fixed"===e?"fixed128x128":e.startsWith("ufixed[")?"ufixed128x128"+e.slice(6):"ufixed"===e?"ufixed128x128":e}(e))){if(a.replace(/^0x/i,"").length%2!=0)throw new Error("Invalid bytes characters "+a.length);return a}if("string"===e)return n.utf8ToHex(a);if("bool"===e)return a?"01":"00";if(e.startsWith("address")){if(r=t?64:40,!n.isAddress(a))throw new Error(a+" is not a valid address, or the checksum is invalid.");return n.leftPad(a.toLowerCase(),r)}if(r=function(e){var a=/^\D+(\d+).*$/.exec(e);return a?parseInt(a[1],10):null}(e),e.startsWith("bytes")){if(!r)throw new Error("bytes[] not yet supported in solidity");if(t&&(r=32),r<1||r>32||r<a.replace(/^0x/i,"").length/2)throw new Error("Invalid bytes"+r+" for "+a);return n.rightPad(a,2*r)}if(e.startsWith("uint")){if(r%8||r<8||r>256)throw new Error("Invalid uint"+r+" size");if((f=i(a)).bitLength()>r)throw new Error("Supplied uint exceeds width: "+r+" vs "+f.bitLength());if(f.lt(new c(0)))throw new Error("Supplied uint "+f.toString()+" is negative");return r?n.leftPad(f.toString("hex"),r/8*2):f}if(e.startsWith("int")){if(r%8||r<8||r>256)throw new Error("Invalid int"+r+" size");if((f=i(a)).bitLength()>r)throw new Error("Supplied int exceeds width: "+r+" vs "+f.bitLength());return f.lt(new c(0))?f.toTwos(r).toString("hex"):r?n.leftPad(f.toString("hex"),r/8*2):f}throw new Error("Unsupported or invalid type: "+e)},o=function(e){if(r.isArray(e))throw new Error("Autodetection of array types is not supported.");var a,t,i="";if(r.isObject(e)&&(e.hasOwnProperty("v")||e.hasOwnProperty("t")||e.hasOwnProperty("value")||e.hasOwnProperty("type"))?(a=e.hasOwnProperty("t")?e.t:e.type,i=e.hasOwnProperty("v")?e.v:e.value):(a=n.toHex(e,!0),i=n.toHex(e),a.startsWith("int")||a.startsWith("uint")||(a="bytes")),!a.startsWith("int")&&!a.startsWith("uint")||"string"!=typeof i||/^(-)?0x/i.test(i)||(i=new c(i)),r.isArray(i)){if((t=function(e){var a=/^\D+\d*\[(\d+)\]$/.exec(e);return a?parseInt(a[1],10):null}(a))&&i.length!==t)throw new Error(a+" is not matching the given array "+JSON.stringify(i));t=i.length}return r.isArray(i)?i.map(function(e){return f(a,e,t).toString("hex").replace("0x","")}).join(""):f(a,i,t).toString("hex").replace("0x","")};e.exports=function(){var e=Array.prototype.slice.call(arguments),a=r.map(e,o);return n.sha3("0x"+a.join(""))}},function(e,a,t){(function(e){var r;/*! https://mths.be/utf8js v2.0.0 by @mathias */!function(c){var n="object"==typeof a&&a,i=("object"==typeof e&&e&&e.exports,"object"==typeof global&&global);i.global!==i&&i.window;var f,o,d,s=String.fromCharCode;function b(e){for(var a,t,r=[],c=0,n=e.length;c<n;)(a=e.charCodeAt(c++))>=55296&&a<=56319&&c<n?56320==(64512&(t=e.charCodeAt(c++)))?r.push(((1023&a)<<10)+(1023&t)+65536):(r.push(a),c--):r.push(a);return r}function u(e){if(e>=55296&&e<=57343)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function l(e,a){return s(e>>a&63|128)}function p(e){if(0==(4294967168&e))return s(e);var a="";return 0==(4294965248&e)?a=s(e>>6&31|192):0==(4294901760&e)?(u(e),a=s(e>>12&15|224),a+=l(e,6)):0==(4292870144&e)&&(a=s(e>>18&7|240),a+=l(e,12),a+=l(e,6)),a+=s(63&e|128)}function h(){if(d>=o)throw Error("Invalid byte index");var e=255&f[d];if(d++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function m(){var e,a;if(d>o)throw Error("Invalid byte index");if(d==o)return!1;if(e=255&f[d],d++,0==(128&e))return e;if(192==(224&e)){if((a=(31&e)<<6|h())>=128)return a;throw Error("Invalid continuation byte")}if(224==(240&e)){if((a=(15&e)<<12|h()<<6|h())>=2048)return u(a),a;throw Error("Invalid continuation byte")}if(240==(248&e)&&(a=(15&e)<<18|h()<<12|h()<<6|h())>=65536&&a<=1114111)return a;throw Error("Invalid UTF-8 detected")}var g={version:"2.0.0",encode:function(e){for(var a=b(e),t=a.length,r=-1,c="";++r<t;)c+=p(a[r]);return c},decode:function(e){f=b(e),o=f.length,d=0;for(var a,t=[];!1!==(a=m());)t.push(a);return function(e){for(var a,t=e.length,r=-1,c="";++r<t;)(a=e[r])>65535&&(c+=s((a-=65536)>>>10&1023|55296),a=56320|1023&a),c+=s(a);return c}(t)}};void 0===(r=function(){return g}.call(a,t,a,e))||(e.exports=r)}()}).call(this,t(25)(e))},function(e,a,t){"use strict";var r=t(9),c=t(321),n=new r(0),i=new r(-1),f={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"};function o(e){var a=e?e.toLowerCase():"ether",t=f[a];if("string"!=typeof t)throw new Error("[ethjs-unit] the unit provided "+e+" doesn't exists, please use the one of the following units "+JSON.stringify(f,null,2));return new r(t,10)}function d(e){if("string"==typeof e){if(!e.match(/^-?[0-9.]+$/))throw new Error("while converting number to string, invalid number value '"+e+"', should be a number matching (^-?[0-9.]+).");return e}if("number"==typeof e)return String(e);if("object"==typeof e&&e.toString&&(e.toTwos||e.dividedToIntegerBy))return e.toPrecision?String(e.toPrecision()):e.toString(10);throw new Error("while converting number to string, invalid number value '"+e+"' type "+typeof e+".")}e.exports={unitMap:f,numberToString:d,getValueOfUnit:o,fromWei:function(e,a,t){var r=c(e),d=r.lt(n),s=o(a),b=f[a].length-1||1,u=t||{};d&&(r=r.mul(i));for(var l=r.mod(s).toString(10);l.length<b;)l="0"+l;u.pad||(l=l.match(/^([0-9]*[1-9]|0)(0*)/)[1]);var p=r.div(s).toString(10);u.commify&&(p=p.replace(/\B(?=(\d{3})+(?!\d))/g,","));var h=p+("0"==l?"":"."+l);return d&&(h="-"+h),h},toWei:function(e,a){var t=d(e),c=o(a),n=f[a].length-1||1,s="-"===t.substring(0,1);if(s&&(t=t.substring(1)),"."===t)throw new Error("[ethjs-unit] while converting number "+e+" to wei, invalid value");var b=t.split(".");if(b.length>2)throw new Error("[ethjs-unit] while converting number "+e+" to wei,  too many decimal points");var u=b[0],l=b[1];if(u||(u="0"),l||(l="0"),l.length>n)throw new Error("[ethjs-unit] while converting number "+e+" to wei, too many decimal places");for(;l.length<n;)l+="0";u=new r(u),l=new r(l);var p=u.mul(c).add(l);return s&&(p=p.mul(i)),new r(p.toString(10),10)}}},function(e,a,t){"use strict";var r=t(20),c=t(27),n=t(318),i=function(e){return c.toBN(e).toString(10)},f=function(e){if(void 0!==e)return function(e){return"latest"===e||"pending"===e||"earliest"===e}(e)?e:c.isHexStrict(e)?r.isString(e)?e.toLowerCase():e:c.numberToHex(e)},o=function(e){if(e.to&&(e.to=b(e.to)),e.data&&e.input)throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.');if(!e.data&&e.input&&(e.data=e.input,delete e.input),e.data&&!c.isHex(e.data))throw new Error("The data field must be HEX encoded data.");return(e.gas||e.gasLimit)&&(e.gas=e.gas||e.gasLimit),["gasPrice","gas","value","nonce"].filter(function(a){return void 0!==e[a]}).forEach(function(a){e[a]=c.numberToHex(e[a])}),e},d=function(e){return null!==e.blockNumber&&(e.blockNumber=c.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=c.hexToNumber(e.transactionIndex)),e.nonce=c.hexToNumber(e.nonce),e.gas=c.hexToNumber(e.gas),e.gasPrice=i(e.gasPrice),e.value=i(e.value),e.to&&c.isAddress(e.to)?e.to=c.toChecksumAddress(e.to):e.to=null,e.from&&(e.from=c.toChecksumAddress(e.from)),e},s=function(e){if("string"==typeof e.blockHash&&"string"==typeof e.transactionHash&&"string"==typeof e.logIndex){var a=c.sha3(e.blockHash.replace("0x","")+e.transactionHash.replace("0x","")+e.logIndex.replace("0x",""));e.id="log_"+a.replace("0x","").substr(0,8)}else e.id||(e.id=null);return null!==e.blockNumber&&(e.blockNumber=c.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=c.hexToNumber(e.transactionIndex)),null!==e.logIndex&&(e.logIndex=c.hexToNumber(e.logIndex)),e.address&&(e.address=c.toChecksumAddress(e.address)),e},b=function(e){var a=new n(e);if(a.isValid()&&a.isDirect())return a.toAddress().toLowerCase();if(c.isAddress(e))return"0x"+e.toLowerCase().replace("0x","");throw new Error('Provided address "'+e+"\" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can't be converted.")};e.exports={inputDefaultBlockNumberFormatter:function(e){return!this||void 0!==e&&null!==e?"genesis"===e||"earliest"===e?"0x0":f(e):this.defaultBlock},inputBlockNumberFormatter:f,inputCallFormatter:function(e){var a=(e=o(e)).from||(this?this.defaultAccount:null);return a&&(e.from=b(a)),e},inputTransactionFormatter:function(e){if(e=o(e),!r.isNumber(e.from)&&!r.isObject(e.from)){if(e.from=e.from||(this?this.defaultAccount:null),!e.from&&!r.isNumber(e.from))throw new Error('The send transactions "from" field must be defined!');e.from=b(e.from)}return e},inputAddressFormatter:b,inputPostFormatter:function(e){return e.ttl&&(e.ttl=c.numberToHex(e.ttl)),e.workToProve&&(e.workToProve=c.numberToHex(e.workToProve)),e.priority&&(e.priority=c.numberToHex(e.priority)),r.isArray(e.topics)||(e.topics=e.topics?[e.topics]:[]),e.topics=e.topics.map(function(e){return 0===e.indexOf("0x")?e:c.fromUtf8(e)}),e},inputLogFormatter:function(e){var a=function(e){return null===e||void 0===e?null:0===(e=String(e)).indexOf("0x")?e:c.fromUtf8(e)};return e.topics=e.topics||[],e.topics=e.topics.map(function(e){return r.isArray(e)?e.map(a):a(e)}),a=null,e.address&&(e.address=r.isArray(e.address)?e.address.map(function(e){return b(e)}):b(e.address)),e},inputSignFormatter:function(e){return c.isHexStrict(e)?e:c.utf8ToHex(e)},outputBigNumberFormatter:i,outputTransactionFormatter:d,outputTransactionReceiptFormatter:function(e){if("object"!=typeof e)throw new Error("Received receipt is invalid: "+e);return null!==e.blockNumber&&(e.blockNumber=c.hexToNumber(e.blockNumber)),null!==e.transactionIndex&&(e.transactionIndex=c.hexToNumber(e.transactionIndex)),e.cumulativeGasUsed=c.hexToNumber(e.cumulativeGasUsed),e.gasUsed=c.hexToNumber(e.gasUsed),r.isArray(e.logs)&&(e.logs=e.logs.map(s)),e.contractAddress&&(e.contractAddress=c.toChecksumAddress(e.contractAddress)),void 0!==e.status&&(e.status=Boolean(parseInt(e.status))),e},outputBlockFormatter:function(e){return e.gasLimit=c.hexToNumber(e.gasLimit),e.gasUsed=c.hexToNumber(e.gasUsed),e.size=c.hexToNumber(e.size),e.timestamp=c.hexToNumber(e.timestamp),null!==e.number&&(e.number=c.hexToNumber(e.number)),e.difficulty&&(e.difficulty=i(e.difficulty)),e.totalDifficulty&&(e.totalDifficulty=i(e.totalDifficulty)),r.isArray(e.transactions)&&e.transactions.forEach(function(e){if(!r.isString(e))return d(e)}),e.miner&&(e.miner=c.toChecksumAddress(e.miner)),e},outputLogFormatter:s,outputPostFormatter:function(e){return e.expiry=c.hexToNumber(e.expiry),e.sent=c.hexToNumber(e.sent),e.ttl=c.hexToNumber(e.ttl),e.workProved=c.hexToNumber(e.workProved),e.topics||(e.topics=[]),e.topics=e.topics.map(function(e){return c.toUtf8(e)}),e},outputSyncingFormatter:function(e){return e.startingBlock=c.hexToNumber(e.startingBlock),e.currentBlock=c.hexToNumber(e.currentBlock),e.highestBlock=c.hexToNumber(e.highestBlock),e.knownStates&&(e.knownStates=c.hexToNumber(e.knownStates),e.pulledStates=c.hexToNumber(e.pulledStates)),e}}},function(e,a,t){"use strict";e.exports={ErrorResponse:function(e){var a=e&&e.error&&e.error.message?e.error.message:JSON.stringify(e);return new Error("Returned error: "+a)},InvalidNumberOfParams:function(e,a,t){return new Error('Invalid number of parameters for "'+t+'". Got '+e+" expected "+a+"!")},InvalidConnection:function(e){return new Error("CONNECTION ERROR: Couldn't connect to node "+e+".")},InvalidProvider:function(){return new Error("Provider not set or invalid")},InvalidResponse:function(e){var a=e&&e.error&&e.error.message?e.error.message:"Invalid JSON RPC response: "+JSON.stringify(e);return new Error(a)},ConnectionTimeout:function(e){return new Error("CONNECTION TIMEOUT: timeout of "+e+" ms achived")}}},function(e,a,t){"use strict";var r=t(20),c=t(21).errors,n=t(317),i=t(818),f=t(817),o=function e(a){this.provider=null,this.providers=e.providers,this.setProvider(a),this.subscriptions={}};o.givenProvider=f,o.providers={WebsocketProvider:t(816),HttpProvider:t(793),IpcProvider:t(791)},o.prototype.setProvider=function(e,a){var t=this;if(e&&"string"==typeof e&&this.providers)if(/^http(s)?:\/\//i.test(e))e=new this.providers.HttpProvider(e);else if(/^ws(s)?:\/\//i.test(e))e=new this.providers.WebsocketProvider(e);else if(e&&"object"==typeof a&&"function"==typeof a.connect)e=new this.providers.IpcProvider(e,a);else if(e)throw new Error("Can't autodetect provider for \""+e+'"');this.provider&&this.clearSubscriptions(),this.provider=e||null,this.provider&&this.provider.on&&this.provider.on("data",function(e,a){(e=e||a).method&&t.subscriptions[e.params.subscription]&&t.subscriptions[e.params.subscription].callback&&t.subscriptions[e.params.subscription].callback(null,e.params.result)})},o.prototype.send=function(e,a){if(a=a||function(){},!this.provider)return a(c.InvalidProvider());var t=n.toPayload(e.method,e.params);this.provider[this.provider.sendAsync?"sendAsync":"send"](t,function(e,r){return r&&r.id&&t.id!==r.id?a(new Error('Wrong response id "'+r.id+'" (expected: "'+t.id+'") in '+JSON.stringify(t))):e?a(e):r&&r.error?a(c.ErrorResponse(r)):n.isValidResponse(r)?void a(null,r.result):a(c.InvalidResponse(r))})},o.prototype.sendBatch=function(e,a){if(!this.provider)return a(c.InvalidProvider());var t=n.toBatchPayload(e);this.provider[this.provider.sendAsync?"sendAsync":"send"](t,function(e,t){return e?a(e):r.isArray(t)?void a(null,t):a(c.InvalidResponse(t))})},o.prototype.addSubscription=function(e,a,t,r){if(!this.provider.on)throw new Error("The provider doesn't support subscriptions: "+this.provider.constructor.name);this.subscriptions[e]={callback:r,type:t,name:a}},o.prototype.removeSubscription=function(e,a){this.subscriptions[e]&&(this.send({method:this.subscriptions[e].type+"_unsubscribe",params:[e]},a),delete this.subscriptions[e])},o.prototype.clearSubscriptions=function(e){var a=this;Object.keys(this.subscriptions).forEach(function(t){e&&"syncing"===a.subscriptions[t].name||a.removeSubscription(t)}),this.provider.reset&&this.provider.reset()},e.exports={Manager:o,BatchManager:i}},function(e){e.exports={_args:[["web3@1.0.0-beta.34","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"web3@1.0.0-beta.34",_id:"web3@1.0.0-beta.34",_inBundle:!1,_integrity:"sha1-NH5WG3hAmMtVYzFfSQR5odkfKrE=",_location:"/ganache-core/web3",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"web3@1.0.0-beta.34",name:"web3",escapedName:"web3",rawSpec:"1.0.0-beta.34",saveSpec:null,fetchSpec:"1.0.0-beta.34"},_requiredBy:["/ganache-core"],_resolved:"https://registry.npmjs.org/web3/-/web3-1.0.0-beta.34.tgz",_spec:"1.0.0-beta.34",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",author:{name:"ethereum.org"},authors:[{name:"Fabian Vogelsteller",email:"fabian@ethereum.org",homepage:"http://frozeman.de"},{name:"Marek Kotewicz",email:"marek@parity.io",url:"https://github.com/debris"},{name:"Marian Oancea",url:"https://github.com/cubedro"},{name:"Gav Wood",email:"g@parity.io",homepage:"http://gavwood.com"},{name:"Jeffery Wilcke",email:"jeffrey.wilcke@ethereum.org",url:"https://github.com/obscuren"}],bugs:{url:"https://github.com/ethereum/web3.js/issues"},dependencies:{"web3-bzz":"1.0.0-beta.34","web3-core":"1.0.0-beta.34","web3-eth":"1.0.0-beta.34","web3-eth-personal":"1.0.0-beta.34","web3-net":"1.0.0-beta.34","web3-shh":"1.0.0-beta.34","web3-utils":"1.0.0-beta.34"},description:"Ethereum JavaScript API",keywords:["Ethereum","JavaScript","API"],license:"LGPL-3.0",main:"src/index.js",name:"web3",namespace:"ethereum",repository:{type:"git",url:"https://github.com/ethereum/web3.js/tree/master/packages/web3"},types:"index.d.ts",version:"1.0.0-beta.34"}},function(e,a){for(var t="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",r={},c=0;c<t.length;c++)r[t.charAt(c)]=c;var n=58;e.exports={encode:function(e){if(0===e.length)return"";var a,r=[0];for(f=0;f<e.length;f++){for(a=0;a<r.length;a++)r[a]<<=8;r[0]+=e[f];var c=0;for(a=0;a<r.length;++a)r[a]+=c,c=r[a]/n|0,r[a]%=n;for(;c;)r.push(c%n),c=c/n|0}for(f=0;0===e[f]&&f<e.length-1;f++)r.push(0);for(var i="",f=r.length-1;f>=0;f--)i+=t[r[f]];return i},decode:function(e){if(0===e.length)return[];var a,t,c=[0];for(a=0;a<e.length;a++){var i=e[a];if(!(i in r))throw new Error("Non-base58 character");for(t=0;t<c.length;t++)c[t]*=n;c[0]+=r[i];var f=0;for(t=0;t<c.length;++t)c[t]+=f,f=c[t]>>8,c[t]&=255;for(;f;)c.push(255&f),f>>=8}for(a=0;"1"===e[a]&&a<e.length-1;a++)c.push(0);return c.reverse()}}},function(e,a,t){var r=t(828),c=t(30);function n(e,a){var t;(Array.isArray(e)||e instanceof Uint8Array)&&(e=new Buffer(e)),null!=a?("number"==typeof a&&(a=new Buffer([a])),t=Buffer.concat([a,e])):t=e;var c=o(t).slice(0,4),n=Buffer.concat([t,c]);return r.encode(n)}function i(e,a){var t,c=r.decode(e),n=new Buffer(c);if(null==a)t=0;else if("number"==typeof a&&(a=new Buffer([a])),t=a.length,n.slice(0,t).toString("hex")!==a.toString("hex"))throw new Error("Invalid version");var i=n.slice(-4),f=n.length-4,d=n.slice(0,f),s=o(d).slice(0,4);if(i.toString("hex")!==s.toString("hex"))throw new Error("Invalid checksum");return d.slice(t)}function f(e,a){try{i(e,a)}catch(e){return!1}return!0}function o(e){var a=c("sha256").update(e).digest();return c("sha256").update(a).digest()}e.exports={encode:n,decode:i,isValid:f,createEncoder:function(e){return function(a){return n(a,e)}},createDecoder:function(e){return function(a){return i(a,e)}},createValidator:function(e){return function(a){return f(a,e)}}}},function(e,a,t){var r=t(11),c=t(10),n=t(829),i=t(91),f=new Buffer("Bitcoin seed"),o=78,d={private:76066276,public:76067358};function s(e){this.versions=e||d,this.depth=0,this.index=0,this._privateKey=null,this._publicKey=null,this.chainCode=null,this._fingerprint=0,this.parentFingerprint=0}function b(e,a,t){var r=new Buffer(o);r.writeUInt32BE(a,0),r.writeUInt8(e.depth,4);var c=e.depth?e.parentFingerprint:0;return r.writeUInt32BE(c,5),r.writeUInt32BE(e.index,9),e.chainCode.copy(r,13),t.copy(r,45),r}function u(e){var a=c.createHash("sha256").update(e).digest();return c.createHash("rmd160").update(a).digest()}Object.defineProperty(s.prototype,"fingerprint",{get:function(){return this._fingerprint}}),Object.defineProperty(s.prototype,"identifier",{get:function(){return this._identifier}}),Object.defineProperty(s.prototype,"pubKeyHash",{get:function(){return this.identifier}}),Object.defineProperty(s.prototype,"privateKey",{get:function(){return this._privateKey},set:function(e){r.equal(e.length,32,"Private key must be 32 bytes."),r(!0===i.privateKeyVerify(e),"Invalid private key"),this._privateKey=e,this._publicKey=i.publicKeyCreate(e,!0),this._identifier=u(this.publicKey),this._fingerprint=this._identifier.slice(0,4).readUInt32BE(0)}}),Object.defineProperty(s.prototype,"publicKey",{get:function(){return this._publicKey},set:function(e){r(33===e.length||65===e.length,"Public key must be 33 or 65 bytes."),r(!0===i.publicKeyVerify(e),"Invalid public key"),this._publicKey=i.publicKeyConvert(e,!0),this._identifier=u(this.publicKey),this._fingerprint=this._identifier.slice(0,4).readUInt32BE(0),this._privateKey=null}}),Object.defineProperty(s.prototype,"privateExtendedKey",{get:function(){return this._privateKey?n.encode(b(this,this.versions.private,Buffer.concat([new Buffer([0]),this.privateKey]))):null}}),Object.defineProperty(s.prototype,"publicExtendedKey",{get:function(){return n.encode(b(this,this.versions.public,this.publicKey))}}),s.prototype.derive=function(e){if("m"===e||"M"===e||"m'"===e||"M'"===e)return this;var a=this;return e.split("/").forEach(function(e,t){if(0!==t){var c=e.length>1&&"'"===e[e.length-1],n=parseInt(e,10);r(n<2147483648,"Invalid index"),c&&(n+=2147483648),a=a.deriveChild(n)}else r(e,"m","Invalid path")}),a},s.prototype.deriveChild=function(e){var a,t=e>=2147483648,n=new Buffer(4);if(n.writeUInt32BE(e,0),t){r(this.privateKey,"Could not derive hardened child key");var f=this.privateKey,o=new Buffer([0]);f=Buffer.concat([o,f]),a=Buffer.concat([f,n])}else a=Buffer.concat([this.publicKey,n]);var d=c.createHmac("sha512",this.chainCode).update(a).digest(),b=d.slice(0,32),u=d.slice(32),l=new s(this.versions);if(this.privateKey)try{l.privateKey=i.privateKeyTweakAdd(this.privateKey,b)}catch(a){return this.derive(e+1)}else try{l.publicKey=i.publicKeyTweakAdd(this.publicKey,b,!0)}catch(a){return this.derive(e+1,t)}return l.chainCode=u,l.depth=this.depth+1,l.parentFingerprint=this.fingerprint,l.index=e,l},s.prototype.toJSON=function(){return{xpriv:this.privateExtendedKey,xpub:this.publicExtendedKey}},s.fromMasterSeed=function(e,a){var t=c.createHmac("sha512",f).update(e).digest(),r=t.slice(0,32),n=t.slice(32),i=new s(a);return i.chainCode=n,i.privateKey=r,i},s.fromExtendedKey=function(e,a){var t=new s(a=a||d),c=n.decode(e),i=c.readUInt32BE(0);r(i===a.private||i===a.public,"Version mismatch: does not match private or public"),t.depth=c.readUInt8(4),t.parentFingerprint=c.readUInt32BE(5),t.index=c.readUInt32BE(9),t.chainCode=c.slice(13,45);var f=c.slice(45);return 0===f.readUInt8(0)?(r(i===a.private,"Version mismatch: version does not match private"),t.privateKey=f.slice(1)):(r(i===a.public,"Version mismatch: version does not match public"),t.publicKey=f),t},s.fromJSON=function(e){return s.fromExtendedKey(e.xpriv)},s.HARDENED_OFFSET=2147483648,e.exports=s},function(e,a,t){const r=t(830),c=t(326);function n(){}function i(e){var a=new n;return a._hdkey=e,a}n.fromMasterSeed=function(e){return i(r.fromMasterSeed(e))},n.fromExtendedKey=function(e){return i(r.fromExtendedKey(e))},n.prototype.privateExtendedKey=function(){if(!this._hdkey._privateKey)throw new Error("Private key is not available");return this._hdkey.privateExtendedKey},n.prototype.publicExtendedKey=function(){return this._hdkey.publicExtendedKey},n.prototype.derivePath=function(e){return i(this._hdkey.derive(e))},n.prototype.deriveChild=function(e){return i(this._hdkey.deriveChild(e))},n.prototype.getWallet=function(){return this._hdkey._privateKey?c.fromPrivateKey(this._hdkey._privateKey):c.fromPublicKey(this._hdkey._publicKey,!0)},e.exports=n},function(e,a){e.exports=function(e){for(var a={},t=e.length,r=e.charAt(0),c=0;c<e.length;c++)a[e.charAt(c)]=c;function n(e){if(0===e.length)return[];for(var c=[0],n=0;n<e.length;n++){var i=a[e[n]];if(void 0===i)return;for(var f=0,o=i;f<c.length;++f)o+=c[f]*t,c[f]=255&o,o>>=8;for(;o>0;)c.push(255&o),o>>=8}for(var d=0;e[d]===r&&d<e.length-1;++d)c.push(0);return c.reverse()}return{encode:function(a){if(0===a.length)return"";for(var r=[0],c=0;c<a.length;++c){for(var n=0,i=a[c];n<r.length;++n)i+=r[n]<<8,r[n]=i%t,i=i/t|0;for(;i>0;)r.push(i%t),i=i/t|0}for(var f="",o=0;0===a[o]&&o<a.length-1;++o)f+=e[0];for(var d=r.length-1;d>=0;--d)f+=e[r[d]];return f},decodeUnsafe:n,decode:function(e){var a=n(e);if(a)return a;throw new Error("Non-base"+t+" character")}}}},function(e,a,t){var r=t(832);e.exports=r("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},function(e,a,t){"use strict";var r=t(833),c=t(30);function n(e){var a=c("sha256").update(e).digest();return c("sha256").update(a).digest()}function i(e){var a=e.slice(0,-4),t=e.slice(-4),r=n(a);if(!(t[0]^r[0]|t[1]^r[1]|t[2]^r[2]|t[3]^r[3]))return a}function f(e){var a=r.decodeUnsafe(e);if(a)return i(new Buffer(a))}e.exports={encode:function(e){var a=n(e);return r.encode(Buffer.concat([e,a],e.length+4))},decode:function(e){var a=r.decode(e),t=i(new Buffer(a));if(!t)throw new Error("Invalid checksum");return t},decodeUnsafe:f,decodeRaw:f}},function(e,a,t){var r=t(10).randomBytes;e.exports=function(){return r(16)}},function(e,a,t){for(var r=t(835),c=[],n={},i=0;i<256;i++)c[i]=(i+256).toString(16).substr(1),n[c[i]]=i;function f(e,a){var t=a||0,r=c;return r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+"-"+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]+r[e[t++]]}var o=r(),d=[1|o[0],o[1],o[2],o[3],o[4],o[5]],s=16383&(o[6]<<8|o[7]),b=0,u=0;function l(e,a,t){var c=a&&t||0;"string"==typeof e&&(a="binary"==e?new Array(16):null,e=null);var n=(e=e||{}).random||(e.rng||r)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,a)for(var i=0;i<16;i++)a[c+i]=n[i];return a||f(n)}var p=l;p.v1=function(e,a,t){var r=a&&t||0,c=a||[],n=void 0!==(e=e||{}).clockseq?e.clockseq:s,i=void 0!==e.msecs?e.msecs:(new Date).getTime(),o=void 0!==e.nsecs?e.nsecs:u+1,l=i-b+(o-u)/1e4;if(l<0&&void 0===e.clockseq&&(n=n+1&16383),(l<0||i>b)&&void 0===e.nsecs&&(o=0),o>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");b=i,u=o,s=n;var p=(1e4*(268435455&(i+=122192928e5))+o)%4294967296;c[r++]=p>>>24&255,c[r++]=p>>>16&255,c[r++]=p>>>8&255,c[r++]=255&p;var h=i/4294967296*1e4&268435455;c[r++]=h>>>8&255,c[r++]=255&h,c[r++]=h>>>24&15|16,c[r++]=h>>>16&255,c[r++]=n>>>8|128,c[r++]=255&n;for(var m=e.node||d,g=0;g<6;g++)c[r+g]=m[g];return a||f(c)},p.v4=l,p.parse=function(e,a,t){var r=a&&t||0,c=0;for(a=a||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(e){c<16&&(a[r+c++]=n[e])});c<16;)a[r+c++]=0;return a},p.unparse=f,e.exports=p},function(module,exports,__webpack_require__){(function(__dirname,module){module.exports=function(requested_total_memory){var Module={TOTAL_MEMORY:requested_total_memory||33554432},scrypt_raw=Module;function g(e){throw e}var k=void 0,l=!0,m=null,p=!1,q,s;function aa(){return function(){}}s||(s=eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));var ba={},t;for(t in s)s.hasOwnProperty(t)&&(ba[t]=s[t]);var ca="object"==typeof process&&!0,da="object"==typeof window,ea="function"==typeof importScripts,fa=!da&&!ca&&!ea,oa;if(ca){s.print=function(e){process.stdout.write(e+"\n")},s.printErr=function(e){process.stderr.write(e+"\n")};var ga=__webpack_require__(15),ha=__webpack_require__(2);s.read=function(e,a){e=ha.normalize(e);var t=ga.readFileSync(e);return!t&&e!=ha.resolve(e)&&(e=path.join(__dirname,"..","src",e),t=ga.readFileSync(e)),t&&!a&&(t=t.toString()),t},s.readBinary=function(e){return s.read(e,l)},s.load=function(e){ia(read(e))},s.arguments=process.argv.slice(2),module.ee=s}else fa?(s.print=print,"undefined"!=typeof printErr&&(s.printErr=printErr),s.read=read,s.readBinary=function(e){return read(e,"binary")},"undefined"!=typeof scriptArgs?s.arguments=scriptArgs:void 0!==arguments&&(s.arguments=arguments),this.Module=s):da||ea?(s.read=function(e){var a=new XMLHttpRequest;return a.open("GET",e,p),a.send(m),a.responseText},void 0!==arguments&&(s.arguments=arguments),da?(s.print=function(e){console.log(e)},s.printErr=function(e){console.log(e)},this.Module=s):ea&&(s.print=aa(),s.load=importScripts)):g("Unknown runtime environment. Where are we?");function ia(e){eval.call(m,e)}for(t in"undefined"==!s.load&&s.read&&(s.load=function(e){ia(s.read(e))}),s.print||(s.print=aa()),s.printErr||(s.printErr=s.print),s.arguments||(s.arguments=[]),s.print=s.print,s.P=s.printErr,s.preRun=[],s.postRun=[],ba)ba.hasOwnProperty(t)&&(s[t]=ba[t]);function ja(){return u}function ka(e){u=e}function la(e){if(1==ma)return 1;var a={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%double":8}["%"+e];return a||("*"==e.charAt(e.length-1)?a=ma:"i"==e[0]&&(w(0==(e=parseInt(e.substr(1)))%8),a=e/8)),a}function na(e,a,t){t&&t.length?(t.splice||(t=Array.prototype.slice.call(t)),t.splice(0,0,a),s["dynCall_"+e].apply(m,t)):s["dynCall_"+e].call(m,a)}function pa(){var e=[],a=0;this.oa=function(t){if(t&=255,a&&(e.push(t),a--),0==e.length)return 128>t?String.fromCharCode(t):(e.push(t),a=191<t&&224>t?1:2,"");if(0<a)return"";t=e[0];var r=e[1],c=e[2];t=191<t&&224>t?String.fromCharCode((31&t)<<6|63&r):String.fromCharCode((15&t)<<12|(63&r)<<6|63&c);return e.length=0,t},this.yb=function(e){e=unescape(encodeURIComponent(e));for(var a=[],t=0;t<e.length;t++)a.push(e.charCodeAt(t));return a}}function qa(e){var a=u;return u=(u=u+e|0)+7>>3<<3,a}function ra(e){var a=sa;return sa=(sa=sa+e|0)+7>>3<<3,a}function ua(e){var a=z;return(z=(z=z+e|0)+7>>3<<3)>=va&&wa("Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs."),a}function xa(e,a){return Math.ceil(e/(a||8))*(a||8)}var ma=4,ya={},za=p,Aa;function w(e,a){e||wa("Assertion failed: "+a)}function Ca(a){try{var b=s["_"+a];b||(b=eval("_"+a))}catch(e){}return w(b,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)"),b}function Ba(e,a,t,r){var c=0,n=0;r=r?r.map(function(e){return function(e,a){if("string"==a){if(e===m||e===k||0===e)return 0;c||(c=ja());var t=qa(e.length+1);return Da(e,t),t}return"array"==a?(c||(c=ja()),Ea(e,t=qa(e.length)),t):e}(e,t[n++])}):[];return e=e.apply(m,r),"string"==a?a=Fa(e):(w("array"!=a),a=e),c&&ka(c),a}function Ga(e,a,t){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":A[e]=a;break;case"i16":Ha[e>>1]=a;break;case"i32":B[e>>2]=a;break;case"i64":Aa=[a>>>0,(0|Math.min(+Math.floor(a/4294967296),4294967295))>>>0],B[e>>2]=Aa[0],B[e+4>>2]=Aa[1];break;case"float":Ia[e>>2]=a;break;case"double":Ja[e>>3]=a;break;default:wa("invalid type for setValue: "+t)}}s.ccall=function(e,a,t,r){return Ba(Ca(e),a,t,r)},s.cwrap=function(e,a,t){var r=Ca(e);return function(){return Ba(r,a,t,Array.prototype.slice.call(arguments))}},s.setValue=Ga,s.getValue=function(e,a){switch("*"===(a=a||"i8").charAt(a.length-1)&&(a="i32"),a){case"i1":case"i8":return A[e];case"i16":return Ha[e>>1];case"i32":case"i64":return B[e>>2];case"float":return Ia[e>>2];case"double":return Ja[e>>3];default:wa("invalid type for setValue: "+a)}return m};var Ka=0,La=1,E=2,Na=4;function F(e,a,t,r){var c,n;"number"==typeof e?(c=l,n=e):(c=p,n=e.length);var i="string"==typeof a?a:m;t=t==Na?r:[Oa,qa,ra,ua][t===k?E:t](Math.max(n,i?1:a.length));if(c){for(r=t,w(0==(3&t)),e=t+(-4&n);r<e;r+=4)B[r>>2]=0;for(e=t+n;r<e;)A[0|r++]=0;return t}if("i8"===i)return e.subarray||e.slice?G.set(e,t):G.set(new Uint8Array(e),t),t;var f,o;for(r=0;r<n;){var d=e[r];"function"==typeof d&&(d=ya.fe(d)),0===(c=i||a[r])?r++:("i64"==c&&(c="i32"),Ga(t+r,d,c),o!==c&&(f=la(c),o=c),r+=f)}return t}function Fa(e,a){for(var t,r=p,c=0;;){if(128<=(t=G[e+c|0]))r=l;else if(0==t&&!a)break;if(c++,a&&c==a)break}a||(a=c);var n="";if(!r){for(;0<a;)t=String.fromCharCode.apply(String,G.subarray(e,e+Math.min(a,1024))),n=n?n+t:t,e+=1024,a-=1024;return n}for(r=new pa,c=0;c<a;c++)t=G[e+c|0],n+=r.oa(t);return n}s.ALLOC_NORMAL=Ka,s.ALLOC_STACK=La,s.ALLOC_STATIC=E,s.ALLOC_DYNAMIC=3,s.ALLOC_NONE=Na,s.allocate=F,s.Pointer_stringify=Fa;var A,G,Ha,Pa,B,Qa,Ia,Ja,Ra=0,sa=0,Sa=0,u=0,Ta=0,Ua=0,z=0,va=s.TOTAL_MEMORY||33554432;w(!!(Int32Array&&Float64Array&&new Int32Array(1).subarray&&new Int32Array(1).set),"Cannot fallback to non-typed array case: Code is too specialized");var I=new ArrayBuffer(va);function Va(e){for(;0<e.length;){var a=e.shift();if("function"==typeof a)a();else{var t=a.V;"number"==typeof t?a.ha===k?na("v",t):na("vi",t,[a.ha]):t(a.ha===k?m:a.ha)}}}A=new Int8Array(I),Ha=new Int16Array(I),B=new Int32Array(I),G=new Uint8Array(I),Pa=new Uint16Array(I),Qa=new Uint32Array(I),Ia=new Float32Array(I),Ja=new Float64Array(I),B[0]=255,w(255===G[0]&&0===G[3],"Typed arrays 2 must be run on a little-endian system"),s.HEAP=k,s.HEAP8=A,s.HEAP16=Ha,s.HEAP32=B,s.HEAPU8=G,s.HEAPU16=Pa,s.HEAPU32=Qa,s.HEAPF32=Ia,s.HEAPF64=Ja;var Wa=[],Xa=[],Ya=[],Za=[],$a=[],ab=p;function bb(e){Wa.unshift(e)}function cb(e){$a.unshift(e)}function J(e,a,t){return e=(new pa).yb(e),t&&(e.length=t),a||e.push(0),e}function Da(e,a,t){for(e=J(e,t),t=0;t<e.length;)A[a+t|0]=e[t],t+=1}function Ea(e,a){for(var t=0;t<e.length;t++)A[a+t|0]=e[t]}function db(e,a){return 0<=e?e:32>=a?2*Math.abs(1<<a-1)+e:Math.pow(2,a)+e}function eb(e,a){if(0>=e)return e;var t=32>=a?Math.abs(1<<a-1):Math.pow(2,a-1);return e>=t&&(32>=a||e>t)&&(e=-2*t+e),e}s.addOnPreRun=s.Vd=bb,s.addOnInit=s.Sd=function(e){Xa.unshift(e)},s.addOnPreMain=s.Ud=function(e){Ya.unshift(e)},s.addOnExit=s.Rd=function(e){Za.unshift(e)},s.addOnPostRun=s.Td=cb,s.intArrayFromString=J,s.intArrayToString=function(e){for(var a=[],t=0;t<e.length;t++){var r=e[t];255<r&&(r&=255),a.push(String.fromCharCode(r))}return a.join("")},s.writeStringToMemory=Da,s.writeArrayToMemory=Ea,Math.imul||(Math.imul=function(e,a){var t=65535&e,r=65535&a;return t*r+((e>>>16)*r+t*(a>>>16)<<16)|0}),Math.ie=Math.imul;var L=0,fb={},gb=p,hb=m,nb,ob,pb;function ib(e){L++,s.monitorRunDependencies&&s.monitorRunDependencies(L),e?(w(!fb[e]),fb[e]=1):s.P("warning: run dependency added without ID")}function jb(e){L--,s.monitorRunDependencies&&s.monitorRunDependencies(L),e?(w(fb[e]),delete fb[e]):s.P("warning: run dependency removed without ID"),0==L&&(hb!==m&&(clearInterval(hb),hb=m),!gb&&kb&&lb())}s.addRunDependency=ib,s.removeRunDependency=jb,s.preloadedImages={},s.preloadedAudios={},Ra=8,sa=Ra+1312,Xa.push({V:function(){mb()}}),nb=nb=F([0,0,0,0,0,0,0,0],"i8",E),ob=ob=F([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",E),pb=pb=F([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",E),F([111,112,116,105,111,110,32,114,101,113,117,105,114,101,115,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,115,0,0,0,0,0,0,0,111,112,116,105,111,110,32,114,101,113,117,105,114,101,115,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,99,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,89,64,0,0,0,0,0,136,195,64,0,0,0,0,132,215,151,65,0,128,224,55,121,195,65,67,23,110,5,181,181,184,147,70,245,249,63,233,3,79,56,77,50,29,48,249,72,119,130,90,60,191,115,127,221,79,21,117,56,3,0,0,0,0,0,0,63,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,255,255,255,255,0,0,0,0,111,112,116,105,111,110,32,100,111,101,115,110,39,116,32,116,97,107,101,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,46,42,115,0,117,110,107,110,111,119,110,32,111,112,116,105,111,110,32,45,45,32,37,115,0,0,0,0,117,110,107,110,111,119,110,32,111,112,116,105,111,110,32,45,45,32,37,99,0,0,0,0,255,255,255,255,0,0,0,0,97,109,98,105,103,117,111,117,115,32,111,112,116,105,111,110,32,45,45,32,37,46,42,115,0,0,0,0,0,0,0,0,37,115,58,32,0,0,0,0,80,79,83,73,88,76,89,95,67,79,82,82,69,67,84,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,37,115,58,32,0,0,0,0,37,115,10,0,0,0,0,0,37,115,10,0,0,0,0,0,105,110,32,117,115,101,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,37,115,58,32,0,0,0,0,37,115,58,32,0,0,0,0,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,0,0,0,58,32,0,0,0,0,0,0,58,32,0,0,0,0,0,0,115,121,115,116,101,109,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,109,97,120,32,115,121,115,116,101,109,32,98,121,116,101,115,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,0,0,0,0,176,2,0,0,6,0,0,0,10,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,2,0,0,6,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,57,101,120,99,101,112,116,105,111,110,0,0,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,83,116,50,48,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,0,0,0,0,0,0,0,0,0,0,0,104,2,0,0,0,0,0,0,120,2,0,0,168,2,0,0,0,0,0,0,0,0,0,0,136,2,0,0,176,2,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",Na,8);var qb=xa(F(12,"i8",E),8);w(0==qb%8);var rb=0;function M(e){return B[rb>>2]=e}s._memcpy=sb,s._memset=tb;var N={L:1,ca:2,Bd:3,sc:4,I:5,za:6,Jb:7,Sc:8,$:9,Zb:10,ua:11,Ld:11,$a:12,Ya:13,kc:14,ed:15,Wb:16,va:17,Md:18,wa:19,gd:20,aa:21,A:22,Mc:23,Za:24,ld:25,Id:26,lc:27,ad:28,da:29,yd:30,Fc:31,rd:32,hc:33,ab:34,Wc:35,pc:36,$b:37,vc:38,wc:39,xc:40,Ec:41,Jd:42,Qc:43,uc:44,ec:45,Tc:46,Pb:50,Sb:51,Nd:52,Oc:53,Tb:54,Ub:55,fc:56,Vb:57,cd:60,Rc:61,Fd:62,bd:63,Xc:64,Yc:65,xd:66,Uc:67,Mb:68,Cd:69,ac:70,td:71,Hc:74,yc:75,ic:76,Rb:77,mc:79,md:80,Qb:81,wd:82,zc:83,Ac:84,Dc:85,Cc:86,Bc:87,dd:88,Nc:89,ya:90,Ic:91,ba:92,nd:95,qd:96,dc:104,Pc:105,Nb:106,vd:107,jd:108,Zc:109,zd:110,cc:111,Kb:112,bc:113,Lc:114,Jc:115,Gd:116,nc:117,oc:118,rc:119,Ob:120,gc:121,Gc:122,ud:123,Ad:124,Lb:125,Kc:126,tc:127,fd:128,Hd:129,sd:130,Kd:131,jc:132,Dd:133,kd:134,Vc:135,$c:136,Yb:137,qc:138,od:139,Xb:140,hd:141,pd:142,Ed:143},ub={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"No message of desired type",36:"Identifier removed",37:"Channel number out of range",38:"Level 2 not synchronized",39:"Level 3 halted",40:"Level 3 reset",41:"Link number out of range",42:"Protocol driver not attached",43:"No CSI structure available",44:"Level 2 halted",45:"Deadlock condition",46:"No record locks available",50:"Invalid exchange",51:"Invalid request descriptor",52:"Exchange full",53:"No anode",54:"Invalid request code",55:"Invalid slot",56:"File locking deadlock error",57:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",74:"Multihop attempted",75:"Inode is remote (not really error)",76:"Cross mount point (not really error)",77:"Trying to read unreadable message",79:"Inappropriate file type or format",80:"Given log. name not unique",81:"f.d. invalid for this operation",82:"Remote address changed",83:"Can\t access a needed shared lib",84:"Accessing a corrupted shared lib",85:".lib section in a.out corrupted",86:"Attempting to link in too many libs",87:"Attempting to exec a shared library",88:"Function not implemented",89:"No more files",90:"Directory not empty",91:"File or path name too long",92:"Too many symbolic links",95:"Operation not supported on transport endpoint",96:"Protocol family not supported",104:"Connection reset by peer",105:"No buffer space available",106:"Address family not supported by protocol family",107:"Protocol wrong type for socket",108:"Socket operation on non-socket",109:"Protocol not available",110:"Can't send after socket shutdown",111:"Connection refused",112:"Address already in use",113:"Connection aborted",114:"Network is unreachable",115:"Network interface is not configured",116:"Connection timed out",117:"Host is down",118:"Host is unreachable",119:"Connection already in progress",120:"Socket already connected",121:"Destination address required",122:"Message too long",123:"Unknown protocol",124:"Socket type not supported",125:"Address not available",126:"ENETRESET",127:"Socket is already connected",128:"Socket is not connected",129:"TOOMANYREFS",130:"EPROCLIM",131:"EUSERS",132:"EDQUOT",133:"ESTALE",134:"Not supported",135:"No medium (in tape drive)",136:"No such host or network path",137:"Filename exists with different case",138:"EILSEQ",139:"Value too large for defined data type",140:"Operation canceled",141:"State not recoverable",142:"Previous owner died",143:"Streams pipe error"};function vb(e,a,t){var r=O(e,{parent:l}).d,c=xb(r,e="/"===e?"/":wb(e)[2]);return c&&g(new Q(c)),r.l.Ta||g(new Q(N.L)),r.l.Ta(r,e,a,t)}function yb(e,a){return vb(e,a=4095&a|32768,0)}function zb(e,a){return vb(e,a=1023&a|16384,0)}function Ab(e,a,t){return vb(e,8192|a,t)}function Bb(e,a){var t=O(a,{parent:l}).d,r="/"===a?"/":wb(a)[2],c=xb(t,r);return c&&g(new Q(c)),t.l.Wa||g(new Q(N.L)),t.l.Wa(t,r,e)}function Cb(e,a){var t;(t="string"==typeof e?O(e,{N:l}).d:e).l.Y||g(new Q(N.L)),t.l.Y(t,{mode:4095&a|-4096&t.mode,timestamp:Date.now()})}function Db(e,a){var t,r,c;e=Eb(e);"string"==typeof a?void 0===(r=Fb[a])&&g(Error("Unknown file open mode: "+a)):r=a,t=512&(a=r)?4095&t|32768:0;try{var n=O(e,{N:!(65536&a)});c=n.d,e=n.path}catch(e){}512&a&&(c?2048&a&&g(new Q(N.va)):c=vb(e,t,0)),c||g(new Q(N.ca)),8192==(61440&c.mode)&&(a&=-1025),c?40960==(61440&c.mode)?t=N.ba:16384==(61440&c.mode)&&(0!=(3&a)||1024&a)?t=N.aa:(t=["r","w","rw"][3&a],1024&a&&(t+="w"),t=Gb(c,t)):t=N.ca,t&&g(new Q(t)),1024&a&&((t="string"==typeof(t=c)?O(t,{N:l}).d:t).l.Y||g(new Q(N.L)),16384==(61440&t.mode)&&g(new Q(N.aa)),32768!=(61440&t.mode)&&g(new Q(N.A)),(n=Gb(t,"w"))&&g(new Q(n)),t.l.Y(t,{size:0,timestamp:Date.now()}));var i,f={path:e,d:c,M:a,seekable:l,position:0,e:c.e,Gb:[],error:p};e:{for(c=k||4096,t=k||1;t<=c;t++)if(!R[t]){i=t;break e}g(new Q(N.Za))}return f.s=i,Object.defineProperty(f,"object",{get:function(){return f.d},set:function(e){f.d=e}}),Object.defineProperty(f,"isRead",{get:function(){return 1!=(3&f.M)}}),Object.defineProperty(f,"isWrite",{get:function(){return 0!=(3&f.M)}}),Object.defineProperty(f,"isAppend",{get:function(){return 8&f.M}}),R[i]=f,f.e.open&&f.e.open(f),f}function Hb(e){try{e.e.close&&e.e.close(e)}catch(e){g(e)}finally{R[e.s]=m}}function Ib(e,a,t,r,c){(0>r||0>c)&&g(new Q(N.A)),0==(3&e.M)&&g(new Q(N.$)),16384==(61440&e.d.mode)&&g(new Q(N.aa)),e.e.write||g(new Q(N.A));var n=l;return void 0===c?(c=e.position,n=p):e.seekable||g(new Q(N.da)),8&e.M&&((!e.seekable||!e.e.na)&&g(new Q(N.da)),e.e.na(e,0,2)),a=e.e.write(e,a,t,r,c),n||(e.position+=a),a}function wb(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)}function Jb(e,a){for(var t=0,r=e.length-1;0<=r;r--){var c=e[r];"."===c?e.splice(r,1):".."===c?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(a)for(;t--;t)e.unshift("..");return e}function Eb(e){var a="/"===e.charAt(0),t="/"===e.substr(-1);return!(e=Jb(e.split("/").filter(function(e){return!!e}),!a).join("/"))&&!a&&(e="."),e&&t&&(e+="/"),(a?"/":"")+e}function S(){return Eb(Array.prototype.slice.call(arguments,0).filter(function(e){return"string"!=typeof e&&g(new TypeError("Arguments to path.join must be strings")),e}).join("/"))}function Kb(){for(var e="",a=p,t=arguments.length-1;-1<=t&&!a;t--){var r=0<=t?arguments[t]:"/";"string"!=typeof r&&g(new TypeError("Arguments to path.resolve must be strings")),r&&(e=r+"/"+e,a="/"===r.charAt(0))}return e=Jb(e.split("/").filter(function(e){return!!e}),!a).join("/"),(a?"/":"")+e||"."}var Lb=[];function Mb(e,a){Lb[e]={input:[],H:[],O:a},Nb[e]={e:Ob}}var Ob={open:function(e){Pb||(Pb=new pa);var a=Lb[e.d.X];a||g(new Q(N.wa)),e.q=a,e.seekable=p},close:function(e){e.q.H.length&&e.q.O.W(e.q,10)},Q:function(e,a,t,r){(!e.q||!e.q.O.Na)&&g(new Q(N.za));for(var c=0,n=0;n<r;n++){var i;try{i=e.q.O.Na(e.q)}catch(e){g(new Q(N.I))}if(i===k&&0===c&&g(new Q(N.ua)),i===m||i===k)break;c++,a[t+n]=i}return c&&(e.d.timestamp=Date.now()),c},write:function(e,a,t,r){(!e.q||!e.q.O.W)&&g(new Q(N.za));for(var c=0;c<r;c++)try{e.q.O.W(e.q,a[t+c])}catch(e){g(new Q(N.I))}return r&&(e.d.timestamp=Date.now()),c}},Pb,T={z:function(){return T.ka(m,"/",16895,0)},ka:function(e,a,t,r){return(24576==(61440&t)||4096==(61440&t))&&g(new Q(N.L)),(t=Qb(e,a,t,r)).l=T.l,16384==(61440&t.mode)?(t.e=T.e,t.g={}):32768==(61440&t.mode)?(t.e=T.e,t.g=[]):40960==(61440&t.mode)?t.e=T.e:8192==(61440&t.mode)&&(t.e=Rb),t.timestamp=Date.now(),e&&(e.g[a]=t),t},l:{ge:function(e){var a={};return a.ce=8192==(61440&e.mode)?e.id:1,a.je=e.id,a.mode=e.mode,a.pe=1,a.uid=0,a.he=0,a.X=e.X,a.size=16384==(61440&e.mode)?4096:32768==(61440&e.mode)?e.g.length:40960==(61440&e.mode)?e.link.length:0,a.Yd=new Date(e.timestamp),a.oe=new Date(e.timestamp),a.ae=new Date(e.timestamp),a.ib=4096,a.Zd=Math.ceil(a.size/a.ib),a},Y:function(e,a){if(a.mode!==k&&(e.mode=a.mode),a.timestamp!==k&&(e.timestamp=a.timestamp),a.size!==k){var t=e.g;if(a.size<t.length)t.length=a.size;else for(;a.size>t.length;)t.push(0)}},tb:function(){g(new Q(N.ca))},Ta:function(e,a,t,r){return T.ka(e,a,t,r)},rename:function(e,a,t){if(16384==(61440&e.mode)){var r;try{r=Sb(a,t)}catch(e){}if(r)for(var c in r.g)g(new Q(N.ya))}delete e.parent.g[e.name],e.name=t,a.g[t]=e},ze:function(e,a){delete e.g[a]},ve:function(e,a){var t,r=Sb(e,a);for(t in r.g)g(new Q(N.ya));delete e.g[a]},Wa:function(e,a,t){return(e=T.ka(e,a,41471,0)).link=t,e},Va:function(e){return 40960!=(61440&e.mode)&&g(new Q(N.A)),e.link}},e:{open:function(e){if(16384==(61440&e.d.mode)){var a,t=[".",".."];for(a in e.d.g)e.d.g.hasOwnProperty(a)&&t.push(a);e.lb=t}},Q:function(e,a,t,r,c){if(e=e.d.g,r=Math.min(e.length-c,r),e.subarray)a.set(e.subarray(c,c+r),t);else for(var n=0;n<r;n++)a[t+n]=e[c+n];return r},write:function(e,a,t,r,c){for(var n=e.d.g;n.length<c;)n.push(0);for(var i=0;i<r;i++)n[c+i]=a[t+i];return e.d.timestamp=Date.now(),r},na:function(e,a,t){return 1===t?a+=e.position:2===t&&32768==(61440&e.d.mode)&&(a+=e.d.g.length),0>a&&g(new Q(N.A)),e.Gb=[],e.position=a},ue:function(e){return e.lb},Wd:function(e,a,t){for(e=e.d.g,a+=t;a>e.length;)e.push(0)},ne:function(e,a,t,r,c,n,i){return 32768!=(61440&e.d.mode)&&g(new Q(N.wa)),e=e.d.g,2&i?((0<c||c+r<e.length)&&(e=e.subarray?e.subarray(c,c+r):Array.prototype.slice.call(e,c,c+r)),c=l,(r=Oa(r))||g(new Q(N.$a)),a.set(e,r)):(w(e.buffer===a||e.buffer===a.buffer),c=p,r=e.byteOffset),{te:r,Xd:c}}}},Tb=F(1,"i32*",E),Ub=F(1,"i32*",E);nb=F(1,"i32*",E);var Vb=m,Nb=[m],R=[m],Wb=1,Xb=[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],Yb=l;function Q(e){for(var a in this.mb=e,N)if(N[a]===e){this.code=a;break}this.message=ub[e]}function Zb(e){e instanceof Q||g(e+" : "+Error().stack),M(e.mb)}function $b(e,a){for(var t=0,r=0;r<a.length;r++)t=(t<<5)-t+a.charCodeAt(r)|0;return(e+t)%Xb.length}function Sb(e,a){var t=Gb(e,"x");for(t&&g(new Q(t)),t=Xb[$b(e.id,a)];t;t=t.wb)if(t.parent.id===e.id&&t.name===a)return t;return e.l.tb(e,a)}function Qb(e,a,t,r){var c={id:Wb++,name:a,mode:t,l:{},e:{},X:r,parent:m,z:m};return e||(e=c),c.parent=e,c.z=e.z,Object.defineProperty(c,"read",{get:function(){return 365==(365&c.mode)},set:function(e){e?c.mode|=365:c.mode&=-366}}),Object.defineProperty(c,"write",{get:function(){return 146==(146&c.mode)},set:function(e){e?c.mode|=146:c.mode&=-147}}),e=$b(c.parent.id,c.name),c.wb=Xb[e],Xb[e]=c}function O(e,a){e=Kb("/",e),8<(a=a||{pa:0}).pa&&g(new Q(N.ba));for(var t=Jb(e.split("/").filter(function(e){return!!e}),p),r=Vb,c="/",n=0;n<t.length;n++){var i=n===t.length-1;if(i&&a.parent)break;if(r=Sb(r,t[n]),c=S(c,t[n]),r.ub&&(r=r.z.root),!i||a.N)for(i=0;40960==(61440&r.mode);){(r=O(c,{N:p}).d).l.Va||g(new Q(N.A));r=r.l.Va(r);var f=Kb,o=(c=(o=wb(c))[0],o[1]);c||o?(o&&(o=o.substr(0,o.length-1)),c+=o):c=".",r=O(c=f(c,r),{pa:a.pa}).d,40<i++&&g(new Q(N.ba))}}return{path:c,d:r}}function ac(e){for(var a;;){if(e===e.parent)return a?S(e.z.Ua,a):e.z.Ua;a=a?S(e.name,a):e.name,e=e.parent}}var Fb={r:0,rs:8192,"r+":2,w:1537,wx:3585,xw:3585,"w+":1538,"wx+":3586,"xw+":3586,a:521,ax:2569,xa:2569,"a+":522,"ax+":2570,"xa+":2570};function Gb(e,a){return Yb?0:(-1===a.indexOf("r")||292&e.mode)&&(-1===a.indexOf("w")||146&e.mode)&&(-1===a.indexOf("x")||73&e.mode)?0:N.Ya}function xb(e,a){try{return Sb(e,a),N.va}catch(e){}return Gb(e,"wx")}var Rb={open:function(e){e.e=Nb[e.d.X].e,e.e.open&&e.e.open(e)},na:function(){g(new Q(N.da))}},bc;function cc(e,a){var t=0;return e&&(t|=365),a&&(t|=146),t}function dc(e,a,t,r,c){if(c=yb(e=S("string"==typeof e?e:ac(e),a),r=cc(r,c)),t){if("string"==typeof t){a=Array(t.length);for(var n=0,i=t.length;n<i;++n)a[n]=t.charCodeAt(n);t=a}Cb(e,146|r),Ib(a=Db(e,"w"),t,0,t.length,0),Hb(a),Cb(e,r)}return c}function ec(e,a,t,r){return e=S("string"==typeof e?e:ac(e),a),ec.Sa||(ec.Sa=64),a=ec.Sa++<<8|0,Nb[a]={e:{open:function(e){e.seekable=p},close:function(){r&&r.buffer&&r.buffer.length&&r(10)},Q:function(e,a,r,c){for(var n=0,i=0;i<c;i++){var f;try{f=t()}catch(e){g(new Q(N.I))}if(f===k&&0===n&&g(new Q(N.ua)),f===m||f===k)break;n++,a[r+i]=f}return n&&(e.d.timestamp=Date.now()),n},write:function(e,a,t,c){for(var n=0;n<c;n++)try{r(a[t+n])}catch(e){g(new Q(N.I))}return c&&(e.d.timestamp=Date.now()),n}}},Ab(e,t&&r?511:t?219:365,a)}function fc(e,a,t){return(e=R[e])?(e.sender(G.subarray(a,a+t)),t):-1}function gc(e,a,t){var r=R[e];if(!r)return M(N.$),-1;if(r&&"socket"in r)return fc(e,a,t);try{return Ib(r,A,a,t)}catch(e){return Zb(e),-1}}function hc(e,a,t,r){return 0==(t*=a)?0:-1==(e=gc(r,e,t))?((a=R[r])&&(a.error=l),0):Math.floor(e/a)}function jc(e){return 0>e||0===e&&-1/0==1/e}function kc(e,a){function t(e){var t;return"double"===e?t=Ja[a+i>>3]:"i64"==e?(t=[B[a+i>>2],B[a+(i+8)>>2]],i+=8):(e="i32",t=B[a+i>>2]),i+=Math.max(Math.max(la(e),ma),8),t}for(var r,c,n=e,i=0,f=[];;){var o=n;if(0===(r=A[n]))break;if(c=A[n+1|0],37==r){var d=p,s=p,b=p,u=p;e:for(;;){switch(c){case 43:d=l;break;case 45:s=l;break;case 35:b=l;break;case 48:if(u)break e;u=l;break;default:break e}c=A[++n+1|0]}var h=0;if(42==c)h=t("i32"),c=A[++n+1|0];else for(;48<=c&&57>=c;)h=10*h+(c-48),c=A[++n+1|0];var g,v=p;if(46==c){var y=0;v=l;if(42==(c=A[++n+1|0]))y=t("i32"),n++;else for(;!(48>(c=A[n+1|0])||57<c);)y=10*y+(c-48),n++;c=A[n+1|0]}else y=6;switch(String.fromCharCode(c)){case"h":104==(c=A[n+2|0])?(n++,g=1):g=2;break;case"l":108==(c=A[n+2|0])?(n++,g=8):g=4;break;case"L":case"q":case"j":g=8;break;case"z":case"t":case"I":g=4;break;default:g=m}switch(g&&n++,c=A[n+1|0],String.fromCharCode(c)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":o=100==c||105==c;var _,w=r=t("i"+8*(g=g||4));8==g&&(r=117==c?+(r[0]>>>0)+4294967296*+(r[1]>>>0):+(r[0]>>>0)+4294967296*+(0|r[1])),4>=g&&(r=(o?eb:db)(r&Math.pow(256,g)-1,8*g));var k=Math.abs(r);o="";if(100==c||105==c)_=8==g&&lc?lc.stringify(w[0],w[1],m):eb(r,8*g).toString(10);else if(117==c)_=8==g&&lc?lc.stringify(w[0],w[1],l):db(r,8*g).toString(10),r=Math.abs(r);else if(111==c)_=(b?"0":"")+k.toString(8);else if(120==c||88==c){if(o=b&&0!=r?"0x":"",8==g&&lc)if(w[1]){for(_=(w[1]>>>0).toString(16),b=(w[0]>>>0).toString(16);8>b.length;)b="0"+b;_+=b}else _=(w[0]>>>0).toString(16);else if(0>r){for(r=-r,_=(k-1).toString(16),w=[],b=0;b<_.length;b++)w.push((15-parseInt(_[b],16)).toString(16));for(_=w.join("");_.length<2*g;)_="f"+_}else _=k.toString(16);88==c&&(o=o.toUpperCase(),_=_.toUpperCase())}else 112==c&&(0===k?_="(nil)":(o="0x",_=k.toString(16)));if(v)for(;_.length<y;)_="0"+_;for(d&&(o=0>r?"-"+o:"+"+o);o.length+_.length<h;)s?_+=" ":u?_="0"+_:o=" "+o;(_=o+_).split("").forEach(function(e){f.push(e.charCodeAt(0))});break;case"f":case"F":case"e":case"E":case"g":case"G":if(r=t("double"),isNaN(r))_="nan",u=p;else if(isFinite(r)){if(v=p,g=Math.min(y,20),103!=c&&71!=c||(v=l,(y=y||1)>(g=parseInt(r.toExponential(g).split("e")[1],10))&&-4<=g?(c=(103==c?"f":"F").charCodeAt(0),y-=g+1):(c=(103==c?"e":"E").charCodeAt(0),y--),g=Math.min(y,20)),101==c||69==c?(_=r.toExponential(g),/[eE][-+]\d$/.test(_)&&(_=_.slice(0,-1)+"0"+_.slice(-1))):102!=c&&70!=c||(_=r.toFixed(g),0===r&&jc(r)&&(_="-"+_)),o=_.split("e"),v&&!b)for(;1<o[0].length&&-1!=o[0].indexOf(".")&&("0"==o[0].slice(-1)||"."==o[0].slice(-1));)o[0]=o[0].slice(0,-1);else for(b&&-1==_.indexOf(".")&&(o[0]+=".");y>g++;)o[0]+="0";_=o[0]+(1<o.length?"e"+o[1]:""),69==c&&(_=_.toUpperCase()),d&&0<=r&&(_="+"+_)}else _=(0>r?"-":"")+"inf",u=p;for(;_.length<h;)_=s?_+" ":!u||"-"!=_[0]&&"+"!=_[0]?(u?"0":" ")+_:_[0]+"0"+_.slice(1);97>c&&(_=_.toUpperCase()),_.split("").forEach(function(e){f.push(e.charCodeAt(0))});break;case"s":if(u=(d=t("i8*"))?ic(d):6,v&&(u=Math.min(u,y)),!s)for(;u<h--;)f.push(32);if(d)for(b=0;b<u;b++)f.push(G[0|d++]);else f=f.concat(J("(null)".substr(0,u),l));if(s)for(;u<h--;)f.push(32);break;case"c":for(s&&f.push(t("i8"));0<--h;)f.push(32);s||f.push(t("i8"));break;case"n":s=t("i32*"),B[s>>2]=f.length;break;case"%":f.push(r);break;default:for(b=o;b<n+2;b++)f.push(A[b])}n+=2}else f.push(r),n+=1}return f}function mc(e,a,t){return t=kc(a,t),a=ja(),e=hc(F(t,"i8",La),1,t.length,e),ka(a),e}function nc(e){nc.ia||(z=z+4095>>12<<12,nc.ia=l,w(ua),nc.hb=ua,ua=function(){wa("cannot dynamically allocate, sbrk now has control")});var a=z;return 0!=e&&nc.hb(e),a}function U(){return B[U.m>>2]}function oc(){return!!oc.ta}function pc(e){var a=p;try{e==__ZTIi&&(a=l)}catch(e){}try{e==__ZTIj&&(a=l)}catch(e){}try{e==__ZTIl&&(a=l)}catch(e){}try{e==__ZTIm&&(a=l)}catch(e){}try{e==__ZTIx&&(a=l)}catch(e){}try{e==__ZTIy&&(a=l)}catch(e){}try{e==__ZTIf&&(a=l)}catch(e){}try{e==__ZTId&&(a=l)}catch(e){}try{e==__ZTIe&&(a=l)}catch(e){}try{e==__ZTIc&&(a=l)}catch(e){}try{e==__ZTIa&&(a=l)}catch(e){}try{e==__ZTIh&&(a=l)}catch(e){}try{e==__ZTIs&&(a=l)}catch(e){}try{e==__ZTIt&&(a=l)}catch(e){}return a}function qc(e,a,t){if(0==t)return p;if(0==a||a==e)return l;switch(pc(a)?a:B[B[a>>2]-8>>2]){case 0:return 0==B[B[e>>2]-8>>2]?qc(B[e+8>>2],B[a+8>>2],t):p;case 1:return p;case 2:return qc(e,B[a+8>>2],t);default:return p}}function rc(e,a,t){if(!rc.sb){try{B[__ZTVN10__cxxabiv119__pointer_type_infoE>>2]=0}catch(e){}try{B[pb>>2]=1}catch(e){}try{B[ob>>2]=2}catch(e){}rc.sb=l}B[U.m>>2]=e,B[U.m+4>>2]=a,B[U.m+8>>2]=t,"uncaught_exception"in oc?oc.ta++:oc.ta=1,g(e+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.")}function sc(e){try{return tc(e)}catch(e){}}function uc(){if(uc.Bb)uc.Bb=p;else{V.setThrew(0),B[U.m+4>>2]=0;var e=B[U.m>>2],a=B[U.m+8>>2];a&&(na("vi",a,[e]),B[U.m+8>>2]=0),e&&(sc(e),B[U.m>>2]=0)}}s._strlen=ic;var vc=F(1,"i32*",E);function wc(e){var a,t;wc.ia?(t=B[vc>>2],a=B[t>>2]):(wc.ia=l,W.USER="root",W.PATH="/",W.PWD="/",W.HOME="/home/emscripten",W.LANG="en_US.UTF-8",W._="./this.program",a=F(1024,"i8",E),t=F(256,"i8*",E),B[t>>2]=a,B[vc>>2]=t);var r,c=[],n=0;for(r in e)if("string"==typeof e[r]){var i=r+"="+e[r];c.push(i),n+=i.length}for(1024<n&&g(Error("Environment size exceeded TOTAL_ENV_SIZE!")),e=0;e<c.length;e++){for(i=c[e],n=0;n<i.length;n++)A[a+n|0]=i.charCodeAt(n);A[a+n|0]=0,B[t+4*e>>2]=a,a+=i.length+1}B[t+4*c.length>>2]=0}var W={};function xc(e){return 0===e?0:(e=Fa(e),W.hasOwnProperty(e)?(xc.J&&tc(xc.J),xc.J=F(J(W[e]),"i8",Ka),xc.J):0)}function yc(e,a,t){if(e in ub){if(ub[e].length>t-1)return M(N.ab);for(e=ub[e],t=0;t<e.length;t++)A[a+t|0]=e.charCodeAt(t);return A[a+t|0]=0}return M(N.A)}function zc(e){return zc.buffer||(zc.buffer=Oa(256)),yc(e,zc.buffer,256),zc.buffer}function Ac(e){s.exit(e)}function Bc(e,a){var t=db(255&e);return A[0|Bc.J]=t,-1==gc(a,Bc.J,1)?((t=R[a])&&(t.error=l),-1):t}var Cc=p,Dc=p,Ec=p,Fc=p,Gc=k,Hc=k;function Ic(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]}var Jc=[];function Kc(){var e=s.canvas;Jc.forEach(function(a){a(e.width,e.height)})}function Lc(){var e=s.canvas;this.Ib=e.width,this.Hb=e.height,e.width=screen.width,e.height=screen.height,"undefined"!=typeof SDL&&(e=Qa[SDL.screen+0*ma>>2],B[SDL.screen+0*ma>>2]=8388608|e),Kc()}function Mc(){var e=s.canvas;e.width=this.Ib,e.height=this.Hb,"undefined"!=typeof SDL&&(e=Qa[SDL.screen+0*ma>>2],B[SDL.screen+0*ma>>2]=-8388609&e),Kc()}var Nc,Oc,Pc,Qc,rb=ra(4);B[rb>>2]=0;var Vb=Qb(m,"/",16895,0),Rc=T,Sc={type:Rc,se:{},Ua:"/",root:m},Tc;Tc=O("/",{N:p});var Uc=Rc.z(Sc);Uc.z=Sc,Sc.root=Uc,Tc&&(Tc.d.z=Sc,Tc.d.ub=l,Vb=Sc.root),zb("/tmp",511),zb("/dev",511),Nb[259]={e:{Q:function(){return 0},write:function(){return 0}}},Ab("/dev/null",438,259),Mb(1280,{Na:function(e){if(!e.input.length){var a=m;if(ca){if(process.Eb.be)return;a=process.Eb.Q()}else"undefined"!=typeof window&&"function"==typeof window.prompt?(a=window.prompt("Input: "))!==m&&(a+="\n"):"function"==typeof readline&&((a=readline())!==m&&(a+="\n"));if(!a)return m;e.input=J(a,l)}return e.input.shift()},W:function(e,a){a===m||10===a?(s.print(e.H.join("")),e.H=[]):e.H.push(Pb.oa(a))}}),Mb(1536,{W:function(e,a){a===m||10===a?(s.printErr(e.H.join("")),e.H=[]):e.H.push(Pb.oa(a))}}),Ab("/dev/tty",438,1280),Ab("/dev/tty1",438,1536),zb("/dev/shm",511),zb("/dev/shm/tmp",511),Xa.unshift({V:function(){if(!s.noFSInit&&!bc){w(!bc,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),bc=l,s.stdin=s.stdin,s.stdout=s.stdout,s.stderr=s.stderr,s.stdin?ec("/dev","stdin",s.stdin):Bb("/dev/tty","/dev/stdin"),s.stdout?ec("/dev","stdout",m,s.stdout):Bb("/dev/tty","/dev/stdout"),s.stderr?ec("/dev","stderr",m,s.stderr):Bb("/dev/tty1","/dev/stderr");var e=Db("/dev/stdin","r");B[Tb>>2]=e.s,w(1===e.s,"invalid handle for stdin ("+e.s+")"),e=Db("/dev/stdout","w"),B[Ub>>2]=e.s,w(2===e.s,"invalid handle for stdout ("+e.s+")"),e=Db("/dev/stderr","w"),B[nb>>2]=e.s,w(3===e.s,"invalid handle for stderr ("+e.s+")")}}}),Ya.push({V:function(){Yb=p}}),Za.push({V:function(){bc=p;for(var e=0;e<R.length;e++){var a=R[e];a&&Hb(a)}}}),s.FS_createFolder=function(e,a,t,r){return zb(e=S("string"==typeof e?e:ac(e),a),cc(t,r))},s.FS_createPath=function(e,a){e="string"==typeof e?e:ac(e);for(var t=a.split("/").reverse();t.length;){var r=t.pop();if(r){var c=S(e,r);try{zb(c,511)}catch(e){}e=c}}return c},s.FS_createDataFile=dc,s.FS_createPreloadedFile=function(e,a,t,r,c,n,i,f){function o(){Ec=document.pointerLockElement===b||document.mozPointerLockElement===b||document.webkitPointerLockElement===b}function d(t){function o(t){f||dc(e,a,t,r,c),n&&n(),jb("cp "+u)}var d=p;s.preloadPlugins.forEach(function(e){!d&&e.canHandle(u)&&(e.handle(t,u,o,function(){i&&i(),jb("cp "+u)}),d=l)}),d||o(t)}if(s.preloadPlugins||(s.preloadPlugins=[]),!Nc&&!ea){Nc=l;try{new Blob,Oc=l}catch(e){Oc=p,console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Pc="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Oc?m:console.log("warning: no BlobBuilder"),Qc="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:console.log("warning: cannot create object URLs"),s.preloadPlugins.push({canHandle:function(e){return!s.re&&/\.(jpg|jpeg|png|bmp)$/i.test(e)},handle:function(e,a,t,r){var c=m;if(Oc)try{(c=new Blob([e],{type:Ic(a)})).size!==e.length&&(c=new Blob([new Uint8Array(e).buffer],{type:Ic(a)}))}catch(e){var n="Blob constructor present but fails: "+e+"; falling back to blob builder";oa||(oa={}),oa[n]||(oa[n]=1,s.P(n))}c||((c=new Pc).append(new Uint8Array(e).buffer),c=c.getBlob());var i=Qc.createObjectURL(c),f=new Image;f.onload=function(){w(f.complete,"Image "+a+" could not be decoded");var r=document.createElement("canvas");r.width=f.width,r.height=f.height,r.getContext("2d").drawImage(f,0,0),s.preloadedImages[a]=r,Qc.revokeObjectURL(i),t&&t(e)},f.onerror=function(){console.log("Image "+i+" could not be decoded"),r&&r()},f.src=i}}),s.preloadPlugins.push({canHandle:function(e){return!s.qe&&e.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(e,a,t,r){function c(r){i||(i=l,s.preloadedAudios[a]=r,t&&t(e))}function n(){i||(i=l,s.preloadedAudios[a]=new Audio,r&&r())}var i=p;if(!Oc)return n();try{var f=new Blob([e],{type:Ic(a)})}catch(e){return n()}f=Qc.createObjectURL(f);var o=new Audio;o.addEventListener("canplaythrough",function(){c(o)},p),o.onerror=function(){if(!i){console.log("warning: browser could not fully decode audio "+a+", trying slower base64 approach");for(var t="",r=0,n=0,f=0;f<e.length;f++)for(r=r<<8|e[f],n+=8;6<=n;){var d=r>>n-6&63;n=n-6,t=t+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[d]}2==n?(t+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(3&r)<<4],t+="=="):4==n&&(t+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(15&r)<<2],t+="="),o.src="data:audio/x-"+a.substr(-3)+";base64,"+t,c(o)}},o.src=f,setTimeout(function(){za||c(o)},1e4)}});var b=s.canvas;b.qa=b.requestPointerLock||b.mozRequestPointerLock||b.webkitRequestPointerLock,b.La=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||aa(),b.La=b.La.bind(document),document.addEventListener("pointerlockchange",o,p),document.addEventListener("mozpointerlockchange",o,p),document.addEventListener("webkitpointerlockchange",o,p),s.elementPointerLock&&b.addEventListener("click",function(e){!Ec&&b.qa&&(b.qa(),e.preventDefault())},p)}var u,h=S.apply(m,[e,a]);if("/"==h[0]&&(h=h.substr(1)),ib("cp "+(u=h)),"string"==typeof t){var v=i,y=function(){v?v():g('Loading data file "'+t+'" failed.')},_=new XMLHttpRequest;_.open("GET",t,l),_.responseType="arraybuffer",_.onload=function(){if(200==_.status||0==_.status&&_.response){var e=_.response;w(e,'Loading data file "'+t+'" failed (no arrayBuffer).'),d(e=new Uint8Array(e)),jb("al "+t)}else y()},_.onerror=y,_.send(m),ib("al "+t)}else d(t)},s.FS_createLazyFile=function(e,a,t,r,c){var n,i;"undefined"!=typeof XMLHttpRequest?(ea||g("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"),(n=function(){this.ma=p,this.T=[]}).prototype.get=function(e){if(!(e>this.length-1||0>e)){var a=e%this.S;return this.pb(Math.floor(e/this.S))[a]}},n.prototype.Cb=function(e){this.pb=e},n.prototype.Fa=function(){var e=new XMLHttpRequest;e.open("HEAD",t,p),e.send(m),200<=e.status&&300>e.status||304===e.status||g(Error("Couldn't load "+t+". Status: "+e.status));var a,r=Number(e.getResponseHeader("Content-length")),c=1048576;(a=e.getResponseHeader("Accept-Ranges"))&&"bytes"===a||(c=r);var n=this;n.Cb(function(e){var a=e*c,i=(e+1)*c-1;i=Math.min(i,r-1);if(void 0===n.T[e]){var f=n.T;a>i&&g(Error("invalid range ("+a+", "+i+") or no bytes requested!")),i>r-1&&g(Error("only "+r+" bytes available! programmer error!"));var o=new XMLHttpRequest;o.open("GET",t,p),r!==c&&o.setRequestHeader("Range","bytes="+a+"-"+i),"undefined"!=typeof Uint8Array&&(o.responseType="arraybuffer"),o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(m),200<=o.status&&300>o.status||304===o.status||g(Error("Couldn't load "+t+". Status: "+o.status)),a=o.response!==k?new Uint8Array(o.response||[]):J(o.responseText||"",l),f[e]=a}return void 0===n.T[e]&&g(Error("doXHR failed!")),n.T[e]}),this.gb=r,this.fb=c,this.ma=l},n=new n,Object.defineProperty(n,"length",{get:function(){return this.ma||this.Fa(),this.gb}}),Object.defineProperty(n,"chunkSize",{get:function(){return this.ma||this.Fa(),this.fb}}),i=k):(i=t,n=k);var f;e=S("string"==typeof e?e:ac(e),a);f=yb(e,cc(r,c)),n?f.g=n:i&&(f.g=m,f.url=i);var o={};return Object.keys(f.e).forEach(function(e){var a=f.e[e];o[e]=function(){var e;if(f.ke||f.le||f.link||f.g)e=l;else{if(e=l,"undefined"!=typeof XMLHttpRequest&&g(Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")),s.read)try{f.g=J(s.read(f.url),l)}catch(a){e=p}else g(Error("Cannot load without read() or XMLHttpRequest."));e||M(N.I)}return e||g(new Q(N.I)),a.apply(m,arguments)}}),o.Q=function(e,a,t,r,c){if(e=e.d.g,r=Math.min(e.length-c,r),e.slice)for(var n=0;n<r;n++)a[t+n]=e[c+n];else for(n=0;n<r;n++)a[t+n]=e.get(c+n);return r},f.e=o,f},s.FS_createLink=function(e,a,t){return Bb(t,e=S("string"==typeof e?e:ac(e),a))},s.FS_createDevice=ec,U.m=F(12,"void*",E),wc(W),Bc.J=F([0],"i8",E),s.requestFullScreen=function(e,a){function t(){Dc=p,(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement)===r?(r.Ga=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen,r.Ga=r.Ga.bind(document),Gc&&r.qa(),Dc=l,Hc&&Lc()):Hc&&Mc(),s.onFullScreen&&s.onFullScreen(Dc)}Hc=a,void 0===(Gc=e)&&(Gc=l),void 0===Hc&&(Hc=p);var r=s.canvas;Fc||(Fc=l,document.addEventListener("fullscreenchange",t,p),document.addEventListener("mozfullscreenchange",t,p),document.addEventListener("webkitfullscreenchange",t,p)),r.Ab=r.requestFullScreen||r.mozRequestFullScreen||(r.webkitRequestFullScreen?function(){r.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:m),r.Ab()},s.requestAnimationFrame=function(e){window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||window.setTimeout),window.requestAnimationFrame(e)},s.pauseMainLoop=aa(),s.resumeMainLoop=function(){Cc&&(Cc=p,m())},s.getUserMedia=function(){window.Ma||(window.Ma=navigator.getUserMedia||navigator.mozGetUserMedia),window.Ma(k)},Sa=u=xa(sa),Ta=Sa+5242880,Ua=z=xa(Ta),w(Ua<va);var Vc=F([8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",3),Wc=F([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",3),Xc=Math.min,V=function(e,a,t){"use asm";var r=new e.Int8Array(t);var c=new e.Int16Array(t);var n=new e.Int32Array(t);var i=new e.Uint8Array(t);var f=new e.Uint16Array(t);var o=new e.Uint32Array(t);var d=new e.Float32Array(t);var s=new e.Float64Array(t);var b=a.STACKTOP|0;var u=a.STACK_MAX|0;var l=a.tempDoublePtr|0;var p=a.ABORT|0;var h=a.cttz_i8|0;var m=a.ctlz_i8|0;var g=a._stderr|0;var v=a.__ZTVN10__cxxabiv120__si_class_type_infoE|0;var y=a.__ZTVN10__cxxabiv117__class_type_infoE|0;var _=a.___progname|0;var w=+a.NaN;var A=+a.Infinity;var k=0;var x=0;var E=0;var S=0;var T=0,j=0,C=0,R=0,O=0.0,B=0,M=0,N=0,I=0.0;var P=0;var F=0;var L=0;var D=0;var z=0;var q=0;var U=0;var H=0;var V=0;var G=0;var W=e.Math.floor;var Y=e.Math.abs;var K=e.Math.sqrt;var Q=e.Math.pow;var Z=e.Math.cos;var J=e.Math.sin;var X=e.Math.tan;var $=e.Math.acos;var ee=e.Math.asin;var ae=e.Math.atan;var te=e.Math.atan2;var re=e.Math.exp;var ce=e.Math.log;var ne=e.Math.ceil;var ie=e.Math.imul;var fe=a.abort;var oe=a.assert;var de=a.asmPrintInt;var se=a.asmPrintFloat;var be=a.min;var ue=a.invoke_vi;var le=a.invoke_vii;var pe=a.invoke_ii;var he=a.invoke_viii;var me=a.invoke_v;var ge=a.invoke_iii;var ve=a._strncmp;var ye=a._llvm_va_end;var _e=a._sysconf;var we=a.___cxa_throw;var Ae=a._strerror;var ke=a._abort;var xe=a._fprintf;var Ee=a._llvm_eh_exception;var Se=a.___cxa_free_exception;var Te=a._fflush;var je=a.___buildEnvironment;var Ce=a.__reallyNegative;var Re=a._strchr;var Oe=a._fputc;var Be=a.___setErrNo;var Me=a._fwrite;var Ne=a._send;var Ie=a._write;var Pe=a._exit;var Fe=a.___cxa_find_matching_catch;var Le=a.___cxa_allocate_exception;var De=a._isspace;var ze=a.__formatString;var qe=a.___resumeException;var Ue=a._llvm_uadd_with_overflow_i32;var He=a.___cxa_does_inherit;var Ve=a._getenv;var Ge=a._vfprintf;var We=a.___cxa_begin_catch;var Ye=a.__ZSt18uncaught_exceptionv;var Ke=a._pwrite;var Qe=a.___cxa_call_unexpected;var Ze=a._sbrk;var Je=a._strerror_r;var Xe=a.___errno_location;var $e=a.___gxx_personality_v0;var ea=a.___cxa_is_number_type;var aa=a._time;var ta=a.__exit;var ra=a.___cxa_end_catch;function ca(e){e=e|0;var a=0;a=b;b=b+e|0;b=b+7>>3<<3;return a|0}function na(){return b|0}function ia(e){e=e|0;b=e}function fa(e,a){e=e|0;a=a|0;if((k|0)==0){k=e;x=a}}function oa(e){e=e|0;r[l]=r[e];r[l+1|0]=r[e+1|0];r[l+2|0]=r[e+2|0];r[l+3|0]=r[e+3|0]}function da(e){e=e|0;r[l]=r[e];r[l+1|0]=r[e+1|0];r[l+2|0]=r[e+2|0];r[l+3|0]=r[e+3|0];r[l+4|0]=r[e+4|0];r[l+5|0]=r[e+5|0];r[l+6|0]=r[e+6|0];r[l+7|0]=r[e+7|0]}function sa(e){e=e|0;P=e}function ba(e){e=e|0;F=e}function ua(e){e=e|0;L=e}function la(e){e=e|0;D=e}function pa(e){e=e|0;z=e}function ha(e){e=e|0;q=e}function ma(e){e=e|0;U=e}function ga(e){e=e|0;H=e}function va(e){e=e|0;V=e}function ya(e){e=e|0;G=e}function _a(){n[170]=y+8;n[172]=v+8;n[176]=v+8}function wa(e,a,t){e=e|0;a=a|0;t=t|0;var c=0;if((t|0)==0){return}else{c=0}do{r[e+c|0]=r[a+c|0]|0;c=c+1|0}while(c>>>0<t>>>0);return}function Aa(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,n=0;if((t|0)==0){return}else{c=0}do{n=e+c|0;r[n]=r[n]^r[a+c|0];c=c+1|0}while(c>>>0<t>>>0);return}function ka(e){e=e|0;var a=0,t=0,r=0,c=0;a=i[e+1|0]|0;t=i[e+2|0]|0;r=i[e+3|0]|0;c=tr(a<<8|0>>>24|(i[e]|0)|(t<<16|0>>>16)|(r<<24|0>>>8)|(0<<8|0>>>24),0<<8|a>>>24|(0<<16|t>>>16)|(0<<24|r>>>8)|(i[e+4|0]|0)|((i[e+5|0]|0)<<8|0>>>24),0<<16|0>>>16,(i[e+6|0]|0)<<16|0>>>16)|0;r=tr(c,P,0<<24|0>>>8,(i[e+7|0]|0)<<24|0>>>8)|0;return(P=P,r)|0}function xa(e){e=e|0;return(i[e+1|0]|0)<<8|(i[e]|0)|(i[e+2|0]|0)<<16|(i[e+3|0]|0)<<24|0}function Ea(e,a){e=e|0;a=a|0;r[e]=a&255;r[e+1|0]=a>>>8&255;r[e+2|0]=a>>>16&255;r[e+3|0]=a>>>24&255;return}function Sa(e){e=e|0;n[e+36>>2]=0;n[e+32>>2]=0;n[e>>2]=1779033703;n[e+4>>2]=-1150833019;n[e+8>>2]=1013904242;n[e+12>>2]=-1521486534;n[e+16>>2]=1359893119;n[e+20>>2]=-1694144372;n[e+24>>2]=528734635;n[e+28>>2]=1541459225;return}function Ta(e,a,t,r,c,i,f,o,d,s){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;i=i|0;f=f|0;o=o|0;d=d|0;s=s|0;var b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0;b=ur(o,0,f,0)|0;u=P;l=0;if(u>>>0>l>>>0|u>>>0==l>>>0&b>>>0>1073741823>>>0){n[(Xe()|0)>>2]=27;p=-1;return p|0}b=tr(c,i,-1,-1)|0;if((b&c|0)!=0|(P&i|0)!=0|(c|0)==0&(i|0)==0){n[(Xe()|0)>>2]=22;p=-1;return p|0}do{if(!((33554431/(o>>>0)|0)>>>0<f>>>0|f>>>0>16777215)){b=0;if(b>>>0<i>>>0|b>>>0==i>>>0&(33554431/(f>>>0)|0)>>>0<c>>>0){break}b=f<<7;l=Va(ie(b,o)|0)|0;if((l|0)==0){p=-1;return p|0}u=Va(f<<8)|0;do{if((u|0)!=0){h=ur(b,0,c,i)|0;m=Va(h)|0;if((m|0)==0){Ga(u);break}h=ie(o<<7,f)|0;Ua(e,a,t,r,1,0,l,h);if((o|0)!=0){g=f<<7;v=0;do{ja(l+(ie(g,v)|0)|0,f,c,i,m,u);v=v+1|0}while(v>>>0<o>>>0)}Ua(e,a,l,h,1,0,d,s);Ga(m);Ga(u);Ga(l);p=0;return p|0}}while(0);Ga(l);p=-1;return p|0}}while(0);n[(Xe()|0)>>2]=12;p=-1;return p|0}function ja(e,a,t,r,c,n){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;n=n|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0;i=a<<7;f=n+i|0;wa(n,e,i);if((t|0)==0&(r|0)==0){wa(e,n,i);return}o=i;d=0;s=0;b=0;do{u=ur(b,s,o,d)|0;wa(c+u|0,n,i);Ca(n,f,a);b=tr(b,s,1,0)|0;s=P}while(s>>>0<r>>>0|s>>>0==r>>>0&b>>>0<t>>>0);if((t|0)==0&(r|0)==0){wa(e,n,i);return}b=tr(t,r,-1,-1)|0;s=P;d=i;o=0;u=0;l=0;do{p=Ra(n,a)|0;h=ur(p&b,P&s,d,o)|0;Aa(n,c+h|0,i);Ca(n,f,a);l=tr(l,u,1,0)|0;u=P}while(u>>>0<r>>>0|u>>>0==r>>>0&l>>>0<t>>>0);wa(e,n,i);return}function Ca(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,n=0,i=0,f=0,o=0,d=0;r=b;b=b+64|0;c=r|0;n=t<<1;wa(c,e+((t<<7)-64)|0,64);if((n|0)!=0){i=0;do{f=i<<6;Aa(c,e+f|0,64);Oa(c);wa(a+f|0,c,64);i=i+1|0}while(i>>>0<n>>>0)}if((t|0)==0){b=r;return}else{o=0}do{wa(e+(o<<6)|0,a+(o<<7)|0,64);o=o+1|0}while(o>>>0<t>>>0);if((t|0)==0){b=r;return}else{d=0}do{wa(e+(d+t<<6)|0,a+(d<<7|64)|0,64);d=d+1|0}while(d>>>0<t>>>0);b=r;return}function Ra(e,a){e=e|0;a=a|0;var t=0;t=ka(e+((a<<7)-64)|0)|0;return(P=P,t)|0}function Oa(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ee=0,ae=0;a=b;b=b+128|0;t=a|0;r=a+64|0;c=0;do{n[t+(c<<2)>>2]=xa(e+(c<<2)|0)|0;c=c+1|0}while(c>>>0<16);c=t;i=r;$t(i|0,c|0,64)|0;c=r|0;i=r+48|0;f=r+16|0;o=r+32|0;d=r+20|0;s=r+4|0;u=r+36|0;l=r+52|0;p=r+40|0;h=r+24|0;m=r+56|0;g=r+8|0;v=r+60|0;y=r+44|0;_=r+12|0;w=r+28|0;A=0;k=n[c>>2]|0;x=n[i>>2]|0;E=n[f>>2]|0;S=n[o>>2]|0;T=n[d>>2]|0;j=n[s>>2]|0;C=n[u>>2]|0;R=n[l>>2]|0;O=n[p>>2]|0;B=n[h>>2]|0;M=n[m>>2]|0;N=n[g>>2]|0;I=n[v>>2]|0;P=n[y>>2]|0;F=n[_>>2]|0;L=n[w>>2]|0;do{D=x+k|0;z=(D<<7|D>>>25)^E;D=z+k|0;q=(D<<9|D>>>23)^S;D=q+z|0;U=(D<<13|D>>>19)^x;D=U+q|0;H=(D<<18|D>>>14)^k;D=j+T|0;V=(D<<7|D>>>25)^C;D=V+T|0;G=(D<<9|D>>>23)^R;D=G+V|0;W=(D<<13|D>>>19)^j;D=W+G|0;Y=(D<<18|D>>>14)^T;D=B+O|0;K=(D<<7|D>>>25)^M;D=K+O|0;Q=(D<<9|D>>>23)^N;D=Q+K|0;Z=(D<<13|D>>>19)^B;D=Z+Q|0;J=(D<<18|D>>>14)^O;D=P+I|0;X=(D<<7|D>>>25)^F;D=X+I|0;$=(D<<9|D>>>23)^L;D=$+X|0;ee=(D<<13|D>>>19)^P;D=ee+$|0;ae=(D<<18|D>>>14)^I;D=X+H|0;j=(D<<7|D>>>25)^W;W=j+H|0;N=(W<<9|W>>>23)^Q;Q=N+j|0;F=(Q<<13|Q>>>19)^X;X=F+N|0;k=(X<<18|X>>>14)^H;H=z+Y|0;B=(H<<7|H>>>25)^Z;Z=B+Y|0;L=(Z<<9|Z>>>23)^$;$=L+B|0;E=($<<13|$>>>19)^z;z=E+L|0;T=(z<<18|z>>>14)^Y;Y=V+J|0;P=(Y<<7|Y>>>25)^ee;ee=P+J|0;S=(ee<<9|ee>>>23)^q;q=S+P|0;C=(q<<13|q>>>19)^V;V=C+S|0;O=(V<<18|V>>>14)^J;J=K+ae|0;x=(J<<7|J>>>25)^U;U=x+ae|0;R=(U<<9|U>>>23)^G;G=R+x|0;M=(G<<13|G>>>19)^K;K=M+R|0;I=(K<<18|K>>>14)^ae;A=A+2|0}while(A>>>0<8);n[c>>2]=k;n[i>>2]=x;n[f>>2]=E;n[o>>2]=S;n[d>>2]=T;n[s>>2]=j;n[u>>2]=C;n[l>>2]=R;n[p>>2]=O;n[h>>2]=B;n[m>>2]=M;n[g>>2]=N;n[v>>2]=I;n[y>>2]=P;n[_>>2]=F;n[w>>2]=L;L=t|0;n[L>>2]=(n[L>>2]|0)+(n[r>>2]|0);L=t+4|0;n[L>>2]=(n[L>>2]|0)+(n[r+4>>2]|0);L=t+8|0;n[L>>2]=(n[L>>2]|0)+(n[r+8>>2]|0);L=t+12|0;n[L>>2]=(n[L>>2]|0)+(n[r+12>>2]|0);L=t+16|0;n[L>>2]=(n[L>>2]|0)+(n[r+16>>2]|0);L=t+20|0;n[L>>2]=(n[L>>2]|0)+(n[r+20>>2]|0);L=t+24|0;n[L>>2]=(n[L>>2]|0)+(n[r+24>>2]|0);L=t+28|0;n[L>>2]=(n[L>>2]|0)+(n[r+28>>2]|0);L=t+32|0;n[L>>2]=(n[L>>2]|0)+(n[r+32>>2]|0);L=t+36|0;n[L>>2]=(n[L>>2]|0)+(n[r+36>>2]|0);L=t+40|0;n[L>>2]=(n[L>>2]|0)+(n[r+40>>2]|0);L=t+44|0;n[L>>2]=(n[L>>2]|0)+(n[r+44>>2]|0);L=t+48|0;n[L>>2]=(n[L>>2]|0)+(n[r+48>>2]|0);L=t+52|0;n[L>>2]=(n[L>>2]|0)+(n[r+52>>2]|0);L=t+56|0;n[L>>2]=(n[L>>2]|0)+(n[r+56>>2]|0);L=t+60|0;n[L>>2]=(n[L>>2]|0)+(n[r+60>>2]|0);r=0;do{Ea(e+(r<<2)|0,n[t+(r<<2)>>2]|0);r=r+1|0}while(r>>>0<16);b=a;return}function Ba(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0;r=e+32|0;c=e+36|0;i=n[c>>2]|0;f=i>>>3&63;o=Ue(i|0,t<<3|0)|0;n[c>>2]=o;if(P){o=r|0;n[o>>2]=(n[o>>2]|0)+1}o=r|0;n[o>>2]=(n[o>>2]|0)+(t>>>29);o=64-f|0;r=e+40+f|0;if(o>>>0>t>>>0){$t(r|0,a|0,t)|0;return}$t(r|0,a|0,o)|0;r=e|0;f=e+40|0;Ma(r,f);e=a+o|0;a=t-o|0;if(a>>>0>63){o=a;t=e;while(1){Ma(r,t);c=t+64|0;i=o-64|0;if(i>>>0>63){o=i;t=c}else{d=i;s=c;break}}}else{d=a;s=e}$t(f|0,s|0,d)|0;return}function Ma(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0;t=b;b=b+288|0;r=t|0;c=t+256|0;i=r|0;Ha(i,a);a=16;do{f=n[r+(a-2<<2)>>2]|0;o=n[r+(a-15<<2)>>2]|0;n[r+(a<<2)>>2]=(n[r+(a-16<<2)>>2]|0)+(n[r+(a-7<<2)>>2]|0)+((f>>>19|f<<13)^f>>>10^(f>>>17|f<<15))+((o>>>18|o<<14)^o>>>3^(o>>>7|o<<25));a=a+1|0}while((a|0)<64);a=c;o=e;$t(a|0,o|0,32)|0;o=c+28|0;a=c+16|0;f=n[a>>2]|0;d=c+20|0;s=c+24|0;u=n[s>>2]|0;l=(n[o>>2]|0)+1116352408+(n[i>>2]|0)+((f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+((u^n[d>>2])&f^u)|0;u=c|0;f=n[u>>2]|0;i=c+4|0;p=n[i>>2]|0;h=c+8|0;m=n[h>>2]|0;g=c+12|0;n[g>>2]=(n[g>>2]|0)+l;v=((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+l+((m|p)&f|m&p)|0;n[o>>2]=v;p=n[g>>2]|0;m=n[d>>2]|0;f=(n[s>>2]|0)+1899447441+(n[r+4>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[s>>2]=l;m=n[h>>2]|0;p=n[a>>2]|0;v=(n[d>>2]|0)-1245643825+(n[r+8>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[d>>2]=f;p=n[i>>2]|0;m=n[g>>2]|0;l=(n[a>>2]|0)-373957723+(n[r+12>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[a>>2]=v;m=n[u>>2]|0;p=n[h>>2]|0;f=(n[g>>2]|0)+961987163+(n[r+16>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[g>>2]=l;p=n[o>>2]|0;m=n[i>>2]|0;v=(n[h>>2]|0)+1508970993+(n[r+20>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[h>>2]=f;m=n[s>>2]|0;p=n[u>>2]|0;l=(n[i>>2]|0)-1841331548+(n[r+24>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[i>>2]=v;p=n[d>>2]|0;m=n[o>>2]|0;f=(n[u>>2]|0)-1424204075+(n[r+28>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[u>>2]=l;m=n[a>>2]|0;p=n[s>>2]|0;v=(n[o>>2]|0)-670586216+(n[r+32>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[o>>2]=f;p=n[g>>2]|0;m=n[d>>2]|0;l=(n[s>>2]|0)+310598401+(n[r+36>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[s>>2]=v;m=n[h>>2]|0;p=n[a>>2]|0;f=(n[d>>2]|0)+607225278+(n[r+40>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[d>>2]=l;p=n[i>>2]|0;m=n[g>>2]|0;v=(n[a>>2]|0)+1426881987+(n[r+44>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[a>>2]=f;m=n[u>>2]|0;p=n[h>>2]|0;l=(n[g>>2]|0)+1925078388+(n[r+48>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[g>>2]=v;p=n[o>>2]|0;m=n[i>>2]|0;f=(n[h>>2]|0)-2132889090+(n[r+52>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[h>>2]=l;m=n[s>>2]|0;p=n[u>>2]|0;v=(n[i>>2]|0)-1680079193+(n[r+56>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[i>>2]=f;p=n[d>>2]|0;m=n[o>>2]|0;l=(n[u>>2]|0)-1046744716+(n[r+60>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[u>>2]=v;m=n[a>>2]|0;p=n[s>>2]|0;f=(n[o>>2]|0)-459576895+(n[r+64>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[o>>2]=l;p=n[g>>2]|0;m=n[d>>2]|0;v=(n[s>>2]|0)-272742522+(n[r+68>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[s>>2]=f;m=n[h>>2]|0;p=n[a>>2]|0;l=(n[d>>2]|0)+264347078+(n[r+72>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[d>>2]=v;p=n[i>>2]|0;m=n[g>>2]|0;f=(n[a>>2]|0)+604807628+(n[r+76>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[a>>2]=l;m=n[u>>2]|0;p=n[h>>2]|0;v=(n[g>>2]|0)+770255983+(n[r+80>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[g>>2]=f;p=n[o>>2]|0;m=n[i>>2]|0;l=(n[h>>2]|0)+1249150122+(n[r+84>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[h>>2]=v;m=n[s>>2]|0;p=n[u>>2]|0;f=(n[i>>2]|0)+1555081692+(n[r+88>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[i>>2]=l;p=n[d>>2]|0;m=n[o>>2]|0;v=(n[u>>2]|0)+1996064986+(n[r+92>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[u>>2]=f;m=n[a>>2]|0;p=n[s>>2]|0;l=(n[o>>2]|0)-1740746414+(n[r+96>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[o>>2]=v;p=n[g>>2]|0;m=n[d>>2]|0;f=(n[s>>2]|0)-1473132947+(n[r+100>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[s>>2]=l;m=n[h>>2]|0;p=n[a>>2]|0;v=(n[d>>2]|0)-1341970488+(n[r+104>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[d>>2]=f;p=n[i>>2]|0;m=n[g>>2]|0;l=(n[a>>2]|0)-1084653625+(n[r+108>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[a>>2]=v;m=n[u>>2]|0;p=n[h>>2]|0;f=(n[g>>2]|0)-958395405+(n[r+112>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[g>>2]=l;p=n[o>>2]|0;m=n[i>>2]|0;v=(n[h>>2]|0)-710438585+(n[r+116>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[h>>2]=f;m=n[s>>2]|0;p=n[u>>2]|0;l=(n[i>>2]|0)+113926993+(n[r+120>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[i>>2]=v;p=n[d>>2]|0;m=n[o>>2]|0;f=(n[u>>2]|0)+338241895+(n[r+124>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[u>>2]=l;m=n[a>>2]|0;p=n[s>>2]|0;v=(n[o>>2]|0)+666307205+(n[r+128>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[o>>2]=f;p=n[g>>2]|0;m=n[d>>2]|0;l=(n[s>>2]|0)+773529912+(n[r+132>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[s>>2]=v;m=n[h>>2]|0;p=n[a>>2]|0;f=(n[d>>2]|0)+1294757372+(n[r+136>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[d>>2]=l;p=n[i>>2]|0;m=n[g>>2]|0;v=(n[a>>2]|0)+1396182291+(n[r+140>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[a>>2]=f;m=n[u>>2]|0;p=n[h>>2]|0;l=(n[g>>2]|0)+1695183700+(n[r+144>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[g>>2]=v;p=n[o>>2]|0;m=n[i>>2]|0;f=(n[h>>2]|0)+1986661051+(n[r+148>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[h>>2]=l;m=n[s>>2]|0;p=n[u>>2]|0;v=(n[i>>2]|0)-2117940946+(n[r+152>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[i>>2]=f;p=n[d>>2]|0;m=n[o>>2]|0;l=(n[u>>2]|0)-1838011259+(n[r+156>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[u>>2]=v;m=n[a>>2]|0;p=n[s>>2]|0;f=(n[o>>2]|0)-1564481375+(n[r+160>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[o>>2]=l;p=n[g>>2]|0;m=n[d>>2]|0;v=(n[s>>2]|0)-1474664885+(n[r+164>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[s>>2]=f;m=n[h>>2]|0;p=n[a>>2]|0;l=(n[d>>2]|0)-1035236496+(n[r+168>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[d>>2]=v;p=n[i>>2]|0;m=n[g>>2]|0;f=(n[a>>2]|0)-949202525+(n[r+172>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[a>>2]=l;m=n[u>>2]|0;p=n[h>>2]|0;v=(n[g>>2]|0)-778901479+(n[r+176>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[g>>2]=f;p=n[o>>2]|0;m=n[i>>2]|0;l=(n[h>>2]|0)-694614492+(n[r+180>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[h>>2]=v;m=n[s>>2]|0;p=n[u>>2]|0;f=(n[i>>2]|0)-200395387+(n[r+184>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[i>>2]=l;p=n[d>>2]|0;m=n[o>>2]|0;v=(n[u>>2]|0)+275423344+(n[r+188>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[u>>2]=f;m=n[a>>2]|0;p=n[s>>2]|0;l=(n[o>>2]|0)+430227734+(n[r+192>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[o>>2]=v;p=n[g>>2]|0;m=n[d>>2]|0;f=(n[s>>2]|0)+506948616+(n[r+196>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[s>>2]=l;m=n[h>>2]|0;p=n[a>>2]|0;v=(n[d>>2]|0)+659060556+(n[r+200>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[d>>2]=f;p=n[i>>2]|0;m=n[g>>2]|0;l=(n[a>>2]|0)+883997877+(n[r+204>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[a>>2]=v;m=n[u>>2]|0;p=n[h>>2]|0;f=(n[g>>2]|0)+958139571+(n[r+208>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[g>>2]=l;p=n[o>>2]|0;m=n[i>>2]|0;v=(n[h>>2]|0)+1322822218+(n[r+212>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[h>>2]=f;m=n[s>>2]|0;p=n[u>>2]|0;l=(n[i>>2]|0)+1537002063+(n[r+216>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[i>>2]=v;p=n[d>>2]|0;m=n[o>>2]|0;f=(n[u>>2]|0)+1747873779+(n[r+220>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[s>>2])&p^m)|0;m=n[h>>2]|0;p=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[u>>2]=l;m=n[a>>2]|0;p=n[s>>2]|0;v=(n[o>>2]|0)+1955562222+(n[r+224>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[d>>2])&m^p)|0;p=n[i>>2]|0;m=n[h>>2]|0;n[g>>2]=(n[g>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[o>>2]=f;p=n[g>>2]|0;m=n[d>>2]|0;l=(n[s>>2]|0)+2024104815+(n[r+228>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[a>>2])&p^m)|0;m=n[u>>2]|0;p=n[i>>2]|0;n[h>>2]=(n[h>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((p|m)&f|p&m)|0;n[s>>2]=v;m=n[h>>2]|0;p=n[a>>2]|0;f=(n[d>>2]|0)-2067236844+(n[r+232>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[g>>2])&m^p)|0;p=n[o>>2]|0;m=n[u>>2]|0;n[i>>2]=(n[i>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((m|p)&v|m&p)|0;n[d>>2]=l;p=n[i>>2]|0;m=n[g>>2]|0;v=(n[a>>2]|0)-1933114872+(n[r+236>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[h>>2])&p^m)|0;m=n[s>>2]|0;p=n[o>>2]|0;n[u>>2]=(n[u>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((p|m)&l|p&m)|0;n[a>>2]=f;m=n[u>>2]|0;p=n[h>>2]|0;l=(n[g>>2]|0)-1866530822+(n[r+240>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[i>>2])&m^p)|0;p=n[d>>2]|0;m=n[s>>2]|0;n[o>>2]=(n[o>>2]|0)+l;v=l+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((m|p)&f|m&p)|0;n[g>>2]=v;p=n[o>>2]|0;m=n[i>>2]|0;f=(n[h>>2]|0)-1538233109+(n[r+244>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((m^n[u>>2])&p^m)|0;m=n[a>>2]|0;p=n[d>>2]|0;n[s>>2]=(n[s>>2]|0)+f;l=f+((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+((p|m)&v|p&m)|0;n[h>>2]=l;m=n[s>>2]|0;p=n[u>>2]|0;v=(n[i>>2]|0)-1090935817+(n[r+248>>2]|0)+((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+((p^n[o>>2])&m^p)|0;p=n[g>>2]|0;m=n[a>>2]|0;n[d>>2]=(n[d>>2]|0)+v;f=v+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((m|p)&l|m&p)|0;n[i>>2]=f;i=n[d>>2]|0;d=n[o>>2]|0;o=(n[u>>2]|0)-965641998+(n[r+252>>2]|0)+((i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7))+((d^n[s>>2])&i^d)|0;d=n[h>>2]|0;h=n[g>>2]|0;n[a>>2]=(n[a>>2]|0)+o;a=o+((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))+((h|d)&f|h&d)|0;n[u>>2]=a;n[e>>2]=(n[e>>2]|0)+a;a=e+4|0;n[a>>2]=(n[a>>2]|0)+(n[c+4>>2]|0);a=e+8|0;n[a>>2]=(n[a>>2]|0)+(n[c+8>>2]|0);a=e+12|0;n[a>>2]=(n[a>>2]|0)+(n[c+12>>2]|0);a=e+16|0;n[a>>2]=(n[a>>2]|0)+(n[c+16>>2]|0);a=e+20|0;n[a>>2]=(n[a>>2]|0)+(n[c+20>>2]|0);a=e+24|0;n[a>>2]=(n[a>>2]|0)+(n[c+24>>2]|0);a=e+28|0;n[a>>2]=(n[a>>2]|0)+(n[c+28>>2]|0);b=t;return}function Na(e,a){e=e|0;a=a|0;r[e+3|0]=a&255;r[e+2|0]=a>>>8&255;r[e+1|0]=a>>>16&255;r[e]=a>>>24&255;return}function Ia(e){e=e|0;return(i[e+2|0]|0)<<8|(i[e+3|0]|0)|(i[e+1|0]|0)<<16|(i[e]|0)<<24|0}function Pa(e,a){e=e|0;a=a|0;Fa(a);La(e,a|0,32);er(a|0,0,104);return}function Fa(e){e=e|0;var a=0,t=0,r=0;a=b;b=b+8|0;t=a|0;La(t,e+32|0,8);r=(n[e+36>>2]|0)>>>3&63;Ba(e,720,(r>>>0<56?56:120)-r|0);Ba(e,t,8);b=a;return}function La(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=t>>>2;if((r|0)==0){return}else{c=0}do{Na(e+(c<<2)|0,n[a+(c<<2)>>2]|0);c=c+1|0}while(c>>>0<r>>>0);return}function Da(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,n=0,i=0,f=0,o=0,d=0,s=0;c=b;b=b+96|0;n=c|0;if(t>>>0>64){i=e|0;Sa(i);Ba(i,a,t);f=c+64|0;Pa(f,i);o=f;d=32}else{o=a;d=t}t=e|0;Sa(t);a=n|0;er(a|0,54,64);if((d|0)!=0){f=0;do{i=n+f|0;r[i]=r[i]^r[o+f|0];f=f+1|0}while(f>>>0<d>>>0)}Ba(t,a,64);t=e+104|0;Sa(t);er(a|0,92,64);if((d|0)==0){Ba(t,a,64);b=c;return}else{s=0}do{e=n+s|0;r[e]=r[e]^r[o+s|0];s=s+1|0}while(s>>>0<d>>>0);Ba(t,a,64);b=c;return}function za(e,a,t){e=e|0;a=a|0;t=t|0;Ba(e|0,a,t);return}function qa(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=b;b=b+32|0;r=t|0;Pa(r,a|0);c=a+104|0;Ba(c,r,32);Pa(e,c);b=t;return}function Ua(e,a,t,c,n,i,f,o){e=e|0;a=a|0;t=t|0;c=c|0;n=n|0;i=i|0;f=f|0;o=o|0;var d=0,s=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;d=b;b=b+488|0;s=d|0;u=d+208|0;l=d+424|0;p=d+456|0;Da(s,e,a);za(s,t,c);if((o|0)==0){b=d;return}c=d+416|0;t=u;h=s;s=l|0;m=p|0;g=0;v=i>>>0<g>>>0|i>>>0==g>>>0&n>>>0<2>>>0;g=0;y=0;do{g=g+1|0;Na(c,g);$t(t|0,h|0,208)|0;za(u,c,4);qa(s,u);$t(m|0,s|0,32)|0;if(!v){_=0;w=2;do{Da(u,e,a);za(u,s,32);qa(s,u);A=0;do{k=p+A|0;r[k]=r[k]^r[l+A|0];A=A+1|0}while((A|0)<32);w=tr(w,_,1,0)|0;_=P}while(!(_>>>0>i>>>0|_>>>0==i>>>0&w>>>0>n>>>0))}w=o-y|0;_=w>>>0>32?32:w;w=f+y|0;$t(w|0,m|0,_)|0;y=g<<5}while(y>>>0<o>>>0);b=d;return}function Ha(e,a){e=e|0;a=a|0;var t=0;t=0;do{n[e+(t<<2)>>2]=Ia(a+(t<<2)|0)|0;t=t+1|0}while(t>>>0<16);return}function Va(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ee=0,ae=0,te=0,re=0,ce=0,ne=0,ie=0,fe=0,oe=0,de=0,se=0,be=0,ue=0,le=0,pe=0,he=0,me=0,ge=0,ve=0,ye=0,we=0,Ae=0,xe=0,Ee=0,Se=0,Te=0,je=0,Ce=0,Re=0,Oe=0,Be=0,Me=0,Ne=0;do{if(e>>>0<245){if(e>>>0<11){a=16}else{a=e+11&-8}t=a>>>3;r=n[208]|0;c=r>>>(t>>>0);if((c&3|0)!=0){i=(c&1^1)+t|0;f=i<<1;o=872+(f<<2)|0;d=872+(f+2<<2)|0;f=n[d>>2]|0;s=f+8|0;b=n[s>>2]|0;do{if((o|0)==(b|0)){n[208]=r&~(1<<i)}else{if(b>>>0<(n[212]|0)>>>0){ke();return 0}u=b+12|0;if((n[u>>2]|0)==(f|0)){n[u>>2]=o;n[d>>2]=b;break}else{ke();return 0}}}while(0);b=i<<3;n[f+4>>2]=b|3;d=f+(b|4)|0;n[d>>2]=n[d>>2]|1;l=s;return l|0}if(a>>>0<=(n[210]|0)>>>0){p=a;break}if((c|0)!=0){d=2<<t;b=c<<t&(d|-d);d=(b&-b)-1|0;b=d>>>12&16;o=d>>>(b>>>0);d=o>>>5&8;u=o>>>(d>>>0);o=u>>>2&4;h=u>>>(o>>>0);u=h>>>1&2;m=h>>>(u>>>0);h=m>>>1&1;g=(d|b|o|u|h)+(m>>>(h>>>0))|0;h=g<<1;m=872+(h<<2)|0;u=872+(h+2<<2)|0;h=n[u>>2]|0;o=h+8|0;b=n[o>>2]|0;do{if((m|0)==(b|0)){n[208]=r&~(1<<g)}else{if(b>>>0<(n[212]|0)>>>0){ke();return 0}d=b+12|0;if((n[d>>2]|0)==(h|0)){n[d>>2]=m;n[u>>2]=b;break}else{ke();return 0}}}while(0);b=g<<3;u=b-a|0;n[h+4>>2]=a|3;m=h;r=m+a|0;n[m+(a|4)>>2]=u|1;n[m+b>>2]=u;b=n[210]|0;if((b|0)!=0){m=n[213]|0;t=b>>>3;b=t<<1;c=872+(b<<2)|0;s=n[208]|0;f=1<<t;do{if((s&f|0)==0){n[208]=s|f;v=c;y=872+(b+2<<2)|0}else{t=872+(b+2<<2)|0;i=n[t>>2]|0;if(i>>>0>=(n[212]|0)>>>0){v=i;y=t;break}ke();return 0}}while(0);n[y>>2]=m;n[v+12>>2]=m;n[m+8>>2]=v;n[m+12>>2]=c}n[210]=u;n[213]=r;l=o;return l|0}b=n[209]|0;if((b|0)==0){p=a;break}f=(b&-b)-1|0;b=f>>>12&16;s=f>>>(b>>>0);f=s>>>5&8;h=s>>>(f>>>0);s=h>>>2&4;g=h>>>(s>>>0);h=g>>>1&2;t=g>>>(h>>>0);g=t>>>1&1;i=n[1136+((f|b|s|h|g)+(t>>>(g>>>0))<<2)>>2]|0;g=i;t=i;h=(n[i+4>>2]&-8)-a|0;while(1){i=n[g+16>>2]|0;if((i|0)==0){s=n[g+20>>2]|0;if((s|0)==0){break}else{_=s}}else{_=i}i=(n[_+4>>2]&-8)-a|0;s=i>>>0<h>>>0;g=_;t=s?_:t;h=s?i:h}g=t;o=n[212]|0;if(g>>>0<o>>>0){ke();return 0}r=g+a|0;u=r;if(g>>>0>=r>>>0){ke();return 0}r=n[t+24>>2]|0;c=n[t+12>>2]|0;do{if((c|0)==(t|0)){m=t+20|0;i=n[m>>2]|0;if((i|0)==0){s=t+16|0;b=n[s>>2]|0;if((b|0)==0){w=0;break}else{A=b;k=s}}else{A=i;k=m}while(1){m=A+20|0;i=n[m>>2]|0;if((i|0)!=0){A=i;k=m;continue}m=A+16|0;i=n[m>>2]|0;if((i|0)==0){break}else{A=i;k=m}}if(k>>>0<o>>>0){ke();return 0}else{n[k>>2]=0;w=A;break}}else{m=n[t+8>>2]|0;if(m>>>0<o>>>0){ke();return 0}i=m+12|0;if((n[i>>2]|0)!=(t|0)){ke();return 0}s=c+8|0;if((n[s>>2]|0)==(t|0)){n[i>>2]=c;n[s>>2]=m;w=c;break}else{ke();return 0}}}while(0);e:do{if((r|0)!=0){c=t+28|0;o=1136+(n[c>>2]<<2)|0;do{if((t|0)==(n[o>>2]|0)){n[o>>2]=w;if((w|0)!=0){break}n[209]=n[209]&~(1<<n[c>>2]);break e}else{if(r>>>0<(n[212]|0)>>>0){ke();return 0}m=r+16|0;if((n[m>>2]|0)==(t|0)){n[m>>2]=w}else{n[r+20>>2]=w}if((w|0)==0){break e}}}while(0);if(w>>>0<(n[212]|0)>>>0){ke();return 0}n[w+24>>2]=r;c=n[t+16>>2]|0;do{if((c|0)!=0){if(c>>>0<(n[212]|0)>>>0){ke();return 0}else{n[w+16>>2]=c;n[c+24>>2]=w;break}}}while(0);c=n[t+20>>2]|0;if((c|0)==0){break}if(c>>>0<(n[212]|0)>>>0){ke();return 0}else{n[w+20>>2]=c;n[c+24>>2]=w;break}}}while(0);if(h>>>0<16){r=h+a|0;n[t+4>>2]=r|3;c=g+(r+4)|0;n[c>>2]=n[c>>2]|1}else{n[t+4>>2]=a|3;n[g+(a|4)>>2]=h|1;n[g+(h+a)>>2]=h;c=n[210]|0;if((c|0)!=0){r=n[213]|0;o=c>>>3;c=o<<1;m=872+(c<<2)|0;s=n[208]|0;i=1<<o;do{if((s&i|0)==0){n[208]=s|i;x=m;E=872+(c+2<<2)|0}else{o=872+(c+2<<2)|0;b=n[o>>2]|0;if(b>>>0>=(n[212]|0)>>>0){x=b;E=o;break}ke();return 0}}while(0);n[E>>2]=r;n[x+12>>2]=r;n[r+8>>2]=x;n[r+12>>2]=m}n[210]=h;n[213]=u}c=t+8|0;if((c|0)==0){p=a;break}else{l=c}return l|0}else{if(e>>>0>4294967231){p=-1;break}c=e+11|0;i=c&-8;s=n[209]|0;if((s|0)==0){p=i;break}g=-i|0;o=c>>>8;do{if((o|0)==0){S=0}else{if(i>>>0>16777215){S=31;break}c=(o+1048320|0)>>>16&8;b=o<<c;f=(b+520192|0)>>>16&4;d=b<<f;b=(d+245760|0)>>>16&2;T=14-(f|c|b)+(d<<b>>>15)|0;S=i>>>((T+7|0)>>>0)&1|T<<1}}while(0);o=n[1136+(S<<2)>>2]|0;e:do{if((o|0)==0){j=0;C=g;R=0}else{if((S|0)==31){O=0}else{O=25-(S>>>1)|0}t=0;u=g;h=o;m=i<<O;r=0;while(1){T=n[h+4>>2]&-8;b=T-i|0;if(b>>>0<u>>>0){if((T|0)==(i|0)){j=h;C=b;R=h;break e}else{B=h;M=b}}else{B=t;M=u}b=n[h+20>>2]|0;T=n[h+16+(m>>>31<<2)>>2]|0;d=(b|0)==0|(b|0)==(T|0)?r:b;if((T|0)==0){j=B;C=M;R=d;break}else{t=B;u=M;h=T;m=m<<1;r=d}}}}while(0);if((R|0)==0&(j|0)==0){o=2<<S;g=s&(o|-o);if((g|0)==0){p=i;break}o=(g&-g)-1|0;g=o>>>12&16;r=o>>>(g>>>0);o=r>>>5&8;m=r>>>(o>>>0);r=m>>>2&4;h=m>>>(r>>>0);m=h>>>1&2;u=h>>>(m>>>0);h=u>>>1&1;N=n[1136+((o|g|r|m|h)+(u>>>(h>>>0))<<2)>>2]|0}else{N=R}if((N|0)==0){I=C;P=j}else{h=N;u=C;m=j;while(1){r=(n[h+4>>2]&-8)-i|0;g=r>>>0<u>>>0;o=g?r:u;r=g?h:m;g=n[h+16>>2]|0;if((g|0)!=0){h=g;u=o;m=r;continue}g=n[h+20>>2]|0;if((g|0)==0){I=o;P=r;break}else{h=g;u=o;m=r}}}if((P|0)==0){p=i;break}if(I>>>0>=((n[210]|0)-i|0)>>>0){p=i;break}m=P;u=n[212]|0;if(m>>>0<u>>>0){ke();return 0}h=m+i|0;s=h;if(m>>>0>=h>>>0){ke();return 0}r=n[P+24>>2]|0;o=n[P+12>>2]|0;do{if((o|0)==(P|0)){g=P+20|0;t=n[g>>2]|0;if((t|0)==0){d=P+16|0;T=n[d>>2]|0;if((T|0)==0){F=0;break}else{L=T;D=d}}else{L=t;D=g}while(1){g=L+20|0;t=n[g>>2]|0;if((t|0)!=0){L=t;D=g;continue}g=L+16|0;t=n[g>>2]|0;if((t|0)==0){break}else{L=t;D=g}}if(D>>>0<u>>>0){ke();return 0}else{n[D>>2]=0;F=L;break}}else{g=n[P+8>>2]|0;if(g>>>0<u>>>0){ke();return 0}t=g+12|0;if((n[t>>2]|0)!=(P|0)){ke();return 0}d=o+8|0;if((n[d>>2]|0)==(P|0)){n[t>>2]=o;n[d>>2]=g;F=o;break}else{ke();return 0}}}while(0);e:do{if((r|0)!=0){o=P+28|0;u=1136+(n[o>>2]<<2)|0;do{if((P|0)==(n[u>>2]|0)){n[u>>2]=F;if((F|0)!=0){break}n[209]=n[209]&~(1<<n[o>>2]);break e}else{if(r>>>0<(n[212]|0)>>>0){ke();return 0}g=r+16|0;if((n[g>>2]|0)==(P|0)){n[g>>2]=F}else{n[r+20>>2]=F}if((F|0)==0){break e}}}while(0);if(F>>>0<(n[212]|0)>>>0){ke();return 0}n[F+24>>2]=r;o=n[P+16>>2]|0;do{if((o|0)!=0){if(o>>>0<(n[212]|0)>>>0){ke();return 0}else{n[F+16>>2]=o;n[o+24>>2]=F;break}}}while(0);o=n[P+20>>2]|0;if((o|0)==0){break}if(o>>>0<(n[212]|0)>>>0){ke();return 0}else{n[F+20>>2]=o;n[o+24>>2]=F;break}}}while(0);do{if(I>>>0<16){r=I+i|0;n[P+4>>2]=r|3;o=m+(r+4)|0;n[o>>2]=n[o>>2]|1}else{n[P+4>>2]=i|3;n[m+(i|4)>>2]=I|1;n[m+(I+i)>>2]=I;o=I>>>3;if(I>>>0<256){r=o<<1;u=872+(r<<2)|0;g=n[208]|0;d=1<<o;do{if((g&d|0)==0){n[208]=g|d;z=u;q=872+(r+2<<2)|0}else{o=872+(r+2<<2)|0;t=n[o>>2]|0;if(t>>>0>=(n[212]|0)>>>0){z=t;q=o;break}ke();return 0}}while(0);n[q>>2]=s;n[z+12>>2]=s;n[m+(i+8)>>2]=z;n[m+(i+12)>>2]=u;break}r=h;d=I>>>8;do{if((d|0)==0){U=0}else{if(I>>>0>16777215){U=31;break}g=(d+1048320|0)>>>16&8;o=d<<g;t=(o+520192|0)>>>16&4;T=o<<t;o=(T+245760|0)>>>16&2;b=14-(t|g|o)+(T<<o>>>15)|0;U=I>>>((b+7|0)>>>0)&1|b<<1}}while(0);d=1136+(U<<2)|0;n[m+(i+28)>>2]=U;n[m+(i+20)>>2]=0;n[m+(i+16)>>2]=0;u=n[209]|0;b=1<<U;if((u&b|0)==0){n[209]=u|b;n[d>>2]=r;n[m+(i+24)>>2]=d;n[m+(i+12)>>2]=r;n[m+(i+8)>>2]=r;break}if((U|0)==31){H=0}else{H=25-(U>>>1)|0}b=I<<H;u=n[d>>2]|0;while(1){if((n[u+4>>2]&-8|0)==(I|0)){break}V=u+16+(b>>>31<<2)|0;d=n[V>>2]|0;if((d|0)==0){G=262;break}else{b=b<<1;u=d}}if((G|0)==262){if(V>>>0<(n[212]|0)>>>0){ke();return 0}else{n[V>>2]=r;n[m+(i+24)>>2]=u;n[m+(i+12)>>2]=r;n[m+(i+8)>>2]=r;break}}b=u+8|0;d=n[b>>2]|0;o=n[212]|0;if(u>>>0<o>>>0){ke();return 0}if(d>>>0<o>>>0){ke();return 0}else{n[d+12>>2]=r;n[b>>2]=r;n[m+(i+8)>>2]=d;n[m+(i+12)>>2]=u;n[m+(i+24)>>2]=0;break}}}while(0);m=P+8|0;if((m|0)==0){p=i;break}else{l=m}return l|0}}while(0);P=n[210]|0;if(p>>>0<=P>>>0){V=P-p|0;I=n[213]|0;if(V>>>0>15){H=I;n[213]=H+p;n[210]=V;n[H+(p+4)>>2]=V|1;n[H+P>>2]=V;n[I+4>>2]=p|3}else{n[210]=0;n[213]=0;n[I+4>>2]=P|3;V=I+(P+4)|0;n[V>>2]=n[V>>2]|1}l=I+8|0;return l|0}I=n[211]|0;if(p>>>0<I>>>0){V=I-p|0;n[211]=V;I=n[214]|0;P=I;n[214]=P+p;n[P+(p+4)>>2]=V|1;n[I+4>>2]=p|3;l=I+8|0;return l|0}do{if((n[200]|0)==0){I=_e(8)|0;if((I-1&I|0)==0){n[202]=I;n[201]=I;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke();return 0}}}while(0);I=p+48|0;V=n[202]|0;P=p+47|0;H=V+P|0;U=-V|0;V=H&U;if(V>>>0<=p>>>0){l=0;return l|0}z=n[318]|0;do{if((z|0)!=0){q=n[316]|0;F=q+V|0;if(F>>>0<=q>>>0|F>>>0>z>>>0){l=0}else{break}return l|0}}while(0);e:do{if((n[319]&4|0)==0){z=n[214]|0;a:do{if((z|0)==0){G=292}else{F=z;q=1280;while(1){W=q|0;L=n[W>>2]|0;if(L>>>0<=F>>>0){Y=q+4|0;if((L+(n[Y>>2]|0)|0)>>>0>F>>>0){break}}L=n[q+8>>2]|0;if((L|0)==0){G=292;break a}else{q=L}}if((q|0)==0){G=292;break}F=H-(n[211]|0)&U;if(F>>>0>=2147483647){K=0;break}u=Ze(F|0)|0;r=(u|0)==((n[W>>2]|0)+(n[Y>>2]|0)|0);Q=r?u:-1;Z=r?F:0;J=u;X=F;G=301}}while(0);do{if((G|0)==292){z=Ze(0)|0;if((z|0)==-1){K=0;break}i=z;F=n[201]|0;u=F-1|0;if((u&i|0)==0){$=V}else{$=V-i+(u+i&-F)|0}F=n[316]|0;i=F+$|0;if(!($>>>0>p>>>0&$>>>0<2147483647)){K=0;break}u=n[318]|0;if((u|0)!=0){if(i>>>0<=F>>>0|i>>>0>u>>>0){K=0;break}}u=Ze($|0)|0;i=(u|0)==(z|0);Q=i?z:-1;Z=i?$:0;J=u;X=$;G=301}}while(0);a:do{if((G|0)==301){u=-X|0;if((Q|0)!=-1){ee=Z;ae=Q;G=312;break e}do{if((J|0)!=-1&X>>>0<2147483647&X>>>0<I>>>0){i=n[202]|0;z=P-X+i&-i;if(z>>>0>=2147483647){te=X;break}if((Ze(z|0)|0)==-1){Ze(u|0)|0;K=Z;break a}else{te=z+X|0;break}}else{te=X}}while(0);if((J|0)==-1){K=Z}else{ee=te;ae=J;G=312;break e}}}while(0);n[319]=n[319]|4;re=K;G=309}else{re=0;G=309}}while(0);do{if((G|0)==309){if(V>>>0>=2147483647){break}K=Ze(V|0)|0;J=Ze(0)|0;if(!((J|0)!=-1&(K|0)!=-1&K>>>0<J>>>0)){break}te=J-K|0;J=te>>>0>(p+40|0)>>>0;Z=J?K:-1;if((Z|0)!=-1){ee=J?te:re;ae=Z;G=312}}}while(0);do{if((G|0)==312){re=(n[316]|0)+ee|0;n[316]=re;if(re>>>0>(n[317]|0)>>>0){n[317]=re}re=n[214]|0;e:do{if((re|0)==0){V=n[212]|0;if((V|0)==0|ae>>>0<V>>>0){n[212]=ae}n[320]=ae;n[321]=ee;n[323]=0;n[217]=n[200];n[216]=-1;V=0;do{Z=V<<1;te=872+(Z<<2)|0;n[872+(Z+3<<2)>>2]=te;n[872+(Z+2<<2)>>2]=te;V=V+1|0}while(V>>>0<32);V=ae+8|0;if((V&7|0)==0){ce=0}else{ce=-V&7}V=ee-40-ce|0;n[214]=ae+ce;n[211]=V;n[ae+(ce+4)>>2]=V|1;n[ae+(ee-36)>>2]=40;n[215]=n[204]}else{V=1280;while(1){ne=n[V>>2]|0;ie=V+4|0;fe=n[ie>>2]|0;if((ae|0)==(ne+fe|0)){G=324;break}te=n[V+8>>2]|0;if((te|0)==0){break}else{V=te}}do{if((G|0)==324){if((n[V+12>>2]&8|0)!=0){break}te=re;if(!(te>>>0>=ne>>>0&te>>>0<ae>>>0)){break}n[ie>>2]=fe+ee;te=n[214]|0;Z=(n[211]|0)+ee|0;J=te;K=te+8|0;if((K&7|0)==0){oe=0}else{oe=-K&7}K=Z-oe|0;n[214]=J+oe;n[211]=K;n[J+(oe+4)>>2]=K|1;n[J+(Z+4)>>2]=40;n[215]=n[204];break e}}while(0);if(ae>>>0<(n[212]|0)>>>0){n[212]=ae}V=ae+ee|0;Z=1280;while(1){de=Z|0;if((n[de>>2]|0)==(V|0)){G=334;break}J=n[Z+8>>2]|0;if((J|0)==0){break}else{Z=J}}do{if((G|0)==334){if((n[Z+12>>2]&8|0)!=0){break}n[de>>2]=ae;V=Z+4|0;n[V>>2]=(n[V>>2]|0)+ee;V=ae+8|0;if((V&7|0)==0){se=0}else{se=-V&7}V=ae+(ee+8)|0;if((V&7|0)==0){be=0}else{be=-V&7}V=ae+(be+ee)|0;J=V;K=se+p|0;te=ae+K|0;X=te;P=V-(ae+se)-p|0;n[ae+(se+4)>>2]=p|3;do{if((J|0)==(n[214]|0)){I=(n[211]|0)+P|0;n[211]=I;n[214]=X;n[ae+(K+4)>>2]=I|1}else{if((J|0)==(n[213]|0)){I=(n[210]|0)+P|0;n[210]=I;n[213]=X;n[ae+(K+4)>>2]=I|1;n[ae+(I+K)>>2]=I;break}I=ee+4|0;Q=n[ae+(I+be)>>2]|0;if((Q&3|0)==1){$=Q&-8;Y=Q>>>3;a:do{if(Q>>>0<256){W=n[ae+((be|8)+ee)>>2]|0;U=n[ae+(ee+12+be)>>2]|0;H=872+(Y<<1<<2)|0;do{if((W|0)!=(H|0)){if(W>>>0<(n[212]|0)>>>0){ke();return 0}if((n[W+12>>2]|0)==(J|0)){break}ke();return 0}}while(0);if((U|0)==(W|0)){n[208]=n[208]&~(1<<Y);break}do{if((U|0)==(H|0)){ue=U+8|0}else{if(U>>>0<(n[212]|0)>>>0){ke();return 0}u=U+8|0;if((n[u>>2]|0)==(J|0)){ue=u;break}ke();return 0}}while(0);n[W+12>>2]=U;n[ue>>2]=W}else{H=V;u=n[ae+((be|24)+ee)>>2]|0;q=n[ae+(ee+12+be)>>2]|0;do{if((q|0)==(H|0)){z=be|16;i=ae+(I+z)|0;F=n[i>>2]|0;if((F|0)==0){r=ae+(z+ee)|0;z=n[r>>2]|0;if((z|0)==0){le=0;break}else{pe=z;he=r}}else{pe=F;he=i}while(1){i=pe+20|0;F=n[i>>2]|0;if((F|0)!=0){pe=F;he=i;continue}i=pe+16|0;F=n[i>>2]|0;if((F|0)==0){break}else{pe=F;he=i}}if(he>>>0<(n[212]|0)>>>0){ke();return 0}else{n[he>>2]=0;le=pe;break}}else{i=n[ae+((be|8)+ee)>>2]|0;if(i>>>0<(n[212]|0)>>>0){ke();return 0}F=i+12|0;if((n[F>>2]|0)!=(H|0)){ke();return 0}r=q+8|0;if((n[r>>2]|0)==(H|0)){n[F>>2]=q;n[r>>2]=i;le=q;break}else{ke();return 0}}}while(0);if((u|0)==0){break}q=ae+(ee+28+be)|0;W=1136+(n[q>>2]<<2)|0;do{if((H|0)==(n[W>>2]|0)){n[W>>2]=le;if((le|0)!=0){break}n[209]=n[209]&~(1<<n[q>>2]);break a}else{if(u>>>0<(n[212]|0)>>>0){ke();return 0}U=u+16|0;if((n[U>>2]|0)==(H|0)){n[U>>2]=le}else{n[u+20>>2]=le}if((le|0)==0){break a}}}while(0);if(le>>>0<(n[212]|0)>>>0){ke();return 0}n[le+24>>2]=u;H=be|16;q=n[ae+(H+ee)>>2]|0;do{if((q|0)!=0){if(q>>>0<(n[212]|0)>>>0){ke();return 0}else{n[le+16>>2]=q;n[q+24>>2]=le;break}}}while(0);q=n[ae+(I+H)>>2]|0;if((q|0)==0){break}if(q>>>0<(n[212]|0)>>>0){ke();return 0}else{n[le+20>>2]=q;n[q+24>>2]=le;break}}}while(0);me=ae+(($|be)+ee)|0;ge=$+P|0}else{me=J;ge=P}I=me+4|0;n[I>>2]=n[I>>2]&-2;n[ae+(K+4)>>2]=ge|1;n[ae+(ge+K)>>2]=ge;I=ge>>>3;if(ge>>>0<256){Y=I<<1;Q=872+(Y<<2)|0;q=n[208]|0;u=1<<I;do{if((q&u|0)==0){n[208]=q|u;ve=Q;ye=872+(Y+2<<2)|0}else{I=872+(Y+2<<2)|0;W=n[I>>2]|0;if(W>>>0>=(n[212]|0)>>>0){ve=W;ye=I;break}ke();return 0}}while(0);n[ye>>2]=X;n[ve+12>>2]=X;n[ae+(K+8)>>2]=ve;n[ae+(K+12)>>2]=Q;break}Y=te;u=ge>>>8;do{if((u|0)==0){we=0}else{if(ge>>>0>16777215){we=31;break}q=(u+1048320|0)>>>16&8;$=u<<q;I=($+520192|0)>>>16&4;W=$<<I;$=(W+245760|0)>>>16&2;U=14-(I|q|$)+(W<<$>>>15)|0;we=ge>>>((U+7|0)>>>0)&1|U<<1}}while(0);u=1136+(we<<2)|0;n[ae+(K+28)>>2]=we;n[ae+(K+20)>>2]=0;n[ae+(K+16)>>2]=0;Q=n[209]|0;U=1<<we;if((Q&U|0)==0){n[209]=Q|U;n[u>>2]=Y;n[ae+(K+24)>>2]=u;n[ae+(K+12)>>2]=Y;n[ae+(K+8)>>2]=Y;break}if((we|0)==31){Ae=0}else{Ae=25-(we>>>1)|0}U=ge<<Ae;Q=n[u>>2]|0;while(1){if((n[Q+4>>2]&-8|0)==(ge|0)){break}xe=Q+16+(U>>>31<<2)|0;u=n[xe>>2]|0;if((u|0)==0){G=407;break}else{U=U<<1;Q=u}}if((G|0)==407){if(xe>>>0<(n[212]|0)>>>0){ke();return 0}else{n[xe>>2]=Y;n[ae+(K+24)>>2]=Q;n[ae+(K+12)>>2]=Y;n[ae+(K+8)>>2]=Y;break}}U=Q+8|0;u=n[U>>2]|0;$=n[212]|0;if(Q>>>0<$>>>0){ke();return 0}if(u>>>0<$>>>0){ke();return 0}else{n[u+12>>2]=Y;n[U>>2]=Y;n[ae+(K+8)>>2]=u;n[ae+(K+12)>>2]=Q;n[ae+(K+24)>>2]=0;break}}}while(0);l=ae+(se|8)|0;return l|0}}while(0);Z=re;K=1280;while(1){Ee=n[K>>2]|0;if(Ee>>>0<=Z>>>0){Se=n[K+4>>2]|0;Te=Ee+Se|0;if(Te>>>0>Z>>>0){break}}K=n[K+8>>2]|0}K=Ee+(Se-39)|0;if((K&7|0)==0){je=0}else{je=-K&7}K=Ee+(Se-47+je)|0;te=K>>>0<(re+16|0)>>>0?Z:K;K=te+8|0;X=ae+8|0;if((X&7|0)==0){Ce=0}else{Ce=-X&7}X=ee-40-Ce|0;n[214]=ae+Ce;n[211]=X;n[ae+(Ce+4)>>2]=X|1;n[ae+(ee-36)>>2]=40;n[215]=n[204];n[te+4>>2]=27;n[K>>2]=n[320];n[K+4>>2]=n[1284>>2];n[K+8>>2]=n[1288>>2];n[K+12>>2]=n[1292>>2];n[320]=ae;n[321]=ee;n[323]=0;n[322]=K;K=te+28|0;n[K>>2]=7;if((te+32|0)>>>0<Te>>>0){X=K;while(1){K=X+4|0;n[K>>2]=7;if((X+8|0)>>>0<Te>>>0){X=K}else{break}}}if((te|0)==(Z|0)){break}X=te-re|0;K=Z+(X+4)|0;n[K>>2]=n[K>>2]&-2;n[re+4>>2]=X|1;n[Z+X>>2]=X;K=X>>>3;if(X>>>0<256){P=K<<1;J=872+(P<<2)|0;V=n[208]|0;u=1<<K;do{if((V&u|0)==0){n[208]=V|u;Re=J;Oe=872+(P+2<<2)|0}else{K=872+(P+2<<2)|0;U=n[K>>2]|0;if(U>>>0>=(n[212]|0)>>>0){Re=U;Oe=K;break}ke();return 0}}while(0);n[Oe>>2]=re;n[Re+12>>2]=re;n[re+8>>2]=Re;n[re+12>>2]=J;break}P=re;u=X>>>8;do{if((u|0)==0){Be=0}else{if(X>>>0>16777215){Be=31;break}V=(u+1048320|0)>>>16&8;Z=u<<V;te=(Z+520192|0)>>>16&4;K=Z<<te;Z=(K+245760|0)>>>16&2;U=14-(te|V|Z)+(K<<Z>>>15)|0;Be=X>>>((U+7|0)>>>0)&1|U<<1}}while(0);u=1136+(Be<<2)|0;n[re+28>>2]=Be;n[re+20>>2]=0;n[re+16>>2]=0;J=n[209]|0;U=1<<Be;if((J&U|0)==0){n[209]=J|U;n[u>>2]=P;n[re+24>>2]=u;n[re+12>>2]=re;n[re+8>>2]=re;break}if((Be|0)==31){Me=0}else{Me=25-(Be>>>1)|0}U=X<<Me;J=n[u>>2]|0;while(1){if((n[J+4>>2]&-8|0)==(X|0)){break}Ne=J+16+(U>>>31<<2)|0;u=n[Ne>>2]|0;if((u|0)==0){G=442;break}else{U=U<<1;J=u}}if((G|0)==442){if(Ne>>>0<(n[212]|0)>>>0){ke();return 0}else{n[Ne>>2]=P;n[re+24>>2]=J;n[re+12>>2]=re;n[re+8>>2]=re;break}}U=J+8|0;X=n[U>>2]|0;u=n[212]|0;if(J>>>0<u>>>0){ke();return 0}if(X>>>0<u>>>0){ke();return 0}else{n[X+12>>2]=P;n[U>>2]=P;n[re+8>>2]=X;n[re+12>>2]=J;n[re+24>>2]=0;break}}}while(0);re=n[211]|0;if(re>>>0<=p>>>0){break}X=re-p|0;n[211]=X;re=n[214]|0;U=re;n[214]=U+p;n[U+(p+4)>>2]=X|1;n[re+4>>2]=p|3;l=re+8|0;return l|0}}while(0);n[(Xe()|0)>>2]=12;l=0;return l|0}function Ga(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0;if((e|0)==0){return}a=e-8|0;t=a;r=n[212]|0;if(a>>>0<r>>>0){ke()}c=n[e-4>>2]|0;i=c&3;if((i|0)==1){ke()}f=c&-8;o=e+(f-8)|0;d=o;e:do{if((c&1|0)==0){s=n[a>>2]|0;if((i|0)==0){return}b=-8-s|0;u=e+b|0;l=u;p=s+f|0;if(u>>>0<r>>>0){ke()}if((l|0)==(n[213]|0)){h=e+(f-4)|0;if((n[h>>2]&3|0)!=3){m=l;g=p;break}n[210]=p;n[h>>2]=n[h>>2]&-2;n[e+(b+4)>>2]=p|1;n[o>>2]=p;return}h=s>>>3;if(s>>>0<256){s=n[e+(b+8)>>2]|0;v=n[e+(b+12)>>2]|0;y=872+(h<<1<<2)|0;do{if((s|0)!=(y|0)){if(s>>>0<r>>>0){ke()}if((n[s+12>>2]|0)==(l|0)){break}ke()}}while(0);if((v|0)==(s|0)){n[208]=n[208]&~(1<<h);m=l;g=p;break}do{if((v|0)==(y|0)){_=v+8|0}else{if(v>>>0<r>>>0){ke()}w=v+8|0;if((n[w>>2]|0)==(l|0)){_=w;break}ke()}}while(0);n[s+12>>2]=v;n[_>>2]=s;m=l;g=p;break}y=u;h=n[e+(b+24)>>2]|0;w=n[e+(b+12)>>2]|0;do{if((w|0)==(y|0)){A=e+(b+20)|0;k=n[A>>2]|0;if((k|0)==0){x=e+(b+16)|0;E=n[x>>2]|0;if((E|0)==0){S=0;break}else{T=E;j=x}}else{T=k;j=A}while(1){A=T+20|0;k=n[A>>2]|0;if((k|0)!=0){T=k;j=A;continue}A=T+16|0;k=n[A>>2]|0;if((k|0)==0){break}else{T=k;j=A}}if(j>>>0<r>>>0){ke()}else{n[j>>2]=0;S=T;break}}else{A=n[e+(b+8)>>2]|0;if(A>>>0<r>>>0){ke()}k=A+12|0;if((n[k>>2]|0)!=(y|0)){ke()}x=w+8|0;if((n[x>>2]|0)==(y|0)){n[k>>2]=w;n[x>>2]=A;S=w;break}else{ke()}}}while(0);if((h|0)==0){m=l;g=p;break}w=e+(b+28)|0;u=1136+(n[w>>2]<<2)|0;do{if((y|0)==(n[u>>2]|0)){n[u>>2]=S;if((S|0)!=0){break}n[209]=n[209]&~(1<<n[w>>2]);m=l;g=p;break e}else{if(h>>>0<(n[212]|0)>>>0){ke()}s=h+16|0;if((n[s>>2]|0)==(y|0)){n[s>>2]=S}else{n[h+20>>2]=S}if((S|0)==0){m=l;g=p;break e}}}while(0);if(S>>>0<(n[212]|0)>>>0){ke()}n[S+24>>2]=h;y=n[e+(b+16)>>2]|0;do{if((y|0)!=0){if(y>>>0<(n[212]|0)>>>0){ke()}else{n[S+16>>2]=y;n[y+24>>2]=S;break}}}while(0);y=n[e+(b+20)>>2]|0;if((y|0)==0){m=l;g=p;break}if(y>>>0<(n[212]|0)>>>0){ke()}else{n[S+20>>2]=y;n[y+24>>2]=S;m=l;g=p;break}}else{m=t;g=f}}while(0);t=m;if(t>>>0>=o>>>0){ke()}S=e+(f-4)|0;r=n[S>>2]|0;if((r&1|0)==0){ke()}do{if((r&2|0)==0){if((d|0)==(n[214]|0)){T=(n[211]|0)+g|0;n[211]=T;n[214]=m;n[m+4>>2]=T|1;if((m|0)==(n[213]|0)){n[213]=0;n[210]=0}if(T>>>0<=(n[215]|0)>>>0){return}Ja(0)|0;return}if((d|0)==(n[213]|0)){T=(n[210]|0)+g|0;n[210]=T;n[213]=m;n[m+4>>2]=T|1;n[t+T>>2]=T;return}T=(r&-8)+g|0;j=r>>>3;e:do{if(r>>>0<256){_=n[e+f>>2]|0;i=n[e+(f|4)>>2]|0;a=872+(j<<1<<2)|0;do{if((_|0)!=(a|0)){if(_>>>0<(n[212]|0)>>>0){ke()}if((n[_+12>>2]|0)==(d|0)){break}ke()}}while(0);if((i|0)==(_|0)){n[208]=n[208]&~(1<<j);break}do{if((i|0)==(a|0)){C=i+8|0}else{if(i>>>0<(n[212]|0)>>>0){ke()}c=i+8|0;if((n[c>>2]|0)==(d|0)){C=c;break}ke()}}while(0);n[_+12>>2]=i;n[C>>2]=_}else{a=o;c=n[e+(f+16)>>2]|0;y=n[e+(f|4)>>2]|0;do{if((y|0)==(a|0)){h=e+(f+12)|0;w=n[h>>2]|0;if((w|0)==0){u=e+(f+8)|0;s=n[u>>2]|0;if((s|0)==0){R=0;break}else{O=s;B=u}}else{O=w;B=h}while(1){h=O+20|0;w=n[h>>2]|0;if((w|0)!=0){O=w;B=h;continue}h=O+16|0;w=n[h>>2]|0;if((w|0)==0){break}else{O=w;B=h}}if(B>>>0<(n[212]|0)>>>0){ke()}else{n[B>>2]=0;R=O;break}}else{h=n[e+f>>2]|0;if(h>>>0<(n[212]|0)>>>0){ke()}w=h+12|0;if((n[w>>2]|0)!=(a|0)){ke()}u=y+8|0;if((n[u>>2]|0)==(a|0)){n[w>>2]=y;n[u>>2]=h;R=y;break}else{ke()}}}while(0);if((c|0)==0){break}y=e+(f+20)|0;_=1136+(n[y>>2]<<2)|0;do{if((a|0)==(n[_>>2]|0)){n[_>>2]=R;if((R|0)!=0){break}n[209]=n[209]&~(1<<n[y>>2]);break e}else{if(c>>>0<(n[212]|0)>>>0){ke()}i=c+16|0;if((n[i>>2]|0)==(a|0)){n[i>>2]=R}else{n[c+20>>2]=R}if((R|0)==0){break e}}}while(0);if(R>>>0<(n[212]|0)>>>0){ke()}n[R+24>>2]=c;a=n[e+(f+8)>>2]|0;do{if((a|0)!=0){if(a>>>0<(n[212]|0)>>>0){ke()}else{n[R+16>>2]=a;n[a+24>>2]=R;break}}}while(0);a=n[e+(f+12)>>2]|0;if((a|0)==0){break}if(a>>>0<(n[212]|0)>>>0){ke()}else{n[R+20>>2]=a;n[a+24>>2]=R;break}}}while(0);n[m+4>>2]=T|1;n[t+T>>2]=T;if((m|0)!=(n[213]|0)){M=T;break}n[210]=T;return}else{n[S>>2]=r&-2;n[m+4>>2]=g|1;n[t+g>>2]=g;M=g}}while(0);g=M>>>3;if(M>>>0<256){t=g<<1;r=872+(t<<2)|0;S=n[208]|0;R=1<<g;do{if((S&R|0)==0){n[208]=S|R;N=r;I=872+(t+2<<2)|0}else{g=872+(t+2<<2)|0;f=n[g>>2]|0;if(f>>>0>=(n[212]|0)>>>0){N=f;I=g;break}ke()}}while(0);n[I>>2]=m;n[N+12>>2]=m;n[m+8>>2]=N;n[m+12>>2]=r;return}r=m;N=M>>>8;do{if((N|0)==0){P=0}else{if(M>>>0>16777215){P=31;break}I=(N+1048320|0)>>>16&8;t=N<<I;R=(t+520192|0)>>>16&4;S=t<<R;t=(S+245760|0)>>>16&2;g=14-(R|I|t)+(S<<t>>>15)|0;P=M>>>((g+7|0)>>>0)&1|g<<1}}while(0);N=1136+(P<<2)|0;n[m+28>>2]=P;n[m+20>>2]=0;n[m+16>>2]=0;g=n[209]|0;t=1<<P;do{if((g&t|0)==0){n[209]=g|t;n[N>>2]=r;n[m+24>>2]=N;n[m+12>>2]=m;n[m+8>>2]=m}else{if((P|0)==31){F=0}else{F=25-(P>>>1)|0}S=M<<F;I=n[N>>2]|0;while(1){if((n[I+4>>2]&-8|0)==(M|0)){break}L=I+16+(S>>>31<<2)|0;R=n[L>>2]|0;if((R|0)==0){D=621;break}else{S=S<<1;I=R}}if((D|0)==621){if(L>>>0<(n[212]|0)>>>0){ke()}else{n[L>>2]=r;n[m+24>>2]=I;n[m+12>>2]=m;n[m+8>>2]=m;break}}S=I+8|0;T=n[S>>2]|0;R=n[212]|0;if(I>>>0<R>>>0){ke()}if(T>>>0<R>>>0){ke()}else{n[T+12>>2]=r;n[S>>2]=r;n[m+8>>2]=T;n[m+12>>2]=I;n[m+24>>2]=0;break}}}while(0);m=(n[216]|0)-1|0;n[216]=m;if((m|0)==0){z=1288}else{return}while(1){m=n[z>>2]|0;if((m|0)==0){break}else{z=m+8|0}}n[216]=-1;return}function Wa(e,a){e=e|0;a=a|0;var t=0,r=0;do{if((e|0)==0){t=0}else{r=ie(a,e)|0;if((a|e)>>>0<=65535){t=r;break}t=((r>>>0)/(e>>>0)|0|0)==(a|0)?r:-1}}while(0);a=Va(t)|0;if((a|0)==0){return a|0}if((n[a-4>>2]&3|0)==0){return a|0}er(a|0,0,t|0);return a|0}function Ya(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;if((e|0)==0){t=Va(a)|0;return t|0}if(a>>>0>4294967231){n[(Xe()|0)>>2]=12;t=0;return t|0}if(a>>>0<11){r=16}else{r=a+11&-8}c=Xa(e-8|0,r)|0;if((c|0)!=0){t=c+8|0;return t|0}c=Va(a)|0;if((c|0)==0){t=0;return t|0}r=n[e-4>>2]|0;i=(r&-8)-((r&3|0)==0?8:4)|0;r=i>>>0<a>>>0?i:a;$t(c|0,e|0,r)|0;Ga(e);t=c;return t|0}function Ka(e,a){e=e|0;a=a|0;var t=0;if((e|0)==0){return 0}if(a>>>0>4294967231){n[(Xe()|0)>>2]=12;return 0}if(a>>>0<11){t=16}else{t=a+11&-8}a=e-8|0;return((Xa(a,t)|0)==(a|0)?e:0)|0}function Qa(e,a){e=e|0;a=a|0;var t=0;if(e>>>0<9){t=Va(a)|0;return t|0}else{t=Za(e,a)|0;return t|0}return 0}function Za(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0;t=e>>>0<16?16:e;if((t-1&t|0)==0){r=t}else{e=16;while(1){if(e>>>0<t>>>0){e=e<<1}else{r=e;break}}}if((-64-r|0)>>>0<=a>>>0){n[(Xe()|0)>>2]=12;c=0;return c|0}if(a>>>0<11){i=16}else{i=a+11&-8}a=Va(r+12+i|0)|0;if((a|0)==0){c=0;return c|0}e=a-8|0;t=e;f=r-1|0;do{if((a&f|0)==0){o=t}else{d=a+f&-r;s=d-8|0;b=e;if((s-b|0)>>>0>15){u=s}else{u=d+(r-8)|0}d=u;s=u-b|0;b=a-4|0;l=n[b>>2]|0;p=(l&-8)-s|0;if((l&3|0)==0){n[u>>2]=(n[e>>2]|0)+s;n[u+4>>2]=p;o=d;break}else{l=u+4|0;n[l>>2]=p|n[l>>2]&1|2;l=u+(p+4)|0;n[l>>2]=n[l>>2]|1;n[b>>2]=s|n[b>>2]&1|2;b=a+(s-4)|0;n[b>>2]=n[b>>2]|1;mt(t,s);o=d;break}}}while(0);t=o+4|0;a=n[t>>2]|0;do{if((a&3|0)!=0){u=a&-8;if(u>>>0<=(i+16|0)>>>0){break}e=u-i|0;r=o;n[t>>2]=i|a&1|2;n[r+(i|4)>>2]=e|3;f=r+(u|4)|0;n[f>>2]=n[f>>2]|1;mt(r+i|0,e)}}while(0);c=o+8|0;return c|0}function Ja(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0;do{if((n[200]|0)==0){a=_e(8)|0;if((a-1&a|0)==0){n[202]=a;n[201]=a;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke();return 0}}}while(0);if(e>>>0>=4294967232){t=0;return t|0}a=n[214]|0;if((a|0)==0){t=0;return t|0}r=n[211]|0;do{if(r>>>0>(e+40|0)>>>0){c=n[202]|0;i=ie((((-40-e-1+r+c|0)>>>0)/(c>>>0)|0)-1|0,c)|0;f=a;o=1280;while(1){d=n[o>>2]|0;if(d>>>0<=f>>>0){if((d+(n[o+4>>2]|0)|0)>>>0>f>>>0){s=o;break}}d=n[o+8>>2]|0;if((d|0)==0){s=0;break}else{o=d}}if((n[s+12>>2]&8|0)!=0){break}o=Ze(0)|0;f=s+4|0;if((o|0)!=((n[s>>2]|0)+(n[f>>2]|0)|0)){break}d=Ze(-(i>>>0>2147483646?-2147483648-c|0:i)|0)|0;b=Ze(0)|0;if(!((d|0)!=-1&b>>>0<o>>>0)){break}d=o-b|0;if((o|0)==(b|0)){break}n[f>>2]=(n[f>>2]|0)-d;n[316]=(n[316]|0)-d;f=n[214]|0;u=(n[211]|0)-d|0;d=f;l=f+8|0;if((l&7|0)==0){p=0}else{p=-l&7}l=u-p|0;n[214]=d+p;n[211]=l;n[d+(p+4)>>2]=l|1;n[d+(u+4)>>2]=40;n[215]=n[204];t=(o|0)!=(b|0)|0;return t|0}}while(0);if((n[211]|0)>>>0<=(n[215]|0)>>>0){t=0;return t|0}n[215]=-1;t=0;return t|0}function Xa(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0;t=e+4|0;r=n[t>>2]|0;c=r&-8;i=e;f=i+c|0;o=f;d=n[212]|0;if(i>>>0<d>>>0){ke();return 0}s=r&3;if(!((s|0)!=1&i>>>0<f>>>0)){ke();return 0}b=i+(c|4)|0;u=n[b>>2]|0;if((u&1|0)==0){ke();return 0}if((s|0)==0){if(a>>>0<256){l=0;return l|0}do{if(c>>>0>=(a+4|0)>>>0){if((c-a|0)>>>0>n[202]<<1>>>0){break}else{l=e}return l|0}}while(0);l=0;return l|0}if(c>>>0>=a>>>0){s=c-a|0;if(s>>>0<=15){l=e;return l|0}n[t>>2]=r&1|a|2;n[i+(a+4)>>2]=s|3;n[b>>2]=n[b>>2]|1;mt(i+a|0,s);l=e;return l|0}if((o|0)==(n[214]|0)){s=(n[211]|0)+c|0;if(s>>>0<=a>>>0){l=0;return l|0}b=s-a|0;n[t>>2]=r&1|a|2;n[i+(a+4)>>2]=b|1;n[214]=i+a;n[211]=b;l=e;return l|0}if((o|0)==(n[213]|0)){b=(n[210]|0)+c|0;if(b>>>0<a>>>0){l=0;return l|0}s=b-a|0;if(s>>>0>15){n[t>>2]=r&1|a|2;n[i+(a+4)>>2]=s|1;n[i+b>>2]=s;p=i+(b+4)|0;n[p>>2]=n[p>>2]&-2;h=i+a|0;m=s}else{n[t>>2]=r&1|b|2;r=i+(b+4)|0;n[r>>2]=n[r>>2]|1;h=0;m=0}n[210]=m;n[213]=h;l=e;return l|0}if((u&2|0)!=0){l=0;return l|0}h=(u&-8)+c|0;if(h>>>0<a>>>0){l=0;return l|0}m=h-a|0;r=u>>>3;e:do{if(u>>>0<256){b=n[i+(c+8)>>2]|0;s=n[i+(c+12)>>2]|0;p=872+(r<<1<<2)|0;do{if((b|0)!=(p|0)){if(b>>>0<d>>>0){ke();return 0}if((n[b+12>>2]|0)==(o|0)){break}ke();return 0}}while(0);if((s|0)==(b|0)){n[208]=n[208]&~(1<<r);break}do{if((s|0)==(p|0)){g=s+8|0}else{if(s>>>0<d>>>0){ke();return 0}v=s+8|0;if((n[v>>2]|0)==(o|0)){g=v;break}ke();return 0}}while(0);n[b+12>>2]=s;n[g>>2]=b}else{p=f;v=n[i+(c+24)>>2]|0;y=n[i+(c+12)>>2]|0;do{if((y|0)==(p|0)){_=i+(c+20)|0;w=n[_>>2]|0;if((w|0)==0){A=i+(c+16)|0;k=n[A>>2]|0;if((k|0)==0){x=0;break}else{E=k;S=A}}else{E=w;S=_}while(1){_=E+20|0;w=n[_>>2]|0;if((w|0)!=0){E=w;S=_;continue}_=E+16|0;w=n[_>>2]|0;if((w|0)==0){break}else{E=w;S=_}}if(S>>>0<d>>>0){ke();return 0}else{n[S>>2]=0;x=E;break}}else{_=n[i+(c+8)>>2]|0;if(_>>>0<d>>>0){ke();return 0}w=_+12|0;if((n[w>>2]|0)!=(p|0)){ke();return 0}A=y+8|0;if((n[A>>2]|0)==(p|0)){n[w>>2]=y;n[A>>2]=_;x=y;break}else{ke();return 0}}}while(0);if((v|0)==0){break}y=i+(c+28)|0;b=1136+(n[y>>2]<<2)|0;do{if((p|0)==(n[b>>2]|0)){n[b>>2]=x;if((x|0)!=0){break}n[209]=n[209]&~(1<<n[y>>2]);break e}else{if(v>>>0<(n[212]|0)>>>0){ke();return 0}s=v+16|0;if((n[s>>2]|0)==(p|0)){n[s>>2]=x}else{n[v+20>>2]=x}if((x|0)==0){break e}}}while(0);if(x>>>0<(n[212]|0)>>>0){ke();return 0}n[x+24>>2]=v;p=n[i+(c+16)>>2]|0;do{if((p|0)!=0){if(p>>>0<(n[212]|0)>>>0){ke();return 0}else{n[x+16>>2]=p;n[p+24>>2]=x;break}}}while(0);p=n[i+(c+20)>>2]|0;if((p|0)==0){break}if(p>>>0<(n[212]|0)>>>0){ke();return 0}else{n[x+20>>2]=p;n[p+24>>2]=x;break}}}while(0);if(m>>>0<16){n[t>>2]=h|n[t>>2]&1|2;x=i+(h|4)|0;n[x>>2]=n[x>>2]|1;l=e;return l|0}else{n[t>>2]=n[t>>2]&1|a|2;n[i+(a+4)>>2]=m|3;t=i+(h|4)|0;n[t>>2]=n[t>>2]|1;mt(i+a|0,m);l=e;return l|0}return 0}function $a(){return n[316]|0}function et(){return n[317]|0}function at(){var e=0;e=n[318]|0;return((e|0)==0?-1:e)|0}function tt(e){e=e|0;var a=0,t=0;if((e|0)==-1){a=0}else{t=n[202]|0;a=e-1+t&-t}n[318]=a;return a|0}function rt(e){e=e|0;var a=0,t=0,r=0;do{if((e|0)==0){a=0}else{t=n[e-4>>2]|0;r=t&3;if((r|0)==1){a=0;break}a=(t&-8)-((r|0)==0?8:4)|0}}while(0);return a|0}function ct(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0;do{if((a|0)==8){r=Va(t)|0}else{c=a>>>2;if((a&3|0)!=0|(c|0)==0){i=22;return i|0}if((c+1073741823&c|0)!=0){i=22;return i|0}if((-64-a|0)>>>0<t>>>0){i=12;return i|0}else{r=Za(a>>>0<16?16:a,t)|0;break}}}while(0);if((r|0)==0){i=12;return i|0}n[e>>2]=r;i=0;return i|0}function nt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=b;b=b+8|0;c=r|0;n[c>>2]=a;a=dt(e,c,3,t)|0;b=r;return a|0}function it(e,a,t){e=e|0;a=a|0;t=t|0;return dt(e,a,0,t)|0}function ft(e){e=e|0;var a=0,t=0,r=0;if((n[200]|0)!=0){a=n[201]|0;t=Qa(a,e)|0;return t|0}r=_e(8)|0;if((r-1&r|0)!=0){ke();return 0}n[202]=r;n[201]=r;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;a=n[201]|0;t=Qa(a,e)|0;return t|0}function ot(e){e=e|0;var a=0;do{if((n[200]|0)==0){a=_e(8)|0;if((a-1&a|0)==0){n[202]=a;n[201]=a;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke();return 0}}}while(0);a=n[201]|0;return Qa(a,e-1+a&-a)|0}function dt(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;do{if((n[200]|0)==0){c=_e(8)|0;if((c-1&c|0)==0){n[202]=c;n[201]=c;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke();return 0}}}while(0);c=(e|0)==0;do{if((r|0)==0){if(c){i=Va(0)|0;return i|0}else{f=e<<2;if(f>>>0<11){o=0;d=16;break}o=0;d=f+11&-8;break}}else{if(c){i=r}else{o=r;d=0;break}return i|0}}while(0);do{if((t&1|0)==0){if(c){s=0;b=0;break}else{u=0;l=0}while(1){r=n[a+(l<<2)>>2]|0;if(r>>>0<11){p=16}else{p=r+11&-8}r=p+u|0;f=l+1|0;if((f|0)==(e|0)){s=0;b=r;break}else{u=r;l=f}}}else{f=n[a>>2]|0;if(f>>>0<11){h=16}else{h=f+11&-8}s=h;b=ie(h,e)|0}}while(0);h=Va(d-4+b|0)|0;if((h|0)==0){i=0;return i|0}l=h-8|0;u=n[h-4>>2]&-8;if((t&2|0)!=0){er(h|0,0,-4-d+u|0)}if((o|0)==0){n[h+(b-4)>>2]=u-b|3;m=h+b|0;g=b}else{m=o;g=u}n[m>>2]=h;h=e-1|0;e:do{if((h|0)==0){v=l;y=g}else{if((s|0)==0){_=l;w=g;A=0}else{e=l;u=g;o=0;while(1){b=u-s|0;n[e+4>>2]=s|3;d=e+s|0;t=o+1|0;n[m+(t<<2)>>2]=e+(s+8);if((t|0)==(h|0)){v=d;y=b;break e}else{e=d;u=b;o=t}}}while(1){o=n[a+(A<<2)>>2]|0;if(o>>>0<11){k=16}else{k=o+11&-8}o=w-k|0;n[_+4>>2]=k|3;u=_+k|0;e=A+1|0;n[m+(e<<2)>>2]=_+(k+8);if((e|0)==(h|0)){v=u;y=o;break}else{_=u;w=o;A=e}}}}while(0);n[v+4>>2]=y|3;i=m;return i|0}function st(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0;t=e+(a<<2)|0;e:do{if((a|0)!=0){r=e;a:while(1){c=n[r>>2]|0;t:do{if((c|0)==0){i=r+4|0}else{f=c-8|0;o=f;d=c-4|0;s=n[d>>2]&-8;n[r>>2]=0;if(f>>>0<(n[212]|0)>>>0){b=935;break a}f=n[d>>2]|0;if((f&3|0)==1){b=936;break a}u=r+4|0;l=f-8&-8;do{if((u|0)!=(t|0)){if((n[u>>2]|0)!=(c+(l+8)|0)){break}p=(n[c+(l|4)>>2]&-8)+s|0;n[d>>2]=f&1|p|2;h=c+(p-4)|0;n[h>>2]=n[h>>2]|1;n[u>>2]=c;i=u;break t}}while(0);mt(o,s);i=u}}while(0);if((i|0)==(t|0)){break e}else{r=i}}if((b|0)==935){ke();return 0}else if((b|0)==936){ke();return 0}}}while(0);if((n[211]|0)>>>0<=(n[215]|0)>>>0){return 0}Ja(0)|0;return 0}function bt(e){e=e|0;var a=0,t=0;if((n[200]|0)!=0){a=Ja(e)|0;return a|0}t=_e(8)|0;if((t-1&t|0)!=0){ke();return 0}n[202]=t;n[201]=t;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;a=Ja(e)|0;return a|0}function ut(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0;do{if((n[200]|0)==0){a=_e(8)|0;if((a-1&a|0)==0){n[202]=a;n[201]=a;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke()}}}while(0);a=n[214]|0;if((a|0)==0){t=0;r=0;c=0;i=0;f=0;o=0;d=0}else{s=n[211]|0;b=s+40|0;u=1;l=b;p=b;b=1280;while(1){h=n[b>>2]|0;m=h+8|0;if((m&7|0)==0){g=0}else{g=-m&7}m=h+(n[b+4>>2]|0)|0;v=u;y=l;_=p;w=h+g|0;while(1){if(w>>>0>=m>>>0|(w|0)==(a|0)){A=v;k=y;x=_;break}E=n[w+4>>2]|0;if((E|0)==7){A=v;k=y;x=_;break}S=E&-8;T=S+_|0;if((E&3|0)==1){j=S+y|0;C=v+1|0}else{j=y;C=v}E=w+S|0;if(E>>>0<h>>>0){A=C;k=j;x=T;break}else{v=C;y=j;_=T;w=E}}w=n[b+8>>2]|0;if((w|0)==0){break}else{u=A;l=k;p=x;b=w}}b=n[316]|0;t=s;r=x;c=A;i=b-x|0;f=n[317]|0;o=b-k|0;d=k}n[e>>2]=r;n[e+4>>2]=c;c=e+8|0;n[c>>2]=0;n[c+4>>2]=0;n[e+16>>2]=i;n[e+20>>2]=f;n[e+24>>2]=0;n[e+28>>2]=o;n[e+32>>2]=d;n[e+36>>2]=t;return}function lt(){var e=0,a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,u=0,l=0,p=0,h=0,m=0,v=0,y=0,_=0;e=b;do{if((n[200]|0)==0){a=_e(8)|0;if((a-1&a|0)==0){n[202]=a;n[201]=a;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke()}}}while(0);a=n[214]|0;if((a|0)==0){t=0;r=0;c=0}else{i=n[317]|0;f=n[316]|0;o=f-40-(n[211]|0)|0;d=1280;while(1){s=n[d>>2]|0;u=s+8|0;if((u&7|0)==0){l=0}else{l=-u&7}u=s+(n[d+4>>2]|0)|0;p=o;h=s+l|0;while(1){if(h>>>0>=u>>>0|(h|0)==(a|0)){m=p;break}v=n[h+4>>2]|0;if((v|0)==7){m=p;break}y=v&-8;_=p-((v&3|0)==1?y:0)|0;v=h+y|0;if(v>>>0<s>>>0){m=_;break}else{p=_;h=v}}h=n[d+8>>2]|0;if((h|0)==0){t=m;r=f;c=i;break}else{o=m;d=h}}}xe(n[g>>2]|0,520,(T=b,b=b+8|0,n[T>>2]=c,T)|0)|0;xe(n[g>>2]|0,488,(T=b,b=b+8|0,n[T>>2]=r,T)|0)|0;xe(n[g>>2]|0,400,(T=b,b=b+8|0,n[T>>2]=t,T)|0)|0;b=e;return}function pt(e,a){e=e|0;a=a|0;var t=0,r=0;do{if((n[200]|0)==0){t=_e(8)|0;if((t-1&t|0)==0){n[202]=t;n[201]=t;n[203]=-1;n[204]=2097152;n[205]=0;n[319]=0;n[200]=(aa(0)|0)&-16^1431655768;break}else{ke();return 0}}}while(0);if((e|0)==(-1|0)){n[204]=a;r=1;return r|0}else if((e|0)==(-2|0)){if((n[201]|0)>>>0>a>>>0){r=0;return r|0}if((a-1&a|0)!=0){r=0;return r|0}n[202]=a;r=1;return r|0}else if((e|0)==(-3|0)){n[203]=a;r=1;return r|0}else{r=0;return r|0}return 0}function ht(){return(N=n[328]|0,n[328]=N+0,N)|0}function mt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0;t=e;r=t+a|0;c=r;i=n[e+4>>2]|0;e:do{if((i&1|0)==0){f=n[e>>2]|0;if((i&3|0)==0){return}o=t+(-f|0)|0;d=o;s=f+a|0;b=n[212]|0;if(o>>>0<b>>>0){ke()}if((d|0)==(n[213]|0)){u=t+(a+4)|0;if((n[u>>2]&3|0)!=3){l=d;p=s;break}n[210]=s;n[u>>2]=n[u>>2]&-2;n[t+(4-f)>>2]=s|1;n[r>>2]=s;return}u=f>>>3;if(f>>>0<256){h=n[t+(8-f)>>2]|0;m=n[t+(12-f)>>2]|0;g=872+(u<<1<<2)|0;do{if((h|0)!=(g|0)){if(h>>>0<b>>>0){ke()}if((n[h+12>>2]|0)==(d|0)){break}ke()}}while(0);if((m|0)==(h|0)){n[208]=n[208]&~(1<<u);l=d;p=s;break}do{if((m|0)==(g|0)){v=m+8|0}else{if(m>>>0<b>>>0){ke()}y=m+8|0;if((n[y>>2]|0)==(d|0)){v=y;break}ke()}}while(0);n[h+12>>2]=m;n[v>>2]=h;l=d;p=s;break}g=o;u=n[t+(24-f)>>2]|0;y=n[t+(12-f)>>2]|0;do{if((y|0)==(g|0)){_=16-f|0;w=t+(_+4)|0;A=n[w>>2]|0;if((A|0)==0){k=t+_|0;_=n[k>>2]|0;if((_|0)==0){x=0;break}else{E=_;S=k}}else{E=A;S=w}while(1){w=E+20|0;A=n[w>>2]|0;if((A|0)!=0){E=A;S=w;continue}w=E+16|0;A=n[w>>2]|0;if((A|0)==0){break}else{E=A;S=w}}if(S>>>0<b>>>0){ke()}else{n[S>>2]=0;x=E;break}}else{w=n[t+(8-f)>>2]|0;if(w>>>0<b>>>0){ke()}A=w+12|0;if((n[A>>2]|0)!=(g|0)){ke()}k=y+8|0;if((n[k>>2]|0)==(g|0)){n[A>>2]=y;n[k>>2]=w;x=y;break}else{ke()}}}while(0);if((u|0)==0){l=d;p=s;break}y=t+(28-f)|0;b=1136+(n[y>>2]<<2)|0;do{if((g|0)==(n[b>>2]|0)){n[b>>2]=x;if((x|0)!=0){break}n[209]=n[209]&~(1<<n[y>>2]);l=d;p=s;break e}else{if(u>>>0<(n[212]|0)>>>0){ke()}o=u+16|0;if((n[o>>2]|0)==(g|0)){n[o>>2]=x}else{n[u+20>>2]=x}if((x|0)==0){l=d;p=s;break e}}}while(0);if(x>>>0<(n[212]|0)>>>0){ke()}n[x+24>>2]=u;g=16-f|0;y=n[t+g>>2]|0;do{if((y|0)!=0){if(y>>>0<(n[212]|0)>>>0){ke()}else{n[x+16>>2]=y;n[y+24>>2]=x;break}}}while(0);y=n[t+(g+4)>>2]|0;if((y|0)==0){l=d;p=s;break}if(y>>>0<(n[212]|0)>>>0){ke()}else{n[x+20>>2]=y;n[y+24>>2]=x;l=d;p=s;break}}else{l=e;p=a}}while(0);e=n[212]|0;if(r>>>0<e>>>0){ke()}x=t+(a+4)|0;E=n[x>>2]|0;do{if((E&2|0)==0){if((c|0)==(n[214]|0)){S=(n[211]|0)+p|0;n[211]=S;n[214]=l;n[l+4>>2]=S|1;if((l|0)!=(n[213]|0)){return}n[213]=0;n[210]=0;return}if((c|0)==(n[213]|0)){S=(n[210]|0)+p|0;n[210]=S;n[213]=l;n[l+4>>2]=S|1;n[l+S>>2]=S;return}S=(E&-8)+p|0;v=E>>>3;e:do{if(E>>>0<256){i=n[t+(a+8)>>2]|0;y=n[t+(a+12)>>2]|0;f=872+(v<<1<<2)|0;do{if((i|0)!=(f|0)){if(i>>>0<e>>>0){ke()}if((n[i+12>>2]|0)==(c|0)){break}ke()}}while(0);if((y|0)==(i|0)){n[208]=n[208]&~(1<<v);break}do{if((y|0)==(f|0)){T=y+8|0}else{if(y>>>0<e>>>0){ke()}u=y+8|0;if((n[u>>2]|0)==(c|0)){T=u;break}ke()}}while(0);n[i+12>>2]=y;n[T>>2]=i}else{f=r;u=n[t+(a+24)>>2]|0;b=n[t+(a+12)>>2]|0;do{if((b|0)==(f|0)){o=t+(a+20)|0;h=n[o>>2]|0;if((h|0)==0){m=t+(a+16)|0;w=n[m>>2]|0;if((w|0)==0){j=0;break}else{C=w;R=m}}else{C=h;R=o}while(1){o=C+20|0;h=n[o>>2]|0;if((h|0)!=0){C=h;R=o;continue}o=C+16|0;h=n[o>>2]|0;if((h|0)==0){break}else{C=h;R=o}}if(R>>>0<e>>>0){ke()}else{n[R>>2]=0;j=C;break}}else{o=n[t+(a+8)>>2]|0;if(o>>>0<e>>>0){ke()}h=o+12|0;if((n[h>>2]|0)!=(f|0)){ke()}m=b+8|0;if((n[m>>2]|0)==(f|0)){n[h>>2]=b;n[m>>2]=o;j=b;break}else{ke()}}}while(0);if((u|0)==0){break}b=t+(a+28)|0;i=1136+(n[b>>2]<<2)|0;do{if((f|0)==(n[i>>2]|0)){n[i>>2]=j;if((j|0)!=0){break}n[209]=n[209]&~(1<<n[b>>2]);break e}else{if(u>>>0<(n[212]|0)>>>0){ke()}y=u+16|0;if((n[y>>2]|0)==(f|0)){n[y>>2]=j}else{n[u+20>>2]=j}if((j|0)==0){break e}}}while(0);if(j>>>0<(n[212]|0)>>>0){ke()}n[j+24>>2]=u;f=n[t+(a+16)>>2]|0;do{if((f|0)!=0){if(f>>>0<(n[212]|0)>>>0){ke()}else{n[j+16>>2]=f;n[f+24>>2]=j;break}}}while(0);f=n[t+(a+20)>>2]|0;if((f|0)==0){break}if(f>>>0<(n[212]|0)>>>0){ke()}else{n[j+20>>2]=f;n[f+24>>2]=j;break}}}while(0);n[l+4>>2]=S|1;n[l+S>>2]=S;if((l|0)!=(n[213]|0)){O=S;break}n[210]=S;return}else{n[x>>2]=E&-2;n[l+4>>2]=p|1;n[l+p>>2]=p;O=p}}while(0);p=O>>>3;if(O>>>0<256){E=p<<1;x=872+(E<<2)|0;j=n[208]|0;a=1<<p;do{if((j&a|0)==0){n[208]=j|a;B=x;M=872+(E+2<<2)|0}else{p=872+(E+2<<2)|0;t=n[p>>2]|0;if(t>>>0>=(n[212]|0)>>>0){B=t;M=p;break}ke()}}while(0);n[M>>2]=l;n[B+12>>2]=l;n[l+8>>2]=B;n[l+12>>2]=x;return}x=l;B=O>>>8;do{if((B|0)==0){N=0}else{if(O>>>0>16777215){N=31;break}M=(B+1048320|0)>>>16&8;E=B<<M;a=(E+520192|0)>>>16&4;j=E<<a;E=(j+245760|0)>>>16&2;p=14-(a|M|E)+(j<<E>>>15)|0;N=O>>>((p+7|0)>>>0)&1|p<<1}}while(0);B=1136+(N<<2)|0;n[l+28>>2]=N;n[l+20>>2]=0;n[l+16>>2]=0;p=n[209]|0;E=1<<N;if((p&E|0)==0){n[209]=p|E;n[B>>2]=x;n[l+24>>2]=B;n[l+12>>2]=l;n[l+8>>2]=l;return}if((N|0)==31){I=0}else{I=25-(N>>>1)|0}N=O<<I;I=n[B>>2]|0;while(1){if((n[I+4>>2]&-8|0)==(O|0)){break}P=I+16+(N>>>31<<2)|0;B=n[P>>2]|0;if((B|0)==0){F=1120;break}else{N=N<<1;I=B}}if((F|0)==1120){if(P>>>0<(n[212]|0)>>>0){ke()}n[P>>2]=x;n[l+24>>2]=I;n[l+12>>2]=l;n[l+8>>2]=l;return}P=I+8|0;F=n[P>>2]|0;N=n[212]|0;if(I>>>0<N>>>0){ke()}if(F>>>0<N>>>0){ke()}n[F+12>>2]=x;n[P>>2]=x;n[l+8>>2]=F;n[l+12>>2]=I;n[l+24>>2]=0;return}function gt(e){e=e|0;var a=0,t=0,r=0;a=(e|0)==0?1:e;while(1){t=Va(a)|0;if((t|0)!=0){r=1164;break}e=(N=n[328]|0,n[328]=N+0,N);if((e|0)==0){break}Br[e&1]()}if((r|0)==1164){return t|0}t=Le(4)|0;n[t>>2]=560;we(t|0,688,6);return 0}function vt(e,a){e=e|0;a=a|0;return gt(e)|0}function yt(e){e=e|0;return}function _t(e){e=e|0;return 360|0}function wt(e){e=e|0;return 448|0}function At(e){e=e|0;return(N=n[328]|0,n[328]=e,N)|0}function kt(e){e=e|0;n[e>>2]=560;return}function xt(e){e=e|0;n[e>>2]=592;return}function Et(e){e=e|0;if((e|0)!=0){Ga(e)}return}function St(e,a){e=e|0;a=a|0;Et(e);return}function Tt(e){e=e|0;Et(e);return}function jt(e,a){e=e|0;a=a|0;Tt(e);return}function Ct(e){e=e|0;Et(e);return}function Rt(e){e=e|0;Et(e);return}function Ot(e,a,t){e=e|0;a=a|0;t=t|0;return Bt(e,a,t,0,0,0)|0}function Bt(e,a,t,c,i,f){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;f=f|0;var o=0,d=0,s=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ee=0,ae=0,te=0,re=0;o=b;if((t|0)==0){d=-1;b=o;return d|0}s=n[44]|0;if((s|0)==0){n[196]=1;n[44]=1;u=1;l=1;p=1190}else{h=n[196]|0;m=n[74]|0;if((m|0)==-1|(h|0)!=0){u=h;l=s;p=1190}else{g=m;v=h;y=s}}if((p|0)==1190){s=(Ve(344)|0)!=0|0;n[74]=s;g=s;v=u;y=l}l=r[t]|0;if(l<<24>>24==45){_=f|2;p=1194}else{u=(g|0)!=0|l<<24>>24==43?f&-2:f;if(l<<24>>24==43){_=u;p=1194}else{w=t;A=u}}if((p|0)==1194){w=t+1|0;A=_}n[198]=0;if((v|0)==0){k=y;p=1198}else{n[50]=-1;n[48]=-1;x=y;E=v;p=1197}while(1){if((p|0)==1197){p=0;if((E|0)==0){k=x;p=1198;continue}else{S=x}}else if((p|0)==1198){p=0;v=n[40]|0;if((r[v]|0)==0){S=k}else{j=v;C=k;break}}n[196]=0;if((S|0)>=(e|0)){p=1200;break}R=a+(S<<2)|0;O=n[R>>2]|0;n[40]=O;if((r[O]|0)==45){B=O+1|0;M=r[B]|0;if(M<<24>>24!=0){p=1232;break}if((Re(w|0,45)|0)!=0){p=1232;break}}n[40]=824;if((A&2|0)!=0){p=1217;break}if((A&1|0)==0){d=-1;p=1298;break}v=n[48]|0;do{if((v|0)==-1){n[48]=S;N=S;I=0}else{y=n[50]|0;if((y|0)==-1){N=S;I=0;break}_=y-v|0;t=S-y|0;u=(_|0)%(t|0)|0;if((u|0)==0){P=t}else{l=t;f=u;while(1){u=(l|0)%(f|0)|0;if((u|0)==0){P=f;break}else{l=f;f=u}}}f=(S-v|0)/(P|0)|0;do{if((P|0)>0){l=-_|0;if((f|0)>0){F=0}else{L=S;D=y;z=v;q=0;break}do{u=F+y|0;g=a+(u<<2)|0;s=0;h=u;u=n[g>>2]|0;while(1){m=((h|0)<(y|0)?t:l)+h|0;U=a+(m<<2)|0;H=n[U>>2]|0;n[U>>2]=u;n[g>>2]=H;U=s+1|0;if((U|0)<(f|0)){s=U;h=m;u=H}else{break}}F=F+1|0}while((F|0)<(P|0));L=n[44]|0;D=n[50]|0;z=n[48]|0;q=n[196]|0}else{L=S;D=y;z=v;q=0}}while(0);n[48]=L-D+z;n[50]=-1;N=L;I=q}}while(0);v=N+1|0;n[44]=v;x=v;E=I;p=1197}do{if((p|0)==1298){b=o;return d|0}else if((p|0)==1232){I=n[48]|0;E=n[50]|0;if((I|0)!=-1&(E|0)==-1){n[50]=S;V=r[B]|0;G=S}else{V=M;G=E}if(V<<24>>24==0){j=O;C=S;break}n[40]=B;if((r[B]|0)!=45){j=B;C=S;break}if((r[O+2|0]|0)!=0){j=B;C=S;break}E=S+1|0;n[44]=E;n[40]=824;if((G|0)!=-1){x=G-I|0;N=E-G|0;q=(x|0)%(N|0)|0;if((q|0)==0){W=N}else{L=N;z=q;while(1){q=(L|0)%(z|0)|0;if((q|0)==0){W=z;break}else{L=z;z=q}}}z=(E-I|0)/(W|0)|0;do{if((W|0)>0){L=-x|0;if((z|0)>0){Y=0}else{K=G;Q=I;Z=E;break}do{q=Y+G|0;D=a+(q<<2)|0;P=0;F=q;q=n[D>>2]|0;while(1){k=((F|0)<(G|0)?N:L)+F|0;v=a+(k<<2)|0;y=n[v>>2]|0;n[v>>2]=q;n[D>>2]=y;v=P+1|0;if((v|0)<(z|0)){P=v;F=k;q=y}else{break}}Y=Y+1|0}while((Y|0)<(W|0));K=n[50]|0;Q=n[48]|0;Z=n[44]|0}else{K=G;Q=I;Z=E}}while(0);n[44]=Q-K+Z}n[50]=-1;n[48]=-1;d=-1;b=o;return d|0}else if((p|0)==1200){n[40]=824;E=n[50]|0;I=n[48]|0;do{if((E|0)==-1){if((I|0)==-1){break}n[44]=I}else{z=E-I|0;N=S-E|0;x=(z|0)%(N|0)|0;if((x|0)==0){J=N}else{L=N;q=x;while(1){x=(L|0)%(q|0)|0;if((x|0)==0){J=q;break}else{L=q;q=x}}}q=(S-I|0)/(J|0)|0;do{if((J|0)>0){L=-z|0;if((q|0)>0){X=0}else{$=E;ee=I;ae=S;break}do{x=X+E|0;F=a+(x<<2)|0;P=0;D=x;x=n[F>>2]|0;while(1){y=((D|0)<(E|0)?N:L)+D|0;k=a+(y<<2)|0;v=n[k>>2]|0;n[k>>2]=x;n[F>>2]=v;k=P+1|0;if((k|0)<(q|0)){P=k;D=y;x=v}else{break}}X=X+1|0}while((X|0)<(J|0));$=n[50]|0;ee=n[48]|0;ae=n[44]|0}else{$=E;ee=I;ae=S}}while(0);n[44]=ee-$+ae}}while(0);n[50]=-1;n[48]=-1;d=-1;b=o;return d|0}else if((p|0)==1217){n[44]=S+1;n[198]=n[R>>2];d=1;b=o;return d|0}}while(0);R=(c|0)!=0;e:do{if(R){if((j|0)==(n[a+(C<<2)>>2]|0)){te=j;break}S=r[j]|0;do{if(S<<24>>24==45){n[40]=j+1;re=0}else{if((A&4|0)==0){te=j;break e}if(S<<24>>24==58){re=0;break}re=(Re(w|0,S<<24>>24|0)|0)!=0|0}}while(0);S=Lt(a,w,c,i,re)|0;if((S|0)==-1){te=n[40]|0;break}n[40]=824;d=S;b=o;return d|0}else{te=j}}while(0);j=te+1|0;n[40]=j;re=r[te]|0;te=re<<24>>24;if((re<<24>>24|0)==45){if((r[j]|0)==0){p=1260}}else if((re<<24>>24|0)==58){p=1263}else{p=1260}do{if((p|0)==1260){A=Re(w|0,te|0)|0;if((A|0)==0){if(re<<24>>24!=45){p=1263;break}if((r[j]|0)==0){d=-1}else{break}b=o;return d|0}C=r[A+1|0]|0;if(R&re<<24>>24==87&C<<24>>24==59){do{if((r[j]|0)==0){S=(n[44]|0)+1|0;n[44]=S;if((S|0)<(e|0)){n[40]=n[a+(S<<2)>>2];break}n[40]=824;do{if((n[46]|0)!=0){if((r[w]|0)==58){break}zt(48,(T=b,b=b+8|0,n[T>>2]=te,T)|0)}}while(0);n[42]=te;d=(r[w]|0)==58?58:63;b=o;return d|0}}while(0);S=Lt(a,w,c,i,0)|0;n[40]=824;d=S;b=o;return d|0}if(C<<24>>24!=58){if((r[j]|0)!=0){d=te;b=o;return d|0}n[44]=(n[44]|0)+1;d=te;b=o;return d|0}n[198]=0;do{if((r[j]|0)==0){if((r[A+2|0]|0)==58){break}S=(n[44]|0)+1|0;n[44]=S;if((S|0)<(e|0)){n[198]=n[a+(S<<2)>>2];break}n[40]=824;do{if((n[46]|0)!=0){if((r[w]|0)==58){break}zt(48,(T=b,b=b+8|0,n[T>>2]=te,T)|0)}}while(0);n[42]=te;d=(r[w]|0)==58?58:63;b=o;return d|0}else{n[198]=j}}while(0);n[40]=824;n[44]=(n[44]|0)+1;d=te;b=o;return d|0}}while(0);do{if((p|0)==1263){if((r[j]|0)!=0){break}n[44]=(n[44]|0)+1}}while(0);do{if((n[46]|0)!=0){if((r[w]|0)==58){break}zt(272,(T=b,b=b+8|0,n[T>>2]=te,T)|0)}}while(0);n[42]=te;d=63;b=o;return d|0}function Mt(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;return Bt(e,a,t,r,c,1)|0}function Nt(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;return Bt(e,a,t,r,c,5)|0}function It(e){e=e|0;return gt(e)|0}function Pt(e,a){e=e|0;a=a|0;return It(e)|0}function Ft(){var e=0;e=Le(4)|0;n[e>>2]=560;we(e|0,688,6)}function Lt(e,a,t,c,i){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;var f=0,o=0,d=0,s=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0;f=b;o=n[40]|0;d=n[44]|0;s=d+1|0;n[44]=s;u=Re(o|0,61)|0;if((u|0)==0){l=ar(o|0)|0;p=0}else{l=u-o|0;p=u+1|0}u=n[t>>2]|0;e:do{if((u|0)!=0){a:do{if((i|0)!=0&(l|0)==1){h=0;m=u;while(1){if((r[o]|0)==(r[m]|0)){if((ar(m|0)|0)==1){g=h;break a}}h=h+1|0;m=n[t+(h<<4)>>2]|0;if((m|0)==0){break e}}}else{m=0;h=-1;v=u;while(1){if((ve(o|0,v|0,l|0)|0)==0){if((ar(v|0)|0)==(l|0)){g=m;break a}if((h|0)==-1){y=m}else{break}}else{y=h}_=m+1|0;w=n[t+(_<<4)>>2]|0;if((w|0)==0){g=y;break a}else{m=_;h=y;v=w}}do{if((n[46]|0)!=0){if((r[a]|0)==58){break}zt(304,(T=b,b=b+16|0,n[T>>2]=l,n[T+8>>2]=o,T)|0)}}while(0);n[42]=0;A=63;b=f;return A|0}}while(0);if((g|0)==-1){break}v=t+(g<<4)+4|0;h=n[v>>2]|0;m=(p|0)==0;if(!((h|0)!=0|m)){do{if((n[46]|0)!=0){if((r[a]|0)==58){break}zt(208,(T=b,b=b+16|0,n[T>>2]=l,n[T+8>>2]=o,T)|0)}}while(0);if((n[t+(g<<4)+8>>2]|0)==0){k=n[t+(g<<4)+12>>2]|0}else{k=0}n[42]=k;A=(r[a]|0)==58?58:63;b=f;return A|0}do{if((h-1|0)>>>0<2){if(!m){n[198]=p;break}if((h|0)!=1){break}n[44]=d+2;n[198]=n[e+(s<<2)>>2]}}while(0);if(!((n[v>>2]|0)==1&(n[198]|0)==0)){if((c|0)!=0){n[c>>2]=g}h=n[t+(g<<4)+8>>2]|0;m=n[t+(g<<4)+12>>2]|0;if((h|0)==0){A=m;b=f;return A|0}n[h>>2]=m;A=0;b=f;return A|0}do{if((n[46]|0)!=0){if((r[a]|0)==58){break}zt(8,(T=b,b=b+8|0,n[T>>2]=o,T)|0)}}while(0);if((n[t+(g<<4)+8>>2]|0)==0){x=n[t+(g<<4)+12>>2]|0}else{x=0}n[42]=x;n[44]=(n[44]|0)-1;A=(r[a]|0)==58?58:63;b=f;return A|0}}while(0);if((i|0)!=0){n[44]=d;A=-1;b=f;return A|0}do{if((n[46]|0)!=0){if((r[a]|0)==58){break}zt(248,(T=b,b=b+8|0,n[T>>2]=o,T)|0)}}while(0);n[42]=0;A=63;b=f;return A|0}function Dt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=b;b=b+16|0;r=t|0;c=r;n[c>>2]=a;n[c+4>>2]=0;qt(e,r|0);b=t;return}function zt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=b;b=b+16|0;r=t|0;c=r;n[c>>2]=a;n[c+4>>2]=0;Ut(e,r|0);b=t;return}function qt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=b;r=n[(Xe()|0)>>2]|0;c=n[_>>2]|0;xe(n[g>>2]|0,432,(T=b,b=b+8|0,n[T>>2]=c,T)|0)|0;if((e|0)!=0){c=n[g>>2]|0;Ge(c|0,e|0,a|0)|0;a=n[g>>2]|0;Me(472,2,1,a|0)|0}a=n[g>>2]|0;e=Ae(r|0)|0;xe(a|0,384,(T=b,b=b+8|0,n[T>>2]=e,T)|0)|0;b=t;return}function Ut(e,a){e=e|0;a=a|0;var t=0,r=0;t=b;r=n[_>>2]|0;xe(n[g>>2]|0,376,(T=b,b=b+8|0,n[T>>2]=r,T)|0)|0;if((e|0)!=0){r=n[g>>2]|0;Ge(r|0,e|0,a|0)|0}Oe(10,n[g>>2]|0)|0;b=t;return}function Ht(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,b=0,u=0,l=0,p=0,h=0,m=0.0,g=0,v=0,y=0,_=0,w=0.0,A=0,k=0,x=0,E=0.0,S=0.0,T=0,j=0,C=0,R=0.0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0.0,z=0,q=0,U=0.0,H=0.0,V=0.0;t=e;while(1){c=t+1|0;if((De(r[t]|0)|0)==0){break}else{t=c}}i=r[t]|0;if((i<<24>>24|0)==45){f=c;o=1}else if((i<<24>>24|0)==43){f=c;o=0}else{f=t;o=0}t=-1;c=0;i=f;while(1){d=r[i]|0;if(((d<<24>>24)-48|0)>>>0<10){b=t}else{if(d<<24>>24!=46|(t|0)>-1){break}else{b=c}}t=b;c=c+1|0;i=i+1|0}b=i+(-c|0)|0;f=(t|0)<0;u=((f^1)<<31>>31)+c|0;l=(u|0)>18;p=(l?-18:-u|0)+(f?c:t)|0;t=l?18:u;do{if((t|0)==0){h=e;m=0.0}else{if((t|0)>9){u=b;l=t;c=0;while(1){f=r[u]|0;g=u+1|0;if(f<<24>>24==46){v=r[g]|0;y=u+2|0}else{v=f;y=g}_=(c*10|0)-48+(v<<24>>24)|0;g=l-1|0;if((g|0)>9){u=y;l=g;c=_}else{break}}w=+(_|0)*1.0e9;A=9;k=y;x=1393}else{if((t|0)>0){w=0.0;A=t;k=b;x=1393}else{E=0.0;S=0.0}}if((x|0)==1393){c=k;l=A;u=0;while(1){g=r[c]|0;f=c+1|0;if(g<<24>>24==46){T=r[f]|0;j=c+2|0}else{T=g;j=f}C=(u*10|0)-48+(T<<24>>24)|0;f=l-1|0;if((f|0)>0){c=j;l=f;u=C}else{break}}E=+(C|0);S=w}R=S+E;do{if((d<<24>>24|0)==69|(d<<24>>24|0)==101){u=i+1|0;l=r[u]|0;if((l<<24>>24|0)==43){O=i+2|0;B=0}else if((l<<24>>24|0)==45){O=i+2|0;B=1}else{O=u;B=0}u=r[O]|0;if(((u<<24>>24)-48|0)>>>0<10){M=O;N=0;I=u}else{P=0;F=O;L=B;break}while(1){u=(N*10|0)-48+(I<<24>>24)|0;l=M+1|0;c=r[l]|0;if(((c<<24>>24)-48|0)>>>0<10){M=l;N=u;I=c}else{P=u;F=l;L=B;break}}}else{P=0;F=i;L=0}}while(0);l=p+((L|0)==0?P:-P|0)|0;u=(l|0)<0?-l|0:l;if((u|0)>511){n[(Xe()|0)>>2]=34;D=1.0;z=88;q=511;x=1410}else{if((u|0)==0){U=1.0}else{D=1.0;z=88;q=u;x=1410}}if((x|0)==1410){while(1){x=0;if((q&1|0)==0){H=D}else{H=D*+s[z>>3]}u=q>>1;if((u|0)==0){U=H;break}else{D=H;z=z+8|0;q=u;x=1410}}}if((l|0)>-1){h=F;m=R*U;break}else{h=F;m=R/U;break}}}while(0);if((a|0)!=0){n[a>>2]=h}if((o|0)==0){V=m;return+V}V=-0.0-m;return+V}function Vt(e,a){e=e|0;a=a|0;return+ +Ht(e,a)}function Gt(e,a){e=e|0;a=a|0;return+ +Ht(e,a)}function Wt(e,a,t){e=e|0;a=a|0;t=t|0;return+ +Ht(e,a)}function Yt(e,a,t){e=e|0;a=a|0;t=t|0;return+ +Ht(e,a)}function Kt(e){e=e|0;return+ +Ht(e,0)}function Qt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=b;b=b+16|0;c=r|0;r=c;n[r>>2]=t;n[r+4>>2]=0;Jt(e,a,c|0)}function Zt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=b;b=b+16|0;c=r|0;r=c;n[r>>2]=t;n[r+4>>2]=0;Xt(e,a,c|0)}function Jt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=n[(Xe()|0)>>2]|0;c=n[_>>2]|0;xe(n[g>>2]|0,336,(T=b,b=b+8|0,n[T>>2]=c,T)|0)|0;if((a|0)!=0){c=n[g>>2]|0;Ge(c|0,a|0,t|0)|0;t=n[g>>2]|0;Me(480,2,1,t|0)|0}t=n[g>>2]|0;a=Ae(r|0)|0;xe(t|0,392,(T=b,b=b+8|0,n[T>>2]=a,T)|0)|0;Pe(e|0)}function Xt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0;r=n[_>>2]|0;xe(n[g>>2]|0,440,(T=b,b=b+8|0,n[T>>2]=r,T)|0)|0;if((a|0)!=0){r=n[g>>2]|0;Ge(r|0,a|0,t|0)|0}Oe(10,n[g>>2]|0)|0;Pe(e|0)}function $t(e,a,t){e=e|0;a=a|0;t=t|0;var c=0;c=e|0;if((e&3)==(a&3)){while(e&3){if((t|0)==0)return c|0;r[e]=r[a]|0;e=e+1|0;a=a+1|0;t=t-1|0}while((t|0)>=4){n[e>>2]=n[a>>2];e=e+4|0;a=a+4|0;t=t-4|0}}while((t|0)>0){r[e]=r[a]|0;e=e+1|0;a=a+1|0;t=t-1|0}return c|0}function er(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0;c=e+t|0;if((t|0)>=20){a=a&255;t=e&3;i=a|a<<8|a<<16|a<<24;f=c&~3;if(t){t=e+4-t|0;while((e|0)<(t|0)){r[e]=a;e=e+1|0}}while((e|0)<(f|0)){n[e>>2]=i;e=e+4|0}}while((e|0)<(c|0)){r[e]=a;e=e+1|0}}function ar(e){e=e|0;var a=0;a=e;while(r[a]|0){a=a+1|0}return a-e|0}function tr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0;c=e+t>>>0;return(P=a+r+(c>>>0<e>>>0|0)>>>0,c|0)|0}function rr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0;c=a-r>>>0;c=a-r-(t>>>0>e>>>0|0)>>>0;return(P=c,e-t>>>0|0)|0}function cr(e,a,t){e=e|0;a=a|0;t=t|0;if((t|0)<32){P=a<<t|(e&(1<<t)-1<<32-t)>>>32-t;return e<<t}P=e<<t-32;return 0}function nr(e,a,t){e=e|0;a=a|0;t=t|0;if((t|0)<32){P=a>>>t;return e>>>t|(a&(1<<t)-1)<<32-t}P=0;return a>>>t-32|0}function ir(e,a,t){e=e|0;a=a|0;t=t|0;if((t|0)<32){P=a>>t;return e>>>t|(a&(1<<t)-1)<<32-t}P=(a|0)<0?-1:0;return a>>t-32|0}function fr(e){e=e|0;var a=0;a=r[m+(e>>>24)|0]|0;if((a|0)<8)return a|0;a=r[m+(e>>16&255)|0]|0;if((a|0)<8)return a+8|0;a=r[m+(e>>8&255)|0]|0;if((a|0)<8)return a+16|0;return(r[m+(e&255)|0]|0)+24|0}function or(e){e=e|0;var a=0;a=r[h+(e&255)|0]|0;if((a|0)<8)return a|0;a=r[h+(e>>8&255)|0]|0;if((a|0)<8)return a+8|0;a=r[h+(e>>16&255)|0]|0;if((a|0)<8)return a+16|0;return(r[h+(e>>>24)|0]|0)+24|0}function dr(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,n=0;t=e&65535;r=a&65535;c=ie(r,t)|0;n=e>>>16;e=(c>>>16)+(ie(r,n)|0)|0;r=a>>>16;a=ie(r,t)|0;return(P=(e>>>16)+(ie(r,n)|0)+(((e&65535)+a|0)>>>16)|0,e+a<<16|c&65535|0)|0}function sr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,n=0,i=0,f=0,o=0;c=a>>31|((a|0)<0?-1:0)<<1;n=((a|0)<0?-1:0)>>31|((a|0)<0?-1:0)<<1;i=r>>31|((r|0)<0?-1:0)<<1;f=((r|0)<0?-1:0)>>31|((r|0)<0?-1:0)<<1;o=rr(c^e,n^a,c,n)|0;a=P;e=i^c;c=f^n;n=rr((hr(o,a,rr(i^t,f^r,i,f)|0,P,0)|0)^e,P^c,e,c)|0;return(P=P,n)|0}function br(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,i=0,f=0,o=0,d=0,s=0,u=0;c=b;b=b+8|0;i=c|0;f=a>>31|((a|0)<0?-1:0)<<1;o=((a|0)<0?-1:0)>>31|((a|0)<0?-1:0)<<1;d=r>>31|((r|0)<0?-1:0)<<1;s=((r|0)<0?-1:0)>>31|((r|0)<0?-1:0)<<1;u=rr(f^e,o^a,f,o)|0;a=P;e=rr(d^t,s^r,d,s)|0;hr(u,a,e,P,i)|0;e=rr(n[i>>2]^f,n[i+4>>2]^o,f,o)|0;o=P;b=c;return(P=o,e)|0}function ur(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,n=0;c=e;e=t;t=dr(c,e)|0;n=P;return(P=(ie(a,e)|0)+(ie(r,c)|0)+n|n&0,t|0|0)|0}function lr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0;c=hr(e,a,t,r,0)|0;return(P=P,c)|0}function pr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,i=0;c=b;b=b+8|0;i=c|0;hr(e,a,t,r,i)|0;b=c;return(P=n[i+4>>2]|0,n[i>>2]|0)|0}function hr(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,F=0,L=0;i=e;f=a;o=f;d=t;s=r;b=s;if((o|0)==0){u=(c|0)!=0;if((b|0)==0){if(u){n[c>>2]=(i>>>0)%(d>>>0);n[c+4>>2]=0}l=0;p=(i>>>0)/(d>>>0)>>>0;return(P=l,p)|0}else{if(!u){l=0;p=0;return(P=l,p)|0}n[c>>2]=e|0;n[c+4>>2]=a&0;l=0;p=0;return(P=l,p)|0}}u=(b|0)==0;do{if((d|0)==0){if(u){if((c|0)!=0){n[c>>2]=(o>>>0)%(d>>>0);n[c+4>>2]=0}l=0;p=(o>>>0)/(d>>>0)>>>0;return(P=l,p)|0}if((i|0)==0){if((c|0)!=0){n[c>>2]=0;n[c+4>>2]=(o>>>0)%(b>>>0)}l=0;p=(o>>>0)/(b>>>0)>>>0;return(P=l,p)|0}h=b-1|0;if((h&b|0)==0){if((c|0)!=0){n[c>>2]=e|0;n[c+4>>2]=h&o|a&0}l=0;p=o>>>((or(b|0)|0)>>>0);return(P=l,p)|0}h=(fr(b|0)|0)-(fr(o|0)|0)|0;if(h>>>0<=30){m=h+1|0;g=31-h|0;v=m;y=o<<g|i>>>(m>>>0);_=o>>>(m>>>0);w=0;A=i<<g;break}if((c|0)==0){l=0;p=0;return(P=l,p)|0}n[c>>2]=e|0;n[c+4>>2]=f|a&0;l=0;p=0;return(P=l,p)|0}else{if(!u){g=(fr(b|0)|0)-(fr(o|0)|0)|0;if(g>>>0<=31){m=g+1|0;h=31-g|0;k=g-31>>31;v=m;y=i>>>(m>>>0)&k|o<<h;_=o>>>(m>>>0)&k;w=0;A=i<<h;break}if((c|0)==0){l=0;p=0;return(P=l,p)|0}n[c>>2]=e|0;n[c+4>>2]=f|a&0;l=0;p=0;return(P=l,p)|0}h=d-1|0;if((h&d|0)!=0){k=(fr(d|0)|0)+33-(fr(o|0)|0)|0;m=64-k|0;g=32-k|0;x=g>>31;E=k-32|0;S=E>>31;v=k;y=g-1>>31&o>>>(E>>>0)|(o<<g|i>>>(k>>>0))&S;_=S&o>>>(k>>>0);w=i<<m&x;A=(o<<m|i>>>(E>>>0))&x|i<<g&k-33>>31;break}if((c|0)!=0){n[c>>2]=h&i;n[c+4>>2]=0}if((d|0)==1){l=f|a&0;p=e|0|0;return(P=l,p)|0}else{h=or(d|0)|0;l=o>>>(h>>>0)|0;p=o<<32-h|i>>>(h>>>0)|0;return(P=l,p)|0}}}while(0);if((v|0)==0){T=A;j=w;C=_;R=y;O=0;B=0}else{i=t|0|0;t=s|r&0;r=tr(i,t,-1,-1)|0;s=P;o=A;A=w;w=_;_=y;y=v;v=0;while(1){M=A>>>31|o<<1;N=v|A<<1;d=_<<1|o>>>31|0;e=_>>>31|w<<1|0;rr(r,s,d,e)|0;a=P;f=a>>31|((a|0)<0?-1:0)<<1;I=f&1;F=rr(d,e,f&i,(((a|0)<0?-1:0)>>31|((a|0)<0?-1:0)<<1)&t)|0;L=P;a=y-1|0;if((a|0)==0){break}else{o=M;A=N;w=L;_=F;y=a;v=I}}T=M;j=N;C=L;R=F;O=0;B=I}I=j;j=0;if((c|0)!=0){n[c>>2]=R;n[c+4>>2]=C}l=(I|0)>>>31|(T|j)<<1|(j<<1|I>>>31)&0|O;p=(I<<1|0>>>31)&-2|B;return(P=l,p)|0}function mr(e,a){e=e|0;a=a|0;jr[e&15](a|0)}function gr(e,a,t){e=e|0;a=a|0;t=t|0;Cr[e&15](a|0,t|0)}function vr(e,a){e=e|0;a=a|0;return Rr[e&7](a|0)|0}function yr(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;Or[e&15](a|0,t|0,r|0)}function _r(e){e=e|0;Br[e&1]()}function wr(e,a,t){e=e|0;a=a|0;t=t|0;return Mr[e&1](a|0,t|0)|0}function Ar(e){e=e|0;fe(0)}function kr(e,a){e=e|0;a=a|0;fe(1)}function xr(e){e=e|0;fe(2);return 0}function Er(e,a,t){e=e|0;a=a|0;t=t|0;fe(3)}function Sr(){fe(4)}function Tr(e,a){e=e|0;a=a|0;fe(5);return 0}var jr=[Ar,Ar,xt,Ar,Rt,Ar,yt,Ar,kt,Ar,Ct,Ar,Ar,Ar,Ar,Ar];var Cr=[kr,kr,Dt,kr,qt,kr,zt,kr,Ut,kr,kr,kr,kr,kr,kr,kr];var Rr=[xr,xr,_t,xr,wt,xr,xr,xr];var Or=[Er,Er,Xt,Er,Jt,Er,Qt,Er,Zt,Er,Er,Er,Er,Er,Er,Er];var Br=[Sr,Sr];var Mr=[Tr,Tr];return{_crypto_scrypt:Ta,_strlen:ar,_free:Ga,_realloc:Ya,_memset:er,_malloc:Va,_memcpy:$t,_calloc:Wa,runPostSets:_a,stackAlloc:ca,stackSave:na,stackRestore:ia,setThrew:fa,setTempRet0:sa,setTempRet1:ba,setTempRet2:ua,setTempRet3:la,setTempRet4:pa,setTempRet5:ha,setTempRet6:ma,setTempRet7:ga,setTempRet8:va,setTempRet9:ya,dynCall_vi:mr,dynCall_vii:gr,dynCall_ii:vr,dynCall_viii:yr,dynCall_v:_r,dynCall_iii:wr}}({Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array},{abort:wa,assert:w,asmPrintInt:function(e,a){s.print("int "+e+","+a)},asmPrintFloat:function(e,a){s.print("float "+e+","+a)},min:Xc,invoke_vi:function(e,a){try{s.dynCall_vi(e,a)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},invoke_vii:function(e,a,t){try{s.dynCall_vii(e,a,t)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},invoke_ii:function(e,a){try{return s.dynCall_ii(e,a)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},invoke_viii:function(e,a,t,r){try{s.dynCall_viii(e,a,t,r)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},invoke_v:function(e){try{s.dynCall_v(e)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},invoke_iii:function(e,a,t){try{return s.dynCall_iii(e,a,t)}catch(e){"number"!=typeof e&&"longjmp"!==e&&g(e),V.setThrew(1,0)}},_strncmp:function(e,a,t){for(var r=0;r<t;){var c=G[e+r|0],n=G[a+r|0];if(c==n&&0==c)break;if(0==c)return-1;if(0==n)return 1;if(c!=n)return c>n?1:-1;r++}return 0},_llvm_va_end:aa(),_sysconf:function(e){switch(e){case 8:return 4096;case 54:case 56:case 21:case 61:case 63:case 22:case 67:case 23:case 24:case 25:case 26:case 27:case 69:case 28:case 101:case 70:case 71:case 29:case 30:case 199:case 75:case 76:case 32:case 43:case 44:case 80:case 46:case 47:case 45:case 48:case 49:case 42:case 82:case 33:case 7:case 108:case 109:case 107:case 112:case 119:case 121:return 200809;case 13:case 104:case 94:case 95:case 34:case 35:case 77:case 81:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 94:case 95:case 110:case 111:case 113:case 114:case 115:case 116:case 117:case 118:case 120:case 40:case 16:case 79:case 19:return-1;case 92:case 93:case 5:case 72:case 6:case 74:case 92:case 93:case 96:case 97:case 98:case 99:case 102:case 103:case 105:return 1;case 38:case 66:case 50:case 51:case 4:return 1024;case 15:case 64:case 41:return 32;case 55:case 37:case 17:return 2147483647;case 18:case 1:return 47839;case 59:case 57:return 99;case 68:case 58:return 2048;case 0:return 2097152;case 3:return 65536;case 14:return 32768;case 73:return 32767;case 39:return 16384;case 60:return 1e3;case 106:return 700;case 52:return 256;case 62:return 255;case 2:return 100;case 65:return 64;case 36:return 20;case 100:return 16;case 20:return 6;case 53:return 4;case 10:return 1}return M(N.A),-1},___cxa_throw:rc,_strerror:zc,_abort:function(){s.abort()},_fprintf:mc,_llvm_eh_exception:U,___cxa_free_exception:sc,_fflush:aa(),___buildEnvironment:wc,__reallyNegative:jc,_strchr:function(e,a){e--;do{var t=A[++e];if(t==a)return e}while(t);return 0},_fputc:Bc,___setErrNo:M,_fwrite:hc,_send:fc,_write:gc,_exit:function(e){Ac(e)},___cxa_find_matching_catch:function(e,a){-1==e&&(e=B[U.m>>2]),-1==a&&(a=B[U.m+4>>2]);var t=Array.prototype.slice.call(arguments,2);0!=a&&!pc(a)&&0==B[B[a>>2]-8>>2]&&(e=B[e>>2]);for(var r=0;r<t.length;r++)if(qc(t[r],a,e))return 0|(V.setTempRet0(t[r]),e);return 0|(V.setTempRet0(a),e)},___cxa_allocate_exception:function(e){return Oa(e)},_isspace:function(e){return 32==e||9<=e&&13>=e},__formatString:kc,___resumeException:function(e){0==B[U.m>>2]&&(B[U.m>>2]=e),g(e+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.")},_llvm_uadd_with_overflow_i32:function(e,a){return e>>>=0,a>>>=0,0|(V.setTempRet0(4294967295<e+a),e+a>>>0)},___cxa_does_inherit:qc,_getenv:xc,_vfprintf:function(e,a,t){return mc(e,a,B[t>>2])},___cxa_begin_catch:function(e){return oc.ta--,e},__ZSt18uncaught_exceptionv:oc,_pwrite:function(e,a,t,r){if(!(e=R[e]))return M(N.$),-1;try{return Ib(e,A,a,t,r)}catch(e){return Zb(e),-1}},___cxa_call_unexpected:function(e){s.P("Unexpected exception thrown, this is not properly supported - aborting"),za=l,g(e)},_sbrk:nc,_strerror_r:yc,___errno_location:function(){return rb},___gxx_personality_v0:aa(),___cxa_is_number_type:pc,_time:function(e){var a=Math.floor(Date.now()/1e3);return e&&(B[e>>2]=a),a},__exit:Ac,___cxa_end_catch:uc,STACKTOP:u,STACK_MAX:Ta,tempDoublePtr:qb,ABORT:za,cttz_i8:Wc,ctlz_i8:Vc,NaN:NaN,Infinity:1/0,_stderr:nb,__ZTVN10__cxxabiv120__si_class_type_infoE:ob,__ZTVN10__cxxabiv117__class_type_infoE:pb,___progname:k},I);s._crypto_scrypt=V._crypto_scrypt;var ic=s._strlen=V._strlen,tc=s._free=V._free;s._realloc=V._realloc;var tb=s._memset=V._memset,Oa=s._malloc=V._malloc,sb=s._memcpy=V._memcpy;s._calloc=V._calloc;var mb=s.runPostSets=V.runPostSets;s.dynCall_vi=V.dynCall_vi,s.dynCall_vii=V.dynCall_vii,s.dynCall_ii=V.dynCall_ii,s.dynCall_viii=V.dynCall_viii,s.dynCall_v=V.dynCall_v,s.dynCall_iii=V.dynCall_iii;var qa=function(e){return V.stackAlloc(e)},ja=function(){return V.stackSave()},ka=function(e){V.stackRestore(e)},lc;function X(e,a){e!=m&&("number"==typeof e?this.p(e):a==m&&"string"!=typeof e?this.k(e,256):this.k(e,a))}function Yc(){return new X(m)}function Zc(e,a){var t=$c[e.charCodeAt(a)];return t==m?-1:t}function ad(e){var a=Yc();return a.D(e),a}function Y(e,a){this.h=0|e,this.j=0|a}Y.Ca={},Y.D=function(e){if(-128<=e&&128>e){var a=Y.Ca[e];if(a)return a}return a=new Y(0|e,0>e?-1:0),-128<=e&&128>e&&(Y.Ca[e]=a),a},Y.p=function(e){return isNaN(e)||!isFinite(e)?Y.ZERO:e<=-Y.Ea?Y.MIN_VALUE:e+1>=Y.Ea?Y.MAX_VALUE:0>e?Y.p(-e).i():new Y(e%Y.B|0,e/Y.B|0)},Y.v=function(e,a){return new Y(e,a)},Y.k=function(e,a){0==e.length&&g(Error("number format error: empty string"));var t=a||10;if((2>t||36<t)&&g(Error("radix out of range: "+t)),"-"==e.charAt(0))return Y.k(e.substring(1),t).i();0<=e.indexOf("-")&&g(Error('number format error: interior "-" character: '+e));for(var r=Y.p(Math.pow(t,8)),c=Y.ZERO,n=0;n<e.length;n+=8){var i=Math.min(8,e.length-n),f=parseInt(e.substring(n,n+i),t);8>i?(i=Y.p(Math.pow(t,i)),c=c.multiply(i).add(Y.p(f))):c=(c=c.multiply(r)).add(Y.p(f))}return c},Y.ea=65536,Y.Od=16777216,Y.B=Y.ea*Y.ea,Y.Pd=Y.B/2,Y.Qd=Y.B*Y.ea,Y.eb=Y.B*Y.B,Y.Ea=Y.eb/2,Y.ZERO=Y.D(0),Y.ONE=Y.D(1),Y.Da=Y.D(-1),Y.MAX_VALUE=Y.v(-1,2147483647),Y.MIN_VALUE=Y.v(0,-2147483648),Y.cb=Y.D(16777216),q=Y.prototype,q.Z=function(){return this.j*Y.B+this.ob()},q.toString=function(e){if((2>(e=e||10)||36<e)&&g(Error("radix out of range: "+e)),this.G())return"0";if(this.n()){if(this.o(Y.MIN_VALUE)){var a=Y.p(e);a=(t=this.F(a)).multiply(a).R(this);return t.toString(e)+a.h.toString(e)}return"-"+this.i().toString(e)}for(var t=Y.p(Math.pow(e,6)),r=(a=this,"");;){var c=a.F(t),n=a.R(c.multiply(t)).h.toString(e);if((a=c).G())return n+r;for(;6>n.length;)n="0"+n;r=""+n+r}},q.ob=function(){return 0<=this.h?this.h:Y.B+this.h},q.G=function(){return 0==this.j&&0==this.h},q.n=function(){return 0>this.j},q.Pa=function(){return 1==(1&this.h)},q.o=function(e){return this.j==e.j&&this.h==e.h},q.Ra=function(){return 0>this.ja(Y.cb)},q.qb=function(e){return 0<this.ja(e)},q.rb=function(e){return 0<=this.ja(e)},q.ja=function(e){if(this.o(e))return 0;var a=this.n(),t=e.n();return a&&!t?-1:!a&&t?1:this.R(e).n()?-1:1},q.i=function(){return this.o(Y.MIN_VALUE)?Y.MIN_VALUE:this.xb().add(Y.ONE)},q.add=function(e){var a,t=this.j>>>16,r=65535&this.j,c=this.h>>>16,n=e.j>>>16,i=65535&e.j,f=e.h>>>16;return e=0+((a=(65535&this.h)+(65535&e.h)+0)>>>16),c=0+((e+=c+f)>>>16),r=(r=0+((c+=r+i)>>>16))+(t+n)&65535,Y.v((65535&e)<<16|65535&a,r<<16|65535&c)},q.R=function(e){return this.add(e.i())},q.multiply=function(e){if(this.G()||e.G())return Y.ZERO;if(this.o(Y.MIN_VALUE))return e.Pa()?Y.MIN_VALUE:Y.ZERO;if(e.o(Y.MIN_VALUE))return this.Pa()?Y.MIN_VALUE:Y.ZERO;if(this.n())return e.n()?this.i().multiply(e.i()):this.i().multiply(e).i();if(e.n())return this.multiply(e.i()).i();if(this.Ra()&&e.Ra())return Y.p(this.Z()*e.Z());var a,t,r,c,n=this.j>>>16,i=65535&this.j,f=this.h>>>16,o=65535&this.h,d=e.j>>>16,s=65535&e.j,b=e.h>>>16;return r=0+((c=0+o*(e=65535&e.h))>>>16),t=0+((r+=f*e)>>>16),t+=(r=(65535&r)+o*b)>>>16,r&=65535,a=0+((t+=i*e)>>>16),a+=(t=(65535&t)+f*b)>>>16,t&=65535,a+=(t+=o*s)>>>16,t&=65535,a=a+(n*e+i*b+f*s+o*d)&65535,Y.v(r<<16|65535&c,a<<16|t)},q.F=function(e){if(e.G()&&g(Error("division by zero")),this.G())return Y.ZERO;if(this.o(Y.MIN_VALUE)){if(e.o(Y.ONE)||e.o(Y.Da))return Y.MIN_VALUE;if(e.o(Y.MIN_VALUE))return Y.ONE;if((r=this.Db().F(e).shiftLeft(1)).o(Y.ZERO))return e.n()?Y.ONE:Y.Da;var a=this.R(e.multiply(r));return r.add(a.F(e))}if(e.o(Y.MIN_VALUE))return Y.ZERO;if(this.n())return e.n()?this.i().F(e.i()):this.i().F(e).i();if(e.n())return this.F(e.i()).i();var t=Y.ZERO;for(a=this;a.rb(e);){for(var r=Math.max(1,Math.floor(a.Z()/e.Z())),c=48>=(c=Math.ceil(Math.log(r)/Math.LN2))?1:Math.pow(2,c-48),n=Y.p(r),i=n.multiply(e);i.n()||i.qb(a);)r-=c,i=(n=Y.p(r)).multiply(e);n.G()&&(n=Y.ONE),t=t.add(n),a=a.R(i)}return t},q.xb=function(){return Y.v(~this.h,~this.j)},q.shiftLeft=function(e){if(0==(e&=63))return this;var a=this.h;return 32>e?Y.v(a<<e,this.j<<e|a>>>32-e):Y.v(0,a<<e-32)},q.Db=function(){var e=this.j;return Y.v(this.h>>>1|e<<31,e>>1)},q=X.prototype,q.ga=function(e,a,t,r){for(var c=0,n=0;0<=--r;){var i=e*this[c++]+a[t]+n;n=Math.floor(i/67108864);a[t++]=67108863&i}return n},q.f=26,q.u=67108863,q.K=67108864,q.bb=Math.pow(2,52),q.Aa=26,q.Ba=0;var $c=[],bd,Z;for(bd=48,Z=0;9>=Z;++Z)$c[bd++]=Z;for(bd=97,Z=10;36>Z;++Z)$c[bd++]=Z;for(bd=65,Z=10;36>Z;++Z)$c[bd++]=Z;q=X.prototype,q.copyTo=function(e){for(var a=this.b-1;0<=a;--a)e[a]=this[a];e.b=this.b,e.c=this.c},q.D=function(e){this.b=1,this.c=0>e?-1:0,0<e?this[0]=e:-1>e?this[0]=e+DV:this.b=0},q.k=function(e,a){var t;if(16==a)t=4;else if(8==a)t=3;else if(256==a)t=8;else if(2==a)t=1;else if(32==a)t=5;else{if(4!=a)return void this.nb(e,a);t=2}this.c=this.b=0;for(var r=e.length,c=p,n=0;0<=--r;){var i=8==t?255&e[r]:Zc(e,r);0>i?"-"==e.charAt(r)&&(c=l):(c=p,0==n?this[this.b++]=i:n+t>this.f?(this[this.b-1]|=(i&(1<<this.f-n)-1)<<n,this[this.b++]=i>>this.f-n):this[this.b-1]|=i<<n,(n+=t)>=this.f&&(n-=this.f))}8==t&&0!=(128&e[0])&&(this.c=-1,0<n&&(this[this.b-1]|=(1<<this.f-n)-1<<n)),this.C(),c&&X.ZERO.t(this,this)},q.C=function(){for(var e=this.c&this.u;0<this.b&&this[this.b-1]==e;)--this.b},q.la=function(e,a){var t;for(t=this.b-1;0<=t;--t)a[t+e]=this[t];for(t=e-1;0<=t;--t)a[t]=0;a.b=this.b+e,a.c=this.c},q.jb=function(e,a){for(var t=e;t<this.b;++t)a[t-e]=this[t];a.b=Math.max(this.b-e,0),a.c=this.c},q.Qa=function(e,a){var t,r=e%this.f,c=this.f-r,n=(1<<c)-1,i=Math.floor(e/this.f),f=this.c<<r&this.u;for(t=this.b-1;0<=t;--t)a[t+i+1]=this[t]>>c|f,f=(this[t]&n)<<r;for(t=i-1;0<=t;--t)a[t]=0;a[i]=f,a.b=this.b+i+1,a.c=this.c,a.C()},q.zb=function(e,a){a.c=this.c;var t=Math.floor(e/this.f);if(t>=this.b)a.b=0;else{var r=e%this.f,c=this.f-r,n=(1<<r)-1;a[0]=this[t]>>r;for(var i=t+1;i<this.b;++i)a[i-t-1]|=(this[i]&n)<<c,a[i-t]=this[i]>>r;0<r&&(a[this.b-t-1]|=(this.c&n)<<c),a.b=this.b-t,a.C()}},q.t=function(e,a){for(var t=0,r=0,c=Math.min(e.b,this.b);t<c;)r+=this[t]-e[t],a[t++]=r&this.u,r>>=this.f;if(e.b<this.b){for(r-=e.c;t<this.b;)r+=this[t],a[t++]=r&this.u,r>>=this.f;r+=this.c}else{for(r+=this.c;t<e.b;)r-=e[t],a[t++]=r&this.u,r>>=this.f;r-=e.c}a.c=0>r?-1:0,-1>r?a[t++]=this.K+r:0<r&&(a[t++]=r),a.b=t,a.C()},q.vb=function(e){var a=$.Xa,t=this.abs(),r=a.abs(),c=t.b;for(e.b=c+r.b;0<=--c;)e[c]=0;for(c=0;c<r.b;++c)e[c+t.b]=t.ga(r[c],e,c,t.b);e.c=0,e.C(),this.c!=a.c&&X.ZERO.t(e,e)},q.Ja=function(e,a,t){var r=e.abs();if(!(0>=r.b)){var c=this.abs();if(c.b<r.b)a!=m&&a.D(0),t!=m&&this.copyTo(t);else{t==m&&(t=Yc());var n,i=Yc(),f=this.c,o=(e=e.c,r[r.b-1]),d=1;if(0!=(n=o>>>16)&&(o=n,d+=16),0!=(n=o>>8)&&(o=n,d+=8),0!=(n=o>>4)&&(o=n,d+=4),0!=(n=o>>2)&&(o=n,d+=2),0!=o>>1&&(d+=1),0<(o=this.f-d)?(r.Qa(o,i),c.Qa(o,t)):(r.copyTo(i),c.copyTo(t)),0!=(c=i[(r=i.b)-1])){n=c*(1<<this.Aa)+(1<r?i[r-2]>>this.Ba:0),d=this.bb/n,n=(1<<this.Aa)/n;var s=1<<this.Ba,b=t.b,u=b-r,l=a==m?Yc():a;for(i.la(u,l),0<=t.U(l)&&(t[t.b++]=1,t.t(l,t)),X.ONE.la(r,l),l.t(i,i);i.b<r;)i[i.b++]=0;for(;0<=--u;){var p=t[--b]==c?this.u:Math.floor(t[b]*d+(t[b-1]+s)*n);if((t[b]+=i.ga(p,t,u,r))<p)for(i.la(u,l),t.t(l,t);t[b]<--p;)t.t(l,t)}a!=m&&(t.jb(r,a),f!=e&&X.ZERO.t(a,a)),t.b=r,t.C(),0<o&&t.zb(o,t),0>f&&X.ZERO.t(t,t)}}}},q.toString=function(e){if(0>this.c)return"-"+this.i().toString(e);if(16==e)e=4;else if(8==e)e=3;else if(2==e)e=1;else if(32==e)e=5;else{if(4!=e)return this.Fb(e);e=2}var a,t=(1<<e)-1,r=p,c="",n=this.b,i=this.f-n*this.f%e;if(0<n--)for(i<this.f&&0<(a=this[n]>>i)&&(r=l,c="0123456789abcdefghijklmnopqrstuvwxyz".charAt(a));0<=n;)i<e?(a=(this[n]&(1<<i)-1)<<e-i,a|=this[--n]>>(i+=this.f-e)):(a=this[n]>>(i-=e)&t,0>=i&&(i+=this.f,--n)),0<a&&(r=l),r&&(c+="0123456789abcdefghijklmnopqrstuvwxyz".charAt(a));return r?c:"0"},q.i=function(){var e=Yc();return X.ZERO.t(this,e),e},q.abs=function(){return 0>this.c?this.i():this},q.U=function(e){if(0!=(a=this.c-e.c))return a;var a,t=this.b;if(0!=(a=t-e.b))return 0>this.c?-a:a;for(;0<=--t;)if(0!=(a=this[t]-e[t]))return a;return 0},X.ZERO=ad(0),X.ONE=ad(1),q=X.prototype,q.nb=function(e,a){this.D(0),a==m&&(a=10);for(var t=this.S(a),r=Math.pow(a,t),c=p,n=0,i=0,f=0;f<e.length;++f){var o=Zc(e,f);0>o?"-"==e.charAt(f)&&0==this.ra()&&(c=l):(i=a*i+o,++n>=t&&(this.Ia(r),this.Ha(i),i=n=0))}0<n&&(this.Ia(Math.pow(a,n)),this.Ha(i)),c&&X.ZERO.t(this,this)},q.S=function(e){return Math.floor(Math.LN2*this.f/Math.log(e))},q.ra=function(){return 0>this.c?-1:0>=this.b||1==this.b&&0>=this[0]?0:1},q.Ia=function(e){this[this.b]=this.ga(e-1,this,0,this.b),++this.b,this.C()},q.Ha=function(e){var a=0;if(0!=e){for(;this.b<=a;)this[this.b++]=0;for(this[a]+=e;this[a]>=this.K;)this[a]-=this.K,++a>=this.b&&(this[this.b++]=0),++this[a]}},q.Fb=function(e){if(e==m&&(e=10),0==this.ra()||2>e||36<e)return"0";var a=this.S(e),t=ad(a=Math.pow(e,a)),r=Yc(),c=Yc(),n="";for(this.Ja(t,r,c);0<r.ra();)n=(a+c.Oa()).toString(e).substr(1)+n,r.Ja(t,r,c);return c.Oa().toString(e)+n},q.Oa=function(){if(0>this.c){if(1==this.b)return this[0]-this.K;if(0==this.b)return-1}else{if(1==this.b)return this[0];if(0==this.b)return 0}return(this[1]&(1<<32-this.f)-1)<<this.f|this[0]},q.fa=function(e,a){for(var t=0,r=0,c=Math.min(e.b,this.b);t<c;)r+=this[t]+e[t],a[t++]=r&this.u,r>>=this.f;if(e.b<this.b){for(r+=e.c;t<this.b;)r+=this[t],a[t++]=r&this.u,r>>=this.f;r+=this.c}else{for(r+=this.c;t<e.b;)r+=e[t],a[t++]=r&this.u,r>>=this.f;r+=e.c}a.c=0>r?-1:0,0<r?a[t++]=r:-1>r&&(a[t++]=this.K+r),a.b=t,a.C()};var $={abs:function(e,a){var t=(t=new Y(e,a)).n()?t.i():t;B[qb>>2]=t.h,B[qb+4>>2]=t.j},Ka:function(){$.kb||($.kb=l,$.Xa=new X,$.Xa.k("4294967296",10),$.sa=new X,$.sa.k("18446744073709551616",10),$.xe=new X,$.ye=new X)},me:function(e,a){var t=new X;t.k(a.toString(),10);var r=new X;t.vb(r),(t=new X).k(e.toString(),10);var c=new X;return t.fa(r,c),c},stringify:function(e,a,t){return e=new Y(e,a).toString(),t&&"-"==e[0]&&($.Ka(),(t=new X).k(e,10),e=new X,$.sa.fa(t,e),e=e.toString(10)),e},k:function(e,a,t,r,c){$.Ka();var n=new X;n.k(e,a),(e=new X).k(t,10),(t=new X).k(r,10),c&&0>n.U(X.ZERO)&&(r=new X,n.fa($.sa,r),n=r),r=p,0>n.U(e)?(n=e,r=l):0<n.U(t)&&(n=t,r=l),n=Y.k(n.toString()),B[qb>>2]=n.h,B[qb+4>>2]=n.j,r&&g("range error")}},cd,dd;function lb(e){function a(){if(ab||(ab=l,Va(Xa)),Va(Ya),gb=l,s._main&&kb&&s.callMain(e),s.postRun)for("function"==typeof s.postRun&&(s.postRun=[s.postRun]);s.postRun.length;)cb(s.postRun.shift());Va($a)}if(e=e||s.arguments,0<L)s.P("run() called, but dependencies remain, so not running");else{if(s.preRun)for("function"==typeof s.preRun&&(s.preRun=[s.preRun]);s.preRun.length;)bb(s.preRun.shift());Va(Wa),0<L||(s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),za||a()},1)):a())}}function ed(e){za=l,u=cd,Va(Za),dd&&g({type:"ExitStatus",value:e})}function wa(e){e&&s.print(e),za=l,g("abort() at "+Error().stack)}if(lc=$,s.callMain=s.$d=function(e){function a(){for(var e=0;3>e;e++)c.push(0)}w(0==L,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),w(0==Wa.length,"cannot call main when preRun functions remain to be called"),e=e||[],ab||(ab=l,Va(Xa));var t,r=e.length+1,c=[F(J("/bin/this.program"),"i8",Ka)];a();for(var n=0;n<r-1;n+=1)c.push(F(J(e[n]),"i8",Ka)),a();c.push(0),c=F(c,"i32",Ka),cd=u,dd=l;try{t=s._main(r,c,0)}catch(e){if(e&&"object"==typeof e&&"ExitStatus"==e.type)return s.print("Exit Status: "+e.value),e.value;"SimulateInfiniteLoop"==e?s.noExitRuntime=l:g(e)}finally{dd=p}s.noExitRuntime||ed(t)},s.run=s.we=lb,s.exit=s.de=ed,s.abort=s.abort=wa,s.preInit)for("function"==typeof s.preInit&&(s.preInit=[s.preInit]);0<s.preInit.length;)s.preInit.pop()();var kb=l;s.noInitialRun&&(kb=p),lb();var scrypt=function(){var e={};function a(e){for(var a=new Uint8Array(e.length),t=0;t<e.length;t++){var r=e.charCodeAt(t);if((255&r)!==r)throw{message:"Cannot encode string in Latin1",str:e};a[t]=255&r}return a}function t(e){for(var a=[],t=0;t<e.length;t++)a.push(String.fromCharCode(e[t]));return a.join("")}function r(e,a){var t=a||0,r=scrypt_raw._malloc(e.length+t);scrypt_raw.HEAPU8.set(e,r+t);for(var c=r;c<r+t;c++)scrypt_raw.HEAPU8[c]=0;return r}function c(e){this.length=e,this.address=scrypt_raw._malloc(e)}return c.prototype.extractBytes=function(e){var a=function(e,a){var t=new Uint8Array(a);return t.set(scrypt_raw.HEAPU8.subarray(e,e+a)),t}(this.address+(e||0),this.length-(e||0));return scrypt_raw._free(this.address),this.address=null,a},e.encode_utf8=function(e){return a(unescape(encodeURIComponent(e)))},e.encode_latin1=a,e.decode_utf8=function(e){return decodeURIComponent(escape(t(e)))},e.decode_latin1=t,e.to_hex=function(e){for(var a=[],t=0;t<e.length;t++)a.push("0123456789abcdef"[e[t]>>4&15]),a.push("0123456789abcdef"[15&e[t]]);return a.join("")},e.crypto_scrypt=function(e,a,t,n,i,f){var o=new c(f),d=r(e),s=r(a);return function(e,a){if(0!==a)throw{message:"scrypt_raw."+e+" signalled an error"}}("_crypto_scrypt",scrypt_raw._crypto_scrypt(d,e.length,s,a.length,t,0,n,i,o.address,o.length)),function(e){for(var a=0;a<e.length;a++)scrypt_raw._free(e[a])}([d,s]),o.extractBytes()},e}();return scrypt}}).call(this,"/",__webpack_require__(25)(module))},function(e,a,t){var r=t(837),c=t(324);e.exports=function(e,a,t){for(var n=c.apply(null,arguments),i=r(n.options.maxmem),f=Array.prototype.slice.apply(n.password),o=(a=Array.prototype.slice.apply(n.salt),i.crypto_scrypt(f,a,n.options.cost,n.options.blockSize,n.options.parallel,n.options.size)),d=new Buffer(o.length),s=0;s<o.length;s++)d[s]=o[s];return d}},function(e,a){a.Pool=function(e){var a={},t=e.idleTimeoutMillis||3e4,r=e.reapIntervalMillis||1e3,c=!("refreshIdle"in e)||e.refreshIdle,n=[],i=new function(e){var a,t,r={},c=null;for(e=Math.max(0|+e,1),a=[],t=0;t<e;t+=1)a.push([]);return r.size=function(){var t;if(null===c)for(c=0,t=0;t<e;t+=1)c+=a[t].length;return c},r.enqueue=function(t,r){var n;c=null,(r=r&&0|+r||0)&&(n=r,(r<0||r>=e)&&(r=e-1,console.error("invalid priority: "+n+" must be between 0 and "+r))),a[r].push(t)},r.dequeue=function(e){var t,r=null,n=a.length;for(c=null,t=0;t<n;t+=1)if(a[t].length){r=a[t].shift();break}return r},r}(e.priorityRange||1),f=0,o=!1,d=null,s=!1,b=e.log?function(a,t){"function"==typeof e.log?e.log(a,t):console.log(t.toUpperCase()+" pool "+e.name+" - "+a)}:function(){};function u(){var t,r,i,d,s=[],u=(new Date).getTime();for(o=!1,t=0,r=n.length;t<r&&(c||f-e.min>s.length);t+=1)u>=(d=n[t].timeout)&&(b("removeIdle() destroying obj - now:"+u+" timeout:"+d,"verbose"),s.push(n[t].obj));for(t=0,i=s.length;t<i;t+=1)a.destroy(s[t]);(r=n.length)>0?(b("availableObjects.length="+r,"verbose"),l()):b("removeIdle() all objects removed","verbose")}function l(){o||(o=!0,d=setTimeout(u,r))}function p(){var t=null,r=i.size();if(b("dispense() clients="+r+" available="+n.length,"info"),r>0){for(;n.length>0;){if(b("dispense() - reusing obj","verbose"),t=n[0],e.validate(t.obj))return n.shift(),i.dequeue()(null,t.obj);a.destroy(t.obj)}f<e.max&&h()}}function h(){b("createResource() - creating obj - count="+(f+=1)+" min="+e.min+" max="+e.max,"verbose"),e.create(function(){var e,t,r=i.dequeue();arguments.length>1?(e=arguments[0],t=arguments[1]):(e=arguments[0]instanceof Error?arguments[0]:null,t=arguments[0]instanceof Error?null:arguments[0]),e?(f-=1,r&&r(e,t),process.nextTick(function(){p()})):r?r(e,t):a.release(t)})}function m(){var a,t;if(!s&&f<e.min)for(t=e.min-f,a=0;a<t;a++)h()}return e.validate=e.validate||function(){return!0},e.max=parseInt(e.max,10),e.min=parseInt(e.min,10),e.max=Math.max(isNaN(e.max)?1:e.max,1),e.min=Math.min(isNaN(e.min)?0:e.min,e.max-1),a.destroy=function(a){f-=1,n=n.filter(function(e){return e.obj!==a}),e.destroy(a),m()},a.acquire=function(a,t){if(s)throw new Error("pool is draining and cannot accept work");return i.enqueue(a,t),p(),f<e.max},a.borrow=function(e,t){b("borrow() is deprecated. use acquire() instead","warn"),a.acquire(e,t)},a.release=function(e){if(n.some(function(a){return a.obj===e}))b("release called twice for the same resource: "+(new Error).stack,"error");else{var a={obj:e,timeout:(new Date).getTime()+t};n.push(a),b("timeout: "+a.timeout,"verbose"),p(),l()}},a.returnToPool=function(e){b("returnToPool() is deprecated. use release() instead","warn"),a.release(e)},a.drain=function(e){b("draining","info"),s=!0;var a=function(){i.size()>0?setTimeout(a,100):n.length!=f?setTimeout(a,100):e&&e()};a()},a.destroyAllNow=function(e){b("force destroying all objects","info");var t=n;n=[];for(var r=t.shift();null!==r&&void 0!==r;)a.destroy(r.obj),r=t.shift();o=!1,clearTimeout(d),e&&e()},a.pooled=function(e,t){return function(){var r=arguments,c=r[r.length-1],n="function"==typeof c;a.acquire(function(t,i){if(t)n&&c(t);else{var f=[i].concat(Array.prototype.slice.call(r,0,n?-1:void 0));f.push(function(){a.release(i),n&&c.apply(null,arguments)}),e.apply(null,f)}},t)}},a.getPoolSize=function(){return f},a.getName=function(){return e.name},a.availableObjectsCount=function(){return n.length},a.waitingClientsCount=function(){return i.size()},m(),a}},function(e,a,t){(function(a){var r=t(324),c=t(323).fork,n=t(839),i=t(84).cpus().length,f=f=new n.Pool({name:"scrypt-worker",create:function(e){var t=c(a+"/scrypt-async-worker.js");t.controlledExit=!1,t.on("exit",function(){t.controlledExit||setImmediate(f.destroy.bind(f,t))}),e(t)},destroy:function(e){try{e.controlledExit=!0,e.disconnect()}catch(e){}},max:Math.max(2,i-1),min:0,idleTimeoutMillis:15e3,log:!1});e.exports=function(e,a,t,c){var n=r.apply(null,arguments),i=n.callback||function(){};delete n.callback,n.password=n.password.toString("base64"),n.salt=n.salt.toString("base64");new Date;f.acquire(function(e,a){if(e)return f.release(a),i(e);a.once("message",function(e){new Date;f.release(a),e.error&&i(e.error),i(null,new Buffer(e.data,"base64"))}),a.send(n)})}}).call(this,"/")},function(e,a,t){e.exports={hash:t(840),hashSync:t(838)}},function(e,a,t){const r=t(180),c=t(91),n=t(11),i=t(52),f=t(9),o=t(30);a.MAX_INTEGER=new f("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),a.TWO_POW256=new f("10000000000000000000000000000000000000000000000000000000000000000",16),a.SHA3_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",a.SHA3_NULL=new Buffer(a.SHA3_NULL_S,"hex"),a.SHA3_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",a.SHA3_RLP_ARRAY=new Buffer(a.SHA3_RLP_ARRAY_S,"hex"),a.SHA3_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",a.SHA3_RLP=new Buffer(a.SHA3_RLP_S,"hex"),a.BN=f,a.rlp=i,a.secp256k1=c,a.zeros=function(e){var a=new Buffer(e);return a.fill(0),a},a.setLengthLeft=a.setLength=function(e,t,r){var c=a.zeros(t);return e=a.toBuffer(e),r?e.length<t?(e.copy(c),c):e.slice(0,t):e.length<t?(e.copy(c,t-e.length),c):e.slice(-t)},a.setLengthRight=function(e,t){return a.setLength(e,t,!0)},a.unpad=a.stripZeros=function(e){for(var t=(e=a.stripHexPrefix(e))[0];e.length>0&&"0"===t.toString();)t=(e=e.slice(1))[0];return e},a.toBuffer=function(e){if(!Buffer.isBuffer(e))if(Array.isArray(e))e=new Buffer(e);else if("string"==typeof e)e=a.isHexPrefixed(e)?new Buffer(a.padToEven(a.stripHexPrefix(e)),"hex"):new Buffer(e);else if("number"==typeof e)e=a.intToBuffer(e);else if(null===e||void 0===e)e=new Buffer([]);else{if(!e.toArray)throw new Error("invalid type");e=new Buffer(e.toArray())}return e},a.intToHex=function(e){n(e%1==0,"number is not a integer"),n(e>=0,"number must be positive");var a=e.toString(16);return a.length%2&&(a="0"+a),"0x"+a},a.intToBuffer=function(e){var t=a.intToHex(e);return new Buffer(t.slice(2),"hex")},a.bufferToInt=function(e){return parseInt(a.bufferToHex(e),16)},a.bufferToHex=function(e){return 0===(e=a.toBuffer(e)).length?0:"0x"+e.toString("hex")},a.fromSigned=function(e){return new f(e).fromTwos(256)},a.toUnsigned=function(e){return new Buffer(e.toTwos(256).toArray())},a.sha3=function(e,t){e=a.toBuffer(e),t||(t=256);var c=new r(t);return e&&c.update(e),new Buffer(c.digest("hex"),"hex")},a.sha256=function(e){return e=a.toBuffer(e),o("sha256").update(e).digest()},a.ripemd160=function(e,t){e=a.toBuffer(e);var r=o("rmd160").update(e).digest();return!0===t?a.setLength(r,32):r},a.rlphash=function(e){return a.sha3(i.encode(e))},a.isValidPrivate=function(e){return c.privateKeyVerify(e)},a.isValidPublic=function(e,a){return 64===e.length?c.publicKeyVerify(Buffer.concat([new Buffer([4]),e])):!!a&&c.publicKeyVerify(e)},a.pubToAddress=a.publicToAddress=function(e,t){return e=a.toBuffer(e),t&&64!==e.length&&(e=c.publicKeyConvert(e,!1).slice(1)),n(64===e.length),a.sha3(e).slice(-20)};var d=a.privateToPublic=function(e){return e=a.toBuffer(e),c.publicKeyCreate(e,!1).slice(1)};a.importPublic=function(e){return 64!==(e=a.toBuffer(e)).length&&(e=c.publicKeyConvert(e,!1).slice(1)),e},a.ecsign=function(e,a){var t=c.sign(e,a),r={};return r.r=t.signature.slice(0,32),r.s=t.signature.slice(32,64),r.v=t.recovery+27,r},a.ecrecover=function(e,t,r,n){var i=Buffer.concat([a.setLength(r,32),a.setLength(n,32)],64),f=a.bufferToInt(t)-27;if(0!==f&&1!==f)throw new Error("Invalid signature v value");var o=c.recover(e,i,f);return c.publicKeyConvert(o,!1).slice(1)},a.toRpcSig=function(e,t,r){return a.bufferToHex(Buffer.concat([t,r,a.toBuffer(e-27)]))},a.fromRpcSig=function(e){var t=(e=a.toBuffer(e))[64];return t<27&&(t+=27),{v:t,r:e.slice(0,32),s:e.slice(32,64)}},a.privateToAddress=function(e){return a.publicToAddress(d(e))},a.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/i.test(e)},a.toChecksumAddress=function(e){e=a.stripHexPrefix(e).toLowerCase();for(var t=a.sha3(e).toString("hex"),r="0x",c=0;c<e.length;c++)parseInt(t[c],16)>=8?r+=e[c].toUpperCase():r+=e[c];return r},a.isValidChecksumAddress=function(e){return a.isValidAddress(e)&&a.toChecksumAddress(e)===e},a.generateAddress=function(e,t){return e=a.toBuffer(e),t=(t=new f(t)).isZero()?null:new Buffer(t.toArray()),a.rlphash([e,t]).slice(-20)},a.isPrecompiled=function(e){var t=a.unpad(e);return 1===t.length&&t[0]>0&&t[0]<5},a.isHexPrefixed=function(e){return"0x"===e.slice(0,2)},a.stripHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e.slice(2):e},a.addHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e:"0x"+e},a.padToEven=function(e){return e.length%2&&(e="0"+e),e},a.baToJSON=function(e){if(Buffer.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var t=[],r=0;r<e.length;r++)t.push(a.baToJSON(e[r]));return t}},a.defineProperties=function(e,t,r){if(e.raw=[],e._fields=[],e.toJSON=function(t){if(t){var r={};return e._fields.forEach(function(a){r[a]="0x"+e[a].toString("hex")}),r}return a.baToJSON(this.raw)},e.serialize=function(){return i.encode(e.raw)},t.forEach(function(t,r){function c(){return e.raw[r]}function i(c){"00"!==(c=a.toBuffer(c)).toString("hex")||t.allowZero||(c=new Buffer([])),t.allowLess&&t.length?(c=a.stripZeros(c),n(t.length>=c.length,"The field "+t.name+" must not have more "+t.length+" bytes")):t.allowZero&&0===c.length||!t.length||n(t.length===c.length,"The field "+t.name+" must have byte length of "+t.length),e.raw[r]=c}e._fields.push(t.name),Object.defineProperty(e,t.name,{enumerable:!0,configurable:!0,get:c,set:i}),t.default&&(e[t.name]=t.default),t.alias&&Object.defineProperty(e,t.alias,{enumerable:!1,configurable:!0,set:i,get:c})}),r)if("string"==typeof r&&(r=new Buffer(a.stripHexPrefix(r),"hex")),Buffer.isBuffer(r)&&(r=i.decode(r)),Array.isArray(r)){if(r.length>e._fields.length)throw new Error("wrong number of fields in data");r.forEach(function(t,r){e[e._fields[r]]=a.toBuffer(t)})}else{if("object"!=typeof r)throw new Error("invalid data");for(var c in r)-1!==e._fields.indexOf(c)&&(e[c]=r[c])}}},function(e){e.exports=["ábaco","abdomen","abeja","abierto","abogado","abono","aborto","abrazo","abrir","abuelo","abuso","acabar","academia","acceso","acción","aceite","acelga","acento","aceptar","ácido","aclarar","acné","acoger","acoso","activo","acto","actriz","actuar","acudir","acuerdo","acusar","adicto","admitir","adoptar","adorno","aduana","adulto","aéreo","afectar","afición","afinar","afirmar","ágil","agitar","agonía","agosto","agotar","agregar","agrio","agua","agudo","águila","aguja","ahogo","ahorro","aire","aislar","ajedrez","ajeno","ajuste","alacrán","alambre","alarma","alba","álbum","alcalde","aldea","alegre","alejar","alerta","aleta","alfiler","alga","algodón","aliado","aliento","alivio","alma","almeja","almíbar","altar","alteza","altivo","alto","altura","alumno","alzar","amable","amante","amapola","amargo","amasar","ámbar","ámbito","ameno","amigo","amistad","amor","amparo","amplio","ancho","anciano","ancla","andar","andén","anemia","ángulo","anillo","ánimo","anís","anotar","antena","antiguo","antojo","anual","anular","anuncio","añadir","añejo","año","apagar","aparato","apetito","apio","aplicar","apodo","aporte","apoyo","aprender","aprobar","apuesta","apuro","arado","araña","arar","árbitro","árbol","arbusto","archivo","arco","arder","ardilla","arduo","área","árido","aries","armonía","arnés","aroma","arpa","arpón","arreglo","arroz","arruga","arte","artista","asa","asado","asalto","ascenso","asegurar","aseo","asesor","asiento","asilo","asistir","asno","asombro","áspero","astilla","astro","astuto","asumir","asunto","atajo","ataque","atar","atento","ateo","ático","atleta","átomo","atraer","atroz","atún","audaz","audio","auge","aula","aumento","ausente","autor","aval","avance","avaro","ave","avellana","avena","avestruz","avión","aviso","ayer","ayuda","ayuno","azafrán","azar","azote","azúcar","azufre","azul","baba","babor","bache","bahía","baile","bajar","balanza","balcón","balde","bambú","banco","banda","baño","barba","barco","barniz","barro","báscula","bastón","basura","batalla","batería","batir","batuta","baúl","bazar","bebé","bebida","bello","besar","beso","bestia","bicho","bien","bingo","blanco","bloque","blusa","boa","bobina","bobo","boca","bocina","boda","bodega","boina","bola","bolero","bolsa","bomba","bondad","bonito","bono","bonsái","borde","borrar","bosque","bote","botín","bóveda","bozal","bravo","brazo","brecha","breve","brillo","brinco","brisa","broca","broma","bronce","brote","bruja","brusco","bruto","buceo","bucle","bueno","buey","bufanda","bufón","búho","buitre","bulto","burbuja","burla","burro","buscar","butaca","buzón","caballo","cabeza","cabina","cabra","cacao","cadáver","cadena","caer","café","caída","caimán","caja","cajón","cal","calamar","calcio","caldo","calidad","calle","calma","calor","calvo","cama","cambio","camello","camino","campo","cáncer","candil","canela","canguro","canica","canto","caña","cañón","caoba","caos","capaz","capitán","capote","captar","capucha","cara","carbón","cárcel","careta","carga","cariño","carne","carpeta","carro","carta","casa","casco","casero","caspa","castor","catorce","catre","caudal","causa","cazo","cebolla","ceder","cedro","celda","célebre","celoso","célula","cemento","ceniza","centro","cerca","cerdo","cereza","cero","cerrar","certeza","césped","cetro","chacal","chaleco","champú","chancla","chapa","charla","chico","chiste","chivo","choque","choza","chuleta","chupar","ciclón","ciego","cielo","cien","cierto","cifra","cigarro","cima","cinco","cine","cinta","ciprés","circo","ciruela","cisne","cita","ciudad","clamor","clan","claro","clase","clave","cliente","clima","clínica","cobre","cocción","cochino","cocina","coco","código","codo","cofre","coger","cohete","cojín","cojo","cola","colcha","colegio","colgar","colina","collar","colmo","columna","combate","comer","comida","cómodo","compra","conde","conejo","conga","conocer","consejo","contar","copa","copia","corazón","corbata","corcho","cordón","corona","correr","coser","cosmos","costa","cráneo","cráter","crear","crecer","creído","crema","cría","crimen","cripta","crisis","cromo","crónica","croqueta","crudo","cruz","cuadro","cuarto","cuatro","cubo","cubrir","cuchara","cuello","cuento","cuerda","cuesta","cueva","cuidar","culebra","culpa","culto","cumbre","cumplir","cuna","cuneta","cuota","cupón","cúpula","curar","curioso","curso","curva","cutis","dama","danza","dar","dardo","dátil","deber","débil","década","decir","dedo","defensa","definir","dejar","delfín","delgado","delito","demora","denso","dental","deporte","derecho","derrota","desayuno","deseo","desfile","desnudo","destino","desvío","detalle","detener","deuda","día","diablo","diadema","diamante","diana","diario","dibujo","dictar","diente","dieta","diez","difícil","digno","dilema","diluir","dinero","directo","dirigir","disco","diseño","disfraz","diva","divino","doble","doce","dolor","domingo","don","donar","dorado","dormir","dorso","dos","dosis","dragón","droga","ducha","duda","duelo","dueño","dulce","dúo","duque","durar","dureza","duro","ébano","ebrio","echar","eco","ecuador","edad","edición","edificio","editor","educar","efecto","eficaz","eje","ejemplo","elefante","elegir","elemento","elevar","elipse","élite","elixir","elogio","eludir","embudo","emitir","emoción","empate","empeño","empleo","empresa","enano","encargo","enchufe","encía","enemigo","enero","enfado","enfermo","engaño","enigma","enlace","enorme","enredo","ensayo","enseñar","entero","entrar","envase","envío","época","equipo","erizo","escala","escena","escolar","escribir","escudo","esencia","esfera","esfuerzo","espada","espejo","espía","esposa","espuma","esquí","estar","este","estilo","estufa","etapa","eterno","ética","etnia","evadir","evaluar","evento","evitar","exacto","examen","exceso","excusa","exento","exigir","exilio","existir","éxito","experto","explicar","exponer","extremo","fábrica","fábula","fachada","fácil","factor","faena","faja","falda","fallo","falso","faltar","fama","familia","famoso","faraón","farmacia","farol","farsa","fase","fatiga","fauna","favor","fax","febrero","fecha","feliz","feo","feria","feroz","fértil","fervor","festín","fiable","fianza","fiar","fibra","ficción","ficha","fideo","fiebre","fiel","fiera","fiesta","figura","fijar","fijo","fila","filete","filial","filtro","fin","finca","fingir","finito","firma","flaco","flauta","flecha","flor","flota","fluir","flujo","flúor","fobia","foca","fogata","fogón","folio","folleto","fondo","forma","forro","fortuna","forzar","fosa","foto","fracaso","frágil","franja","frase","fraude","freír","freno","fresa","frío","frito","fruta","fuego","fuente","fuerza","fuga","fumar","función","funda","furgón","furia","fusil","fútbol","futuro","gacela","gafas","gaita","gajo","gala","galería","gallo","gamba","ganar","gancho","ganga","ganso","garaje","garza","gasolina","gastar","gato","gavilán","gemelo","gemir","gen","género","genio","gente","geranio","gerente","germen","gesto","gigante","gimnasio","girar","giro","glaciar","globo","gloria","gol","golfo","goloso","golpe","goma","gordo","gorila","gorra","gota","goteo","gozar","grada","gráfico","grano","grasa","gratis","grave","grieta","grillo","gripe","gris","grito","grosor","grúa","grueso","grumo","grupo","guante","guapo","guardia","guerra","guía","guiño","guion","guiso","guitarra","gusano","gustar","haber","hábil","hablar","hacer","hacha","hada","hallar","hamaca","harina","haz","hazaña","hebilla","hebra","hecho","helado","helio","hembra","herir","hermano","héroe","hervir","hielo","hierro","hígado","higiene","hijo","himno","historia","hocico","hogar","hoguera","hoja","hombre","hongo","honor","honra","hora","hormiga","horno","hostil","hoyo","hueco","huelga","huerta","hueso","huevo","huida","huir","humano","húmedo","humilde","humo","hundir","huracán","hurto","icono","ideal","idioma","ídolo","iglesia","iglú","igual","ilegal","ilusión","imagen","imán","imitar","impar","imperio","imponer","impulso","incapaz","índice","inerte","infiel","informe","ingenio","inicio","inmenso","inmune","innato","insecto","instante","interés","íntimo","intuir","inútil","invierno","ira","iris","ironía","isla","islote","jabalí","jabón","jamón","jarabe","jardín","jarra","jaula","jazmín","jefe","jeringa","jinete","jornada","joroba","joven","joya","juerga","jueves","juez","jugador","jugo","juguete","juicio","junco","jungla","junio","juntar","júpiter","jurar","justo","juvenil","juzgar","kilo","koala","labio","lacio","lacra","lado","ladrón","lagarto","lágrima","laguna","laico","lamer","lámina","lámpara","lana","lancha","langosta","lanza","lápiz","largo","larva","lástima","lata","látex","latir","laurel","lavar","lazo","leal","lección","leche","lector","leer","legión","legumbre","lejano","lengua","lento","leña","león","leopardo","lesión","letal","letra","leve","leyenda","libertad","libro","licor","líder","lidiar","lienzo","liga","ligero","lima","límite","limón","limpio","lince","lindo","línea","lingote","lino","linterna","líquido","liso","lista","litera","litio","litro","llaga","llama","llanto","llave","llegar","llenar","llevar","llorar","llover","lluvia","lobo","loción","loco","locura","lógica","logro","lombriz","lomo","lonja","lote","lucha","lucir","lugar","lujo","luna","lunes","lupa","lustro","luto","luz","maceta","macho","madera","madre","maduro","maestro","mafia","magia","mago","maíz","maldad","maleta","malla","malo","mamá","mambo","mamut","manco","mando","manejar","manga","maniquí","manjar","mano","manso","manta","mañana","mapa","máquina","mar","marco","marea","marfil","margen","marido","mármol","marrón","martes","marzo","masa","máscara","masivo","matar","materia","matiz","matriz","máximo","mayor","mazorca","mecha","medalla","medio","médula","mejilla","mejor","melena","melón","memoria","menor","mensaje","mente","menú","mercado","merengue","mérito","mes","mesón","meta","meter","método","metro","mezcla","miedo","miel","miembro","miga","mil","milagro","militar","millón","mimo","mina","minero","mínimo","minuto","miope","mirar","misa","miseria","misil","mismo","mitad","mito","mochila","moción","moda","modelo","moho","mojar","molde","moler","molino","momento","momia","monarca","moneda","monja","monto","moño","morada","morder","moreno","morir","morro","morsa","mortal","mosca","mostrar","motivo","mover","móvil","mozo","mucho","mudar","mueble","muela","muerte","muestra","mugre","mujer","mula","muleta","multa","mundo","muñeca","mural","muro","músculo","museo","musgo","música","muslo","nácar","nación","nadar","naipe","naranja","nariz","narrar","nasal","natal","nativo","natural","náusea","naval","nave","navidad","necio","néctar","negar","negocio","negro","neón","nervio","neto","neutro","nevar","nevera","nicho","nido","niebla","nieto","niñez","niño","nítido","nivel","nobleza","noche","nómina","noria","norma","norte","nota","noticia","novato","novela","novio","nube","nuca","núcleo","nudillo","nudo","nuera","nueve","nuez","nulo","número","nutria","oasis","obeso","obispo","objeto","obra","obrero","observar","obtener","obvio","oca","ocaso","océano","ochenta","ocho","ocio","ocre","octavo","octubre","oculto","ocupar","ocurrir","odiar","odio","odisea","oeste","ofensa","oferta","oficio","ofrecer","ogro","oído","oír","ojo","ola","oleada","olfato","olivo","olla","olmo","olor","olvido","ombligo","onda","onza","opaco","opción","ópera","opinar","oponer","optar","óptica","opuesto","oración","orador","oral","órbita","orca","orden","oreja","órgano","orgía","orgullo","oriente","origen","orilla","oro","orquesta","oruga","osadía","oscuro","osezno","oso","ostra","otoño","otro","oveja","óvulo","óxido","oxígeno","oyente","ozono","pacto","padre","paella","página","pago","país","pájaro","palabra","palco","paleta","pálido","palma","paloma","palpar","pan","panal","pánico","pantera","pañuelo","papá","papel","papilla","paquete","parar","parcela","pared","parir","paro","párpado","parque","párrafo","parte","pasar","paseo","pasión","paso","pasta","pata","patio","patria","pausa","pauta","pavo","payaso","peatón","pecado","pecera","pecho","pedal","pedir","pegar","peine","pelar","peldaño","pelea","peligro","pellejo","pelo","peluca","pena","pensar","peñón","peón","peor","pepino","pequeño","pera","percha","perder","pereza","perfil","perico","perla","permiso","perro","persona","pesa","pesca","pésimo","pestaña","pétalo","petróleo","pez","pezuña","picar","pichón","pie","piedra","pierna","pieza","pijama","pilar","piloto","pimienta","pino","pintor","pinza","piña","piojo","pipa","pirata","pisar","piscina","piso","pista","pitón","pizca","placa","plan","plata","playa","plaza","pleito","pleno","plomo","pluma","plural","pobre","poco","poder","podio","poema","poesía","poeta","polen","policía","pollo","polvo","pomada","pomelo","pomo","pompa","poner","porción","portal","posada","poseer","posible","poste","potencia","potro","pozo","prado","precoz","pregunta","premio","prensa","preso","previo","primo","príncipe","prisión","privar","proa","probar","proceso","producto","proeza","profesor","programa","prole","promesa","pronto","propio","próximo","prueba","público","puchero","pudor","pueblo","puerta","puesto","pulga","pulir","pulmón","pulpo","pulso","puma","punto","puñal","puño","pupa","pupila","puré","quedar","queja","quemar","querer","queso","quieto","química","quince","quitar","rábano","rabia","rabo","ración","radical","raíz","rama","rampa","rancho","rango","rapaz","rápido","rapto","rasgo","raspa","rato","rayo","raza","razón","reacción","realidad","rebaño","rebote","recaer","receta","rechazo","recoger","recreo","recto","recurso","red","redondo","reducir","reflejo","reforma","refrán","refugio","regalo","regir","regla","regreso","rehén","reino","reír","reja","relato","relevo","relieve","relleno","reloj","remar","remedio","remo","rencor","rendir","renta","reparto","repetir","reposo","reptil","res","rescate","resina","respeto","resto","resumen","retiro","retorno","retrato","reunir","revés","revista","rey","rezar","rico","riego","rienda","riesgo","rifa","rígido","rigor","rincón","riñón","río","riqueza","risa","ritmo","rito","rizo","roble","roce","rociar","rodar","rodeo","rodilla","roer","rojizo","rojo","romero","romper","ron","ronco","ronda","ropa","ropero","rosa","rosca","rostro","rotar","rubí","rubor","rudo","rueda","rugir","ruido","ruina","ruleta","rulo","rumbo","rumor","ruptura","ruta","rutina","sábado","saber","sabio","sable","sacar","sagaz","sagrado","sala","saldo","salero","salir","salmón","salón","salsa","salto","salud","salvar","samba","sanción","sandía","sanear","sangre","sanidad","sano","santo","sapo","saque","sardina","sartén","sastre","satán","sauna","saxofón","sección","seco","secreto","secta","sed","seguir","seis","sello","selva","semana","semilla","senda","sensor","señal","señor","separar","sepia","sequía","ser","serie","sermón","servir","sesenta","sesión","seta","setenta","severo","sexo","sexto","sidra","siesta","siete","siglo","signo","sílaba","silbar","silencio","silla","símbolo","simio","sirena","sistema","sitio","situar","sobre","socio","sodio","sol","solapa","soldado","soledad","sólido","soltar","solución","sombra","sondeo","sonido","sonoro","sonrisa","sopa","soplar","soporte","sordo","sorpresa","sorteo","sostén","sótano","suave","subir","suceso","sudor","suegra","suelo","sueño","suerte","sufrir","sujeto","sultán","sumar","superar","suplir","suponer","supremo","sur","surco","sureño","surgir","susto","sutil","tabaco","tabique","tabla","tabú","taco","tacto","tajo","talar","talco","talento","talla","talón","tamaño","tambor","tango","tanque","tapa","tapete","tapia","tapón","taquilla","tarde","tarea","tarifa","tarjeta","tarot","tarro","tarta","tatuaje","tauro","taza","tazón","teatro","techo","tecla","técnica","tejado","tejer","tejido","tela","teléfono","tema","temor","templo","tenaz","tender","tener","tenis","tenso","teoría","terapia","terco","término","ternura","terror","tesis","tesoro","testigo","tetera","texto","tez","tibio","tiburón","tiempo","tienda","tierra","tieso","tigre","tijera","tilde","timbre","tímido","timo","tinta","tío","típico","tipo","tira","tirón","titán","títere","título","tiza","toalla","tobillo","tocar","tocino","todo","toga","toldo","tomar","tono","tonto","topar","tope","toque","tórax","torero","tormenta","torneo","toro","torpedo","torre","torso","tortuga","tos","tosco","toser","tóxico","trabajo","tractor","traer","tráfico","trago","traje","tramo","trance","trato","trauma","trazar","trébol","tregua","treinta","tren","trepar","tres","tribu","trigo","tripa","triste","triunfo","trofeo","trompa","tronco","tropa","trote","trozo","truco","trueno","trufa","tubería","tubo","tuerto","tumba","tumor","túnel","túnica","turbina","turismo","turno","tutor","ubicar","úlcera","umbral","unidad","unir","universo","uno","untar","uña","urbano","urbe","urgente","urna","usar","usuario","útil","utopía","uva","vaca","vacío","vacuna","vagar","vago","vaina","vajilla","vale","válido","valle","valor","válvula","vampiro","vara","variar","varón","vaso","vecino","vector","vehículo","veinte","vejez","vela","velero","veloz","vena","vencer","venda","veneno","vengar","venir","venta","venus","ver","verano","verbo","verde","vereda","verja","verso","verter","vía","viaje","vibrar","vicio","víctima","vida","vídeo","vidrio","viejo","viernes","vigor","vil","villa","vinagre","vino","viñedo","violín","viral","virgo","virtud","visor","víspera","vista","vitamina","viudo","vivaz","vivero","vivir","vivo","volcán","volumen","volver","voraz","votar","voto","voz","vuelo","vulgar","yacer","yate","yegua","yema","yerno","yeso","yodo","yoga","yogur","zafiro","zanja","zapato","zarza","zona","zorro","zumo","zurdo"]},function(e){e.exports=["あいこくしん","あいさつ","あいだ","あおぞら","あかちゃん","あきる","あけがた","あける","あこがれる","あさい","あさひ","あしあと","あじわう","あずかる","あずき","あそぶ","あたえる","あたためる","あたりまえ","あたる","あつい","あつかう","あっしゅく","あつまり","あつめる","あてな","あてはまる","あひる","あぶら","あぶる","あふれる","あまい","あまど","あまやかす","あまり","あみもの","あめりか","あやまる","あゆむ","あらいぐま","あらし","あらすじ","あらためる","あらゆる","あらわす","ありがとう","あわせる","あわてる","あんい","あんがい","あんこ","あんぜん","あんてい","あんない","あんまり","いいだす","いおん","いがい","いがく","いきおい","いきなり","いきもの","いきる","いくじ","いくぶん","いけばな","いけん","いこう","いこく","いこつ","いさましい","いさん","いしき","いじゅう","いじょう","いじわる","いずみ","いずれ","いせい","いせえび","いせかい","いせき","いぜん","いそうろう","いそがしい","いだい","いだく","いたずら","いたみ","いたりあ","いちおう","いちじ","いちど","いちば","いちぶ","いちりゅう","いつか","いっしゅん","いっせい","いっそう","いったん","いっち","いってい","いっぽう","いてざ","いてん","いどう","いとこ","いない","いなか","いねむり","いのち","いのる","いはつ","いばる","いはん","いびき","いひん","いふく","いへん","いほう","いみん","いもうと","いもたれ","いもり","いやがる","いやす","いよかん","いよく","いらい","いらすと","いりぐち","いりょう","いれい","いれもの","いれる","いろえんぴつ","いわい","いわう","いわかん","いわば","いわゆる","いんげんまめ","いんさつ","いんしょう","いんよう","うえき","うえる","うおざ","うがい","うかぶ","うかべる","うきわ","うくらいな","うくれれ","うけたまわる","うけつけ","うけとる","うけもつ","うける","うごかす","うごく","うこん","うさぎ","うしなう","うしろがみ","うすい","うすぎ","うすぐらい","うすめる","うせつ","うちあわせ","うちがわ","うちき","うちゅう","うっかり","うつくしい","うったえる","うつる","うどん","うなぎ","うなじ","うなずく","うなる","うねる","うのう","うぶげ","うぶごえ","うまれる","うめる","うもう","うやまう","うよく","うらがえす","うらぐち","うらない","うりあげ","うりきれ","うるさい","うれしい","うれゆき","うれる","うろこ","うわき","うわさ","うんこう","うんちん","うんてん","うんどう","えいえん","えいが","えいきょう","えいご","えいせい","えいぶん","えいよう","えいわ","えおり","えがお","えがく","えきたい","えくせる","えしゃく","えすて","えつらん","えのぐ","えほうまき","えほん","えまき","えもじ","えもの","えらい","えらぶ","えりあ","えんえん","えんかい","えんぎ","えんげき","えんしゅう","えんぜつ","えんそく","えんちょう","えんとつ","おいかける","おいこす","おいしい","おいつく","おうえん","おうさま","おうじ","おうせつ","おうたい","おうふく","おうべい","おうよう","おえる","おおい","おおう","おおどおり","おおや","おおよそ","おかえり","おかず","おがむ","おかわり","おぎなう","おきる","おくさま","おくじょう","おくりがな","おくる","おくれる","おこす","おこなう","おこる","おさえる","おさない","おさめる","おしいれ","おしえる","おじぎ","おじさん","おしゃれ","おそらく","おそわる","おたがい","おたく","おだやか","おちつく","おっと","おつり","おでかけ","おとしもの","おとなしい","おどり","おどろかす","おばさん","おまいり","おめでとう","おもいで","おもう","おもたい","おもちゃ","おやつ","おやゆび","およぼす","おらんだ","おろす","おんがく","おんけい","おんしゃ","おんせん","おんだん","おんちゅう","おんどけい","かあつ","かいが","がいき","がいけん","がいこう","かいさつ","かいしゃ","かいすいよく","かいぜん","かいぞうど","かいつう","かいてん","かいとう","かいふく","がいへき","かいほう","かいよう","がいらい","かいわ","かえる","かおり","かかえる","かがく","かがし","かがみ","かくご","かくとく","かざる","がぞう","かたい","かたち","がちょう","がっきゅう","がっこう","がっさん","がっしょう","かなざわし","かのう","がはく","かぶか","かほう","かほご","かまう","かまぼこ","かめれおん","かゆい","かようび","からい","かるい","かろう","かわく","かわら","がんか","かんけい","かんこう","かんしゃ","かんそう","かんたん","かんち","がんばる","きあい","きあつ","きいろ","ぎいん","きうい","きうん","きえる","きおう","きおく","きおち","きおん","きかい","きかく","きかんしゃ","ききて","きくばり","きくらげ","きけんせい","きこう","きこえる","きこく","きさい","きさく","きさま","きさらぎ","ぎじかがく","ぎしき","ぎじたいけん","ぎじにってい","ぎじゅつしゃ","きすう","きせい","きせき","きせつ","きそう","きぞく","きぞん","きたえる","きちょう","きつえん","ぎっちり","きつつき","きつね","きてい","きどう","きどく","きない","きなが","きなこ","きぬごし","きねん","きのう","きのした","きはく","きびしい","きひん","きふく","きぶん","きぼう","きほん","きまる","きみつ","きむずかしい","きめる","きもだめし","きもち","きもの","きゃく","きやく","ぎゅうにく","きよう","きょうりゅう","きらい","きらく","きりん","きれい","きれつ","きろく","ぎろん","きわめる","ぎんいろ","きんかくじ","きんじょ","きんようび","ぐあい","くいず","くうかん","くうき","くうぐん","くうこう","ぐうせい","くうそう","ぐうたら","くうふく","くうぼ","くかん","くきょう","くげん","ぐこう","くさい","くさき","くさばな","くさる","くしゃみ","くしょう","くすのき","くすりゆび","くせげ","くせん","ぐたいてき","くださる","くたびれる","くちこみ","くちさき","くつした","ぐっすり","くつろぐ","くとうてん","くどく","くなん","くねくね","くのう","くふう","くみあわせ","くみたてる","くめる","くやくしょ","くらす","くらべる","くるま","くれる","くろう","くわしい","ぐんかん","ぐんしょく","ぐんたい","ぐんて","けあな","けいかく","けいけん","けいこ","けいさつ","げいじゅつ","けいたい","げいのうじん","けいれき","けいろ","けおとす","けおりもの","げきか","げきげん","げきだん","げきちん","げきとつ","げきは","げきやく","げこう","げこくじょう","げざい","けさき","げざん","けしき","けしごむ","けしょう","げすと","けたば","けちゃっぷ","けちらす","けつあつ","けつい","けつえき","けっこん","けつじょ","けっせき","けってい","けつまつ","げつようび","げつれい","けつろん","げどく","けとばす","けとる","けなげ","けなす","けなみ","けぬき","げねつ","けねん","けはい","げひん","けぶかい","げぼく","けまり","けみかる","けむし","けむり","けもの","けらい","けろけろ","けわしい","けんい","けんえつ","けんお","けんか","げんき","けんげん","けんこう","けんさく","けんしゅう","けんすう","げんそう","けんちく","けんてい","けんとう","けんない","けんにん","げんぶつ","けんま","けんみん","けんめい","けんらん","けんり","こあくま","こいぬ","こいびと","ごうい","こうえん","こうおん","こうかん","ごうきゅう","ごうけい","こうこう","こうさい","こうじ","こうすい","ごうせい","こうそく","こうたい","こうちゃ","こうつう","こうてい","こうどう","こうない","こうはい","ごうほう","ごうまん","こうもく","こうりつ","こえる","こおり","ごかい","ごがつ","ごかん","こくご","こくさい","こくとう","こくない","こくはく","こぐま","こけい","こける","ここのか","こころ","こさめ","こしつ","こすう","こせい","こせき","こぜん","こそだて","こたい","こたえる","こたつ","こちょう","こっか","こつこつ","こつばん","こつぶ","こてい","こてん","ことがら","ことし","ことば","ことり","こなごな","こねこね","このまま","このみ","このよ","ごはん","こひつじ","こふう","こふん","こぼれる","ごまあぶら","こまかい","ごますり","こまつな","こまる","こむぎこ","こもじ","こもち","こもの","こもん","こやく","こやま","こゆう","こゆび","こよい","こよう","こりる","これくしょん","ころっけ","こわもて","こわれる","こんいん","こんかい","こんき","こんしゅう","こんすい","こんだて","こんとん","こんなん","こんびに","こんぽん","こんまけ","こんや","こんれい","こんわく","ざいえき","さいかい","さいきん","ざいげん","ざいこ","さいしょ","さいせい","ざいたく","ざいちゅう","さいてき","ざいりょう","さうな","さかいし","さがす","さかな","さかみち","さがる","さぎょう","さくし","さくひん","さくら","さこく","さこつ","さずかる","ざせき","さたん","さつえい","ざつおん","ざっか","ざつがく","さっきょく","ざっし","さつじん","ざっそう","さつたば","さつまいも","さてい","さといも","さとう","さとおや","さとし","さとる","さのう","さばく","さびしい","さべつ","さほう","さほど","さます","さみしい","さみだれ","さむけ","さめる","さやえんどう","さゆう","さよう","さよく","さらだ","ざるそば","さわやか","さわる","さんいん","さんか","さんきゃく","さんこう","さんさい","ざんしょ","さんすう","さんせい","さんそ","さんち","さんま","さんみ","さんらん","しあい","しあげ","しあさって","しあわせ","しいく","しいん","しうち","しえい","しおけ","しかい","しかく","じかん","しごと","しすう","じだい","したうけ","したぎ","したて","したみ","しちょう","しちりん","しっかり","しつじ","しつもん","してい","してき","してつ","じてん","じどう","しなぎれ","しなもの","しなん","しねま","しねん","しのぐ","しのぶ","しはい","しばかり","しはつ","しはらい","しはん","しひょう","しふく","じぶん","しへい","しほう","しほん","しまう","しまる","しみん","しむける","じむしょ","しめい","しめる","しもん","しゃいん","しゃうん","しゃおん","じゃがいも","しやくしょ","しゃくほう","しゃけん","しゃこ","しゃざい","しゃしん","しゃせん","しゃそう","しゃたい","しゃちょう","しゃっきん","じゃま","しゃりん","しゃれい","じゆう","じゅうしょ","しゅくはく","じゅしん","しゅっせき","しゅみ","しゅらば","じゅんばん","しょうかい","しょくたく","しょっけん","しょどう","しょもつ","しらせる","しらべる","しんか","しんこう","じんじゃ","しんせいじ","しんちく","しんりん","すあげ","すあし","すあな","ずあん","すいえい","すいか","すいとう","ずいぶん","すいようび","すうがく","すうじつ","すうせん","すおどり","すきま","すくう","すくない","すける","すごい","すこし","ずさん","すずしい","すすむ","すすめる","すっかり","ずっしり","ずっと","すてき","すてる","すねる","すのこ","すはだ","すばらしい","ずひょう","ずぶぬれ","すぶり","すふれ","すべて","すべる","ずほう","すぼん","すまい","すめし","すもう","すやき","すらすら","するめ","すれちがう","すろっと","すわる","すんぜん","すんぽう","せあぶら","せいかつ","せいげん","せいじ","せいよう","せおう","せかいかん","せきにん","せきむ","せきゆ","せきらんうん","せけん","せこう","せすじ","せたい","せたけ","せっかく","せっきゃく","ぜっく","せっけん","せっこつ","せっさたくま","せつぞく","せつだん","せつでん","せっぱん","せつび","せつぶん","せつめい","せつりつ","せなか","せのび","せはば","せびろ","せぼね","せまい","せまる","せめる","せもたれ","せりふ","ぜんあく","せんい","せんえい","せんか","せんきょ","せんく","せんげん","ぜんご","せんさい","せんしゅ","せんすい","せんせい","せんぞ","せんたく","せんちょう","せんてい","せんとう","せんぬき","せんねん","せんぱい","ぜんぶ","ぜんぽう","せんむ","せんめんじょ","せんもん","せんやく","せんゆう","せんよう","ぜんら","ぜんりゃく","せんれい","せんろ","そあく","そいとげる","そいね","そうがんきょう","そうき","そうご","そうしん","そうだん","そうなん","そうび","そうめん","そうり","そえもの","そえん","そがい","そげき","そこう","そこそこ","そざい","そしな","そせい","そせん","そそぐ","そだてる","そつう","そつえん","そっかん","そつぎょう","そっけつ","そっこう","そっせん","そっと","そとがわ","そとづら","そなえる","そなた","そふぼ","そぼく","そぼろ","そまつ","そまる","そむく","そむりえ","そめる","そもそも","そよかぜ","そらまめ","そろう","そんかい","そんけい","そんざい","そんしつ","そんぞく","そんちょう","ぞんび","ぞんぶん","そんみん","たあい","たいいん","たいうん","たいえき","たいおう","だいがく","たいき","たいぐう","たいけん","たいこ","たいざい","だいじょうぶ","だいすき","たいせつ","たいそう","だいたい","たいちょう","たいてい","だいどころ","たいない","たいねつ","たいのう","たいはん","だいひょう","たいふう","たいへん","たいほ","たいまつばな","たいみんぐ","たいむ","たいめん","たいやき","たいよう","たいら","たいりょく","たいる","たいわん","たうえ","たえる","たおす","たおる","たおれる","たかい","たかね","たきび","たくさん","たこく","たこやき","たさい","たしざん","だじゃれ","たすける","たずさわる","たそがれ","たたかう","たたく","ただしい","たたみ","たちばな","だっかい","だっきゃく","だっこ","だっしゅつ","だったい","たてる","たとえる","たなばた","たにん","たぬき","たのしみ","たはつ","たぶん","たべる","たぼう","たまご","たまる","だむる","ためいき","ためす","ためる","たもつ","たやすい","たよる","たらす","たりきほんがん","たりょう","たりる","たると","たれる","たれんと","たろっと","たわむれる","だんあつ","たんい","たんおん","たんか","たんき","たんけん","たんご","たんさん","たんじょうび","だんせい","たんそく","たんたい","だんち","たんてい","たんとう","だんな","たんにん","だんねつ","たんのう","たんぴん","だんぼう","たんまつ","たんめい","だんれつ","だんろ","だんわ","ちあい","ちあん","ちいき","ちいさい","ちえん","ちかい","ちから","ちきゅう","ちきん","ちけいず","ちけん","ちこく","ちさい","ちしき","ちしりょう","ちせい","ちそう","ちたい","ちたん","ちちおや","ちつじょ","ちてき","ちてん","ちぬき","ちぬり","ちのう","ちひょう","ちへいせん","ちほう","ちまた","ちみつ","ちみどろ","ちめいど","ちゃんこなべ","ちゅうい","ちゆりょく","ちょうし","ちょさくけん","ちらし","ちらみ","ちりがみ","ちりょう","ちるど","ちわわ","ちんたい","ちんもく","ついか","ついたち","つうか","つうじょう","つうはん","つうわ","つかう","つかれる","つくね","つくる","つけね","つける","つごう","つたえる","つづく","つつじ","つつむ","つとめる","つながる","つなみ","つねづね","つのる","つぶす","つまらない","つまる","つみき","つめたい","つもり","つもる","つよい","つるぼ","つるみく","つわもの","つわり","てあし","てあて","てあみ","ていおん","ていか","ていき","ていけい","ていこく","ていさつ","ていし","ていせい","ていたい","ていど","ていねい","ていひょう","ていへん","ていぼう","てうち","ておくれ","てきとう","てくび","でこぼこ","てさぎょう","てさげ","てすり","てそう","てちがい","てちょう","てつがく","てつづき","でっぱ","てつぼう","てつや","でぬかえ","てぬき","てぬぐい","てのひら","てはい","てぶくろ","てふだ","てほどき","てほん","てまえ","てまきずし","てみじか","てみやげ","てらす","てれび","てわけ","てわたし","でんあつ","てんいん","てんかい","てんき","てんぐ","てんけん","てんごく","てんさい","てんし","てんすう","でんち","てんてき","てんとう","てんない","てんぷら","てんぼうだい","てんめつ","てんらんかい","でんりょく","でんわ","どあい","といれ","どうかん","とうきゅう","どうぐ","とうし","とうむぎ","とおい","とおか","とおく","とおす","とおる","とかい","とかす","ときおり","ときどき","とくい","とくしゅう","とくてん","とくに","とくべつ","とけい","とける","とこや","とさか","としょかん","とそう","とたん","とちゅう","とっきゅう","とっくん","とつぜん","とつにゅう","とどける","ととのえる","とない","となえる","となり","とのさま","とばす","どぶがわ","とほう","とまる","とめる","ともだち","ともる","どようび","とらえる","とんかつ","どんぶり","ないかく","ないこう","ないしょ","ないす","ないせん","ないそう","なおす","ながい","なくす","なげる","なこうど","なさけ","なたでここ","なっとう","なつやすみ","ななおし","なにごと","なにもの","なにわ","なのか","なふだ","なまいき","なまえ","なまみ","なみだ","なめらか","なめる","なやむ","ならう","ならび","ならぶ","なれる","なわとび","なわばり","にあう","にいがた","にうけ","におい","にかい","にがて","にきび","にくしみ","にくまん","にげる","にさんかたんそ","にしき","にせもの","にちじょう","にちようび","にっか","にっき","にっけい","にっこう","にっさん","にっしょく","にっすう","にっせき","にってい","になう","にほん","にまめ","にもつ","にやり","にゅういん","にりんしゃ","にわとり","にんい","にんか","にんき","にんげん","にんしき","にんずう","にんそう","にんたい","にんち","にんてい","にんにく","にんぷ","にんまり","にんむ","にんめい","にんよう","ぬいくぎ","ぬかす","ぬぐいとる","ぬぐう","ぬくもり","ぬすむ","ぬまえび","ぬめり","ぬらす","ぬんちゃく","ねあげ","ねいき","ねいる","ねいろ","ねぐせ","ねくたい","ねくら","ねこぜ","ねこむ","ねさげ","ねすごす","ねそべる","ねだん","ねつい","ねっしん","ねつぞう","ねったいぎょ","ねぶそく","ねふだ","ねぼう","ねほりはほり","ねまき","ねまわし","ねみみ","ねむい","ねむたい","ねもと","ねらう","ねわざ","ねんいり","ねんおし","ねんかん","ねんきん","ねんぐ","ねんざ","ねんし","ねんちゃく","ねんど","ねんぴ","ねんぶつ","ねんまつ","ねんりょう","ねんれい","のいず","のおづま","のがす","のきなみ","のこぎり","のこす","のこる","のせる","のぞく","のぞむ","のたまう","のちほど","のっく","のばす","のはら","のべる","のぼる","のみもの","のやま","のらいぬ","のらねこ","のりもの","のりゆき","のれん","のんき","ばあい","はあく","ばあさん","ばいか","ばいく","はいけん","はいご","はいしん","はいすい","はいせん","はいそう","はいち","ばいばい","はいれつ","はえる","はおる","はかい","ばかり","はかる","はくしゅ","はけん","はこぶ","はさみ","はさん","はしご","ばしょ","はしる","はせる","ぱそこん","はそん","はたん","はちみつ","はつおん","はっかく","はづき","はっきり","はっくつ","はっけん","はっこう","はっさん","はっしん","はったつ","はっちゅう","はってん","はっぴょう","はっぽう","はなす","はなび","はにかむ","はぶらし","はみがき","はむかう","はめつ","はやい","はやし","はらう","はろうぃん","はわい","はんい","はんえい","はんおん","はんかく","はんきょう","ばんぐみ","はんこ","はんしゃ","はんすう","はんだん","ぱんち","ぱんつ","はんてい","はんとし","はんのう","はんぱ","はんぶん","はんぺん","はんぼうき","はんめい","はんらん","はんろん","ひいき","ひうん","ひえる","ひかく","ひかり","ひかる","ひかん","ひくい","ひけつ","ひこうき","ひこく","ひさい","ひさしぶり","ひさん","びじゅつかん","ひしょ","ひそか","ひそむ","ひたむき","ひだり","ひたる","ひつぎ","ひっこし","ひっし","ひつじゅひん","ひっす","ひつぜん","ぴったり","ぴっちり","ひつよう","ひてい","ひとごみ","ひなまつり","ひなん","ひねる","ひはん","ひびく","ひひょう","ひほう","ひまわり","ひまん","ひみつ","ひめい","ひめじし","ひやけ","ひやす","ひよう","びょうき","ひらがな","ひらく","ひりつ","ひりょう","ひるま","ひるやすみ","ひれい","ひろい","ひろう","ひろき","ひろゆき","ひんかく","ひんけつ","ひんこん","ひんしゅ","ひんそう","ぴんち","ひんぱん","びんぼう","ふあん","ふいうち","ふうけい","ふうせん","ぷうたろう","ふうとう","ふうふ","ふえる","ふおん","ふかい","ふきん","ふくざつ","ふくぶくろ","ふこう","ふさい","ふしぎ","ふじみ","ふすま","ふせい","ふせぐ","ふそく","ぶたにく","ふたん","ふちょう","ふつう","ふつか","ふっかつ","ふっき","ふっこく","ぶどう","ふとる","ふとん","ふのう","ふはい","ふひょう","ふへん","ふまん","ふみん","ふめつ","ふめん","ふよう","ふりこ","ふりる","ふるい","ふんいき","ぶんがく","ぶんぐ","ふんしつ","ぶんせき","ふんそう","ぶんぽう","へいあん","へいおん","へいがい","へいき","へいげん","へいこう","へいさ","へいしゃ","へいせつ","へいそ","へいたく","へいてん","へいねつ","へいわ","へきが","へこむ","べにいろ","べにしょうが","へらす","へんかん","べんきょう","べんごし","へんさい","へんたい","べんり","ほあん","ほいく","ぼうぎょ","ほうこく","ほうそう","ほうほう","ほうもん","ほうりつ","ほえる","ほおん","ほかん","ほきょう","ぼきん","ほくろ","ほけつ","ほけん","ほこう","ほこる","ほしい","ほしつ","ほしゅ","ほしょう","ほせい","ほそい","ほそく","ほたて","ほたる","ぽちぶくろ","ほっきょく","ほっさ","ほったん","ほとんど","ほめる","ほんい","ほんき","ほんけ","ほんしつ","ほんやく","まいにち","まかい","まかせる","まがる","まける","まこと","まさつ","まじめ","ますく","まぜる","まつり","まとめ","まなぶ","まぬけ","まねく","まほう","まもる","まゆげ","まよう","まろやか","まわす","まわり","まわる","まんが","まんきつ","まんぞく","まんなか","みいら","みうち","みえる","みがく","みかた","みかん","みけん","みこん","みじかい","みすい","みすえる","みせる","みっか","みつかる","みつける","みてい","みとめる","みなと","みなみかさい","みねらる","みのう","みのがす","みほん","みもと","みやげ","みらい","みりょく","みわく","みんか","みんぞく","むいか","むえき","むえん","むかい","むかう","むかえ","むかし","むぎちゃ","むける","むげん","むさぼる","むしあつい","むしば","むじゅん","むしろ","むすう","むすこ","むすぶ","むすめ","むせる","むせん","むちゅう","むなしい","むのう","むやみ","むよう","むらさき","むりょう","むろん","めいあん","めいうん","めいえん","めいかく","めいきょく","めいさい","めいし","めいそう","めいぶつ","めいれい","めいわく","めぐまれる","めざす","めした","めずらしい","めだつ","めまい","めやす","めんきょ","めんせき","めんどう","もうしあげる","もうどうけん","もえる","もくし","もくてき","もくようび","もちろん","もどる","もらう","もんく","もんだい","やおや","やける","やさい","やさしい","やすい","やすたろう","やすみ","やせる","やそう","やたい","やちん","やっと","やっぱり","やぶる","やめる","ややこしい","やよい","やわらかい","ゆうき","ゆうびんきょく","ゆうべ","ゆうめい","ゆけつ","ゆしゅつ","ゆせん","ゆそう","ゆたか","ゆちゃく","ゆでる","ゆにゅう","ゆびわ","ゆらい","ゆれる","ようい","ようか","ようきゅう","ようじ","ようす","ようちえん","よかぜ","よかん","よきん","よくせい","よくぼう","よけい","よごれる","よさん","よしゅう","よそう","よそく","よっか","よてい","よどがわく","よねつ","よやく","よゆう","よろこぶ","よろしい","らいう","らくがき","らくご","らくさつ","らくだ","らしんばん","らせん","らぞく","らたい","らっか","られつ","りえき","りかい","りきさく","りきせつ","りくぐん","りくつ","りけん","りこう","りせい","りそう","りそく","りてん","りねん","りゆう","りゅうがく","りよう","りょうり","りょかん","りょくちゃ","りょこう","りりく","りれき","りろん","りんご","るいけい","るいさい","るいじ","るいせき","るすばん","るりがわら","れいかん","れいぎ","れいせい","れいぞうこ","れいとう","れいぼう","れきし","れきだい","れんあい","れんけい","れんこん","れんさい","れんしゅう","れんぞく","れんらく","ろうか","ろうご","ろうじん","ろうそく","ろくが","ろこつ","ろじうら","ろしゅつ","ろせん","ろてん","ろめん","ろれつ","ろんぎ","ろんぱ","ろんぶん","ろんり","わかす","わかめ","わかやま","わかれる","わしつ","わじまし","わすれもの","わらう","われる"]},function(e){e.exports=["abaco","abbaglio","abbinato","abete","abisso","abolire","abrasivo","abrogato","accadere","accenno","accusato","acetone","achille","acido","acqua","acre","acrilico","acrobata","acuto","adagio","addebito","addome","adeguato","aderire","adipe","adottare","adulare","affabile","affetto","affisso","affranto","aforisma","afoso","africano","agave","agente","agevole","aggancio","agire","agitare","agonismo","agricolo","agrumeto","aguzzo","alabarda","alato","albatro","alberato","albo","albume","alce","alcolico","alettone","alfa","algebra","aliante","alibi","alimento","allagato","allegro","allievo","allodola","allusivo","almeno","alogeno","alpaca","alpestre","altalena","alterno","alticcio","altrove","alunno","alveolo","alzare","amalgama","amanita","amarena","ambito","ambrato","ameba","america","ametista","amico","ammasso","ammenda","ammirare","ammonito","amore","ampio","ampliare","amuleto","anacardo","anagrafe","analista","anarchia","anatra","anca","ancella","ancora","andare","andrea","anello","angelo","angolare","angusto","anima","annegare","annidato","anno","annuncio","anonimo","anticipo","anzi","apatico","apertura","apode","apparire","appetito","appoggio","approdo","appunto","aprile","arabica","arachide","aragosta","araldica","arancio","aratura","arazzo","arbitro","archivio","ardito","arenile","argento","argine","arguto","aria","armonia","arnese","arredato","arringa","arrosto","arsenico","arso","artefice","arzillo","asciutto","ascolto","asepsi","asettico","asfalto","asino","asola","aspirato","aspro","assaggio","asse","assoluto","assurdo","asta","astenuto","astice","astratto","atavico","ateismo","atomico","atono","attesa","attivare","attorno","attrito","attuale","ausilio","austria","autista","autonomo","autunno","avanzato","avere","avvenire","avviso","avvolgere","azione","azoto","azzimo","azzurro","babele","baccano","bacino","baco","badessa","badilata","bagnato","baita","balcone","baldo","balena","ballata","balzano","bambino","bandire","baraonda","barbaro","barca","baritono","barlume","barocco","basilico","basso","batosta","battuto","baule","bava","bavosa","becco","beffa","belgio","belva","benda","benevole","benigno","benzina","bere","berlina","beta","bibita","bici","bidone","bifido","biga","bilancia","bimbo","binocolo","biologo","bipede","bipolare","birbante","birra","biscotto","bisesto","bisnonno","bisonte","bisturi","bizzarro","blando","blatta","bollito","bonifico","bordo","bosco","botanico","bottino","bozzolo","braccio","bradipo","brama","branca","bravura","bretella","brevetto","brezza","briglia","brillante","brindare","broccolo","brodo","bronzina","brullo","bruno","bubbone","buca","budino","buffone","buio","bulbo","buono","burlone","burrasca","bussola","busta","cadetto","caduco","calamaro","calcolo","calesse","calibro","calmo","caloria","cambusa","camerata","camicia","cammino","camola","campale","canapa","candela","cane","canino","canotto","cantina","capace","capello","capitolo","capogiro","cappero","capra","capsula","carapace","carcassa","cardo","carisma","carovana","carretto","cartolina","casaccio","cascata","caserma","caso","cassone","castello","casuale","catasta","catena","catrame","cauto","cavillo","cedibile","cedrata","cefalo","celebre","cellulare","cena","cenone","centesimo","ceramica","cercare","certo","cerume","cervello","cesoia","cespo","ceto","chela","chiaro","chicca","chiedere","chimera","china","chirurgo","chitarra","ciao","ciclismo","cifrare","cigno","cilindro","ciottolo","circa","cirrosi","citrico","cittadino","ciuffo","civetta","civile","classico","clinica","cloro","cocco","codardo","codice","coerente","cognome","collare","colmato","colore","colposo","coltivato","colza","coma","cometa","commando","comodo","computer","comune","conciso","condurre","conferma","congelare","coniuge","connesso","conoscere","consumo","continuo","convegno","coperto","copione","coppia","copricapo","corazza","cordata","coricato","cornice","corolla","corpo","corredo","corsia","cortese","cosmico","costante","cottura","covato","cratere","cravatta","creato","credere","cremoso","crescita","creta","criceto","crinale","crisi","critico","croce","cronaca","crostata","cruciale","crusca","cucire","cuculo","cugino","cullato","cupola","curatore","cursore","curvo","cuscino","custode","dado","daino","dalmata","damerino","daniela","dannoso","danzare","datato","davanti","davvero","debutto","decennio","deciso","declino","decollo","decreto","dedicato","definito","deforme","degno","delegare","delfino","delirio","delta","demenza","denotato","dentro","deposito","derapata","derivare","deroga","descritto","deserto","desiderio","desumere","detersivo","devoto","diametro","dicembre","diedro","difeso","diffuso","digerire","digitale","diluvio","dinamico","dinnanzi","dipinto","diploma","dipolo","diradare","dire","dirotto","dirupo","disagio","discreto","disfare","disgelo","disposto","distanza","disumano","dito","divano","divelto","dividere","divorato","doblone","docente","doganale","dogma","dolce","domato","domenica","dominare","dondolo","dono","dormire","dote","dottore","dovuto","dozzina","drago","druido","dubbio","dubitare","ducale","duna","duomo","duplice","duraturo","ebano","eccesso","ecco","eclissi","economia","edera","edicola","edile","editoria","educare","egemonia","egli","egoismo","egregio","elaborato","elargire","elegante","elencato","eletto","elevare","elfico","elica","elmo","elsa","eluso","emanato","emblema","emesso","emiro","emotivo","emozione","empirico","emulo","endemico","enduro","energia","enfasi","enoteca","entrare","enzima","epatite","epilogo","episodio","epocale","eppure","equatore","erario","erba","erboso","erede","eremita","erigere","ermetico","eroe","erosivo","errante","esagono","esame","esanime","esaudire","esca","esempio","esercito","esibito","esigente","esistere","esito","esofago","esortato","esoso","espanso","espresso","essenza","esso","esteso","estimare","estonia","estroso","esultare","etilico","etnico","etrusco","etto","euclideo","europa","evaso","evidenza","evitato","evoluto","evviva","fabbrica","faccenda","fachiro","falco","famiglia","fanale","fanfara","fango","fantasma","fare","farfalla","farinoso","farmaco","fascia","fastoso","fasullo","faticare","fato","favoloso","febbre","fecola","fede","fegato","felpa","feltro","femmina","fendere","fenomeno","fermento","ferro","fertile","fessura","festivo","fetta","feudo","fiaba","fiducia","fifa","figurato","filo","finanza","finestra","finire","fiore","fiscale","fisico","fiume","flacone","flamenco","flebo","flemma","florido","fluente","fluoro","fobico","focaccia","focoso","foderato","foglio","folata","folclore","folgore","fondente","fonetico","fonia","fontana","forbito","forchetta","foresta","formica","fornaio","foro","fortezza","forzare","fosfato","fosso","fracasso","frana","frassino","fratello","freccetta","frenata","fresco","frigo","frollino","fronde","frugale","frutta","fucilata","fucsia","fuggente","fulmine","fulvo","fumante","fumetto","fumoso","fune","funzione","fuoco","furbo","furgone","furore","fuso","futile","gabbiano","gaffe","galateo","gallina","galoppo","gambero","gamma","garanzia","garbo","garofano","garzone","gasdotto","gasolio","gastrico","gatto","gaudio","gazebo","gazzella","geco","gelatina","gelso","gemello","gemmato","gene","genitore","gennaio","genotipo","gergo","ghepardo","ghiaccio","ghisa","giallo","gilda","ginepro","giocare","gioiello","giorno","giove","girato","girone","gittata","giudizio","giurato","giusto","globulo","glutine","gnomo","gobba","golf","gomito","gommone","gonfio","gonna","governo","gracile","grado","grafico","grammo","grande","grattare","gravoso","grazia","greca","gregge","grifone","grigio","grinza","grotta","gruppo","guadagno","guaio","guanto","guardare","gufo","guidare","ibernato","icona","identico","idillio","idolo","idra","idrico","idrogeno","igiene","ignaro","ignorato","ilare","illeso","illogico","illudere","imballo","imbevuto","imbocco","imbuto","immane","immerso","immolato","impacco","impeto","impiego","importo","impronta","inalare","inarcare","inattivo","incanto","incendio","inchino","incisivo","incluso","incontro","incrocio","incubo","indagine","india","indole","inedito","infatti","infilare","inflitto","ingaggio","ingegno","inglese","ingordo","ingrosso","innesco","inodore","inoltrare","inondato","insano","insetto","insieme","insonnia","insulina","intasato","intero","intonaco","intuito","inumidire","invalido","invece","invito","iperbole","ipnotico","ipotesi","ippica","iride","irlanda","ironico","irrigato","irrorare","isolato","isotopo","isterico","istituto","istrice","italia","iterare","labbro","labirinto","lacca","lacerato","lacrima","lacuna","laddove","lago","lampo","lancetta","lanterna","lardoso","larga","laringe","lastra","latenza","latino","lattuga","lavagna","lavoro","legale","leggero","lembo","lentezza","lenza","leone","lepre","lesivo","lessato","lesto","letterale","leva","levigato","libero","lido","lievito","lilla","limatura","limitare","limpido","lineare","lingua","liquido","lira","lirica","lisca","lite","litigio","livrea","locanda","lode","logica","lombare","londra","longevo","loquace","lorenzo","loto","lotteria","luce","lucidato","lumaca","luminoso","lungo","lupo","luppolo","lusinga","lusso","lutto","macabro","macchina","macero","macinato","madama","magico","maglia","magnete","magro","maiolica","malafede","malgrado","malinteso","malsano","malto","malumore","mana","mancia","mandorla","mangiare","manifesto","mannaro","manovra","mansarda","mantide","manubrio","mappa","maratona","marcire","maretta","marmo","marsupio","maschera","massaia","mastino","materasso","matricola","mattone","maturo","mazurca","meandro","meccanico","mecenate","medesimo","meditare","mega","melassa","melis","melodia","meninge","meno","mensola","mercurio","merenda","merlo","meschino","mese","messere","mestolo","metallo","metodo","mettere","miagolare","mica","micelio","michele","microbo","midollo","miele","migliore","milano","milite","mimosa","minerale","mini","minore","mirino","mirtillo","miscela","missiva","misto","misurare","mitezza","mitigare","mitra","mittente","mnemonico","modello","modifica","modulo","mogano","mogio","mole","molosso","monastero","monco","mondina","monetario","monile","monotono","monsone","montato","monviso","mora","mordere","morsicato","mostro","motivato","motosega","motto","movenza","movimento","mozzo","mucca","mucosa","muffa","mughetto","mugnaio","mulatto","mulinello","multiplo","mummia","munto","muovere","murale","musa","muscolo","musica","mutevole","muto","nababbo","nafta","nanometro","narciso","narice","narrato","nascere","nastrare","naturale","nautica","naviglio","nebulosa","necrosi","negativo","negozio","nemmeno","neofita","neretto","nervo","nessuno","nettuno","neutrale","neve","nevrotico","nicchia","ninfa","nitido","nobile","nocivo","nodo","nome","nomina","nordico","normale","norvegese","nostrano","notare","notizia","notturno","novella","nucleo","nulla","numero","nuovo","nutrire","nuvola","nuziale","oasi","obbedire","obbligo","obelisco","oblio","obolo","obsoleto","occasione","occhio","occidente","occorrere","occultare","ocra","oculato","odierno","odorare","offerta","offrire","offuscato","oggetto","oggi","ognuno","olandese","olfatto","oliato","oliva","ologramma","oltre","omaggio","ombelico","ombra","omega","omissione","ondoso","onere","onice","onnivoro","onorevole","onta","operato","opinione","opposto","oracolo","orafo","ordine","orecchino","orefice","orfano","organico","origine","orizzonte","orma","ormeggio","ornativo","orologio","orrendo","orribile","ortensia","ortica","orzata","orzo","osare","oscurare","osmosi","ospedale","ospite","ossa","ossidare","ostacolo","oste","otite","otre","ottagono","ottimo","ottobre","ovale","ovest","ovino","oviparo","ovocito","ovunque","ovviare","ozio","pacchetto","pace","pacifico","padella","padrone","paese","paga","pagina","palazzina","palesare","pallido","palo","palude","pandoro","pannello","paolo","paonazzo","paprica","parabola","parcella","parere","pargolo","pari","parlato","parola","partire","parvenza","parziale","passivo","pasticca","patacca","patologia","pattume","pavone","peccato","pedalare","pedonale","peggio","peloso","penare","pendice","penisola","pennuto","penombra","pensare","pentola","pepe","pepita","perbene","percorso","perdonato","perforare","pergamena","periodo","permesso","perno","perplesso","persuaso","pertugio","pervaso","pesatore","pesista","peso","pestifero","petalo","pettine","petulante","pezzo","piacere","pianta","piattino","piccino","picozza","piega","pietra","piffero","pigiama","pigolio","pigro","pila","pilifero","pillola","pilota","pimpante","pineta","pinna","pinolo","pioggia","piombo","piramide","piretico","pirite","pirolisi","pitone","pizzico","placebo","planare","plasma","platano","plenario","pochezza","poderoso","podismo","poesia","poggiare","polenta","poligono","pollice","polmonite","polpetta","polso","poltrona","polvere","pomice","pomodoro","ponte","popoloso","porfido","poroso","porpora","porre","portata","posa","positivo","possesso","postulato","potassio","potere","pranzo","prassi","pratica","precluso","predica","prefisso","pregiato","prelievo","premere","prenotare","preparato","presenza","pretesto","prevalso","prima","principe","privato","problema","procura","produrre","profumo","progetto","prolunga","promessa","pronome","proposta","proroga","proteso","prova","prudente","prugna","prurito","psiche","pubblico","pudica","pugilato","pugno","pulce","pulito","pulsante","puntare","pupazzo","pupilla","puro","quadro","qualcosa","quasi","querela","quota","raccolto","raddoppio","radicale","radunato","raffica","ragazzo","ragione","ragno","ramarro","ramingo","ramo","randagio","rantolare","rapato","rapina","rappreso","rasatura","raschiato","rasente","rassegna","rastrello","rata","ravveduto","reale","recepire","recinto","recluta","recondito","recupero","reddito","redimere","regalato","registro","regola","regresso","relazione","remare","remoto","renna","replica","reprimere","reputare","resa","residente","responso","restauro","rete","retina","retorica","rettifica","revocato","riassunto","ribadire","ribelle","ribrezzo","ricarica","ricco","ricevere","riciclato","ricordo","ricreduto","ridicolo","ridurre","rifasare","riflesso","riforma","rifugio","rigare","rigettato","righello","rilassato","rilevato","rimanere","rimbalzo","rimedio","rimorchio","rinascita","rincaro","rinforzo","rinnovo","rinomato","rinsavito","rintocco","rinuncia","rinvenire","riparato","ripetuto","ripieno","riportare","ripresa","ripulire","risata","rischio","riserva","risibile","riso","rispetto","ristoro","risultato","risvolto","ritardo","ritegno","ritmico","ritrovo","riunione","riva","riverso","rivincita","rivolto","rizoma","roba","robotico","robusto","roccia","roco","rodaggio","rodere","roditore","rogito","rollio","romantico","rompere","ronzio","rosolare","rospo","rotante","rotondo","rotula","rovescio","rubizzo","rubrica","ruga","rullino","rumine","rumoroso","ruolo","rupe","russare","rustico","sabato","sabbiare","sabotato","sagoma","salasso","saldatura","salgemma","salivare","salmone","salone","saltare","saluto","salvo","sapere","sapido","saporito","saraceno","sarcasmo","sarto","sassoso","satellite","satira","satollo","saturno","savana","savio","saziato","sbadiglio","sbalzo","sbancato","sbarra","sbattere","sbavare","sbendare","sbirciare","sbloccato","sbocciato","sbrinare","sbruffone","sbuffare","scabroso","scadenza","scala","scambiare","scandalo","scapola","scarso","scatenare","scavato","scelto","scenico","scettro","scheda","schiena","sciarpa","scienza","scindere","scippo","sciroppo","scivolo","sclerare","scodella","scolpito","scomparto","sconforto","scoprire","scorta","scossone","scozzese","scriba","scrollare","scrutinio","scuderia","scultore","scuola","scuro","scusare","sdebitare","sdoganare","seccatura","secondo","sedano","seggiola","segnalato","segregato","seguito","selciato","selettivo","sella","selvaggio","semaforo","sembrare","seme","seminato","sempre","senso","sentire","sepolto","sequenza","serata","serbato","sereno","serio","serpente","serraglio","servire","sestina","setola","settimana","sfacelo","sfaldare","sfamato","sfarzoso","sfaticato","sfera","sfida","sfilato","sfinge","sfocato","sfoderare","sfogo","sfoltire","sforzato","sfratto","sfruttato","sfuggito","sfumare","sfuso","sgabello","sgarbato","sgonfiare","sgorbio","sgrassato","sguardo","sibilo","siccome","sierra","sigla","signore","silenzio","sillaba","simbolo","simpatico","simulato","sinfonia","singolo","sinistro","sino","sintesi","sinusoide","sipario","sisma","sistole","situato","slitta","slogatura","sloveno","smarrito","smemorato","smentito","smeraldo","smilzo","smontare","smottato","smussato","snellire","snervato","snodo","sobbalzo","sobrio","soccorso","sociale","sodale","soffitto","sogno","soldato","solenne","solido","sollazzo","solo","solubile","solvente","somatico","somma","sonda","sonetto","sonnifero","sopire","soppeso","sopra","sorgere","sorpasso","sorriso","sorso","sorteggio","sorvolato","sospiro","sosta","sottile","spada","spalla","spargere","spatola","spavento","spazzola","specie","spedire","spegnere","spelatura","speranza","spessore","spettrale","spezzato","spia","spigoloso","spillato","spinoso","spirale","splendido","sportivo","sposo","spranga","sprecare","spronato","spruzzo","spuntino","squillo","sradicare","srotolato","stabile","stacco","staffa","stagnare","stampato","stantio","starnuto","stasera","statuto","stelo","steppa","sterzo","stiletto","stima","stirpe","stivale","stizzoso","stonato","storico","strappo","stregato","stridulo","strozzare","strutto","stuccare","stufo","stupendo","subentro","succoso","sudore","suggerito","sugo","sultano","suonare","superbo","supporto","surgelato","surrogato","sussurro","sutura","svagare","svedese","sveglio","svelare","svenuto","svezia","sviluppo","svista","svizzera","svolta","svuotare","tabacco","tabulato","tacciare","taciturno","tale","talismano","tampone","tannino","tara","tardivo","targato","tariffa","tarpare","tartaruga","tasto","tattico","taverna","tavolata","tazza","teca","tecnico","telefono","temerario","tempo","temuto","tendone","tenero","tensione","tentacolo","teorema","terme","terrazzo","terzetto","tesi","tesserato","testato","tetro","tettoia","tifare","tigella","timbro","tinto","tipico","tipografo","tiraggio","tiro","titanio","titolo","titubante","tizio","tizzone","toccare","tollerare","tolto","tombola","tomo","tonfo","tonsilla","topazio","topologia","toppa","torba","tornare","torrone","tortora","toscano","tossire","tostatura","totano","trabocco","trachea","trafila","tragedia","tralcio","tramonto","transito","trapano","trarre","trasloco","trattato","trave","treccia","tremolio","trespolo","tributo","tricheco","trifoglio","trillo","trincea","trio","tristezza","triturato","trivella","tromba","trono","troppo","trottola","trovare","truccato","tubatura","tuffato","tulipano","tumulto","tunisia","turbare","turchino","tuta","tutela","ubicato","uccello","uccisore","udire","uditivo","uffa","ufficio","uguale","ulisse","ultimato","umano","umile","umorismo","uncinetto","ungere","ungherese","unicorno","unificato","unisono","unitario","unte","uovo","upupa","uragano","urgenza","urlo","usanza","usato","uscito","usignolo","usuraio","utensile","utilizzo","utopia","vacante","vaccinato","vagabondo","vagliato","valanga","valgo","valico","valletta","valoroso","valutare","valvola","vampata","vangare","vanitoso","vano","vantaggio","vanvera","vapore","varano","varcato","variante","vasca","vedetta","vedova","veduto","vegetale","veicolo","velcro","velina","velluto","veloce","venato","vendemmia","vento","verace","verbale","vergogna","verifica","vero","verruca","verticale","vescica","vessillo","vestale","veterano","vetrina","vetusto","viandante","vibrante","vicenda","vichingo","vicinanza","vidimare","vigilia","vigneto","vigore","vile","villano","vimini","vincitore","viola","vipera","virgola","virologo","virulento","viscoso","visione","vispo","vissuto","visura","vita","vitello","vittima","vivanda","vivido","viziare","voce","voga","volatile","volere","volpe","voragine","vulcano","zampogna","zanna","zappato","zattera","zavorra","zefiro","zelante","zelo","zenzero","zerbino","zibetto","zinco","zircone","zitto","zolla","zotico","zucchero","zufolo","zulu","zuppa"]},function(e){e.exports=["abaisser","abandon","abdiquer","abeille","abolir","aborder","aboutir","aboyer","abrasif","abreuver","abriter","abroger","abrupt","absence","absolu","absurde","abusif","abyssal","académie","acajou","acarien","accabler","accepter","acclamer","accolade","accroche","accuser","acerbe","achat","acheter","aciduler","acier","acompte","acquérir","acronyme","acteur","actif","actuel","adepte","adéquat","adhésif","adjectif","adjuger","admettre","admirer","adopter","adorer","adoucir","adresse","adroit","adulte","adverbe","aérer","aéronef","affaire","affecter","affiche","affreux","affubler","agacer","agencer","agile","agiter","agrafer","agréable","agrume","aider","aiguille","ailier","aimable","aisance","ajouter","ajuster","alarmer","alchimie","alerte","algèbre","algue","aliéner","aliment","alléger","alliage","allouer","allumer","alourdir","alpaga","altesse","alvéole","amateur","ambigu","ambre","aménager","amertume","amidon","amiral","amorcer","amour","amovible","amphibie","ampleur","amusant","analyse","anaphore","anarchie","anatomie","ancien","anéantir","angle","angoisse","anguleux","animal","annexer","annonce","annuel","anodin","anomalie","anonyme","anormal","antenne","antidote","anxieux","apaiser","apéritif","aplanir","apologie","appareil","appeler","apporter","appuyer","aquarium","aqueduc","arbitre","arbuste","ardeur","ardoise","argent","arlequin","armature","armement","armoire","armure","arpenter","arracher","arriver","arroser","arsenic","artériel","article","aspect","asphalte","aspirer","assaut","asservir","assiette","associer","assurer","asticot","astre","astuce","atelier","atome","atrium","atroce","attaque","attentif","attirer","attraper","aubaine","auberge","audace","audible","augurer","aurore","automne","autruche","avaler","avancer","avarice","avenir","averse","aveugle","aviateur","avide","avion","aviser","avoine","avouer","avril","axial","axiome","badge","bafouer","bagage","baguette","baignade","balancer","balcon","baleine","balisage","bambin","bancaire","bandage","banlieue","bannière","banquier","barbier","baril","baron","barque","barrage","bassin","bastion","bataille","bateau","batterie","baudrier","bavarder","belette","bélier","belote","bénéfice","berceau","berger","berline","bermuda","besace","besogne","bétail","beurre","biberon","bicycle","bidule","bijou","bilan","bilingue","billard","binaire","biologie","biopsie","biotype","biscuit","bison","bistouri","bitume","bizarre","blafard","blague","blanchir","blessant","blinder","blond","bloquer","blouson","bobard","bobine","boire","boiser","bolide","bonbon","bondir","bonheur","bonifier","bonus","bordure","borne","botte","boucle","boueux","bougie","boulon","bouquin","bourse","boussole","boutique","boxeur","branche","brasier","brave","brebis","brèche","breuvage","bricoler","brigade","brillant","brioche","brique","brochure","broder","bronzer","brousse","broyeur","brume","brusque","brutal","bruyant","buffle","buisson","bulletin","bureau","burin","bustier","butiner","butoir","buvable","buvette","cabanon","cabine","cachette","cadeau","cadre","caféine","caillou","caisson","calculer","calepin","calibre","calmer","calomnie","calvaire","camarade","caméra","camion","campagne","canal","caneton","canon","cantine","canular","capable","caporal","caprice","capsule","capter","capuche","carabine","carbone","caresser","caribou","carnage","carotte","carreau","carton","cascade","casier","casque","cassure","causer","caution","cavalier","caverne","caviar","cédille","ceinture","céleste","cellule","cendrier","censurer","central","cercle","cérébral","cerise","cerner","cerveau","cesser","chagrin","chaise","chaleur","chambre","chance","chapitre","charbon","chasseur","chaton","chausson","chavirer","chemise","chenille","chéquier","chercher","cheval","chien","chiffre","chignon","chimère","chiot","chlorure","chocolat","choisir","chose","chouette","chrome","chute","cigare","cigogne","cimenter","cinéma","cintrer","circuler","cirer","cirque","citerne","citoyen","citron","civil","clairon","clameur","claquer","classe","clavier","client","cligner","climat","clivage","cloche","clonage","cloporte","cobalt","cobra","cocasse","cocotier","coder","codifier","coffre","cogner","cohésion","coiffer","coincer","colère","colibri","colline","colmater","colonel","combat","comédie","commande","compact","concert","conduire","confier","congeler","connoter","consonne","contact","convexe","copain","copie","corail","corbeau","cordage","corniche","corpus","correct","cortège","cosmique","costume","coton","coude","coupure","courage","couteau","couvrir","coyote","crabe","crainte","cravate","crayon","créature","créditer","crémeux","creuser","crevette","cribler","crier","cristal","critère","croire","croquer","crotale","crucial","cruel","crypter","cubique","cueillir","cuillère","cuisine","cuivre","culminer","cultiver","cumuler","cupide","curatif","curseur","cyanure","cycle","cylindre","cynique","daigner","damier","danger","danseur","dauphin","débattre","débiter","déborder","débrider","débutant","décaler","décembre","déchirer","décider","déclarer","décorer","décrire","décupler","dédale","déductif","déesse","défensif","défiler","défrayer","dégager","dégivrer","déglutir","dégrafer","déjeuner","délice","déloger","demander","demeurer","démolir","dénicher","dénouer","dentelle","dénuder","départ","dépenser","déphaser","déplacer","déposer","déranger","dérober","désastre","descente","désert","désigner","désobéir","dessiner","destrier","détacher","détester","détourer","détresse","devancer","devenir","deviner","devoir","diable","dialogue","diamant","dicter","différer","digérer","digital","digne","diluer","dimanche","diminuer","dioxyde","directif","diriger","discuter","disposer","dissiper","distance","divertir","diviser","docile","docteur","dogme","doigt","domaine","domicile","dompter","donateur","donjon","donner","dopamine","dortoir","dorure","dosage","doseur","dossier","dotation","douanier","double","douceur","douter","doyen","dragon","draper","dresser","dribbler","droiture","duperie","duplexe","durable","durcir","dynastie","éblouir","écarter","écharpe","échelle","éclairer","éclipse","éclore","écluse","école","économie","écorce","écouter","écraser","écrémer","écrivain","écrou","écume","écureuil","édifier","éduquer","effacer","effectif","effigie","effort","effrayer","effusion","égaliser","égarer","éjecter","élaborer","élargir","électron","élégant","éléphant","élève","éligible","élitisme","éloge","élucider","éluder","emballer","embellir","embryon","émeraude","émission","emmener","émotion","émouvoir","empereur","employer","emporter","emprise","émulsion","encadrer","enchère","enclave","encoche","endiguer","endosser","endroit","enduire","énergie","enfance","enfermer","enfouir","engager","engin","englober","énigme","enjamber","enjeu","enlever","ennemi","ennuyeux","enrichir","enrobage","enseigne","entasser","entendre","entier","entourer","entraver","énumérer","envahir","enviable","envoyer","enzyme","éolien","épaissir","épargne","épatant","épaule","épicerie","épidémie","épier","épilogue","épine","épisode","épitaphe","époque","épreuve","éprouver","épuisant","équerre","équipe","ériger","érosion","erreur","éruption","escalier","espadon","espèce","espiègle","espoir","esprit","esquiver","essayer","essence","essieu","essorer","estime","estomac","estrade","étagère","étaler","étanche","étatique","éteindre","étendoir","éternel","éthanol","éthique","ethnie","étirer","étoffer","étoile","étonnant","étourdir","étrange","étroit","étude","euphorie","évaluer","évasion","éventail","évidence","éviter","évolutif","évoquer","exact","exagérer","exaucer","exceller","excitant","exclusif","excuse","exécuter","exemple","exercer","exhaler","exhorter","exigence","exiler","exister","exotique","expédier","explorer","exposer","exprimer","exquis","extensif","extraire","exulter","fable","fabuleux","facette","facile","facture","faiblir","falaise","fameux","famille","farceur","farfelu","farine","farouche","fasciner","fatal","fatigue","faucon","fautif","faveur","favori","fébrile","féconder","fédérer","félin","femme","fémur","fendoir","féodal","fermer","féroce","ferveur","festival","feuille","feutre","février","fiasco","ficeler","fictif","fidèle","figure","filature","filetage","filière","filleul","filmer","filou","filtrer","financer","finir","fiole","firme","fissure","fixer","flairer","flamme","flasque","flatteur","fléau","flèche","fleur","flexion","flocon","flore","fluctuer","fluide","fluvial","folie","fonderie","fongible","fontaine","forcer","forgeron","formuler","fortune","fossile","foudre","fougère","fouiller","foulure","fourmi","fragile","fraise","franchir","frapper","frayeur","frégate","freiner","frelon","frémir","frénésie","frère","friable","friction","frisson","frivole","froid","fromage","frontal","frotter","fruit","fugitif","fuite","fureur","furieux","furtif","fusion","futur","gagner","galaxie","galerie","gambader","garantir","gardien","garnir","garrigue","gazelle","gazon","géant","gélatine","gélule","gendarme","général","génie","genou","gentil","géologie","géomètre","géranium","germe","gestuel","geyser","gibier","gicler","girafe","givre","glace","glaive","glisser","globe","gloire","glorieux","golfeur","gomme","gonfler","gorge","gorille","goudron","gouffre","goulot","goupille","gourmand","goutte","graduel","graffiti","graine","grand","grappin","gratuit","gravir","grenat","griffure","griller","grimper","grogner","gronder","grotte","groupe","gruger","grutier","gruyère","guépard","guerrier","guide","guimauve","guitare","gustatif","gymnaste","gyrostat","habitude","hachoir","halte","hameau","hangar","hanneton","haricot","harmonie","harpon","hasard","hélium","hématome","herbe","hérisson","hermine","héron","hésiter","heureux","hiberner","hibou","hilarant","histoire","hiver","homard","hommage","homogène","honneur","honorer","honteux","horde","horizon","horloge","hormone","horrible","houleux","housse","hublot","huileux","humain","humble","humide","humour","hurler","hydromel","hygiène","hymne","hypnose","idylle","ignorer","iguane","illicite","illusion","image","imbiber","imiter","immense","immobile","immuable","impact","impérial","implorer","imposer","imprimer","imputer","incarner","incendie","incident","incliner","incolore","indexer","indice","inductif","inédit","ineptie","inexact","infini","infliger","informer","infusion","ingérer","inhaler","inhiber","injecter","injure","innocent","inoculer","inonder","inscrire","insecte","insigne","insolite","inspirer","instinct","insulter","intact","intense","intime","intrigue","intuitif","inutile","invasion","inventer","inviter","invoquer","ironique","irradier","irréel","irriter","isoler","ivoire","ivresse","jaguar","jaillir","jambe","janvier","jardin","jauger","jaune","javelot","jetable","jeton","jeudi","jeunesse","joindre","joncher","jongler","joueur","jouissif","journal","jovial","joyau","joyeux","jubiler","jugement","junior","jupon","juriste","justice","juteux","juvénile","kayak","kimono","kiosque","label","labial","labourer","lacérer","lactose","lagune","laine","laisser","laitier","lambeau","lamelle","lampe","lanceur","langage","lanterne","lapin","largeur","larme","laurier","lavabo","lavoir","lecture","légal","léger","légume","lessive","lettre","levier","lexique","lézard","liasse","libérer","libre","licence","licorne","liège","lièvre","ligature","ligoter","ligue","limer","limite","limonade","limpide","linéaire","lingot","lionceau","liquide","lisière","lister","lithium","litige","littoral","livreur","logique","lointain","loisir","lombric","loterie","louer","lourd","loutre","louve","loyal","lubie","lucide","lucratif","lueur","lugubre","luisant","lumière","lunaire","lundi","luron","lutter","luxueux","machine","magasin","magenta","magique","maigre","maillon","maintien","mairie","maison","majorer","malaxer","maléfice","malheur","malice","mallette","mammouth","mandater","maniable","manquant","manteau","manuel","marathon","marbre","marchand","mardi","maritime","marqueur","marron","marteler","mascotte","massif","matériel","matière","matraque","maudire","maussade","mauve","maximal","méchant","méconnu","médaille","médecin","méditer","méduse","meilleur","mélange","mélodie","membre","mémoire","menacer","mener","menhir","mensonge","mentor","mercredi","mérite","merle","messager","mesure","métal","météore","méthode","métier","meuble","miauler","microbe","miette","mignon","migrer","milieu","million","mimique","mince","minéral","minimal","minorer","minute","miracle","miroiter","missile","mixte","mobile","moderne","moelleux","mondial","moniteur","monnaie","monotone","monstre","montagne","monument","moqueur","morceau","morsure","mortier","moteur","motif","mouche","moufle","moulin","mousson","mouton","mouvant","multiple","munition","muraille","murène","murmure","muscle","muséum","musicien","mutation","muter","mutuel","myriade","myrtille","mystère","mythique","nageur","nappe","narquois","narrer","natation","nation","nature","naufrage","nautique","navire","nébuleux","nectar","néfaste","négation","négliger","négocier","neige","nerveux","nettoyer","neurone","neutron","neveu","niche","nickel","nitrate","niveau","noble","nocif","nocturne","noirceur","noisette","nomade","nombreux","nommer","normatif","notable","notifier","notoire","nourrir","nouveau","novateur","novembre","novice","nuage","nuancer","nuire","nuisible","numéro","nuptial","nuque","nutritif","obéir","objectif","obliger","obscur","observer","obstacle","obtenir","obturer","occasion","occuper","océan","octobre","octroyer","octupler","oculaire","odeur","odorant","offenser","officier","offrir","ogive","oiseau","oisillon","olfactif","olivier","ombrage","omettre","onctueux","onduler","onéreux","onirique","opale","opaque","opérer","opinion","opportun","opprimer","opter","optique","orageux","orange","orbite","ordonner","oreille","organe","orgueil","orifice","ornement","orque","ortie","osciller","osmose","ossature","otarie","ouragan","ourson","outil","outrager","ouvrage","ovation","oxyde","oxygène","ozone","paisible","palace","palmarès","palourde","palper","panache","panda","pangolin","paniquer","panneau","panorama","pantalon","papaye","papier","papoter","papyrus","paradoxe","parcelle","paresse","parfumer","parler","parole","parrain","parsemer","partager","parure","parvenir","passion","pastèque","paternel","patience","patron","pavillon","pavoiser","payer","paysage","peigne","peintre","pelage","pélican","pelle","pelouse","peluche","pendule","pénétrer","pénible","pensif","pénurie","pépite","péplum","perdrix","perforer","période","permuter","perplexe","persil","perte","peser","pétale","petit","pétrir","peuple","pharaon","phobie","phoque","photon","phrase","physique","piano","pictural","pièce","pierre","pieuvre","pilote","pinceau","pipette","piquer","pirogue","piscine","piston","pivoter","pixel","pizza","placard","plafond","plaisir","planer","plaque","plastron","plateau","pleurer","plexus","pliage","plomb","plonger","pluie","plumage","pochette","poésie","poète","pointe","poirier","poisson","poivre","polaire","policier","pollen","polygone","pommade","pompier","ponctuel","pondérer","poney","portique","position","posséder","posture","potager","poteau","potion","pouce","poulain","poumon","pourpre","poussin","pouvoir","prairie","pratique","précieux","prédire","préfixe","prélude","prénom","présence","prétexte","prévoir","primitif","prince","prison","priver","problème","procéder","prodige","profond","progrès","proie","projeter","prologue","promener","propre","prospère","protéger","prouesse","proverbe","prudence","pruneau","psychose","public","puceron","puiser","pulpe","pulsar","punaise","punitif","pupitre","purifier","puzzle","pyramide","quasar","querelle","question","quiétude","quitter","quotient","racine","raconter","radieux","ragondin","raideur","raisin","ralentir","rallonge","ramasser","rapide","rasage","ratisser","ravager","ravin","rayonner","réactif","réagir","réaliser","réanimer","recevoir","réciter","réclamer","récolter","recruter","reculer","recycler","rédiger","redouter","refaire","réflexe","réformer","refrain","refuge","régalien","région","réglage","régulier","réitérer","rejeter","rejouer","relatif","relever","relief","remarque","remède","remise","remonter","remplir","remuer","renard","renfort","renifler","renoncer","rentrer","renvoi","replier","reporter","reprise","reptile","requin","réserve","résineux","résoudre","respect","rester","résultat","rétablir","retenir","réticule","retomber","retracer","réunion","réussir","revanche","revivre","révolte","révulsif","richesse","rideau","rieur","rigide","rigoler","rincer","riposter","risible","risque","rituel","rival","rivière","rocheux","romance","rompre","ronce","rondin","roseau","rosier","rotatif","rotor","rotule","rouge","rouille","rouleau","routine","royaume","ruban","rubis","ruche","ruelle","rugueux","ruiner","ruisseau","ruser","rustique","rythme","sabler","saboter","sabre","sacoche","safari","sagesse","saisir","salade","salive","salon","saluer","samedi","sanction","sanglier","sarcasme","sardine","saturer","saugrenu","saumon","sauter","sauvage","savant","savonner","scalpel","scandale","scélérat","scénario","sceptre","schéma","science","scinder","score","scrutin","sculpter","séance","sécable","sécher","secouer","sécréter","sédatif","séduire","seigneur","séjour","sélectif","semaine","sembler","semence","séminal","sénateur","sensible","sentence","séparer","séquence","serein","sergent","sérieux","serrure","sérum","service","sésame","sévir","sevrage","sextuple","sidéral","siècle","siéger","siffler","sigle","signal","silence","silicium","simple","sincère","sinistre","siphon","sirop","sismique","situer","skier","social","socle","sodium","soigneux","soldat","soleil","solitude","soluble","sombre","sommeil","somnoler","sonde","songeur","sonnette","sonore","sorcier","sortir","sosie","sottise","soucieux","soudure","souffle","soulever","soupape","source","soutirer","souvenir","spacieux","spatial","spécial","sphère","spiral","stable","station","sternum","stimulus","stipuler","strict","studieux","stupeur","styliste","sublime","substrat","subtil","subvenir","succès","sucre","suffixe","suggérer","suiveur","sulfate","superbe","supplier","surface","suricate","surmener","surprise","sursaut","survie","suspect","syllabe","symbole","symétrie","synapse","syntaxe","système","tabac","tablier","tactile","tailler","talent","talisman","talonner","tambour","tamiser","tangible","tapis","taquiner","tarder","tarif","tartine","tasse","tatami","tatouage","taupe","taureau","taxer","témoin","temporel","tenaille","tendre","teneur","tenir","tension","terminer","terne","terrible","tétine","texte","thème","théorie","thérapie","thorax","tibia","tiède","timide","tirelire","tiroir","tissu","titane","titre","tituber","toboggan","tolérant","tomate","tonique","tonneau","toponyme","torche","tordre","tornade","torpille","torrent","torse","tortue","totem","toucher","tournage","tousser","toxine","traction","trafic","tragique","trahir","train","trancher","travail","trèfle","tremper","trésor","treuil","triage","tribunal","tricoter","trilogie","triomphe","tripler","triturer","trivial","trombone","tronc","tropical","troupeau","tuile","tulipe","tumulte","tunnel","turbine","tuteur","tutoyer","tuyau","tympan","typhon","typique","tyran","ubuesque","ultime","ultrason","unanime","unifier","union","unique","unitaire","univers","uranium","urbain","urticant","usage","usine","usuel","usure","utile","utopie","vacarme","vaccin","vagabond","vague","vaillant","vaincre","vaisseau","valable","valise","vallon","valve","vampire","vanille","vapeur","varier","vaseux","vassal","vaste","vecteur","vedette","végétal","véhicule","veinard","véloce","vendredi","vénérer","venger","venimeux","ventouse","verdure","vérin","vernir","verrou","verser","vertu","veston","vétéran","vétuste","vexant","vexer","viaduc","viande","victoire","vidange","vidéo","vignette","vigueur","vilain","village","vinaigre","violon","vipère","virement","virtuose","virus","visage","viseur","vision","visqueux","visuel","vital","vitesse","viticole","vitrine","vivace","vivipare","vocation","voguer","voile","voisin","voiture","volaille","volcan","voltiger","volume","vorace","vortex","voter","vouloir","voyage","voyelle","wagon","xénon","yacht","zèbre","zénith","zeste","zoologie"]},function(e){e.exports=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"]},function(e){e.exports=["的","一","是","在","不","了","有","和","人","這","中","大","為","上","個","國","我","以","要","他","時","來","用","們","生","到","作","地","於","出","就","分","對","成","會","可","主","發","年","動","同","工","也","能","下","過","子","說","產","種","面","而","方","後","多","定","行","學","法","所","民","得","經","十","三","之","進","著","等","部","度","家","電","力","裡","如","水","化","高","自","二","理","起","小","物","現","實","加","量","都","兩","體","制","機","當","使","點","從","業","本","去","把","性","好","應","開","它","合","還","因","由","其","些","然","前","外","天","政","四","日","那","社","義","事","平","形","相","全","表","間","樣","與","關","各","重","新","線","內","數","正","心","反","你","明","看","原","又","麼","利","比","或","但","質","氣","第","向","道","命","此","變","條","只","沒","結","解","問","意","建","月","公","無","系","軍","很","情","者","最","立","代","想","已","通","並","提","直","題","黨","程","展","五","果","料","象","員","革","位","入","常","文","總","次","品","式","活","設","及","管","特","件","長","求","老","頭","基","資","邊","流","路","級","少","圖","山","統","接","知","較","將","組","見","計","別","她","手","角","期","根","論","運","農","指","幾","九","區","強","放","決","西","被","幹","做","必","戰","先","回","則","任","取","據","處","隊","南","給","色","光","門","即","保","治","北","造","百","規","熱","領","七","海","口","東","導","器","壓","志","世","金","增","爭","濟","階","油","思","術","極","交","受","聯","什","認","六","共","權","收","證","改","清","美","再","採","轉","更","單","風","切","打","白","教","速","花","帶","安","場","身","車","例","真","務","具","萬","每","目","至","達","走","積","示","議","聲","報","鬥","完","類","八","離","華","名","確","才","科","張","信","馬","節","話","米","整","空","元","況","今","集","溫","傳","土","許","步","群","廣","石","記","需","段","研","界","拉","林","律","叫","且","究","觀","越","織","裝","影","算","低","持","音","眾","書","布","复","容","兒","須","際","商","非","驗","連","斷","深","難","近","礦","千","週","委","素","技","備","半","辦","青","省","列","習","響","約","支","般","史","感","勞","便","團","往","酸","歷","市","克","何","除","消","構","府","稱","太","準","精","值","號","率","族","維","劃","選","標","寫","存","候","毛","親","快","效","斯","院","查","江","型","眼","王","按","格","養","易","置","派","層","片","始","卻","專","狀","育","廠","京","識","適","屬","圓","包","火","住","調","滿","縣","局","照","參","紅","細","引","聽","該","鐵","價","嚴","首","底","液","官","德","隨","病","蘇","失","爾","死","講","配","女","黃","推","顯","談","罪","神","藝","呢","席","含","企","望","密","批","營","項","防","舉","球","英","氧","勢","告","李","台","落","木","幫","輪","破","亞","師","圍","注","遠","字","材","排","供","河","態","封","另","施","減","樹","溶","怎","止","案","言","士","均","武","固","葉","魚","波","視","僅","費","緊","愛","左","章","早","朝","害","續","輕","服","試","食","充","兵","源","判","護","司","足","某","練","差","致","板","田","降","黑","犯","負","擊","范","繼","興","似","餘","堅","曲","輸","修","故","城","夫","夠","送","筆","船","佔","右","財","吃","富","春","職","覺","漢","畫","功","巴","跟","雖","雜","飛","檢","吸","助","昇","陽","互","初","創","抗","考","投","壞","策","古","徑","換","未","跑","留","鋼","曾","端","責","站","簡","述","錢","副","盡","帝","射","草","衝","承","獨","令","限","阿","宣","環","雙","請","超","微","讓","控","州","良","軸","找","否","紀","益","依","優","頂","礎","載","倒","房","突","坐","粉","敵","略","客","袁","冷","勝","絕","析","塊","劑","測","絲","協","訴","念","陳","仍","羅","鹽","友","洋","錯","苦","夜","刑","移","頻","逐","靠","混","母","短","皮","終","聚","汽","村","雲","哪","既","距","衛","停","烈","央","察","燒","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","遊","久","菜","味","舊","模","湖","貨","損","預","阻","毫","普","穩","乙","媽","植","息","擴","銀","語","揮","酒","守","拿","序","紙","醫","缺","雨","嗎","針","劉","啊","急","唱","誤","訓","願","審","附","獲","茶","鮮","糧","斤","孩","脫","硫","肥","善","龍","演","父","漸","血","歡","械","掌","歌","沙","剛","攻","謂","盾","討","晚","粒","亂","燃","矛","乎","殺","藥","寧","魯","貴","鐘","煤","讀","班","伯","香","介","迫","句","豐","培","握","蘭","擔","弦","蛋","沉","假","穿","執","答","樂","誰","順","煙","縮","徵","臉","喜","松","腳","困","異","免","背","星","福","買","染","井","概","慢","怕","磁","倍","祖","皇","促","靜","補","評","翻","肉","踐","尼","衣","寬","揚","棉","希","傷","操","垂","秋","宜","氫","套","督","振","架","亮","末","憲","慶","編","牛","觸","映","雷","銷","詩","座","居","抓","裂","胞","呼","娘","景","威","綠","晶","厚","盟","衡","雞","孫","延","危","膠","屋","鄉","臨","陸","顧","掉","呀","燈","歲","措","束","耐","劇","玉","趙","跳","哥","季","課","凱","胡","額","款","紹","卷","齊","偉","蒸","殖","永","宗","苗","川","爐","岩","弱","零","楊","奏","沿","露","桿","探","滑","鎮","飯","濃","航","懷","趕","庫","奪","伊","靈","稅","途","滅","賽","歸","召","鼓","播","盤","裁","險","康","唯","錄","菌","純","借","糖","蓋","橫","符","私","努","堂","域","槍","潤","幅","哈","竟","熟","蟲","澤","腦","壤","碳","歐","遍","側","寨","敢","徹","慮","斜","薄","庭","納","彈","飼","伸","折","麥","濕","暗","荷","瓦","塞","床","築","惡","戶","訪","塔","奇","透","梁","刀","旋","跡","卡","氯","遇","份","毒","泥","退","洗","擺","灰","彩","賣","耗","夏","擇","忙","銅","獻","硬","予","繁","圈","雪","函","亦","抽","篇","陣","陰","丁","尺","追","堆","雄","迎","泛","爸","樓","避","謀","噸","野","豬","旗","累","偏","典","館","索","秦","脂","潮","爺","豆","忽","托","驚","塑","遺","愈","朱","替","纖","粗","傾","尚","痛","楚","謝","奮","購","磨","君","池","旁","碎","骨","監","捕","弟","暴","割","貫","殊","釋","詞","亡","壁","頓","寶","午","塵","聞","揭","炮","殘","冬","橋","婦","警","綜","招","吳","付","浮","遭","徐","您","搖","谷","贊","箱","隔","訂","男","吹","園","紛","唐","敗","宋","玻","巨","耕","坦","榮","閉","灣","鍵","凡","駐","鍋","救","恩","剝","凝","鹼","齒","截","煉","麻","紡","禁","廢","盛","版","緩","淨","睛","昌","婚","涉","筒","嘴","插","岸","朗","莊","街","藏","姑","貿","腐","奴","啦","慣","乘","夥","恢","勻","紗","扎","辯","耳","彪","臣","億","璃","抵","脈","秀","薩","俄","網","舞","店","噴","縱","寸","汗","掛","洪","賀","閃","柬","爆","烯","津","稻","牆","軟","勇","像","滾","厘","蒙","芳","肯","坡","柱","盪","腿","儀","旅","尾","軋","冰","貢","登","黎","削","鑽","勒","逃","障","氨","郭","峰","幣","港","伏","軌","畝","畢","擦","莫","刺","浪","秘","援","株","健","售","股","島","甘","泡","睡","童","鑄","湯","閥","休","匯","舍","牧","繞","炸","哲","磷","績","朋","淡","尖","啟","陷","柴","呈","徒","顏","淚","稍","忘","泵","藍","拖","洞","授","鏡","辛","壯","鋒","貧","虛","彎","摩","泰","幼","廷","尊","窗","綱","弄","隸","疑","氏","宮","姐","震","瑞","怪","尤","琴","循","描","膜","違","夾","腰","緣","珠","窮","森","枝","竹","溝","催","繩","憶","邦","剩","幸","漿","欄","擁","牙","貯","禮","濾","鈉","紋","罷","拍","咱","喊","袖","埃","勤","罰","焦","潛","伍","墨","欲","縫","姓","刊","飽","仿","獎","鋁","鬼","麗","跨","默","挖","鏈","掃","喝","袋","炭","污","幕","諸","弧","勵","梅","奶","潔","災","舟","鑑","苯","訟","抱","毀","懂","寒","智","埔","寄","屆","躍","渡","挑","丹","艱","貝","碰","拔","爹","戴","碼","夢","芽","熔","赤","漁","哭","敬","顆","奔","鉛","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","倉","魏","銳","曉","氮","兼","隱","礙","赫","撥","忠","肅","缸","牽","搶","博","巧","殼","兄","杜","訊","誠","碧","祥","柯","頁","巡","矩","悲","灌","齡","倫","票","尋","桂","鋪","聖","恐","恰","鄭","趣","抬","荒","騰","貼","柔","滴","猛","闊","輛","妻","填","撤","儲","簽","鬧","擾","紫","砂","遞","戲","吊","陶","伐","餵","療","瓶","婆","撫","臂","摸","忍","蝦","蠟","鄰","胸","鞏","擠","偶","棄","槽","勁","乳","鄧","吉","仁","爛","磚","租","烏","艦","伴","瓜","淺","丙","暫","燥","橡","柳","迷","暖","牌","秧","膽","詳","簧","踏","瓷","譜","呆","賓","糊","洛","輝","憤","競","隙","怒","粘","乃","緒","肩","籍","敏","塗","熙","皆","偵","懸","掘","享","糾","醒","狂","鎖","淀","恨","牲","霸","爬","賞","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鴨","趨","鳳","晨","畜","輩","秩","卵","署","梯","炎","灘","棋","驅","篩","峽","冒","啥","壽","譯","浸","泉","帽","遲","矽","疆","貸","漏","稿","冠","嫩","脅","芯","牢","叛","蝕","奧","鳴","嶺","羊","憑","串","塘","繪","酵","融","盆","錫","廟","籌","凍","輔","攝","襲","筋","拒","僚","旱","鉀","鳥","漆","沈","眉","疏","添","棒","穗","硝","韓","逼","扭","僑","涼","挺","碗","栽","炒","杯","患","餾","勸","豪","遼","勃","鴻","旦","吏","拜","狗","埋","輥","掩","飲","搬","罵","辭","勾","扣","估","蔣","絨","霧","丈","朵","姆","擬","宇","輯","陝","雕","償","蓄","崇","剪","倡","廳","咬","駛","薯","刷","斥","番","賦","奉","佛","澆","漫","曼","扇","鈣","桃","扶","仔","返","俗","虧","腔","鞋","棱","覆","框","悄","叔","撞","騙","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","脹","諧","拋","黴","桑","崗","嘛","衰","盜","滲","臟","賴","湧","甜","曹","閱","肌","哩","厲","烴","緯","毅","昨","偽","症","煮","嘆","釘","搭","莖","籠","酷","偷","弓","錐","恆","傑","坑","鼻","翼","綸","敘","獄","逮","罐","絡","棚","抑","膨","蔬","寺","驟","穆","冶","枯","冊","屍","凸","紳","坯","犧","焰","轟","欣","晉","瘦","禦","錠","錦","喪","旬","鍛","壟","搜","撲","邀","亭","酯","邁","舒","脆","酶","閒","憂","酚","頑","羽","漲","卸","仗","陪","闢","懲","杭","姚","肚","捉","飄","漂","昆","欺","吾","郎","烷","汁","呵","飾","蕭","雅","郵","遷","燕","撒","姻","赴","宴","煩","債","帳","斑","鈴","旨","醇","董","餅","雛","姿","拌","傅","腹","妥","揉","賢","拆","歪","葡","胺","丟","浩","徽","昂","墊","擋","覽","貪","慰","繳","汪","慌","馮","諾","姜","誼","兇","劣","誣","耀","昏","躺","盈","騎","喬","溪","叢","盧","抹","悶","諮","刮","駕","纜","悟","摘","鉺","擲","頗","幻","柄","惠","慘","佳","仇","臘","窩","滌","劍","瞧","堡","潑","蔥","罩","霍","撈","胎","蒼","濱","倆","捅","湘","砍","霞","邵","萄","瘋","淮","遂","熊","糞","烘","宿","檔","戈","駁","嫂","裕","徙","箭","捐","腸","撐","曬","辨","殿","蓮","攤","攪","醬","屏","疫","哀","蔡","堵","沫","皺","暢","疊","閣","萊","敲","轄","鉤","痕","壩","巷","餓","禍","丘","玄","溜","曰","邏","彭","嘗","卿","妨","艇","吞","韋","怨","矮","歇"]},function(e){e.exports=["的","一","是","在","不","了","有","和","人","这","中","大","为","上","个","国","我","以","要","他","时","来","用","们","生","到","作","地","于","出","就","分","对","成","会","可","主","发","年","动","同","工","也","能","下","过","子","说","产","种","面","而","方","后","多","定","行","学","法","所","民","得","经","十","三","之","进","着","等","部","度","家","电","力","里","如","水","化","高","自","二","理","起","小","物","现","实","加","量","都","两","体","制","机","当","使","点","从","业","本","去","把","性","好","应","开","它","合","还","因","由","其","些","然","前","外","天","政","四","日","那","社","义","事","平","形","相","全","表","间","样","与","关","各","重","新","线","内","数","正","心","反","你","明","看","原","又","么","利","比","或","但","质","气","第","向","道","命","此","变","条","只","没","结","解","问","意","建","月","公","无","系","军","很","情","者","最","立","代","想","已","通","并","提","直","题","党","程","展","五","果","料","象","员","革","位","入","常","文","总","次","品","式","活","设","及","管","特","件","长","求","老","头","基","资","边","流","路","级","少","图","山","统","接","知","较","将","组","见","计","别","她","手","角","期","根","论","运","农","指","几","九","区","强","放","决","西","被","干","做","必","战","先","回","则","任","取","据","处","队","南","给","色","光","门","即","保","治","北","造","百","规","热","领","七","海","口","东","导","器","压","志","世","金","增","争","济","阶","油","思","术","极","交","受","联","什","认","六","共","权","收","证","改","清","美","再","采","转","更","单","风","切","打","白","教","速","花","带","安","场","身","车","例","真","务","具","万","每","目","至","达","走","积","示","议","声","报","斗","完","类","八","离","华","名","确","才","科","张","信","马","节","话","米","整","空","元","况","今","集","温","传","土","许","步","群","广","石","记","需","段","研","界","拉","林","律","叫","且","究","观","越","织","装","影","算","低","持","音","众","书","布","复","容","儿","须","际","商","非","验","连","断","深","难","近","矿","千","周","委","素","技","备","半","办","青","省","列","习","响","约","支","般","史","感","劳","便","团","往","酸","历","市","克","何","除","消","构","府","称","太","准","精","值","号","率","族","维","划","选","标","写","存","候","毛","亲","快","效","斯","院","查","江","型","眼","王","按","格","养","易","置","派","层","片","始","却","专","状","育","厂","京","识","适","属","圆","包","火","住","调","满","县","局","照","参","红","细","引","听","该","铁","价","严","首","底","液","官","德","随","病","苏","失","尔","死","讲","配","女","黄","推","显","谈","罪","神","艺","呢","席","含","企","望","密","批","营","项","防","举","球","英","氧","势","告","李","台","落","木","帮","轮","破","亚","师","围","注","远","字","材","排","供","河","态","封","另","施","减","树","溶","怎","止","案","言","士","均","武","固","叶","鱼","波","视","仅","费","紧","爱","左","章","早","朝","害","续","轻","服","试","食","充","兵","源","判","护","司","足","某","练","差","致","板","田","降","黑","犯","负","击","范","继","兴","似","余","坚","曲","输","修","故","城","夫","够","送","笔","船","占","右","财","吃","富","春","职","觉","汉","画","功","巴","跟","虽","杂","飞","检","吸","助","升","阳","互","初","创","抗","考","投","坏","策","古","径","换","未","跑","留","钢","曾","端","责","站","简","述","钱","副","尽","帝","射","草","冲","承","独","令","限","阿","宣","环","双","请","超","微","让","控","州","良","轴","找","否","纪","益","依","优","顶","础","载","倒","房","突","坐","粉","敌","略","客","袁","冷","胜","绝","析","块","剂","测","丝","协","诉","念","陈","仍","罗","盐","友","洋","错","苦","夜","刑","移","频","逐","靠","混","母","短","皮","终","聚","汽","村","云","哪","既","距","卫","停","烈","央","察","烧","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","游","久","菜","味","旧","模","湖","货","损","预","阻","毫","普","稳","乙","妈","植","息","扩","银","语","挥","酒","守","拿","序","纸","医","缺","雨","吗","针","刘","啊","急","唱","误","训","愿","审","附","获","茶","鲜","粮","斤","孩","脱","硫","肥","善","龙","演","父","渐","血","欢","械","掌","歌","沙","刚","攻","谓","盾","讨","晚","粒","乱","燃","矛","乎","杀","药","宁","鲁","贵","钟","煤","读","班","伯","香","介","迫","句","丰","培","握","兰","担","弦","蛋","沉","假","穿","执","答","乐","谁","顺","烟","缩","征","脸","喜","松","脚","困","异","免","背","星","福","买","染","井","概","慢","怕","磁","倍","祖","皇","促","静","补","评","翻","肉","践","尼","衣","宽","扬","棉","希","伤","操","垂","秋","宜","氢","套","督","振","架","亮","末","宪","庆","编","牛","触","映","雷","销","诗","座","居","抓","裂","胞","呼","娘","景","威","绿","晶","厚","盟","衡","鸡","孙","延","危","胶","屋","乡","临","陆","顾","掉","呀","灯","岁","措","束","耐","剧","玉","赵","跳","哥","季","课","凯","胡","额","款","绍","卷","齐","伟","蒸","殖","永","宗","苗","川","炉","岩","弱","零","杨","奏","沿","露","杆","探","滑","镇","饭","浓","航","怀","赶","库","夺","伊","灵","税","途","灭","赛","归","召","鼓","播","盘","裁","险","康","唯","录","菌","纯","借","糖","盖","横","符","私","努","堂","域","枪","润","幅","哈","竟","熟","虫","泽","脑","壤","碳","欧","遍","侧","寨","敢","彻","虑","斜","薄","庭","纳","弹","饲","伸","折","麦","湿","暗","荷","瓦","塞","床","筑","恶","户","访","塔","奇","透","梁","刀","旋","迹","卡","氯","遇","份","毒","泥","退","洗","摆","灰","彩","卖","耗","夏","择","忙","铜","献","硬","予","繁","圈","雪","函","亦","抽","篇","阵","阴","丁","尺","追","堆","雄","迎","泛","爸","楼","避","谋","吨","野","猪","旗","累","偏","典","馆","索","秦","脂","潮","爷","豆","忽","托","惊","塑","遗","愈","朱","替","纤","粗","倾","尚","痛","楚","谢","奋","购","磨","君","池","旁","碎","骨","监","捕","弟","暴","割","贯","殊","释","词","亡","壁","顿","宝","午","尘","闻","揭","炮","残","冬","桥","妇","警","综","招","吴","付","浮","遭","徐","您","摇","谷","赞","箱","隔","订","男","吹","园","纷","唐","败","宋","玻","巨","耕","坦","荣","闭","湾","键","凡","驻","锅","救","恩","剥","凝","碱","齿","截","炼","麻","纺","禁","废","盛","版","缓","净","睛","昌","婚","涉","筒","嘴","插","岸","朗","庄","街","藏","姑","贸","腐","奴","啦","惯","乘","伙","恢","匀","纱","扎","辩","耳","彪","臣","亿","璃","抵","脉","秀","萨","俄","网","舞","店","喷","纵","寸","汗","挂","洪","贺","闪","柬","爆","烯","津","稻","墙","软","勇","像","滚","厘","蒙","芳","肯","坡","柱","荡","腿","仪","旅","尾","轧","冰","贡","登","黎","削","钻","勒","逃","障","氨","郭","峰","币","港","伏","轨","亩","毕","擦","莫","刺","浪","秘","援","株","健","售","股","岛","甘","泡","睡","童","铸","汤","阀","休","汇","舍","牧","绕","炸","哲","磷","绩","朋","淡","尖","启","陷","柴","呈","徒","颜","泪","稍","忘","泵","蓝","拖","洞","授","镜","辛","壮","锋","贫","虚","弯","摩","泰","幼","廷","尊","窗","纲","弄","隶","疑","氏","宫","姐","震","瑞","怪","尤","琴","循","描","膜","违","夹","腰","缘","珠","穷","森","枝","竹","沟","催","绳","忆","邦","剩","幸","浆","栏","拥","牙","贮","礼","滤","钠","纹","罢","拍","咱","喊","袖","埃","勤","罚","焦","潜","伍","墨","欲","缝","姓","刊","饱","仿","奖","铝","鬼","丽","跨","默","挖","链","扫","喝","袋","炭","污","幕","诸","弧","励","梅","奶","洁","灾","舟","鉴","苯","讼","抱","毁","懂","寒","智","埔","寄","届","跃","渡","挑","丹","艰","贝","碰","拔","爹","戴","码","梦","芽","熔","赤","渔","哭","敬","颗","奔","铅","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","仓","魏","锐","晓","氮","兼","隐","碍","赫","拨","忠","肃","缸","牵","抢","博","巧","壳","兄","杜","讯","诚","碧","祥","柯","页","巡","矩","悲","灌","龄","伦","票","寻","桂","铺","圣","恐","恰","郑","趣","抬","荒","腾","贴","柔","滴","猛","阔","辆","妻","填","撤","储","签","闹","扰","紫","砂","递","戏","吊","陶","伐","喂","疗","瓶","婆","抚","臂","摸","忍","虾","蜡","邻","胸","巩","挤","偶","弃","槽","劲","乳","邓","吉","仁","烂","砖","租","乌","舰","伴","瓜","浅","丙","暂","燥","橡","柳","迷","暖","牌","秧","胆","详","簧","踏","瓷","谱","呆","宾","糊","洛","辉","愤","竞","隙","怒","粘","乃","绪","肩","籍","敏","涂","熙","皆","侦","悬","掘","享","纠","醒","狂","锁","淀","恨","牲","霸","爬","赏","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鸭","趋","凤","晨","畜","辈","秩","卵","署","梯","炎","滩","棋","驱","筛","峡","冒","啥","寿","译","浸","泉","帽","迟","硅","疆","贷","漏","稿","冠","嫩","胁","芯","牢","叛","蚀","奥","鸣","岭","羊","凭","串","塘","绘","酵","融","盆","锡","庙","筹","冻","辅","摄","袭","筋","拒","僚","旱","钾","鸟","漆","沈","眉","疏","添","棒","穗","硝","韩","逼","扭","侨","凉","挺","碗","栽","炒","杯","患","馏","劝","豪","辽","勃","鸿","旦","吏","拜","狗","埋","辊","掩","饮","搬","骂","辞","勾","扣","估","蒋","绒","雾","丈","朵","姆","拟","宇","辑","陕","雕","偿","蓄","崇","剪","倡","厅","咬","驶","薯","刷","斥","番","赋","奉","佛","浇","漫","曼","扇","钙","桃","扶","仔","返","俗","亏","腔","鞋","棱","覆","框","悄","叔","撞","骗","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","胀","谐","抛","霉","桑","岗","嘛","衰","盗","渗","脏","赖","涌","甜","曹","阅","肌","哩","厉","烃","纬","毅","昨","伪","症","煮","叹","钉","搭","茎","笼","酷","偷","弓","锥","恒","杰","坑","鼻","翼","纶","叙","狱","逮","罐","络","棚","抑","膨","蔬","寺","骤","穆","冶","枯","册","尸","凸","绅","坯","牺","焰","轰","欣","晋","瘦","御","锭","锦","丧","旬","锻","垄","搜","扑","邀","亭","酯","迈","舒","脆","酶","闲","忧","酚","顽","羽","涨","卸","仗","陪","辟","惩","杭","姚","肚","捉","飘","漂","昆","欺","吾","郎","烷","汁","呵","饰","萧","雅","邮","迁","燕","撒","姻","赴","宴","烦","债","帐","斑","铃","旨","醇","董","饼","雏","姿","拌","傅","腹","妥","揉","贤","拆","歪","葡","胺","丢","浩","徽","昂","垫","挡","览","贪","慰","缴","汪","慌","冯","诺","姜","谊","凶","劣","诬","耀","昏","躺","盈","骑","乔","溪","丛","卢","抹","闷","咨","刮","驾","缆","悟","摘","铒","掷","颇","幻","柄","惠","惨","佳","仇","腊","窝","涤","剑","瞧","堡","泼","葱","罩","霍","捞","胎","苍","滨","俩","捅","湘","砍","霞","邵","萄","疯","淮","遂","熊","粪","烘","宿","档","戈","驳","嫂","裕","徙","箭","捐","肠","撑","晒","辨","殿","莲","摊","搅","酱","屏","疫","哀","蔡","堵","沫","皱","畅","叠","阁","莱","敲","辖","钩","痕","坝","巷","饿","祸","丘","玄","溜","曰","逻","彭","尝","卿","妨","艇","吞","韦","怨","矮","歇"]},function(e,a,t){!function(a){"use strict";for(var t=[null,0,{}],r=10,c=44032,n=4352,i=4449,f=4519,o=19,d=21,s=28,b=d*s,u=o*b,l=function(e,a){this.codepoint=e,this.feature=a},p={},h=[],m=0;m<=255;++m)h[m]=0;var g=[function(e,a,r){return a<60||13311<a&&a<42607?new l(a,t):e(a,r)},function(e,a,t){var c=p[a];return c||(c=e(a,t)).feature&&++h[a>>8&255]>r&&(p[a]=c),c},function(e,a,t){return t?e(a,t):new l(a,null)},function(e,a,t){var r;if(a<n||n+o<=a&&a<c||c+u<a)return e(a,t);if(n<=a&&a<n+o){var p={},h=(a-n)*d;for(r=0;r<d;++r)p[i+r]=c+s*(r+h);return new l(a,[,,p])}var m=a-c,g=m%s,v=[];if(0!==g)v[0]=[c+m-g,f+g];else for(v[0]=[n+Math.floor(m/b),i+Math.floor(m%b/s)],v[2]={},r=1;r<s;++r)v[2][f+r]=a+r;return new l(a,v)},function(e,a,r){var c=65280&a,n=(l.udata[c]||{})[a];return new l(a,n||t)}];l.fromCharCode=g.reduceRight(function(e,a){return function(t,r){return a(e,t,r)}},null),l.isHighSurrogate=function(e){return e>=55296&&e<=56319},l.isLowSurrogate=function(e){return e>=56320&&e<=57343},l.prototype.prepFeature=function(){this.feature||(this.feature=l.fromCharCode(this.codepoint,!0).feature)},l.prototype.toString=function(){if(this.codepoint<65536)return String.fromCharCode(this.codepoint);var e=this.codepoint-65536;return String.fromCharCode(Math.floor(e/1024)+55296,e%1024+56320)},l.prototype.getDecomp=function(){return this.prepFeature(),this.feature[0]||null},l.prototype.isCompatibility=function(){return this.prepFeature(),!!this.feature[1]&&256&this.feature[1]},l.prototype.isExclude=function(){return this.prepFeature(),!!this.feature[1]&&512&this.feature[1]},l.prototype.getCanonicalClass=function(){return this.prepFeature(),this.feature[1]?255&this.feature[1]:0},l.prototype.getComposite=function(e){if(this.prepFeature(),!this.feature[2])return null;var a=this.feature[2][e.codepoint];return a?l.fromCharCode(a):null};var v=function(e){this.str=e,this.cursor=0};v.prototype.next=function(){if(this.str&&this.cursor<this.str.length){var e,a=this.str.charCodeAt(this.cursor++);return l.isHighSurrogate(a)&&this.cursor<this.str.length&&l.isLowSurrogate(e=this.str.charCodeAt(this.cursor))&&(a=1024*(a-55296)+(e-56320)+65536,++this.cursor),l.fromCharCode(a)}return this.str=null,null};var y=function(e,a){this.it=e,this.canonical=a,this.resBuf=[]};y.prototype.next=function(){if(0===this.resBuf.length){var e=this.it.next();if(!e)return null;this.resBuf=function e(a,t){var r=t.getDecomp();if(!r||a&&t.isCompatibility())return[t];for(var c=[],n=0;n<r.length;++n){var i=e(a,l.fromCharCode(r[n]));c=c.concat(i)}return c}(this.canonical,e)}return this.resBuf.shift()};var _=function(e){this.it=e,this.resBuf=[]};_.prototype.next=function(){var e;if(0===this.resBuf.length)do{var a=this.it.next();if(!a)break;e=a.getCanonicalClass();var t=this.resBuf.length;if(0!==e)for(;t>0;--t){if(this.resBuf[t-1].getCanonicalClass()<=e)break}this.resBuf.splice(t,0,a)}while(0!==e);return this.resBuf.shift()};var w=function(e){this.it=e,this.procBuf=[],this.resBuf=[],this.lastClass=null};w.prototype.next=function(){for(;0===this.resBuf.length;){var e=this.it.next();if(!e){this.resBuf=this.procBuf,this.procBuf=[];break}if(0===this.procBuf.length)this.lastClass=e.getCanonicalClass(),this.procBuf.push(e);else{var a=this.procBuf[0].getComposite(e),t=e.getCanonicalClass();a&&(this.lastClass<t||0===this.lastClass)?this.procBuf[0]=a:(0===t&&(this.resBuf=this.procBuf,this.procBuf=[]),this.lastClass=t,this.procBuf.push(e))}}return this.resBuf.shift()};var A=function(e,a){for(var t,r=function(e,a){switch(e){case"NFD":return new _(new y(new v(a),!0));case"NFKD":return new _(new y(new v(a),!1));case"NFC":return new w(new _(new y(new v(a),!0)));case"NFKC":return new w(new _(new y(new v(a),!1)))}throw e+" is invalid"}(e,a),c="";t=r.next();)c+=t.toString();return c};l.udata={0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8e3,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},5632:{71231:[,9],71350:[,9],71351:[,7]},5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},6144:{6313:[,228]},6400:{6457:[,222],6458:[,230],6459:[,220]},6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8e3,768]],8003:[[8001,768]],8004:[[8e3,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},8960:{9001:[[12296]],9002:[[12297]]},9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},11776:{11935:[[27597],256],12019:[[40863],256]},12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[3e4],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},48128:{113822:[,1]},53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},53760:{119362:[,230],119363:[,230],119364:[,230]},54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23e3]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149e3]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32e3]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[4e4]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}};var k={nfc:function(e){return A("NFC",e)},nfd:function(e){return A("NFD",e)},nfkc:function(e){return A("NFKC",e)},nfkd:function(e){return A("NFKD",e)}};e.exports=k,k.shimApplied=!1,String.prototype.normalize||(String.prototype.normalize=function(e){var a=""+this;if("NFC"===(e=void 0===e?"NFC":e))return k.nfc(a);if("NFD"===e)return k.nfd(a);if("NFKC"===e)return k.nfkc(a);if("NFKD"===e)return k.nfkd(a);throw new RangeError("Invalid normalization form: "+e)},k.shimApplied=!0)}()},function(e,a,t){var r,c=t(169),n=t(327),i=t(329),f=t(7).Buffer,o=global.crypto&&global.crypto.subtle,d={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"},s=[];function b(e,a,t,r,c){return o.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then(function(e){return o.deriveBits({name:"PBKDF2",salt:a,iterations:t,hash:{name:c}},e,r<<3)}).then(function(e){return f.from(e)})}e.exports=function(e,a,t,u,l,p){"function"==typeof l&&(p=l,l=void 0);var h=d[(l=l||"sha1").toLowerCase()];if(!h||"function"!=typeof global.Promise)return process.nextTick(function(){var r;try{r=i(e,a,t,u,l)}catch(e){return p(e)}p(null,r)});if(c(e,a,t,u),"function"!=typeof p)throw new Error("No callback provided to pbkdf2");f.isBuffer(e)||(e=f.from(e,n)),f.isBuffer(a)||(a=f.from(a,n)),function(e,a){e.then(function(e){process.nextTick(function(){a(null,e)})},function(e){process.nextTick(function(){a(e)})})}(function(e){if(global.process&&!global.process.browser)return Promise.resolve(!1);if(!o||!o.importKey||!o.deriveBits)return Promise.resolve(!1);if(void 0!==s[e])return s[e];var a=b(r=r||f.alloc(8),r,10,128,e).then(function(){return!0}).catch(function(){return!1});return s[e]=a,a}(h).then(function(r){return r?b(e,a,t,u,h):i(e,a,t,u,l)}),p)}},function(e,a,t){var r=t(7).Buffer,c=t(30),n=t(170).pbkdf2Sync,i=t(85),f=t(850),o=t(849),d=t(848),s=t(847),b=t(846),u=t(845),l=t(844),p=t(843),h=s,m="Invalid mnemonic",g="Invalid entropy",v="Invalid mnemonic checksum";function y(e,a,t){for(;e.length<t;)e=a+e;return e}function _(e){return parseInt(e,2)}function w(e){return e.map(function(e){return y(e.toString(2),"0",8)}).join("")}function A(e){var a=8*e.length/32,t=c("sha256").update(e).digest();return w([].slice.call(t)).slice(0,a)}function k(e,a){var t=r.from(f.nfkd(e),"utf8"),c=r.from(function(e){return"mnemonic"+(e||"")}(f.nfkd(a)),"utf8");return n(t,c,2048,64,"sha512")}function x(e,a){a=a||h;var t=f.nfkd(e).split(" ");if(t.length%3!=0)throw new Error(m);var c=t.map(function(e){var t=a.indexOf(e);if(-1===t)throw new Error(m);return y(t.toString(2),"0",11)}).join(""),n=32*Math.floor(c.length/33),i=c.slice(0,n),o=c.slice(n),d=i.match(/(.{1,8})/g).map(_);if(d.length<16)throw new Error(g);if(d.length>32)throw new Error(g);if(d.length%4!=0)throw new Error(g);var s=r.from(d);if(A(s)!==o)throw new Error(v);return s.toString("hex")}function E(e,a){if(a=a||h,e.length<32)throw new TypeError(g);if(e.length>64)throw new TypeError(g);if(e.length%8!=0)throw new TypeError(g);var t=r.from(e,"hex"),c=(w([].slice.call(t))+A(t)).match(/(.{1,11})/g).map(function(e){var t=_(e);return a[t]});return a===l?c.join("　"):c.join(" ")}e.exports={mnemonicToSeed:k,mnemonicToSeedHex:function(e,a){return k(e,a).toString("hex")},mnemonicToEntropy:x,entropyToMnemonic:E,generateMnemonic:function(e,a,t){if((e=e||128)%32!=0)throw new TypeError(g);return E((a=a||i)(e/8).toString("hex"),t)},validateMnemonic:function(e,a){try{x(e,a)}catch(e){return!1}return!0},wordlists:{EN:s,JA:l,chinese_simplified:o,chinese_traditional:d,english:s,french:b,italian:u,japanese:l,spanish:p}}},function(e,a,t){var r;!function(c,n){var i,f=this,o=256,d=6,s="random",b=n.pow(o,d),u=n.pow(2,52),l=2*u,p=o-1;function h(e,a,t){var r=[],h=g(function e(a,t){var r,c=[],n=typeof a;if(t&&"object"==n)for(r in a)try{c.push(e(a[r],t-1))}catch(e){}return c.length?c:"string"==n?a:a+"\0"}((a=1==a?{entropy:!0}:a||{}).entropy?[e,v(c)]:null==e?function(){try{var e;return i&&(e=i.randomBytes)?e=e(o):(e=new Uint8Array(o),(f.crypto||f.msCrypto).getRandomValues(e)),v(e)}catch(e){var a=f.navigator,t=a&&a.plugins;return[+new Date,f,t,f.screen,v(c)]}}():e,3),r),y=new function(e){var a,t=e.length,r=this,c=0,n=r.i=r.j=0,i=r.S=[];t||(e=[t++]);for(;c<o;)i[c]=c++;for(c=0;c<o;c++)i[c]=i[n=p&n+e[c%t]+(a=i[c])],i[n]=a;(r.g=function(e){for(var a,t=0,c=r.i,n=r.j,i=r.S;e--;)a=i[c=p&c+1],t=t*o+i[p&(i[c]=i[n=p&n+a])+(i[n]=a)];return r.i=c,r.j=n,t})(o)}(r),_=function(){for(var e=y.g(d),a=b,t=0;e<u;)e=(e+t)*o,a*=o,t=y.g(1);for(;e>=l;)e/=2,a/=2,t>>>=1;return(e+t)/a};return _.int32=function(){return 0|y.g(4)},_.quick=function(){return y.g(4)/4294967296},_.double=_,g(v(y.S),c),(a.pass||t||function(e,a,t,r){return r&&(r.S&&m(r,y),e.state=function(){return m(y,{})}),t?(n[s]=e,a):e})(_,h,"global"in a?a.global:this==n,a.state)}function m(e,a){return a.i=e.i,a.j=e.j,a.S=e.S.slice(),a}function g(e,a){for(var t,r=e+"",c=0;c<r.length;)a[p&c]=p&(t^=19*a[p&c])+r.charCodeAt(c++);return v(a)}function v(e){return String.fromCharCode.apply(0,e)}if(n["seed"+s]=h,g(n.random(),c),"object"==typeof e&&e.exports){e.exports=h;try{i=t(10)}catch(e){}}else void 0===(r=function(){return h}.call(a,t,a,e))||(e.exports=r)}([],Math)},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.a=e.a,a.b=e.b,a.c=e.c,a.d=e.d,a}function f(e,a){var t=new function(e){var a=this,t="";a.next=function(){var e=a.b,t=a.c,r=a.d,c=a.a;return e=e<<25^e>>>7^t,t=t-r|0,r=r<<24^r>>>8^c,c=c-e|0,a.b=e=e<<20^e>>>12^t,a.c=t=t-r|0,a.d=r<<16^t>>>16^c,a.a=c-e|0},a.a=0,a.b=0,a.c=-1640531527,a.d=1367130551,e===Math.floor(e)?(a.a=e/4294967296|0,a.b=0|e):t+=e;for(var r=0;r<t.length+20;r++)a.b^=0|t.charCodeAt(r),a.next()}(e),r=a&&a.state,c=function(){return(t.next()>>>0)/4294967296};return c.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},c.int32=t.next,c.quick=c,r&&("object"==typeof r&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.tychei=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.i=e.i,a.w=e.w,a.X=e.X.slice(),a}function f(e,a){null==e&&(e=+new Date);var t=new function(e){var a=this;a.next=function(){var e,t,r=a.w,c=a.X,n=a.i;return a.w=r=r+1640531527|0,t=c[n+34&127],e=c[n=n+1&127],t^=t<<13,e^=e<<17,t^=t>>>15,e^=e>>>12,t=c[n]=t^e,a.i=n,t+(r^r>>>16)|0},function(e,a){var t,r,c,n,i,f=[],o=128;for(a===(0|a)?(r=a,a=null):(a+="\0",r=0,o=Math.max(o,a.length)),c=0,n=-32;n<o;++n)a&&(r^=a.charCodeAt((n+32)%a.length)),0===n&&(i=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,n>=0&&(i=i+1640531527|0,c=0==(t=f[127&n]^=r+i)?c+1:0);for(c>=128&&(f[127&(a&&a.length||0)]=-1),c=127,n=512;n>0;--n)r=f[c+34&127],t=f[c=c+1&127],r^=r<<13,t^=t<<17,r^=r>>>15,t^=t>>>12,f[c]=r^t;e.w=i,e.X=f,e.i=c}(a,e)}(e),r=a&&a.state,c=function(){return(t.next()>>>0)/4294967296};return c.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},c.int32=t.next,c.quick=c,r&&(r.X&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.xor4096=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.x=e.x.slice(),a.i=e.i,a}function f(e,a){null==e&&(e=+new Date);var t=new function(e){var a=this;a.next=function(){var e,t,r=a.x,c=a.i;return e=r[c],t=(e^=e>>>7)^e<<24,t^=(e=r[c+1&7])^e>>>10,t^=(e=r[c+3&7])^e>>>3,t^=(e=r[c+4&7])^e<<7,e=r[c+7&7],t^=(e^=e<<13)^e<<9,r[c]=t,a.i=c+1&7,t},function(e,a){var t,r=[];if(a===(0|a))r[0]=a;else for(a=""+a,t=0;t<a.length;++t)r[7&t]=r[7&t]<<15^a.charCodeAt(t)+r[t+1&7]<<13;for(;r.length<8;)r.push(0);for(t=0;t<8&&0===r[t];++t);for(8==t?r[7]=-1:r[t],e.x=r,e.i=0,t=256;t>0;--t)e.next()}(a,e)}(e),r=a&&a.state,c=function(){return(t.next()>>>0)/4294967296};return c.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},c.int32=t.next,c.quick=c,r&&(r.x&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.xorshift7=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.x=e.x,a.y=e.y,a.z=e.z,a.w=e.w,a.v=e.v,a.d=e.d,a}function f(e,a){var t=new function(e){var a=this,t="";a.next=function(){var e=a.x^a.x>>>2;return a.x=a.y,a.y=a.z,a.z=a.w,a.w=a.v,(a.d=a.d+362437|0)+(a.v=a.v^a.v<<4^e^e<<1)|0},a.x=0,a.y=0,a.z=0,a.w=0,a.v=0,e===(0|e)?a.x=e:t+=e;for(var r=0;r<t.length+64;r++)a.x^=0|t.charCodeAt(r),r==t.length&&(a.d=a.x<<10^a.x>>>4),a.next()}(e),r=a&&a.state,c=function(){return(t.next()>>>0)/4294967296};return c.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},c.int32=t.next,c.quick=c,r&&("object"==typeof r&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.xorwow=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.x=e.x,a.y=e.y,a.z=e.z,a.w=e.w,a}function f(e,a){var t=new function(e){var a=this,t="";a.x=0,a.y=0,a.z=0,a.w=0,a.next=function(){var e=a.x^a.x<<11;return a.x=a.y,a.y=a.z,a.z=a.w,a.w^=a.w>>>19^e^e>>>8},e===(0|e)?a.x=e:t+=e;for(var r=0;r<t.length+64;r++)a.x^=0|t.charCodeAt(r),a.next()}(e),r=a&&a.state,c=function(){return(t.next()>>>0)/4294967296};return c.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},c.int32=t.next,c.quick=c,r&&("object"==typeof r&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.xor128=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){(function(e){var r;!function(e,c,n){function i(e,a){return a.c=e.c,a.s0=e.s0,a.s1=e.s1,a.s2=e.s2,a}function f(e,a){var t=new function(e){var a=this,t=function(){var e=4022871197;return function(a){a=a.toString();for(var t=0;t<a.length;t++){var r=.02519603282416938*(e+=a.charCodeAt(t));r-=e=r>>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)}}();a.next=function(){var e=2091639*a.s0+2.3283064365386963e-10*a.c;return a.s0=a.s1,a.s1=a.s2,a.s2=e-(a.c=0|e)},a.c=1,a.s0=t(" "),a.s1=t(" "),a.s2=t(" "),a.s0-=t(e),a.s0<0&&(a.s0+=1),a.s1-=t(e),a.s1<0&&(a.s1+=1),a.s2-=t(e),a.s2<0&&(a.s2+=1),t=null}(e),r=a&&a.state,c=t.next;return c.int32=function(){return 4294967296*t.next()|0},c.double=function(){return c()+1.1102230246251565e-16*(2097152*c()|0)},c.quick=c,r&&("object"==typeof r&&i(r,t),c.state=function(){return i(t,{})}),c}c&&c.exports?c.exports=f:t(28)&&t(60)?void 0===(r=function(){return f}.call(a,t,a,c))||(c.exports=r):this.alea=f}(0,"object"==typeof e&&e,t(28))}).call(this,t(25)(e))},function(e,a,t){var r=t(859),c=t(858),n=t(857),i=t(856),f=t(855),o=t(854),d=t(853);d.alea=r,d.xor128=c,d.xorwow=n,d.xorshift7=i,d.xor4096=f,d.tychei=o,e.exports=d},function(e,a,t){"use strict";const r=t(3),c=t(360),n=r.BN,i=new n("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16);e.exports=class{constructor(e){e=e||{};const a=[{name:"nonce",length:32,allowLess:!0,default:new Buffer([])},{name:"gasPrice",length:32,allowLess:!0,default:new Buffer([])},{name:"gasLimit",alias:"gas",length:32,allowLess:!0,default:new Buffer([])},{name:"to",allowZero:!0,length:20,default:new Buffer([])},{name:"value",length:32,allowLess:!0,default:new Buffer([])},{name:"data",alias:"input",allowZero:!0,default:new Buffer([])},{name:"v",allowZero:!0,default:new Buffer([28])},{name:"r",length:32,allowZero:!0,allowLess:!0,default:new Buffer([])},{name:"s",length:32,allowZero:!0,allowLess:!0,default:new Buffer([])}];r.defineProperties(this,a,e),Object.defineProperty(this,"from",{enumerable:!0,configurable:!0,get:this.getSenderAddress.bind(this)});let t=r.bufferToInt(this.v),c=Math.floor((t-35)/2);c<0&&(c=0),this._chainId=c||e.chainId||0,this._homestead=!0}toCreationAddress(){return""===this.to.toString("hex")}hash(e){let a;if(void 0===e&&(e=!0),e)a=this.raw;else if(this._chainId>0){const e=this.raw.slice();this.v=this._chainId,this.r=0,this.s=0,a=this.raw,this.raw=e}else a=this.raw.slice(0,6);return r.rlphash(a)}getChainId(){return this._chainId}getSenderAddress(){if(this._from)return this._from;const e=this.getSenderPublicKey();return this._from=r.publicToAddress(e),this._from}getSenderPublicKey(){if(!(this._senderPubKey&&this._senderPubKey.length||this.verifySignature()))throw new Error("Invalid Signature");return this._senderPubKey}verifySignature(){const e=this.hash(!1);if(this._homestead&&1===new n(this.s).cmp(i))return!1;try{let a=r.bufferToInt(this.v);this._chainId>0&&(a-=2*this._chainId+8),this._senderPubKey=r.ecrecover(e,a,this.r,this.s)}catch(e){return!1}return!!this._senderPubKey}sign(e){const a=this.hash(!1),t=r.ecsign(a,e);this._chainId>0&&(t.v+=2*this._chainId+8),Object.assign(this,t)}getDataFee(){const e=this.raw[5],a=new n(0);for(let t=0;t<e.length;t++)0===e[t]?a.iaddn(c.txDataZeroGas.v):a.iaddn(c.txDataNonZeroGas.v);return a}getBaseFee(){const e=this.getDataFee().iaddn(c.txGas.v);return this._homestead&&this.toCreationAddress()&&e.iaddn(c.txCreation.v),e}getUpfrontCost(){return new n(this.gasLimit).imul(new n(this.gasPrice)).iadd(new n(this.value))}validate(e){const a=[];return this.verifySignature()||a.push("Invalid Signature"),this.getBaseFee().cmp(new n(this.gasLimit))>0&&a.push([`gas limit is too low. Need at least ${this.getBaseFee()}`]),void 0===e||!1===e?0===a.length:a.join(" ")}}},function(e,a,t){const r=t(180),c=t(91),n=t(11),i=t(52),f=t(9),o=t(30);a.MAX_INTEGER=new f("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),a.TWO_POW256=new f("10000000000000000000000000000000000000000000000000000000000000000",16),a.SHA3_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",a.SHA3_NULL=new Buffer(a.SHA3_NULL_S,"hex"),a.SHA3_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",a.SHA3_RLP_ARRAY=new Buffer(a.SHA3_RLP_ARRAY_S,"hex"),a.SHA3_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",a.SHA3_RLP=new Buffer(a.SHA3_RLP_S,"hex"),a.BN=f,a.rlp=i,a.secp256k1=c,a.zeros=function(e){var a=new Buffer(e);return a.fill(0),a},a.setLengthLeft=a.setLength=function(e,t,r){var c=a.zeros(t);return e=a.toBuffer(e),r?e.length<t?(e.copy(c),c):e.slice(0,t):e.length<t?(e.copy(c,t-e.length),c):e.slice(-t)},a.setLengthRight=function(e,t){return a.setLength(e,t,!0)},a.unpad=a.stripZeros=function(e){for(var t=(e=a.stripHexPrefix(e))[0];e.length>0&&"0"===t.toString();)t=(e=e.slice(1))[0];return e},a.toBuffer=function(e){if(!Buffer.isBuffer(e))if(Array.isArray(e))e=new Buffer(e);else if("string"==typeof e)e=a.isHexPrefixed(e)?new Buffer(a.padToEven(a.stripHexPrefix(e)),"hex"):new Buffer(e);else if("number"==typeof e)e=a.intToBuffer(e);else if(null===e||void 0===e)e=new Buffer([]);else{if(!e.toArray)throw new Error("invalid type");e=new Buffer(e.toArray())}return e},a.intToHex=function(e){n(e%1==0,"number is not a integer"),n(e>=0,"number must be positive");var a=e.toString(16);return a.length%2&&(a="0"+a),"0x"+a},a.intToBuffer=function(e){var t=a.intToHex(e);return new Buffer(t.slice(2),"hex")},a.bufferToInt=function(e){return parseInt(a.bufferToHex(e),16)},a.bufferToHex=function(e){return 0===(e=a.toBuffer(e)).length?0:"0x"+e.toString("hex")},a.fromSigned=function(e){return new f(e).fromTwos(256)},a.toUnsigned=function(e){return new Buffer(e.toTwos(256).toArray())},a.sha3=function(e,t){e=a.toBuffer(e),t||(t=256);var c=new r(t);return e&&c.update(e),new Buffer(c.digest("hex"),"hex")},a.sha256=function(e){return e=a.toBuffer(e),o("sha256").update(e).digest()},a.ripemd160=function(e,t){e=a.toBuffer(e);var r=o("rmd160").update(e).digest();return!0===t?a.setLength(r,32):r},a.rlphash=function(e){return a.sha3(i.encode(e))},a.isValidPrivate=function(e){return c.privateKeyVerify(e)},a.isValidPublic=function(e,a){return 64===e.length?c.publicKeyVerify(Buffer.concat([new Buffer([4]),e])):!!a&&c.publicKeyVerify(e)},a.pubToAddress=a.publicToAddress=function(e,t){return e=a.toBuffer(e),t&&64!==e.length&&(e=c.publicKeyConvert(e,!1).slice(1)),n(64===e.length),a.sha3(e).slice(-20)};var d=a.privateToPublic=function(e){return e=a.toBuffer(e),c.publicKeyCreate(e,!1).slice(1)};a.importPublic=function(e){return 64!==(e=a.toBuffer(e)).length&&(e=c.publicKeyConvert(e,!1).slice(1)),e},a.ecsign=function(e,a){var t=c.sign(e,a),r={};return r.r=t.signature.slice(0,32),r.s=t.signature.slice(32,64),r.v=t.recovery+27,r},a.ecrecover=function(e,t,r,n){var i=Buffer.concat([a.setLength(r,32),a.setLength(n,32)],64),f=a.bufferToInt(t)-27;if(0!==f&&1!==f)throw new Error("Invalid signature v value");var o=c.recover(e,i,f);return c.publicKeyConvert(o,!1).slice(1)},a.toRpcSig=function(e,t,r){return a.bufferToHex(Buffer.concat([t,r,a.toBuffer(e-27)]))},a.fromRpcSig=function(e){var t=(e=a.toBuffer(e))[64];return t<27&&(t+=27),{v:t,r:e.slice(0,32),s:e.slice(32,64)}},a.privateToAddress=function(e){return a.publicToAddress(d(e))},a.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/i.test(e)},a.toChecksumAddress=function(e){e=a.stripHexPrefix(e).toLowerCase();for(var t=a.sha3(e).toString("hex"),r="0x",c=0;c<e.length;c++)parseInt(t[c],16)>=8?r+=e[c].toUpperCase():r+=e[c];return r},a.isValidChecksumAddress=function(e){return a.isValidAddress(e)&&a.toChecksumAddress(e)===e},a.generateAddress=function(e,t){return e=a.toBuffer(e),t=(t=new f(t)).isZero()?null:new Buffer(t.toArray()),a.rlphash([e,t]).slice(-20)},a.isPrecompiled=function(e){var t=a.unpad(e);return 1===t.length&&t[0]>0&&t[0]<5},a.isHexPrefixed=function(e){return"0x"===e.slice(0,2)},a.stripHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e.slice(2):e},a.addHexPrefix=function(e){return"string"!=typeof e?e:a.isHexPrefixed(e)?e:"0x"+e},a.padToEven=function(e){return e.length%2&&(e="0"+e),e},a.baToJSON=function(e){if(Buffer.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var t=[],r=0;r<e.length;r++)t.push(a.baToJSON(e[r]));return t}},a.defineProperties=function(e,t,r){if(e.raw=[],e._fields=[],e.toJSON=function(t){if(t){var r={};return e._fields.forEach(function(a){r[a]="0x"+e[a].toString("hex")}),r}return a.baToJSON(this.raw)},e.serialize=function(){return i.encode(e.raw)},t.forEach(function(t,r){function c(){return e.raw[r]}function i(c){"00"!==(c=a.toBuffer(c)).toString("hex")||t.allowZero||(c=new Buffer([])),t.allowLess&&t.length?(c=a.stripZeros(c),n(t.length>=c.length,"The field "+t.name+" must not have more "+t.length+" bytes")):t.allowZero&&0===c.length||!t.length||n(t.length===c.length,"The field "+t.name+" must have byte length of "+t.length),e.raw[r]=c}e._fields.push(t.name),Object.defineProperty(e,t.name,{enumerable:!0,configurable:!0,get:c,set:i}),t.default&&(e[t.name]=t.default),t.alias&&Object.defineProperty(e,t.alias,{enumerable:!1,configurable:!0,set:i,get:c})}),r)if("string"==typeof r&&(r=new Buffer(a.stripHexPrefix(r),"hex")),Buffer.isBuffer(r)&&(r=i.decode(r)),Array.isArray(r)){if(r.length>e._fields.length)throw new Error("wrong number of fields in data");r.forEach(function(t,r){e[e._fields[r]]=a.toBuffer(t)})}else{if("object"!=typeof r)throw new Error("invalid data");for(var c in r)-1!==e._fields.indexOf(c)&&(e[c]=r[c])}}},function(e,a,t){const r=t(862),c=t(9);var n=function(){};function i(e){return e.startsWith("int[")?"int256"+e.slice(3):"int"===e?"int256":e.startsWith("uint[")?"uint256"+e.slice(4):"uint"===e?"uint256":e.startsWith("fixed[")?"fixed128x128"+e.slice(5):"fixed"===e?"fixed128x128":e.startsWith("ufixed[")?"ufixed128x128"+e.slice(6):"ufixed"===e?"ufixed128x128":e}function f(e){return parseInt(/^\D+(\d+)$/.exec(e)[1],10)}function o(e){var a=/^\D+(\d+)x(\d+)$/.exec(e);return[parseInt(a[1],10),parseInt(a[2],10)]}function d(e){var a=e.match(/(.*)\[(.*?)\]$/);return a?""===a[2]?"dynamic":parseInt(a[2],10):null}function s(e){var a=typeof e;if("string"===a)return r.isHexPrefixed(e)?new c(r.stripHexPrefix(e),16):new c(e,10);if("number"===a)return new c(e);if(e.toArray)return e;throw new Error("Argument is not a number")}function b(e){var a=/^(\w+)\((.+)\)$/.exec(e);if(3!==a.length)throw new Error("Invalid method signature");var t=/^(.+)\):\((.+)$/.exec(a[2]);return null!==t&&3===t.length?{method:a[1],args:t[1].split(","),retargs:t[2].split(",")}:{method:a[1],args:a[2].split(",")}}function u(e,a){var t,n,i,b;if("address"===e)return u("uint160",s(a));if("bool"===e)return u("uint8",a?1:0);if("string"===e)return u("bytes",new Buffer(a,"utf8"));if(m(e)){if(void 0===a.length)throw new Error("Not an array?");if("dynamic"!==(t=d(e))&&0!==t&&a.length>t)throw new Error("Elements exceed array size: "+t);for(b in i=[],e=e.slice(0,e.lastIndexOf("[")),"string"==typeof a&&(a=JSON.parse(a)),a)i.push(u(e,a[b]));if("dynamic"===t){var l=u("uint256",a.length);i.unshift(l)}return Buffer.concat(i)}if("bytes"===e)return a=new Buffer(a),i=Buffer.concat([u("uint256",a.length),a]),a.length%32!=0&&(i=Buffer.concat([i,r.zeros(32-a.length%32)])),i;if(e.startsWith("bytes")){if((t=f(e))<1||t>32)throw new Error("Invalid bytes<N> width: "+t);return r.setLengthRight(a,32)}if(e.startsWith("uint")){if((t=f(e))%8||t<8||t>256)throw new Error("Invalid uint<N> width: "+t);if((n=s(a)).bitLength()>t)throw new Error("Supplied uint exceeds width: "+t+" vs "+n.bitLength());if(n<0)throw new Error("Supplied uint is negative");return n.toArrayLike(Buffer,"be",32)}if(e.startsWith("int")){if((t=f(e))%8||t<8||t>256)throw new Error("Invalid int<N> width: "+t);if((n=s(a)).bitLength()>t)throw new Error("Supplied int exceeds width: "+t+" vs "+n.bitLength());return n.toTwos(256).toArrayLike(Buffer,"be",32)}if(e.startsWith("ufixed")){if(t=o(e),(n=s(a))<0)throw new Error("Supplied ufixed is negative");return u("uint256",n.mul(new c(2).pow(new c(t[1]))))}if(e.startsWith("fixed"))return t=o(e),u("int256",s(a).mul(new c(2).pow(new c(t[1]))));throw new Error("Unsupported or invalid type: "+e)}function l(e,a,t){var r,n,i,f;if("string"==typeof e&&(e=p(e)),"address"===e.name)return l(e.rawType,a,t).toArrayLike(Buffer,"be",20).toString("hex");if("bool"===e.name)return l(e.rawType,a,t).toString()===new c(1).toString();if("string"===e.name){var o=l(e.rawType,a,t);return new Buffer(o,"utf8").toString()}if(e.isArray){for(i=[],r=e.size,"dynamic"===e.size&&(r=l("uint256",a,t=l("uint256",a,t).toNumber()).toNumber(),t+=32),f=0;f<r;f++){var d=l(e.subArray,a,t);i.push(d),t+=e.subArray.memoryUsage}return i}if("bytes"===e.name)return r=l("uint256",a,t=l("uint256",a,t).toNumber()).toNumber(),a.slice(t+32,t+32+r);if(e.name.startsWith("bytes"))return a.slice(t,t+e.size);if(e.name.startsWith("uint")){if((n=new c(a.slice(t,t+32),16,"be")).bitLength()>e.size)throw new Error("Decoded int exceeds width: "+e.size+" vs "+n.bitLength());return n}if(e.name.startsWith("int")){if((n=new c(a.slice(t,t+32),16,"be").fromTwos(256)).bitLength()>e.size)throw new Error("Decoded uint exceeds width: "+e.size+" vs "+n.bitLength());return n}if(e.name.startsWith("ufixed")){if(r=new c(2).pow(new c(e.size[1])),!(n=l("uint256",a,t)).mod(r).isZero())throw new Error("Decimals not supported yet");return n.div(r)}if(e.name.startsWith("fixed")){if(r=new c(2).pow(new c(e.size[1])),!(n=l("int256",a,t)).mod(r).isZero())throw new Error("Decimals not supported yet");return n.div(r)}throw new Error("Unsupported or invalid type: "+e.name)}function p(e){var a,t,r;if(m(e)){a=d(e);var c=e.slice(0,e.lastIndexOf("["));return c=p(c),t={isArray:!0,name:e,size:a,memoryUsage:"dynamic"===a?32:c.memoryUsage*a,subArray:c}}switch(e){case"address":r="uint160";break;case"bool":r="uint8";break;case"string":r="bytes"}if(t={rawType:r,name:e,memoryUsage:32},e.startsWith("bytes")&&"bytes"!==e||e.startsWith("uint")||e.startsWith("int")?t.size=f(e):(e.startsWith("ufixed")||e.startsWith("fixed"))&&(t.size=o(e)),e.startsWith("bytes")&&"bytes"!==e&&(t.size<1||t.size>32))throw new Error("Invalid bytes<N> width: "+t.size);if((e.startsWith("uint")||e.startsWith("int"))&&(t.size%8||t.size<8||t.size>256))throw new Error("Invalid int/uint<N> width: "+t.size);return t}function h(e){return"string"===e||"bytes"===e||"dynamic"===d(e)}function m(e){return e.lastIndexOf("]")===e.length-1}function g(e,a){return e.startsWith("address")||e.startsWith("bytes")?"0x"+a.toString("hex"):a.toString()}function v(e){return e>="0"&&e<="9"}n.eventID=function(e,a){var t=e+"("+a.map(i).join(",")+")";return r.sha3(new Buffer(t))},n.methodID=function(e,a){return n.eventID(e,a).slice(0,4)},n.rawEncode=function(e,a){var t=[],r=[],c=32*e.length;for(var n in e){var f=i(e[n]),o=u(f,a[n]);h(f)?(t.push(u("uint256",c)),r.push(o),c+=o.length):t.push(o)}return Buffer.concat(t.concat(r))},n.rawDecode=function(e,a){var t=[];a=new Buffer(a);var r=0;for(var c in e){var n=p(i(e[c])),f=l(n,a,r);r+=n.memoryUsage,t.push(f)}return t},n.simpleEncode=function(e){var a=Array.prototype.slice.call(arguments).slice(1),t=b(e);if(a.length!==t.args.length)throw new Error("Argument count mismatch");return Buffer.concat([n.methodID(t.method,t.args),n.rawEncode(t.args,a)])},n.simpleDecode=function(e,a){var t=b(e);if(!t.retargs)throw new Error("No return values in method");return n.rawDecode(t.retargs,a)},n.stringify=function(e,a){var t=[];for(var r in e){var c=e[r],n=a[r];n=/^[^\[]+\[.*\]$/.test(c)?n.map(function(e){return g(c,e)}).join(", "):g(c,n),t.push(n)}return t},n.solidityPack=function(e,a){if(e.length!==a.length)throw new Error("Number of types are not matching the values");for(var t,c,n=[],o=0;o<e.length;o++){var d=i(e[o]),b=a[o];if("bytes"===d)n.push(b);else if("string"===d)n.push(new Buffer(b,"utf8"));else if("bool"===d)n.push(new Buffer(b?"01":"00","hex"));else if("address"===d)n.push(r.setLengthLeft(b,20));else if(d.startsWith("bytes")){if((t=f(d))<1||t>32)throw new Error("Invalid bytes<N> width: "+t);n.push(r.setLengthRight(b,t))}else if(d.startsWith("uint")){if((t=f(d))%8||t<8||t>256)throw new Error("Invalid uint<N> width: "+t);if((c=s(b)).bitLength()>t)throw new Error("Supplied uint exceeds width: "+t+" vs "+c.bitLength());n.push(c.toArrayLike(Buffer,"be",t/8))}else{if(!d.startsWith("int"))throw new Error("Unsupported or invalid type: "+d);if((t=f(d))%8||t<8||t>256)throw new Error("Invalid int<N> width: "+t);if((c=s(b)).bitLength()>t)throw new Error("Supplied int exceeds width: "+t+" vs "+c.bitLength());n.push(c.toTwos(t).toArrayLike(Buffer,"be",t/8))}}return Buffer.concat(n)},n.soliditySHA3=function(e,a){return r.sha3(n.solidityPack(e,a))},n.soliditySHA256=function(e,a){return r.sha256(n.solidityPack(e,a))},n.solidityRIPEMD160=function(e,a){return r.ripemd160(n.solidityPack(e,a),!0)},n.fromSerpent=function(e){for(var a=[],t=0;t<e.length;t++){var r=e[t];if("s"===r)a.push("bytes");else if("b"===r){for(var c="bytes",n=t+1;n<e.length&&v(e[n]);)c+=e[n]-"0",n++;t=n-1,a.push(c)}else if("i"===r)a.push("int256");else{if("a"!==r)throw new Error("Unsupported or invalid type: "+r);a.push("int256[]")}}return a},n.toSerpent=function(e){for(var a=[],t=0;t<e.length;t++){var r=e[t];if("bytes"===r)a.push("s");else if(r.startsWith("bytes"))a.push("b"+f(r));else if("int256"===r)a.push("i");else{if("int256[]"!==r)throw new Error("Unsupported or invalid type: "+r);a.push("a")}}return a.join("")},e.exports=n},function(e,a,t){"use strict";var r=t(18);e.exports=function(e,a){var t,c,n=this;n.blockchain=n.stateManager.blockchain,"function"==typeof e?a=e:e&&(n.blockchain=e),n.blockchain.iterator("vm",function(e,a,i){r.series([function(r){!t||a?n.blockchain.getBlock(e.header.parentHash,function(e,a){if(c=a.header.stateRoot,!t)return n.stateManager.generateCanonicalGenesis(r);r(e)}):(c=t.header.stateRoot,r())},function(a){n.runBlock({block:e,root:c},function(r,c){r?(console.log("Invalid block error:",r),n.blockchain.delBlock(e.header.hash(),a)):(t=e,a())})}],i)},a)}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(18),n=t(3),i=n.BN,f=t(29),o=t(33).ERROR;e.exports=function(e,a){var t,d,s=this,b=s.stateManager,u={},l=e.to,p=e.value||r.from([0]),h=e.caller,m=b.cache.get(h),g=e.block,v=e.code,y=e.data,_=e.gasLimit||new i(16777215);_=new i(e.gasLimit);var w=e.gasPrice,A=new i(0),k=e.origin,x=e.compiled,E=e.depth,S=e.selfdestruct||e.suicides,T=e.delegatecall||!1,j=e.static||!1;p=new i(p),b.checkpoint(),c.series([function(e){if(T)return void e();var a=new i(m.balance).sub(p);m.balance=a,b.putAccountBalance(n.toBuffer(h),a,e)},function(e){if(l)t=b.cache.get(l),e();else{v=y,y=void 0;var a=new i(m.nonce).subn(1);d=l=n.generateAddress(h,a.toArray()),b.getAccount(d,function(a,c){(t=c).nonce=new i(t.nonce).addn(1).toArrayLike(r),e(a)})}},function(e){if(T)return void e();var a=new i(t.balance).add(p);t.balance=a,b.putAccount(n.toBuffer(l),t,e)},function(e){if(v||!t.isContract()&&!s._precompiled[l.toString("hex")])return void e();if(s._precompiled[l.toString("hex")])return x=!0,v=s._precompiled[l.toString("hex")],void e();b.getContractCode(l,function(a,t,r){if(a)return e(a);x=r,v=t,e()})},function(e){if(!v)return u.exception=1,void b.commit(e);var a={code:v,data:y,gasLimit:_,gasPrice:w,address:l,origin:k,caller:h,value:p.toArrayLike(r),block:g,depth:E,selfdestruct:S,populateCache:!1,static:j};(x?s.runJIT:s.runCode).call(s,a,function(a,c){if(t=s.stateManager.cache.get(l),u=c,d){var n=c.gasUsed;if(!c.runState.vmError){var p=new i(c.return.length*f.createDataGas.v);n=n.add(p)}n.lte(_)&&(s.allowUnlimitedContractSize||c.return.length<=24576)?c.gasUsed=n:(c.return=r.alloc(0),c.exception=0,a=c.exceptionError=o.OUT_OF_GAS,c.gasUsed=_)}A=c.gasUsed,a?(c.logs=[],b.revert(e)):b.commit(e)})},function(e){d&&!u.runState.vmError&&u.return&&""!==u.return.toString()?b.putContractCode(d,u.return,e):e()}],function(e){if(e)return a(e);a(null,{gasUsed:A,createdAddress:d,vm:u})})}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(18),n=t(3),i=n.BN,f=t(331),o=t(332);e.exports=function(e,a){var t,d,s,b=this,u=e.block,l=e.tx;u||(u=new o),new i(u.header.gasLimit).lt(new i(l.gasLimit))?a(new Error("tx has a higher gas limit than the block")):(void 0===e.populateCache&&(e.populateCache=!0),c.series([function(a){var t=new Set;t.add(l.from.toString("hex")),t.add(u.header.coinbase.toString("hex")),""!==l.to.toString("hex")&&t.add(l.to.toString("hex"));if(!1===e.populateCache)return a();b.stateManager.warmCache(t,a)},function(e){b.emit("beforeTx",l,e)},function(a){var o,p=b.stateManager.cache.get(l.from);if(!e.skipBalance&&new i(p.balance).lt(l.getUpfrontCost()))return o="sender doesn't have enough funds to send tx. The upfront cost is: "+l.getUpfrontCost().toString()+" and the sender's account only has: "+new i(p.balance).toString(),void a(new Error(o));if(!e.skipNonce&&!new i(p.nonce).eq(new i(l.nonce)))return o="the tx doesn't have the correct nonce. account has nonce of: "+new i(p.nonce).toString()+" tx has nonce of: "+new i(l.nonce).toString(),void a(new Error(o));if(p.nonce=new i(p.nonce).addn(1),s=l.getBaseFee(),(t=new i(l.gasLimit)).lt(s))return a(new Error("base fee exceeds gas limit"));t.isub(s),p.balance=new i(p.balance).sub(new i(l.gasLimit).mul(new i(l.gasPrice))),b.stateManager.cache.put(l.from,p);var h={caller:l.from,gasLimit:t,gasPrice:l.gasPrice,to:l.to,value:l.value,data:l.data,block:u,populateCache:!1};""===l.to.toString("hex")&&delete h.to;b.runCall(h,function(e,t){if(e)return a(e);(d=t).bloom=function(e){var a=new f;if(e)for(var t=0;t<e.length;t++){var r=e[t];a.add(r[0]);for(var c=r[1],n=0;n<c.length;n++)a.add(c[n])}return a}(d.vm.logs),p=b.stateManager.cache.get(l.from),d.gasUsed=d.gasUsed.add(s),d.gasRefund=d.vm.gasRefund,d.gasRefund&&(d.gasRefund.lt(d.gasUsed.divn(2))?d.gasUsed.isub(d.gasRefund):d.gasUsed.isub(d.gasUsed.divn(2)));d.amountSpent=d.gasUsed.mul(new i(l.gasPrice)),c.series([function(e){var a=new i(l.gasLimit).sub(d.gasUsed).mul(new i(l.gasPrice)).add(new i(p.balance));p.balance=a,b.stateManager.putAccountBalance(n.toBuffer(l.from),a,e)},function(e){var a=b.stateManager.cache.get(u.header.coinbase);a.balance=new i(a.balance).add(d.amountSpent),new i(a.balance).isZero()||b.stateManager.cache.put(u.header.coinbase,a);e(null)},function(e){d.vm.selfdestruct||(d.vm.selfdestruct={});Object.keys(d.vm.selfdestruct).forEach(function(e){b.stateManager.cache.del(r.from(e,"hex"))}),b.stateManager.cleanupTouchedAccounts(e)}],a)})},function(e){b.stateManager.commitContracts(e)},function(a){b.stateManager.cache.flush(function(){e.populateCache&&b.stateManager.cache.clear(),a()})},function(e){b.emit("afterTx",d,e)}],function(e){a(e,d)}))}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(18),n=t(3),i=t(331),f=t(29),o=n.rlp,d=t(44),s=n.BN,b=new s(f.minerReward.v);e.exports=function(e,a){var t,f,u=this,l=e.block,p=!!e.generate,h=!p,m=new i,g=new d,v=new s(0),y=[],_=[];function w(e){var a=new s(l.header.number).sub(new s(e.number)),t=new s(8).sub(a).mul(b.divn(8));t.ltn(0)&&(t=new s(0));var r=u.stateManager.cache.get(e.coinbase);r.balance=t.add(new s(r.balance)),u.stateManager.cache.put(e.coinbase,r)}e.root&&(u.stateManager.trie.root=e.root),this.trie.checkpoint(),c.series([function(a){u.emit("beforeBlock",e.block,a)},function(e){var a=new Set;a.add(l.header.coinbase.toString("hex")),l.transactions.forEach(function(e){a.add(e.getSenderAddress().toString("hex")),a.add(e.to.toString("hex"))}),l.uncleHeaders.forEach(function(e){a.add(e.coinbase.toString("hex"))}),u.populateCache(a,e)},function(e){var a=0;c.eachSeries(l.transactions,function(e,t){if(new s(l.header.gasLimit).lt(new s(e.gasLimit).add(v)))return void t(new Error("tx has a higher gas limit than the block"));u.runTx({tx:e,block:l,populateCache:!1},function(e,c){if(_.push(c),e)return y.push(null),void t(e);v=v.add(c.gasUsed),m.or(c.bloom),p&&(l.header.bloom=m.bitvector);var n=c.vm.logs||[],i=[c.vm.exception?1:0,v.toArrayLike(r),c.bloom.bitvector,n],f={status:i[0],gasUsed:i[1],bitvector:i[2],logs:i[3]};y.push(f),g.put(o.encode(a),o.encode(i)),a++,t()})},e)}],function(e){if(e)return u.trie.revert(),void a(e);(function(){var e=l.uncleHeaders;e.forEach(w);var a=b.divn(32).muln(e.length);(t=u.stateManager.cache.get(l.header.coinbase)).balance=new s(t.balance).add(b).add(a),u.stateManager.cache.put(l.header.coinbase,t)})(),p&&(l.header.stateRoot=u.trie.root);u.trie.commit(function(e){u.stateManager.cache.flush(function(){h&&(g.root&&g.root.toString("hex")!==l.header.receiptTrie.toString("hex")&&(e=new Error((e||"")+"invalid receiptTrie ")),m.bitvector.toString("hex")!==l.header.bloom.toString("hex")&&(e=new Error((e||"")+"invalid bloom ")),n.bufferToInt(l.header.gasUsed)!==Number(v)&&(e=new Error((e||"")+"invalid gasUsed ")),u.trie.root.toString("hex")!==l.header.stateRoot.toString("hex")&&(e=new Error((e||"")+"invalid block stateRoot "))),u.stateManager.cache.clear(),f={receipts:y,results:_,error:e},function(e){u.emit("afterBlock",f,e)}(a.bind(this,e,f))})})})}},function(e,a){function t(e){var a=new Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}t.keys=function(){return[]},t.resolve=t,e.exports=t,t.id=868},function(e,a,t){"use strict";e.exports=function(e,a){var r;"function"==typeof e.code?((r=e.code(e)).account=e.account,void 0===r.exception&&(r.exception=1),a(r.exceptionError,r)):((r=new Function("require","opts",e.code.toString())(t(868),e)).account=e.account,a(r.exceptionError,r))}},function(e,a){e.exports=__webpack_require__(258)},function(e,a,t){"use strict";var r=t(3).BN,c=new r("010000000000000000000000000000000000000000000000000000000000000000",16),n=new r("0100000000000000000000000000000000000000000000000000000000000000",16),i=new r("01000000000000000000000000000000000000000000000000000000000000",16),f=new r("010000000000000000000000000000000000000000000000000000000000",16),o=new r("0100000000000000000000000000000000000000000000000000000000",16),d=new r("01000000000000000000000000000000000000000000000000000000",16),s=new r("010000000000000000000000000000000000000000000000000000",16),b=new r("0100000000000000000000000000000000000000000000000000",16),u=new r("01000000000000000000000000000000000000000000000000",16),l=new r("010000000000000000000000000000000000000000000000",16),p=new r("0100000000000000000000000000000000000000000000",16),h=new r("01000000000000000000000000000000000000000000",16),m=new r("010000000000000000000000000000000000000000",16),g=new r("0100000000000000000000000000000000000000",16),v=new r("01000000000000000000000000000000000000",16),y=new r("010000000000000000000000000000000000",16),_=new r("0100000000000000000000000000000000",16),w=new r("01000000000000000000000000000000",16),A=new r("010000000000000000000000000000",16),k=new r("0100000000000000000000000000",16),x=new r("01000000000000000000000000",16),E=new r("010000000000000000000000",16),S=new r("0100000000000000000000",16),T=new r("01000000000000000000",16),j=new r("010000000000000000",16),C=new r("0100000000000000",16),R=new r("01000000000000",16),O=new r("010000000000",16),B=new r("0100000000",16),M=new r("01000000",16),N=new r("010000",16),I=new r("0100",16);e.exports=function(e){return-1===e.cmp(I)?0:-1===e.cmp(N)?1:-1===e.cmp(M)?2:-1===e.cmp(B)?3:-1===e.cmp(O)?4:-1===e.cmp(R)?5:-1===e.cmp(C)?6:-1===e.cmp(j)?7:-1===e.cmp(T)?8:-1===e.cmp(S)?9:-1===e.cmp(E)?10:-1===e.cmp(x)?11:-1===e.cmp(k)?12:-1===e.cmp(A)?13:-1===e.cmp(w)?14:-1===e.cmp(_)?15:-1===e.cmp(y)?16:-1===e.cmp(v)?17:-1===e.cmp(g)?18:-1===e.cmp(m)?19:-1===e.cmp(h)?20:-1===e.cmp(p)?21:-1===e.cmp(l)?22:-1===e.cmp(u)?23:-1===e.cmp(b)?24:-1===e.cmp(s)?25:-1===e.cmp(d)?26:-1===e.cmp(o)?27:-1===e.cmp(f)?28:-1===e.cmp(i)?29:-1===e.cmp(n)?30:-1===e.cmp(c)?31:32}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(18),n=t(29),i=t(3),f=i.BN,o=t(33),d=t(871),s=o.ERROR,b=o.VmError,u=new f(1).shln(160).subn(1);function l(e){return e.and(u).toArrayLike(r,"be",20)}function p(e){return i.sha3(e.code).toString("hex")+"/"+e.address.toString("hex")+":"+(e.programCounter-1)}function h(e,a){e.gasLeft.isub(a),e.gasLeft.ltn(0)&&(e.gasLeft=new f(0),m(s.OUT_OF_GAS))}function m(e){throw new b(e)}function g(e,a,t){if(!t.isZero()){var r=a.add(t).divCeil(new f(32));if(!r.lte(e.memoryWordCount)){var c=r,i=new f(n.memoryGas.v),o=new f(n.quadCoeffDiv.v),d=c.mul(i).add(c.mul(c).div(o));d.gt(e.highestMemCost)&&(h(e,d.sub(e.highestMemCost)),e.highestMemCost=d),e.memoryWordCount=r}}}function v(e,a,t){if(g(e,a,t),t.isZero())return r.alloc(0);a=a.toNumber(),t=t.toNumber();for(var c=e.memory.slice(a,a+t),n=c.length;n<t;n++)c[n]=0;return r.from(c)}function y(e,a,t,r,c,n){if(!1!==n&&g(e,a,c),!c.isZero()){a=a.toNumber(),c=c.toNumber();var i=0;r.addn(c).gtn(t.length)?r.gten(t.length)?i=0:(r=r.toNumber(),i=t.length-r):(r=r.toNumber(),i=t.length);var f=0;if(i>0)for(i=i>c?c:i;f<i;f++)e.memory[a+f]=t[r+f];if(t.length>0&&f<c)for(;f<c;f++)e.memory[a+f]=0}}function _(e,a){return-1!==e.validJumps.indexOf(a)}function w(e,a,t){g(e,t.outOffset,t.outLength),a.gasLimit||(a.gasLimit=new f(e.gasLeft))}function A(e,a){var t=e.gasLeft.sub(e.gasLeft.divn(64));a.gasLimit.gt(t)&&(a.gasLimit=t)}function k(e,a,t,c){a.caller=a.caller||e.address,a.origin=e.origin,a.gasPrice=e.gasPrice,a.block=e.block,a.populateCache=!1,a.static=a.static||!1,a.selfdestruct=e.selfdestruct,a.depth=e.depth+1,e.lastReturned=r.alloc(0),e.depth>=n.stackLimit.v||!0!==a.delegatecall&&new f(e.contract.balance).lt(a.value)?c(null,new f(0)):(a.to||(e.contract.nonce=new f(e.contract.nonce).addn(1)),e.stateManager.cache.put(e.address,e.contract),e._vm.runCall(a,function(a,r){if(a)return c(a);r.vm.logs&&(e.logs=e.logs.concat(r.vm.logs));r.vm.gasRefund&&(e.gasRefund=e.gasRefund.add(r.vm.gasRefund));if(e.gasLeft.isub(r.gasUsed),r.vm.return&&(!r.vm.exceptionError||r.vm.exceptionError.error===s.REVERT))switch(y(e,t.outOffset,r.vm.return,new f(0),t.outLength,!1),r.vm.exceptionError&&r.vm.exceptionError.error===s.REVERT&&"CREATE"===e.opName&&(e.lastReturned=r.vm.return),e.opName){case"CALL":case"CALLCODE":case"DELEGATECALL":case"STATICCALL":e.lastReturned=r.vm.return}r.vm.exceptionError?(r.vm.createdAddress&&(e.contract.nonce=new f(e.contract.nonce).subn(1)),c(null,new f(r.vm.exception))):e.stateManager.getAccount(e.address,function(a,t){if(a)return c(a);e.contract=t,r.createdAddress?c(null,new f(r.createdAddress)):c(null,new f(r.vm.exception))})}))}f.prototype.divCeil=function(e){var a=this.divmod(e);return a.mod.isZero()?a.div:0!==a.div.negative?a.div.isubn(1):a.div.iaddn(1)},e.exports={STOP:function(e){e.stopped=!0},ADD:function(e,a,t){return e.add(a).mod(i.TWO_POW256)},MUL:function(e,a,t){return e.mul(a).mod(i.TWO_POW256)},SUB:function(e,a,t){return e.sub(a).toTwos(256)},DIV:function(e,a,t){return a.isZero()?new f(a):e.div(a)},SDIV:function(e,a,t){return a.isZero()?new f(a):(e=e.fromTwos(256),a=a.fromTwos(256),e.div(a).toTwos(256))},MOD:function(e,a,t){return a.isZero()?new f(a):e.mod(a)},SMOD:function(e,a,t){if(a.isZero())return new f(a);e=e.fromTwos(256),a=a.fromTwos(256);var r=e.abs().mod(a.abs());return e.isNeg()&&(r=r.ineg()),r.toTwos(256)},ADDMOD:function(e,a,t,r){return t.isZero()?new f(t):e.add(a).mod(t)},MULMOD:function(e,a,t,r){return t.isZero()?new f(t):e.mul(a).mod(t)},EXP:function(e,a,t){var r=f.red(i.TWO_POW256);if(e=e.toRed(r),a.isZero())return new f(1);var c=1+d(a);return h(t,new f(c).muln(n.expByteGas.v)),e.redPow(a)},SIGNEXTEND:function(e,a,t){a=a.toArrayLike(r,"be",32);var c=!1;if(e.lten(31)){128&a[31-(e=e.toNumber())]&&(c=!0);for(var n=30-e;n>=0;n--)a[n]=c?255:0}return new f(a)},LT:function(e,a,t){return new f(e.lt(a)?1:0)},GT:function(e,a,t){return new f(e.gt(a)?1:0)},SLT:function(e,a,t){return new f(e.fromTwos(256).lt(a.fromTwos(256))?1:0)},SGT:function(e,a,t){return new f(e.fromTwos(256).gt(a.fromTwos(256))?1:0)},EQ:function(e,a,t){return new f(e.eq(a)?1:0)},ISZERO:function(e,a){return new f(e.isZero()?1:0)},AND:function(e,a,t){return e.and(a)},OR:function(e,a,t){return e.or(a)},XOR:function(e,a,t){return e.xor(a)},NOT:function(e,a){return e.notn(256)},BYTE:function(e,a,t){return e.gten(32)?new f(0):new f(a.shrn(8*(31-e.toNumber())).andln(255))},SHA3:function(e,a,t){var r=v(t,e,a);return h(t,new f(n.sha3WordGas.v).imul(a.divCeil(new f(32)))),new f(i.sha3(r))},ADDRESS:function(e){return new f(e.address)},BALANCE:function(e,a,t){var r=a.stateManager;(e=l(e)).toString("hex")!==a.address.toString("hex")?r.getAccountBalance(e,function(e,a){if(e)return t(e);t(null,new f(a))}):t(null,new f(a.contract.balance))},ORIGIN:function(e){return new f(e.origin)},CALLER:function(e){return new f(e.caller)},CALLVALUE:function(e){return new f(e.callValue)},CALLDATALOAD:function(e,a){if(e.gtn(a.callData.length))return new f(0);e=e.toNumber();var t=a.callData.slice(e,e+32);return t=t.length?t:r.from([0]),new f(i.setLengthRight(t,32))},CALLDATASIZE:function(e){return 1===e.callData.length&&0===e.callData[0]?new f(0):new f(e.callData.length)},CALLDATACOPY:function(e,a,t,r){y(r,e,r.callData,a,t),h(r,new f(n.copyGas.v).imul(t.divCeil(new f(32))))},CODESIZE:function(e){return new f(e.code.length)},CODECOPY:function(e,a,t,r){y(r,e,r.code,a,t),h(r,new f(n.copyGas.v).imul(t.divCeil(new f(32))))},EXTCODESIZE:function(e,a,t){var r=a.stateManager;e=l(e),r.getContractCode(e,function(e,a){if(e)return t(e);t(null,new f(a.length))})},EXTCODECOPY:function(e,a,t,r,c,i){var o=c.stateManager;e=l(e),g(c,a,r),h(c,new f(n.copyGas.v).imul(r.divCeil(new f(32)))),o.getContractCode(e,function(e,n){if(e)return i(e);y(c,a,n,t,r,!1),i(null)})},RETURNDATASIZE:function(e){return new f(e.lastReturned.length)},RETURNDATACOPY:function(e,a,t,r){a.add(t).gtn(r.lastReturned.length)&&m(s.OUT_OF_GAS),y(r,e,i.toBuffer(r.lastReturned),a,t,!1),h(r,new f(n.copyGas.v).mul(t.divCeil(new f(32))))},GASPRICE:function(e){return new f(e.gasPrice)},BLOCKHASH:function(e,a,t){var c=a.stateManager,n=new f(a.block.header.number).sub(e);n.gtn(256)||n.lten(0)?t(null,new f(0)):c.getBlockHash(e.toArrayLike(r,"be",32),function(e,a){if(e)return t(e);t(null,new f(a))})},COINBASE:function(e){return new f(e.block.header.coinbase)},TIMESTAMP:function(e){return new f(e.block.header.timestamp)},NUMBER:function(e){return new f(e.block.header.number)},DIFFICULTY:function(e){return new f(e.block.header.difficulty)},GASLIMIT:function(e){return new f(e.block.header.gasLimit)},POP:function(){},MLOAD:function(e,a){return new f(v(a,e,new f(32)))},MSTORE:function(e,a,t){y(t,e,a=a.toArrayLike(r,"be",32),new f(0),new f(32))},MSTORE8:function(e,a,t){y(t,e,a=r.from([a.andln(255)]),new f(0),new f(1))},SLOAD:function(e,a,t){var c=a.stateManager;e=e.toArrayLike(r,"be",32),c.getContractStorage(a.address,e,function(e,a){if(e)return t(e);a=a.length?new f(a):new f(0),t(null,a)})},SSTORE:function(e,a,t,c){t.static&&m(s.STATIC_STATE_CHANGE);var i,o=t.stateManager,d=t.address;e=e.toArrayLike(r,"be",32),i=a.isZero()?r.from([]):a.toArrayLike(r,"be"),o.getContractStorage(t.address,e,function(a,r){if(a)return c(a);try{0!==i.length||r.length?0===i.length&&r.length?(h(t,new f(n.sstoreResetGas.v)),t.gasRefund.iaddn(n.sstoreRefundGas.v)):0===i.length||r.length?0!==i.length&&r.length&&h(t,new f(n.sstoreResetGas.v)):h(t,new f(n.sstoreSetGas.v)):h(t,new f(n.sstoreResetGas.v))}catch(e){return void c(e.error)}o.putContractStorage(d,e,i,function(e){if(e)return c(e);t.contract=o.cache.get(d),c(null)})})},JUMP:function(e,a){e.gtn(a.code.length)&&m(s.INVALID_JUMP+" at "+p(a)),_(a,e=e.toNumber())||m(s.INVALID_JUMP+" at "+p(a)),a.programCounter=e},JUMPI:function(e,a,t){a.isZero()||(e.gtn(t.code.length)&&m(s.INVALID_JUMP+" at "+p(t)),_(t,e=e.toNumber())||m(s.INVALID_JUMP+" at "+p(t)),t.programCounter=e)},PC:function(e){return new f(e.programCounter-1)},MSIZE:function(e){return e.memoryWordCount.muln(32)},GAS:function(e){return new f(e.gasLeft)},JUMPDEST:function(e){},PUSH:function(e){var a=e.opCode-95,t=new f(e.code.slice(e.programCounter,e.programCounter+a).toString("hex"),16);return e.programCounter+=a,t},DUP:function(e){var a=e.opCode-127;return a>e.stack.length&&m(s.STACK_UNDERFLOW),new f(e.stack[e.stack.length-a])},SWAP:function(e){var a=e.opCode-143,t=e.stack.length-a-1;t<0&&m(s.STACK_UNDERFLOW);var r=e.stack.length-1,c=e.stack[r];e.stack[r]=e.stack[t],e.stack[t]=c},LOG:function(e,a){var t=Array.prototype.slice.call(arguments,0),c=t.pop();c.static&&m(s.STATIC_STATE_CHANGE);var i=t.slice(2);i=i.map(function(e){return e.toArrayLike(r,"be",32)});var o=c.opCode-160,d=v(c,e,a);h(c,new f(n.logTopicGas.v).imuln(o).iadd(a.muln(n.logDataGas.v)));var b=[c.address];b.push(i),b.push(d),c.logs.push(b)},CREATE:function(e,a,t,r,c){r.static&&m(s.STATIC_STATE_CHANGE);var n={value:e,data:v(r,a,t)},i={inOffset:a,inLength:t,outOffset:new f(0),outLength:new f(0)};w(r,n,i),A(r,n),k(r,n,i,c)},CALL:function(e,a,t,r,c,i,o,d,b){var u=d.stateManager;a=l(a),d.static&&!t.isZero()&&m(s.STATIC_STATE_CHANGE);var p=v(d,r,c),g={gasLimit:e,value:t,to:a,data:p,static:d.static},y={inOffset:r,inLength:c,outOffset:i,outLength:o};t.isZero()||h(d,new f(n.callValueTransferGas.v)),u.exists(a,function(e,r){e?b(e):u.accountIsEmpty(a,function(e,a){if(e)b(e);else{if((!r||a)&&!t.isZero())try{h(d,new f(n.callNewAccountGas.v))}catch(e){return void b(e.error)}try{w(d,g,y),A(d,g)}catch(e){return void b(e.error)}t.isZero()||(d.gasLeft.iaddn(n.callStipend.v),g.gasLimit.iaddn(n.callStipend.v)),k(d,g,y,b)}})})},CALLCODE:function(e,a,t,r,c,i,o,d,s){var b=d.stateManager;a=l(a);var u={gasLimit:e,value:t,data:v(d,r,c),to:d.address,static:d.static},p={inOffset:r,inLength:c,outOffset:i,outLength:o};t.isZero()||h(d,new f(n.callValueTransferGas.v)),w(d,u,p),A(d,u),t.isZero()||(d.gasLeft.iaddn(n.callStipend.v),u.gasLimit.iaddn(n.callStipend.v)),b.getAccount(a,function(e,t){if(e)return s(e);d._precompiled[a.toString("hex")]?(u.compiled=!0,u.code=d._precompiled[a.toString("hex")],k(d,u,p,s)):b.getContractCode(a,function(e,a,t){if(e)return s(e);u.compiled=t||!1,u.code=a,k(d,u,p,s)})})},DELEGATECALL:function(e,a,t,r,c,n,i,f){var o=i.stateManager,d=i.callValue;a=l(a);var s={gasLimit:e,value:d,data:v(i,t,r),to:i.address,caller:i.caller,delegatecall:!0,static:i.static},b={inOffset:t,inLength:r,outOffset:c,outLength:n};w(i,s,b),A(i,s),o.getAccount(a,function(e,t){if(e)return f(e);i._precompiled[a.toString("hex")]?(s.compiled=!0,s.code=i._precompiled[a.toString("hex")],k(i,s,b,f)):o.getContractCode(a,function(e,a,t){if(e)return f(e);s.compiled=t||!1,s.code=a,k(i,s,b,f)})})},STATICCALL:function(e,a,t,r,c,n,i,o){var d=i.stateManager,s=new f(0);a=l(a);var b=v(i,t,r),u={gasLimit:e,value:s,to:a,data:b,static:!0},p={inOffset:t,inLength:r,outOffset:c,outLength:n};d.exists(a,function(e,t){e?o(e):d.accountIsEmpty(a,function(e,a){if(e)o(e);else{try{w(i,u,p),A(i,u)}catch(e){return void o(e.error)}k(i,u,p,o)}})})},RETURN:function(e,a,t){t.returnValue=v(t,e,a)},REVERT:function(e,a,t){t.stopped=!0,t.returnValue=v(t,e,a),m(s.REVERT)},SELFDESTRUCT:function(e,a,t){a.static&&m(s.STATIC_STATE_CHANGE);var r=a.stateManager,i=a.contract,o=a.address;e=l(e),r.getAccount(e,function(d,s){d?t(d):r.accountIsEmpty(e,function(d,b){if(d)t(d);else{if(new f(i.balance).gtn(0)&&(!s.exists||b))try{h(a,new f(n.callNewAccountGas.v))}catch(e){return void t(e.error)}a.selfdestruct[o.toString("hex")]||(a.gasRefund=a.gasRefund.addn(n.suicideRefundGas.v)),a.selfdestruct[o.toString("hex")]=e,a.stopped=!0;var u=new f(i.balance).add(new f(s.balance));c.series([r.putAccountBalance.bind(r,e,u),r.putAccountBalance.bind(r,o,new f(0))],function(e){t(e)})}})})}}},function(e,a,t){"use strict";var r={0:["STOP",0,0,0,!1],1:["ADD",3,2,1,!1],2:["MUL",5,2,1,!1],3:["SUB",3,2,1,!1],4:["DIV",5,2,1,!1],5:["SDIV",5,2,1,!1],6:["MOD",5,2,1,!1],7:["SMOD",5,2,1,!1],8:["ADDMOD",8,3,1,!1],9:["MULMOD",8,3,1,!1],10:["EXP",10,2,1,!1],11:["SIGNEXTEND",5,2,1,!1],16:["LT",3,2,1,!1],17:["GT",3,2,1,!1],18:["SLT",3,2,1,!1],19:["SGT",3,2,1,!1],20:["EQ",3,2,1,!1],21:["ISZERO",3,1,1,!1],22:["AND",3,2,1,!1],23:["OR",3,2,1,!1],24:["XOR",3,2,1,!1],25:["NOT",3,1,1,!1],26:["BYTE",3,2,1,!1],32:["SHA3",30,2,1,!1],48:["ADDRESS",2,0,1,!0],49:["BALANCE",400,1,1,!0,!0],50:["ORIGIN",2,0,1,!0],51:["CALLER",2,0,1,!0],52:["CALLVALUE",2,0,1,!0],53:["CALLDATALOAD",3,1,1,!0],54:["CALLDATASIZE",2,0,1,!0],55:["CALLDATACOPY",3,3,0,!0],56:["CODESIZE",2,0,1,!1],57:["CODECOPY",3,3,0,!1],58:["GASPRICE",2,0,1,!1],59:["EXTCODESIZE",700,1,1,!0,!0],60:["EXTCODECOPY",700,4,0,!0,!0],61:["RETURNDATASIZE",2,0,1,!0],62:["RETURNDATACOPY",3,3,0,!0],64:["BLOCKHASH",20,1,1,!0,!0],65:["COINBASE",2,0,1,!0],66:["TIMESTAMP",2,0,1,!0],67:["NUMBER",2,0,1,!0],68:["DIFFICULTY",2,0,1,!0],69:["GASLIMIT",2,0,1,!0],80:["POP",2,1,0,!1],81:["MLOAD",3,1,1,!1],82:["MSTORE",3,2,0,!1],83:["MSTORE8",3,2,0,!1],84:["SLOAD",200,1,1,!0,!0],85:["SSTORE",0,2,0,!0,!0],86:["JUMP",8,1,0,!1],87:["JUMPI",10,2,0,!1],88:["PC",2,0,1,!1],89:["MSIZE",2,0,1,!1],90:["GAS",2,0,1,!1],91:["JUMPDEST",1,0,0,!1],96:["PUSH",3,0,1,!1],97:["PUSH",3,0,1,!1],98:["PUSH",3,0,1,!1],99:["PUSH",3,0,1,!1],100:["PUSH",3,0,1,!1],101:["PUSH",3,0,1,!1],102:["PUSH",3,0,1,!1],103:["PUSH",3,0,1,!1],104:["PUSH",3,0,1,!1],105:["PUSH",3,0,1,!1],106:["PUSH",3,0,1,!1],107:["PUSH",3,0,1,!1],108:["PUSH",3,0,1,!1],109:["PUSH",3,0,1,!1],110:["PUSH",3,0,1,!1],111:["PUSH",3,0,1,!1],112:["PUSH",3,0,1,!1],113:["PUSH",3,0,1,!1],114:["PUSH",3,0,1,!1],115:["PUSH",3,0,1,!1],116:["PUSH",3,0,1,!1],117:["PUSH",3,0,1,!1],118:["PUSH",3,0,1,!1],119:["PUSH",3,0,1,!1],120:["PUSH",3,0,1,!1],121:["PUSH",3,0,1,!1],122:["PUSH",3,0,1,!1],123:["PUSH",3,0,1,!1],124:["PUSH",3,0,1,!1],125:["PUSH",3,0,1,!1],126:["PUSH",3,0,1,!1],127:["PUSH",3,0,1,!1],128:["DUP",3,0,1,!1],129:["DUP",3,0,1,!1],130:["DUP",3,0,1,!1],131:["DUP",3,0,1,!1],132:["DUP",3,0,1,!1],133:["DUP",3,0,1,!1],134:["DUP",3,0,1,!1],135:["DUP",3,0,1,!1],136:["DUP",3,0,1,!1],137:["DUP",3,0,1,!1],138:["DUP",3,0,1,!1],139:["DUP",3,0,1,!1],140:["DUP",3,0,1,!1],141:["DUP",3,0,1,!1],142:["DUP",3,0,1,!1],143:["DUP",3,0,1,!1],144:["SWAP",3,0,0,!1],145:["SWAP",3,0,0,!1],146:["SWAP",3,0,0,!1],147:["SWAP",3,0,0,!1],148:["SWAP",3,0,0,!1],149:["SWAP",3,0,0,!1],150:["SWAP",3,0,0,!1],151:["SWAP",3,0,0,!1],152:["SWAP",3,0,0,!1],153:["SWAP",3,0,0,!1],154:["SWAP",3,0,0,!1],155:["SWAP",3,0,0,!1],156:["SWAP",3,0,0,!1],157:["SWAP",3,0,0,!1],158:["SWAP",3,0,0,!1],159:["SWAP",3,0,0,!1],160:["LOG",375,2,0,!1],161:["LOG",375,3,0,!1],162:["LOG",375,4,0,!1],163:["LOG",375,5,0,!1],164:["LOG",375,6,0,!1],240:["CREATE",32e3,3,1,!0,!0],241:["CALL",700,7,1,!0,!0],242:["CALLCODE",700,7,1,!0,!0],243:["RETURN",0,2,0,!1],244:["DELEGATECALL",700,6,1,!0,!0],250:["STATICCALL",700,6,1,!0,!0],253:["REVERT",0,2,0,!1],254:["INVALID",0,0,0,!1],255:["SELFDESTRUCT",5e3,1,0,!1,!0]};e.exports=function(e,a){var t=r[e]?r[e]:["INVALID",0,0,0,!1,!1],c=t[0];return a&&("LOG"===c&&(c+=e-160),"PUSH"===c&&(c+=e-95),"DUP"===c&&(c+=e-127),"SWAP"===c&&(c+=e-143)),{name:c,opcode:e,fee:t[1],in:t[2],out:t[3],dynamic:t[4],async:t[5]}}},function(e,a,t){const r=t(3),c=t(173),n=r.BN;var i=e.exports=function(e){var a=[{name:"parentHash",length:32,default:r.zeros(32)},{name:"uncleHash",default:r.SHA3_RLP_ARRAY},{name:"coinbase",length:20,default:r.zeros(20)},{name:"stateRoot",length:32,default:r.zeros(32)},{name:"transactionsTrie",length:32,default:r.SHA3_RLP},{name:"receiptTrie",length:32,default:r.SHA3_RLP},{name:"bloom",default:r.zeros(256)},{name:"difficulty",default:new Buffer([])},{name:"number",default:r.intToBuffer(c.homeSteadForkNumber.v)},{name:"gasLimit",default:new Buffer("ffffffffffffff","hex")},{name:"gasUsed",empty:!0,default:new Buffer([])},{name:"timestamp",default:new Buffer([])},{name:"extraData",allowZero:!0,empty:!0,default:new Buffer([])},{name:"mixHash",default:r.zeros(32)},{name:"nonce",default:new Buffer([])}];r.defineProperties(this,a,e)};i.prototype.canonicalDifficulty=function(e){const a=new n(this.timestamp),t=new n(e.header.timestamp),i=new n(e.header.difficulty),f=new n(c.minimumDifficulty.v);var o,d=i.div(new n(c.difficultyBoundDivisor.v)),s=e.header.uncleHash.equals(r.SHA3_RLP_ARRAY)?1:2,b=a.sub(t).idivn(9).ineg().iaddn(s),u=new n(-99);1===u.cmp(b)&&(b=u),o=i.add(d.mul(b));var l=new n(this.number).isubn(3e6);l.ltn(0)&&(l=new n(0));var p=l.idivn(1e5).isubn(2);return p.isNeg()||o.iadd(new n(2).pow(p)),-1===o.cmp(f)&&(o=f),o},i.prototype.validateDifficulty=function(e){return 0===this.canonicalDifficulty(e).cmp(new n(this.difficulty))},i.prototype.validateGasLimit=function(e){const a=new n(e.header.gasLimit),t=new n(this.gasLimit),r=a.div(new n(c.gasLimitBoundDivisor.v)),i=a.add(r),f=a.sub(r);return t.lt(i)&&t.gt(f)&&t.gte(c.minGasLimit.v)},i.prototype.validate=function(e,a,t){var i=this;if(2===arguments.length&&(t=a,a=!1),this.isGenesis())return t();e.getBlock(i.parentHash,function(e,f){if(e)return t("could not find parent block");if(i.parentBlock=f,0!==new n(i.number).cmp(new n(f.header.number).iaddn(1)))return t("invalid number");if(a){var o=a.sub(new n(f.header.number));if(-1!==o.cmpn(8)||1!==o.cmpn(1))return t("uncle block has a parent that is too old or to young")}return i.validateDifficulty(f)?i.validateGasLimit(f)?r.bufferToInt(f.header.number)+1!==r.bufferToInt(i.number)?t("invalid heigth"):r.bufferToInt(i.timestamp)<=r.bufferToInt(f.header.timestamp)?t("invalid timestamp"):i.extraData.length>c.maximumExtraDataSize.v?t("invalid amount of extra data"):void t():t("invalid gas limit"):t("invalid Difficulty")})},i.prototype.hash=function(){return r.rlphash(this.raw)},i.prototype.isGenesis=function(){return""===this.number.toString("hex")}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(18),n=t(3),i=t(332),f=t(873),o=t(872),d=t(33),s=t(870).setImmediate,b=n.BN,u=d.ERROR,l=d.VmError;e.exports=function(e,a){var t=this,d=t.stateManager,p=e.block||new i,h={stateManager:d,returnValue:!1,stopped:!1,vmError:!1,programCounter:0,opCode:void 0,opName:void 0,gasLeft:new b(e.gasLimit),gasLimit:new b(e.gasLimit),gasPrice:e.gasPrice,memory:[],memoryWordCount:new b(0),stack:[],lastReturned:[],logs:[],validJumps:[],gasRefund:new b(0),highestMemCost:new b(0),depth:e.depth||0,selfdestruct:e.selfdestruct||e.suicides||{},block:p,callValue:e.value||new b(0),address:e.address||n.zeros(32),caller:e.caller||n.zeros(32),origin:e.origin||e.caller||n.zeros(32),callData:e.data||r.from([0]),code:e.code,populateCache:void 0===e.populateCache||e.populateCache,static:e.static||!1};function m(){var e=h.programCounter<h.code.length;return!h.stopped&&e&&!h.vmError&&!h.returnValue}function g(e){var a=h.code[h.programCounter],r=f(a),n=r.name,i=o[n];h.opName=n,h.opCode=a,c.series([function(e){var r={pc:h.programCounter,gasLeft:h.gasLeft,opcode:f(a,!0),stack:h.stack,depth:h.depth,address:h.address,account:h.contract,cache:h.stateManager.cache,memory:h.memory};t.emit("step",r,e)},function(e){if("INVALID"===n)return e(new l(u.INVALID_OPCODE));if(h.stack.length<r.in)return e(new l(u.STACK_UNDERFLOW));if(h.stack.length-r.in+r.out>1024)return e(new l(u.STACK_OVERFLOW));var a=new b(r.fee);if(h.gasLeft=h.gasLeft.sub(a),h.gasLeft.ltn(0))return h.gasLeft=new b(0),void e(new l(u.OUT_OF_GAS));h.programCounter++;var t=r.in,c=r.out,f=t?h.stack.splice(-t):[];f.reverse(),f.push(h),r.async&&f.push(function(a,t){if(a)return e(a);if(void 0!==t){if(1!==c)return e(new l(u.INTERNAL_ERROR));h.stack.push(t)}else if(0!==c)return e(new l(u.INTERNAL_ERROR));e()});try{var o=i.apply(null,f)}catch(a){return void e(a)}if(void 0!==o){if(1!==c)return e(l(u.INTERNAL_ERROR));h.stack.push(o)}else if(!r.async&&0!==c)return e(l(u.INTERNAL_ERROR));r.async||e()}],function(a){s(e.bind(null,a))})}function v(e){e&&(h.logs=[],d.revertContracts(),h.vmError=!0);var c={runState:h,selfdestruct:h.selfdestruct,gasRefund:h.gasRefund,exception:e?0:1,exceptionError:e,logs:h.logs,gas:h.gasLeft,return:h.returnValue?h.returnValue:r.alloc(0)};c.exceptionError&&(delete c.gasRefund,delete c.selfdestruct),e&&e.error!==u.REVERT?c.gasUsed=h.gasLimit:c.gasUsed=h.gasLimit.sub(h.gasLeft),h.populateCache?t.stateManager.cache.flush(function(){t.stateManager.cache.clear(),a(e,c)}):a(e,c)}h._precompiled=t._precompiled,h._vm=t,function(e){for(var a=0;a<e.code.length;a++){var t=f(e.code[a]).name;"PUSH"===t&&(a+=e.code[a]-95),"JUMPDEST"===t&&e.validJumps.push(a)}}(h),function(e){d.getAccount(h.address,function(a,t){if(a)return e(a);h.contract=t,e()})}(function(){c.whilst(m,g,v)})}},function(e,a,t){"use strict";var r=t(3).BN,c=t(33).ERROR,n=t(29),i=t(11),f=t(172).cwrap("ec_pairing","string",["string"]);e.exports=function(e){i(e.data);var a={},t=e.data.toString("hex"),o=Buffer.from(t,"hex"),d=Math.floor(o.length/192),s=n.ecPairingGas.v+d*n.ecPairingWordGas.v;if(a.gasUsed=new r(s),e.gasLimit.ltn(s))return a.gasUsed=e.gasLimit,a.exceptionError=c.OUT_OF_GAS,a.exception=0,a;var b=f(t);return 64!==b.length?(a.return=Buffer.alloc(0),a.gasUsed=e.gasLimit,a.exceptionError=c.OUT_OF_GAS,a.exception=0):(a.return=Buffer.from(b,"hex"),a.exception=1),a}},function(e,a,t){"use strict";var r=t(3),c=t(33).ERROR,n=r.BN,i=t(29),f=t(11),o=t(172).cwrap("ec_mul","string",["string"]);e.exports=function(e){f(e.data);var a={},t=e.data.toString("hex");if(a.gasUsed=new n(i.ecMulGas.v),e.gasLimit.lt(a.gasUsed))return a.return=Buffer.alloc(0),a.exception=0,a.gasUsed=new n(e.gasLimit),a.exceptionError=c.OUT_OF_GAS,a;var r=o(t);return 128!==r.length?(a.return=Buffer.alloc(0),a.exception=0):(a.return=Buffer.from(r,"hex"),a.exception=1),a}},function(module,exports,__webpack_require__){var Module;Module||(Module=(void 0!==Module?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1,nodeFS,nodePath;if(Module.ENVIRONMENT)if("WEB"===Module.ENVIRONMENT)ENVIRONMENT_IS_WEB=!0;else if("WORKER"===Module.ENVIRONMENT)ENVIRONMENT_IS_WORKER=!0;else if("NODE"===Module.ENVIRONMENT)ENVIRONMENT_IS_NODE=!0;else{if("SHELL"!==Module.ENVIRONMENT)throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");ENVIRONMENT_IS_SHELL=!0}else ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE)Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn),Module.read=function(e,a){var t;return(t=tryParseAsDataURI(e))||(nodeFS||(nodeFS=__webpack_require__(15)),nodePath||(nodePath=__webpack_require__(2)),e=nodePath.normalize(e),t=nodeFS.readFileSync(e)),a?t:t.toString()},Module.readBinary=function(e){var a=Module.read(e,!0);return a.buffer||(a=new Uint8Array(a)),assert(a.buffer),a},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),module.exports=Module,Module.inspect=function(){return"[Emscripten Module object]"};else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=function(e){var a=tryParseAsDataURI(e);return a?intArrayToString(a):read(e)}:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){var a;return(a=tryParseAsDataURI(e))?a:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(assert("object"==typeof(a=read(e,"binary"))),a)},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:void 0!==arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(e,a){quit(e)});else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw new Error("Unknown runtime environment. Where are we?");if(Module.read=function(e){try{var a=new XMLHttpRequest;return a.open("GET",e,!1),a.send(null),a.responseText}catch(a){var t=tryParseAsDataURI(e);if(t)return intArrayToString(t);throw a}},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){try{var a=new XMLHttpRequest;return a.open("GET",e,!1),a.responseType="arraybuffer",a.send(null),new Uint8Array(a.response)}catch(e){var t=tryParseAsDataURI(f);if(t)return t;throw e}}),Module.readAsync=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 c=tryParseAsDataURI(e);c?a(c.buffer):t()}},r.onerror=t,r.send(null)},void 0!==arguments&&(Module.arguments=arguments),"undefined"!=typeof console)Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(e){dump(e)}:function(e){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),void 0===Module.setWindowTitle&&(Module.setWindowTitle=function(e){document.title=e})}function globalEval(e){eval.call(null,e)}for(var key in!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(e,a){throw a}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[],moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(e){return tempRet0=e,e},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(e){STACKTOP=e},getNativeTypeSize:function(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===e[e.length-1])return Runtime.QUANTUM_SIZE;if("i"===e[0]){var a=parseInt(e.substr(1));return assert(a%8==0),a/8}return 0}},getNativeFieldSize:function(e){return Math.max(Runtime.getNativeTypeSize(e),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(e,a){return"double"===a||"i64"===a?7&e&&(assert(4==(7&e)),e+=4):assert(0==(3&e)),e},getAlignSize:function(e,a,t){return t||"i64"!=e&&"double"!=e?e?Math.min(a||(e?Runtime.getNativeFieldSize(e):0),Runtime.QUANTUM_SIZE):Math.min(a,8):8},dynCall:function(e,a,t){return t&&t.length?Module["dynCall_"+e].apply(null,[a].concat(t)):Module["dynCall_"+e].call(null,a)},functionPointers:[],addFunction:function(e){for(var a=0;a<Runtime.functionPointers.length;a++)if(!Runtime.functionPointers[a])return Runtime.functionPointers[a]=e,2*(1+a);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},removeFunction:function(e){Runtime.functionPointers[(e-2)/2]=null},warnOnce:function(e){Runtime.warnOnce.shown||(Runtime.warnOnce.shown={}),Runtime.warnOnce.shown[e]||(Runtime.warnOnce.shown[e]=1,Module.printErr(e))},funcWrappers:{},getFuncWrapper:function(e,a){if(e){assert(a),Runtime.funcWrappers[a]||(Runtime.funcWrappers[a]={});var t=Runtime.funcWrappers[a];return t[e]||(1===a.length?t[e]=function(){return Runtime.dynCall(a,e)}:2===a.length?t[e]=function(t){return Runtime.dynCall(a,e,[t])}:t[e]=function(){return Runtime.dynCall(a,e,Array.prototype.slice.call(arguments))}),t[e]}},getCompilerSetting:function(e){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},stackAlloc:function(e){var a=STACKTOP;return STACKTOP=(STACKTOP=STACKTOP+e|0)+15&-16,a},staticAlloc:function(e){var a=STATICTOP;return STATICTOP=(STATICTOP=STATICTOP+e|0)+15&-16,a},dynamicAlloc:function(e){var a=HEAP32[DYNAMICTOP_PTR>>2],t=-16&(a+e+15|0);if((HEAP32[DYNAMICTOP_PTR>>2]=t,t>=TOTAL_MEMORY)&&!enlargeMemory())return HEAP32[DYNAMICTOP_PTR>>2]=a,0;return a},alignMemory:function(e,a){return e=Math.ceil(e/(a||16))*(a||16)},makeBigInt:function(e,a,t){return t?+(e>>>0)+4294967296*+(a>>>0):+(e>>>0)+4294967296*+(0|a)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0,cwrap,ccall;function assert(e,a){e||abort("Assertion failed: "+a)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,a,t,r){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":HEAP8[e>>0]=a;break;case"i16":HEAP16[e>>1]=a;break;case"i32":HEAP32[e>>2]=a;break;case"i64":tempI64=[a>>>0,(tempDouble=a,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=a;break;case"double":HEAPF64[e>>3]=a;break;default:abort("invalid type for setValue: "+t)}}function getValue(e,a,t){switch("*"===(a=a||"i8").charAt(a.length-1)&&(a="i32"),a){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for getValue: "+a)}return null}!function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var a=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,a),a},stringToC:function(e){var a=0;if(null!==e&&void 0!==e&&0!==e){var t=1+(e.length<<2);stringToUTF8(e,a=Runtime.stackAlloc(t),t)}return a}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,a,t,r,c){var n=getCFunc(e),i=[],f=0;if(r)for(var o=0;o<r.length;o++){var d=toC[t[o]];d?(0===f&&(f=Runtime.stackSave()),i[o]=d(r[o])):i[o]=r[o]}var s=n.apply(null,i);if("string"===a&&(s=Pointer_stringify(s)),0!==f){if(c&&c.async)return void EmterpreterAsync.asyncFinalizers.push(function(){Runtime.stackRestore(f)});Runtime.stackRestore(f)}return s};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(e){var a=e.toString().match(sourceRegex).slice(1);return{arguments:a[0],body:a[1],returnValue:a[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource)for(var e in JSsource={},JSfuncs)JSfuncs.hasOwnProperty(e)&&(JSsource[e]=parseJSFunc(JSfuncs[e]))}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every(function(e){return"number"===e}),numericRet="string"!==returnType;if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map(function(e,a){return"$"+a}),funcstr="(function("+argNames.join(",")+") {",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+="var stack = "+JSsource.stackSave.body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if("number"!==type){var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";",funcstr+=convertCode.body+";",funcstr+=arg+"=("+convertCode.returnValue+");"}}}var cfuncname=parseJSFunc(function(){return cfunc}).returnValue;if(funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");",!numericRet){var strgfy=parseJSFunc(function(){return Pointer_stringify}).returnValue;funcstr+="ret = "+strgfy+"(ret);"}return numericArgs||(ensureJSsource(),funcstr+=JSsource.stackRestore.body.replace("()","(stack)")+";"),funcstr+="return ret})",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;function allocate(e,a,t,r){var c,n;"number"==typeof e?(c=!0,n=e):(c=!1,n=e.length);var i,f="string"==typeof a?a:null;if(i=t==ALLOC_NONE?r:["function"==typeof _malloc?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===t?ALLOC_STATIC:t](Math.max(n,f?1:a.length)),c){var o;r=i;for(assert(0==(3&i)),o=i+(-4&n);r<o;r+=4)HEAP32[r>>2]=0;for(o=i+n;r<o;)HEAP8[r++>>0]=0;return i}if("i8"===f)return e.subarray||e.slice?HEAPU8.set(e,i):HEAPU8.set(new Uint8Array(e),i),i;for(var d,s,b,u=0;u<n;){var l=e[u];"function"==typeof l&&(l=Runtime.getFunctionIndex(l)),0!==(d=f||a[u])?("i64"==d&&(d="i32"),setValue(i+u,l,d),b!==d&&(s=Runtime.getNativeTypeSize(d),b=d),u+=s):u++}return i}function getMemory(e){return staticSealed?runtimeInitialized?_malloc(e):Runtime.dynamicAlloc(e):Runtime.staticAlloc(e)}function Pointer_stringify(e,a){if(0===a||!e)return"";for(var t,r=0,c=0;r|=t=HEAPU8[e+c>>0],(0!=t||a)&&(c++,!a||c!=a););a||(a=c);var n="";if(r<128){for(var i;a>0;)i=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(a,1024))),n=n?n+i:i,e+=1024,a-=1024;return n}return Module.UTF8ToString(e)}function AsciiToString(e){for(var a="";;){var t=HEAP8[e++>>0];if(!t)return a;a+=String.fromCharCode(t)}}function stringToAscii(e,a){return writeAsciiToMemory(e,a,!1)}Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,a){for(var t=a;e[t];)++t;if(t-a>16&&e.subarray&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(a,t));for(var r,c,n,i,f,o="";;){if(!(r=e[a++]))return o;if(128&r)if(c=63&e[a++],192!=(224&r))if(n=63&e[a++],224==(240&r)?r=(15&r)<<12|c<<6|n:(i=63&e[a++],240==(248&r)?r=(7&r)<<18|c<<12|n<<6|i:(f=63&e[a++],r=248==(252&r)?(3&r)<<24|c<<18|n<<12|i<<6|f:(1&r)<<30|c<<24|n<<18|i<<12|f<<6|63&e[a++])),r<65536)o+=String.fromCharCode(r);else{var d=r-65536;o+=String.fromCharCode(55296|d>>10,56320|1023&d)}else o+=String.fromCharCode((31&r)<<6|c);else o+=String.fromCharCode(r)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,a,t,r){if(!(r>0))return 0;for(var c=t,n=t+r-1,i=0;i<e.length;++i){var f=e.charCodeAt(i);if(f>=55296&&f<=57343&&(f=65536+((1023&f)<<10)|1023&e.charCodeAt(++i)),f<=127){if(t>=n)break;a[t++]=f}else if(f<=2047){if(t+1>=n)break;a[t++]=192|f>>6,a[t++]=128|63&f}else if(f<=65535){if(t+2>=n)break;a[t++]=224|f>>12,a[t++]=128|f>>6&63,a[t++]=128|63&f}else if(f<=2097151){if(t+3>=n)break;a[t++]=240|f>>18,a[t++]=128|f>>12&63,a[t++]=128|f>>6&63,a[t++]=128|63&f}else if(f<=67108863){if(t+4>=n)break;a[t++]=248|f>>24,a[t++]=128|f>>18&63,a[t++]=128|f>>12&63,a[t++]=128|f>>6&63,a[t++]=128|63&f}else{if(t+5>=n)break;a[t++]=252|f>>30,a[t++]=128|f>>24&63,a[t++]=128|f>>18&63,a[t++]=128|f>>12&63,a[t++]=128|f>>6&63,a[t++]=128|63&f}}return a[t]=0,t-c}function stringToUTF8(e,a,t){return stringToUTF8Array(e,HEAPU8,a,t)}function lengthBytesUTF8(e){for(var a=0,t=0;t<e.length;++t){var r=e.charCodeAt(t);r>=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++t)),r<=127?++a:a+=r<=2047?2:r<=65535?3:r<=2097151?4:r<=67108863?5:6}return a}Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;function demangle(e){var a=Module.___cxa_demangle||Module.__cxa_demangle;if(a){try{var t=e.substr(1),r=lengthBytesUTF8(t)+1,c=_malloc(r);stringToUTF8(t,c,r);var n=_malloc(4),i=a(c,0,0,n);if(0===getValue(n,"i32")&&i)return Pointer_stringify(i)}catch(e){}finally{c&&_free(c),n&&_free(n),i&&_free(i)}return e}return Runtime.warnOnce("warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling"),e}function demangleAll(e){return e.replace(/__Z[\w\d_]+/g,function(e){var a=demangle(e);return e===a?e:e+" ["+a+"]"})}function jsStackTrace(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(a){e=a}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function stackTrace(){var e=jsStackTrace();return Module.extraStackTrace&&(e+="\n"+Module.extraStackTrace()),demangleAll(e)}function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value "+TOTAL_MEMORY+", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}Module.stackTrace=stackTrace,STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||16777216;function getTotalMemory(){return TOTAL_MEMORY}if(TOTAL_MEMORY<TOTAL_STACK&&Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")"),buffer=Module.buffer?Module.buffer:new ArrayBuffer(TOTAL_MEMORY),updateGlobalBufferViews(),HEAP32[0]=1668509029,HEAP16[1]=25459,115!==HEAPU8[2]||99!==HEAPU8[3])throw"Runtime error: expected the system to be little-endian!";function callRuntimeCallbacks(e){for(;e.length>0;){var a=e.shift();if("function"!=typeof a){var t=a.func;"number"==typeof t?void 0===a.arg?Module.dynCall_v(t):Module.dynCall_vi(t,a.arg):t(void 0===a.arg?null:a.arg)}else a()}}Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPreMain(e){__ATMAIN__.unshift(e)}function addOnExit(e){__ATEXIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}function writeStringToMemory(e,a,t){var r,c;Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),t&&(c=a+lengthBytesUTF8(e),r=HEAP8[c]),stringToUTF8(e,a,1/0),t&&(HEAP8[c]=r)}function writeArrayToMemory(e,a){HEAP8.set(e,a)}function writeAsciiToMemory(e,a,t){for(var r=0;r<e.length;++r)HEAP8[a++>>0]=e.charCodeAt(r);t||(HEAP8[a>>0]=0)}Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,a){var t=65535&e,r=65535&a;return t*r+((e>>>16)*r+t*(a>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var a=0;a<32;a++)if(e&1<<31-a)return a;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(e){return e}function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var a=dependenciesFulfilled;dependenciesFulfilled=null,a()}}Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null,ASM_CONSTS=[];STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+15392,__ATINIT__.push(),memoryInitializer="data:application/octet-stream;base64, ";var tempDoublePtr=STATICTOP;function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}STATICTOP+=16;var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function(e){if(!e||EXCEPTIONS.infos[e])return e;for(var a in EXCEPTIONS.infos){if(EXCEPTIONS.infos[a].adjusted===e)return a}return e},addRef:function(e){e&&EXCEPTIONS.infos[e].refcount++},decRef:function(e){if(e){var a=EXCEPTIONS.infos[e];assert(a.refcount>0),a.refcount--,0!==a.refcount||a.rethrown||(a.destructor&&Module.dynCall_vi(a.destructor,e),delete EXCEPTIONS.infos[e],___cxa_free_exception(e))}},clearRef:function(e){e&&(EXCEPTIONS.infos[e].refcount=0)}};function ___resumeException(e){throw EXCEPTIONS.last||(EXCEPTIONS.last=e),e}function ___cxa_find_matching_catch(){var e=EXCEPTIONS.last;if(!e)return 0|(Runtime.setTempRet0(0),0);var a=EXCEPTIONS.infos[e],t=a.type;if(!t)return 0|(Runtime.setTempRet0(0),e);var r=Array.prototype.slice.call(arguments);Module.___cxa_is_pointer_type(t);___cxa_find_matching_catch.buffer||(___cxa_find_matching_catch.buffer=_malloc(4)),HEAP32[___cxa_find_matching_catch.buffer>>2]=e,e=___cxa_find_matching_catch.buffer;for(var c=0;c<r.length;c++)if(r[c]&&Module.___cxa_can_catch(r[c],t,e))return e=HEAP32[e>>2],a.adjusted=e,0|(Runtime.setTempRet0(r[c]),e);return e=HEAP32[e>>2],0|(Runtime.setTempRet0(t),e)}function ___cxa_throw(e,a,t){throw EXCEPTIONS.infos[e]={ptr:e,adjusted:e,type:a,destructor:t,refcount:0,caught:!1,rethrown:!1},EXCEPTIONS.last=e,"uncaught_exception"in __ZSt18uncaught_exceptionv?__ZSt18uncaught_exceptionv.uncaught_exception++:__ZSt18uncaught_exceptionv.uncaught_exception=1,e}function __Unwind_FindEnclosingFunction(){return 0}function _emscripten_set_main_loop_timing(e,a){if(Browser.mainLoop.timingMode=e,Browser.mainLoop.timingValue=a,!Browser.mainLoop.func)return 1;if(0==e)Browser.mainLoop.scheduler=function(){var e=0|Math.max(0,Browser.mainLoop.tickStartTime+a-_emscripten_get_now());setTimeout(Browser.mainLoop.runner,e)},Browser.mainLoop.method="timeout";else if(1==e)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==e){if(!window.setImmediate){var t=[],r="setimmediate";window.addEventListener("message",function(e){e.source===window&&e.data===r&&(e.stopPropagation(),t.shift()())},!0),window.setImmediate=function(e){t.push(e),ENVIRONMENT_IS_WORKER?(void 0===Module.setImmediates&&(Module.setImmediates=[]),Module.setImmediates.push(e),window.postMessage({target:r})):window.postMessage(r,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(e,a,t,r,c){var n;Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=e,Browser.mainLoop.arg=r,n=void 0!==r?function(){Module.dynCall_vi(e,r)}:function(){Module.dynCall_v(e)};var i=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT)if(Browser.mainLoop.queue.length>0){var e=Date.now(),a=Browser.mainLoop.queue.shift();if(a.func(a.arg),Browser.mainLoop.remainingBlockers){var t=Browser.mainLoop.remainingBlockers,r=t%1==0?t-1:Math.floor(t);a.counted?Browser.mainLoop.remainingBlockers=r:(r+=.5,Browser.mainLoop.remainingBlockers=(8*t+r)/9)}if(console.log('main loop blocker "'+a.name+'" took '+(Date.now()-e)+" ms"),Browser.mainLoop.updateStatus(),i<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0)}else i<Browser.mainLoop.currentlyRunningMainloop||(Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0,1==Browser.mainLoop.timingMode&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0?Browser.mainLoop.scheduler():(0==Browser.mainLoop.timingMode&&(Browser.mainLoop.tickStartTime=_emscripten_get_now()),"timeout"===Browser.mainLoop.method&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),i<Browser.mainLoop.currentlyRunningMainloop||("object"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),Browser.mainLoop.scheduler())))},c||(a&&a>0?_emscripten_set_main_loop_timing(0,1e3/a):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),t)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var e=Browser.mainLoop.timingMode,a=Browser.mainLoop.timingValue,t=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(t,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(e,a),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var e=Module.statusMessage||"Please wait...",a=Browser.mainLoop.remainingBlockers,t=Browser.mainLoop.expectedBlockers;a?a<t?Module.setStatus(e+" ("+(t-a)+"/"+t+")"):Module.setStatus(e):Module.setStatus("")}},runIter:function(e){if(!ABORT){if(Module.preMainLoop)if(!1===Module.preMainLoop())return;try{e()}catch(e){if(e instanceof ExitStatus)return;throw e&&"object"==typeof e&&e.stack&&Module.printErr("exception thrown: "+[e,e.stack]),e}Module.postMainLoop&&Module.postMainLoop()}}},isFullscreen:!1,pointerLock:!1,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(Module.preloadPlugins||(Module.preloadPlugins=[]),!Browser.initted){Browser.initted=!0;try{new Blob,Browser.hasBlobConstructor=!0}catch(e){Browser.hasBlobConstructor=!1,console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Browser.hasBlobConstructor?null:console.log("warning: no BlobBuilder"),Browser.URLObject="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:void 0,Module.noImageDecoding||void 0!==Browser.URLObject||(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var e={canHandle:function(e){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(e)},handle:function(e,a,t,r){var c=null;if(Browser.hasBlobConstructor)try{(c=new Blob([e],{type:Browser.getMimetype(a)})).size!==e.length&&(c=new Blob([new Uint8Array(e).buffer],{type:Browser.getMimetype(a)}))}catch(e){Runtime.warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}if(!c){var n=new Browser.BlobBuilder;n.append(new Uint8Array(e).buffer),c=n.getBlob()}var i=Browser.URLObject.createObjectURL(c),f=new Image;f.onload=function(){assert(f.complete,"Image "+a+" could not be decoded");var r=document.createElement("canvas");r.width=f.width,r.height=f.height,r.getContext("2d").drawImage(f,0,0),Module.preloadedImages[a]=r,Browser.URLObject.revokeObjectURL(i),t&&t(e)},f.onerror=function(e){console.log("Image "+i+" could not be decoded"),r&&r()},f.src=i}};Module.preloadPlugins.push(e);var a={canHandle:function(e){return!Module.noAudioDecoding&&e.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(e,a,t,r){var c=!1;function n(r){c||(c=!0,Module.preloadedAudios[a]=r,t&&t(e))}function i(){c||(c=!0,Module.preloadedAudios[a]=new Audio,r&&r())}if(!Browser.hasBlobConstructor)return i();try{var f=new Blob([e],{type:Browser.getMimetype(a)})}catch(e){return i()}var o=Browser.URLObject.createObjectURL(f),d=new Audio;d.addEventListener("canplaythrough",function(){n(d)},!1),d.onerror=function(t){c||(console.log("warning: browser could not fully decode audio "+a+", trying slower base64 approach"),d.src="data:audio/x-"+a.substr(-3)+";base64,"+function(e){for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t="",r=0,c=0,n=0;n<e.length;n++)for(r=r<<8|e[n],c+=8;c>=6;){var i=r>>c-6&63;c-=6,t+=a[i]}return 2==c?(t+=a[(3&r)<<4],t+="=="):4==c&&(t+=a[(15&r)<<2],t+="="),t}(e),n(d))},d.src=o,Browser.safeSetTimeout(function(){n(d)},1e4)}};Module.preloadPlugins.push(a);var t=Module.canvas;t&&(t.requestPointerLock=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock||t.msRequestPointerLock||function(){},t.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},t.exitPointerLock=t.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&t.addEventListener("click",function(e){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),e.preventDefault())},!1))}function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}},createContext:function(e,a,t,r){if(a&&Module.ctx&&e==Module.canvas)return Module.ctx;var c,n;if(a){var i={antialias:!1,alpha:!1};if(r)for(var f in r)i[f]=r[f];(n=GL.createContext(e,i))&&(c=GL.getContext(n).GLctx)}else c=e.getContext("2d");return c?(t&&(a||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=c,a&&GL.makeContextCurrent(n),Module.useWebGL=a,Browser.moduleContextCreatedCallbacks.forEach(function(e){e()}),Browser.init()),c):null},destroyContext:function(e,a,t){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,a,t){Browser.lockPointer=e,Browser.resizeCanvas=a,Browser.vrDevice=t,void 0===Browser.lockPointer&&(Browser.lockPointer=!0),void 0===Browser.resizeCanvas&&(Browser.resizeCanvas=!1),void 0===Browser.vrDevice&&(Browser.vrDevice=null);var r=Module.canvas;function c(){Browser.isFullscreen=!1;var e=r.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(r.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},r.exitFullscreen=r.exitFullscreen.bind(document),Browser.lockPointer&&r.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(e.parentNode.insertBefore(r,e),e.parentNode.removeChild(e),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(r)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",c,!1),document.addEventListener("mozfullscreenchange",c,!1),document.addEventListener("webkitfullscreenchange",c,!1),document.addEventListener("MSFullscreenChange",c,!1));var n=document.createElement("div");r.parentNode.insertBefore(n,r),n.appendChild(r),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),t?n.requestFullscreen({vrDisplay:t}):n.requestFullscreen()},requestFullScreen:function(e,a,t){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(e,a,t){return Browser.requestFullscreen(e,a,t)},Browser.requestFullscreen(e,a,t)},nextRAF:0,fakeRequestAnimationFrame:function(e){var a=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=a+1e3/60;else for(;a+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var t=Math.max(Browser.nextRAF-a,0);setTimeout(e,t)},requestAnimationFrame:function(e){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(e){return function(){if(!ABORT)return e.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var e=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],e.forEach(function(e){e()})}},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))})},safeSetTimeout:function(e,a){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))},a)},safeSetInterval:function(e,a){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&e()},a)},getMimetype:function(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var a=0;switch(e.type){case"DOMMouseScroll":a=e.detail;break;case"mousewheel":a=e.wheelDelta;break;case"wheel":a=e.deltaY;break;default:throw"unrecognized mouse wheel event: "+e.type}return a},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if(Browser.pointerLock)"mousemove"!=e.type&&"mozMovementX"in e?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(e),Browser.mouseMovementY=Browser.getMovementY(e)),"undefined"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var a=Module.canvas.getBoundingClientRect(),t=Module.canvas.width,r=Module.canvas.height,c=void 0!==window.scrollX?window.scrollX:window.pageXOffset,n=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if("touchstart"===e.type||"touchend"===e.type||"touchmove"===e.type){var i=e.touch;if(void 0===i)return;var f=i.pageX-(c+a.left),o=i.pageY-(n+a.top),d={x:f*=t/a.width,y:o*=r/a.height};if("touchstart"===e.type)Browser.lastTouches[i.identifier]=d,Browser.touches[i.identifier]=d;else if("touchend"===e.type||"touchmove"===e.type){var s=Browser.touches[i.identifier];s||(s=d),Browser.lastTouches[i.identifier]=s,Browser.touches[i.identifier]=d}return}var b=e.pageX-(c+a.left),u=e.pageY-(n+a.top);b*=t/a.width,u*=r/a.height,Browser.mouseMovementX=b-Browser.mouseX,Browser.mouseMovementY=u-Browser.mouseY,Browser.mouseX=b,Browser.mouseY=u}},asyncLoad:function(e,a,t,r){var c=r?"":getUniqueRunDependency("al "+e);Module.readAsync(e,function(t){assert(t,'Loading data file "'+e+'" failed (no arrayBuffer).'),a(new Uint8Array(t)),c&&removeRunDependency(c)},function(a){if(!t)throw'Loading data file "'+e+'" failed.';t()}),c&&addRunDependency(c)},resizeListeners:[],updateResizeListeners:function(){var e=Module.canvas;Browser.resizeListeners.forEach(function(a){a(e.width,e.height)})},setCanvasSize:function(e,a,t){var r=Module.canvas;Browser.updateCanvasDimensions(r,e,a),t||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e|=8388608,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e&=-8388609,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},updateCanvasDimensions:function(e,a,t){a&&t?(e.widthNative=a,e.heightNative=t):(a=e.widthNative,t=e.heightNative);var r=a,c=t;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(r/c<Module.forcedAspectRatio?r=Math.round(c*Module.forcedAspectRatio):c=Math.round(r/Module.forcedAspectRatio)),(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e.parentNode&&"undefined"!=typeof screen){var n=Math.min(screen.width/r,screen.height/c);r=Math.round(r*n),c=Math.round(c*n)}Browser.resizeCanvas?(e.width!=r&&(e.width=r),e.height!=c&&(e.height=c),void 0!==e.style&&(e.style.removeProperty("width"),e.style.removeProperty("height"))):(e.width!=a&&(e.width=a),e.height!=t&&(e.height=t),void 0!==e.style&&(r!=a||c!=t?(e.style.setProperty("width",r+"px","important"),e.style.setProperty("height",c+"px","important")):(e.style.removeProperty("width"),e.style.removeProperty("height"))))},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var e=Browser.nextWgetRequestHandle;return Browser.nextWgetRequestHandle++,e}};function _emscripten_exit_with_live_runtime(){throw Module.noExitRuntime=!0,"SimulateInfiniteLoop"}function _pthread_mutexattr_settype(){}function _abort(){Module.abort()}function _pthread_cond_destroy(){return 0}function _pthread_condattr_destroy(){return 0}function ___cxa_free_exception(e){try{return _free(e)}catch(e){}}function ___lock(){}function ___unlock(){}function _pthread_mutexattr_init(){}var PTHREAD_SPECIFIC={};function _pthread_getspecific(e){return PTHREAD_SPECIFIC[e]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1,ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(e,a){return 0==e?ERRNO_CODES.EINVAL:(HEAP32[e>>2]=PTHREAD_SPECIFIC_NEXT_KEY,PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0,PTHREAD_SPECIFIC_NEXT_KEY++,0)}function _llvm_bswap_i64(e,a){var t=_llvm_bswap_i32(a)>>>0,r=_llvm_bswap_i32(e)>>>0;return 0|(Runtime.setTempRet0(r),t)}function _pthread_mutex_init(){}function _pthread_key_delete(e){return e in PTHREAD_SPECIFIC?(delete PTHREAD_SPECIFIC[e],0):ERRNO_CODES.EINVAL}function _pthread_setspecific(e,a){return e in PTHREAD_SPECIFIC?(PTHREAD_SPECIFIC[e]=a,0):ERRNO_CODES.EINVAL}function _pthread_mutexattr_destroy(){}function ___cxa_allocate_exception(e){return _malloc(e)}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};function ___setErrNo(e){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=e),e}var PATH={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(e,a){for(var t=0,r=e.length-1;r>=0;r--){var c=e[r];"."===c?e.splice(r,1):".."===c?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(a)for(;t;t--)e.unshift("..");return e},normalize:function(e){var a="/"===e.charAt(0),t="/"===e.substr(-1);return(e=PATH.normalizeArray(e.split("/").filter(function(e){return!!e}),!a).join("/"))||a||(e="."),e&&t&&(e+="/"),(a?"/":"")+e},dirname:function(e){var a=PATH.splitPath(e),t=a[0],r=a[1];return t||r?(r&&(r=r.substr(0,r.length-1)),t+r):"."},basename:function(e){if("/"===e)return"/";var a=e.lastIndexOf("/");return-1===a?e:e.substr(a+1)},extname:function(e){return PATH.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return PATH.normalize(e.join("/"))},join2:function(e,a){return PATH.normalize(e+"/"+a)},resolve:function(){for(var e="",a=!1,t=arguments.length-1;t>=-1&&!a;t--){var r=t>=0?arguments[t]:FS.cwd();if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");if(!r)return"";e=r+"/"+e,a="/"===r.charAt(0)}return e=PATH.normalizeArray(e.split("/").filter(function(e){return!!e}),!a).join("/"),(a?"/":"")+e||"."},relative:function(e,a){function t(e){for(var a=0;a<e.length&&""===e[a];a++);for(var t=e.length-1;t>=0&&""===e[t];t--);return a>t?[]:e.slice(a,t-a+1)}e=PATH.resolve(e).substr(1),a=PATH.resolve(a).substr(1);for(var r=t(e.split("/")),c=t(a.split("/")),n=Math.min(r.length,c.length),i=n,f=0;f<n;f++)if(r[f]!==c[f]){i=f;break}var o=[];for(f=i;f<r.length;f++)o.push("..");return(o=o.concat(c.slice(i))).join("/")}},TTY={ttys:[],init:function(){},shutdown:function(){},register:function(e,a){TTY.ttys[e]={input:[],output:[],ops:a},FS.registerDevice(e,TTY.stream_ops)},stream_ops:{open:function(e){var a=TTY.ttys[e.node.rdev];if(!a)throw new FS.ErrnoError(ERRNO_CODES.ENODEV);e.tty=a,e.seekable=!1},close:function(e){e.tty.ops.flush(e.tty)},flush:function(e){e.tty.ops.flush(e.tty)},read:function(e,a,t,r,c){if(!e.tty||!e.tty.ops.get_char)throw new FS.ErrnoError(ERRNO_CODES.ENXIO);for(var n=0,i=0;i<r;i++){var f;try{f=e.tty.ops.get_char(e.tty)}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(void 0===f&&0===n)throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);if(null===f||void 0===f)break;n++,a[t+i]=f}return n&&(e.node.timestamp=Date.now()),n},write:function(e,a,t,r,c){if(!e.tty||!e.tty.ops.put_char)throw new FS.ErrnoError(ERRNO_CODES.ENXIO);for(var n=0;n<r;n++)try{e.tty.ops.put_char(e.tty,a[t+n])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return r&&(e.node.timestamp=Date.now()),n}},default_tty_ops:{get_char:function(e){if(!e.input.length){var a=null;if(ENVIRONMENT_IS_NODE){var t=new Buffer(256),r=0,c="win32"!=process.platform,n=process.stdin.fd;if(c){var i=!1;try{n=fs.openSync("/dev/stdin","r"),i=!0}catch(e){}}try{r=fs.readSync(n,t,0,256,null)}catch(e){if(-1==e.toString().indexOf("EOF"))throw e;r=0}i&&fs.closeSync(n),a=r>0?t.slice(0,r).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(a=window.prompt("Input: "))&&(a+="\n"):"function"==typeof readline&&null!==(a=readline())&&(a+="\n");if(!a)return null;e.input=intArrayFromString(a,!0)}return e.input.shift()},put_char:function(e,a){null===a||10===a?(Module.print(UTF8ArrayToString(e.output,0)),e.output=[]):0!=a&&e.output.push(a)},flush:function(e){e.output&&e.output.length>0&&(Module.print(UTF8ArrayToString(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,a){null===a||10===a?(Module.printErr(UTF8ArrayToString(e.output,0)),e.output=[]):0!=a&&e.output.push(a)},flush:function(e){e.output&&e.output.length>0&&(Module.printErr(UTF8ArrayToString(e.output,0)),e.output=[])}}},MEMFS={ops_table:null,mount:function(e){return MEMFS.createNode(null,"/",16895,0)},createNode:function(e,a,t,r){if(FS.isBlkdev(t)||FS.isFIFO(t))throw new FS.ErrnoError(ERRNO_CODES.EPERM);MEMFS.ops_table||(MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}});var c=FS.createNode(e,a,t,r);return FS.isDir(c.mode)?(c.node_ops=MEMFS.ops_table.dir.node,c.stream_ops=MEMFS.ops_table.dir.stream,c.contents={}):FS.isFile(c.mode)?(c.node_ops=MEMFS.ops_table.file.node,c.stream_ops=MEMFS.ops_table.file.stream,c.usedBytes=0,c.contents=null):FS.isLink(c.mode)?(c.node_ops=MEMFS.ops_table.link.node,c.stream_ops=MEMFS.ops_table.link.stream):FS.isChrdev(c.mode)&&(c.node_ops=MEMFS.ops_table.chrdev.node,c.stream_ops=MEMFS.ops_table.chrdev.stream),c.timestamp=Date.now(),e&&(e.contents[a]=c),c},getFileDataAsRegularArray:function(e){if(e.contents&&e.contents.subarray){for(var a=[],t=0;t<e.usedBytes;++t)a.push(e.contents[t]);return a}return e.contents},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array},expandFileStorage:function(e,a){if(e.contents&&e.contents.subarray&&a>e.contents.length&&(e.contents=MEMFS.getFileDataAsRegularArray(e),e.usedBytes=e.contents.length),!e.contents||e.contents.subarray){var t=e.contents?e.contents.length:0;if(t>=a)return;a=Math.max(a,t*(t<1048576?2:1.125)|0),0!=t&&(a=Math.max(a,256));var r=e.contents;return e.contents=new Uint8Array(a),void(e.usedBytes>0&&e.contents.set(r.subarray(0,e.usedBytes),0))}for(!e.contents&&a>0&&(e.contents=[]);e.contents.length<a;)e.contents.push(0)},resizeFileStorage:function(e,a){if(e.usedBytes!=a){if(0==a)return e.contents=null,void(e.usedBytes=0);if(!e.contents||e.contents.subarray){var t=e.contents;return e.contents=new Uint8Array(new ArrayBuffer(a)),t&&e.contents.set(t.subarray(0,Math.min(a,e.usedBytes))),void(e.usedBytes=a)}if(e.contents||(e.contents=[]),e.contents.length>a)e.contents.length=a;else for(;e.contents.length<a;)e.contents.push(0);e.usedBytes=a}},node_ops:{getattr:function(e){var a={};return a.dev=FS.isChrdev(e.mode)?e.id:1,a.ino=e.id,a.mode=e.mode,a.nlink=1,a.uid=0,a.gid=0,a.rdev=e.rdev,FS.isDir(e.mode)?a.size=4096:FS.isFile(e.mode)?a.size=e.usedBytes:FS.isLink(e.mode)?a.size=e.link.length:a.size=0,a.atime=new Date(e.timestamp),a.mtime=new Date(e.timestamp),a.ctime=new Date(e.timestamp),a.blksize=4096,a.blocks=Math.ceil(a.size/a.blksize),a},setattr:function(e,a){void 0!==a.mode&&(e.mode=a.mode),void 0!==a.timestamp&&(e.timestamp=a.timestamp),void 0!==a.size&&MEMFS.resizeFileStorage(e,a.size)},lookup:function(e,a){throw FS.genericErrors[ERRNO_CODES.ENOENT]},mknod:function(e,a,t,r){return MEMFS.createNode(e,a,t,r)},rename:function(e,a,t){if(FS.isDir(e.mode)){var r;try{r=FS.lookupNode(a,t)}catch(e){}if(r)for(var c in r.contents)throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}delete e.parent.contents[e.name],e.name=t,a.contents[t]=e,e.parent=a},unlink:function(e,a){delete e.contents[a]},rmdir:function(e,a){var t=FS.lookupNode(e,a);for(var r in t.contents)throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);delete e.contents[a]},readdir:function(e){var a=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&a.push(t);return a},symlink:function(e,a,t){var r=MEMFS.createNode(e,a,41471,0);return r.link=t,r},readlink:function(e){if(!FS.isLink(e.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return e.link}},stream_ops:{read:function(e,a,t,r,c){var n=e.node.contents;if(c>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-c,r);if(assert(i>=0),i>8&&n.subarray)a.set(n.subarray(c,c+i),t);else for(var f=0;f<i;f++)a[t+f]=n[c+f];return i},write:function(e,a,t,r,c,n){if(!r)return 0;var i=e.node;if(i.timestamp=Date.now(),a.subarray&&(!i.contents||i.contents.subarray)){if(n)return i.contents=a.subarray(t,t+r),i.usedBytes=r,r;if(0===i.usedBytes&&0===c)return i.contents=new Uint8Array(a.subarray(t,t+r)),i.usedBytes=r,r;if(c+r<=i.usedBytes)return i.contents.set(a.subarray(t,t+r),c),r}if(MEMFS.expandFileStorage(i,c+r),i.contents.subarray&&a.subarray)i.contents.set(a.subarray(t,t+r),c);else for(var f=0;f<r;f++)i.contents[c+f]=a[t+f];return i.usedBytes=Math.max(i.usedBytes,c+r),r},llseek:function(e,a,t){var r=a;if(1===t?r+=e.position:2===t&&FS.isFile(e.node.mode)&&(r+=e.node.usedBytes),r<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return r},allocate:function(e,a,t){MEMFS.expandFileStorage(e.node,a+t),e.node.usedBytes=Math.max(e.node.usedBytes,a+t)},mmap:function(e,a,t,r,c,n,i){if(!FS.isFile(e.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);var f,o,d=e.node.contents;if(2&i||d.buffer!==a&&d.buffer!==a.buffer){if((c>0||c+r<e.node.usedBytes)&&(d=d.subarray?d.subarray(c,c+r):Array.prototype.slice.call(d,c,c+r)),o=!0,!(f=_malloc(r)))throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);a.set(d,f)}else o=!1,f=d.byteOffset;return{ptr:f,allocated:o}},msync:function(e,a,t,r,c){if(!FS.isFile(e.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);if(2&c)return 0;MEMFS.stream_ops.write(e,a,0,r,t,!1);return 0}}},IDBFS={dbs:{},indexedDB:function(){if("undefined"!=typeof indexedDB)return indexedDB;var e=null;return"object"==typeof window&&(e=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB),assert(e,"IDBFS used, but indexedDB not supported"),e},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(e){return MEMFS.mount.apply(null,arguments)},syncfs:function(e,a,t){IDBFS.getLocalSet(e,function(r,c){if(r)return t(r);IDBFS.getRemoteSet(e,function(e,r){if(e)return t(e);var n=a?r:c,i=a?c:r;IDBFS.reconcile(n,i,t)})})},getDB:function(e,a){var t,r=IDBFS.dbs[e];if(r)return a(null,r);try{t=IDBFS.indexedDB().open(e,IDBFS.DB_VERSION)}catch(e){return a(e)}if(!t)return a("Unable to connect to IndexedDB");t.onupgradeneeded=function(e){var a,t=e.target.result,r=e.target.transaction;(a=t.objectStoreNames.contains(IDBFS.DB_STORE_NAME)?r.objectStore(IDBFS.DB_STORE_NAME):t.createObjectStore(IDBFS.DB_STORE_NAME)).indexNames.contains("timestamp")||a.createIndex("timestamp","timestamp",{unique:!1})},t.onsuccess=function(){r=t.result,IDBFS.dbs[e]=r,a(null,r)},t.onerror=function(e){a(this.error),e.preventDefault()}},getLocalSet:function(e,a){var t={};function r(e){return"."!==e&&".."!==e}function c(e){return function(a){return PATH.join2(e,a)}}for(var n=FS.readdir(e.mountpoint).filter(r).map(c(e.mountpoint));n.length;){var i,f=n.pop();try{i=FS.stat(f)}catch(e){return a(e)}FS.isDir(i.mode)&&n.push.apply(n,FS.readdir(f).filter(r).map(c(f))),t[f]={timestamp:i.mtime}}return a(null,{type:"local",entries:t})},getRemoteSet:function(e,a){var t={};IDBFS.getDB(e.mountpoint,function(e,r){if(e)return a(e);try{var c=r.transaction([IDBFS.DB_STORE_NAME],"readonly");c.onerror=function(e){a(this.error),e.preventDefault()},c.objectStore(IDBFS.DB_STORE_NAME).index("timestamp").openKeyCursor().onsuccess=function(e){var c=e.target.result;if(!c)return a(null,{type:"remote",db:r,entries:t});t[c.primaryKey]={timestamp:c.key},c.continue()}}catch(e){return a(e)}})},loadLocalEntry:function(e,a){var t,r;try{r=FS.lookupPath(e).node,t=FS.stat(e)}catch(e){return a(e)}return FS.isDir(t.mode)?a(null,{timestamp:t.mtime,mode:t.mode}):FS.isFile(t.mode)?(r.contents=MEMFS.getFileDataAsTypedArray(r),a(null,{timestamp:t.mtime,mode:t.mode,contents:r.contents})):a(new Error("node type not supported"))},storeLocalEntry:function(e,a,t){try{if(FS.isDir(a.mode))FS.mkdir(e,a.mode);else{if(!FS.isFile(a.mode))return t(new Error("node type not supported"));FS.writeFile(e,a.contents,{encoding:"binary",canOwn:!0})}FS.chmod(e,a.mode),FS.utime(e,a.timestamp,a.timestamp)}catch(e){return t(e)}t(null)},removeLocalEntry:function(e,a){try{FS.lookupPath(e);var t=FS.stat(e);FS.isDir(t.mode)?FS.rmdir(e):FS.isFile(t.mode)&&FS.unlink(e)}catch(e){return a(e)}a(null)},loadRemoteEntry:function(e,a,t){var r=e.get(a);r.onsuccess=function(e){t(null,e.target.result)},r.onerror=function(e){t(this.error),e.preventDefault()}},storeRemoteEntry:function(e,a,t,r){var c=e.put(t,a);c.onsuccess=function(){r(null)},c.onerror=function(e){r(this.error),e.preventDefault()}},removeRemoteEntry:function(e,a,t){var r=e.delete(a);r.onsuccess=function(){t(null)},r.onerror=function(e){t(this.error),e.preventDefault()}},reconcile:function(e,a,t){var r=0,c=[];Object.keys(e.entries).forEach(function(t){var n=e.entries[t],i=a.entries[t];(!i||n.timestamp>i.timestamp)&&(c.push(t),r++)});var n=[];if(Object.keys(a.entries).forEach(function(t){a.entries[t];e.entries[t]||(n.push(t),r++)}),!r)return t(null);var i=0,f=("remote"===e.type?e.db:a.db).transaction([IDBFS.DB_STORE_NAME],"readwrite"),o=f.objectStore(IDBFS.DB_STORE_NAME);function d(e){return e?d.errored?void 0:(d.errored=!0,t(e)):++i>=r?t(null):void 0}f.onerror=function(e){d(this.error),e.preventDefault()},c.sort().forEach(function(e){"local"===a.type?IDBFS.loadRemoteEntry(o,e,function(a,t){if(a)return d(a);IDBFS.storeLocalEntry(e,t,d)}):IDBFS.loadLocalEntry(e,function(a,t){if(a)return d(a);IDBFS.storeRemoteEntry(o,e,t,d)})}),n.sort().reverse().forEach(function(e){"local"===a.type?IDBFS.removeLocalEntry(e,d):IDBFS.removeRemoteEntry(o,e,d)})}},NODEFS={isWindows:!1,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/)},mount:function(e){return assert(ENVIRONMENT_IS_NODE),NODEFS.createNode(null,"/",NODEFS.getMode(e.opts.root),0)},createNode:function(e,a,t,r){if(!FS.isDir(t)&&!FS.isFile(t)&&!FS.isLink(t))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var c=FS.createNode(e,a,t);return c.node_ops=NODEFS.node_ops,c.stream_ops=NODEFS.stream_ops,c},getMode:function(e){var a;try{a=fs.lstatSync(e),NODEFS.isWindows&&(a.mode=a.mode|(146&a.mode)>>1)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return a.mode},realPath:function(e){for(var a=[];e.parent!==e;)a.push(e.name),e=e.parent;return a.push(e.mount.opts.root),a.reverse(),PATH.join.apply(null,a)},flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function(e){if(e&=-2097153,e&=-2049,e&=-32769,(e&=-524289)in NODEFS.flagsToPermissionStringMap)return NODEFS.flagsToPermissionStringMap[e];throw new FS.ErrnoError(ERRNO_CODES.EINVAL)},node_ops:{getattr:function(e){var a,t=NODEFS.realPath(e);try{a=fs.lstatSync(t)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return NODEFS.isWindows&&!a.blksize&&(a.blksize=4096),NODEFS.isWindows&&!a.blocks&&(a.blocks=(a.size+a.blksize-1)/a.blksize|0),{dev:a.dev,ino:a.ino,mode:a.mode,nlink:a.nlink,uid:a.uid,gid:a.gid,rdev:a.rdev,size:a.size,atime:a.atime,mtime:a.mtime,ctime:a.ctime,blksize:a.blksize,blocks:a.blocks}},setattr:function(e,a){var t=NODEFS.realPath(e);try{if(void 0!==a.mode&&(fs.chmodSync(t,a.mode),e.mode=a.mode),void 0!==a.timestamp){var r=new Date(a.timestamp);fs.utimesSync(t,r,r)}void 0!==a.size&&fs.truncateSync(t,a.size)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},lookup:function(e,a){var t=PATH.join2(NODEFS.realPath(e),a),r=NODEFS.getMode(t);return NODEFS.createNode(e,a,r)},mknod:function(e,a,t,r){var c=NODEFS.createNode(e,a,t,r),n=NODEFS.realPath(c);try{FS.isDir(c.mode)?fs.mkdirSync(n,c.mode):fs.writeFileSync(n,"",{mode:c.mode})}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return c},rename:function(e,a,t){var r=NODEFS.realPath(e),c=PATH.join2(NODEFS.realPath(a),t);try{fs.renameSync(r,c)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},unlink:function(e,a){var t=PATH.join2(NODEFS.realPath(e),a);try{fs.unlinkSync(t)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},rmdir:function(e,a){var t=PATH.join2(NODEFS.realPath(e),a);try{fs.rmdirSync(t)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readdir:function(e){var a=NODEFS.realPath(e);try{return fs.readdirSync(a)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},symlink:function(e,a,t){var r=PATH.join2(NODEFS.realPath(e),a);try{fs.symlinkSync(t,r)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readlink:function(e){var a=NODEFS.realPath(e);try{return a=fs.readlinkSync(a),a=NODEJS_PATH.relative(NODEJS_PATH.resolve(e.mount.opts.root),a)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}},stream_ops:{open:function(e){var a=NODEFS.realPath(e.node);try{FS.isFile(e.node.mode)&&(e.nfd=fs.openSync(a,NODEFS.flagsToPermissionString(e.flags)))}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},close:function(e){try{FS.isFile(e.node.mode)&&e.nfd&&fs.closeSync(e.nfd)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},read:function(e,a,t,r,c){if(0===r)return 0;var n,i=new Buffer(r);try{n=fs.readSync(e.nfd,i,0,r,c)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(n>0)for(var f=0;f<n;f++)a[t+f]=i[f];return n},write:function(e,a,t,r,c){var n,i=new Buffer(a.subarray(t,t+r));try{n=fs.writeSync(e.nfd,i,0,r,c)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}return n},llseek:function(e,a,t){var r=a;if(1===t)r+=e.position;else if(2===t&&FS.isFile(e.node.mode))try{r+=fs.fstatSync(e.nfd).size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(r<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return r}}},WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(e){assert(ENVIRONMENT_IS_WORKER),WORKERFS.reader||(WORKERFS.reader=new FileReaderSync);var a=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0),t={};function r(e){for(var r=e.split("/"),c=a,n=0;n<r.length-1;n++){var i=r.slice(0,n+1).join("/");t[i]||(t[i]=WORKERFS.createNode(c,r[n],WORKERFS.DIR_MODE,0)),c=t[i]}return c}function c(e){var a=e.split("/");return a[a.length-1]}return Array.prototype.forEach.call(e.opts.files||[],function(e){WORKERFS.createNode(r(e.name),c(e.name),WORKERFS.FILE_MODE,0,e,e.lastModifiedDate)}),(e.opts.blobs||[]).forEach(function(e){WORKERFS.createNode(r(e.name),c(e.name),WORKERFS.FILE_MODE,0,e.data)}),(e.opts.packages||[]).forEach(function(e){e.metadata.files.forEach(function(a){var t=a.filename.substr(1);WORKERFS.createNode(r(t),c(t),WORKERFS.FILE_MODE,0,e.blob.slice(a.start,a.end))})}),a},createNode:function(e,a,t,r,c,n){var i=FS.createNode(e,a,t);return i.mode=t,i.node_ops=WORKERFS.node_ops,i.stream_ops=WORKERFS.stream_ops,i.timestamp=(n||new Date).getTime(),assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE),t===WORKERFS.FILE_MODE?(i.size=c.size,i.contents=c):(i.size=4096,i.contents={}),e&&(e.contents[a]=i),i},node_ops:{getattr:function(e){return{dev:1,ino:void 0,mode:e.mode,nlink:1,uid:0,gid:0,rdev:void 0,size:e.size,atime:new Date(e.timestamp),mtime:new Date(e.timestamp),ctime:new Date(e.timestamp),blksize:4096,blocks:Math.ceil(e.size/4096)}},setattr:function(e,a){void 0!==a.mode&&(e.mode=a.mode),void 0!==a.timestamp&&(e.timestamp=a.timestamp)},lookup:function(e,a){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)},mknod:function(e,a,t,r){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},rename:function(e,a,t){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},unlink:function(e,a){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},rmdir:function(e,a){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},readdir:function(e){var a=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&a.push(t);return a},symlink:function(e,a,t){throw new FS.ErrnoError(ERRNO_CODES.EPERM)},readlink:function(e){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}},stream_ops:{read:function(e,a,t,r,c){if(c>=e.node.size)return 0;var n=e.node.contents.slice(c,c+r),i=WORKERFS.reader.readAsArrayBuffer(n);return a.set(new Uint8Array(i),t),n.size},write:function(e,a,t,r,c){throw new FS.ErrnoError(ERRNO_CODES.EIO)},llseek:function(e,a,t){var r=a;if(1===t?r+=e.position:2===t&&FS.isFile(e.node.mode)&&(r+=e.node.size),r<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return r}}};STATICTOP+=16,STATICTOP+=16,STATICTOP+=16;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(e,a){if(e=PATH.resolve(FS.cwd(),e),a=a||{},!e)return{path:"",node:null};var t={follow_mount:!0,recurse_count:0};for(var r in t)void 0===a[r]&&(a[r]=t[r]);if(a.recurse_count>8)throw new FS.ErrnoError(ERRNO_CODES.ELOOP);for(var c=PATH.normalizeArray(e.split("/").filter(function(e){return!!e}),!1),n=FS.root,i="/",f=0;f<c.length;f++){var o=f===c.length-1;if(o&&a.parent)break;if(n=FS.lookupNode(n,c[f]),i=PATH.join2(i,c[f]),FS.isMountpoint(n)&&(!o||o&&a.follow_mount)&&(n=n.mounted.root),!o||a.follow)for(var d=0;FS.isLink(n.mode);){var s=FS.readlink(i);if(i=PATH.resolve(PATH.dirname(i),s),n=FS.lookupPath(i,{recurse_count:a.recurse_count}).node,d++>40)throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}return{path:i,node:n}},getPath:function(e){for(var a;;){if(FS.isRoot(e)){var t=e.mount.mountpoint;return a?"/"!==t[t.length-1]?t+"/"+a:t+a:t}a=a?e.name+"/"+a:e.name,e=e.parent}},hashName:function(e,a){for(var t=0,r=0;r<a.length;r++)t=(t<<5)-t+a.charCodeAt(r)|0;return(e+t>>>0)%FS.nameTable.length},hashAddNode:function(e){var a=FS.hashName(e.parent.id,e.name);e.name_next=FS.nameTable[a],FS.nameTable[a]=e},hashRemoveNode:function(e){var a=FS.hashName(e.parent.id,e.name);if(FS.nameTable[a]===e)FS.nameTable[a]=e.name_next;else for(var t=FS.nameTable[a];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode:function(e,a){var t=FS.mayLookup(e);if(t)throw new FS.ErrnoError(t,e);for(var r=FS.hashName(e.id,a),c=FS.nameTable[r];c;c=c.name_next){var n=c.name;if(c.parent.id===e.id&&n===a)return c}return FS.lookup(e,a)},createNode:function(e,a,t,r){if(!FS.FSNode){FS.FSNode=function(e,a,t,r){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=FS.nextInode++,this.name=a,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=r},FS.FSNode.prototype={};Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(e){e?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(e){e?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var c=new FS.FSNode(e,a,t,r);return FS.hashAddNode(c),c},destroyNode:function(e){FS.hashRemoveNode(e)},isRoot:function(e){return e===e.parent},isMountpoint:function(e){return!!e.mounted},isFile:function(e){return 32768==(61440&e)},isDir:function(e){return 16384==(61440&e)},isLink:function(e){return 40960==(61440&e)},isChrdev:function(e){return 8192==(61440&e)},isBlkdev:function(e){return 24576==(61440&e)},isFIFO:function(e){return 4096==(61440&e)},isSocket:function(e){return 49152==(49152&e)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(e){var a=FS.flagModes[e];if(void 0===a)throw new Error("Unknown file open mode: "+e);return a},flagsToPermissionString:function(e){var a=["r","w","rw"][3&e];return 512&e&&(a+="w"),a},nodePermissions:function(e,a){return FS.ignorePermissions?0:(-1===a.indexOf("r")||292&e.mode)&&(-1===a.indexOf("w")||146&e.mode)&&(-1===a.indexOf("x")||73&e.mode)?0:ERRNO_CODES.EACCES},mayLookup:function(e){var a=FS.nodePermissions(e,"x");return a||(e.node_ops.lookup?0:ERRNO_CODES.EACCES)},mayCreate:function(e,a){try{FS.lookupNode(e,a);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(e,"wx")},mayDelete:function(e,a,t){var r;try{r=FS.lookupNode(e,a)}catch(e){return e.errno}var c=FS.nodePermissions(e,"wx");if(c)return c;if(t){if(!FS.isDir(r.mode))return ERRNO_CODES.ENOTDIR;if(FS.isRoot(r)||FS.getPath(r)===FS.cwd())return ERRNO_CODES.EBUSY}else if(FS.isDir(r.mode))return ERRNO_CODES.EISDIR;return 0},mayOpen:function(e,a){return e?FS.isLink(e.mode)?ERRNO_CODES.ELOOP:FS.isDir(e.mode)&&("r"!==FS.flagsToPermissionString(a)||512&a)?ERRNO_CODES.EISDIR:FS.nodePermissions(e,FS.flagsToPermissionString(a)):ERRNO_CODES.ENOENT},MAX_OPEN_FDS:4096,nextfd:function(e,a){e=e||0,a=a||FS.MAX_OPEN_FDS;for(var t=e;t<=a;t++)if(!FS.streams[t])return t;throw new FS.ErrnoError(ERRNO_CODES.EMFILE)},getStream:function(e){return FS.streams[e]},createStream:function(e,a,t){FS.FSStream||(FS.FSStream=function(){},FS.FSStream.prototype={},Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var r=new FS.FSStream;for(var c in e)r[c]=e[c];e=r;var n=FS.nextfd(a,t);return e.fd=n,FS.streams[n]=e,e},closeStream:function(e){FS.streams[e]=null},chrdev_stream_ops:{open:function(e){var a=FS.getDevice(e.node.rdev);e.stream_ops=a.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}},major:function(e){return e>>8},minor:function(e){return 255&e},makedev:function(e,a){return e<<8|a},registerDevice:function(e,a){FS.devices[e]={stream_ops:a}},getDevice:function(e){return FS.devices[e]},getMounts:function(e){for(var a=[],t=[e];t.length;){var r=t.pop();a.push(r),t.push.apply(t,r.mounts)}return a},syncfs:function(e,a){"function"==typeof e&&(a=e,e=!1),FS.syncFSRequests++,FS.syncFSRequests>1&&console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=FS.getMounts(FS.root.mount),r=0;function c(e){return assert(FS.syncFSRequests>0),FS.syncFSRequests--,a(e)}function n(e){if(e)return n.errored?void 0:(n.errored=!0,c(e));++r>=t.length&&c(null)}t.forEach(function(a){if(!a.type.syncfs)return n(null);a.type.syncfs(a,e,n)})},mount:function(e,a,t){var r,c="/"===t,n=!t;if(c&&FS.root)throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(!c&&!n){var i=FS.lookupPath(t,{follow_mount:!1});if(t=i.path,r=i.node,FS.isMountpoint(r))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(!FS.isDir(r.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var f={type:e,opts:a,mountpoint:t,mounts:[]},o=e.mount(f);return o.mount=f,f.root=o,c?FS.root=o:r&&(r.mounted=f,r.mount&&r.mount.mounts.push(f)),o},unmount:function(e){var a=FS.lookupPath(e,{follow_mount:!1});if(!FS.isMountpoint(a.node))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var t=a.node,r=t.mounted,c=FS.getMounts(r);Object.keys(FS.nameTable).forEach(function(e){for(var a=FS.nameTable[e];a;){var t=a.name_next;-1!==c.indexOf(a.mount)&&FS.destroyNode(a),a=t}}),t.mounted=null;var n=t.mount.mounts.indexOf(r);assert(-1!==n),t.mount.mounts.splice(n,1)},lookup:function(e,a){return e.node_ops.lookup(e,a)},mknod:function(e,a,t){var r=FS.lookupPath(e,{parent:!0}).node,c=PATH.basename(e);if(!c||"."===c||".."===c)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var n=FS.mayCreate(r,c);if(n)throw new FS.ErrnoError(n);if(!r.node_ops.mknod)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return r.node_ops.mknod(r,c,a,t)},create:function(e,a){return a=void 0!==a?a:438,a&=4095,a|=32768,FS.mknod(e,a,0)},mkdir:function(e,a){return a=void 0!==a?a:511,a&=1023,a|=16384,FS.mknod(e,a,0)},mkdirTree:function(e,a){for(var t=e.split("/"),r="",c=0;c<t.length;++c)if(t[c]){r+="/"+t[c];try{FS.mkdir(r,a)}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e}}},mkdev:function(e,a,t){return void 0===t&&(t=a,a=438),a|=8192,FS.mknod(e,a,t)},symlink:function(e,a){if(!PATH.resolve(e))throw new FS.ErrnoError(ERRNO_CODES.ENOENT);var t=FS.lookupPath(a,{parent:!0}).node;if(!t)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);var r=PATH.basename(a),c=FS.mayCreate(t,r);if(c)throw new FS.ErrnoError(c);if(!t.node_ops.symlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return t.node_ops.symlink(t,r,e)},rename:function(e,a){var t,r,c=PATH.dirname(e),n=PATH.dirname(a),i=PATH.basename(e),f=PATH.basename(a);try{t=FS.lookupPath(e,{parent:!0}).node,r=FS.lookupPath(a,{parent:!0}).node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!t||!r)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(t.mount!==r.mount)throw new FS.ErrnoError(ERRNO_CODES.EXDEV);var o,d=FS.lookupNode(t,i),s=PATH.relative(e,n);if("."!==s.charAt(0))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if("."!==(s=PATH.relative(a,c)).charAt(0))throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);try{o=FS.lookupNode(r,f)}catch(e){}if(d!==o){var b=FS.isDir(d.mode),u=FS.mayDelete(t,i,b);if(u)throw new FS.ErrnoError(u);if(u=o?FS.mayDelete(r,f,b):FS.mayCreate(r,f))throw new FS.ErrnoError(u);if(!t.node_ops.rename)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(d)||o&&FS.isMountpoint(o))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);if(r!==t&&(u=FS.nodePermissions(t,"w")))throw new FS.ErrnoError(u);try{FS.trackingDelegate.willMovePath&&FS.trackingDelegate.willMovePath(e,a)}catch(t){console.log("FS.trackingDelegate['willMovePath']('"+e+"', '"+a+"') threw an exception: "+t.message)}FS.hashRemoveNode(d);try{t.node_ops.rename(d,r,f)}catch(e){throw e}finally{FS.hashAddNode(d)}try{FS.trackingDelegate.onMovePath&&FS.trackingDelegate.onMovePath(e,a)}catch(t){console.log("FS.trackingDelegate['onMovePath']('"+e+"', '"+a+"') threw an exception: "+t.message)}}},rmdir:function(e){var a=FS.lookupPath(e,{parent:!0}).node,t=PATH.basename(e),r=FS.lookupNode(a,t),c=FS.mayDelete(a,t,!0);if(c)throw new FS.ErrnoError(c);if(!a.node_ops.rmdir)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(r))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}a.node_ops.rmdir(a,t),FS.destroyNode(r);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readdir:function(e){var a=FS.lookupPath(e,{follow:!0}).node;if(!a.node_ops.readdir)throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);return a.node_ops.readdir(a)},unlink:function(e){var a=FS.lookupPath(e,{parent:!0}).node,t=PATH.basename(e),r=FS.lookupNode(a,t),c=FS.mayDelete(a,t,!1);if(c)throw new FS.ErrnoError(c);if(!a.node_ops.unlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(r))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}a.node_ops.unlink(a,t),FS.destroyNode(r);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readlink:function(e){var a=FS.lookupPath(e).node;if(!a)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!a.node_ops.readlink)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return PATH.resolve(FS.getPath(a.parent),a.node_ops.readlink(a))},stat:function(e,a){var t=FS.lookupPath(e,{follow:!a}).node;if(!t)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!t.node_ops.getattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return t.node_ops.getattr(t)},lstat:function(e){return FS.stat(e,!0)},chmod:function(e,a,t){var r;"string"==typeof e?r=FS.lookupPath(e,{follow:!t}).node:r=e;if(!r.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);r.node_ops.setattr(r,{mode:4095&a|-4096&r.mode,timestamp:Date.now()})},lchmod:function(e,a){FS.chmod(e,a,!0)},fchmod:function(e,a){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chmod(t.node,a)},chown:function(e,a,t,r){var c;"string"==typeof e?c=FS.lookupPath(e,{follow:!r}).node:c=e;if(!c.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);c.node_ops.setattr(c,{timestamp:Date.now()})},lchown:function(e,a,t){FS.chown(e,a,t,!0)},fchown:function(e,a,t){var r=FS.getStream(e);if(!r)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chown(r.node,a,t)},truncate:function(e,a){if(a<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var t;"string"==typeof e?t=FS.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isDir(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!FS.isFile(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var r=FS.nodePermissions(t,"w");if(r)throw new FS.ErrnoError(r);t.node_ops.setattr(t,{size:a,timestamp:Date.now()})},ftruncate:function(e,a){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(0==(2097155&t.flags))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);FS.truncate(t.node,a)},utime:function(e,a,t){var r=FS.lookupPath(e,{follow:!0}).node;r.node_ops.setattr(r,{timestamp:Math.max(a,t)})},open:function(e,a,t,r,c){if(""===e)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);var n;if(a="string"==typeof a?FS.modeStringToFlags(a):a,t=void 0===t?438:t,t=64&a?4095&t|32768:0,"object"==typeof e)n=e;else{e=PATH.normalize(e);try{n=FS.lookupPath(e,{follow:!(131072&a)}).node}catch(e){}}var i=!1;if(64&a)if(n){if(128&a)throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}else n=FS.mknod(e,t,0),i=!0;if(!n)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(FS.isChrdev(n.mode)&&(a&=-513),65536&a&&!FS.isDir(n.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);if(!i){var f=FS.mayOpen(n,a);if(f)throw new FS.ErrnoError(f)}512&a&&FS.truncate(n,0),a&=-641;var o=FS.createStream({node:n,path:FS.getPath(n),flags:a,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1},r,c);o.stream_ops.open&&o.stream_ops.open(o),!Module.logReadFiles||1&a||(FS.readFiles||(FS.readFiles={}),e in FS.readFiles||(FS.readFiles[e]=1,Module.printErr("read file: "+e)));try{if(FS.trackingDelegate.onOpenFile){var d=0;1!=(2097155&a)&&(d|=FS.tracking.openFlags.READ),0!=(2097155&a)&&(d|=FS.tracking.openFlags.WRITE),FS.trackingDelegate.onOpenFile(e,d)}}catch(a){console.log("FS.trackingDelegate['onOpenFile']('"+e+"', flags) threw an exception: "+a.message)}return o},close:function(e){e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{FS.closeStream(e.fd)}},llseek:function(e,a,t){if(!e.seekable||!e.stream_ops.llseek)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);return e.position=e.stream_ops.llseek(e,a,t),e.ungotten=[],e.position},read:function(e,a,t,r,c){if(r<0||c<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(1==(2097155&e.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(FS.isDir(e.node.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!e.stream_ops.read)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var n=!0;if(void 0===c)c=e.position,n=!1;else if(!e.seekable)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);var i=e.stream_ops.read(e,a,t,r,c);return n||(e.position+=i),i},write:function(e,a,t,r,c,n){if(r<0||c<0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(0==(2097155&e.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(FS.isDir(e.node.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!e.stream_ops.write)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);1024&e.flags&&FS.llseek(e,0,2);var i=!0;if(void 0===c)c=e.position,i=!1;else if(!e.seekable)throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);var f=e.stream_ops.write(e,a,t,r,c,n);i||(e.position+=f);try{e.path&&FS.trackingDelegate.onWriteToFile&&FS.trackingDelegate.onWriteToFile(e.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return f},allocate:function(e,a,t){if(a<0||t<=0)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);if(0==(2097155&e.flags))throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(!FS.isFile(e.node.mode)&&!FS.isDir(e.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENODEV);if(!e.stream_ops.allocate)throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);e.stream_ops.allocate(e,a,t)},mmap:function(e,a,t,r,c,n,i){if(1==(2097155&e.flags))throw new FS.ErrnoError(ERRNO_CODES.EACCES);if(!e.stream_ops.mmap)throw new FS.ErrnoError(ERRNO_CODES.ENODEV);return e.stream_ops.mmap(e,a,t,r,c,n,i)},msync:function(e,a,t,r,c){return e&&e.stream_ops.msync?e.stream_ops.msync(e,a,t,r,c):0},munmap:function(e){return 0},ioctl:function(e,a,t){if(!e.stream_ops.ioctl)throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);return e.stream_ops.ioctl(e,a,t)},readFile:function(e,a){if((a=a||{}).flags=a.flags||"r",a.encoding=a.encoding||"binary","utf8"!==a.encoding&&"binary"!==a.encoding)throw new Error('Invalid encoding type "'+a.encoding+'"');var t,r=FS.open(e,a.flags),c=FS.stat(e).size,n=new Uint8Array(c);return FS.read(r,n,0,c,0),"utf8"===a.encoding?t=UTF8ArrayToString(n,0):"binary"===a.encoding&&(t=n),FS.close(r),t},writeFile:function(e,a,t){if((t=t||{}).flags=t.flags||"w",t.encoding=t.encoding||"utf8","utf8"!==t.encoding&&"binary"!==t.encoding)throw new Error('Invalid encoding type "'+t.encoding+'"');var r=FS.open(e,t.flags,t.mode);if("utf8"===t.encoding){var c=new Uint8Array(lengthBytesUTF8(a)+1),n=stringToUTF8Array(a,c,0,c.length);FS.write(r,c,0,n,0,t.canOwn)}else"binary"===t.encoding&&FS.write(r,a,0,a.length,0,t.canOwn);FS.close(r)},cwd:function(){return FS.currentPath},chdir:function(e){var a=FS.lookupPath(e,{follow:!0});if(null===a.node)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!FS.isDir(a.node.mode))throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);var t=FS.nodePermissions(a.node,"x");if(t)throw new FS.ErrnoError(t);FS.currentPath=a.path},createDefaultDirectories:function(){FS.mkdir("/tmp"),FS.mkdir("/home"),FS.mkdir("/home/web_user")},createDefaultDevices:function(){var e;if(FS.mkdir("/dev"),FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(e,a,t,r,c){return r}}),FS.mkdev("/dev/null",FS.makedev(1,3)),TTY.register(FS.makedev(5,0),TTY.default_tty_ops),TTY.register(FS.makedev(6,0),TTY.default_tty1_ops),FS.mkdev("/dev/tty",FS.makedev(5,0)),FS.mkdev("/dev/tty1",FS.makedev(6,0)),"undefined"!=typeof crypto){var a=new Uint8Array(1);e=function(){return crypto.getRandomValues(a),a[0]}}else e=ENVIRONMENT_IS_NODE?function(){return __webpack_require__(10).randomBytes(1)[0]}:function(){return 256*Math.random()|0};FS.createDevice("/dev","random",e),FS.createDevice("/dev","urandom",e),FS.mkdir("/dev/shm"),FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc"),FS.mkdir("/proc/self"),FS.mkdir("/proc/self/fd"),FS.mount({mount:function(){var e=FS.createNode("/proc/self","fd",16895,73);return e.node_ops={lookup:function(e,a){var t=+a,r=FS.getStream(t);if(!r)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var c={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:function(){return r.path}}};return c.parent=c,c}},e}},{},"/proc/self/fd")},createStandardStreams:function(){Module.stdin?FS.createDevice("/dev","stdin",Module.stdin):FS.symlink("/dev/tty","/dev/stdin"),Module.stdout?FS.createDevice("/dev","stdout",null,Module.stdout):FS.symlink("/dev/tty","/dev/stdout"),Module.stderr?FS.createDevice("/dev","stderr",null,Module.stderr):FS.symlink("/dev/tty1","/dev/stderr");var e=FS.open("/dev/stdin","r");assert(0===e.fd,"invalid handle for stdin ("+e.fd+")");var a=FS.open("/dev/stdout","w");assert(1===a.fd,"invalid handle for stdout ("+a.fd+")");var t=FS.open("/dev/stderr","w");assert(2===t.fd,"invalid handle for stderr ("+t.fd+")")},ensureErrnoError:function(){FS.ErrnoError||(FS.ErrnoError=function(e,a){this.node=a,this.setErrno=function(e){for(var a in this.errno=e,ERRNO_CODES)if(ERRNO_CODES[a]===e){this.code=a;break}},this.setErrno(e),this.message=ERRNO_MESSAGES[e]},FS.ErrnoError.prototype=new Error,FS.ErrnoError.prototype.constructor=FS.ErrnoError,[ERRNO_CODES.ENOENT].forEach(function(e){FS.genericErrors[e]=new FS.ErrnoError(e),FS.genericErrors[e].stack="<generic error, no stack>"}))},staticInit:function(){FS.ensureErrnoError(),FS.nameTable=new Array(4096),FS.mount(MEMFS,{},"/"),FS.createDefaultDirectories(),FS.createDefaultDevices(),FS.createSpecialDirectories(),FS.filesystems={MEMFS:MEMFS,IDBFS:IDBFS,NODEFS:NODEFS,WORKERFS:WORKERFS}},init:function(e,a,t){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),FS.init.initialized=!0,FS.ensureErrnoError(),Module.stdin=e||Module.stdin,Module.stdout=a||Module.stdout,Module.stderr=t||Module.stderr,FS.createStandardStreams()},quit:function(){FS.init.initialized=!1;var e=Module._fflush;e&&e(0);for(var a=0;a<FS.streams.length;a++){var t=FS.streams[a];t&&FS.close(t)}},getMode:function(e,a){var t=0;return e&&(t|=365),a&&(t|=146),t},joinPath:function(e,a){var t=PATH.join.apply(null,e);return a&&"/"==t[0]&&(t=t.substr(1)),t},absolutePath:function(e,a){return PATH.resolve(a,e)},standardizePath:function(e){return PATH.normalize(e)},findObject:function(e,a){var t=FS.analyzePath(e,a);return t.exists?t.object:(___setErrNo(t.error),null)},analyzePath:function(e,a){try{e=(r=FS.lookupPath(e,{follow:!a})).path}catch(e){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var r=FS.lookupPath(e,{parent:!0});t.parentExists=!0,t.parentPath=r.path,t.parentObject=r.node,t.name=PATH.basename(e),r=FS.lookupPath(e,{follow:!a}),t.exists=!0,t.path=r.path,t.object=r.node,t.name=r.node.name,t.isRoot="/"===r.path}catch(e){t.error=e.errno}return t},createFolder:function(e,a,t,r){var c=PATH.join2("string"==typeof e?e:FS.getPath(e),a),n=FS.getMode(t,r);return FS.mkdir(c,n)},createPath:function(e,a,t,r){e="string"==typeof e?e:FS.getPath(e);for(var c=a.split("/").reverse();c.length;){var n=c.pop();if(n){var i=PATH.join2(e,n);try{FS.mkdir(i)}catch(e){}e=i}}return i},createFile:function(e,a,t,r,c){var n=PATH.join2("string"==typeof e?e:FS.getPath(e),a),i=FS.getMode(r,c);return FS.create(n,i)},createDataFile:function(e,a,t,r,c,n){var i=a?PATH.join2("string"==typeof e?e:FS.getPath(e),a):e,f=FS.getMode(r,c),o=FS.create(i,f);if(t){if("string"==typeof t){for(var d=new Array(t.length),s=0,b=t.length;s<b;++s)d[s]=t.charCodeAt(s);t=d}FS.chmod(o,146|f);var u=FS.open(o,"w");FS.write(u,t,0,t.length,0,n),FS.close(u),FS.chmod(o,f)}return o},createDevice:function(e,a,t,r){var c=PATH.join2("string"==typeof e?e:FS.getPath(e),a),n=FS.getMode(!!t,!!r);FS.createDevice.major||(FS.createDevice.major=64);var i=FS.makedev(FS.createDevice.major++,0);return FS.registerDevice(i,{open:function(e){e.seekable=!1},close:function(e){r&&r.buffer&&r.buffer.length&&r(10)},read:function(e,a,r,c,n){for(var i=0,f=0;f<c;f++){var o;try{o=t()}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(void 0===o&&0===i)throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);if(null===o||void 0===o)break;i++,a[r+f]=o}return i&&(e.node.timestamp=Date.now()),i},write:function(e,a,t,c,n){for(var i=0;i<c;i++)try{r(a[t+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return c&&(e.node.timestamp=Date.now()),i}}),FS.mkdev(c,n,i)},createLink:function(e,a,t,r,c){var n=PATH.join2("string"==typeof e?e:FS.getPath(e),a);return FS.symlink(t,n)},forceLoadFile:function(e){if(e.isDevice||e.isFolder||e.link||e.contents)return!0;var a=!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!Module.read)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=intArrayFromString(Module.read(e.url),!0),e.usedBytes=e.contents.length}catch(e){a=!1}return a||___setErrNo(ERRNO_CODES.EIO),a},createLazyFile:function(e,a,t,r,c){function n(){this.lengthKnown=!1,this.chunks=[]}if(n.prototype.get=function(e){if(!(e>this.length-1||e<0)){var a=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[a]}},n.prototype.setDataGetter=function(e){this.getter=e},n.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var a,r=Number(e.getResponseHeader("Content-length")),c=(a=e.getResponseHeader("Accept-Ranges"))&&"bytes"===a,n=(a=e.getResponseHeader("Content-Encoding"))&&"gzip"===a,i=1048576;c||(i=r);var f=this;f.setDataGetter(function(e){var a=e*i,c=(e+1)*i-1;if(c=Math.min(c,r-1),void 0===f.chunks[e]&&(f.chunks[e]=function(e,a){if(e>a)throw new Error("invalid range ("+e+", "+a+") or no bytes requested!");if(a>r-1)throw new Error("only "+r+" bytes available! programmer error!");var c=new XMLHttpRequest;if(c.open("GET",t,!1),r!==i&&c.setRequestHeader("Range","bytes="+e+"-"+a),"undefined"!=typeof Uint8Array&&(c.responseType="arraybuffer"),c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.send(null),!(c.status>=200&&c.status<300||304===c.status))throw new Error("Couldn't load "+t+". Status: "+c.status);return void 0!==c.response?new Uint8Array(c.response||[]):intArrayFromString(c.responseText||"",!0)}(a,c)),void 0===f.chunks[e])throw new Error("doXHR failed!");return f.chunks[e]}),!n&&r||(i=r=1,r=this.getter(0).length,i=r,console.log("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=r,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new n;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var f={isDevice:!1,contents:i}}else f={isDevice:!1,url:t};var o=FS.createFile(e,a,f,r,c);f.contents?o.contents=f.contents:f.url&&(o.contents=null,o.url=f.url),Object.defineProperties(o,{usedBytes:{get:function(){return this.contents.length}}});var d={};return Object.keys(o.stream_ops).forEach(function(e){var a=o.stream_ops[e];d[e]=function(){if(!FS.forceLoadFile(o))throw new FS.ErrnoError(ERRNO_CODES.EIO);return a.apply(null,arguments)}}),d.read=function(e,a,t,r,c){if(!FS.forceLoadFile(o))throw new FS.ErrnoError(ERRNO_CODES.EIO);var n=e.node.contents;if(c>=n.length)return 0;var i=Math.min(n.length-c,r);if(assert(i>=0),n.slice)for(var f=0;f<i;f++)a[t+f]=n[c+f];else for(f=0;f<i;f++)a[t+f]=n.get(c+f);return i},o.stream_ops=d,o},createPreloadedFile:function(e,a,t,r,c,n,i,f,o,d){Browser.init();var s=a?PATH.resolve(PATH.join2(e,a)):e,b=getUniqueRunDependency("cp "+s);function u(t){function u(t){d&&d(),f||FS.createDataFile(e,a,t,r,c,o),n&&n(),removeRunDependency(b)}var l=!1;Module.preloadPlugins.forEach(function(e){l||e.canHandle(s)&&(e.handle(t,s,u,function(){i&&i(),removeRunDependency(b)}),l=!0)}),l||u(t)}addRunDependency(b),"string"==typeof t?Browser.asyncLoad(t,function(e){u(e)},i):u(t)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(e,a,t){a=a||function(){},t=t||function(){};var r=FS.indexedDB();try{var c=r.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return t(e)}c.onupgradeneeded=function(){console.log("creating db"),c.result.createObjectStore(FS.DB_STORE_NAME)},c.onsuccess=function(){var r=c.result.transaction([FS.DB_STORE_NAME],"readwrite"),n=r.objectStore(FS.DB_STORE_NAME),i=0,f=0,o=e.length;function d(){0==f?a():t()}e.forEach(function(e){var a=n.put(FS.analyzePath(e).object.contents,e);a.onsuccess=function(){++i+f==o&&d()},a.onerror=function(){i+ ++f==o&&d()}}),r.onerror=t},c.onerror=t},loadFilesFromDB:function(e,a,t){a=a||function(){},t=t||function(){};var r=FS.indexedDB();try{var c=r.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return t(e)}c.onupgradeneeded=t,c.onsuccess=function(){var r=c.result;try{var n=r.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){return void t(e)}var i=n.objectStore(FS.DB_STORE_NAME),f=0,o=0,d=e.length;function s(){0==o?a():t()}e.forEach(function(e){var a=i.get(e);a.onsuccess=function(){FS.analyzePath(e).exists&&FS.unlink(e),FS.createDataFile(PATH.dirname(e),PATH.basename(e),a.result,!0,!0,!0),++f+o==d&&s()},a.onerror=function(){f+ ++o==d&&s()}}),n.onerror=t},c.onerror=t}},SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(e,a){if("/"!==a[0]){var t;if(-100===e)t=FS.cwd();else{var r=FS.getStream(e);if(!r)throw new FS.ErrnoError(ERRNO_CODES.EBADF);t=r.path}a=PATH.join2(t,a)}return a},doStat:function(e,a,t){try{var r=e(a)}catch(e){if(e&&e.node&&PATH.normalize(a)!==PATH.normalize(FS.getPath(e.node)))return-ERRNO_CODES.ENOTDIR;throw e}return HEAP32[t>>2]=r.dev,HEAP32[t+4>>2]=0,HEAP32[t+8>>2]=r.ino,HEAP32[t+12>>2]=r.mode,HEAP32[t+16>>2]=r.nlink,HEAP32[t+20>>2]=r.uid,HEAP32[t+24>>2]=r.gid,HEAP32[t+28>>2]=r.rdev,HEAP32[t+32>>2]=0,HEAP32[t+36>>2]=r.size,HEAP32[t+40>>2]=4096,HEAP32[t+44>>2]=r.blocks,HEAP32[t+48>>2]=r.atime.getTime()/1e3|0,HEAP32[t+52>>2]=0,HEAP32[t+56>>2]=r.mtime.getTime()/1e3|0,HEAP32[t+60>>2]=0,HEAP32[t+64>>2]=r.ctime.getTime()/1e3|0,HEAP32[t+68>>2]=0,HEAP32[t+72>>2]=r.ino,0},doMsync:function(e,a,t,r){var c=new Uint8Array(HEAPU8.subarray(e,e+t));FS.msync(a,c,0,t,r)},doMkdir:function(e,a){return"/"===(e=PATH.normalize(e))[e.length-1]&&(e=e.substr(0,e.length-1)),FS.mkdir(e,a,0),0},doMknod:function(e,a,t){switch(61440&a){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}return FS.mknod(e,a,t),0},doReadlink:function(e,a,t){if(t<=0)return-ERRNO_CODES.EINVAL;var r=FS.readlink(e),c=Math.min(t,lengthBytesUTF8(r)),n=HEAP8[a+c];return stringToUTF8(r,a,t+1),HEAP8[a+c]=n,c},doAccess:function(e,a){if(-8&a)return-ERRNO_CODES.EINVAL;var t;t=FS.lookupPath(e,{follow:!0}).node;var r="";return 4&a&&(r+="r"),2&a&&(r+="w"),1&a&&(r+="x"),r&&FS.nodePermissions(t,r)?-ERRNO_CODES.EACCES:0},doDup:function(e,a,t){var r=FS.getStream(t);return r&&FS.close(r),FS.open(e,a,0,t,t).fd},doReadv:function(e,a,t,r){for(var c=0,n=0;n<t;n++){var i=HEAP32[a+8*n>>2],f=HEAP32[a+(8*n+4)>>2],o=FS.read(e,HEAP8,i,f,r);if(o<0)return-1;if(c+=o,o<f)break}return c},doWritev:function(e,a,t,r){for(var c=0,n=0;n<t;n++){var i=HEAP32[a+8*n>>2],f=HEAP32[a+(8*n+4)>>2],o=FS.write(e,HEAP8,i,f,r);if(o<0)return-1;c+=o}return c},varargs:0,get:function(e){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},getStreamFromFD:function(){var e=FS.getStream(SYSCALLS.get());if(!e)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return e},getSocketFromFD:function(){var e=SOCKFS.getSocket(SYSCALLS.get());if(!e)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return e},getSocketAddress:function(e){var a=SYSCALLS.get(),t=SYSCALLS.get();if(e&&0===a)return null;var r=__read_sockaddr(a,t);if(r.errno)throw new FS.ErrnoError(r.errno);return r.addr=DNS.lookup_addr(r.addr)||r.addr,r},get64:function(){var e=SYSCALLS.get(),a=SYSCALLS.get();return assert(e>=0?0===a:-1===a),e},getZero:function(){assert(0===SYSCALLS.get())}};function ___syscall54(e,a){SYSCALLS.varargs=a;try{var t=SYSCALLS.getStreamFromFD(),r=SYSCALLS.get();switch(r){case 21505:case 21506:return t.tty?0:-ERRNO_CODES.ENOTTY;case 21519:if(!t.tty)return-ERRNO_CODES.ENOTTY;var c=SYSCALLS.get();return HEAP32[c>>2]=0,0;case 21520:return t.tty?-ERRNO_CODES.EINVAL:-ERRNO_CODES.ENOTTY;case 21531:c=SYSCALLS.get();return FS.ioctl(t,r,c);case 21523:return t.tty?0:-ERRNO_CODES.ENOTTY;default:abort("bad ioctl syscall "+r)}}catch(e){return void 0!==FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function __Unwind_GetIPInfo(){abort("Unwind_GetIPInfo")}function _llvm_trap(){abort("trap!")}function _pthread_cond_init(){return 0}function __emscripten_traverse_stack(e){if(!e||!e.callee||!e.callee.name)return[null,"",""];e.callee.toString();var a=e.callee.name,t="(",r=!0;for(i in e){var c=e[i];r||(t+=", "),r=!1,t+="number"==typeof c||"string"==typeof c?c:"("+typeof c+")"}t+=")";var n=e.callee.caller;return e=n?n.arguments:[],r&&(t=""),[e,a,t]}function _emscripten_get_callstack_js(e){var a=jsStackTrace(),t=a.lastIndexOf("_emscripten_log"),r=a.lastIndexOf("_emscripten_get_callstack"),c=a.indexOf("\n",Math.max(t,r))+1;a=a.slice(c),8&e&&"undefined"==typeof emscripten_source_map&&(Runtime.warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.'),e^=8,e|=16);var n=null;if(128&e)for(n=__emscripten_traverse_stack(arguments);n[1].indexOf("_emscripten_")>=0;)n=__emscripten_traverse_stack(n[0]);lines=a.split("\n"),a="";var i=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),f=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"),o=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(l in lines){var d=lines[l],s="",b="",u=0,p=0,h=o.exec(d);if(h&&5==h.length)s=h[1],b=h[2],u=h[3],p=h[4];else{if((h=i.exec(d))||(h=f.exec(d)),!(h&&h.length>=4)){a+=d+"\n";continue}s=h[1],b=h[2],u=h[3],p=0|h[4]}var m=32&e?demangle(s):s;m||(m=s);var g=!1;if(8&e){var v=emscripten_source_map.originalPositionFor({line:u,column:p});(g=v&&v.source)&&(64&e&&(v.source=v.source.substring(v.source.replace(/\\/g,"/").lastIndexOf("/")+1)),a+="    at "+m+" ("+v.source+":"+v.line+":"+v.column+")\n")}(16&e||!g)&&(64&e&&(b=b.substring(b.replace(/\\/g,"/").lastIndexOf("/")+1)),a+=(g?"     = "+s:"    at "+m)+" ("+b+":"+u+":"+p+")\n"),128&e&&n[0]&&(n[1]==s&&n[2].length>0&&(a=a.replace(/\s+$/,""),a+=" with values: "+n[1]+n[2]+"\n"),n=__emscripten_traverse_stack(n[0]))}return a=a.replace(/\s+$/,"")}function __Unwind_Backtrace(e,a){for(var t=_emscripten_get_callstack_js().split("\n"),r=0;r<t.length;r++){if(0!==Module.dynCall_iii(e,0,a))return}}function _pthread_condattr_setclock(){return 0}var _environ=STATICTOP;function ___buildEnvironment(e){var a,t;___buildEnvironment.called?(t=HEAP32[_environ>>2],a=HEAP32[t>>2]):(___buildEnvironment.called=!0,ENV.USER=ENV.LOGNAME="web_user",ENV.PATH="/",ENV.PWD="/",ENV.HOME="/home/web_user",ENV.LANG="C",ENV._=Module.thisProgram,a=allocate(1024,"i8",ALLOC_STATIC),t=allocate(256,"i8*",ALLOC_STATIC),HEAP32[t>>2]=a,HEAP32[_environ>>2]=t);var r=[],c=0;for(var n in e)if("string"==typeof e[n]){var i=n+"="+e[n];r.push(i),c+=i.length}if(c>1024)throw new Error("Environment size exceeded TOTAL_ENV_SIZE!");for(var f=0;f<r.length;f++){writeAsciiToMemory(i=r[f],a),HEAP32[t+4*f>>2]=a,a+=i.length+1}HEAP32[t+4*r.length>>2]=0}STATICTOP+=16;var ENV={},ASSERTIONS;function _getenv(e){return 0===e?0:(e=Pointer_stringify(e),ENV.hasOwnProperty(e)?(_getenv.ret&&_free(_getenv.ret),_getenv.ret=allocate(intArrayFromString(ENV[e]),"i8",ALLOC_NORMAL),_getenv.ret):0)}function _pthread_rwlock_rdlock(){return 0}function ___cxa_find_matching_catch_3(){return ___cxa_find_matching_catch.apply(null,arguments)}function _pthread_cond_signal(){return 0}function _emscripten_memcpy_big(e,a,t){return HEAPU8.set(HEAPU8.subarray(a,a+t),e),e}function ___syscall6(e,a){SYSCALLS.varargs=a;try{var t=SYSCALLS.getStreamFromFD();return FS.close(t),0}catch(e){return void 0!==FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function _dladdr(e,a){var t=allocate(intArrayFromString(Module.thisProgram||"./this.program"),"i8",ALLOC_NORMAL);return HEAP32[e>>2]=t,HEAP32[e+4>>2]=0,HEAP32[e+8>>2]=0,HEAP32[e+12>>2]=0,1}function ___gxx_personality_v0(){}function _pthread_mutex_destroy(){}function _pthread_cond_wait(){return 0}function ___syscall4(e,a){SYSCALLS.varargs=a;try{var t=SYSCALLS.getStreamFromFD(),r=SYSCALLS.get(),c=SYSCALLS.get();return FS.write(t,HEAP8,r,c)}catch(e){return void 0!==FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function _pthread_condattr_init(){return 0}function ___cxa_find_matching_catch_2(){return ___cxa_find_matching_catch.apply(null,arguments)}function ___syscall140(e,a){SYSCALLS.varargs=a;try{var t=SYSCALLS.getStreamFromFD(),r=(SYSCALLS.get(),SYSCALLS.get()),c=SYSCALLS.get(),n=SYSCALLS.get(),i=r;return FS.llseek(t,i,n),HEAP32[c>>2]=t.position,t.getdents&&0===i&&0===n&&(t.getdents=null),0}catch(e){return void 0!==FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall146(e,a){SYSCALLS.varargs=a;try{var t=SYSCALLS.getStreamFromFD(),r=SYSCALLS.get(),c=SYSCALLS.get();return SYSCALLS.doWritev(t,r,c)}catch(e){return void 0!==FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function _pthread_rwlock_unlock(){return 0}if(Module.requestFullScreen=function(e,a,t){Module.printErr("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead."),Module.requestFullScreen=Module.requestFullscreen,Browser.requestFullScreen(e,a,t)},Module.requestFullscreen=function(e,a,t){Browser.requestFullscreen(e,a,t)},Module.requestAnimationFrame=function(e){Browser.requestAnimationFrame(e)},Module.setCanvasSize=function(e,a,t){Browser.setCanvasSize(e,a,t)},Module.pauseMainLoop=function(){Browser.mainLoop.pause()},Module.resumeMainLoop=function(){Browser.mainLoop.resume()},Module.getUserMedia=function(){Browser.getUserMedia()},Module.createContext=function(e,a,t,r){return Browser.createContext(e,a,t,r)},_emscripten_get_now=ENVIRONMENT_IS_NODE?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:"undefined"!=typeof dateNow?dateNow:"object"==typeof self&&self.performance&&"function"==typeof self.performance.now?function(){return self.performance.now()}:"object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:Date.now,FS.staticInit(),__ATINIT__.unshift(function(){Module.noFSInit||FS.init.initialized||FS.init()}),__ATMAIN__.push(function(){FS.ignorePermissions=!1}),__ATEXIT__.push(function(){FS.quit()}),Module.FS_createFolder=FS.createFolder,Module.FS_createPath=FS.createPath,Module.FS_createDataFile=FS.createDataFile,Module.FS_createPreloadedFile=FS.createPreloadedFile,Module.FS_createLazyFile=FS.createLazyFile,Module.FS_createLink=FS.createLink,Module.FS_createDevice=FS.createDevice,Module.FS_unlink=FS.unlink,__ATINIT__.unshift(function(){TTY.init()}),__ATEXIT__.push(function(){TTY.shutdown()}),ENVIRONMENT_IS_NODE){var fs=__webpack_require__(15),NODEJS_PATH=__webpack_require__(2);NODEFS.staticInit()}function intArrayFromString(e,a,t){var r=t>0?t:lengthBytesUTF8(e)+1,c=new Array(r),n=stringToUTF8Array(e,c,0,c.length);return a&&(c.length=n),c}___buildEnvironment(ENV),DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC),STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP),STACK_MAX=STACK_BASE+TOTAL_STACK,DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX),HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE,staticSealed=!0;var intArrayToString=ASSERTIONS?function(e){for(var a=[],t=0;t<e.length;t++){var r=e[t];r>255&&(assert(!1,"Character code "+r+" ("+String.fromCharCode(r)+")  at offset "+t+" not in 0x00-0xFF."),r&=255),a.push(String.fromCharCode(r))}return a.join("")}:function(e){for(var a=[],t=0;t<e.length;t++){var r=e[t];r>255&&(r&=255),a.push(String.fromCharCode(r))}return a.join("")};Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString;var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",decodeBase64="function"==typeof atob?atob:function(e){var a,t,r,c,n,i,f="",o=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{a=keyStr.indexOf(e.charAt(o++))<<2|(c=keyStr.indexOf(e.charAt(o++)))>>4,t=(15&c)<<4|(n=keyStr.indexOf(e.charAt(o++)))>>2,r=(3&n)<<6|(i=keyStr.indexOf(e.charAt(o++))),f+=String.fromCharCode(a),64!==n&&(f+=String.fromCharCode(t)),64!==i&&(f+=String.fromCharCode(r))}while(o<e.length);return f};function intArrayFromBase64(e){if("boolean"==typeof ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_NODE){var a;try{a=Buffer.from(e,"base64")}catch(t){a=new Buffer(e,"base64")}return new Uint8Array(a.buffer,a.byteOffset,a.byteLength)}try{for(var t=decodeBase64(e),r=new Uint8Array(t.length),c=0;c<t.length;++c)r[c]=t.charCodeAt(c);return r}catch(e){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(e){var a="data:application/octet-stream;base64,";if(String.prototype.startsWith?e.startsWith(a):0===e.indexOf(a))return intArrayFromBase64(e.slice(a.length))}function invoke_iiii(e,a,t,r){try{return Module.dynCall_iiii(e,a,t,r)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiiii(e,a,t,r,c,n){try{Module.dynCall_viiiii(e,a,t,r,c,n)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_i(e){try{return Module.dynCall_i(e)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_vi(e,a){try{Module.dynCall_vi(e,a)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_vii(e,a,t){try{Module.dynCall_vii(e,a,t)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_ii(e,a){try{return Module.dynCall_ii(e,a)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viii(e,a,t,r){try{Module.dynCall_viii(e,a,t,r)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_v(e){try{Module.dynCall_v(e)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_iii(e,a,t){try{return Module.dynCall_iii(e,a,t)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_iiiiii(e,a,t,r,c,n){try{return Module.dynCall_iiiiii(e,a,t,r,c,n)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiii(e,a,t,r,c){try{Module.dynCall_viiii(e,a,t,r,c)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;Module.setThrew(1,0)}}Module.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort:abort,assert:assert,enlargeMemory:enlargeMemory,getTotalMemory:getTotalMemory,abortOnCannotGrowMemory:abortOnCannotGrowMemory,invoke_iiii:invoke_iiii,invoke_viiiii:invoke_viiiii,invoke_i:invoke_i,invoke_vi:invoke_vi,invoke_vii:invoke_vii,invoke_ii:invoke_ii,invoke_viii:invoke_viii,invoke_v:invoke_v,invoke_iii:invoke_iii,invoke_iiiiii:invoke_iiiiii,invoke_viiii:invoke_viiii,_pthread_cond_wait:_pthread_cond_wait,_llvm_bswap_i64:_llvm_bswap_i64,__Unwind_FindEnclosingFunction:__Unwind_FindEnclosingFunction,_emscripten_get_callstack_js:_emscripten_get_callstack_js,_pthread_key_create:_pthread_key_create,___setErrNo:___setErrNo,___gxx_personality_v0:___gxx_personality_v0,_pthread_rwlock_unlock:_pthread_rwlock_unlock,___cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__ZSt18uncaught_exceptionv:__ZSt18uncaught_exceptionv,___buildEnvironment:___buildEnvironment,_pthread_cond_init:_pthread_cond_init,__Unwind_GetIPInfo:__Unwind_GetIPInfo,_pthread_mutexattr_destroy:_pthread_mutexattr_destroy,__emscripten_traverse_stack:__emscripten_traverse_stack,_emscripten_set_main_loop_timing:_emscripten_set_main_loop_timing,___cxa_free_exception:___cxa_free_exception,_pthread_key_delete:_pthread_key_delete,___cxa_allocate_exception:___cxa_allocate_exception,_pthread_rwlock_rdlock:_pthread_rwlock_rdlock,___resumeException:___resumeException,___cxa_find_matching_catch:___cxa_find_matching_catch,_pthread_condattr_setclock:_pthread_condattr_setclock,_pthread_getspecific:_pthread_getspecific,___cxa_find_matching_catch_3:___cxa_find_matching_catch_3,_emscripten_memcpy_big:_emscripten_memcpy_big,_pthread_cond_signal:_pthread_cond_signal,_pthread_mutex_destroy:_pthread_mutex_destroy,_abort:_abort,_pthread_condattr_init:_pthread_condattr_init,_pthread_mutexattr_settype:_pthread_mutexattr_settype,_getenv:_getenv,_pthread_condattr_destroy:_pthread_condattr_destroy,___syscall54:___syscall54,___unlock:___unlock,___syscall140:___syscall140,_emscripten_set_main_loop:_emscripten_set_main_loop,_emscripten_get_now:_emscripten_get_now,_pthread_mutexattr_init:_pthread_mutexattr_init,_pthread_setspecific:_pthread_setspecific,_dladdr:_dladdr,___cxa_throw:___cxa_throw,___lock:___lock,___syscall6:___syscall6,___syscall4:___syscall4,_pthread_cond_destroy:_pthread_cond_destroy,_llvm_trap:_llvm_trap,_pthread_mutex_init:_pthread_mutex_init,__Unwind_Backtrace:__Unwind_Backtrace,___syscall146:___syscall146,_emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,DYNAMICTOP_PTR:DYNAMICTOP_PTR,tempDoublePtr:tempDoublePtr,ABORT:ABORT,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX};var asm=function(e,a,t){"use asm";var r=new e.Int8Array(t);var c=new e.Int16Array(t);var n=new e.Int32Array(t);var i=new e.Uint8Array(t);var f=new e.Uint16Array(t);var o=new e.Uint32Array(t);var d=new e.Float32Array(t);var s=new e.Float64Array(t);var b=a.DYNAMICTOP_PTR|0;var u=a.tempDoublePtr|0;var l=a.ABORT|0;var p=a.STACKTOP|0;var h=a.STACK_MAX|0;var m=0;var g=0;var v=0;var y=0;var _=e.NaN,w=e.Infinity;var A=0,k=0,x=0,E=0,S=0.0;var T=0;var j=e.Math.floor;var C=e.Math.abs;var R=e.Math.sqrt;var O=e.Math.pow;var B=e.Math.cos;var M=e.Math.sin;var N=e.Math.tan;var I=e.Math.acos;var P=e.Math.asin;var F=e.Math.atan;var L=e.Math.atan2;var D=e.Math.exp;var z=e.Math.log;var q=e.Math.ceil;var U=e.Math.imul;var H=e.Math.min;var V=e.Math.max;var G=e.Math.clz32;var W=a.abort;var Y=a.assert;var K=a.enlargeMemory;var Q=a.getTotalMemory;var Z=a.abortOnCannotGrowMemory;var J=a.invoke_iiii;var X=a.invoke_viiiii;var $=a.invoke_i;var ee=a.invoke_vi;var ae=a.invoke_vii;var te=a.invoke_ii;var re=a.invoke_viii;var ce=a.invoke_v;var ne=a.invoke_iii;var ie=a.invoke_iiiiii;var fe=a.invoke_viiii;var oe=a._pthread_cond_wait;var de=a._llvm_bswap_i64;var se=a.__Unwind_FindEnclosingFunction;var be=a._emscripten_get_callstack_js;var ue=a._pthread_key_create;var le=a.___setErrNo;var pe=a.___gxx_personality_v0;var he=a._pthread_rwlock_unlock;var me=a.___cxa_find_matching_catch_2;var ge=a.__ZSt18uncaught_exceptionv;var ve=a.___buildEnvironment;var ye=a._pthread_cond_init;var _e=a.__Unwind_GetIPInfo;var we=a._pthread_mutexattr_destroy;var Ae=a.__emscripten_traverse_stack;var ke=a._emscripten_set_main_loop_timing;var xe=a.___cxa_free_exception;var Ee=a._pthread_key_delete;var Se=a.___cxa_allocate_exception;var Te=a._pthread_rwlock_rdlock;var je=a.___resumeException;var Ce=a.___cxa_find_matching_catch;var Re=a._pthread_condattr_setclock;var Oe=a._pthread_getspecific;var Be=a.___cxa_find_matching_catch_3;var Me=a._emscripten_memcpy_big;var Ne=a._pthread_cond_signal;var Ie=a._pthread_mutex_destroy;var Pe=a._abort;var Fe=a._pthread_condattr_init;var Le=a._pthread_mutexattr_settype;var De=a._getenv;var ze=a._pthread_condattr_destroy;var qe=a.___syscall54;var Ue=a.___unlock;var He=a.___syscall140;var Ve=a._emscripten_set_main_loop;var Ge=a._emscripten_get_now;var We=a._pthread_mutexattr_init;var Ye=a._pthread_setspecific;var Ke=a._dladdr;var Qe=a.___cxa_throw;var Ze=a.___lock;var Je=a.___syscall6;var Xe=a.___syscall4;var $e=a._pthread_cond_destroy;var ea=a._llvm_trap;var aa=a._pthread_mutex_init;var ta=a.__Unwind_Backtrace;var ra=a.___syscall146;var ca=a._emscripten_exit_with_live_runtime;var na=0.0;function ia(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ee=0,ae=0,te=0,re=0,ce=0,ne=0,ie=0,fe=0,oe=0,de=0,se=0,be=0,ue=0,le=0,pe=0,he=0;le=p;p=p+3872|0;h=le+3680|0;x=le+3488|0;m=le+3424|0;E=le+3360|0;s=le+3328|0;d=le+3264|0;o=le+3200|0;q=le+3136|0;C=le+3072|0;se=le+3008|0;Q=le+2944|0;z=le+2880|0;j=le+2816|0;K=le+2752|0;w=le+2688|0;D=le+2624|0;oe=le+2560|0;Y=le+2496|0;_=le+2432|0;F=le+2368|0;W=le+2304|0;P=le+2240|0;O=le+2176|0;ie=le+2112|0;T=le+2048|0;I=le+1984|0;y=le+1920|0;G=le+1856|0;N=le+1792|0;S=le+1728|0;ce=le+1664|0;J=le+1600|0;k=le+1536|0;H=le+1472|0;Z=le+1408|0;U=le+1344|0;A=le+1280|0;L=le+1216|0;te=le+1152|0;V=le+1088|0;M=le+1024|0;v=le+960|0;g=le+896|0;R=le+832|0;B=le+768|0;l=le+704|0;u=le+640|0;b=le+576|0;ee=le+512|0;$=le+448|0;X=le+384|0;be=le+320|0;de=le+256|0;fe=le+192|0;ne=le+128|0;re=le+64|0;ae=le;ue=ae;pe=a;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=re;pe=a+64|0;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));i=a+128|0;ue=ne;pe=i;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=fe;pe=a+192|0;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));f=a+256|0;ue=de;pe=f;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=be;pe=a+320|0;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=X;pe=t;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=$;pe=c;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=ee;pe=r;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=x;pe=a;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=t;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(b,x,h);ue=x;pe=i;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=c;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(u,x,h);ue=x;pe=f;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=r;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(l,x,h);ue=o;pe=ae;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=de;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=ae;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=de;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[B>>2]=n[x>>2];n[B+4>>2]=n[x+4>>2];n[B+8>>2]=n[x+8>>2];n[B+12>>2]=n[x+12>>2];n[B+16>>2]=n[x+16>>2];n[B+20>>2]=n[x+20>>2];n[B+24>>2]=n[x+24>>2];n[B+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=B+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=ae;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=ne;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=ae;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=ne;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[R>>2]=n[x>>2];n[R+4>>2]=n[x+4>>2];n[R+8>>2]=n[x+8>>2];n[R+12>>2]=n[x+12>>2];n[R+16>>2]=n[x+16>>2];n[R+20>>2]=n[x+20>>2];n[R+24>>2]=n[x+24>>2];n[R+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=R+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=re;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=fe;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=re;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=fe;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=d;pe=be;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=be;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[q>>2];n[x+4>>2]=n[q+4>>2];n[x+8>>2]=n[q+8>>2];n[x+12>>2]=n[q+12>>2];n[x+16>>2]=n[q+16>>2];n[x+20>>2]=n[q+20>>2];n[x+24>>2]=n[q+24>>2];n[x+28>>2]=n[q+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[g>>2]=n[x>>2];n[g+4>>2]=n[x+4>>2];n[g+8>>2]=n[x+8>>2];n[g+12>>2]=n[x+12>>2];n[g+16>>2]=n[x+16>>2];n[g+20>>2]=n[x+20>>2];n[g+24>>2]=n[x+24>>2];n[g+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=g+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=re;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(v,x,h);ue=o;pe=v;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=v;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[M>>2]=n[x>>2];n[M+4>>2]=n[x+4>>2];n[M+8>>2]=n[x+8>>2];n[M+12>>2]=n[x+12>>2];n[M+16>>2]=n[x+16>>2];n[M+20>>2]=n[x+20>>2];n[M+24>>2]=n[x+24>>2];n[M+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=M+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=M;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;n[ue>>2]=1091403767;n[ue+4>>2]=-167360562;ue=h+8|0;n[ue>>2]=-753151983;n[ue+4>>2]=792555341;ue=h+16|0;n[ue>>2]=960546513;n[ue+4>>2]=692269950;ue=h+24|0;n[ue>>2]=-1478256553;n[ue+4>>2]=496343272;ue=h+32|0;n[ue>>2]=-980480611;n[ue+4>>2]=-748862579;ue=h+40|0;n[ue>>2]=-171504835;n[ue+4>>2]=175696680;ue=h+48|0;n[ue>>2]=2021213740;n[ue+4>>2]=1718526831;ue=h+56|0;n[ue>>2]=-1710760145;n[ue+4>>2]=235567041;Nt(o,x,h);ue=d;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=o;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[V>>2]=n[x>>2];n[V+4>>2]=n[x+4>>2];n[V+8>>2]=n[x+8>>2];n[V+12>>2]=n[x+12>>2];n[V+16>>2]=n[x+16>>2];n[V+20>>2]=n[x+20>>2];n[V+24>>2]=n[x+24>>2];n[V+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=V+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=te;pe=V;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=x;pe=be;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(L,x,h);ue=o;pe=v;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=L;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=v;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=L;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[A>>2]=n[x>>2];n[A+4>>2]=n[x+4>>2];n[A+8>>2]=n[x+8>>2];n[A+12>>2]=n[x+12>>2];n[A+16>>2]=n[x+16>>2];n[A+20>>2]=n[x+20>>2];n[A+24>>2]=n[x+24>>2];n[A+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=A+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=L;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=L;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[U>>2]=n[x>>2];n[U+4>>2]=n[x+4>>2];n[U+8>>2]=n[x+8>>2];n[U+12>>2]=n[x+12>>2];n[U+16>>2]=n[x+16>>2];n[U+20>>2]=n[x+20>>2];n[U+24>>2]=n[x+24>>2];n[U+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=U+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=U;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;n[ue>>2]=1091403767;n[ue+4>>2]=-167360562;ue=h+8|0;n[ue>>2]=-753151983;n[ue+4>>2]=792555341;ue=h+16|0;n[ue>>2]=960546513;n[ue+4>>2]=692269950;ue=h+24|0;n[ue>>2]=-1478256553;n[ue+4>>2]=496343272;ue=h+32|0;n[ue>>2]=-980480611;n[ue+4>>2]=-748862579;ue=h+40|0;n[ue>>2]=-171504835;n[ue+4>>2]=175696680;ue=h+48|0;n[ue>>2]=2021213740;n[ue+4>>2]=1718526831;ue=h+56|0;n[ue>>2]=-1710760145;n[ue+4>>2]=235567041;Nt(Z,x,h);ue=x;pe=re;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(H,x,h);ue=o;pe=A;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=H;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=A;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=H;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[k>>2]=n[x>>2];n[k+4>>2]=n[x+4>>2];n[k+8>>2]=n[x+8>>2];n[k+12>>2]=n[x+12>>2];n[k+16>>2]=n[x+16>>2];n[k+20>>2]=n[x+20>>2];n[k+24>>2]=n[x+24>>2];n[k+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=k+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=Z;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=H;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=Z;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=H;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[J>>2]=n[x>>2];n[J+4>>2]=n[x+4>>2];n[J+8>>2]=n[x+8>>2];n[J+12>>2]=n[x+12>>2];n[J+16>>2]=n[x+16>>2];n[J+20>>2]=n[x+20>>2];n[J+24>>2]=n[x+24>>2];n[J+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=J+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=ce;pe=J;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=o;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[S>>2]=n[x>>2];n[S+4>>2]=n[x+4>>2];n[S+8>>2]=n[x+8>>2];n[S+12>>2]=n[x+12>>2];n[S+16>>2]=n[x+16>>2];n[S+20>>2]=n[x+20>>2];n[S+24>>2]=n[x+24>>2];n[S+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=S+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=R;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=S;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(o,x,h);ue=d;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=o;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=d;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[q>>2];n[x+4>>2]=n[q+4>>2];n[x+8>>2]=n[q+8>>2];n[x+12>>2]=n[q+12>>2];n[x+16>>2]=n[q+16>>2];n[x+20>>2]=n[q+20>>2];n[x+24>>2]=n[q+24>>2];n[x+28>>2]=n[q+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[N>>2]=n[x>>2];n[N+4>>2]=n[x+4>>2];n[N+8>>2]=n[x+8>>2];n[N+12>>2]=n[x+12>>2];n[N+16>>2]=n[x+16>>2];n[N+20>>2]=n[x+20>>2];n[N+24>>2]=n[x+24>>2];n[N+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=N+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=fe;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(G,x,h);ue=o;pe=k;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=G;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=k;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=G;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[y>>2]=n[x>>2];n[y+4>>2]=n[x+4>>2];n[y+8>>2]=n[x+8>>2];n[y+12>>2]=n[x+12>>2];n[y+16>>2]=n[x+16>>2];n[y+20>>2]=n[x+20>>2];n[y+24>>2]=n[x+24>>2];n[y+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=y+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=N;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=G;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=N;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=G;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[I>>2]=n[x>>2];n[I+4>>2]=n[x+4>>2];n[I+8>>2]=n[x+8>>2];n[I+12>>2]=n[x+12>>2];n[I+16>>2]=n[x+16>>2];n[I+20>>2]=n[x+20>>2];n[I+24>>2]=n[x+24>>2];n[I+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=I+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=ne;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=de;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=ne;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=de;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[T>>2]=n[x>>2];n[T+4>>2]=n[x+4>>2];n[T+8>>2]=n[x+8>>2];n[T+12>>2]=n[x+12>>2];n[T+16>>2]=n[x+16>>2];n[T+20>>2]=n[x+20>>2];n[T+24>>2]=n[x+24>>2];n[T+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=T+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=ie;pe=I;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=o;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[O>>2]=n[x>>2];n[O+4>>2]=n[x+4>>2];n[O+8>>2]=n[x+8>>2];n[O+12>>2]=n[x+12>>2];n[O+16>>2]=n[x+16>>2];n[O+20>>2]=n[x+20>>2];n[O+24>>2]=n[x+24>>2];n[O+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=O+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=T;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=O;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(o,x,h);ue=d;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=o;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=u;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=d;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[q>>2];n[x+4>>2]=n[q+4>>2];n[x+8>>2]=n[q+8>>2];n[x+12>>2]=n[q+12>>2];n[x+16>>2]=n[q+16>>2];n[x+20>>2]=n[q+20>>2];n[x+24>>2]=n[q+24>>2];n[x+28>>2]=n[q+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[P>>2]=n[x>>2];n[P+4>>2]=n[x+4>>2];n[P+8>>2]=n[x+8>>2];n[P+12>>2]=n[x+12>>2];n[P+16>>2]=n[x+16>>2];n[P+20>>2]=n[x+20>>2];n[P+24>>2]=n[x+24>>2];n[P+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=P+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=P;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;n[ue>>2]=1091403767;n[ue+4>>2]=-167360562;ue=h+8|0;n[ue>>2]=-753151983;n[ue+4>>2]=792555341;ue=h+16|0;n[ue>>2]=960546513;n[ue+4>>2]=692269950;ue=h+24|0;n[ue>>2]=-1478256553;n[ue+4>>2]=496343272;ue=h+32|0;n[ue>>2]=-980480611;n[ue+4>>2]=-748862579;ue=h+40|0;n[ue>>2]=-171504835;n[ue+4>>2]=175696680;ue=h+48|0;n[ue>>2]=2021213740;n[ue+4>>2]=1718526831;ue=h+56|0;n[ue>>2]=-1710760145;n[ue+4>>2]=235567041;Nt(W,x,h);ue=x;pe=fe;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(F,x,h);ue=o;pe=y;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=F;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=y;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=F;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[_>>2]=n[x>>2];n[_+4>>2]=n[x+4>>2];n[_+8>>2]=n[x+8>>2];n[_+12>>2]=n[x+12>>2];n[_+16>>2]=n[x+16>>2];n[_+20>>2]=n[x+20>>2];n[_+24>>2]=n[x+24>>2];n[_+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=_+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=W;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=F;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=W;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=F;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[Y>>2]=n[x>>2];n[Y+4>>2]=n[x+4>>2];n[Y+8>>2]=n[x+8>>2];n[Y+12>>2]=n[x+12>>2];n[Y+16>>2]=n[x+16>>2];n[Y+20>>2]=n[x+20>>2];n[Y+24>>2]=n[x+24>>2];n[Y+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=Y+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=oe;pe=Y;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=x;pe=be;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(D,x,h);ue=o;pe=_;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=D;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=_;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=D;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[w>>2]=n[x>>2];n[w+4>>2]=n[x+4>>2];n[w+8>>2]=n[x+8>>2];n[w+12>>2]=n[x+12>>2];n[w+16>>2]=n[x+16>>2];n[w+20>>2]=n[x+20>>2];n[w+24>>2]=n[x+24>>2];n[w+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=w+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=D;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;n[ue>>2]=1091403767;n[ue+4>>2]=-167360562;ue=h+8|0;n[ue>>2]=-753151983;n[ue+4>>2]=792555341;ue=h+16|0;n[ue>>2]=960546513;n[ue+4>>2]=692269950;ue=h+24|0;n[ue>>2]=-1478256553;n[ue+4>>2]=496343272;ue=h+32|0;n[ue>>2]=-980480611;n[ue+4>>2]=-748862579;ue=h+40|0;n[ue>>2]=-171504835;n[ue+4>>2]=175696680;ue=h+48|0;n[ue>>2]=2021213740;n[ue+4>>2]=1718526831;ue=h+56|0;n[ue>>2]=-1710760145;n[ue+4>>2]=235567041;Nt(K,x,h);ue=o;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[j>>2]=n[x>>2];n[j+4>>2]=n[x+4>>2];n[j+8>>2]=n[x+8>>2];n[j+12>>2]=n[x+12>>2];n[j+16>>2]=n[x+16>>2];n[j+20>>2]=n[x+20>>2];n[j+24>>2]=n[x+24>>2];n[j+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=j+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=B;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=j;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(o,x,h);ue=d;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=o;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=b;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=d;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=l;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[q>>2];n[x+4>>2]=n[q+4>>2];n[x+8>>2]=n[q+8>>2];n[x+12>>2]=n[q+12>>2];n[x+16>>2]=n[q+16>>2];n[x+20>>2]=n[q+20>>2];n[x+24>>2]=n[q+24>>2];n[x+28>>2]=n[q+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[z>>2]=n[x>>2];n[z+4>>2]=n[x+4>>2];n[z+8>>2]=n[x+8>>2];n[z+12>>2]=n[x+12>>2];n[z+16>>2]=n[x+16>>2];n[z+20>>2]=n[x+20>>2];n[z+24>>2]=n[x+24>>2];n[z+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=z+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=o;pe=K;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=z;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=K;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=z;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[Q>>2]=n[x>>2];n[Q+4>>2]=n[x+4>>2];n[Q+8>>2]=n[x+8>>2];n[Q+12>>2]=n[x+12>>2];n[Q+16>>2]=n[x+16>>2];n[Q+20>>2]=n[x+20>>2];n[Q+24>>2]=n[x+24>>2];n[Q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=Q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=se;pe=Q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=o;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=d;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=X;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=$;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=d;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=ee;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[q>>2];n[x+4>>2]=n[q+4>>2];n[x+8>>2]=n[q+8>>2];n[x+12>>2]=n[q+12>>2];n[x+16>>2]=n[q+16>>2];n[x+20>>2]=n[q+20>>2];n[x+24>>2]=n[q+24>>2];n[x+28>>2]=n[q+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];Tt(x,h,8);n[C>>2]=n[x>>2];n[C+4>>2]=n[x+4>>2];n[C+8>>2]=n[x+8>>2];n[C+12>>2]=n[x+12>>2];n[C+16>>2]=n[x+16>>2];n[C+20>>2]=n[x+20>>2];n[C+24>>2]=n[x+24>>2];n[C+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];Tt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=C+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=g;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=C;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));Nt(o,x,h);ue=d;pe=w;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=E;pe=o;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=m;pe=w;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];jt(x,h,8);n[q>>2]=n[x>>2];n[q+4>>2]=n[x+4>>2];n[q+8>>2]=n[x+8>>2];n[q+12>>2]=n[x+12>>2];n[q+16>>2]=n[x+16>>2];n[q+20>>2]=n[x+20>>2];n[q+24>>2]=n[x+24>>2];n[q+28>>2]=n[x+28>>2];pe=E+32|0;ue=m+32|0;n[x>>2]=n[pe>>2];n[x+4>>2]=n[pe+4>>2];n[x+8>>2]=n[pe+8>>2];n[x+12>>2]=n[pe+12>>2];n[x+16>>2]=n[pe+16>>2];n[x+20>>2]=n[pe+20>>2];n[x+24>>2]=n[pe+24>>2];n[x+28>>2]=n[pe+28>>2];n[h>>2]=n[ue>>2];n[h+4>>2]=n[ue+4>>2];n[h+8>>2]=n[ue+8>>2];n[h+12>>2]=n[ue+12>>2];n[h+16>>2]=n[ue+16>>2];n[h+20>>2]=n[ue+20>>2];n[h+24>>2]=n[ue+24>>2];n[h+28>>2]=n[ue+28>>2];jt(x,h,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];ue=q+32|0;n[ue>>2]=n[s>>2];n[ue+4>>2]=n[s+4>>2];n[ue+8>>2]=n[s+8>>2];n[ue+12>>2]=n[s+12>>2];n[ue+16>>2]=n[s+16>>2];n[ue+20>>2]=n[s+20>>2];n[ue+24>>2]=n[s+24>>2];n[ue+28>>2]=n[s+28>>2];ue=x;pe=te;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=x+64|0;pe=ce;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=x+128|0;pe=ie;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h;pe=oe;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h+64|0;pe=se;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ue=h+128|0;pe=q;he=ue+64|0;do{n[ue>>2]=n[pe>>2];ue=ue+4|0;pe=pe+4|0}while((ue|0)<(he|0));ad(e|0,x|0,192)|0;ad(e+192|0,h|0,192)|0;p=le;return}function fa(e){e=e|0;var a=0;a=n[e+128>>2]|0;e=n[e+132>>2]|0;if(!e)return;if(e>>>0>22369621)Oi(3624);xt(a,e*192|0,8);return}function oa(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0;g=p;p=p+2336|0;m=g+1952|0;h=g+1568|0;b=g+1536|0;l=g+1152|0;u=g+1088|0;s=g+1024|0;o=g+960|0;f=g+768|0;i=g+576|0;d=g+384|0;c=g;r=l;n[r>>2]=-980480611;n[r+4>>2]=-748862579;r=l+8|0;n[r>>2]=-171504835;n[r+4>>2]=175696680;r=l+16|0;n[r>>2]=2021213740;n[r+4>>2]=1718526831;r=l+24|0;n[r>>2]=-1710760145;n[r+4>>2]=235567041;Zo(l+32|0,0,352)|0;r=b;n[r>>2]=1248397809;n[r+4>>2]=1156158132;r=b+8|0;n[r>>2]=0;n[r+4>>2]=0;n[r+8>>2]=0;n[r+12>>2]=0;n[r+16>>2]=0;n[r+20>>2]=0;r=0;t=256;e:while(1){if(r)do{if(!t)break e;t=t+-1|0;if(t>>>0>255)break e;r=b+(t>>>6<<3)|0;y=n[r>>2]|0;r=n[r+4>>2]|0;v=nd(1,0,t&63|0)|0;r=(y&v|0)==0&(r&T|0)==0;da(m,l);ad(l|0,m|0,384)|0}while(r);else do{if(!t)break e;t=t+-1|0;if(t>>>0>255)break e;y=b+(t>>>6<<3)|0;r=n[y>>2]|0;y=n[y+4>>2]|0;v=nd(1,0,t&63|0)|0}while((r&v|0)==0&(y&T|0)==0);ad(h|0,a|0,384)|0;ad(m|0,l|0,384)|0;Ut(l,h,m);r=1}ad(c|0,l|0,384)|0;ad(e|0,c|0,192)|0;r=c+192|0;ad(i|0,r|0,192)|0;ad(f|0,r|0,192)|0;r=l;a=i;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));r=h;a=i;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));n[m>>2]=n[l>>2];n[m+4>>2]=n[l+4>>2];n[m+8>>2]=n[l+8>>2];n[m+12>>2]=n[l+12>>2];n[m+16>>2]=n[l+16>>2];n[m+20>>2]=n[l+20>>2];n[m+24>>2]=n[l+24>>2];n[m+28>>2]=n[l+28>>2];Rt(m,8);n[o>>2]=n[m>>2];n[o+4>>2]=n[m+4>>2];n[o+8>>2]=n[m+8>>2];n[o+12>>2]=n[m+12>>2];n[o+16>>2]=n[m+16>>2];n[o+20>>2]=n[m+20>>2];n[o+24>>2]=n[m+24>>2];n[o+28>>2]=n[m+28>>2];t=h+32|0;n[m>>2]=n[t>>2];n[m+4>>2]=n[t+4>>2];n[m+8>>2]=n[t+8>>2];n[m+12>>2]=n[t+12>>2];n[m+16>>2]=n[t+16>>2];n[m+20>>2]=n[t+20>>2];n[m+24>>2]=n[t+24>>2];n[m+28>>2]=n[t+28>>2];Rt(m,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];t=o+32|0;n[t>>2]=n[b>>2];n[t+4>>2]=n[b+4>>2];n[t+8>>2]=n[b+8>>2];n[t+12>>2]=n[b+12>>2];n[t+16>>2]=n[b+16>>2];n[t+20>>2]=n[b+20>>2];n[t+24>>2]=n[b+24>>2];n[t+28>>2]=n[b+28>>2];t=f+64|0;r=l;a=t;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));r=h;a=t;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));n[m>>2]=n[l>>2];n[m+4>>2]=n[l+4>>2];n[m+8>>2]=n[l+8>>2];n[m+12>>2]=n[l+12>>2];n[m+16>>2]=n[l+16>>2];n[m+20>>2]=n[l+20>>2];n[m+24>>2]=n[l+24>>2];n[m+28>>2]=n[l+28>>2];Rt(m,8);n[s>>2]=n[m>>2];n[s+4>>2]=n[m+4>>2];n[s+8>>2]=n[m+8>>2];n[s+12>>2]=n[m+12>>2];n[s+16>>2]=n[m+16>>2];n[s+20>>2]=n[m+20>>2];n[s+24>>2]=n[m+24>>2];n[s+28>>2]=n[m+28>>2];t=h+32|0;n[m>>2]=n[t>>2];n[m+4>>2]=n[t+4>>2];n[m+8>>2]=n[t+8>>2];n[m+12>>2]=n[t+12>>2];n[m+16>>2]=n[t+16>>2];n[m+20>>2]=n[t+20>>2];n[m+24>>2]=n[t+24>>2];n[m+28>>2]=n[t+28>>2];Rt(m,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];t=s+32|0;n[t>>2]=n[b>>2];n[t+4>>2]=n[b+4>>2];n[t+8>>2]=n[b+8>>2];n[t+12>>2]=n[b+12>>2];n[t+16>>2]=n[b+16>>2];n[t+20>>2]=n[b+20>>2];n[t+24>>2]=n[b+24>>2];n[t+28>>2]=n[b+28>>2];t=f+128|0;r=l;a=t;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));r=h;a=t;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));n[m>>2]=n[l>>2];n[m+4>>2]=n[l+4>>2];n[m+8>>2]=n[l+8>>2];n[m+12>>2]=n[l+12>>2];n[m+16>>2]=n[l+16>>2];n[m+20>>2]=n[l+20>>2];n[m+24>>2]=n[l+24>>2];n[m+28>>2]=n[l+28>>2];Rt(m,8);n[u>>2]=n[m>>2];n[u+4>>2]=n[m+4>>2];n[u+8>>2]=n[m+8>>2];n[u+12>>2]=n[m+12>>2];n[u+16>>2]=n[m+16>>2];n[u+20>>2]=n[m+20>>2];n[u+24>>2]=n[m+24>>2];n[u+28>>2]=n[m+28>>2];r=h+32|0;n[m>>2]=n[r>>2];n[m+4>>2]=n[r+4>>2];n[m+8>>2]=n[r+8>>2];n[m+12>>2]=n[r+12>>2];n[m+16>>2]=n[r+16>>2];n[m+20>>2]=n[r+20>>2];n[m+24>>2]=n[r+24>>2];n[m+28>>2]=n[r+28>>2];Rt(m,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];r=u+32|0;n[r>>2]=n[b>>2];n[r+4>>2]=n[b+4>>2];n[r+8>>2]=n[b+8>>2];n[r+12>>2]=n[b+12>>2];n[r+16>>2]=n[b+16>>2];n[r+20>>2]=n[b+20>>2];n[r+24>>2]=n[b+24>>2];n[r+28>>2]=n[b+28>>2];r=d;a=o;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));r=d+64|0;a=s;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));r=d+128|0;a=u;c=r+64|0;do{n[r>>2]=n[a>>2];r=r+4|0;a=a+4|0}while((r|0)<(c|0));ad(e+192|0,d|0,192)|0;p=g;return}function da(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0;Y=p;p=p+2848|0;f=Y+2656|0;d=Y+2464|0;o=Y+2400|0;s=Y+2336|0;i=Y+2304|0;c=Y+2240|0;r=Y+2176|0;G=Y+2112|0;V=Y+2048|0;H=Y+1984|0;q=Y+1920|0;z=Y+1856|0;D=Y+1792|0;F=Y+1728|0;P=Y+1664|0;I=Y+1600|0;M=Y+1536|0;B=Y+1472|0;O=Y+1408|0;w=Y+1344|0;C=Y+1280|0;j=Y+1216|0;T=Y+1152|0;E=Y+1088|0;x=Y+1024|0;k=Y+960|0;g=Y+896|0;m=Y+832|0;_=Y+768|0;h=Y+704|0;l=Y+640|0;y=Y+576|0;u=Y+512|0;b=Y+448|0;v=Y+384|0;U=Y+320|0;S=Y+256|0;R=Y+192|0;N=Y+128|0;L=Y+64|0;A=Y;W=A;K=a;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=L;K=a+64|0;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=N;K=a+128|0;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=R;K=a+192|0;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));t=a+256|0;W=S;K=t;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=U;K=a+320|0;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=d;K=a;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;K=t;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));Nt(v,d,f);W=r;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=S;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=S;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[V>>2]=n[d>>2];n[V+4>>2]=n[d+4>>2];n[V+8>>2]=n[d+8>>2];n[V+12>>2]=n[d+12>>2];n[V+16>>2]=n[d+16>>2];n[V+20>>2]=n[d+20>>2];n[V+24>>2]=n[d+24>>2];n[V+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=V+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=S;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(r,d,f);W=c;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[G>>2]=n[d>>2];n[G+4>>2]=n[d+4>>2];n[G+8>>2]=n[d+8>>2];n[G+12>>2]=n[d+12>>2];n[G+16>>2]=n[d+16>>2];n[G+20>>2]=n[d+20>>2];n[G+24>>2]=n[d+24>>2];n[G+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=G+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];Nt(H,V,G);W=c;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[H>>2];n[d+4>>2]=n[H+4>>2];n[d+8>>2]=n[H+8>>2];n[d+12>>2]=n[H+12>>2];n[d+16>>2]=n[H+16>>2];n[d+20>>2]=n[H+20>>2];n[d+24>>2]=n[H+24>>2];n[d+28>>2]=n[H+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[q>>2]=n[d>>2];n[q+4>>2]=n[d+4>>2];n[q+8>>2]=n[d+8>>2];n[q+12>>2]=n[d+12>>2];n[q+16>>2]=n[d+16>>2];n[q+20>>2]=n[d+20>>2];n[q+24>>2]=n[d+24>>2];n[q+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=q+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(c,d,f);W=s;K=q;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=c;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[q>>2];n[d+4>>2]=n[q+4>>2];n[d+8>>2]=n[q+8>>2];n[d+12>>2]=n[q+12>>2];n[d+16>>2]=n[q+16>>2];n[d+20>>2]=n[q+20>>2];n[d+24>>2]=n[q+24>>2];n[d+28>>2]=n[q+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[b>>2]=n[d>>2];n[b+4>>2]=n[d+4>>2];n[b+8>>2]=n[d+8>>2];n[b+12>>2]=n[d+12>>2];n[b+16>>2]=n[d+16>>2];n[b+20>>2]=n[d+20>>2];n[b+24>>2]=n[d+24>>2];n[b+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=b+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=v;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[u>>2]=n[d>>2];n[u+4>>2]=n[d+4>>2];n[u+8>>2]=n[d+8>>2];n[u+12>>2]=n[d+12>>2];n[u+16>>2]=n[d+16>>2];n[u+20>>2]=n[d+20>>2];n[u+24>>2]=n[d+24>>2];n[u+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=u+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));Nt(y,d,f);W=r;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[V>>2]=n[d>>2];n[V+4>>2]=n[d+4>>2];n[V+8>>2]=n[d+8>>2];n[V+12>>2]=n[d+12>>2];n[V+16>>2]=n[d+16>>2];n[V+20>>2]=n[d+20>>2];n[V+24>>2]=n[d+24>>2];n[V+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=V+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(r,d,f);W=c;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[G>>2]=n[d>>2];n[G+4>>2]=n[d+4>>2];n[G+8>>2]=n[d+8>>2];n[G+12>>2]=n[d+12>>2];n[G+16>>2]=n[d+16>>2];n[G+20>>2]=n[d+20>>2];n[G+24>>2]=n[d+24>>2];n[G+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=G+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];Nt(H,V,G);W=c;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[H>>2];n[d+4>>2]=n[H+4>>2];n[d+8>>2]=n[H+8>>2];n[d+12>>2]=n[H+12>>2];n[d+16>>2]=n[H+16>>2];n[d+20>>2]=n[H+20>>2];n[d+24>>2]=n[H+24>>2];n[d+28>>2]=n[H+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[q>>2]=n[d>>2];n[q+4>>2]=n[d+4>>2];n[q+8>>2]=n[d+8>>2];n[q+12>>2]=n[d+12>>2];n[q+16>>2]=n[d+16>>2];n[q+20>>2]=n[d+20>>2];n[q+24>>2]=n[d+24>>2];n[q+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=q+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(c,d,f);W=s;K=q;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=c;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[q>>2];n[d+4>>2]=n[q+4>>2];n[d+8>>2]=n[q+8>>2];n[d+12>>2]=n[q+12>>2];n[d+16>>2]=n[q+16>>2];n[d+20>>2]=n[q+20>>2];n[d+24>>2]=n[q+24>>2];n[d+28>>2]=n[q+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[l>>2]=n[d>>2];n[l+4>>2]=n[d+4>>2];n[l+8>>2]=n[d+8>>2];n[l+12>>2]=n[d+12>>2];n[l+16>>2]=n[d+16>>2];n[l+20>>2]=n[d+20>>2];n[l+24>>2]=n[d+24>>2];n[l+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=l+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=y;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=h+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));Nt(_,d,f);W=r;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[V>>2]=n[d>>2];n[V+4>>2]=n[d+4>>2];n[V+8>>2]=n[d+8>>2];n[V+12>>2]=n[d+12>>2];n[V+16>>2]=n[d+16>>2];n[V+20>>2]=n[d+20>>2];n[V+24>>2]=n[d+24>>2];n[V+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=V+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(r,d,f);W=c;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[G>>2]=n[d>>2];n[G+4>>2]=n[d+4>>2];n[G+8>>2]=n[d+8>>2];n[G+12>>2]=n[d+12>>2];n[G+16>>2]=n[d+16>>2];n[G+20>>2]=n[d+20>>2];n[G+24>>2]=n[d+24>>2];n[G+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=G+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];Nt(H,V,G);W=c;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[H>>2];n[d+4>>2]=n[H+4>>2];n[d+8>>2]=n[H+8>>2];n[d+12>>2]=n[H+12>>2];n[d+16>>2]=n[H+16>>2];n[d+20>>2]=n[H+20>>2];n[d+24>>2]=n[H+24>>2];n[d+28>>2]=n[H+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[q>>2]=n[d>>2];n[q+4>>2]=n[d+4>>2];n[q+8>>2]=n[d+8>>2];n[q+12>>2]=n[d+12>>2];n[q+16>>2]=n[d+16>>2];n[q+20>>2]=n[d+20>>2];n[q+24>>2]=n[d+24>>2];n[q+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=q+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(c,d,f);W=s;K=q;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=c;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[q>>2];n[d+4>>2]=n[q+4>>2];n[d+8>>2]=n[q+8>>2];n[d+12>>2]=n[q+12>>2];n[d+16>>2]=n[q+16>>2];n[d+20>>2]=n[q+20>>2];n[d+24>>2]=n[q+24>>2];n[d+28>>2]=n[q+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[m>>2]=n[d>>2];n[m+4>>2]=n[d+4>>2];n[m+8>>2]=n[d+8>>2];n[m+12>>2]=n[d+12>>2];n[m+16>>2]=n[d+16>>2];n[m+20>>2]=n[d+20>>2];n[m+24>>2]=n[d+24>>2];n[m+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=m+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=_;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[g>>2]=n[d>>2];n[g+4>>2]=n[d+4>>2];n[g+8>>2]=n[d+8>>2];n[g+12>>2]=n[d+12>>2];n[g+16>>2]=n[d+16>>2];n[g+20>>2]=n[d+20>>2];n[g+24>>2]=n[d+24>>2];n[g+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=g+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=b;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=b;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=A;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=k+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=k;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=k;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=k;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[x>>2]=n[d>>2];n[x+4>>2]=n[d+4>>2];n[x+8>>2]=n[d+8>>2];n[x+12>>2]=n[d+12>>2];n[x+16>>2]=n[d+16>>2];n[x+20>>2]=n[d+20>>2];n[x+24>>2]=n[d+24>>2];n[x+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=x+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=x;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=b;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=x;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=b;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[E>>2]=n[d>>2];n[E+4>>2]=n[d+4>>2];n[E+8>>2]=n[d+8>>2];n[E+12>>2]=n[d+12>>2];n[E+16>>2]=n[d+16>>2];n[E+20>>2]=n[d+20>>2];n[E+24>>2]=n[d+24>>2];n[E+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=E+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=u;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=S;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=u;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=S;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[T>>2]=n[d>>2];n[T+4>>2]=n[d+4>>2];n[T+8>>2]=n[d+8>>2];n[T+12>>2]=n[d+12>>2];n[T+16>>2]=n[d+16>>2];n[T+20>>2]=n[d+20>>2];n[T+24>>2]=n[d+24>>2];n[T+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=T+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=T;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=T;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=T;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[j>>2]=n[d>>2];n[j+4>>2]=n[d+4>>2];n[j+8>>2]=n[d+8>>2];n[j+12>>2]=n[d+12>>2];n[j+16>>2]=n[d+16>>2];n[j+20>>2]=n[d+20>>2];n[j+24>>2]=n[d+24>>2];n[j+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=j+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=j;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=u;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=j;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=u;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[C>>2]=n[d>>2];n[C+4>>2]=n[d+4>>2];n[C+8>>2]=n[d+8>>2];n[C+12>>2]=n[d+12>>2];n[C+16>>2]=n[d+16>>2];n[C+20>>2]=n[d+20>>2];n[C+24>>2]=n[d+24>>2];n[C+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=C+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=g;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;n[W>>2]=1091403767;n[W+4>>2]=-167360562;W=f+8|0;n[W>>2]=-753151983;n[W+4>>2]=792555341;W=f+16|0;n[W>>2]=960546513;n[W+4>>2]=692269950;W=f+24|0;n[W>>2]=-1478256553;n[W+4>>2]=496343272;W=f+32|0;n[W>>2]=-980480611;n[W+4>>2]=-748862579;W=f+40|0;n[W>>2]=-171504835;n[W+4>>2]=175696680;W=f+48|0;n[W>>2]=2021213740;n[W+4>>2]=1718526831;W=f+56|0;n[W>>2]=-1710760145;n[W+4>>2]=235567041;Nt(w,d,f);W=r;K=w;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=w;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=R;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[O>>2]=n[d>>2];n[O+4>>2]=n[d+4>>2];n[O+8>>2]=n[d+8>>2];n[O+12>>2]=n[d+12>>2];n[O+16>>2]=n[d+16>>2];n[O+20>>2]=n[d+20>>2];n[O+24>>2]=n[d+24>>2];n[O+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=O+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=O;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=O;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=O;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[B>>2]=n[d>>2];n[B+4>>2]=n[d+4>>2];n[B+8>>2]=n[d+8>>2];n[B+12>>2]=n[d+12>>2];n[B+16>>2]=n[d+16>>2];n[B+20>>2]=n[d+20>>2];n[B+24>>2]=n[d+24>>2];n[B+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=B+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=B;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=w;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=B;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=w;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[M>>2]=n[d>>2];n[M+4>>2]=n[d+4>>2];n[M+8>>2]=n[d+8>>2];n[M+12>>2]=n[d+12>>2];n[M+16>>2]=n[d+16>>2];n[M+20>>2]=n[d+20>>2];n[M+24>>2]=n[d+24>>2];n[M+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=M+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=m;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=m;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=N;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[I>>2]=n[d>>2];n[I+4>>2]=n[d+4>>2];n[I+8>>2]=n[d+8>>2];n[I+12>>2]=n[d+12>>2];n[I+16>>2]=n[d+16>>2];n[I+20>>2]=n[d+20>>2];n[I+24>>2]=n[d+24>>2];n[I+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=I+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=I;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=I;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=I;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[P>>2]=n[d>>2];n[P+4>>2]=n[d+4>>2];n[P+8>>2]=n[d+8>>2];n[P+12>>2]=n[d+12>>2];n[P+16>>2]=n[d+16>>2];n[P+20>>2]=n[d+20>>2];n[P+24>>2]=n[d+24>>2];n[P+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=P+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=P;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=m;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=P;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=m;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[F>>2]=n[d>>2];n[F+4>>2]=n[d+4>>2];n[F+8>>2]=n[d+8>>2];n[F+12>>2]=n[d+12>>2];n[F+16>>2]=n[d+16>>2];n[F+20>>2]=n[d+20>>2];n[F+24>>2]=n[d+24>>2];n[F+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=F+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=l;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=l;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=L;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];jt(d,f,8);n[D>>2]=n[d>>2];n[D+4>>2]=n[d+4>>2];n[D+8>>2]=n[d+8>>2];n[D+12>>2]=n[d+12>>2];n[D+16>>2]=n[d+16>>2];n[D+20>>2]=n[d+20>>2];n[D+24>>2]=n[d+24>>2];n[D+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];jt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=D+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=D;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=D;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=D;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[z>>2]=n[d>>2];n[z+4>>2]=n[d+4>>2];n[z+8>>2]=n[d+8>>2];n[z+12>>2]=n[d+12>>2];n[z+16>>2]=n[d+16>>2];n[z+20>>2]=n[d+20>>2];n[z+24>>2]=n[d+24>>2];n[z+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=z+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=z;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=l;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=z;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=l;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[q>>2]=n[d>>2];n[q+4>>2]=n[d+4>>2];n[q+8>>2]=n[d+8>>2];n[q+12>>2]=n[d+12>>2];n[q+16>>2]=n[d+16>>2];n[q+20>>2]=n[d+20>>2];n[q+24>>2]=n[d+24>>2];n[q+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=q+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=h;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=h;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=U;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[H>>2]=n[d>>2];n[H+4>>2]=n[d+4>>2];n[H+8>>2]=n[d+8>>2];n[H+12>>2]=n[d+12>>2];n[H+16>>2]=n[d+16>>2];n[H+20>>2]=n[d+20>>2];n[H+24>>2]=n[d+24>>2];n[H+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=H+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=r;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=H;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[V>>2]=n[d>>2];n[V+4>>2]=n[d+4>>2];n[V+8>>2]=n[d+8>>2];n[V+12>>2]=n[d+12>>2];n[V+16>>2]=n[d+16>>2];n[V+20>>2]=n[d+20>>2];n[V+24>>2]=n[d+24>>2];n[V+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=V+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=r;K=V;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=c;K=h;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=s;K=V;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=o;K=h;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));n[d>>2]=n[r>>2];n[d+4>>2]=n[r+4>>2];n[d+8>>2]=n[r+8>>2];n[d+12>>2]=n[r+12>>2];n[d+16>>2]=n[r+16>>2];n[d+20>>2]=n[r+20>>2];n[d+24>>2]=n[r+24>>2];n[d+28>>2]=n[r+28>>2];n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];Tt(d,f,8);n[G>>2]=n[d>>2];n[G+4>>2]=n[d+4>>2];n[G+8>>2]=n[d+8>>2];n[G+12>>2]=n[d+12>>2];n[G+16>>2]=n[d+16>>2];n[G+20>>2]=n[d+20>>2];n[G+24>>2]=n[d+24>>2];n[G+28>>2]=n[d+28>>2];K=s+32|0;W=o+32|0;n[d>>2]=n[K>>2];n[d+4>>2]=n[K+4>>2];n[d+8>>2]=n[K+8>>2];n[d+12>>2]=n[K+12>>2];n[d+16>>2]=n[K+16>>2];n[d+20>>2]=n[K+20>>2];n[d+24>>2]=n[K+24>>2];n[d+28>>2]=n[K+28>>2];n[f>>2]=n[W>>2];n[f+4>>2]=n[W+4>>2];n[f+8>>2]=n[W+8>>2];n[f+12>>2]=n[W+12>>2];n[f+16>>2]=n[W+16>>2];n[f+20>>2]=n[W+20>>2];n[f+24>>2]=n[W+24>>2];n[f+28>>2]=n[W+28>>2];Tt(d,f,8);n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];W=G+32|0;n[W>>2]=n[i>>2];n[W+4>>2]=n[i+4>>2];n[W+8>>2]=n[i+8>>2];n[W+12>>2]=n[i+12>>2];n[W+16>>2]=n[i+16>>2];n[W+20>>2]=n[i+20>>2];n[W+24>>2]=n[i+24>>2];n[W+28>>2]=n[i+28>>2];W=d;K=E;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=d+64|0;K=q;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=d+128|0;K=F;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f;K=M;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f+64|0;K=C;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));W=f+128|0;K=G;Q=W+64|0;do{n[W>>2]=n[K>>2];W=W+4|0;K=K+4|0}while((W|0)<(Q|0));ad(e|0,d|0,192)|0;ad(e+192|0,f|0,192)|0;p=Y;return}function sa(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0;g=p;p=p+384|0;l=g+320|0;h=g+288|0;d=g+256|0;b=g+192|0;s=g+128|0;c=g+64|0;u=g;o=(t&1|0)==0;if(o){m=u;r=a;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=b;r=a+64|0;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));f=c}else{n[u>>2]=n[a>>2];n[u+4>>2]=n[a+4>>2];n[u+8>>2]=n[a+8>>2];n[u+12>>2]=n[a+12>>2];n[u+16>>2]=n[a+16>>2];n[u+20>>2]=n[a+20>>2];n[u+24>>2]=n[a+24>>2];n[u+28>>2]=n[a+28>>2];f=a+32|0;n[h>>2]=n[f>>2];n[h+4>>2]=n[f+4>>2];n[h+8>>2]=n[f+8>>2];n[h+12>>2]=n[f+12>>2];n[h+16>>2]=n[f+16>>2];n[h+20>>2]=n[f+20>>2];n[h+24>>2]=n[f+24>>2];n[h+28>>2]=n[f+28>>2];f=l;n[f>>2]=317583274;n[f+4>>2]=1757628553;f=l+8|0;n[f>>2]=1923792719;n[f+4>>2]=-1928822936;f=l+16|0;n[f>>2]=151523889;n[f+4>>2]=1373741639;f=l+24|0;n[f>>2]=1193918714;n[f+4>>2]=576313009;Ct(h,l,8,-460954743,-2016278654);n[d>>2]=n[h>>2];n[d+4>>2]=n[h+4>>2];n[d+8>>2]=n[h+8>>2];n[d+12>>2]=n[h+12>>2];n[d+16>>2]=n[h+16>>2];n[d+20>>2]=n[h+20>>2];n[d+24>>2]=n[h+24>>2];n[d+28>>2]=n[h+28>>2];f=u+32|0;n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];f=a+64|0;n[b>>2]=n[f>>2];n[b+4>>2]=n[f+4>>2];n[b+8>>2]=n[f+8>>2];n[b+12>>2]=n[f+12>>2];n[b+16>>2]=n[f+16>>2];n[b+20>>2]=n[f+20>>2];n[b+24>>2]=n[f+24>>2];n[b+28>>2]=n[f+28>>2];f=a+96|0;n[h>>2]=n[f>>2];n[h+4>>2]=n[f+4>>2];n[h+8>>2]=n[f+8>>2];n[h+12>>2]=n[f+12>>2];n[h+16>>2]=n[f+16>>2];n[h+20>>2]=n[f+20>>2];n[h+24>>2]=n[f+24>>2];n[h+28>>2]=n[f+28>>2];f=l;n[f>>2]=317583274;n[f+4>>2]=1757628553;f=l+8|0;n[f>>2]=1923792719;n[f+4>>2]=-1928822936;f=l+16|0;n[f>>2]=151523889;n[f+4>>2]=1373741639;f=l+24|0;n[f>>2]=1193918714;n[f+4>>2]=576313009;Ct(h,l,8,-460954743,-2016278654);n[d>>2]=n[h>>2];n[d+4>>2]=n[h+4>>2];n[d+8>>2]=n[h+8>>2];n[d+12>>2]=n[h+12>>2];n[d+16>>2]=n[h+16>>2];n[d+20>>2]=n[h+20>>2];n[d+24>>2]=n[h+24>>2];n[d+28>>2]=n[h+28>>2];f=b+32|0;n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];f=c}t=((t>>>0)%6|0)&255;switch(t&7){case 0:{m=l;n[m>>2]=-980480611;n[m+4>>2]=-748862579;m=l+8|0;n[m>>2]=-171504835;n[m+4>>2]=175696680;m=l+16|0;n[m>>2]=2021213740;n[m+4>>2]=1718526831;m=l+24|0;n[m>>2]=-1710760145;n[m+4>>2]=235567041;m=l+32|0;n[m>>2]=0;n[m+4>>2]=0;n[m+8>>2]=0;n[m+12>>2]=0;n[m+16>>2]=0;n[m+20>>2]=0;n[m+24>>2]=0;n[m+28>>2]=0;break}case 1:{m=l;n[m>>2]=1164159792;n[m+4>>2]=-1250477296;m=l+8|0;n[m>>2]=-1448450988;n[m+4>>2]=880775624;m=l+16|0;n[m>>2]=606996881;n[m+4>>2]=2046849319;m=l+24|0;n[m>>2]=293737708;n[m+4>>2]=425114840;m=l+32|0;n[m>>2]=-1599453353;n[m+4>>2]=1854185246;m=l+40|0;n[m>>2]=-1980198591;n[m+4>>2]=-1440973971;m=l+48|0;n[m>>2]=-85931462;n[m+4>>2]=-1226370099;m=l+56|0;n[m>>2]=1317202883;n[m+4>>2]=644435899;break}case 2:{m=l;n[m>>2]=333974428;n[m+4>>2]=860932238;m=l+8|0;n[m>>2]=-614574407;n[m+4>>2]=2110674300;m=l+16|0;n[m>>2]=-1240115638;n[m+4>>2]=1610724536;m=l+24|0;n[m>>2]=33691616;n[m+4>>2]=646112791;m=l+32|0;n[m>>2]=0;n[m+4>>2]=0;n[m+8>>2]=0;n[m+12>>2]=0;n[m+16>>2]=0;n[m+20>>2]=0;n[m+24>>2]=0;n[m+28>>2]=0;break}case 3:{m=l;n[m>>2]=380464045;n[m+4>>2]=-911269129;m=l+8|0;n[m>>2]=1252418226;n[m+4>>2]=-1290700758;m=l+16|0;n[m>>2]=-498546700;n[m+4>>2]=435072868;m=l+24|0;n[m>>2]=-482107518;n[m+4>>2]=539442807;m=l+32|0;n[m>>2]=-137456724;n[m+4>>2]=-1396692896;m=l+40|0;n[m>>2]=2074569548;n[m+4>>2]=959698305;m=l+48|0;n[m>>2]=1147962471;n[m+4>>2]=1776687243;m=l+56|0;n[m>>2]=1142410325;n[m+4>>2]=172360557;break}default:ba(5037,19,2504)}Nt(c,b,l);r=a+128|0;if(o){m=b;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0))}else{n[b>>2]=n[r>>2];n[b+4>>2]=n[r+4>>2];n[b+8>>2]=n[r+8>>2];n[b+12>>2]=n[r+12>>2];n[b+16>>2]=n[r+16>>2];n[b+20>>2]=n[r+20>>2];n[b+24>>2]=n[r+24>>2];n[b+28>>2]=n[r+28>>2];m=a+160|0;n[h>>2]=n[m>>2];n[h+4>>2]=n[m+4>>2];n[h+8>>2]=n[m+8>>2];n[h+12>>2]=n[m+12>>2];n[h+16>>2]=n[m+16>>2];n[h+20>>2]=n[m+20>>2];n[h+24>>2]=n[m+24>>2];n[h+28>>2]=n[m+28>>2];m=l;n[m>>2]=317583274;n[m+4>>2]=1757628553;m=l+8|0;n[m>>2]=1923792719;n[m+4>>2]=-1928822936;m=l+16|0;n[m>>2]=151523889;n[m+4>>2]=1373741639;m=l+24|0;n[m>>2]=1193918714;n[m+4>>2]=576313009;Ct(h,l,8,-460954743,-2016278654);n[d>>2]=n[h>>2];n[d+4>>2]=n[h+4>>2];n[d+8>>2]=n[h+8>>2];n[d+12>>2]=n[h+12>>2];n[d+16>>2]=n[h+16>>2];n[d+20>>2]=n[h+20>>2];n[d+24>>2]=n[h+24>>2];n[d+28>>2]=n[h+28>>2];m=b+32|0;n[m>>2]=n[d>>2];n[m+4>>2]=n[d+4>>2];n[m+8>>2]=n[d+8>>2];n[m+12>>2]=n[d+12>>2];n[m+16>>2]=n[d+16>>2];n[m+20>>2]=n[d+20>>2];n[m+24>>2]=n[d+24>>2];n[m+28>>2]=n[d+28>>2]}switch(t&7){case 0:{m=l;n[m>>2]=-980480611;n[m+4>>2]=-748862579;m=l+8|0;n[m>>2]=-171504835;n[m+4>>2]=175696680;m=l+16|0;n[m>>2]=2021213740;n[m+4>>2]=1718526831;m=l+24|0;n[m>>2]=-1710760145;n[m+4>>2]=235567041;m=l+32|0;n[m>>2]=0;n[m+4>>2]=0;n[m+8>>2]=0;n[m+12>>2]=0;n[m+16>>2]=0;n[m+20>>2]=0;n[m+24>>2]=0;n[m+28>>2]=0;Nt(s,b,l);m=e;r=u;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+64|0;r=f;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+128|0;r=s;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));p=g;return}case 1:{m=l;n[m>>2]=-2076524910;n[m+4>>2]=1935791999;m=l+8|0;n[m>>2]=657723899;n[m+4>>2]=-1514460205;m=l+16|0;n[m>>2]=1262363545;n[m+4>>2]=-1668014287;m=l+24|0;n[m>>2]=-1147153428;n[m+4>>2]=366976221;m=l+32|0;n[m>>2]=1272498505;n[m+4>>2]=1574829333;m=l+40|0;n[m>>2]=-1539024032;n[m+4>>2]=1657481637;m=l+48|0;n[m>>2]=209572537;n[m+4>>2]=935102218;m=l+56|0;n[m>>2]=829550845;n[m+4>>2]=612567709;Nt(s,b,l);m=e;r=u;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+64|0;r=f;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+128|0;r=s;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));p=g;return}case 2:{m=l;n[m>>2]=-679288491;n[m+4>>2]=1905462289;m=l+8|0;n[m>>2]=-4312285;n[m+4>>2]=-1497656196;m=l+16|0;n[m>>2]=-730590140;n[m+4>>2]=-1439681724;m=l+24|0;n[m>>2]=643385667;n[m+4>>2]=742080269;m=l+32|0;n[m>>2]=0;n[m+4>>2]=0;n[m+8>>2]=0;n[m+12>>2]=0;n[m+16>>2]=0;n[m+20>>2]=0;n[m+24>>2]=0;n[m+28>>2]=0;Nt(s,b,l);m=e;r=u;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+64|0;r=f;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+128|0;r=s;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));p=g;return}case 3:{m=l;n[m>>2]=2070373087;n[m+4>>2]=1149932453;m=l+8|0;n[m>>2]=687729375;n[m+4>>2]=-1076482571;m=l+16|0;n[m>>2]=245093498;n[m+4>>2]=-665258544;m=l+24|0;n[m>>2]=880208984;n[m+4>>2]=112213325;m=l+32|0;n[m>>2]=-1127663919;n[m+4>>2]=723114740;m=l+40|0;n[m>>2]=1458842015;n[m+4>>2]=-1583001990;m=l+48|0;n[m>>2]=1524543217;n[m+4>>2]=-1254887712;m=l+56|0;n[m>>2]=-2065850190;n[m+4>>2]=386695467;Nt(s,b,l);m=e;r=u;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+64|0;r=f;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));m=e+128|0;r=s;i=m+64|0;do{n[m>>2]=n[r>>2];m=m+4|0;r=r+4|0}while((m|0)<(i|0));p=g;return}default:ba(5037,19,2520)}}function ba(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;c=p;p=p+16|0;r=At(8,4,c)|0;if(!r)Ht(c);else{n[r>>2]=e;n[r+4>>2]=a;Na(r,168,t)}}function ua(e){e=e|0;return}function la(e){e=e|0;T=-296224341;return-563829082}function pa(e,a,t){e=e|0;a=a|0;t=t|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;k=p;p=p+1488|0;g=k+1024|0;m=k+960|0;u=k+768|0;h=k+576|0;s=k+384|0;l=k+256|0;b=k+192|0;y=k+128|0;v=k+64|0;i=k;w=k+1350|0;_=k+1216|0;f=i;o=a;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=v;o=a;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=y;o=t;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));Bt(b,y);Bt(m,v);f=g;o=i;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));Nt(s,m,g);f=h;o=s;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));n[m>>2]=n[s>>2];n[m+4>>2]=n[s+4>>2];n[m+8>>2]=n[s+8>>2];n[m+12>>2]=n[s+12>>2];n[m+16>>2]=n[s+16>>2];n[m+20>>2]=n[s+20>>2];n[m+24>>2]=n[s+24>>2];n[m+28>>2]=n[s+28>>2];a=g;n[a>>2]=2008548008;n[a+4>>2]=1006188771;a=g+8|0;n[a>>2]=909333341;n[a+4>>2]=34282279;a=g+16|0;n[a>>2]=1232425568;n[a+4>>2]=649588208;a=g+24|0;n[a>>2]=1132767341;n[a+4>>2]=622118450;Tt(m,g,8);n[l>>2]=n[m>>2];n[l+4>>2]=n[m+4>>2];n[l+8>>2]=n[m+8>>2];n[l+12>>2]=n[m+12>>2];n[l+16>>2]=n[m+16>>2];n[l+20>>2]=n[m+20>>2];n[l+24>>2]=n[m+24>>2];n[l+28>>2]=n[m+28>>2];a=h+32|0;n[m>>2]=n[a>>2];n[m+4>>2]=n[a+4>>2];n[m+8>>2]=n[a+8>>2];n[m+12>>2]=n[a+12>>2];n[m+16>>2]=n[a+16>>2];n[m+20>>2]=n[a+20>>2];n[m+24>>2]=n[a+24>>2];n[m+28>>2]=n[a+28>>2];a=g;n[a>>2]=-774045849;n[a+4>>2]=954723532;a=g+8|0;n[a>>2]=-1815212738;n[a+4>>2]=1710273405;a=g+16|0;n[a>>2]=581697706;n[a+4>>2]=-683028259;a=g+24|0;n[a>>2]=1248365901;n[a+4>>2]=21084622;Tt(m,g,8);n[u>>2]=n[m>>2];n[u+4>>2]=n[m+4>>2];n[u+8>>2]=n[m+8>>2];n[u+12>>2]=n[m+12>>2];n[u+16>>2]=n[m+16>>2];n[u+20>>2]=n[m+20>>2];n[u+24>>2]=n[m+24>>2];n[u+28>>2]=n[m+28>>2];a=l+32|0;n[a>>2]=n[u>>2];n[a+4>>2]=n[u+4>>2];n[a+8>>2]=n[u+8>>2];n[a+12>>2]=n[u+12>>2];n[a+16>>2]=n[u+16>>2];n[a+20>>2]=n[u+20>>2];n[a+24>>2]=n[u+24>>2];n[a+28>>2]=n[u+28>>2];do{if((Lo(b,l,32)|0)==0?(Lo(b+32|0,a,32)|0)==0:0){f=l;o=v;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=l+64|0;o=y;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=u;o=l;d=f+128|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=u+128|0;n[f>>2]=-980480611;n[f+4>>2]=-748862579;f=u+136|0;n[f>>2]=-171504835;n[f+4>>2]=175696680;f=u+144|0;n[f>>2]=2021213740;n[f+4>>2]=1718526831;f=u+152|0;n[f>>2]=-1710760145;n[f+4>>2]=235567041;f=u+160|0;n[f>>2]=0;n[f+4>>2]=0;n[f+8>>2]=0;n[f+12>>2]=0;n[f+16>>2]=0;n[f+20>>2]=0;n[f+24>>2]=0;n[f+28>>2]=0;f=g;n[f>>2]=1342177275;n[f+4>>2]=-1399442404;f=g+8|0;n[f>>2]=-1621045975;n[f+4>>2]=922515093;f=g+16|0;n[f>>2]=2021213742;n[f+4>>2]=1718526831;f=g+24|0;n[f>>2]=-1710760145;n[f+4>>2]=235567041;Rt(g,72);n[m>>2]=n[g>>2];n[m+4>>2]=n[g+4>>2];n[m+8>>2]=n[g+8>>2];n[m+12>>2]=n[g+12>>2];n[m+16>>2]=n[g+16>>2];n[m+20>>2]=n[g+20>>2];n[m+24>>2]=n[g+24>>2];n[m+28>>2]=n[g+28>>2];rf(h,u,m);f=g;o=l;d=f+128|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));m=g+128|0;n[m>>2]=-980480611;n[m+4>>2]=-748862579;m=g+136|0;n[m>>2]=-171504835;n[m+4>>2]=175696680;m=g+144|0;n[m>>2]=2021213740;n[m+4>>2]=1718526831;m=g+152|0;n[m>>2]=-1710760145;n[m+4>>2]=235567041;m=g+160|0;n[m>>2]=0;n[m+4>>2]=0;n[m+8>>2]=0;n[m+12>>2]=0;n[m+16>>2]=0;n[m+20>>2]=0;n[m+24>>2]=0;n[m+28>>2]=0;af(s,h,g);m=s+128|0;if(((((((n[m>>2]|0)==0&(n[m+4>>2]|0)==0?(m=s+136|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0)?(m=s+144|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0)?(m=s+152|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0)?(m=s+160|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0)?(m=s+168|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0)?(m=s+176|0,(n[m>>2]|0)==0&(n[m+4>>2]|0)==0):0){m=s+184|0;if((n[m>>2]|0)==0&(n[m+4>>2]|0)==0){f=g;o=v;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=g+64|0;o=y;d=f+64|0;do{n[f>>2]=n[o>>2];f=f+4|0;o=o+4|0}while((f|0)<(d|0));f=w+6|0;o=g;d=f+128|0;do{c[f>>1]=c[o>>1]|0;f=f+2|0;o=o+2|0}while((f|0)<(d|0));a=0;A=15;break}}else A=10;a=1;t=1}else A=12}while(0);if((A|0)==12){a=1;A=15}if((A|0)==15)t=0;ad(_|0,w|0,134)|0;if(!(a<<24>>24)){f=e+8|0;o=_+6|0;d=f+128|0;do{c[f>>1]=c[o>>1]|0;f=f+2|0;o=o+2|0}while((f|0)<(d|0));A=0;r[e>>0]=A;p=k;return}else{r[e+1>>0]=t;A=1;r[e>>0]=A;p=k;return}}function ha(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0;i=p;p=p+256|0;t=i+128|0;r=i;c=r;f=a;o=c+128|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));c=t;f=a;o=c+64|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));c=t+64|0;f=r+64|0;o=c+64|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));c=e;f=t;o=c+128|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));o=e+128|0;n[o>>2]=-980480611;n[o+4>>2]=-748862579;o=e+136|0;n[o>>2]=-171504835;n[o+4>>2]=175696680;o=e+144|0;n[o>>2]=2021213740;n[o+4>>2]=1718526831;o=e+152|0;n[o>>2]=-1710760145;n[o+4>>2]=235567041;o=e+160|0;n[o>>2]=0;n[o+4>>2]=0;n[o+8>>2]=0;n[o+12>>2]=0;n[o+16>>2]=0;n[o+20>>2]=0;n[o+24>>2]=0;n[o+28>>2]=0;p=i;return}function ma(e,a){e=e|0;a=a|0;var t=0,c=0;c=p;p=p+16|0;t=c;if(!(r[e>>0]|0)){xf(t,a,5165,18);t=Ef(t)|0;p=c;return t|0}else{xf(t,a,5183,9);t=Ef(t)|0;p=c;return t|0}return 0}function ga(e){e=e|0;var a=0;a=p;p=p+16|0;n[a>>2]=n[e>>2];n[a+4>>2]=n[e+4>>2];n[a+8>>2]=n[e+8>>2];kt(a)}function va(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function ya(e){e=e|0;var a=0,t=0,r=0,c=0,i=0;c=p;p=p+16|0;i=c;r=e+4|0;a=n[r>>2]|0;do{if(!a){a=At(4,1,i)|0;if(!a){a=0;t=0;e=0}else{i=4;t=a;n[e>>2]=t;n[r>>2]=i;p=c;return}}else{t=a<<1;if((t|0)<0)Oi(3420);if(!t){di(i,5225,32);t=i+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;e=n[i>>2]|0;break}a=Et(n[e>>2]|0,a,1,t,1,i)|0;if(!a){t=i+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;e=n[i>>2]|0;break}i=t;t=a;n[e>>2]=t;n[r>>2]=i;p=c;return}}while(0);n[i>>2]=e;c=i+4|0;n[c>>2]=a;n[c+4>>2]=t;ga(i)}function _a(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0;l=p;p=p+32|0;i=l+16|0;u=l;f=t<<1;if((f|0)<0)Oi(3420);if(f){c=At(f,1,i)|0;if(!c)ga(i);else o=c}else o=1;n[u>>2]=o;d=u+4|0;n[d>>2]=f;s=u+8|0;n[s>>2]=0;b=a+t|0;if(!t){n[e>>2]=n[u>>2];n[e+4>>2]=n[u+4>>2];n[e+8>>2]=n[u+8>>2];p=l;return}c=0;i=o;while(1){o=a+1|0;t=r[a>>0]|0;a=r[5257+((t&255)>>>4&255)>>0]|0;if((c|0)==(f|0)){m=0;ee(44,u|0);f=m;m=0;if(f&1){c=6;break}c=n[s>>2]|0;i=n[u>>2]|0}r[i+c>>0]=a;c=(n[s>>2]|0)+1|0;n[s>>2]=c;i=r[5257+(t&15)>>0]|0;if((c|0)==(n[d>>2]|0)){m=0;ee(44,u|0);f=m;m=0;if(f&1){c=6;break}c=n[s>>2]|0}a=n[u>>2]|0;r[a+c>>0]=i;c=c+1|0;n[s>>2]=c;if((o|0)==(b|0)){c=17;break}f=n[d>>2]|0;i=a;a=o}if((c|0)==6){l=me()|0;va(u);je(l|0)}else if((c|0)==17){n[e>>2]=n[u>>2];n[e+4>>2]=n[u+4>>2];n[e+8>>2]=n[u+8>>2];p=l;return}}function wa(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0;f=p;p=p+64|0;t=f+24|0;r=f;i=f+52|0;c=f+48|0;if(!(n[e>>2]|0)){n[c>>2]=n[e+4>>2];n[i>>2]=n[e+8>>2];n[t>>2]=c;n[t+4>>2]=39;n[t+8>>2]=i;n[t+12>>2]=40;n[r>>2]=2536;n[r+4>>2]=2;n[r+8>>2]=0;n[r+16>>2]=t;n[r+20>>2]=2;i=Mf(a,r)|0;p=f;return i|0}else{n[t>>2]=2552;n[t+4>>2]=1;n[t+8>>2]=0;n[t+16>>2]=13784;n[t+20>>2]=0;i=Mf(a,t)|0;p=f;return i|0}return 0}function Aa(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;k=p;p=p+32|0;i=k+16|0;_=k;f=t>>>1;if(f){c=At(f,1,i)|0;if(!c)ga(i);else o=c}else o=1;n[_>>2]=o;A=_+4|0;n[A>>2]=f;h=_+8|0;n[h>>2]=0;g=a+t|0;do{if(t){w=o;s=a;c=0;b=1;u=o;d=0;f=0;i=0;e:while(1){l=b;v=f;while(1){o=s;s=s+1|0;o=r[o>>0]|0;if((o+-65&255)<6){f=-55;break}if((o+-97&255)<6){f=-87;break}if((o+-48&255)<10){f=-48;break}switch(o<<24>>24){case 9:case 10:case 13:case 32:break;default:{f=11;break e}}if((s|0)==(g|0)){f=8;break e}else{v=l;l=l+1|0;d=d&15}}d=f+o<<24>>24|d<<4&255;i=i+1|0;if((i|0)==2){if((c|0)==(n[A>>2]|0)){m=0;ee(44,_|0);w=m;m=0;if(w&1){f=4;break}c=n[h>>2]|0;i=n[_>>2]|0}else i=u;r[i+c>>0]=d;c=(n[h>>2]|0)+1|0;n[h>>2]=c;f=i;o=i;i=0}else{f=w;o=u}if((s|0)==(g|0)){f=8;break}else{w=f;b=l+1|0;u=o;f=l}}if((f|0)==4){k=me()|0;va(_);je(k|0)}else if((f|0)==8){if(!i){f=44;break}n[e>>2]=1;n[e+4>>2]=1;c=n[A>>2]|0;if(!c)break;xt(n[_>>2]|0,c,1);break}else if((f|0)==11){do{if((v|0)==0|(v|0)==(t|0))c=a+v|0;else{if(v>>>0<t>>>0?(y=a+v|0,(r[y>>0]|0)>-65):0){c=y;break}m=0;fe(5,a|0,t|0,v|0,t|0);m=0;k=me()|0;va(_);je(k|0)}}while(0);b=a+v+(t-v)|0;if((c|0)==(b|0)){m=0;ee(36,3624);m=0;k=me()|0;va(_);je(k|0)}i=a+v+1|0;d=r[c>>0]|0;if(d<<24>>24<=-1){s=d&31;if((i|0)==(b|0)){f=b;c=0}else{f=a+v+2|0;c=r[i>>0]&63}i=c&255;c=i|s<<6;if((d&255)>223){if((f|0)==(b|0)){o=b;c=0}else{o=f+1|0;c=r[f>>0]&63}i=c&255|i<<6;c=i|s<<12;if((d&255)>239){if((o|0)==(b|0))c=0;else c=r[o>>0]&63;c=i<<6|s<<18&1835008|c&255}}}else c=d&255;n[e>>2]=1;n[e+4>>2]=0;n[e+8>>2]=c;n[e+12>>2]=v;c=n[A>>2]|0;if(c|0)xt(w,c,1);p=k;return}}else{c=0;f=44}}while(0);if((f|0)==44){w=n[_>>2]|0;A=n[A>>2]|0;n[e>>2]=0;n[e+4>>2]=w;n[e+8>>2]=A;n[e+12>>2]=c}p=k;return}function ka(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;c=p;p=p+16|0;r=At(8,4,c)|0;if(!r)Ma(c);else{n[r>>2]=e;n[r+4>>2]=a;Na(r,448,t)}}function xa(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0;s=p;p=p+80|0;f=s+48|0;i=s+24|0;d=s;o=s+64|0;switch(r[e>>0]&3){case 0:{t=n[e+4>>2]|0;n[o>>2]=t;Uc(d,t);n[f>>2]=d;n[f+4>>2]=42;n[f+8>>2]=o;n[f+12>>2]=43;n[i>>2]=3168;n[i+4>>2]=3;n[i+8>>2]=0;n[i+16>>2]=f;n[i+20>>2]=2;m=0;t=ne(44,a|0,i|0)|0;o=m;m=0;if(o&1){s=me()|0;Ba(d);je(s|0)}c=n[d+4>>2]|0;if(c|0)xt(n[d>>2]|0,c,1);d=t;p=s;return d|0}case 1:{do{switch(r[e+1>>0]&31){case 0:{t=16;c=6881;break}case 1:{t=17;c=7161;break}case 2:{t=18;c=6897;break}case 3:{t=16;c=6915;break}case 4:{t=18;c=6931;break}case 5:{t=13;c=6949;break}case 6:{t=14;c=6962;break}case 7:{t=21;c=6976;break}case 8:{t=11;c=6997;break}case 9:{t=21;c=7008;break}case 10:{t=21;c=7029;break}case 11:{t=23;c=7050;break}case 12:{t=12;c=7073;break}case 13:{t=9;c=7085;break}case 14:{t=10;c=7094;break}case 15:{t=21;c=7104;break}case 16:{t=14;c=7125;break}case 17:{t=22;c=7139;break}default:ka(5539,40,3144)}}while(0);n[f>>2]=c;n[f+4>>2]=t;n[i>>2]=f;n[i+4>>2]=41;n[d>>2]=3160;n[d+4>>2]=1;n[d+8>>2]=0;n[d+16>>2]=i;n[d+20>>2]=1;d=Mf(a,d)|0;p=s;return d|0}default:{d=n[e+4>>2]|0;d=Fd[n[(n[d+8>>2]|0)+24>>2]&127](n[d+4>>2]|0,a)|0;p=s;return d|0}}return 0}function Ea(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;r=p;p=p+48|0;t=r+24|0;c=r+16|0;n[r>>2]=1;n[r+4>>2]=0;n[r+8>>2]=0;n[c>>2]=r;n[t>>2]=n[e>>2];n[t+4>>2]=n[e+4>>2];n[t+8>>2]=n[e+8>>2];n[t+12>>2]=n[e+12>>2];n[t+16>>2]=n[e+16>>2];n[t+20>>2]=n[e+20>>2];m=0;J(10,c|0,184,t|0)|0;e=m;m=0;if(e&1){c=me()|0;Ba(r);je(c|0)}else{n[t>>2]=n[r>>2];n[t+4>>2]=n[r+4>>2];n[t+8>>2]=n[r+8>>2];Oa(t,a)}}function Sa(e){e=e|0;ja(e);return}function Ta(e){e=e|0;if(!(n[e>>2]|0))return;ja(e+4|0);return}function ja(e){e=e|0;var a=0,t=0,r=0;if((i[e>>0]|0)<2)return;t=e+4|0;e=n[t>>2]|0;r=e+4|0;e=e+8|0;m=0;ee(n[n[e>>2]>>2]|0,n[r>>2]|0);a=m;m=0;if(a&1){a=me()|0;Ca(n[r>>2]|0,n[e>>2]|0);Ra(n[t>>2]|0);je(a|0)}e=n[e>>2]|0;a=n[e+4>>2]|0;if(a|0)xt(n[r>>2]|0,a,n[e+8>>2]|0);xt(n[t>>2]|0,12,4);return}function Ca(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function Ra(e){e=e|0;xt(e,12,4);return}function Oa(e,a){e=e|0;a=a|0;var t=0,r=0;r=p;p=p+32|0;t=r+16|0;n[r>>2]=n[e>>2];n[r+4>>2]=n[e+4>>2];n[r+8>>2]=n[e+8>>2];e=At(12,4,t)|0;if(!e)Ma(t);else{n[e>>2]=n[r>>2];n[e+4>>2]=n[r+4>>2];n[e+8>>2]=n[r+8>>2];Na(e,208,a)}}function Ba(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function Ma(e){e=e|0;var a=0;a=p;p=p+16|0;n[a>>2]=n[e>>2];n[a+4>>2]=n[e+4>>2];n[a+8>>2]=n[e+8>>2];kt(a)}function Na(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0;g=p;p=p+80|0;l=g+56|0;h=g+32|0;b=g+8|0;n[g>>2]=e;n[g+4>>2]=a;o=n[t>>2]|0;d=n[t+4>>2]|0;s=n[t+8>>2]|0;c=n[t+12>>2]|0;i=e;f=a;m=0;t=$(1)|0;y=m;m=0;e:do{if(!(y&1)){if(!t){m=0;ce(2);m=0;break}if(n[t>>2]|0){y=t+4|0;t=(n[y>>2]|0)+1|0;r[y>>0]=t;r[y+1>>0]=t>>8;r[y+2>>0]=t>>16;r[y+3>>0]=t>>24;if(t>>>0>2){n[b>>2]=2616;n[b+4>>2]=1;n[b+8>>2]=0;n[b+16>>2]=13784;n[b+20>>2]=0;m=0;ee(45,b|0);y=m;m=0;if(y&1)break;ea()}else u=t}else{u=t;y=u;r[y>>0]=1;r[y+1>>0]=0;r[y+2>>0]=0;r[y+3>>0]=0;u=u+4|0;r[u>>0]=0;r[u+1>>0]=0;r[u+2>>0]=0;r[u+3>>0]=0;u=t+4|0;r[u>>0]=1;r[u+1>>0]=0;r[u+2>>0]=0;r[u+3>>0]=0;u=1}n[h>>2]=i;n[h+4>>2]=f;n[h+8>>2]=o;n[h+12>>2]=d;n[h+16>>2]=s;n[h+20>>2]=c;t=Te(13512)|0;switch(t|0){case 11:{m=0;re(20,5351,36,2584);m=0;break e}case 35:break;default:v=9}do{if((v|0)==9){if(r[13548]|0){if(t|0)break;he(13512)|0;break}n[3386]=(n[3386]|0)+1;if(!(n[3438]|0)){m=0;ee(46,h|0);y=m;m=0;if(y&1)break e}else{m=0;ae(n[(n[3440]|0)+12>>2]|0,n[3439]|0,h|0);y=m;m=0;if(y&1)break e}n[3386]=(n[3386]|0)-1;he(13512)|0;if(u>>>0<=1)Da(e,a);n[l>>2]=2624;n[l+4>>2]=1;n[l+8>>2]=0;n[l+16>>2]=13784;n[l+20>>2]=0;m=0;ee(45,l|0);y=m;m=0;if(y&1)break e;ea()}}while(0);m=0;re(20,5387,41,2600);m=0}}while(0);y=me()|0;za(g);je(y|0)}function Ia(){var e=0,a=0,t=0,r=0;r=p;p=p+16|0;a=r;e=n[784]|0;if(!e)e=pr(3136)|0;e=Oe(e|0)|0;if(e|0){t=(e|0)==1?0:e+4|0;p=r;return t|0}t=At(12,4,a)|0;if(!t)Ma(a);n[t>>2]=3136;a=t+4|0;e=a;n[e>>2]=0;n[e+4>>2]=0;e=n[784]|0;if(!e)e=pr(3136)|0;Ye(e|0,t|0)|0;t=a;p=r;return t|0}function Pa(){var e=0,a=0,t=0,r=0,c=0,i=0;c=p;p=p+48|0;a=c+32|0;e=c+8|0;i=c;n[i>>2]=6813;n[i+4>>2]=57;r=n[896]|0;t=n[897]|0;n[a>>2]=i;n[a+4>>2]=41;n[a+8>>2]=c+32;n[a+12>>2]=45;n[e>>2]=r;n[e+4>>2]=t;n[e+8>>2]=0;n[e+16>>2]=a;n[e+20>>2]=2;Ci(e,3648)}function Fa(e){e=e|0;var a=0,t=0,r=0,c=0;c=p;p=p+48|0;r=c+16|0;t=c;n[r>>2]=n[e>>2];n[r+4>>2]=n[e+4>>2];n[r+8>>2]=n[e+8>>2];n[r+12>>2]=n[e+12>>2];n[r+16>>2]=n[e+16>>2];n[r+20>>2]=n[e+20>>2];xr(t,c+40|0,r);r=n[t+8>>2]|0;if((n[t>>2]|0)==0?1:(n[t+4>>2]&255)<2){p=c;return}t=r+4|0;e=r+8|0;m=0;ee(n[n[e>>2]>>2]|0,n[t>>2]|0);a=m;m=0;if(a&1){c=me()|0;Ca(n[t>>2]|0,n[e>>2]|0);Ra(r);je(c|0)}a=n[e>>2]|0;e=n[a+4>>2]|0;if(e|0)xt(n[t>>2]|0,e,n[a+8>>2]|0);xt(r,12,4);p=c;return}function La(e){e=e|0;var a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0;S=p;p=p+128|0;b=S+96|0;x=S+88|0;w=S+80|0;j=S+64|0;A=S+40|0;y=S+32|0;E=S+24|0;_=S+16|0;v=S+8|0;u=S+112|0;h=S+108|0;l=S;g=S+116|0;t=Ia()|0;if(!t)Pa();if(n[t>>2]|0)if((n[t+4>>2]|0)>>>0>1)a=2;else k=6;else{k=t;f=k;r[f>>0]=1;r[f+1>>0]=0;r[f+2>>0]=0;r[f+3>>0]=0;k=k+4|0;r[k>>0]=0;r[k+1>>0]=0;r[k+2>>0]=0;r[k+3>>0]=0;k=t+4|0;r[k>>0]=0;r[k+1>>0]=0;r[k+2>>0]=0;r[k+3>>0]=0;k=6}e:do{if((k|0)==6)switch(n[3441]|0){case 1:{a=0;break e}case 0:{Ua(b,5525,14);t=n[b>>2]|0;if(t){c=n[b+4>>2]|0;a:do{switch(n[b+8>>2]|0){case 1:{if((t|0)==5579)a=0;else a=(r[t>>0]|0)==48?0:3;break}case 4:{if((t|0)!=5580?Lo(t,5580,4)|0:0){a=3;break a}a=2;break}default:a=3}}while(0);if(c)xt(t,c,1)}else a=0;n[3441]=a<<24>>24==0?1:a&255;break e}case 2:{a=2;break e}case 3:{a=3;break e}default:ka(5539,40,2656)}}while(0);r[g>>0]=a;c=n[e+12>>2]|0;n[l>>2]=n[e+8>>2];n[l+4>>2]=c;n[h>>2]=n[e+16>>2];n[u>>2]=n[e+20>>2];c=n[e>>2]|0;a=n[(n[e+4>>2]|0)+12>>2]|0;f=Nd[a&15](c)|0;f=(f|0)==-563829082&(T|0)==-296224341;t=f?c:0;if(f){a=n[t+4>>2]|0;n[v>>2]=n[t>>2]}else{f=Nd[a&15](c)|0;if((f|0)==1862574219&(T|0)==-751764377){a=n[c+8>>2]|0;t=n[c>>2]|0}else{a=8;t=5584}n[v>>2]=t}n[v+4>>2]=a;r[_>>0]=1;f=Va()|0;n[E>>2]=f;i=(f|0)==0;if(!i?(o=n[f+16>>2]|0,(o|0)!=0):0){e=n[f+20>>2]|0;a=e+-1|0;if(!e){m=0;ae(14,a|0,0);m=0}else{d=o;s=a;k=31}}else{d=0;s=0;k=31}do{if((k|0)==31?(k=(d|0)!=0,n[y>>2]=k?d:5592,n[y+4>>2]=k?s:9,n[A>>2]=y,n[A+4>>2]=v,n[A+8>>2]=l,n[A+12>>2]=h,n[A+16>>2]=u,n[A+20>>2]=g,m=0,ee(47,b|0),k=m,m=0,!(k&1)):0){if(n[b>>2]|0){m=0;ce(2);m=0;break}e=b+4|0;a=n[e>>2]|0;e=n[e+4>>2]|0;c=(r[_>>0]|0)==0;t=j;n[t>>2]=a;n[t+4>>2]=e;t=j+8|0;n[t>>2]=c?0:_+1|0;e:do{if(!a)if(!c?(m=0,re(21,A|0,t|0,224),x=m,m=0,x&1):0){a=me()|0;t=1;k=36}else{a=1;k=48}else{n[w>>2]=a;n[w+4>>2]=e;m=0;re(21,A|0,a|0,e|0);k=m;m=0;if(k&1){a=me()|0;ir(w);t=0;k=36;break}n[x>>2]=a;t=x+4|0;n[t>>2]=e;m=0;a=te(9,x|0)|0;k=m;m=0;do{if(!(k&1)){if(a<<24>>24){m=0;ce(2);m=0;break}a=n[x>>2]|0;if(a|0){m=0;ee(n[n[t>>2]>>2]|0,a|0);k=m;m=0;if(k&1){a=me()|0;or(n[x>>2]|0,n[t>>2]|0);t=0;k=36;break e}a=n[t>>2]|0;t=n[a+4>>2]|0;if(t|0)xt(n[x>>2]|0,t,n[a+8>>2]|0)}a=0;k=48;break e}}while(0);a=me()|0;fr(x);t=0;k=36}}while(0);do{if((k|0)==36)Ha(E);else if((k|0)==48){if((!i?(x=n[f>>2]|0,n[f>>2]=x-1,(x|0)==1):0)?(m=0,ee(48,E|0),E=m,m=0,E&1):0){S=me()|0;t=a<<24>>24!=0;a=S;break}t=n[j>>2]|0;if(a<<24>>24==0|(t|0)==0){p=S;return}a=j+4|0;m=0;ee(n[n[a>>2]>>2]|0,t|0);E=m;m=0;if(E&1){S=me()|0;or(n[j>>2]|0,n[a>>2]|0);je(S|0)}a=n[a>>2]|0;t=n[a+4>>2]|0;if(!t){p=S;return}xt(n[j>>2]|0,t,n[a+8>>2]|0);p=S;return}}while(0);if(!(n[j>>2]|0)){fr(j);j=a;je(j|0)}if(!t){j=a;je(j|0)}ir(j);j=a;je(j|0)}}while(0);j=me()|0;Ha(E);je(j|0)}function Da(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0;f=p;p=p+80|0;r=f+56|0;t=f+32|0;c=f+8|0;i=f;f=f+64|0;n[f>>2]=ii(e,a)|0;n[i>>2]=f;n[i+4>>2]=46;n[c>>2]=2632;n[c+4>>2]=1;n[c+8>>2]=0;n[c+16>>2]=i;n[c+20>>2]=1;n[r>>2]=c;n[r+4>>2]=47;n[t>>2]=2640;n[t+4>>2]=2;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=1;Fa(t);Pe()}function za(e){e=e|0;var a=0,t=0;a=e+4|0;m=0;ee(n[n[a>>2]>>2]|0,n[e>>2]|0);t=m;m=0;if(t&1){t=me()|0;qa(n[e>>2]|0,n[a>>2]|0);je(t|0)}a=n[a>>2]|0;t=n[a+4>>2]|0;if(!t)return;xt(n[e>>2]|0,t,n[a+8>>2]|0);return}function qa(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function Ua(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0;h=p;p=p+96|0;f=h+72|0;b=h+48|0;c=h+40|0;l=h+16|0;g=h+8|0;i=h;n[i>>2]=a;n[i+4>>2]=t;Cc(l,a,t);if(n[l>>2]|0){g=l+4|0;n[f>>2]=n[g>>2];n[f+4>>2]=n[g+4>>2];n[f+8>>2]=n[g+8>>2];n[f+12>>2]=n[g+12>>2];m=0;ae(24,c|0,f|0);g=m;m=0;if(!(g&1)){g=n[c+4>>2]|0;n[l>>2]=n[c>>2];h=l+4|0;n[h>>2]=g;n[h+4>>2]=0;h=n[l+4>>2]|0;g=c;n[g>>2]=n[l>>2];n[g+4>>2]=h;n[f>>2]=i;n[f+4>>2]=48;n[f+8>>2]=c;n[f+12>>2]=49;n[b>>2]=3104;n[b+4>>2]=2;n[b+8>>2]=0;n[b+16>>2]=f;n[b+20>>2]=2;m=0;ae(26,b|0,3120);m=0;g=me()|0;Sa(c);je(g|0)}g=me()|0;je(g|0)}s=l+4|0;c=n[s>>2]|0;s=n[s+4>>2]|0;d=g;n[d>>2]=c;n[d+4>>2]=s;d=c;Jo(13680)|0;s=g+4|0;c=De(c|0)|0;e:do{if(!c){t=0;c=0;i=0}else{i=Ao(c)|0;do{if((i|0)!=-1){if((i|0)<0){m=0;ee(36,3420);m=0;u=4;break}if(i){a=At(i,1,f)|0;if(!a)Ma(f);else o=a}else o=1;n[b>>2]=o;a=b+4|0;n[a>>2]=i;t=b+8|0;n[t>>2]=0;m=0;ae(25,b|0,i|0);o=m;m=0;if(o&1){a=me()|0;m=0;ee(49,b|0);h=m;m=0;if(h&1){u=4;break}else break}else{o=n[t>>2]|0;n[t>>2]=o+i;u=n[b>>2]|0;ad(u+o|0,c|0,i|0)|0;c=a;t=n[c>>2]|0;c=n[c+4>>2]|0;i=u;break e}}else{m=0;ae(14,-1,0);m=0;u=4}}while(0);if((u|0)==4)a=me()|0;Oc(g);g=a;je(g|0)}}while(0);ed(13680)|0;r[d>>0]=0;a=n[s>>2]|0;if(!a){n[l>>2]=i;g=l+4|0;u=g;n[u>>2]=t;g=g+4|0;n[g>>2]=c;n[e>>2]=n[l>>2];n[e+4>>2]=n[l+4>>2];n[e+8>>2]=n[l+8>>2];p=h;return}xt(n[g>>2]|0,a,1);n[l>>2]=i;g=l+4|0;u=g;n[u>>2]=t;g=g+4|0;n[g>>2]=c;n[e>>2]=n[l>>2];n[e+4>>2]=n[l+4>>2];n[e+8>>2]=n[l+8>>2];p=h;return}function Ha(e){e=e|0;var a=0,t=0;a=n[e>>2]|0;if(!a)return;t=n[a>>2]|0;n[a>>2]=t-1;if((t|0)!=1)return;nr(e);return}function Va(){var e=0,a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0;h=p;p=p+96|0;l=h+56|0;s=h+32|0;o=h+16|0;d=h;f=rc()|0;if(!f){l=0;p=h;return l|0}do{if(!(n[f>>2]|0)){e=l;a=f;t=e+20|0;do{r[e>>0]=r[a>>0]|0;e=e+1|0;a=a+1|0}while((e|0)<(t|0));r[f>>0]=1;r[f+1>>0]=0;r[f+2>>0]=0;r[f+3>>0]=0;e=f+4|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;t=f+16|0;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;n[s>>2]=n[l>>2];n[s+4>>2]=n[l+4>>2];n[s+8>>2]=n[l+8>>2];n[s+12>>2]=n[l+12>>2];n[s+16>>2]=n[l+16>>2];if((n[s>>2]|0?(c=s+16|0,i=n[c>>2]|0,i|0):0)?(t=n[i>>2]|0,n[i>>2]=t-1,(t|0)==1):0)nr(c);if(!(n[f>>2]|0))Oi(3624);else{b=e;u=e;break}}else{u=f+4|0;b=u}}while(0);e=n[b>>2]|0;if((e|0)==-1){m=0;ce(3);m=0;h=me()|0;je(h|0)}c=u;a=f+8|0;i=a;t=f+16|0;if(!(n[t>>2]|0)){n[o>>2]=0;m=0;e=te(10,o|0)|0;o=m;m=0;if(o&1){h=me()|0;je(h|0)}n[d>>2]=0;n[d+8>>2]=e;if(n[b>>2]|0){m=0;ce(4);m=0;h=me()|0;ic(d);je(h|0)}r[b>>0]=-1;r[b+1>>0]=-1>>8;r[b+2>>0]=-1>>16;r[b+3>>0]=-1>>24;e=s;n[e>>2]=i;n[e+4>>2]=c;e=n[t>>2]|0;if((e|0?(o=n[e>>2]|0,n[e>>2]=o-1,(o|0)==1):0)?(m=0,ee(48,t|0),o=m,m=0,o&1):0){h=me()|0;n[a>>2]=n[d>>2];n[a+4>>2]=n[d+4>>2];n[a+8>>2]=n[d+8>>2];fc(s);je(h|0)}n[a>>2]=n[d>>2];n[a+4>>2]=n[d+4>>2];n[a+8>>2]=n[d+8>>2];e=n[s+4>>2]|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;e=n[b>>2]|0}if(e|0){m=0;ce(4);m=0;h=me()|0;je(h|0)}r[b>>0]=-1;r[b+1>>0]=-1>>8;r[b+2>>0]=-1>>16;r[b+3>>0]=-1>>24;e=l;n[e>>2]=i;n[e+4>>2]=c;e=n[t>>2]|0;if(!e){m=0;ee(36,3624);m=0;h=me()|0;fc(l);je(h|0)}l=n[e>>2]|0;n[e>>2]=l+1;if((l|0)<0)ea();r[u>>0]=0;r[u+1>>0]=0;r[u+2>>0]=0;r[u+3>>0]=0;l=e;p=h;return l|0}function Ga(e){e=e|0;var a=0,t=0,c=0,f=0;a=sr(2672)|0;if(!a){n[e>>2]=1;return}if(n[a>>2]|0){t=a+4|0;if(!(n[t>>2]|0))c=t;else br()}else{r[a>>0]=1;r[a+1>>0]=0;r[a+2>>0]=0;r[a+3>>0]=0;c=a+4|0;r[c>>0]=0;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;t=a+8|0;f=t;r[f>>0]=0;r[f+1>>0]=0;r[f+2>>0]=0;r[f+3>>0]=0;t=t+4|0;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0}f=a+8|0;t=f;a=t;a=i[a>>0]|i[a+1>>0]<<8|i[a+2>>0]<<16|i[a+3>>0]<<24;t=t+4|0;t=i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24;r[f>>0]=0;r[f+1>>0]=0;r[f+2>>0]=0;r[f+3>>0]=0;r[c>>0]=0;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;n[e>>2]=0;f=e+4|0;n[f>>2]=a;n[f+4>>2]=t;return}function Wa(e){e=e|0;var a=0;a=p;p=p+e|0;p=p+15&-16;return a|0}function Ya(){return p|0}function Ka(e){e=e|0;p=e}function Qa(e,a){e=e|0;a=a|0;p=e;h=a}function Za(e,a){e=e|0;a=a|0;if(!m){m=e;g=a}}function Ja(e){e=e|0;T=e}function Xa(){return T|0}function $a(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0;y=p;p=p+32|0;s=y;g=y+8|0;e:do{if(c|0){b=a+9|0;u=a+4|0;l=g+4|0;h=a+8|0;while(1){do{if(!(r[b>>0]|0)){o=n[u>>2]|0;i=o>>>0>=c>>>0?c:o;f=n[a>>2]|0;o=o-i|0;d=f+i|0;if((i|0)!=1){ad(t|0,f|0,i|0)|0;n[a>>2]=d;n[u>>2]=o;if(!i){r[b>>0]=1;v=8;break}}else{r[t>>0]=r[f>>0]|0;n[a>>2]=d;n[u>>2]=o;i=1}n[g>>2]=0;n[l>>2]=i}else v=8}while(0);if((v|0)==8){v=0;i=t+c|0;f=t;do{r[f>>0]=r[h>>0]|0;f=f+1|0}while((f|0)!=(i|0));n[g>>2]=0;n[l>>2]=c;if(!c)break;else i=c}if(c>>>0<i>>>0){v=13;break}c=c-i|0;if(!c)break e;else t=t+i|0}if((v|0)==13){m=0;ae(8,i|0,c|0);m=0;y=me()|0;rt(g);je(y|0)}vn(s,4624,27);wn(g,17,n[s>>2]|0,n[s+4>>2]|0);n[e>>2]=1;h=g;g=n[h+4>>2]|0;v=e+4|0;n[v>>2]=n[h>>2];n[v+4>>2]=g;p=y;return}}while(0);n[e>>2]=0;p=y;return}function et(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0;o=p;p=p+16|0;d=o;f=e+4|0;r=n[f>>2]|0;do{if(!r){a=At(1152,8,d)|0;if(!a){a=0;t=0;r=0}else{d=4;i=a;n[e>>2]=i;n[f>>2]=d;p=o;return}}else{i=r<<1;if((r*576|0)<0)Oi(3420);c=n[e>>2]|0;t=r*288|0;a=i*288|0;if(!(r>>>0>14913080|i>>>0>14913080)?!((t|0)==0|(a|0)==0):0){a=Et(c,t,8,a,8,d)|0;if(!a){t=d+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[d>>2]|0;break}d=i;i=a;n[e>>2]=i;n[f>>2]=d;p=o;return}di(d,4741,32);t=d+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[d>>2]|0}}while(0);n[d>>2]=r;o=d+4|0;n[o>>2]=a;n[o+4>>2]=t;ht(d)}function at(e){e=e|0;var a=0,t=0,r=0;a=e+8|0;t=n[a>>2]|0;r=n[e+12>>2]|0;if((t|0)!=(r|0))n[a>>2]=t+(((((r+-288-t|0)>>>0)/288|0)+1|0)*288|0);t=n[e>>2]|0;a=n[e+4>>2]|0;if(!a)return;if(a>>>0>14913080)Oi(3624);xt(t,a*288|0,8);return}function tt(e){e=e|0;var a=0,t=0,r=0;if((i[e>>0]|0)<2)return;t=e+4|0;e=n[t>>2]|0;r=e+4|0;e=e+8|0;m=0;ee(n[n[e>>2]>>2]|0,n[r>>2]|0);a=m;m=0;if(a&1){a=me()|0;ut(n[r>>2]|0,n[e>>2]|0);lt(n[t>>2]|0);je(a|0)}e=n[e>>2]|0;a=n[e+4>>2]|0;if(a|0)xt(n[r>>2]|0,a,n[e+8>>2]|0);xt(n[t>>2]|0,12,4);return}function rt(e){e=e|0;var a=0,t=0,r=0;if(!(n[e>>2]|0))return;if((i[e+4>>0]|0)<2)return;t=e+8|0;e=n[t>>2]|0;r=e+4|0;e=e+8|0;m=0;ee(n[n[e>>2]>>2]|0,n[r>>2]|0);a=m;m=0;if(a&1){a=me()|0;ut(n[r>>2]|0,n[e>>2]|0);lt(n[t>>2]|0);je(a|0)}e=n[e>>2]|0;a=n[e+4>>2]|0;if(a|0)xt(n[r>>2]|0,a,n[e+8>>2]|0);xt(n[t>>2]|0,12,4);return}function ct(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function nt(e){e=e|0;var a=0;a=n[e>>2]|0;e=n[e+4>>2]|0;if(!e)return;if(e>>>0>14913080)Oi(3624);xt(a,e*288|0,8);return}function it(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function ft(e){e=e|0;var a=0,t=0,r=0,c=0,i=0;i=p;p=p+64|0;t=i+48|0;a=i+24|0;c=i+8|0;n[i>>2]=4651;n[i+4>>2]=43;n[c>>2]=n[e>>2];n[c+4>>2]=n[e+4>>2];n[c+8>>2]=n[e+8>>2];r=n[896]|0;e=n[897]|0;n[t>>2]=i;n[t+4>>2]=34;n[t+8>>2]=c;n[t+12>>2]=35;n[a>>2]=r;n[a+4>>2]=e;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ci(a,3648)}function ot(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;i=p;p=p+64|0;t=i+40|0;a=i+16|0;c=i+8|0;n[i>>2]=4651;n[i+4>>2]=43;f=e;e=n[f+4>>2]|0;r=c;n[r>>2]=n[f>>2];n[r+4>>2]=e;r=n[896]|0;e=n[897]|0;n[t>>2]=i;n[t+4>>2]=34;n[t+8>>2]=c;n[t+12>>2]=36;n[a>>2]=r;n[a+4>>2]=e;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ci(a,3648)}function dt(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0;o=p;p=p+64|0;i=o+32|0;c=o+8|0;f=o+48|0;n[o>>2]=e;n[o+4>>2]=a;r[f>>0]=t;a=n[896]|0;t=n[897]|0;n[i>>2]=o;n[i+4>>2]=34;n[i+8>>2]=f;n[i+12>>2]=37;n[c>>2]=a;n[c+4>>2]=t;n[c+8>>2]=0;n[c+16>>2]=i;n[c+20>>2]=2;Ci(c,3648)}function st(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;i=p;p=p+64|0;r=i+40|0;t=i+16|0;a=i+8|0;n[i>>2]=4773;n[i+4>>2]=50;f=e;e=n[f+4>>2]|0;c=a;n[c>>2]=n[f>>2];n[c+4>>2]=e;c=n[896]|0;e=n[897]|0;n[r>>2]=i;n[r+4>>2]=34;n[r+8>>2]=a;n[r+12>>2]=38;n[t>>2]=c;n[t+4>>2]=e;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;m=0;ae(9,t|0,3648);m=0;e=me()|0;tt(a);je(e|0)}function bt(e,a){e=e|0;a=a|0;return Ff(n[e>>2]|0,n[e+4>>2]|0,a)|0}function ut(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function lt(e){e=e|0;xt(e,12,4);return}function pt(e){e=e|0;var a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0;l=p;p=p+16|0;s=l;d=e+8|0;t=n[d>>2]|0;f=e+4|0;if((n[f>>2]|0)!=(t|0)){u=t;b=n[e>>2]|0;s=u+1|0;n[d>>2]=s;u=b+u|0;r[u>>0]=0;p=l;return}a=t+1|0;if(t>>>0>4294967294)vf(4694,17);i=t<<1;i=a>>>0>=i>>>0?a:i;if((i|0)<0)Oi(3420);a=(i|0)==0;do{if(!t)if(!a){a=At(i,1,s)|0;if(!a){a=0;t=0;c=0;u=17;break}else{o=0;b=a;break}}else{di(s,4711,30);t=s+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;c=n[s>>2]|0;u=17;break}else{if(a){di(s,4741,32);t=s+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;c=n[s>>2]|0;u=17;break}a=Et(n[e>>2]|0,t,1,i,1,s)|0;if(!a){t=s+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;c=n[s>>2]|0;u=17;break}else{o=n[d>>2]|0;b=a;break}}}while(0);if((u|0)==17){n[s>>2]=c;u=s+4|0;n[u>>2]=a;n[u+4>>2]=t;ht(s)}n[e>>2]=b;n[f>>2]=i;u=o;s=u+1|0;n[d>>2]=s;u=b+u|0;r[u>>0]=0;p=l;return}function ht(e){e=e|0;var a=0;a=p;p=p+16|0;n[a>>2]=n[e>>2];n[a+4>>2]=n[e+4>>2];n[a+8>>2]=n[e+8>>2];kt(a)}function mt(e,a){e=e|0;a=a|0;var t=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0;A=p;p=p+496|0;w=A+272|0;u=A+232|0;g=A+160|0;_=A+396|0;y=A+336|0;v=A+64|0;h=A+32|0;l=A;o=A+456|0;d=o;b=d+32|0;do{r[d>>0]=0;d=d+1|0}while((d|0)<(b|0));$a(u,a,o,32);if(n[u>>2]|0){b=n[u+8>>2]|0;n[w>>2]=n[u+4>>2];n[w+4>>2]=b;st(w)}Yt(u,o,32);i=r[u>>0]|0;t=n[u+8>>2]|0;d=w;s=u+12|0;b=d+28|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));if(!(i<<24>>24)){d=g;s=w;b=d+28|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));f=1;i=0}else{f=0;t=26;i=0}n[_>>2]=n[g>>2];n[_+4>>2]=n[g+4>>2];n[_+8>>2]=n[g+8>>2];n[_+12>>2]=n[g+12>>2];n[_+16>>2]=n[g+16>>2];n[_+20>>2]=n[g+20>>2];n[_+24>>2]=n[g+24>>2];if(f){n[l>>2]=t;b=l+4|0;n[b>>2]=n[_>>2];n[b+4>>2]=n[_+4>>2];n[b+8>>2]=n[_+8>>2];n[b+12>>2]=n[_+12>>2];n[b+16>>2]=n[_+16>>2];n[b+20>>2]=n[_+20>>2];n[b+24>>2]=n[_+24>>2];$a(u,a,o,32);if(n[u>>2]|0){b=n[u+8>>2]|0;n[w>>2]=n[u+4>>2];n[w+4>>2]=b;st(w)}Yt(u,o,32);i=r[u>>0]|0;t=n[u+8>>2]|0;d=w;s=u+12|0;b=d+28|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));if(!(i<<24>>24)){d=g;s=w;b=d+28|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));i=1;f=0}else{i=0;f=0;t=26}n[_>>2]=n[g>>2];n[_+4>>2]=n[g+4>>2];n[_+8>>2]=n[g+8>>2];n[_+12>>2]=n[g+12>>2];n[_+16>>2]=n[g+16>>2];n[_+20>>2]=n[g+20>>2];n[_+24>>2]=n[g+24>>2];e:do{if(i){n[h>>2]=t;b=h+4|0;n[b>>2]=n[_>>2];n[b+4>>2]=n[_+4>>2];n[b+8>>2]=n[_+8>>2];n[b+12>>2]=n[_+12>>2];n[b+16>>2]=n[_+16>>2];n[b+20>>2]=n[_+20>>2];n[b+24>>2]=n[_+24>>2];Gt(u);if((Lo(l,u,32)|0)==0?(Gt(w),(Lo(h,w,32)|0)==0):0)Zt(v);else m=16;do{if((m|0)==16){n[u>>2]=n[l>>2];n[u+4>>2]=n[l+4>>2];n[u+8>>2]=n[l+8>>2];n[u+12>>2]=n[l+12>>2];n[u+16>>2]=n[l+16>>2];n[u+20>>2]=n[l+20>>2];n[u+24>>2]=n[l+24>>2];n[u+28>>2]=n[l+28>>2];n[w>>2]=n[h>>2];n[w+4>>2]=n[h+4>>2];n[w+8>>2]=n[h+8>>2];n[w+12>>2]=n[h+12>>2];n[w+16>>2]=n[h+16>>2];n[w+20>>2]=n[h+20>>2];n[w+24>>2]=n[h+24>>2];n[w+28>>2]=n[h+28>>2];Ki(g,u,w);i=r[g>>0]|0;t=n[g+8>>2]|0;d=w;s=g+12|0;b=d+60|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));if(!(i<<24>>24)){d=_;s=w;b=d+60|0;do{c[d>>1]=c[s>>1]|0;d=d+2|0;s=s+2|0}while((d|0)<(b|0));f=1;i=0}else{f=0;t=19;i=0}d=y;s=_;b=d+60|0;do{n[d>>2]=n[s>>2];d=d+4|0;s=s+4|0}while((d|0)<(b|0));if(f){n[w>>2]=t;d=w+4|0;s=y;b=d+60|0;do{n[d>>2]=n[s>>2];d=d+4|0;s=s+4|0}while((d|0)<(b|0));Xi(v,w);break}else{n[e>>2]=1;w=e+4|0;n[w>>2]=i|4875;n[w+4>>2]=t;break e}}}while(0);n[e>>2]=0;d=e+8|0;s=v;b=d+96|0;do{n[d>>2]=n[s>>2];d=d+4|0;s=s+4|0}while((d|0)<(b|0));p=A;return}else{n[e>>2]=1;w=e+4|0;n[w>>2]=f|4849;n[w+4>>2]=t}}while(0)}else{n[e>>2]=1;w=e+4|0;n[w>>2]=i|4823;n[w+4>>2]=t}p=A;return}function gt(e){e=e|0;var a=0,t=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0;R=p;p=p+960|0;a=R;l=R+768|0;h=R+728|0;d=R+712|0;s=R+928|0;i=R+696|0;f=R+852|0;j=R+680|0;E=R+648|0;A=R+616|0;S=R+552|0;w=R+520|0;_=R+424|0;y=R+328|0;v=R+256|0;T=R+864|0;g=R+824|0;k=R+796|0;o=R+152|0;x=R+56|0;b=R+40|0;t=R+24|0;C=R+8|0;yn(a,e);_n(h,n[a>>2]|0,n[a+4>>2]|0);e=n[h+4>>2]|0;a=n[h+8>>2]|0;if(n[h>>2]|0){n[l>>2]=e;n[l+4>>2]=a;ot(l)}Aa(t,e,a);u=n[t>>2]|0;t=t+4|0;n[f>>2]=n[t>>2];n[f+4>>2]=n[t+4>>2];n[f+8>>2]=n[t+8>>2];if(u|0){n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];m=0;ee(33,i|0);m=0;R=me()|0;je(R|0)}n[C>>2]=n[f>>2];n[C+4>>2]=n[f+4>>2];n[C+8>>2]=n[f+8>>2];t=n[C>>2]|0;e=n[C+8>>2]|0;u=t;m=0;a=te(7,0)|0;f=m;m=0;e:do{if(f&1)e=me()|0;else{n[b>>2]=t;n[b+4>>2]=e;r[b+8>>0]=a;r[b+9>>0]=0;m=0;ae(10,o|0,b|0);f=m;m=0;if(f&1){e=me()|0;break}a:do{if(!(n[o>>2]|0)){f=x;t=o+8|0;i=f+96|0;do{n[f>>2]=n[t>>2];f=f+4|0;t=t+4|0}while((f|0)<(i|0));f=s;i=f+32|0;do{r[f>>0]=0;f=f+1|0}while((f|0)<(i|0));m=0;fe(3,d|0,b|0,s|0,32);b=m;m=0;do{if(!(b&1)){if(n[d>>2]|0){R=n[d+8>>2]|0;n[l>>2]=n[d+4>>2];n[l+4>>2]=R;m=0;ee(34,l|0);m=0;break}m=0;re(2,h|0,s|0,32);b=m;m=0;if(!(b&1)){e=r[h>>0]|0;a=n[h+8>>2]|0;f=l;t=h+12|0;i=f+28|0;do{c[f>>1]=c[t>>1]|0;f=f+2|0;t=t+2|0}while((f|0)<(i|0));if(e<<24>>24)break a;f=g;t=l;i=f+28|0;do{c[f>>1]=c[t>>1]|0;f=f+2|0;t=t+2|0}while((f|0)<(i|0));n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];f=T;i=f+64|0;do{r[f>>0]=0;f=f+1|0}while((f|0)<(i|0));f=_;t=x;i=f+96|0;do{n[f>>2]=n[t>>2];f=f+4|0;t=t+4|0}while((f|0)<(i|0));n[w>>2]=a;x=w+4|0;n[x>>2]=n[k>>2];n[x+4>>2]=n[k+4>>2];n[x+8>>2]=n[k+8>>2];n[x+12>>2]=n[k+12>>2];n[x+16>>2]=n[k+16>>2];n[x+20>>2]=n[k+20>>2];n[x+24>>2]=n[k+24>>2];m=0;re(3,y|0,_|0,w|0);x=m;m=0;if(x&1){e=me()|0;break e}m=0;ae(11,v|0,y|0);x=m;m=0;if(x&1){e=me()|0;break e}x=v;do{if((n[x>>2]|0)==1&(n[x+4>>2]|0)==0){f=S;t=v+8|0;i=f+64|0;do{n[f>>2]=n[t>>2];f=f+4|0;t=t+4|0}while((f|0)<(i|0));m=0;ae(12,A|0,S|0);x=m;m=0;if(x&1){e=me()|0;break e}m=0;e=J(9,A|0,T|0,32)|0;x=m;m=0;if(x&1){e=me()|0;break e}if(e&255){m=0;re(5,4894,41,(e&65535)>>>8&255|0);m=0;e=me()|0;break e}m=0;ae(13,E|0,S|0);S=m;m=0;if(S&1){e=me()|0;break e}m=0;e=J(9,E|0,T+32|0,32)|0;S=m;m=0;if(S&1){e=me()|0;break e}if(!(e&255))break;else{m=0;re(5,4935,42,(e&65535)>>>8&255|0);m=0;e=me()|0;break e}}}while(0);m=0;re(4,j|0,T|0,64);T=m;m=0;if(T&1){e=me()|0;break e}m=0;ee(35,j|0);T=m;m=0;if(T&1){e=me()|0;ct(j);break e}a=n[j>>2]|0;e=n[j+4>>2]|0;if(e|0)xt(a,e,1);e=n[C+4>>2]|0;if(e|0)xt(u,e,1);C=a;p=R;return C|0}}}while(0);e=me()|0;break e}}while(0);e=n[C+4>>2]|0;if(e|0)xt(u,e,1);C=14356;p=R;return C|0}}while(0);it(C);R=e;je(R|0);return 0}function vt(e){e=e|0;var a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0;j=p;p=p+1152|0;a=j;f=j+928|0;c=j+912|0;i=j+936|0;S=j+896|0;k=j+864|0;w=j+832|0;x=j+768|0;_=j+672|0;y=j+576|0;v=j+480|0;g=j+408|0;E=j+1080|0;l=j+304|0;s=j+200|0;A=j+104|0;h=j+88|0;u=j+72|0;o=j+56|0;b=j+952|0;d=j+40|0;t=j+24|0;T=j+8|0;yn(a,e);_n(c,n[a>>2]|0,n[a+4>>2]|0);e=n[c+4>>2]|0;a=n[c+8>>2]|0;if(n[c>>2]|0){n[f>>2]=e;n[f+4>>2]=a;ot(f)}Aa(t,e,a);a=n[t>>2]|0;t=t+4|0;n[i>>2]=n[t>>2];n[i+4>>2]=n[t+4>>2];n[i+8>>2]=n[t+8>>2];if(a|0){n[c>>2]=n[i>>2];n[c+4>>2]=n[i+4>>2];n[c+8>>2]=n[i+8>>2];m=0;ee(33,c|0);m=0;j=me()|0;je(j|0)}n[T>>2]=n[i>>2];n[T+4>>2]=n[i+4>>2];n[T+8>>2]=n[i+8>>2];t=n[T>>2]|0;e=n[T+8>>2]|0;i=t;m=0;a=te(7,0)|0;c=m;m=0;e:do{if(c&1)e=me()|0;else{n[d>>2]=t;n[d+4>>2]=e;r[d+8>>0]=a;r[d+9>>0]=0;t=b;c=t+128|0;do{r[t>>0]=0;t=t+1|0}while((t|0)<(c|0));m=0;fe(3,o|0,d|0,b|0,128);d=m;m=0;if(d&1){e=me()|0;break}if(n[o>>2]|0){e=n[o+8>>2]|0;n[f>>2]=n[o+4>>2];n[f+4>>2]=e;m=0;ee(34,f|0);m=0;e=me()|0;break}m=0;e=te(7,0)|0;d=m;m=0;if(d&1){e=me()|0;break}n[u>>2]=b;n[u+4>>2]=64;r[u+8>>0]=e;r[u+9>>0]=0;m=0;e=te(7,0)|0;d=m;m=0;if(d&1){e=me()|0;break}n[h>>2]=b+64;n[h+4>>2]=64;r[h+8>>0]=e;r[h+9>>0]=0;m=0;ae(10,s|0,u|0);u=m;m=0;if(u&1){e=me()|0;break}if(n[s>>2]|0){e=n[T+4>>2]|0;if(e|0)xt(i,e,1);T=14356;p=j;return T|0}t=A;a=s+8|0;c=t+96|0;do{n[t>>2]=n[a>>2];t=t+4|0;a=a+4|0}while((t|0)<(c|0));m=0;ae(10,l|0,h|0);h=m;m=0;if(h&1){e=me()|0;break}if(!(n[l>>2]|0)){e=l+8|0;t=E;c=t+64|0;do{r[t>>0]=0;t=t+1|0}while((t|0)<(c|0));t=y;a=A;c=t+96|0;do{n[t>>2]=n[a>>2];t=t+4|0;a=a+4|0}while((t|0)<(c|0));t=_;a=e;c=t+96|0;do{n[t>>2]=n[a>>2];t=t+4|0;a=a+4|0}while((t|0)<(c|0));m=0;re(6,v|0,y|0,_|0);A=m;m=0;if(A&1){e=me()|0;break}m=0;ae(11,g|0,v|0);A=m;m=0;if(A&1){e=me()|0;break}A=g;do{if((n[A>>2]|0)==1&(n[A+4>>2]|0)==0){t=x;a=g+8|0;c=t+64|0;do{n[t>>2]=n[a>>2];t=t+4|0;a=a+4|0}while((t|0)<(c|0));m=0;ae(12,w|0,x|0);A=m;m=0;if(A&1){e=me()|0;break e}m=0;e=J(9,w|0,E|0,32)|0;A=m;m=0;if(A&1){e=me()|0;break e}if(e&255){m=0;re(5,4894,41,(e&65535)>>>8&255|0);m=0;e=me()|0;break e}m=0;ae(13,k|0,x|0);x=m;m=0;if(x&1){e=me()|0;break e}m=0;e=J(9,k|0,E+32|0,32)|0;x=m;m=0;if(x&1){e=me()|0;break e}if(!(e&255))break;else{m=0;re(5,4935,42,(e&65535)>>>8&255|0);m=0;e=me()|0;break e}}}while(0);m=0;re(4,S|0,E|0,64);E=m;m=0;if(E&1){e=me()|0;break}m=0;ee(35,S|0);E=m;m=0;if(E&1){e=me()|0;ct(S);break}a=n[S>>2]|0;e=n[S+4>>2]|0;if(e|0)xt(a,e,1)}else a=14356;e=n[T+4>>2]|0;if(e|0)xt(i,e,1);T=a;p=j;return T|0}}while(0);it(T);j=e;je(j|0);return 0}function yt(e){e=e|0;var a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ce=0,ne=0,ie=0,oe=0,de=0,se=0,be=0,ue=0,le=0,pe=0,he=0,ge=0,ve=0,ye=0,_e=0,we=0,Ae=0,ke=0,xe=0,Ee=0,Se=0,Te=0,Ce=0,Re=0,Oe=0,Be=0,Me=0,Ne=0,Ie=0,Pe=0,Fe=0,Le=0,De=0,ze=0,qe=0,Ue=0;qe=p;p=p+6944|0;a=qe;_e=qe+6696|0;Ee=qe+6600|0;xe=qe+6216|0;ke=qe+5832|0;Ae=qe+5160|0;we=qe+4776|0;Se=qe+4488|0;Ce=qe+4472|0;Te=qe+4088|0;se=qe+3800|0;c=qe+3784|0;i=qe+6888|0;De=qe+3768|0;Ie=qe+3752|0;Pe=qe+6904|0;Ne=qe+3368|0;ye=qe+2984|0;ve=qe+2968|0;Fe=qe+2584|0;Q=qe+2296|0;K=qe+2168|0;Y=qe+1976|0;W=qe+1912|0;G=qe+1848|0;V=qe+1712|0;H=qe+1520|0;oe=qe+1328|0;U=qe+1296|0;q=qe+1264|0;ne=qe+1200|0;z=qe+1168|0;D=qe+1136|0;ce=qe+1072|0;L=qe+1008|0;F=qe+912|0;P=qe+880|0;I=qe+848|0;N=qe+776|0;M=qe+680|0;B=qe+648|0;O=qe+616|0;ie=qe+520|0;R=qe+480|0;he=qe+448|0;C=qe+408|0;pe=qe+376|0;$=qe+336|0;ue=qe+304|0;X=qe+264|0;be=qe+232|0;J=qe+192|0;ge=qe+160|0;Z=qe+120|0;le=qe+88|0;de=qe+72|0;Le=qe+40|0;t=qe+24|0;Ue=qe+8|0;yn(a,e);_n(Ee,n[a>>2]|0,n[a+4>>2]|0);e=n[Ee+4>>2]|0;a=n[Ee+8>>2]|0;if(n[Ee>>2]|0){n[_e>>2]=e;n[_e+4>>2]=a;ot(_e)}Aa(t,e,a);j=n[t>>2]|0;T=t+4|0;n[i>>2]=n[T>>2];n[i+4>>2]=n[T+4>>2];n[i+8>>2]=n[T+8>>2];if(j|0){n[c>>2]=n[i>>2];n[c+4>>2]=n[i+4>>2];n[c+8>>2]=n[i+8>>2];m=0;ee(33,c|0);m=0;Ue=me()|0;je(Ue|0)}n[Ue>>2]=n[i>>2];n[Ue+4>>2]=n[i+4>>2];n[Ue+8>>2]=n[i+8>>2];S=n[Ue+8>>2]|0;h=(S>>>0)/192|0;e:do{if(!((S>>>0)%192|0)){a:do{if(!S){ze=Le;n[ze>>2]=1;n[ze+4>>2]=0;ze=Le+8|0;n[ze>>2]=0;n[ze+4>>2]=0;n[ze+8>>2]=0;n[ze+12>>2]=0;n[ze+16>>2]=0;n[ze+20>>2]=0;ze=120}else{n[de>>2]=8;j=de+4|0;n[j>>2]=0;u=de+8|0;n[u>>2]=0;t:do{if(S>>>0>191){T=n[Ue>>2]|0;_=Z+8|0;w=J+8|0;A=X+8|0;k=$+8|0;x=C+8|0;E=R+8|0;g=Q+96|0;y=V+8|0;v=N+8|0;e=0;b=1;l=8;t=8;a=0;r:while(1){f=a*192|0;a=f|32;if(a>>>0>S>>>0){ze=17;break}m=0;re(7,Z|0,T+f|0,a-f|0);s=m;m=0;if(s&1){ze=129;break}if(r[Z>>0]|0){ze=20;break}n[le>>2]=n[_>>2];n[le+4>>2]=n[_+4>>2];n[le+8>>2]=n[_+8>>2];n[le+12>>2]=n[_+12>>2];n[le+16>>2]=n[_+16>>2];n[le+20>>2]=n[_+20>>2];n[le+24>>2]=n[_+24>>2];n[le+28>>2]=n[_+28>>2];c=f+64|0;if(c>>>0<a>>>0){ze=22;break}if(c>>>0>S>>>0){ze=24;break}m=0;re(7,J|0,T+a|0,c-a|0);s=m;m=0;if(s&1){ze=129;break}if(r[J>>0]|0){ze=32;break}n[ge>>2]=n[w>>2];n[ge+4>>2]=n[w+4>>2];n[ge+8>>2]=n[w+8>>2];n[ge+12>>2]=n[w+12>>2];n[ge+16>>2]=n[w+16>>2];n[ge+20>>2]=n[w+20>>2];n[ge+24>>2]=n[w+24>>2];n[ge+28>>2]=n[w+28>>2];a=f+96|0;if(a>>>0>S>>>0){ze=34;break}m=0;re(7,X|0,T+c|0,32);s=m;m=0;if(s&1){ze=129;break}if(r[X>>0]|0){ze=38;break}n[be>>2]=n[A>>2];n[be+4>>2]=n[A+4>>2];n[be+8>>2]=n[A+8>>2];n[be+12>>2]=n[A+12>>2];n[be+16>>2]=n[A+16>>2];n[be+20>>2]=n[A+20>>2];n[be+24>>2]=n[A+24>>2];n[be+28>>2]=n[A+28>>2];c=f+128|0;if(c>>>0>S>>>0){ze=40;break}m=0;re(7,$|0,T+a|0,32);s=m;m=0;if(s&1){ze=129;break}if(r[$>>0]|0){ze=44;break}n[ue>>2]=n[k>>2];n[ue+4>>2]=n[k+4>>2];n[ue+8>>2]=n[k+8>>2];n[ue+12>>2]=n[k+12>>2];n[ue+16>>2]=n[k+16>>2];n[ue+20>>2]=n[k+20>>2];n[ue+24>>2]=n[k+24>>2];n[ue+28>>2]=n[k+28>>2];i=f+160|0;if(i>>>0>S>>>0){ze=46;break}m=0;re(7,C|0,T+c|0,32);s=m;m=0;if(s&1){ze=129;break}if(r[C>>0]|0){ze=50;break}n[pe>>2]=n[x>>2];n[pe+4>>2]=n[x+4>>2];n[pe+8>>2]=n[x+8>>2];n[pe+12>>2]=n[x+12>>2];n[pe+16>>2]=n[x+16>>2];n[pe+20>>2]=n[x+20>>2];n[pe+24>>2]=n[x+24>>2];n[pe+28>>2]=n[x+28>>2];a=f+192|0;if(a>>>0>S>>>0){ze=52;break}m=0;re(7,R|0,T+i|0,32);s=m;m=0;if(s&1){ze=129;break}if(r[R>>0]|0){ze=56;break}n[he>>2]=n[E>>2];n[he+4>>2]=n[E+4>>2];n[he+8>>2]=n[E+8>>2];n[he+12>>2]=n[E+12>>2];n[he+16>>2]=n[E+16>>2];n[he+20>>2]=n[E+20>>2];n[he+24>>2]=n[E+24>>2];n[he+28>>2]=n[E+28>>2];m=0;ee(37,O|0);s=m;m=0;if(s&1){ze=129;break}do{if(!(Lo(le,O,32)|0)){m=0;ee(37,B|0);s=m;m=0;if(s&1){ze=129;break r}if(Lo(ge,B,32)|0){ze=59;break}m=0;ee(38,M|0);s=m;m=0;if(s&1){ze=129;break r}o=ie;d=M;s=o+96|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0))}else ze=59}while(0);if((ze|0)==59){ze=0;n[I>>2]=n[le>>2];n[I+4>>2]=n[le+4>>2];n[I+8>>2]=n[le+8>>2];n[I+12>>2]=n[le+12>>2];n[I+16>>2]=n[le+16>>2];n[I+20>>2]=n[le+20>>2];n[I+24>>2]=n[le+24>>2];n[I+28>>2]=n[le+28>>2];n[P>>2]=n[ge>>2];n[P+4>>2]=n[ge+4>>2];n[P+8>>2]=n[ge+8>>2];n[P+12>>2]=n[ge+12>>2];n[P+16>>2]=n[ge+16>>2];n[P+20>>2]=n[ge+20>>2];n[P+24>>2]=n[ge+24>>2];n[P+28>>2]=n[ge+28>>2];m=0;re(8,N|0,I|0,P|0);s=m;m=0;if(s&1){ze=129;break}if(r[N>>0]|0){ze=66;break}o=L;d=v;s=o+64|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));m=0;ae(15,F|0,L|0);s=m;m=0;if(s&1){ze=129;break}o=ie;d=F;s=o+96|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0))}n[D>>2]=n[ue>>2];n[D+4>>2]=n[ue+4>>2];n[D+8>>2]=n[ue+8>>2];n[D+12>>2]=n[ue+12>>2];n[D+16>>2]=n[ue+16>>2];n[D+20>>2]=n[ue+20>>2];n[D+24>>2]=n[ue+24>>2];n[D+28>>2]=n[ue+28>>2];n[z>>2]=n[be>>2];n[z+4>>2]=n[be+4>>2];n[z+8>>2]=n[be+8>>2];n[z+12>>2]=n[be+12>>2];n[z+16>>2]=n[be+16>>2];n[z+20>>2]=n[be+20>>2];n[z+24>>2]=n[be+24>>2];n[z+28>>2]=n[be+28>>2];m=0;re(9,ce|0,D|0,z|0);s=m;m=0;if(s&1){ze=129;break}n[q>>2]=n[he>>2];n[q+4>>2]=n[he+4>>2];n[q+8>>2]=n[he+8>>2];n[q+12>>2]=n[he+12>>2];n[q+16>>2]=n[he+16>>2];n[q+20>>2]=n[he+20>>2];n[q+24>>2]=n[he+24>>2];n[q+28>>2]=n[he+28>>2];n[U>>2]=n[pe>>2];n[U+4>>2]=n[pe+4>>2];n[U+8>>2]=n[pe+8>>2];n[U+12>>2]=n[pe+12>>2];n[U+16>>2]=n[pe+16>>2];n[U+20>>2]=n[pe+20>>2];n[U+24>>2]=n[pe+24>>2];n[U+28>>2]=n[pe+28>>2];m=0;re(9,ne|0,q|0,U|0);s=m;m=0;if(s&1){ze=129;break}m=0;a=te(8,ue|0)|0;s=m;m=0;if(s&1){ze=129;break}do{if(a){m=0;a=te(8,be|0)|0;s=m;m=0;if(s&1){ze=129;break r}if(!a){ze=73;break}m=0;a=te(8,he|0)|0;s=m;m=0;if(s&1){ze=129;break r}if(!a){ze=73;break}m=0;a=te(8,pe|0)|0;s=m;m=0;if(s&1){ze=129;break r}if(!a){ze=73;break}m=0;ee(39,H|0);s=m;m=0;if(s&1){ze=129;break r}ad(oe|0,H|0,192)|0}else ze=73}while(0);if((ze|0)==73){ze=0;o=G;d=ce;s=o+64|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));o=W;d=ne;s=o+64|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));m=0;re(10,V|0,G|0,W|0);s=m;m=0;if(s&1){ze=129;break}if(r[V>>0]|0){ze=84;break}o=K;d=y;s=o+128|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));m=0;ae(16,Y|0,K|0);s=m;m=0;if(s&1){ze=129;break}ad(oe|0,Y|0,192)|0}o=Q;d=ie;s=o+96|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));ad(g|0,oe|0,192)|0;ad(se|0,Q|0,288)|0;if((e|0)==(n[j>>2]|0)){m=0;ee(40,de|0);l=m;m=0;if(l&1){ze=129;break}t=n[de>>2]|0;e=n[u>>2]|0;a=t}else a=l;ad(t+(e*288|0)|0,se|0,288)|0;e=e+1|0;n[u>>2]=e;if(b>>>0>=h>>>0){ze=91;break}else{s=b;b=b+1|0;l=a;a=s}}switch(ze|0){case 17:{m=0;ae(14,a|0,S|0);m=0;ze=129;break}case 20:break;case 22:{m=0;ae(8,a|0,c|0);m=0;ze=129;break}case 24:{m=0;ae(14,c|0,S|0);m=0;ze=129;break}case 32:{ze=35;break}case 34:{m=0;ae(14,a|0,S|0);m=0;ze=129;break}case 38:{ze=41;break}case 40:{m=0;ae(14,c|0,S|0);m=0;ze=129;break}case 44:{ze=47;break}case 46:{m=0;ae(14,i|0,S|0);m=0;ze=129;break}case 50:{ze=53;break}case 52:{m=0;ae(14,a|0,S|0);m=0;ze=129;break}case 56:{ze=58;break}case 66:{ze=69;break}case 84:{ze=69;break}case 91:{a=n[j>>2]|0;break t}}if((ze|0)==69)ze=58;else if((ze|0)==129){e=me()|0;nt(de);break a}if((ze|0)==58)ze=53;if((ze|0)==53)ze=47;if((ze|0)==47)ze=41;if((ze|0)==41)ze=35;e=n[j>>2]|0;do{if(e|0)if(e>>>0>14913080){m=0;ee(36,3624);m=0;e=me()|0;break a}else{xt(l,e*288|0,8);break}}while(0);break e}else{t=8;a=0;e=0}}while(0);n[ve>>2]=t;n[ve+4>>2]=a;n[ve+8>>2]=t;n[ve+12>>2]=t+(e*288|0);m=0;ee(41,ye|0);ge=m;m=0;if(ge&1){e=me()|0;at(ve);break}ad(Te|0,ye|0,384)|0;n[Ce>>2]=n[ve>>2];n[Ce+4>>2]=n[ve+4>>2];n[Ce+8>>2]=n[ve+8>>2];n[Ce+12>>2]=n[ve+12>>2];f=Ce+8|0;e=n[f>>2]|0;a=n[Ce+12>>2]|0;do{if((e|0)!=(a|0)){t=Ae+384|0;i=Ae+480|0;c=e;while(1){o=c;c=c+288|0;ad(Se|0,o|0,288)|0;ad(Ae|0,Te|0,384)|0;ad(t|0,Se|0,288)|0;ad(ke|0,Te|0,384)|0;o=Ee;d=Se;s=o+96|0;do{n[o>>2]=n[d>>2];o=o+4|0;d=d+4|0}while((o|0)<(s|0));ad(_e|0,i|0,192)|0;m=0;re(11,xe|0,Ee|0,_e|0);ye=m;m=0;if(ye&1)break;m=0;re(12,we|0,ke|0,xe|0);ye=m;m=0;if(ye&1)break;ad(Te|0,we|0,384)|0;if((c|0)==(a|0)){ze=96;break}}if((ze|0)==96){n[f>>2]=a;break}e=me()|0;n[f>>2]=c;m=0;ee(42,Ce|0);qe=m;m=0;if(!(qe&1))break a;e=me()|0;break a}}while(0);a=n[Ce>>2]|0;e=n[Ce+4>>2]|0;do{if(e|0)if(e>>>0>14913080){m=0;ee(36,3624);m=0;e=me()|0;break a}else{xt(a,e*288|0,8);break}}while(0);ad(Fe|0,Te|0,384)|0;m=0;ee(41,Ne|0);Ce=m;m=0;if(Ce&1){e=me()|0;break}e=Ne+192|0;a=Fe+192|0;t=Ne+64|0;c=Ne+128|0;i=Fe+64|0;f=Fe+128|0;do{if((((((((Lo(Fe,Ne,32)|0)==0?(Lo(Fe+32|0,Ne+32|0,32)|0)==0:0)?(Lo(i,t,32)|0)==0:0)?(Lo(Fe+96|0,Ne+96|0,32)|0)==0:0)?(Lo(f,c,32)|0)==0:0)?(Lo(Fe+160|0,Ne+160|0,32)|0)==0:0)?(Re=Ne+256|0,Oe=Ne+320|0,Be=Fe+256|0,Me=Fe+320|0,(Lo(a,e,32)|0)==0):0)?(Lo(Fe+224|0,Ne+224|0,32)|0)==0:0){if(Lo(Be,Re,32)|0){ze=118;break}if(Lo(Fe+288|0,Ne+288|0,32)|0){ze=118;break}if(Lo(Me,Oe,32)|0){ze=118;break}if(Lo(Fe+352|0,Ne+352|0,32)|0){ze=118;break}Fe=Le;n[Fe>>2]=1;n[Fe+4>>2]=0;Fe=Le+8|0;n[Fe>>2]=0;n[Fe+4>>2]=0;n[Fe+8>>2]=0;n[Fe+12>>2]=0;n[Fe+16>>2]=0;n[Fe+20>>2]=0}else ze=118}while(0);if((ze|0)==118){n[Le>>2]=0;n[Le+4>>2]=0;n[Le+8>>2]=0;n[Le+12>>2]=0;n[Le+16>>2]=0;n[Le+20>>2]=0;n[Le+24>>2]=0;n[Le+28>>2]=0}ze=120}}while(0);do{if((ze|0)==120){o=Pe;s=o+32|0;do{r[o>>0]=0;o=o+1|0}while((o|0)<(s|0));m=0;fe(4,Ie|0,Le|0,Pe|0,32);ze=m;m=0;if(ze&1){e=me()|0;break}m=0;re(4,De|0,Pe|0,32);ze=m;m=0;if(ze&1){e=me()|0;break}m=0;ee(35,De|0);ze=m;m=0;if(ze&1){e=me()|0;ct(De);break}a=n[De>>2]|0;e=n[De+4>>2]|0;if(e|0)xt(a,e,1);e=n[Ue+4>>2]|0;if(e|0)xt(n[Ue>>2]|0,e,1);Ue=a;p=qe;return Ue|0}}while(0);it(Ue);Ue=e;je(Ue|0)}}while(0);e=n[Ue+4>>2]|0;if(e|0)xt(n[Ue>>2]|0,e,1);Ue=14356;p=qe;return Ue|0}function _t(){ca();return}function wt(e,a){e=e|0;a=a|0;return Kn(1,e,a)|0}function At(e,a,t){e=e|0;a=a|0;t=t|0;return In(e,a,t)|0}function kt(e){e=e|0;Pn(e)}function xt(e,a,t){e=e|0;a=a|0;t=t|0;Fn(e,a,t);return}function Et(e,a,t,r,c,n){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;n=n|0;return Dn(e,a,t,r,c,n)|0}function St(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0;if((c|0)==32){i=a+24|0;i=de(n[i>>2]|0,n[i+4>>2]|0)|0;c=T;f=t;o=f;r[o>>0]=i;r[o+1>>0]=i>>8;r[o+2>>0]=i>>16;r[o+3>>0]=i>>24;f=f+4|0;r[f>>0]=c;r[f+1>>0]=c>>8;r[f+2>>0]=c>>16;r[f+3>>0]=c>>24;f=a+16|0;f=de(n[f>>2]|0,n[f+4>>2]|0)|0;c=T;o=t+8|0;i=o;r[i>>0]=f;r[i+1>>0]=f>>8;r[i+2>>0]=f>>16;r[i+3>>0]=f>>24;o=o+4|0;r[o>>0]=c;r[o+1>>0]=c>>8;r[o+2>>0]=c>>16;r[o+3>>0]=c>>24;o=a+8|0;o=de(n[o>>2]|0,n[o+4>>2]|0)|0;c=T;i=t+16|0;f=i;r[f>>0]=o;r[f+1>>0]=o>>8;r[f+2>>0]=o>>16;r[f+3>>0]=o>>24;i=i+4|0;r[i>>0]=c;r[i+1>>0]=c>>8;r[i+2>>0]=c>>16;r[i+3>>0]=c>>24;i=a;i=de(n[i>>2]|0,n[i+4>>2]|0)|0;a=T;c=t+24|0;t=c;r[t>>0]=i;r[t+1>>0]=i>>8;r[t+2>>0]=i>>16;r[t+3>>0]=i>>24;c=c+4|0;r[c>>0]=a;r[c+1>>0]=a>>8;r[c+2>>0]=a>>16;r[c+3>>0]=a>>24;n[e>>2]=0;return}else{n[e>>2]=1;n[e+4>>2]=32;n[e+8>>2]=c;return}}function Tt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0;l=e;s=n[l>>2]|0;l=n[l+4>>2]|0;c=a;b=n[c>>2]|0;c=n[c+4>>2]|0;Qo(b|0,0,s|0,0)|0;u=T;s=Qo(b|0,c|0,s|0,l|0)|0;b=T;l=Qo(c|0,0,l|0,0)|0;u=Qo(l|0,T|0,u|0,0)|0;l=e;n[l>>2]=s;n[l+4>>2]=u;l=e+8|0;c=l;m=n[c+4>>2]|0;i=a+8|0;p=n[i>>2]|0;i=n[i+4>>2]|0;c=Qo(T|0,0,n[c>>2]|0,0)|0;y=T;Qo(c|0,y|0,p|0,0)|0;h=T;p=Qo(c|0,y|0,p|0,i|0)|0;m=Qo(i|0,0,m|0,0)|0;h=Qo(m|0,T|0,h|0,0)|0;m=l;n[m>>2]=p;n[m+4>>2]=h;m=e+16|0;i=m;y=n[i+4>>2]|0;c=a+16|0;g=n[c>>2]|0;c=n[c+4>>2]|0;i=Qo(T|0,0,n[i>>2]|0,0)|0;r=T;Qo(i|0,r|0,g|0,0)|0;v=T;g=Qo(i|0,r|0,g|0,c|0)|0;y=Qo(c|0,0,y|0,0)|0;v=Qo(y|0,T|0,v|0,0)|0;y=m;n[y>>2]=g;n[y+4>>2]=v;y=e+24|0;c=y;r=n[c>>2]|0;c=n[c+4>>2]|0;a=a+24|0;i=n[a>>2]|0;a=n[a+4>>2]|0;d=Qo(T|0,0,r|0,0)|0;o=T;f=Qo(d|0,o|0,i|0,a|0)|0;Qo(0,a|0,r|0,c|0)|0;Qo(i|0,T|0,d|0,o|0)|0;o=T;d=y;n[d>>2]=f;n[d+4>>2]=o;d=4;do{if(!d)break;d=d+-1|0;r=e+(d<<3)|0;a=n[r>>2]|0;r=n[r+4>>2]|0;i=t+(d<<3)|0;c=n[i>>2]|0;i=n[i+4>>2]|0;if(r>>>0<i>>>0|(r|0)==(i|0)&a>>>0<c>>>0){_=6;break}}while(!(r>>>0>i>>>0|(r|0)==(i|0)&a>>>0>c>>>0));if((_|0)==6)return;c=t;_=n[c>>2]|0;c=n[c+4>>2]|0;d=Ko(s|0,1,_|0,0)|0;i=T;_=Ko(s|0,b|0,_|0,c|0)|0;u=Ko(u|0,1,c|0,0)|0;b=(i>>>0<1|(i|0)==1&d>>>0<0)<<31>>31;u=Qo(b|0,((b|0)<0)<<31>>31|0,u|0,T|0)|0;b=T;s=e;n[s>>2]=_;n[s+4>>2]=u;s=t+8|0;_=n[s+4>>2]|0;p=Ko(p|0,1,n[s>>2]|0,0)|0;u=(b>>>0<1|(b|0)==1&u>>>0<0)<<31>>31;p=Qo(u|0,((u|0)<0)<<31>>31|0,p|0,T|0)|0;u=T;h=Ko(h|0,1,_|0,0)|0;u=(u>>>0<1|(u|0)==1&p>>>0<0)<<31>>31;h=Qo(u|0,((u|0)<0)<<31>>31|0,h|0,T|0)|0;u=T;_=l;n[_>>2]=p;n[_+4>>2]=h;_=t+16|0;p=n[_+4>>2]|0;_=Ko(g|0,1,n[_>>2]|0,0)|0;h=(u>>>0<1|(u|0)==1&h>>>0<0)<<31>>31;_=Qo(h|0,((h|0)<0)<<31>>31|0,_|0,T|0)|0;h=T;v=Ko(v|0,1,p|0,0)|0;h=(h>>>0<1|(h|0)==1&_>>>0<0)<<31>>31;v=Qo(h|0,((h|0)<0)<<31>>31|0,v|0,T|0)|0;h=T;g=m;n[g>>2]=_;n[g+4>>2]=v;g=t+24|0;_=n[g+4>>2]|0;g=Ko(f|0,1,n[g>>2]|0,0)|0;v=(h>>>0<1|(h|0)==1&v>>>0<0)<<31>>31;g=Qo(v|0,((v|0)<0)<<31>>31|0,g|0,T|0)|0;v=T;_=Ko(o|0,0,_|0,0)|0;v=(v>>>0<1|(v|0)==1&g>>>0<0)<<31>>31;v=Qo(_|0,T|0,v|0,((v|0)<0)<<31>>31|0)|0;_=y;n[_>>2]=g;n[_+4>>2]=v;return}function jt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0;o=4;while(1){if(!o){p=6;break}o=o+-1|0;r=e+(o<<3)|0;f=n[r>>2]|0;r=n[r+4>>2]|0;i=a+(o<<3)|0;c=n[i>>2]|0;i=n[i+4>>2]|0;if(r>>>0<i>>>0|(r|0)==(i|0)&f>>>0<c>>>0){p=5;break}if(r>>>0>i>>>0|(r|0)==(i|0)&f>>>0>c>>>0){p=6;break}}if((p|0)==5){b=e;r=n[b>>2]|0;b=n[b+4>>2]|0;m=t;u=n[m>>2]|0;m=n[m+4>>2]|0;Qo(u|0,0,r|0,0)|0;c=T;r=Qo(u|0,m|0,r|0,b|0)|0;b=Qo(m|0,0,b|0,0)|0;c=Qo(b|0,T|0,c|0,0)|0;b=e;n[b>>2]=r;n[b+4>>2]=c;b=e+8|0;m=b;u=n[m+4>>2]|0;v=t+8|0;i=n[v>>2]|0;v=n[v+4>>2]|0;m=Qo(T|0,0,n[m>>2]|0,0)|0;l=T;Qo(m|0,l|0,i|0,0)|0;f=T;i=Qo(m|0,l|0,i|0,v|0)|0;u=Qo(v|0,0,u|0,0)|0;f=Qo(u|0,T|0,f|0,0)|0;u=b;n[u>>2]=i;n[u+4>>2]=f;u=e+16|0;v=u;l=n[v+4>>2]|0;m=t+16|0;o=n[m>>2]|0;m=n[m+4>>2]|0;v=Qo(T|0,0,n[v>>2]|0,0)|0;g=T;Qo(v|0,g|0,o|0,0)|0;p=T;o=Qo(v|0,g|0,o|0,m|0)|0;l=Qo(m|0,0,l|0,0)|0;p=Qo(l|0,T|0,p|0,0)|0;l=u;n[l>>2]=o;n[l+4>>2]=p;l=e+24|0;m=l;g=n[m>>2]|0;m=n[m+4>>2]|0;v=t+24|0;h=n[v>>2]|0;v=n[v+4>>2]|0;t=Qo(T|0,0,g|0,0)|0;s=T;d=Qo(t|0,s|0,h|0,v|0)|0;Qo(0,v|0,g|0,m|0)|0;Qo(h|0,T|0,t|0,s|0)|0;s=T;t=l;n[t>>2]=d;n[t+4>>2]=s;t=p}else if((p|0)==6){c=e;b=e+8|0;f=b;u=e+16|0;t=u;l=e+24|0;s=l;r=n[c>>2]|0;c=n[c+4>>2]|0;i=n[f>>2]|0;f=n[f+4>>2]|0;o=n[t>>2]|0;t=n[t+4>>2]|0;d=n[s>>2]|0;s=n[s+4>>2]|0}m=a;h=n[m>>2]|0;m=n[m+4>>2]|0;v=Ko(r|0,1,h|0,0)|0;g=T;h=Ko(r|0,c|0,h|0,m|0)|0;m=Ko(c|0,1,m|0,0)|0;v=(g>>>0<1|(g|0)==1&v>>>0<0)<<31>>31;m=Qo(v|0,((v|0)<0)<<31>>31|0,m|0,T|0)|0;v=T;g=e;n[g>>2]=h;n[g+4>>2]=m;g=a+8|0;h=n[g+4>>2]|0;g=Ko(i|0,1,n[g>>2]|0,0)|0;m=(v>>>0<1|(v|0)==1&m>>>0<0)<<31>>31;g=Qo(m|0,((m|0)<0)<<31>>31|0,g|0,T|0)|0;m=T;h=Ko(f|0,1,h|0,0)|0;m=(m>>>0<1|(m|0)==1&g>>>0<0)<<31>>31;h=Qo(m|0,((m|0)<0)<<31>>31|0,h|0,T|0)|0;m=T;v=b;n[v>>2]=g;n[v+4>>2]=h;v=a+16|0;g=n[v+4>>2]|0;v=Ko(o|0,1,n[v>>2]|0,0)|0;h=(m>>>0<1|(m|0)==1&h>>>0<0)<<31>>31;v=Qo(h|0,((h|0)<0)<<31>>31|0,v|0,T|0)|0;h=T;g=Ko(t|0,1,g|0,0)|0;h=(h>>>0<1|(h|0)==1&v>>>0<0)<<31>>31;g=Qo(h|0,((h|0)<0)<<31>>31|0,g|0,T|0)|0;h=T;m=u;n[m>>2]=v;n[m+4>>2]=g;m=a+24|0;v=n[m+4>>2]|0;m=Ko(d|0,1,n[m>>2]|0,0)|0;g=(h>>>0<1|(h|0)==1&g>>>0<0)<<31>>31;m=Qo(g|0,((g|0)<0)<<31>>31|0,m|0,T|0)|0;g=T;v=Ko(s|0,0,v|0,0)|0;g=(g>>>0<1|(g|0)==1&m>>>0<0)<<31>>31;g=Qo(v|0,T|0,g|0,((g|0)<0)<<31>>31|0)|0;v=l;n[v>>2]=m;n[v+4>>2]=g;return}function Ct(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0,C=0,R=0,O=0;E=p;p=p+64|0;A=E;i=A;f=i+64|0;do{n[i>>2]=0;i=i+4|0}while((i|0)<(f|0));g=e+32|0;k=e+8|0;o=e;v=0;y=k;_=1;while(1){if(v>>>0>8){x=4;break}f=A+(v<<3)|0;i=8-v|0;m=o;h=n[m>>2]|0;m=n[m+4>>2]|0;e:do{if(!((h|0)==0&(m|0)==0)?(w=f+(i<<3)|0,i|0):0){b=0;u=0;l=0;i=a;while(1){s=f;f=f+8|0;if((l|0)==4)if((b|0)==0&(u|0)==0)break e;else{i=0;o=0;d=4}else{o=i;i=n[o>>2]|0;o=n[o+4>>2]|0;d=l+1|0}O=s;R=n[O>>2]|0;O=n[O+4>>2]|0;S=rd(i|0,0,h|0,0)|0;R=Qo(S|0,T|0,R|0,0)|0;S=T;Qo(R|0,S|0,b|0,0)|0;l=T;S=Qo(R|0,S|0,b|0,u|0)|0;R=rd(i|0,0,m|0,0)|0;j=T;C=rd(o|0,0,h|0,0)|0;i=T;u=Qo(O|0,0,u|0,0)|0;u=Qo(u|0,T|0,R|0,0)|0;u=Qo(u|0,T|0,C|0,0)|0;u=Qo(u|0,T|0,l|0,0)|0;l=T;o=rd(o|0,0,m|0,0)|0;o=Qo(j|0,0,o|0,T|0)|0;o=Qo(o|0,T|0,i|0,0)|0;b=Qo(o|0,T|0,l|0,0)|0;l=s;n[l>>2]=S;n[l+4>>2]=u;if((f|0)==(w|0))break;else{u=T;l=d;i=a+(d<<3)|0}}}}while(0);i=y;f=(i|0)==(g|0);if((y|0)==0|f)break;else{o=i;v=f?v:_;y=f?y:i+8|0;_=((f^1)&1)+_|0}}if((x|0)==4)Bi(v,8);v=1;i=0;while(1){f=A+(i<<3)|0;m=f;m=rd(n[m>>2]|0,n[m+4>>2]|0,r|0,c|0)|0;g=T;e:do{if(!((m|0)==0&(g|0)==0)){l=f+(8-i<<3)|0;b=0;u=0;h=0;i=t;while(1){s=f;f=f+8|0;if((h|0)==4)if((b|0)==0&(u|0)==0)break e;else{i=0;o=0;d=4}else{o=i;i=n[o>>2]|0;o=n[o+4>>2]|0;d=h+1|0}a=s;S=n[a>>2]|0;a=n[a+4>>2]|0;C=rd(i|0,0,m|0,0)|0;S=Qo(C|0,T|0,S|0,0)|0;C=T;Qo(S|0,C|0,b|0,0)|0;R=T;C=Qo(S|0,C|0,b|0,u|0)|0;S=rd(i|0,0,g|0,0)|0;w=T;O=rd(o|0,0,m|0,0)|0;j=T;a=Qo(a|0,0,u|0,0)|0;S=Qo(a|0,T|0,S|0,0)|0;O=Qo(S|0,T|0,O|0,0)|0;R=Qo(O|0,T|0,R|0,0)|0;O=T;S=rd(o|0,0,g|0,0)|0;S=Qo(w|0,0,S|0,T|0)|0;j=Qo(S|0,T|0,j|0,0)|0;b=Qo(j|0,T|0,O|0,0)|0;O=s;n[O>>2]=C;n[O+4>>2]=R;if((f|0)==(l|0))break;else{u=T;h=d;i=t+(d<<3)|0}}}}while(0);i=v+1|0;if((i|0)==5)break;else{O=v;v=i;i=O}}s=A+32|0;n[e>>2]=n[s>>2];n[e+4>>2]=n[s+4>>2];n[e+8>>2]=n[s+8>>2];n[e+12>>2]=n[s+12>>2];n[e+16>>2]=n[s+16>>2];n[e+20>>2]=n[s+20>>2];n[e+24>>2]=n[s+24>>2];n[e+28>>2]=n[s+28>>2];s=4;do{if(!s)break;s=s+-1|0;f=e+(s<<3)|0;i=n[f>>2]|0;f=n[f+4>>2]|0;d=t+(s<<3)|0;o=n[d>>2]|0;d=n[d+4>>2]|0;if(f>>>0<d>>>0|(f|0)==(d|0)&i>>>0<o>>>0){x=25;break}}while(!(f>>>0>d>>>0|(f|0)==(d|0)&i>>>0>o>>>0));if((x|0)==25){p=E;return}C=e;x=n[C>>2]|0;C=n[C+4>>2]|0;j=t;O=n[j>>2]|0;j=n[j+4>>2]|0;S=Ko(x|0,1,O|0,0)|0;R=T;O=Ko(x|0,C|0,O|0,j|0)|0;j=Ko(C|0,1,j|0,0)|0;S=(R>>>0<1|(R|0)==1&S>>>0<0)<<31>>31;j=Qo(S|0,((S|0)<0)<<31>>31|0,j|0,T|0)|0;S=T;R=e;n[R>>2]=O;n[R+4>>2]=j;R=k;O=n[R+4>>2]|0;C=t+8|0;x=n[C+4>>2]|0;C=Ko(n[R>>2]|0,1,n[C>>2]|0,0)|0;j=(S>>>0<1|(S|0)==1&j>>>0<0)<<31>>31;C=Qo(j|0,((j|0)<0)<<31>>31|0,C|0,T|0)|0;j=T;x=Ko(O|0,1,x|0,0)|0;j=(j>>>0<1|(j|0)==1&C>>>0<0)<<31>>31;x=Qo(j|0,((j|0)<0)<<31>>31|0,x|0,T|0)|0;j=T;O=k;n[O>>2]=C;n[O+4>>2]=x;O=e+16|0;k=O;C=n[k+4>>2]|0;S=t+16|0;R=n[S+4>>2]|0;S=Ko(n[k>>2]|0,1,n[S>>2]|0,0)|0;x=(j>>>0<1|(j|0)==1&x>>>0<0)<<31>>31;S=Qo(x|0,((x|0)<0)<<31>>31|0,S|0,T|0)|0;x=T;R=Ko(C|0,1,R|0,0)|0;x=(x>>>0<1|(x|0)==1&S>>>0<0)<<31>>31;R=Qo(x|0,((x|0)<0)<<31>>31|0,R|0,T|0)|0;x=T;n[O>>2]=S;n[O+4>>2]=R;O=e+24|0;e=O;S=n[e+4>>2]|0;C=t+24|0;j=n[C+4>>2]|0;C=Ko(n[e>>2]|0,1,n[C>>2]|0,0)|0;R=(x>>>0<1|(x|0)==1&R>>>0<0)<<31>>31;C=Qo(R|0,((R|0)<0)<<31>>31|0,C|0,T|0)|0;R=T;j=Ko(S|0,0,j|0,0)|0;R=(R>>>0<1|(R|0)==1&C>>>0<0)<<31>>31;R=Qo(j|0,T|0,R|0,((R|0)<0)<<31>>31|0)|0;n[O>>2]=C;n[O+4>>2]=R;p=E;return}function Rt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0;d=p;p=p+32|0;f=d;n[f>>2]=0;n[f+4>>2]=0;n[f+8>>2]=0;n[f+12>>2]=0;n[f+16>>2]=0;n[f+20>>2]=0;n[f+24>>2]=0;n[f+28>>2]=0;o=4;while(1){if(!o){t=5;break}o=o+-1|0;t=e+(o<<3)|0;i=n[t>>2]|0;t=n[t+4>>2]|0;c=f+(o<<3)|0;r=n[c>>2]|0;c=n[c+4>>2]|0;if(t>>>0<c>>>0|(t|0)==(c|0)&i>>>0<r>>>0){t=5;break}if(t>>>0>c>>>0|(t|0)==(c|0)&i>>>0>r>>>0){t=6;break}}if((t|0)==5){p=d;return}else if((t|0)==6){s=a;t=n[s>>2]|0;s=n[s+4>>2]|0;r=a+8|0;c=n[r>>2]|0;r=n[r+4>>2]|0;f=a+16|0;h=n[f>>2]|0;f=n[f+4>>2]|0;m=a+24|0;g=n[m>>2]|0;m=n[m+4>>2]|0;u=e;l=n[u>>2]|0;u=n[u+4>>2]|0;o=Ko(t|0,1,l|0,0)|0;b=T;l=Ko(t|0,s|0,l|0,u|0)|0;u=Ko(s|0,1,u|0,0)|0;o=(b>>>0<1|(b|0)==1&o>>>0<0)<<31>>31;u=Qo(o|0,((o|0)<0)<<31>>31|0,u|0,T|0)|0;o=T;b=e+8|0;s=b;t=n[s+4>>2]|0;s=Ko(c|0,1,n[s>>2]|0,0)|0;o=(o>>>0<1|(o|0)==1&u>>>0<0)<<31>>31;s=Qo(o|0,((o|0)<0)<<31>>31|0,s|0,T|0)|0;o=T;t=Ko(r|0,1,t|0,0)|0;o=(o>>>0<1|(o|0)==1&s>>>0<0)<<31>>31;t=Qo(o|0,((o|0)<0)<<31>>31|0,t|0,T|0)|0;o=T;r=e+16|0;c=r;i=n[c+4>>2]|0;c=Ko(h|0,1,n[c>>2]|0,0)|0;o=(o>>>0<1|(o|0)==1&t>>>0<0)<<31>>31;c=Qo(o|0,((o|0)<0)<<31>>31|0,c|0,T|0)|0;o=T;i=Ko(f|0,1,i|0,0)|0;o=(o>>>0<1|(o|0)==1&c>>>0<0)<<31>>31;i=Qo(o|0,((o|0)<0)<<31>>31|0,i|0,T|0)|0;o=T;a=e+24|0;f=a;h=n[f+4>>2]|0;f=Ko(g|0,1,n[f>>2]|0,0)|0;o=(o>>>0<1|(o|0)==1&i>>>0<0)<<31>>31;f=Qo(o|0,((o|0)<0)<<31>>31|0,f|0,T|0)|0;o=T;h=Ko(m|0,0,h|0,0)|0;o=(o>>>0<1|(o|0)==1&f>>>0<0)<<31>>31;o=Qo(h|0,T|0,o|0,((o|0)<0)<<31>>31|0)|0;n[e>>2]=l;n[e+4>>2]=u;e=b;n[e>>2]=s;n[e+4>>2]=t;e=r;n[e>>2]=c;n[e+4>>2]=i;n[a>>2]=f;n[a+4>>2]=o;p=d;return}}function Ot(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ee=0,ae=0,te=0,re=0,ce=0,ne=0,ie=0,fe=0;fe=p;p=p+192|0;te=fe+160|0;ae=fe+128|0;ce=fe+96|0;re=fe+64|0;ie=fe+32|0;ne=fe;n[ne>>2]=n[e>>2];n[ne+4>>2]=n[e+4>>2];n[ne+8>>2]=n[e+8>>2];n[ne+12>>2]=n[e+12>>2];n[ne+16>>2]=n[e+16>>2];n[ne+20>>2]=n[e+20>>2];n[ne+24>>2]=n[e+24>>2];n[ne+28>>2]=n[e+28>>2];n[ie>>2]=n[a>>2];n[ie+4>>2]=n[a+4>>2];n[ie+8>>2]=n[a+8>>2];n[ie+12>>2]=n[a+12>>2];n[ie+16>>2]=n[a+16>>2];n[ie+20>>2]=n[a+20>>2];n[ie+24>>2]=n[a+24>>2];n[ie+28>>2]=n[a+28>>2];X=re;n[X>>2]=1;n[X+4>>2]=0;X=re+8|0;n[X>>2]=0;n[X+4>>2]=0;n[X+8>>2]=0;n[X+12>>2]=0;n[X+16>>2]=0;n[X+20>>2]=0;n[ce>>2]=0;n[ce+4>>2]=0;n[ce+8>>2]=0;n[ce+12>>2]=0;n[ce+16>>2]=0;n[ce+20>>2]=0;n[ce+24>>2]=0;n[ce+28>>2]=0;$=ae;n[$>>2]=1;n[$+4>>2]=0;$=ae+8|0;n[$>>2]=0;n[$+4>>2]=0;n[$+8>>2]=0;n[$+12>>2]=0;n[$+16>>2]=0;n[$+20>>2]=0;e:do{if(Lo(ne,ae,32)|0){ee=te+8|0;L=ne+8|0;D=ie+8|0;z=ne+16|0;q=ie+16|0;U=ne+24|0;H=ie+24|0;V=ce+8|0;G=a+8|0;W=ce+16|0;Y=a+16|0;K=ce+24|0;Q=a+24|0;Z=re+16|0;J=re+24|0;do{F=te;n[F>>2]=1;n[F+4>>2]=0;n[ee>>2]=0;n[ee+4>>2]=0;n[ee+8>>2]=0;n[ee+12>>2]=0;n[ee+16>>2]=0;n[ee+20>>2]=0;if(!(Lo(ie,te,32)|0))break e;r=ne;t=n[r>>2]|0;r=n[r+4>>2]|0;if((t&1|0)==0&0==0){S=a;E=n[S>>2]|0;S=n[S+4>>2]|0;C=G;j=n[C>>2]|0;C=n[C+4>>2]|0;O=Y;R=n[O>>2]|0;O=n[O+4>>2]|0;M=Q;B=n[M>>2]|0;M=n[M+4>>2]|0;_=U;A=z;x=L;h=re;l=X;c=Z;s=J;y=n[_>>2]|0;_=n[_+4>>2]|0;w=n[A>>2]|0;A=n[A+4>>2]|0;k=n[x>>2]|0;x=n[x+4>>2]|0;f=n[h>>2]|0;o=n[s>>2]|0;s=n[s+4>>2]|0;i=n[c>>2]|0;c=n[c+4>>2]|0;h=n[h+4>>2]|0;d=n[l>>2]|0;l=n[l+4>>2]|0;do{F=nd(y|0,_|0,63)|0;P=T;y=$o(y|0,_|0,1)|0;_=T;I=nd(w|0,A|0,63)|0;v=T;N=$o(w|0,A|0,1)|0;w=N|F;A=T|P;P=nd(k|0,x|0,63)|0;F=T;N=$o(k|0,x|0,1)|0;k=N|I;x=T|v;v=$o(t|0,r|0,1)|0;t=v|P;r=T|F;if((f&1|0)==0&0==0){u=nd(o|0,s|0,63)|0;g=T;b=$o(i|0,c|0,1)|0;m=T}else{Qo(E|0,0,f|0,0)|0;u=T;f=Qo(E|0,S|0,f|0,h|0)|0;h=Qo(S|0,0,h|0,0)|0;h=Qo(h|0,T|0,u|0,0)|0;u=Qo(T|0,0,d|0,0)|0;d=T;Qo(u|0,d|0,j|0,0)|0;g=T;d=Qo(u|0,d|0,j|0,C|0)|0;l=Qo(C|0,0,l|0,0)|0;l=Qo(l|0,T|0,g|0,0)|0;g=Qo(T|0,0,i|0,0)|0;i=T;Qo(g|0,i|0,R|0,0)|0;u=T;i=Qo(g|0,i|0,R|0,O|0)|0;g=T;F=Qo(O|0,0,c|0,0)|0;u=Qo(F|0,T|0,u|0,0)|0;F=Qo(T|0,0,o|0,0)|0;m=T;c=Qo(F|0,m|0,B|0,M|0)|0;b=T;Qo(0,M|0,o|0,s|0)|0;Qo(B|0,T|0,F|0,m|0)|0;s=T;b=nd(c|0,b|0,63)|0;m=T;u=$o(i&-2|0,u|0,1)|0;o=c&-2;c=g;g=T}o=$o(o|0,s|0,1)|0;s=T;N=nd(i|0,c|0,63)|0;I=T;i=b|u;c=m|g;P=nd(d|0,l|0,63)|0;F=T;d=$o(d|0,l|0,1)|0;d=d|N;l=T|I;f=$o(f|0,h|0,1)|0;f=f|P;h=T|F}while((v&1|0)==0&0==0);F=U;n[F>>2]=y;n[F+4>>2]=_;F=z;n[F>>2]=w;n[F+4>>2]=A;F=L;n[F>>2]=k;n[F+4>>2]=x;F=ne;n[F>>2]=t;n[F+4>>2]=r;F=re;n[F>>2]=f;n[F+4>>2]=h;F=X;n[F>>2]=d;n[F+4>>2]=l;F=Z;n[F>>2]=i;n[F+4>>2]=c;F=J;n[F>>2]=o;n[F+4>>2]=s;F=t;P=r}else{F=t;P=r}o=ie;d=n[o>>2]|0;o=n[o+4>>2]|0;if((d&1|0)==0&0==0){A=a;w=n[A>>2]|0;A=n[A+4>>2]|0;x=G;k=n[x>>2]|0;x=n[x+4>>2]|0;S=Y;E=n[S>>2]|0;S=n[S+4>>2]|0;C=Q;j=n[C>>2]|0;C=n[C+4>>2]|0;O=H;M=q;I=D;_=V;t=W;c=K;s=ce;R=n[O>>2]|0;O=n[O+4>>2]|0;B=n[M>>2]|0;M=n[M+4>>2]|0;N=n[I>>2]|0;I=n[I+4>>2]|0;b=n[s>>2]|0;u=n[c>>2]|0;c=n[c+4>>2]|0;r=n[t>>2]|0;t=n[t+4>>2]|0;s=n[s+4>>2]|0;y=n[_>>2]|0;_=n[_+4>>2]|0;do{g=nd(R|0,O|0,63)|0;m=T;R=$o(R|0,O|0,1)|0;O=T;h=nd(B|0,M|0,63)|0;v=T;l=$o(B|0,M|0,1)|0;B=l|g;M=T|m;m=nd(N|0,I|0,63)|0;g=T;l=$o(N|0,I|0,1)|0;N=l|h;I=T|v;v=$o(d|0,o|0,1)|0;d=v|m;o=T|g;if((b&1|0)==0&0==0){f=nd(u|0,c|0,63)|0;h=T;i=$o(r|0,t|0,1)|0;l=T;m=y;g=_}else{Qo(w|0,0,b|0,0)|0;h=T;b=Qo(w|0,A|0,b|0,s|0)|0;s=Qo(A|0,0,s|0,0)|0;s=Qo(s|0,T|0,h|0,0)|0;h=Qo(T|0,0,y|0,0)|0;m=T;Qo(h|0,m|0,k|0,0)|0;g=T;m=Qo(h|0,m|0,k|0,x|0)|0;h=Qo(x|0,0,_|0,0)|0;g=Qo(h|0,T|0,g|0,0)|0;h=Qo(T|0,0,r|0,0)|0;r=T;Qo(h|0,r|0,E|0,0)|0;f=T;r=Qo(h|0,r|0,E|0,S|0)|0;h=T;_=Qo(S|0,0,t|0,0)|0;f=Qo(_|0,T|0,f|0,0)|0;_=Qo(T|0,0,u|0,0)|0;l=T;t=Qo(_|0,l|0,j|0,C|0)|0;i=T;Qo(0,C|0,u|0,c|0)|0;Qo(j|0,T|0,_|0,l|0)|0;c=T;i=nd(t|0,i|0,63)|0;l=T;f=$o(r&-2|0,f|0,1)|0;u=t&-2;t=h;h=T}u=$o(u|0,c|0,1)|0;c=T;y=nd(r|0,t|0,63)|0;_=T;r=i|f;t=l|h;h=$o(m|0,g|0,1)|0;y=h|y;_=T|_;m=nd(m|0,g|0,63)|0;g=T;b=$o(b|0,s|0,1)|0;b=b|m;s=T|g}while((v&1|0)==0&0==0);C=ce;n[C>>2]=b;n[C+4>>2]=s;C=H;n[C>>2]=R;n[C+4>>2]=O;O=q;n[O>>2]=B;n[O+4>>2]=M;M=D;n[M>>2]=N;n[M+4>>2]=I;I=ie;n[I>>2]=d;n[I+4>>2]=o;I=V;n[I>>2]=y;n[I+4>>2]=_;I=W;n[I>>2]=r;n[I+4>>2]=t;I=K;n[I>>2]=u;n[I+4>>2]=c}f=4;while(1){if(!f){t=23;break}f=f+-1|0;r=ne+(f<<3)|0;t=n[r>>2]|0;r=n[r+4>>2]|0;i=ie+(f<<3)|0;c=n[i>>2]|0;i=n[i+4>>2]|0;if(r>>>0<i>>>0|(r|0)==(i|0)&t>>>0<c>>>0){t=24;break}if(r>>>0>i>>>0|(r|0)==(i|0)&t>>>0>c>>>0){t=23;break}}if((t|0)==23){N=Ko(F|0,1,d|0,0)|0;B=T;F=Ko(F|0,P|0,d|0,o|0)|0;I=Ko(P|0,1,o|0,0)|0;N=(B>>>0<1|(B|0)==1&N>>>0<0)<<31>>31;I=Qo(N|0,((N|0)<0)<<31>>31|0,I|0,T|0)|0;N=T;P=ne;n[P>>2]=F;n[P+4>>2]=I;P=L;F=n[P+4>>2]|0;B=D;M=n[B+4>>2]|0;B=Ko(n[P>>2]|0,1,n[B>>2]|0,0)|0;I=(N>>>0<1|(N|0)==1&I>>>0<0)<<31>>31;B=Qo(I|0,((I|0)<0)<<31>>31|0,B|0,T|0)|0;I=T;M=Ko(F|0,1,M|0,0)|0;I=(I>>>0<1|(I|0)==1&B>>>0<0)<<31>>31;M=Qo(I|0,((I|0)<0)<<31>>31|0,M|0,T|0)|0;I=T;F=L;n[F>>2]=B;n[F+4>>2]=M;F=z;B=n[F+4>>2]|0;N=q;P=n[N+4>>2]|0;N=Ko(n[F>>2]|0,1,n[N>>2]|0,0)|0;M=(I>>>0<1|(I|0)==1&M>>>0<0)<<31>>31;N=Qo(M|0,((M|0)<0)<<31>>31|0,N|0,T|0)|0;M=T;P=Ko(B|0,1,P|0,0)|0;M=(M>>>0<1|(M|0)==1&N>>>0<0)<<31>>31;P=Qo(M|0,((M|0)<0)<<31>>31|0,P|0,T|0)|0;M=T;B=z;n[B>>2]=N;n[B+4>>2]=P;B=U;N=n[B+4>>2]|0;I=H;F=n[I+4>>2]|0;I=Ko(n[B>>2]|0,1,n[I>>2]|0,0)|0;P=(M>>>0<1|(M|0)==1&P>>>0<0)<<31>>31;I=Qo(P|0,((P|0)<0)<<31>>31|0,I|0,T|0)|0;P=T;F=Ko(N|0,0,F|0,0)|0;P=(P>>>0<1|(P|0)==1&I>>>0<0)<<31>>31;P=Qo(F|0,T|0,P|0,((P|0)<0)<<31>>31|0)|0;F=U;n[F>>2]=I;n[F+4>>2]=P;jt(re,ce,a)}else if((t|0)==24){N=Ko(d|0,1,F|0,0)|0;B=T;F=Ko(d|0,o|0,F|0,P|0)|0;I=Ko(o|0,1,P|0,0)|0;N=(B>>>0<1|(B|0)==1&N>>>0<0)<<31>>31;I=Qo(N|0,((N|0)<0)<<31>>31|0,I|0,T|0)|0;N=T;P=ie;n[P>>2]=F;n[P+4>>2]=I;P=D;F=n[P+4>>2]|0;B=L;M=n[B+4>>2]|0;B=Ko(n[P>>2]|0,1,n[B>>2]|0,0)|0;I=(N>>>0<1|(N|0)==1&I>>>0<0)<<31>>31;B=Qo(I|0,((I|0)<0)<<31>>31|0,B|0,T|0)|0;I=T;M=Ko(F|0,1,M|0,0)|0;I=(I>>>0<1|(I|0)==1&B>>>0<0)<<31>>31;M=Qo(I|0,((I|0)<0)<<31>>31|0,M|0,T|0)|0;I=T;F=D;n[F>>2]=B;n[F+4>>2]=M;F=q;B=n[F+4>>2]|0;N=z;P=n[N+4>>2]|0;N=Ko(n[F>>2]|0,1,n[N>>2]|0,0)|0;M=(I>>>0<1|(I|0)==1&M>>>0<0)<<31>>31;N=Qo(M|0,((M|0)<0)<<31>>31|0,N|0,T|0)|0;M=T;P=Ko(B|0,1,P|0,0)|0;M=(M>>>0<1|(M|0)==1&N>>>0<0)<<31>>31;P=Qo(M|0,((M|0)<0)<<31>>31|0,P|0,T|0)|0;M=T;B=q;n[B>>2]=N;n[B+4>>2]=P;B=H;N=n[B+4>>2]|0;I=U;F=n[I+4>>2]|0;I=Ko(n[B>>2]|0,1,n[I>>2]|0,0)|0;P=(M>>>0<1|(M|0)==1&P>>>0<0)<<31>>31;I=Qo(P|0,((P|0)<0)<<31>>31|0,I|0,T|0)|0;P=T;F=Ko(N|0,0,F|0,0)|0;P=(P>>>0<1|(P|0)==1&I>>>0<0)<<31>>31;P=Qo(F|0,T|0,P|0,((P|0)<0)<<31>>31|0)|0;F=H;n[F>>2]=I;n[F+4>>2]=P;jt(ce,re,a)}F=ae;n[F>>2]=1;n[F+4>>2]=0;n[$>>2]=0;n[$+4>>2]=0;n[$+8>>2]=0;n[$+12>>2]=0;n[$+16>>2]=0;n[$+20>>2]=0}while((Lo(ne,ae,32)|0)!=0)}}while(0);ie=te;n[ie>>2]=1;n[ie+4>>2]=0;ie=te+8|0;n[ie>>2]=0;n[ie+4>>2]=0;n[ie+8>>2]=0;n[ie+12>>2]=0;n[ie+16>>2]=0;n[ie+20>>2]=0;if(!(Lo(ne,te,32)|0)){n[e>>2]=n[re>>2];n[e+4>>2]=n[re+4>>2];n[e+8>>2]=n[re+8>>2];n[e+12>>2]=n[re+12>>2];n[e+16>>2]=n[re+16>>2];n[e+20>>2]=n[re+20>>2];n[e+24>>2]=n[re+24>>2];n[e+28>>2]=n[re+28>>2];p=fe;return}else{n[e>>2]=n[ce>>2];n[e+4>>2]=n[ce+4>>2];n[e+8>>2]=n[ce+8>>2];n[e+12>>2]=n[ce+12>>2];n[e+16>>2]=n[ce+16>>2];n[e+20>>2]=n[ce+20>>2];n[e+24>>2]=n[ce+24>>2];n[e+28>>2]=n[ce+28>>2];p=fe;return}}function Bt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;t=p;p=p+224|0;i=t+192|0;c=t+160|0;o=t+128|0;r=t+96|0;s=t+64|0;d=t+32|0;f=t;b=a+32|0;n[c>>2]=n[a>>2];n[c+4>>2]=n[a+4>>2];n[c+8>>2]=n[a+8>>2];n[c+12>>2]=n[a+12>>2];n[c+16>>2]=n[a+16>>2];n[c+20>>2]=n[a+20>>2];n[c+24>>2]=n[a+24>>2];n[c+28>>2]=n[a+28>>2];n[i>>2]=n[b>>2];n[i+4>>2]=n[b+4>>2];n[i+8>>2]=n[b+8>>2];n[i+12>>2]=n[b+12>>2];n[i+16>>2]=n[b+16>>2];n[i+20>>2]=n[b+20>>2];n[i+24>>2]=n[b+24>>2];n[i+28>>2]=n[b+28>>2];Ct(c,i,8,-460954743,-2016278654);n[f>>2]=n[c>>2];n[f+4>>2]=n[c+4>>2];n[f+8>>2]=n[c+8>>2];n[f+12>>2]=n[c+12>>2];n[f+16>>2]=n[c+16>>2];n[f+20>>2]=n[c+20>>2];n[f+24>>2]=n[c+24>>2];n[f+28>>2]=n[c+28>>2];n[c>>2]=n[b>>2];n[c+4>>2]=n[b+4>>2];n[c+8>>2]=n[b+8>>2];n[c+12>>2]=n[b+12>>2];n[c+16>>2]=n[b+16>>2];n[c+20>>2]=n[b+20>>2];n[c+24>>2]=n[b+24>>2];n[c+28>>2]=n[b+28>>2];u=i;n[u>>2]=317583274;n[u+4>>2]=1757628553;u=i+8|0;n[u>>2]=1923792719;n[u+4>>2]=-1928822936;u=i+16|0;n[u>>2]=151523889;n[u+4>>2]=1373741639;u=i+24|0;n[u>>2]=1193918714;n[u+4>>2]=576313009;Ct(c,i,8,-460954743,-2016278654);n[o>>2]=n[c>>2];n[o+4>>2]=n[c+4>>2];n[o+8>>2]=n[c+8>>2];n[o+12>>2]=n[c+12>>2];n[o+16>>2]=n[c+16>>2];n[o+20>>2]=n[c+20>>2];n[o+24>>2]=n[c+24>>2];n[o+28>>2]=n[c+28>>2];n[c>>2]=n[o>>2];n[c+4>>2]=n[o+4>>2];n[c+8>>2]=n[o+8>>2];n[c+12>>2]=n[o+12>>2];n[c+16>>2]=n[o+16>>2];n[c+20>>2]=n[o+20>>2];n[c+24>>2]=n[o+24>>2];n[c+28>>2]=n[o+28>>2];n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[i+12>>2]=n[a+12>>2];n[i+16>>2]=n[a+16>>2];n[i+20>>2]=n[a+20>>2];n[i+24>>2]=n[a+24>>2];n[i+28>>2]=n[a+28>>2];Tt(c,i,8);n[r>>2]=n[c>>2];n[r+4>>2]=n[c+4>>2];n[r+8>>2]=n[c+8>>2];n[r+12>>2]=n[c+12>>2];n[r+16>>2]=n[c+16>>2];n[r+20>>2]=n[c+20>>2];n[r+24>>2]=n[c+24>>2];n[r+28>>2]=n[c+28>>2];n[c>>2]=n[a>>2];n[c+4>>2]=n[a+4>>2];n[c+8>>2]=n[a+8>>2];n[c+12>>2]=n[a+12>>2];n[c+16>>2]=n[a+16>>2];n[c+20>>2]=n[a+20>>2];n[c+24>>2]=n[a+24>>2];n[c+28>>2]=n[a+28>>2];n[i>>2]=n[b>>2];n[i+4>>2]=n[b+4>>2];n[i+8>>2]=n[b+8>>2];n[i+12>>2]=n[b+12>>2];n[i+16>>2]=n[b+16>>2];n[i+20>>2]=n[b+20>>2];n[i+24>>2]=n[b+24>>2];n[i+28>>2]=n[b+28>>2];Tt(c,i,8);n[o>>2]=n[c>>2];n[o+4>>2]=n[c+4>>2];n[o+8>>2]=n[c+8>>2];n[o+12>>2]=n[c+12>>2];n[o+16>>2]=n[c+16>>2];n[o+20>>2]=n[c+20>>2];n[o+24>>2]=n[c+24>>2];n[o+28>>2]=n[c+28>>2];n[c>>2]=n[r>>2];n[c+4>>2]=n[r+4>>2];n[c+8>>2]=n[r+8>>2];n[c+12>>2]=n[r+12>>2];n[c+16>>2]=n[r+16>>2];n[c+20>>2]=n[r+20>>2];n[c+24>>2]=n[r+24>>2];n[c+28>>2]=n[r+28>>2];n[i>>2]=n[o>>2];n[i+4>>2]=n[o+4>>2];n[i+8>>2]=n[o+8>>2];n[i+12>>2]=n[o+12>>2];n[i+16>>2]=n[o+16>>2];n[i+20>>2]=n[o+20>>2];n[i+24>>2]=n[o+24>>2];n[i+28>>2]=n[o+28>>2];Ct(c,i,8,-460954743,-2016278654);n[s>>2]=n[c>>2];n[s+4>>2]=n[c+4>>2];n[s+8>>2]=n[c+8>>2];n[s+12>>2]=n[c+12>>2];n[s+16>>2]=n[c+16>>2];n[s+20>>2]=n[c+20>>2];n[s+24>>2]=n[c+24>>2];n[s+28>>2]=n[c+28>>2];n[c>>2]=n[s>>2];n[c+4>>2]=n[s+4>>2];n[c+8>>2]=n[s+8>>2];n[c+12>>2]=n[s+12>>2];n[c+16>>2]=n[s+16>>2];n[c+20>>2]=n[s+20>>2];n[c+24>>2]=n[s+24>>2];n[c+28>>2]=n[s+28>>2];n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];n[i+12>>2]=n[f+12>>2];n[i+16>>2]=n[f+16>>2];n[i+20>>2]=n[f+20>>2];n[i+24>>2]=n[f+24>>2];n[i+28>>2]=n[f+28>>2];jt(c,i,8);n[d>>2]=n[c>>2];n[d+4>>2]=n[c+4>>2];n[d+8>>2]=n[c+8>>2];n[d+12>>2]=n[c+12>>2];n[d+16>>2]=n[c+16>>2];n[d+20>>2]=n[c+20>>2];n[d+24>>2]=n[c+24>>2];n[d+28>>2]=n[c+28>>2];n[c>>2]=n[f>>2];n[c+4>>2]=n[f+4>>2];n[c+8>>2]=n[f+8>>2];n[c+12>>2]=n[f+12>>2];n[c+16>>2]=n[f+16>>2];n[c+20>>2]=n[f+20>>2];n[c+24>>2]=n[f+24>>2];n[c+28>>2]=n[f+28>>2];a=i;n[a>>2]=317583274;n[a+4>>2]=1757628553;a=i+8|0;n[a>>2]=1923792719;n[a+4>>2]=-1928822936;a=i+16|0;n[a>>2]=151523889;n[a+4>>2]=1373741639;a=i+24|0;n[a>>2]=1193918714;n[a+4>>2]=576313009;Ct(c,i,8,-460954743,-2016278654);n[o>>2]=n[c>>2];n[o+4>>2]=n[c+4>>2];n[o+8>>2]=n[c+8>>2];n[o+12>>2]=n[c+12>>2];n[o+16>>2]=n[c+16>>2];n[o+20>>2]=n[c+20>>2];n[o+24>>2]=n[c+24>>2];n[o+28>>2]=n[c+28>>2];n[c>>2]=n[d>>2];n[c+4>>2]=n[d+4>>2];n[c+8>>2]=n[d+8>>2];n[c+12>>2]=n[d+12>>2];n[c+16>>2]=n[d+16>>2];n[c+20>>2]=n[d+20>>2];n[c+24>>2]=n[d+24>>2];n[c+28>>2]=n[d+28>>2];n[i>>2]=n[o>>2];n[i+4>>2]=n[o+4>>2];n[i+8>>2]=n[o+8>>2];n[i+12>>2]=n[o+12>>2];n[i+16>>2]=n[o+16>>2];n[i+20>>2]=n[o+20>>2];n[i+24>>2]=n[o+24>>2];n[i+28>>2]=n[o+28>>2];jt(c,i,8);n[e>>2]=n[c>>2];n[e+4>>2]=n[c+4>>2];n[e+8>>2]=n[c+8>>2];n[e+12>>2]=n[c+12>>2];n[e+16>>2]=n[c+16>>2];n[e+20>>2]=n[c+20>>2];n[e+24>>2]=n[c+24>>2];n[e+28>>2]=n[c+28>>2];n[o>>2]=n[f>>2];n[o+4>>2]=n[f+4>>2];n[o+8>>2]=n[f+8>>2];n[o+12>>2]=n[f+12>>2];n[o+16>>2]=n[f+16>>2];n[o+20>>2]=n[f+20>>2];n[o+24>>2]=n[f+24>>2];n[o+28>>2]=n[f+28>>2];n[c>>2]=n[o>>2];n[c+4>>2]=n[o+4>>2];n[c+8>>2]=n[o+8>>2];n[c+12>>2]=n[o+12>>2];n[c+16>>2]=n[o+16>>2];n[c+20>>2]=n[o+20>>2];n[c+24>>2]=n[o+24>>2];n[c+28>>2]=n[o+28>>2];n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];n[i+12>>2]=n[f+12>>2];n[i+16>>2]=n[f+16>>2];n[i+20>>2]=n[f+20>>2];n[i+24>>2]=n[f+24>>2];n[i+28>>2]=n[f+28>>2];Tt(c,i,8);n[r>>2]=n[c>>2];n[r+4>>2]=n[c+4>>2];n[r+8>>2]=n[c+8>>2];n[r+12>>2]=n[c+12>>2];n[r+16>>2]=n[c+16>>2];n[r+20>>2]=n[c+20>>2];n[r+24>>2]=n[c+24>>2];n[r+28>>2]=n[c+28>>2];a=e+32|0;n[a>>2]=n[r>>2];n[a+4>>2]=n[r+4>>2];n[a+8>>2]=n[r+8>>2];n[a+12>>2]=n[r+12>>2];n[a+16>>2]=n[r+16>>2];n[a+20>>2]=n[r+20>>2];n[a+24>>2]=n[r+24>>2];n[a+28>>2]=n[r+28>>2];p=t;return}function Mt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0;m=p;p=p+352|0;b=m+320|0;l=m+288|0;o=m+256|0;f=m+224|0;i=m+160|0;h=m+128|0;s=m+96|0;d=m+64|0;u=m;t=u;r=a;c=t+64|0;do{n[t>>2]=n[r>>2];t=t+4|0;r=r+4|0}while((t|0)<(c|0));n[l>>2]=n[a>>2];n[l+4>>2]=n[a+4>>2];n[l+8>>2]=n[a+8>>2];n[l+12>>2]=n[a+12>>2];n[l+16>>2]=n[a+16>>2];n[l+20>>2]=n[a+20>>2];n[l+24>>2]=n[a+24>>2];n[l+28>>2]=n[a+28>>2];n[b>>2]=n[u>>2];n[b+4>>2]=n[u+4>>2];n[b+8>>2]=n[u+8>>2];n[b+12>>2]=n[u+12>>2];n[b+16>>2]=n[u+16>>2];n[b+20>>2]=n[u+20>>2];n[b+24>>2]=n[u+24>>2];n[b+28>>2]=n[u+28>>2];Ct(l,b,8,-460954743,-2016278654);n[i>>2]=n[l>>2];n[i+4>>2]=n[l+4>>2];n[i+8>>2]=n[l+8>>2];n[i+12>>2]=n[l+12>>2];n[i+16>>2]=n[l+16>>2];n[i+20>>2]=n[l+20>>2];n[i+24>>2]=n[l+24>>2];n[i+28>>2]=n[l+28>>2];a=u+32|0;n[l>>2]=n[a>>2];n[l+4>>2]=n[a+4>>2];n[l+8>>2]=n[a+8>>2];n[l+12>>2]=n[a+12>>2];n[l+16>>2]=n[a+16>>2];n[l+20>>2]=n[a+20>>2];n[l+24>>2]=n[a+24>>2];n[l+28>>2]=n[a+28>>2];n[b>>2]=n[a>>2];n[b+4>>2]=n[a+4>>2];n[b+8>>2]=n[a+8>>2];n[b+12>>2]=n[a+12>>2];n[b+16>>2]=n[a+16>>2];n[b+20>>2]=n[a+20>>2];n[b+24>>2]=n[a+24>>2];n[b+28>>2]=n[a+28>>2];Ct(l,b,8,-460954743,-2016278654);n[o>>2]=n[l>>2];n[o+4>>2]=n[l+4>>2];n[o+8>>2]=n[l+8>>2];n[o+12>>2]=n[l+12>>2];n[o+16>>2]=n[l+16>>2];n[o+20>>2]=n[l+20>>2];n[o+24>>2]=n[l+24>>2];n[o+28>>2]=n[l+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];c=b;n[c>>2]=317583274;n[c+4>>2]=1757628553;c=b+8|0;n[c>>2]=1923792719;n[c+4>>2]=-1928822936;c=b+16|0;n[c>>2]=151523889;n[c+4>>2]=1373741639;c=b+24|0;n[c>>2]=1193918714;n[c+4>>2]=576313009;Ct(l,b,8,-460954743,-2016278654);n[f>>2]=n[l>>2];n[f+4>>2]=n[l+4>>2];n[f+8>>2]=n[l+8>>2];n[f+12>>2]=n[l+12>>2];n[f+16>>2]=n[l+16>>2];n[f+20>>2]=n[l+20>>2];n[f+24>>2]=n[l+24>>2];n[f+28>>2]=n[l+28>>2];n[l>>2]=n[i>>2];n[l+4>>2]=n[i+4>>2];n[l+8>>2]=n[i+8>>2];n[l+12>>2]=n[i+12>>2];n[l+16>>2]=n[i+16>>2];n[l+20>>2]=n[i+20>>2];n[l+24>>2]=n[i+24>>2];n[l+28>>2]=n[i+28>>2];n[b>>2]=n[f>>2];n[b+4>>2]=n[f+4>>2];n[b+8>>2]=n[f+8>>2];n[b+12>>2]=n[f+12>>2];n[b+16>>2]=n[f+16>>2];n[b+20>>2]=n[f+20>>2];n[b+24>>2]=n[f+24>>2];n[b+28>>2]=n[f+28>>2];jt(l,b,8);n[s>>2]=n[l>>2];n[s+4>>2]=n[l+4>>2];n[s+8>>2]=n[l+8>>2];n[s+12>>2]=n[l+12>>2];n[s+16>>2]=n[l+16>>2];n[s+20>>2]=n[l+20>>2];n[s+24>>2]=n[l+24>>2];n[s+28>>2]=n[l+28>>2];n[b>>2]=n[s>>2];n[b+4>>2]=n[s+4>>2];n[b+8>>2]=n[s+8>>2];n[b+12>>2]=n[s+12>>2];n[b+16>>2]=n[s+16>>2];n[b+20>>2]=n[s+20>>2];n[b+24>>2]=n[s+24>>2];n[b+28>>2]=n[s+28>>2];s=b;if((((n[s>>2]|0)==0&(n[s+4>>2]|0)==0?(s=b+8|0,(n[s>>2]|0)==0&(n[s+4>>2]|0)==0):0)?(s=b+16|0,(n[s>>2]|0)==0&(n[s+4>>2]|0)==0):0)?(s=b+24|0,(n[s>>2]|0)==0&(n[s+4>>2]|0)==0):0){h=e;n[h>>2]=0;n[h+4>>2]=0;p=m;return}Ot(b,8);Ct(b,40,8,-460954743,-2016278654);n[d>>2]=n[b>>2];n[d+4>>2]=n[b+4>>2];n[d+8>>2]=n[b+8>>2];n[d+12>>2]=n[b+12>>2];n[d+16>>2]=n[b+16>>2];n[d+20>>2]=n[b+20>>2];n[d+24>>2]=n[b+24>>2];n[d+28>>2]=n[b+28>>2];n[h>>2]=n[d>>2];n[h+4>>2]=n[d+4>>2];n[h+8>>2]=n[d+8>>2];n[h+12>>2]=n[d+12>>2];n[h+16>>2]=n[d+16>>2];n[h+20>>2]=n[d+20>>2];n[h+24>>2]=n[d+24>>2];n[h+28>>2]=n[d+28>>2];n[l>>2]=n[u>>2];n[l+4>>2]=n[u+4>>2];n[l+8>>2]=n[u+8>>2];n[l+12>>2]=n[u+12>>2];n[l+16>>2]=n[u+16>>2];n[l+20>>2]=n[u+20>>2];n[l+24>>2]=n[u+24>>2];n[l+28>>2]=n[u+28>>2];n[b>>2]=n[d>>2];n[b+4>>2]=n[d+4>>2];n[b+8>>2]=n[d+8>>2];n[b+12>>2]=n[d+12>>2];n[b+16>>2]=n[d+16>>2];n[b+20>>2]=n[d+20>>2];n[b+24>>2]=n[d+24>>2];n[b+28>>2]=n[d+28>>2];Ct(l,b,8,-460954743,-2016278654);n[i>>2]=n[l>>2];n[i+4>>2]=n[l+4>>2];n[i+8>>2]=n[l+8>>2];n[i+12>>2]=n[l+12>>2];n[i+16>>2]=n[l+16>>2];n[i+20>>2]=n[l+20>>2];n[i+24>>2]=n[l+24>>2];n[i+28>>2]=n[l+28>>2];n[l>>2]=n[a>>2];n[l+4>>2]=n[a+4>>2];n[l+8>>2]=n[a+8>>2];n[l+12>>2]=n[a+12>>2];n[l+16>>2]=n[a+16>>2];n[l+20>>2]=n[a+20>>2];n[l+24>>2]=n[a+24>>2];n[l+28>>2]=n[a+28>>2];n[b>>2]=n[h>>2];n[b+4>>2]=n[h+4>>2];n[b+8>>2]=n[h+8>>2];n[b+12>>2]=n[h+12>>2];n[b+16>>2]=n[h+16>>2];n[b+20>>2]=n[h+20>>2];n[b+24>>2]=n[h+24>>2];n[b+28>>2]=n[h+28>>2];Ct(l,b,8,-460954743,-2016278654);n[o>>2]=n[l>>2];n[o+4>>2]=n[l+4>>2];n[o+8>>2]=n[l+8>>2];n[o+12>>2]=n[l+12>>2];n[o+16>>2]=n[l+16>>2];n[o+20>>2]=n[l+20>>2];n[o+24>>2]=n[l+24>>2];n[o+28>>2]=n[l+28>>2];n[b>>2]=n[o>>2];n[b+4>>2]=n[o+4>>2];n[b+8>>2]=n[o+8>>2];n[b+12>>2]=n[o+12>>2];n[b+16>>2]=n[o+16>>2];n[b+20>>2]=n[o+20>>2];n[b+24>>2]=n[o+24>>2];n[b+28>>2]=n[o+28>>2];Rt(b,8);n[f>>2]=n[b>>2];n[f+4>>2]=n[b+4>>2];n[f+8>>2]=n[b+8>>2];n[f+12>>2]=n[b+12>>2];n[f+16>>2]=n[b+16>>2];n[f+20>>2]=n[b+20>>2];n[f+24>>2]=n[b+24>>2];n[f+28>>2]=n[b+28>>2];t=i+32|0;n[t>>2]=n[f>>2];n[t+4>>2]=n[f+4>>2];n[t+8>>2]=n[f+8>>2];n[t+12>>2]=n[f+12>>2];n[t+16>>2]=n[f+16>>2];n[t+20>>2]=n[f+20>>2];n[t+24>>2]=n[f+24>>2];n[t+28>>2]=n[f+28>>2];t=e;n[t>>2]=1;n[t+4>>2]=0;t=e+8|0;r=i;c=t+64|0;do{n[t>>2]=n[r>>2];t=t+4|0;r=r+4|0}while((t|0)<(c|0));p=m;return}function Nt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0;v=p;p=p+448|0;l=v+416|0;m=v+384|0;d=v+352|0;o=v+320|0;f=v+288|0;i=v+256|0;c=v+224|0;r=v+192|0;b=v+160|0;s=v+128|0;u=v+64|0;h=v;g=h;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[a>>2];n[m+4>>2]=n[a+4>>2];n[m+8>>2]=n[a+8>>2];n[m+12>>2]=n[a+12>>2];n[m+16>>2]=n[a+16>>2];n[m+20>>2]=n[a+20>>2];n[m+24>>2]=n[a+24>>2];n[m+28>>2]=n[a+28>>2];n[l>>2]=n[t>>2];n[l+4>>2]=n[t+4>>2];n[l+8>>2]=n[t+8>>2];n[l+12>>2]=n[t+12>>2];n[l+16>>2]=n[t+16>>2];n[l+20>>2]=n[t+20>>2];n[l+24>>2]=n[t+24>>2];n[l+28>>2]=n[t+28>>2];Ct(m,l,8,-460954743,-2016278654);n[s>>2]=n[m>>2];n[s+4>>2]=n[m+4>>2];n[s+8>>2]=n[m+8>>2];n[s+12>>2]=n[m+12>>2];n[s+16>>2]=n[m+16>>2];n[s+20>>2]=n[m+20>>2];n[s+24>>2]=n[m+24>>2];n[s+28>>2]=n[m+28>>2];y=h+32|0;_=u+32|0;n[m>>2]=n[y>>2];n[m+4>>2]=n[y+4>>2];n[m+8>>2]=n[y+8>>2];n[m+12>>2]=n[y+12>>2];n[m+16>>2]=n[y+16>>2];n[m+20>>2]=n[y+20>>2];n[m+24>>2]=n[y+24>>2];n[m+28>>2]=n[y+28>>2];n[l>>2]=n[_>>2];n[l+4>>2]=n[_+4>>2];n[l+8>>2]=n[_+8>>2];n[l+12>>2]=n[_+12>>2];n[l+16>>2]=n[_+16>>2];n[l+20>>2]=n[_+20>>2];n[l+24>>2]=n[_+24>>2];n[l+28>>2]=n[_+28>>2];Ct(m,l,8,-460954743,-2016278654);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];n[m>>2]=n[b>>2];n[m+4>>2]=n[b+4>>2];n[m+8>>2]=n[b+8>>2];n[m+12>>2]=n[b+12>>2];n[m+16>>2]=n[b+16>>2];n[m+20>>2]=n[b+20>>2];n[m+24>>2]=n[b+24>>2];n[m+28>>2]=n[b+28>>2];g=l;n[g>>2]=317583274;n[g+4>>2]=1757628553;g=l+8|0;n[g>>2]=1923792719;n[g+4>>2]=-1928822936;g=l+16|0;n[g>>2]=151523889;n[g+4>>2]=1373741639;g=l+24|0;n[g>>2]=1193918714;n[g+4>>2]=576313009;Ct(m,l,8,-460954743,-2016278654);n[d>>2]=n[m>>2];n[d+4>>2]=n[m+4>>2];n[d+8>>2]=n[m+8>>2];n[d+12>>2]=n[m+12>>2];n[d+16>>2]=n[m+16>>2];n[d+20>>2]=n[m+20>>2];n[d+24>>2]=n[m+24>>2];n[d+28>>2]=n[m+28>>2];n[m>>2]=n[d>>2];n[m+4>>2]=n[d+4>>2];n[m+8>>2]=n[d+8>>2];n[m+12>>2]=n[d+12>>2];n[m+16>>2]=n[d+16>>2];n[m+20>>2]=n[d+20>>2];n[m+24>>2]=n[d+24>>2];n[m+28>>2]=n[d+28>>2];n[l>>2]=n[s>>2];n[l+4>>2]=n[s+4>>2];n[l+8>>2]=n[s+8>>2];n[l+12>>2]=n[s+12>>2];n[l+16>>2]=n[s+16>>2];n[l+20>>2]=n[s+20>>2];n[l+24>>2]=n[s+24>>2];n[l+28>>2]=n[s+28>>2];Tt(m,l,8);n[r>>2]=n[m>>2];n[r+4>>2]=n[m+4>>2];n[r+8>>2]=n[m+8>>2];n[r+12>>2]=n[m+12>>2];n[r+16>>2]=n[m+16>>2];n[r+20>>2]=n[m+20>>2];n[r+24>>2]=n[m+24>>2];n[r+28>>2]=n[m+28>>2];n[m>>2]=n[h>>2];n[m+4>>2]=n[h+4>>2];n[m+8>>2]=n[h+8>>2];n[m+12>>2]=n[h+12>>2];n[m+16>>2]=n[h+16>>2];n[m+20>>2]=n[h+20>>2];n[m+24>>2]=n[h+24>>2];n[m+28>>2]=n[h+28>>2];n[l>>2]=n[y>>2];n[l+4>>2]=n[y+4>>2];n[l+8>>2]=n[y+8>>2];n[l+12>>2]=n[y+12>>2];n[l+16>>2]=n[y+16>>2];n[l+20>>2]=n[y+20>>2];n[l+24>>2]=n[y+24>>2];n[l+28>>2]=n[y+28>>2];Tt(m,l,8);n[o>>2]=n[m>>2];n[o+4>>2]=n[m+4>>2];n[o+8>>2]=n[m+8>>2];n[o+12>>2]=n[m+12>>2];n[o+16>>2]=n[m+16>>2];n[o+20>>2]=n[m+20>>2];n[o+24>>2]=n[m+24>>2];n[o+28>>2]=n[m+28>>2];n[m>>2]=n[u>>2];n[m+4>>2]=n[u+4>>2];n[m+8>>2]=n[u+8>>2];n[m+12>>2]=n[u+12>>2];n[m+16>>2]=n[u+16>>2];n[m+20>>2]=n[u+20>>2];n[m+24>>2]=n[u+24>>2];n[m+28>>2]=n[u+28>>2];n[l>>2]=n[_>>2];n[l+4>>2]=n[_+4>>2];n[l+8>>2]=n[_+8>>2];n[l+12>>2]=n[_+12>>2];n[l+16>>2]=n[_+16>>2];n[l+20>>2]=n[_+20>>2];n[l+24>>2]=n[_+24>>2];n[l+28>>2]=n[_+28>>2];Tt(m,l,8);n[d>>2]=n[m>>2];n[d+4>>2]=n[m+4>>2];n[d+8>>2]=n[m+8>>2];n[d+12>>2]=n[m+12>>2];n[d+16>>2]=n[m+16>>2];n[d+20>>2]=n[m+20>>2];n[d+24>>2]=n[m+24>>2];n[d+28>>2]=n[m+28>>2];n[m>>2]=n[o>>2];n[m+4>>2]=n[o+4>>2];n[m+8>>2]=n[o+8>>2];n[m+12>>2]=n[o+12>>2];n[m+16>>2]=n[o+16>>2];n[m+20>>2]=n[o+20>>2];n[m+24>>2]=n[o+24>>2];n[m+28>>2]=n[o+28>>2];n[l>>2]=n[d>>2];n[l+4>>2]=n[d+4>>2];n[l+8>>2]=n[d+8>>2];n[l+12>>2]=n[d+12>>2];n[l+16>>2]=n[d+16>>2];n[l+20>>2]=n[d+20>>2];n[l+24>>2]=n[d+24>>2];n[l+28>>2]=n[d+28>>2];Ct(m,l,8,-460954743,-2016278654);n[f>>2]=n[m>>2];n[f+4>>2]=n[m+4>>2];n[f+8>>2]=n[m+8>>2];n[f+12>>2]=n[m+12>>2];n[f+16>>2]=n[m+16>>2];n[f+20>>2]=n[m+20>>2];n[f+24>>2]=n[m+24>>2];n[f+28>>2]=n[m+28>>2];n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[s>>2];n[l+4>>2]=n[s+4>>2];n[l+8>>2]=n[s+8>>2];n[l+12>>2]=n[s+12>>2];n[l+16>>2]=n[s+16>>2];n[l+20>>2]=n[s+20>>2];n[l+24>>2]=n[s+24>>2];n[l+28>>2]=n[s+28>>2];jt(m,l,8);n[i>>2]=n[m>>2];n[i+4>>2]=n[m+4>>2];n[i+8>>2]=n[m+8>>2];n[i+12>>2]=n[m+12>>2];n[i+16>>2]=n[m+16>>2];n[i+20>>2]=n[m+20>>2];n[i+24>>2]=n[m+24>>2];n[i+28>>2]=n[m+28>>2];n[m>>2]=n[i>>2];n[m+4>>2]=n[i+4>>2];n[m+8>>2]=n[i+8>>2];n[m+12>>2]=n[i+12>>2];n[m+16>>2]=n[i+16>>2];n[m+20>>2]=n[i+20>>2];n[m+24>>2]=n[i+24>>2];n[m+28>>2]=n[i+28>>2];n[l>>2]=n[b>>2];n[l+4>>2]=n[b+4>>2];n[l+8>>2]=n[b+8>>2];n[l+12>>2]=n[b+12>>2];n[l+16>>2]=n[b+16>>2];n[l+20>>2]=n[b+20>>2];n[l+24>>2]=n[b+24>>2];n[l+28>>2]=n[b+28>>2];jt(m,l,8);n[c>>2]=n[m>>2];n[c+4>>2]=n[m+4>>2];n[c+8>>2]=n[m+8>>2];n[c+12>>2]=n[m+12>>2];n[c+16>>2]=n[m+16>>2];n[c+20>>2]=n[m+20>>2];n[c+24>>2]=n[m+24>>2];n[c+28>>2]=n[m+28>>2];n[e>>2]=n[r>>2];n[e+4>>2]=n[r+4>>2];n[e+8>>2]=n[r+8>>2];n[e+12>>2]=n[r+12>>2];n[e+16>>2]=n[r+16>>2];n[e+20>>2]=n[r+20>>2];n[e+24>>2]=n[r+24>>2];n[e+28>>2]=n[r+28>>2];_=e+32|0;n[_>>2]=n[c>>2];n[_+4>>2]=n[c+4>>2];n[_+8>>2]=n[c+8>>2];n[_+12>>2]=n[c+12>>2];n[_+16>>2]=n[c+16>>2];n[_+20>>2]=n[c+20>>2];n[_+24>>2]=n[c+24>>2];n[_+28>>2]=n[c+28>>2];p=v;return}function It(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0;S=p;p=p+1248|0;g=S+1184|0;x=S+1120|0;m=S+1056|0;k=S+992|0;l=S+960|0;u=S+896|0;b=S+832|0;s=S+768|0;d=S+704|0;o=S+640|0;f=S+576|0;i=S+512|0;c=S+448|0;A=S+384|0;w=S+320|0;h=S+256|0;_=S+192|0;y=S+128|0;t=S+64|0;v=S;Bt(v,a);E=x;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));r=a+64|0;E=g;T=r;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));Nt(t,x,g);E=b;T=t;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=u;T=t;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=b;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=t;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[y>>2]=n[x>>2];n[y+4>>2]=n[x+4>>2];n[y+8>>2]=n[x+8>>2];n[y+12>>2]=n[x+12>>2];n[y+16>>2]=n[x+16>>2];n[y+20>>2]=n[x+20>>2];n[y+24>>2]=n[x+24>>2];n[y+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=y+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=b;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=u;T=r;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=r;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];jt(x,g,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];jt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=s+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];a=a+128|0;E=u;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=s;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[s>>2];n[x+4>>2]=n[s+4>>2];n[x+8>>2]=n[s+8>>2];n[x+12>>2]=n[s+12>>2];n[x+16>>2]=n[s+16>>2];n[x+20>>2]=n[s+20>>2];n[x+24>>2]=n[s+24>>2];n[x+28>>2]=n[s+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[d>>2]=n[x>>2];n[d+4>>2]=n[x+4>>2];n[d+8>>2]=n[x+8>>2];n[d+12>>2]=n[x+12>>2];n[d+16>>2]=n[x+16>>2];n[d+20>>2]=n[x+20>>2];n[d+24>>2]=n[x+24>>2];n[d+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=d+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];Bt(_,d);E=x;T=r;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=g;T=a;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));Nt(h,x,g);E=b;T=h;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=u;T=h;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=b;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=h;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[w>>2]=n[x>>2];n[w+4>>2]=n[x+4>>2];n[w+8>>2]=n[x+8>>2];n[w+12>>2]=n[x+12>>2];n[w+16>>2]=n[x+16>>2];n[w+20>>2]=n[x+20>>2];n[w+24>>2]=n[x+24>>2];n[w+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=w+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];Bt(A,a);E=b;T=v;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=x;T=w;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=g;n[E>>2]=1091403767;n[E+4>>2]=-167360562;E=g+8|0;n[E>>2]=-753151983;n[E+4>>2]=792555341;E=g+16|0;n[E>>2]=960546513;n[E+4>>2]=692269950;E=g+24|0;n[E>>2]=-1478256553;n[E+4>>2]=496343272;E=g+32|0;n[E>>2]=-980480611;n[E+4>>2]=-748862579;E=g+40|0;n[E>>2]=-171504835;n[E+4>>2]=175696680;E=g+48|0;n[E>>2]=2021213740;n[E+4>>2]=1718526831;E=g+56|0;n[E>>2]=-1710760145;n[E+4>>2]=235567041;Nt(u,x,g);E=k;T=v;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=u;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[c>>2]=n[x>>2];n[c+4>>2]=n[x+4>>2];n[c+8>>2]=n[x+8>>2];n[c+12>>2]=n[x+12>>2];n[c+16>>2]=n[x+16>>2];n[c+20>>2]=n[x+20>>2];n[c+24>>2]=n[x+24>>2];n[c+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=c+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=b;T=y;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=x;T=A;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=g;n[E>>2]=1091403767;n[E+4>>2]=-167360562;E=g+8|0;n[E>>2]=-753151983;n[E+4>>2]=792555341;E=g+16|0;n[E>>2]=960546513;n[E+4>>2]=692269950;E=g+24|0;n[E>>2]=-1478256553;n[E+4>>2]=496343272;E=g+32|0;n[E>>2]=-980480611;n[E+4>>2]=-748862579;E=g+40|0;n[E>>2]=-171504835;n[E+4>>2]=175696680;E=g+48|0;n[E>>2]=2021213740;n[E+4>>2]=1718526831;E=g+56|0;n[E>>2]=-1710760145;n[E+4>>2]=235567041;Nt(u,x,g);E=k;T=y;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=u;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[i>>2]=n[x>>2];n[i+4>>2]=n[x+4>>2];n[i+8>>2]=n[x+8>>2];n[i+12>>2]=n[x+12>>2];n[i+16>>2]=n[x+16>>2];n[i+20>>2]=n[x+20>>2];n[i+24>>2]=n[x+24>>2];n[i+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=i+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=b;T=y;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=u;T=_;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=y;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=_;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=s+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=u;T=w;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=s;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=w;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[s>>2];n[x+4>>2]=n[s+4>>2];n[x+8>>2]=n[s+8>>2];n[x+12>>2]=n[s+12>>2];n[x+16>>2]=n[s+16>>2];n[x+20>>2]=n[s+20>>2];n[x+24>>2]=n[s+24>>2];n[x+28>>2]=n[s+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];Tt(x,g,8);n[d>>2]=n[x>>2];n[d+4>>2]=n[x+4>>2];n[d+8>>2]=n[x+8>>2];n[d+12>>2]=n[x+12>>2];n[d+16>>2]=n[x+16>>2];n[d+20>>2]=n[x+20>>2];n[d+24>>2]=n[x+24>>2];n[d+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];Tt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=d+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=u;T=v;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=d;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=v;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[d>>2];n[x+4>>2]=n[d+4>>2];n[x+8>>2]=n[d+8>>2];n[x+12>>2]=n[d+12>>2];n[x+16>>2]=n[d+16>>2];n[x+20>>2]=n[d+20>>2];n[x+24>>2]=n[d+24>>2];n[x+28>>2]=n[d+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];jt(x,g,8);n[o>>2]=n[x>>2];n[o+4>>2]=n[x+4>>2];n[o+8>>2]=n[x+8>>2];n[o+12>>2]=n[x+12>>2];n[o+16>>2]=n[x+16>>2];n[o+20>>2]=n[x+20>>2];n[o+24>>2]=n[x+24>>2];n[o+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];jt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=o+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=u;T=A;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=k;T=o;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=m;T=A;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[g>>2]=n[u>>2];n[g+4>>2]=n[u+4>>2];n[g+8>>2]=n[u+8>>2];n[g+12>>2]=n[u+12>>2];n[g+16>>2]=n[u+16>>2];n[g+20>>2]=n[u+20>>2];n[g+24>>2]=n[u+24>>2];n[g+28>>2]=n[u+28>>2];jt(x,g,8);n[f>>2]=n[x>>2];n[f+4>>2]=n[x+4>>2];n[f+8>>2]=n[x+8>>2];n[f+12>>2]=n[x+12>>2];n[f+16>>2]=n[x+16>>2];n[f+20>>2]=n[x+20>>2];n[f+24>>2]=n[x+24>>2];n[f+28>>2]=n[x+28>>2];T=k+32|0;E=m+32|0;n[x>>2]=n[T>>2];n[x+4>>2]=n[T+4>>2];n[x+8>>2]=n[T+8>>2];n[x+12>>2]=n[T+12>>2];n[x+16>>2]=n[T+16>>2];n[x+20>>2]=n[T+20>>2];n[x+24>>2]=n[T+24>>2];n[x+28>>2]=n[T+28>>2];n[g>>2]=n[E>>2];n[g+4>>2]=n[E+4>>2];n[g+8>>2]=n[E+8>>2];n[g+12>>2]=n[E+12>>2];n[g+16>>2]=n[E+16>>2];n[g+20>>2]=n[E+20>>2];n[g+24>>2]=n[E+24>>2];n[g+28>>2]=n[E+28>>2];jt(x,g,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];E=f+32|0;n[E>>2]=n[l>>2];n[E+4>>2]=n[l+4>>2];n[E+8>>2]=n[l+8>>2];n[E+12>>2]=n[l+12>>2];n[E+16>>2]=n[l+16>>2];n[E+20>>2]=n[l+20>>2];n[E+24>>2]=n[l+24>>2];n[E+28>>2]=n[l+28>>2];E=e;T=c;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=e+64|0;T=i;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));E=e+128|0;T=f;j=E+64|0;do{n[E>>2]=n[T>>2];E=E+4|0;T=T+4|0}while((E|0)<(j|0));p=S;return}function Pt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0;x=p;p=p+1296|0;y=x+1224|0;w=x+1160|0;_=x+1096|0;A=x+1032|0;h=x+840|0;k=x+776|0;d=x+712|0;o=x+648|0;f=x+584|0;i=x+520|0;c=x+456|0;r=x+384|0;v=x+320|0;g=x+256|0;m=x+192|0;s=x;ad(s|0,a|0,192)|0;Bt(o,s);a=s+64|0;b=A;u=a;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));t=s+128|0;b=w;u=t;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;n[b>>2]=1091403767;n[b+4>>2]=-167360562;b=y+8|0;n[b>>2]=-753151983;n[b+4>>2]=792555341;b=y+16|0;n[b>>2]=960546513;n[b+4>>2]=692269950;b=y+24|0;n[b>>2]=-1478256553;n[b+4>>2]=496343272;b=y+32|0;n[b>>2]=-980480611;n[b+4>>2]=-748862579;b=y+40|0;n[b>>2]=-171504835;n[b+4>>2]=175696680;b=y+48|0;n[b>>2]=2021213740;n[b+4>>2]=1718526831;b=y+56|0;n[b>>2]=-1710760145;n[b+4>>2]=235567041;Nt(_,w,y);Nt(d,A,_);b=A;u=o;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=_;u=d;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));n[w>>2]=n[o>>2];n[w+4>>2]=n[o+4>>2];n[w+8>>2]=n[o+8>>2];n[w+12>>2]=n[o+12>>2];n[w+16>>2]=n[o+16>>2];n[w+20>>2]=n[o+20>>2];n[w+24>>2]=n[o+24>>2];n[w+28>>2]=n[o+28>>2];n[y>>2]=n[d>>2];n[y+4>>2]=n[d+4>>2];n[y+8>>2]=n[d+8>>2];n[y+12>>2]=n[d+12>>2];n[y+16>>2]=n[d+16>>2];n[y+20>>2]=n[d+20>>2];n[y+24>>2]=n[d+24>>2];n[y+28>>2]=n[d+28>>2];jt(w,y,8);n[m>>2]=n[w>>2];n[m+4>>2]=n[w+4>>2];n[m+8>>2]=n[w+8>>2];n[m+12>>2]=n[w+12>>2];n[m+16>>2]=n[w+16>>2];n[m+20>>2]=n[w+20>>2];n[m+24>>2]=n[w+24>>2];n[m+28>>2]=n[w+28>>2];u=A+32|0;b=_+32|0;n[w>>2]=n[u>>2];n[w+4>>2]=n[u+4>>2];n[w+8>>2]=n[u+8>>2];n[w+12>>2]=n[u+12>>2];n[w+16>>2]=n[u+16>>2];n[w+20>>2]=n[u+20>>2];n[w+24>>2]=n[u+24>>2];n[w+28>>2]=n[u+28>>2];n[y>>2]=n[b>>2];n[y+4>>2]=n[b+4>>2];n[y+8>>2]=n[b+8>>2];n[y+12>>2]=n[b+12>>2];n[y+16>>2]=n[b+16>>2];n[y+20>>2]=n[b+20>>2];n[y+24>>2]=n[b+24>>2];n[y+28>>2]=n[b+28>>2];jt(w,y,8);n[h>>2]=n[w>>2];n[h+4>>2]=n[w+4>>2];n[h+8>>2]=n[w+8>>2];n[h+12>>2]=n[w+12>>2];n[h+16>>2]=n[w+16>>2];n[h+20>>2]=n[w+20>>2];n[h+24>>2]=n[w+24>>2];n[h+28>>2]=n[w+28>>2];b=m+32|0;n[b>>2]=n[h>>2];n[b+4>>2]=n[h+4>>2];n[b+8>>2]=n[h+8>>2];n[b+12>>2]=n[h+12>>2];n[b+16>>2]=n[h+16>>2];n[b+20>>2]=n[h+20>>2];n[b+24>>2]=n[h+24>>2];n[b+28>>2]=n[h+28>>2];Bt(o,t);b=w;u=o;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;n[b>>2]=1091403767;n[b+4>>2]=-167360562;b=y+8|0;n[b>>2]=-753151983;n[b+4>>2]=792555341;b=y+16|0;n[b>>2]=960546513;n[b+4>>2]=692269950;b=y+24|0;n[b>>2]=-1478256553;n[b+4>>2]=496343272;b=y+32|0;n[b>>2]=-980480611;n[b+4>>2]=-748862579;b=y+40|0;n[b>>2]=-171504835;n[b+4>>2]=175696680;b=y+48|0;n[b>>2]=2021213740;n[b+4>>2]=1718526831;b=y+56|0;n[b>>2]=-1710760145;n[b+4>>2]=235567041;Nt(f,w,y);b=w;u=s;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=a;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(d,w,y);b=A;u=f;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=_;u=d;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));n[w>>2]=n[f>>2];n[w+4>>2]=n[f+4>>2];n[w+8>>2]=n[f+8>>2];n[w+12>>2]=n[f+12>>2];n[w+16>>2]=n[f+16>>2];n[w+20>>2]=n[f+20>>2];n[w+24>>2]=n[f+24>>2];n[w+28>>2]=n[f+28>>2];n[y>>2]=n[d>>2];n[y+4>>2]=n[d+4>>2];n[y+8>>2]=n[d+8>>2];n[y+12>>2]=n[d+12>>2];n[y+16>>2]=n[d+16>>2];n[y+20>>2]=n[d+20>>2];n[y+24>>2]=n[d+24>>2];n[y+28>>2]=n[d+28>>2];jt(w,y,8);n[g>>2]=n[w>>2];n[g+4>>2]=n[w+4>>2];n[g+8>>2]=n[w+8>>2];n[g+12>>2]=n[w+12>>2];n[g+16>>2]=n[w+16>>2];n[g+20>>2]=n[w+20>>2];n[g+24>>2]=n[w+24>>2];n[g+28>>2]=n[w+28>>2];u=A+32|0;b=_+32|0;n[w>>2]=n[u>>2];n[w+4>>2]=n[u+4>>2];n[w+8>>2]=n[u+8>>2];n[w+12>>2]=n[u+12>>2];n[w+16>>2]=n[u+16>>2];n[w+20>>2]=n[u+20>>2];n[w+24>>2]=n[u+24>>2];n[w+28>>2]=n[u+28>>2];n[y>>2]=n[b>>2];n[y+4>>2]=n[b+4>>2];n[y+8>>2]=n[b+8>>2];n[y+12>>2]=n[b+12>>2];n[y+16>>2]=n[b+16>>2];n[y+20>>2]=n[b+20>>2];n[y+24>>2]=n[b+24>>2];n[y+28>>2]=n[b+28>>2];jt(w,y,8);n[h>>2]=n[w>>2];n[h+4>>2]=n[w+4>>2];n[h+8>>2]=n[w+8>>2];n[h+12>>2]=n[w+12>>2];n[h+16>>2]=n[w+16>>2];n[h+20>>2]=n[w+20>>2];n[h+24>>2]=n[w+24>>2];n[h+28>>2]=n[w+28>>2];b=g+32|0;n[b>>2]=n[h>>2];n[b+4>>2]=n[h+4>>2];n[b+8>>2]=n[h+8>>2];n[b+12>>2]=n[h+12>>2];n[b+16>>2]=n[h+16>>2];n[b+20>>2]=n[h+20>>2];n[b+24>>2]=n[h+24>>2];n[b+28>>2]=n[h+28>>2];Bt(o,a);b=w;u=s;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=t;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(d,w,y);b=A;u=o;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=_;u=d;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));n[w>>2]=n[o>>2];n[w+4>>2]=n[o+4>>2];n[w+8>>2]=n[o+8>>2];n[w+12>>2]=n[o+12>>2];n[w+16>>2]=n[o+16>>2];n[w+20>>2]=n[o+20>>2];n[w+24>>2]=n[o+24>>2];n[w+28>>2]=n[o+28>>2];n[y>>2]=n[d>>2];n[y+4>>2]=n[d+4>>2];n[y+8>>2]=n[d+8>>2];n[y+12>>2]=n[d+12>>2];n[y+16>>2]=n[d+16>>2];n[y+20>>2]=n[d+20>>2];n[y+24>>2]=n[d+24>>2];n[y+28>>2]=n[d+28>>2];jt(w,y,8);n[v>>2]=n[w>>2];n[v+4>>2]=n[w+4>>2];n[v+8>>2]=n[w+8>>2];n[v+12>>2]=n[w+12>>2];n[v+16>>2]=n[w+16>>2];n[v+20>>2]=n[w+20>>2];n[v+24>>2]=n[w+24>>2];n[v+28>>2]=n[w+28>>2];u=A+32|0;b=_+32|0;n[w>>2]=n[u>>2];n[w+4>>2]=n[u+4>>2];n[w+8>>2]=n[u+8>>2];n[w+12>>2]=n[u+12>>2];n[w+16>>2]=n[u+16>>2];n[w+20>>2]=n[u+20>>2];n[w+24>>2]=n[u+24>>2];n[w+28>>2]=n[u+28>>2];n[y>>2]=n[b>>2];n[y+4>>2]=n[b+4>>2];n[y+8>>2]=n[b+8>>2];n[y+12>>2]=n[b+12>>2];n[y+16>>2]=n[b+16>>2];n[y+20>>2]=n[b+20>>2];n[y+24>>2]=n[b+24>>2];n[y+28>>2]=n[b+28>>2];jt(w,y,8);n[h>>2]=n[w>>2];n[h+4>>2]=n[w+4>>2];n[h+8>>2]=n[w+8>>2];n[h+12>>2]=n[w+12>>2];n[h+16>>2]=n[w+16>>2];n[h+20>>2]=n[w+20>>2];n[h+24>>2]=n[w+24>>2];n[h+28>>2]=n[w+28>>2];b=v+32|0;n[b>>2]=n[h>>2];n[b+4>>2]=n[h+4>>2];n[b+8>>2]=n[h+8>>2];n[b+12>>2]=n[h+12>>2];n[b+16>>2]=n[h+16>>2];n[b+20>>2]=n[h+20>>2];n[b+24>>2]=n[h+24>>2];n[b+28>>2]=n[h+28>>2];b=w;u=t;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=g;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(o,w,y);b=w;u=a;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=v;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(d,w,y);b=A;u=o;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=_;u=d;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));n[w>>2]=n[o>>2];n[w+4>>2]=n[o+4>>2];n[w+8>>2]=n[o+8>>2];n[w+12>>2]=n[o+12>>2];n[w+16>>2]=n[o+16>>2];n[w+20>>2]=n[o+20>>2];n[w+24>>2]=n[o+24>>2];n[w+28>>2]=n[o+28>>2];n[y>>2]=n[d>>2];n[y+4>>2]=n[d+4>>2];n[y+8>>2]=n[d+8>>2];n[y+12>>2]=n[d+12>>2];n[y+16>>2]=n[d+16>>2];n[y+20>>2]=n[d+20>>2];n[y+24>>2]=n[d+24>>2];n[y+28>>2]=n[d+28>>2];Tt(w,y,8);n[f>>2]=n[w>>2];n[f+4>>2]=n[w+4>>2];n[f+8>>2]=n[w+8>>2];n[f+12>>2]=n[w+12>>2];n[f+16>>2]=n[w+16>>2];n[f+20>>2]=n[w+20>>2];n[f+24>>2]=n[w+24>>2];n[f+28>>2]=n[w+28>>2];u=A+32|0;b=_+32|0;n[w>>2]=n[u>>2];n[w+4>>2]=n[u+4>>2];n[w+8>>2]=n[u+8>>2];n[w+12>>2]=n[u+12>>2];n[w+16>>2]=n[u+16>>2];n[w+20>>2]=n[u+20>>2];n[w+24>>2]=n[u+24>>2];n[w+28>>2]=n[u+28>>2];n[y>>2]=n[b>>2];n[y+4>>2]=n[b+4>>2];n[y+8>>2]=n[b+8>>2];n[y+12>>2]=n[b+12>>2];n[y+16>>2]=n[b+16>>2];n[y+20>>2]=n[b+20>>2];n[y+24>>2]=n[b+24>>2];n[y+28>>2]=n[b+28>>2];Tt(w,y,8);n[h>>2]=n[w>>2];n[h+4>>2]=n[w+4>>2];n[h+8>>2]=n[w+8>>2];n[h+12>>2]=n[w+12>>2];n[h+16>>2]=n[w+16>>2];n[h+20>>2]=n[w+20>>2];n[h+24>>2]=n[w+24>>2];n[h+28>>2]=n[w+28>>2];b=f+32|0;n[b>>2]=n[h>>2];n[b+4>>2]=n[h+4>>2];n[b+8>>2]=n[h+8>>2];n[b+12>>2]=n[h+12>>2];n[b+16>>2]=n[h+16>>2];n[b+20>>2]=n[h+20>>2];n[b+24>>2]=n[h+24>>2];n[b+28>>2]=n[h+28>>2];b=w;u=f;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;n[b>>2]=1091403767;n[b+4>>2]=-167360562;b=y+8|0;n[b>>2]=-753151983;n[b+4>>2]=792555341;b=y+16|0;n[b>>2]=960546513;n[b+4>>2]=692269950;b=y+24|0;n[b>>2]=-1478256553;n[b+4>>2]=496343272;b=y+32|0;n[b>>2]=-980480611;n[b+4>>2]=-748862579;b=y+40|0;n[b>>2]=-171504835;n[b+4>>2]=175696680;b=y+48|0;n[b>>2]=2021213740;n[b+4>>2]=1718526831;b=y+56|0;n[b>>2]=-1710760145;n[b+4>>2]=235567041;Nt(i,w,y);b=w;u=s;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=m;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(d,w,y);b=A;u=i;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=_;u=d;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));n[w>>2]=n[i>>2];n[w+4>>2]=n[i+4>>2];n[w+8>>2]=n[i+8>>2];n[w+12>>2]=n[i+12>>2];n[w+16>>2]=n[i+16>>2];n[w+20>>2]=n[i+20>>2];n[w+24>>2]=n[i+24>>2];n[w+28>>2]=n[i+28>>2];n[y>>2]=n[d>>2];n[y+4>>2]=n[d+4>>2];n[y+8>>2]=n[d+8>>2];n[y+12>>2]=n[d+12>>2];n[y+16>>2]=n[d+16>>2];n[y+20>>2]=n[d+20>>2];n[y+24>>2]=n[d+24>>2];n[y+28>>2]=n[d+28>>2];Tt(w,y,8);n[c>>2]=n[w>>2];n[c+4>>2]=n[w+4>>2];n[c+8>>2]=n[w+8>>2];n[c+12>>2]=n[w+12>>2];n[c+16>>2]=n[w+16>>2];n[c+20>>2]=n[w+20>>2];n[c+24>>2]=n[w+24>>2];n[c+28>>2]=n[w+28>>2];u=A+32|0;l=_+32|0;n[w>>2]=n[u>>2];n[w+4>>2]=n[u+4>>2];n[w+8>>2]=n[u+8>>2];n[w+12>>2]=n[u+12>>2];n[w+16>>2]=n[u+16>>2];n[w+20>>2]=n[u+20>>2];n[w+24>>2]=n[u+24>>2];n[w+28>>2]=n[u+28>>2];n[y>>2]=n[l>>2];n[y+4>>2]=n[l+4>>2];n[y+8>>2]=n[l+8>>2];n[y+12>>2]=n[l+12>>2];n[y+16>>2]=n[l+16>>2];n[y+20>>2]=n[l+20>>2];n[y+24>>2]=n[l+24>>2];n[y+28>>2]=n[l+28>>2];Tt(w,y,8);n[h>>2]=n[w>>2];n[h+4>>2]=n[w+4>>2];n[h+8>>2]=n[w+8>>2];n[h+12>>2]=n[w+12>>2];n[h+16>>2]=n[w+16>>2];n[h+20>>2]=n[w+20>>2];n[h+24>>2]=n[w+24>>2];n[h+28>>2]=n[w+28>>2];l=c+32|0;n[l>>2]=n[h>>2];n[l+4>>2]=n[h+4>>2];n[l+8>>2]=n[h+8>>2];n[l+12>>2]=n[h+12>>2];n[l+16>>2]=n[h+16>>2];n[l+20>>2]=n[h+20>>2];n[l+24>>2]=n[h+24>>2];n[l+28>>2]=n[h+28>>2];Mt(r,c);l=r;if((n[l>>2]|0)==0&(n[l+4>>2]|0)==0){_=0;A=0;k=e;w=k;n[w>>2]=_;k=k+4|0;n[k>>2]=A;p=x;return}a=r+8|0;b=k;u=a;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=w;u=a;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=m;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(h,w,y);b=w;u=k;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=g;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(A,w,y);b=w;u=k;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=y;u=v;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));Nt(_,w,y);b=h+64|0;u=A;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));b=h+128|0;u=_;l=b+64|0;do{n[b>>2]=n[u>>2];b=b+4|0;u=u+4|0}while((b|0)<(l|0));ad(e+8|0,h|0,192)|0;_=1;A=0;k=e;w=k;n[w>>2]=_;k=k+4|0;n[k>>2]=A;p=x;return}function Ft(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0;O=p;p=p+1568|0;S=O+1504|0;C=O+1440|0;E=O+1376|0;j=O+1312|0;_=O+1280|0;y=O+1216|0;v=O+1152|0;g=O+1088|0;m=O+1024|0;h=O+960|0;l=O+896|0;u=O+832|0;b=O+768|0;s=O+704|0;d=O+640|0;o=O+576|0;k=O+512|0;A=O+448|0;w=O+384|0;x=O+192|0;T=O;ad(T|0,a|0,192)|0;ad(x|0,t|0,192)|0;R=C;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=S;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));Nt(w,C,S);t=T+64|0;R=C;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));r=x+64|0;R=S;a=r;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));Nt(A,C,S);c=T+128|0;R=C;a=c;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));i=x+128|0;R=S;a=i;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));Nt(k,C,S);R=v;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=c;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=c;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[m>>2]=n[C>>2];n[m+4>>2]=n[C+4>>2];n[m+8>>2]=n[C+8>>2];n[m+12>>2]=n[C+12>>2];n[m+16>>2]=n[C+16>>2];n[m+20>>2]=n[C+20>>2];n[m+24>>2]=n[C+24>>2];n[m+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=m+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=v;a=r;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=i;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=r;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=i;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[g>>2]=n[C>>2];n[g+4>>2]=n[C+4>>2];n[g+8>>2]=n[C+8>>2];n[g+12>>2]=n[C+12>>2];n[g+16>>2]=n[C+16>>2];n[g+20>>2]=n[C+20>>2];n[g+24>>2]=n[C+24>>2];n[g+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=g+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];Nt(h,m,g);R=y;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=h;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[h>>2];n[C+4>>2]=n[h+4>>2];n[C+8>>2]=n[h+8>>2];n[C+12>>2]=n[h+12>>2];n[C+16>>2]=n[h+16>>2];n[C+20>>2]=n[h+20>>2];n[C+24>>2]=n[h+24>>2];n[C+28>>2]=n[h+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[l>>2]=n[C>>2];n[l+4>>2]=n[C+4>>2];n[l+8>>2]=n[C+8>>2];n[l+12>>2]=n[C+12>>2];n[l+16>>2]=n[C+16>>2];n[l+20>>2]=n[C+20>>2];n[l+24>>2]=n[C+24>>2];n[l+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=l+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=y;a=k;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=l;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=k;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[l>>2];n[C+4>>2]=n[l+4>>2];n[C+8>>2]=n[l+8>>2];n[C+12>>2]=n[l+12>>2];n[C+16>>2]=n[l+16>>2];n[C+20>>2]=n[l+20>>2];n[C+24>>2]=n[l+24>>2];n[C+28>>2]=n[l+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[d>>2]=n[C>>2];n[d+4>>2]=n[C+4>>2];n[d+8>>2]=n[C+8>>2];n[d+12>>2]=n[C+12>>2];n[d+16>>2]=n[C+16>>2];n[d+20>>2]=n[C+20>>2];n[d+24>>2]=n[C+24>>2];n[d+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=d+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=C;a=d;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=S;n[R>>2]=1091403767;n[R+4>>2]=-167360562;R=S+8|0;n[R>>2]=-753151983;n[R+4>>2]=792555341;R=S+16|0;n[R>>2]=960546513;n[R+4>>2]=692269950;R=S+24|0;n[R>>2]=-1478256553;n[R+4>>2]=496343272;R=S+32|0;n[R>>2]=-980480611;n[R+4>>2]=-748862579;R=S+40|0;n[R>>2]=-171504835;n[R+4>>2]=175696680;R=S+48|0;n[R>>2]=2021213740;n[R+4>>2]=1718526831;R=S+56|0;n[R>>2]=-1710760145;n[R+4>>2]=235567041;Nt(u,C,S);R=y;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=u;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[u>>2];n[C+4>>2]=n[u+4>>2];n[C+8>>2]=n[u+8>>2];n[C+12>>2]=n[u+12>>2];n[C+16>>2]=n[u+16>>2];n[C+20>>2]=n[u+20>>2];n[C+24>>2]=n[u+24>>2];n[C+28>>2]=n[u+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[o>>2]=n[C>>2];n[o+4>>2]=n[C+4>>2];n[o+8>>2]=n[C+8>>2];n[o+12>>2]=n[C+12>>2];n[o+16>>2]=n[C+16>>2];n[o+20>>2]=n[C+20>>2];n[o+24>>2]=n[C+24>>2];n[o+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=o+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=v;a=T;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=T;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=t;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[m>>2]=n[C>>2];n[m+4>>2]=n[C+4>>2];n[m+8>>2]=n[C+8>>2];n[m+12>>2]=n[C+12>>2];n[m+16>>2]=n[C+16>>2];n[m+20>>2]=n[C+20>>2];n[m+24>>2]=n[C+24>>2];n[m+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=m+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=v;a=x;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=r;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=x;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=r;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[g>>2]=n[C>>2];n[g+4>>2]=n[C+4>>2];n[g+8>>2]=n[C+8>>2];n[g+12>>2]=n[C+12>>2];n[g+16>>2]=n[C+16>>2];n[g+20>>2]=n[C+20>>2];n[g+24>>2]=n[C+24>>2];n[g+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=g+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];Nt(h,m,g);R=y;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=h;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[h>>2];n[C+4>>2]=n[h+4>>2];n[C+8>>2]=n[h+8>>2];n[C+12>>2]=n[h+12>>2];n[C+16>>2]=n[h+16>>2];n[C+20>>2]=n[h+20>>2];n[C+24>>2]=n[h+24>>2];n[C+28>>2]=n[h+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[l>>2]=n[C>>2];n[l+4>>2]=n[C+4>>2];n[l+8>>2]=n[C+8>>2];n[l+12>>2]=n[C+12>>2];n[l+16>>2]=n[C+16>>2];n[l+20>>2]=n[C+20>>2];n[l+24>>2]=n[C+24>>2];n[l+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=l+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=y;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=l;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[l>>2];n[C+4>>2]=n[l+4>>2];n[C+8>>2]=n[l+8>>2];n[C+12>>2]=n[l+12>>2];n[C+16>>2]=n[l+16>>2];n[C+20>>2]=n[l+20>>2];n[C+24>>2]=n[l+24>>2];n[C+28>>2]=n[l+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[u>>2]=n[C>>2];n[u+4>>2]=n[C+4>>2];n[u+8>>2]=n[C+8>>2];n[u+12>>2]=n[C+12>>2];n[u+16>>2]=n[C+16>>2];n[u+20>>2]=n[C+20>>2];n[u+24>>2]=n[C+24>>2];n[u+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=u+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=C;a=k;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=S;n[R>>2]=1091403767;n[R+4>>2]=-167360562;R=S+8|0;n[R>>2]=-753151983;n[R+4>>2]=792555341;R=S+16|0;n[R>>2]=960546513;n[R+4>>2]=692269950;R=S+24|0;n[R>>2]=-1478256553;n[R+4>>2]=496343272;R=S+32|0;n[R>>2]=-980480611;n[R+4>>2]=-748862579;R=S+40|0;n[R>>2]=-171504835;n[R+4>>2]=175696680;R=S+48|0;n[R>>2]=2021213740;n[R+4>>2]=1718526831;R=S+56|0;n[R>>2]=-1710760145;n[R+4>>2]=235567041;Nt(y,C,S);R=j;a=u;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=y;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[u>>2];n[C+4>>2]=n[u+4>>2];n[C+8>>2]=n[u+8>>2];n[C+12>>2]=n[u+12>>2];n[C+16>>2]=n[u+16>>2];n[C+20>>2]=n[u+20>>2];n[C+24>>2]=n[u+24>>2];n[C+28>>2]=n[u+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[s>>2]=n[C>>2];n[s+4>>2]=n[C+4>>2];n[s+8>>2]=n[C+8>>2];n[s+12>>2]=n[C+12>>2];n[s+16>>2]=n[C+16>>2];n[s+20>>2]=n[C+20>>2];n[s+24>>2]=n[C+24>>2];n[s+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=s+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=v;a=T;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=c;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=T;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=c;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[m>>2]=n[C>>2];n[m+4>>2]=n[C+4>>2];n[m+8>>2]=n[C+8>>2];n[m+12>>2]=n[C+12>>2];n[m+16>>2]=n[C+16>>2];n[m+20>>2]=n[C+20>>2];n[m+24>>2]=n[C+24>>2];n[m+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=m+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=v;a=x;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=y;a=i;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=x;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=i;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[v>>2];n[C+4>>2]=n[v+4>>2];n[C+8>>2]=n[v+8>>2];n[C+12>>2]=n[v+12>>2];n[C+16>>2]=n[v+16>>2];n[C+20>>2]=n[v+20>>2];n[C+24>>2]=n[v+24>>2];n[C+28>>2]=n[v+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[g>>2]=n[C>>2];n[g+4>>2]=n[C+4>>2];n[g+8>>2]=n[C+8>>2];n[g+12>>2]=n[C+12>>2];n[g+16>>2]=n[C+16>>2];n[g+20>>2]=n[C+20>>2];n[g+24>>2]=n[C+24>>2];n[g+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=g+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];Nt(h,m,g);R=y;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=h;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=w;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[h>>2];n[C+4>>2]=n[h+4>>2];n[C+8>>2]=n[h+8>>2];n[C+12>>2]=n[h+12>>2];n[C+16>>2]=n[h+16>>2];n[C+20>>2]=n[h+20>>2];n[C+24>>2]=n[h+24>>2];n[C+28>>2]=n[h+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[l>>2]=n[C>>2];n[l+4>>2]=n[C+4>>2];n[l+8>>2]=n[C+8>>2];n[l+12>>2]=n[C+12>>2];n[l+16>>2]=n[C+16>>2];n[l+20>>2]=n[C+20>>2];n[l+24>>2]=n[C+24>>2];n[l+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=l+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=y;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=l;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=A;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[l>>2];n[C+4>>2]=n[l+4>>2];n[C+8>>2]=n[l+8>>2];n[C+12>>2]=n[l+12>>2];n[C+16>>2]=n[l+16>>2];n[C+20>>2]=n[l+20>>2];n[C+24>>2]=n[l+24>>2];n[C+28>>2]=n[l+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];Tt(C,S,8);n[u>>2]=n[C>>2];n[u+4>>2]=n[C+4>>2];n[u+8>>2]=n[C+8>>2];n[u+12>>2]=n[C+12>>2];n[u+16>>2]=n[C+16>>2];n[u+20>>2]=n[C+20>>2];n[u+24>>2]=n[C+24>>2];n[u+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];Tt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=u+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=y;a=k;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=j;a=u;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=E;a=k;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));n[C>>2]=n[u>>2];n[C+4>>2]=n[u+4>>2];n[C+8>>2]=n[u+8>>2];n[C+12>>2]=n[u+12>>2];n[C+16>>2]=n[u+16>>2];n[C+20>>2]=n[u+20>>2];n[C+24>>2]=n[u+24>>2];n[C+28>>2]=n[u+28>>2];n[S>>2]=n[y>>2];n[S+4>>2]=n[y+4>>2];n[S+8>>2]=n[y+8>>2];n[S+12>>2]=n[y+12>>2];n[S+16>>2]=n[y+16>>2];n[S+20>>2]=n[y+20>>2];n[S+24>>2]=n[y+24>>2];n[S+28>>2]=n[y+28>>2];jt(C,S,8);n[b>>2]=n[C>>2];n[b+4>>2]=n[C+4>>2];n[b+8>>2]=n[C+8>>2];n[b+12>>2]=n[C+12>>2];n[b+16>>2]=n[C+16>>2];n[b+20>>2]=n[C+20>>2];n[b+24>>2]=n[C+24>>2];n[b+28>>2]=n[C+28>>2];a=j+32|0;R=E+32|0;n[C>>2]=n[a>>2];n[C+4>>2]=n[a+4>>2];n[C+8>>2]=n[a+8>>2];n[C+12>>2]=n[a+12>>2];n[C+16>>2]=n[a+16>>2];n[C+20>>2]=n[a+20>>2];n[C+24>>2]=n[a+24>>2];n[C+28>>2]=n[a+28>>2];n[S>>2]=n[R>>2];n[S+4>>2]=n[R+4>>2];n[S+8>>2]=n[R+8>>2];n[S+12>>2]=n[R+12>>2];n[S+16>>2]=n[R+16>>2];n[S+20>>2]=n[R+20>>2];n[S+24>>2]=n[R+24>>2];n[S+28>>2]=n[R+28>>2];jt(C,S,8);n[_>>2]=n[C>>2];n[_+4>>2]=n[C+4>>2];n[_+8>>2]=n[C+8>>2];n[_+12>>2]=n[C+12>>2];n[_+16>>2]=n[C+16>>2];n[_+20>>2]=n[C+20>>2];n[_+24>>2]=n[C+24>>2];n[_+28>>2]=n[C+28>>2];R=b+32|0;n[R>>2]=n[_>>2];n[R+4>>2]=n[_+4>>2];n[R+8>>2]=n[_+8>>2];n[R+12>>2]=n[_+12>>2];n[R+16>>2]=n[_+16>>2];n[R+20>>2]=n[_+20>>2];n[R+24>>2]=n[_+24>>2];n[R+28>>2]=n[_+28>>2];R=e;a=o;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=e+64|0;a=s;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));R=e+128|0;a=b;f=R+64|0;do{n[R>>2]=n[a>>2];R=R+4|0;a=a+4|0}while((R|0)<(f|0));p=O;return}function Lt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0;v=p;p=p+928|0;l=v+896|0;m=v+864|0;u=v+800|0;h=v+736|0;b=v+704|0;o=v+640|0;f=v+576|0;i=v+512|0;s=v+448|0;d=v+384|0;c=v+192|0;r=v;ad(r|0,a|0,192)|0;ad(c|0,t|0,192)|0;g=f;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=o;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];jt(m,l,8);n[d>>2]=n[m>>2];n[d+4>>2]=n[m+4>>2];n[d+8>>2]=n[m+8>>2];n[d+12>>2]=n[m+12>>2];n[d+16>>2]=n[m+16>>2];n[d+20>>2]=n[m+20>>2];n[d+24>>2]=n[m+24>>2];n[d+28>>2]=n[m+28>>2];g=h+32|0;a=u+32|0;n[m>>2]=n[g>>2];n[m+4>>2]=n[g+4>>2];n[m+8>>2]=n[g+8>>2];n[m+12>>2]=n[g+12>>2];n[m+16>>2]=n[g+16>>2];n[m+20>>2]=n[g+20>>2];n[m+24>>2]=n[g+24>>2];n[m+28>>2]=n[g+28>>2];n[l>>2]=n[a>>2];n[l+4>>2]=n[a+4>>2];n[l+8>>2]=n[a+8>>2];n[l+12>>2]=n[a+12>>2];n[l+16>>2]=n[a+16>>2];n[l+20>>2]=n[a+20>>2];n[l+24>>2]=n[a+24>>2];n[l+28>>2]=n[a+28>>2];jt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];a=d+32|0;n[a>>2]=n[b>>2];n[a+4>>2]=n[b+4>>2];n[a+8>>2]=n[b+8>>2];n[a+12>>2]=n[b+12>>2];n[a+16>>2]=n[b+16>>2];n[a+20>>2]=n[b+20>>2];n[a+24>>2]=n[b+24>>2];n[a+28>>2]=n[b+28>>2];a=r+64|0;g=f;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));t=c+64|0;g=o;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];jt(m,l,8);n[s>>2]=n[m>>2];n[s+4>>2]=n[m+4>>2];n[s+8>>2]=n[m+8>>2];n[s+12>>2]=n[m+12>>2];n[s+16>>2]=n[m+16>>2];n[s+20>>2]=n[m+20>>2];n[s+24>>2]=n[m+24>>2];n[s+28>>2]=n[m+28>>2];g=h+32|0;t=u+32|0;n[m>>2]=n[g>>2];n[m+4>>2]=n[g+4>>2];n[m+8>>2]=n[g+8>>2];n[m+12>>2]=n[g+12>>2];n[m+16>>2]=n[g+16>>2];n[m+20>>2]=n[g+20>>2];n[m+24>>2]=n[g+24>>2];n[m+28>>2]=n[g+28>>2];n[l>>2]=n[t>>2];n[l+4>>2]=n[t+4>>2];n[l+8>>2]=n[t+8>>2];n[l+12>>2]=n[t+12>>2];n[l+16>>2]=n[t+16>>2];n[l+20>>2]=n[t+20>>2];n[l+24>>2]=n[t+24>>2];n[l+28>>2]=n[t+28>>2];jt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];t=s+32|0;n[t>>2]=n[b>>2];n[t+4>>2]=n[b+4>>2];n[t+8>>2]=n[b+8>>2];n[t+12>>2]=n[b+12>>2];n[t+16>>2]=n[b+16>>2];n[t+20>>2]=n[b+20>>2];n[t+24>>2]=n[b+24>>2];n[t+28>>2]=n[b+28>>2];t=r+128|0;g=f;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));a=c+128|0;g=o;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];jt(m,l,8);n[i>>2]=n[m>>2];n[i+4>>2]=n[m+4>>2];n[i+8>>2]=n[m+8>>2];n[i+12>>2]=n[m+12>>2];n[i+16>>2]=n[m+16>>2];n[i+20>>2]=n[m+20>>2];n[i+24>>2]=n[m+24>>2];n[i+28>>2]=n[m+28>>2];y=h+32|0;g=u+32|0;n[m>>2]=n[y>>2];n[m+4>>2]=n[y+4>>2];n[m+8>>2]=n[y+8>>2];n[m+12>>2]=n[y+12>>2];n[m+16>>2]=n[y+16>>2];n[m+20>>2]=n[y+20>>2];n[m+24>>2]=n[y+24>>2];n[m+28>>2]=n[y+28>>2];n[l>>2]=n[g>>2];n[l+4>>2]=n[g+4>>2];n[l+8>>2]=n[g+8>>2];n[l+12>>2]=n[g+12>>2];n[l+16>>2]=n[g+16>>2];n[l+20>>2]=n[g+20>>2];n[l+24>>2]=n[g+24>>2];n[l+28>>2]=n[g+28>>2];jt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];g=i+32|0;n[g>>2]=n[b>>2];n[g+4>>2]=n[b+4>>2];n[g+8>>2]=n[b+8>>2];n[g+12>>2]=n[b+12>>2];n[g+16>>2]=n[b+16>>2];n[g+20>>2]=n[b+20>>2];n[g+24>>2]=n[b+24>>2];n[g+28>>2]=n[b+28>>2];g=e;y=d;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=e+64|0;y=s;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=e+128|0;y=i;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));p=v;return}function Dt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0;v=p;p=p+928|0;l=v+896|0;m=v+864|0;u=v+800|0;h=v+736|0;b=v+704|0;o=v+640|0;f=v+576|0;i=v+512|0;s=v+448|0;d=v+384|0;c=v+192|0;r=v;ad(r|0,a|0,192)|0;ad(c|0,t|0,192)|0;g=f;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=o;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];Tt(m,l,8);n[d>>2]=n[m>>2];n[d+4>>2]=n[m+4>>2];n[d+8>>2]=n[m+8>>2];n[d+12>>2]=n[m+12>>2];n[d+16>>2]=n[m+16>>2];n[d+20>>2]=n[m+20>>2];n[d+24>>2]=n[m+24>>2];n[d+28>>2]=n[m+28>>2];g=h+32|0;a=u+32|0;n[m>>2]=n[g>>2];n[m+4>>2]=n[g+4>>2];n[m+8>>2]=n[g+8>>2];n[m+12>>2]=n[g+12>>2];n[m+16>>2]=n[g+16>>2];n[m+20>>2]=n[g+20>>2];n[m+24>>2]=n[g+24>>2];n[m+28>>2]=n[g+28>>2];n[l>>2]=n[a>>2];n[l+4>>2]=n[a+4>>2];n[l+8>>2]=n[a+8>>2];n[l+12>>2]=n[a+12>>2];n[l+16>>2]=n[a+16>>2];n[l+20>>2]=n[a+20>>2];n[l+24>>2]=n[a+24>>2];n[l+28>>2]=n[a+28>>2];Tt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];a=d+32|0;n[a>>2]=n[b>>2];n[a+4>>2]=n[b+4>>2];n[a+8>>2]=n[b+8>>2];n[a+12>>2]=n[b+12>>2];n[a+16>>2]=n[b+16>>2];n[a+20>>2]=n[b+20>>2];n[a+24>>2]=n[b+24>>2];n[a+28>>2]=n[b+28>>2];a=r+64|0;g=f;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));t=c+64|0;g=o;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];Tt(m,l,8);n[s>>2]=n[m>>2];n[s+4>>2]=n[m+4>>2];n[s+8>>2]=n[m+8>>2];n[s+12>>2]=n[m+12>>2];n[s+16>>2]=n[m+16>>2];n[s+20>>2]=n[m+20>>2];n[s+24>>2]=n[m+24>>2];n[s+28>>2]=n[m+28>>2];g=h+32|0;t=u+32|0;n[m>>2]=n[g>>2];n[m+4>>2]=n[g+4>>2];n[m+8>>2]=n[g+8>>2];n[m+12>>2]=n[g+12>>2];n[m+16>>2]=n[g+16>>2];n[m+20>>2]=n[g+20>>2];n[m+24>>2]=n[g+24>>2];n[m+28>>2]=n[g+28>>2];n[l>>2]=n[t>>2];n[l+4>>2]=n[t+4>>2];n[l+8>>2]=n[t+8>>2];n[l+12>>2]=n[t+12>>2];n[l+16>>2]=n[t+16>>2];n[l+20>>2]=n[t+20>>2];n[l+24>>2]=n[t+24>>2];n[l+28>>2]=n[t+28>>2];Tt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];t=s+32|0;n[t>>2]=n[b>>2];n[t+4>>2]=n[b+4>>2];n[t+8>>2]=n[b+8>>2];n[t+12>>2]=n[b+12>>2];n[t+16>>2]=n[b+16>>2];n[t+20>>2]=n[b+20>>2];n[t+24>>2]=n[b+24>>2];n[t+28>>2]=n[b+28>>2];t=r+128|0;g=f;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));a=c+128|0;g=o;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=h;y=t;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=u;y=a;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));n[m>>2]=n[f>>2];n[m+4>>2]=n[f+4>>2];n[m+8>>2]=n[f+8>>2];n[m+12>>2]=n[f+12>>2];n[m+16>>2]=n[f+16>>2];n[m+20>>2]=n[f+20>>2];n[m+24>>2]=n[f+24>>2];n[m+28>>2]=n[f+28>>2];n[l>>2]=n[o>>2];n[l+4>>2]=n[o+4>>2];n[l+8>>2]=n[o+8>>2];n[l+12>>2]=n[o+12>>2];n[l+16>>2]=n[o+16>>2];n[l+20>>2]=n[o+20>>2];n[l+24>>2]=n[o+24>>2];n[l+28>>2]=n[o+28>>2];Tt(m,l,8);n[i>>2]=n[m>>2];n[i+4>>2]=n[m+4>>2];n[i+8>>2]=n[m+8>>2];n[i+12>>2]=n[m+12>>2];n[i+16>>2]=n[m+16>>2];n[i+20>>2]=n[m+20>>2];n[i+24>>2]=n[m+24>>2];n[i+28>>2]=n[m+28>>2];y=h+32|0;g=u+32|0;n[m>>2]=n[y>>2];n[m+4>>2]=n[y+4>>2];n[m+8>>2]=n[y+8>>2];n[m+12>>2]=n[y+12>>2];n[m+16>>2]=n[y+16>>2];n[m+20>>2]=n[y+20>>2];n[m+24>>2]=n[y+24>>2];n[m+28>>2]=n[y+28>>2];n[l>>2]=n[g>>2];n[l+4>>2]=n[g+4>>2];n[l+8>>2]=n[g+8>>2];n[l+12>>2]=n[g+12>>2];n[l+16>>2]=n[g+16>>2];n[l+20>>2]=n[g+20>>2];n[l+24>>2]=n[g+24>>2];n[l+28>>2]=n[g+28>>2];Tt(m,l,8);n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[b+28>>2]=n[m+28>>2];g=i+32|0;n[g>>2]=n[b>>2];n[g+4>>2]=n[b+4>>2];n[g+8>>2]=n[b+8>>2];n[g+12>>2]=n[b+12>>2];n[g+16>>2]=n[b+16>>2];n[g+20>>2]=n[b+20>>2];n[g+24>>2]=n[b+24>>2];n[g+28>>2]=n[b+28>>2];g=e;y=d;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=e+64|0;y=s;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));g=e+128|0;y=i;_=g+64|0;do{n[g>>2]=n[y>>2];g=g+4|0;y=y+4|0}while((g|0)<(_|0));p=v;return}function zt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0;h=p;p=p+1536|0;d=h+1344|0;o=h+1152|0;f=h+960|0;i=h+768|0;c=h+576|0;b=h+384|0;s=h+192|0;u=h;ad(o|0,a|0,192)|0;t=a+192|0;ad(d|0,t|0,192)|0;Ft(u,o,d);l=o;m=a+320|0;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));r=d;n[r>>2]=1091403767;n[r+4>>2]=-167360562;r=d+8|0;n[r>>2]=-753151983;n[r+4>>2]=792555341;r=d+16|0;n[r>>2]=960546513;n[r+4>>2]=692269950;r=d+24|0;n[r>>2]=-1478256553;n[r+4>>2]=496343272;r=d+32|0;n[r>>2]=-980480611;n[r+4>>2]=-748862579;r=d+40|0;n[r>>2]=-171504835;n[r+4>>2]=175696680;r=d+48|0;n[r>>2]=2021213740;n[r+4>>2]=1718526831;r=d+56|0;n[r>>2]=-1710760145;n[r+4>>2]=235567041;Nt(f,o,d);r=a+256|0;l=f+64|0;m=t;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));l=f+128|0;m=r;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));ad(d|0,a|0,192)|0;Dt(i,f,d);ad(o|0,a|0,192)|0;ad(d|0,t|0,192)|0;Dt(f,o,d);Ft(c,i,f);ad(d|0,u|0,192)|0;Lt(b,c,d);l=o;m=u+128|0;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));a=d;n[a>>2]=1091403767;n[a+4>>2]=-167360562;a=d+8|0;n[a>>2]=-753151983;n[a+4>>2]=792555341;a=d+16|0;n[a>>2]=960546513;n[a+4>>2]=692269950;a=d+24|0;n[a>>2]=-1478256553;n[a+4>>2]=496343272;a=d+32|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=d+40|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=d+48|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=d+56|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;Nt(f,o,d);a=u+64|0;l=f+64|0;m=u;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));l=f+128|0;m=a;g=l+64|0;do{n[l>>2]=n[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(g|0));Lt(s,b,f);ad(o|0,u|0,192)|0;ad(d|0,u|0,192)|0;Dt(f,o,d);ad(e|0,s|0,192)|0;ad(e+192|0,f|0,192)|0;p=h;return}function qt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0;x=p;p=p+3216|0;k=x+3016|0;A=x+2824|0;y=x+2632|0;w=x+2440|0;_=x+2248|0;v=x+2184|0;g=x+2120|0;d=x+1928|0;r=x+1736|0;m=x+1544|0;h=x+1352|0;l=x+968|0;o=x+776|0;i=x+584|0;c=x+384|0;f=x;ad(f|0,a|0,384)|0;It(w,f);a=f+192|0;It(i,a);s=A;b=i+128|0;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));t=k;n[t>>2]=1091403767;n[t+4>>2]=-167360562;t=k+8|0;n[t>>2]=-753151983;n[t+4>>2]=792555341;t=k+16|0;n[t>>2]=960546513;n[t+4>>2]=692269950;t=k+24|0;n[t>>2]=-1478256553;n[t+4>>2]=496343272;t=k+32|0;n[t>>2]=-980480611;n[t+4>>2]=-748862579;t=k+40|0;n[t>>2]=-171504835;n[t+4>>2]=175696680;t=k+48|0;n[t>>2]=2021213740;n[t+4>>2]=1718526831;t=k+56|0;n[t>>2]=-1710760145;n[t+4>>2]=235567041;Nt(y,A,k);t=i+64|0;s=y+64|0;b=i;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=y+128|0;b=t;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));Lt(_,w,y);Pt(c,_);u=c;if((n[u>>2]|0)==0&(n[u+4>>2]|0)==0){_=0;A=0;k=e;w=k;n[w>>2]=_;k=k+4|0;n[k>>2]=A;p=x;return}s=c+8|0;ad(o|0,s|0,192)|0;ad(A|0,f|0,192)|0;ad(k|0,s|0,192)|0;Ft(h,A,k);ad(A|0,a|0,192)|0;ad(k|0,o|0,192)|0;Ft(r,A,k);ad(d|0,r|0,192)|0;s=w;b=r;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=A;b=r;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));n[k>>2]=n[w>>2];n[k+4>>2]=n[w+4>>2];n[k+8>>2]=n[w+8>>2];n[k+12>>2]=n[w+12>>2];n[k+16>>2]=n[w+16>>2];n[k+20>>2]=n[w+20>>2];n[k+24>>2]=n[w+24>>2];n[k+28>>2]=n[w+28>>2];Rt(k,8);n[g>>2]=n[k>>2];n[g+4>>2]=n[k+4>>2];n[g+8>>2]=n[k+8>>2];n[g+12>>2]=n[k+12>>2];n[g+16>>2]=n[k+16>>2];n[g+20>>2]=n[k+20>>2];n[g+24>>2]=n[k+24>>2];n[g+28>>2]=n[k+28>>2];a=A+32|0;n[k>>2]=n[a>>2];n[k+4>>2]=n[a+4>>2];n[k+8>>2]=n[a+8>>2];n[k+12>>2]=n[a+12>>2];n[k+16>>2]=n[a+16>>2];n[k+20>>2]=n[a+20>>2];n[k+24>>2]=n[a+24>>2];n[k+28>>2]=n[a+28>>2];Rt(k,8);n[y>>2]=n[k>>2];n[y+4>>2]=n[k+4>>2];n[y+8>>2]=n[k+8>>2];n[y+12>>2]=n[k+12>>2];n[y+16>>2]=n[k+16>>2];n[y+20>>2]=n[k+20>>2];n[y+24>>2]=n[k+24>>2];n[y+28>>2]=n[k+28>>2];a=g+32|0;n[a>>2]=n[y>>2];n[a+4>>2]=n[y+4>>2];n[a+8>>2]=n[y+8>>2];n[a+12>>2]=n[y+12>>2];n[a+16>>2]=n[y+16>>2];n[a+20>>2]=n[y+20>>2];n[a+24>>2]=n[y+24>>2];n[a+28>>2]=n[y+28>>2];a=d+64|0;s=w;b=a;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=A;b=a;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));n[k>>2]=n[w>>2];n[k+4>>2]=n[w+4>>2];n[k+8>>2]=n[w+8>>2];n[k+12>>2]=n[w+12>>2];n[k+16>>2]=n[w+16>>2];n[k+20>>2]=n[w+20>>2];n[k+24>>2]=n[w+24>>2];n[k+28>>2]=n[w+28>>2];Rt(k,8);n[v>>2]=n[k>>2];n[v+4>>2]=n[k+4>>2];n[v+8>>2]=n[k+8>>2];n[v+12>>2]=n[k+12>>2];n[v+16>>2]=n[k+16>>2];n[v+20>>2]=n[k+20>>2];n[v+24>>2]=n[k+24>>2];n[v+28>>2]=n[k+28>>2];a=A+32|0;n[k>>2]=n[a>>2];n[k+4>>2]=n[a+4>>2];n[k+8>>2]=n[a+8>>2];n[k+12>>2]=n[a+12>>2];n[k+16>>2]=n[a+16>>2];n[k+20>>2]=n[a+20>>2];n[k+24>>2]=n[a+24>>2];n[k+28>>2]=n[a+28>>2];Rt(k,8);n[y>>2]=n[k>>2];n[y+4>>2]=n[k+4>>2];n[y+8>>2]=n[k+8>>2];n[y+12>>2]=n[k+12>>2];n[y+16>>2]=n[k+16>>2];n[y+20>>2]=n[k+20>>2];n[y+24>>2]=n[k+24>>2];n[y+28>>2]=n[k+28>>2];a=v+32|0;n[a>>2]=n[y>>2];n[a+4>>2]=n[y+4>>2];n[a+8>>2]=n[y+8>>2];n[a+12>>2]=n[y+12>>2];n[a+16>>2]=n[y+16>>2];n[a+20>>2]=n[y+20>>2];n[a+24>>2]=n[y+24>>2];n[a+28>>2]=n[y+28>>2];a=d+128|0;s=w;b=a;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=A;b=a;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));n[k>>2]=n[w>>2];n[k+4>>2]=n[w+4>>2];n[k+8>>2]=n[w+8>>2];n[k+12>>2]=n[w+12>>2];n[k+16>>2]=n[w+16>>2];n[k+20>>2]=n[w+20>>2];n[k+24>>2]=n[w+24>>2];n[k+28>>2]=n[w+28>>2];Rt(k,8);n[_>>2]=n[k>>2];n[_+4>>2]=n[k+4>>2];n[_+8>>2]=n[k+8>>2];n[_+12>>2]=n[k+12>>2];n[_+16>>2]=n[k+16>>2];n[_+20>>2]=n[k+20>>2];n[_+24>>2]=n[k+24>>2];n[_+28>>2]=n[k+28>>2];s=A+32|0;n[k>>2]=n[s>>2];n[k+4>>2]=n[s+4>>2];n[k+8>>2]=n[s+8>>2];n[k+12>>2]=n[s+12>>2];n[k+16>>2]=n[s+16>>2];n[k+20>>2]=n[s+20>>2];n[k+24>>2]=n[s+24>>2];n[k+28>>2]=n[s+28>>2];Rt(k,8);n[y>>2]=n[k>>2];n[y+4>>2]=n[k+4>>2];n[y+8>>2]=n[k+8>>2];n[y+12>>2]=n[k+12>>2];n[y+16>>2]=n[k+16>>2];n[y+20>>2]=n[k+20>>2];n[y+24>>2]=n[k+24>>2];n[y+28>>2]=n[k+28>>2];s=_+32|0;n[s>>2]=n[y>>2];n[s+4>>2]=n[y+4>>2];n[s+8>>2]=n[y+8>>2];n[s+12>>2]=n[y+12>>2];n[s+16>>2]=n[y+16>>2];n[s+20>>2]=n[y+20>>2];n[s+24>>2]=n[y+24>>2];n[s+28>>2]=n[y+28>>2];s=m;b=g;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=m+64|0;b=v;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));s=m+128|0;b=_;u=s+64|0;do{n[s>>2]=n[b>>2];s=s+4|0;b=b+4|0}while((s|0)<(u|0));ad(l|0,h|0,192)|0;ad(l+192|0,m|0,192)|0;ad(e+8|0,l|0,384)|0;_=1;A=0;k=e;w=k;n[w>>2]=_;k=k+4|0;n[k>>2]=A;p=x;return}function Ut(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0;w=p;p=p+2688|0;m=w+2496|0;h=w+2304|0;l=w+2112|0;u=w+1920|0;b=w+1728|0;s=w+1536|0;d=w+1344|0;o=w+1152|0;v=w+960|0;g=w+768|0;y=w+384|0;_=w;ad(_|0,a|0,384)|0;ad(y|0,t|0,384)|0;ad(h|0,a|0,192)|0;ad(m|0,t|0,192)|0;Ft(g,h,m);a=_+192|0;ad(h|0,a|0,192)|0;r=y+192|0;ad(m|0,r|0,192)|0;Ft(v,h,m);c=h;i=v+128|0;f=c+64|0;do{n[c>>2]=n[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(f|0));t=m;n[t>>2]=1091403767;n[t+4>>2]=-167360562;t=m+8|0;n[t>>2]=-753151983;n[t+4>>2]=792555341;t=m+16|0;n[t>>2]=960546513;n[t+4>>2]=692269950;t=m+24|0;n[t>>2]=-1478256553;n[t+4>>2]=496343272;t=m+32|0;n[t>>2]=-980480611;n[t+4>>2]=-748862579;t=m+40|0;n[t>>2]=-171504835;n[t+4>>2]=175696680;t=m+48|0;n[t>>2]=2021213740;n[t+4>>2]=1718526831;t=m+56|0;n[t>>2]=-1710760145;n[t+4>>2]=235567041;Nt(l,h,m);t=v+64|0;c=l+64|0;i=v;f=c+64|0;do{n[c>>2]=n[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(f|0));c=l+128|0;i=t;f=c+64|0;do{n[c>>2]=n[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(f|0));ad(m|0,g|0,192)|0;Dt(o,l,m);ad(h|0,_|0,192)|0;ad(m|0,a|0,192)|0;Dt(u,h,m);ad(h|0,y|0,192)|0;ad(m|0,r|0,192)|0;Dt(l,h,m);Ft(b,u,l);ad(m|0,g|0,192)|0;Lt(s,b,m);ad(m|0,v|0,192)|0;Lt(d,s,m);ad(e|0,o|0,192)|0;ad(e+192|0,d|0,192)|0;p=w;return}function Ht(e){e=e|0;var a=0;a=p;p=p+16|0;n[a>>2]=n[e>>2];n[a+4>>2]=n[e+4>>2];n[a+8>>2]=n[e+8>>2];kt(a)}function Vt(e,a,t){e=e|0;a=a|0;t=t|0;var f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0;m=p;p=p+176|0;s=m+32|0;h=m+120|0;l=m;f=m+92|0;o=m+64|0;u=m+148|0;if((t|0)==32){b=a;t=b;b=b+4|0;b=de(i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0,i[b>>0]|i[b+1>>0]<<8|i[b+2>>0]<<16|i[b+3>>0]<<24|0)|0;t=l+24|0;n[t>>2]=b;n[t+4>>2]=T;t=a+8|0;b=t;t=t+4|0;t=de(i[b>>0]|i[b+1>>0]<<8|i[b+2>>0]<<16|i[b+3>>0]<<24|0,i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0)|0;b=l+16|0;n[b>>2]=t;n[b+4>>2]=T;b=a+16|0;t=b;b=b+4|0;b=de(i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0,i[b>>0]|i[b+1>>0]<<8|i[b+2>>0]<<16|i[b+3>>0]<<24|0)|0;t=l+8|0;n[t>>2]=b;n[t+4>>2]=T;t=a+24|0;a=t;t=t+4|0;t=de(i[a>>0]|i[a+1>>0]<<8|i[a+2>>0]<<16|i[a+3>>0]<<24|0,i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0)|0;a=l;n[a>>2]=t;n[a+4>>2]=T;a=l+4|0;n[f>>2]=n[a>>2];n[f+4>>2]=n[a+4>>2];n[f+8>>2]=n[a+8>>2];n[f+12>>2]=n[a+12>>2];n[f+16>>2]=n[a+16>>2];n[f+20>>2]=n[a+20>>2];n[f+24>>2]=n[a+24>>2];n[h>>2]=n[f>>2];n[h+4>>2]=n[f+4>>2];n[h+8>>2]=n[f+8>>2];n[h+12>>2]=n[f+12>>2];n[h+16>>2]=n[f+16>>2];n[h+20>>2]=n[f+20>>2];n[h+24>>2]=n[f+24>>2];n[s>>2]=n[f>>2];n[s+4>>2]=n[f+4>>2];n[s+8>>2]=n[f+8>>2];n[s+12>>2]=n[f+12>>2];n[s+16>>2]=n[f+16>>2];n[s+20>>2]=n[f+20>>2];n[s+24>>2]=n[f+24>>2];n[o>>2]=n[h>>2];n[o+4>>2]=n[h+4>>2];n[o+8>>2]=n[h+8>>2];n[o+12>>2]=n[h+12>>2];n[o+16>>2]=n[h+16>>2];n[o+20>>2]=n[h+20>>2];n[o+24>>2]=n[h+24>>2];a=1}else{n[h>>2]=n[f>>2];n[h+4>>2]=n[f+4>>2];n[h+8>>2]=n[f+8>>2];n[h+12>>2]=n[f+12>>2];n[h+16>>2]=n[f+16>>2];n[h+20>>2]=n[f+20>>2];n[h+24>>2]=n[f+24>>2];a=0}b=h;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));if(a){n[s>>2]=t;b=s+4|0;o=h;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));Ct(s,104,72,-268435457,-1025378925);n[l>>2]=n[s>>2];n[l+4>>2]=n[s+4>>2];n[l+8>>2]=n[s+8>>2];n[l+12>>2]=n[s+12>>2];n[l+16>>2]=n[s+16>>2];n[l+20>>2]=n[s+20>>2];n[l+24>>2]=n[s+24>>2];n[l+28>>2]=n[s+28>>2];a=n[l>>2]|0;b=u;o=l+4|0;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));f=1}else{f=0;a=0}b=h;o=u;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));if(f){n[l>>2]=a;b=l+4|0;o=h;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));n[e+8>>2]=a;b=e+12|0;o=h;d=b+28|0;do{c[b>>1]=c[o>>1]|0;b=b+2|0;o=o+2|0}while((b|0)<(d|0));h=e;l=0;r[h>>0]=l;p=m;return}else{r[e+1>>0]=0;h=e;l=1;r[h>>0]=l;p=m;return}}function Gt(e){e=e|0;n[e>>2]=0;n[e+4>>2]=0;n[e+8>>2]=0;n[e+12>>2]=0;n[e+16>>2]=0;n[e+20>>2]=0;n[e+24>>2]=0;n[e+28>>2]=0;return}function Wt(e){e=e|0;var a=0;a=e;if((((n[a>>2]|0)==0&(n[a+4>>2]|0)==0?(a=e+8|0,(n[a>>2]|0)==0&(n[a+4>>2]|0)==0):0)?(a=e+16|0,(n[a>>2]|0)==0&(n[a+4>>2]|0)==0):0)?(a=e+24|0,(n[a>>2]|0)==0&(n[a+4>>2]|0)==0):0){a=1;return a|0}a=0;return a|0}function Yt(e,a,t){e=e|0;a=a|0;t=t|0;var f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0;g=p;p=p+192|0;u=g+64|0;b=g+32|0;m=g+124|0;h=g;f=g+96|0;l=g+152|0;if((t|0)==32){s=a;t=s;s=s+4|0;s=de(i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0,i[s>>0]|i[s+1>>0]<<8|i[s+2>>0]<<16|i[s+3>>0]<<24|0)|0;t=h+24|0;n[t>>2]=s;n[t+4>>2]=T;t=a+8|0;s=t;t=t+4|0;t=de(i[s>>0]|i[s+1>>0]<<8|i[s+2>>0]<<16|i[s+3>>0]<<24|0,i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0)|0;s=h+16|0;n[s>>2]=t;n[s+4>>2]=T;s=a+16|0;t=s;s=s+4|0;s=de(i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0,i[s>>0]|i[s+1>>0]<<8|i[s+2>>0]<<16|i[s+3>>0]<<24|0)|0;t=h+8|0;n[t>>2]=s;n[t+4>>2]=T;t=a+24|0;a=t;t=t+4|0;t=de(i[a>>0]|i[a+1>>0]<<8|i[a+2>>0]<<16|i[a+3>>0]<<24|0,i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24|0)|0;a=h;n[a>>2]=t;n[a+4>>2]=T;a=h+4|0;n[m>>2]=n[a>>2];n[m+4>>2]=n[a+4>>2];n[m+8>>2]=n[a+8>>2];n[m+12>>2]=n[a+12>>2];n[m+16>>2]=n[a+16>>2];n[m+20>>2]=n[a+20>>2];n[m+24>>2]=n[a+24>>2];n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];n[u>>2]=n[m>>2];n[u+4>>2]=n[m+4>>2];n[u+8>>2]=n[m+8>>2];n[u+12>>2]=n[m+12>>2];n[u+16>>2]=n[m+16>>2];n[u+20>>2]=n[m+20>>2];n[u+24>>2]=n[m+24>>2];n[f>>2]=n[b>>2];n[f+4>>2]=n[b+4>>2];n[f+8>>2]=n[b+8>>2];n[f+12>>2]=n[b+12>>2];n[f+16>>2]=n[b+16>>2];n[f+20>>2]=n[b+20>>2];n[f+24>>2]=n[b+24>>2];a=1}else{n[b>>2]=n[m>>2];n[b+4>>2]=n[m+4>>2];n[b+8>>2]=n[m+8>>2];n[b+12>>2]=n[m+12>>2];n[b+16>>2]=n[m+16>>2];n[b+20>>2]=n[m+20>>2];n[b+24>>2]=n[m+24>>2];a=0}s=m;o=f;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));if(a){n[u>>2]=t;s=u+4|0;o=m;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));d=4;while(1){if(!d){f=9;break}d=d+-1|0;t=u+(d<<3)|0;a=n[t>>2]|0;t=n[t+4>>2]|0;o=8+(d<<3)|0;f=n[o>>2]|0;o=n[o+4>>2]|0;if(t>>>0<o>>>0|(t|0)==(o|0)&a>>>0<f>>>0){f=10;break}if(t>>>0>o>>>0|(t|0)==(o|0)&a>>>0>f>>>0){f=9;break}}if((f|0)==9){n[u>>2]=n[b>>2];n[u+4>>2]=n[b+4>>2];n[u+8>>2]=n[b+8>>2];n[u+12>>2]=n[b+12>>2];n[u+16>>2]=n[b+16>>2];n[u+20>>2]=n[b+20>>2];n[u+24>>2]=n[b+24>>2];n[u+28>>2]=n[b+28>>2];a=1;t=0}else if((f|0)==10){Ct(u,136,8,-460954743,-2016278654);n[b>>2]=n[u>>2];n[b+4>>2]=n[u+4>>2];n[b+8>>2]=n[u+8>>2];n[b+12>>2]=n[u+12>>2];n[b+16>>2]=n[u+16>>2];n[b+20>>2]=n[u+20>>2];n[b+24>>2]=n[u+24>>2];n[b+28>>2]=n[u+28>>2];n[u>>2]=n[b>>2];n[u+4>>2]=n[b+4>>2];n[u+8>>2]=n[b+8>>2];n[u+12>>2]=n[b+12>>2];n[u+16>>2]=n[b+16>>2];n[u+20>>2]=n[b+20>>2];n[u+24>>2]=n[b+24>>2];n[u+28>>2]=n[b+28>>2];n[h>>2]=n[b>>2];n[h+4>>2]=n[b+4>>2];n[h+8>>2]=n[b+8>>2];n[h+12>>2]=n[b+12>>2];n[h+16>>2]=n[b+16>>2];n[h+20>>2]=n[b+20>>2];n[h+24>>2]=n[b+24>>2];n[h+28>>2]=n[b+28>>2];t=n[u>>2]|0;s=l;o=u+4|0;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));a=0}f=1}else{a=1;f=0;t=0}s=m;o=l;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));if(!(a<<24>>24)){n[h>>2]=t;s=h+4|0;o=m;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));n[e+8>>2]=t;s=e+12|0;o=m;d=s+28|0;do{c[s>>1]=c[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(d|0));m=e;h=0;r[m>>0]=h;p=g;return}else{r[e+1>>0]=f;m=e;h=1;r[m>>0]=h;p=g;return}}function Kt(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0;i=p;p=p+96|0;f=i+64|0;o=i+32|0;c=i;n[o>>2]=n[e>>2];n[o+4>>2]=n[e+4>>2];n[o+8>>2]=n[e+8>>2];n[o+12>>2]=n[e+12>>2];n[o+16>>2]=n[e+16>>2];n[o+20>>2]=n[e+20>>2];n[o+24>>2]=n[e+24>>2];n[o+28>>2]=n[e+28>>2];e=f;n[e>>2]=1;n[e+4>>2]=0;e=f+8|0;n[e>>2]=0;n[e+4>>2]=0;n[e+8>>2]=0;n[e+12>>2]=0;n[e+16>>2]=0;n[e+20>>2]=0;Ct(o,f,8,-460954743,-2016278654);n[c>>2]=n[o>>2];n[c+4>>2]=n[o+4>>2];n[c+8>>2]=n[o+8>>2];n[c+12>>2]=n[o+12>>2];n[c+16>>2]=n[o+16>>2];n[c+20>>2]=n[o+20>>2];n[c+24>>2]=n[o+24>>2];n[c+28>>2]=n[o+28>>2];e=o;n[e>>2]=-980480611;n[e+4>>2]=-748862579;e=o+8|0;n[e>>2]=-171504835;n[e+4>>2]=175696680;e=o+16|0;n[e>>2]=2021213740;n[e+4>>2]=1718526831;e=o+24|0;n[e>>2]=-1710760145;n[e+4>>2]=235567041;e=f;n[e>>2]=-662897337;n[e+4>>2]=1008765974;e=f+8|0;n[e>>2]=1752287885;n[e+4>>2]=-1753126255;e=f+16|0;n[e>>2]=-2122229667;n[e+4>>2]=-1202698826;e=f+24|0;n[e>>2]=-516841431;n[e+4>>2]=811880050;Ct(c,o,f,-460954743,-2016278654);if((t|0)!=32){o=1;p=i;return o|0}t=c+24|0;t=de(n[t>>2]|0,n[t+4>>2]|0)|0;f=T;o=a;e=o;r[e>>0]=t;r[e+1>>0]=t>>8;r[e+2>>0]=t>>16;r[e+3>>0]=t>>24;o=o+4|0;r[o>>0]=f;r[o+1>>0]=f>>8;r[o+2>>0]=f>>16;r[o+3>>0]=f>>24;o=c+16|0;o=de(n[o>>2]|0,n[o+4>>2]|0)|0;f=T;e=a+8|0;t=e;r[t>>0]=o;r[t+1>>0]=o>>8;r[t+2>>0]=o>>16;r[t+3>>0]=o>>24;e=e+4|0;r[e>>0]=f;r[e+1>>0]=f>>8;r[e+2>>0]=f>>16;r[e+3>>0]=f>>24;e=c+8|0;e=de(n[e>>2]|0,n[e+4>>2]|0)|0;f=T;t=a+16|0;o=t;r[o>>0]=e;r[o+1>>0]=e>>8;r[o+2>>0]=e>>16;r[o+3>>0]=e>>24;t=t+4|0;r[t>>0]=f;r[t+1>>0]=f>>8;r[t+2>>0]=f>>16;r[t+3>>0]=f>>24;t=c;t=de(n[t>>2]|0,n[t+4>>2]|0)|0;f=T;o=a+24|0;c=o;r[c>>0]=t;r[c+1>>0]=t>>8;r[c+2>>0]=t>>16;r[c+3>>0]=t>>24;o=o+4|0;r[o>>0]=f;r[o+1>>0]=f>>8;r[o+2>>0]=f>>16;r[o+3>>0]=f>>24;o=0;p=i;return o|0}function Qt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=p;p=p+64|0;c=r;n[c>>2]=n[a>>2];n[c+4>>2]=n[a+4>>2];n[c+8>>2]=n[a+8>>2];n[c+12>>2]=n[a+12>>2];n[c+16>>2]=n[a+16>>2];n[c+20>>2]=n[a+20>>2];n[c+24>>2]=n[a+24>>2];n[c+28>>2]=n[a+28>>2];a=c+32|0;n[a>>2]=n[t>>2];n[a+4>>2]=n[t+4>>2];n[a+8>>2]=n[t+8>>2];n[a+12>>2]=n[t+12>>2];n[a+16>>2]=n[t+16>>2];n[a+20>>2]=n[t+20>>2];n[a+24>>2]=n[t+24>>2];n[a+28>>2]=n[t+28>>2];a=c;t=e+64|0;do{n[e>>2]=n[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(t|0));p=r;return}function Zt(e){e=e|0;var a=0;n[e>>2]=0;n[e+4>>2]=0;n[e+8>>2]=0;n[e+12>>2]=0;n[e+16>>2]=0;n[e+20>>2]=0;n[e+24>>2]=0;n[e+28>>2]=0;a=e+32|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=e+40|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=e+48|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=e+56|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;e=e+64|0;n[e>>2]=0;n[e+4>>2]=0;n[e+8>>2]=0;n[e+12>>2]=0;n[e+16>>2]=0;n[e+20>>2]=0;n[e+24>>2]=0;n[e+28>>2]=0;return}function Jt(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0;u=p;p=p+320|0;b=u+256|0;f=u+224|0;o=u+192|0;i=u+160|0;c=u+128|0;t=u+64|0;s=u+32|0;d=u;r=a+64|0;l=r;if((((n[l>>2]|0)==0&(n[l+4>>2]|0)==0?(l=a+72|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0)?(l=a+80|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0)?(l=a+88|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0){l=e;n[l>>2]=0;n[l+4>>2]=0;p=u;return}l=b;n[l>>2]=-980480611;n[l+4>>2]=-748862579;l=b+8|0;n[l>>2]=-171504835;n[l+4>>2]=175696680;l=b+16|0;n[l>>2]=2021213740;n[l+4>>2]=1718526831;l=b+24|0;n[l>>2]=-1710760145;n[l+4>>2]=235567041;if((r|0)!=(b|0)?Lo(r,b,32)|0:0){n[b>>2]=n[r>>2];n[b+4>>2]=n[r+4>>2];n[b+8>>2]=n[r+8>>2];n[b+12>>2]=n[r+12>>2];n[b+16>>2]=n[r+16>>2];n[b+20>>2]=n[r+20>>2];n[b+24>>2]=n[r+24>>2];n[b+28>>2]=n[r+28>>2];l=b;if((((n[l>>2]|0)==0&(n[l+4>>2]|0)==0?(l=b+8|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0)?(l=b+16|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0)?(l=b+24|0,(n[l>>2]|0)==0&(n[l+4>>2]|0)==0):0)Oi(3624);Ot(b,8);Ct(b,40,8,-460954743,-2016278654);n[f>>2]=n[b>>2];n[f+4>>2]=n[b+4>>2];n[f+8>>2]=n[b+8>>2];n[f+12>>2]=n[b+12>>2];n[f+16>>2]=n[b+16>>2];n[f+20>>2]=n[b+20>>2];n[f+24>>2]=n[b+24>>2];n[f+28>>2]=n[b+28>>2];n[o>>2]=n[f>>2];n[o+4>>2]=n[f+4>>2];n[o+8>>2]=n[f+8>>2];n[o+12>>2]=n[f+12>>2];n[o+16>>2]=n[f+16>>2];n[o+20>>2]=n[f+20>>2];n[o+24>>2]=n[f+24>>2];n[o+28>>2]=n[f+28>>2];n[d>>2]=n[o>>2];n[d+4>>2]=n[o+4>>2];n[d+8>>2]=n[o+8>>2];n[d+12>>2]=n[o+12>>2];n[d+16>>2]=n[o+16>>2];n[d+20>>2]=n[o+20>>2];n[d+24>>2]=n[o+24>>2];n[d+28>>2]=n[o+28>>2];n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];n[b>>2]=n[d>>2];n[b+4>>2]=n[d+4>>2];n[b+8>>2]=n[d+8>>2];n[b+12>>2]=n[d+12>>2];n[b+16>>2]=n[d+16>>2];n[b+20>>2]=n[d+20>>2];n[b+24>>2]=n[d+24>>2];n[b+28>>2]=n[d+28>>2];Ct(f,b,8,-460954743,-2016278654);n[s>>2]=n[f>>2];n[s+4>>2]=n[f+4>>2];n[s+8>>2]=n[f+8>>2];n[s+12>>2]=n[f+12>>2];n[s+16>>2]=n[f+16>>2];n[s+20>>2]=n[f+20>>2];n[s+24>>2]=n[f+24>>2];n[s+28>>2]=n[f+28>>2];n[f>>2]=n[a>>2];n[f+4>>2]=n[a+4>>2];n[f+8>>2]=n[a+8>>2];n[f+12>>2]=n[a+12>>2];n[f+16>>2]=n[a+16>>2];n[f+20>>2]=n[a+20>>2];n[f+24>>2]=n[a+24>>2];n[f+28>>2]=n[a+28>>2];n[b>>2]=n[s>>2];n[b+4>>2]=n[s+4>>2];n[b+8>>2]=n[s+8>>2];n[b+12>>2]=n[s+12>>2];n[b+16>>2]=n[s+16>>2];n[b+20>>2]=n[s+20>>2];n[b+24>>2]=n[s+24>>2];n[b+28>>2]=n[s+28>>2];Ct(f,b,8,-460954743,-2016278654);n[t>>2]=n[f>>2];n[t+4>>2]=n[f+4>>2];n[t+8>>2]=n[f+8>>2];n[t+12>>2]=n[f+12>>2];n[t+16>>2]=n[f+16>>2];n[t+20>>2]=n[f+20>>2];n[t+24>>2]=n[f+24>>2];n[t+28>>2]=n[f+28>>2];a=a+32|0;n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[i+12>>2]=n[a+12>>2];n[i+16>>2]=n[a+16>>2];n[i+20>>2]=n[a+20>>2];n[i+24>>2]=n[a+24>>2];n[i+28>>2]=n[a+28>>2];n[f>>2]=n[s>>2];n[f+4>>2]=n[s+4>>2];n[f+8>>2]=n[s+8>>2];n[f+12>>2]=n[s+12>>2];n[f+16>>2]=n[s+16>>2];n[f+20>>2]=n[s+20>>2];n[f+24>>2]=n[s+24>>2];n[f+28>>2]=n[s+28>>2];n[b>>2]=n[d>>2];n[b+4>>2]=n[d+4>>2];n[b+8>>2]=n[d+8>>2];n[b+12>>2]=n[d+12>>2];n[b+16>>2]=n[d+16>>2];n[b+20>>2]=n[d+20>>2];n[b+24>>2]=n[d+24>>2];n[b+28>>2]=n[d+28>>2];Ct(f,b,8,-460954743,-2016278654);n[o>>2]=n[f>>2];n[o+4>>2]=n[f+4>>2];n[o+8>>2]=n[f+8>>2];n[o+12>>2]=n[f+12>>2];n[o+16>>2]=n[f+16>>2];n[o+20>>2]=n[f+20>>2];n[o+24>>2]=n[f+24>>2];n[o+28>>2]=n[f+28>>2];n[f>>2]=n[i>>2];n[f+4>>2]=n[i+4>>2];n[f+8>>2]=n[i+8>>2];n[f+12>>2]=n[i+12>>2];n[f+16>>2]=n[i+16>>2];n[f+20>>2]=n[i+20>>2];n[f+24>>2]=n[i+24>>2];n[f+28>>2]=n[i+28>>2];n[b>>2]=n[o>>2];n[b+4>>2]=n[o+4>>2];n[b+8>>2]=n[o+8>>2];n[b+12>>2]=n[o+12>>2];n[b+16>>2]=n[o+16>>2];n[b+20>>2]=n[o+20>>2];n[b+24>>2]=n[o+24>>2];n[b+28>>2]=n[o+28>>2];Ct(f,b,8,-460954743,-2016278654);n[c>>2]=n[f>>2];n[c+4>>2]=n[f+4>>2];n[c+8>>2]=n[f+8>>2];n[c+12>>2]=n[f+12>>2];n[c+16>>2]=n[f+16>>2];n[c+20>>2]=n[f+20>>2];n[c+24>>2]=n[f+24>>2];n[c+28>>2]=n[f+28>>2];a=t+32|0;n[a>>2]=n[c>>2];n[a+4>>2]=n[c+4>>2];n[a+8>>2]=n[c+8>>2];n[a+12>>2]=n[c+12>>2];n[a+16>>2]=n[c+16>>2];n[a+20>>2]=n[c+20>>2];n[a+24>>2]=n[c+24>>2];n[a+28>>2]=n[c+28>>2];a=e;n[a>>2]=1;n[a+4>>2]=0;a=e+8|0;e=a+64|0;do{n[a>>2]=n[t>>2];a=a+4|0;t=t+4|0}while((a|0)<(e|0));p=u;return}n[b>>2]=n[a>>2];n[b+4>>2]=n[a+4>>2];n[b+8>>2]=n[a+8>>2];n[b+12>>2]=n[a+12>>2];n[b+16>>2]=n[a+16>>2];n[b+20>>2]=n[a+20>>2];n[b+24>>2]=n[a+24>>2];n[b+28>>2]=n[a+28>>2];t=a+32|0;a=b+32|0;n[a>>2]=n[t>>2];n[a+4>>2]=n[t+4>>2];n[a+8>>2]=n[t+8>>2];n[a+12>>2]=n[t+12>>2];n[a+16>>2]=n[t+16>>2];n[a+20>>2]=n[t+20>>2];n[a+24>>2]=n[t+24>>2];n[a+28>>2]=n[t+28>>2];a=e;n[a>>2]=1;n[a+4>>2]=0;a=e+8|0;t=b;e=a+64|0;do{n[a>>2]=n[t>>2];a=a+4|0;t=t+4|0}while((a|0)<(e|0));p=u;return}function Xt(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+288|0;f=d+192|0;i=d+96|0;c=d;o=i;r=o+96|0;do{n[o>>2]=n[a>>2];o=o+4|0;a=a+4|0}while((o|0)<(r|0));o=f;a=t;r=o+96|0;do{n[o>>2]=n[a>>2];o=o+4|0;a=a+4|0}while((o|0)<(r|0));Gi(c,i,f);o=e;a=c;r=o+96|0;do{n[o>>2]=n[a>>2];o=o+4|0;a=a+4|0}while((o|0)<(r|0));p=d;return}function $t(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,$=0,te=0,ce=0,ne=0,ie=0,fe=0,oe=0,de=0,se=0,be=0,ue=0,le=0,pe=0,he=0,ge=0,ve=0,ye=0,_e=0,we=0,Ae=0,ke=0,xe=0,Ee=0,Se=0,Te=0,Ce=0,Re=0,Oe=0,Be=0,Me=0,Ne=0,Ie=0,Pe=0,Fe=0,Le=0,De=0,ze=0,qe=0,Ue=0,He=0,Ve=0,Ge=0,We=0,Ye=0,Ke=0,Qe=0,Ze=0,Je=0,Xe=0,$e=0,ea=0,aa=0,ta=0,ra=0,ca=0,na=0,ia=0,oa=0,da=0,sa=0,ba=0,ua=0,la=0,pa=0,ha=0,ma=0,ga=0,va=0,ya=0,_a=0,wa=0,Aa=0,ka=0,xa=0,Ea=0,Sa=0,Ta=0,ja=0,Ca=0,Ra=0,Oa=0,Ba=0,Ma=0,Na=0,Ia=0,Pa=0,Fa=0,La=0,Da=0,za=0,qa=0,Ua=0,Ha=0,Va=0,Ga=0,Wa=0,Ya=0,Ka=0,Qa=0,Za=0,Ja=0,Xa=0,$a=0,et=0,at=0,tt=0,rt=0,ct=0,nt=0,it=0,ft=0,ot=0,dt=0,st=0,bt=0,ut=0,lt=0,pt=0,ht=0,mt=0,gt=0,vt=0,yt=0,_t=0,wt=0,kt=0,Et=0,St=0,Tt=0,jt=0,Ct=0,Rt=0,Ot=0,Bt=0,Mt=0,Nt=0,It=0,Pt=0,Ft=0,Lt=0,Dt=0,zt=0,qt=0,Ut=0,Vt=0,Gt=0,Wt=0,Yt=0,Kt=0,Qt=0,Zt=0,Xt=0,$t=0,ar=0,tr=0,rr=0,cr=0,nr=0,ir=0,fr=0,or=0,dr=0,sr=0,br=0,ur=0,lr=0,pr=0,hr=0,mr=0,gr=0,vr=0,yr=0,_r=0,wr=0,Ar=0,kr=0,xr=0,Er=0,Sr=0,Tr=0,jr=0,Cr=0,Rr=0,Or=0,Br=0,Mr=0,Nr=0,Ir=0,Pr=0,Fr=0,Lr=0,Dr=0,zr=0,qr=0,Ur=0,Hr=0,Vr=0,Gr=0,Wr=0,Yr=0,Kr=0,Qr=0,Zr=0,Jr=0,Xr=0,$r=0,ec=0,ac=0,tc=0,rc=0,cc=0,nc=0,ic=0,fc=0,oc=0,dc=0,sc=0,bc=0,uc=0,lc=0,pc=0,hc=0,mc=0,gc=0,vc=0,yc=0,_c=0,wc=0,Ac=0,kc=0,xc=0,Ec=0,Sc=0,Tc=0,jc=0,Cc=0,Rc=0,Oc=0,Bc=0,Mc=0,Nc=0,Ic=0,Pc=0,Fc=0,Lc=0,Dc=0,zc=0,qc=0,Uc=0,Hc=0,Vc=0,Gc=0,Wc=0,Yc=0,Kc=0,Qc=0,Zc=0,Jc=0,Xc=0,$c=0,en=0,an=0,tn=0,rn=0,cn=0,nn=0,fn=0,on=0,dn=0,sn=0,bn=0,un=0,ln=0,pn=0,hn=0,mn=0,gn=0,vn=0,yn=0,_n=0,wn=0,An=0,kn=0,xn=0,En=0,Sn=0,Tn=0,jn=0,Cn=0,Rn=0,On=0,Bn=0,Mn=0,Nn=0,In=0,Pn=0,Fn=0,Ln=0,Dn=0,zn=0,qn=0,Un=0,Hn=0,Vn=0;Vn=p;p=p+39888|0;Bc=Vn+39744|0;Oc=Vn+39672|0;qc=Vn+39608|0;Rc=Vn+39544|0;Mc=Vn+39480|0;Pc=Vn+39352|0;Kr=Vn+39288|0;Yr=Vn+39224|0;Wr=Vn+39160|0;Hr=Vn+39096|0;gc=Vn+39032|0;pc=Vn+38968|0;pn=Vn+38904|0;ln=Vn+38840|0;un=Vn+38776|0;sn=Vn+38712|0;Cn=Vn+38520|0;En=Vn+38328|0;kn=Vn+38264|0;An=Vn+38200|0;bn=Vn+38008|0;Sn=Vn+37816|0;Fn=Vn+37752|0;In=Vn+37688|0;Pn=Vn+37624|0;fn=Vn+37592|0;nn=Vn+37528|0;on=Vn+37464|0;rn=Vn+37432|0;an=Vn+37400|0;tn=Vn+37336|0;Tn=Vn+37272|0;xn=Vn+37208|0;cn=Vn+37144|0;gn=Vn+37080|0;Uc=Vn+37016|0;hn=Vn+36952|0;dn=Vn+36760|0;Wc=Vn+36568|0;mn=Vn+36376|0;zc=Vn+36312|0;Dc=Vn+36248|0;Lc=Vn+36184|0;Fc=Vn+36120|0;Jc=Vn+36056|0;Qc=Vn+35992|0;Kc=Vn+35928|0;Yc=Vn+35864|0;Ic=Vn+35672|0;Zc=Vn+35480|0;Gc=Vn+35288|0;Gr=Vn+35224|0;Vr=Vn+35160|0;qr=Vn+35096|0;zr=Vn+35032|0;vc=Vn+34968|0;lc=Vn+34904|0;bc=Vn+34840|0;sc=Vn+34776|0;Dr=Vn+34584|0;mc=Vn+34392|0;Cc=Vn+34328|0;Tc=Vn+34264|0;jc=Vn+34200|0;Pr=Vn+34168|0;Ir=Vn+34136|0;Lr=Vn+34072|0;Br=Vn+34008|0;jr=Vn+33944|0;Rr=Vn+33880|0;hc=Vn+33816|0;uc=Vn+33752|0;Nr=Vn+33688|0;dc=Vn+33624|0;wr=Vn+33560|0;ec=Vn+33496|0;Fr=Vn+33304|0;kr=Vn+33112|0;ic=Vn+32920|0;Mr=Vn+32888|0;Cr=Vn+32856|0;Or=Vn+32792|0;gr=Vn+32760|0;mr=Vn+32696|0;vr=Vn+32632|0;ur=Vn+32600|0;br=Vn+32568|0;sr=Vn+32504|0;Er=Vn+32440|0;xr=Vn+32376|0;pr=Vn+32312|0;Ar=Vn+32248|0;cr=Vn+32184|0;yr=Vn+32120|0;hr=Vn+31928|0;nr=Vn+31736|0;_r=Vn+31544|0;wn=Vn+31160|0;_n=Vn+30776|0;Dn=Vn+30392|0;yn=Vn+30008|0;vn=Vn+29624|0;Ln=Vn+29240|0;Nn=Vn+28856|0;Vc=Vn+28472|0;Hc=Vn+28088|0;Mn=Vn+27704|0;en=Vn+27320|0;oc=Vn+26936|0;fc=Vn+26552|0;$c=Vn+26168|0;Sc=Vn+25784|0;nc=Vn+25400|0;cc=Vn+25016|0;Ec=Vn+24632|0;rc=Vn+24248|0;tc=Vn+23864|0;xc=Vn+23480|0;ac=Vn+23096|0;$r=Vn+22712|0;Rn=Vn+22328|0;Xr=Vn+21944|0;Jr=Vn+21560|0;Nc=Vn+21176|0;Zr=Vn+20792|0;Qr=Vn+20408|0;kc=Vn+20024|0;Ac=Vn+19640|0;wc=Vn+19256|0;Tr=Vn+18872|0;dr=Vn+18488|0;_c=Vn+18104|0;tr=Vn+17720|0;ar=Vn+17336|0;or=Vn+16952|0;fr=Vn+16568|0;yc=Vn+16184|0;ir=Vn+15800|0;Xc=Vn+15416|0;Un=Vn+15032|0;lr=Vn+14680|0;Mt=Vn+14616|0;Bt=Vn+14552|0;qt=Vn+14488|0;Ot=Vn+14424|0;Nt=Vn+14360|0;Pt=Vn+14296|0;mt=Vn+14232|0;ht=Vn+14168|0;pt=Vn+14104|0;lt=Vn+14040|0;Et=Vn+13976|0;kt=Vn+13912|0;zt=Vn+13848|0;Dt=Vn+13784|0;Lt=Vn+13720|0;Ft=Vn+13656|0;Zt=Vn+13592|0;Kt=Vn+13528|0;Yt=Vn+13464|0;Wt=Vn+13400|0;It=Vn+13208|0;Qt=Vn+13016|0;Gt=Vn+12824|0;Rt=Vn+12760|0;jt=Vn+12696|0;Ct=Vn+12632|0;dt=Vn+12568|0;ot=Vn+12504|0;st=Vn+12440|0;nt=Vn+12376|0;Qa=Vn+12312|0;Za=Vn+12248|0;wt=Vn+12184|0;_t=Vn+12120|0;it=Vn+12056|0;yt=Vn+11992|0;Ta=Vn+11928|0;gt=Vn+11864|0;ft=Vn+11672|0;ja=Vn+11480|0;vt=Vn+11288|0;Vt=Vn+10904|0;Ut=Vn+10520|0;$t=Vn+10136|0;ut=Vn+9752|0;bt=Vn+9368|0;Xt=Vn+8984|0;St=Vn+8600|0;Tt=Vn+8216|0;Sa=Vn+7832|0;Ea=Vn+7440|0;rr=Vn+7056|0;la=Vn+6864|0;wa=Vn+6672|0;da=Vn+6544|0;va=Vn+6416|0;ha=Vn+6288|0;ka=Vn+6096|0;ba=Vn+5904|0;ga=Vn+5872|0;Ka=Vn+5840|0;ct=Vn+5648|0;Va=Vn+5616|0;et=Vn+5584|0;Ya=Vn+5552|0;rt=Vn+5520|0;Ha=Vn+5488|0;$a=Vn+5456|0;Wa=Vn+5424|0;tt=Vn+5392|0;Ua=Vn+5360|0;Xa=Vn+5328|0;Ga=Vn+5296|0;at=Vn+5264|0;qa=Vn+5232|0;Ja=Vn+5200|0;pa=Vn+5168|0;Aa=Vn+5136|0;sa=Vn+5104|0;ya=Vn+5072|0;ua=Vn+5040|0;_a=Vn+5008|0;oa=Vn+4976|0;ma=Vn+4944|0;Sr=Vn+4912|0;jn=Vn+4880|0;Da=Vn+4816|0;La=Vn+4784|0;Fa=Vn+4720|0;Pa=Vn+4656|0;Ia=Vn+4272|0;Na=Vn+4240|0;Ma=Vn+4176|0;Ba=Vn+4144|0;Oa=Vn+4080|0;Ra=Vn+4016|0;Ca=Vn+3632|0;ia=Vn+3600|0;na=Vn+3536|0;ca=Vn+3504|0;ra=Vn+3440|0;ta=Vn+3376|0;aa=Vn+2992|0;ea=Vn+2960|0;$e=Vn+2896|0;Xe=Vn+2864|0;Je=Vn+2800|0;Ze=Vn+2736|0;Qe=Vn+2352|0;Ke=Vn+2320|0;za=Vn+1936|0;Ur=Vn+1904|0;qn=Vn+1760|0;xa=Vn+1376|0;zn=Vn+1024|0;Bn=Vn+896|0;On=Vn+832|0;i=Vn+768|0;f=Vn+640|0;Hn=Vn+288|0;c=Vn+96|0;r=Vn;Ye=r;Ge=a;We=Ye+96|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(c|0,t|0,192)|0;Jt(Oc,r);ef(Bc,c);t=n[Oc>>2]|0;Ye=i;Ge=Oc+8|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=n[Bc>>2]|0;Ye=f;Ge=Bc+8|0;We=Ye+128|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));if((t|0)==0|(a|0)==0){Zo(Hn|0,0,352)|0;Mn=-980480611;Pn=-748862579;In=-171504835;Ln=175696680;Fn=2021213740;zn=1718526831;Dn=-1710760145;qn=235567041;Un=e;Nn=Un;n[Nn>>2]=Mn;Un=Un+4|0;n[Un>>2]=Pn;Un=e+8|0;Pn=Un;n[Pn>>2]=In;Un=Un+4|0;n[Un>>2]=Ln;Un=e+16|0;Ln=Un;n[Ln>>2]=Fn;Un=Un+4|0;n[Un>>2]=zn;Un=e+24|0;zn=Un;n[zn>>2]=Dn;Un=Un+4|0;n[Un>>2]=qn;e=e+32|0;ad(e|0,Hn|0,352)|0;p=Vn;return}Ye=Bn;Ge=f;We=Ye+128|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=On;Ge=i;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=ct;Ge=f;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ue=Bn+64|0;qe=ct+64|0;Ye=qe;Ge=Ue;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=ct+128|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=ct+136|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=ct+144|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=ct+152|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;a=ct+160|0;n[a>>2]=0;n[a+4>>2]=0;n[a+8>>2]=0;n[a+12>>2]=0;n[a+16>>2]=0;n[a+20>>2]=0;n[a+24>>2]=0;n[a+28>>2]=0;a=At(19584,8,Bc)|0;if(!a)Ht(Bc);n[Ka>>2]=a;He=Ka+4|0;n[He>>2]=102;Ve=Ka+8|0;n[Ve>>2]=0;le=ga;n[le>>2]=-1099547736;n[le+4>>2]=-1652985799;le=ga+8|0;n[le>>2]=1;n[le+4>>2]=0;le=ga+16|0;n[le>>2]=0;n[le+4>>2]=0;n[le+8>>2]=0;n[le+12>>2]=0;le=Sc+8|0;pe=Sc+16|0;he=Sc+24|0;Re=gt+32|0;Le=fc+8|0;Ne=fc+16|0;Pe=fc+24|0;se=ft+32|0;i=ct+128|0;ke=oc+32|0;x=en+32|0;ne=Za+32|0;Ce=Ln+32|0;C=vn+32|0;oe=wt+32|0;s=dt+8|0;u=dt+16|0;h=dt+24|0;N=dt+32|0;P=dt+40|0;L=dt+48|0;z=dt+56|0;Oe=_r+32|0;R=nr+32|0;de=Rt+32|0;Be=pr+32|0;O=xr+32|0;be=jt+32|0;Me=vr+32|0;B=mr+32|0;ue=Yt+32|0;q=kr+8|0;U=kr+16|0;H=kr+24|0;De=ec+8|0;Ie=ec+16|0;Fe=ec+24|0;Y=Wt+32|0;ve=wr+32|0;v=dc+32|0;K=Dt+32|0;ye=jr+32|0;y=Br+32|0;Q=Et+32|0;_e=Tc+32|0;_=Cc+32|0;Z=Ft+32|0;we=lc+32|0;w=vc+32|0;J=ht+32|0;Ae=Gc+32|0;A=Zc+32|0;$=Mt+32|0;xe=Jc+32|0;k=Fc+32|0;te=fr+32|0;Ee=Wc+32|0;E=dn+32|0;ce=yc+32|0;Se=xn+32|0;S=Tn+32|0;ie=Xc+32|0;d=Ac+8|0;b=Ac+16|0;l=Ac+24|0;M=Ac+32|0;I=Ac+40|0;F=Ac+48|0;D=Ac+56|0;G=nn+32|0;V=Qr+32|0;Te=In+32|0;j=Fn+32|0;fe=Jr+32|0;ge=ac+32|0;g=xc+32|0;W=Nc+32|0;f=ba+64|0;o=ba+128|0;ze=0;a=256;e:while(1){while(1){a=a+-1|0;if(a>>>0>255){a=10;break e}r=ga+(a>>>6<<3)|0;We=n[r>>2]|0;r=n[r+4>>2]|0;Ye=nd(1,0,a&63|0)|0;r=(We&Ye|0)!=0|(r&T|0)!=0;if(!ze)break;Ye=Ta;Ge=ct;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=yt;Ge=qe;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;re(13,gt|0,Ta|0,yt|0);Ye=m;m=0;if(Ye&1){a=5;break e}n[nc>>2]=n[gt>>2];n[nc+4>>2]=n[gt+4>>2];n[nc+8>>2]=n[gt+8>>2];n[nc+12>>2]=n[gt+12>>2];n[nc+16>>2]=n[gt+16>>2];n[nc+20>>2]=n[gt+20>>2];n[nc+24>>2]=n[gt+24>>2];n[nc+28>>2]=n[gt+28>>2];Ye=Sc;n[Ye>>2]=1325794674;n[Ye+4>>2]=-2017531950;Ye=le;n[Ye>>2]=790391525;n[Ye+4>>2]=-788714787;Ye=pe;n[Ye>>2]=-50507964;n[Ye+4>>2]=-1889569646;Ye=he;n[Ye>>2]=1033682860;n[Ye+4>>2]=523723546;m=0;X(1,nc|0,Sc|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=5;break e}n[ft>>2]=n[nc>>2];n[ft+4>>2]=n[nc+4>>2];n[ft+8>>2]=n[nc+8>>2];n[ft+12>>2]=n[nc+12>>2];n[ft+16>>2]=n[nc+16>>2];n[ft+20>>2]=n[nc+20>>2];n[ft+24>>2]=n[nc+24>>2];n[ft+28>>2]=n[nc+28>>2];n[$c>>2]=n[Re>>2];n[$c+4>>2]=n[Re+4>>2];n[$c+8>>2]=n[Re+8>>2];n[$c+12>>2]=n[Re+12>>2];n[$c+16>>2]=n[Re+16>>2];n[$c+20>>2]=n[Re+20>>2];n[$c+24>>2]=n[Re+24>>2];n[$c+28>>2]=n[Re+28>>2];Ye=fc;n[Ye>>2]=1325794674;n[Ye+4>>2]=-2017531950;Ye=Le;n[Ye>>2]=790391525;n[Ye+4>>2]=-788714787;Ye=Ne;n[Ye>>2]=-50507964;n[Ye+4>>2]=-1889569646;Ye=Pe;n[Ye>>2]=1033682860;n[Ye+4>>2]=523723546;m=0;X(1,$c|0,fc|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[$c>>2];n[Ur+4>>2]=n[$c+4>>2];n[Ur+8>>2]=n[$c+8>>2];n[Ur+12>>2]=n[$c+12>>2];n[Ur+16>>2]=n[$c+16>>2];n[Ur+20>>2]=n[$c+20>>2];n[Ur+24>>2]=n[$c+24>>2];n[Ur+28>>2]=n[$c+28>>2];n[se>>2]=n[Ur>>2];n[se+4>>2]=n[Ur+4>>2];n[se+8>>2]=n[Ur+8>>2];n[se+12>>2]=n[Ur+12>>2];n[se+16>>2]=n[Ur+16>>2];n[se+20>>2]=n[Ur+20>>2];n[se+24>>2]=n[Ur+24>>2];n[se+28>>2]=n[Ur+28>>2];m=0;ae(17,it|0,qe|0);Ye=m;m=0;if(Ye&1){a=5;break e}m=0;ae(17,_t|0,i|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=Qa;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=nt;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=oc;Ge=Qa;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=en;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Mn>>2]=n[Qa>>2];n[Mn+4>>2]=n[Qa+4>>2];n[Mn+8>>2]=n[Qa+8>>2];n[Mn+12>>2]=n[Qa+12>>2];n[Mn+16>>2]=n[Qa+16>>2];n[Mn+20>>2]=n[Qa+20>>2];n[Mn+24>>2]=n[Qa+24>>2];n[Mn+28>>2]=n[Qa+28>>2];n[Hc>>2]=n[nt>>2];n[Hc+4>>2]=n[nt+4>>2];n[Hc+8>>2]=n[nt+8>>2];n[Hc+12>>2]=n[nt+12>>2];n[Hc+16>>2]=n[nt+16>>2];n[Hc+20>>2]=n[nt+20>>2];n[Hc+24>>2]=n[nt+24>>2];n[Hc+28>>2]=n[nt+28>>2];m=0;re(14,Mn|0,Hc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Za>>2]=n[Mn>>2];n[Za+4>>2]=n[Mn+4>>2];n[Za+8>>2]=n[Mn+8>>2];n[Za+12>>2]=n[Mn+12>>2];n[Za+16>>2]=n[Mn+16>>2];n[Za+20>>2]=n[Mn+20>>2];n[Za+24>>2]=n[Mn+24>>2];n[Za+28>>2]=n[Mn+28>>2];n[Vc>>2]=n[ke>>2];n[Vc+4>>2]=n[ke+4>>2];n[Vc+8>>2]=n[ke+8>>2];n[Vc+12>>2]=n[ke+12>>2];n[Vc+16>>2]=n[ke+16>>2];n[Vc+20>>2]=n[ke+20>>2];n[Vc+24>>2]=n[ke+24>>2];n[Vc+28>>2]=n[ke+28>>2];n[Nn>>2]=n[x>>2];n[Nn+4>>2]=n[x+4>>2];n[Nn+8>>2]=n[x+8>>2];n[Nn+12>>2]=n[x+12>>2];n[Nn+16>>2]=n[x+16>>2];n[Nn+20>>2]=n[x+20>>2];n[Nn+24>>2]=n[x+24>>2];n[Nn+28>>2]=n[x+28>>2];m=0;re(14,Vc|0,Nn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Vc>>2];n[Ur+4>>2]=n[Vc+4>>2];n[Ur+8>>2]=n[Vc+8>>2];n[Ur+12>>2]=n[Vc+12>>2];n[Ur+16>>2]=n[Vc+16>>2];n[Ur+20>>2]=n[Vc+20>>2];n[Ur+24>>2]=n[Vc+24>>2];n[Ur+28>>2]=n[Vc+28>>2];n[ne>>2]=n[Ur>>2];n[ne+4>>2]=n[Ur+4>>2];n[ne+8>>2]=n[Ur+8>>2];n[ne+12>>2]=n[Ur+12>>2];n[ne+16>>2]=n[Ur+16>>2];n[ne+20>>2]=n[Ur+20>>2];n[ne+24>>2]=n[Ur+24>>2];n[ne+28>>2]=n[Ur+28>>2];Ye=st;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Ln;Ge=Za;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vn;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[yn>>2]=n[Za>>2];n[yn+4>>2]=n[Za+4>>2];n[yn+8>>2]=n[Za+8>>2];n[yn+12>>2]=n[Za+12>>2];n[yn+16>>2]=n[Za+16>>2];n[yn+20>>2]=n[Za+20>>2];n[yn+24>>2]=n[Za+24>>2];n[yn+28>>2]=n[Za+28>>2];n[Dn>>2]=n[st>>2];n[Dn+4>>2]=n[st+4>>2];n[Dn+8>>2]=n[st+8>>2];n[Dn+12>>2]=n[st+12>>2];n[Dn+16>>2]=n[st+16>>2];n[Dn+20>>2]=n[st+20>>2];n[Dn+24>>2]=n[st+24>>2];n[Dn+28>>2]=n[st+28>>2];m=0;re(14,yn|0,Dn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[wt>>2]=n[yn>>2];n[wt+4>>2]=n[yn+4>>2];n[wt+8>>2]=n[yn+8>>2];n[wt+12>>2]=n[yn+12>>2];n[wt+16>>2]=n[yn+16>>2];n[wt+20>>2]=n[yn+20>>2];n[wt+24>>2]=n[yn+24>>2];n[wt+28>>2]=n[yn+28>>2];n[_n>>2]=n[Ce>>2];n[_n+4>>2]=n[Ce+4>>2];n[_n+8>>2]=n[Ce+8>>2];n[_n+12>>2]=n[Ce+12>>2];n[_n+16>>2]=n[Ce+16>>2];n[_n+20>>2]=n[Ce+20>>2];n[_n+24>>2]=n[Ce+24>>2];n[_n+28>>2]=n[Ce+28>>2];n[wn>>2]=n[C>>2];n[wn+4>>2]=n[C+4>>2];n[wn+8>>2]=n[C+8>>2];n[wn+12>>2]=n[C+12>>2];n[wn+16>>2]=n[C+16>>2];n[wn+20>>2]=n[C+20>>2];n[wn+24>>2]=n[C+24>>2];n[wn+28>>2]=n[C+28>>2];m=0;re(14,_n|0,wn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[_n>>2];n[Ur+4>>2]=n[_n+4>>2];n[Ur+8>>2]=n[_n+8>>2];n[Ur+12>>2]=n[_n+12>>2];n[Ur+16>>2]=n[_n+16>>2];n[Ur+20>>2]=n[_n+20>>2];n[Ur+24>>2]=n[_n+24>>2];n[Ur+28>>2]=n[_n+28>>2];n[oe>>2]=n[Ur>>2];n[oe+4>>2]=n[Ur+4>>2];n[oe+8>>2]=n[Ur+8>>2];n[oe+12>>2]=n[Ur+12>>2];n[oe+16>>2]=n[Ur+16>>2];n[oe+20>>2]=n[Ur+20>>2];n[oe+24>>2]=n[Ur+24>>2];n[oe+28>>2]=n[Ur+28>>2];Ye=dt;n[Ye>>2]=2008548008;n[Ye+4>>2]=1006188771;Ye=s;n[Ye>>2]=909333341;n[Ye+4>>2]=34282279;Ye=u;n[Ye>>2]=1232425568;n[Ye+4>>2]=649588208;Ye=h;n[Ye>>2]=1132767341;n[Ye+4>>2]=622118450;Ye=N;n[Ye>>2]=-774045849;n[Ye+4>>2]=954723532;Ye=P;n[Ye>>2]=-1815212738;n[Ye+4>>2]=1710273405;Ye=L;n[Ye>>2]=581697706;n[Ye+4>>2]=-683028259;Ye=z;n[Ye>>2]=1248365901;n[Ye+4>>2]=21084622;Ye=Ct;Ge=wt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;re(13,ot|0,dt|0,Ct|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=Gt;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Qt;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=_r;Ge=Gt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=nr;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[hr>>2]=n[Gt>>2];n[hr+4>>2]=n[Gt+4>>2];n[hr+8>>2]=n[Gt+8>>2];n[hr+12>>2]=n[Gt+12>>2];n[hr+16>>2]=n[Gt+16>>2];n[hr+20>>2]=n[Gt+20>>2];n[hr+24>>2]=n[Gt+24>>2];n[hr+28>>2]=n[Gt+28>>2];n[yr>>2]=n[Qt>>2];n[yr+4>>2]=n[Qt+4>>2];n[yr+8>>2]=n[Qt+8>>2];n[yr+12>>2]=n[Qt+12>>2];n[yr+16>>2]=n[Qt+16>>2];n[yr+20>>2]=n[Qt+20>>2];n[yr+24>>2]=n[Qt+24>>2];n[yr+28>>2]=n[Qt+28>>2];m=0;re(14,hr|0,yr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Rt>>2]=n[hr>>2];n[Rt+4>>2]=n[hr+4>>2];n[Rt+8>>2]=n[hr+8>>2];n[Rt+12>>2]=n[hr+12>>2];n[Rt+16>>2]=n[hr+16>>2];n[Rt+20>>2]=n[hr+20>>2];n[Rt+24>>2]=n[hr+24>>2];n[Rt+28>>2]=n[hr+28>>2];n[cr>>2]=n[Oe>>2];n[cr+4>>2]=n[Oe+4>>2];n[cr+8>>2]=n[Oe+8>>2];n[cr+12>>2]=n[Oe+12>>2];n[cr+16>>2]=n[Oe+16>>2];n[cr+20>>2]=n[Oe+20>>2];n[cr+24>>2]=n[Oe+24>>2];n[cr+28>>2]=n[Oe+28>>2];n[Ar>>2]=n[R>>2];n[Ar+4>>2]=n[R+4>>2];n[Ar+8>>2]=n[R+8>>2];n[Ar+12>>2]=n[R+12>>2];n[Ar+16>>2]=n[R+16>>2];n[Ar+20>>2]=n[R+20>>2];n[Ar+24>>2]=n[R+24>>2];n[Ar+28>>2]=n[R+28>>2];m=0;re(14,cr|0,Ar|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[cr>>2];n[Ur+4>>2]=n[cr+4>>2];n[Ur+8>>2]=n[cr+8>>2];n[Ur+12>>2]=n[cr+12>>2];n[Ur+16>>2]=n[cr+16>>2];n[Ur+20>>2]=n[cr+20>>2];n[Ur+24>>2]=n[cr+24>>2];n[Ur+28>>2]=n[cr+28>>2];n[de>>2]=n[Ur>>2];n[de+4>>2]=n[Ur+4>>2];n[de+8>>2]=n[Ur+8>>2];n[de+12>>2]=n[Ur+12>>2];n[de+16>>2]=n[Ur+16>>2];n[de+20>>2]=n[Ur+20>>2];n[de+24>>2]=n[Ur+24>>2];n[de+28>>2]=n[Ur+28>>2];Ye=It;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=pr;Ge=Rt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=xr;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Er>>2]=n[Rt>>2];n[Er+4>>2]=n[Rt+4>>2];n[Er+8>>2]=n[Rt+8>>2];n[Er+12>>2]=n[Rt+12>>2];n[Er+16>>2]=n[Rt+16>>2];n[Er+20>>2]=n[Rt+20>>2];n[Er+24>>2]=n[Rt+24>>2];n[Er+28>>2]=n[Rt+28>>2];n[sr>>2]=n[It>>2];n[sr+4>>2]=n[It+4>>2];n[sr+8>>2]=n[It+8>>2];n[sr+12>>2]=n[It+12>>2];n[sr+16>>2]=n[It+16>>2];n[sr+20>>2]=n[It+20>>2];n[sr+24>>2]=n[It+24>>2];n[sr+28>>2]=n[It+28>>2];m=0;re(14,Er|0,sr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[jt>>2]=n[Er>>2];n[jt+4>>2]=n[Er+4>>2];n[jt+8>>2]=n[Er+8>>2];n[jt+12>>2]=n[Er+12>>2];n[jt+16>>2]=n[Er+16>>2];n[jt+20>>2]=n[Er+20>>2];n[jt+24>>2]=n[Er+24>>2];n[jt+28>>2]=n[Er+28>>2];n[br>>2]=n[Be>>2];n[br+4>>2]=n[Be+4>>2];n[br+8>>2]=n[Be+8>>2];n[br+12>>2]=n[Be+12>>2];n[br+16>>2]=n[Be+16>>2];n[br+20>>2]=n[Be+20>>2];n[br+24>>2]=n[Be+24>>2];n[br+28>>2]=n[Be+28>>2];n[ur>>2]=n[O>>2];n[ur+4>>2]=n[O+4>>2];n[ur+8>>2]=n[O+8>>2];n[ur+12>>2]=n[O+12>>2];n[ur+16>>2]=n[O+16>>2];n[ur+20>>2]=n[O+20>>2];n[ur+24>>2]=n[O+24>>2];n[ur+28>>2]=n[O+28>>2];m=0;re(14,br|0,ur|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[br>>2];n[Ur+4>>2]=n[br+4>>2];n[Ur+8>>2]=n[br+8>>2];n[Ur+12>>2]=n[br+12>>2];n[Ur+16>>2]=n[br+16>>2];n[Ur+20>>2]=n[br+20>>2];n[Ur+24>>2]=n[br+24>>2];n[Ur+28>>2]=n[br+28>>2];n[be>>2]=n[Ur>>2];n[be+4>>2]=n[Ur+4>>2];n[be+8>>2]=n[Ur+8>>2];n[be+12>>2]=n[Ur+12>>2];n[be+16>>2]=n[Ur+16>>2];n[be+20>>2]=n[Ur+20>>2];n[be+24>>2]=n[Ur+24>>2];n[be+28>>2]=n[Ur+28>>2];Ye=Kt;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Zt;Ge=jt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vr;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=mr;Ge=jt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[gr>>2]=n[Kt>>2];n[gr+4>>2]=n[Kt+4>>2];n[gr+8>>2]=n[Kt+8>>2];n[gr+12>>2]=n[Kt+12>>2];n[gr+16>>2]=n[Kt+16>>2];n[gr+20>>2]=n[Kt+20>>2];n[gr+24>>2]=n[Kt+24>>2];n[gr+28>>2]=n[Kt+28>>2];n[Or>>2]=n[Zt>>2];n[Or+4>>2]=n[Zt+4>>2];n[Or+8>>2]=n[Zt+8>>2];n[Or+12>>2]=n[Zt+12>>2];n[Or+16>>2]=n[Zt+16>>2];n[Or+20>>2]=n[Zt+20>>2];n[Or+24>>2]=n[Zt+24>>2];n[Or+28>>2]=n[Zt+28>>2];m=0;re(14,gr|0,Or|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Yt>>2]=n[gr>>2];n[Yt+4>>2]=n[gr+4>>2];n[Yt+8>>2]=n[gr+8>>2];n[Yt+12>>2]=n[gr+12>>2];n[Yt+16>>2]=n[gr+16>>2];n[Yt+20>>2]=n[gr+20>>2];n[Yt+24>>2]=n[gr+24>>2];n[Yt+28>>2]=n[gr+28>>2];n[Cr>>2]=n[Me>>2];n[Cr+4>>2]=n[Me+4>>2];n[Cr+8>>2]=n[Me+8>>2];n[Cr+12>>2]=n[Me+12>>2];n[Cr+16>>2]=n[Me+16>>2];n[Cr+20>>2]=n[Me+20>>2];n[Cr+24>>2]=n[Me+24>>2];n[Cr+28>>2]=n[Me+28>>2];n[Mr>>2]=n[B>>2];n[Mr+4>>2]=n[B+4>>2];n[Mr+8>>2]=n[B+8>>2];n[Mr+12>>2]=n[B+12>>2];n[Mr+16>>2]=n[B+16>>2];n[Mr+20>>2]=n[B+20>>2];n[Mr+24>>2]=n[B+24>>2];n[Mr+28>>2]=n[B+28>>2];m=0;re(14,Cr|0,Mr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Cr>>2];n[Ur+4>>2]=n[Cr+4>>2];n[Ur+8>>2]=n[Cr+8>>2];n[Ur+12>>2]=n[Cr+12>>2];n[Ur+16>>2]=n[Cr+16>>2];n[Ur+20>>2]=n[Cr+20>>2];n[Ur+24>>2]=n[Cr+24>>2];n[Ur+28>>2]=n[Cr+28>>2];n[ue>>2]=n[Ur>>2];n[ue+4>>2]=n[Ur+4>>2];n[ue+8>>2]=n[Ur+8>>2];n[ue+12>>2]=n[Ur+12>>2];n[ue+16>>2]=n[Ur+16>>2];n[ue+20>>2]=n[Ur+20>>2];n[ue+24>>2]=n[Ur+24>>2];n[ue+28>>2]=n[Ur+28>>2];n[ic>>2]=n[Yt>>2];n[ic+4>>2]=n[Yt+4>>2];n[ic+8>>2]=n[Yt+8>>2];n[ic+12>>2]=n[Yt+12>>2];n[ic+16>>2]=n[Yt+16>>2];n[ic+20>>2]=n[Yt+20>>2];n[ic+24>>2]=n[Yt+24>>2];n[ic+28>>2]=n[Yt+28>>2];Ye=kr;n[Ye>>2]=1325794674;n[Ye+4>>2]=-2017531950;Ye=q;n[Ye>>2]=790391525;n[Ye+4>>2]=-788714787;Ye=U;n[Ye>>2]=-50507964;n[Ye+4>>2]=-1889569646;Ye=H;n[Ye>>2]=1033682860;n[Ye+4>>2]=523723546;m=0;X(1,ic|0,kr|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=5;break e}n[Wt>>2]=n[ic>>2];n[Wt+4>>2]=n[ic+4>>2];n[Wt+8>>2]=n[ic+8>>2];n[Wt+12>>2]=n[ic+12>>2];n[Wt+16>>2]=n[ic+16>>2];n[Wt+20>>2]=n[ic+20>>2];n[Wt+24>>2]=n[ic+24>>2];n[Wt+28>>2]=n[ic+28>>2];n[Fr>>2]=n[ue>>2];n[Fr+4>>2]=n[ue+4>>2];n[Fr+8>>2]=n[ue+8>>2];n[Fr+12>>2]=n[ue+12>>2];n[Fr+16>>2]=n[ue+16>>2];n[Fr+20>>2]=n[ue+20>>2];n[Fr+24>>2]=n[ue+24>>2];n[Fr+28>>2]=n[ue+28>>2];Ye=ec;n[Ye>>2]=1325794674;n[Ye+4>>2]=-2017531950;Ye=De;n[Ye>>2]=790391525;n[Ye+4>>2]=-788714787;Ye=Ie;n[Ye>>2]=-50507964;n[Ye+4>>2]=-1889569646;Ye=Fe;n[Ye>>2]=1033682860;n[Ye+4>>2]=523723546;m=0;X(1,Fr|0,ec|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Fr>>2];n[Ur+4>>2]=n[Fr+4>>2];n[Ur+8>>2]=n[Fr+8>>2];n[Ur+12>>2]=n[Fr+12>>2];n[Ur+16>>2]=n[Fr+16>>2];n[Ur+20>>2]=n[Fr+20>>2];n[Ur+24>>2]=n[Fr+24>>2];n[Ur+28>>2]=n[Fr+28>>2];n[Y>>2]=n[Ur>>2];n[Y+4>>2]=n[Ur+4>>2];n[Y+8>>2]=n[Ur+8>>2];n[Y+12>>2]=n[Ur+12>>2];n[Y+16>>2]=n[Ur+16>>2];n[Y+20>>2]=n[Ur+20>>2];n[Y+24>>2]=n[Ur+24>>2];n[Y+28>>2]=n[Ur+28>>2];Ye=zt;Ge=qe;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=kt;Ge=i;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=wr;Ge=qe;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=dc;Ge=i;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Nr>>2]=n[zt>>2];n[Nr+4>>2]=n[zt+4>>2];n[Nr+8>>2]=n[zt+8>>2];n[Nr+12>>2]=n[zt+12>>2];n[Nr+16>>2]=n[zt+16>>2];n[Nr+20>>2]=n[zt+20>>2];n[Nr+24>>2]=n[zt+24>>2];n[Nr+28>>2]=n[zt+28>>2];n[uc>>2]=n[kt>>2];n[uc+4>>2]=n[kt+4>>2];n[uc+8>>2]=n[kt+8>>2];n[uc+12>>2]=n[kt+12>>2];n[uc+16>>2]=n[kt+16>>2];n[uc+20>>2]=n[kt+20>>2];n[uc+24>>2]=n[kt+24>>2];n[uc+28>>2]=n[kt+28>>2];m=0;re(14,Nr|0,uc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Dt>>2]=n[Nr>>2];n[Dt+4>>2]=n[Nr+4>>2];n[Dt+8>>2]=n[Nr+8>>2];n[Dt+12>>2]=n[Nr+12>>2];n[Dt+16>>2]=n[Nr+16>>2];n[Dt+20>>2]=n[Nr+20>>2];n[Dt+24>>2]=n[Nr+24>>2];n[Dt+28>>2]=n[Nr+28>>2];n[hc>>2]=n[ve>>2];n[hc+4>>2]=n[ve+4>>2];n[hc+8>>2]=n[ve+8>>2];n[hc+12>>2]=n[ve+12>>2];n[hc+16>>2]=n[ve+16>>2];n[hc+20>>2]=n[ve+20>>2];n[hc+24>>2]=n[ve+24>>2];n[hc+28>>2]=n[ve+28>>2];n[Rr>>2]=n[v>>2];n[Rr+4>>2]=n[v+4>>2];n[Rr+8>>2]=n[v+8>>2];n[Rr+12>>2]=n[v+12>>2];n[Rr+16>>2]=n[v+16>>2];n[Rr+20>>2]=n[v+20>>2];n[Rr+24>>2]=n[v+24>>2];n[Rr+28>>2]=n[v+28>>2];m=0;re(14,hc|0,Rr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[hc>>2];n[Ur+4>>2]=n[hc+4>>2];n[Ur+8>>2]=n[hc+8>>2];n[Ur+12>>2]=n[hc+12>>2];n[Ur+16>>2]=n[hc+16>>2];n[Ur+20>>2]=n[hc+20>>2];n[Ur+24>>2]=n[hc+24>>2];n[Ur+28>>2]=n[hc+28>>2];n[K>>2]=n[Ur>>2];n[K+4>>2]=n[Ur+4>>2];n[K+8>>2]=n[Ur+8>>2];n[K+12>>2]=n[Ur+12>>2];n[K+16>>2]=n[Ur+16>>2];n[K+20>>2]=n[Ur+20>>2];n[K+24>>2]=n[Ur+24>>2];n[K+28>>2]=n[Ur+28>>2];m=0;ae(17,Lt|0,Dt|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=lt;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=pt;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=jr;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Br;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Lr>>2]=n[lt>>2];n[Lr+4>>2]=n[lt+4>>2];n[Lr+8>>2]=n[lt+8>>2];n[Lr+12>>2]=n[lt+12>>2];n[Lr+16>>2]=n[lt+16>>2];n[Lr+20>>2]=n[lt+20>>2];n[Lr+24>>2]=n[lt+24>>2];n[Lr+28>>2]=n[lt+28>>2];n[Ir>>2]=n[pt>>2];n[Ir+4>>2]=n[pt+4>>2];n[Ir+8>>2]=n[pt+8>>2];n[Ir+12>>2]=n[pt+12>>2];n[Ir+16>>2]=n[pt+16>>2];n[Ir+20>>2]=n[pt+20>>2];n[Ir+24>>2]=n[pt+24>>2];n[Ir+28>>2]=n[pt+28>>2];m=0;re(14,Lr|0,Ir|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Et>>2]=n[Lr>>2];n[Et+4>>2]=n[Lr+4>>2];n[Et+8>>2]=n[Lr+8>>2];n[Et+12>>2]=n[Lr+12>>2];n[Et+16>>2]=n[Lr+16>>2];n[Et+20>>2]=n[Lr+20>>2];n[Et+24>>2]=n[Lr+24>>2];n[Et+28>>2]=n[Lr+28>>2];n[Pr>>2]=n[ye>>2];n[Pr+4>>2]=n[ye+4>>2];n[Pr+8>>2]=n[ye+8>>2];n[Pr+12>>2]=n[ye+12>>2];n[Pr+16>>2]=n[ye+16>>2];n[Pr+20>>2]=n[ye+20>>2];n[Pr+24>>2]=n[ye+24>>2];n[Pr+28>>2]=n[ye+28>>2];n[jc>>2]=n[y>>2];n[jc+4>>2]=n[y+4>>2];n[jc+8>>2]=n[y+8>>2];n[jc+12>>2]=n[y+12>>2];n[jc+16>>2]=n[y+16>>2];n[jc+20>>2]=n[y+20>>2];n[jc+24>>2]=n[y+24>>2];n[jc+28>>2]=n[y+28>>2];m=0;re(14,Pr|0,jc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Pr>>2];n[Ur+4>>2]=n[Pr+4>>2];n[Ur+8>>2]=n[Pr+8>>2];n[Ur+12>>2]=n[Pr+12>>2];n[Ur+16>>2]=n[Pr+16>>2];n[Ur+20>>2]=n[Pr+20>>2];n[Ur+24>>2]=n[Pr+24>>2];n[Ur+28>>2]=n[Pr+28>>2];n[Q>>2]=n[Ur>>2];n[Q+4>>2]=n[Ur+4>>2];n[Q+8>>2]=n[Ur+8>>2];n[Q+12>>2]=n[Ur+12>>2];n[Q+16>>2]=n[Ur+16>>2];n[Q+20>>2]=n[Ur+20>>2];n[Q+24>>2]=n[Ur+24>>2];n[Q+28>>2]=n[Ur+28>>2];Ye=Tc;Ge=Lt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Cc;Ge=Et;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[mc>>2]=n[Lt>>2];n[mc+4>>2]=n[Lt+4>>2];n[mc+8>>2]=n[Lt+8>>2];n[mc+12>>2]=n[Lt+12>>2];n[mc+16>>2]=n[Lt+16>>2];n[mc+20>>2]=n[Lt+20>>2];n[mc+24>>2]=n[Lt+24>>2];n[mc+28>>2]=n[Lt+28>>2];n[Dr>>2]=n[Et>>2];n[Dr+4>>2]=n[Et+4>>2];n[Dr+8>>2]=n[Et+8>>2];n[Dr+12>>2]=n[Et+12>>2];n[Dr+16>>2]=n[Et+16>>2];n[Dr+20>>2]=n[Et+20>>2];n[Dr+24>>2]=n[Et+24>>2];n[Dr+28>>2]=n[Et+28>>2];m=0;re(15,mc|0,Dr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ft>>2]=n[mc>>2];n[Ft+4>>2]=n[mc+4>>2];n[Ft+8>>2]=n[mc+8>>2];n[Ft+12>>2]=n[mc+12>>2];n[Ft+16>>2]=n[mc+16>>2];n[Ft+20>>2]=n[mc+20>>2];n[Ft+24>>2]=n[mc+24>>2];n[Ft+28>>2]=n[mc+28>>2];n[sc>>2]=n[_e>>2];n[sc+4>>2]=n[_e+4>>2];n[sc+8>>2]=n[_e+8>>2];n[sc+12>>2]=n[_e+12>>2];n[sc+16>>2]=n[_e+16>>2];n[sc+20>>2]=n[_e+20>>2];n[sc+24>>2]=n[_e+24>>2];n[sc+28>>2]=n[_e+28>>2];n[bc>>2]=n[_>>2];n[bc+4>>2]=n[_+4>>2];n[bc+8>>2]=n[_+8>>2];n[bc+12>>2]=n[_+12>>2];n[bc+16>>2]=n[_+16>>2];n[bc+20>>2]=n[_+20>>2];n[bc+24>>2]=n[_+24>>2];n[bc+28>>2]=n[_+28>>2];m=0;re(15,sc|0,bc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[sc>>2];n[Ur+4>>2]=n[sc+4>>2];n[Ur+8>>2]=n[sc+8>>2];n[Ur+12>>2]=n[sc+12>>2];n[Ur+16>>2]=n[sc+16>>2];n[Ur+20>>2]=n[sc+20>>2];n[Ur+24>>2]=n[sc+24>>2];n[Ur+28>>2]=n[sc+28>>2];n[Z>>2]=n[Ur>>2];n[Z+4>>2]=n[Ur+4>>2];n[Z+8>>2]=n[Ur+8>>2];n[Z+12>>2]=n[Ur+12>>2];n[Z+16>>2]=n[Ur+16>>2];n[Z+20>>2]=n[Ur+20>>2];n[Z+24>>2]=n[Ur+24>>2];n[Z+28>>2]=n[Ur+28>>2];Ye=mt;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Pt;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=lc;Ge=ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vc;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[zr>>2]=n[mt>>2];n[zr+4>>2]=n[mt+4>>2];n[zr+8>>2]=n[mt+8>>2];n[zr+12>>2]=n[mt+12>>2];n[zr+16>>2]=n[mt+16>>2];n[zr+20>>2]=n[mt+20>>2];n[zr+24>>2]=n[mt+24>>2];n[zr+28>>2]=n[mt+28>>2];n[qr>>2]=n[Pt>>2];n[qr+4>>2]=n[Pt+4>>2];n[qr+8>>2]=n[Pt+8>>2];n[qr+12>>2]=n[Pt+12>>2];n[qr+16>>2]=n[Pt+16>>2];n[qr+20>>2]=n[Pt+20>>2];n[qr+24>>2]=n[Pt+24>>2];n[qr+28>>2]=n[Pt+28>>2];m=0;re(15,zr|0,qr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[ht>>2]=n[zr>>2];n[ht+4>>2]=n[zr+4>>2];n[ht+8>>2]=n[zr+8>>2];n[ht+12>>2]=n[zr+12>>2];n[ht+16>>2]=n[zr+16>>2];n[ht+20>>2]=n[zr+20>>2];n[ht+24>>2]=n[zr+24>>2];n[ht+28>>2]=n[zr+28>>2];n[Vr>>2]=n[we>>2];n[Vr+4>>2]=n[we+4>>2];n[Vr+8>>2]=n[we+8>>2];n[Vr+12>>2]=n[we+12>>2];n[Vr+16>>2]=n[we+16>>2];n[Vr+20>>2]=n[we+20>>2];n[Vr+24>>2]=n[we+24>>2];n[Vr+28>>2]=n[we+28>>2];n[Gr>>2]=n[w>>2];n[Gr+4>>2]=n[w+4>>2];n[Gr+8>>2]=n[w+8>>2];n[Gr+12>>2]=n[w+12>>2];n[Gr+16>>2]=n[w+16>>2];n[Gr+20>>2]=n[w+20>>2];n[Gr+24>>2]=n[w+24>>2];n[Gr+28>>2]=n[w+28>>2];m=0;re(15,Vr|0,Gr|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Vr>>2];n[Ur+4>>2]=n[Vr+4>>2];n[Ur+8>>2]=n[Vr+8>>2];n[Ur+12>>2]=n[Vr+12>>2];n[Ur+16>>2]=n[Vr+16>>2];n[Ur+20>>2]=n[Vr+20>>2];n[Ur+24>>2]=n[Vr+24>>2];n[Ur+28>>2]=n[Vr+28>>2];n[J>>2]=n[Ur>>2];n[J+4>>2]=n[Ur+4>>2];n[J+8>>2]=n[Ur+8>>2];n[J+12>>2]=n[Ur+12>>2];n[J+16>>2]=n[Ur+16>>2];n[J+20>>2]=n[Ur+20>>2];n[J+24>>2]=n[Ur+24>>2];n[J+28>>2]=n[Ur+28>>2];m=0;ae(17,Nt|0,ct|0);Ye=m;m=0;if(Ye&1){a=5;break e}m=0;ae(17,Ot|0,ot|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=Bt;Ge=ft;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=lr;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Un;Ge=jt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Gc;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Zc;Ge=jt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Ic>>2]=n[lr>>2];n[Ic+4>>2]=n[lr+4>>2];n[Ic+8>>2]=n[lr+8>>2];n[Ic+12>>2]=n[lr+12>>2];n[Ic+16>>2]=n[lr+16>>2];n[Ic+20>>2]=n[lr+20>>2];n[Ic+24>>2]=n[lr+24>>2];n[Ic+28>>2]=n[lr+28>>2];n[Yc>>2]=n[Un>>2];n[Yc+4>>2]=n[Un+4>>2];n[Yc+8>>2]=n[Un+8>>2];n[Yc+12>>2]=n[Un+12>>2];n[Yc+16>>2]=n[Un+16>>2];n[Yc+20>>2]=n[Un+20>>2];n[Yc+24>>2]=n[Un+24>>2];n[Yc+28>>2]=n[Un+28>>2];m=0;re(15,Ic|0,Yc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Mt>>2]=n[Ic>>2];n[Mt+4>>2]=n[Ic+4>>2];n[Mt+8>>2]=n[Ic+8>>2];n[Mt+12>>2]=n[Ic+12>>2];n[Mt+16>>2]=n[Ic+16>>2];n[Mt+20>>2]=n[Ic+20>>2];n[Mt+24>>2]=n[Ic+24>>2];n[Mt+28>>2]=n[Ic+28>>2];n[Kc>>2]=n[Ae>>2];n[Kc+4>>2]=n[Ae+4>>2];n[Kc+8>>2]=n[Ae+8>>2];n[Kc+12>>2]=n[Ae+12>>2];n[Kc+16>>2]=n[Ae+16>>2];n[Kc+20>>2]=n[Ae+20>>2];n[Kc+24>>2]=n[Ae+24>>2];n[Kc+28>>2]=n[Ae+28>>2];n[Qc>>2]=n[A>>2];n[Qc+4>>2]=n[A+4>>2];n[Qc+8>>2]=n[A+8>>2];n[Qc+12>>2]=n[A+12>>2];n[Qc+16>>2]=n[A+16>>2];n[Qc+20>>2]=n[A+20>>2];n[Qc+24>>2]=n[A+24>>2];n[Qc+28>>2]=n[A+28>>2];m=0;re(15,Kc|0,Qc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Kc>>2];n[Ur+4>>2]=n[Kc+4>>2];n[Ur+8>>2]=n[Kc+8>>2];n[Ur+12>>2]=n[Kc+12>>2];n[Ur+16>>2]=n[Kc+16>>2];n[Ur+20>>2]=n[Kc+20>>2];n[Ur+24>>2]=n[Kc+24>>2];n[Ur+28>>2]=n[Kc+28>>2];n[$>>2]=n[Ur>>2];n[$+4>>2]=n[Ur+4>>2];n[$+8>>2]=n[Ur+8>>2];n[$+12>>2]=n[Ur+12>>2];n[$+16>>2]=n[Ur+16>>2];n[$+20>>2]=n[Ur+20>>2];n[$+24>>2]=n[Ur+24>>2];n[$+28>>2]=n[Ur+28>>2];m=0;re(13,qt|0,Bt|0,Mt|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=ct;Ge=qt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;ae(17,ir|0,Wt|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=or;Ge=Ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=ar;Ge=Ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Jc;Ge=or;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Fc;Ge=Ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Lc>>2]=n[or>>2];n[Lc+4>>2]=n[or+4>>2];n[Lc+8>>2]=n[or+8>>2];n[Lc+12>>2]=n[or+12>>2];n[Lc+16>>2]=n[or+16>>2];n[Lc+20>>2]=n[or+20>>2];n[Lc+24>>2]=n[or+24>>2];n[Lc+28>>2]=n[or+28>>2];n[Dc>>2]=n[ar>>2];n[Dc+4>>2]=n[ar+4>>2];n[Dc+8>>2]=n[ar+8>>2];n[Dc+12>>2]=n[ar+12>>2];n[Dc+16>>2]=n[ar+16>>2];n[Dc+20>>2]=n[ar+20>>2];n[Dc+24>>2]=n[ar+24>>2];n[Dc+28>>2]=n[ar+28>>2];m=0;re(14,Lc|0,Dc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[fr>>2]=n[Lc>>2];n[fr+4>>2]=n[Lc+4>>2];n[fr+8>>2]=n[Lc+8>>2];n[fr+12>>2]=n[Lc+12>>2];n[fr+16>>2]=n[Lc+16>>2];n[fr+20>>2]=n[Lc+20>>2];n[fr+24>>2]=n[Lc+24>>2];n[fr+28>>2]=n[Lc+28>>2];n[zc>>2]=n[xe>>2];n[zc+4>>2]=n[xe+4>>2];n[zc+8>>2]=n[xe+8>>2];n[zc+12>>2]=n[xe+12>>2];n[zc+16>>2]=n[xe+16>>2];n[zc+20>>2]=n[xe+20>>2];n[zc+24>>2]=n[xe+24>>2];n[zc+28>>2]=n[xe+28>>2];n[mn>>2]=n[k>>2];n[mn+4>>2]=n[k+4>>2];n[mn+8>>2]=n[k+8>>2];n[mn+12>>2]=n[k+12>>2];n[mn+16>>2]=n[k+16>>2];n[mn+20>>2]=n[k+20>>2];n[mn+24>>2]=n[k+24>>2];n[mn+28>>2]=n[k+28>>2];m=0;re(14,zc|0,mn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[zc>>2];n[Ur+4>>2]=n[zc+4>>2];n[Ur+8>>2]=n[zc+8>>2];n[Ur+12>>2]=n[zc+12>>2];n[Ur+16>>2]=n[zc+16>>2];n[Ur+20>>2]=n[zc+20>>2];n[Ur+24>>2]=n[zc+24>>2];n[Ur+28>>2]=n[zc+28>>2];n[te>>2]=n[Ur>>2];n[te+4>>2]=n[Ur+4>>2];n[te+8>>2]=n[Ur+8>>2];n[te+12>>2]=n[Ur+12>>2];n[te+16>>2]=n[Ur+16>>2];n[te+20>>2]=n[Ur+20>>2];n[te+24>>2]=n[Ur+24>>2];n[te+28>>2]=n[Ur+28>>2];Ye=tr;Ge=Ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Wc;Ge=fr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=dn;Ge=Ot;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[hn>>2]=n[fr>>2];n[hn+4>>2]=n[fr+4>>2];n[hn+8>>2]=n[fr+8>>2];n[hn+12>>2]=n[fr+12>>2];n[hn+16>>2]=n[fr+16>>2];n[hn+20>>2]=n[fr+20>>2];n[hn+24>>2]=n[fr+24>>2];n[hn+28>>2]=n[fr+28>>2];n[Uc>>2]=n[tr>>2];n[Uc+4>>2]=n[tr+4>>2];n[Uc+8>>2]=n[tr+8>>2];n[Uc+12>>2]=n[tr+12>>2];n[Uc+16>>2]=n[tr+16>>2];n[Uc+20>>2]=n[tr+20>>2];n[Uc+24>>2]=n[tr+24>>2];n[Uc+28>>2]=n[tr+28>>2];m=0;re(14,hn|0,Uc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[yc>>2]=n[hn>>2];n[yc+4>>2]=n[hn+4>>2];n[yc+8>>2]=n[hn+8>>2];n[yc+12>>2]=n[hn+12>>2];n[yc+16>>2]=n[hn+16>>2];n[yc+20>>2]=n[hn+20>>2];n[yc+24>>2]=n[hn+24>>2];n[yc+28>>2]=n[hn+28>>2];n[gn>>2]=n[Ee>>2];n[gn+4>>2]=n[Ee+4>>2];n[gn+8>>2]=n[Ee+8>>2];n[gn+12>>2]=n[Ee+12>>2];n[gn+16>>2]=n[Ee+16>>2];n[gn+20>>2]=n[Ee+20>>2];n[gn+24>>2]=n[Ee+24>>2];n[gn+28>>2]=n[Ee+28>>2];n[cn>>2]=n[E>>2];n[cn+4>>2]=n[E+4>>2];n[cn+8>>2]=n[E+8>>2];n[cn+12>>2]=n[E+12>>2];n[cn+16>>2]=n[E+16>>2];n[cn+20>>2]=n[E+20>>2];n[cn+24>>2]=n[E+24>>2];n[cn+28>>2]=n[E+28>>2];m=0;re(14,gn|0,cn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[gn>>2];n[Ur+4>>2]=n[gn+4>>2];n[Ur+8>>2]=n[gn+8>>2];n[Ur+12>>2]=n[gn+12>>2];n[Ur+16>>2]=n[gn+16>>2];n[Ur+20>>2]=n[gn+20>>2];n[Ur+24>>2]=n[gn+24>>2];n[Ur+28>>2]=n[gn+28>>2];n[ce>>2]=n[Ur>>2];n[ce+4>>2]=n[Ur+4>>2];n[ce+8>>2]=n[Ur+8>>2];n[ce+12>>2]=n[Ur+12>>2];n[ce+16>>2]=n[Ur+16>>2];n[ce+20>>2]=n[Ur+20>>2];n[ce+24>>2]=n[Ur+24>>2];n[ce+28>>2]=n[Ur+28>>2];Ye=xn;Ge=ir;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Tn;Ge=yc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[tn>>2]=n[ir>>2];n[tn+4>>2]=n[ir+4>>2];n[tn+8>>2]=n[ir+8>>2];n[tn+12>>2]=n[ir+12>>2];n[tn+16>>2]=n[ir+16>>2];n[tn+20>>2]=n[ir+20>>2];n[tn+24>>2]=n[ir+24>>2];n[tn+28>>2]=n[ir+28>>2];n[an>>2]=n[yc>>2];n[an+4>>2]=n[yc+4>>2];n[an+8>>2]=n[yc+8>>2];n[an+12>>2]=n[yc+12>>2];n[an+16>>2]=n[yc+16>>2];n[an+20>>2]=n[yc+20>>2];n[an+24>>2]=n[yc+24>>2];n[an+28>>2]=n[yc+28>>2];m=0;re(15,tn|0,an|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Xc>>2]=n[tn>>2];n[Xc+4>>2]=n[tn+4>>2];n[Xc+8>>2]=n[tn+8>>2];n[Xc+12>>2]=n[tn+12>>2];n[Xc+16>>2]=n[tn+16>>2];n[Xc+20>>2]=n[tn+20>>2];n[Xc+24>>2]=n[tn+24>>2];n[Xc+28>>2]=n[tn+28>>2];n[rn>>2]=n[Se>>2];n[rn+4>>2]=n[Se+4>>2];n[rn+8>>2]=n[Se+8>>2];n[rn+12>>2]=n[Se+12>>2];n[rn+16>>2]=n[Se+16>>2];n[rn+20>>2]=n[Se+20>>2];n[rn+24>>2]=n[Se+24>>2];n[rn+28>>2]=n[Se+28>>2];n[on>>2]=n[S>>2];n[on+4>>2]=n[S+4>>2];n[on+8>>2]=n[S+8>>2];n[on+12>>2]=n[S+12>>2];n[on+16>>2]=n[S+16>>2];n[on+20>>2]=n[S+20>>2];n[on+24>>2]=n[S+24>>2];n[on+28>>2]=n[S+28>>2];m=0;re(15,rn|0,on|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[rn>>2];n[Ur+4>>2]=n[rn+4>>2];n[Ur+8>>2]=n[rn+8>>2];n[Ur+12>>2]=n[rn+12>>2];n[Ur+16>>2]=n[rn+16>>2];n[Ur+20>>2]=n[rn+20>>2];n[Ur+24>>2]=n[rn+24>>2];n[Ur+28>>2]=n[rn+28>>2];n[ie>>2]=n[Ur>>2];n[ie+4>>2]=n[Ur+4>>2];n[ie+8>>2]=n[Ur+8>>2];n[ie+12>>2]=n[Ur+12>>2];n[ie+16>>2]=n[Ur+16>>2];n[ie+20>>2]=n[Ur+20>>2];n[ie+24>>2]=n[Ur+24>>2];n[ie+28>>2]=n[Ur+28>>2];Ye=qe;Ge=Xc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=dr;Ge=it;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Tr;Ge=Ft;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;re(13,_c|0,dr|0,Tr|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=i;Ge=_c;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Ac;n[Ye>>2]=1091403767;n[Ye+4>>2]=-167360562;Ye=d;n[Ye>>2]=-753151983;n[Ye+4>>2]=792555341;Ye=b;n[Ye>>2]=960546513;n[Ye+4>>2]=692269950;Ye=l;n[Ye>>2]=-1478256553;n[Ye+4>>2]=496343272;Ye=M;n[Ye>>2]=-980480611;n[Ye+4>>2]=-748862579;Ye=I;n[Ye>>2]=-171504835;n[Ye+4>>2]=175696680;Ye=F;n[Ye>>2]=2021213740;n[Ye+4>>2]=1718526831;Ye=D;n[Ye>>2]=-1710760145;n[Ye+4>>2]=235567041;Ye=kc;Ge=ht;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;re(13,wc|0,Ac|0,kc|0);Ye=m;m=0;if(Ye&1){a=5;break e}Ye=Zr;Ge=Ft;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=nn;Ge=Ft;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[fn>>2]=n[Zr>>2];n[fn+4>>2]=n[Zr+4>>2];n[fn+8>>2]=n[Zr+8>>2];n[fn+12>>2]=n[Zr+12>>2];n[fn+16>>2]=n[Zr+16>>2];n[fn+20>>2]=n[Zr+20>>2];n[fn+24>>2]=n[Zr+24>>2];n[fn+28>>2]=n[Zr+28>>2];m=0;ae(18,fn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Qr>>2]=n[fn>>2];n[Qr+4>>2]=n[fn+4>>2];n[Qr+8>>2]=n[fn+8>>2];n[Qr+12>>2]=n[fn+12>>2];n[Qr+16>>2]=n[fn+16>>2];n[Qr+20>>2]=n[fn+20>>2];n[Qr+24>>2]=n[fn+24>>2];n[Qr+28>>2]=n[fn+28>>2];n[Pn>>2]=n[G>>2];n[Pn+4>>2]=n[G+4>>2];n[Pn+8>>2]=n[G+8>>2];n[Pn+12>>2]=n[G+12>>2];n[Pn+16>>2]=n[G+16>>2];n[Pn+20>>2]=n[G+20>>2];n[Pn+24>>2]=n[G+24>>2];n[Pn+28>>2]=n[G+28>>2];m=0;ae(18,Pn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Pn>>2];n[Ur+4>>2]=n[Pn+4>>2];n[Ur+8>>2]=n[Pn+8>>2];n[Ur+12>>2]=n[Pn+12>>2];n[Ur+16>>2]=n[Pn+16>>2];n[Ur+20>>2]=n[Pn+20>>2];n[Ur+24>>2]=n[Pn+24>>2];n[Ur+28>>2]=n[Pn+28>>2];n[V>>2]=n[Ur>>2];n[V+4>>2]=n[Ur+4>>2];n[V+8>>2]=n[Ur+8>>2];n[V+12>>2]=n[Ur+12>>2];n[V+16>>2]=n[Ur+16>>2];n[V+20>>2]=n[Ur+20>>2];n[V+24>>2]=n[Ur+24>>2];n[V+28>>2]=n[Ur+28>>2];Ye=Xr;Ge=Nt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Rn;Ge=Nt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=In;Ge=Xr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Fn;Ge=Nt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Sn>>2]=n[Xr>>2];n[Sn+4>>2]=n[Xr+4>>2];n[Sn+8>>2]=n[Xr+8>>2];n[Sn+12>>2]=n[Xr+12>>2];n[Sn+16>>2]=n[Xr+16>>2];n[Sn+20>>2]=n[Xr+20>>2];n[Sn+24>>2]=n[Xr+24>>2];n[Sn+28>>2]=n[Xr+28>>2];n[bn>>2]=n[Rn>>2];n[bn+4>>2]=n[Rn+4>>2];n[bn+8>>2]=n[Rn+8>>2];n[bn+12>>2]=n[Rn+12>>2];n[bn+16>>2]=n[Rn+16>>2];n[bn+20>>2]=n[Rn+20>>2];n[bn+24>>2]=n[Rn+24>>2];n[bn+28>>2]=n[Rn+28>>2];m=0;re(14,Sn|0,bn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Jr>>2]=n[Sn>>2];n[Jr+4>>2]=n[Sn+4>>2];n[Jr+8>>2]=n[Sn+8>>2];n[Jr+12>>2]=n[Sn+12>>2];n[Jr+16>>2]=n[Sn+16>>2];n[Jr+20>>2]=n[Sn+20>>2];n[Jr+24>>2]=n[Sn+24>>2];n[Jr+28>>2]=n[Sn+28>>2];n[An>>2]=n[Te>>2];n[An+4>>2]=n[Te+4>>2];n[An+8>>2]=n[Te+8>>2];n[An+12>>2]=n[Te+12>>2];n[An+16>>2]=n[Te+16>>2];n[An+20>>2]=n[Te+20>>2];n[An+24>>2]=n[Te+24>>2];n[An+28>>2]=n[Te+28>>2];n[kn>>2]=n[j>>2];n[kn+4>>2]=n[j+4>>2];n[kn+8>>2]=n[j+8>>2];n[kn+12>>2]=n[j+12>>2];n[kn+16>>2]=n[j+16>>2];n[kn+20>>2]=n[j+20>>2];n[kn+24>>2]=n[j+24>>2];n[kn+28>>2]=n[j+28>>2];m=0;re(14,An|0,kn|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[An>>2];n[Ur+4>>2]=n[An+4>>2];n[Ur+8>>2]=n[An+8>>2];n[Ur+12>>2]=n[An+12>>2];n[Ur+16>>2]=n[An+16>>2];n[Ur+20>>2]=n[An+20>>2];n[Ur+24>>2]=n[An+24>>2];n[Ur+28>>2]=n[An+28>>2];n[fe>>2]=n[Ur>>2];n[fe+4>>2]=n[Ur+4>>2];n[fe+8>>2]=n[Ur+8>>2];n[fe+12>>2]=n[Ur+12>>2];n[fe+16>>2]=n[Ur+16>>2];n[fe+20>>2]=n[Ur+20>>2];n[fe+24>>2]=n[Ur+24>>2];n[fe+28>>2]=n[Ur+28>>2];Ye=$r;Ge=Nt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=ac;Ge=Jr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=xc;Ge=Nt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[tc>>2]=n[Jr>>2];n[tc+4>>2]=n[Jr+4>>2];n[tc+8>>2]=n[Jr+8>>2];n[tc+12>>2]=n[Jr+12>>2];n[tc+16>>2]=n[Jr+16>>2];n[tc+20>>2]=n[Jr+20>>2];n[tc+24>>2]=n[Jr+24>>2];n[tc+28>>2]=n[Jr+28>>2];n[rc>>2]=n[$r>>2];n[rc+4>>2]=n[$r+4>>2];n[rc+8>>2]=n[$r+8>>2];n[rc+12>>2]=n[$r+12>>2];n[rc+16>>2]=n[$r+16>>2];n[rc+20>>2]=n[$r+20>>2];n[rc+24>>2]=n[$r+24>>2];n[rc+28>>2]=n[$r+28>>2];m=0;re(14,tc|0,rc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Nc>>2]=n[tc>>2];n[Nc+4>>2]=n[tc+4>>2];n[Nc+8>>2]=n[tc+8>>2];n[Nc+12>>2]=n[tc+12>>2];n[Nc+16>>2]=n[tc+16>>2];n[Nc+20>>2]=n[tc+20>>2];n[Nc+24>>2]=n[tc+24>>2];n[Nc+28>>2]=n[tc+28>>2];n[Ec>>2]=n[ge>>2];n[Ec+4>>2]=n[ge+4>>2];n[Ec+8>>2]=n[ge+8>>2];n[Ec+12>>2]=n[ge+12>>2];n[Ec+16>>2]=n[ge+16>>2];n[Ec+20>>2]=n[ge+20>>2];n[Ec+24>>2]=n[ge+24>>2];n[Ec+28>>2]=n[ge+28>>2];n[cc>>2]=n[g>>2];n[cc+4>>2]=n[g+4>>2];n[cc+8>>2]=n[g+8>>2];n[cc+12>>2]=n[g+12>>2];n[cc+16>>2]=n[g+16>>2];n[cc+20>>2]=n[g+20>>2];n[cc+24>>2]=n[g+24>>2];n[cc+28>>2]=n[g+28>>2];m=0;re(14,Ec|0,cc|0,8);Ye=m;m=0;if(Ye&1){a=5;break e}n[Ur>>2]=n[Ec>>2];n[Ur+4>>2]=n[Ec+4>>2];n[Ur+8>>2]=n[Ec+8>>2];n[Ur+12>>2]=n[Ec+12>>2];n[Ur+16>>2]=n[Ec+16>>2];n[Ur+20>>2]=n[Ec+20>>2];n[Ur+24>>2]=n[Ec+24>>2];n[Ur+28>>2]=n[Ec+28>>2];n[W>>2]=n[Ur>>2];n[W+4>>2]=n[Ur+4>>2];n[W+8>>2]=n[Ur+8>>2];n[W+12>>2]=n[Ur+12>>2];n[W+16>>2]=n[Ur+16>>2];n[W+20>>2]=n[Ur+20>>2];n[W+24>>2]=n[Ur+24>>2];n[W+28>>2]=n[Ur+28>>2];Ye=ba;Ge=wc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=f;Ge=Qr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=o;Ge=Nc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(En|0,ba|0,192)|0;t=n[Ve>>2]|0;if((t|0)==(n[He>>2]|0)){m=0;ee(43,Ka|0);Ye=m;m=0;if(Ye&1){a=5;break e}t=n[Ve>>2]|0}c=n[Ka>>2]|0;ad(c+(t*192|0)|0,En|0,192)|0;t=t+1|0;n[Ve>>2]=t;if(r){m=0;re(16,ka|0,ct|0,Bn|0);Ye=m;m=0;if(Ye&1){a=5;break e}ad(Cn|0,ka|0,192)|0;if((t|0)==(n[He>>2]|0)){m=0;ee(43,Ka|0);Ye=m;m=0;if(Ye&1){a=5;break e}r=n[Ve>>2]|0;t=n[Ka>>2]|0}else{r=t;t=c}ad(t+(r*192|0)|0,Cn|0,192)|0;n[Ve>>2]=r+1}if(!a){a=10;break e}}if(!a){a=10;break}else ze=r}if((a|0)==5){Vn=me()|0;er(Ka);je(Vn|0)}else if((a|0)==10){Ye=St;n[Ye>>2]=1164159792;n[Ye+4>>2]=-1250477296;Ye=St+8|0;n[Ye>>2]=-1448450988;n[Ye+4>>2]=880775624;Ye=St+16|0;n[Ye>>2]=606996881;n[Ye+4>>2]=2046849319;Ye=St+24|0;n[Ye>>2]=293737708;n[Ye+4>>2]=425114840;Ye=St+32|0;n[Ye>>2]=-1599453353;n[Ye+4>>2]=1854185246;Ye=St+40|0;n[Ye>>2]=-1980198591;n[Ye+4>>2]=-1440973971;Ye=St+48|0;n[Ye>>2]=-85931462;n[Ye+4>>2]=-1226370099;Ye=St+56|0;n[Ye>>2]=1317202883;n[Ye+4>>2]=644435899;n[Xt>>2]=n[Bn>>2];n[Xt+4>>2]=n[Bn+4>>2];n[Xt+8>>2]=n[Bn+8>>2];n[Xt+12>>2]=n[Bn+12>>2];n[Xt+16>>2]=n[Bn+16>>2];n[Xt+20>>2]=n[Bn+20>>2];n[Xt+24>>2]=n[Bn+24>>2];n[Xt+28>>2]=n[Bn+28>>2];Ye=Bn+32|0;n[Ut>>2]=n[Ye>>2];n[Ut+4>>2]=n[Ye+4>>2];n[Ut+8>>2]=n[Ye+8>>2];n[Ut+12>>2]=n[Ye+12>>2];n[Ut+16>>2]=n[Ye+16>>2];n[Ut+20>>2]=n[Ye+20>>2];n[Ut+24>>2]=n[Ye+24>>2];n[Ut+28>>2]=n[Ye+28>>2];Ye=Vt;n[Ye>>2]=317583274;n[Ye+4>>2]=1757628553;Ye=Vt+8|0;n[Ye>>2]=1923792719;n[Ye+4>>2]=-1928822936;Ye=Vt+16|0;n[Ye>>2]=151523889;n[Ye+4>>2]=1373741639;Ye=Vt+24|0;n[Ye>>2]=1193918714;n[Ye+4>>2]=576313009;m=0;X(1,Ut|0,Vt|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Ur>>2]=n[Ut>>2];n[Ur+4>>2]=n[Ut+4>>2];n[Ur+8>>2]=n[Ut+8>>2];n[Ur+12>>2]=n[Ut+12>>2];n[Ur+16>>2]=n[Ut+16>>2];n[Ur+20>>2]=n[Ut+20>>2];n[Ur+24>>2]=n[Ut+24>>2];n[Ur+28>>2]=n[Ut+28>>2];Ye=Xt+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];m=0;re(13,Sa|0,St|0,Xt|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}Ye=ut;n[Ye>>2]=691451433;n[Ye+4>>2]=-457450228;Ye=ut+8|0;n[Ye>>2]=-516703541;n[Ye+4>>2]=-1154420382;Ye=ut+16|0;n[Ye>>2]=-110865562;n[Ye+4>>2]=833212854;Ye=ut+24|0;n[Ye>>2]=-1526662947;n[Ye+4>>2]=624259262;Ye=ut+32|0;n[Ye>>2]=1610512327;n[Ye+4>>2]=-1579713308;Ye=ut+40|0;n[Ye>>2]=2015810011;n[Ye+4>>2]=128974097;Ye=ut+48|0;n[Ye>>2]=-1149313941;n[Ye+4>>2]=1830206759;Ye=ut+56|0;n[Ye>>2]=-2048983348;n[Ye+4>>2]=747053058;n[$t>>2]=n[Ue>>2];n[$t+4>>2]=n[Ue+4>>2];n[$t+8>>2]=n[Ue+8>>2];n[$t+12>>2]=n[Ue+12>>2];n[$t+16>>2]=n[Ue+16>>2];n[$t+20>>2]=n[Ue+20>>2];n[$t+24>>2]=n[Ue+24>>2];n[$t+28>>2]=n[Ue+28>>2];Ye=Bn+96|0;n[vt>>2]=n[Ye>>2];n[vt+4>>2]=n[Ye+4>>2];n[vt+8>>2]=n[Ye+8>>2];n[vt+12>>2]=n[Ye+12>>2];n[vt+16>>2]=n[Ye+16>>2];n[vt+20>>2]=n[Ye+20>>2];n[vt+24>>2]=n[Ye+24>>2];n[vt+28>>2]=n[Ye+28>>2];Ye=ja;n[Ye>>2]=317583274;n[Ye+4>>2]=1757628553;Ye=ja+8|0;n[Ye>>2]=1923792719;n[Ye+4>>2]=-1928822936;Ye=ja+16|0;n[Ye>>2]=151523889;n[Ye+4>>2]=1373741639;Ye=ja+24|0;n[Ye>>2]=1193918714;n[Ye+4>>2]=576313009;m=0;X(1,vt|0,ja|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Ur>>2]=n[vt>>2];n[Ur+4>>2]=n[vt+4>>2];n[Ur+8>>2]=n[vt+8>>2];n[Ur+12>>2]=n[vt+12>>2];n[Ur+16>>2]=n[vt+16>>2];n[Ur+20>>2]=n[vt+20>>2];n[Ur+24>>2]=n[vt+24>>2];n[Ur+28>>2]=n[vt+28>>2];Ye=$t+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];m=0;re(13,bt|0,ut|0,$t|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}Ye=ha;Ge=Sa;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=ha+64|0;Ye=a;Ge=bt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=un;n[Ye>>2]=1164159792;n[Ye+4>>2]=-1250477296;Ye=un+8|0;n[Ye>>2]=-1448450988;n[Ye+4>>2]=880775624;Ye=un+16|0;n[Ye>>2]=606996881;n[Ye+4>>2]=2046849319;Ye=un+24|0;n[Ye>>2]=293737708;n[Ye+4>>2]=425114840;Ye=un+32|0;n[Ye>>2]=-1599453353;n[Ye+4>>2]=1854185246;Ye=un+40|0;n[Ye>>2]=-1980198591;n[Ye+4>>2]=-1440973971;Ye=un+48|0;n[Ye>>2]=-85931462;n[Ye+4>>2]=-1226370099;Ye=un+56|0;n[Ye>>2]=1317202883;n[Ye+4>>2]=644435899;n[ln>>2]=n[ha>>2];n[ln+4>>2]=n[ha+4>>2];n[ln+8>>2]=n[ha+8>>2];n[ln+12>>2]=n[ha+12>>2];n[ln+16>>2]=n[ha+16>>2];n[ln+20>>2]=n[ha+20>>2];n[ln+24>>2]=n[ha+24>>2];n[ln+28>>2]=n[ha+28>>2];Ye=ha+32|0;n[Hr>>2]=n[Ye>>2];n[Hr+4>>2]=n[Ye+4>>2];n[Hr+8>>2]=n[Ye+8>>2];n[Hr+12>>2]=n[Ye+12>>2];n[Hr+16>>2]=n[Ye+16>>2];n[Hr+20>>2]=n[Ye+20>>2];n[Hr+24>>2]=n[Ye+24>>2];n[Hr+28>>2]=n[Ye+28>>2];Ye=Wr;n[Ye>>2]=317583274;n[Ye+4>>2]=1757628553;Ye=Wr+8|0;n[Ye>>2]=1923792719;n[Ye+4>>2]=-1928822936;Ye=Wr+16|0;n[Ye>>2]=151523889;n[Ye+4>>2]=1373741639;Ye=Wr+24|0;n[Ye>>2]=1193918714;n[Ye+4>>2]=576313009;m=0;X(1,Hr|0,Wr|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Ur>>2]=n[Hr>>2];n[Ur+4>>2]=n[Hr+4>>2];n[Ur+8>>2]=n[Hr+8>>2];n[Ur+12>>2]=n[Hr+12>>2];n[Ur+16>>2]=n[Hr+16>>2];n[Ur+20>>2]=n[Hr+20>>2];n[Ur+24>>2]=n[Hr+24>>2];n[Ur+28>>2]=n[Hr+28>>2];Ye=ln+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];m=0;re(13,sn|0,un|0,ln|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}Ye=pc;n[Ye>>2]=691451433;n[Ye+4>>2]=-457450228;Ye=pc+8|0;n[Ye>>2]=-516703541;n[Ye+4>>2]=-1154420382;Ye=pc+16|0;n[Ye>>2]=-110865562;n[Ye+4>>2]=833212854;Ye=pc+24|0;n[Ye>>2]=-1526662947;n[Ye+4>>2]=624259262;Ye=pc+32|0;n[Ye>>2]=1610512327;n[Ye+4>>2]=-1579713308;Ye=pc+40|0;n[Ye>>2]=2015810011;n[Ye+4>>2]=128974097;Ye=pc+48|0;n[Ye>>2]=-1149313941;n[Ye+4>>2]=1830206759;Ye=pc+56|0;n[Ye>>2]=-2048983348;n[Ye+4>>2]=747053058;n[gc>>2]=n[a>>2];n[gc+4>>2]=n[a+4>>2];n[gc+8>>2]=n[a+8>>2];n[gc+12>>2]=n[a+12>>2];n[gc+16>>2]=n[a+16>>2];n[gc+20>>2]=n[a+20>>2];n[gc+24>>2]=n[a+24>>2];n[gc+28>>2]=n[a+28>>2];Ye=ha+96|0;n[Yr>>2]=n[Ye>>2];n[Yr+4>>2]=n[Ye+4>>2];n[Yr+8>>2]=n[Ye+8>>2];n[Yr+12>>2]=n[Ye+12>>2];n[Yr+16>>2]=n[Ye+16>>2];n[Yr+20>>2]=n[Ye+20>>2];n[Yr+24>>2]=n[Ye+24>>2];n[Yr+28>>2]=n[Ye+28>>2];Ye=Kr;n[Ye>>2]=317583274;n[Ye+4>>2]=1757628553;Ye=Kr+8|0;n[Ye>>2]=1923792719;n[Ye+4>>2]=-1928822936;Ye=Kr+16|0;n[Ye>>2]=151523889;n[Ye+4>>2]=1373741639;Ye=Kr+24|0;n[Ye>>2]=1193918714;n[Ye+4>>2]=576313009;m=0;X(1,Yr|0,Kr|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Ur>>2]=n[Yr>>2];n[Ur+4>>2]=n[Yr+4>>2];n[Ur+8>>2]=n[Yr+8>>2];n[Ur+12>>2]=n[Yr+12>>2];n[Ur+16>>2]=n[Yr+16>>2];n[Ur+20>>2]=n[Yr+20>>2];n[Ur+24>>2]=n[Yr+24>>2];n[Ur+28>>2]=n[Yr+28>>2];Ye=gc+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];m=0;re(13,pn|0,pc|0,gc|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}Ye=da;Ge=sn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=da+64|0;Ge=pn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Pc;Ge=da;We=Ye+128|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=va;Ge=da;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=Pc+64|0;Ye=Rc;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=qc;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Oc>>2]=n[Rc>>2];n[Oc+4>>2]=n[Rc+4>>2];n[Oc+8>>2]=n[Rc+8>>2];n[Oc+12>>2]=n[Rc+12>>2];n[Oc+16>>2]=n[Rc+16>>2];n[Oc+20>>2]=n[Rc+20>>2];n[Oc+24>>2]=n[Rc+24>>2];n[Oc+28>>2]=n[Rc+28>>2];m=0;ae(18,Oc|0,8);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Mc>>2]=n[Oc>>2];n[Mc+4>>2]=n[Oc+4>>2];n[Mc+8>>2]=n[Oc+8>>2];n[Mc+12>>2]=n[Oc+12>>2];n[Mc+16>>2]=n[Oc+16>>2];n[Mc+20>>2]=n[Oc+20>>2];n[Mc+24>>2]=n[Oc+24>>2];n[Mc+28>>2]=n[Oc+28>>2];Ye=qc+32|0;n[Bc>>2]=n[Ye>>2];n[Bc+4>>2]=n[Ye+4>>2];n[Bc+8>>2]=n[Ye+8>>2];n[Bc+12>>2]=n[Ye+12>>2];n[Bc+16>>2]=n[Ye+16>>2];n[Bc+20>>2]=n[Ye+20>>2];n[Bc+24>>2]=n[Ye+24>>2];n[Bc+28>>2]=n[Ye+28>>2];m=0;ae(18,Bc|0,8);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}n[Ur>>2]=n[Bc>>2];n[Ur+4>>2]=n[Bc+4>>2];n[Ur+8>>2]=n[Bc+8>>2];n[Ur+12>>2]=n[Bc+12>>2];n[Ur+16>>2]=n[Bc+16>>2];n[Ur+20>>2]=n[Bc+20>>2];n[Ur+24>>2]=n[Bc+24>>2];n[Ur+28>>2]=n[Bc+28>>2];Ye=Mc+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];Ye=va+64|0;Ge=Mc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));m=0;re(16,wa|0,ct|0,ha|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}ad(Ea|0,wa|0,192)|0;a=n[Ve>>2]|0;do{if((a|0)==(n[He>>2]|0)){m=0;ee(43,Ka|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}else{a=n[Ve>>2]|0;break}}}while(0);r=n[Ka>>2]|0;ad(r+(a*192|0)|0,Ea|0,192)|0;a=a+1|0;n[Ve>>2]=a;m=0;re(16,la|0,ct|0,va|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}ad(rr|0,la|0,192)|0;do{if((a|0)==(n[He>>2]|0)){m=0;ee(43,Ka|0);Ye=m;m=0;if(Ye&1){Vn=me()|0;er(Ka);je(Vn|0)}else{t=n[Ve>>2]|0;a=n[Ka>>2]|0;break}}else{t=a;a=r}}while(0);ad(a+(t*192|0)|0,rr|0,192)|0;n[Ve>>2]=t+1;Ye=qn;Ge=Bn;We=Ye+128|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));s=qn+128|0;n[s>>2]=n[Ka>>2];n[s+4>>2]=n[Ka+4>>2];n[s+8>>2]=n[Ka+8>>2];s=za;n[s>>2]=-980480611;n[s+4>>2]=-748862579;s=za+8|0;n[s>>2]=-171504835;n[s+4>>2]=175696680;s=za+16|0;n[s>>2]=2021213740;n[s+4>>2]=1718526831;s=za+24|0;n[s>>2]=-1710760145;n[s+4>>2]=235567041;Zo(za+32|0,0,352)|0;s=Ke;n[s>>2]=-1099547736;n[s+4>>2]=-1652985799;s=Ke+8|0;n[s>>2]=1;n[s+4>>2]=0;s=Ke+16|0;n[s>>2]=0;n[s+4>>2]=0;n[s+8>>2]=0;n[s+12>>2]=0;s=n[qn+136>>2]|0;u=n[qn+128>>2]|0;b=On+32|0;f=Je+32|0;o=$e+32|0;d=ra+32|0;i=na+32|0;t=0;r=0;a=256;e:while(1){do{if(!a){a=90;break e}a=a+-1|0;if(a>>>0>255){a=90;break e}We=Ke+(a>>>6<<3)|0;Ve=n[We>>2]|0;We=n[We+4>>2]|0;Ge=nd(1,0,a&63|0)|0;Ye=t;t=(Ve&Ge|0)!=0|(We&T|0)!=0}while(!Ye);if(s>>>0<=r>>>0){a=106;break}c=r+1|0;m=0;ae(19,Qe|0,za|0);Ye=m;m=0;if(Ye&1){a=122;break}Ye=Ze;Ge=u+(r*192|0)|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=u+(r*192|0)+64|0;n[Xe>>2]=n[b>>2];n[Xe+4>>2]=n[b+4>>2];n[Xe+8>>2]=n[b+8>>2];n[Xe+12>>2]=n[b+12>>2];n[Xe+16>>2]=n[b+16>>2];n[Xe+20>>2]=n[b+20>>2];n[Xe+24>>2]=n[b+24>>2];n[Xe+28>>2]=n[b+28>>2];n[Sr>>2]=n[b>>2];n[Sr+4>>2]=n[b+4>>2];n[Sr+8>>2]=n[b+8>>2];n[Sr+12>>2]=n[b+12>>2];n[Sr+16>>2]=n[b+16>>2];n[Sr+20>>2]=n[b+20>>2];n[Sr+24>>2]=n[b+24>>2];n[Sr+28>>2]=n[b+28>>2];n[ga>>2]=n[Ye>>2];n[ga+4>>2]=n[Ye+4>>2];n[ga+8>>2]=n[Ye+8>>2];n[ga+12>>2]=n[Ye+12>>2];n[ga+16>>2]=n[Ye+16>>2];n[ga+20>>2]=n[Ye+20>>2];n[ga+24>>2]=n[Ye+24>>2];n[ga+28>>2]=n[Ye+28>>2];n[ba>>2]=n[Xe>>2];n[ba+4>>2]=n[Xe+4>>2];n[ba+8>>2]=n[Xe+8>>2];n[ba+12>>2]=n[Xe+12>>2];n[ba+16>>2]=n[Xe+16>>2];n[ba+20>>2]=n[Xe+20>>2];n[ba+24>>2]=n[Xe+24>>2];n[ba+28>>2]=n[Xe+28>>2];m=0;X(1,ga|0,ba|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[Je>>2]=n[ga>>2];n[Je+4>>2]=n[ga+4>>2];n[Je+8>>2]=n[ga+8>>2];n[Je+12>>2]=n[ga+12>>2];n[Je+16>>2]=n[ga+16>>2];n[Je+20>>2]=n[ga+20>>2];n[Je+24>>2]=n[ga+24>>2];n[Je+28>>2]=n[ga+28>>2];Ye=u+(r*192|0)+96|0;n[ka>>2]=n[Ye>>2];n[ka+4>>2]=n[Ye+4>>2];n[ka+8>>2]=n[Ye+8>>2];n[ka+12>>2]=n[Ye+12>>2];n[ka+16>>2]=n[Ye+16>>2];n[ka+20>>2]=n[Ye+20>>2];n[ka+24>>2]=n[Ye+24>>2];n[ka+28>>2]=n[Ye+28>>2];n[ha>>2]=n[Sr>>2];n[ha+4>>2]=n[Sr+4>>2];n[ha+8>>2]=n[Sr+8>>2];n[ha+12>>2]=n[Sr+12>>2];n[ha+16>>2]=n[Sr+16>>2];n[ha+20>>2]=n[Sr+20>>2];n[ha+24>>2]=n[Sr+24>>2];n[ha+28>>2]=n[Sr+28>>2];m=0;X(1,ka|0,ha|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[Ur>>2]=n[ka>>2];n[Ur+4>>2]=n[ka+4>>2];n[Ur+8>>2]=n[ka+8>>2];n[Ur+12>>2]=n[ka+12>>2];n[Ur+16>>2]=n[ka+16>>2];n[Ur+20>>2]=n[ka+20>>2];n[Ur+24>>2]=n[ka+24>>2];n[Ur+28>>2]=n[ka+28>>2];n[f>>2]=n[Ur>>2];n[f+4>>2]=n[Ur+4>>2];n[f+8>>2]=n[Ur+8>>2];n[f+12>>2]=n[Ur+12>>2];n[f+16>>2]=n[Ur+16>>2];n[f+20>>2]=n[Ur+20>>2];n[f+24>>2]=n[Ur+24>>2];n[f+28>>2]=n[Ur+28>>2];Ye=u+(r*192|0)+128|0;n[ea>>2]=n[On>>2];n[ea+4>>2]=n[On+4>>2];n[ea+8>>2]=n[On+8>>2];n[ea+12>>2]=n[On+12>>2];n[ea+16>>2]=n[On+16>>2];n[ea+20>>2]=n[On+20>>2];n[ea+24>>2]=n[On+24>>2];n[ea+28>>2]=n[On+28>>2];n[Sr>>2]=n[On>>2];n[Sr+4>>2]=n[On+4>>2];n[Sr+8>>2]=n[On+8>>2];n[Sr+12>>2]=n[On+12>>2];n[Sr+16>>2]=n[On+16>>2];n[Sr+20>>2]=n[On+20>>2];n[Sr+24>>2]=n[On+24>>2];n[Sr+28>>2]=n[On+28>>2];n[va>>2]=n[Ye>>2];n[va+4>>2]=n[Ye+4>>2];n[va+8>>2]=n[Ye+8>>2];n[va+12>>2]=n[Ye+12>>2];n[va+16>>2]=n[Ye+16>>2];n[va+20>>2]=n[Ye+20>>2];n[va+24>>2]=n[Ye+24>>2];n[va+28>>2]=n[Ye+28>>2];n[da>>2]=n[ea>>2];n[da+4>>2]=n[ea+4>>2];n[da+8>>2]=n[ea+8>>2];n[da+12>>2]=n[ea+12>>2];n[da+16>>2]=n[ea+16>>2];n[da+20>>2]=n[ea+20>>2];n[da+24>>2]=n[ea+24>>2];n[da+28>>2]=n[ea+28>>2];m=0;X(1,va|0,da|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[$e>>2]=n[va>>2];n[$e+4>>2]=n[va+4>>2];n[$e+8>>2]=n[va+8>>2];n[$e+12>>2]=n[va+12>>2];n[$e+16>>2]=n[va+16>>2];n[$e+20>>2]=n[va+20>>2];n[$e+24>>2]=n[va+24>>2];n[$e+28>>2]=n[va+28>>2];Ye=u+(r*192|0)+160|0;n[wa>>2]=n[Ye>>2];n[wa+4>>2]=n[Ye+4>>2];n[wa+8>>2]=n[Ye+8>>2];n[wa+12>>2]=n[Ye+12>>2];n[wa+16>>2]=n[Ye+16>>2];n[wa+20>>2]=n[Ye+20>>2];n[wa+24>>2]=n[Ye+24>>2];n[wa+28>>2]=n[Ye+28>>2];n[la>>2]=n[Sr>>2];n[la+4>>2]=n[Sr+4>>2];n[la+8>>2]=n[Sr+8>>2];n[la+12>>2]=n[Sr+12>>2];n[la+16>>2]=n[Sr+16>>2];n[la+20>>2]=n[Sr+20>>2];n[la+24>>2]=n[Sr+24>>2];n[la+28>>2]=n[Sr+28>>2];m=0;X(1,wa|0,la|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[Ur>>2]=n[wa>>2];n[Ur+4>>2]=n[wa+4>>2];n[Ur+8>>2]=n[wa+8>>2];n[Ur+12>>2]=n[wa+12>>2];n[Ur+16>>2]=n[wa+16>>2];n[Ur+20>>2]=n[wa+20>>2];n[Ur+24>>2]=n[wa+24>>2];n[Ur+28>>2]=n[wa+28>>2];n[o>>2]=n[Ur>>2];n[o+4>>2]=n[Ur+4>>2];n[o+8>>2]=n[Ur+8>>2];n[o+12>>2]=n[Ur+12>>2];n[o+16>>2]=n[Ur+16>>2];n[o+20>>2]=n[Ur+20>>2];n[o+24>>2]=n[Ur+24>>2];n[o+28>>2]=n[Ur+28>>2];m=0;X(2,za|0,Qe|0,Ze|0,Je|0,$e|0);Ye=m;m=0;if(Ye&1){a=122;break}if(!t){t=1;r=c;continue}if(s>>>0<=c>>>0){a=115;break}r=r+2|0;Ye=ta;Ge=u+(c*192|0)|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=u+(c*192|0)+64|0;n[ca>>2]=n[b>>2];n[ca+4>>2]=n[b+4>>2];n[ca+8>>2]=n[b+8>>2];n[ca+12>>2]=n[b+12>>2];n[ca+16>>2]=n[b+16>>2];n[ca+20>>2]=n[b+20>>2];n[ca+24>>2]=n[b+24>>2];n[ca+28>>2]=n[b+28>>2];n[Sr>>2]=n[b>>2];n[Sr+4>>2]=n[b+4>>2];n[Sr+8>>2]=n[b+8>>2];n[Sr+12>>2]=n[b+12>>2];n[Sr+16>>2]=n[b+16>>2];n[Sr+20>>2]=n[b+20>>2];n[Sr+24>>2]=n[b+24>>2];n[Sr+28>>2]=n[b+28>>2];n[ya>>2]=n[Ye>>2];n[ya+4>>2]=n[Ye+4>>2];n[ya+8>>2]=n[Ye+8>>2];n[ya+12>>2]=n[Ye+12>>2];n[ya+16>>2]=n[Ye+16>>2];n[ya+20>>2]=n[Ye+20>>2];n[ya+24>>2]=n[Ye+24>>2];n[ya+28>>2]=n[Ye+28>>2];n[sa>>2]=n[ca>>2];n[sa+4>>2]=n[ca+4>>2];n[sa+8>>2]=n[ca+8>>2];n[sa+12>>2]=n[ca+12>>2];n[sa+16>>2]=n[ca+16>>2];n[sa+20>>2]=n[ca+20>>2];n[sa+24>>2]=n[ca+24>>2];n[sa+28>>2]=n[ca+28>>2];m=0;X(1,ya|0,sa|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[ra>>2]=n[ya>>2];n[ra+4>>2]=n[ya+4>>2];n[ra+8>>2]=n[ya+8>>2];n[ra+12>>2]=n[ya+12>>2];n[ra+16>>2]=n[ya+16>>2];n[ra+20>>2]=n[ya+20>>2];n[ra+24>>2]=n[ya+24>>2];n[ra+28>>2]=n[ya+28>>2];Ye=u+(c*192|0)+96|0;n[Aa>>2]=n[Ye>>2];n[Aa+4>>2]=n[Ye+4>>2];n[Aa+8>>2]=n[Ye+8>>2];n[Aa+12>>2]=n[Ye+12>>2];n[Aa+16>>2]=n[Ye+16>>2];n[Aa+20>>2]=n[Ye+20>>2];n[Aa+24>>2]=n[Ye+24>>2];n[Aa+28>>2]=n[Ye+28>>2];n[pa>>2]=n[Sr>>2];n[pa+4>>2]=n[Sr+4>>2];n[pa+8>>2]=n[Sr+8>>2];n[pa+12>>2]=n[Sr+12>>2];n[pa+16>>2]=n[Sr+16>>2];n[pa+20>>2]=n[Sr+20>>2];n[pa+24>>2]=n[Sr+24>>2];n[pa+28>>2]=n[Sr+28>>2];m=0;X(1,Aa|0,pa|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[Ur>>2]=n[Aa>>2];n[Ur+4>>2]=n[Aa+4>>2];n[Ur+8>>2]=n[Aa+8>>2];n[Ur+12>>2]=n[Aa+12>>2];n[Ur+16>>2]=n[Aa+16>>2];n[Ur+20>>2]=n[Aa+20>>2];n[Ur+24>>2]=n[Aa+24>>2];n[Ur+28>>2]=n[Aa+28>>2];n[d>>2]=n[Ur>>2];n[d+4>>2]=n[Ur+4>>2];n[d+8>>2]=n[Ur+8>>2];n[d+12>>2]=n[Ur+12>>2];n[d+16>>2]=n[Ur+16>>2];n[d+20>>2]=n[Ur+20>>2];n[d+24>>2]=n[Ur+24>>2];n[d+28>>2]=n[Ur+28>>2];Ye=u+(c*192|0)+128|0;n[ia>>2]=n[On>>2];n[ia+4>>2]=n[On+4>>2];n[ia+8>>2]=n[On+8>>2];n[ia+12>>2]=n[On+12>>2];n[ia+16>>2]=n[On+16>>2];n[ia+20>>2]=n[On+20>>2];n[ia+24>>2]=n[On+24>>2];n[ia+28>>2]=n[On+28>>2];n[Sr>>2]=n[On>>2];n[Sr+4>>2]=n[On+4>>2];n[Sr+8>>2]=n[On+8>>2];n[Sr+12>>2]=n[On+12>>2];n[Sr+16>>2]=n[On+16>>2];n[Sr+20>>2]=n[On+20>>2];n[Sr+24>>2]=n[On+24>>2];n[Sr+28>>2]=n[On+28>>2];n[ma>>2]=n[Ye>>2];n[ma+4>>2]=n[Ye+4>>2];n[ma+8>>2]=n[Ye+8>>2];n[ma+12>>2]=n[Ye+12>>2];n[ma+16>>2]=n[Ye+16>>2];n[ma+20>>2]=n[Ye+20>>2];n[ma+24>>2]=n[Ye+24>>2];n[ma+28>>2]=n[Ye+28>>2];n[oa>>2]=n[ia>>2];n[oa+4>>2]=n[ia+4>>2];n[oa+8>>2]=n[ia+8>>2];n[oa+12>>2]=n[ia+12>>2];n[oa+16>>2]=n[ia+16>>2];n[oa+20>>2]=n[ia+20>>2];n[oa+24>>2]=n[ia+24>>2];n[oa+28>>2]=n[ia+28>>2];m=0;X(1,ma|0,oa|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[na>>2]=n[ma>>2];n[na+4>>2]=n[ma+4>>2];n[na+8>>2]=n[ma+8>>2];n[na+12>>2]=n[ma+12>>2];n[na+16>>2]=n[ma+16>>2];n[na+20>>2]=n[ma+20>>2];n[na+24>>2]=n[ma+24>>2];n[na+28>>2]=n[ma+28>>2];Ye=u+(c*192|0)+160|0;n[_a>>2]=n[Ye>>2];n[_a+4>>2]=n[Ye+4>>2];n[_a+8>>2]=n[Ye+8>>2];n[_a+12>>2]=n[Ye+12>>2];n[_a+16>>2]=n[Ye+16>>2];n[_a+20>>2]=n[Ye+20>>2];n[_a+24>>2]=n[Ye+24>>2];n[_a+28>>2]=n[Ye+28>>2];n[ua>>2]=n[Sr>>2];n[ua+4>>2]=n[Sr+4>>2];n[ua+8>>2]=n[Sr+8>>2];n[ua+12>>2]=n[Sr+12>>2];n[ua+16>>2]=n[Sr+16>>2];n[ua+20>>2]=n[Sr+20>>2];n[ua+24>>2]=n[Sr+24>>2];n[ua+28>>2]=n[Sr+28>>2];m=0;X(1,_a|0,ua|0,8,-460954743,-2016278654);Ye=m;m=0;if(Ye&1){a=122;break}n[Ur>>2]=n[_a>>2];n[Ur+4>>2]=n[_a+4>>2];n[Ur+8>>2]=n[_a+8>>2];n[Ur+12>>2]=n[_a+12>>2];n[Ur+16>>2]=n[_a+16>>2];n[Ur+20>>2]=n[_a+20>>2];n[Ur+24>>2]=n[_a+24>>2];n[Ur+28>>2]=n[_a+28>>2];n[i>>2]=n[Ur>>2];n[i+4>>2]=n[Ur+4>>2];n[i+8>>2]=n[Ur+8>>2];n[i+12>>2]=n[Ur+12>>2];n[i+16>>2]=n[Ur+16>>2];n[i+20>>2]=n[Ur+20>>2];n[i+24>>2]=n[Ur+24>>2];n[i+28>>2]=n[Ur+28>>2];m=0;X(2,aa|0,za|0,ta|0,ra|0,na|0);Ye=m;m=0;if(Ye&1){a=122;break}ad(za|0,aa|0,384)|0;t=1}if((a|0)==90){if(s>>>0<=r>>>0){m=0;re(17,2488,r|0,s|0);m=0;Vn=me()|0;fa(qn);je(Vn|0)}a=r+1|0;Ye=Ra;Ge=u+(r*192|0)|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ka=u+(r*192|0)+64|0;n[Ba>>2]=n[b>>2];n[Ba+4>>2]=n[b+4>>2];n[Ba+8>>2]=n[b+8>>2];n[Ba+12>>2]=n[b+12>>2];n[Ba+16>>2]=n[b+16>>2];n[Ba+20>>2]=n[b+20>>2];n[Ba+24>>2]=n[b+24>>2];n[Ba+28>>2]=n[b+28>>2];n[Sr>>2]=n[b>>2];n[Sr+4>>2]=n[b+4>>2];n[Sr+8>>2]=n[b+8>>2];n[Sr+12>>2]=n[b+12>>2];n[Sr+16>>2]=n[b+16>>2];n[Sr+20>>2]=n[b+20>>2];n[Sr+24>>2]=n[b+24>>2];n[Sr+28>>2]=n[b+28>>2];n[Ja>>2]=n[ka>>2];n[Ja+4>>2]=n[ka+4>>2];n[Ja+8>>2]=n[ka+8>>2];n[Ja+12>>2]=n[ka+12>>2];n[Ja+16>>2]=n[ka+16>>2];n[Ja+20>>2]=n[ka+20>>2];n[Ja+24>>2]=n[ka+24>>2];n[Ja+28>>2]=n[ka+28>>2];n[qa>>2]=n[Ba>>2];n[qa+4>>2]=n[Ba+4>>2];n[qa+8>>2]=n[Ba+8>>2];n[qa+12>>2]=n[Ba+12>>2];n[qa+16>>2]=n[Ba+16>>2];n[qa+20>>2]=n[Ba+20>>2];n[qa+24>>2]=n[Ba+24>>2];n[qa+28>>2]=n[Ba+28>>2];m=0;X(1,Ja|0,qa|0,8,-460954743,-2016278654);qa=m;m=0;if(qa&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Oa>>2]=n[Ja>>2];n[Oa+4>>2]=n[Ja+4>>2];n[Oa+8>>2]=n[Ja+8>>2];n[Oa+12>>2]=n[Ja+12>>2];n[Oa+16>>2]=n[Ja+16>>2];n[Oa+20>>2]=n[Ja+20>>2];n[Oa+24>>2]=n[Ja+24>>2];n[Oa+28>>2]=n[Ja+28>>2];Ja=u+(r*192|0)+96|0;n[at>>2]=n[Ja>>2];n[at+4>>2]=n[Ja+4>>2];n[at+8>>2]=n[Ja+8>>2];n[at+12>>2]=n[Ja+12>>2];n[at+16>>2]=n[Ja+16>>2];n[at+20>>2]=n[Ja+20>>2];n[at+24>>2]=n[Ja+24>>2];n[at+28>>2]=n[Ja+28>>2];n[Ga>>2]=n[Sr>>2];n[Ga+4>>2]=n[Sr+4>>2];n[Ga+8>>2]=n[Sr+8>>2];n[Ga+12>>2]=n[Sr+12>>2];n[Ga+16>>2]=n[Sr+16>>2];n[Ga+20>>2]=n[Sr+20>>2];n[Ga+24>>2]=n[Sr+24>>2];n[Ga+28>>2]=n[Sr+28>>2];m=0;X(1,at|0,Ga|0,8,-460954743,-2016278654);Ja=m;m=0;if(Ja&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[at>>2];n[Ur+4>>2]=n[at+4>>2];n[Ur+8>>2]=n[at+8>>2];n[Ur+12>>2]=n[at+12>>2];n[Ur+16>>2]=n[at+16>>2];n[Ur+20>>2]=n[at+20>>2];n[Ur+24>>2]=n[at+24>>2];n[Ur+28>>2]=n[at+28>>2];at=Oa+32|0;n[at>>2]=n[Ur>>2];n[at+4>>2]=n[Ur+4>>2];n[at+8>>2]=n[Ur+8>>2];n[at+12>>2]=n[Ur+12>>2];n[at+16>>2]=n[Ur+16>>2];n[at+20>>2]=n[Ur+20>>2];n[at+24>>2]=n[Ur+24>>2];n[at+28>>2]=n[Ur+28>>2];at=u+(r*192|0)+128|0;n[Na>>2]=n[On>>2];n[Na+4>>2]=n[On+4>>2];n[Na+8>>2]=n[On+8>>2];n[Na+12>>2]=n[On+12>>2];n[Na+16>>2]=n[On+16>>2];n[Na+20>>2]=n[On+20>>2];n[Na+24>>2]=n[On+24>>2];n[Na+28>>2]=n[On+28>>2];n[Sr>>2]=n[On>>2];n[Sr+4>>2]=n[On+4>>2];n[Sr+8>>2]=n[On+8>>2];n[Sr+12>>2]=n[On+12>>2];n[Sr+16>>2]=n[On+16>>2];n[Sr+20>>2]=n[On+20>>2];n[Sr+24>>2]=n[On+24>>2];n[Sr+28>>2]=n[On+28>>2];n[Xa>>2]=n[at>>2];n[Xa+4>>2]=n[at+4>>2];n[Xa+8>>2]=n[at+8>>2];n[Xa+12>>2]=n[at+12>>2];n[Xa+16>>2]=n[at+16>>2];n[Xa+20>>2]=n[at+20>>2];n[Xa+24>>2]=n[at+24>>2];n[Xa+28>>2]=n[at+28>>2];n[Ua>>2]=n[Na>>2];n[Ua+4>>2]=n[Na+4>>2];n[Ua+8>>2]=n[Na+8>>2];n[Ua+12>>2]=n[Na+12>>2];n[Ua+16>>2]=n[Na+16>>2];n[Ua+20>>2]=n[Na+20>>2];n[Ua+24>>2]=n[Na+24>>2];n[Ua+28>>2]=n[Na+28>>2];m=0;X(1,Xa|0,Ua|0,8,-460954743,-2016278654);at=m;m=0;if(at&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ma>>2]=n[Xa>>2];n[Ma+4>>2]=n[Xa+4>>2];n[Ma+8>>2]=n[Xa+8>>2];n[Ma+12>>2]=n[Xa+12>>2];n[Ma+16>>2]=n[Xa+16>>2];n[Ma+20>>2]=n[Xa+20>>2];n[Ma+24>>2]=n[Xa+24>>2];n[Ma+28>>2]=n[Xa+28>>2];at=u+(r*192|0)+160|0;n[tt>>2]=n[at>>2];n[tt+4>>2]=n[at+4>>2];n[tt+8>>2]=n[at+8>>2];n[tt+12>>2]=n[at+12>>2];n[tt+16>>2]=n[at+16>>2];n[tt+20>>2]=n[at+20>>2];n[tt+24>>2]=n[at+24>>2];n[tt+28>>2]=n[at+28>>2];n[Wa>>2]=n[Sr>>2];n[Wa+4>>2]=n[Sr+4>>2];n[Wa+8>>2]=n[Sr+8>>2];n[Wa+12>>2]=n[Sr+12>>2];n[Wa+16>>2]=n[Sr+16>>2];n[Wa+20>>2]=n[Sr+20>>2];n[Wa+24>>2]=n[Sr+24>>2];n[Wa+28>>2]=n[Sr+28>>2];m=0;X(1,tt|0,Wa|0,8,-460954743,-2016278654);at=m;m=0;if(at&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[tt>>2];n[Ur+4>>2]=n[tt+4>>2];n[Ur+8>>2]=n[tt+8>>2];n[Ur+12>>2]=n[tt+12>>2];n[Ur+16>>2]=n[tt+16>>2];n[Ur+20>>2]=n[tt+20>>2];n[Ur+24>>2]=n[tt+24>>2];n[Ur+28>>2]=n[tt+28>>2];tt=Ma+32|0;n[tt>>2]=n[Ur>>2];n[tt+4>>2]=n[Ur+4>>2];n[tt+8>>2]=n[Ur+8>>2];n[tt+12>>2]=n[Ur+12>>2];n[tt+16>>2]=n[Ur+16>>2];n[tt+20>>2]=n[Ur+20>>2];n[tt+24>>2]=n[Ur+24>>2];n[tt+28>>2]=n[Ur+28>>2];m=0;X(2,Ca|0,za|0,Ra|0,Oa|0,Ma|0);tt=m;m=0;if(tt&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(za|0,Ca|0,384)|0;if(s>>>0<=a>>>0){m=0;re(17,2488,a|0,s|0);m=0;Vn=me()|0;fa(qn);je(Vn|0)}Ye=Pa;Ge=u+(a*192|0)|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));tt=u+(a*192|0)+64|0;n[La>>2]=n[b>>2];n[La+4>>2]=n[b+4>>2];n[La+8>>2]=n[b+8>>2];n[La+12>>2]=n[b+12>>2];n[La+16>>2]=n[b+16>>2];n[La+20>>2]=n[b+20>>2];n[La+24>>2]=n[b+24>>2];n[La+28>>2]=n[b+28>>2];n[Sr>>2]=n[b>>2];n[Sr+4>>2]=n[b+4>>2];n[Sr+8>>2]=n[b+8>>2];n[Sr+12>>2]=n[b+12>>2];n[Sr+16>>2]=n[b+16>>2];n[Sr+20>>2]=n[b+20>>2];n[Sr+24>>2]=n[b+24>>2];n[Sr+28>>2]=n[b+28>>2];n[$a>>2]=n[tt>>2];n[$a+4>>2]=n[tt+4>>2];n[$a+8>>2]=n[tt+8>>2];n[$a+12>>2]=n[tt+12>>2];n[$a+16>>2]=n[tt+16>>2];n[$a+20>>2]=n[tt+20>>2];n[$a+24>>2]=n[tt+24>>2];n[$a+28>>2]=n[tt+28>>2];n[Ha>>2]=n[La>>2];n[Ha+4>>2]=n[La+4>>2];n[Ha+8>>2]=n[La+8>>2];n[Ha+12>>2]=n[La+12>>2];n[Ha+16>>2]=n[La+16>>2];n[Ha+20>>2]=n[La+20>>2];n[Ha+24>>2]=n[La+24>>2];n[Ha+28>>2]=n[La+28>>2];m=0;X(1,$a|0,Ha|0,8,-460954743,-2016278654);tt=m;m=0;if(tt&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Fa>>2]=n[$a>>2];n[Fa+4>>2]=n[$a+4>>2];n[Fa+8>>2]=n[$a+8>>2];n[Fa+12>>2]=n[$a+12>>2];n[Fa+16>>2]=n[$a+16>>2];n[Fa+20>>2]=n[$a+20>>2];n[Fa+24>>2]=n[$a+24>>2];n[Fa+28>>2]=n[$a+28>>2];tt=u+(a*192|0)+96|0;n[rt>>2]=n[tt>>2];n[rt+4>>2]=n[tt+4>>2];n[rt+8>>2]=n[tt+8>>2];n[rt+12>>2]=n[tt+12>>2];n[rt+16>>2]=n[tt+16>>2];n[rt+20>>2]=n[tt+20>>2];n[rt+24>>2]=n[tt+24>>2];n[rt+28>>2]=n[tt+28>>2];n[Ya>>2]=n[Sr>>2];n[Ya+4>>2]=n[Sr+4>>2];n[Ya+8>>2]=n[Sr+8>>2];n[Ya+12>>2]=n[Sr+12>>2];n[Ya+16>>2]=n[Sr+16>>2];n[Ya+20>>2]=n[Sr+20>>2];n[Ya+24>>2]=n[Sr+24>>2];n[Ya+28>>2]=n[Sr+28>>2];m=0;X(1,rt|0,Ya|0,8,-460954743,-2016278654);tt=m;m=0;if(tt&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[rt>>2];n[Ur+4>>2]=n[rt+4>>2];n[Ur+8>>2]=n[rt+8>>2];n[Ur+12>>2]=n[rt+12>>2];n[Ur+16>>2]=n[rt+16>>2];n[Ur+20>>2]=n[rt+20>>2];n[Ur+24>>2]=n[rt+24>>2];n[Ur+28>>2]=n[rt+28>>2];rt=Fa+32|0;n[rt>>2]=n[Ur>>2];n[rt+4>>2]=n[Ur+4>>2];n[rt+8>>2]=n[Ur+8>>2];n[rt+12>>2]=n[Ur+12>>2];n[rt+16>>2]=n[Ur+16>>2];n[rt+20>>2]=n[Ur+20>>2];n[rt+24>>2]=n[Ur+24>>2];n[rt+28>>2]=n[Ur+28>>2];rt=u+(a*192|0)+128|0;n[jn>>2]=n[On>>2];n[jn+4>>2]=n[On+4>>2];n[jn+8>>2]=n[On+8>>2];n[jn+12>>2]=n[On+12>>2];n[jn+16>>2]=n[On+16>>2];n[jn+20>>2]=n[On+20>>2];n[jn+24>>2]=n[On+24>>2];n[jn+28>>2]=n[On+28>>2];n[Sr>>2]=n[On>>2];n[Sr+4>>2]=n[On+4>>2];n[Sr+8>>2]=n[On+8>>2];n[Sr+12>>2]=n[On+12>>2];n[Sr+16>>2]=n[On+16>>2];n[Sr+20>>2]=n[On+20>>2];n[Sr+24>>2]=n[On+24>>2];n[Sr+28>>2]=n[On+28>>2];n[et>>2]=n[rt>>2];n[et+4>>2]=n[rt+4>>2];n[et+8>>2]=n[rt+8>>2];n[et+12>>2]=n[rt+12>>2];n[et+16>>2]=n[rt+16>>2];n[et+20>>2]=n[rt+20>>2];n[et+24>>2]=n[rt+24>>2];n[et+28>>2]=n[rt+28>>2];n[Va>>2]=n[jn>>2];n[Va+4>>2]=n[jn+4>>2];n[Va+8>>2]=n[jn+8>>2];n[Va+12>>2]=n[jn+12>>2];n[Va+16>>2]=n[jn+16>>2];n[Va+20>>2]=n[jn+20>>2];n[Va+24>>2]=n[jn+24>>2];n[Va+28>>2]=n[jn+28>>2];m=0;X(1,et|0,Va|0,8,-460954743,-2016278654);rt=m;m=0;if(rt&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Da>>2]=n[et>>2];n[Da+4>>2]=n[et+4>>2];n[Da+8>>2]=n[et+8>>2];n[Da+12>>2]=n[et+12>>2];n[Da+16>>2]=n[et+16>>2];n[Da+20>>2]=n[et+20>>2];n[Da+24>>2]=n[et+24>>2];n[Da+28>>2]=n[et+28>>2];rt=u+(a*192|0)+160|0;n[ct>>2]=n[rt>>2];n[ct+4>>2]=n[rt+4>>2];n[ct+8>>2]=n[rt+8>>2];n[ct+12>>2]=n[rt+12>>2];n[ct+16>>2]=n[rt+16>>2];n[ct+20>>2]=n[rt+20>>2];n[ct+24>>2]=n[rt+24>>2];n[ct+28>>2]=n[rt+28>>2];n[Ka>>2]=n[Sr>>2];n[Ka+4>>2]=n[Sr+4>>2];n[Ka+8>>2]=n[Sr+8>>2];n[Ka+12>>2]=n[Sr+12>>2];n[Ka+16>>2]=n[Sr+16>>2];n[Ka+20>>2]=n[Sr+20>>2];n[Ka+24>>2]=n[Sr+24>>2];n[Ka+28>>2]=n[Sr+28>>2];m=0;X(1,ct|0,Ka|0,8,-460954743,-2016278654);rt=m;m=0;if(rt&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[ct>>2];n[Ur+4>>2]=n[ct+4>>2];n[Ur+8>>2]=n[ct+8>>2];n[Ur+12>>2]=n[ct+12>>2];n[Ur+16>>2]=n[ct+16>>2];n[Ur+20>>2]=n[ct+20>>2];n[Ur+24>>2]=n[ct+24>>2];n[Ur+28>>2]=n[ct+28>>2];ct=Da+32|0;n[ct>>2]=n[Ur>>2];n[ct+4>>2]=n[Ur+4>>2];n[ct+8>>2]=n[Ur+8>>2];n[ct+12>>2]=n[Ur+12>>2];n[ct+16>>2]=n[Ur+16>>2];n[ct+20>>2]=n[Ur+20>>2];n[ct+24>>2]=n[Ur+24>>2];n[ct+28>>2]=n[Ur+28>>2];m=0;X(2,Ia|0,za|0,Pa|0,Fa|0,Da|0);ct=m;m=0;if(ct&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(za|0,Ia|0,384)|0;ad(xa|0,za|0,384)|0;ad(Sa|0,xa|0,384)|0;m=0;ae(20,Ea|0,Sa|0);ct=m;m=0;if(ct&1){Vn=me()|0;fa(qn);je(Vn|0)}ct=Ea;do{if(!((n[ct>>2]|0)==0&(n[ct+4>>2]|0)==0)){ad(Tt|0,Ea+8|0,384)|0;ad(St|0,xa|0,192)|0;Ye=xa+192|0;ad(ja|0,Ye|0,192)|0;ad(ft|0,Ye|0,192)|0;Ye=Ta;Ge=ja;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Za;Ge=ja;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Qa>>2]=n[Ta>>2];n[Qa+4>>2]=n[Ta+4>>2];n[Qa+8>>2]=n[Ta+8>>2];n[Qa+12>>2]=n[Ta+12>>2];n[Qa+16>>2]=n[Ta+16>>2];n[Qa+20>>2]=n[Ta+20>>2];n[Qa+24>>2]=n[Ta+24>>2];n[Qa+28>>2]=n[Ta+28>>2];m=0;ae(18,Qa|0,8);ct=m;m=0;if(ct&1){Vn=me()|0;fa(qn);je(Vn|0)}n[gt>>2]=n[Qa>>2];n[gt+4>>2]=n[Qa+4>>2];n[gt+8>>2]=n[Qa+8>>2];n[gt+12>>2]=n[Qa+12>>2];n[gt+16>>2]=n[Qa+16>>2];n[gt+20>>2]=n[Qa+20>>2];n[gt+24>>2]=n[Qa+24>>2];n[gt+28>>2]=n[Qa+28>>2];ct=Za+32|0;n[nt>>2]=n[ct>>2];n[nt+4>>2]=n[ct+4>>2];n[nt+8>>2]=n[ct+8>>2];n[nt+12>>2]=n[ct+12>>2];n[nt+16>>2]=n[ct+16>>2];n[nt+20>>2]=n[ct+20>>2];n[nt+24>>2]=n[ct+24>>2];n[nt+28>>2]=n[ct+28>>2];m=0;ae(18,nt|0,8);ct=m;m=0;if(ct&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[nt>>2];n[jn+4>>2]=n[nt+4>>2];n[jn+8>>2]=n[nt+8>>2];n[jn+12>>2]=n[nt+12>>2];n[jn+16>>2]=n[nt+16>>2];n[jn+20>>2]=n[nt+20>>2];n[jn+24>>2]=n[nt+24>>2];n[jn+28>>2]=n[nt+28>>2];a=gt+32|0;n[a>>2]=n[jn>>2];n[a+4>>2]=n[jn+4>>2];n[a+8>>2]=n[jn+8>>2];n[a+12>>2]=n[jn+12>>2];n[a+16>>2]=n[jn+16>>2];n[a+20>>2]=n[jn+20>>2];n[a+24>>2]=n[jn+24>>2];n[a+28>>2]=n[jn+28>>2];a=ft+64|0;Ye=it;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=st;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[ot>>2]=n[it>>2];n[ot+4>>2]=n[it+4>>2];n[ot+8>>2]=n[it+8>>2];n[ot+12>>2]=n[it+12>>2];n[ot+16>>2]=n[it+16>>2];n[ot+20>>2]=n[it+20>>2];n[ot+24>>2]=n[it+24>>2];n[ot+28>>2]=n[it+28>>2];m=0;ae(18,ot|0,8);it=m;m=0;if(it&1){Vn=me()|0;fa(qn);je(Vn|0)}n[yt>>2]=n[ot>>2];n[yt+4>>2]=n[ot+4>>2];n[yt+8>>2]=n[ot+8>>2];n[yt+12>>2]=n[ot+12>>2];n[yt+16>>2]=n[ot+16>>2];n[yt+20>>2]=n[ot+20>>2];n[yt+24>>2]=n[ot+24>>2];n[yt+28>>2]=n[ot+28>>2];st=st+32|0;n[dt>>2]=n[st>>2];n[dt+4>>2]=n[st+4>>2];n[dt+8>>2]=n[st+8>>2];n[dt+12>>2]=n[st+12>>2];n[dt+16>>2]=n[st+16>>2];n[dt+20>>2]=n[st+20>>2];n[dt+24>>2]=n[st+24>>2];n[dt+28>>2]=n[st+28>>2];m=0;ae(18,dt|0,8);st=m;m=0;if(st&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[dt>>2];n[jn+4>>2]=n[dt+4>>2];n[jn+8>>2]=n[dt+8>>2];n[jn+12>>2]=n[dt+12>>2];n[jn+16>>2]=n[dt+16>>2];n[jn+20>>2]=n[dt+20>>2];n[jn+24>>2]=n[dt+24>>2];n[jn+28>>2]=n[dt+28>>2];a=yt+32|0;n[a>>2]=n[jn>>2];n[a+4>>2]=n[jn+4>>2];n[a+8>>2]=n[jn+8>>2];n[a+12>>2]=n[jn+12>>2];n[a+16>>2]=n[jn+16>>2];n[a+20>>2]=n[jn+20>>2];n[a+24>>2]=n[jn+24>>2];n[a+28>>2]=n[jn+28>>2];a=ft+128|0;Ye=wt;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Ct;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[jt>>2]=n[wt>>2];n[jt+4>>2]=n[wt+4>>2];n[jt+8>>2]=n[wt+8>>2];n[jt+12>>2]=n[wt+12>>2];n[jt+16>>2]=n[wt+16>>2];n[jt+20>>2]=n[wt+20>>2];n[jt+24>>2]=n[wt+24>>2];n[jt+28>>2]=n[wt+28>>2];m=0;ae(18,jt|0,8);wt=m;m=0;if(wt&1){Vn=me()|0;fa(qn);je(Vn|0)}n[_t>>2]=n[jt>>2];n[_t+4>>2]=n[jt+4>>2];n[_t+8>>2]=n[jt+8>>2];n[_t+12>>2]=n[jt+12>>2];n[_t+16>>2]=n[jt+16>>2];n[_t+20>>2]=n[jt+20>>2];n[_t+24>>2]=n[jt+24>>2];n[_t+28>>2]=n[jt+28>>2];Ct=Ct+32|0;n[Rt>>2]=n[Ct>>2];n[Rt+4>>2]=n[Ct+4>>2];n[Rt+8>>2]=n[Ct+8>>2];n[Rt+12>>2]=n[Ct+12>>2];n[Rt+16>>2]=n[Ct+16>>2];n[Rt+20>>2]=n[Ct+20>>2];n[Rt+24>>2]=n[Ct+24>>2];n[Rt+28>>2]=n[Ct+28>>2];m=0;ae(18,Rt|0,8);Ct=m;m=0;if(Ct&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[Rt>>2];n[jn+4>>2]=n[Rt+4>>2];n[jn+8>>2]=n[Rt+8>>2];n[jn+12>>2]=n[Rt+12>>2];n[jn+16>>2]=n[Rt+16>>2];n[jn+20>>2]=n[Rt+20>>2];n[jn+24>>2]=n[Rt+24>>2];n[jn+28>>2]=n[Rt+28>>2];Ye=_t+32|0;n[Ye>>2]=n[jn>>2];n[Ye+4>>2]=n[jn+4>>2];n[Ye+8>>2]=n[jn+8>>2];n[Ye+12>>2]=n[jn+12>>2];n[Ye+16>>2]=n[jn+16>>2];n[Ye+20>>2]=n[jn+20>>2];n[Ye+24>>2]=n[jn+24>>2];n[Ye+28>>2]=n[jn+28>>2];Ye=vt;Ge=gt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vt+64|0;Ge=yt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vt+128|0;Ge=_t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(St+192|0,vt|0,192)|0;ad(bt|0,St|0,384)|0;ad(ut|0,Tt|0,384)|0;m=0;re(18,Xt|0,bt|0,ut|0);Rt=m;m=0;if(Rt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Gt;Ge=Xt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Et;Ge=Xt+64|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Rt=lt;n[Rt>>2]=333974428;n[Rt+4>>2]=860932238;Rt=lt+8|0;n[Rt>>2]=-614574407;n[Rt+4>>2]=2110674300;Rt=lt+16|0;n[Rt>>2]=-1240115638;n[Rt+4>>2]=1610724536;Rt=lt+24|0;n[Rt>>2]=33691616;n[Rt+4>>2]=646112791;Rt=lt+32|0;n[Rt>>2]=0;n[Rt+4>>2]=0;n[Rt+8>>2]=0;n[Rt+12>>2]=0;n[Rt+16>>2]=0;n[Rt+20>>2]=0;n[Rt+24>>2]=0;n[Rt+28>>2]=0;m=0;re(13,kt|0,Et|0,lt|0);Rt=m;m=0;if(Rt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=ht;Ge=Xt+128|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Rt=mt;n[Rt>>2]=-679288491;n[Rt+4>>2]=1905462289;Rt=mt+8|0;n[Rt>>2]=-4312285;n[Rt+4>>2]=-1497656196;Rt=mt+16|0;n[Rt>>2]=-730590140;n[Rt+4>>2]=-1439681724;Rt=mt+24|0;n[Rt>>2]=643385667;n[Rt+4>>2]=742080269;Rt=mt+32|0;n[Rt>>2]=0;n[Rt+4>>2]=0;n[Rt+8>>2]=0;n[Rt+12>>2]=0;n[Rt+16>>2]=0;n[Rt+20>>2]=0;n[Rt+24>>2]=0;n[Rt+28>>2]=0;m=0;re(13,pt|0,ht|0,mt|0);Rt=m;m=0;if(Rt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Gt+64|0;Ge=kt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Gt+128|0;Ge=pt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));r=Xt+192|0;Ye=It;Ge=r;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Nt;Ge=Xt+256|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Rt=Ot;n[Rt>>2]=333974428;n[Rt+4>>2]=860932238;Rt=Ot+8|0;n[Rt>>2]=-614574407;n[Rt+4>>2]=2110674300;Rt=Ot+16|0;n[Rt>>2]=-1240115638;n[Rt+4>>2]=1610724536;Rt=Ot+24|0;n[Rt>>2]=33691616;n[Rt+4>>2]=646112791;Rt=Ot+32|0;n[Rt>>2]=0;n[Rt+4>>2]=0;n[Rt+8>>2]=0;n[Rt+12>>2]=0;n[Rt+16>>2]=0;n[Rt+20>>2]=0;n[Rt+24>>2]=0;n[Rt+28>>2]=0;m=0;re(13,Pt|0,Nt|0,Ot|0);Nt=m;m=0;if(Nt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Bt;Ge=Xt+320|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Nt=Mt;n[Nt>>2]=-679288491;n[Nt+4>>2]=1905462289;Nt=Mt+8|0;n[Nt>>2]=-4312285;n[Nt+4>>2]=-1497656196;Nt=Mt+16|0;n[Nt>>2]=-730590140;n[Nt+4>>2]=-1439681724;Nt=Mt+24|0;n[Nt>>2]=643385667;n[Nt+4>>2]=742080269;Nt=Mt+32|0;n[Nt>>2]=0;n[Nt+4>>2]=0;n[Nt+8>>2]=0;n[Nt+12>>2]=0;n[Nt+16>>2]=0;n[Nt+20>>2]=0;n[Nt+24>>2]=0;n[Nt+28>>2]=0;m=0;re(13,qt|0,Bt|0,Mt|0);Nt=m;m=0;if(Nt&1){Vn=me()|0;fa(qn);je(Vn|0)}t=It+64|0;Ye=t;Ge=Pt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=It+128|0;Ye=a;Ge=qt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Wt;Ge=r;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));qt=Yt;n[qt>>2]=16391154;n[qt+4>>2]=-896696315;qt=Yt+8|0;n[qt>>2]=1756600169;n[qt+4>>2]=-255470060;qt=Yt+16|0;n[qt>>2]=-1391639528;n[qt+4>>2]=236982897;qt=Yt+24|0;n[qt>>2]=-1160227098;n[qt+4>>2]=69799781;qt=Yt+32|0;n[qt>>2]=0;n[qt+4>>2]=0;n[qt+8>>2]=0;n[qt+12>>2]=0;n[qt+16>>2]=0;n[qt+20>>2]=0;n[qt+24>>2]=0;n[qt+28>>2]=0;m=0;re(13,Qt|0,Wt|0,Yt|0);Yt=m;m=0;if(Yt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Zt;Ge=t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Yt=Ft;n[Yt>>2]=16391154;n[Yt+4>>2]=-896696315;Yt=Ft+8|0;n[Yt>>2]=1756600169;n[Yt+4>>2]=-255470060;Yt=Ft+16|0;n[Yt>>2]=-1391639528;n[Yt+4>>2]=236982897;Yt=Ft+24|0;n[Yt>>2]=-1160227098;n[Yt+4>>2]=69799781;Yt=Ft+32|0;n[Yt>>2]=0;n[Yt+4>>2]=0;n[Yt+8>>2]=0;n[Yt+12>>2]=0;n[Yt+16>>2]=0;n[Yt+20>>2]=0;n[Yt+24>>2]=0;n[Yt+28>>2]=0;m=0;re(13,Kt|0,Zt|0,Ft|0);Zt=m;m=0;if(Zt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Dt;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Zt=zt;n[Zt>>2]=16391154;n[Zt+4>>2]=-896696315;Zt=zt+8|0;n[Zt>>2]=1756600169;n[Zt+4>>2]=-255470060;Zt=zt+16|0;n[Zt>>2]=-1391639528;n[Zt+4>>2]=236982897;Zt=zt+24|0;n[Zt>>2]=-1160227098;n[Zt+4>>2]=69799781;Zt=zt+32|0;n[Zt>>2]=0;n[Zt+4>>2]=0;n[Zt+8>>2]=0;n[Zt+12>>2]=0;n[Zt+16>>2]=0;n[Zt+20>>2]=0;n[Zt+24>>2]=0;n[Zt+28>>2]=0;m=0;re(13,Lt|0,Dt|0,zt|0);Zt=m;m=0;if(Zt&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Qt+64|0;Ge=Kt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Qt+128|0;Ge=Lt;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad($t|0,Gt|0,192)|0;ad($t+192|0,Qt|0,192)|0;ad(Ut|0,$t|0,384)|0;ad(Vt|0,Xt|0,384)|0;m=0;re(18,rr|0,Ut|0,Vt|0);$t=m;m=0;if($t&1){Vn=me()|0;fa(qn);je(Vn|0)}else{d=rr;o=n[d>>2]|0;d=n[d+4>>2]|0;s=0;break}}else{o=0;d=0;s=1}}while(0);t=rr+8|0;a=n[t>>2]|0;t=n[t+4>>2]|0;c=rr+16|0;r=n[c>>2]|0;c=n[c+4>>2]|0;f=rr+24|0;i=n[f>>2]|0;f=n[f+4>>2]|0;ad(lr|0,rr+32|0,352)|0;if(s){ad(lr|0,zn|0,352)|0;m=0;ae(23,5006,31);m=0;Vn=me()|0;fa(qn);je(Vn|0)}rr=Xc;n[rr>>2]=o;n[rr+4>>2]=d;rr=Xc+8|0;n[rr>>2]=a;n[rr+4>>2]=t;rr=Xc+16|0;n[rr>>2]=r;n[rr+4>>2]=c;rr=Xc+24|0;n[rr>>2]=i;n[rr+4>>2]=f;ad(Xc+32|0,lr|0,352)|0;m=0;ae(21,ir|0,Xc|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;ae(22,yc|0,ir|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;ae(22,fr|0,yc|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(ar|0,fr|0,384)|0;ad(tr|0,yc|0,384)|0;m=0;re(18,or|0,ar|0,tr|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;ae(21,_c|0,or|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;ae(22,dr|0,_c|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;ae(21,Tr|0,dr|0);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(wc|0,or|0,192)|0;Ye=or+192|0;ad(nr|0,Ye|0,192)|0;ad(hr|0,Ye|0,192)|0;Ye=cr;Ge=nr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=sr;Ge=nr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[br>>2]=n[cr>>2];n[br+4>>2]=n[cr+4>>2];n[br+8>>2]=n[cr+8>>2];n[br+12>>2]=n[cr+12>>2];n[br+16>>2]=n[cr+16>>2];n[br+20>>2]=n[cr+20>>2];n[br+24>>2]=n[cr+24>>2];n[br+28>>2]=n[cr+28>>2];m=0;ae(18,br|0,8);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[yr>>2]=n[br>>2];n[yr+4>>2]=n[br+4>>2];n[yr+8>>2]=n[br+8>>2];n[yr+12>>2]=n[br+12>>2];n[yr+16>>2]=n[br+16>>2];n[yr+20>>2]=n[br+20>>2];n[yr+24>>2]=n[br+24>>2];n[yr+28>>2]=n[br+28>>2];lr=sr+32|0;n[ur>>2]=n[lr>>2];n[ur+4>>2]=n[lr+4>>2];n[ur+8>>2]=n[lr+8>>2];n[ur+12>>2]=n[lr+12>>2];n[ur+16>>2]=n[lr+16>>2];n[ur+20>>2]=n[lr+20>>2];n[ur+24>>2]=n[lr+24>>2];n[ur+28>>2]=n[lr+28>>2];m=0;ae(18,ur|0,8);lr=m;m=0;if(lr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Sr>>2]=n[ur>>2];n[Sr+4>>2]=n[ur+4>>2];n[Sr+8>>2]=n[ur+8>>2];n[Sr+12>>2]=n[ur+12>>2];n[Sr+16>>2]=n[ur+16>>2];n[Sr+20>>2]=n[ur+20>>2];n[Sr+24>>2]=n[ur+24>>2];n[Sr+28>>2]=n[ur+28>>2];a=yr+32|0;n[a>>2]=n[Sr>>2];n[a+4>>2]=n[Sr+4>>2];n[a+8>>2]=n[Sr+8>>2];n[a+12>>2]=n[Sr+12>>2];n[a+16>>2]=n[Sr+16>>2];n[a+20>>2]=n[Sr+20>>2];n[a+24>>2]=n[Sr+24>>2];n[a+28>>2]=n[Sr+28>>2];a=hr+64|0;Ye=pr;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=vr;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[mr>>2]=n[pr>>2];n[mr+4>>2]=n[pr+4>>2];n[mr+8>>2]=n[pr+8>>2];n[mr+12>>2]=n[pr+12>>2];n[mr+16>>2]=n[pr+16>>2];n[mr+20>>2]=n[pr+20>>2];n[mr+24>>2]=n[pr+24>>2];n[mr+28>>2]=n[pr+28>>2];m=0;ae(18,mr|0,8);pr=m;m=0;if(pr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ar>>2]=n[mr>>2];n[Ar+4>>2]=n[mr+4>>2];n[Ar+8>>2]=n[mr+8>>2];n[Ar+12>>2]=n[mr+12>>2];n[Ar+16>>2]=n[mr+16>>2];n[Ar+20>>2]=n[mr+20>>2];n[Ar+24>>2]=n[mr+24>>2];n[Ar+28>>2]=n[mr+28>>2];vr=vr+32|0;n[gr>>2]=n[vr>>2];n[gr+4>>2]=n[vr+4>>2];n[gr+8>>2]=n[vr+8>>2];n[gr+12>>2]=n[vr+12>>2];n[gr+16>>2]=n[vr+16>>2];n[gr+20>>2]=n[vr+20>>2];n[gr+24>>2]=n[vr+24>>2];n[gr+28>>2]=n[vr+28>>2];m=0;ae(18,gr|0,8);vr=m;m=0;if(vr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Sr>>2]=n[gr>>2];n[Sr+4>>2]=n[gr+4>>2];n[Sr+8>>2]=n[gr+8>>2];n[Sr+12>>2]=n[gr+12>>2];n[Sr+16>>2]=n[gr+16>>2];n[Sr+20>>2]=n[gr+20>>2];n[Sr+24>>2]=n[gr+24>>2];n[Sr+28>>2]=n[gr+28>>2];a=Ar+32|0;n[a>>2]=n[Sr>>2];n[a+4>>2]=n[Sr+4>>2];n[a+8>>2]=n[Sr+8>>2];n[a+12>>2]=n[Sr+12>>2];n[a+16>>2]=n[Sr+16>>2];n[a+20>>2]=n[Sr+20>>2];n[a+24>>2]=n[Sr+24>>2];n[a+28>>2]=n[Sr+28>>2];a=hr+128|0;Ye=Er;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Or;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Cr>>2]=n[Er>>2];n[Cr+4>>2]=n[Er+4>>2];n[Cr+8>>2]=n[Er+8>>2];n[Cr+12>>2]=n[Er+12>>2];n[Cr+16>>2]=n[Er+16>>2];n[Cr+20>>2]=n[Er+20>>2];n[Cr+24>>2]=n[Er+24>>2];n[Cr+28>>2]=n[Er+28>>2];m=0;ae(18,Cr|0,8);Er=m;m=0;if(Er&1){Vn=me()|0;fa(qn);je(Vn|0)}n[xr>>2]=n[Cr>>2];n[xr+4>>2]=n[Cr+4>>2];n[xr+8>>2]=n[Cr+8>>2];n[xr+12>>2]=n[Cr+12>>2];n[xr+16>>2]=n[Cr+16>>2];n[xr+20>>2]=n[Cr+20>>2];n[xr+24>>2]=n[Cr+24>>2];n[xr+28>>2]=n[Cr+28>>2];Or=Or+32|0;n[Mr>>2]=n[Or>>2];n[Mr+4>>2]=n[Or+4>>2];n[Mr+8>>2]=n[Or+8>>2];n[Mr+12>>2]=n[Or+12>>2];n[Mr+16>>2]=n[Or+16>>2];n[Mr+20>>2]=n[Or+20>>2];n[Mr+24>>2]=n[Or+24>>2];n[Mr+28>>2]=n[Or+28>>2];m=0;ae(18,Mr|0,8);Or=m;m=0;if(Or&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Sr>>2]=n[Mr>>2];n[Sr+4>>2]=n[Mr+4>>2];n[Sr+8>>2]=n[Mr+8>>2];n[Sr+12>>2]=n[Mr+12>>2];n[Sr+16>>2]=n[Mr+16>>2];n[Sr+20>>2]=n[Mr+20>>2];n[Sr+24>>2]=n[Mr+24>>2];n[Sr+28>>2]=n[Mr+28>>2];Ye=xr+32|0;n[Ye>>2]=n[Sr>>2];n[Ye+4>>2]=n[Sr+4>>2];n[Ye+8>>2]=n[Sr+8>>2];n[Ye+12>>2]=n[Sr+12>>2];n[Ye+16>>2]=n[Sr+16>>2];n[Ye+20>>2]=n[Sr+20>>2];n[Ye+24>>2]=n[Sr+24>>2];n[Ye+28>>2]=n[Sr+28>>2];Ye=_r;Ge=yr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=_r+64|0;Ge=Ar;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=_r+128|0;Ge=xr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(wc+192|0,_r|0,192)|0;ad(Ac|0,Tr|0,192)|0;Ye=Tr+192|0;ad(kr|0,Ye|0,192)|0;ad(Fr|0,Ye|0,192)|0;Ye=wr;Ge=kr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Rr;Ge=kr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[jr>>2]=n[wr>>2];n[jr+4>>2]=n[wr+4>>2];n[jr+8>>2]=n[wr+8>>2];n[jr+12>>2]=n[wr+12>>2];n[jr+16>>2]=n[wr+16>>2];n[jr+20>>2]=n[wr+20>>2];n[jr+24>>2]=n[wr+24>>2];n[jr+28>>2]=n[wr+28>>2];m=0;ae(18,jr|0,8);Mr=m;m=0;if(Mr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[ec>>2]=n[jr>>2];n[ec+4>>2]=n[jr+4>>2];n[ec+8>>2]=n[jr+8>>2];n[ec+12>>2]=n[jr+12>>2];n[ec+16>>2]=n[jr+16>>2];n[ec+20>>2]=n[jr+20>>2];n[ec+24>>2]=n[jr+24>>2];n[ec+28>>2]=n[jr+28>>2];Mr=Rr+32|0;n[Br>>2]=n[Mr>>2];n[Br+4>>2]=n[Mr+4>>2];n[Br+8>>2]=n[Mr+8>>2];n[Br+12>>2]=n[Mr+12>>2];n[Br+16>>2]=n[Mr+16>>2];n[Br+20>>2]=n[Mr+20>>2];n[Br+24>>2]=n[Mr+24>>2];n[Br+28>>2]=n[Mr+28>>2];m=0;ae(18,Br|0,8);Mr=m;m=0;if(Mr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[Br>>2];n[Ur+4>>2]=n[Br+4>>2];n[Ur+8>>2]=n[Br+8>>2];n[Ur+12>>2]=n[Br+12>>2];n[Ur+16>>2]=n[Br+16>>2];n[Ur+20>>2]=n[Br+20>>2];n[Ur+24>>2]=n[Br+24>>2];n[Ur+28>>2]=n[Br+28>>2];a=ec+32|0;n[a>>2]=n[Ur>>2];n[a+4>>2]=n[Ur+4>>2];n[a+8>>2]=n[Ur+8>>2];n[a+12>>2]=n[Ur+12>>2];n[a+16>>2]=n[Ur+16>>2];n[a+20>>2]=n[Ur+20>>2];n[a+24>>2]=n[Ur+24>>2];n[a+28>>2]=n[Ur+28>>2];a=Fr+64|0;Ye=Nr;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Lr;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Ir>>2]=n[Nr>>2];n[Ir+4>>2]=n[Nr+4>>2];n[Ir+8>>2]=n[Nr+8>>2];n[Ir+12>>2]=n[Nr+12>>2];n[Ir+16>>2]=n[Nr+16>>2];n[Ir+20>>2]=n[Nr+20>>2];n[Ir+24>>2]=n[Nr+24>>2];n[Ir+28>>2]=n[Nr+28>>2];m=0;ae(18,Ir|0,8);Nr=m;m=0;if(Nr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[dc>>2]=n[Ir>>2];n[dc+4>>2]=n[Ir+4>>2];n[dc+8>>2]=n[Ir+8>>2];n[dc+12>>2]=n[Ir+12>>2];n[dc+16>>2]=n[Ir+16>>2];n[dc+20>>2]=n[Ir+20>>2];n[dc+24>>2]=n[Ir+24>>2];n[dc+28>>2]=n[Ir+28>>2];Lr=Lr+32|0;n[Pr>>2]=n[Lr>>2];n[Pr+4>>2]=n[Lr+4>>2];n[Pr+8>>2]=n[Lr+8>>2];n[Pr+12>>2]=n[Lr+12>>2];n[Pr+16>>2]=n[Lr+16>>2];n[Pr+20>>2]=n[Lr+20>>2];n[Pr+24>>2]=n[Lr+24>>2];n[Pr+28>>2]=n[Lr+28>>2];m=0;ae(18,Pr|0,8);Lr=m;m=0;if(Lr&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[Pr>>2];n[Ur+4>>2]=n[Pr+4>>2];n[Ur+8>>2]=n[Pr+8>>2];n[Ur+12>>2]=n[Pr+12>>2];n[Ur+16>>2]=n[Pr+16>>2];n[Ur+20>>2]=n[Pr+20>>2];n[Ur+24>>2]=n[Pr+24>>2];n[Ur+28>>2]=n[Pr+28>>2];a=dc+32|0;n[a>>2]=n[Ur>>2];n[a+4>>2]=n[Ur+4>>2];n[a+8>>2]=n[Ur+8>>2];n[a+12>>2]=n[Ur+12>>2];n[a+16>>2]=n[Ur+16>>2];n[a+20>>2]=n[Ur+20>>2];n[a+24>>2]=n[Ur+24>>2];n[a+28>>2]=n[Ur+28>>2];a=Fr+128|0;Ye=hc;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=jc;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[Tc>>2]=n[hc>>2];n[Tc+4>>2]=n[hc+4>>2];n[Tc+8>>2]=n[hc+8>>2];n[Tc+12>>2]=n[hc+12>>2];n[Tc+16>>2]=n[hc+16>>2];n[Tc+20>>2]=n[hc+20>>2];n[Tc+24>>2]=n[hc+24>>2];n[Tc+28>>2]=n[hc+28>>2];m=0;ae(18,Tc|0,8);hc=m;m=0;if(hc&1){Vn=me()|0;fa(qn);je(Vn|0)}n[uc>>2]=n[Tc>>2];n[uc+4>>2]=n[Tc+4>>2];n[uc+8>>2]=n[Tc+8>>2];n[uc+12>>2]=n[Tc+12>>2];n[uc+16>>2]=n[Tc+16>>2];n[uc+20>>2]=n[Tc+20>>2];n[uc+24>>2]=n[Tc+24>>2];n[uc+28>>2]=n[Tc+28>>2];jc=jc+32|0;n[Cc>>2]=n[jc>>2];n[Cc+4>>2]=n[jc+4>>2];n[Cc+8>>2]=n[jc+8>>2];n[Cc+12>>2]=n[jc+12>>2];n[Cc+16>>2]=n[jc+16>>2];n[Cc+20>>2]=n[jc+20>>2];n[Cc+24>>2]=n[jc+24>>2];n[Cc+28>>2]=n[jc+28>>2];m=0;ae(18,Cc|0,8);jc=m;m=0;if(jc&1){Vn=me()|0;fa(qn);je(Vn|0)}n[Ur>>2]=n[Cc>>2];n[Ur+4>>2]=n[Cc+4>>2];n[Ur+8>>2]=n[Cc+8>>2];n[Ur+12>>2]=n[Cc+12>>2];n[Ur+16>>2]=n[Cc+16>>2];n[Ur+20>>2]=n[Cc+20>>2];n[Ur+24>>2]=n[Cc+24>>2];n[Ur+28>>2]=n[Cc+28>>2];Ye=uc+32|0;n[Ye>>2]=n[Ur>>2];n[Ye+4>>2]=n[Ur+4>>2];n[Ye+8>>2]=n[Ur+8>>2];n[Ye+12>>2]=n[Ur+12>>2];n[Ye+16>>2]=n[Ur+16>>2];n[Ye+20>>2]=n[Ur+20>>2];n[Ye+24>>2]=n[Ur+24>>2];n[Ye+28>>2]=n[Ur+28>>2];Ye=ic;Ge=ec;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=ic+64|0;Ge=dc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=ic+128|0;Ge=uc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(Ac+192|0,ic|0,192)|0;ad(Qr|0,Ac|0,384)|0;ad(Zr|0,_c|0,384)|0;m=0;re(18,kc|0,Qr|0,Zr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(Jr|0,kc|0,384)|0;ad(Xr|0,wc|0,384)|0;m=0;re(18,Nc|0,Jr|0,Xr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}ad($r|0,Nc|0,384)|0;ad(ac|0,yc|0,384)|0;m=0;re(18,Rn|0,$r|0,ac|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(tc|0,Nc|0,384)|0;ad(rc|0,_c|0,384)|0;m=0;re(18,xc|0,tc|0,rc|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(cc|0,Xc|0,384)|0;ad(nc|0,xc|0,384)|0;m=0;re(18,Ec|0,cc|0,nc|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;re(19,Sc|0,Rn|0,1);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;re(19,Dr|0,Rn+192|0,1);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=sc;Ge=Dr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=bc;n[Cc>>2]=856967431;n[Cc+4>>2]=-1348753770;Cc=bc+8|0;n[Cc>>2]=-2018527350;n[Cc+4>>2]=-898949773;Cc=bc+16|0;n[Cc>>2]=-259383161;n[Cc+4>>2]=297659742;Cc=bc+24|0;n[Cc>>2]=438254204;n[Cc+4>>2]=49499509;Cc=bc+32|0;n[Cc>>2]=1279864178;n[Cc+4>>2]=-1574785501;Cc=bc+40|0;n[Cc>>2]=1448993115;n[Cc+4>>2]=-804322652;Cc=bc+48|0;n[Cc>>2]=1407174950;n[Cc+4>>2]=-600837214;Cc=bc+56|0;n[Cc>>2]=-1282828975;n[Cc+4>>2]=279402262;m=0;re(13,mc|0,sc|0,bc|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=vc;Ge=Dr+64|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=zr;n[Cc>>2]=856967431;n[Cc+4>>2]=-1348753770;Cc=zr+8|0;n[Cc>>2]=-2018527350;n[Cc+4>>2]=-898949773;Cc=zr+16|0;n[Cc>>2]=-259383161;n[Cc+4>>2]=297659742;Cc=zr+24|0;n[Cc>>2]=438254204;n[Cc+4>>2]=49499509;Cc=zr+32|0;n[Cc>>2]=1279864178;n[Cc+4>>2]=-1574785501;Cc=zr+40|0;n[Cc>>2]=1448993115;n[Cc+4>>2]=-804322652;Cc=zr+48|0;n[Cc>>2]=1407174950;n[Cc+4>>2]=-600837214;Cc=zr+56|0;n[Cc>>2]=-1282828975;n[Cc+4>>2]=279402262;m=0;re(13,lc|0,vc|0,zr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Vr;Ge=Dr+128|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=Gr;n[Cc>>2]=856967431;n[Cc+4>>2]=-1348753770;Cc=Gr+8|0;n[Cc>>2]=-2018527350;n[Cc+4>>2]=-898949773;Cc=Gr+16|0;n[Cc>>2]=-259383161;n[Cc+4>>2]=297659742;Cc=Gr+24|0;n[Cc>>2]=438254204;n[Cc+4>>2]=49499509;Cc=Gr+32|0;n[Cc>>2]=1279864178;n[Cc+4>>2]=-1574785501;Cc=Gr+40|0;n[Cc>>2]=1448993115;n[Cc+4>>2]=-804322652;Cc=Gr+48|0;n[Cc>>2]=1407174950;n[Cc+4>>2]=-600837214;Cc=Gr+56|0;n[Cc>>2]=-1282828975;n[Cc+4>>2]=279402262;m=0;re(13,qr|0,Vr|0,Gr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=mc+64|0;Ge=lc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=mc+128|0;Ge=qr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(Sc+192|0,mc|0,192)|0;ad(fc|0,Sc|0,384)|0;ad(oc|0,Ec|0,384)|0;m=0;re(18,$c|0,fc|0,oc|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Gc;Ge=Nc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=gc;Ge=Nc+64|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=Hr;n[Cc>>2]=333974428;n[Cc+4>>2]=860932238;Cc=Hr+8|0;n[Cc>>2]=-614574407;n[Cc+4>>2]=2110674300;Cc=Hr+16|0;n[Cc>>2]=-1240115638;n[Cc+4>>2]=1610724536;Cc=Hr+24|0;n[Cc>>2]=33691616;n[Cc+4>>2]=646112791;Cc=Hr+32|0;n[Cc>>2]=0;n[Cc+4>>2]=0;n[Cc+8>>2]=0;n[Cc+12>>2]=0;n[Cc+16>>2]=0;n[Cc+20>>2]=0;n[Cc+24>>2]=0;n[Cc+28>>2]=0;m=0;re(13,pc|0,gc|0,Hr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Yr;Ge=Nc+128|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=Kr;n[Cc>>2]=-679288491;n[Cc+4>>2]=1905462289;Cc=Kr+8|0;n[Cc>>2]=-4312285;n[Cc+4>>2]=-1497656196;Cc=Kr+16|0;n[Cc>>2]=-730590140;n[Cc+4>>2]=-1439681724;Cc=Kr+24|0;n[Cc>>2]=643385667;n[Cc+4>>2]=742080269;Cc=Kr+32|0;n[Cc>>2]=0;n[Cc+4>>2]=0;n[Cc+8>>2]=0;n[Cc+12>>2]=0;n[Cc+16>>2]=0;n[Cc+20>>2]=0;n[Cc+24>>2]=0;n[Cc+28>>2]=0;m=0;re(13,Wr|0,Yr|0,Kr|0);Cc=m;m=0;if(Cc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Gc+64|0;Ge=pc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Gc+128|0;Ge=Wr;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));r=Nc+192|0;Ye=Ic;Ge=r;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Mc;Ge=Nc+256|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Cc=Rc;n[Cc>>2]=333974428;n[Cc+4>>2]=860932238;Cc=Rc+8|0;n[Cc>>2]=-614574407;n[Cc+4>>2]=2110674300;Cc=Rc+16|0;n[Cc>>2]=-1240115638;n[Cc+4>>2]=1610724536;Cc=Rc+24|0;n[Cc>>2]=33691616;n[Cc+4>>2]=646112791;Cc=Rc+32|0;n[Cc>>2]=0;n[Cc+4>>2]=0;n[Cc+8>>2]=0;n[Cc+12>>2]=0;n[Cc+16>>2]=0;n[Cc+20>>2]=0;n[Cc+24>>2]=0;n[Cc+28>>2]=0;m=0;re(13,Pc|0,Mc|0,Rc|0);Mc=m;m=0;if(Mc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Oc;Ge=Nc+320|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Nc=Bc;n[Nc>>2]=-679288491;n[Nc+4>>2]=1905462289;Nc=Bc+8|0;n[Nc>>2]=-4312285;n[Nc+4>>2]=-1497656196;Nc=Bc+16|0;n[Nc>>2]=-730590140;n[Nc+4>>2]=-1439681724;Nc=Bc+24|0;n[Nc>>2]=643385667;n[Nc+4>>2]=742080269;Nc=Bc+32|0;n[Nc>>2]=0;n[Nc+4>>2]=0;n[Nc+8>>2]=0;n[Nc+12>>2]=0;n[Nc+16>>2]=0;n[Nc+20>>2]=0;n[Nc+24>>2]=0;n[Nc+28>>2]=0;m=0;re(13,qc|0,Oc|0,Bc|0);Nc=m;m=0;if(Nc&1){Vn=me()|0;fa(qn);je(Vn|0)}t=Ic+64|0;Ye=t;Ge=Pc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));a=Ic+128|0;Ye=a;Ge=qc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Yc;Ge=r;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));qc=Kc;n[qc>>2]=16391154;n[qc+4>>2]=-896696315;qc=Kc+8|0;n[qc>>2]=1756600169;n[qc+4>>2]=-255470060;qc=Kc+16|0;n[qc>>2]=-1391639528;n[qc+4>>2]=236982897;qc=Kc+24|0;n[qc>>2]=-1160227098;n[qc+4>>2]=69799781;qc=Kc+32|0;n[qc>>2]=0;n[qc+4>>2]=0;n[qc+8>>2]=0;n[qc+12>>2]=0;n[qc+16>>2]=0;n[qc+20>>2]=0;n[qc+24>>2]=0;n[qc+28>>2]=0;m=0;re(13,Zc|0,Yc|0,Kc|0);Kc=m;m=0;if(Kc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Jc;Ge=t;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Kc=Fc;n[Kc>>2]=16391154;n[Kc+4>>2]=-896696315;Kc=Fc+8|0;n[Kc>>2]=1756600169;n[Kc+4>>2]=-255470060;Kc=Fc+16|0;n[Kc>>2]=-1391639528;n[Kc+4>>2]=236982897;Kc=Fc+24|0;n[Kc>>2]=-1160227098;n[Kc+4>>2]=69799781;Kc=Fc+32|0;n[Kc>>2]=0;n[Kc+4>>2]=0;n[Kc+8>>2]=0;n[Kc+12>>2]=0;n[Kc+16>>2]=0;n[Kc+20>>2]=0;n[Kc+24>>2]=0;n[Kc+28>>2]=0;m=0;re(13,Qc|0,Jc|0,Fc|0);Jc=m;m=0;if(Jc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Dc;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Jc=zc;n[Jc>>2]=16391154;n[Jc+4>>2]=-896696315;Jc=zc+8|0;n[Jc>>2]=1756600169;n[Jc+4>>2]=-255470060;Jc=zc+16|0;n[Jc>>2]=-1391639528;n[Jc+4>>2]=236982897;Jc=zc+24|0;n[Jc>>2]=-1160227098;n[Jc+4>>2]=69799781;Jc=zc+32|0;n[Jc>>2]=0;n[Jc+4>>2]=0;n[Jc+8>>2]=0;n[Jc+12>>2]=0;n[Jc+16>>2]=0;n[Jc+20>>2]=0;n[Jc+24>>2]=0;n[Jc+28>>2]=0;m=0;re(13,Lc|0,Dc|0,zc|0);Jc=m;m=0;if(Jc&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Zc+64|0;Ge=Qc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Zc+128|0;Ge=Lc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(en|0,Gc|0,192)|0;ad(en+192|0,Zc|0,192)|0;ad(Hc|0,en|0,384)|0;ad(Vc|0,$c|0,384)|0;m=0;re(18,Mn|0,Hc|0,Vc|0);en=m;m=0;if(en&1){Vn=me()|0;fa(qn);je(Vn|0)}ad(Nn|0,Xc|0,192)|0;Ye=Xc+192|0;ad(Wc|0,Ye|0,192)|0;ad(dn|0,Ye|0,192)|0;Ye=Uc;Ge=Wc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=tn;Ge=Wc;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[an>>2]=n[Uc>>2];n[an+4>>2]=n[Uc+4>>2];n[an+8>>2]=n[Uc+8>>2];n[an+12>>2]=n[Uc+12>>2];n[an+16>>2]=n[Uc+16>>2];n[an+20>>2]=n[Uc+20>>2];n[an+24>>2]=n[Uc+24>>2];n[an+28>>2]=n[Uc+28>>2];m=0;ae(18,an|0,8);en=m;m=0;if(en&1){Vn=me()|0;fa(qn);je(Vn|0)}n[hn>>2]=n[an>>2];n[hn+4>>2]=n[an+4>>2];n[hn+8>>2]=n[an+8>>2];n[hn+12>>2]=n[an+12>>2];n[hn+16>>2]=n[an+16>>2];n[hn+20>>2]=n[an+20>>2];n[hn+24>>2]=n[an+24>>2];n[hn+28>>2]=n[an+28>>2];tn=tn+32|0;n[rn>>2]=n[tn>>2];n[rn+4>>2]=n[tn+4>>2];n[rn+8>>2]=n[tn+8>>2];n[rn+12>>2]=n[tn+12>>2];n[rn+16>>2]=n[tn+16>>2];n[rn+20>>2]=n[tn+20>>2];n[rn+24>>2]=n[tn+24>>2];n[rn+28>>2]=n[tn+28>>2];m=0;ae(18,rn|0,8);tn=m;m=0;if(tn&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[rn>>2];n[jn+4>>2]=n[rn+4>>2];n[jn+8>>2]=n[rn+8>>2];n[jn+12>>2]=n[rn+12>>2];n[jn+16>>2]=n[rn+16>>2];n[jn+20>>2]=n[rn+20>>2];n[jn+24>>2]=n[rn+24>>2];n[jn+28>>2]=n[rn+28>>2];a=hn+32|0;n[a>>2]=n[jn>>2];n[a+4>>2]=n[jn+4>>2];n[a+8>>2]=n[jn+8>>2];n[a+12>>2]=n[jn+12>>2];n[a+16>>2]=n[jn+16>>2];n[a+20>>2]=n[jn+20>>2];n[a+24>>2]=n[jn+24>>2];n[a+28>>2]=n[jn+28>>2];a=dn+64|0;Ye=cn;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=on;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[nn>>2]=n[cn>>2];n[nn+4>>2]=n[cn+4>>2];n[nn+8>>2]=n[cn+8>>2];n[nn+12>>2]=n[cn+12>>2];n[nn+16>>2]=n[cn+16>>2];n[nn+20>>2]=n[cn+20>>2];n[nn+24>>2]=n[cn+24>>2];n[nn+28>>2]=n[cn+28>>2];m=0;ae(18,nn|0,8);cn=m;m=0;if(cn&1){Vn=me()|0;fa(qn);je(Vn|0)}n[gn>>2]=n[nn>>2];n[gn+4>>2]=n[nn+4>>2];n[gn+8>>2]=n[nn+8>>2];n[gn+12>>2]=n[nn+12>>2];n[gn+16>>2]=n[nn+16>>2];n[gn+20>>2]=n[nn+20>>2];n[gn+24>>2]=n[nn+24>>2];n[gn+28>>2]=n[nn+28>>2];on=on+32|0;n[fn>>2]=n[on>>2];n[fn+4>>2]=n[on+4>>2];n[fn+8>>2]=n[on+8>>2];n[fn+12>>2]=n[on+12>>2];n[fn+16>>2]=n[on+16>>2];n[fn+20>>2]=n[on+20>>2];n[fn+24>>2]=n[on+24>>2];n[fn+28>>2]=n[on+28>>2];m=0;ae(18,fn|0,8);on=m;m=0;if(on&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[fn>>2];n[jn+4>>2]=n[fn+4>>2];n[jn+8>>2]=n[fn+8>>2];n[jn+12>>2]=n[fn+12>>2];n[jn+16>>2]=n[fn+16>>2];n[jn+20>>2]=n[fn+20>>2];n[jn+24>>2]=n[fn+24>>2];n[jn+28>>2]=n[fn+28>>2];a=gn+32|0;n[a>>2]=n[jn>>2];n[a+4>>2]=n[jn+4>>2];n[a+8>>2]=n[jn+8>>2];n[a+12>>2]=n[jn+12>>2];n[a+16>>2]=n[jn+16>>2];n[a+20>>2]=n[jn+20>>2];n[a+24>>2]=n[jn+24>>2];n[a+28>>2]=n[jn+28>>2];a=dn+128|0;Ye=Tn;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Pn;Ge=a;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));n[In>>2]=n[Tn>>2];n[In+4>>2]=n[Tn+4>>2];n[In+8>>2]=n[Tn+8>>2];n[In+12>>2]=n[Tn+12>>2];n[In+16>>2]=n[Tn+16>>2];n[In+20>>2]=n[Tn+20>>2];n[In+24>>2]=n[Tn+24>>2];n[In+28>>2]=n[Tn+28>>2];m=0;ae(18,In|0,8);Tn=m;m=0;if(Tn&1){Vn=me()|0;fa(qn);je(Vn|0)}n[xn>>2]=n[In>>2];n[xn+4>>2]=n[In+4>>2];n[xn+8>>2]=n[In+8>>2];n[xn+12>>2]=n[In+12>>2];n[xn+16>>2]=n[In+16>>2];n[xn+20>>2]=n[In+20>>2];n[xn+24>>2]=n[In+24>>2];n[xn+28>>2]=n[In+28>>2];Pn=Pn+32|0;n[Fn>>2]=n[Pn>>2];n[Fn+4>>2]=n[Pn+4>>2];n[Fn+8>>2]=n[Pn+8>>2];n[Fn+12>>2]=n[Pn+12>>2];n[Fn+16>>2]=n[Pn+16>>2];n[Fn+20>>2]=n[Pn+20>>2];n[Fn+24>>2]=n[Pn+24>>2];n[Fn+28>>2]=n[Pn+28>>2];m=0;ae(18,Fn|0,8);Pn=m;m=0;if(Pn&1){Vn=me()|0;fa(qn);je(Vn|0)}n[jn>>2]=n[Fn>>2];n[jn+4>>2]=n[Fn+4>>2];n[jn+8>>2]=n[Fn+8>>2];n[jn+12>>2]=n[Fn+12>>2];n[jn+16>>2]=n[Fn+16>>2];n[jn+20>>2]=n[Fn+20>>2];n[jn+24>>2]=n[Fn+24>>2];n[jn+28>>2]=n[Fn+28>>2];Ye=xn+32|0;n[Ye>>2]=n[jn>>2];n[Ye+4>>2]=n[jn+4>>2];n[Ye+8>>2]=n[jn+8>>2];n[Ye+12>>2]=n[jn+12>>2];n[Ye+16>>2]=n[jn+16>>2];n[Ye+20>>2]=n[jn+20>>2];n[Ye+24>>2]=n[jn+24>>2];n[Ye+28>>2]=n[jn+28>>2];Ye=mn;Ge=hn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=mn+64|0;Ge=gn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=mn+128|0;Ge=xn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(Nn+192|0,mn|0,192)|0;ad(vn|0,Nn|0,384)|0;ad(yn|0,Rn|0,384)|0;m=0;re(18,Ln|0,vn|0,yn|0);Fn=m;m=0;if(Fn&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;re(19,Dn|0,Ln|0,3);Fn=m;m=0;if(Fn&1){Vn=me()|0;fa(qn);je(Vn|0)}m=0;re(19,bn|0,Ln+192|0,3);Ln=m;m=0;if(Ln&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=An;Ge=bn;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ln=kn;n[Ln>>2]=1313266045;n[Ln+4>>2]=911414808;Ln=kn+8|0;n[Ln>>2]=-724996705;n[Ln+4>>2]=183964318;Ln=kn+16|0;n[Ln>>2]=-904918603;n[Ln+4>>2]=1704830767;Ln=kn+24|0;n[Ln>>2]=-2086531805;n[Ln+4>>2]=135359881;Ln=kn+32|0;n[Ln>>2]=-1013180103;n[Ln+4>>2]=-1310766345;Ln=kn+40|0;n[Ln>>2]=-1972125825;n[Ln+4>>2]=1033831047;Ln=kn+48|0;n[Ln>>2]=-1934685472;n[Ln+4>>2]=-1692262254;Ln=kn+56|0;n[Ln>>2]=-269462362;n[Ln+4>>2]=644367637;m=0;re(13,Sn|0,An|0,kn|0);Ln=m;m=0;if(Ln&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Cn;Ge=bn+64|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ln=sn;n[Ln>>2]=1313266045;n[Ln+4>>2]=911414808;Ln=sn+8|0;n[Ln>>2]=-724996705;n[Ln+4>>2]=183964318;Ln=sn+16|0;n[Ln>>2]=-904918603;n[Ln+4>>2]=1704830767;Ln=sn+24|0;n[Ln>>2]=-2086531805;n[Ln+4>>2]=135359881;Ln=sn+32|0;n[Ln>>2]=-1013180103;n[Ln+4>>2]=-1310766345;Ln=sn+40|0;n[Ln>>2]=-1972125825;n[Ln+4>>2]=1033831047;Ln=sn+48|0;n[Ln>>2]=-1934685472;n[Ln+4>>2]=-1692262254;Ln=sn+56|0;n[Ln>>2]=-269462362;n[Ln+4>>2]=644367637;m=0;re(13,En|0,Cn|0,sn|0);Ln=m;m=0;if(Ln&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=ln;Ge=bn+128|0;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ln=pn;n[Ln>>2]=1313266045;n[Ln+4>>2]=911414808;Ln=pn+8|0;n[Ln>>2]=-724996705;n[Ln+4>>2]=183964318;Ln=pn+16|0;n[Ln>>2]=-904918603;n[Ln+4>>2]=1704830767;Ln=pn+24|0;n[Ln>>2]=-2086531805;n[Ln+4>>2]=135359881;Ln=pn+32|0;n[Ln>>2]=-1013180103;n[Ln+4>>2]=-1310766345;Ln=pn+40|0;n[Ln>>2]=-1972125825;n[Ln+4>>2]=1033831047;Ln=pn+48|0;n[Ln>>2]=-1934685472;n[Ln+4>>2]=-1692262254;Ln=pn+56|0;n[Ln>>2]=-269462362;n[Ln+4>>2]=644367637;m=0;re(13,un|0,ln|0,pn|0);Ln=m;m=0;if(Ln&1){Vn=me()|0;fa(qn);je(Vn|0)}Ye=Sn+64|0;Ge=En;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));Ye=Sn+128|0;Ge=un;We=Ye+64|0;do{n[Ye>>2]=n[Ge>>2];Ye=Ye+4|0;Ge=Ge+4|0}while((Ye|0)<(We|0));ad(Dn+192|0,Sn|0,192)|0;ad(_n|0,Dn|0,384)|0;ad(wn|0,Mn|0,384)|0;m=0;re(18,Un|0,_n|0,wn|0);Dn=m;m=0;if(Dn&1){Vn=me()|0;fa(qn);je(Vn|0)}r=Un;t=n[r>>2]|0;r=n[r+4>>2]|0;i=Un+8|0;c=n[i>>2]|0;i=n[i+4>>2]|0;o=Un+16|0;f=n[o>>2]|0;o=n[o+4>>2]|0;s=Un+24|0;d=n[s>>2]|0;s=n[s+4>>2]|0;ad(zn|0,Un+32|0,352)|0;ad(Hn|0,zn|0,352)|0;a=n[qn+132>>2]|0;do{if(a|0)if(a>>>0>22369621)Oi(3624);else{xt(u,a*192|0,8);break}}while(0);Mn=t;Pn=r;In=c;Ln=i;Fn=f;zn=o;Dn=d;qn=s;Un=e;Nn=Un;n[Nn>>2]=Mn;Un=Un+4|0;n[Un>>2]=Pn;Un=e+8|0;Pn=Un;n[Pn>>2]=In;Un=Un+4|0;n[Un>>2]=Ln;Un=e+16|0;Ln=Un;n[Ln>>2]=Fn;Un=Un+4|0;n[Un>>2]=zn;Un=e+24|0;zn=Un;n[zn>>2]=Dn;Un=Un+4|0;n[Un>>2]=qn;e=e+32|0;ad(e|0,Hn|0,352)|0;p=Vn;return}else if((a|0)==106){m=0;re(17,2488,r|0,s|0);m=0;Vn=me()|0;fa(qn);je(Vn|0)}else if((a|0)==115){m=0;re(17,2488,c|0,s|0);m=0;Vn=me()|0;fa(qn);je(Vn|0)}else if((a|0)==122){Vn=me()|0;fa(qn);je(Vn|0)}}}function er(e){e=e|0;var a=0;a=n[e>>2]|0;e=n[e+4>>2]|0;if(!e)return;if(e>>>0>22369621)Oi(3624);xt(a,e*192|0,8);return}function ar(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0;o=p;p=p+16|0;d=o;f=e+4|0;r=n[f>>2]|0;do{if(!r){a=At(768,8,d)|0;if(!a){a=0;t=0;r=0}else{d=4;i=a;n[e>>2]=i;n[f>>2]=d;p=o;return}}else{i=r<<1;if((r*384|0)<0)Oi(3420);c=n[e>>2]|0;t=r*192|0;a=i*192|0;if(!(r>>>0>22369621|i>>>0>22369621)?!((t|0)==0|(a|0)==0):0){a=Et(c,t,8,a,8,d)|0;if(!a){t=d+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[d>>2]|0;break}d=i;i=a;n[e>>2]=i;n[f>>2]=d;p=o;return}di(d,5133,32);t=d+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[d>>2]|0}}while(0);n[d>>2]=r;o=d+4|0;n[o>>2]=a;n[o+4>>2]=t;Ht(d)}function tr(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0;T=p;p=p+1120|0;E=T+1056|0;x=T+992|0;A=T+928|0;k=T+864|0;l=T+832|0;u=T+768|0;b=T+704|0;s=T+640|0;d=T+576|0;o=T+512|0;f=T+448|0;w=T+384|0;_=T+320|0;y=T+256|0;v=T+192|0;g=T+128|0;m=T+64|0;h=T;S=b;j=a;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));r=a+128|0;S=x;j=r;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=t;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(u,x,E);S=k;j=b;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];jt(x,E,8);n[h>>2]=n[x>>2];n[h+4>>2]=n[x+4>>2];n[h+8>>2]=n[x+8>>2];n[h+12>>2]=n[x+12>>2];n[h+16>>2]=n[x+16>>2];n[h+20>>2]=n[x+20>>2];n[h+24>>2]=n[x+24>>2];n[h+28>>2]=n[x+28>>2];S=k+32|0;c=A+32|0;n[x>>2]=n[S>>2];n[x+4>>2]=n[S+4>>2];n[x+8>>2]=n[S+8>>2];n[x+12>>2]=n[S+12>>2];n[x+16>>2]=n[S+16>>2];n[x+20>>2]=n[S+20>>2];n[x+24>>2]=n[S+24>>2];n[x+28>>2]=n[S+28>>2];n[E>>2]=n[c>>2];n[E+4>>2]=n[c+4>>2];n[E+8>>2]=n[c+8>>2];n[E+12>>2]=n[c+12>>2];n[E+16>>2]=n[c+16>>2];n[E+20>>2]=n[c+20>>2];n[E+24>>2]=n[c+24>>2];n[E+28>>2]=n[c+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];c=h+32|0;n[c>>2]=n[l>>2];n[c+4>>2]=n[l+4>>2];n[c+8>>2]=n[l+8>>2];n[c+12>>2]=n[l+12>>2];n[c+16>>2]=n[l+16>>2];n[c+20>>2]=n[l+20>>2];n[c+24>>2]=n[l+24>>2];n[c+28>>2]=n[l+28>>2];c=a+64|0;S=b;j=c;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=x;j=r;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));i=t+64|0;S=E;j=i;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(u,x,E);S=k;j=b;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];jt(x,E,8);n[m>>2]=n[x>>2];n[m+4>>2]=n[x+4>>2];n[m+8>>2]=n[x+8>>2];n[m+12>>2]=n[x+12>>2];n[m+16>>2]=n[x+16>>2];n[m+20>>2]=n[x+20>>2];n[m+24>>2]=n[x+24>>2];n[m+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=m+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];Bt(g,h);Bt(v,m);S=x;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=g;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(y,x,E);S=x;j=a;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=g;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(_,x,E);S=x;j=r;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(b,x,E);S=u;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=k;j=b;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];Tt(x,E,8);n[d>>2]=n[x>>2];n[d+4>>2]=n[x+4>>2];n[d+8>>2]=n[x+8>>2];n[d+12>>2]=n[x+12>>2];n[d+16>>2]=n[x+16>>2];n[d+20>>2]=n[x+20>>2];n[d+24>>2]=n[x+24>>2];n[d+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];Tt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=d+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];S=b;j=_;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=u;j=_;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=k;j=b;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=_;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];Tt(x,E,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];Tt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=s+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];S=k;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=s;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[d>>2];n[x+4>>2]=n[d+4>>2];n[x+8>>2]=n[d+8>>2];n[x+12>>2]=n[d+12>>2];n[x+16>>2]=n[d+16>>2];n[x+20>>2]=n[d+20>>2];n[x+24>>2]=n[d+24>>2];n[x+28>>2]=n[d+28>>2];n[E>>2]=n[s>>2];n[E+4>>2]=n[s+4>>2];n[E+8>>2]=n[s+8>>2];n[E+12>>2]=n[s+12>>2];n[E+16>>2]=n[s+16>>2];n[E+20>>2]=n[s+20>>2];n[E+24>>2]=n[s+24>>2];n[E+28>>2]=n[s+28>>2];jt(x,E,8);n[w>>2]=n[x>>2];n[w+4>>2]=n[x+4>>2];n[w+8>>2]=n[x+8>>2];n[w+12>>2]=n[x+12>>2];n[w+16>>2]=n[x+16>>2];n[w+20>>2]=n[x+20>>2];n[w+24>>2]=n[x+24>>2];n[w+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=w+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];S=x;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=w;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(A,x,E);S=a;j=A;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=b;j=_;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=u;j=w;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=k;j=_;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=w;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];jt(x,E,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=s+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];Nt(o,d,s);S=x;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=c;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(u,x,E);S=k;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[o>>2];n[x+4>>2]=n[o+4>>2];n[x+8>>2]=n[o+8>>2];n[x+12>>2]=n[o+12>>2];n[x+16>>2]=n[o+16>>2];n[x+20>>2]=n[o+20>>2];n[x+24>>2]=n[o+24>>2];n[x+28>>2]=n[o+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];jt(x,E,8);n[f>>2]=n[x>>2];n[f+4>>2]=n[x+4>>2];n[f+8>>2]=n[x+8>>2];n[f+12>>2]=n[x+12>>2];n[f+16>>2]=n[x+16>>2];n[f+20>>2]=n[x+20>>2];n[f+24>>2]=n[x+24>>2];n[f+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=f+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];S=c;j=f;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=x;j=r;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(A,x,E);S=r;j=A;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;n[S>>2]=1091403767;n[S+4>>2]=-167360562;S=d+8|0;n[S>>2]=-753151983;n[S+4>>2]=792555341;S=d+16|0;n[S>>2]=960546513;n[S+4>>2]=692269950;S=d+24|0;n[S>>2]=-1478256553;n[S+4>>2]=496343272;S=d+32|0;n[S>>2]=-980480611;n[S+4>>2]=-748862579;S=d+40|0;n[S>>2]=-171504835;n[S+4>>2]=175696680;S=d+48|0;n[S>>2]=2021213740;n[S+4>>2]=1718526831;S=d+56|0;n[S>>2]=-1710760145;n[S+4>>2]=235567041;S=x;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=t;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(b,x,E);S=x;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=E;j=i;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(u,x,E);S=k;j=b;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[x>>2]=n[b>>2];n[x+4>>2]=n[b+4>>2];n[x+8>>2]=n[b+8>>2];n[x+12>>2]=n[b+12>>2];n[x+16>>2]=n[b+16>>2];n[x+20>>2]=n[b+20>>2];n[x+24>>2]=n[b+24>>2];n[x+28>>2]=n[b+28>>2];n[E>>2]=n[u>>2];n[E+4>>2]=n[u+4>>2];n[E+8>>2]=n[u+8>>2];n[E+12>>2]=n[u+12>>2];n[E+16>>2]=n[u+16>>2];n[E+20>>2]=n[u+20>>2];n[E+24>>2]=n[u+24>>2];n[E+28>>2]=n[u+28>>2];jt(x,E,8);n[s>>2]=n[x>>2];n[s+4>>2]=n[x+4>>2];n[s+8>>2]=n[x+8>>2];n[s+12>>2]=n[x+12>>2];n[s+16>>2]=n[x+16>>2];n[s+20>>2]=n[x+20>>2];n[s+24>>2]=n[x+24>>2];n[s+28>>2]=n[x+28>>2];j=k+32|0;S=A+32|0;n[x>>2]=n[j>>2];n[x+4>>2]=n[j+4>>2];n[x+8>>2]=n[j+8>>2];n[x+12>>2]=n[j+12>>2];n[x+16>>2]=n[j+16>>2];n[x+20>>2]=n[j+20>>2];n[x+24>>2]=n[j+24>>2];n[x+28>>2]=n[j+28>>2];n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];jt(x,E,8);n[l>>2]=n[x>>2];n[l+4>>2]=n[x+4>>2];n[l+8>>2]=n[x+8>>2];n[l+12>>2]=n[x+12>>2];n[l+16>>2]=n[x+16>>2];n[l+20>>2]=n[x+20>>2];n[l+24>>2]=n[x+24>>2];n[l+28>>2]=n[x+28>>2];S=s+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];Nt(o,d,s);S=A;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=x;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[E>>2]=n[A>>2];n[E+4>>2]=n[A+4>>2];n[E+8>>2]=n[A+8>>2];n[E+12>>2]=n[A+12>>2];n[E+16>>2]=n[A+16>>2];n[E+20>>2]=n[A+20>>2];n[E+24>>2]=n[A+24>>2];n[E+28>>2]=n[A+28>>2];Rt(E,8);n[k>>2]=n[E>>2];n[k+4>>2]=n[E+4>>2];n[k+8>>2]=n[E+8>>2];n[k+12>>2]=n[E+12>>2];n[k+16>>2]=n[E+16>>2];n[k+20>>2]=n[E+20>>2];n[k+24>>2]=n[E+24>>2];n[k+28>>2]=n[E+28>>2];S=x+32|0;n[E>>2]=n[S>>2];n[E+4>>2]=n[S+4>>2];n[E+8>>2]=n[S+8>>2];n[E+12>>2]=n[S+12>>2];n[E+16>>2]=n[S+16>>2];n[E+20>>2]=n[S+20>>2];n[E+24>>2]=n[S+24>>2];n[E+28>>2]=n[S+28>>2];Rt(E,8);n[l>>2]=n[E>>2];n[l+4>>2]=n[E+4>>2];n[l+8>>2]=n[E+8>>2];n[l+12>>2]=n[E+12>>2];n[l+16>>2]=n[E+16>>2];n[l+20>>2]=n[E+20>>2];n[l+24>>2]=n[E+24>>2];n[l+28>>2]=n[E+28>>2];S=k+32|0;n[S>>2]=n[l>>2];n[S+4>>2]=n[l+4>>2];n[S+8>>2]=n[l+8>>2];n[S+12>>2]=n[l+12>>2];n[S+16>>2]=n[l+16>>2];n[S+20>>2]=n[l+20>>2];n[S+24>>2]=n[l+24>>2];n[S+28>>2]=n[l+28>>2];S=e;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=e+64|0;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=e+128|0;j=k;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));p=T;return}function rr(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0,Y=0,K=0,Q=0,Z=0,J=0,X=0,$=0,ae=0,te=0,re=0,ce=0,ne=0,ie=0,fe=0,oe=0,de=0,se=0,be=0,ue=0,le=0,pe=0,he=0,ge=0,ve=0,ye=0,_e=0,we=0,Ae=0,ke=0,xe=0,Ee=0,Se=0,Te=0,Ce=0,Re=0,Oe=0,Be=0,Me=0,Ne=0,Ie=0,Pe=0,Fe=0,Le=0,De=0,ze=0,qe=0,Ue=0,He=0,Ve=0,Ge=0,We=0,Ye=0,Qe=0,Ze=0;Ze=p;p=p+1040|0;u=Ze+984|0;Ye=Ze+960|0;Ue=Ze+936|0;ze=Ze+848|0;Ge=Ze+840|0;qe=Ze+832|0;He=Ze+1024|0;Ve=Ze+816|0;De=Ze+800|0;h=Ze;Ie=n[e+4>>2]|0;Pe=n[e+8>>2]|0;Le=n[e+12>>2]|0;We=n[e+16>>2]|0;n[u>>2]=n[e>>2];n[u+4>>2]=41;n[u+8>>2]=Ie;n[u+12>>2]=41;n[u+16>>2]=Pe;n[u+20>>2]=41;n[u+24>>2]=Le;n[u+28>>2]=46;n[u+32>>2]=We;n[u+36>>2]=46;n[Ye>>2]=2712;n[Ye+4>>2]=6;n[Ye+8>>2]=0;n[Ye+16>>2]=u;n[Ye+20>>2]=5;We=n[t+24>>2]|0;Id[We&31](Ue,a,Ye);if(n[Ue>>2]|0?(i[Ue+4>>0]|0)>=2:0){s=n[Ue+8>>2]|0;b=s+4|0;c=s+8|0;m=0;ee(n[n[c>>2]>>2]|0,n[b>>2]|0);Le=m;m=0;if(Le&1){Ze=me()|0;Ca(n[b>>2]|0,n[c>>2]|0);Ra(s);je(Ze|0)}c=n[c>>2]|0;o=n[c+4>>2]|0;if(o|0)xt(n[b>>2]|0,o,n[c+8>>2]|0);xt(s,12,4)}l=r[n[e+20>>2]>>0]|0;if(!(l<<24>>24)){c=r[5789]|0;if(c<<24>>24==1)r[5789]=0;if(!(c<<24>>24)){p=Ze;return}n[u>>2]=2928;n[u+4>>2]=1;n[u+8>>2]=0;n[u+16>>2]=13784;n[u+20>>2]=0;Id[We&31](Ye,a,u);if(n[Ye>>2]|0?(i[Ye+4>>0]|0)>=2:0){o=n[Ye+8>>2]|0;d=o+4|0;c=o+8|0;m=0;ee(n[n[c>>2]>>2]|0,n[d>>2]|0);Qe=m;m=0;if(Qe&1){Ze=me()|0;Ca(n[d>>2]|0,n[c>>2]|0);Ra(o);je(Ze|0)}c=n[c>>2]|0;f=n[c+4>>2]|0;if(f|0)xt(n[d>>2]|0,f,n[c+8>>2]|0);xt(o,12,4)}p=Ze;return}Jo(13552)|0;Zo(h|0,0,800)|0;Ur(Ye,h);b=n[Ye+4>>2]|0;c=n[Ye+8>>2]|0;e:do{if(!(n[Ye>>2]|0)){if(b>>>0>100)Si(b,100);n[ze>>2]=u;Le=l<<24>>24==2;do{if(!Le){s=h+(b<<3)|0;o=s;n[Ue>>2]=ze;n[Ue+4>>2]=0;a:do{if(((b<<3|0)/8|0)>>>0>3){e=h;while(1){Wr(Ye,Ue,e);if(n[Ye>>2]|0){Pe=461;break}Wr(Ye,Ue,e+8|0);if(n[Ye>>2]|0){Pe=464;break}Wr(Ye,Ue,e+16|0);if(n[Ye>>2]|0){Pe=466;break}c=e+32|0;Wr(Ye,Ue,e+24|0);if(n[Ye>>2]|0){Pe=469;break}if(((o-c|0)/8|0)>>>0>3)e=c;else{Pe=458;break a}}if((Pe|0)==461){o=Ye+4|0;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=462;break}else if((Pe|0)==464){o=Ye+4|0;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=462;break}else if((Pe|0)==466){o=Ye+4|0;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=462;break}else if((Pe|0)==469){o=Ye+4|0;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=462;break}}else{c=h;Pe=458}}while(0);a:do{if((Pe|0)==458){t:do{if((c|0)!=(s|0)){while(1){Wr(Ye,Ue,c);c=c+8|0;if(n[Ye>>2]|0)break;if((c|0)==(s|0))break t}o=Ye+4|0;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=462;break a}}while(0);c=0;o=0}}while(0);c=b-((c|0)==0?b:o)|0;if(c>>>0<b>>>0)if(c){n[Ye>>2]=2760;n[Ye+4>>2]=1;n[Ye+8>>2]=0;n[Ye+16>>2]=13784;n[Ye+20>>2]=0;Id[We&31](Ue,a,Ye);if(!(n[Ue>>2]|0))break;else{c=Ue+4|0;f=n[c>>2]&255;c=n[c+4>>2]|0;Pe=13;break e}}else c=0;else Pe=475}else Pe=475}while(0);if((Pe|0)==475)c=0;n[Ye>>2]=2768;n[Ye+4>>2]=1;n[Ye+8>>2]=0;n[Ye+16>>2]=13784;n[Ye+20>>2]=0;Id[We&31](Ue,a,Ye);if(n[Ue>>2]|0){c=Ue+4|0;f=n[c>>2]&255;c=n[c+4>>2]|0;Pe=13;break}c=b-c|0;if(c>>>0>100)Si(c,100);S=h+(c<<3)|0;T=qe+4|0;j=He;C=Ye+4|0;R=Ue+4|0;ae=Ue+8|0;re=Ue+12|0;O=Ue+16|0;B=Ue+20|0;ie=ze+4|0;Y=De+4|0;xe=Ye+4|0;K=ze+64|0;Q=ze+68|0;Z=ze+72|0;J=ze+73|0;X=ze+80|0;W=Ue+4|0;M=ze+48|0;N=Ye+4|0;Ne=Ye+4|0;Se=Ye+4|0;Ee=Ye+4|0;Te=Ye+4|0;Ce=Ye+4|0;Re=Ye+4|0;Oe=Ye+4|0;Be=Ye+4|0;oe=Ye+4|0;de=Ye+4|0;se=Ye+4|0;be=Ye+4|0;ue=Ye+4|0;le=Ye+4|0;pe=Ye+4|0;he=Ye+4|0;ge=Ye+4|0;ve=Ye+4|0;ye=Ye+4|0;_e=Ye+4|0;we=Ye+4|0;Ae=Ye+4|0;ke=Ye+4|0;fe=Ye+4|0;ne=Ye+4|0;I=qe;P=Ge+4|0;F=Ye+4|0;L=Ye+8|0;D=Ye+12|0;z=Ye+16|0;q=Ye+20|0;U=Ue+4|0;$=Ue+8|0;te=Ue+12|0;H=Ue+16|0;V=Ue+20|0;ce=ze+4|0;G=Ve+8|0;Me=Ye+4|0;Ie=Ye+8|0;E=l<<24>>24==3;x=t+20|0;A=h;k=0;a:while(1){if((A|0)==(S|0)){Pe=24;break}s=A;A=A+8|0;Pe=n[s>>2]|0;n[Ve>>2]=0;n[Ve+4>>2]=0;n[Ve+8>>2]=0;n[Ve+12>>2]=0;if(!(Ke(Pe|0,Ve|0)|0)){c=0;o=0}else{c=n[G>>2]|0;o=Ao(c)|0;if((o|0)==-1){Pe=26;break}_f(Ye,c,o);if(!(n[Ye>>2]|0)){c=n[Me>>2]|0;o=n[Ie>>2]|0}else{c=0;o=0}}e=n[s>>2]|0;g=n[s+4>>2]|0;n[He>>2]=k;k=k+1|0;n[qe>>2]=e;n[T>>2]=g;g=c;do{if(E)if(!e){n[De>>2]=0;c=0;Pe=34}else Pe=36;else if(Le){Rf(Ge,2776);w=n[Ge>>2]|0;Pe=n[P>>2]|0;n[Ye>>2]=j;n[F>>2]=40;n[L>>2]=I;n[D>>2]=50;n[z>>2]=w;n[q>>2]=Pe;n[Ue>>2]=2780;n[U>>2]=3;n[$>>2]=2804;n[te>>2]=2;n[H>>2]=Ye;n[V>>2]=3;Id[We&31](ze,a,Ue);if(!(n[ze>>2]|0)){Pe=37;break}else{Pe=ce;w=n[Pe>>2]|0;Pe=n[Pe+4>>2]|0;n[De>>2]=1;c=Y;n[c>>2]=w;n[c+4>>2]=Pe;c=1;Pe=34;break}}else Pe=36}while(0);do{if((Pe|0)==36){n[Ye>>2]=j;n[C>>2]=40;n[Ue>>2]=2876;n[R>>2]=2;n[ae>>2]=2892;n[re>>2]=1;n[O>>2]=Ye;n[B>>2]=1;Id[We&31](ze,a,Ue);if(!(n[ze>>2]|0)){Pe=37;break}else{Pe=ie;w=n[Pe>>2]|0;Pe=n[Pe+4>>2]|0;n[De>>2]=1;c=Y;n[c>>2]=w;n[c+4>>2]=Pe;c=1;Pe=34;break}}}while(0);t:do{if((Pe|0)==37){Pe=0;do{if(!c){c=n[x>>2]|0;Dd[c&7](Ye,a,5790,9);if(!(n[Ye>>2]|0))break;else{Pe=xe;w=n[Pe>>2]|0;Pe=n[Pe+4>>2]|0;n[De>>2]=1;c=Y;n[c>>2]=w;n[c+4>>2]=Pe;c=1;Pe=34;break t}}else{do{if(o>>>0>4)if((r[g+3>>0]|0)>-65){if((g|0)!=5800?Lo(5800,g,3)|0:0){Pe=59;break}e=o+-1|0;if(e){c=g+e|0;if((r[c>>0]|0)<=-65){Pe=59;break}}else c=g;if((c|0)!=5799?(r[c>>0]|0)!=69:0){Pe=54;break}if(o>>>0<4){Pe=53;break a}if((r[g+e>>0]|0)>-65){c=3;Pe=65}else{Pe=53;break a}}else Pe=59;else Pe=54}while(0);if((Pe|0)==54)if(o>>>0>3)Pe=59;else Pe=92;do{if((Pe|0)==59)if((r[g+2>>0]|0)>-65){if((g|0)!=5803?Lo(5803,g,2)|0:0){Pe=92;break}e=o+-1|0;if(e){c=g+e|0;if((r[c>>0]|0)<=-65){Pe=92;break}}else c=g;if((c|0)!=5799?(r[c>>0]|0)!=69:0){Pe=92;break}if(o>>>0<3){Pe=64;break a}if((r[g+e>>0]|0)>-65){c=2;e=o;Pe=65}else{Pe=64;break a}}else Pe=92}while(0);r:do{if((Pe|0)==65){Pe=0;v=g+c|0;y=e+-3|0;h=v+y|0;c=v;while(1){if((c|0)==(h|0))break;else t=0;while(1){e=c+1|0;u=r[c>>0]|0;do{if(u<<24>>24>-1){c=e;e=u&255}else{l=u&31;if((e|0)==(h|0)){c=h;e=0}else{c=c+2|0;e=r[e>>0]&63}e=e&255;if((u&255)<=223){e=e|l<<6;break}if((c|0)==(h|0)){b=h;c=0}else{b=c+1|0;c=r[c>>0]&63}s=c&255|e<<6;if((u&255)<=239){c=b;e=s|l<<12;break}if((b|0)==(h|0)){c=h;e=0}else{c=b+1|0;e=r[b>>0]&63}e=s<<6|l<<18&1835008|e&255}}while(0);if((e+-48|0)>>>0>=10){if(e>>>0<=127){Fe=c;c=t;break}if(!(vi(e)|0)){Fe=c;c=t;break}}e=(t*10|0)+-48+e|0;if((c|0)==(h|0)){Fe=h;c=e;break}else t=e}if(!c){Pe=83;break}l=c+-1|0;c:do{if(!l){c=Fe;e=0}else{c=Fe;e=0;u=l;do{u=u+-1|0;if((c|0)==(h|0)){c=h;break c}s=c+1|0;b=r[c>>0]|0;do{if(b<<24>>24>-1)c=s;else{if((s|0)==(h|0)){c=h;break}_=c+2|0;w=c+3|0;c=(_|0)==(h|0)|(b&255)<224?_:(w|0)==(h|0)|(b&255)<240?w:c+4|0}}while(0);e=e+1|0}while((u|0)!=0)}}while(0);if((e|0)!=(l|0)){Pe=92;break r}}if((Pe|0)==83?(Pe=0,(Fe|0)!=(h|0)):0){Pe=92;break}if(E){yf(ze,v,y,5805,3);n[K>>2]=0;n[Q>>2]=y;r[Z>>0]=1;r[J>>0]=0;n[X>>2]=1;Vr(Ue,ze);c=n[X>>2]|0;c:do{switch(c|0){case 0:{n[Ye>>2]=0;break}case 1:{n[X>>2]=0;do{if(!(r[J>>0]|0)){if(!(r[Z>>0]|0)){o=n[Q>>2]|0;c=n[K>>2]|0;if((o|0)==(c|0))break}else{c=n[K>>2]|0;o=n[Q>>2]|0}r[J>>0]=1;n[Ye>>2]=(n[M>>2]|0)+c;n[N>>2]=o-c;break c}}while(0);n[Ye>>2]=0;break}default:{n[X>>2]=c+-1;Vr(Ye,ze)}}}while(0);t=n[Ue>>2]|0;h=Ye;l=n[h>>2]|0;h=n[h+4>>2]|0;c:do{if(!t){o=v;c=y}else{if((n[W>>2]|0)==16)o=0;else{o=v;c=y;break}while(1){if((o|0)==16)break;c=o+1|0;e=t+c|0;b=r[t+o>>0]|0;do{if(b<<24>>24>-1){s=c;o=b&255}else{u=b&31;if((c|0)==16){o=16;c=0}else{o=o+2|0;c=r[e>>0]&63}e=c&255;if((b&255)<=223){s=o;o=e|u<<6;break}if((o|0)==16){s=16;c=0}else{s=o+1|0;c=r[t+o>>0]&63}e=c&255|e<<6;if((b&255)<=239){o=e|u<<12;break}if((s|0)==16){c=16;o=0}else{c=s+1|0;o=r[t+s>>0]&63}s=c;o=e<<6|u<<18&1835008|o&255}}while(0);do{if((o+-48|0)>>>0>=10){if((o+-97|0)>>>0<26){c=-87;break}if((o+-65|0)>>>0<26)c=-55;else{o=v;c=y;break c}}else c=-48}while(0);if((c+o|0)>>>0<16)o=s;else{o=v;c=y;break c}}c=(l|0)!=0;o=c?l:14356;c=c?h:0}}while(0)}else{o=v;c=y}if(!c)Pe=447;else{e=1;g=c;c:while(1){if(!e?(Dd[n[x>>2]&7](Ye,a,5808,2),n[Ye>>2]|0):0){Pe=129;break}y=o;c=g;t=r[o>>0]|0;l=o+g|0;while(1){v=y+1|0;do{if(t<<24>>24>-1)e=t&255;else{h=t&31;if((c|0)==1){b=l;e=0}else{b=y+2|0;e=r[v>>0]&63}s=e&255;if((t&255)<=223){e=s|h<<6;break}if((b|0)==(l|0)){u=l;e=0}else{u=b+1|0;e=r[b>>0]&63}s=e&255|s<<6;if((t&255)<=239){e=s|h<<12;break}if((u|0)==(l|0))e=0;else e=r[u>>0]&63;e=s<<6|h<<18&1835008|e&255}}while(0);if((e+-48|0)>>>0>=10){if(e>>>0<=127)break;if(!(vi(e)|0))break}switch(c|0){case 1:{Pe=141;break a}case 0:{c=0;Pe=163;break a}default:{}}t=r[v>>0]|0;if(t<<24>>24<=-65){Pe=163;break a}e=c+-1|0;if(!e){Pe=141;break a}else{y=v;c=e;l=v+e|0}}e=g-c|0;if(!((c|0)==0|(e|0)==0)){if(g>>>0<=e>>>0){Pe=148;break a}if((r[o+e>>0]|0)<=-65){Pe=148;break a}}Wf(Ye,o,e);if(r[Ye>>0]|0){Pe=150;break a}e=n[Ne>>2]|0;s=(e|0)==0;if(!(s|(c|0)==(e|0))){if(c>>>0<=e>>>0){Pe=155;break a}o=y+e|0;if((r[o>>0]|0)<=-65){Pe=155;break a}}else o=y+e|0;g=c-e|0;do{if((e|0)!=2)if(e>>>0>2)if((r[y+2>>0]|0)>-65){Pe=159;break}else{c=y;Pe=168;break}else if(s)break;else{e=1;Pe=170;break}else Pe=159}while(0);do{if((Pe|0)==159){if((y|0)!=5810?Lo(5810,y,2)|0:0){c=y;Pe=168;break}if((r[v>>0]|0)<=-65){Pe=166;break a}c=v;e=e+-1|0;Pe=168}}while(0);if((Pe|0)==168){y=c;Pe=170}n:do{if((Pe|0)==170){i:while(1){s=(e|0)==1;if(!s?(r[y+1>>0]|0)<=-65:0)Pe=208;else Pe=172;f:do{if((Pe|0)==172){Pe=0;do{if((y|0)!=5812){c=r[y>>0]|0;if(c<<24>>24==46)break;if(!s?(r[y+1>>0]|0)<=-65:0){Pe=208;break f}if(!((y|0)==5813|c<<24>>24==36)){Pe=208;break f}s=(e|0)==4;do{if(!s)if(e>>>0>4)if((r[y+4>>0]|0)>-65){Pe=206;break}else{Pe=283;break}else if((e|0)==3){c=1;Pe=284;break}else break i;else Pe=206}while(0);o:do{if((Pe|0)==206){Pe=0;do{if((y|0)!=5814){if(!(Lo(5814,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}do{if((y|0)!=5818){if(!(Lo(5818,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}do{if((y|0)!=5823){if(!(Lo(5823,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}do{if((y|0)!=5828){if(!(Lo(5828,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}do{if((y|0)!=5833){if(!(Lo(5833,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}do{if((y|0)!=5838){if(!(Lo(5838,y,4)|0))break;if(!s?(r[y+4>>0]|0)<=-65:0){Pe=283;break o}if((y|0)!=5843?Lo(5843,y,4)|0:0){Pe=283;break o}Dd[n[x>>2]&7](Ye,a,5851,1);if(n[Ye>>2]|0){Pe=291;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=289;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5847,1);if(n[Ye>>2]|0){Pe=281;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=279;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5842,1);if(n[Ye>>2]|0){Pe=271;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=269;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5837,1);if(n[Ye>>2]|0){Pe=261;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=259;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5832,1);if(n[Ye>>2]|0){Pe=251;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=249;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5827,1);if(n[Ye>>2]|0){Pe=241;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=239;break a}e=e+-4|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5822,1);if(n[Ye>>2]|0){Pe=231;break c}c=y+4|0;if(!s?(r[c>>0]|0)<=-65:0){Pe=229;break a}e=e+-4|0;break f}}while(0);if((Pe|0)==283?(Pe=0,(r[y+3>>0]|0)>-65):0){c=0;Pe=284}do{if((Pe|0)==284){Pe=0;if((y|0)!=5848?Lo(5848,y,3)|0:0)break;Dd[n[x>>2]&7](Ye,a,5857,1);if(n[Ye>>2]|0){Pe=304;break c}if(!c){if(e>>>0<=3){Pe=302;break a}c=y+3|0;if((r[c>>0]|0)<=-65){Pe=302;break a}}else c=y+3|0;e=e+-3|0;break f}}while(0);if((e|0)!=5){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5852){if(!(Lo(5852,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5858){if(!(Lo(5858,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5864){if(!(Lo(5864,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5870){if(!(Lo(5870,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5876){if(!(Lo(5876,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5882){if(!(Lo(5882,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5888){if(!(Lo(5888,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5894){if(!(Lo(5894,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;do{if((y|0)!=5900){if(!(Lo(5900,y,5)|0))break;if(!c){if(e>>>0<=5)break i;if((r[y+5>>0]|0)>-65)c=0;else break i}else c=1;if((y|0)!=5906?Lo(5906,y,5)|0:0)break i;Dd[n[x>>2]&7](Ye,a,5912,1);if(n[Ye>>2]|0){Pe=429;break c}if(!c){if(e>>>0<=5){Pe=427;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=427;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5911,1);if(n[Ye>>2]|0){Pe=421;break c}if(!c){if(e>>>0<=5){Pe=419;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=419;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5905,1);if(n[Ye>>2]|0){Pe=408;break c}if(!c){if(e>>>0<=5){Pe=406;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=406;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5899,1);if(n[Ye>>2]|0){Pe=395;break c}if(!c){if(e>>>0<=5){Pe=393;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=393;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5893,1);if(n[Ye>>2]|0){Pe=382;break c}if(!c){if(e>>>0<=5){Pe=380;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=380;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5887,1);if(n[Ye>>2]|0){Pe=369;break c}if(!c){if(e>>>0<=5){Pe=367;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=367;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5881,1);if(n[Ye>>2]|0){Pe=356;break c}if(!c){if(e>>>0<=5){Pe=354;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=354;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5875,1);if(n[Ye>>2]|0){Pe=343;break c}if(!c){if(e>>>0<=5){Pe=341;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=341;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5869,1);if(n[Ye>>2]|0){Pe=330;break c}if(!c){if(e>>>0<=5){Pe=328;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=328;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);Dd[n[x>>2]&7](Ye,a,5863,1);if(n[Ye>>2]|0){Pe=317;break c}if(!c){if(e>>>0<=5){Pe=315;break a}c=y+5|0;if((r[c>>0]|0)<=-65){Pe=315;break a}}else c=y+5|0;e=e+-5|0;break f}}while(0);c=y+1|0;do{if(s)Pe=200;else{t=r[c>>0]|0;if(t<<24>>24<=-65){Pe=176;break a}c=y+e|0;s=y+2|0;do{if(t<<24>>24>-1)s=t&255;else{h=t&31;if((e|0)==2){u=c;s=0}else{u=y+3|0;s=r[s>>0]&63}b=s&255;if((t&255)<=223){s=b|h<<6;break}if((u|0)==(c|0)){l=c;s=0}else{l=u+1|0;s=r[u>>0]&63}b=s&255|b<<6;if((t&255)<=239){s=b|h<<12;break}if((l|0)==(c|0))s=0;else s=r[l>>0]&63;s=b<<6|h<<18&1835008|s&255}}while(0);if((s|0)!=46){Pe=200;break}Dd[n[x>>2]&7](Ye,a,5808,2);if(n[Ye>>2]|0){Pe=199;break c}s=2}}while(0);if((Pe|0)==200){Pe=0;Dd[n[x>>2]&7](Ye,a,5812,1);if(n[Ye>>2]|0){Pe=202;break c}s=1}if((e|0)!=(s|0)){if(e>>>0<=s>>>0){Pe=195;break a}c=y+s|0;if((r[c>>0]|0)<=-65){Pe=195;break a}}e=e-s|0}}while(0);if((Pe|0)==208){Pe=0;_=y+e|0;w=y;s=0;f:while(1){c=w;if((c|0)==(_|0)){s=e;break}u=c+1|0;h=r[c>>0]|0;b=u;do{if(h<<24>>24>-1){l=b;b=h&255}else{v=h&31;if((u|0)==(_|0)){l=_;c=b;b=0}else{c=c+2|0;l=c;b=r[u>>0]&63}u=b&255;if((h&255)<=223){l=c;b=u|v<<6;break}if((l|0)==(_|0)){t=_;b=0}else{c=l+1|0;t=c;b=r[l>>0]&63}u=b&255|u<<6;if((h&255)<=239){l=c;b=u|v<<12;break}if((t|0)==(_|0))b=0;else{c=t+1|0;b=r[t>>0]&63}l=c;b=u<<6|v<<18&1835008|b&255}}while(0);c=s-w+l|0;switch(b&2097151|0){case 46:case 36:break f;default:{w=l;s=c}}}c=(s|0)==0|(e|0)==(s|0);if(!c){if(e>>>0<=s>>>0){Pe=437;break a}if((r[y+s>>0]|0)<=-65){Pe=437;break a}}Dd[n[x>>2]&7](Ye,a,y,s);if(n[Ye>>2]|0){Pe=446;break c}if(!c){if(e>>>0<=s>>>0){Pe=443;break a}c=y+s|0;if((r[c>>0]|0)<=-65){Pe=443;break a}}else c=y+s|0;e=e-s|0}if(!e)break n;else{y=c;Pe=170}}Dd[n[x>>2]&7](Ye,a,y,e);if(n[Ye>>2]|0){Pe=433;break c}}}while(0);if(!g){Pe=447;break r}else e=0}switch(Pe|0){case 129:{o=fe;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 199:{o=Ee;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 202:{o=Se;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 231:{o=Te;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 241:{o=Ce;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 251:{o=Re;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 261:{o=Oe;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 271:{o=Be;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 281:{o=oe;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 291:{o=de;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 304:{o=se;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 317:{o=be;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 330:{o=ue;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 343:{o=le;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 356:{o=pe;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 369:{o=he;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 382:{o=ge;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 395:{o=ve;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 408:{o=ye;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 421:{o=_e;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 429:{o=we;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 433:{o=Ae;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}case 446:{o=ke;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break r}}}}}while(0);do{if((Pe|0)==92){Dd[n[x>>2]&7](Ye,a,g,o);if(!(n[Ye>>2]|0)){Pe=447;break}else{o=ne;c=n[o>>2]|0;o=n[o+4>>2]|0;Pe=449;break}}}while(0);if((Pe|0)==447){Pe=0;c=n[x>>2]|0;break}else if((Pe|0)==449){n[De>>2]=1;w=Y;n[w>>2]=c;n[w+4>>2]=o;c=1;Pe=34;break t}}}while(0);Dd[c&7](De,a,5492,1);e=n[De>>2]|0}}while(0);if((Pe|0)==34)e=c;c=Y;o=n[c>>2]|0;c=n[c+4>>2]|0;if(e|0){Pe=12;break}}switch(Pe|0){case 12:{f=o&255;Pe=13;break e}case 24:{Qe=1;f=0;d=0;break e}case 26:{Si(-1,0);break}case 53:{Ni(g,o,3,e);break}case 64:{Ni(g,o,2,e);break}case 141:{Oi(3624);break}case 148:{Ni(o,g,0,e);break}case 150:{Gr(r[Ye+1>>0]|0);break}case 155:{Ni(y,c,e,c);break}case 163:{Ni(y,c,1,c);break}case 166:{Ni(y,e,1,e);break}case 176:{Ni(y,e,1,e);break}case 195:{Ni(y,e,s,e);break}case 229:{Ni(y,e,4,e);break}case 239:{Ni(y,e,4,e);break}case 249:{Ni(y,e,4,e);break}case 259:{Ni(y,e,4,e);break}case 269:{Ni(y,e,4,e);break}case 279:{Ni(y,e,4,e);break}case 289:{Ni(y,e,4,e);break}case 302:{Ni(y,e,3,e);break}case 315:{Ni(y,e,5,e);break}case 328:{Ni(y,e,5,e);break}case 341:{Ni(y,e,5,e);break}case 354:{Ni(y,e,5,e);break}case 367:{Ni(y,e,5,e);break}case 380:{Ni(y,e,5,e);break}case 393:{Ni(y,e,5,e);break}case 406:{Ni(y,e,5,e);break}case 419:{Ni(y,e,5,e);break}case 427:{Ni(y,e,5,e);break}case 437:{Ni(y,e,0,s);break}case 443:{Ni(y,e,s,e);break}}}else{f=b&255;Pe=13}}while(0);if((Pe|0)==13){Qe=0;d=c}ed(13552)|0;if((f&255)<2|Qe){p=Ze;return}o=d+4|0;c=d+8|0;m=0;ee(n[n[c>>2]>>2]|0,n[o>>2]|0);Qe=m;m=0;if(Qe&1){Ze=me()|0;Ca(n[o>>2]|0,n[c>>2]|0);Ra(d);je(Ze|0)}c=n[c>>2]|0;f=n[c+4>>2]|0;if(f|0)xt(n[o>>2]|0,f,n[c+8>>2]|0);xt(d,12,4);p=Ze;return}function cr(e){e=e|0;var a=0,t=0,c=0,f=0,o=0,d=0,s=0,b=0;b=p;p=p+16|0;f=b+8|0;a=b;t=sr(2672)|0;if(!t){s=1;p=b;return s|0}if(!(n[t>>2]|0)){r[t>>0]=1;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;s=t+4|0;r[s>>0]=0;r[s+1>>0]=0;r[s+2>>0]=0;r[s+3>>0]=0;d=t+8|0;o=d;r[o>>0]=0;r[o+1>>0]=0;r[o+2>>0]=0;r[o+3>>0]=0;d=d+4|0;r[d>>0]=0;r[d+1>>0]=0;r[d+2>>0]=0;r[d+3>>0]=0}else s=t+4|0;d=e;o=d;o=i[o>>0]|i[o+1>>0]<<8|i[o+2>>0]<<16|i[o+3>>0]<<24;d=d+4|0;d=i[d>>0]|i[d+1>>0]<<8|i[d+2>>0]<<16|i[d+3>>0]<<24;c=e;r[c>>0]=0;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;c=a;n[c>>2]=o;n[c+4>>2]=d;if(n[s>>2]|0){m=0;ce(4);m=0;b=me()|0;fr(a);je(b|0)}r[s>>0]=-1;r[s+1>>0]=-1>>8;r[s+2>>0]=-1>>16;r[s+3>>0]=-1>>24;c=t+8|0;a=f;n[a>>2]=c;n[a+4>>2]=s;a=n[c>>2]|0;do{if(a|0){e=t+12|0;m=0;ee(n[n[e>>2]>>2]|0,a|0);t=m;m=0;if(t&1){b=me()|0;or(n[c>>2]|0,n[e>>2]|0);s=c;n[s>>2]=o;n[s+4>>2]=d;ur(f);je(b|0)}else{e=n[e>>2]|0;a=n[e+4>>2]|0;if(!a)break;xt(n[c>>2]|0,a,n[e+8>>2]|0);break}}}while(0);f=c;n[f>>2]=o;n[f+4>>2]=d;r[s>>0]=0;r[s+1>>0]=0;r[s+2>>0]=0;r[s+3>>0]=0;s=0;p=b;return s|0}function nr(e){e=e|0;var a=0,t=0;a=n[e>>2]|0;dr(a+8|0);t=(n[e>>2]|0)+4|0;e=n[t>>2]|0;n[t>>2]=e-1;if((e|0)!=1)return;xt(a,40,8);return}function ir(e){e=e|0;var a=0,t=0;a=e+4|0;m=0;ee(n[n[a>>2]>>2]|0,n[e>>2]|0);t=m;m=0;if(t&1){t=me()|0;or(n[e>>2]|0,n[a>>2]|0);je(t|0)}a=n[a>>2]|0;t=n[a+4>>2]|0;if(!t)return;xt(n[e>>2]|0,t,n[a+8>>2]|0);return}function fr(e){e=e|0;var a=0,t=0;a=n[e>>2]|0;if(!a)return;t=e+4|0;m=0;ee(n[n[t>>2]>>2]|0,a|0);a=m;m=0;if(a&1){a=me()|0;or(n[e>>2]|0,n[t>>2]|0);je(a|0)}t=n[t>>2]|0;a=n[t+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,n[t+8>>2]|0);return}function or(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function dr(e){e=e|0;var a=0,t=0,c=0;a=e+8|0;t=n[a>>2]|0;if(t|0?(r[t>>0]=0,c=n[e+12>>2]|0,c|0):0)xt(n[a>>2]|0,c,1);c=e+16|0;Ie(n[c>>2]|0)|0;xt(n[c>>2]|0,24,8);c=e+24|0;$e(n[c>>2]|0)|0;xt(n[c>>2]|0,48,8);return}function sr(e){e=e|0;var a=0,t=0,r=0,c=0;c=p;p=p+16|0;t=c;a=n[e>>2]|0;if(!a)a=pr(e)|0;a=Oe(a|0)|0;if(a|0){p=c;return((a|0)==1?0:a+4|0)|0}r=At(20,4,t)|0;if(!r)Ma(t);n[r>>2]=e;t=r+4|0;n[t>>2]=0;a=n[e>>2]|0;if(a|0){e=a;Ye(e|0,r|0)|0;p=c;return t|0}e=pr(e)|0;Ye(e|0,r|0)|0;p=c;return t|0}function br(){var e=0,a=0,t=0,r=0,c=0,i=0;c=p;p=p+48|0;a=c+32|0;e=c+8|0;i=c;n[i>>2]=5601;n[i+4>>2]=16;r=n[896]|0;t=n[897]|0;n[a>>2]=i;n[a+4>>2]=41;n[a+8>>2]=c+32;n[a+12>>2]=51;n[e>>2]=r;n[e+4>>2]=t;n[e+8>>2]=0;n[e+16>>2]=a;n[e+20>>2]=2;Ci(e,3648)}function ur(e){e=e|0;e=n[e+4>>2]|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;return}function lr(e,a){e=e|0;a=a|0;return Ff(n[e>>2]|0,n[e+4>>2]|0,a)|0}function pr(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;b=p;p=p+64|0;t=b+16|0;d=b+52|0;o=b+48|0;i=b+44|0;f=b+40|0;r=b;c=e+4|0;a=n[c>>2]|0;n[f>>2]=0;a=ue(f|0,a|0)|0;n[i>>2]=a;n[o>>2]=i;n[d>>2]=13768;if(a|0){n[r>>2]=o;n[r+4>>2]=52;n[r+8>>2]=d;n[r+12>>2]=52;n[t>>2]=2560;n[t+4>>2]=3;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;Ea(t,2680)}a=n[f>>2]|0;if(!a){c=n[c>>2]|0;n[f>>2]=0;c=ue(f|0,c|0)|0;n[i>>2]=c;n[o>>2]=i;n[d>>2]=13768;if(c|0){n[r>>2]=o;n[r+4>>2]=52;n[r+8>>2]=d;n[r+12>>2]=52;n[t>>2]=2560;n[t+4>>2]=3;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;Ea(t,2680)}a=n[f>>2]|0;Ee(0)|0;if(!a)ka(5617,26,2696);else s=a}else s=a;a=n[e>>2]|0;if(!a)n[e>>2]=s;if(!a){p=b;return s|0}Ee(s|0)|0;s=a;p=b;return s|0}function hr(e,a){e=e|0;a=a|0;return Jf(n[e>>2]|0,a)|0}function mr(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;i=p;p=p+16|0;r=i+4|0;t=i;n[t>>2]=e;c=n[e>>2]|0;a=n[c>>2]|0;if(!a){m=0;a=te(11,c|0)|0;f=m;m=0;if(f&1){f=me()|0;gr(t);je(f|0)}}Ye(a|0,1)|0;n[r>>2]=e;gr(r);a=n[c>>2]|0;if(a|0){f=a;Ye(f|0,0)|0;p=i;return}f=pr(c)|0;Ye(f|0,0)|0;p=i;return}function gr(e){e=e|0;var a=0,t=0,r=0;a=n[e>>2]|0;if(n[a+4>>2]|0?(r=a+12|0,t=n[r>>2]|0,t|0):0){a=a+16|0;m=0;ee(n[n[a>>2]>>2]|0,t|0);t=m;m=0;if(t&1){t=me()|0;or(n[r>>2]|0,n[a>>2]|0);vr(n[e>>2]|0);je(t|0)}a=n[a>>2]|0;t=n[a+4>>2]|0;if(t|0)xt(n[r>>2]|0,t,n[a+8>>2]|0)}xt(n[e>>2]|0,20,4);return}function vr(e){e=e|0;xt(e,20,4);return}function yr(e){e=e|0;return}function _r(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;a=Wo(2,t,(r|0)>-1?r:2147483647)|0;if((a|0)==-1){r=1;a=0;t=n[(mo()|0)>>2]|0}else{r=0;t=0}n[e>>2]=r;e=e+4|0;n[e>>2]=a;n[e+4>>2]=t;return}function wr(e,a){e=e|0;a=a|0;n[e>>2]=0;return}function Ar(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;qr(e,n[a>>2]|0,t,r);return}function kr(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=p;p=p+32|0;c=r;a=n[a>>2]|0;n[c>>2]=n[t>>2];n[c+4>>2]=n[t+4>>2];n[c+8>>2]=n[t+8>>2];n[c+12>>2]=n[t+12>>2];n[c+16>>2]=n[t+16>>2];n[c+20>>2]=n[t+20>>2];xr(e,a,c);p=r;return}function xr(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,f=0,o=0,d=0,s=0,b=0;b=p;p=p+80|0;o=b+48|0;s=b+32|0;c=b+16|0;d=b;n[d>>2]=a;f=d+4|0;n[f>>2]=0;n[o>>2]=n[t>>2];n[o+4>>2]=n[t+4>>2];n[o+8>>2]=n[t+8>>2];n[o+12>>2]=n[t+12>>2];n[o+16>>2]=n[t+16>>2];n[o+20>>2]=n[t+20>>2];m=0;a=J(10,d|0,256,o|0)|0;t=m;m=0;if(t&1){b=me()|0;Er(d);je(b|0)}do{if(a<<24>>24){a=d+4|0;if(n[a>>2]|0){n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];p=b;return}m=0;re(22,c|0,5735,15);t=m;m=0;if(t&1){b=me()|0;Er(d);je(b|0)}n[s>>2]=n[c>>2];n[s+4>>2]=n[c+4>>2];n[s+8>>2]=n[c+8>>2];a=At(12,4,o)|0;if(!a)Ma(o);n[a>>2]=n[s>>2];n[a+4>>2]=n[s+4>>2];n[a+8>>2]=n[s+8>>2];t=At(12,4,o)|0;if(!t)Ma(o);else{r[t>>0]=16;o=t+1|0;r[o>>0]=r[s>>0]|0;r[o+1>>0]=r[s+1>>0]|0;r[o+2>>0]=r[s+2>>0]|0;n[t+4>>2]=a;n[t+8>>2]=280;n[e>>2]=1;n[e+4>>2]=2;n[e+8>>2]=t;break}}else n[e>>2]=0}while(0);if(!(n[f>>2]|0)){p=b;return}if((i[d+8>>0]|0)<2){p=b;return}c=d+12|0;a=n[c>>2]|0;f=a+4|0;a=a+8|0;m=0;ee(n[n[a>>2]>>2]|0,n[f>>2]|0);s=m;m=0;if(s&1){b=me()|0;Ca(n[f>>2]|0,n[a>>2]|0);Ra(n[c>>2]|0);je(b|0)}a=n[a>>2]|0;t=n[a+4>>2]|0;if(t|0)xt(n[f>>2]|0,t,n[a+8>>2]|0);xt(n[c>>2]|0,12,4);p=b;return}function Er(e){e=e|0;if(!(n[e+4>>2]|0))return;ja(e+8|0);return}function Sr(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function Tr(e,a){e=e|0;a=a|0;var t=0;t=n[a+8>>2]|0;n[e>>2]=n[a>>2];n[e+4>>2]=t;return}function jr(e,a){e=e|0;a=a|0;n[e>>2]=0;return}function Cr(e){e=e|0;T=-823799153;return-403911271}function Rr(e,a){e=e|0;a=a|0;return Ff(n[e>>2]|0,n[e+8>>2]|0,a)|0}function Or(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+16|0;c=t+12|0;r=t;xf(r,a,5750,11);n[c>>2]=e;Ui(r,c,312)|0;a=Ef(r)|0;p=t;return a|0}function Br(e){e=e|0;return}function Mr(e,a){e=e|0;a=a|0;e=n[e>>2]|0;return Pf(n[e>>2]|0,n[e+8>>2]|0,a)|0}function Nr(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0;i=p;p=p+16|0;r=i;qr(r,n[e>>2]|0,a,t);if(!(n[r>>2]|0)){e=0;p=i;return e|0}r=r+4|0;t=n[r>>2]|0;r=n[r+4>>2]|0;c=e+4|0;a=e+8|0;if(n[c>>2]|0?(m=0,ee(50,a|0),e=m,m=0,e&1):0){i=me()|0;n[c>>2]=1;e=a;n[e>>2]=t;n[e+4>>2]=r;je(i|0)}n[c>>2]=1;e=a;n[e>>2]=t;n[e+4>>2]=r;e=1;p=i;return e|0}function Ir(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0;s=p;p=p+16|0;d=s;o=s+12|0;n[o>>2]=0;if(a>>>0<128){r[o>>0]=a;t=1}else{do{if(a>>>0>=2048)if(a>>>0<65536){r[o>>0]=a>>>12&15|-32;c=a>>>6&63|-128;i=2;f=o+1|0;t=3;break}else{r[o>>0]=a>>>18&7|-16;r[o+1>>0]=a>>>12&63|-128;c=a>>>6&63|-128;i=3;f=o+2|0;t=4;break}else{c=a>>>6&31|-64;i=1;f=o;t=2}}while(0);r[f>>0]=c;r[o+i>>0]=a&63|-128}qr(d,n[e>>2]|0,o,t);if(!(n[d>>2]|0)){e=0;p=s;return e|0}f=d+4|0;i=n[f>>2]|0;f=n[f+4>>2]|0;c=e+4|0;t=e+8|0;if(n[c>>2]|0?(m=0,ee(50,t|0),e=m,m=0,e&1):0){s=me()|0;n[c>>2]=1;e=t;n[e>>2]=i;n[e+4>>2]=f;je(s|0)}n[c>>2]=1;e=t;n[e>>2]=i;n[e+4>>2]=f;e=1;p=s;return e|0}function Pr(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=e;n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,328,r)|0;p=t;return a|0}function Fr(e){e=e|0;return}function Lr(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0;c=p;p=p+16|0;r=c;e=n[e>>2]|0;qr(r,n[e>>2]|0,a,t);if(!(n[r>>2]|0)){r=0;p=c;return r|0}t=r+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=e+4|0;e=e+8|0;if(n[r>>2]|0?(m=0,ee(50,e|0),i=m,m=0,i&1):0){i=me()|0;n[r>>2]=1;c=e;n[c>>2]=a;n[c+4>>2]=t;je(i|0)}n[r>>2]=1;i=e;n[i>>2]=a;n[i+4>>2]=t;i=1;p=c;return i|0}function Dr(e,a){e=e|0;a=a|0;return Ir(n[e>>2]|0,a)|0}function zr(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=n[e>>2];n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,328,r)|0;p=t;return a|0}function qr(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0;w=p;p=p+64|0;y=w+48|0;_=w+32|0;h=w+16|0;u=w;e:do{if(c|0){l=u+4|0;a=c;a:while(1){b=(a|0)>-1?a:2147483647;while(1){c=Wo(2,t,b)|0;if((c|0)==-1){i=1;c=0;d=n[(mo()|0)>>2]|0}else{i=0;d=0}n[u>>2]=i;o=l;n[o>>2]=c;n[o+4>>2]=d;o=(i|0)==0;i=c&255;s=d;if(o)break;f=$o(c|0,d|0,8)|0;switch(c&3){case 0:{if((d|0)!=4){v=22;break a}break}case 1:{g=f&255;v=21;break}default:{g=r[s>>0]|0;v=21}}if((v|0)==21?(v=0,g<<24>>24!=15):0){v=22;break a}if(!(o|(i&255)<2)){f=s+4|0;c=s+8|0;m=0;ee(n[n[c>>2]>>2]|0,n[f>>2]|0);d=m;m=0;if(d&1){v=29;break a}c=n[c>>2]|0;i=n[c+4>>2]|0;if(i|0)xt(n[f>>2]|0,i,n[c+8>>2]|0);xt(s,12,4)}}if(!c){v=10;break}if(a>>>0<c>>>0){v=20;break}a=a-c|0;if(!a)break e;else t=t+c|0}do{if((v|0)==10){m=0;re(22,h|0,5761,28);v=m;m=0;if(v&1){e=me()|0;Ta(u);je(e|0)}n[_>>2]=n[h>>2];n[_+4>>2]=n[h+4>>2];n[_+8>>2]=n[h+8>>2];a=At(12,4,y)|0;if(!a)Ma(y);n[a>>2]=n[_>>2];n[a+4>>2]=n[_+4>>2];n[a+8>>2]=n[_+8>>2];t=At(12,4,y)|0;if(!t)Ma(y);else{r[t>>0]=14;y=t+1|0;r[y>>0]=r[_>>0]|0;r[y+1>>0]=r[_+1>>0]|0;r[y+2>>0]=r[_+2>>0]|0;n[t+4>>2]=a;n[t+8>>2]=280;n[e>>2]=1;n[e+4>>2]=2;n[e+8>>2]=t;break}}else if((v|0)==20){m=0;ae(8,c|0,a|0);m=0;e=me()|0;Ta(u);je(e|0)}else if((v|0)==22){n[e>>2]=1;e=e+4|0;n[e>>2]=c;n[e+4>>2]=d}else if((v|0)==29){e=me()|0;Ca(n[f>>2]|0,n[c>>2]|0);Ra(s);je(e|0)}}while(0);p=w;return}}while(0);n[e>>2]=0;p=w;return}function Ur(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0;f=p;p=p+32|0;c=f+16|0;i=f+28|0;t=f;n[t>>2]=0;n[t+4>>2]=a;n[t+8>>2]=100;a=ta(53,t|0)|0;switch(a|0){case 9:case 5:case 3:{c=n[t>>2]|0;n[e>>2]=0;i=0;i=e+4+(i<<2)|0;n[i>>2]=c;p=f;return}default:{}}t=At(4,4,c)|0;if(!t)Ma(c);n[t>>2]=a;a=At(12,4,c)|0;if(!a)Ma(c);r[a>>0]=16;c=a+1|0;r[c>>0]=r[i>>0]|0;r[c+1>>0]=r[i+1>>0]|0;r[c+2>>0]=r[i+2>>0]|0;n[a+4>>2]=t;n[a+8>>2]=352;n[e>>2]=1;n[e+4>>2]=2;c=a;i=1;i=e+4+(i<<2)|0;n[i>>2]=c;p=f;return}function Hr(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0;d=p;p=p+16|0;o=d;r=a+8|0;i=r;c=n[i>>2]|0;i=n[i+4>>2]|0;f=n[a>>2]|0;s=Nf(a)|0;t=n[a>>2]|0;if(s){t=t|8;n[a>>2]=t;if(!(n[r>>2]|0)){n[r>>2]=1;n[a+12>>2]=10}}n[a>>2]=t|4;n[o>>2]=n[e>>2];s=to(o,a)|0;o=r;n[o>>2]=c;n[o+4>>2]=i;n[a>>2]=f;p=d;return s|0}function Vr(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0;_=p;p=p+16|0;y=_;v=a+73|0;if(r[v>>0]|0){n[e>>2]=0;p=_;return}t=a+72|0;e:do{if(!(r[t>>0]|0)){r[t>>0]=1;Vr(y,a);t=n[y>>2]|0;if((t|0)!=0?(c=n[y+4>>2]|0,(c|0)!=0):0){n[e>>2]=t;n[e+4>>2]=c}else i=7;do{if((i|0)==7)if(!(r[v>>0]|0))break e;else{n[e>>2]=0;break}}while(0);p=_;return}}while(0);g=n[a+48>>2]|0;do{if(!(n[a>>2]|0)){l=a+4|0;u=l+9|0;l=l+4|0;h=n[a+52>>2]|0;t=r[u>>0]|0;m=n[l>>2]|0;while(1){b=t<<24>>24!=0;t=(b^1)&1;r[u>>0]=t;c=(m|0)==0;if(!(c|(h|0)==(m|0))){if(h>>>0<=m>>>0){i=18;break}if((r[g+m>>0]|0)<=-65){i=18;break}}do{if(c){i=0;c=0}else{o=g+m|0;c=o+-1|0;s=r[c>>0]|0;if(s<<24>>24>-1){i=1;c=s&255;break}if((c|0)!=(g|0)){i=o+-2|0;d=r[i>>0]|0;c=d&31;if((d&-64)<<24>>24==-128){if((i|0)!=(g|0)){i=o+-3|0;f=r[i>>0]|0;c=f&15;if((f&-64)<<24>>24==-128){if((i|0)==(g|0))c=0;else c=r[o+-4>>0]&7;c=(c&255)<<6|f&63}}else c=0;c=c<<6|d&63}}else c=0;i=1;c=c<<6|s&63}}while(0);if(b){i=35;break}if(!i){i=33;break}b=m-(c>>>0<128?1:c>>>0<2048?2:c>>>0<65536?3:4)|0;n[l>>2]=b;m=b}if((i|0)==18)Ni(g,h,0,m);else if((i|0)==33){n[y>>2]=0;break}else if((i|0)==35){n[y>>2]=1;n[y+4>>2]=m;n[y+8>>2]=m;break}}else{t=a+8|0;c=n[a+52>>2]|0;i=n[a+56>>2]|0;f=n[a+60>>2]|0;if((n[t+28>>2]|0)==-1){Yr(y,t,g,c,i,f,1);break}else{Yr(y,t,g,c,i,f,0);break}}}while(0);if(!(n[y>>2]|0)){r[v>>0]=1;t=n[a+64>>2]|0;c=t;t=(n[a+68>>2]|0)-t|0}else{c=n[y+8>>2]|0;a=a+68|0;t=(n[a>>2]|0)-c|0;n[a>>2]=n[y+4>>2]}n[e>>2]=g+c;n[e+4>>2]=t;p=_;return}function Gr(e){e=e|0;var a=0,t=0,c=0,i=0,f=0;f=p;p=p+64|0;t=f+40|0;a=f+16|0;i=f+8|0;n[f>>2]=6062;n[f+4>>2]=43;r[i>>0]=e;c=n[896]|0;e=n[897]|0;n[t>>2]=f;n[t+4>>2]=41;n[t+8>>2]=i;n[t+12>>2]=54;n[a>>2]=c;n[a+4>>2]=e;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ci(a,3648)}function Wr(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0;j=p;p=p+80|0;s=j+16|0;i=j;E=n[t>>2]|0;n[i>>2]=0;n[i+4>>2]=0;n[i+8>>2]=0;n[i+12>>2]=0;e:do{if(Ke(E|0,i|0)|0){t=n[i+8>>2]|0;i=Ao(t)|0;if((i|0)==-1)Si(-1,0);_f(s,t,i);if(n[s>>2]|0)break;yf(s,n[s+4>>2]|0,n[s+8>>2]|0,5964,28);do{if(!(n[s>>2]|0)){h=s+4|0;m=n[s+48>>2]|0;l=n[s+52>>2]|0;c=r[h+8>>0]|0;h=n[h>>2]|0;while(1){u=c<<24>>24!=0;c=(u^1)&1;if(!((h|0)==0|(l|0)==(h|0))){if(l>>>0<=h>>>0){S=13;break}t=m+h|0;if((r[t>>0]|0)<=-65){S=13;break}}else t=m+h|0;i=l-h|0;d=m+h+i|0;do{if((t|0)!=(d|0)){s=r[t>>0]|0;if(s<<24>>24>-1){i=1;t=s&255;break}b=s&31;if((i|0)==1){f=d;t=0}else{f=m+h+2|0;t=r[m+h+1>>0]&63}i=t&255;t=i|b<<6;if((s&255)>223){if((f|0)==(d|0)){o=d;t=0}else{o=f+1|0;t=r[f>>0]&63}f=t&255|i<<6;t=f|b<<12;if((s&255)>239){if((o|0)==(d|0))t=0;else t=r[o>>0]&63;i=1;t=f<<6|b<<18&1835008|t&255}else i=1}else i=1}else{i=0;t=0}}while(0);if(u){S=27;break}if(!i){S=77;break}h=(t>>>0<128?1:t>>>0<2048?2:t>>>0<65536?3:4)+h|0}if((S|0)==13)Ni(m,l,h,l);else if((S|0)==27)break;else if((S|0)==77)break e}else{o=s+8|0;g=o+28|0;i=n[g>>2]|0;_=n[s+48>>2]|0;w=n[s+52>>2]|0;A=n[s+56>>2]|0;k=n[s+60>>2]|0;E=o+20|0;x=k+-1|0;t=n[E>>2]|0;f=x+t|0;d=f>>>0<w>>>0;do{if((i|0)==-1)if(d){u=o;b=n[u>>2]|0;u=n[u+4>>2]|0;l=n[s+16>>2]|0;s=n[s+24>>2]|0;a:while(1){i=t;t:while(1){o=i;while(1){y=nd(1,0,r[_+f>>0]&63|0)|0;if(!((y&b|0)==0&(T&u|0)==0)){f=l;break}o=o+k|0;f=o+x|0;if(f>>>0>=w>>>0){S=34;break a}}do{d=f;f=f+1|0;if(d>>>0>=k>>>0){i=l;break t}i=d+o|0;if(i>>>0>=w>>>0){S=41;break a}}while((r[A+d>>0]|0)==(r[_+i>>0]|0));i=f+(o-l)|0;f=i+x|0;if(f>>>0>=w>>>0){c=i;S=35;break a}}do{y=i;i=i+-1|0;if(!y){S=45;break a}if(i>>>0>=k>>>0){S=51;break a}t=i+o|0;if(t>>>0>=w>>>0){S=48;break a}}while((r[A+i>>0]|0)==(r[_+t>>0]|0));t=o+s|0;f=t+x|0;if(f>>>0>=w>>>0){c=t;break}}if((S|0)==34){n[E>>2]=t;t=i;c=o;S=35}else if((S|0)==41)Ti(2936,i,w);else if((S|0)==45){n[E>>2]=o+k;S=75;break}else if((S|0)==48)Ti(2936,t,w);else if((S|0)==51)Ti(2952,i,k);if((S|0)==35)n[E>>2]=t;n[E>>2]=c;S=76}else S=76;else if(d){h=o;l=n[h>>2]|0;h=n[h+4>>2]|0;m=n[s+16>>2]|0;b=n[s+24>>2]|0;u=k-b|0;a:while(1){o=t;d=i;t:while(1){c=o;s=d;while(1){f=nd(1,0,r[_+f>>0]&63|0)|0;if(!((f&l|0)==0&(T&h|0)==0))break;c=c+k|0;f=c+x|0;if(f>>>0>=w>>>0){S=56;break a}else s=0}o=s>>>0>=m>>>0?s:m;do{d=o;o=o+1|0;if(d>>>0>=k>>>0){i=m;break t}f=d+c|0;if(f>>>0>=w>>>0){S=64;break a}}while((r[A+d>>0]|0)==(r[_+f>>0]|0));c=o+(c-m)|0;f=c+x|0;if(f>>>0>=w>>>0){S=57;break a}else{o=c;d=0}}do{d=i;i=i+-1|0;if(s>>>0>=d>>>0){S=68;break a}if(i>>>0>=k>>>0){S=74;break a}t=i+c|0;if(t>>>0>=w>>>0){S=71;break a}}while((r[A+i>>0]|0)==(r[_+t>>0]|0));t=c+b|0;f=t+x|0;if(f>>>0>=w>>>0){v=t;y=u;break}else i=u}if((S|0)==56){n[g>>2]=i;n[E>>2]=t;t=o;i=d;S=57}else if((S|0)==64)Ti(2936,f,w);else if((S|0)==68){n[E>>2]=c+k;n[g>>2]=0;S=75;break}else if((S|0)==71)Ti(2936,t,w);else if((S|0)==74)Ti(2952,i,k);if((S|0)==57){n[g>>2]=i;n[E>>2]=t;v=c;y=0}n[g>>2]=y;n[E>>2]=v;S=76}else S=76}while(0);if((S|0)==75)break;else if((S|0)==76)break e}}while(0);a=n[a+4>>2]|0;n[e>>2]=1;n[e+4>>2]=1;n[e+8>>2]=a;p=j;return}}while(0);a=a+4|0;n[a>>2]=(n[a>>2]|0)+1;n[e>>2]=0;p=j;return}function Yr(e,a,t,c,i,f,o){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;f=f|0;o=o|0;var d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0;v=a+24|0;d=n[v>>2]|0;s=d-f|0;e:do{if(s>>>0<c>>>0){h=a;p=n[h>>2]|0;h=n[h+4>>2]|0;g=a+32|0;m=n[a+12>>2]|0;l=n[a+16>>2]|0;a=s;a:while(1){t:while(1){s=a;while(1){u=nd(1,0,r[t+s>>0]&63|0)|0;if(!((u&p|0)==0&(T&h|0)==0))break;n[v>>2]=s;if(!o)n[g>>2]=f;a=s-f|0;if(a>>>0<c>>>0){d=s;s=a}else break e}if(o)a=m;else{a=n[g>>2]|0;a=m>>>0<=a>>>0?m:a}u=d-f|0;b=a;do{s=b;b=b+-1|0;if(!s)break t;if(b>>>0>=f>>>0){a=34;break a}s=u+b|0;if(s>>>0>=c>>>0){a=18;break a}}while((r[i+b>>0]|0)==(r[t+s>>0]|0));d=d+b-m|0;n[v>>2]=d;if(!o)n[g>>2]=f;a=d-f|0;if(a>>>0>=c>>>0)break e}a=o?f:n[g>>2]|0;b=m;while(1){if(b>>>0>=a>>>0){a=24;break a}if(b>>>0>=f>>>0){a=35;break a}s=u+b|0;if(s>>>0>=c>>>0){a=27;break a}if((r[i+b>>0]|0)==(r[t+s>>0]|0))b=b+1|0;else break}d=d-l|0;n[v>>2]=d;if(!o)n[g>>2]=l;a=d-f|0;if(a>>>0>=c>>>0)break e}if((a|0)==18)Ti(2936,s,c);else if((a|0)==24){n[v>>2]=u;if(!o)n[g>>2]=f;n[e>>2]=1;n[e+4>>2]=u;n[e+8>>2]=d;return}else if((a|0)==27)Ti(2936,s,c);else if((a|0)==34)Ti(2968,b,f);else if((a|0)==35)Ti(2984,b,f)}}while(0);n[v>>2]=0;n[e>>2]=0;return}function Kr(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;c=p;p=p+16|0;t=c;n[t>>2]=0;r=_e(e|0,t|0)|0;r=(((r|0)!=0&(n[t>>2]|0)==0)<<31>>31)+r|0;e=se(r|0)|0;t=n[a>>2]|0;if(t>>>0>=(n[a+8>>2]|0)>>>0){p=c;return 0}i=n[a+4>>2]|0;n[i+(t<<3)>>2]=r;n[i+(t<<3)+4>>2]=e;n[a>>2]=(n[a>>2]|0)+1;p=c;return 0}function Qr(e){e=e|0;return}function Zr(e,a){e=e|0;a=a|0;n[e>>2]=6228;n[e+4>>2]=39;return}function Jr(e,a){e=e|0;a=a|0;n[e>>2]=0;return}function Xr(e){e=e|0;T=-1473155066;return 1485526264}function $r(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;t=p;p=p+48|0;i=t+40|0;c=t+24|0;r=t;n[i>>2]=6228;n[i+4>>2]=39;n[c>>2]=i;n[c+4>>2]=41;n[c+8>>2]=e;n[c+12>>2]=55;n[r>>2]=3e3;n[r+4>>2]=2;n[r+8>>2]=0;n[r+16>>2]=c;n[r+20>>2]=2;a=Mf(a,r)|0;p=t;return a|0}function ec(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+16|0;c=t+12|0;r=t;xf(r,a,6217,11);n[c>>2]=e;Ui(r,c,384)|0;a=Ef(r)|0;p=t;return a|0}function ac(e){e=e|0;return}function tc(e,a){e=e|0;a=a|0;return oi(n[e>>2]|0,a)|0}function rc(){var e=0,a=0,t=0,r=0;r=p;p=p+16|0;a=r;e=n[774]|0;if(!e)e=pr(3096)|0;e=Oe(e|0)|0;if(e|0){p=r;return((e|0)==1?0:e+4|0)|0}t=At(24,4,a)|0;if(!t)Ma(a);n[t>>2]=3096;a=t+4|0;n[a>>2]=0;e=n[774]|0;if(e|0){Ye(e|0,t|0)|0;p=r;return a|0}e=pr(3096)|0;Ye(e|0,t|0)|0;p=r;return a|0}function cc(){var e=0,a=0,t=0,r=0,c=0,i=0;c=p;p=p+48|0;a=c+32|0;e=c+8|0;i=c;n[i>>2]=6557;n[i+4>>2]=24;r=n[896]|0;t=n[897]|0;n[a>>2]=i;n[a+4>>2]=41;n[a+8>>2]=c+32;n[a+12>>2]=56;n[e>>2]=r;n[e+4>>2]=t;n[e+8>>2]=0;n[e+16>>2]=a;n[e+20>>2]=2;Ci(e,3648)}function nc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0;l=p;p=p+48|0;u=l+32|0;s=l+24|0;d=l+8|0;b=l;a=n[e>>2]|0;do{if(a){t=e+4|0;r=n[t>>2]|0;t=n[t+4>>2]|0;n[u>>2]=a;a=u+4|0;n[a>>2]=r;n[a+4>>2]=t;gi(d,u);a=n[d>>2]|0;t=n[d+4>>2]|0;r=n[d+8>>2]|0;e=So(a,0,r)|0;if(!e){n[u>>2]=a;n[u+4>>2]=t;n[u+8>>2]=r;oc(s,u);c=n[s>>2]|0;i=n[s+4>>2]|0;break}else{f=a;o=u;n[o>>2]=e-f;n[o+4>>2]=f;n[u+8>>2]=t;n[u+12>>2]=r;dc(6294,47,u)}}else{c=0;i=0}}while(0);n[b>>2]=c;n[b+4>>2]=i;Jo(13576)|0;f=13600;i=n[f>>2]|0;f=n[f+4>>2]|0;if((i|0)==-1&(f|0)==-1){ed(13576)|0;m=0;re(20,6341,55,3016);m=0;l=me()|0;sc(b);je(l|0)}o=Qo(i|0,f|0,1,0)|0;e=13600;n[e>>2]=o;n[e+4>>2]=T;ed(13576)|0;e=At(24,8,u)|0;if(!e)Ma(u);n[e>>2]=n[3402];n[e+4>>2]=n[3403];n[e+8>>2]=n[3404];n[e+12>>2]=n[3405];n[e+16>>2]=n[3406];n[e+20>>2]=n[3407];o=e;We(u|0)|0;Le(u|0,0)|0;aa(e|0,u|0)|0;we(u|0)|0;e=d;n[e>>2]=o;n[e+4>>2]=0;e=At(48,8,u)|0;if(!e)Ma(u);a=e;t=13632;r=a+48|0;do{n[a>>2]=n[t>>2];a=a+4|0;t=t+4|0}while((a|0)<(r|0));n[s>>2]=e;n[s+4>>2]=0;m=0;ee(51,e|0);c=m;m=0;if(c&1){l=me()|0;uc(s);lc(d);sc(b);je(l|0)}c=s;r=n[c>>2]|0;c=n[c+4>>2]|0;a=b;e=n[a>>2]|0;a=n[a+4>>2]|0;t=At(40,8,u)|0;if(!t)Ma(u);else{n[t>>2]=1;n[t+4>>2]=1;u=t+8|0;n[u>>2]=i;n[u+4>>2]=f;u=t+16|0;n[u>>2]=e;n[u+4>>2]=a;u=t+24|0;n[u>>2]=o;n[u+4>>2]=0;u=t+32|0;n[u>>2]=r;n[u+4>>2]=c;p=l;return t|0}return 0}function ic(e){e=e|0;var a=0,t=0;a=n[e+8>>2]|0;if(!a)return;t=n[a>>2]|0;n[a>>2]=t-1;if((t|0)!=1)return;nr(e+8|0);return}function fc(e){e=e|0;e=n[e+4>>2]|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;return}function oc(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0;f=p;p=p+32|0;c=f+16|0;i=f;n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];m=0;ae(27,i|0,1);t=m;m=0;do{if(!(t&1)){t=i+8|0;a=n[t>>2]|0;if((a|0)==(n[i+4>>2]|0)){m=0;ee(52,i|0);a=m;m=0;if(a&1)break;a=n[t>>2]|0}r[(n[i>>2]|0)+a>>0]=0;n[t>>2]=a+1;n[c>>2]=n[i>>2];n[c+4>>2]=n[i+4>>2];n[c+8>>2]=n[i+8>>2];m=0;ee(53,c|0);i=m;m=0;if(!(i&1)){i=n[c+4>>2]|0;n[e>>2]=n[c>>2];n[e+4>>2]=i;p=f;return}f=me()|0;Ec(c);je(f|0)}}while(0);f=me()|0;Ec(i);je(f|0)}function dc(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0;f=p;p=p+64|0;i=f+48|0;c=f+24|0;r=f+8|0;n[f>>2]=e;n[f+4>>2]=a;n[r>>2]=n[t>>2];n[r+4>>2]=n[t+4>>2];n[r+8>>2]=n[t+8>>2];n[r+12>>2]=n[t+12>>2];a=n[896]|0;t=n[897]|0;n[i>>2]=f;n[i+4>>2]=41;n[i+8>>2]=r;n[i+12>>2]=57;n[c>>2]=a;n[c+4>>2]=t;n[c+8>>2]=0;n[c+16>>2]=i;n[c+20>>2]=2;m=0;ae(9,c|0,3648);m=0;t=me()|0;hc(r);je(t|0)}function sc(e){e=e|0;var a=0;a=n[e>>2]|0;if(!a)return;r[a>>0]=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function bc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;s=p;p=p+80|0;t=s+32|0;a=s+8|0;d=s+68|0;c=s+64|0;o=s+60|0;f=s+56|0;i=s+52|0;u=s+48|0;r=s;b=Fe(r|0)|0;n[u>>2]=b;n[c>>2]=u;n[d>>2]=13768;if(b|0){n[t>>2]=c;n[t+4>>2]=52;n[t+8>>2]=d;n[t+12>>2]=52;n[a>>2]=2560;n[a+4>>2]=3;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ea(a,3032)}u=Re(r|0,1)|0;n[i>>2]=u;n[c>>2]=i;n[d>>2]=13768;if(u|0){n[t>>2]=c;n[t+4>>2]=52;n[t+8>>2]=d;n[t+12>>2]=52;n[a>>2]=2560;n[a+4>>2]=3;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ea(a,3048)}u=ye(e|0,r|0)|0;n[f>>2]=u;n[c>>2]=f;n[d>>2]=13768;if(u|0){n[t>>2]=c;n[t+4>>2]=52;n[t+8>>2]=d;n[t+12>>2]=52;n[a>>2]=2560;n[a+4>>2]=3;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ea(a,3064)}u=ze(r|0)|0;n[o>>2]=u;n[c>>2]=o;n[d>>2]=13768;if(!u){p=s;return}else{n[t>>2]=c;n[t+4>>2]=52;n[t+8>>2]=d;n[t+12>>2]=52;n[a>>2]=2560;n[a+4>>2]=3;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ea(a,3080)}}function uc(e){e=e|0;$e(n[e>>2]|0)|0;xt(n[e>>2]|0,48,8);return}function lc(e){e=e|0;Ie(n[e>>2]|0)|0;xt(n[e>>2]|0,24,8);return}function pc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+16|0;c=t+12|0;r=t;xf(r,a,6470,8);n[c>>2]=e;Ui(r,c,400)|0;n[c>>2]=e+4;Ui(r,c,416)|0;a=Ef(r)|0;p=t;return a|0}function hc(e){e=e|0;var a=0;a=n[e+8>>2]|0;if(!a)return;xt(n[e+4>>2]|0,a,1);return}function mc(e){e=e|0;return}function gc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;c=p;p=p+16|0;r=c+8|0;t=c;i=n[e>>2]|0;e=n[i>>2]|0;i=n[i+8>>2]|0;Tf(t,a);a=e+i|0;if(!i){i=Cf(t)|0;p=c;return i|0}do{n[r>>2]=e;e=e+1|0;jf(t,r,432)|0}while((e|0)!=(a|0));i=Cf(t)|0;p=c;return i|0}function vc(e){e=e|0;return}function yc(e,a){e=e|0;a=a|0;return Zf(n[e>>2]|0,a)|0}function _c(e){e=e|0;return}function wc(e,a){e=e|0;a=a|0;return Li(n[e>>2]|0,a)|0}function Ac(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0;s=p;p=p+16|0;f=s;t=n[e+8>>2]|0;i=e+4|0;r=n[i>>2]|0;if((r-t|0)>>>0>=a>>>0){p=s;return}c=t+a|0;if(c>>>0<t>>>0)vf(6510,17);if((c|0)<0)Oi(3420);a=(c|0)==0;do{if(!r)if(!a){a=At(c,1,f)|0;if(!a){a=0;t=0;r=0;d=16;break}else{o=a;break}}else{di(f,6527,30);t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}else{if(a){di(f,6478,32);t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}a=Et(n[e>>2]|0,r,1,c,1,f)|0;if(!a){t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}else{o=a;break}}}while(0);if((d|0)==16){n[f>>2]=r;d=f+4|0;n[d>>2]=a;n[d+4>>2]=t;Ma(f)}n[e>>2]=o;n[i>>2]=c;p=s;return}function kc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0;c=p;p=p+16|0;i=c;r=e+4|0;a=n[r>>2]|0;do{if(!a){a=At(4,1,i)|0;if(!a){a=0;t=0;e=0}else{i=4;t=a;n[e>>2]=t;n[r>>2]=i;p=c;return}}else{t=a<<1;if((t|0)<0)Oi(3420);if(!t){di(i,6478,32);t=i+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;e=n[i>>2]|0;break}a=Et(n[e>>2]|0,a,1,t,1,i)|0;if(!a){t=i+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;e=n[i>>2]|0;break}i=t;t=a;n[e>>2]=t;n[r>>2]=i;p=c;return}}while(0);n[i>>2]=e;c=i+4|0;n[c>>2]=a;n[c+4>>2]=t;Ma(i)}function xc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;f=p;p=p+16|0;i=f;t=n[e+8>>2]|0;c=e+4|0;a=n[c>>2]|0;if(a>>>0<t>>>0)Oi(3396);e:do{if(!t){if(a|0)xt(n[e>>2]|0,a,1);n[e>>2]=1;r=0}else{if((a|0)==(t|0)){p=f;return}do{if(a){a=Et(n[e>>2]|0,a,1,t,1,i)|0;if(!a){e=i+4|0;a=n[e>>2]|0;e=n[e+4>>2]|0;t=n[i>>2]|0;break}else{n[e>>2]=a;r=t;break e}}else{di(i,6478,32);e=i+4|0;a=n[e>>2]|0;e=n[e+4>>2]|0;t=n[i>>2]|0}}while(0);n[i>>2]=t;t=i+4|0;n[t>>2]=a;n[t+4>>2]=e;Ma(i)}}while(0);n[c>>2]=r;p=f;return}function Ec(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function Sc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0;f=p;p=p+16|0;t=f;n[t>>2]=e;i=n[e>>2]|0;a=n[i>>2]|0;if(!a){m=0;a=te(11,i|0)|0;o=m;m=0;if(o&1){o=me()|0;Tc(t);je(o|0)}}Ye(a|0,1)|0;if(((n[e+4>>2]|0?(r=e+20|0,c=n[r>>2]|0,c|0):0)?(o=n[c>>2]|0,n[c>>2]=o-1,(o|0)==1):0)?(m=0,ee(48,r|0),o=m,m=0,o&1):0){o=me()|0;jc(e);je(o|0)}xt(e,24,4);a=n[i>>2]|0;if(a|0){o=a;Ye(o|0,0)|0;p=f;return}o=pr(i)|0;Ye(o|0,0)|0;p=f;return}function Tc(e){e=e|0;var a=0,t=0,r=0;a=n[e>>2]|0;if(((n[a+4>>2]|0?(t=a+20|0,r=n[t>>2]|0,r|0):0)?(a=n[r>>2]|0,n[r>>2]=a-1,(a|0)==1):0)?(m=0,ee(48,t|0),r=m,m=0,r&1):0){r=me()|0;jc(n[e>>2]|0);je(r|0)}xt(n[e>>2]|0,24,4);return}function jc(e){e=e|0;xt(e,24,4);return}function Cc(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;s=p;p=p+32|0;d=s+16|0;o=s;if((t|0)<0)Oi(3420);if(t){r=At(t,1,d)|0;if(!r)Ma(d);else c=r}else c=1;n[o>>2]=c;c=o+4|0;n[c>>2]=t;r=o+8|0;n[r>>2]=0;m=0;ae(25,o|0,t|0);f=m;m=0;if(f&1){s=me()|0;Ec(o);je(s|0)}b=n[r>>2]|0;f=b+t|0;n[r>>2]=f;i=n[o>>2]|0;ad(i+b|0,a|0,t|0)|0;c=n[c>>2]|0;r=So(i,0,f)|0;if(!r){n[d>>2]=i;n[d+4>>2]=c;n[d+8>>2]=f;oc(o,d);d=n[o+4>>2]|0;b=e+4|0;n[b>>2]=n[o>>2];n[b+4>>2]=d;b=0;n[e>>2]=b;p=s;return}else{n[e+4>>2]=r-i;n[e+8>>2]=i;n[e+12>>2]=c;n[e+16>>2]=f;b=1;n[e>>2]=b;p=s;return}}function Rc(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+48|0;f=d+32|0;o=d+16|0;i=d;m=0;re(22,i|0,6691,33);c=m;m=0;if(c&1){d=me()|0;hc(a);je(d|0)}n[o>>2]=n[i>>2];n[o+4>>2]=n[i+4>>2];n[o+8>>2]=n[i+8>>2];t=At(12,4,f)|0;if(!t)Ma(f);n[t>>2]=n[o>>2];n[t+4>>2]=n[o+4>>2];n[t+8>>2]=n[o+8>>2];c=At(12,4,f)|0;if(!c)Ma(f);r[c>>0]=11;f=c+1|0;r[f>>0]=r[o>>0]|0;r[f+1>>0]=r[o+1>>0]|0;r[f+2>>0]=r[o+2>>0]|0;n[c+4>>2]=t;n[c+8>>2]=280;r[e>>0]=2;o=e+1|0;r[o>>0]=r[i>>0]|0;r[o+1>>0]=r[i+1>>0]|0;r[o+2>>0]=r[i+2>>0]|0;n[e+4>>2]=c;e=n[a+8>>2]|0;if(!e){p=d;return}xt(n[a+4>>2]|0,e,1);p=d;return}function Oc(e){e=e|0;var a=0;r[n[e>>2]>>0]=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function Bc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0;s=p;p=p+16|0;f=s;t=n[e+8>>2]|0;i=e+4|0;r=n[i>>2]|0;if((r-t|0)>>>0>=a>>>0){p=s;return}a=t+a|0;if(a>>>0<t>>>0)vf(6510,17);c=r<<1;c=a>>>0>=c>>>0?a:c;if((c|0)<0)Oi(3420);a=(c|0)==0;do{if(!r)if(!a){a=At(c,1,f)|0;if(!a){a=0;t=0;r=0;d=16;break}else{o=a;break}}else{di(f,6527,30);t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}else{if(a){di(f,6478,32);t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}a=Et(n[e>>2]|0,r,1,c,1,f)|0;if(!a){t=f+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[f>>2]|0;d=16;break}else{o=a;break}}}while(0);if((d|0)==16){n[f>>2]=r;d=f+4|0;n[d>>2]=a;n[d+4>>2]=t;Ma(f)}n[e>>2]=o;n[i>>2]=c;p=s;return}function Mc(e,a){e=e|0;a=a|0;var t=0,r=0;t=p;p=p+16|0;r=t;_i(r,n[e>>2]|0,n[e+4>>2]|0);a=Ai(n[r>>2]|0,n[r+4>>2]|0,a)|0;p=t;return a|0}function Nc(e,a){e=e|0;a=a|0;var t=0;e=p;p=p+16|0;t=e;wf(t,a,6870,11);a=kf(t)|0;p=e;return a|0}function Ic(e){e=e|0;var a=0,t=0,r=0,c=0,i=0;c=p;p=p+16|0;t=c;n[t>>2]=e;r=n[e>>2]|0;a=n[r>>2]|0;if(!a){m=0;a=te(11,r|0)|0;i=m;m=0;if(i&1){i=me()|0;Pc(t);je(i|0)}}Ye(a|0,1)|0;xt(e,12,4);a=n[r>>2]|0;if(a|0){i=a;Ye(i|0,0)|0;p=c;return}i=pr(r)|0;Ye(i|0,0)|0;p=c;return}function Pc(e){e=e|0;xt(n[e>>2]|0,12,4);return}function Fc(e){e=e|0;T=-751764377;return 1862574219}function Lc(e){e=e|0;return}function Dc(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=n[e>>2]|0;Bc(r,t);c=r+8|0;e=n[c>>2]|0;n[c>>2]=e+t;ad((n[r>>2]|0)+e|0,a|0,t|0)|0;return 0}function zc(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+16|0;f=d;o=n[e>>2]|0;e=a>>>0<65536;if(a>>>0<128){t=o+8|0;e=n[t>>2]|0;if((e|0)==(n[o+4>>2]|0)){kc(o);e=n[t>>2]|0}r[(n[o>>2]|0)+e>>0]=a;n[t>>2]=(n[t>>2]|0)+1;p=d;return 0}n[f>>2]=0;do{if(a>>>0>=2048)if(e){r[f>>0]=a>>>12&15|-32;e=a>>>6&63|-128;t=2;c=f+1|0;i=3;break}else{r[f>>0]=a>>>18&7|-16;r[f+1>>0]=a>>>12&63|-128;e=a>>>6&63|-128;t=3;c=f+2|0;i=4;break}else{e=a>>>6&31|-64;t=1;c=f;i=2}}while(0);r[c>>0]=e;r[f+t>>0]=a&63|-128;Bc(o,i);c=o+8|0;a=n[c>>2]|0;n[c>>2]=a+i;ad((n[o>>2]|0)+a|0,f|0,i|0)|0;p=d;return 0}function qc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=n[e>>2];n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,184,r)|0;p=t;return a|0}function Uc(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+160|0;o=d+16|0;f=d;i=d+24|0;t=i;c=t+128|0;do{r[t>>0]=0;t=t+1|0}while((t|0)<(c|0));if((Go(a,i,128)|0)<0)ka(7189,18,3192);a=Ao(i)|0;if((a|0)==-1)Si(-1,0);_f(f,i,a);a=n[f+4>>2]|0;t=n[f+8>>2]|0;if(!(n[f>>2]|0)){pi(e,a,t);p=d;return}else{n[o>>2]=a;n[o+4>>2]=t;Vc(o)}}function Hc(e,a){e=e|0;a=a|0;return Ff(n[e>>2]|0,n[e+8>>2]|0,a)|0}function Vc(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;i=p;p=p+64|0;t=i+40|0;a=i+16|0;c=i+8|0;n[i>>2]=6062;n[i+4>>2]=43;f=e;e=n[f+4>>2]|0;r=c;n[r>>2]=n[f>>2];n[r+4>>2]=e;r=n[896]|0;e=n[897]|0;n[t>>2]=i;n[t+4>>2]=41;n[t+8>>2]=c;n[t+12>>2]=36;n[a>>2]=r;n[a+4>>2]=e;n[a+8>>2]=0;n[a+16>>2]=t;n[a+20>>2]=2;Ci(a,3648)}function Gc(e){e=e|0;return}function Wc(e){e=e|0;T=-296224341;return-563829082}function Yc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+16|0;c=t+8|0;r=t;wf(r,a,7274,5);n[c>>2]=e;Af(r,7279,4,c,464)|0;a=kf(r)|0;p=t;return a|0}function Kc(e){e=e|0;return}function Qc(e,a){e=e|0;a=a|0;return Zc(n[e>>2]|0,a)|0}function Zc(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0;f=p;p=p+32|0;i=f+8|0;t=f;c=f+20|0;switch(r[e>>0]&3){case 0:{c=e+4|0;wf(t,a,7283,2);e=Af(t,7285,4,c,480)|0;Uc(i,n[c>>2]|0);m=0;e=ie(1,e|0,7289,7,i|0,496)|0;c=m;m=0;if(c&1){f=me()|0;Ba(i);je(f|0)}m=0;e=te(12,e|0)|0;c=m;m=0;if(c&1){f=me()|0;Ba(i);je(f|0)}a=n[i+4>>2]|0;if(a|0)xt(n[i>>2]|0,a,1);i=e;p=f;return i|0}case 1:{r[c>>0]=r[e+1>>0]|0;xf(i,a,7296,4);i=Ef(Ui(i,c,512)|0)|0;p=f;return i|0}default:{xf(i,a,7300,6);i=Ef(Ui(i,e+4|0,528)|0)|0;p=f;return i|0}}return 0}function Jc(e){e=e|0;var a=0,t=0,r=0;a=n[e>>2]|0;r=a+4|0;a=a+8|0;m=0;ee(n[n[a>>2]>>2]|0,n[r>>2]|0);t=m;m=0;if(t&1){t=me()|0;Ca(n[r>>2]|0,n[a>>2]|0);Ra(n[e>>2]|0);je(t|0)}t=n[a>>2]|0;a=n[t+4>>2]|0;if(!a){r=n[e>>2]|0;xt(r,12,4);return}xt(n[r>>2]|0,a,n[t+8>>2]|0);r=n[e>>2]|0;xt(r,12,4);return}function Xc(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+16|0;c=t+8|0;r=t;e=n[e>>2]|0;wf(r,a,7300,6);n[c>>2]=e;Af(r,7306,4,c,544)|0;n[c>>2]=e+4;Af(r,7310,5,c,560)|0;a=kf(r)|0;p=t;return a|0}function $c(e){e=e|0;return}function en(e,a){e=e|0;a=a|0;e=n[e>>2]|0;return Fd[n[(n[e+4>>2]|0)+28>>2]&127](n[e>>2]|0,a)|0}function an(e){e=e|0;return}function tn(e,a){e=e|0;a=a|0;return rn(n[e>>2]|0,a)|0}function rn(e,a){e=e|0;a=a|0;var t=0,c=0;c=p;p=p+16|0;t=c;do{switch(r[e>>0]&31){case 0:{xf(t,a,7315,8);e=Ef(t)|0;break}case 1:{xf(t,a,7323,16);e=Ef(t)|0;break}case 2:{xf(t,a,7339,17);e=Ef(t)|0;break}case 3:{xf(t,a,7356,15);e=Ef(t)|0;break}case 4:{xf(t,a,7371,17);e=Ef(t)|0;break}case 5:{xf(t,a,7388,12);e=Ef(t)|0;break}case 6:{xf(t,a,7400,9);e=Ef(t)|0;break}case 7:{xf(t,a,7409,16);e=Ef(t)|0;break}case 8:{xf(t,a,7425,10);e=Ef(t)|0;break}case 9:{xf(t,a,7435,13);e=Ef(t)|0;break}case 10:{xf(t,a,7448,10);e=Ef(t)|0;break}case 11:{xf(t,a,7458,12);e=Ef(t)|0;break}case 12:{xf(t,a,7470,11);e=Ef(t)|0;break}case 13:{xf(t,a,7481,8);e=Ef(t)|0;break}case 14:{xf(t,a,7489,9);e=Ef(t)|0;break}case 15:{xf(t,a,7498,11);e=Ef(t)|0;break}case 16:{xf(t,a,7509,5);e=Ef(t)|0;break}case 17:{xf(t,a,7514,13);e=Ef(t)|0;break}default:{xf(t,a,7527,15);e=Ef(t)|0}}}while(0);p=c;return e|0}function cn(e){e=e|0;return}function nn(e,a){e=e|0;a=a|0;return Pf(n[e>>2]|0,n[e+8>>2]|0,a)|0}function fn(e){e=e|0;return}function on(){var e=0,a=0,t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;s=p;p=p+32|0;o=s+24|0;d=s+16|0;i=s+8|0;b=s;e=Va()|0;c=e;n[o>>2]=c;if(!e){m=0;ae(23,7542,94);m=0;b=me()|0;Ha(o);je(b|0)}n[b>>2]=e;e=c+24|0;Jo(n[e>>2]|0)|0;m=0;a=$(1)|0;f=m;m=0;e:do{if(!(f&1)){t=e;if(!a){m=0;ce(2);m=0;break}if(!(n[a>>2]|0)){e=a;f=e;r[f>>0]=1;r[f+1>>0]=0;r[f+2>>0]=0;r[f+3>>0]=0;e=e+4|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;e=a+4|0;a=0}else{a=a+4|0;e=a;a=n[a>>2]|0}r[e>>0]=a;r[e+1>>0]=a>>8;r[e+2>>0]=a>>16;r[e+3>>0]=a>>24;e=(a|0)!=0&1;if(r[c+28>>0]|0){s=i;n[s>>2]=t;n[s+4>>2]=e;m=0;ee(54,i|0);m=0;break}i=t;while(1){c=i;a=c+5|0;if(r[a>>0]|0){t=19;break}f=n[b>>2]|0;a=d;n[a>>2]=i;n[a+4>>2]=e;e=n[c>>2]|0;a=e;t=f+36|0;c=n[t>>2]|0;if(!c)n[t>>2]=a;if(!((c|0)==0|(c|0)==(a|0))){t=16;break}oe(n[f+32>>2]|0,e|0)|0;e=d;i=n[e>>2]|0;e=n[e+4>>2]|0;if(r[(n[d>>2]|0)+4>>0]|0){t=18;break}}if((t|0)==16){m=0;re(20,7636,54,3208);m=0;e=me()|0;m=0;ee(55,d|0);s=m;m=0;if(s&1)break;dn(b);je(e|0)}else if((t|0)==18){s=o;n[s>>2]=i;n[s+4>>2]=e;m=0;ee(54,o|0);m=0;break}else if((t|0)==19){r[a>>0]=0;do{if(0==0&(e&255|0)==0){m=0;e=$(1)|0;d=m;m=0;if(d&1)break e;if(!e){m=0;ce(2);m=0;break e}if(!(n[e>>2]|0)){d=e;o=d;r[o>>0]=1;r[o+1>>0]=0;r[o+2>>0]=0;r[o+3>>0]=0;d=d+4|0;r[d>>0]=0;r[d+1>>0]=0;r[d+2>>0]=0;r[d+3>>0]=0;d=e+4|0;r[d>>0]=0;r[d+1>>0]=0;r[d+2>>0]=0;r[d+3>>0]=0;break}if(n[e+4>>2]|0)r[c+4>>0]=1}}while(0);ed(n[c>>2]|0)|0;o=n[b>>2]|0;d=n[o>>2]|0;n[o>>2]=d-1;if((d|0)!=1){p=s;return}nr(b);p=s;return}}}while(0);s=me()|0;dn(b);je(s|0)}function dn(e){e=e|0;var a=0,t=0;t=n[e>>2]|0;a=n[t>>2]|0;n[t>>2]=a-1;if((a|0)!=1)return;nr(e);return}function sn(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;i=p;p=p+64|0;r=i+40|0;t=i+16|0;a=i+8|0;n[i>>2]=6062;n[i+4>>2]=43;f=e;e=n[f+4>>2]|0;c=a;n[c>>2]=n[f>>2];n[c+4>>2]=e;c=n[896]|0;e=n[897]|0;n[r>>2]=i;n[r+4>>2]=41;n[r+8>>2]=a;n[r+12>>2]=58;n[t>>2]=c;n[t+4>>2]=e;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;m=0;ae(9,t|0,3648);m=0;e=me()|0;ln(a);je(e|0)}function bn(e){e=e|0;var a=0,t=0,c=0;a=n[e>>2]|0;do{if(!(r[e+4>>0]|0)){t=Ia()|0;if(!t)Pa();if(!(n[t>>2]|0)){a=t;c=a;r[c>>0]=1;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;a=a+4|0;r[a>>0]=0;r[a+1>>0]=0;r[a+2>>0]=0;r[a+3>>0]=0;t=t+4|0;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;break}if(n[t+4>>2]|0)r[a+4>>0]=1}}while(0);ed(n[n[e>>2]>>2]|0)|0;return}function un(e,a){e=e|0;a=a|0;return Pf(7726,25,a)|0}function ln(e){e=e|0;var a=0,t=0,c=0;a=n[e>>2]|0;do{if(!(r[e+4>>0]|0)){t=Ia()|0;if(!t)Pa();if(!(n[t>>2]|0)){a=t;c=a;r[c>>0]=1;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;a=a+4|0;r[a>>0]=0;r[a+1>>0]=0;r[a+2>>0]=0;r[a+3>>0]=0;t=t+4|0;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;break}if(n[t+4>>2]|0)r[a+4>>0]=1}}while(0);ed(n[n[e>>2]>>2]|0)|0;return}function pn(e){e=e|0;var a=0,t=0,c=0,i=0,f=0,o=0;o=p;p=p+16|0;i=o;c=n[e>>2]|0;f=c+24|0;Jo(n[f>>2]|0)|0;e=Ia()|0;if(!e)Pa();if(!(n[e>>2]|0)){a=e;t=a;r[t>>0]=1;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;a=a+4|0;r[a>>0]=0;r[a+1>>0]=0;r[a+2>>0]=0;r[a+3>>0]=0;e=e+4|0;a=0}else{a=e+4|0;e=a;a=n[a>>2]|0}r[e>>0]=a;r[e+1>>0]=a>>8;r[e+2>>0]=a>>16;r[e+3>>0]=a>>24;a=(a|0)!=0;t=c+28|0;if(r[t>>0]|0){e=i;n[e>>2]=f;n[e+4>>2]=a&1;sn(i)}e=c+29|0;if(!(r[e>>0]|0)){r[e>>0]=1;Ne(n[c+32>>2]|0)|0}if(a){f=n[f>>2]|0;ed(f|0)|0;p=o;return}e=Ia()|0;if(!e)Pa();if(!(n[e>>2]|0)){i=e;c=i;r[c>>0]=1;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;i=i+4|0;r[i>>0]=0;r[i+1>>0]=0;r[i+2>>0]=0;r[i+3>>0]=0;i=e+4|0;r[i>>0]=0;r[i+1>>0]=0;r[i+2>>0]=0;r[i+3>>0]=0;f=n[f>>2]|0;ed(f|0)|0;p=o;return}if(!(n[e+4>>2]|0)){f=n[f>>2]|0;ed(f|0)|0;p=o;return}r[t>>0]=1;f=n[f>>2]|0;ed(f|0)|0;p=o;return}function hn(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;b=p;p=p+16|0;o=b;t=n[e+8>>2]|0;f=e+4|0;c=n[f>>2]|0;if((c-t|0)>>>0>=a>>>0){p=b;return}a=t+a|0;if(a>>>0<t>>>0)vf(6510,17);i=c<<1;i=a>>>0>=i>>>0?a:i;t=i*12|0;if(i>>>0>357913941)vf(6510,17);if((t|0)<0)Oi(3420);do{if(!c)if(t){a=At(t,4,o)|0;if(!a){a=0;t=0;r=0;s=19;break}else{d=a;break}}else{di(o,6527,30);t=o+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[o>>2]|0;s=19;break}else{r=n[e>>2]|0;a=c*12|0;if(c>>>0<=357913941?!((a|0)==0|(t|0)==0):0){a=Et(r,a,4,t,4,o)|0;if(!a){t=o+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[o>>2]|0;s=19;break}else{d=a;break}}di(o,6478,32);t=o+4|0;a=n[t>>2]|0;t=n[t+4>>2]|0;r=n[o>>2]|0;s=19}}while(0);if((s|0)==19){n[o>>2]=r;s=o+4|0;n[s>>2]=a;n[s+4>>2]=t;Ma(o)}n[e>>2]=d;n[f>>2]=i;p=b;return}function mn(e){e=e|0;n[n[e>>2]>>2]=n[e+4>>2];return}function gn(e){e=e|0;var a=0,t=0,r=0;a=n[e>>2]|0;t=n[e+8>>2]|0;r=a+(t*12|0)|0;if(t|0)do{t=n[a+4>>2]|0;if(t|0)xt(n[a>>2]|0,t,1);a=a+12|0}while((a|0)!=(r|0));a=n[e+4>>2]|0;if(!a)return;if(a>>>0>357913941)Oi(3624);xt(n[e>>2]|0,a*12|0,4);return}function vn(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0;i=p;p=p+48|0;r=i+32|0;c=i+16|0;f=i;mi(f,a,t);n[c>>2]=n[f>>2];n[c+4>>2]=n[f+4>>2];n[c+8>>2]=n[f+8>>2];a=At(12,4,r)|0;if(!a)Ma(r);else{n[a>>2]=n[c>>2];n[a+4>>2]=n[c+4>>2];n[a+8>>2]=n[c+8>>2];n[e>>2]=a;n[e+4>>2]=280;p=i;return}}function yn(e,a){e=e|0;a=a|0;var t=0;t=(Ao(a)|0)+1|0;n[e>>2]=a;n[e+4>>2]=t;return}function _n(e,a,t){e=e|0;a=a|0;t=t|0;var r=0;r=t+-1|0;if(!t)Si(r,0);else{_f(e,a,r);return}}function wn(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0,d=0,s=0;s=p;p=p+32|0;o=s;d=s+15|0;f=s+12|0;i=At(12,4,o)|0;if(!i)Ma(o);else{r[i>>0]=a;o=i+1|0;r[o>>0]=r[d>>0]|0;r[o+1>>0]=r[d+1>>0]|0;r[o+2>>0]=r[d+2>>0]|0;n[i+4>>2]=t;n[i+8>>2]=c;r[e>>0]=2;d=e+1|0;r[d>>0]=r[f>>0]|0;r[d+1>>0]=r[f+1>>0]|0;r[d+2>>0]=r[f+2>>0]|0;n[e+4>>2]=i;p=s;return}}function An(e){e=e|0;return e|0}function kn(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function xn(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0;h=p;p=p+32|0;u=h+16|0;b=h;s=b+8|0;o=b+4|0;d=b|2;f=n[e>>2]|0;e:while(1){switch(f|0){case 3:{l=7;break e}case 1:{if(!a){l=3;break e}break}case 0:break;default:{if((f&3|0)!=2){l=11;break e}i=Va()|0;n[u>>2]=i;if(!i){l=13;break e}n[b>>2]=i;r[s>>0]=0;n[o>>2]=0;while(1){if((f&3|0)!=2){l=17;break}n[o>>2]=f&-4;i=n[e>>2]|0;if((i|0)==(f|0))n[e>>2]=d;if((i|0)==(f|0))break;else f=i}if((l|0)==17){l=0;i=n[b>>2]|0;if(i|0?(g=n[i>>2]|0,n[i>>2]=g-1,(g|0)==1):0)nr(b);continue e}while(1){if(r[s>>0]|0)break;m=0;ce(5);g=m;m=0;if(g&1){l=15;break e}}i=n[e>>2]|0;f=n[b>>2]|0;if(f|0?(g=n[f>>2]|0,n[f>>2]=g-1,(g|0)==1):0)nr(b);f=i;continue e}}i=n[e>>2]|0;if((i|0)==(f|0))n[e>>2]=2;if((i|0)==(f|0)){l=8;break}else f=i}if((l|0)==3)ka(7751,42,3224);else if((l|0)==7){p=h;return}else if((l|0)==8){r[u>>0]=1;n[u+4>>2]=e;m=0;ae(n[c+12>>2]|0,t|0,(f|0)==1|0);g=m;m=0;if(g&1){g=me()|0;Tn(u);je(g|0)}else{r[u>>0]=0;En(u);p=h;return}}else if((l|0)==11)ka(7793,47,3240);else if((l|0)==13){m=0;ae(23,7542,94);m=0;g=me()|0;Ha(u);je(g|0)}else if((l|0)==15){g=me()|0;Sn(b);je(g|0)}}function En(e){e=e|0;var a=0,t=0,c=0,f=0,o=0,d=0,s=0,b=0;d=p;p=p+64|0;f=d+24|0;o=d;c=d+48|0;t=d+44|0;s=d+40|0;b=n[e+4>>2]|0;a=n[b>>2]|0;n[b>>2]=(r[e>>0]|0)==0?3:1;e=a&3;n[s>>2]=e;n[t>>2]=s;n[c>>2]=3256;if((e|0)!=2){n[f>>2]=t;n[f+4>>2]=13;n[f+8>>2]=c;n[f+12>>2]=13;n[o>>2]=2560;n[o+4>>2]=3;n[o+8>>2]=0;n[o+16>>2]=f;n[o+20>>2]=2;Ea(o,3260)}e=a&-4;if(!e){p=d;return}while(1){t=e;e=n[e+4>>2]|0;a=i[t>>0]|i[t+1>>0]<<8|i[t+2>>0]<<16|i[t+3>>0]<<24;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;n[f>>2]=a;if(!a){e=7;break}n[o>>2]=a;r[t+8>>0]=1;m=0;ee(56,o|0);b=m;m=0;if(b&1){e=8;break}s=n[o>>2]|0;b=n[s>>2]|0;n[s>>2]=b-1;if((b|0)==1)nr(o);if(!e){e=5;break}}if((e|0)==5){p=d;return}else if((e|0)==7){m=0;ee(36,3624);m=0;b=me()|0;Ha(f);je(b|0)}else if((e|0)==8){b=me()|0;dn(o);je(b|0)}}function Sn(e){e=e|0;var a=0,t=0;a=n[e>>2]|0;if(!a)return;t=n[a>>2]|0;n[a>>2]=t-1;if((t|0)!=1)return;nr(e);return}function Tn(e){e=e|0;En(e);return}function jn(e){e=e|0;return}function Cn(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;s=p;p=p+16|0;d=s;f=n[e>>2]|0;o=r[f>>0]|0;r[f>>0]=0;if(!(o<<24>>24))Oi(3624);Jo(13704)|0;m=0;ee(57,13772);o=m;m=0;if(o&1){s=me()|0;n[3443]=0;je(s|0)}n[3443]=0;ed(13704)|0;i=d+4|0;o=d+8|0;f=d+12|0;a=0;e:while(1){e=a;a:while(1){a=e+1|0;if(e>>>0>=10){a=18;break e}Jo(13728)|0;c=n[3444]|0;n[3444]=(e|0)==9?1:0;ed(13728)|0;switch(c|0){case 1:{a=9;break e}case 0:{e=a;break}default:break a}}t=n[c>>2]|0;b=n[c+4>>2]|0;e=t+(n[c+8>>2]<<3)|0;n[d>>2]=t;n[i>>2]=b;n[o>>2]=t;n[f>>2]=e;while(1){if((t|0)==(e|0))break;b=t;t=t+8|0;m=0;ee(n[(n[b+4>>2]|0)+12>>2]|0,n[b>>2]|0);b=m;m=0;if(b&1){a=12;break e}}n[o>>2]=e;m=0;ee(58,d|0);b=m;m=0;if(b&1){a=17;break}xt(c,12,4)}if((a|0)==9)ka(7873,39,3276);else if((a|0)==12){b=me()|0;n[o>>2]=t;Bn(d);Mn(c);je(b|0)}else if((a|0)==17){b=me()|0;Mn(c);je(b|0)}else if((a|0)==18){p=s;return}}function Rn(e,a){e=e|0;a=a|0;var t=0,r=0;t=p;p=p+16|0;r=t;n[r>>2]=e;Cn(r,a);p=t;return}function On(e){e=e|0;var a=0,t=0,r=0,c=0;c=n[e>>2]|0;if(!c)return;a=n[c>>2]|0;t=n[c+8>>2]|0;r=a+(t*12|0)|0;if(t|0)do{t=n[a+4>>2]|0;if(t|0)xt(n[a>>2]|0,t,1);a=a+12|0}while((a|0)!=(r|0));a=n[c+4>>2]|0;do{if(a|0)if(a>>>0>357913941){m=0;ee(36,3624);m=0;c=me()|0;Nn(n[e>>2]|0);je(c|0)}else{xt(n[c>>2]|0,a*12|0,4);break}}while(0);xt(n[e>>2]|0,12,4);return}function Bn(e){e=e|0;var a=0,t=0,r=0,c=0,i=0;c=e+8|0;a=n[c>>2]|0;i=e+12|0;e:do{if((a|0)!=(n[i>>2]|0)){while(1){n[c>>2]=a+8;r=n[a>>2]|0;a=n[a+4>>2]|0;m=0;ee(n[a>>2]|0,r|0);t=m;m=0;if(t&1)break;t=n[a+4>>2]|0;if(t|0)xt(r,t,n[a+8>>2]|0);a=n[c>>2]|0;if((a|0)==(n[i>>2]|0))break e}e=me()|0;kn(r,a);je(e|0)}}while(0);t=n[e>>2]|0;a=n[e+4>>2]|0;if(!a)return;if(a>>>0>536870911)Oi(3624);xt(t,a<<3,4);return}function Mn(e){e=e|0;xt(e,12,4);return}function Nn(e){e=e|0;xt(e,12,4);return}function In(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0;f=p;p=p+16|0;r=f;if(a>>>0>=9){n[r>>2]=0;o=(bo(r,a,e)|0)==0;if(o){c=n[r>>2]|0;i=4}}else{c=ro(e)|0;i=4}if((i|0)==4?c|0:0){o=c;p=f;return o|0}n[t>>2]=0;n[t+4>>2]=e;n[t+8>>2]=a;o=0;p=f;return o|0}function Pn(e){e=e|0;var a=0,t=0,r=0,c=0;t=p;p=p+16|0;a=t;c=n[e+4>>2]|0;r=n[e+8>>2]|0;n[a>>2]=n[e>>2];n[a+4>>2]=c;n[a+8>>2]=r;Xn(t,a)}function Fn(e,a,t){e=e|0;a=a|0;t=t|0;co(e);return}function Ln(e,a,t){e=e|0;a=a|0;t=t|0;e=n[e>>2]|0;n[a>>2]=e;n[t>>2]=e;return}function Dn(e,a,t,r,c,i){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;i=i|0;var f=0,o=0,d=0;o=p;p=p+16|0;f=o;do{if((t|0)==(c|0)){if(t>>>0<9){c=io(e,r)|0;if(!c){c=t;f=0;break}p=o;return c|0}n[f>>2]=0;d=(bo(f,t,r)|0)!=0;c=n[f>>2]|0;if(d|(c|0)==0){c=t;f=0}else{ad(c|0,e|0,(a>>>0<=r>>>0?a:r)|0)|0;co(e);d=c;p=o;return d|0}}else{r=7958;c=36;f=1}}while(0);n[i>>2]=f;n[i+4>>2]=r;n[i+8>>2]=c;d=0;p=o;return d|0}function zn(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0;c=p;p=p+16|0;r=c;if(a>>>0<9){r=no(e,1)|0;if(r|0){t=r;p=c;return t|0}}else{n[r>>2]=0;i=(bo(r,a,e)|0)!=0;r=n[r>>2]|0;if(!(i|(r|0)==0)){Zo(r|0,0,e|0)|0;i=r;p=c;return i|0}}n[t>>2]=0;n[t+4>>2]=e;n[t+8>>2]=a;i=0;p=c;return i|0}function qn(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,i=0,f=0,o=0,d=0;o=p;p=p+16|0;c=o;if(a>>>0>=9){n[c>>2]=0;d=(bo(c,a,e)|0)==0;if(d){i=n[c>>2]|0;f=4}}else{i=ro(e)|0;f=4}if((f|0)==4?i|0:0){n[t>>2]=e;d=i;p=o;return d|0}n[r>>2]=0;d=r+4|0;n[d>>2]=e;n[d+4>>2]=a;d=0;p=o;return d|0}function Un(e,a,t,r,c,i,f){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;i=i|0;f=f|0;var o=0,d=0,s=0,b=0,u=0,l=0;u=p;p=p+32|0;o=u+28|0;s=u+16|0;d=u;do{if((t|0)==(c|0)){if(t>>>0<9){c=io(e,r)|0;if(!c){c=r;r=t;o=0;b=7;break}}else{n[o>>2]=0;l=(bo(o,t,r)|0)!=0;c=n[o>>2]|0;if(l|(c|0)==0){c=r;r=t;o=0;b=7;break}ad(c|0,e|0,(a>>>0<=r>>>0?a:r)|0)|0;co(e)}o=1;e=0}else{c=7958;r=36;o=1;b=7}}while(0);if((b|0)==7){n[d+4>>2]=o;o=2;e=1}n[d+4+(e<<2)>>2]=c;n[d+4+(o<<2)>>2]=r;n[d>>2]=e;if(!e){l=n[d+4>>2]|0;n[i>>2]=n[d+8>>2];p=u;return l|0}else{l=d+4|0;n[s>>2]=n[l>>2];n[s+4>>2]=n[l+4>>2];n[s+8>>2]=n[l+8>>2];n[f>>2]=n[l>>2];n[f+4>>2]=n[l+4>>2];n[f+8>>2]=n[l+8>>2];l=0;p=u;return l|0}return 0}function Hn(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;return r>>>0<=a>>>0|0}function Vn(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;return a>>>0<=r>>>0|0}function Gn(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0;y=p;p=p+144|0;_=y+104|0;g=y+80|0;w=y+64|0;v=y+48|0;u=y+32|0;s=y+8|0;b=y;d=e;o=n[d>>2]|0;d=n[d+4>>2]|0;n[b>>2]=a;m=0;c=$(2)|0;t=m;m=0;e:do{if(!(t&1)){if(!c){m=0;ce(2);m=0;break}do{if(!(n[c>>2]|0)){e=_;a=c;t=e+20|0;do{r[e>>0]=r[a>>0]|0;e=e+1|0;a=a+1|0}while((e|0)<(t|0));r[c>>0]=1;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;e=c+4|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;t=c+16|0;r[t>>0]=0;r[t+1>>0]=0;r[t+2>>0]=0;r[t+3>>0]=0;n[s>>2]=n[_>>2];n[s+4>>2]=n[_+4>>2];n[s+8>>2]=n[_+8>>2];n[s+12>>2]=n[_+12>>2];n[s+16>>2]=n[_+16>>2];if(((n[s>>2]|0?(i=s+16|0,f=n[i>>2]|0,f|0):0)?(s=n[f>>2]|0,n[f>>2]=s-1,(s|0)==1):0)?(m=0,ee(48,i|0),s=m,m=0,s&1):0)break e;if(!(n[c>>2]|0)){m=0;ee(36,3624);m=0;break e}else break}else e=c+4|0}while(0);if((n[e>>2]|0)==-1){m=0;ce(3);m=0;break}if(n[c+16>>2]|0){m=0;re(20,7994,38,3292);m=0;break}e=n[b>>2]|0;a=u;n[a>>2]=o;n[a+4>>2]=d;a=u+8|0;n[a>>2]=e;m=0;c=$(2)|0;b=m;m=0;a:do{if(b&1){e=me()|0;Wn(u)}else{if(!c){b=n[e>>2]|0;n[e>>2]=b-1;if((b|0)!=1)Pa();nr(a);Pa()}n[v>>2]=n[u>>2];n[v+4>>2]=n[u+4>>2];n[v+8>>2]=n[u+8>>2];t:do{if(!(n[c>>2]|0)){e=_;a=c;t=e+20|0;do{r[e>>0]=r[a>>0]|0;e=e+1|0;a=a+1|0}while((e|0)<(t|0));r[c>>0]=1;r[c+1>>0]=0;r[c+2>>0]=0;r[c+3>>0]=0;a=c+4|0;r[a>>0]=0;r[a+1>>0]=0;r[a+2>>0]=0;r[a+3>>0]=0;u=c+16|0;r[u>>0]=0;r[u+1>>0]=0;r[u+2>>0]=0;r[u+3>>0]=0;n[g>>2]=n[_>>2];n[g+4>>2]=n[_+4>>2];n[g+8>>2]=n[_+8>>2];n[g+12>>2]=n[_+12>>2];n[g+16>>2]=n[_+16>>2];if(!((((n[g>>2]|0)!=0?(l=g+16|0,h=n[l>>2]|0,(h|0)!=0):0)?(g=n[h>>2]|0,n[h>>2]=g-1,(g|0)==1):0)?(m=0,ee(48,l|0),g=m,m=0,g&1):0))A=30;do{if((A|0)==30)if(!(n[c>>2]|0)){m=0;ee(36,3624);m=0;break}else{e=a;break t}}while(0);e=me()|0;Wn(v);break a}else{a=c+4|0;e=a}}while(0);l=v;h=n[l+4>>2]|0;v=n[v+8>>2]|0;g=w;n[g>>2]=n[l>>2];n[g+4>>2]=h;n[w+8>>2]=v;do{if(!(n[e>>2]|0)){r[e>>0]=-1;r[e+1>>0]=-1>>8;r[e+2>>0]=-1>>16;r[e+3>>0]=-1>>24;t=c+8|0;e=_;n[e>>2]=t;n[e+4>>2]=a;e=c+16|0;a=n[e>>2]|0;if(!a){n[t>>2]=n[w>>2];n[t+4>>2]=n[w+4>>2];n[t+8>>2]=n[w+8>>2];A=_+4|0;A=n[A>>2]|0;r[A>>0]=0;r[A+1>>0]=0;r[A+2>>0]=0;r[A+3>>0]=0;p=y;return}v=n[a>>2]|0;n[a>>2]=v-1;if((v|0)!=1){n[t>>2]=n[w>>2];n[t+4>>2]=n[w+4>>2];n[t+8>>2]=n[w+8>>2];A=_+4|0;A=n[A>>2]|0;r[A>>0]=0;r[A+1>>0]=0;r[A+2>>0]=0;r[A+3>>0]=0;p=y;return}m=0;ee(48,e|0);v=m;m=0;if(v&1){e=me()|0;n[t>>2]=n[w>>2];n[t+4>>2]=n[w+4>>2];n[t+8>>2]=n[w+8>>2];m=0;ee(60,_|0);w=m;m=0;if(w&1){A=41;break}else break}else{n[t>>2]=n[w>>2];n[t+4>>2]=n[w+4>>2];n[t+8>>2]=n[w+8>>2];A=_+4|0;A=n[A>>2]|0;r[A>>0]=0;r[A+1>>0]=0;r[A+2>>0]=0;r[A+3>>0]=0;p=y;return}}else{m=0;ce(4);m=0;e=me()|0;m=0;ee(59,w|0);w=m;m=0;if(w&1)A=41}}while(0);if((A|0)==41)e=me()|0}}while(0);A=e;je(A|0)}}while(0);A=me()|0;dn(b);je(A|0)}function Wn(e){e=e|0;var a=0,t=0;e=e+8|0;t=n[e>>2]|0;a=n[t>>2]|0;n[t>>2]=a-1;if((a|0)!=1)return;nr(e);return}function Yn(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;var i=0,f=0;f=p;p=p+48|0;i=f+24|0;n[f>>2]=n[e>>2];n[f+4>>2]=n[e+4>>2];n[f+8>>2]=n[e+8>>2];n[f+12>>2]=n[e+12>>2];n[f+16>>2]=n[e+16>>2];n[f+20>>2]=n[e+20>>2];n[i>>2]=a;n[i+4>>2]=t;n[i+8>>2]=r;n[i+12>>2]=c;Ea(f,i)}function Kn(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0;S=p;p=p+80|0;A=S+64|0;x=S+48|0;_=S+40|0;k=S+24|0;w=S+8|0;E=S;y=S+76|0;n[y>>2]=e;pi(A,8078,4);h=nc(A)|0;e=A;n[e>>2]=0;n[e+4>>2]=0;Gn(A,h);n[k>>2]=4;n[k+4>>2]=0;h=k+8|0;n[h>>2]=0;e=(a|0)>0;m=0;ae(28,k|0,(e?a:0)|0);v=m;m=0;if(v&1){S=me()|0;gn(k);je(S|0)}f=n[k>>2]|0;i=n[h>>2]|0;n[_>>2]=h;v=_+4|0;n[v>>2]=i;e:do{if(e){s=x+4|0;b=x+8|0;l=i;u=0;d=f+(i*12|0)|0;while(1){i=n[t+(u<<2)>>2]|0;u=u+1|0;f=Ao(i)|0;if((f|0)==-1){e=8;break}if((f|0)<0){e=10;break}if(f){e=At(f,1,A)|0;if(!e){e=13;break}}else e=1;n[x>>2]=e;n[s>>2]=f;n[b>>2]=0;m=0;ae(25,x|0,f|0);o=m;m=0;if(o&1){e=15;break}e=n[b>>2]|0;n[b>>2]=e+f;o=n[x>>2]|0;ad(o+e|0,i|0,f|0)|0;i=s;e=n[i>>2]|0;i=n[i+4>>2]|0;if(!o){c=l;break e}n[d>>2]=o;o=d+4|0;n[o>>2]=e;n[o+4>>2]=i;e=l+1|0;if((u|0)>=(a|0)){c=e;break e}else{l=e;d=d+12|0}}if((e|0)==8){m=0;ae(14,-1,0);m=0;e=3}else if((e|0)==10){m=0;ee(36,3420);m=0;e=3}else if((e|0)==13)Ma(A);else if((e|0)==15){c=me()|0;m=0;ee(49,x|0);S=m;m=0;if(S&1)e=3}if((e|0)==3)c=me()|0;n[v>>2]=l;mn(_);S=c;gn(k);je(S|0)}else c=i}while(0);n[h>>2]=c;n[w>>2]=n[k>>2];n[w+4>>2]=n[k+4>>2];n[w+8>>2]=n[k+8>>2];Jo(13704)|0;if(n[3443]|0){m=0;re(20,8082,34,3308);m=0;S=me()|0;gn(w);je(S|0)}c=At(12,4,A)|0;if(!c)Ma(A);n[c>>2]=n[w>>2];n[c+4>>2]=n[w+4>>2];n[c+8>>2]=n[w+8>>2];m=0;ee(57,13772);v=m;m=0;if(v&1){S=me()|0;n[3443]=c;je(S|0)}n[3443]=c;ed(13704)|0;n[w>>2]=0;n[k>>2]=0;n[_>>2]=y;e:do{if(!(ni(61,_,w,k)|0))n[E>>2]=0;else{m=0;c=$(1)|0;_=m;m=0;do{if(!(_&1)){if(!c){m=0;ce(2);m=0;break}if(!(n[c>>2]|0)){e=c;_=e;r[_>>0]=1;r[_+1>>0]=0;r[_+2>>0]=0;r[_+3>>0]=0;e=e+4|0;r[e>>0]=0;r[e+1>>0]=0;r[e+2>>0]=0;r[e+3>>0]=0;c=c+4|0;e=-1}else{e=c+4|0;c=e;e=(n[e>>2]|0)+-1|0}r[c>>0]=e;r[c+1>>0]=e>>8;r[c+2>>0]=e>>16;r[c+3>>0]=e>>24;k=n[k>>2]|0;n[E>>2]=n[w>>2];n[E+4>>2]=k;break e}}while(0);S=me()|0;je(S|0)}}while(0);do{if((n[3445]|0)!=3){r[x>>0]=1;n[A>>2]=x;m=0;fe(6,13780,0,A|0,576);x=m;m=0;if(!(x&1))break;S=me()|0;Zn(E);je(S|0)}}while(0);i=n[E>>2]|0;f=(i|0)!=0;if(!i){E=f?101:0;p=S;return E|0}c=n[E+4>>2]|0;m=0;ee(n[c>>2]|0,i|0);E=m;m=0;if(E&1){S=me()|0;qa(i,c);je(S|0)}e=n[c+4>>2]|0;if(!e){E=f?101:0;p=S;return E|0}xt(i,e,n[c+8>>2]|0);E=f?101:0;p=S;return E|0}function Qn(e){e=e|0;Jn(n[n[e>>2]>>2]|0);return}function Zn(e){e=e|0;var a=0,t=0;a=n[e>>2]|0;if(!a)return;t=e+4|0;m=0;ee(n[n[t>>2]>>2]|0,a|0);a=m;m=0;if(a&1){a=me()|0;qa(n[e>>2]|0,n[t>>2]|0);je(a|0)}t=n[t>>2]|0;a=n[t+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,n[t+8>>2]|0);return}function Jn(e){e=e|0;Pd[e&7]();return}function Xn(e,a){e=e|0;a=a|0;e=p;p=p+16|0;n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];$n(0,e)}function $n(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;c=p;p=p+64|0;e=c+32|0;t=c+24|0;r=c+16|0;i=c;n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[r>>2]=i;n[r+4>>2]=59;n[t>>2]=c+32;n[e>>2]=3324;n[e+4>>2]=2;n[e+8>>2]=0;n[e+16>>2]=r;n[e+20>>2]=1;Di(t,600,e)|0;ea()}function ei(e){e=e|0;return}function ai(e,a,t){e=e|0;a=a|0;t=t|0;Wo(2,a,t)|0;return 0}function ti(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0;o=p;p=p+16|0;i=o;n[i>>2]=0;if(a>>>0<128){r[i>>0]=a;a=1;Wo(2,i,a)|0;p=o;return 0}do{if(a>>>0>=2048)if(a>>>0<65536){r[i>>0]=a>>>12&15|-32;e=a>>>6&63|-128;t=2;c=i+1|0;f=3;break}else{r[i>>0]=a>>>18&7|-16;r[i+1>>0]=a>>>12&63|-128;e=a>>>6&63|-128;t=3;c=i+2|0;f=4;break}else{e=a>>>6&31|-64;t=1;c=i;f=2}}while(0);r[c>>0]=e;r[i+t>>0]=a&63|-128;a=f;Wo(2,i,a)|0;p=o;return 0}function ri(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=n[e>>2];n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,600,r)|0;p=t;return a|0}function ci(e,a,t,r,c,n){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;n=n|0;return pe(e|0,a|0,t|0,r|0,c|0,n|0)|0}function ni(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0;m=0;ee(e|0,a|0);a=m;m=0;if(!(a&1)){r=0;return r|0}e=Be(0)|0;if(!e)Oi(3340);c=n[e>>2]|0;a=n[e+4>>2]|0;xe(e|0);n[t>>2]=c;n[r>>2]=a;r=1;return r|0}function ii(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=Se(8)|0;r=e;c=a;if(t|0){n[t>>2]=e;n[t+4>>2]=a;Qe(t|0,0,0)}m=0;ee(n[a>>2]|0,r|0);t=m;m=0;if(t&1){c=me()|0;fi(e,a);je(c|0)}e=n[c+4>>2]|0;if(!e)return 3;xt(r,e,n[c+8>>2]|0);return 3}function fi(e,a){e=e|0;a=a|0;var t=0;t=n[a+4>>2]|0;if(!t)return;xt(e,t,n[a+8>>2]|0);return}function oi(e,a){e=e|0;a=a|0;var t=0,r=0;r=p;p=p+16|0;t=r;do{switch(n[e>>2]&15){case 0:{xf(t,a,8284,14);t=Ef(t)|0;p=r;return t|0}case 1:{xf(t,a,8298,29);t=Ef(t)|0;p=r;return t|0}case 2:{xf(t,a,8327,23);t=Ef(t)|0;p=r;return t|0}case 3:{xf(t,a,8350,23);t=Ef(t)|0;p=r;return t|0}case 4:{xf(t,a,8373,16);t=Ef(t)|0;p=r;return t|0}case 5:{xf(t,a,8389,17);t=Ef(t)|0;p=r;return t|0}case 6:{xf(t,a,8406,18);t=Ef(t)|0;p=r;return t|0}case 7:{xf(t,a,8424,20);t=Ef(t)|0;p=r;return t|0}case 8:{xf(t,a,8444,20);t=Ef(t)|0;p=r;return t|0}default:{xf(t,a,8464,12);t=Ef(t)|0;p=r;return t|0}}}while(0);return 0}function di(e,a,t){e=e|0;a=a|0;t=t|0;n[e>>2]=1;n[e+4>>2]=a;n[e+8>>2]=t;return}function si(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;t=p;p=p+48|0;i=t+32|0;c=t+24|0;r=t;e=(n[e>>2]|0)==0;n[i>>2]=e?8562:8588;n[i+4>>2]=e?26:29;n[c>>2]=i;n[c+4>>2]=60;n[r>>2]=3388;n[r+4>>2]=1;n[r+8>>2]=0;n[r+16>>2]=c;n[r+20>>2]=1;a=Mf(a,r)|0;p=t;return a|0}function bi(e,a){e=e|0;a=a|0;return Ff(n[e>>2]|0,n[e+4>>2]|0,a)|0}function ui(e){e=e|0;var a=0;a=p;p=p+16|0;n[a>>2]=n[e>>2];n[a+4>>2]=n[e+4>>2];n[a+8>>2]=n[e+8>>2];kt(a)}function li(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;u=p;p=p+32|0;d=u+16|0;s=u;o=e+4|0;c=n[o>>2]|0;if((c-a|0)>>>0>=t>>>0){p=u;return}t=a+t|0;if(t>>>0<a>>>0)vf(8476,17);i=c<<1;i=t>>>0>=i>>>0?t:i;if((i|0)<0)Oi(3420);t=(i|0)==0;do{if(!c)if(!t){r=At(i,1,d)|0;if(!r){f=1;r=0;break}else{f=0;break}}else{t=8649;a=30;b=16}else if(!t){r=Et(n[e>>2]|0,c,1,i,1,d)|0;if(!r){r=n[d>>2]|0;a=d+4|0;c=n[a+4>>2]|0;f=s+8|0;n[f>>2]=n[a>>2];n[f+4>>2]=c;f=1;break}else{f=0;break}}else{t=8617;a=32;b=16}}while(0);if((b|0)==16){n[s>>2]=1;n[s+4>>2]=1;n[s+8>>2]=t;n[s+12>>2]=a;b=s+4|0;n[d>>2]=n[b>>2];n[d+4>>2]=n[b+4>>2];n[d+8>>2]=n[b+8>>2];ui(d)}n[s>>2]=f;n[s+4>>2]=r;if(f|0){b=s+4|0;n[d>>2]=n[b>>2];n[d+4>>2]=n[b+4>>2];n[d+8>>2]=n[b+8>>2];ui(d)}n[e>>2]=n[s+4>>2];n[o>>2]=i;p=u;return}function pi(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+48|0;c=d+32|0;o=d+16|0;f=d;if((t|0)<0)Oi(3420);if(t){r=At(t,1,c)|0;if(!r)ui(c);else i=r}else i=1;n[o>>2]=i;n[o+4>>2]=t;r=o+8|0;n[r>>2]=0;m=0;re(23,o|0,0,t|0);i=m;m=0;if(i&1){d=me()|0;hi(o);je(d|0)}else{i=n[r>>2]|0;n[r>>2]=i+t;ad((n[o>>2]|0)+i|0,a|0,t|0)|0;n[f>>2]=n[o>>2];n[f+4>>2]=n[o+4>>2];n[f+8>>2]=n[o+8>>2];n[e>>2]=n[f>>2];n[e+4>>2]=n[f+4>>2];n[e+8>>2]=n[f+8>>2];p=d;return}}function hi(e){e=e|0;var a=0;a=n[e+4>>2]|0;if(!a)return;xt(n[e>>2]|0,a,1);return}function mi(e,a,t){e=e|0;a=a|0;t=t|0;pi(e,a,t);return}function gi(e,a){e=e|0;a=a|0;n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];return}function vi(e){e=e|0;return yi(e,624)|0}function yi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;do{if(e>>>0>=2048){if(e>>>0<65536){t=(e>>>6)+-32|0;if(t>>>0>=992)Ti(3444,t,992);t=i[a+280+t>>0]|0;r=n[a+260>>2]|0;if(t>>>0<r>>>0){c=(n[a+256>>2]|0)+(t<<3)|0;break}else Ti(3460,t,r)}t=(e>>>12)+-16|0;if(t>>>0>=256)Ti(3444,t,256);r=n[a+268>>2]|0;t=(i[a+1272+t>>0]|0)<<6|e>>>6&63;if(t>>>0>=r>>>0)Ti(3444,t,r);t=i[(n[a+264>>2]|0)+t>>0]|0;r=n[a+276>>2]|0;if(t>>>0<r>>>0){c=(n[a+272>>2]|0)+(t<<3)|0;break}else Ti(3476,t,r)}else c=a+(e>>>6<<3)|0}while(0);a=c;c=n[a>>2]|0;a=n[a+4>>2]|0;e=nd(1,0,e&63|0)|0;return(c&e|0)!=0|(a&T|0)!=0|0}function _i(e,a,t){e=e|0;a=a|0;t=t|0;n[e>>2]=a;n[e+4>>2]=t;return}function wi(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0;p=a+4|0;h=n[p>>2]|0;if(!h){n[e>>2]=0;return}g=n[a>>2]|0;d=0;e:while(1){o=g+d|0;f=r[o>>0]|0;t=d+1|0;a:do{if(f<<24>>24<=-1)switch(r[9209+(f&255)>>0]|0){case 2:{if(h>>>0<=t>>>0){_=18;break e}if((r[g+t>>0]&-64)<<24>>24!=-128){_=18;break e}t=d+2|0;break a}case 3:{if(h>>>0<=t>>>0){_=27;break e}c=r[g+t>>0]|0;i=(c&255)<192;if(((!(f<<24>>24==-32&(c&-32)<<24>>24==-96)?(m=c<<24>>24<0,!(i&((f+31&255)<12&m))):0)?!((c&255)<160&(f<<24>>24==-19&m)):0)?!(i&((f&-2)<<24>>24==-18&m)):0){_=27;break e}t=d+2|0;if(h>>>0<=t>>>0){_=39;break e}if((r[g+t>>0]&-64)<<24>>24!=-128){_=39;break e}t=d+3|0;break a}case 4:{if(h>>>0<=t>>>0){_=47;break e}c=r[g+t>>0]|0;if((!(f<<24>>24==-16&(c+112&255)<48)?(v=c<<24>>24<0,!((c&255)<192&((f+15&255)<3&v))):0)?!((c&255)<144&(f<<24>>24==-12&v)):0){_=47;break e}t=d+2|0;if(h>>>0<=t>>>0){_=58;break e}if((r[g+t>>0]&-64)<<24>>24!=-128){_=58;break e}t=d+3|0;if(h>>>0<=t>>>0){_=67;break e}if((r[g+t>>0]&-64)<<24>>24!=-128){_=67;break e}t=d+4|0;break a}default:{_=13;break e}}}while(0);if(t>>>0<h>>>0)d=t;else{s=0;b=14356;u=0;l=14356;y=h;break}}do{if((_|0)==13){if(d>>>0>h>>>0)Si(d,h);if(h>>>0<t>>>0)Si(t,h);else{s=1;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==18){if(d>>>0>h>>>0)Si(d,h);if((d|0)==-1)Bi(-1,t);if(h>>>0<t>>>0)Si(t,h);else{s=1;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==27){if(d>>>0>h>>>0)Si(d,h);if((d|0)==-1)Bi(-1,t);if(h>>>0<t>>>0)Si(t,h);else{s=1;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==39){if(d>>>0>h>>>0)Si(d,h);if(d>>>0>4294967293)Bi(d,t);if(h>>>0<t>>>0)Si(t,h);else{s=2;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==47){if(d>>>0>h>>>0)Si(d,h);if((d|0)==-1)Bi(-1,t);if(h>>>0<t>>>0)Si(t,h);else{s=1;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==58){if(d>>>0>h>>>0)Si(d,h);if(d>>>0>4294967293)Bi(d,t);if(h>>>0<t>>>0)Si(t,h);else{s=2;b=o;u=h-t|0;l=g+t|0;y=d;break}}else if((_|0)==67){if(d>>>0>h>>>0)Si(d,h);if(d>>>0>4294967292)Bi(d,t);if(h>>>0<t>>>0)Si(t,h);else{s=3;b=o;u=h-t|0;l=g+t|0;y=d;break}}}while(0);n[a>>2]=l;n[p>>2]=u;n[e>>2]=g;n[e+4>>2]=y;n[e+8>>2]=b;n[e+12>>2]=s;return}function Ai(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0;H=p;p=p+96|0;P=H+64|0;I=H+40|0;z=H+84|0;D=H+80|0;N=H+32|0;q=H+24|0;F=H+8|0;L=H;if((If(t,34)|0)<<24>>24){U=1;p=H;return U|0}M=L;n[M>>2]=e;n[M+4>>2]=a;wi(P,L);e=n[P>>2]|0;e:do{if(e|0){O=P+4|0;B=P+8|0;M=P+12|0;y=z;_=P+4|0;w=I+4|0;C=I+8|0;R=I+12|0;A=I+16|0;k=I+20|0;T=F+4|0;j=F+8|0;x=P+4|0;E=N+4|0;S=P+4|0;a:while(1){m=n[O>>2]|0;v=n[B>>2]|0;g=n[M>>2]|0;h=e+m|0;if(m){f=e;c=0;l=0;u=e;while(1){i=f+1|0;a=i;s=r[f>>0]|0;if(s<<24>>24<=-1){b=s&31;if((i|0)==(h|0)){o=h;i=0}else{a=f+2|0;o=a;i=r[i>>0]&63}f=i&255;i=f|b<<6;if((s&255)>223){if((o|0)==(h|0)){d=h;i=0}else{a=o+1|0;d=a;i=r[o>>0]&63}f=i&255|f<<6;i=f|b<<12;if((s&255)>239){if((d|0)==(h|0))i=0;else{i=r[d>>0]&63;a=d+1|0}i=f<<6|b<<18&1835008|i&255;b=a}else b=a}else b=a}else{i=s&255;b=a}s=l-u+b|0;switch(i|0){case 9:{a=0;f=0;o=2;d=116;break}case 13:{a=0;f=0;o=2;d=114;break}case 10:{a=0;f=0;o=2;d=110;break}case 34:case 39:case 92:{a=0;f=0;o=2;d=i;break}default:if(Df(i)|0){a=0;f=0;o=1;d=i}else{a=(G(i|1|0)|0)>>>2^7;f=5;o=3;d=i}}n[F>>2]=o;n[T>>2]=d;u=j;n[u>>2]=a;n[u+4>>2]=f;gf(P,F);a=n[P>>2]|0;u=x;d=n[u>>2]|0;u=n[u+4>>2]|0;o=q;n[o>>2]=d;n[o+4>>2]=u;n[N>>2]=1;n[E>>2]=a;n[D>>2]=q;n[z>>2]=N;if(!((d|0)==1&(u|0)==(a|0))){U=33;break a}if((a|0)!=1){if(l>>>0<c>>>0){U=42;break a}if(!((c|0)==0|(m|0)==(c|0))){if(m>>>0<=c>>>0){U=42;break a}if((r[e+c>>0]|0)<=-65){U=42;break a}}if(!((l|0)==0|(l|0)==(m|0))){if(l>>>0>=m>>>0){U=42;break a}if((r[e+l>>0]|0)<=-65){U=42;break a}}if((Bf(t,e+c|0,l-c|0)|0)<<24>>24){U=45;break a}n[I>>2]=n[F>>2];n[I+4>>2]=n[F+4>>2];n[I+8>>2]=n[F+8>>2];n[I+12>>2]=n[F+12>>2];while(1){mf(P,I);if(!(n[P>>2]|0))break;if((If(t,n[S>>2]|0)|0)<<24>>24){U=50;break a}}c=(i>>>0<128?1:i>>>0<2048?2:i>>>0<65536?3:4)+l|0}f=b;if((f|0)==(h|0))break;else{l=s;u=b}}if(!((c|0)==0|(m|0)==(c|0))){if(m>>>0<=c>>>0){U=24;break}a=e+c|0;if((r[a>>0]|0)>-65)e=c;else{U=24;break}}else U=21}else{c=0;U=21}if((U|0)==21){U=0;a=e+c|0;e=c}if((Bf(t,a,m-e|0)|0)<<24>>24)break;a=v+g|0;e=v;while(1){if((e|0)==(a|0))break;r[z>>0]=r[e>>0]|0;n[P>>2]=y;n[_>>2]=62;n[I>>2]=3492;n[w>>2]=1;n[C>>2]=3500;n[R>>2]=1;n[A>>2]=P;n[k>>2]=1;if(!((Mf(t,I)|0)<<24>>24))e=e+1|0;else break a}wi(P,L);e=n[P>>2]|0;if(!e)break e}if((U|0)==24)Ni(e,m,c,m);else if((U|0)==33){L=n[894]|0;q=n[895]|0;n[P>>2]=D;n[P+4>>2]=61;n[P+8>>2]=z;n[P+12>>2]=61;n[I>>2]=L;n[I+4>>2]=q;n[I+8>>2]=0;n[I+16>>2]=P;n[I+20>>2]=2;Ci(I,3608)}else if((U|0)==42)Ni(e,m,c,l);else if((U|0)==50)U=45;U=1;p=H;return U|0}}while(0);U=If(t,34)|0;p=H;return U|0}function ki(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;c=p;p=p+32|0;t=c+16|0;r=c;e=n[e>>2]|0;if(!(n[e>>2]|0)){xf(t,a,9201,4);r=Ef(t)|0;p=c;return r|0}else{xf(r,a,9205,4);n[t>>2]=e+4;Ui(r,t,2360)|0;r=Ef(r)|0;p=c;return r|0}return 0}function xi(e){e=e|0;return}function Ei(e,a){e=e|0;a=a|0;return Li(n[e>>2]|0,a)|0}function Si(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;i=p;p=p+48|0;r=i+24|0;t=i;c=i+44|0;i=i+40|0;n[i>>2]=e;n[c>>2]=a;n[r>>2]=i;n[r+4>>2]=40;n[r+8>>2]=c;n[r+12>>2]=40;n[t>>2]=3696;n[t+4>>2]=2;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;Ci(t,3712)}function Ti(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0;i=p;p=p+48|0;c=i+24|0;r=i;f=i+44|0;i=i+40|0;n[i>>2]=a;n[f>>2]=t;n[c>>2]=f;n[c+4>>2]=40;n[c+8>>2]=i;n[c+12>>2]=40;n[r>>2]=3680;n[r+4>>2]=2;n[r+8>>2]=0;n[r+16>>2]=c;n[r+20>>2]=2;Ci(r,e)}function ji(e,a){e=e|0;a=a|0;var t=0,c=0,f=0,o=0,d=0,s=0,b=0,u=0;d=p;p=p+48|0;o=d;e=n[e>>2]|0;if(e>>>0>9999){f=39;while(1){s=(e>>>0)%1e4|0;c=(e>>>0)/1e4|0;t=f+-4|0;u=9784+(((s>>>0)/100|0)<<1)|0;b=o+t|0;u=i[u>>0]|i[u+1>>0]<<8;r[b>>0]=u;r[b+1>>0]=u>>8;s=9784+(((s>>>0)%100|0)<<1)|0;f=o+(f+-2)|0;s=i[s>>0]|i[s+1>>0]<<8;r[f>>0]=s;r[f+1>>0]=s>>8;if(e>>>0>99999999){f=t;e=c}else{e=c;break}}}else t=39;if((e|0)>99){t=t+-2|0;b=9784+(((e>>>0)%100|0)<<1)|0;u=o+t|0;b=i[b>>0]|i[b+1>>0]<<8;r[u>>0]=b;r[u+1>>0]=b>>8;e=(e>>>0)/100|0}if((e|0)<10){u=t+-1|0;r[o+u>>0]=(e&255)+48<<24>>24;b=o+u|0;u=39-u|0;u=Ri(a,1,14356,0,b,u)|0;p=d;return u|0}else{u=t+-2|0;s=9784+(e<<1)|0;b=o+u|0;s=i[s>>0]|i[s+1>>0]<<8;r[b>>0]=s;r[b+1>>0]=s>>8;b=o+u|0;u=39-u|0;u=Ri(a,1,14356,0,b,u)|0;p=d;return u|0}return 0}function Ci(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0;f=p;p=p+48|0;i=f+24|0;c=n[a>>2]|0;r=n[a+4>>2]|0;t=n[a+8>>2]|0;a=n[a+12>>2]|0;n[f>>2]=n[e>>2];n[f+4>>2]=n[e+4>>2];n[f+8>>2]=n[e+8>>2];n[f+12>>2]=n[e+12>>2];n[f+16>>2]=n[e+16>>2];n[f+20>>2]=n[e+20>>2];n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];n[i+12>>2]=n[f+12>>2];n[i+16>>2]=n[f+16>>2];n[i+20>>2]=n[f+20>>2];Yn(i,c,r,t,a)}function Ri(e,a,t,c,i,f){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;f=f|0;var o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;k=p;p=p+16|0;A=k+4|0;v=k;b=n[e>>2]|0;if(a)if(!(b&1)){l=0;y=0;s=f}else{a=43;w=3}else{a=45;w=3}if((w|0)==3){l=1;y=a;s=f+1|0}if(!(b&4))_=0;else{o=t+c|0;if(!c)a=0;else{d=t;a=0;do{a=((r[d>>0]&-64)<<24>>24==-128&1)+a|0;d=d+1|0}while((d|0)!=(o|0))}_=1;s=s+c-a|0}if(!(n[e+8>>2]|0)){if((l|0)==1){b=n[e+24>>2]|0;u=n[e+28>>2]|0;n[A>>2]=0;if(y>>>0<128){r[A>>0]=y;a=1}else{do{if(y>>>0>=2048)if(y>>>0<65536){r[A>>0]=-32;o=-128;d=2;s=A+1|0;a=3;break}else{r[A>>0]=-16;r[A+1>>0]=-128;o=-128;d=3;s=A+2|0;a=4;break}else{o=-64;d=1;s=A;a=2}}while(0);r[s>>0]=o;r[A+d>>0]=y&63|-128}if((Cd[n[u+12>>2]&15](b,A,a)|0)<<24>>24){f=1;p=k;return f|0}}o=e+24|0;if(_<<24>>24){a=e+28|0;if((Cd[n[(n[a>>2]|0)+12>>2]&15](n[o>>2]|0,t,c)|0)<<24>>24){f=1;p=k;return f|0}}else a=e+28|0;f=Cd[n[(n[a>>2]|0)+12>>2]&15](n[o>>2]|0,i,f)|0;p=k;return f|0}m=n[e+12>>2]|0;if(m>>>0<=s>>>0){if((l|0)==1){b=n[e+24>>2]|0;u=n[e+28>>2]|0;n[A>>2]=0;if(y>>>0<128){r[A>>0]=y;a=1}else{do{if(y>>>0>=2048)if(y>>>0<65536){r[A>>0]=-32;o=-128;d=2;s=A+1|0;a=3;break}else{r[A>>0]=-16;r[A+1>>0]=-128;o=-128;d=3;s=A+2|0;a=4;break}else{o=-64;d=1;s=A;a=2}}while(0);r[s>>0]=o;r[A+d>>0]=y&63|-128}if((Cd[n[u+12>>2]&15](b,A,a)|0)<<24>>24){f=1;p=k;return f|0}}o=e+24|0;if(_<<24>>24){a=e+28|0;if((Cd[n[(n[a>>2]|0)+12>>2]&15](n[o>>2]|0,t,c)|0)<<24>>24){f=1;p=k;return f|0}}else a=e+28|0;f=Cd[n[(n[a>>2]|0)+12>>2]&15](n[o>>2]|0,i,f)|0;p=k;return f|0}if(!(b&8)){a=m-s|0;g=r[e+48>>0]|0;switch((g<<24>>24==3?1:g)&3){case 0:{g=a;a=0;break}case 2:{g=(a+1|0)>>>1;a=a>>>1;break}default:g=0}n[v>>2]=0;b=n[e+4>>2]|0;if(b>>>0<128){r[v>>0]=b;u=1}else{do{if(b>>>0>=2048)if(b>>>0<65536){r[v>>0]=b>>>12&15|-32;o=b>>>6&63|-128;d=2;s=v+1|0;u=3;break}else{r[v>>0]=b>>>18&255|-16;r[v+1>>0]=b>>>12&63|-128;o=b>>>6&63|-128;d=3;s=v+2|0;u=4;break}else{o=b>>>6&31|-64;d=1;s=v;u=2}}while(0);r[s>>0]=o;r[v+d>>0]=b&63|-128}m=e+24|0;h=e+28|0;o=0;while(1){if(o>>>0>=a>>>0)break;if(!((Cd[n[(n[h>>2]|0)+12>>2]&15](n[m>>2]|0,v,u)|0)<<24>>24))o=o+1|0;else{w=65;break}}if((w|0)==65){f=1;p=k;return f|0}if((l|0)==1){b=n[m>>2]|0;l=n[h>>2]|0;n[A>>2]=0;if(y>>>0<128){r[A>>0]=y;a=1}else{do{if(y>>>0>=2048)if(y>>>0<65536){r[A>>0]=-32;o=-128;d=2;s=A+1|0;a=3;break}else{r[A>>0]=-16;r[A+1>>0]=-128;o=-128;d=3;s=A+2|0;a=4;break}else{o=-64;d=1;s=A;a=2}}while(0);r[s>>0]=o;r[A+d>>0]=y&63|-128}if(!((Cd[n[l+12>>2]&15](b,A,a)|0)<<24>>24))w=61}else w=61;do{if((w|0)==61){if(_<<24>>24?(Cd[n[(n[h>>2]|0)+12>>2]&15](n[m>>2]|0,t,c)|0)<<24>>24:0)break;if(!((Cd[n[(n[h>>2]|0)+12>>2]&15](n[m>>2]|0,i,f)|0)<<24>>24)){a=0;while(1){if(a>>>0>=g>>>0){w=68;break}if(!((Cd[n[(n[h>>2]|0)+12>>2]&15](n[m>>2]|0,v,u)|0)<<24>>24))a=a+1|0;else{w=70;break}}if((w|0)==68){f=0;p=k;return f|0}else if((w|0)==70){f=1;p=k;return f|0}}}}while(0);f=1;p=k;return f|0}g=e+4|0;n[g>>2]=48;h=e+48|0;r[h>>0]=1;if((l|0)==1){u=n[e+24>>2]|0;l=n[e+28>>2]|0;n[A>>2]=0;if(y>>>0<128){r[A>>0]=y;a=1}else{do{if(y>>>0>=2048)if(y>>>0<65536){r[A>>0]=-32;o=-128;d=2;b=A+1|0;a=3;break}else{r[A>>0]=-16;r[A+1>>0]=-128;o=-128;d=3;b=A+2|0;a=4;break}else{o=-64;d=1;b=A;a=2}}while(0);r[b>>0]=o;r[A+d>>0]=y&63|-128}if((Cd[n[l+12>>2]&15](u,A,a)|0)<<24>>24){f=1;p=k;return f|0}}if(_<<24>>24?(Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,t,c)|0)<<24>>24:0){f=1;p=k;return f|0}a=m-s|0;c=r[h>>0]|0;switch((c<<24>>24==3?1:c)&3){case 0:{l=a;a=0;break}case 2:{l=(a+1|0)>>>1;a=a>>>1;break}default:l=0}n[A>>2]=0;b=n[g>>2]|0;if(b>>>0<128){r[A>>0]=b;u=1}else{do{if(b>>>0>=2048)if(b>>>0<65536){r[A>>0]=b>>>12&15|-32;o=b>>>6&63|-128;d=2;s=A+1|0;u=3;break}else{r[A>>0]=b>>>18&255|-16;r[A+1>>0]=b>>>12&63|-128;o=b>>>6&63|-128;d=3;s=A+2|0;u=4;break}else{o=b>>>6&31|-64;d=1;s=A;u=2}}while(0);r[s>>0]=o;r[A+d>>0]=b&63|-128}s=e+24|0;d=e+28|0;o=0;while(1){if(o>>>0>=a>>>0)break;if(!((Cd[n[(n[d>>2]|0)+12>>2]&15](n[s>>2]|0,A,u)|0)<<24>>24))o=o+1|0;else{w=89;break}}if((w|0)==89){f=1;p=k;return f|0}if(!((Cd[n[(n[d>>2]|0)+12>>2]&15](n[s>>2]|0,i,f)|0)<<24>>24))a=0;else{f=1;p=k;return f|0}while(1){if(a>>>0>=l>>>0){w=92;break}if(!((Cd[n[(n[d>>2]|0)+12>>2]&15](n[s>>2]|0,A,u)|0)<<24>>24))a=a+1|0;else{w=94;break}}if((w|0)==92){f=0;p=k;return f|0}else if((w|0)==94){f=1;p=k;return f|0}return 0}function Oi(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0;t=p;p=p+48|0;a=t+32|0;o=t+24|0;d=n[e+4>>2]|0;f=n[e+8>>2]|0;i=n[e+12>>2]|0;c=n[e+16>>2]|0;r=n[e+20>>2]|0;n[o>>2]=n[e>>2];n[o+4>>2]=d;n[t>>2]=o;n[t+4>>2]=1;n[t+8>>2]=0;n[t+16>>2]=13784;n[t+20>>2]=0;n[a>>2]=f;n[a+4>>2]=i;n[a+8>>2]=c;n[a+12>>2]=r;Ci(t,a)}function Bi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0;i=p;p=p+48|0;r=i+24|0;t=i;c=i+44|0;i=i+40|0;n[i>>2]=e;n[c>>2]=a;n[r>>2]=i;n[r+4>>2]=40;n[r+8>>2]=c;n[r+12>>2]=40;n[t>>2]=3728;n[t+4>>2]=2;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=2;Ci(t,3744)}function Mi(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0;v=p;p=p+16|0;g=v;l=(n[e+8>>2]|0)==0;c=n[e+16>>2]|0;if(l)if(!c){g=Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,a,t)|0;p=v;return g|0}else m=6;else if((c|0)==1)m=6;if((m|0)==6){c=n[e+20>>2]|0;b=a+t|0;e:do{if(!((c|0)==0|(t|0)==0)){d=a;u=a;i=0;while(1){o=d+1|0;s=r[d>>0]|0;f=o;if(s<<24>>24<=-1){y=(o|0)==(b|0);o=d+2|0;f=y?f:o;o=y?b:o;if((s&255)>223){y=(o|0)==(b|0);o=o+1|0;f=y?f:o;o=y?b:o;if((s&255)>239)f=(o|0)==(b|0)?f:o+1|0}}if(!c)break;i=i-u+f|0;d=f;if((d|0)==(b|0)){h=t;break e}else{u=f;c=c+-1|0}}if(!((i|0)==0|(i|0)==(t|0))){if(i>>>0>=t>>>0)Ni(a,t,0,i);if((r[a+i>>0]|0)<=-65)Ni(a,t,0,i);else h=i}else h=i}else h=0}while(0);if(l){y=Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,a,h)|0;p=v;return y|0}else t=h}d=n[e+12>>2]|0;o=a+t|0;f=(t|0)==0;if(f)c=0;else{i=a;c=0;do{c=((r[i>>0]&-64)<<24>>24==-128&1)+c|0;i=i+1|0}while((i|0)!=(o|0))}if((t-c|0)>>>0>=d>>>0){y=Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,a,t)|0;p=v;return y|0}if(f)c=0;else{i=a;c=0;do{c=((r[i>>0]&-64)<<24>>24==-128&1)+c|0;i=i+1|0}while((i|0)!=(o|0))}c=c-t+d|0;y=r[e+48>>0]|0;switch((y<<24>>24==3?0:y)&3){case 0:{b=c;c=0;break}case 2:{b=(c+1|0)>>>1;c=c>>>1;break}default:b=0}n[g>>2]=0;d=n[e+4>>2]|0;if(d>>>0<128){r[g>>0]=d;s=1}else{do{if(d>>>0>=2048)if(d>>>0<65536){r[g>>0]=d>>>12&15|-32;i=d>>>6&63|-128;f=2;o=g+1|0;s=3;break}else{r[g>>0]=d>>>18&255|-16;r[g+1>>0]=d>>>12&63|-128;i=d>>>6&63|-128;f=3;o=g+2|0;s=4;break}else{i=d>>>6&31|-64;f=1;o=g;s=2}}while(0);r[o>>0]=i;r[g+f>>0]=d&63|-128}o=e+24|0;f=e+28|0;i=0;while(1){if(i>>>0>=c>>>0)break;if(!((Cd[n[(n[f>>2]|0)+12>>2]&15](n[o>>2]|0,g,s)|0)<<24>>24))i=i+1|0;else{m=34;break}}if((m|0)==34){y=1;p=v;return y|0}if(!((Cd[n[(n[f>>2]|0)+12>>2]&15](n[o>>2]|0,a,t)|0)<<24>>24))c=0;else{y=1;p=v;return y|0}while(1){if(c>>>0>=b>>>0){m=37;break}if(!((Cd[n[(n[f>>2]|0)+12>>2]&15](n[o>>2]|0,g,s)|0)<<24>>24))c=c+1|0;else{m=39;break}}if((m|0)==37){y=0;p=v;return y|0}else if((m|0)==39){y=1;p=v;return y|0}return 0}function Ni(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0;s=p;p=p+112|0;m=s+48|0;h=s+24|0;v=s+16|0;g=s+100|0;_=s+96|0;y=s+8|0;w=s;b=s+92|0;s=s+88|0;n[s>>2]=t;n[b>>2]=c;if(a>>>0>=257){f=256;do{if(f>>>0<a>>>0?(r[e+f>>0]|0)>-65:0){i=0;break}f=f+-1|0;i=(f|0)==0}while(!(i|(f|0)==(a|0)));if(!(i|(f|0)==(a|0))){if(f>>>0>=a>>>0)Ni(e,a,0,f);if((r[e+f>>0]|0)<=-65)Ni(e,a,0,f);else{o=f;d=1}}else{o=f;d=1}}else{o=a;d=0}n[w>>2]=e;n[w+4>>2]=o;n[y>>2]=d?10059:14356;n[y+4>>2]=d?5:0;i=t>>>0>a>>>0;if(i|c>>>0>a>>>0){n[v>>2]=i?t:c;n[m>>2]=v;n[m+4>>2]=40;n[m+8>>2]=w;n[m+12>>2]=63;n[m+16>>2]=y;n[m+20>>2]=63;n[h>>2]=3760;n[h+4>>2]=3;n[h+8>>2]=0;n[h+16>>2]=m;n[h+20>>2]=3;Ci(h,3784)}if(t>>>0>c>>>0){n[m>>2]=s;n[m+4>>2]=40;n[m+8>>2]=b;n[m+12>>2]=40;n[m+16>>2]=w;n[m+20>>2]=63;n[m+24>>2]=y;n[m+28>>2]=63;n[h>>2]=3800;n[h+4>>2]=4;n[h+8>>2]=0;n[h+16>>2]=m;n[h+20>>2]=4;Ci(h,3832)}if(!((t|0)==0|(t|0)==(a|0))){if(t>>>0<a>>>0?(r[e+t>>0]|0)>-65:0)u=16}else u=16;if((u|0)==16)t=c;n[_>>2]=t;i=(t|0)==0;e:do{if(!(i|(t|0)==(a|0)))do{if(t>>>0<a>>>0?(r[e+t>>0]|0)>-65:0){i=0;break e}t=t+-1|0;i=(t|0)==0}while(!(i|(t|0)==(a|0)))}while(0);if(!(i|(t|0)==(a|0))){if(t>>>0>=a>>>0)Ni(e,a,t,a);i=e+t|0;if((r[i>>0]|0)>-65)l=i;else Ni(e,a,t,a)}else l=e+t|0;s=e+t+(a-t)|0;if((l|0)==(s|0))Oi(3624);i=e+t+1|0;c=r[l>>0]|0;if(c<<24>>24<=-1){b=c&31;if((i|0)==(s|0)){o=s;i=0}else{o=e+t+2|0;i=r[i>>0]&63}f=i&255;i=f|b<<6;if((c&255)>223){if((o|0)==(s|0)){d=s;i=0}else{d=o+1|0;i=r[o>>0]&63}f=i&255|f<<6;i=f|b<<12;if((c&255)>239){if((d|0)==(s|0))i=0;else i=r[d>>0]&63;i=f<<6|b<<18&1835008|i&255}}}else i=c&255;n[g>>2]=i;n[v>>2]=t;n[v+4>>2]=(i>>>0<128?1:i>>>0<2048?2:i>>>0<65536?3:4)+t;n[m>>2]=_;n[m+4>>2]=40;n[m+8>>2]=g;n[m+12>>2]=64;n[m+16>>2]=v;n[m+20>>2]=65;n[m+24>>2]=w;n[m+28>>2]=63;n[m+32>>2]=y;n[m+36>>2]=63;n[h>>2]=3848;n[h+4>>2]=5;n[h+8>>2]=0;n[h+16>>2]=m;n[h+20>>2]=5;Ci(h,3888)}function Ii(e,a){e=e|0;a=a|0;return Mi(a,n[e>>2]|0,n[e+4>>2]|0)|0}function Pi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0;f=a+24|0;i=a+28|0;if((Fd[n[(n[i>>2]|0)+16>>2]&127](n[f>>2]|0,39)|0)<<24>>24){o=1;return o|0}e=n[e>>2]|0;e:do{switch(e&2097151|0){case 9:{t=0;a=0;r=2;e=116;break}case 13:{t=0;a=0;r=2;e=114;break}case 10:{t=0;a=0;r=2;e=110;break}case 34:case 39:case 92:{t=0;a=0;r=2;break}default:{a=e&65535;do{if(e>>>0<65536){if(qi(a,10159,42,10243,303,10546,333)|0){t=0;a=0;r=1;break e}}else if(e>>>0<131072)if(qi(a,10879,31,10941,146,11087,342)|0){t=0;a=0;r=1;break e}else break;else if((e+-918e3|0)>>>0>196111&(((e+-195102|0)>>>0<722658|((e+-183970|0)>>>0<10590|((e&2097150|0)==178206|((e+-173783|0)>>>0<41|(e+-177973|0)>>>0<11))))^1)){t=0;a=0;r=1;break e}else break}while(0);t=(G(e|1|0)|0)>>>2^7;a=5;r=3}}}while(0);c=r;e:while(1){a:do{switch(c&3){case 0:break e;case 1:{r=e;c=0;break}case 2:{r=92;c=1;break}default:switch(a&7){case 0:break e;case 1:{a=a&-256;r=125;break a}case 2:{r=e>>>(t<<2&28)&15;r=((r&255)<10?48:87)+r|0;if(!t){a=a&-256|1;break a}else{t=t+-1|0;break a}}case 3:{a=a&-256|2;r=123;break a}case 4:{a=a&-256|3;r=117;break a}default:{a=a&-256|4;r=92;break a}}}}while(0);if((Fd[n[(n[i>>2]|0)+16>>2]&127](n[f>>2]|0,r)|0)<<24>>24){a=1;o=13;break}}if((o|0)==13)return a|0;o=Fd[n[(n[i>>2]|0)+16>>2]&127](n[f>>2]|0,39)|0;return o|0}function Fi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+48|0;r=t+16|0;c=t;n[c>>2]=e;n[c+4>>2]=66;n[c+8>>2]=e+4;n[c+12>>2]=66;e=n[a+24>>2]|0;a=n[a+28>>2]|0;n[r>>2]=3560;n[r+4>>2]=2;n[r+8>>2]=0;n[r+16>>2]=c;n[r+20>>2]=2;a=Di(e,a,r)|0;p=t;return a|0}function Li(e,a){e=e|0;a=a|0;return ji(e,a)|0}function Di(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;k=p;p=p+64|0;w=k;c=n[t>>2]|0;y=n[t+4>>2]|0;o=n[t+8>>2]|0;i=n[t+12>>2]|0;m=n[t+16>>2]|0;u=n[t+20>>2]|0;f=m+(u<<3)|0;t=m;n[w>>2]=0;g=w+4|0;n[g>>2]=32;v=w+48|0;r[v>>0]=3;n[w+8>>2]=0;n[w+16>>2]=0;A=w+24|0;n[A>>2]=e;_=w+28|0;n[_>>2]=a;n[w+32>>2]=t;l=w+36|0;n[l>>2]=f;h=w+40|0;n[h>>2]=m;m=w+44|0;n[m>>2]=u;y=c+(y<<3)|0;e:do{if(o){d=o+(i*36|0)|0;s=w+8|0;b=w+16|0;u=w+32|0;a:while(1){if((o|0)==(d|0)){t=3;break e}f=o;o=o+36|0;if((c|0)==(y|0)){t=40;break e}if((Cd[n[(n[_>>2]|0)+12>>2]&15](n[A>>2]|0,n[c>>2]|0,n[c+4>>2]|0)|0)<<24>>24){t=9;break e}c=c+8|0;n[g>>2]=n[f+8>>2];r[v>>0]=r[f+32>>0]|0;n[w>>2]=n[f+12>>2];switch(n[f+24>>2]&3){case 0:{e=0;i=1;t=n[f+28>>2]|0;break}case 1:{a=n[f+28>>2]|0;e=n[m>>2]|0;if(a>>>0>=e>>>0){t=21;break a}t=n[h>>2]|0;if((n[t+(a<<3)+4>>2]|0)==67){e=0;i=1;t=n[n[t+(a<<3)>>2]>>2]|0}else{e=0;i=0;t=0}break}case 2:{t=n[u>>2]|0;if((t|0)!=(n[l>>2]|0)?(n[u>>2]=t+8,(n[t+4>>2]|0)==67):0){e=0;i=1;t=n[n[t>>2]>>2]|0}else{e=0;i=0;t=0}break}default:{e=0;i=0;t=0}}a=s;n[a>>2]=i;n[a+4>>2]=t|e;switch(n[f+16>>2]&3){case 0:{e=0;i=1;t=n[f+20>>2]|0;break}case 1:{a=n[f+20>>2]|0;e=n[m>>2]|0;if(a>>>0>=e>>>0){t=30;break a}t=n[h>>2]|0;if((n[t+(a<<3)+4>>2]|0)==67){e=0;i=1;t=n[n[t+(a<<3)>>2]>>2]|0}else{e=0;i=0;t=0}break}case 2:{t=n[u>>2]|0;if((t|0)!=(n[l>>2]|0)?(n[u>>2]=t+8,(n[t+4>>2]|0)==67):0){e=0;i=1;t=n[n[t>>2]>>2]|0}else{e=0;i=0;t=0}break}default:{e=0;i=0;t=0}}a=b;n[a>>2]=i;n[a+4>>2]=t|e;if(!(n[f>>2]|0)){t=n[u>>2]|0;if((t|0)==(n[l>>2]|0)){t=33;break}n[u>>2]=t+8}else{e=n[f+4>>2]|0;a=n[m>>2]|0;if(e>>>0>=a>>>0){t=37;break}t=(n[h>>2]|0)+(e<<3)|0}if((Fd[n[t+4>>2]&127](n[t>>2]|0,w)|0)<<24>>24){t=9;break e}}if((t|0)==21)Ti(3904,a,e);else if((t|0)==30)Ti(3904,a,e);else if((t|0)==33)Oi(3624);else if((t|0)==37)Ti(3920,e,a)}else while(1){if((t|0)==(f|0)){t=3;break e}if((c|0)==(y|0)){t=3;break e}if((Cd[n[(n[_>>2]|0)+12>>2]&15](n[A>>2]|0,n[c>>2]|0,n[c+4>>2]|0)|0)<<24>>24){t=9;break e}if(!((Fd[n[t+4>>2]&127](n[t>>2]|0,w)|0)<<24>>24)){c=c+8|0;t=t+8|0}else{t=9;break}}}while(0);if((t|0)==3)if((c|0)!=(y|0)?(Cd[n[(n[_>>2]|0)+12>>2]&15](n[A>>2]|0,n[c>>2]|0,n[c+4>>2]|0)|0)<<24>>24!=0:0)t=9;else t=40;if((t|0)==9){A=1;p=k;return A|0}else if((t|0)==40){A=0;p=k;return A|0}return 0}function zi(e,a){e=e|0;a=a|0;return ji(e,a)|0}function qi(e,a,t,c,n,f,o){e=e|0;a=a|0;t=t|0;c=c|0;n=n|0;f=f|0;o=o|0;var d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0;l=(e&65535)>>>8&255;p=a+(t<<1)|0;e:do{if(t|0){s=e&255;u=0;a:while(1){d=a;a=a+2|0;t=r[d>>0]|0;d=i[d+1>>0]|0;b=d+u|0;if(l<<24>>24!=t<<24>>24)if((l&255)<(t&255)|(a|0)==(p|0))break e;else{u=b;continue}if(b>>>0<u>>>0){t=7;break}if(b>>>0>n>>>0){t=9;break}m=c+u|0;t=m+d|0;d=m;while(1){if((d|0)==(t|0))break;if((r[d>>0]|0)==s<<24>>24){h=0;t=15;break a}else d=d+1|0}if((a|0)==(p|0))break e;else u=b}if((t|0)==7)Bi(u,b);else if((t|0)==9)Si(b,n);else if((t|0)==15)return h|0}}while(0);u=f+o|0;if(!o){m=1;return m|0}t=1;b=e&65535;while(1){d=f+1|0;a=r[f>>0]|0;if(a<<24>>24<0){if((d|0)==(u|0)){t=18;break}s=i[d>>0]|(a&127)<<8;a=f+2|0}else{s=a&255;a=d}b=b-s|0;if((b|0)<0){h=t;t=15;break}t=t^1;if((a|0)==(u|0)){h=t;t=15;break}else f=a}if((t|0)==15)return h|0;else if((t|0)==18)Oi(3624);return 0}function Ui(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;u=p;p=p+80|0;o=u+56|0;f=u+32|0;b=u+24|0;s=u+16|0;d=u+8|0;c=u;n[c>>2]=a;n[c+4>>2]=t;i=e+8|0;t=c;c=e+4|0;if(r[i>>0]|0){b=1;r[i>>0]=b;b=n[c>>2]|0;b=b+1|0;n[c>>2]=b;p=u;return e|0}a=(n[c>>2]|0)!=0;n[d>>2]=a?5857:5847;n[d+4>>2]=1;n[s>>2]=a?11487:14356;n[s+4>>2]=a&1;a=n[e>>2]|0;if(!(n[a>>2]&4)){n[f>>2]=d;n[f+4>>2]=63;n[f+8>>2]=s;n[f+12>>2]=63;n[f+16>>2]=t;n[f+20>>2]=68;b=n[a+24>>2]|0;a=n[a+28>>2]|0;n[o>>2]=4024;n[o+4>>2]=3;n[o+8>>2]=0;n[o+16>>2]=f;n[o+20>>2]=3;a=Di(b,a,o)|0}else{n[b>>2]=a;r[b+4>>0]=0;n[o>>2]=d;n[o+4>>2]=63;n[o+8>>2]=t;n[o+12>>2]=68;n[f>>2]=3936;n[f+4>>2]=2;n[f+8>>2]=3952;n[f+12>>2]=2;n[f+16>>2]=o;n[f+20>>2]=2;a=Di(b,2376,f)|0}b=a;r[i>>0]=b;b=n[c>>2]|0;b=b+1|0;n[c>>2]=b;p=u;return e|0}function Hi(e,a){e=e|0;a=a|0;return Fd[n[(n[e+4>>2]|0)+12>>2]&127](n[e>>2]|0,a)|0}function Vi(e){e=e|0;return}function Gi(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0,q=0,U=0,H=0,V=0,G=0,W=0;q=p;p=p+896|0;E=q+864|0;B=q+832|0;w=q+800|0;_=q+768|0;y=q+736|0;v=q+704|0;g=q+672|0;m=q+640|0;P=q+608|0;j=q+576|0;I=q+544|0;x=q+512|0;k=q+480|0;R=q+448|0;A=q+416|0;C=q+384|0;T=q+352|0;D=q+320|0;F=q+288|0;N=q+256|0;M=q+224|0;z=q+192|0;L=q+160|0;S=q+96|0;O=q;c=O;r=c+96|0;do{n[c>>2]=n[a>>2];c=c+4|0;a=a+4|0}while((c|0)<(r|0));c=S;a=t;r=c+64|0;do{n[c>>2]=n[a>>2];c=c+4|0;a=a+4|0}while((c|0)<(r|0));l=t+64|0;u=n[l>>2]|0;l=n[l+4>>2]|0;d=t+72|0;o=n[d>>2]|0;d=n[d+4>>2]|0;b=t+80|0;s=n[b>>2]|0;b=n[b+4>>2]|0;f=t+88|0;i=n[f>>2]|0;f=n[f+4>>2]|0;r=O+64|0;t=n[r>>2]|0;r=n[r+4>>2]|0;if((((t|0)==0&(r|0)==0?(c=O+72|0,(n[c>>2]|0)==0&(n[c+4>>2]|0)==0):0)?(c=O+80|0,(n[c>>2]|0)==0&(n[c+4>>2]|0)==0):0)?(c=O+88|0,(n[c>>2]|0)==0&(n[c+4>>2]|0)==0):0){c=e;a=S;r=c+64|0;do{n[c>>2]=n[a>>2];c=c+4|0;a=a+4|0}while((c|0)<(r|0));z=e+64|0;n[z>>2]=u;n[z+4>>2]=l;z=e+72|0;n[z>>2]=o;n[z+4>>2]=d;z=e+80|0;n[z>>2]=s;n[z+4>>2]=b;z=e+88|0;n[z>>2]=i;n[z+4>>2]=f}else h=6;do{if((h|0)==6){if((o|u|(i|s)|0)==0?(d|l|(f|b)|0)==0:0){c=e;a=O;r=c+96|0;do{n[c>>2]=n[a>>2];c=c+4|0;a=a+4|0}while((c|0)<(r|0));break}a=O+64|0;G=O+72|0;W=n[G>>2]|0;G=n[G+4>>2]|0;H=O+80|0;V=n[H>>2]|0;H=n[H+4>>2]|0;c=O+88|0;U=n[c>>2]|0;c=n[c+4>>2]|0;h=B;n[h>>2]=t;n[h+4>>2]=r;h=B+8|0;n[h>>2]=W;n[h+4>>2]=G;h=B+16|0;n[h>>2]=V;n[h+4>>2]=H;h=B+24|0;n[h>>2]=U;n[h+4>>2]=c;n[E>>2]=n[a>>2];n[E+4>>2]=n[a+4>>2];n[E+8>>2]=n[a+8>>2];n[E+12>>2]=n[a+12>>2];n[E+16>>2]=n[a+16>>2];n[E+20>>2]=n[a+20>>2];n[E+24>>2]=n[a+24>>2];n[E+28>>2]=n[a+28>>2];Ct(B,E,8,-460954743,-2016278654);n[L>>2]=n[B>>2];n[L+4>>2]=n[B+4>>2];n[L+8>>2]=n[B+8>>2];n[L+12>>2]=n[B+12>>2];n[L+16>>2]=n[B+16>>2];n[L+20>>2]=n[B+20>>2];n[L+24>>2]=n[B+24>>2];n[L+28>>2]=n[B+28>>2];h=B;n[h>>2]=u;n[h+4>>2]=l;h=B+8|0;n[h>>2]=o;n[h+4>>2]=d;h=B+16|0;n[h>>2]=s;n[h+4>>2]=b;h=B+24|0;n[h>>2]=i;n[h+4>>2]=f;h=E;n[h>>2]=u;n[h+4>>2]=l;h=E+8|0;n[h>>2]=o;n[h+4>>2]=d;h=E+16|0;n[h>>2]=s;n[h+4>>2]=b;h=E+24|0;n[h>>2]=i;n[h+4>>2]=f;Ct(B,E,8,-460954743,-2016278654);n[z>>2]=n[B>>2];n[z+4>>2]=n[B+4>>2];n[z+8>>2]=n[B+8>>2];n[z+12>>2]=n[B+12>>2];n[z+16>>2]=n[B+16>>2];n[z+20>>2]=n[B+20>>2];n[z+24>>2]=n[B+24>>2];n[z+28>>2]=n[B+28>>2];n[B>>2]=n[O>>2];n[B+4>>2]=n[O+4>>2];n[B+8>>2]=n[O+8>>2];n[B+12>>2]=n[O+12>>2];n[B+16>>2]=n[O+16>>2];n[B+20>>2]=n[O+20>>2];n[B+24>>2]=n[O+24>>2];n[B+28>>2]=n[O+28>>2];n[E>>2]=n[z>>2];n[E+4>>2]=n[z+4>>2];n[E+8>>2]=n[z+8>>2];n[E+12>>2]=n[z+12>>2];n[E+16>>2]=n[z+16>>2];n[E+20>>2]=n[z+20>>2];n[E+24>>2]=n[z+24>>2];n[E+28>>2]=n[z+28>>2];Ct(B,E,8,-460954743,-2016278654);n[M>>2]=n[B>>2];n[M+4>>2]=n[B+4>>2];n[M+8>>2]=n[B+8>>2];n[M+12>>2]=n[B+12>>2];n[M+16>>2]=n[B+16>>2];n[M+20>>2]=n[B+20>>2];n[M+24>>2]=n[B+24>>2];n[M+28>>2]=n[B+28>>2];n[B>>2]=n[S>>2];n[B+4>>2]=n[S+4>>2];n[B+8>>2]=n[S+8>>2];n[B+12>>2]=n[S+12>>2];n[B+16>>2]=n[S+16>>2];n[B+20>>2]=n[S+20>>2];n[B+24>>2]=n[S+24>>2];n[B+28>>2]=n[S+28>>2];n[E>>2]=n[L>>2];n[E+4>>2]=n[L+4>>2];n[E+8>>2]=n[L+8>>2];n[E+12>>2]=n[L+12>>2];n[E+16>>2]=n[L+16>>2];n[E+20>>2]=n[L+20>>2];n[E+24>>2]=n[L+24>>2];n[E+28>>2]=n[L+28>>2];Ct(B,E,8,-460954743,-2016278654);n[N>>2]=n[B>>2];n[N+4>>2]=n[B+4>>2];n[N+8>>2]=n[B+8>>2];n[N+12>>2]=n[B+12>>2];n[N+16>>2]=n[B+16>>2];n[N+20>>2]=n[B+20>>2];n[N+24>>2]=n[B+24>>2];n[N+28>>2]=n[B+28>>2];n[B>>2]=n[a>>2];n[B+4>>2]=n[a+4>>2];n[B+8>>2]=n[a+8>>2];n[B+12>>2]=n[a+12>>2];n[B+16>>2]=n[a+16>>2];n[B+20>>2]=n[a+20>>2];n[B+24>>2]=n[a+24>>2];n[B+28>>2]=n[a+28>>2];n[E>>2]=n[L>>2];n[E+4>>2]=n[L+4>>2];n[E+8>>2]=n[L+8>>2];n[E+12>>2]=n[L+12>>2];n[E+16>>2]=n[L+16>>2];n[E+20>>2]=n[L+20>>2];n[E+24>>2]=n[L+24>>2];n[E+28>>2]=n[L+28>>2];Ct(B,E,8,-460954743,-2016278654);n[F>>2]=n[B>>2];n[F+4>>2]=n[B+4>>2];n[F+8>>2]=n[B+8>>2];n[F+12>>2]=n[B+12>>2];n[F+16>>2]=n[B+16>>2];n[F+20>>2]=n[B+20>>2];n[F+24>>2]=n[B+24>>2];n[F+28>>2]=n[B+28>>2];h=B;n[h>>2]=u;n[h+4>>2]=l;h=B+8|0;n[h>>2]=o;n[h+4>>2]=d;h=B+16|0;n[h>>2]=s;n[h+4>>2]=b;h=B+24|0;n[h>>2]=i;n[h+4>>2]=f;n[E>>2]=n[z>>2];n[E+4>>2]=n[z+4>>2];n[E+8>>2]=n[z+8>>2];n[E+12>>2]=n[z+12>>2];n[E+16>>2]=n[z+16>>2];n[E+20>>2]=n[z+20>>2];n[E+24>>2]=n[z+24>>2];n[E+28>>2]=n[z+28>>2];Ct(B,E,8,-460954743,-2016278654);n[D>>2]=n[B>>2];n[D+4>>2]=n[B+4>>2];n[D+8>>2]=n[B+8>>2];n[D+12>>2]=n[B+12>>2];n[D+16>>2]=n[B+16>>2];n[D+20>>2]=n[B+20>>2];n[D+24>>2]=n[B+24>>2];n[D+28>>2]=n[B+28>>2];h=O+32|0;n[B>>2]=n[h>>2];n[B+4>>2]=n[h+4>>2];n[B+8>>2]=n[h+8>>2];n[B+12>>2]=n[h+12>>2];n[B+16>>2]=n[h+16>>2];n[B+20>>2]=n[h+20>>2];n[B+24>>2]=n[h+24>>2];n[B+28>>2]=n[h+28>>2];n[E>>2]=n[D>>2];n[E+4>>2]=n[D+4>>2];n[E+8>>2]=n[D+8>>2];n[E+12>>2]=n[D+12>>2];n[E+16>>2]=n[D+16>>2];n[E+20>>2]=n[D+20>>2];n[E+24>>2]=n[D+24>>2];n[E+28>>2]=n[D+28>>2];Ct(B,E,8,-460954743,-2016278654);n[T>>2]=n[B>>2];n[T+4>>2]=n[B+4>>2];n[T+8>>2]=n[B+8>>2];n[T+12>>2]=n[B+12>>2];n[T+16>>2]=n[B+16>>2];n[T+20>>2]=n[B+20>>2];n[T+24>>2]=n[B+24>>2];n[T+28>>2]=n[B+28>>2];D=S+32|0;n[B>>2]=n[D>>2];n[B+4>>2]=n[D+4>>2];n[B+8>>2]=n[D+8>>2];n[B+12>>2]=n[D+12>>2];n[B+16>>2]=n[D+16>>2];n[B+20>>2]=n[D+20>>2];n[B+24>>2]=n[D+24>>2];n[B+28>>2]=n[D+28>>2];n[E>>2]=n[F>>2];n[E+4>>2]=n[F+4>>2];n[E+8>>2]=n[F+8>>2];n[E+12>>2]=n[F+12>>2];n[E+16>>2]=n[F+16>>2];n[E+20>>2]=n[F+20>>2];n[E+24>>2]=n[F+24>>2];n[E+28>>2]=n[F+28>>2];Ct(B,E,8,-460954743,-2016278654);n[C>>2]=n[B>>2];n[C+4>>2]=n[B+4>>2];n[C+8>>2]=n[B+8>>2];n[C+12>>2]=n[B+12>>2];n[C+16>>2]=n[B+16>>2];n[C+20>>2]=n[B+20>>2];n[C+24>>2]=n[B+24>>2];n[C+28>>2]=n[B+28>>2];if((Lo(M,N,32)|0)==0?(Lo(T,C,32)|0)==0:0)Wi(e,O);else{n[B>>2]=n[N>>2];n[B+4>>2]=n[N+4>>2];n[B+8>>2]=n[N+8>>2];n[B+12>>2]=n[N+12>>2];n[B+16>>2]=n[N+16>>2];n[B+20>>2]=n[N+20>>2];n[B+24>>2]=n[N+24>>2];n[B+28>>2]=n[N+28>>2];n[E>>2]=n[M>>2];n[E+4>>2]=n[M+4>>2];n[E+8>>2]=n[M+8>>2];n[E+12>>2]=n[M+12>>2];n[E+16>>2]=n[M+16>>2];n[E+20>>2]=n[M+20>>2];n[E+24>>2]=n[M+24>>2];n[E+28>>2]=n[M+28>>2];jt(B,E,8);n[A>>2]=n[B>>2];n[A+4>>2]=n[B+4>>2];n[A+8>>2]=n[B+8>>2];n[A+12>>2]=n[B+12>>2];n[A+16>>2]=n[B+16>>2];n[A+20>>2]=n[B+20>>2];n[A+24>>2]=n[B+24>>2];n[A+28>>2]=n[B+28>>2];n[B>>2]=n[C>>2];n[B+4>>2]=n[C+4>>2];n[B+8>>2]=n[C+8>>2];n[B+12>>2]=n[C+12>>2];n[B+16>>2]=n[C+16>>2];n[B+20>>2]=n[C+20>>2];n[B+24>>2]=n[C+24>>2];n[B+28>>2]=n[C+28>>2];n[E>>2]=n[T>>2];n[E+4>>2]=n[T+4>>2];n[E+8>>2]=n[T+8>>2];n[E+12>>2]=n[T+12>>2];n[E+16>>2]=n[T+16>>2];n[E+20>>2]=n[T+20>>2];n[E+24>>2]=n[T+24>>2];n[E+28>>2]=n[T+28>>2];jt(B,E,8);n[R>>2]=n[B>>2];n[R+4>>2]=n[B+4>>2];n[R+8>>2]=n[B+8>>2];n[R+12>>2]=n[B+12>>2];n[R+16>>2]=n[B+16>>2];n[R+20>>2]=n[B+20>>2];n[R+24>>2]=n[B+24>>2];n[R+28>>2]=n[B+28>>2];n[w>>2]=n[A>>2];n[w+4>>2]=n[A+4>>2];n[w+8>>2]=n[A+8>>2];n[w+12>>2]=n[A+12>>2];n[w+16>>2]=n[A+16>>2];n[w+20>>2]=n[A+20>>2];n[w+24>>2]=n[A+24>>2];n[w+28>>2]=n[A+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[A>>2];n[E+4>>2]=n[A+4>>2];n[E+8>>2]=n[A+8>>2];n[E+12>>2]=n[A+12>>2];n[E+16>>2]=n[A+16>>2];n[E+20>>2]=n[A+20>>2];n[E+24>>2]=n[A+24>>2];n[E+28>>2]=n[A+28>>2];Tt(B,E,8);F=B;O=n[F>>2]|0;F=n[F+4>>2]|0;U=B+8|0;D=n[U>>2]|0;U=n[U+4>>2]|0;V=B+16|0;H=n[V>>2]|0;V=n[V+4>>2]|0;N=B+24|0;G=n[N>>2]|0;N=n[N+4>>2]|0;W=B;n[W>>2]=O;n[W+4>>2]=F;W=B+8|0;n[W>>2]=D;n[W+4>>2]=U;W=B+16|0;n[W>>2]=H;n[W+4>>2]=V;W=B+24|0;n[W>>2]=G;n[W+4>>2]=N;W=E;n[W>>2]=O;n[W+4>>2]=F;W=E+8|0;n[W>>2]=D;n[W+4>>2]=U;W=E+16|0;n[W>>2]=H;n[W+4>>2]=V;W=E+24|0;n[W>>2]=G;n[W+4>>2]=N;Ct(B,E,8,-460954743,-2016278654);n[k>>2]=n[B>>2];n[k+4>>2]=n[B+4>>2];n[k+8>>2]=n[B+8>>2];n[k+12>>2]=n[B+12>>2];n[k+16>>2]=n[B+16>>2];n[k+20>>2]=n[B+20>>2];n[k+24>>2]=n[B+24>>2];n[k+28>>2]=n[B+28>>2];n[B>>2]=n[A>>2];n[B+4>>2]=n[A+4>>2];n[B+8>>2]=n[A+8>>2];n[B+12>>2]=n[A+12>>2];n[B+16>>2]=n[A+16>>2];n[B+20>>2]=n[A+20>>2];n[B+24>>2]=n[A+24>>2];n[B+28>>2]=n[A+28>>2];n[E>>2]=n[k>>2];n[E+4>>2]=n[k+4>>2];n[E+8>>2]=n[k+8>>2];n[E+12>>2]=n[k+12>>2];n[E+16>>2]=n[k+16>>2];n[E+20>>2]=n[k+20>>2];n[E+24>>2]=n[k+24>>2];n[E+28>>2]=n[k+28>>2];Ct(B,E,8,-460954743,-2016278654);n[x>>2]=n[B>>2];n[x+4>>2]=n[B+4>>2];n[x+8>>2]=n[B+8>>2];n[x+12>>2]=n[B+12>>2];n[x+16>>2]=n[B+16>>2];n[x+20>>2]=n[B+20>>2];n[x+24>>2]=n[B+24>>2];n[x+28>>2]=n[B+28>>2];n[w>>2]=n[R>>2];n[w+4>>2]=n[R+4>>2];n[w+8>>2]=n[R+8>>2];n[w+12>>2]=n[R+12>>2];n[w+16>>2]=n[R+16>>2];n[w+20>>2]=n[R+20>>2];n[w+24>>2]=n[R+24>>2];n[w+28>>2]=n[R+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[R>>2];n[E+4>>2]=n[R+4>>2];n[E+8>>2]=n[R+8>>2];n[E+12>>2]=n[R+12>>2];n[E+16>>2]=n[R+16>>2];n[E+20>>2]=n[R+20>>2];n[E+24>>2]=n[R+24>>2];n[E+28>>2]=n[R+28>>2];Tt(B,E,8);W=B;N=n[W>>2]|0;W=n[W+4>>2]|0;G=B+8|0;V=n[G>>2]|0;G=n[G+4>>2]|0;H=B+16|0;U=n[H>>2]|0;H=n[H+4>>2]|0;D=B+24|0;F=n[D>>2]|0;D=n[D+4>>2]|0;n[B>>2]=n[M>>2];n[B+4>>2]=n[M+4>>2];n[B+8>>2]=n[M+8>>2];n[B+12>>2]=n[M+12>>2];n[B+16>>2]=n[M+16>>2];n[B+20>>2]=n[M+20>>2];n[B+24>>2]=n[M+24>>2];n[B+28>>2]=n[M+28>>2];n[E>>2]=n[k>>2];n[E+4>>2]=n[k+4>>2];n[E+8>>2]=n[k+8>>2];n[E+12>>2]=n[k+12>>2];n[E+16>>2]=n[k+16>>2];n[E+20>>2]=n[k+20>>2];n[E+24>>2]=n[k+24>>2];n[E+28>>2]=n[k+28>>2];Ct(B,E,8,-460954743,-2016278654);n[I>>2]=n[B>>2];n[I+4>>2]=n[B+4>>2];n[I+8>>2]=n[B+8>>2];n[I+12>>2]=n[B+12>>2];n[I+16>>2]=n[B+16>>2];n[I+20>>2]=n[B+20>>2];n[I+24>>2]=n[B+24>>2];n[I+28>>2]=n[B+28>>2];n[B>>2]=n[T>>2];n[B+4>>2]=n[T+4>>2];n[B+8>>2]=n[T+8>>2];n[B+12>>2]=n[T+12>>2];n[B+16>>2]=n[T+16>>2];n[B+20>>2]=n[T+20>>2];n[B+24>>2]=n[T+24>>2];n[B+28>>2]=n[T+28>>2];n[E>>2]=n[x>>2];n[E+4>>2]=n[x+4>>2];n[E+8>>2]=n[x+8>>2];n[E+12>>2]=n[x+12>>2];n[E+16>>2]=n[x+16>>2];n[E+20>>2]=n[x+20>>2];n[E+24>>2]=n[x+24>>2];n[E+28>>2]=n[x+28>>2];Ct(B,E,8,-460954743,-2016278654);n[j>>2]=n[B>>2];n[j+4>>2]=n[B+4>>2];n[j+8>>2]=n[B+8>>2];n[j+12>>2]=n[B+12>>2];n[j+16>>2]=n[B+16>>2];n[j+20>>2]=n[B+20>>2];n[j+24>>2]=n[B+24>>2];n[j+28>>2]=n[B+28>>2];M=B;n[M>>2]=N;n[M+4>>2]=W;M=B+8|0;n[M>>2]=V;n[M+4>>2]=G;M=B+16|0;n[M>>2]=U;n[M+4>>2]=H;M=B+24|0;n[M>>2]=F;n[M+4>>2]=D;M=E;n[M>>2]=N;n[M+4>>2]=W;M=E+8|0;n[M>>2]=V;n[M+4>>2]=G;M=E+16|0;n[M>>2]=U;n[M+4>>2]=H;M=E+24|0;n[M>>2]=F;n[M+4>>2]=D;Ct(B,E,8,-460954743,-2016278654);n[w>>2]=n[B>>2];n[w+4>>2]=n[B+4>>2];n[w+8>>2]=n[B+8>>2];n[w+12>>2]=n[B+12>>2];n[w+16>>2]=n[B+16>>2];n[w+20>>2]=n[B+20>>2];n[w+24>>2]=n[B+24>>2];n[w+28>>2]=n[B+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[x>>2];n[E+4>>2]=n[x+4>>2];n[E+8>>2]=n[x+8>>2];n[E+12>>2]=n[x+12>>2];n[E+16>>2]=n[x+16>>2];n[E+20>>2]=n[x+20>>2];n[E+24>>2]=n[x+24>>2];n[E+28>>2]=n[x+28>>2];jt(B,E,8);n[y>>2]=n[B>>2];n[y+4>>2]=n[B+4>>2];n[y+8>>2]=n[B+8>>2];n[y+12>>2]=n[B+12>>2];n[y+16>>2]=n[B+16>>2];n[y+20>>2]=n[B+20>>2];n[y+24>>2]=n[B+24>>2];n[y+28>>2]=n[B+28>>2];n[w>>2]=n[I>>2];n[w+4>>2]=n[I+4>>2];n[w+8>>2]=n[I+8>>2];n[w+12>>2]=n[I+12>>2];n[w+16>>2]=n[I+16>>2];n[w+20>>2]=n[I+20>>2];n[w+24>>2]=n[I+24>>2];n[w+28>>2]=n[I+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[I>>2];n[E+4>>2]=n[I+4>>2];n[E+8>>2]=n[I+8>>2];n[E+12>>2]=n[I+12>>2];n[E+16>>2]=n[I+16>>2];n[E+20>>2]=n[I+20>>2];n[E+24>>2]=n[I+24>>2];n[E+28>>2]=n[I+28>>2];Tt(B,E,8);n[_>>2]=n[B>>2];n[_+4>>2]=n[B+4>>2];n[_+8>>2]=n[B+8>>2];n[_+12>>2]=n[B+12>>2];n[_+16>>2]=n[B+16>>2];n[_+20>>2]=n[B+20>>2];n[_+24>>2]=n[B+24>>2];n[_+28>>2]=n[B+28>>2];n[B>>2]=n[y>>2];n[B+4>>2]=n[y+4>>2];n[B+8>>2]=n[y+8>>2];n[B+12>>2]=n[y+12>>2];n[B+16>>2]=n[y+16>>2];n[B+20>>2]=n[y+20>>2];n[B+24>>2]=n[y+24>>2];n[B+28>>2]=n[y+28>>2];n[E>>2]=n[_>>2];n[E+4>>2]=n[_+4>>2];n[E+8>>2]=n[_+8>>2];n[E+12>>2]=n[_+12>>2];n[E+16>>2]=n[_+16>>2];n[E+20>>2]=n[_+20>>2];n[E+24>>2]=n[_+24>>2];n[E+28>>2]=n[_+28>>2];jt(B,E,8);n[P>>2]=n[B>>2];n[P+4>>2]=n[B+4>>2];n[P+8>>2]=n[B+8>>2];n[P+12>>2]=n[B+12>>2];n[P+16>>2]=n[B+16>>2];n[P+20>>2]=n[B+20>>2];n[P+24>>2]=n[B+24>>2];n[P+28>>2]=n[B+28>>2];n[m>>2]=n[P>>2];n[m+4>>2]=n[P+4>>2];n[m+8>>2]=n[P+8>>2];n[m+12>>2]=n[P+12>>2];n[m+16>>2]=n[P+16>>2];n[m+20>>2]=n[P+20>>2];n[m+24>>2]=n[P+24>>2];n[m+28>>2]=n[P+28>>2];n[B>>2]=n[I>>2];n[B+4>>2]=n[I+4>>2];n[B+8>>2]=n[I+8>>2];n[B+12>>2]=n[I+12>>2];n[B+16>>2]=n[I+16>>2];n[B+20>>2]=n[I+20>>2];n[B+24>>2]=n[I+24>>2];n[B+28>>2]=n[I+28>>2];n[E>>2]=n[P>>2];n[E+4>>2]=n[P+4>>2];n[E+8>>2]=n[P+8>>2];n[E+12>>2]=n[P+12>>2];n[E+16>>2]=n[P+16>>2];n[E+20>>2]=n[P+20>>2];n[E+24>>2]=n[P+24>>2];n[E+28>>2]=n[P+28>>2];jt(B,E,8);n[w>>2]=n[B>>2];n[w+4>>2]=n[B+4>>2];n[w+8>>2]=n[B+8>>2];n[w+12>>2]=n[B+12>>2];n[w+16>>2]=n[B+16>>2];n[w+20>>2]=n[B+20>>2];n[w+24>>2]=n[B+24>>2];n[w+28>>2]=n[B+28>>2];P=B;n[P>>2]=N;n[P+4>>2]=W;P=B+8|0;n[P>>2]=V;n[P+4>>2]=G;P=B+16|0;n[P>>2]=U;n[P+4>>2]=H;P=B+24|0;n[P>>2]=F;n[P+4>>2]=D;n[E>>2]=n[w>>2];n[E+4>>2]=n[w+4>>2];n[E+8>>2]=n[w+8>>2];n[E+12>>2]=n[w+12>>2];n[E+16>>2]=n[w+16>>2];n[E+20>>2]=n[w+20>>2];n[E+24>>2]=n[w+24>>2];n[E+28>>2]=n[w+28>>2];Ct(B,E,8,-460954743,-2016278654);n[y>>2]=n[B>>2];n[y+4>>2]=n[B+4>>2];n[y+8>>2]=n[B+8>>2];n[y+12>>2]=n[B+12>>2];n[y+16>>2]=n[B+16>>2];n[y+20>>2]=n[B+20>>2];n[y+24>>2]=n[B+24>>2];n[y+28>>2]=n[B+28>>2];n[w>>2]=n[j>>2];n[w+4>>2]=n[j+4>>2];n[w+8>>2]=n[j+8>>2];n[w+12>>2]=n[j+12>>2];n[w+16>>2]=n[j+16>>2];n[w+20>>2]=n[j+20>>2];n[w+24>>2]=n[j+24>>2];n[w+28>>2]=n[j+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[j>>2];n[E+4>>2]=n[j+4>>2];n[E+8>>2]=n[j+8>>2];n[E+12>>2]=n[j+12>>2];n[E+16>>2]=n[j+16>>2];n[E+20>>2]=n[j+20>>2];n[E+24>>2]=n[j+24>>2];n[E+28>>2]=n[j+28>>2];Tt(B,E,8);n[_>>2]=n[B>>2];n[_+4>>2]=n[B+4>>2];n[_+8>>2]=n[B+8>>2];n[_+12>>2]=n[B+12>>2];n[_+16>>2]=n[B+16>>2];n[_+20>>2]=n[B+20>>2];n[_+24>>2]=n[B+24>>2];n[_+28>>2]=n[B+28>>2];n[B>>2]=n[y>>2];n[B+4>>2]=n[y+4>>2];n[B+8>>2]=n[y+8>>2];n[B+12>>2]=n[y+12>>2];n[B+16>>2]=n[y+16>>2];n[B+20>>2]=n[y+20>>2];n[B+24>>2]=n[y+24>>2];n[B+28>>2]=n[y+28>>2];n[E>>2]=n[_>>2];n[E+4>>2]=n[_+4>>2];n[E+8>>2]=n[_+8>>2];n[E+12>>2]=n[_+12>>2];n[E+16>>2]=n[_+16>>2];n[E+20>>2]=n[_+20>>2];n[E+24>>2]=n[_+24>>2];n[E+28>>2]=n[_+28>>2];jt(B,E,8);n[g>>2]=n[B>>2];n[g+4>>2]=n[B+4>>2];n[g+8>>2]=n[B+8>>2];n[g+12>>2]=n[B+12>>2];n[g+16>>2]=n[B+16>>2];n[g+20>>2]=n[B+20>>2];n[g+24>>2]=n[B+24>>2];n[g+28>>2]=n[B+28>>2];n[B>>2]=n[a>>2];n[B+4>>2]=n[a+4>>2];n[B+8>>2]=n[a+8>>2];n[B+12>>2]=n[a+12>>2];n[B+16>>2]=n[a+16>>2];n[B+20>>2]=n[a+20>>2];n[B+24>>2]=n[a+24>>2];n[B+28>>2]=n[a+28>>2];P=E;n[P>>2]=u;n[P+4>>2]=l;P=E+8|0;n[P>>2]=o;n[P+4>>2]=d;P=E+16|0;n[P>>2]=s;n[P+4>>2]=b;P=E+24|0;n[P>>2]=i;n[P+4>>2]=f;Tt(B,E,8);P=B;I=n[P>>2]|0;P=n[P+4>>2]|0;D=B+8|0;F=n[D>>2]|0;D=n[D+4>>2]|0;H=B+16|0;U=n[H>>2]|0;H=n[H+4>>2]|0;G=B+24|0;V=n[G>>2]|0;G=n[G+4>>2]|0;W=B;n[W>>2]=I;n[W+4>>2]=P;W=B+8|0;n[W>>2]=F;n[W+4>>2]=D;W=B+16|0;n[W>>2]=U;n[W+4>>2]=H;W=B+24|0;n[W>>2]=V;n[W+4>>2]=G;W=E;n[W>>2]=I;n[W+4>>2]=P;W=E+8|0;n[W>>2]=F;n[W+4>>2]=D;W=E+16|0;n[W>>2]=U;n[W+4>>2]=H;W=E+24|0;n[W>>2]=V;n[W+4>>2]=G;Ct(B,E,8,-460954743,-2016278654);n[w>>2]=n[B>>2];n[w+4>>2]=n[B+4>>2];n[w+8>>2]=n[B+8>>2];n[w+12>>2]=n[B+12>>2];n[w+16>>2]=n[B+16>>2];n[w+20>>2]=n[B+20>>2];n[w+24>>2]=n[B+24>>2];n[w+28>>2]=n[B+28>>2];n[B>>2]=n[w>>2];n[B+4>>2]=n[w+4>>2];n[B+8>>2]=n[w+8>>2];n[B+12>>2]=n[w+12>>2];n[B+16>>2]=n[w+16>>2];n[B+20>>2]=n[w+20>>2];n[B+24>>2]=n[w+24>>2];n[B+28>>2]=n[w+28>>2];n[E>>2]=n[L>>2];n[E+4>>2]=n[L+4>>2];n[E+8>>2]=n[L+8>>2];n[E+12>>2]=n[L+12>>2];n[E+16>>2]=n[L+16>>2];n[E+20>>2]=n[L+20>>2];n[E+24>>2]=n[L+24>>2];n[E+28>>2]=n[L+28>>2];jt(B,E,8);n[_>>2]=n[B>>2];n[_+4>>2]=n[B+4>>2];n[_+8>>2]=n[B+8>>2];n[_+12>>2]=n[B+12>>2];n[_+16>>2]=n[B+16>>2];n[_+20>>2]=n[B+20>>2];n[_+24>>2]=n[B+24>>2];n[_+28>>2]=n[B+28>>2];n[B>>2]=n[_>>2];n[B+4>>2]=n[_+4>>2];n[B+8>>2]=n[_+8>>2];n[B+12>>2]=n[_+12>>2];n[B+16>>2]=n[_+16>>2];n[B+20>>2]=n[_+20>>2];n[B+24>>2]=n[_+24>>2];n[B+28>>2]=n[_+28>>2];n[E>>2]=n[z>>2];n[E+4>>2]=n[z+4>>2];n[E+8>>2]=n[z+8>>2];n[E+12>>2]=n[z+12>>2];n[E+16>>2]=n[z+16>>2];n[E+20>>2]=n[z+20>>2];n[E+24>>2]=n[z+24>>2];n[E+28>>2]=n[z+28>>2];jt(B,E,8);n[y>>2]=n[B>>2];n[y+4>>2]=n[B+4>>2];n[y+8>>2]=n[B+8>>2];n[y+12>>2]=n[B+12>>2];n[y+16>>2]=n[B+16>>2];n[y+20>>2]=n[B+20>>2];n[y+24>>2]=n[B+24>>2];n[y+28>>2]=n[B+28>>2];n[B>>2]=n[y>>2];n[B+4>>2]=n[y+4>>2];n[B+8>>2]=n[y+8>>2];n[B+12>>2]=n[y+12>>2];n[B+16>>2]=n[y+16>>2];n[B+20>>2]=n[y+20>>2];n[B+24>>2]=n[y+24>>2];n[B+28>>2]=n[y+28>>2];n[E>>2]=n[A>>2];n[E+4>>2]=n[A+4>>2];n[E+8>>2]=n[A+8>>2];n[E+12>>2]=n[A+12>>2];n[E+16>>2]=n[A+16>>2];n[E+20>>2]=n[A+20>>2];n[E+24>>2]=n[A+24>>2];n[E+28>>2]=n[A+28>>2];Ct(B,E,8,-460954743,-2016278654);n[v>>2]=n[B>>2];n[v+4>>2]=n[B+4>>2];n[v+8>>2]=n[B+8>>2];n[v+12>>2]=n[B+12>>2];n[v+16>>2]=n[B+16>>2];n[v+20>>2]=n[B+20>>2];n[v+24>>2]=n[B+24>>2];n[v+28>>2]=n[B+28>>2];n[e>>2]=n[m>>2];n[e+4>>2]=n[m+4>>2];n[e+8>>2]=n[m+8>>2];n[e+12>>2]=n[m+12>>2];n[e+16>>2]=n[m+16>>2];n[e+20>>2]=n[m+20>>2];n[e+24>>2]=n[m+24>>2];n[e+28>>2]=n[m+28>>2];W=e+32|0;n[W>>2]=n[g>>2];n[W+4>>2]=n[g+4>>2];n[W+8>>2]=n[g+8>>2];n[W+12>>2]=n[g+12>>2];n[W+16>>2]=n[g+16>>2];n[W+20>>2]=n[g+20>>2];n[W+24>>2]=n[g+24>>2];n[W+28>>2]=n[g+28>>2];W=e+64|0;n[W>>2]=n[v>>2];n[W+4>>2]=n[v+4>>2];n[W+8>>2]=n[v+8>>2];n[W+12>>2]=n[v+12>>2];n[W+16>>2]=n[v+16>>2];n[W+20>>2]=n[v+20>>2];n[W+24>>2]=n[v+24>>2];n[W+28>>2]=n[v+28>>2]}p=q;return}}while(0);p=q;return}function Wi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0;t=p;p=p+448|0;f=t+416|0;i=t+384|0;d=t+352|0;r=t+320|0;c=t+288|0;o=t+256|0;s=t+224|0;u=t+192|0;g=t+160|0;b=t+128|0;l=t+96|0;m=t+64|0;y=t+32|0;v=t;n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[i+12>>2]=n[a+12>>2];n[i+16>>2]=n[a+16>>2];n[i+20>>2]=n[a+20>>2];n[i+24>>2]=n[a+24>>2];n[i+28>>2]=n[a+28>>2];n[f>>2]=n[a>>2];n[f+4>>2]=n[a+4>>2];n[f+8>>2]=n[a+8>>2];n[f+12>>2]=n[a+12>>2];n[f+16>>2]=n[a+16>>2];n[f+20>>2]=n[a+20>>2];n[f+24>>2]=n[a+24>>2];n[f+28>>2]=n[a+28>>2];Ct(i,f,8,-460954743,-2016278654);n[v>>2]=n[i>>2];n[v+4>>2]=n[i+4>>2];n[v+8>>2]=n[i+8>>2];n[v+12>>2]=n[i+12>>2];n[v+16>>2]=n[i+16>>2];n[v+20>>2]=n[i+20>>2];n[v+24>>2]=n[i+24>>2];n[v+28>>2]=n[i+28>>2];h=a+32|0;n[i>>2]=n[h>>2];n[i+4>>2]=n[h+4>>2];n[i+8>>2]=n[h+8>>2];n[i+12>>2]=n[h+12>>2];n[i+16>>2]=n[h+16>>2];n[i+20>>2]=n[h+20>>2];n[i+24>>2]=n[h+24>>2];n[i+28>>2]=n[h+28>>2];n[f>>2]=n[h>>2];n[f+4>>2]=n[h+4>>2];n[f+8>>2]=n[h+8>>2];n[f+12>>2]=n[h+12>>2];n[f+16>>2]=n[h+16>>2];n[f+20>>2]=n[h+20>>2];n[f+24>>2]=n[h+24>>2];n[f+28>>2]=n[h+28>>2];Ct(i,f,8,-460954743,-2016278654);n[y>>2]=n[i>>2];n[y+4>>2]=n[i+4>>2];n[y+8>>2]=n[i+8>>2];n[y+12>>2]=n[i+12>>2];n[y+16>>2]=n[i+16>>2];n[y+20>>2]=n[i+20>>2];n[y+24>>2]=n[i+24>>2];n[y+28>>2]=n[i+28>>2];n[i>>2]=n[y>>2];n[i+4>>2]=n[y+4>>2];n[i+8>>2]=n[y+8>>2];n[i+12>>2]=n[y+12>>2];n[i+16>>2]=n[y+16>>2];n[i+20>>2]=n[y+20>>2];n[i+24>>2]=n[y+24>>2];n[i+28>>2]=n[y+28>>2];n[f>>2]=n[y>>2];n[f+4>>2]=n[y+4>>2];n[f+8>>2]=n[y+8>>2];n[f+12>>2]=n[y+12>>2];n[f+16>>2]=n[y+16>>2];n[f+20>>2]=n[y+20>>2];n[f+24>>2]=n[y+24>>2];n[f+28>>2]=n[y+28>>2];Ct(i,f,8,-460954743,-2016278654);n[m>>2]=n[i>>2];n[m+4>>2]=n[i+4>>2];n[m+8>>2]=n[i+8>>2];n[m+12>>2]=n[i+12>>2];n[m+16>>2]=n[i+16>>2];n[m+20>>2]=n[i+20>>2];n[m+24>>2]=n[i+24>>2];n[m+28>>2]=n[i+28>>2];n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[i+12>>2]=n[a+12>>2];n[i+16>>2]=n[a+16>>2];n[i+20>>2]=n[a+20>>2];n[i+24>>2]=n[a+24>>2];n[i+28>>2]=n[a+28>>2];n[f>>2]=n[y>>2];n[f+4>>2]=n[y+4>>2];n[f+8>>2]=n[y+8>>2];n[f+12>>2]=n[y+12>>2];n[f+16>>2]=n[y+16>>2];n[f+20>>2]=n[y+20>>2];n[f+24>>2]=n[y+24>>2];n[f+28>>2]=n[y+28>>2];Tt(i,f,8);n[d>>2]=n[i>>2];n[d+4>>2]=n[i+4>>2];n[d+8>>2]=n[i+8>>2];n[d+12>>2]=n[i+12>>2];n[d+16>>2]=n[i+16>>2];n[d+20>>2]=n[i+20>>2];n[d+24>>2]=n[i+24>>2];n[d+28>>2]=n[i+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];Ct(i,f,8,-460954743,-2016278654);n[r>>2]=n[i>>2];n[r+4>>2]=n[i+4>>2];n[r+8>>2]=n[i+8>>2];n[r+12>>2]=n[i+12>>2];n[r+16>>2]=n[i+16>>2];n[r+20>>2]=n[i+20>>2];n[r+24>>2]=n[i+24>>2];n[r+28>>2]=n[i+28>>2];n[i>>2]=n[r>>2];n[i+4>>2]=n[r+4>>2];n[i+8>>2]=n[r+8>>2];n[i+12>>2]=n[r+12>>2];n[i+16>>2]=n[r+16>>2];n[i+20>>2]=n[r+20>>2];n[i+24>>2]=n[r+24>>2];n[i+28>>2]=n[r+28>>2];n[f>>2]=n[v>>2];n[f+4>>2]=n[v+4>>2];n[f+8>>2]=n[v+8>>2];n[f+12>>2]=n[v+12>>2];n[f+16>>2]=n[v+16>>2];n[f+20>>2]=n[v+20>>2];n[f+24>>2]=n[v+24>>2];n[f+28>>2]=n[v+28>>2];jt(i,f,8);n[c>>2]=n[i>>2];n[c+4>>2]=n[i+4>>2];n[c+8>>2]=n[i+8>>2];n[c+12>>2]=n[i+12>>2];n[c+16>>2]=n[i+16>>2];n[c+20>>2]=n[i+20>>2];n[c+24>>2]=n[i+24>>2];n[c+28>>2]=n[i+28>>2];n[i>>2]=n[c>>2];n[i+4>>2]=n[c+4>>2];n[i+8>>2]=n[c+8>>2];n[i+12>>2]=n[c+12>>2];n[i+16>>2]=n[c+16>>2];n[i+20>>2]=n[c+20>>2];n[i+24>>2]=n[c+24>>2];n[i+28>>2]=n[c+28>>2];n[f>>2]=n[m>>2];n[f+4>>2]=n[m+4>>2];n[f+8>>2]=n[m+8>>2];n[f+12>>2]=n[m+12>>2];n[f+16>>2]=n[m+16>>2];n[f+20>>2]=n[m+20>>2];n[f+24>>2]=n[m+24>>2];n[f+28>>2]=n[m+28>>2];jt(i,f,8);n[l>>2]=n[i>>2];n[l+4>>2]=n[i+4>>2];n[l+8>>2]=n[i+8>>2];n[l+12>>2]=n[i+12>>2];n[l+16>>2]=n[i+16>>2];n[l+20>>2]=n[i+20>>2];n[l+24>>2]=n[i+24>>2];n[l+28>>2]=n[i+28>>2];n[d>>2]=n[l>>2];n[d+4>>2]=n[l+4>>2];n[d+8>>2]=n[l+8>>2];n[d+12>>2]=n[l+12>>2];n[d+16>>2]=n[l+16>>2];n[d+20>>2]=n[l+20>>2];n[d+24>>2]=n[l+24>>2];n[d+28>>2]=n[l+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[l>>2];n[f+4>>2]=n[l+4>>2];n[f+8>>2]=n[l+8>>2];n[f+12>>2]=n[l+12>>2];n[f+16>>2]=n[l+16>>2];n[f+20>>2]=n[l+20>>2];n[f+24>>2]=n[l+24>>2];n[f+28>>2]=n[l+28>>2];Tt(i,f,8);n[l>>2]=n[i>>2];n[l+4>>2]=n[i+4>>2];n[l+8>>2]=n[i+8>>2];n[l+12>>2]=n[i+12>>2];n[l+16>>2]=n[i+16>>2];n[l+20>>2]=n[i+20>>2];n[l+24>>2]=n[i+24>>2];n[l+28>>2]=n[i+28>>2];n[d>>2]=n[v>>2];n[d+4>>2]=n[v+4>>2];n[d+8>>2]=n[v+8>>2];n[d+12>>2]=n[v+12>>2];n[d+16>>2]=n[v+16>>2];n[d+20>>2]=n[v+20>>2];n[d+24>>2]=n[v+24>>2];n[d+28>>2]=n[v+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[v>>2];n[f+4>>2]=n[v+4>>2];n[f+8>>2]=n[v+8>>2];n[f+12>>2]=n[v+12>>2];n[f+16>>2]=n[v+16>>2];n[f+20>>2]=n[v+20>>2];n[f+24>>2]=n[v+24>>2];n[f+28>>2]=n[v+28>>2];Tt(i,f,8);n[r>>2]=n[i>>2];n[r+4>>2]=n[i+4>>2];n[r+8>>2]=n[i+8>>2];n[r+12>>2]=n[i+12>>2];n[r+16>>2]=n[i+16>>2];n[r+20>>2]=n[i+20>>2];n[r+24>>2]=n[i+24>>2];n[r+28>>2]=n[i+28>>2];n[i>>2]=n[r>>2];n[i+4>>2]=n[r+4>>2];n[i+8>>2]=n[r+8>>2];n[i+12>>2]=n[r+12>>2];n[i+16>>2]=n[r+16>>2];n[i+20>>2]=n[r+20>>2];n[i+24>>2]=n[r+24>>2];n[i+28>>2]=n[r+28>>2];n[f>>2]=n[v>>2];n[f+4>>2]=n[v+4>>2];n[f+8>>2]=n[v+8>>2];n[f+12>>2]=n[v+12>>2];n[f+16>>2]=n[v+16>>2];n[f+20>>2]=n[v+20>>2];n[f+24>>2]=n[v+24>>2];n[f+28>>2]=n[v+28>>2];Tt(i,f,8);n[b>>2]=n[i>>2];n[b+4>>2]=n[i+4>>2];n[b+8>>2]=n[i+8>>2];n[b+12>>2]=n[i+12>>2];n[b+16>>2]=n[i+16>>2];n[b+20>>2]=n[i+20>>2];n[b+24>>2]=n[i+24>>2];n[b+28>>2]=n[i+28>>2];n[i>>2]=n[b>>2];n[i+4>>2]=n[b+4>>2];n[i+8>>2]=n[b+8>>2];n[i+12>>2]=n[b+12>>2];n[i+16>>2]=n[b+16>>2];n[i+20>>2]=n[b+20>>2];n[i+24>>2]=n[b+24>>2];n[i+28>>2]=n[b+28>>2];n[f>>2]=n[b>>2];n[f+4>>2]=n[b+4>>2];n[f+8>>2]=n[b+8>>2];n[f+12>>2]=n[b+12>>2];n[f+16>>2]=n[b+16>>2];n[f+20>>2]=n[b+20>>2];n[f+24>>2]=n[b+24>>2];n[f+28>>2]=n[b+28>>2];Ct(i,f,8,-460954743,-2016278654);n[g>>2]=n[i>>2];n[g+4>>2]=n[i+4>>2];n[g+8>>2]=n[i+8>>2];n[g+12>>2]=n[i+12>>2];n[g+16>>2]=n[i+16>>2];n[g+20>>2]=n[i+20>>2];n[g+24>>2]=n[i+24>>2];n[g+28>>2]=n[i+28>>2];n[d>>2]=n[l>>2];n[d+4>>2]=n[l+4>>2];n[d+8>>2]=n[l+8>>2];n[d+12>>2]=n[l+12>>2];n[d+16>>2]=n[l+16>>2];n[d+20>>2]=n[l+20>>2];n[d+24>>2]=n[l+24>>2];n[d+28>>2]=n[l+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[l>>2];n[f+4>>2]=n[l+4>>2];n[f+8>>2]=n[l+8>>2];n[f+12>>2]=n[l+12>>2];n[f+16>>2]=n[l+16>>2];n[f+20>>2]=n[l+20>>2];n[f+24>>2]=n[l+24>>2];n[f+28>>2]=n[l+28>>2];Tt(i,f,8);n[r>>2]=n[i>>2];n[r+4>>2]=n[i+4>>2];n[r+8>>2]=n[i+8>>2];n[r+12>>2]=n[i+12>>2];n[r+16>>2]=n[i+16>>2];n[r+20>>2]=n[i+20>>2];n[r+24>>2]=n[i+24>>2];n[r+28>>2]=n[i+28>>2];n[i>>2]=n[g>>2];n[i+4>>2]=n[g+4>>2];n[i+8>>2]=n[g+8>>2];n[i+12>>2]=n[g+12>>2];n[i+16>>2]=n[g+16>>2];n[i+20>>2]=n[g+20>>2];n[i+24>>2]=n[g+24>>2];n[i+28>>2]=n[g+28>>2];n[f>>2]=n[r>>2];n[f+4>>2]=n[r+4>>2];n[f+8>>2]=n[r+8>>2];n[f+12>>2]=n[r+12>>2];n[f+16>>2]=n[r+16>>2];n[f+20>>2]=n[r+20>>2];n[f+24>>2]=n[r+24>>2];n[f+28>>2]=n[r+28>>2];jt(i,f,8);n[u>>2]=n[i>>2];n[u+4>>2]=n[i+4>>2];n[u+8>>2]=n[i+8>>2];n[u+12>>2]=n[i+12>>2];n[u+16>>2]=n[i+16>>2];n[u+20>>2]=n[i+20>>2];n[u+24>>2]=n[i+24>>2];n[u+28>>2]=n[i+28>>2];n[d>>2]=n[m>>2];n[d+4>>2]=n[m+4>>2];n[d+8>>2]=n[m+8>>2];n[d+12>>2]=n[m+12>>2];n[d+16>>2]=n[m+16>>2];n[d+20>>2]=n[m+20>>2];n[d+24>>2]=n[m+24>>2];n[d+28>>2]=n[m+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[m>>2];n[f+4>>2]=n[m+4>>2];n[f+8>>2]=n[m+8>>2];n[f+12>>2]=n[m+12>>2];n[f+16>>2]=n[m+16>>2];n[f+20>>2]=n[m+20>>2];n[f+24>>2]=n[m+24>>2];n[f+28>>2]=n[m+28>>2];Tt(i,f,8);n[s>>2]=n[i>>2];n[s+4>>2]=n[i+4>>2];n[s+8>>2]=n[i+8>>2];n[s+12>>2]=n[i+12>>2];n[s+16>>2]=n[i+16>>2];n[s+20>>2]=n[i+20>>2];n[s+24>>2]=n[i+24>>2];n[s+28>>2]=n[i+28>>2];n[d>>2]=n[s>>2];n[d+4>>2]=n[s+4>>2];n[d+8>>2]=n[s+8>>2];n[d+12>>2]=n[s+12>>2];n[d+16>>2]=n[s+16>>2];n[d+20>>2]=n[s+20>>2];n[d+24>>2]=n[s+24>>2];n[d+28>>2]=n[s+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[s>>2];n[f+4>>2]=n[s+4>>2];n[f+8>>2]=n[s+8>>2];n[f+12>>2]=n[s+12>>2];n[f+16>>2]=n[s+16>>2];n[f+20>>2]=n[s+20>>2];n[f+24>>2]=n[s+24>>2];n[f+28>>2]=n[s+28>>2];Tt(i,f,8);n[s>>2]=n[i>>2];n[s+4>>2]=n[i+4>>2];n[s+8>>2]=n[i+8>>2];n[s+12>>2]=n[i+12>>2];n[s+16>>2]=n[i+16>>2];n[s+20>>2]=n[i+20>>2];n[s+24>>2]=n[i+24>>2];n[s+28>>2]=n[i+28>>2];n[d>>2]=n[s>>2];n[d+4>>2]=n[s+4>>2];n[d+8>>2]=n[s+8>>2];n[d+12>>2]=n[s+12>>2];n[d+16>>2]=n[s+16>>2];n[d+20>>2]=n[s+20>>2];n[d+24>>2]=n[s+24>>2];n[d+28>>2]=n[s+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[s>>2];n[f+4>>2]=n[s+4>>2];n[f+8>>2]=n[s+8>>2];n[f+12>>2]=n[s+12>>2];n[f+16>>2]=n[s+16>>2];n[f+20>>2]=n[s+20>>2];n[f+24>>2]=n[s+24>>2];n[f+28>>2]=n[s+28>>2];Tt(i,f,8);n[s>>2]=n[i>>2];n[s+4>>2]=n[i+4>>2];n[s+8>>2]=n[i+8>>2];n[s+12>>2]=n[i+12>>2];n[s+16>>2]=n[i+16>>2];n[s+20>>2]=n[i+20>>2];n[s+24>>2]=n[i+24>>2];n[s+28>>2]=n[i+28>>2];a=a+64|0;n[i>>2]=n[h>>2];n[i+4>>2]=n[h+4>>2];n[i+8>>2]=n[h+8>>2];n[i+12>>2]=n[h+12>>2];n[i+16>>2]=n[h+16>>2];n[i+20>>2]=n[h+20>>2];n[i+24>>2]=n[h+24>>2];n[i+28>>2]=n[h+28>>2];n[f>>2]=n[a>>2];n[f+4>>2]=n[a+4>>2];n[f+8>>2]=n[a+8>>2];n[f+12>>2]=n[a+12>>2];n[f+16>>2]=n[a+16>>2];n[f+20>>2]=n[a+20>>2];n[f+24>>2]=n[a+24>>2];n[f+28>>2]=n[a+28>>2];Ct(i,f,8,-460954743,-2016278654);n[o>>2]=n[i>>2];n[o+4>>2]=n[i+4>>2];n[o+8>>2]=n[i+8>>2];n[o+12>>2]=n[i+12>>2];n[o+16>>2]=n[i+16>>2];n[o+20>>2]=n[i+20>>2];n[o+24>>2]=n[i+24>>2];n[o+28>>2]=n[i+28>>2];n[e>>2]=n[u>>2];n[e+4>>2]=n[u+4>>2];n[e+8>>2]=n[u+8>>2];n[e+12>>2]=n[u+12>>2];n[e+16>>2]=n[u+16>>2];n[e+20>>2]=n[u+20>>2];n[e+24>>2]=n[u+24>>2];n[e+28>>2]=n[u+28>>2];n[i>>2]=n[l>>2];n[i+4>>2]=n[l+4>>2];n[i+8>>2]=n[l+8>>2];n[i+12>>2]=n[l+12>>2];n[i+16>>2]=n[l+16>>2];n[i+20>>2]=n[l+20>>2];n[i+24>>2]=n[l+24>>2];n[i+28>>2]=n[l+28>>2];n[f>>2]=n[u>>2];n[f+4>>2]=n[u+4>>2];n[f+8>>2]=n[u+8>>2];n[f+12>>2]=n[u+12>>2];n[f+16>>2]=n[u+16>>2];n[f+20>>2]=n[u+20>>2];n[f+24>>2]=n[u+24>>2];n[f+28>>2]=n[u+28>>2];jt(i,f,8);n[d>>2]=n[i>>2];n[d+4>>2]=n[i+4>>2];n[d+8>>2]=n[i+8>>2];n[d+12>>2]=n[i+12>>2];n[d+16>>2]=n[i+16>>2];n[d+20>>2]=n[i+20>>2];n[d+24>>2]=n[i+24>>2];n[d+28>>2]=n[i+28>>2];n[i>>2]=n[b>>2];n[i+4>>2]=n[b+4>>2];n[i+8>>2]=n[b+8>>2];n[i+12>>2]=n[b+12>>2];n[i+16>>2]=n[b+16>>2];n[i+20>>2]=n[b+20>>2];n[i+24>>2]=n[b+24>>2];n[i+28>>2]=n[b+28>>2];n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];Ct(i,f,8,-460954743,-2016278654);n[r>>2]=n[i>>2];n[r+4>>2]=n[i+4>>2];n[r+8>>2]=n[i+8>>2];n[r+12>>2]=n[i+12>>2];n[r+16>>2]=n[i+16>>2];n[r+20>>2]=n[i+20>>2];n[r+24>>2]=n[i+24>>2];n[r+28>>2]=n[i+28>>2];n[i>>2]=n[r>>2];n[i+4>>2]=n[r+4>>2];n[i+8>>2]=n[r+8>>2];n[i+12>>2]=n[r+12>>2];n[i+16>>2]=n[r+16>>2];n[i+20>>2]=n[r+20>>2];n[i+24>>2]=n[r+24>>2];n[i+28>>2]=n[r+28>>2];n[f>>2]=n[s>>2];n[f+4>>2]=n[s+4>>2];n[f+8>>2]=n[s+8>>2];n[f+12>>2]=n[s+12>>2];n[f+16>>2]=n[s+16>>2];n[f+20>>2]=n[s+20>>2];n[f+24>>2]=n[s+24>>2];n[f+28>>2]=n[s+28>>2];jt(i,f,8);n[c>>2]=n[i>>2];n[c+4>>2]=n[i+4>>2];n[c+8>>2]=n[i+8>>2];n[c+12>>2]=n[i+12>>2];n[c+16>>2]=n[i+16>>2];n[c+20>>2]=n[i+20>>2];n[c+24>>2]=n[i+24>>2];n[c+28>>2]=n[i+28>>2];n[d>>2]=n[o>>2];n[d+4>>2]=n[o+4>>2];n[d+8>>2]=n[o+8>>2];n[d+12>>2]=n[o+12>>2];n[d+16>>2]=n[o+16>>2];n[d+20>>2]=n[o+20>>2];n[d+24>>2]=n[o+24>>2];n[d+28>>2]=n[o+28>>2];n[i>>2]=n[d>>2];n[i+4>>2]=n[d+4>>2];n[i+8>>2]=n[d+8>>2];n[i+12>>2]=n[d+12>>2];n[i+16>>2]=n[d+16>>2];n[i+20>>2]=n[d+20>>2];n[i+24>>2]=n[d+24>>2];n[i+28>>2]=n[d+28>>2];n[f>>2]=n[o>>2];n[f+4>>2]=n[o+4>>2];n[f+8>>2]=n[o+8>>2];n[f+12>>2]=n[o+12>>2];n[f+16>>2]=n[o+16>>2];n[f+20>>2]=n[o+20>>2];n[f+24>>2]=n[o+24>>2];n[f+28>>2]=n[o+28>>2];Tt(i,f,8);n[r>>2]=n[i>>2];n[r+4>>2]=n[i+4>>2];n[r+8>>2]=n[i+8>>2];n[r+12>>2]=n[i+12>>2];n[r+16>>2]=n[i+16>>2];n[r+20>>2]=n[i+20>>2];n[r+24>>2]=n[i+24>>2];n[r+28>>2]=n[i+28>>2];a=e+32|0;n[a>>2]=n[c>>2];n[a+4>>2]=n[c+4>>2];n[a+8>>2]=n[c+8>>2];n[a+12>>2]=n[c+12>>2];n[a+16>>2]=n[c+16>>2];n[a+20>>2]=n[c+20>>2];n[a+24>>2]=n[c+24>>2];n[a+28>>2]=n[c+28>>2];a=e+64|0;n[a>>2]=n[r>>2];n[a+4>>2]=n[r+4>>2];n[a+8>>2]=n[r+8>>2];n[a+12>>2]=n[r+12>>2];n[a+16>>2]=n[r+16>>2];n[a+20>>2]=n[r+20>>2];n[a+24>>2]=n[r+24>>2];n[a+28>>2]=n[r+28>>2];p=t;return}function Yi(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;u=p;p=p+416|0;o=u+320|0;d=u+224|0;f=u+192|0;b=u+96|0;s=u;i=s;r=a;c=i+96|0;do{n[i>>2]=n[r>>2];i=i+4|0;r=r+4|0}while((i|0)<(c|0));n[b>>2]=0;n[b+4>>2]=0;n[b+8>>2]=0;n[b+12>>2]=0;n[b+16>>2]=0;n[b+20>>2]=0;n[b+24>>2]=0;n[b+28>>2]=0;a=b+32|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=b+40|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=b+48|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=b+56|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;a=b+64|0;n[a>>2]=0;n[a+4>>2]=0;n[a+8>>2]=0;n[a+12>>2]=0;n[a+16>>2]=0;n[a+20>>2]=0;n[a+24>>2]=0;n[a+28>>2]=0;n[d>>2]=n[t>>2];n[d+4>>2]=n[t+4>>2];n[d+8>>2]=n[t+8>>2];n[d+12>>2]=n[t+12>>2];n[d+16>>2]=n[t+16>>2];n[d+20>>2]=n[t+20>>2];n[d+24>>2]=n[t+24>>2];n[d+28>>2]=n[t+28>>2];t=o;n[t>>2]=1;n[t+4>>2]=0;t=o+8|0;n[t>>2]=0;n[t+4>>2]=0;n[t+8>>2]=0;n[t+12>>2]=0;n[t+16>>2]=0;n[t+20>>2]=0;Ct(d,o,72,-268435457,-1025378925);n[f>>2]=n[d>>2];n[f+4>>2]=n[d+4>>2];n[f+8>>2]=n[d+8>>2];n[f+12>>2]=n[d+12>>2];n[f+16>>2]=n[d+16>>2];n[f+20>>2]=n[d+20>>2];n[f+24>>2]=n[d+24>>2];n[f+28>>2]=n[d+28>>2];t=0;a=256;e:while(1){if(t)do{if(!a){a=10;break e}a=a+-1|0;if(a>>>0>255){a=10;break e}t=f+(a>>>6<<3)|0;r=n[t>>2]|0;t=n[t+4>>2]|0;i=nd(1,0,a&63|0)|0;t=(r&i|0)==0&(t&T|0)==0;Wi(o,b);i=b;r=o;c=i+96|0;do{n[i>>2]=n[r>>2];i=i+4|0;r=r+4|0}while((i|0)<(c|0))}while(t);else do{if(!a){a=10;break e}a=a+-1|0;if(a>>>0>255){a=10;break e}i=f+(a>>>6<<3)|0;r=n[i>>2]|0;i=n[i+4>>2]|0;c=nd(1,0,a&63|0)|0}while((r&c|0)==0&(i&T|0)==0);i=d;r=b;c=i+96|0;do{n[i>>2]=n[r>>2];i=i+4|0;r=r+4|0}while((i|0)<(c|0));i=o;r=s;c=i+96|0;do{n[i>>2]=n[r>>2];i=i+4|0;r=r+4|0}while((i|0)<(c|0));Gi(b,d,o);t=1}if((a|0)==10){i=e;r=b;c=i+96|0;do{n[i>>2]=n[r>>2];i=i+4|0;r=r+4|0}while((i|0)<(c|0));p=u;return}}function Ki(e,a,t){e=e|0;a=a|0;t=t|0;var i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0;b=p;p=p+496|0;i=b+288|0;h=b+256|0;g=b+224|0;m=b+192|0;u=b+160|0;l=b+128|0;o=b+96|0;f=b+64|0;y=b+32|0;v=b;s=b+422|0;d=b+352|0;n[v>>2]=n[a>>2];n[v+4>>2]=n[a+4>>2];n[v+8>>2]=n[a+8>>2];n[v+12>>2]=n[a+12>>2];n[v+16>>2]=n[a+16>>2];n[v+20>>2]=n[a+20>>2];n[v+24>>2]=n[a+24>>2];n[v+28>>2]=n[a+28>>2];n[y>>2]=n[t>>2];n[y+4>>2]=n[t+4>>2];n[y+8>>2]=n[t+8>>2];n[y+12>>2]=n[t+12>>2];n[y+16>>2]=n[t+16>>2];n[y+20>>2]=n[t+20>>2];n[y+24>>2]=n[t+24>>2];n[y+28>>2]=n[t+28>>2];n[f>>2]=n[a>>2];n[f+4>>2]=n[a+4>>2];n[f+8>>2]=n[a+8>>2];n[f+12>>2]=n[a+12>>2];n[f+16>>2]=n[a+16>>2];n[f+20>>2]=n[a+20>>2];n[f+24>>2]=n[a+24>>2];n[f+28>>2]=n[a+28>>2];n[o>>2]=n[t>>2];n[o+4>>2]=n[t+4>>2];n[o+8>>2]=n[t+8>>2];n[o+12>>2]=n[t+12>>2];n[o+16>>2]=n[t+16>>2];n[o+20>>2]=n[t+20>>2];n[o+24>>2]=n[t+24>>2];n[o+28>>2]=n[t+28>>2];n[h>>2]=n[y>>2];n[h+4>>2]=n[y+4>>2];n[h+8>>2]=n[y+8>>2];n[h+12>>2]=n[y+12>>2];n[h+16>>2]=n[y+16>>2];n[h+20>>2]=n[y+20>>2];n[h+24>>2]=n[y+24>>2];n[h+28>>2]=n[y+28>>2];n[i>>2]=n[t>>2];n[i+4>>2]=n[t+4>>2];n[i+8>>2]=n[t+8>>2];n[i+12>>2]=n[t+12>>2];n[i+16>>2]=n[t+16>>2];n[i+20>>2]=n[t+20>>2];n[i+24>>2]=n[t+24>>2];n[i+28>>2]=n[t+28>>2];Ct(h,i,8,-460954743,-2016278654);n[l>>2]=n[h>>2];n[l+4>>2]=n[h+4>>2];n[l+8>>2]=n[h+8>>2];n[l+12>>2]=n[h+12>>2];n[l+16>>2]=n[h+16>>2];n[l+20>>2]=n[h+20>>2];n[l+24>>2]=n[h+24>>2];n[l+28>>2]=n[h+28>>2];n[h>>2]=n[v>>2];n[h+4>>2]=n[v+4>>2];n[h+8>>2]=n[v+8>>2];n[h+12>>2]=n[v+12>>2];n[h+16>>2]=n[v+16>>2];n[h+20>>2]=n[v+20>>2];n[h+24>>2]=n[v+24>>2];n[h+28>>2]=n[v+28>>2];n[i>>2]=n[a>>2];n[i+4>>2]=n[a+4>>2];n[i+8>>2]=n[a+8>>2];n[i+12>>2]=n[a+12>>2];n[i+16>>2]=n[a+16>>2];n[i+20>>2]=n[a+20>>2];n[i+24>>2]=n[a+24>>2];n[i+28>>2]=n[a+28>>2];Ct(h,i,8,-460954743,-2016278654);n[g>>2]=n[h>>2];n[g+4>>2]=n[h+4>>2];n[g+8>>2]=n[h+8>>2];n[g+12>>2]=n[h+12>>2];n[g+16>>2]=n[h+16>>2];n[g+20>>2]=n[h+20>>2];n[g+24>>2]=n[h+24>>2];n[g+28>>2]=n[h+28>>2];n[h>>2]=n[g>>2];n[h+4>>2]=n[g+4>>2];n[h+8>>2]=n[g+8>>2];n[h+12>>2]=n[g+12>>2];n[h+16>>2]=n[g+16>>2];n[h+20>>2]=n[g+20>>2];n[h+24>>2]=n[g+24>>2];n[h+28>>2]=n[g+28>>2];n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];n[i+12>>2]=n[f+12>>2];n[i+16>>2]=n[f+16>>2];n[i+20>>2]=n[f+20>>2];n[i+24>>2]=n[f+24>>2];n[i+28>>2]=n[f+28>>2];Ct(h,i,8,-460954743,-2016278654);n[m>>2]=n[h>>2];n[m+4>>2]=n[h+4>>2];n[m+8>>2]=n[h+8>>2];n[m+12>>2]=n[h+12>>2];n[m+16>>2]=n[h+16>>2];n[m+20>>2]=n[h+20>>2];n[m+24>>2]=n[h+24>>2];n[m+28>>2]=n[h+28>>2];n[h>>2]=n[m>>2];n[h+4>>2]=n[m+4>>2];n[h+8>>2]=n[m+8>>2];n[h+12>>2]=n[m+12>>2];n[h+16>>2]=n[m+16>>2];n[h+20>>2]=n[m+20>>2];n[h+24>>2]=n[m+24>>2];n[h+28>>2]=n[m+28>>2];t=i;n[t>>2]=1353525463;n[t+4>>2]=2048379561;t=i+8|0;n[t>>2]=-514514503;n[t+4>>2]=527090042;t=i+16|0;n[t>>2]=1768673924;n[t+4>>2]=860613198;t=i+24|0;n[t>>2]=-837313138;n[t+4>>2]=706701124;Tt(h,i,8);n[u>>2]=n[h>>2];n[u+4>>2]=n[h+4>>2];n[u+8>>2]=n[h+8>>2];n[u+12>>2]=n[h+12>>2];n[u+16>>2]=n[h+16>>2];n[u+20>>2]=n[h+20>>2];n[u+24>>2]=n[h+24>>2];n[u+28>>2]=n[h+28>>2];if(!(Lo(l,u,32)|0)){n[i>>2]=n[f>>2];n[i+4>>2]=n[f+4>>2];n[i+8>>2]=n[f+8>>2];n[i+12>>2]=n[f+12>>2];n[i+16>>2]=n[f+16>>2];n[i+20>>2]=n[f+20>>2];n[i+24>>2]=n[f+24>>2];n[i+28>>2]=n[f+28>>2];t=i+32|0;n[t>>2]=n[o>>2];n[t+4>>2]=n[o+4>>2];n[t+8>>2]=n[o+8>>2];n[t+12>>2]=n[o+12>>2];n[t+16>>2]=n[o+16>>2];n[t+20>>2]=n[o+20>>2];n[t+24>>2]=n[o+24>>2];n[t+28>>2]=n[o+28>>2];t=s+6|0;a=t+64|0;do{c[t>>1]=c[i>>1]|0;t=t+2|0;i=i+2|0}while((t|0)<(a|0));t=d;i=s;a=t+70|0;do{c[t>>1]=c[i>>1]|0;t=t+2|0;i=i+2|0}while((t|0)<(a|0));t=e+8|0;i=d+6|0;a=t+64|0;do{c[t>>1]=c[i>>1]|0;t=t+2|0;i=i+2|0}while((t|0)<(a|0));y=0;r[e>>0]=y;p=b;return}else{r[e+1>>0]=0;y=1;r[e>>0]=y;p=b;return}}function Qi(e,a){e=e|0;a=a|0;n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];n[e+12>>2]=n[a+12>>2];n[e+16>>2]=n[a+16>>2];n[e+20>>2]=n[a+20>>2];n[e+24>>2]=n[a+24>>2];n[e+28>>2]=n[a+28>>2];return}function Zi(e,a){e=e|0;a=a|0;a=a+32|0;n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];n[e+12>>2]=n[a+12>>2];n[e+16>>2]=n[a+16>>2];n[e+20>>2]=n[a+20>>2];n[e+24>>2]=n[a+24>>2];n[e+28>>2]=n[a+28>>2];return}function Ji(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0;o=p;p=p+240|0;i=o+168|0;c=o+96|0;t=o;f=t;r=f+96|0;do{n[f>>2]=n[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(r|0));Jt(c,t);t=n[c>>2]|0;f=i;a=c+8|0;r=f+64|0;do{n[f>>2]=n[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(r|0));if(!t){r=0;i=0;f=e;c=f;n[c>>2]=r;f=f+4|0;n[f>>2]=i;p=o;return}f=e+8|0;a=i;r=f+64|0;do{n[f>>2]=n[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(r|0));r=1;i=0;f=e;c=f;n[c>>2]=r;f=f+4|0;n[f>>2]=i;p=o;return}function Xi(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0;i=p;p=p+128|0;t=i+64|0;r=i;c=r;f=a;o=c+64|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));n[t>>2]=n[a>>2];n[t+4>>2]=n[a+4>>2];n[t+8>>2]=n[a+8>>2];n[t+12>>2]=n[a+12>>2];n[t+16>>2]=n[a+16>>2];n[t+20>>2]=n[a+20>>2];n[t+24>>2]=n[a+24>>2];n[t+28>>2]=n[a+28>>2];f=r+32|0;c=t+32|0;n[c>>2]=n[f>>2];n[c+4>>2]=n[f+4>>2];n[c+8>>2]=n[f+8>>2];n[c+12>>2]=n[f+12>>2];n[c+16>>2]=n[f+16>>2];n[c+20>>2]=n[f+20>>2];n[c+24>>2]=n[f+24>>2];n[c+28>>2]=n[f+28>>2];c=e;f=t;o=c+64|0;do{n[c>>2]=n[f>>2];c=c+4|0;f=f+4|0}while((c|0)<(o|0));o=e+64|0;n[o>>2]=-980480611;n[o+4>>2]=-748862579;o=e+72|0;n[o>>2]=-171504835;n[o+4>>2]=175696680;o=e+80|0;n[o>>2]=2021213740;n[o+4>>2]=1718526831;o=e+88|0;n[o>>2]=-1710760145;n[o+4>>2]=235567041;p=i;return}function $i(e){e=e|0;var a=0,t=0;a=e;t=a+64|0;do{n[a>>2]=0;a=a+4|0}while((a|0)<(t|0));a=e+64|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=e+72|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=e+80|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=e+88|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;a=e+96|0;t=a+96|0;do{n[a>>2]=0;a=a+4|0}while((a|0)<(t|0));return}function ef(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0;m=p;p=p+656|0;u=m+520|0;b=m+448|0;s=m+384|0;d=m+320|0;o=m+256|0;f=m+128|0;h=m+64|0;l=m;c=a+128|0;i=c;if((((((((n[i>>2]|0)==0&(n[i+4>>2]|0)==0?(i=a+136|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+144|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+152|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+160|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+168|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+176|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=a+184|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0){h=e;n[h>>2]=0;n[h+4>>2]=0;p=m;return}r=u;n[r>>2]=-980480611;n[r+4>>2]=-748862579;r=u+8|0;n[r>>2]=-171504835;n[r+4>>2]=175696680;r=u+16|0;n[r>>2]=2021213740;n[r+4>>2]=1718526831;r=u+24|0;n[r>>2]=-1710760145;n[r+4>>2]=235567041;r=u+32|0;n[r>>2]=0;n[r+4>>2]=0;n[r+8>>2]=0;n[r+12>>2]=0;n[r+16>>2]=0;n[r+20>>2]=0;n[r+24>>2]=0;n[r+28>>2]=0;t=a+160|0;do{if((c|0)!=(u|0)){if((Lo(c,u,32)|0)==0?(Lo(t,r,32)|0)==0:0)break;i=u;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));Mt(b,u);t=n[b>>2]|0;i=u;c=b+8|0;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));if(!t)Oi(3624);i=l;c=u;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));Bt(h,l);i=b;c=a;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=u;c=h;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));Nt(f,b,u);i=d;c=a+64|0;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=b;c=h;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=u;c=l;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));Nt(s,b,u);Nt(o,d,s);i=f+64|0;c=o;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=e;n[i>>2]=1;n[i+4>>2]=0;i=e+8|0;c=f;r=i+128|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));p=m;return}}while(0);i=u;c=a;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=u+64|0;c=a+64|0;r=i+64|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));i=e;n[i>>2]=1;n[i+4>>2]=0;i=e+8|0;c=u;r=i+128|0;do{n[i>>2]=n[c>>2];i=i+4|0;c=c+4|0}while((i|0)<(r|0));p=m;return}function af(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0,R=0,O=0,B=0,M=0,N=0,I=0,P=0,F=0,L=0,D=0,z=0;z=p;p=p+2272|0;k=z+2208|0;O=z+2144|0;A=z+2080|0;R=z+2016|0;d=z+1984|0;g=z+1920|0;m=z+1856|0;h=z+1792|0;l=z+1728|0;u=z+1664|0;b=z+1600|0;s=z+1536|0;o=z+1472|0;f=z+1408|0;I=z+1344|0;S=z+1280|0;N=z+1216|0;x=z+1152|0;_=z+1088|0;y=z+1024|0;j=z+960|0;v=z+896|0;T=z+832|0;E=z+768|0;L=z+704|0;P=z+640|0;M=z+576|0;B=z+512|0;D=z+448|0;F=z+384|0;w=z+192|0;C=z;ad(C|0,a|0,192)|0;ad(w|0,t|0,192)|0;i=C+128|0;if((((((((n[i>>2]|0)==0&(n[i+4>>2]|0)==0?(i=C+136|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+144|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+152|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+160|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+168|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+176|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=C+184|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)ad(e|0,w|0,192)|0;else r=10;do{if((r|0)==10){i=w+128|0;if((((((((n[i>>2]|0)==0&(n[i+4>>2]|0)==0?(i=w+136|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+144|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+152|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+160|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+168|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+176|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0)?(i=w+184|0,(n[i>>2]|0)==0&(n[i+4>>2]|0)==0):0){ad(e|0,C|0,192)|0;break}a=C+128|0;Bt(F,a);t=w+128|0;Bt(D,t);r=O;c=C;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=D;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(B,O,k);r=O;c=w;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=F;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(M,O,k);r=O;c=a;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=F;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(P,O,k);r=O;c=t;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=D;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(L,O,k);r=O;c=C+64|0;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=L;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(E,O,k);r=O;c=w+64|0;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=P;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(T,O,k);if((((Lo(B,M,32)|0)==0?(Lo(B+32|0,M+32|0,32)|0)==0:0)?(Lo(E,T,32)|0)==0:0)?(Lo(E+32|0,T+32|0,32)|0)==0:0)tf(e,C);else{r=m;c=M;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=B;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=M;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=B;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[v>>2]=n[O>>2];n[v+4>>2]=n[O+4>>2];n[v+8>>2]=n[O+8>>2];n[v+12>>2]=n[O+12>>2];n[v+16>>2]=n[O+16>>2];n[v+20>>2]=n[O+20>>2];n[v+24>>2]=n[O+24>>2];n[v+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=v+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=m;c=T;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=E;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=T;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=E;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[j>>2]=n[O>>2];n[j+4>>2]=n[O+4>>2];n[j+8>>2]=n[O+8>>2];n[j+12>>2]=n[O+12>>2];n[j+16>>2]=n[O+16>>2];n[j+20>>2]=n[O+20>>2];n[j+24>>2]=n[O+24>>2];n[j+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=j+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=m;c=v;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=v;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=m;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=v;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];Tt(O,k,8);n[h>>2]=n[O>>2];n[h+4>>2]=n[O+4>>2];n[h+8>>2]=n[O+8>>2];n[h+12>>2]=n[O+12>>2];n[h+16>>2]=n[O+16>>2];n[h+20>>2]=n[O+20>>2];n[h+24>>2]=n[O+24>>2];n[h+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];Tt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=h+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];Bt(y,h);r=O;c=v;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=y;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(_,O,k);r=m;c=j;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=j;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=m;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=j;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];Tt(O,k,8);n[x>>2]=n[O>>2];n[x+4>>2]=n[O+4>>2];n[x+8>>2]=n[O+8>>2];n[x+12>>2]=n[O+12>>2];n[x+16>>2]=n[O+16>>2];n[x+20>>2]=n[O+20>>2];n[x+24>>2]=n[O+24>>2];n[x+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];Tt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=x+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=O;c=B;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=y;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(N,O,k);r=O;c=E;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=k;c=_;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(S,O,k);Bt(m,x);r=g;c=_;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=m;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=_;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[l>>2]=n[O>>2];n[l+4>>2]=n[O+4>>2];n[l+8>>2]=n[O+8>>2];n[l+12>>2]=n[O+12>>2];n[l+16>>2]=n[O+16>>2];n[l+20>>2]=n[O+20>>2];n[l+24>>2]=n[O+24>>2];n[l+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=l+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=m;c=N;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=N;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=m;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=N;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];Tt(O,k,8);n[h>>2]=n[O>>2];n[h+4>>2]=n[O+4>>2];n[h+8>>2]=n[O+8>>2];n[h+12>>2]=n[O+12>>2];n[h+16>>2]=n[O+16>>2];n[h+20>>2]=n[O+20>>2];n[h+24>>2]=n[O+24>>2];n[h+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];Tt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=h+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=R;c=l;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=h;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[l>>2];n[O+4>>2]=n[l+4>>2];n[O+8>>2]=n[l+8>>2];n[O+12>>2]=n[l+12>>2];n[O+16>>2]=n[l+16>>2];n[O+20>>2]=n[l+20>>2];n[O+24>>2]=n[l+24>>2];n[O+28>>2]=n[l+28>>2];n[k>>2]=n[h>>2];n[k+4>>2]=n[h+4>>2];n[k+8>>2]=n[h+8>>2];n[k+12>>2]=n[h+12>>2];n[k+16>>2]=n[h+16>>2];n[k+20>>2]=n[h+20>>2];n[k+24>>2]=n[h+24>>2];n[k+28>>2]=n[h+28>>2];jt(O,k,8);n[I>>2]=n[O>>2];n[I+4>>2]=n[O+4>>2];n[I+8>>2]=n[O+8>>2];n[I+12>>2]=n[O+12>>2];n[I+16>>2]=n[O+16>>2];n[I+20>>2]=n[O+20>>2];n[I+24>>2]=n[O+24>>2];n[I+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=I+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=f;c=I;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=l;c=x;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=m;c=N;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=I;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=N;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=I;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[h>>2]=n[O>>2];n[h+4>>2]=n[O+4>>2];n[h+8>>2]=n[O+8>>2];n[h+12>>2]=n[O+12>>2];n[h+16>>2]=n[O+16>>2];n[h+20>>2]=n[O+20>>2];n[h+24>>2]=n[O+24>>2];n[h+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=h+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];Nt(u,l,h);r=m;c=S;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=S;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=m;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=S;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];Tt(O,k,8);n[h>>2]=n[O>>2];n[h+4>>2]=n[O+4>>2];n[h+8>>2]=n[O+8>>2];n[h+12>>2]=n[O+12>>2];n[h+16>>2]=n[O+16>>2];n[h+20>>2]=n[O+20>>2];n[h+24>>2]=n[O+24>>2];n[h+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];Tt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=h+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=R;c=u;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=h;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[u>>2];n[O+4>>2]=n[u+4>>2];n[O+8>>2]=n[u+8>>2];n[O+12>>2]=n[u+12>>2];n[O+16>>2]=n[u+16>>2];n[O+20>>2]=n[u+20>>2];n[O+24>>2]=n[u+24>>2];n[O+28>>2]=n[u+28>>2];n[k>>2]=n[h>>2];n[k+4>>2]=n[h+4>>2];n[k+8>>2]=n[h+8>>2];n[k+12>>2]=n[h+12>>2];n[k+16>>2]=n[h+16>>2];n[k+20>>2]=n[h+20>>2];n[k+24>>2]=n[h+24>>2];n[k+28>>2]=n[h+28>>2];jt(O,k,8);n[o>>2]=n[O>>2];n[o+4>>2]=n[O+4>>2];n[o+8>>2]=n[O+8>>2];n[o+12>>2]=n[O+12>>2];n[o+16>>2]=n[O+16>>2];n[o+20>>2]=n[O+20>>2];n[o+24>>2]=n[O+24>>2];n[o+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=o+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=m;c=a;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=g;c=t;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=a;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=t;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[m>>2];n[O+4>>2]=n[m+4>>2];n[O+8>>2]=n[m+8>>2];n[O+12>>2]=n[m+12>>2];n[O+16>>2]=n[m+16>>2];n[O+20>>2]=n[m+20>>2];n[O+24>>2]=n[m+24>>2];n[O+28>>2]=n[m+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];Tt(O,k,8);n[h>>2]=n[O>>2];n[h+4>>2]=n[O+4>>2];n[h+8>>2]=n[O+8>>2];n[h+12>>2]=n[O+12>>2];n[h+16>>2]=n[O+16>>2];n[h+20>>2]=n[O+20>>2];n[h+24>>2]=n[O+24>>2];n[h+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];Tt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=h+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];Bt(l,h);r=g;c=F;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=l;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=F;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[l>>2];n[O+4>>2]=n[l+4>>2];n[O+8>>2]=n[l+8>>2];n[O+12>>2]=n[l+12>>2];n[O+16>>2]=n[l+16>>2];n[O+20>>2]=n[l+20>>2];n[O+24>>2]=n[l+24>>2];n[O+28>>2]=n[l+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[u>>2]=n[O>>2];n[u+4>>2]=n[O+4>>2];n[u+8>>2]=n[O+8>>2];n[u+12>>2]=n[O+12>>2];n[u+16>>2]=n[O+16>>2];n[u+20>>2]=n[O+20>>2];n[u+24>>2]=n[O+24>>2];n[u+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=u+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=g;c=D;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=R;c=u;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=A;c=D;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));n[O>>2]=n[u>>2];n[O+4>>2]=n[u+4>>2];n[O+8>>2]=n[u+8>>2];n[O+12>>2]=n[u+12>>2];n[O+16>>2]=n[u+16>>2];n[O+20>>2]=n[u+20>>2];n[O+24>>2]=n[u+24>>2];n[O+28>>2]=n[u+28>>2];n[k>>2]=n[g>>2];n[k+4>>2]=n[g+4>>2];n[k+8>>2]=n[g+8>>2];n[k+12>>2]=n[g+12>>2];n[k+16>>2]=n[g+16>>2];n[k+20>>2]=n[g+20>>2];n[k+24>>2]=n[g+24>>2];n[k+28>>2]=n[g+28>>2];jt(O,k,8);n[b>>2]=n[O>>2];n[b+4>>2]=n[O+4>>2];n[b+8>>2]=n[O+8>>2];n[b+12>>2]=n[O+12>>2];n[b+16>>2]=n[O+16>>2];n[b+20>>2]=n[O+20>>2];n[b+24>>2]=n[O+24>>2];n[b+28>>2]=n[O+28>>2];c=R+32|0;r=A+32|0;n[O>>2]=n[c>>2];n[O+4>>2]=n[c+4>>2];n[O+8>>2]=n[c+8>>2];n[O+12>>2]=n[c+12>>2];n[O+16>>2]=n[c+16>>2];n[O+20>>2]=n[c+20>>2];n[O+24>>2]=n[c+24>>2];n[O+28>>2]=n[c+28>>2];n[k>>2]=n[r>>2];n[k+4>>2]=n[r+4>>2];n[k+8>>2]=n[r+8>>2];n[k+12>>2]=n[r+12>>2];n[k+16>>2]=n[r+16>>2];n[k+20>>2]=n[r+20>>2];n[k+24>>2]=n[r+24>>2];n[k+28>>2]=n[r+28>>2];jt(O,k,8);n[d>>2]=n[O>>2];n[d+4>>2]=n[O+4>>2];n[d+8>>2]=n[O+8>>2];n[d+12>>2]=n[O+12>>2];n[d+16>>2]=n[O+16>>2];n[d+20>>2]=n[O+20>>2];n[d+24>>2]=n[O+24>>2];n[d+28>>2]=n[O+28>>2];r=b+32|0;n[r>>2]=n[d>>2];n[r+4>>2]=n[d+4>>2];n[r+8>>2]=n[d+8>>2];n[r+12>>2]=n[d+12>>2];n[r+16>>2]=n[d+16>>2];n[r+20>>2]=n[d+20>>2];n[r+24>>2]=n[d+24>>2];n[r+28>>2]=n[d+28>>2];r=k;c=v;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));Nt(s,b,k);r=e;c=f;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=e+64|0;c=o;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0));r=e+128|0;c=s;i=r+64|0;do{n[r>>2]=n[c>>2];r=r+4|0;c=c+4|0}while((r|0)<(i|0))}p=z;return}}while(0);p=z;return}function tf(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,T=0,j=0,C=0;T=p;p=p+1312|0;w=T+1248|0;k=T+1184|0;_=T+1120|0;A=T+1056|0;b=T+1024|0;s=T+960|0;d=T+896|0;o=T+832|0;f=T+768|0;i=T+704|0;c=T+640|0;r=T+576|0;E=T+512|0;v=T+448|0;x=T+384|0;y=T+320|0;g=T+256|0;m=T+192|0;h=T+128|0;l=T+64|0;u=T;Bt(u,a);t=a+64|0;Bt(l,t);Bt(h,l);S=d;j=a;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=l;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=a;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=l;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];Bt(f,o);S=s;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=f;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[f>>2];n[k+4>>2]=n[f+4>>2];n[k+8>>2]=n[f+8>>2];n[k+12>>2]=n[f+12>>2];n[k+16>>2]=n[f+16>>2];n[k+20>>2]=n[f+20>>2];n[k+24>>2]=n[f+24>>2];n[k+28>>2]=n[f+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];jt(k,w,8);n[i>>2]=n[k>>2];n[i+4>>2]=n[k+4>>2];n[i+8>>2]=n[k+8>>2];n[i+12>>2]=n[k+12>>2];n[i+16>>2]=n[k+16>>2];n[i+20>>2]=n[k+20>>2];n[i+24>>2]=n[k+24>>2];n[i+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];jt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=i+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=s;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=i;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[i>>2];n[k+4>>2]=n[i+4>>2];n[k+8>>2]=n[i+8>>2];n[k+12>>2]=n[i+12>>2];n[k+16>>2]=n[i+16>>2];n[k+20>>2]=n[i+20>>2];n[k+24>>2]=n[i+24>>2];n[k+28>>2]=n[i+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];jt(k,w,8);n[m>>2]=n[k>>2];n[m+4>>2]=n[k+4>>2];n[m+8>>2]=n[k+8>>2];n[m+12>>2]=n[k+12>>2];n[m+16>>2]=n[k+16>>2];n[m+20>>2]=n[k+20>>2];n[m+24>>2]=n[k+24>>2];n[m+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];jt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=m+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=d;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=m;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=s;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=u;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[o>>2];n[k+4>>2]=n[o+4>>2];n[k+8>>2]=n[o+8>>2];n[k+12>>2]=n[o+12>>2];n[k+16>>2]=n[o+16>>2];n[k+20>>2]=n[o+20>>2];n[k+24>>2]=n[o+24>>2];n[k+28>>2]=n[o+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[g>>2]=n[k>>2];n[g+4>>2]=n[k+4>>2];n[g+8>>2]=n[k+8>>2];n[g+12>>2]=n[k+12>>2];n[g+16>>2]=n[k+16>>2];n[g+20>>2]=n[k+20>>2];n[g+24>>2]=n[k+24>>2];n[g+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=g+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];Bt(y,g);S=f;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=A;j=y;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[f>>2];n[k+4>>2]=n[f+4>>2];n[k+8>>2]=n[f+8>>2];n[k+12>>2]=n[f+12>>2];n[k+16>>2]=n[f+16>>2];n[k+20>>2]=n[f+20>>2];n[k+24>>2]=n[f+24>>2];n[k+28>>2]=n[f+28>>2];n[w>>2]=n[o>>2];n[w+4>>2]=n[o+4>>2];n[w+8>>2]=n[o+8>>2];n[w+12>>2]=n[o+12>>2];n[w+16>>2]=n[o+16>>2];n[w+20>>2]=n[o+20>>2];n[w+24>>2]=n[o+24>>2];n[w+28>>2]=n[o+28>>2];jt(k,w,8);n[x>>2]=n[k>>2];n[x+4>>2]=n[k+4>>2];n[x+8>>2]=n[k+8>>2];n[x+12>>2]=n[k+12>>2];n[x+16>>2]=n[k+16>>2];n[x+20>>2]=n[k+20>>2];n[x+24>>2]=n[k+24>>2];n[x+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];jt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=x+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=d;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=h;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[v>>2]=n[k>>2];n[v+4>>2]=n[k+4>>2];n[v+8>>2]=n[k+8>>2];n[v+12>>2]=n[k+12>>2];n[v+16>>2]=n[k+16>>2];n[v+20>>2]=n[k+20>>2];n[v+24>>2]=n[k+24>>2];n[v+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=v+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=d;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=v;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=v;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=k;j=t;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=w;j=a+128|0;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));Nt(E,k,w);S=r;j=x;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=f;j=g;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=d;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=x;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=m;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=x;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];jt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];jt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];Nt(i,f,o);S=s;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=i;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=v;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[i>>2];n[k+4>>2]=n[i+4>>2];n[k+8>>2]=n[i+8>>2];n[k+12>>2]=n[i+12>>2];n[k+16>>2]=n[i+16>>2];n[k+20>>2]=n[i+20>>2];n[k+24>>2]=n[i+24>>2];n[k+28>>2]=n[i+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];jt(k,w,8);n[c>>2]=n[k>>2];n[c+4>>2]=n[k+4>>2];n[c+8>>2]=n[k+8>>2];n[c+12>>2]=n[k+12>>2];n[c+16>>2]=n[k+16>>2];n[c+20>>2]=n[k+20>>2];n[c+24>>2]=n[k+24>>2];n[c+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];jt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=c+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=d;j=E;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=s;j=E;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=A;j=d;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=_;j=E;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));n[k>>2]=n[d>>2];n[k+4>>2]=n[d+4>>2];n[k+8>>2]=n[d+8>>2];n[k+12>>2]=n[d+12>>2];n[k+16>>2]=n[d+16>>2];n[k+20>>2]=n[d+20>>2];n[k+24>>2]=n[d+24>>2];n[k+28>>2]=n[d+28>>2];n[w>>2]=n[s>>2];n[w+4>>2]=n[s+4>>2];n[w+8>>2]=n[s+8>>2];n[w+12>>2]=n[s+12>>2];n[w+16>>2]=n[s+16>>2];n[w+20>>2]=n[s+20>>2];n[w+24>>2]=n[s+24>>2];n[w+28>>2]=n[s+28>>2];Tt(k,w,8);n[o>>2]=n[k>>2];n[o+4>>2]=n[k+4>>2];n[o+8>>2]=n[k+8>>2];n[o+12>>2]=n[k+12>>2];n[o+16>>2]=n[k+16>>2];n[o+20>>2]=n[k+20>>2];n[o+24>>2]=n[k+24>>2];n[o+28>>2]=n[k+28>>2];j=A+32|0;S=_+32|0;n[k>>2]=n[j>>2];n[k+4>>2]=n[j+4>>2];n[k+8>>2]=n[j+8>>2];n[k+12>>2]=n[j+12>>2];n[k+16>>2]=n[j+16>>2];n[k+20>>2]=n[j+20>>2];n[k+24>>2]=n[j+24>>2];n[k+28>>2]=n[j+28>>2];n[w>>2]=n[S>>2];n[w+4>>2]=n[S+4>>2];n[w+8>>2]=n[S+8>>2];n[w+12>>2]=n[S+12>>2];n[w+16>>2]=n[S+16>>2];n[w+20>>2]=n[S+20>>2];n[w+24>>2]=n[S+24>>2];n[w+28>>2]=n[S+28>>2];Tt(k,w,8);n[b>>2]=n[k>>2];n[b+4>>2]=n[k+4>>2];n[b+8>>2]=n[k+8>>2];n[b+12>>2]=n[k+12>>2];n[b+16>>2]=n[k+16>>2];n[b+20>>2]=n[k+20>>2];n[b+24>>2]=n[k+24>>2];n[b+28>>2]=n[k+28>>2];S=o+32|0;n[S>>2]=n[b>>2];n[S+4>>2]=n[b+4>>2];n[S+8>>2]=n[b+8>>2];n[S+12>>2]=n[b+12>>2];n[S+16>>2]=n[b+16>>2];n[S+20>>2]=n[b+20>>2];n[S+24>>2]=n[b+24>>2];n[S+28>>2]=n[b+28>>2];S=e;j=r;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=e+64|0;j=c;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));S=e+128|0;j=o;C=S+64|0;do{n[S>>2]=n[j>>2];S=S+4|0;j=j+4|0}while((S|0)<(C|0));p=T;return}function rf(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0;s=p;p=p+800|0;i=s+608|0;f=s+416|0;c=s+384|0;d=s+192|0;o=s;ad(o|0,a|0,192)|0;a=d;r=a+64|0;do{n[a>>2]=0;a=a+4|0}while((a|0)<(r|0));a=d+64|0;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=d+72|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=d+80|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=d+88|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;a=d+96|0;r=a+96|0;do{n[a>>2]=0;a=a+4|0}while((a|0)<(r|0));n[f>>2]=n[t>>2];n[f+4>>2]=n[t+4>>2];n[f+8>>2]=n[t+8>>2];n[f+12>>2]=n[t+12>>2];n[f+16>>2]=n[t+16>>2];n[f+20>>2]=n[t+20>>2];n[f+24>>2]=n[t+24>>2];n[f+28>>2]=n[t+28>>2];r=i;n[r>>2]=1;n[r+4>>2]=0;r=i+8|0;n[r>>2]=0;n[r+4>>2]=0;n[r+8>>2]=0;n[r+12>>2]=0;n[r+16>>2]=0;n[r+20>>2]=0;Ct(f,i,72,-268435457,-1025378925);n[c>>2]=n[f>>2];n[c+4>>2]=n[f+4>>2];n[c+8>>2]=n[f+8>>2];n[c+12>>2]=n[f+12>>2];n[c+16>>2]=n[f+16>>2];n[c+20>>2]=n[f+20>>2];n[c+24>>2]=n[f+24>>2];n[c+28>>2]=n[f+28>>2];r=0;a=256;e:while(1){if(r)do{if(!a){a=8;break e}a=a+-1|0;if(a>>>0>255){a=8;break e}t=c+(a>>>6<<3)|0;b=n[t>>2]|0;t=n[t+4>>2]|0;r=nd(1,0,a&63|0)|0;t=(b&r|0)==0&(t&T|0)==0;tf(i,d);ad(d|0,i|0,192)|0}while(t);else do{if(!a){a=8;break e}a=a+-1|0;if(a>>>0>255){a=8;break e}b=c+(a>>>6<<3)|0;r=n[b>>2]|0;b=n[b+4>>2]|0;t=nd(1,0,a&63|0)|0}while((r&t|0)==0&(b&T|0)==0);ad(f|0,d|0,192)|0;ad(i|0,o|0,192)|0;af(d,f,i);r=1}if((a|0)==8){ad(e|0,d|0,192)|0;p=s;return}}function cf(e){e=e|0;var a=0;a=e;n[a>>2]=-980480611;n[a+4>>2]=-748862579;a=e+8|0;n[a>>2]=-171504835;n[a+4>>2]=175696680;a=e+16|0;n[a>>2]=2021213740;n[a+4>>2]=1718526831;a=e+24|0;n[a>>2]=-1710760145;n[a+4>>2]=235567041;Zo(e+32|0,0,352)|0;return}function nf(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,n=0,i=0;r=p;p=p+1152|0;n=r+768|0;i=r+384|0;c=r;ad(i|0,a|0,384)|0;ad(n|0,t|0,384)|0;Ut(c,i,n);ad(e|0,c|0,384)|0;p=r;return}function ff(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0;if(!t){h=0;return h|0}h=e+4|0;while(1){if(r[h>>0]|0?(p=n[e>>2]|0,(Cd[n[(n[p+28>>2]|0)+12>>2]&15](n[p+24>>2]|0,11488,4)|0)<<24>>24):0){a=1;c=5;break}l=a+t|0;p=a;i=0;u=0;e:while(1){c=p;if((c|0)==(l|0)){o=p;f=2;c=u}else{f=c+1|0;s=r[c>>0]|0;i=f;if(s<<24>>24<=-1){b=s&31;if((f|0)==(l|0)){o=l;c=0}else{i=c+2|0;o=i;c=r[f>>0]&63}f=c&255;c=f|b<<6;if((s&255)>223){if((o|0)==(l|0)){d=l;c=0}else{i=o+1|0;d=i;c=r[o>>0]&63}f=c&255|f<<6;c=f|b<<12;if((s&255)>239){if((d|0)==(l|0)){c=i;i=0}else{c=d+1|0;i=r[d>>0]&63}d=c;c=f<<6|b<<18&1835008|i&255}else d=i}else d=i}else{d=i;c=s&255}o=d;f=(c|0)!=10&1;i=u;c=u-p+d|0}switch(f&3){case 0:{c=22;break e}case 2:{c=21;break e}default:{p=o;u=c}}}if((c|0)==21){r[h>>0]=0;f=t}else if((c|0)==22){r[h>>0]=1;f=i+1|0}c=n[e>>2]|0;i=(f|0)==0|(t|0)==(f|0);if(!i){if(t>>>0<=f>>>0){c=26;break}if((r[a+f>>0]|0)<=-65){c=26;break}}if((Cd[n[(n[c+28>>2]|0)+12>>2]&15](n[c+24>>2]|0,a,f)|0)<<24>>24){a=1;c=5;break}if(!i){if(t>>>0<=f>>>0){c=32;break}c=a+f|0;if((r[c>>0]|0)>-65)a=c;else{c=32;break}}else a=a+f|0;t=t-f|0;if(!t){a=0;c=5;break}}if((c|0)==5)return a|0;else if((c|0)==26)Ni(a,t,0,f);else if((c|0)==32)Ni(a,t,f,t);return 0}function of(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+16|0;f=d;n[f>>2]=0;if(a>>>0<128){r[f>>0]=a;o=1;o=ff(e,f,o)|0;p=d;return o|0}do{if(a>>>0>=2048)if(a>>>0<65536){r[f>>0]=a>>>12&15|-32;t=a>>>6&63|-128;c=2;i=f+1|0;o=3;break}else{r[f>>0]=a>>>18&7|-16;r[f+1>>0]=a>>>12&63|-128;t=a>>>6&63|-128;c=3;i=f+2|0;o=4;break}else{t=a>>>6&31|-64;c=1;i=f;o=2}}while(0);r[i>>0]=t;r[f+c>>0]=a&63|-128;o=ff(e,f,o)|0;p=d;return o|0}function df(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=e;n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,2400,r)|0;p=t;return a|0}function sf(e){e=e|0;return}function bf(e,a,t){e=e|0;a=a|0;t=t|0;return ff(n[e>>2]|0,a,t)|0}function uf(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+16|0;o=d;i=n[e>>2]|0;n[o>>2]=0;if(a>>>0<128){r[o>>0]=a;a=1;o=ff(i,o,a)|0;p=d;return o|0}do{if(a>>>0>=2048)if(a>>>0<65536){r[o>>0]=a>>>12&15|-32;e=a>>>6&63|-128;t=2;c=o+1|0;f=3;break}else{r[o>>0]=a>>>18&7|-16;r[o+1>>0]=a>>>12&63|-128;e=a>>>6&63|-128;t=3;c=o+2|0;f=4;break}else{e=a>>>6&31|-64;t=1;c=o;f=2}}while(0);r[c>>0]=e;r[o+t>>0]=a&63|-128;a=f;o=ff(i,o,a)|0;p=d;return o|0}function lf(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t+8|0;c=t;n[c>>2]=n[e>>2];n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,2400,r)|0;p=t;return a|0}function pf(e,a){e=e|0;a=a|0;return Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11492,11)|0}function hf(e,a){e=e|0;a=a|0;return Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11503,14)|0}function mf(e,a){e=e|0;a=a|0;var t=0,c=0,i=0;switch(n[a>>2]&3){case 0:{n[e>>2]=0;return}case 1:{i=n[a+4>>2]|0;n[a>>2]=0;n[e>>2]=1;n[e+4>>2]=i;return}case 2:{n[a>>2]=1;n[e>>2]=1;n[e+4>>2]=92;return}default:{i=a+12|0;switch(r[i>>0]&7){case 0:{n[e>>2]=0;return}case 1:{r[i>>0]=0;n[e>>2]=1;n[e+4>>2]=125;return}case 2:{t=a+8|0;c=n[t>>2]|0;a=(n[a+4>>2]|0)>>>(c<<2&28)&15;if(!c)r[i>>0]=1;else n[t>>2]=c+-1;n[e>>2]=1;n[e+4>>2]=((a&255)<10?48:87)+a;return}case 3:{r[i>>0]=2;n[e>>2]=1;n[e+4>>2]=123;return}case 4:{r[i>>0]=3;n[e>>2]=1;n[e+4>>2]=117;return}default:{r[i>>0]=4;n[e>>2]=1;n[e+4>>2]=92;return}}}}}function gf(e,a){e=e|0;a=a|0;var t=0;switch(n[a>>2]&3){case 0:{a=0;break}case 1:{a=1;break}case 2:{a=2;break}default:{t=n[a+8>>2]|0;switch(r[a+12>>0]&7){case 0:{a=0;break}case 1:{a=1;break}case 2:{a=2;break}case 3:{a=3;break}case 4:{a=4;break}default:a=5}a=a+t|0}}n[e>>2]=a;n[e+4>>2]=1;n[e+8>>2]=a;return}function vf(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;c=p;p=p+48|0;r=c+32|0;t=c+8|0;n[c>>2]=e;n[c+4>>2]=a;n[r>>2]=c;n[r+4>>2]=63;n[t>>2]=4048;n[t+4>>2]=1;n[t+8>>2]=0;n[t+16>>2]=r;n[t+20>>2]=1;Ci(t,4056)}function yf(e,a,t,c,i){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;var f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0,x=0,E=0,S=0,j=0;switch(i|0){case 0:{n[e+48>>2]=a;n[e+52>>2]=t;n[e+56>>2]=c;n[e+60>>2]=0;n[e>>2]=0;n[e+4>>2]=0;n[e+8>>2]=t;r[e+12>>0]=1;r[e+13>>0]=1;return}case 1:{m=0;g=0;y=1;_=1;break}default:{d=1;p=0;A=3}}e:do{if((A|0)==3){a:while(1){A=0;s=1;t:while(1){u=d;l=0;b=d;while(1){u=r[c+u>>0]|0;d=l+p|0;if(d>>>0>=i>>>0){A=6;break a}d=r[c+d>>0]|0;if((u&255)<(d&255))break;if(u<<24>>24!=d<<24>>24)break t;u=l+1|0;w=(u|0)==(s|0);d=w?0:u;b=(w?u:0)+b|0;u=b+d|0;if(u>>>0>=i>>>0){h=p;v=s;break a}else l=d}d=b+1+l|0;s=d-p|0;if(d>>>0>=i>>>0){h=p;v=s;break a}}d=b+1|0;if(d>>>0>=i>>>0){h=b;v=1;break}else{p=b;A=3}}if((A|0)==6)Ti(3664,d,i);d=1;p=0;a:while(1){s=1;t:while(1){u=d;l=0;b=d;while(1){u=r[c+u>>0]|0;d=l+p|0;if(d>>>0>=i>>>0)break a;d=r[c+d>>0]|0;if((u&255)>(d&255))break;if(u<<24>>24!=d<<24>>24)break t;u=l+1|0;w=(u|0)==(s|0);d=w?0:u;b=(w?u:0)+b|0;u=b+d|0;if(u>>>0>=i>>>0){m=p;g=h;y=s;_=v;break e}else l=d}d=b+1+l|0;s=d-p|0;if(d>>>0>=i>>>0){m=p;g=h;y=s;_=v;break e}}d=b+1|0;if(d>>>0>=i>>>0){m=b;g=h;y=1;_=v;break e}else p=b}Ti(3664,d,i)}}while(0);v=g>>>0>m>>>0;w=v?g:m;y=v?_:y;if(w>>>0>i>>>0)Si(w,i);d=y+w|0;if(d>>>0<y>>>0)Bi(y,d);if(d>>>0>i>>>0)Si(d,i);v=c+y|0;g=(y|0)==0;if(!g?(Lo(c,v,w)|0)!=0:0){d=i-w|0;d=d>>>0>=w>>>0?d:w;f=c+i|0;o=c;s=0;b=0;do{S=nd(1,0,r[o>>0]&63|0)|0;o=o+1|0;s=S|s;b=T|b}while((o|0)!=(f|0));S=d+1|0;k=w;x=-1;E=-1;f=s;o=b}else A=30;do{if((A|0)==30){m=i+-1|0;p=0;l=0;b=1;u=1;while(1){if((u+l|0)>>>0>=i>>>0){A=40;break}d=i-l+~u|0;if(d>>>0>=i>>>0){A=33;break}s=r[c+d>>0]|0;d=m-l-p|0;if(d>>>0>=i>>>0){A=35;break}d=r[c+d>>0]|0;if((s&255)<(d&255)){u=l+1+u|0;d=p;s=0;b=u-p|0}else{h=s<<24>>24==d<<24>>24;A=l+1|0;_=(A|0)==(b|0);d=h?p:u;s=h?_?0:A:0;b=h?b:1;u=(h?_?A:0:1)+u|0}if((b|0)==(y|0)){p=d;A=40;break}else{p=d;l=s}}if((A|0)==33)Ti(3664,d,i);else if((A|0)==35)Ti(3664,d,i);else if((A|0)==40){h=0;l=0;b=1;u=1;while(1){if((u+l|0)>>>0>=i>>>0){f=h;A=50;break}d=i-l+~u|0;if(d>>>0>=i>>>0){A=43;break}s=r[c+d>>0]|0;d=m-l-h|0;if(d>>>0>=i>>>0){A=45;break}d=r[c+d>>0]|0;if((s&255)>(d&255)){u=l+1+u|0;d=h;s=0;b=u-h|0}else{j=s<<24>>24==d<<24>>24;A=l+1|0;_=(A|0)==(b|0);d=j?h:u;s=j?_?0:A:0;b=j?b:1;u=(j?_?A:0:1)+u|0}if((b|0)==(y|0)){f=d;A=50;break}else{h=d;l=s}}if((A|0)==43)Ti(3664,d,i);else if((A|0)==45)Ti(3664,d,i);else if((A|0)==50){s=i-(f>>>0>=p>>>0?f:p)|0;if(y>>>0>i>>>0)Si(y,i);if(g){S=0;k=s;x=i;E=0;f=0;o=0;break}else{o=0;d=c;f=0}do{j=nd(1,0,r[d>>0]&63|0)|0;d=d+1|0;f=j|f;o=T|o}while((d|0)!=(v|0));S=y;k=s;x=i;E=0}}}}while(0);n[e+48>>2]=a;n[e+52>>2]=t;n[e+56>>2]=c;n[e+60>>2]=i;n[e>>2]=1;j=e+4|0;i=e+8|0;n[i>>2]=f;n[i+4>>2]=o;n[e+16>>2]=w;n[j+16>>2]=k;n[e+24>>2]=S;n[j+24>>2]=0;n[e+32>>2]=t;n[j+32>>2]=E;n[e+40>>2]=x;return}function _f(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;d=t>>>0>7?t+-7|0:0;e:do{if(t|0){u=a;c=0;a:while(1){o=r[a+c>>0]|0;t:do{if(o<<24>>24>=0){if(c+u&3|0){c=c+1|0;break}r:do{if(c>>>0<d>>>0)do{o=a+c|0;if((n[o+4>>2]|n[o>>2])&-2139062144|0)break r;c=c+8|0}while(c>>>0<d>>>0)}while(0);if(c>>>0<t>>>0)do{if((r[a+c>>0]|0)<=-1)break t;c=c+1|0}while(c>>>0<t>>>0)}else{switch(r[9209+(o&255)>>0]|0){case 2:{i=c+1|0;if(i>>>0>=t>>>0){f=12;break a}if((r[a+i>>0]&-64)<<24>>24==-128)c=i;else{f=14;break a}break}case 3:{i=c+1|0;if(i>>>0>=t>>>0){f=15;break a}i=r[a+i>>0]|0;f=(i&255)<192;if(((!(o<<24>>24==-32&(i&-32)<<24>>24==-96)?(s=i<<24>>24<0,!(f&((o+31&255)<12&s))):0)?!((i&255)<160&(o<<24>>24==-19&s)):0)?!(f&((o&-2)<<24>>24==-18&s)):0){f=18;break a}i=c+2|0;if(i>>>0>=t>>>0){f=22;break a}if((r[a+i>>0]&-64)<<24>>24==-128)c=i;else{f=24;break a}break}case 4:{i=c+1|0;if(i>>>0>=t>>>0){f=25;break a}i=r[a+i>>0]|0;if((!(o<<24>>24==-16&(i+112&255)<48)?(b=i<<24>>24<0,!((i&255)<192&((o+15&255)<3&b))):0)?!((i&255)<144&(o<<24>>24==-12&b)):0){f=28;break a}i=c+2|0;if(i>>>0>=t>>>0){f=31;break a}if((r[a+i>>0]&-64)<<24>>24!=-128){f=33;break a}i=c+3|0;if(i>>>0>=t>>>0){f=35;break a}if((r[a+i>>0]&-64)<<24>>24==-128)c=i;else{f=37;break a}break}default:{f=10;break a}}c=c+1|0}}while(0);if(c>>>0>=t>>>0)break e}switch(f|0){case 10:{i=257;break}case 12:{i=0;break}case 14:{i=257;break}case 15:{i=0;break}case 18:{i=257;break}case 22:{i=0;break}case 24:{i=513;break}case 25:{i=0;break}case 28:{i=257;break}case 31:{i=0;break}case 33:{i=513;break}case 35:{i=0;break}case 37:{i=769;break}}n[e>>2]=1;e=e+4|0;n[e>>2]=c;n[e+4>>2]=i;return}}while(0);n[e>>2]=0;n[e+4>>2]=a;n[e+8>>2]=t;return}function wf(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;c=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,t,c)|0;n[e>>2]=a;r[e+4>>0]=c;r[e+5>>0]=0;return}function Af(e,a,t,c,i){e=e|0;a=a|0;t=t|0;c=c|0;i=i|0;var f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0;u=p;p=p+80|0;d=u+56|0;o=u+32|0;b=u+24|0;s=u+16|0;l=u+8|0;h=u;n[h>>2]=a;n[h+4>>2]=t;n[l>>2]=c;n[l+4>>2]=i;f=e+4|0;t=h;c=l;if(r[f>>0]|0){h=e+5|0;l=1;r[f>>0]=l;r[h>>0]=1;p=u;return e|0}i=e+5|0;a=(r[i>>0]|0)!=0;n[s>>2]=a?5857:11517;n[s+4>>2]=a?1:2;a=n[e>>2]|0;if(!(n[a>>2]&4)){n[o>>2]=s;n[o+4>>2]=63;n[o+8>>2]=t;n[o+12>>2]=63;n[o+16>>2]=c;n[o+20>>2]=68;h=n[a+24>>2]|0;a=n[a+28>>2]|0;n[d>>2]=4204;n[d+4>>2]=3;n[d+8>>2]=0;n[d+16>>2]=o;n[d+20>>2]=3;a=Di(h,a,d)|0}else{n[b>>2]=a;r[b+4>>0]=0;n[d>>2]=s;n[d+4>>2]=63;n[d+8>>2]=t;n[d+12>>2]=63;n[d+16>>2]=c;n[d+20>>2]=68;n[o>>2]=4072;n[o+4>>2]=3;n[o+8>>2]=4096;n[o+12>>2]=3;n[o+16>>2]=d;n[o+20>>2]=3;a=Di(b,2376,o)|0}h=i;l=a;r[f>>0]=l;r[h>>0]=1;p=u;return e|0}function kf(e){e=e|0;var a=0,t=0;t=e+4|0;a=r[t>>0]|0;if(!(r[e+5>>0]|0)){t=a;return t|0}if(!(a<<24>>24)){e=n[e>>2]|0;e=Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,n[e>>2]&4|0?11519:11521,2)|0}else e=1;r[t>>0]=e;t=e;return t|0}function xf(e,a,t,c){e=e|0;a=a|0;t=t|0;c=c|0;t=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,t,c)|0;n[e>>2]=a;r[e+8>>0]=t;n[e+4>>2]=0;r[e+9>>0]=(c|0)==0&1;return}function Ef(e){e=e|0;var a=0,t=0,c=0,i=0;c=e+4|0;a=n[c>>2]|0;i=e+8|0;t=r[i>>0]|0;if(!a){i=t;return i|0}do{if(!(t<<24>>24)){t=n[e>>2]|0;if(n[t>>2]&4){if((Cd[n[(n[t+28>>2]|0)+12>>2]&15](n[t+24>>2]|0,11485,1)|0)<<24>>24){a=1;break}a=n[c>>2]|0}if(((a|0)==1?r[e+9>>0]|0:0)?(c=n[e>>2]|0,(Cd[n[(n[c+28>>2]|0)+12>>2]&15](n[c+24>>2]|0,5857,1)|0)<<24>>24):0){a=1;break}a=n[e>>2]|0;a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11486,1)|0}else a=1}while(0);r[i>>0]=a;i=a;return i|0}function Sf(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;u=p;p=p+80|0;d=u+48|0;o=u+24|0;s=u+16|0;b=u+8|0;c=u;n[c>>2]=a;n[c+4>>2]=t;f=e+4|0;if(r[f>>0]|0){b=e+5|0;s=1;r[f>>0]=s;r[b>>0]=1;p=u;return}i=n[e>>2]|0;t=e+5|0;a=r[t>>0]|0;if(!(n[i>>2]&4)){b=a<<24>>24!=0;n[s>>2]=b?11523:14356;n[s+4>>2]=b?2:0;n[o>>2]=s;n[o+4>>2]=63;n[o+8>>2]=c;n[o+12>>2]=68;c=n[i+24>>2]|0;s=n[i+28>>2]|0;n[d>>2]=4228;n[d+4>>2]=2;n[d+8>>2]=0;n[d+16>>2]=o;n[d+20>>2]=2;b=t;s=Di(c,s,d)|0;r[f>>0]=s;r[b>>0]=1;p=u;return}else{n[b>>2]=i;r[b+4>>0]=0;n[s>>2]=a<<24>>24?5857:14356;n[s+4>>2]=a&255;n[d>>2]=s;n[d+4>>2]=63;n[d+8>>2]=c;n[d+12>>2]=68;n[o>>2]=3936;n[o+4>>2]=2;n[o+8>>2]=3952;n[o+12>>2]=2;n[o+16>>2]=d;n[o+20>>2]=2;s=t;b=Di(b,2376,o)|0;r[f>>0]=b;r[s>>0]=1;p=u;return}}function Tf(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0;t=p;p=p+32|0;c=t;f=n[a+24>>2]|0;i=n[a+28>>2]|0;n[c>>2]=4244;n[c+4>>2]=1;n[c+8>>2]=0;n[c+16>>2]=13784;n[c+20>>2]=0;c=Di(f,i,c)|0;n[e>>2]=a;r[e+4>>0]=c;r[e+5>>0]=0;p=t;return}function jf(e,a,t){e=e|0;a=a|0;t=t|0;Sf(e,a,t);return e|0}function Cf(e){e=e|0;var a=0,t=0,c=0;a=n[e>>2]|0;if((n[a>>2]&4|0)!=0?(r[e+5>>0]|0)!=0:0)c=1;else c=0;t=e+4|0;if(r[t>>0]|0){r[t>>0]=1;c=1;return c|0}c=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,c?11485:14356,c&1)|0;r[t>>0]=c;if(c<<24>>24){c=1;return c|0}c=n[e>>2]|0;c=Cd[n[(n[c+28>>2]|0)+12>>2]&15](n[c+24>>2]|0,5887,1)|0;return c|0}function Rf(e,a){e=e|0;a=a|0;n[e>>2]=a;n[e+4>>2]=67;return}function Of(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t;c=n[a+24>>2]|0;a=n[a+28>>2]|0;n[r>>2]=n[e>>2];n[r+4>>2]=n[e+4>>2];n[r+8>>2]=n[e+8>>2];n[r+12>>2]=n[e+12>>2];n[r+16>>2]=n[e+16>>2];n[r+20>>2]=n[e+20>>2];a=Di(c,a,r)|0;p=t;return a|0}function Bf(e,a,t){e=e|0;a=a|0;t=t|0;return Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,a,t)|0}function Mf(e,a){e=e|0;a=a|0;var t=0,r=0,c=0;t=p;p=p+32|0;r=t;c=n[e+24>>2]|0;e=n[e+28>>2]|0;n[r>>2]=n[a>>2];n[r+4>>2]=n[a+4>>2];n[r+8>>2]=n[a+8>>2];n[r+12>>2]=n[a+12>>2];n[r+16>>2]=n[a+16>>2];n[r+20>>2]=n[a+20>>2];a=Di(c,e,r)|0;p=t;return a|0}function Nf(e){e=e|0;return(n[e>>2]&4|0)!=0|0}function If(e,a){e=e|0;a=a|0;return Fd[n[(n[e+28>>2]|0)+16>>2]&127](n[e+24>>2]|0,a)|0}function Pf(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0,h=0,m=0,g=0,v=0;v=t+24|0;h=t+28|0;if((Fd[n[(n[h>>2]|0)+16>>2]&127](n[v>>2]|0,34)|0)<<24>>24){v=1;return v|0}p=e+a|0;do{if(a){c=e;t=0;i=0;f=e;e:while(1){l=i;a:while(1){i=c+1|0;o=i;b=r[c>>0]|0;if(b<<24>>24<=-1){u=b&31;if((i|0)==(p|0)){d=p;i=0;c=o}else{c=c+2|0;d=c;i=r[i>>0]&63}o=i&255;i=o|u<<6;if((b&255)>223){if((d|0)==(p|0)){s=p;i=0}else{c=d+1|0;s=c;i=r[d>>0]&63}o=i&255|o<<6;i=o|u<<12;if((b&255)>239){if((s|0)==(p|0))i=0;else{i=r[s>>0]&63;c=s+1|0}u=o<<6|u<<18&1835008|i&255;o=c}else{u=i;o=c}}else{u=i;o=c}}else u=b&255;i=l-f+o|0;t:do{switch(u|0){case 9:{c=0;d=0;s=2;b=116;break}case 13:{c=0;d=0;s=2;b=114;break}case 10:{c=0;d=0;s=2;b=110;break}case 34:case 39:case 92:{c=0;d=0;s=2;b=u;break}default:{c=u&65535;do{if(u>>>0<65536){if(qi(c,10159,42,10243,303,10546,333)|0){c=0;d=0;s=1;b=u;break t}}else if(u>>>0<131072)if(qi(c,10879,31,10941,146,11087,342)|0){c=0;d=0;s=1;b=u;break t}else break;else if((u+-918e3|0)>>>0>196111&(((u+-195102|0)>>>0<722658|((u+-183970|0)>>>0<10590|((u&-2|0)==178206|((u+-173783|0)>>>0<41|(u+-177973|0)>>>0<11))))^1)){c=0;d=0;s=1;b=u;break t}else break}while(0);c=5;d=(G(u|1|0)|0)>>>2^7;s=3;b=u}}}while(0);switch(s&3){case 2:case 0:break a;case 1:break;default:{switch(c&7){case 0:{f=0;break}case 1:{f=1;break}case 2:{f=2;break}case 3:{f=3;break}case 4:{f=4;break}default:f=5}if((f+d|0)!=1)break a}}c=o;if((c|0)==(p|0)){i=16;break e}else{l=i;f=o}}if(l>>>0<t>>>0){i=48;break}if(!((t|0)==0|(t|0)==(a|0))){if(t>>>0>=a>>>0){i=48;break}if((r[e+t>>0]|0)<=-65){i=48;break}}if(!((l|0)==0|(l|0)==(a|0))){if(l>>>0>=a>>>0){i=48;break}if((r[e+l>>0]|0)<=-65){i=48;break}}if(!((Cd[n[(n[h>>2]|0)+12>>2]&15](n[v>>2]|0,e+t|0,l-t|0)|0)<<24>>24)){f=d;d=s}else{t=1;i=4;break}a:while(1){t:do{switch(d&3){case 0:break a;case 1:{t=b;d=0;break}case 2:{t=92;d=1;break}default:switch(c&7){case 0:break a;case 1:{c=c&-256;t=125;break t}case 2:{t=b>>>(f<<2&28)&15;t=((t&255)<10?48:87)+t|0;if(!f){c=c&-256|1;break t}else{f=f+-1|0;break t}}case 3:{c=c&-256|2;t=123;break t}case 4:{c=c&-256|3;t=117;break t}default:{c=c&-256|4;t=92;break t}}}}while(0);if((Fd[n[(n[h>>2]|0)+16>>2]&127](n[v>>2]|0,t)|0)<<24>>24){t=1;i=4;break e}}t=(u>>>0<128?1:u>>>0<2048?2:u>>>0<65536?3:4)+l|0;c=o;if((c|0)==(p|0)){i=16;break}else f=o}if((i|0)==4)return t|0;else if((i|0)==16){if((t|0)==0|(t|0)==(a|0)){i=17;break}if(t>>>0>=a>>>0)Ni(e,a,t,a);c=e+t|0;if((r[c>>0]|0)>-65){g=c;m=t;break}Ni(e,a,t,a)}else if((i|0)==48)Ni(e,a,t,l)}else{t=0;i=17}}while(0);if((i|0)==17){g=e+t|0;m=t}if((Cd[n[(n[h>>2]|0)+12>>2]&15](n[v>>2]|0,g,a-m|0)|0)<<24>>24){v=1;return v|0}v=Fd[n[(n[h>>2]|0)+16>>2]&127](n[v>>2]|0,34)|0;return v|0}function Ff(e,a,t){e=e|0;a=a|0;t=t|0;return Mi(t,e,a)|0}function Lf(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+16|0;o=d;if((n[a+8>>2]|0)==0?(n[a+16>>2]|0)==0:0){o=Fd[n[(n[a+28>>2]|0)+16>>2]&127](n[a+24>>2]|0,n[e>>2]|0)|0;p=d;return o|0}f=n[e>>2]|0;n[o>>2]=0;if(f>>>0<128){r[o>>0]=f;e=1}else{do{if(f>>>0>=2048)if(f>>>0<65536){r[o>>0]=f>>>12&15|-32;t=f>>>6&63|-128;c=2;i=o+1|0;e=3;break}else{r[o>>0]=f>>>18&255|-16;r[o+1>>0]=f>>>12&63|-128;t=f>>>6&63|-128;c=3;i=o+2|0;e=4;break}else{t=f>>>6&31|-64;c=1;i=o;e=2}}while(0);r[i>>0]=t;r[o+c>>0]=f&63|-128}o=Mi(a,o,e)|0;p=d;return o|0}function Df(e){e=e|0;var a=0;a=e&65535;if(e>>>0<65536){a=qi(a,10159,42,10243,303,10546,333)|0;return a|0}if(e>>>0<131072){a=qi(a,10879,31,10941,146,11087,342)|0;return a|0}if((e+-195102|0)>>>0<722658|((e+-183970|0)>>>0<10590|((e&-2|0)==178206|((e+-173783|0)>>>0<41|(e+-177973|0)>>>0<11)))){a=0;return a|0}else return(e+-918e3|0)>>>0>196111|0;return 0}function zf(e){e=e|0;return}function qf(e,a){e=e|0;a=a|0;var t=0,c=0,f=0,o=0,d=0;d=p;p=p+48|0;f=d;c=r[n[e>>2]>>0]|0;t=c&255;if((c&255)<=99)if((c&255)<10){e=38;o=4}else{c=9784+(t<<1)|0;e=f+37|0;c=i[c>>0]|i[c+1>>0]<<8;r[e>>0]=c;r[e+1>>0]=c>>8;e=37}else{t=9784+(((c&255)%100|0)<<1&255)|0;e=f+37|0;t=i[t>>0]|i[t+1>>0]<<8;r[e>>0]=t;r[e+1>>0]=t>>8;e=36;t=((c&255)/100|0)&255;o=4}if((o|0)==4)r[f+e>>0]=(t&255)+48<<24>>24;o=Ri(a,1,14356,0,f+e|0,39-e|0)|0;p=d;return o|0}function Uf(e){e=e|0;return}function Hf(e,a){e=e|0;a=a|0;return ji(n[e>>2]|0,a)|0}function Vf(e,a){e=e|0;a=a|0;var t=0,c=0,n=0,i=0,f=0;f=p;p=p+128|0;i=f;t=r[e>>0]|0;n=i+128|0;e=i;c=e+128|0;do{r[e>>0]=0;e=e+1|0}while((e|0)<(c|0));c=128;while(1){n=n+-1|0;e=t&15;t=(t&255)>>>4;r[n>>0]=((e&255)<10?48:87)+e<<24>>24;e=c+-1|0;if(!(t<<24>>24))break;else c=e}if(e>>>0>128)Bi(e,128);else{i=Ri(a,1,11535,2,i+e|0,129-c|0)|0;p=f;return i|0}return 0}function Gf(e,a){e=e|0;a=a|0;var t=0,c=0,f=0,o=0,d=0,s=0,b=0,u=0;d=p;p=p+48|0;o=d;e=n[e>>2]|0;if(e>>>0>9999){f=39;while(1){s=(e>>>0)%1e4|0;c=(e>>>0)/1e4|0;t=f+-4|0;u=9784+(((s>>>0)/100|0)<<1)|0;b=o+t|0;u=i[u>>0]|i[u+1>>0]<<8;r[b>>0]=u;r[b+1>>0]=u>>8;s=9784+(((s>>>0)%100|0)<<1)|0;f=o+(f+-2)|0;s=i[s>>0]|i[s+1>>0]<<8;r[f>>0]=s;r[f+1>>0]=s>>8;if(e>>>0>99999999){f=t;e=c}else{e=c;break}}}else t=39;if((e|0)>99){t=t+-2|0;b=9784+(((e>>>0)%100|0)<<1)|0;u=o+t|0;b=i[b>>0]|i[b+1>>0]<<8;r[u>>0]=b;r[u+1>>0]=b>>8;e=(e>>>0)/100|0}if((e|0)<10){u=t+-1|0;r[o+u>>0]=(e&255)+48<<24>>24;b=o+u|0;u=39-u|0;u=Ri(a,1,14356,0,b,u)|0;p=d;return u|0}else{u=t+-2|0;s=9784+(e<<1)|0;b=o+u|0;s=i[s>>0]|i[s+1>>0]<<8;r[b>>0]=s;r[b+1>>0]=s>>8;b=o+u|0;u=39-u|0;u=Ri(a,1,14356,0,b,u)|0;p=d;return u|0}return 0}function Wf(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,f=0,o=0;e:do{if(!t)t=0;else{if((r[a>>0]|0)==43){t=t+-1|0;if(!t){t=0;break}else a=a+1|0}o=a+t|0;f=0;do{c=i[a>>0]|0;a=a+1|0;if((c+-48|0)>>>0>=10)if((c+-97|0)>>>0>=26)if((c+-65|0)>>>0<26)t=-55;else{t=1;break e}else t=-87;else t=-48;c=t+c|0;if(c>>>0>=10){t=1;break e}t=f*10|0;if(f>>>0>429496729){t=2;break e}f=t+c|0;if(f>>>0<t>>>0){t=2;break e}}while((a|0)!=(o|0));r[e>>0]=0;n[e+4>>2]=f;return}}while(0);r[e>>0]=1;r[e+1>>0]=t;return}function Yf(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0;i=p;p=p+16|0;o=i+8|0;c=i;f=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11537,13)|0;n[c>>2]=a;t=c+4|0;r[t>>0]=f;f=c+5|0;r[f>>0]=0;n[o>>2]=e;Af(c,11526,4,o,2456)|0;a=r[t>>0]|0;if(!(r[f>>0]|0)){o=a;p=i;return o|0}if(!(a<<24>>24)){a=n[c>>2]|0;a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,n[a>>2]&4|0?11519:11521,2)|0}else a=1;r[t>>0]=a;o=a;p=i;return o|0}function Kf(e){e=e|0;return}function Qf(e,a){e=e|0;a=a|0;switch(r[n[e>>2]>>0]&3){case 0:{a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11530,5)|0;return a|0}case 1:{a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11550,12)|0;return a|0}case 2:{a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11562,8)|0;return a|0}default:{a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11570,9)|0;return a|0}}return 0}function Zf(e,a){e=e|0;a=a|0;var t=0,c=0,n=0,f=0,o=0;o=p;p=p+48|0;n=o;c=r[e>>0]|0;t=c&255;if((c&255)<=99)if((c&255)<10){e=38;f=4}else{c=9784+(t<<1)|0;e=n+37|0;c=i[c>>0]|i[c+1>>0]<<8;r[e>>0]=c;r[e+1>>0]=c>>8;e=37}else{t=9784+(((c&255)%100|0)<<1&255)|0;e=n+37|0;t=i[t>>0]|i[t+1>>0]<<8;r[e>>0]=t;r[e+1>>0]=t>>8;e=36;t=((c&255)/100|0)&255;f=4}if((f|0)==4)r[n+e>>0]=(t&255)+48<<24>>24;f=Ri(a,1,14356,0,n+e|0,39-e|0)|0;p=o;return f|0}function Jf(e,a){e=e|0;a=a|0;return Xf(e,a)|0}function Xf(e,a){e=e|0;a=a|0;var t=0,c=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0;s=p;p=p+48|0;d=s;e=n[e>>2]|0;o=(e|0)>-1;e=o?e:0-e|0;if(e>>>0>9999){f=39;while(1){b=(e>>>0)%1e4|0;c=(e>>>0)/1e4|0;t=f+-4|0;l=9784+(((b>>>0)/100|0)<<1)|0;u=d+t|0;l=i[l>>0]|i[l+1>>0]<<8;r[u>>0]=l;r[u+1>>0]=l>>8;b=9784+(((b>>>0)%100|0)<<1)|0;f=d+(f+-2)|0;b=i[b>>0]|i[b+1>>0]<<8;r[f>>0]=b;r[f+1>>0]=b>>8;if(e>>>0>99999999){f=t;e=c}else{e=c;break}}}else t=39;if((e|0)>99){t=t+-2|0;u=9784+(((e>>>0)%100|0)<<1)|0;l=d+t|0;u=i[u>>0]|i[u+1>>0]<<8;r[l>>0]=u;r[l+1>>0]=u>>8;e=(e>>>0)/100|0}if((e|0)<10){l=t+-1|0;r[d+l>>0]=(e&255)+48<<24>>24;u=d+l|0;l=39-l|0;l=Ri(a,o,14356,0,u,l)|0;p=s;return l|0}else{l=t+-2|0;b=9784+(e<<1)|0;u=d+l|0;b=i[b>>0]|i[b+1>>0]<<8;r[u>>0]=b;r[u+1>>0]=b>>8;u=d+l|0;l=39-l|0;l=Ri(a,o,14356,0,u,l)|0;p=s;return l|0}return 0}function $f(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0;i=p;p=p+16|0;o=i+8|0;c=i;f=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11579,9)|0;n[c>>2]=a;t=c+4|0;r[t>>0]=f;f=c+5|0;r[f>>0]=0;n[o>>2]=e;Af(c,11588,11,o,2424)|0;n[o>>2]=e+4;Af(c,11599,9,o,2472)|0;a=r[t>>0]|0;if(!(r[f>>0]|0)){o=a;p=i;return o|0}if(!(a<<24>>24)){a=n[c>>2]|0;a=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,n[a>>2]&4|0?11519:11521,2)|0}else a=1;r[t>>0]=a;o=a;p=i;return o|0}function eo(e){e=e|0;return}function ao(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0,d=0;d=p;p=p+16|0;t=d+12|0;o=d;e=n[e>>2]|0;if(!(r[e>>0]|0)){o=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11608,4)|0;p=d;return o|0}c=Cd[n[(n[a+28>>2]|0)+12>>2]&15](n[a+24>>2]|0,11612,4)|0;n[o>>2]=a;f=o+8|0;r[f>>0]=c;c=o+4|0;n[c>>2]=0;i=o+9|0;r[i>>0]=0;n[t>>2]=e+1;Ui(o,t,2440)|0;a=n[c>>2]|0;e=r[f>>0]|0;if(a){do{if(!(e<<24>>24)){e=n[o>>2]|0;if(!(n[e>>2]&4))e=a;else{if((Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,11485,1)|0)<<24>>24){e=1;break}e=n[c>>2]|0}if(!((e|0)!=1|(r[i>>0]|0)==0)?(i=n[o>>2]|0,(Cd[n[(n[i+28>>2]|0)+12>>2]&15](n[i+24>>2]|0,5857,1)|0)<<24>>24):0){e=1;break}e=n[o>>2]|0;e=Cd[n[(n[e+28>>2]|0)+12>>2]&15](n[e+24>>2]|0,11486,1)|0}else e=1}while(0);r[f>>0]=e}o=e;p=d;return o|0}function to(e,a){e=e|0;a=a|0;var t=0,c=0,i=0,f=0,o=0;o=p;p=p+128|0;f=o;t=n[e>>2]|0;i=f+128|0;e=f;c=e+128|0;do{r[e>>0]=0;e=e+1|0}while((e|0)<(c|0));c=128;while(1){i=i+-1|0;e=t&15;t=t>>>4;r[i>>0]=((e&255)<10?48:87)+e<<24>>24;e=c+-1|0;if(!t)break;else c=e}if(e>>>0>128)Bi(e,128);else{f=Ri(a,1,11535,2,f+e|0,129-c|0)|0;p=o;return f|0}return 0}function ro(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0,m=0,g=0,v=0,y=0,_=0,w=0,A=0,k=0;k=p;p=p+16|0;l=k;do{if(e>>>0<245){s=e>>>0<11?16:e+11&-8;e=s>>>3;u=n[3446]|0;t=u>>>e;if(t&3|0){r=(t&1^1)+e|0;c=13824+(r<<1<<2)|0;a=c+8|0;e=n[a>>2]|0;i=e+8|0;t=n[i>>2]|0;if((c|0)==(t|0))n[3446]=u&~(1<<r);else{n[t+12>>2]=c;n[a>>2]=t}A=r<<3;n[e+4>>2]=A|3;A=e+A+4|0;n[A>>2]=n[A>>2]|1;A=i;p=k;return A|0}b=n[3448]|0;if(s>>>0>b>>>0){if(t|0){f=2<<e;t=t<<e&(f|0-f);t=(t&0-t)+-1|0;f=t>>>12&16;t=t>>>f;e=t>>>5&8;t=t>>>e;c=t>>>2&4;t=t>>>c;a=t>>>1&2;t=t>>>a;r=t>>>1&1;r=(e|f|c|a|r)+(t>>>r)|0;t=13824+(r<<1<<2)|0;a=t+8|0;c=n[a>>2]|0;f=c+8|0;e=n[f>>2]|0;if((t|0)==(e|0)){e=u&~(1<<r);n[3446]=e}else{n[e+12>>2]=t;n[a>>2]=e;e=u}i=(r<<3)-s|0;n[c+4>>2]=s|3;c=c+s|0;n[c+4>>2]=i|1;n[c+i>>2]=i;if(b|0){r=n[3451]|0;a=b>>>3;t=13824+(a<<1<<2)|0;a=1<<a;if(!(e&a)){n[3446]=e|a;a=t+8|0;e=t}else{e=t+8|0;a=e;e=n[e>>2]|0}n[a>>2]=r;n[e+12>>2]=r;n[r+8>>2]=e;n[r+12>>2]=t}n[3448]=i;n[3451]=c;A=f;p=k;return A|0}o=n[3447]|0;if(o){t=(o&0-o)+-1|0;f=t>>>12&16;t=t>>>f;i=t>>>5&8;t=t>>>i;d=t>>>2&4;t=t>>>d;e=t>>>1&2;t=t>>>e;r=t>>>1&1;r=n[14088+((i|f|d|e|r)+(t>>>r)<<2)>>2]|0;t=(n[r+4>>2]&-8)-s|0;e=n[r+16+(((n[r+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){d=t;f=r}else{do{f=(n[e+4>>2]&-8)-s|0;d=f>>>0<t>>>0;t=d?f:t;r=d?e:r;e=n[e+16+(((n[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);d=t;f=r}i=f+s|0;if(f>>>0<i>>>0){c=n[f+24>>2]|0;a=n[f+12>>2]|0;do{if((a|0)==(f|0)){e=f+20|0;a=n[e>>2]|0;if(!a){e=f+16|0;a=n[e>>2]|0;if(!a){t=0;break}}while(1){r=a+20|0;t=n[r>>2]|0;if(t|0){a=t;e=r;continue}r=a+16|0;t=n[r>>2]|0;if(!t)break;else{a=t;e=r}}n[e>>2]=0;t=a}else{t=n[f+8>>2]|0;n[t+12>>2]=a;n[a+8>>2]=t;t=a}}while(0);do{if(c|0){a=n[f+28>>2]|0;e=14088+(a<<2)|0;if((f|0)==(n[e>>2]|0)){n[e>>2]=t;if(!t){n[3447]=o&~(1<<a);break}}else{n[c+16+(((n[c+16>>2]|0)!=(f|0)&1)<<2)>>2]=t;if(!t)break}n[t+24>>2]=c;a=n[f+16>>2]|0;if(a|0){n[t+16>>2]=a;n[a+24>>2]=t}a=n[f+20>>2]|0;if(a|0){n[t+20>>2]=a;n[a+24>>2]=t}}}while(0);if(d>>>0<16){A=d+s|0;n[f+4>>2]=A|3;A=f+A+4|0;n[A>>2]=n[A>>2]|1}else{n[f+4>>2]=s|3;n[i+4>>2]=d|1;n[i+d>>2]=d;if(b|0){r=n[3451]|0;a=b>>>3;t=13824+(a<<1<<2)|0;a=1<<a;if(!(u&a)){n[3446]=u|a;a=t+8|0;e=t}else{e=t+8|0;a=e;e=n[e>>2]|0}n[a>>2]=r;n[e+12>>2]=r;n[r+8>>2]=e;n[r+12>>2]=t}n[3448]=d;n[3451]=i}A=f+8|0;p=k;return A|0}else u=s}else u=s}else u=s}else if(e>>>0<=4294967231){e=e+11|0;s=e&-8;r=n[3447]|0;if(r){t=0-s|0;e=e>>>8;if(e)if(s>>>0>16777215)d=31;else{u=(e+1048320|0)>>>16&8;w=e<<u;b=(w+520192|0)>>>16&4;w=w<<b;d=(w+245760|0)>>>16&2;d=14-(b|u|d)+(w<<d>>>15)|0;d=s>>>(d+7|0)&1|d<<1}else d=0;e=n[14088+(d<<2)>>2]|0;e:do{if(!e){c=0;e=0;w=57}else{c=0;f=s<<((d|0)==31?0:25-(d>>>1)|0);o=e;e=0;while(1){i=(n[o+4>>2]&-8)-s|0;if(i>>>0<t>>>0)if(!i){t=0;c=o;e=o;w=61;break e}else{t=i;e=o}i=n[o+20>>2]|0;o=n[o+16+(f>>>31<<2)>>2]|0;c=(i|0)==0|(i|0)==(o|0)?c:i;i=(o|0)==0;if(i){w=57;break}else f=f<<((i^1)&1)}}}while(0);if((w|0)==57){if((c|0)==0&(e|0)==0){e=2<<d;e=r&(e|0-e);if(!e){u=s;break}e=(e&0-e)+-1|0;d=e>>>12&16;e=e>>>d;o=e>>>5&8;e=e>>>o;b=e>>>2&4;e=e>>>b;u=e>>>1&2;e=e>>>u;c=e>>>1&1;c=n[14088+((o|d|b|u|c)+(e>>>c)<<2)>>2]|0;e=0}if(!c){o=t;d=e}else w=61}if((w|0)==61)while(1){w=0;b=(n[c+4>>2]&-8)-s|0;u=b>>>0<t>>>0;t=u?b:t;e=u?c:e;c=n[c+16+(((n[c+16>>2]|0)==0&1)<<2)>>2]|0;if(!c){o=t;d=e;break}else w=61}if((d|0)!=0?o>>>0<((n[3448]|0)-s|0)>>>0:0){f=d+s|0;if(d>>>0>=f>>>0){A=0;p=k;return A|0}i=n[d+24>>2]|0;a=n[d+12>>2]|0;do{if((a|0)==(d|0)){e=d+20|0;a=n[e>>2]|0;if(!a){e=d+16|0;a=n[e>>2]|0;if(!a){a=0;break}}while(1){c=a+20|0;t=n[c>>2]|0;if(t|0){a=t;e=c;continue}c=a+16|0;t=n[c>>2]|0;if(!t)break;else{a=t;e=c}}n[e>>2]=0}else{A=n[d+8>>2]|0;n[A+12>>2]=a;n[a+8>>2]=A}}while(0);do{if(i){e=n[d+28>>2]|0;t=14088+(e<<2)|0;if((d|0)==(n[t>>2]|0)){n[t>>2]=a;if(!a){r=r&~(1<<e);n[3447]=r;break}}else{n[i+16+(((n[i+16>>2]|0)!=(d|0)&1)<<2)>>2]=a;if(!a)break}n[a+24>>2]=i;e=n[d+16>>2]|0;if(e|0){n[a+16>>2]=e;n[e+24>>2]=a}e=n[d+20>>2]|0;if(e){n[a+20>>2]=e;n[e+24>>2]=a}}}while(0);do{if(o>>>0>=16){n[d+4>>2]=s|3;n[f+4>>2]=o|1;n[f+o>>2]=o;a=o>>>3;if(o>>>0<256){t=13824+(a<<1<<2)|0;e=n[3446]|0;a=1<<a;if(!(e&a)){n[3446]=e|a;a=t+8|0;e=t}else{e=t+8|0;a=e;e=n[e>>2]|0}n[a>>2]=f;n[e+12>>2]=f;n[f+8>>2]=e;n[f+12>>2]=t;break}a=o>>>8;if(a)if(o>>>0>16777215)a=31;else{w=(a+1048320|0)>>>16&8;A=a<<w;_=(A+520192|0)>>>16&4;A=A<<_;a=(A+245760|0)>>>16&2;a=14-(_|w|a)+(A<<a>>>15)|0;a=o>>>(a+7|0)&1|a<<1}else a=0;t=14088+(a<<2)|0;n[f+28>>2]=a;e=f+16|0;n[e+4>>2]=0;n[e>>2]=0;e=1<<a;if(!(r&e)){n[3447]=r|e;n[t>>2]=f;n[f+24>>2]=t;n[f+12>>2]=f;n[f+8>>2]=f;break}e=o<<((a|0)==31?0:25-(a>>>1)|0);t=n[t>>2]|0;while(1){if((n[t+4>>2]&-8|0)==(o|0)){w=97;break}r=t+16+(e>>>31<<2)|0;a=n[r>>2]|0;if(!a){w=96;break}else{e=e<<1;t=a}}if((w|0)==96){n[r>>2]=f;n[f+24>>2]=t;n[f+12>>2]=f;n[f+8>>2]=f;break}else if((w|0)==97){w=t+8|0;A=n[w>>2]|0;n[A+12>>2]=f;n[w>>2]=f;n[f+8>>2]=A;n[f+12>>2]=t;n[f+24>>2]=0;break}}else{A=o+s|0;n[d+4>>2]=A|3;A=d+A+4|0;n[A>>2]=n[A>>2]|1}}while(0);A=d+8|0;p=k;return A|0}else u=s}else u=s}else u=-1}while(0);t=n[3448]|0;if(t>>>0>=u>>>0){e=t-u|0;a=n[3451]|0;if(e>>>0>15){A=a+u|0;n[3451]=A;n[3448]=e;n[A+4>>2]=e|1;n[A+e>>2]=e;n[a+4>>2]=u|3}else{n[3448]=0;n[3451]=0;n[a+4>>2]=t|3;A=a+t+4|0;n[A>>2]=n[A>>2]|1}A=a+8|0;p=k;return A|0}f=n[3449]|0;if(f>>>0>u>>>0){_=f-u|0;n[3449]=_;A=n[3452]|0;w=A+u|0;n[3452]=w;n[w+4>>2]=_|1;n[A+4>>2]=u|3;A=A+8|0;p=k;return A|0}if(!(n[3564]|0)){n[3566]=4096;n[3565]=4096;n[3567]=-1;n[3568]=-1;n[3569]=0;n[3557]=0;e=l&-16^1431655768;n[l>>2]=e;n[3564]=e;e=4096}else e=n[3566]|0;o=u+48|0;d=u+47|0;i=e+d|0;r=0-e|0;s=i&r;if(s>>>0<=u>>>0){A=0;p=k;return A|0}e=n[3556]|0;if(e|0?(b=n[3554]|0,l=b+s|0,l>>>0<=b>>>0|l>>>0>e>>>0):0){A=0;p=k;return A|0}e:do{if(!(n[3557]&4)){t=n[3452]|0;a:do{if(t){c=14232;while(1){e=n[c>>2]|0;if(e>>>0<=t>>>0?(g=c+4|0,(e+(n[g>>2]|0)|0)>>>0>t>>>0):0)break;e=n[c+8>>2]|0;if(!e){w=118;break a}else c=e}a=i-f&r;if(a>>>0<2147483647){e=cd(a|0)|0;if((e|0)==((n[c>>2]|0)+(n[g>>2]|0)|0)){if((e|0)!=(-1|0)){f=e;i=a;w=135;break e}}else{r=e;w=126}}else a=0}else w=118}while(0);do{if((w|0)==118){t=cd(0)|0;if((t|0)!=(-1|0)?(a=t,h=n[3565]|0,m=h+-1|0,a=((m&a|0)==0?0:(m+a&0-h)-a|0)+s|0,h=n[3554]|0,m=a+h|0,a>>>0>u>>>0&a>>>0<2147483647):0){g=n[3556]|0;if(g|0?m>>>0<=h>>>0|m>>>0>g>>>0:0){a=0;break}e=cd(a|0)|0;if((e|0)==(t|0)){f=t;i=a;w=135;break e}else{r=e;w=126}}else a=0}}while(0);do{if((w|0)==126){t=0-a|0;if(!(o>>>0>a>>>0&(a>>>0<2147483647&(r|0)!=(-1|0))))if((r|0)==(-1|0)){a=0;break}else{f=r;i=a;w=135;break e}e=n[3566]|0;e=d-a+e&0-e;if(e>>>0>=2147483647){f=r;i=a;w=135;break e}if((cd(e|0)|0)==(-1|0)){cd(t|0)|0;a=0;break}else{f=r;i=e+a|0;w=135;break e}}}while(0);n[3557]=n[3557]|4;w=133}else{a=0;w=133}}while(0);if(((w|0)==133?s>>>0<2147483647:0)?(v=cd(s|0)|0,g=cd(0)|0,_=g-v|0,y=_>>>0>(u+40|0)>>>0,!((v|0)==(-1|0)|y^1|v>>>0<g>>>0&((v|0)!=(-1|0)&(g|0)!=(-1|0))^1)):0){f=v;i=y?_:a;w=135}if((w|0)==135){a=(n[3554]|0)+i|0;n[3554]=a;if(a>>>0>(n[3555]|0)>>>0)n[3555]=a;d=n[3452]|0;do{if(d){c=14232;while(1){a=n[c>>2]|0;r=c+4|0;e=n[r>>2]|0;if((f|0)==(a+e|0)){w=145;break}t=n[c+8>>2]|0;if(!t)break;else c=t}if(((w|0)==145?(n[c+12>>2]&8|0)==0:0)?d>>>0<f>>>0&d>>>0>=a>>>0:0){n[r>>2]=e+i;A=d+8|0;A=(A&7|0)==0?0:0-A&7;w=d+A|0;A=(n[3449]|0)+(i-A)|0;n[3452]=w;n[3449]=A;n[w+4>>2]=A|1;n[w+A+4>>2]=40;n[3453]=n[3568];break}if(f>>>0<(n[3450]|0)>>>0)n[3450]=f;t=f+i|0;e=14232;while(1){if((n[e>>2]|0)==(t|0)){w=153;break}a=n[e+8>>2]|0;if(!a)break;else e=a}if((w|0)==153?(n[e+12>>2]&8|0)==0:0){n[e>>2]=f;b=e+4|0;n[b>>2]=(n[b>>2]|0)+i;b=f+8|0;b=f+((b&7|0)==0?0:0-b&7)|0;a=t+8|0;a=t+((a&7|0)==0?0:0-a&7)|0;s=b+u|0;o=a-b-u|0;n[b+4>>2]=u|3;do{if((a|0)!=(d|0)){if((a|0)==(n[3451]|0)){A=(n[3448]|0)+o|0;n[3448]=A;n[3451]=s;n[s+4>>2]=A|1;n[s+A>>2]=A;break}e=n[a+4>>2]|0;if((e&3|0)==1){f=e&-8;r=e>>>3;e:do{if(e>>>0<256){e=n[a+8>>2]|0;t=n[a+12>>2]|0;if((t|0)==(e|0)){n[3446]=n[3446]&~(1<<r);break}else{n[e+12>>2]=t;n[t+8>>2]=e;break}}else{i=n[a+24>>2]|0;e=n[a+12>>2]|0;do{if((e|0)==(a|0)){r=a+16|0;t=r+4|0;e=n[t>>2]|0;if(!e){e=n[r>>2]|0;if(!e){e=0;break}else c=r}else c=t;while(1){r=e+20|0;t=n[r>>2]|0;if(t|0){e=t;c=r;continue}r=e+16|0;t=n[r>>2]|0;if(!t)break;else{e=t;c=r}}n[c>>2]=0}else{A=n[a+8>>2]|0;n[A+12>>2]=e;n[e+8>>2]=A}}while(0);if(!i)break;t=n[a+28>>2]|0;r=14088+(t<<2)|0;do{if((a|0)!=(n[r>>2]|0)){n[i+16+(((n[i+16>>2]|0)!=(a|0)&1)<<2)>>2]=e;if(!e)break e}else{n[r>>2]=e;if(e|0)break;n[3447]=n[3447]&~(1<<t);break e}}while(0);n[e+24>>2]=i;r=a+16|0;t=n[r>>2]|0;if(t|0){n[e+16>>2]=t;n[t+24>>2]=e}t=n[r+4>>2]|0;if(!t)break;n[e+20>>2]=t;n[t+24>>2]=e}}while(0);a=a+f|0;c=f+o|0}else c=o;a=a+4|0;n[a>>2]=n[a>>2]&-2;n[s+4>>2]=c|1;n[s+c>>2]=c;a=c>>>3;if(c>>>0<256){t=13824+(a<<1<<2)|0;e=n[3446]|0;a=1<<a;if(!(e&a)){n[3446]=e|a;a=t+8|0;e=t}else{e=t+8|0;a=e;e=n[e>>2]|0}n[a>>2]=s;n[e+12>>2]=s;n[s+8>>2]=e;n[s+12>>2]=t;break}a=c>>>8;do{if(!a)e=0;else{if(c>>>0>16777215){e=31;break}w=(a+1048320|0)>>>16&8;A=a<<w;_=(A+520192|0)>>>16&4;A=A<<_;e=(A+245760|0)>>>16&2;e=14-(_|w|e)+(A<<e>>>15)|0;e=c>>>(e+7|0)&1|e<<1}}while(0);r=14088+(e<<2)|0;n[s+28>>2]=e;a=s+16|0;n[a+4>>2]=0;n[a>>2]=0;a=n[3447]|0;t=1<<e;if(!(a&t)){n[3447]=a|t;n[r>>2]=s;n[s+24>>2]=r;n[s+12>>2]=s;n[s+8>>2]=s;break}e=c<<((e|0)==31?0:25-(e>>>1)|0);t=n[r>>2]|0;while(1){if((n[t+4>>2]&-8|0)==(c|0)){w=194;break}r=t+16+(e>>>31<<2)|0;a=n[r>>2]|0;if(!a){w=193;break}else{e=e<<1;t=a}}if((w|0)==193){n[r>>2]=s;n[s+24>>2]=t;n[s+12>>2]=s;n[s+8>>2]=s;break}else if((w|0)==194){w=t+8|0;A=n[w>>2]|0;n[A+12>>2]=s;n[w>>2]=s;n[s+8>>2]=A;n[s+12>>2]=t;n[s+24>>2]=0;break}}else{A=(n[3449]|0)+o|0;n[3449]=A;n[3452]=s;n[s+4>>2]=A|1}}while(0);A=b+8|0;p=k;return A|0}e=14232;while(1){a=n[e>>2]|0;if(a>>>0<=d>>>0?(A=a+(n[e+4>>2]|0)|0,A>>>0>d>>>0):0)break;e=n[e+8>>2]|0}c=A+-47|0;e=c+8|0;e=c+((e&7|0)==0?0:0-e&7)|0;c=d+16|0;e=e>>>0<c>>>0?d:e;a=e+8|0;t=f+8|0;t=(t&7|0)==0?0:0-t&7;w=f+t|0;t=i+-40-t|0;n[3452]=w;n[3449]=t;n[w+4>>2]=t|1;n[w+t+4>>2]=40;n[3453]=n[3568];t=e+4|0;n[t>>2]=27;n[a>>2]=n[3558];n[a+4>>2]=n[3559];n[a+8>>2]=n[3560];n[a+12>>2]=n[3561];n[3558]=f;n[3559]=i;n[3561]=0;n[3560]=a;a=e+24|0;do{w=a;a=a+4|0;n[a>>2]=7}while((w+8|0)>>>0<A>>>0);if((e|0)!=(d|0)){i=e-d|0;n[t>>2]=n[t>>2]&-2;n[d+4>>2]=i|1;n[e>>2]=i;a=i>>>3;if(i>>>0<256){t=13824+(a<<1<<2)|0;e=n[3446]|0;a=1<<a;if(!(e&a)){n[3446]=e|a;a=t+8|0;e=t}else{e=t+8|0;a=e;e=n[e>>2]|0}n[a>>2]=d;n[e+12>>2]=d;n[d+8>>2]=e;n[d+12>>2]=t;break}a=i>>>8;if(a)if(i>>>0>16777215)t=31;else{w=(a+1048320|0)>>>16&8;A=a<<w;_=(A+520192|0)>>>16&4;A=A<<_;t=(A+245760|0)>>>16&2;t=14-(_|w|t)+(A<<t>>>15)|0;t=i>>>(t+7|0)&1|t<<1}else t=0;r=14088+(t<<2)|0;n[d+28>>2]=t;n[d+20>>2]=0;n[c>>2]=0;a=n[3447]|0;e=1<<t;if(!(a&e)){n[3447]=a|e;n[r>>2]=d;n[d+24>>2]=r;n[d+12>>2]=d;n[d+8>>2]=d;break}e=i<<((t|0)==31?0:25-(t>>>1)|0);t=n[r>>2]|0;while(1){if((n[t+4>>2]&-8|0)==(i|0)){w=216;break}r=t+16+(e>>>31<<2)|0;a=n[r>>2]|0;if(!a){w=215;break}else{e=e<<1;t=a}}if((w|0)==215){n[r>>2]=d;n[d+24>>2]=t;n[d+12>>2]=d;n[d+8>>2]=d;break}else if((w|0)==216){w=t+8|0;A=n[w>>2]|0;n[A+12>>2]=d;n[w>>2]=d;n[d+8>>2]=A;n[d+12>>2]=t;n[d+24>>2]=0;break}}}else{A=n[3450]|0;if((A|0)==0|f>>>0<A>>>0)n[3450]=f;n[3558]=f;n[3559]=i;n[3561]=0;n[3455]=n[3564];n[3454]=-1;a=0;do{A=13824+(a<<1<<2)|0;n[A+12>>2]=A;n[A+8>>2]=A;a=a+1|0}while((a|0)!=32);A=f+8|0;A=(A&7|0)==0?0:0-A&7;w=f+A|0;A=i+-40-A|0;n[3452]=w;n[3449]=A;n[w+4>>2]=A|1;n[w+A+4>>2]=40;n[3453]=n[3568]}}while(0);a=n[3449]|0;if(a>>>0>u>>>0){_=a-u|0;n[3449]=_;A=n[3452]|0;w=A+u|0;n[3452]=w;n[w+4>>2]=_|1;n[A+4>>2]=u|3;A=A+8|0;p=k;return A|0}}n[(mo()|0)>>2]=12;A=0;p=k;return A|0}function co(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0;if(!e)return;t=e+-8|0;r=n[3450]|0;e=n[e+-4>>2]|0;a=e&-8;s=t+a|0;do{if(!(e&1)){c=n[t>>2]|0;if(!(e&3))return;i=t+(0-c)|0;f=c+a|0;if(i>>>0<r>>>0)return;if((i|0)==(n[3451]|0)){a=s+4|0;e=n[a>>2]|0;if((e&3|0)!=3){o=i;d=i;a=f;break}n[3448]=f;n[a>>2]=e&-2;n[i+4>>2]=f|1;n[i+f>>2]=f;return}t=c>>>3;if(c>>>0<256){e=n[i+8>>2]|0;a=n[i+12>>2]|0;if((a|0)==(e|0)){n[3446]=n[3446]&~(1<<t);o=i;d=i;a=f;break}else{n[e+12>>2]=a;n[a+8>>2]=e;o=i;d=i;a=f;break}}c=n[i+24>>2]|0;e=n[i+12>>2]|0;do{if((e|0)==(i|0)){t=i+16|0;a=t+4|0;e=n[a>>2]|0;if(!e){e=n[t>>2]|0;if(!e){t=0;break}else r=t}else r=a;while(1){t=e+20|0;a=n[t>>2]|0;if(a|0){e=a;r=t;continue}t=e+16|0;a=n[t>>2]|0;if(!a)break;else{e=a;r=t}}n[r>>2]=0;t=e}else{t=n[i+8>>2]|0;n[t+12>>2]=e;n[e+8>>2]=t;t=e}}while(0);if(c){e=n[i+28>>2]|0;a=14088+(e<<2)|0;if((i|0)==(n[a>>2]|0)){n[a>>2]=t;if(!t){n[3447]=n[3447]&~(1<<e);o=i;d=i;a=f;break}}else{n[c+16+(((n[c+16>>2]|0)!=(i|0)&1)<<2)>>2]=t;if(!t){o=i;d=i;a=f;break}}n[t+24>>2]=c;a=i+16|0;e=n[a>>2]|0;if(e|0){n[t+16>>2]=e;n[e+24>>2]=t}e=n[a+4>>2]|0;if(e){n[t+20>>2]=e;n[e+24>>2]=t;o=i;d=i;a=f}else{o=i;d=i;a=f}}else{o=i;d=i;a=f}}else{o=t;d=t}}while(0);if(o>>>0>=s>>>0)return;e=s+4|0;r=n[e>>2]|0;if(!(r&1))return;if(!(r&2)){e=n[3451]|0;if((s|0)==(n[3452]|0)){s=(n[3449]|0)+a|0;n[3449]=s;n[3452]=d;n[d+4>>2]=s|1;if((d|0)!=(e|0))return;n[3451]=0;n[3448]=0;return}if((s|0)==(e|0)){s=(n[3448]|0)+a|0;n[3448]=s;n[3451]=o;n[d+4>>2]=s|1;n[o+s>>2]=s;return}c=(r&-8)+a|0;t=r>>>3;do{if(r>>>0<256){a=n[s+8>>2]|0;e=n[s+12>>2]|0;if((e|0)==(a|0)){n[3446]=n[3446]&~(1<<t);break}else{n[a+12>>2]=e;n[e+8>>2]=a;break}}else{i=n[s+24>>2]|0;e=n[s+12>>2]|0;do{if((e|0)==(s|0)){t=s+16|0;a=t+4|0;e=n[a>>2]|0;if(!e){e=n[t>>2]|0;if(!e){t=0;break}else r=t}else r=a;while(1){t=e+20|0;a=n[t>>2]|0;if(a|0){e=a;r=t;continue}t=e+16|0;a=n[t>>2]|0;if(!a)break;else{e=a;r=t}}n[r>>2]=0;t=e}else{t=n[s+8>>2]|0;n[t+12>>2]=e;n[e+8>>2]=t;t=e}}while(0);if(i|0){e=n[s+28>>2]|0;a=14088+(e<<2)|0;if((s|0)==(n[a>>2]|0)){n[a>>2]=t;if(!t){n[3447]=n[3447]&~(1<<e);break}}else{n[i+16+(((n[i+16>>2]|0)!=(s|0)&1)<<2)>>2]=t;if(!t)break}n[t+24>>2]=i;a=s+16|0;e=n[a>>2]|0;if(e|0){n[t+16>>2]=e;n[e+24>>2]=t}e=n[a+4>>2]|0;if(e|0){n[t+20>>2]=e;n[e+24>>2]=t}}}}while(0);n[d+4>>2]=c|1;n[o+c>>2]=c;if((d|0)==(n[3451]|0)){n[3448]=c;return}}else{n[e>>2]=r&-2;n[d+4>>2]=a|1;n[o+a>>2]=a;c=a}e=c>>>3;if(c>>>0<256){t=13824+(e<<1<<2)|0;a=n[3446]|0;e=1<<e;if(!(a&e)){n[3446]=a|e;e=t+8|0;a=t}else{a=t+8|0;e=a;a=n[a>>2]|0}n[e>>2]=d;n[a+12>>2]=d;n[d+8>>2]=a;n[d+12>>2]=t;return}e=c>>>8;if(e)if(c>>>0>16777215)a=31;else{o=(e+1048320|0)>>>16&8;s=e<<o;f=(s+520192|0)>>>16&4;s=s<<f;a=(s+245760|0)>>>16&2;a=14-(f|o|a)+(s<<a>>>15)|0;a=c>>>(a+7|0)&1|a<<1}else a=0;r=14088+(a<<2)|0;n[d+28>>2]=a;n[d+20>>2]=0;n[d+16>>2]=0;e=n[3447]|0;t=1<<a;do{if(e&t){a=c<<((a|0)==31?0:25-(a>>>1)|0);t=n[r>>2]|0;while(1){if((n[t+4>>2]&-8|0)==(c|0)){e=73;break}r=t+16+(a>>>31<<2)|0;e=n[r>>2]|0;if(!e){e=72;break}else{a=a<<1;t=e}}if((e|0)==72){n[r>>2]=d;n[d+24>>2]=t;n[d+12>>2]=d;n[d+8>>2]=d;break}else if((e|0)==73){o=t+8|0;s=n[o>>2]|0;n[s+12>>2]=d;n[o>>2]=d;n[d+8>>2]=s;n[d+12>>2]=t;n[d+24>>2]=0;break}}else{n[3447]=e|t;n[r>>2]=d;n[d+24>>2]=r;n[d+12>>2]=d;n[d+8>>2]=d}}while(0);s=(n[3454]|0)+-1|0;n[3454]=s;if(!s)e=14240;else return;while(1){e=n[e>>2]|0;if(!e)break;else e=e+8|0}n[3454]=-1;return}function no(e,a){e=e|0;a=a|0;var t=0;if(e){t=U(a,e)|0;if((a|e)>>>0>65535)t=((t>>>0)/(e>>>0)|0|0)==(a|0)?t:-1}else t=0;a=ro(t)|0;if(!a)return a|0;if(!(n[a+-4>>2]&3))return a|0;Zo(a|0,0,t|0)|0;return a|0}function io(e,a){e=e|0;a=a|0;var t=0,r=0;if(!e){e=ro(a)|0;return e|0}if(a>>>0>4294967231){n[(mo()|0)>>2]=12;e=0;return e|0}t=fo(e+-8|0,a>>>0<11?16:a+11&-8)|0;if(t|0){e=t+8|0;return e|0}t=ro(a)|0;if(!t){e=0;return e|0}r=n[e+-4>>2]|0;r=(r&-8)-((r&3|0)==0?8:4)|0;ad(t|0,e|0,(r>>>0<a>>>0?r:a)|0)|0;co(e);e=t;return e|0}function fo(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0;u=e+4|0;b=n[u>>2]|0;t=b&-8;o=e+t|0;if(!(b&3)){if(a>>>0<256){e=0;return e|0}if(t>>>0>=(a+4|0)>>>0?(t-a|0)>>>0<=n[3566]<<1>>>0:0)return e|0;e=0;return e|0}if(t>>>0>=a>>>0){t=t-a|0;if(t>>>0<=15)return e|0;s=e+a|0;n[u>>2]=b&1|a|2;n[s+4>>2]=t|3;a=s+t+4|0;n[a>>2]=n[a>>2]|1;oo(s,t);return e|0}if((o|0)==(n[3452]|0)){s=(n[3449]|0)+t|0;r=s-a|0;t=e+a|0;if(s>>>0<=a>>>0){e=0;return e|0}n[u>>2]=b&1|a|2;n[t+4>>2]=r|1;n[3452]=t;n[3449]=r;return e|0}if((o|0)==(n[3451]|0)){c=(n[3448]|0)+t|0;if(c>>>0<a>>>0){e=0;return e|0}t=c-a|0;r=b&1;if(t>>>0>15){b=e+a|0;s=b+t|0;n[u>>2]=r|a|2;n[b+4>>2]=t|1;n[s>>2]=t;r=s+4|0;n[r>>2]=n[r>>2]&-2;r=b}else{n[u>>2]=r|c|2;r=e+c+4|0;n[r>>2]=n[r>>2]|1;r=0;t=0}n[3448]=t;n[3451]=r;return e|0}r=n[o+4>>2]|0;if(r&2|0){e=0;return e|0}d=(r&-8)+t|0;if(d>>>0<a>>>0){e=0;return e|0}s=d-a|0;c=r>>>3;do{if(r>>>0<256){r=n[o+8>>2]|0;t=n[o+12>>2]|0;if((t|0)==(r|0)){n[3446]=n[3446]&~(1<<c);break}else{n[r+12>>2]=t;n[t+8>>2]=r;break}}else{f=n[o+24>>2]|0;t=n[o+12>>2]|0;do{if((t|0)==(o|0)){c=o+16|0;r=c+4|0;t=n[r>>2]|0;if(!t){t=n[c>>2]|0;if(!t){c=0;break}else i=c}else i=r;while(1){c=t+20|0;r=n[c>>2]|0;if(r|0){t=r;i=c;continue}c=t+16|0;r=n[c>>2]|0;if(!r)break;else{t=r;i=c}}n[i>>2]=0;c=t}else{c=n[o+8>>2]|0;n[c+12>>2]=t;n[t+8>>2]=c;c=t}}while(0);if(f|0){t=n[o+28>>2]|0;r=14088+(t<<2)|0;if((o|0)==(n[r>>2]|0)){n[r>>2]=c;if(!c){n[3447]=n[3447]&~(1<<t);break}}else{n[f+16+(((n[f+16>>2]|0)!=(o|0)&1)<<2)>>2]=c;if(!c)break}n[c+24>>2]=f;r=o+16|0;t=n[r>>2]|0;if(t|0){n[c+16>>2]=t;n[t+24>>2]=c}t=n[r+4>>2]|0;if(t|0){n[c+20>>2]=t;n[t+24>>2]=c}}}}while(0);t=b&1;if(s>>>0<16){n[u>>2]=d|t|2;a=e+d+4|0;n[a>>2]=n[a>>2]|1;return e|0}else{b=e+a|0;n[u>>2]=t|a|2;n[b+4>>2]=s|3;a=b+s+4|0;n[a>>2]=n[a>>2]|1;oo(b,s);return e|0}return 0}function oo(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0,d=0;d=e+a|0;t=n[e+4>>2]|0;do{if(!(t&1)){r=n[e>>2]|0;if(!(t&3))return;i=e+(0-r)|0;f=r+a|0;if((i|0)==(n[3451]|0)){e=d+4|0;t=n[e>>2]|0;if((t&3|0)!=3){o=i;e=f;break}n[3448]=f;n[e>>2]=t&-2;n[i+4>>2]=f|1;n[i+f>>2]=f;return}a=r>>>3;if(r>>>0<256){t=n[i+8>>2]|0;e=n[i+12>>2]|0;if((e|0)==(t|0)){n[3446]=n[3446]&~(1<<a);o=i;e=f;break}else{n[t+12>>2]=e;n[e+8>>2]=t;o=i;e=f;break}}c=n[i+24>>2]|0;t=n[i+12>>2]|0;do{if((t|0)==(i|0)){a=i+16|0;e=a+4|0;t=n[e>>2]|0;if(!t){t=n[a>>2]|0;if(!t){a=0;break}else r=a}else r=e;while(1){a=t+20|0;e=n[a>>2]|0;if(e|0){t=e;r=a;continue}a=t+16|0;e=n[a>>2]|0;if(!e)break;else{t=e;r=a}}n[r>>2]=0;a=t}else{a=n[i+8>>2]|0;n[a+12>>2]=t;n[t+8>>2]=a;a=t}}while(0);if(c){t=n[i+28>>2]|0;e=14088+(t<<2)|0;if((i|0)==(n[e>>2]|0)){n[e>>2]=a;if(!a){n[3447]=n[3447]&~(1<<t);o=i;e=f;break}}else{n[c+16+(((n[c+16>>2]|0)!=(i|0)&1)<<2)>>2]=a;if(!a){o=i;e=f;break}}n[a+24>>2]=c;e=i+16|0;t=n[e>>2]|0;if(t|0){n[a+16>>2]=t;n[t+24>>2]=a}t=n[e+4>>2]|0;if(t){n[a+20>>2]=t;n[t+24>>2]=a;o=i;e=f}else{o=i;e=f}}else{o=i;e=f}}else{o=e;e=a}}while(0);t=d+4|0;r=n[t>>2]|0;if(!(r&2)){t=n[3451]|0;if((d|0)==(n[3452]|0)){d=(n[3449]|0)+e|0;n[3449]=d;n[3452]=o;n[o+4>>2]=d|1;if((o|0)!=(t|0))return;n[3451]=0;n[3448]=0;return}if((d|0)==(t|0)){d=(n[3448]|0)+e|0;n[3448]=d;n[3451]=o;n[o+4>>2]=d|1;n[o+d>>2]=d;return}c=(r&-8)+e|0;a=r>>>3;do{if(r>>>0<256){e=n[d+8>>2]|0;t=n[d+12>>2]|0;if((t|0)==(e|0)){n[3446]=n[3446]&~(1<<a);break}else{n[e+12>>2]=t;n[t+8>>2]=e;break}}else{i=n[d+24>>2]|0;t=n[d+12>>2]|0;do{if((t|0)==(d|0)){a=d+16|0;e=a+4|0;t=n[e>>2]|0;if(!t){t=n[a>>2]|0;if(!t){a=0;break}else r=a}else r=e;while(1){a=t+20|0;e=n[a>>2]|0;if(e|0){t=e;r=a;continue}a=t+16|0;e=n[a>>2]|0;if(!e)break;else{t=e;r=a}}n[r>>2]=0;a=t}else{a=n[d+8>>2]|0;n[a+12>>2]=t;n[t+8>>2]=a;a=t}}while(0);if(i|0){t=n[d+28>>2]|0;e=14088+(t<<2)|0;if((d|0)==(n[e>>2]|0)){n[e>>2]=a;if(!a){n[3447]=n[3447]&~(1<<t);break}}else{n[i+16+(((n[i+16>>2]|0)!=(d|0)&1)<<2)>>2]=a;if(!a)break}n[a+24>>2]=i;e=d+16|0;t=n[e>>2]|0;if(t|0){n[a+16>>2]=t;n[t+24>>2]=a}t=n[e+4>>2]|0;if(t|0){n[a+20>>2]=t;n[t+24>>2]=a}}}}while(0);n[o+4>>2]=c|1;n[o+c>>2]=c;if((o|0)==(n[3451]|0)){n[3448]=c;return}}else{n[t>>2]=r&-2;n[o+4>>2]=e|1;n[o+e>>2]=e;c=e}t=c>>>3;if(c>>>0<256){a=13824+(t<<1<<2)|0;e=n[3446]|0;t=1<<t;if(!(e&t)){n[3446]=e|t;t=a+8|0;e=a}else{e=a+8|0;t=e;e=n[e>>2]|0}n[t>>2]=o;n[e+12>>2]=o;n[o+8>>2]=e;n[o+12>>2]=a;return}t=c>>>8;if(t)if(c>>>0>16777215)e=31;else{f=(t+1048320|0)>>>16&8;d=t<<f;i=(d+520192|0)>>>16&4;d=d<<i;e=(d+245760|0)>>>16&2;e=14-(i|f|e)+(d<<e>>>15)|0;e=c>>>(e+7|0)&1|e<<1}else e=0;r=14088+(e<<2)|0;n[o+28>>2]=e;n[o+20>>2]=0;n[o+16>>2]=0;t=n[3447]|0;a=1<<e;if(!(t&a)){n[3447]=t|a;n[r>>2]=o;n[o+24>>2]=r;n[o+12>>2]=o;n[o+8>>2]=o;return}e=c<<((e|0)==31?0:25-(e>>>1)|0);a=n[r>>2]|0;while(1){if((n[a+4>>2]&-8|0)==(c|0)){t=69;break}r=a+16+(e>>>31<<2)|0;t=n[r>>2]|0;if(!t){t=68;break}else{e=e<<1;a=t}}if((t|0)==68){n[r>>2]=o;n[o+24>>2]=a;n[o+12>>2]=o;n[o+8>>2]=o;return}else if((t|0)==69){f=a+8|0;d=n[f>>2]|0;n[d+12>>2]=o;n[f>>2]=o;n[o+8>>2]=d;n[o+12>>2]=a;n[o+24>>2]=0;return}}function so(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,i=0,f=0,o=0;e=e>>>0>16?e:16;if(e+-1&e){t=16;while(1)if(t>>>0<e>>>0)t=t<<1;else{e=t;break}}if((-64-e|0)>>>0<=a>>>0){n[(mo()|0)>>2]=12;f=0;return f|0}i=a>>>0<11?16:a+11&-8;t=ro(i+12+e|0)|0;if(!t){f=0;return f|0}c=t+-8|0;do{if(t&e+-1){r=(t+e+-1&0-e)+-8|0;a=c;r=(r-a|0)>>>0>15?r:r+e|0;a=r-a|0;e=t+-4|0;o=n[e>>2]|0;t=(o&-8)-a|0;if(!(o&3)){n[r>>2]=(n[c>>2]|0)+a;n[r+4>>2]=t;a=r;e=r;break}else{o=r+4|0;n[o>>2]=t|n[o>>2]&1|2;t=r+t+4|0;n[t>>2]=n[t>>2]|1;n[e>>2]=a|n[e>>2]&1|2;n[o>>2]=n[o>>2]|1;oo(c,a);a=r;e=r;break}}else{a=c;e=c}}while(0);t=e+4|0;e=n[t>>2]|0;if(e&3|0?(f=e&-8,f>>>0>(i+16|0)>>>0):0){o=f-i|0;f=a+i|0;n[t>>2]=i|e&1|2;n[f+4>>2]=o|3;i=f+o+4|0;n[i>>2]=n[i>>2]|1;oo(f,o)}o=a+8|0;return o|0}function bo(e,a,t){e=e|0;a=a|0;t=t|0;var r=0;do{if((a|0)!=8){r=a>>>2;if((a&3|0)!=0|(r|0)==0){e=22;return e|0}if(r+1073741823&r|0){e=22;return e|0}if((-64-a|0)>>>0<t>>>0){e=12;return e|0}else{a=so(a>>>0>16?a:16,t)|0;break}}else a=ro(t)|0}while(0);if(!a){e=12;return e|0}n[e>>2]=a;e=0;return e|0}function uo(){return 14280}function lo(e){e=e|0;var a=0,t=0;a=p;p=p+16|0;t=a;n[t>>2]=yo(n[e+60>>2]|0)|0;e=ho(Je(6,t|0)|0)|0;p=a;return e|0}function po(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0;c=p;p=p+32|0;i=c;r=c+20|0;n[i>>2]=n[e+60>>2];n[i+4>>2]=0;n[i+8>>2]=a;n[i+12>>2]=r;n[i+16>>2]=t;if((ho(He(140,i|0)|0)|0)<0){n[r>>2]=-1;e=-1}else e=n[r>>2]|0;p=c;return e|0}function ho(e){e=e|0;if(e>>>0>4294963200){n[(mo()|0)>>2]=0-e;e=-1}return e|0}function mo(){return(go()|0)+64|0}function go(){return vo()|0}function vo(){return 4252}function yo(e){e=e|0;return e|0}function _o(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0;i=p;p=p+32|0;c=i;n[e+36>>2]=11;if((n[e>>2]&64|0)==0?(n[c>>2]=n[e+60>>2],n[c+4>>2]=21523,n[c+8>>2]=i+16,qe(54,c|0)|0):0)r[e+75>>0]=-1;c=wo(e,a,t)|0;p=i;return c|0}function wo(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,h=0;u=p;p=p+48|0;o=u+16|0;c=u;r=u+32|0;d=e+28|0;i=n[d>>2]|0;n[r>>2]=i;s=e+20|0;i=(n[s>>2]|0)-i|0;n[r+4>>2]=i;n[r+8>>2]=a;n[r+12>>2]=t;i=i+t|0;f=e+60|0;n[c>>2]=n[f>>2];n[c+4>>2]=r;n[c+8>>2]=2;a=ho(ra(146,c|0)|0)|0;e:do{if((i|0)!=(a|0)){c=2;while(1){if((a|0)<0)break;i=i-a|0;h=n[r+4>>2]|0;l=a>>>0>h>>>0;r=l?r+8|0:r;c=(l<<31>>31)+c|0;h=a-(l?h:0)|0;n[r>>2]=(n[r>>2]|0)+h;l=r+4|0;n[l>>2]=(n[l>>2]|0)-h;n[o>>2]=n[f>>2];n[o+4>>2]=r;n[o+8>>2]=c;a=ho(ra(146,o|0)|0)|0;if((i|0)==(a|0)){b=3;break e}}n[e+16>>2]=0;n[d>>2]=0;n[s>>2]=0;n[e>>2]=n[e>>2]|32;if((c|0)==2)t=0;else t=t-(n[r+4>>2]|0)|0}else b=3}while(0);if((b|0)==3){h=n[e+44>>2]|0;n[e+16>>2]=h+(n[e+48>>2]|0);n[d>>2]=h;n[s>>2]=h}p=u;return t|0}function Ao(e){e=e|0;var a=0,t=0,c=0;c=e;e:do{if(!(c&3)){a=e;t=4}else{a=c;while(1){if(!(r[e>>0]|0))break e;e=e+1|0;a=e;if(!(a&3)){a=e;t=4;break}}}}while(0);if((t|0)==4){while(1){e=n[a>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009))a=a+4|0;else break}if((e&255)<<24>>24)do{a=a+1|0}while((r[a>>0]|0)!=0)}return a-c|0}function ko(e){e=e|0;return 0}function xo(e){e=e|0;return}function Eo(e){e=e|0;return jo(e,n[(To()|0)+188>>2]|0)|0}function So(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0;f=a&255;c=(t|0)!=0;e:do{if(c&(e&3|0)!=0){i=a&255;while(1){if((r[e>>0]|0)==i<<24>>24){o=6;break e}e=e+1|0;t=t+-1|0;c=(t|0)!=0;if(!(c&(e&3|0)!=0)){o=5;break}}}else o=5}while(0);if((o|0)==5)if(c)o=6;else t=0;e:do{if((o|0)==6){i=a&255;if((r[e>>0]|0)!=i<<24>>24){c=U(f,16843009)|0;a:do{if(t>>>0>3)while(1){f=n[e>>2]^c;if((f&-2139062144^-2139062144)&f+-16843009|0)break;e=e+4|0;t=t+-4|0;if(t>>>0<=3){o=11;break a}}else o=11}while(0);if((o|0)==11)if(!t){t=0;break}while(1){if((r[e>>0]|0)==i<<24>>24)break e;e=e+1|0;t=t+-1|0;if(!t){t=0;break}}}}}while(0);return(t|0?e:0)|0}function To(){return vo()|0}function jo(e,a){e=e|0;a=a|0;var t=0,c=0;t=0;while(1){if((i[11616+t>>0]|0)==(e|0)){c=2;break}t=t+1|0;if((t|0)==87){t=87;e=11704;c=5;break}}if((c|0)==2)if(!t)t=11704;else{e=11704;c=5}if((c|0)==5)while(1){do{c=e;e=e+1|0}while((r[c>>0]|0)!=0);t=t+-1|0;if(!t){t=e;break}else c=5}return Co(t,n[a+20>>2]|0)|0}function Co(e,a){e=e|0;a=a|0;return Ro(e,a)|0}function Ro(e,a){e=e|0;a=a|0;if(!a)a=0;else a=Oo(n[a>>2]|0,n[a+4>>2]|0,e)|0;return(a|0?a:e)|0}function Oo(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0,d=0,s=0,b=0,u=0,l=0,p=0;p=(n[e>>2]|0)+1794895138|0;f=Bo(n[e+8>>2]|0,p)|0;c=Bo(n[e+12>>2]|0,p)|0;i=Bo(n[e+16>>2]|0,p)|0;e:do{if((f>>>0<a>>>2>>>0?(l=a-(f<<2)|0,c>>>0<l>>>0&i>>>0<l>>>0):0)?((i|c)&3|0)==0:0){l=c>>>2;u=i>>>2;b=0;while(1){s=f>>>1;d=b+s|0;o=d<<1;i=o+l|0;c=Bo(n[e+(i<<2)>>2]|0,p)|0;i=Bo(n[e+(i+1<<2)>>2]|0,p)|0;if(!(i>>>0<a>>>0&c>>>0<(a-i|0)>>>0)){c=0;break e}if(r[e+(i+c)>>0]|0){c=0;break e}c=Mo(t,e+i|0)|0;if(!c)break;c=(c|0)<0;if((f|0)==1){c=0;break e}else{b=c?b:d;f=c?s:f-s|0}}c=o+u|0;i=Bo(n[e+(c<<2)>>2]|0,p)|0;c=Bo(n[e+(c+1<<2)>>2]|0,p)|0;if(c>>>0<a>>>0&i>>>0<(a-c|0)>>>0)c=(r[e+(c+i)>>0]|0)==0?e+c|0:0;else c=0}else c=0}while(0);return c|0}function Bo(e,a){e=e|0;a=a|0;var t=0;t=Xo(e|0)|0;return((a|0)==0?e:t)|0}function Mo(e,a){e=e|0;a=a|0;var t=0,c=0;t=r[e>>0]|0;c=r[a>>0]|0;if(!(t<<24>>24==0?1:t<<24>>24!=c<<24>>24))do{e=e+1|0;a=a+1|0;t=r[e>>0]|0;c=r[a>>0]|0}while(!(t<<24>>24==0?1:t<<24>>24!=c<<24>>24));return(t&255)-(c&255)|0}function No(){Ze(14344);return 14352}function Io(){Ue(14344);return}function Po(e){e=e|0;var a=0,t=0;do{if(e){if((n[e+76>>2]|0)<=-1){a=Fo(e)|0;break}t=(ko(e)|0)==0;a=Fo(e)|0;if(!t)xo(e)}else{if(!(n[1155]|0))a=0;else a=Po(n[1155]|0)|0;e=n[(No()|0)>>2]|0;if(e)do{if((n[e+76>>2]|0)>-1)t=ko(e)|0;else t=0;if((n[e+20>>2]|0)>>>0>(n[e+28>>2]|0)>>>0)a=Fo(e)|0|a;if(t|0)xo(e);e=n[e+56>>2]|0}while((e|0)!=0);Io()}}while(0);return a|0}function Fo(e){e=e|0;var a=0,t=0,r=0,c=0,i=0,f=0;f=e+20|0;i=e+28|0;if((n[f>>2]|0)>>>0>(n[i>>2]|0)>>>0?(Cd[n[e+36>>2]&15](e,0,0)|0,(n[f>>2]|0)==0):0)a=-1;else{c=e+4|0;a=n[c>>2]|0;r=e+8|0;t=n[r>>2]|0;if(a>>>0<t>>>0)Cd[n[e+40>>2]&15](e,a-t|0,1)|0;n[e+16>>2]=0;n[i>>2]=0;n[f>>2]=0;n[r>>2]=0;n[c>>2]=0;a=0}return a|0}function Lo(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,n=0;e:do{if(!t)e=0;else{while(1){c=r[e>>0]|0;n=r[a>>0]|0;if(c<<24>>24!=n<<24>>24)break;t=t+-1|0;if(!t){e=0;break e}else{e=e+1|0;a=a+1|0}}e=(c&255)-(n&255)|0}}while(0);return e|0}function Do(e){e=e|0;return zo(e)|0}function zo(e){e=e|0;return id(e|0)|0}function qo(e){e=e|0;return Uo(e)|0}function Uo(e){e=e|0;return Xo(e|0)|0}function Ho(e){e=e|0;return Vo(e)|0}function Vo(e){e=e|0;return id(e|0)|0}function Go(e,a,t){e=e|0;a=a|0;t=t|0;var c=0;c=Eo(e)|0;e=Ao(c)|0;if(e>>>0>=t>>>0){e=t+-1|0;if(!t)e=34;else{ad(a|0,c|0,e|0)|0;r[a+e>>0]=0;e=34}}else{ad(a|0,c|0,e+1|0)|0;e=0}return e|0}function Wo(e,a,t){e=e|0;a=a|0;t=t|0;var r=0,c=0;r=p;p=p+16|0;c=r;n[c>>2]=e;n[c+4>>2]=a;n[c+8>>2]=t;e=ho(Xe(4,c|0)|0)|0;p=r;return e|0}function Yo(){}function Ko(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;r=a-r-(t>>>0>e>>>0|0)>>>0;return(T=r,e-t>>>0|0)|0}function Qo(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;t=e+t>>>0;return(T=a+r+(t>>>0<e>>>0|0)>>>0,t|0)|0}function Zo(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0,o=0;f=e+t|0;a=a&255;if((t|0)>=67){while(e&3){r[e>>0]=a;e=e+1|0}c=f&-4|0;i=c-64|0;o=a|a<<8|a<<16|a<<24;while((e|0)<=(i|0)){n[e>>2]=o;n[e+4>>2]=o;n[e+8>>2]=o;n[e+12>>2]=o;n[e+16>>2]=o;n[e+20>>2]=o;n[e+24>>2]=o;n[e+28>>2]=o;n[e+32>>2]=o;n[e+36>>2]=o;n[e+40>>2]=o;n[e+44>>2]=o;n[e+48>>2]=o;n[e+52>>2]=o;n[e+56>>2]=o;n[e+60>>2]=o;e=e+64|0}while((e|0)<(c|0)){n[e>>2]=o;e=e+4|0}}while((e|0)<(f|0)){r[e>>0]=a;e=e+1|0}return f-t|0}function Jo(e){e=e|0;return 0}function Xo(e){e=e|0;return(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function $o(e,a,t){e=e|0;a=a|0;t=t|0;if((t|0)<32){T=a>>>t;return e>>>t|(a&(1<<t)-1)<<32-t}T=0;return a>>>t-32|0}function ed(e){e=e|0;return 0}function ad(e,a,t){e=e|0;a=a|0;t=t|0;var c=0,i=0,f=0;if((t|0)>=8192)return Me(e|0,a|0,t|0)|0;f=e|0;i=e+t|0;if((e&3)==(a&3)){while(e&3){if(!t)return f|0;r[e>>0]=r[a>>0]|0;e=e+1|0;a=a+1|0;t=t-1|0}t=i&-4|0;c=t-64|0;while((e|0)<=(c|0)){n[e>>2]=n[a>>2];n[e+4>>2]=n[a+4>>2];n[e+8>>2]=n[a+8>>2];n[e+12>>2]=n[a+12>>2];n[e+16>>2]=n[a+16>>2];n[e+20>>2]=n[a+20>>2];n[e+24>>2]=n[a+24>>2];n[e+28>>2]=n[a+28>>2];n[e+32>>2]=n[a+32>>2];n[e+36>>2]=n[a+36>>2];n[e+40>>2]=n[a+40>>2];n[e+44>>2]=n[a+44>>2];n[e+48>>2]=n[a+48>>2];n[e+52>>2]=n[a+52>>2];n[e+56>>2]=n[a+56>>2];n[e+60>>2]=n[a+60>>2];e=e+64|0;a=a+64|0}while((e|0)<(t|0)){n[e>>2]=n[a>>2];e=e+4|0;a=a+4|0}}else{t=i-4|0;while((e|0)<(t|0)){r[e>>0]=r[a>>0]|0;r[e+1>>0]=r[a+1>>0]|0;r[e+2>>0]=r[a+2>>0]|0;r[e+3>>0]=r[a+3>>0]|0;e=e+4|0;a=a+4|0}}while((e|0)<(i|0)){r[e>>0]=r[a>>0]|0;e=e+1|0;a=a+1|0}return f|0}function td(e,a){e=e|0;a=a|0;var t=0,r=0,c=0,n=0;n=e&65535;c=a&65535;t=U(c,n)|0;r=e>>>16;e=(t>>>16)+(U(c,r)|0)|0;c=a>>>16;a=U(c,n)|0;return(T=(e>>>16)+(U(c,r)|0)+(((e&65535)+a|0)>>>16)|0,e+a<<16|t&65535|0)|0}function rd(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;var c=0,n=0;c=e;n=t;t=td(c,n)|0;e=T;return(T=(U(a,n)|0)+(U(r,c)|0)+e|e&0,t|0|0)|0}function cd(e){e=e|0;var a=0,t=0;t=e+15&-16|0;a=n[b>>2]|0;e=a+t|0;if((t|0)>0&(e|0)<(a|0)|(e|0)<0){Z()|0;le(12);return-1}n[b>>2]=e;if((e|0)>(Q()|0)?(K()|0)==0:0){n[b>>2]=a;le(12);return-1}return a|0}function nd(e,a,t){e=e|0;a=a|0;t=t|0;if((t|0)<32){T=a<<t|(e&(1<<t)-1<<32-t)>>>32-t;return e<<t}T=e<<t-32;return 0}function id(e){e=e|0;return(e&255)<<8|e>>8&255|0}function fd(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;return Cd[e&15](a|0,t|0,r|0)|0}function od(e,a,t,r,c,n){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;n=n|0;Rd[e&3](a|0,t|0,r|0,c|0,n|0)}function dd(e){e=e|0;return Od[e&3]()|0}function sd(e,a){e=e|0;a=a|0;Bd[e&63](a|0)}function bd(e,a,t){e=e|0;a=a|0;t=t|0;Md[e&31](a|0,t|0)}function ud(e,a){e=e|0;a=a|0;return Nd[e&15](a|0)|0}function ld(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;Id[e&31](a|0,t|0,r|0)}function pd(e){e=e|0;Pd[e&7]()}function hd(e,a,t){e=e|0;a=a|0;t=t|0;return Fd[e&127](a|0,t|0)|0}function md(e,a,t,r,c,n){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;n=n|0;return Ld[e&1](a|0,t|0,r|0,c|0,n|0)|0}function gd(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;Dd[e&7](a|0,t|0,r|0,c|0)}function vd(e,a,t){e=e|0;a=a|0;t=t|0;W(0);return 0}function yd(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;W(1)}function _d(){W(2);return 0}function wd(e){e=e|0;W(3)}function Ad(e,a){e=e|0;a=a|0;W(4)}function kd(e){e=e|0;W(5);return 0}function xd(e,a,t){e=e|0;a=a|0;t=t|0;W(6)}function Ed(){W(7)}function Sd(e,a){e=e|0;a=a|0;W(8);return 0}function Td(e,a,t,r,c){e=e|0;a=a|0;t=t|0;r=r|0;c=c|0;W(9);return 0}function jd(e,a,t,r){e=e|0;a=a|0;t=t|0;r=r|0;W(10)}var Cd=[vd,Dc,Nr,Lr,ai,ff,bf,_o,po,Kt,Di,wo,vd,vd,vd,vd];var Rd=[yd,Ct,ia,yd];var Od=[_d,Ia,rc,_d];var Bd=[wd,ua,Lc,Ba,yr,mr,Er,Sr,Br,Fr,Qr,ac,_c,mc,vc,Sc,Ic,Gc,Kc,fn,cn,Jc,an,$c,jn,ei,xi,Vi,sf,Uf,zf,Kf,eo,ft,st,pt,Oi,Gt,Zt,$i,et,cf,at,ar,ya,Fa,La,Ga,nr,Ec,ja,bc,kc,xc,sn,bn,pn,On,Bn,ic,fc,Qn,wd,wd];var Md=[Ad,wr,Tr,jr,Zr,Jr,Cn,Rn,Bi,Ci,mt,Ji,Qi,Zi,Si,Xi,ha,Bt,Rt,zt,qt,oa,da,vf,Rc,Bc,Ea,Ac,hn,Ad,Ad,Ad];var Nd=[kd,la,Fc,Cr,Xr,Wc,lo,An,Wt,cr,nc,pr,kf,kd,kd,kd];var Id=[xd,kr,Vt,Yi,_a,dt,Xt,Yt,Ki,Qt,pa,$t,nf,Nt,Tt,jt,tr,Ti,Ut,sa,ka,rr,mi,li,xd,xd,xd,xd,xd,xd,xd,xd];var Pd=[Ed,_t,Pa,cc,br,on,Ed,Ed];var Fd=[Sd,zc,qc,Ir,Pr,Rr,Or,Mr,Dr,zr,$r,ec,tc,wc,gc,yc,Qc,Jf,nn,rn,Xc,tn,en,ti,ri,Ei,of,df,uf,lf,Hf,qf,Qf,ao,bt,wa,$f,ma,Yc,Lf,ji,lr,Hc,Xf,Mf,Nc,Gf,Of,Mc,xa,Hr,hf,hr,Kr,Yf,oi,pf,pc,un,si,bi,ki,Vf,Ii,Pi,Fi,Li,zi,Hi,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd,Sd];var Ld=[Td,Af];var Dd=[jd,_r,Ar,$a,St,Ni,xn,jd];return{_llvm_bswap_i32:Xo,___rdl_dealloc:Fn,_main:wt,___rdl_usable_size:Ln,dynCall_i:dd,_i64Subtract:Ko,_rust_eh_personality:ci,___rdl_grow_in_place:Hn,_bitshift64Lshr:$o,setThrew:Za,dynCall_viii:ld,___rdl_alloc_zeroed:zn,_ec_pairing:yt,_bitshift64Shl:nd,dynCall_vi:sd,_fflush:Po,_htonl:qo,___rdl_alloc_excess:qn,_memset:Zo,dynCall_ii:ud,_sbrk:cd,_memcpy:ad,stackSave:Ya,___muldi3:rd,_ec_mul:gt,___rdl_oom:Pn,stackAlloc:Wa,getTempRet0:Xa,dynCall_vii:bd,_ntohs:Ho,setTempRet0:Ja,_i64Add:Qo,dynCall_iiii:fd,_pthread_mutex_unlock:ed,_llvm_bswap_i16:id,___rdl_realloc_excess:Un,_emscripten_get_global_libc:uo,_htons:Do,dynCall_viiii:gd,dynCall_iiiiii:md,___errno_location:mo,dynCall_viiiii:od,_free:co,runPostSets:Yo,establishStackSpace:Qa,___rdl_realloc:Dn,stackRestore:Ka,_malloc:ro,dynCall_iii:hd,_pthread_mutex_lock:Jo,___rdl_shrink_in_place:Vn,dynCall_v:pd,_ec_add:vt,___rdl_alloc:In}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),___rdl_dealloc=Module.___rdl_dealloc=asm.___rdl_dealloc,_main=Module._main=asm._main,___rdl_usable_size=Module.___rdl_usable_size=asm.___rdl_usable_size,stackSave=Module.stackSave=asm.stackSave,getTempRet0=Module.getTempRet0=asm.getTempRet0,_rust_eh_personality=Module._rust_eh_personality=asm._rust_eh_personality,___rdl_grow_in_place=Module.___rdl_grow_in_place=asm.___rdl_grow_in_place,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,setThrew=Module.setThrew=asm.setThrew,___rdl_alloc_zeroed=Module.___rdl_alloc_zeroed=asm.___rdl_alloc_zeroed,_ec_pairing=Module._ec_pairing=asm._ec_pairing,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_fflush=Module._fflush=asm._fflush,setTempRet0=Module.setTempRet0=asm.setTempRet0,___rdl_alloc_excess=Module.___rdl_alloc_excess=asm.___rdl_alloc_excess,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,___errno_location=Module.___errno_location=asm.___errno_location,___muldi3=Module.___muldi3=asm.___muldi3,_ec_mul=Module._ec_mul=asm._ec_mul,___rdl_oom=Module.___rdl_oom=asm.___rdl_oom,stackAlloc=Module.stackAlloc=asm.stackAlloc,_i64Subtract=Module._i64Subtract=asm._i64Subtract,_ntohs=Module._ntohs=asm._ntohs,_htonl=Module._htonl=asm._htonl,_i64Add=Module._i64Add=asm._i64Add,_pthread_mutex_unlock=Module._pthread_mutex_unlock=asm._pthread_mutex_unlock,_llvm_bswap_i16=Module._llvm_bswap_i16=asm._llvm_bswap_i16,___rdl_realloc_excess=Module.___rdl_realloc_excess=asm.___rdl_realloc_excess,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,_htons=Module._htons=asm._htons,_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,___rdl_realloc=Module.___rdl_realloc=asm.___rdl_realloc,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,_pthread_mutex_lock=Module._pthread_mutex_lock=asm._pthread_mutex_lock,___rdl_shrink_in_place=Module.___rdl_shrink_in_place=asm.___rdl_shrink_in_place,_ec_add=Module._ec_add=asm._ec_add,___rdl_alloc=Module.___rdl_alloc=asm.___rdl_alloc,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii,initialStackTop;if(Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm,memoryInitializer)if("function"==typeof Module.locateFile?memoryInitializer=Module.locateFile(memoryInitializer):Module.memoryInitializerPrefixURL&&(memoryInitializer=Module.memoryInitializerPrefixURL+memoryInitializer),ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module.readBinary(memoryInitializer);HEAPU8.set(data,Runtime.GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(e){e.byteLength&&(e=new Uint8Array(e)),HEAPU8.set(e,Runtime.GLOBAL_BASE),Module.memoryInitializerRequest&&delete Module.memoryInitializerRequest.response,removeRunDependency("memory initializer")};function doBrowserLoad(){Module.readAsync(memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes)applyMemoryInitializer(memoryInitializerBytes.buffer);else if(Module.memoryInitializerRequest){function useRequest(){var e=Module.memoryInitializerRequest,a=e.response;if(200!==e.status&&0!==e.status){var t=tryParseAsDataURI(Module.memoryInitializerRequestURL);if(!t)return console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+e.status+", retrying "+memoryInitializer),void doBrowserLoad();a=t.buffer}applyMemoryInitializer(a)}Module.memoryInitializerRequest.response?setTimeout(useRequest,0):Module.memoryInitializerRequest.addEventListener("load",useRequest)}else doBrowserLoad()}function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var preloadStartTime=null,calledMain=!1;function run(e){function a(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0||(preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),a()},1)):a()))}function exit(e,a){a&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=e,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(e)),ENVIRONMENT_IS_NODE&&process.exit(e),Module.quit(e,new ExitStatus(e)))}dependenciesFulfilled=function e(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=e)},Module.callMain=Module.callMain=function(e){e=e||[],ensureInitRuntime();var a=e.length+1;function t(){for(var e=0;e<3;e++)r.push(0)}var r=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];t();for(var c=0;c<a-1;c+=1)r.push(allocate(intArrayFromString(e[c]),"i8",ALLOC_NORMAL)),t();r.push(0),r=allocate(r,"i32",ALLOC_NORMAL);try{exit(Module._main(a,r,0),!0)}catch(e){if(e instanceof ExitStatus)return;if("SimulateInfiniteLoop"==e)return void(Module.noExitRuntime=!0);var n=e;e&&"object"==typeof e&&e.stack&&(n=[e,e.stack]),Module.printErr("exception thrown: "+n),Module.quit(1,e)}finally{calledMain=!0}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];function abort(e){Module.onAbort&&Module.onAbort(e),void 0!==e?(Module.print(e),Module.printErr(e),e=JSON.stringify(e)):e="",ABORT=!0,EXITSTATUS=1;var a="abort("+e+") at "+stackTrace()+"\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw abortDecorators&&abortDecorators.forEach(function(t){a=t(a,e)}),a}if(Module.abort=Module.abort=abort,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),Module.arguments=[],run(),module.exports=Module},function(e,a,t){"use strict";var r=t(3).BN,c=t(33).ERROR,n=t(29),i=t(11),f=t(172).cwrap("ec_add","string",["string"]);e.exports=function(e){i(e.data);var a={},t=e.data.toString("hex");if(a.gasUsed=new r(n.ecAddGas.v),e.gasLimit.lt(a.gasUsed))return a.return=Buffer.alloc(0),a.exception=0,a.gasUsed=new r(e.gasLimit),a.exceptionError=c.OUT_OF_GAS,a;var o=f(t);return 128!==o.length?(a.return=Buffer.alloc(0),a.exception=0,a.gasUsed=new r(e.gasLimit),a.exceptionError=c.OUT_OF_GAS):(a.return=Buffer.from(o,"hex"),a.exception=1),a}},function(e,a,t){"use strict";var r=t(3),c=r.BN,n=t(33).ERROR,i=t(29),f=t(11),o=i.modexpGquaddivisor.v;function d(e,a){return a.gasUsed=e.gasLimit,a.exception=0,a.exceptionError=n.OUT_OF_GAS,a}e.exports=function(e){f(e.data);var a={},t=e.data,n=function(e){var a=new c(e.slice(0,32)).toNumber(),t=new c(e.slice(32,64)),n=96+a,i=Buffer.from(e.slice(n,n+32));i=r.setLengthRight(i,32),i=new c(i);var f=0;t.ltn(32)&&(f=32-t.toNumber()),i=i.shrn(8*Math.max(f,0));for(var o=-1;i.gtn(0);)o+=1,i=i.ushrn(1);var d=t.subn(32);d.ltn(0)&&(d=new c(0));var s=d.muln(8);return o>0&&s.iaddn(o),s}(t);n.ltn(1)&&(n=new c(1));var i=new c(t.slice(0,32)),s=new c(t.slice(32,64)),b=new c(t.slice(64,96)),u=i;u.lt(b)&&(u=b);var l=n.mul(function(e){var a=new c(0),t=new c(0);return e.lten(64)?e.sqr():e.lten(1024)?(a=e.sqr().divn(4),t=e.muln(96),a.add(t).subn(3072)):(a=e.sqr().divn(16),t=e.muln(480),a.add(t).subn(199680))}(u)).divn(o);if(e.gasLimit.lt(l))return d(e,a);if(a.gasUsed=l,i.isZero())return a.return=new c(0).toArrayLike(Buffer,"be",1),a.exception=1,a;if(b.isZero())return a.return=Buffer.from([0]),a.exception=1,a;var p=new c(Number.MAX_SAFE_INTEGER),h=new c(2147483647);if(i.gt(h)||s.gt(h)||b.gt(h))return d(e,a);var m=new c(96),g=m.add(i),v=g,y=v.add(s),_=y,w=_.add(b);if(w.gt(p))return d(e,a);i=i.toNumber(),s=s.toNumber(),b=b.toNumber();var A=new c(r.setLengthRight(t.slice(m.toNumber(),g.toNumber()),i)),k=new c(r.setLengthRight(t.slice(v.toNumber(),y.toNumber()),s)),x=new c(r.setLengthRight(t.slice(_.toNumber(),w.toNumber()),b)),E=(x.isZero()?new c(0):function e(a,t,r){if(t.isZero())return new c(1).mod(r);var n=a.mod(r),i=e(n,t.divn(2),r);return i=i.mul(i).mod(r),t.mod(new c(2)).isZero()?i:i.mul(n).mod(r)}(A,k,x)).toArrayLike(Buffer,"be",b);return a.return=E,a.exception=1,a}},function(e,a,t){"use strict";var r=t(3).BN,c=t(29),n=t(33).ERROR,i=t(11);e.exports=function(e){i(e.data);var a={},t=e.data;return a.gasUsed=new r(c.identityGas.v),a.gasUsed.iadd(new r(c.identityWordGas.v).imuln(Math.ceil(t.length/32))),e.gasLimit.lt(a.gasUsed)?(a.gasUsed=e.gasLimit,a.exceptionError=n.OUT_OF_GAS,a.exception=0,a):(a.return=t,a.exception=1,a)}},function(e,a,t){"use strict";var r=t(3),c=r.BN,n=t(33).ERROR,i=t(29),f=t(11);e.exports=function(e){f(e.data);var a={},t=e.data;return a.gasUsed=new c(i.ripemd160Gas.v),a.gasUsed.iadd(new c(i.ripemd160WordGas.v).imuln(Math.ceil(t.length/32))),e.gasLimit.lt(a.gasUsed)?(a.gasUsed=e.gasLimit,a.exceptionError=n.OUT_OF_GAS,a.exception=0,a):(a.return=r.ripemd160(t,!0),a.exception=1,a)}},function(e,a,t){"use strict";var r=t(3),c=r.BN,n=t(33).ERROR,i=t(29),f=t(11);e.exports=function(e){f(e.data);var a={},t=e.data;return a.gasUsed=new c(i.sha256Gas.v),a.gasUsed.iadd(new c(i.sha256WordGas.v).imuln(Math.ceil(t.length/32))),e.gasLimit.lt(a.gasUsed)?(a.gasUsed=e.gasLimit,a.exceptionError=n.OUT_OF_GAS,a.exception=0,a):(a.return=r.sha256(t),a.exception=1,a)}},function(e,a,t){"use strict";var r=t(3),c=r.BN,n=t(33).ERROR,i=t(29),f=t(11);e.exports=function(e){f(e.data);var a={};if(a.gasUsed=new c(i.ecrecoverGas.v),e.gasLimit.lt(a.gasUsed))return a.gasUsed=e.gasLimit,a.exception=0,a.exceptionError=n.OUT_OF_GAS,a;var t,o=r.setLengthRight(e.data,128),d=o.slice(0,32),s=o.slice(32,64),b=o.slice(64,96),u=o.slice(96,128);try{t=r.ecrecover(d,new c(s).toNumber(),b,u)}catch(e){return a}return a.return=r.setLengthLeft(r.publicToAddress(t),32),a.exception=1,a}},function(e,a,t){"use strict";var r,c=t(5).EventEmitter,n=t(1),i=t(365);e.exports=r=function(){c.call(this)},n.inherits(r,c),r.prototype.emit=function(e,a,t){var r=this,c=r._events[e]||[];return t||"function"!=typeof a||(t=a,a=void 0),"newListener"!==e&&"removeListener"!==e||(a={event:a,fn:t},t=void 0),c=Array.isArray(c)?c:[c],i(c.slice(),function(e,t){var c;if(e.length<2){try{e.call(r,a)}catch(e){c=e}return t(c)}e.call(r,a,t)},t),r},r.prototype.once=function(e,a){var t,r=this;if("function"!=typeof a)throw new TypeError("listener must be a function");return(t=a.length>=2?function(c,n){r.removeListener(e,t),a(c,n)}:function(c){r.removeListener(e,t),a(c)}).listener=a,r.on(e,t),r},r.prototype.first=function(e,a){var t=this._events[e]||[];if("function"!=typeof a)throw new TypeError("listener must be a function");return Array.isArray(t)||(this._events[e]=t=[t]),t.unshift(a),this},r.prototype.at=function(e,a,t){var r=this._events[e]||[];if("function"!=typeof t)throw new TypeError("listener must be a function");if("number"!=typeof a||a<0)throw new TypeError("index must be a non-negative integer");return Array.isArray(r)||(this._events[e]=r=[r]),r.splice(a,0,t),this},r.prototype.before=function(e,a,t){return this._beforeOrAfter(e,a,t)},r.prototype.after=function(e,a,t){return this._beforeOrAfter(e,a,t,"after")},r.prototype._beforeOrAfter=function(e,a,t,r){var c,n,i=this._events[e]||[],f="after"===r?1:0;if("function"!=typeof t)throw new TypeError("listener must be a function");if("function"!=typeof a)throw new TypeError("target must be a function");for(Array.isArray(i)||(this._events[e]=i=[i]),n=i.length,c=i.length;c--;)if(i[c]===a){n=c+f;break}return i.splice(n,0,t),this}},function(e,a,t){"use strict";e.exports=t(885)},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(344),n=t(45),i=t(18),f=e.exports=function(e){this._cache=c(),this._checkpoints=[],this._deletes=[],this._trie=e};f.prototype.put=function(e,a,t){var r=!t;this._update(e,a,r,!0)},f.prototype.get=function(e){var a=this.lookup(e);return a||((a=new n).exists=!1),a},f.prototype.lookup=function(e){e=e.toString("hex");var a=this._cache.find(e);if(a.node){var t=new n(a.value.val);return t.exists=a.value.exists,t}},f.prototype._lookupAccount=function(e,a){this._trie.get(e,function(e,t){if(e)return a(e);var r=new n(t),c=!!t;r.exists=c,a(null,r,c)})},f.prototype.getOrLoad=function(e,a){var t=this,r=this.lookup(e);r?a(null,r):t._lookupAccount(e,function(r,c,n){if(r)return a(r);t._update(e,c,!1,n),a(null,c)})},f.prototype.warm=function(e,a){var t=this,c=[];e.forEach(function(e){e&&c.push(e)}),i.eachSeries(c,function(e,a){var c=r.from(e,"hex");t._lookupAccount(c,function(e,r){if(e)return a(e);t._update(c,r,!1,r.exists),a()})},a)},f.prototype.flush=function(e){var a=this._cache.begin,t=this,c=!0;i.whilst(function(){return c},function(e){a.value&&a.value.modified?(a.value.modified=!1,a.value.val=a.value.val.serialize(),t._trie.put(r.from(a.key,"hex"),a.value.val,function(){c=a.hasNext,a.next(),e()})):(c=a.hasNext,a.next(),e())},function(){i.eachSeries(t._deletes,function(e,a){t._trie.del(e,a)},function(){t._deletes=[],e()})})},f.prototype.checkpoint=function(){this._checkpoints.push(this._cache)},f.prototype.revert=function(){this._cache=this._checkpoints.pop(this._cache)},f.prototype.commit=function(){this._checkpoints.pop()},f.prototype.clear=function(){this._deletes=[],this._cache=c()},f.prototype.del=function(e){this._deletes.push(e),e=e.toString("hex"),this._cache=this._cache.remove(e)},f.prototype._update=function(e,a,t,r){e=e.toString("hex");var c=this._cache.find(e);c.node?this._cache=c.update({val:a,modified:t,exists:!0}):this._cache=this._cache.insert(e,{val:a,modified:t,exists:r})}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(3);e.exports={getBlock:function(e,a){var t;r.isBuffer(e)?t=c.sha3(e):Number.isInteger(e)?t=c.sha3("0x"+c.toBuffer(e).toString("hex")):a(new Error("Unknown blockTag type")),a(null,{hash:function(){return t}})},delBlock:function(e,a){a(null)}}},function(e){e.exports=[{ip:"52.16.188.185",port:"30303",id:"a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c"},{ip:"54.94.239.50",port:"30303",id:"de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786"},{ip:"52.74.57.123",port:"30303",id:"1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082"},{ip:"5.1.83.226",port:"30303",id:"979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9"}]},function(e){e.exports={"3282791d6fd713f1e94f4bfd565eaa78b3a0599d":"1337000000000000000000","17961d633bcf20a7b029a7d94b7df4da2ec5427f":"229427000000000000000","493a67fe23decc63b10dda75f3287695a81bd5ab":"880000000000000000000","01fb8ec12425a04f813e46c54c05748ca6b29aa9":"259800000000000000000",d2a030ac8952325f9e1db378a71485a24e1b07b2:"2000000000000000000000","77a34907f305a54c85db09c363fde3c47e6ae21f":"985000000000000000000","391a77405c09a72b5e8436237aaaf95d68da1709":"49082000000000000000","00aada25ea2286709abb422d41923fd380cd04c7":"650100000000000000000",acc46a2a555c74ded4a2bd094e821b97843b40c0:"1940000000000000000000",de07fb5b7a464e3ba7fbe09e9acb271af5338c58:"50000000000000000000","4c696be99f3a690440c3436a59a7d7e937d6ba0d":"3460000000000000000000",fa33553285a973719a0d5f956ff861b2d89ed304:"20000000000000000000","67cfda6e70bf7657d39059b59790e5145afdbe61":"646000000000000000000",a321091d3018064279db399d2b2a88a6f440ae24:"3200000000000000000000",fb3fa1ac08aba9cc3bf0fe9d483820688f65b410:"30000000000000000000000","6715c14035fb57bb3d667f7b707498c41074b855":"700000000000000000000",d4344f7d5cad65d17e5c2d0e7323943d6f62fe92:"267400000000000000000",a3294626ec2984c43b43da4d5d8e4669b11d4b59:"1008000000000000000000","656018584130db83ab0591a8128d9381666a8d0e":"63960000000000000000","0fa010ce0c731d3b628e36b91f571300e49dbeab":"999800000000000000000","3098b65db93ecacaf7353c48808390a223d57684":"449965000000000000000",ae635bf73831119d2d29c0d04ff8f8d8d0a57a46:"1337000000000000000000","0f7515ff0e808f695e0c20485ff96ed2f7b79310":"1000169000000000000000","8b30c04098d7a7e6420c357ea7bfa49bac9a8a18":"8000200000000000000000","64dba2d6615b8bd7571836dc75bc79d314f5ecee":"10000000000000000000000",e7912d4cf4562c573ddc5b71e37310e378ef86c9:"394000000000000000000",a4da34450d22ec0ffcede0004b02f7872ee0b73a:"93342000000000000000","34437d1465640b136cb5841c3f934f9ba0b7097d":"173000000000000000000",c652871d192422c6bc235fa063b44a7e1d43e385:"155000000000000000000",a8a708e84f82db86a35502193b4c6ee9a76ebe8f:"1015200000000000000000","5c3f567faff7bad1b5120022e8cbcaa82b4917b3":"2000000000000000000000",dbc1d0ee2bab531140de137722cd36bdb4e47194:"200000000000000000000",f59dab1bf8df11327e61f9b7a14b563a96ec3554:"6000000000000000000000","456f8d746682b224679349064d1b368c7c05b176":"3700000000000000000000","5f13154631466dcb1353c890932a7c97e0878e90":"6000000000000000000000",f4b1626e24f30bcad9273c527fcc714b5d007b8f:"200000000000000000000",a8db0b9b201453333c757f6ad9bcb555c02da93b:"2199970000000000000000",a0fc7e53c5ebd27a2abdac45261f84ab3b51aefb:"3008250000000000000000","1b636b7a496f044d7359596e353a104616436f6b":"360354000000000000000","74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40":"999954000000000000000","9834682180b982d166badb9d9d1d9bbf016d87ee":"2000000000000000000000","1e6e0153fc161bc05e656bbb144c7187bf4fe84d":"2000000000000000000000","989c0ccff654da03aeb11af701054561d6297e1d":"4000000000000000000000","78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef":"100000000000000000000","9ef1896b007c32a15114fb89d73dbd47f9122b69":"4000000000000000000000","33320dd90f2baa110dd334872a998f148426453c":"999972000000000000000",e72e1d335cc29a96b9b1c02f003a16d971e90b9d:"1580000000000000000000","0921605f99164e3bcc28f31caece78973182561d":"793744000000000000000",fc00a420a36107dfd5f495128a5fe5abb2db0f34:"5960000000000000000000",dfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486:"4000000000000000000000","646e043d0597a664948fbb0dc15475a3a4f3a6ed":"20000000000000000000","79aeb34566b974c35a5881dec020927da7df5d25":"2000000000000000000000",dbadc61ed5f0460a7f18e51b2fb2614d9264a0e0:"40000000000000000000","97b91efe7350c2d57e7e406bab18f3617bcde14a":"9999980000000000000000","8398e07ebcb4f75ff2116de77c1c2a99f303a4cf":"500000000000000000000",f02796295101674288c1d93467053d042219b794:"740000000000000000000",f4ed848ec961739c2c7e352f435ba70a7cd5db38:"1970000000000000000000","82485728d0e281563758c75ab27ed9e882a0002d":"147000000000000000000","427ec668ac9404e895cc861511d1620a4912be98":"40000000000000000000000","1bbc199e586790be87afedc849c04726745c5d7b":"4000000000000000000000","10d945334ecde47beb9ca3816c173dfbbd0b5333":"1400000000000000000000","1dcebcb7656df5dcaa3368a055d22f9ed6cdd940":"499800000000000000000","2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c":"161000000000000000000","0a47ad9059a249fc936b2662353da6905f75c2b9":"2000000000000000000000","768498934e37e905f1d0e77b44b574bcf3ec4ae8":"20000000000000000000000",f46b6b9c7cb552829c1d3dfd8ffb11aabae782f6:"21000000000000000000","7aea25d42b2612286e99c53697c6bc4100e2dbbf":"2000000000000000000000",af3615c789d0b1152ad4db25fe5dcf222804cf62:"1000000000000000000000","92e6581e1da1f9b846e09347333dc818e2d2ac66":"3640000000000000000000","240305727313d01e73542c775ff59d11cd35f819":"5931229000000000000000",b95cfda8465ba9c2661b249fc3ab661bdfa35ff0:"318949000000000000000","1b0d076817e8d68ee2df4e1da1c1142d198c4435":"1550000000000000000000","93c2e64e5de5589ed25006e843196ee9b1cf0b3e":"1670000000000000000000","0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b":"3940000000000000000000","22b96ab2cad55db100b53001f9e4db378104c807":"10000000000000000000000",a927d48bb6cb814bc609cbcaa9151f5d459a27e1:"271600000000000000000","5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2":"13400000000000000000","9adbd3bc7b0afc05d1d2eda49ff863939c48db46":"199955000000000000000",ac7e03702723cb16ee27e22dd0b815dc2d5cae9f:"16000000000000000000000","1e210e7047886daa52aaf70f4b991dac68e3025e":"200000000000000000000",c98048687f2bfcc9bd90ed18736c57edd352b65d:"1000000000000000000000","81c18c2a238ddc4cba230a072dd7dc101e620273":"1337000000000000000000",cb3d766c983f192bcecac70f4ee03dd9ff714d51:"100000000000000000000","44a63d18424587b9b307bfc3c364ae10cd04c713":"20000000000000000000","4ab2d34f04834fbf7479649cab923d2c4725c553":"3520000000000000000000",b834acf3015322c58382eeb2b79638906e88b6de:"24000000000000000000000","7d551397f79a2988b064afd0efebee802c7721bc":"39400000000000000000000",b537d36a70eeb8d3e5c80de815225c1158cb92c4:"1500000000000000000000","805ce51297a0793b812067f017b3e7b2df9bb1f9":"100000000000000000000","085ba65febe23eefc2c802666ab1262382cfc494":"400000000000000000000",b1c0d08b36e184f9952a4037e3e53a667d070a4e:"1000000000000000000000","83fe5a1b328bae440711beaf6aad6026eda6d220":"20000000000000000000000","7fd679e5fb0da2a5d116194dcb508318edc580f3":"6560000000000000000000","41ad369f758fef38a19aa3149379832c818ef2a0":"1000060000000000000000","6d846dc12657e91af25008519c3e857f51707dd6":"4590000000000000000000",c02d6eadeacf1b78b3ca85035c637bb1ce01f490:"4000000000000000000000","826eb7cd7319b82dd07a1f3b409071d96e39677f":"1000000000000000000000","4ac9905a4cb6ab1cfd62546ee5917300b87c4fde":"1015200000000000000000",cf6e52e6b77480b1867efec6446d9fc3cc3577e8:"222010000000000000000","2476b2bb751ce748e1a4c4ff7b230be0c15d2245":"4000000000000000000000","1a505e62a74e87e577473e4f3afa16bedd3cfa52":"500000000000000000000","21d02705f3f64905d80ed9147913ea8c7307d695":"1363740000000000000000","7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf":"500000000000000000000","5338ef70eac9dd9af5a0503b5efad1039e67e725":"2674000000000000000000","50ca86b5eb1d01874df8e5f34945d49c6c1ab848":"1000000000000000000000",f3cc8bcb559465f81bfe583bd7ab0a2306453b9e:"20000000000000000000000","5c323457e187761a8276e359b7b7af3f3b6e3df6":"10000000000000000000000","4d82d7700c123bb919419bbaf046799c6b0e2c66":"20000000000000000000000","8a66abbc2d30ce21a833b0db8e561d5105e0a72c":"699958000000000000000","2ae53866fc2d14d572ab73b4a065a1188267f527":"8000000000000000000000","9af5c9894c33e42c2c518e3ac670ea9505d1b53e":"18200000000000000000",cba25c7a503cc8e0d04971ca05c762f9b762b48b:"500000000000000000000",fda3042819af3e662900e1b92b4358eda6e92590:"118200000000000000000000","9bd7c38a4210304a4d653edeff1b3ce45fce7843":"282000000000000000000",edc22fb92c638e1e21ff5cf039daa6e734dafb29:"298000000000000000000",a1f193a0592f1feb9fdfc90aa813784eb80471c9:"1400000000000000000000",e97fde0b67716325cf0ecce8a191a3761b2c791d:"1004700000000000000000","110237cf9117e767922fc4a1b78d7964da82df20":"3940000000000000000000",e32f95766d57b5cd4b173289d6876f9e64558194:"100000000000000000000",f2d59c8923759073d6f415aaf8eb065ff2f3b685:"7880000000000000000000",c53d79f7cb9b70952fd30fce58d54b9f0b59f647:"5089200000000000000000","9eb281c32719c40fdb3e216db0f37fbc73a026b7":"20000000000000000000","2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8":"399910000000000000000","61ba87c77e9b596de7ba0e326fddfeec2163ef66":"200000000000000000000",de1121829c9a08284087a43fbd2fc1142a3233b4:"1000000000000000000000","22a25812ab56dcc423175ed1d8adacce33cd1810":"1850000000000000000000","518cef27b10582b6d14f69483ddaa0dd3c87bb5c":"600000000000000000000","59161749fedcf1c721f2202d13ade2abcf460b3d":"2000000000000000000000","3e36c17253c11cf38974ed0db1b759160da63783":"7000000000000000000000",cbfa76db04ce38fb205d37b8d377cf1380da0317:"1430000000000000000000",a7e83772bc200f9006aa2a260dbaa8483dc52b30:"207730000000000000000",e87eac6d602b4109c9671bf57b950c2cfdb99d55:"49932000000000000000","9b06ad841dffbe4ccf46f1039fc386f3c321446e":"2000000000000000000000",e0f903c1e48ac421ab48528f3d4a2648080fe043:"1015200000000000000000","5d872b122e994ef27c71d7deb457bf65429eca6c":"7999973000000000000000",f34083ecea385017aa40bdd35ef7effb4ce7762d:"400000000000000000000","7f3709391f3fbeba3592d175c740e87a09541d02":"480000000000000000000","888e94917083d152202b53163939869d271175b4":"4000000000000000000000",bed4c8f006a27c1e5f7ce205de75f516bfb9f764:"16000000000000000000000",b3a6bd41f9d9c3201e050b87198fbda399342210:"3622615000000000000000","550aadae1221b07afea39fba2ed62e05e5b7b5f9":"20000000000000000000",bcedc4267ccb89b31bb764d7211171008d94d44d:"200000000000000000000","6229dcc203b1edccfdf06e87910c452a1f4d7a72":"32500000000000000000000","94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf":"23280000000000000000","0e0c9d005ea016c295cd795cc9213e87febc33eb":"198000000000000000000","55d057bcc04bd0f4af9642513aa5090bb3ff93fe":"1106680000000000000000",ed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4:"30895000000000000000","86c4ce06d9ac185bb148d96f7b7abe73f441006d":"10000000000000000000000","2c04115c3e52961b0dc0b0bf31fba4546f5966fd":"200000000000000000000",b959dce02e91d9db02b1bd8b7d17a9c41a97af09:"8000000000000000000000",e01547ba42fcafaf93938becf7699f74290af74f:"2000000000000000000000",c593d6e37d14b566643ac4135f243caa0787c182:"12000000000000000000000","2c0ee134d8b36145b47beee7af8d2738dbda08e8":"201000000000000000000","0ef54ac7264d2254abbb5f8b41adde875157db7c":"40000000000000000000","0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5":"4000000000000000000000","873e49135c3391991060290aa7f6ccb8f85a78db":"20000000000000000000","05236d4c90d065f9e3938358aaffd777b86aec49":"500000000000000000000",d2abd84a181093e5e229136f42d835e8235de109:"100007000000000000000",b56a780028039c81caf37b6775c620e786954764:"2000000000000000000000","86df73bd377f2c09de63c45d67f283eaefa0f4ab":"1000000000000000000000","7670b02f2c3cf8fd4f4730f3381a71ea431c33c7":"267400000000000000000","24aa1151bb765fa3a89ca50eb6e1b1c706417fd4":"3100000000000000000000","43227d65334e691cf231b4a4e1d339b95d598afb":"10000000000000000000000","695550656cbf90b75d92ad9122d90d23ca68ca4d":"1000000000000000000000","5281733473e00d87f11e9955e589b59f4ac28e7a":"660360000000000000000000","99a96bf2242ea1b39ece6fcc0d18aed00c0179f3":"300000000000000000000",b1cf94f8091505055f010ab4bac696e0ca0f67a1:"1580000000000000000000","54391b4d176d476cea164e5fb535c69700cb2535":"100076000000000000000","152f2bd229ddf3cb0fdaf455c183209c0e1e39a2":"2000000000000000000000",affc99d5ebb4a84fe7788d97dce274b038240438:"5000000000000000000000","23df8f48ee009256ea797e1fa369beebcf6bc663":"2302671000000000000000","3a72d635aadeee4382349db98a1813a4cfeb3df1":"200000000000000000000000",ce26f9a5305f8381094354dbfc92664e84f902b5:"230200000000000000000",d283b8edb10a25528a4404de1c65e7410dbcaa67:"12000000000000000000000",a7859fc07f756ea7dcebbccd42f05817582d973f:"10000000000000000000000",b28181a458a440f1c6bb1de8400281a3148f4c35:"376000000000000000000","27b1694eafa165ebd7cc7bc99e74814a951419dc":"800000000000000000000","66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6":"100000000000000000000","926082cb7eed4b1993ad245a477267e1c33cd568":"374300000000000000000","4a47fc3e177f567a1e3893e000e36bba23520ab8":"2000000000000000000000","594a76f06935388dde5e234696a0668bc20d2ddc":"2800000000000000000000",e91fa0badaddb9a97e88d3f4db7c55d6bb7430fe:"376000000000000000000","574de1b3f38d915846ae3718564a5ada20c2f3ed":"4000000000000000000000","5816c2687777b6d7d2a2432d59a41fa059e3a406":"133700000000000000000000",b50955aa6e341571986608bdc891c2139f540cdf:"1970000000000000000000","6d44974a31d187eda16ddd47b9c7ec5002d61fbe":"940000000000000000000","80abec5aa36e5c9d098f1b942881bd5acac6963d":"2000000000000000000000","294f494b3f2e143c2ffc9738cbfd9501850b874e":"2240000000000000000000",bca3ffd4683fba0ad3bbc90734b611da9cfb457e:"200000000000000000000","5992624c54cdec60a5ae938033af8be0c50cbb0a":"3621678000000000000000","6560941328ff587cbc56c38c78238a7bb5f442f6":"744900000000000000000","74b7e0228baed65957aebb4d916d333aae164f0e":"2000000000000000000000","8516fcaf77c893970fcd1a958ba9a00e49044019":"196279000000000000000",b992a967308c02b98af91ee760fd3b6b4824ab0e:"2000000000000000000000","30bb4357cd6910c86d2238bf727cbe8156680e62":"100014000000000000000",b8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7:"150000000000000000000000","28d4ebf41e3d3c451e943bdd7e1f175fae932a3d":"6000000000000000000000","8c83d424a3cf24d51f01923dd54a18d6b6fede7b":"4000000000000000000000","7efc90766a00bc52372cac97fabd8a3c831f8ecd":"158000000000000000000","7c2b9603884a4f2e464eceb97d17938d828bc02c":"3000000000000000000000","9d250ae4f110d71cafc7b0adb52e8d9acb6679b8":"9840000000000000000000","61b3df2e9e9fd968131f1e88f0a0eb5bd765464d":"4000000000000000000000","9ae13bd882f2576575921a94974cbea861ba0d35":"3160000000000000000000","3d09688d93ad07f3abe68c722723cd680990435e":"29999948000000000000000","5e58e255fc19870a04305ff2a04631f2ff294bb1":"17600000000000000000",bcaed0acb6a76f113f7c613555a2c3b0f5bf34a5:"193600000000000000000","159adce27aa10b47236429a34a5ac42cad5b6416":"31867951000000000000000",e834c64318205ca7dd4a21abcb08266cb21ff02c:"999999000000000000000","7b6a84718dd86e63338429ac811d7c8a860f21f1":"1790000000000000000000","2118c116ab0cdf6fd11d54a4309307b477c3fc0f":"10000000000000000000000","34a901a69f036bcf9f7843c0ba01b426e8c3dc2b":"4000000000000000000000",c7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e:"1580000000000000000000",c6045b3c350b4ce9ca0c6b754fb41a69b97e9900:"925000000000000000000",cf5a6f9df75579c644f794711215b30d77a0ce40:"2000000000000000000000",e2904b1aefa056398b6234cb35811288d736db67:"40000000000000000000","7101bd799e411cde14bdfac25b067ac890eab8e8":"1450054000000000000000",cc45fb3a555bad807b388a0357c855205f7c75e8:"865000000000000000000",ff0c3c7798e8733dd2668152891bab80a8be955c:"80220000000000000000","3536453322c1466cb905af5c335ca8db74bff1e6":"447000000000000000000","08cac8952641d8fc526ec1ab4f2df826a5e7710f":"300000000000000000000","0d8aab8f74ea862cdf766805009d3f3e42d8d00b":"5820000000000000000000","8908760cd39b9c1e8184e6a752ee888e3f0b7045":"6000000000000000000000","8156360bbd370961ceca6b6691d75006ad204cf2":"40000000000000000000000",a304588f0d850cd8d38f76e9e83c1bf63e333ede:"39800000000000000000","14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d":"15500000000000000000000",a009bf076f1ba3fa57d2a7217218bed5565a7a7a:"1000000000000000000000","1c89060f987c518fa079ec2c0a5ebfa30f5d20f7":"38000000000000000000000","8895eb726226edc3f78cc6a515077b3296fdb95e":"3940000000000000000000","7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0":"1670000000000000000000",b3c65b845aba6cd816fbaae983e0e46c82aa8622:"1000000000000000000000",eff51d72adfae143edf3a42b1aec55a2ccdd0b90:"300000000000000000000","05bb64a916be66f460f5e3b64332110d209e19ae":"4200000000000000000000",d5b117ec116eb846418961eb7edb629cd0dd697f:"3000000000000000000000","05e97b09492cd68f63b12b892ed1d11d152c0eca":"1015200000000000000000","84cc7878da605fdb019fab9b4ccfc157709cdda5":"1336922000000000000000","79cac6494f11ef2798748cb53285bd8e22f97cda":"2000000000000000000000",bd5a8c94bd8be6470644f70c8f8a33a8a55c6341:"200000000000000000000",b119e79aa9b916526581cbf521ef474ae84dcff4:"1470700000000000000000",aff1045adf27a1aa329461b24de1bae9948a698b:"33400000000000000000","4398628ea6632d393e929cbd928464c568aa4a0c":"1400000000000000000000","99997668f7c1a4ff9e31f9977ae3224bcb887a85":"291200000000000000000",bc0e8745c3a549445c2be900f52300804ab56289:"33104697000000000000000",e5bab4f0afd8a9d1a381b45761aa18f3d3cce105:"1508010000000000000000",be60037e90714a4b917e61f193d834906703b13a:"1700000000000000000000","8ed4284c0f47449c15b8d9b3245de8beb6ce80bf":"800000000000000000000","333ad1596401e05aea2d36ca47318ef4cd2cb3df":"2910000000000000000000","22db559f2c3c1475a2e6ffe83a5979599196a7fa":"1000000000000000000000",fdf449f108c6fb4f5a2b081eed7e45e6919e4d25:"2000000000000000000000","0be1bcb90343fae5303173f461bd914a4839056c":"6000000000000000000000",b981ad5e6b7793a23fc6c1e8692eb2965d18d0da:"9999924000000000000000",c75d2259306aec7df022768c69899a652185dbc4:"4000000000000000000000","6c2e9be6d4ab450fd12531f33f028c614674f197":"3580000000000000000000","6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702":"20000000000000000000000",aabdb35c1514984a039213793f3345a168e81ff1:"309760000000000000000",d315deea1d8c1271f9d1311263ab47c007afb6f5:"69760000000000000000","4faf90b76ecfb9631bf9022176032d8b2c207009":"1000032000000000000000","3e7a966b5dc357ffb07e9fe067c45791fd8e3049":"59100000000000000000","2e64a8d71111a22f4c5de1e039b336f68d398a7c":"2000000000000000000000","181fbba852a7f50178b1c7f03ed9e58d54162929":"666000000000000000000","4f7330096f79ed264ee0127f5d30d2f73c52b3d8":"499970000000000000000",a8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1:"5800000000000000000000","1f9c3268458da301a2be5ab08257f77bb5a98aa4":"200000000000000000000",fc372ff6927cb396d9cf29803500110da632bc52:"2000000000000000000000","4fa554ab955c249217386a4d3263bbf72895434e":"19982000000000000000","2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3":"2000000000000000000000","5e32c72191b8392c55f510d8e3326e3a60501d62":"44000000000000000000000","1dfaee077212f1beaf0e6f2f1840537ae154ad86":"1000000000000000000000","7eaba035e2af3793fd74674b102540cf190addb9":"1273000000000000000000",d62edb96fce2969aaf6c545e967cf1c0bc805205:"85705000000000000000","220dc68df019b6b0ccbffb784b5a5ab4b15d4060":"3940000000000000000000","45bb829652d8bfb58b8527f0ecb621c29e212ec3":"2000000000000000000000","79b120eb8806732321288f675a27a9225f1cd2eb":"2465000000000000000000","740af1eefd3365d78ba7b12cb1a673e06a077246":"19700000000000000000000","0f042c9c2fb18766f836bb59f735f27dc329fe3c":"10000000000000000000000","6dda5f788a6c688ddf921fa3852eb6d6c6c62966":"40000000000000000000","96ad579bbfa8db8ebec9d286a72e4661eed8e356":"1070750000000000000000","0c2073ba44d3ddbdb639c04e191039a71716237f":"1430000000000000000000","1a3520453582c718a21c42375bc50773255253e1":"790000000000000000000",efcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d:"401100000000000000000","0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623":"4000000000000000000000","80f07ac09e7b2c3c0a3d1e9413a544c73a41becb":"20000000000000000000",c3631c7698b6c5111989bf452727b3f9395a6dea:"10683500000000000000000","4cc22c9bc9ad05d875a397dbe847ed221c920c67":"2000000000000000000000","1a987e3f83de75a42f1bde7c997c19217b4a5f24":"2000000000000000000000","5b2b64e9c058e382a8b299224eecaa16e09c8d92":"161000000000000000000","86caafacf32aa0317c032ac36babed974791dc03":"40000000000000000000000","1cd1f0a314cbb200de0a0cb1ef97e920709d97c2":"2000000000000000000000","7d980f4b566bb045517e4c14c87750de9346744b":"1337000000000000000000","8b5f29cc2faa262cdef30ef554f50eb488146eac":"5818250000000000000000","5153a0c3c8912881bf1c3501bf64b45649e48222":"4000000000000000000000",d21a7341eb84fd151054e5e387bb25d36e499c09:"14000000000000000000000","9560e8ac6718a6a1cdcff189d603c9063e413da6":"4000000000000000000000",e49ba0cd96816c4607773cf8a5970bb5bc16a1e6:"1670000000000000000000",b8ac117d9f0dba80901445823c4c9d4fa3fedc6e:"15759015000000000000000",af67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2:"1670000000000000000000",b43c27f7a0a122084b98f483922541c8836cee2c:"715000000000000000000","4d9279962029a8bd45639737e98b511eff074c21":"1337000000000000000000",c667441e7f29799aba616451d53b3f489f9e0f48:"13920000000000000000000","275875ff4fbb0cf3a430213127487f7608d04cba":"500080000000000000000","9a953b5bcc709379fcb559d7b916afdaa50cadcc":"100000000000000000000","7ea791ebab0445a00efdfc4e4a8e9a7e7565136d":"18200000000000000000","6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6":"1940000000000000000000",f1b4ecc63525f7432c3d834ffe2b970fbeb87212:"3000064000000000000000","6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7":"4271316000000000000000",bba3c68004248e489573abb2743677066b24c8a7:"2000000000000000000000",b7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f:"4000000000000000000000",fe98c664c3e447a95e69bd582171b7176ea2a685:"4000000000000000000000",ce71086d4c602554b82dcbfce88d20634d53cc4d:"43250000000000000000000","1c601993789207f965bb865cbb4cd657cce76fc0":"98294000000000000000","476b5599089a3fb6f29c6c72e49b2e4740ea808d":"2800000000000000000000","3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2":"140000000000000000000",c4f7d2e2e22084c44f70feaab6c32105f3da376f:"1970000000000000000000",c1eba5684aa1b24cba63150263b7a9131aeec28d:"20000000000000000000","94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b":"1940000000000000000000",ded877378407b94e781c4ef4af7cfc5bc220b516:"372500000000000000000","699c9ee47195511f35f862ca4c22fd35ae8ffbf4":"80000000000000000000",e3a89a1927cc4e2d43fbcda1e414d324a7d9e057:"205500000000000000000","4d93696fa24859f5d2939aebfa54b4b51ae1dccc":"19100000000000000000","0af65f14784e55a6f95667fd73252a1c94072d2a":"192987000000000000000","5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7":"970000000000000000000","426f78f70db259ac8534145b2934f4ef1098b5d8":"360000000000000000000","58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d":"2000000000000000000000","8eae29435598ba8f1c93428cdb3e2b4d31078e00":"2000000000000000000000","17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5":"26989000000000000000",ab3e78294ba886a0cfd5d3487fb3a3078d338d6e:"1970000000000000000000",bdf6e68c0cd7584080e847d72cbb23aad46aeb1d:"1970000000000000000000",f989346772995ec1906faffeba2a7fe7de9c6bab:"6685000000000000000000",dc5f5ad663a6f263327d64cac9cb133d2c960597:"2000000000000000000000","68fe1357218d095849cd579842c4aa02ff888d93":"2000000000000000000000",e09c68e61998d9c81b14e4ee802ba7adf6d74cdb:"4000000000000000000000","890fe11f3c24db8732d6c2e772e2297c7e65f139":"62980000000000000000000",a76929890a7b47fb859196016c6fdd8289ceb755:"5000000000000000000000","2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354":"1580000000000000000000","19687daa39c368139b6e7be60dc1753a9f0cbea3":"8000000000000000000000",c69be440134d6280980144a9f64d84748a37f349:"715000000000000000000","3d8d0723721e73a6c0d860aa0557abd14c1ee362":"5000000000000000000000","2b241f037337eb4acc61849bd272ac133f7cdf4b":"378000000000000000000000","24b95ebef79500baa0eda72e77f877415df75c33":"910000000000000000000","106ed5c719b5261477890425ae7551dc59bd255c":"11979600000000000000000","5b2e2f1618552eab0db98add55637c2951f1fb19":"12000000000000000000000","403145cb4ae7489fcc90cd985c6dc782b3cc4e44":"5999800000000000000000",e8be24f289443ee473bc76822f55098d89b91cc5:"2000000000000000000000",f6bc37b1d2a3788d589b6de212dc1713b2f6e78e:"5000000000000000000000","67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5":"240000000000000000000","6580b1bc94390f04b397bd73e95d96ef11eaf3a8":"20000000000000000000","98bf4af3810b842387db70c14d46099626003d10":"4000000000000000000000","17993d312aa1106957868f6a55a5e8f12f77c843":"450065000000000000000","0729b4b47c09eb16158464c8aa7fd9690b438839":"1999800000000000000000",ae70e69d2c4a0af818807b1a2705f79fd0b5dbc4:"985000000000000000000","38b50146e71916a5448de12a4d742135dcf39833":"32200000000000000000000","38439aaa24e3636f3a18e020ea1da7e145160d86":"2600000000000000000000","54b4429b182f0377be7e626939c5db6440f75d7a":"1970000000000000000000","7179726f5c71ae1b6d16a68428174e6b34b23646":"7353500000000000000000",c2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69:"970000000000000000000","912304118b80473d9e9fe3ee458fbe610ffda2bb":"200000000000000000000","3308b03466c27a17dfe1aafceb81e16d2934566f":"17000000000000000000000","10346414bec6d3dcc44e50e54d54c2b8c3734e3e":"4000000000000000000000","4fee50c5f988206b09a573469fb1d0b42ebb6dce":"2009400000000000000000","9ece1400800936c7c6485fcdd3626017d09afbf6":"310000000000000000000",ddf3ad76353810be6a89d731b787f6f17188612b:"20000000000000000000000","72402300e81d146c2e644e2bbda1da163ca3fb56":"7000000000000000000000",bb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76:"850000000000000000000",c3dd58903886303b928625257ae1a013d71ae216:"2000000000000000000000",ca6c818befd251361e02744068be99d8aa60b84a:"6000000000000000000000",b8d2ddc66f308c0158ae3ccb7b869f7d199d7b32:"844800000000000000000","8e486a0442d171c8605be348fee57eb5085eff0d":"4000000000000000000000",a807104f2703d679f8deafc442befe849e42950b:"2000000000000000000000",bb61a04bffd57c10470d45c39103f64650347616:"1000000000000000000000",d1c45954a62b911ad701ff2e90131e8ceb89c95c:"1394000000000000000000","5e65458be964ae449f71773704979766f8898761":"528600000000000000000",f9b37825f03073d31e249378c30c795c33f83af2:"200152000000000000000",e309974ce39d60aadf2e69673251bf0e04760a10:"254030000000000000000",d541ac187ad7e090522de6da3213e9a7f4439673:"2000000000000000000000",f33efc6397aa65fb53a8f07a0f893aae30e8bcee:"2304850000000000000000",d2f1998e1cb1580cec4f6c047dcd3dcec54cf73c:"200000000000000000000","0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d":"100000000000000000000","637d67d87f586f0a5a479e20ee13ea310a10b647":"48300000000000000000000","1a5ee533acbfb3a2d76d5b685277b796c56a052b":"2000000000000000000000","323fca5ed77f699f9d9930f5ceeff8e56f59f03c":"1337000000000000000000",a5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16:"22892000000000000000","93258255b37c7f58f4b10673a932dd3afd90f4f2":"1000000000000000000000","950fe9c6cad50c18f11a9ed9c45740a6180612d0":"8000000000000000000000",ee31167f9cc93b3c6465609d79db0cde90e8484c:"2000000000000000000000","6ebb5e6957aa821ef659b6018a393a504cae4450":"2000000000000000000000",be305a796e33bbf7f9aeae6512959066efda1010:"10880000000000000000000","537f9d4d31ef70839d84b0d9cdb72b9afedbdf35":"70000000000000000000000",fe9e1197d7974a7648dcc7a03112a88edbc9045d:"4925000000000000000000","99f77f998b20e0bcdcd9fc838641526cf25918ef":"1790000000000000000000","76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4":"1000000000000000000000",defe9141f4704599159d7b223de42bffd80496b3:"100000000000000000000","7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0":"199800000000000000000","23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14":"4000000000000000000000","9f86a066edb61fcb5856de93b75c8c791864b97b":"2000000000000000000000","871b8a8b51dea1989a5921f13ec1a955a515ad47":"8000000000000000000000","4efcd9c79fb4334ca6247b0a33bd9cc33208e272":"1337000000000000000000","35ac1d3ed7464fa3db14e7729213ceaa378c095e":"1520000000000000000000",c69d663c8d60908391c8d236191533fdf7775613:"485000000000000000000",c2ed5ffdd1add855a2692fe062b5d618742360d4:"1200000000000000000000","454f0141d721d33cbdc41018bd01119aa4784818":"6000000000000000000000","6c8687e3417710bb8a93559021a1469e6a86bc77":"11126675000000000000000",ec5b198a00cfb55a97b5d53644cffa8a04d2ab45:"2000000000000000000000",cd59f3dde77e09940befb6ee58031965cae7a336:"10000000000000000000000","8eebec1a62c08b05a7d1d59180af9ff0d18e3f36":"500000000000000000000","92a971a739799f8cb48ea8475d72b2d2474172e6":"3940000000000000000000",bed4649df646e2819229032d8868556fe1e053d3:"18200000000000000000",c50fe415a641b0856c4e75bf960515441afa358d:"2000000000000000000000","91f516146cda20281719978060c6be4149067c88":"2000000000000000000000","54a1370116fe22099e015d07cd2669dd291cc9d1":"20000000000000000000","80c04efd310f440483c73f744b5b9e64599ce3ec":"1200000000000000000000",a8914c95b560ec13f140577338c32bcbb77d3a7a:"180000000000000000000",e3c812737ac606baf7522ad817428a36050e7a34:"1940000000000000000000","6d1456fff0104ee844a3314737843338d24cd66c":"141840000000000000000","0e6ece99111cad1961c748ed3df51edd69d2a3b1":"100000000000000000000000","019d709579ff4bc09fdcdde431dc1447d2c260bc":"20000000000000000000",ebff84bbef423071e604c361bba677f5593def4e:"10000000000000000000000",e10c540088113fa6ec00b4b2c8824f8796e96ec4:"236400000000000000000000",e03220c697bcd28f26ef0b74404a8beb06b2ba7b:"8000000000000000000000",e69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8:"16915503000000000000000",e5fb31a5caee6a96de393bdbf89fbe65fe125bb3:"1000000000000000000000","030fb3401f72bd3418b7d1da75bf8c519dd707dc":"3000000000000000000000","1c751e7f24df9d94a637a5dedeffc58277b5db19":"3220000000000000000000",bded7e07d0711e684de65ac8b2ab57c55c1a8645:"591000000000000000000",dd7ff441ba6ffe3671f3c0dabbff1823a5043370:"2000000000000000000000",b55474ba58f0f2f40e6cbabed4ea176e011fcad6:"1970000000000000000000",b92427ad7578b4bfe20a9f63a7c5506d5ca12dc8:"2000000000000000000000","91a8baaed012ea2e63803b593d0d0c2aab4c5b0a":"1500000000000000000000",a97e072144499fe5ebbd354acc7e7efb58985d08:"2674000000000000000000","75c2ffa1bef54919d2097f7a142d2e14f9b04a58":"2673866000000000000000","53faf165be031ec18330d9fce5bd1281a1af08db":"140000000000000000000","055ab658c6f0ed4f875ed6742e4bc7292d1abbf0":"83500000000000000000","6f18ec767e320508195f1374500e3f2e125689ff":"1000000000000000000000","90fc537b210658660a83baa9ac4a8402f65746a8":"1880000000000000000000","34664d220fa7f37958024a3332d684bcc6d4c8bd":"10000000000000000000000","15acb61568ec4af7ea2819386181b116a6c5ee70":"31000000000000000000000","69d98f38a3ba3dbc01fa5c2c1427d862832f2f70":"100000000000000000000000",ece1152682b7598fe2d1e21ec15533885435ac85:"4000000000000000000000",f618d9b104411480a863e623fc55232d1a4f48aa:"265793000000000000000",f9debaecb5f339beea4894e5204bfa340d067f25:"1665000000000000000000","5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f":"3000000000000000000000","67df242d240dd4b8071d72f8fcf35bb3809d71e8":"4000000000000000000000",c4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde:"320000000000000000000","01a25a5f5af0169b30864c3be4d7563ccd44f09e":"1430000000000000000000","7f6efb6f4318876d2ee624e27595f44446f68e93":"1550000000000000000000","82249fe70f61c6b16f19a324840fdc020231bb02":"9504014000000000000000","205237c4be146fba99478f3a7dad17b09138da95":"2000000000000000000000",fd1fb5a89a89a721b8797068fbc47f3e9d52e149:"236400000000000000000",e47fbaed99fc209962604ebd20e240f74f4591f1:"2000000000000000000000",a24c3ab62181e9a15b78c4621e4c7c588127be26:"162410000000000000000",b6cd7432d5161be79768ad45de3e447a07982063:"4000000000000000000000","32a70691255c9fc9791a4f75c8b81f388e0a2503":"985000000000000000000","562f16d79abfcec3943e34b20f05f97bdfcda605":"4000000000000000000000",dbc66965e426ff1ac87ad6eb78c1d95271158f9f:"18200000000000000000","7e87863ec43a481df04d017762edcb5caa629b5a":"39400000000000000000","587d6849b168f6c3332b7abae7eb6c42c37f48bf":"880000000000000000000","721158be5762b119cc9b2035e88ee4ee78f29b82":"10000000000000000000000","84b91e2e2902d05e2b591b41083bd7beb2d52c74":"9848621000000000000000","632cecb10cfcf38ec986b43b8770adece9200221":"20000000000000000000",c34e3ba1322ed0571183a24f94204ee49c186641:"58200000000000000000",ae78bb849139a6ba38ae92a09a69601cc4cb62d1:"500000000000000000000","5ce0b6862cce9162e87e0849e387cb5df4f9118c":"1670000000000000000000",f52c0a7877345fe0c233bb0f04fd6ab18b6f14ba:"400440000000000000000000",e016dc138e25815b90be3fe9eee8ffb2e105624f:"500000000000000000000","5789d01db12c816ac268e9af19dc0dd6d99f15df":"200000000000000000000",d8b77db9b81bbe90427b62f702b201ffc29ff618:"930200000000000000000","5dff811dad819ece3ba602c383fb5dc64c0a3a48":"186000000000000000000",af3087e62e04bf900d5a54dc3e946274da92423b:"20000000000000000000","8c1023fde1574db8bb54f1739670157ca47da652":"6969382000000000000000",bb3b010b18e6e2be1135871026b7ba15ea0fde24:"10044000000000000000000",cabdaf354f4720a466a764a528d60e3a482a393c:"1000000000000000000000","94bbc67d13f89ebca594be94bc5170920c30d9f3":"80200000000000000000","3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5":"446000000000000000000","281250a29121270a4ee5d78d24feafe82c70ba3a":"1000000000000000000000","590ccb5911cf78f6f622f535c474375f4a12cfcf":"20000000000000000000000","542e8096bafb88162606002e8c8a3ed19814aeac":"2000000000000000000000",a65426cff378ed23253513b19f496de45fa7e18f:"7200000000000000000000","4aa693b122f314482a47b11cc77c68a497876162":"1970000000000000000000",d9b783d31d32adc50fa3eacaa15d92b568eaeb47:"34010000000000000000000","068e655766b944fb263619658740b850c94afa31":"35200000000000000000","9e23c5e4b782b00a5fadf1aead87dacf5b0367a1":"20000000000000000000",bf17f397f8f46f1bae45d187148c06eeb959fa4d:"1001440000000000000000","8578e10212ca14ff0732a8241e37467db85632a9":"6000000000000000000000","2cb5495a505336c2465410d1cae095b8e1ba5cdd":"20000000000000000000000","695b0f5242753701b264a67071a2dc880836b8db":"16400000000000000000",f2edde37f9a8c39ddea24d79f4015757d06bf786:"100000000000000000000000","480f31b989311e4124c6a7465f5a44094d36f9d0":"1025000000000000000000",cf157612764e0fd696c8cb5fba85df4c0ddc3cb0:"30000000000000000000000","27521deb3b6ef1416ea4c781a2e5d7b36ee81c61":"2000000000000000000000","6efd90b535e00bbd889fda7e9c3184f879a151db":"10100000000000000000000",b635a4bc71fb28fdd5d2c322983a56c284426e69:"170000000000000000000",a17c9e4323069518189d5207a0728dcb92306a3f:"1000000000000000000000","6af940f63ec9b8d876272aca96fef65cdacecdea":"3000000000000000000000","469358709332c82b887e20bcddd0220f8edba7d0":"17300000000000000000000",a257ad594bd88328a7d90fc0a907df95eecae316:"520510000000000000000","6f051666cb4f7bd2b1907221b829b555d7a3db74":"1760000000000000000000","46bfc5b207eb2013e2e60f775fecd71810c5990c":"1550000000000000000000","62b9081e7710345e38e02e16449ace1b85bcfc4e":"910000000000000000000",bc73f7b1ca3b773b34249ada2e2c8a9274cc17c2:"2000000000000000000000","1adaf4abfa867db17f99af6abebf707a3cf55df6":"6000000000000000000000","8d629c20608135491b5013f1002586a0383130e5":"1370000000000000000000","38e46de4453c38e941e7930f43304f94bb7b2be8":"2005500000000000000000","3485f621256433b98a4200dad857efe55937ec98":"2000000000000000000000","775c10c93e0db7205b2643458233c64fc33fd75b":"2000000000000000000000","7c4401ae98f12ef6de39ae24cf9fc51f80eba16b":"200000000000000000000","17b807afa3ddd647e723542e7b52fee39527f306":"400010000000000000000","0ab366e6e7d5abbce6b44a438d69a1cabb90d133":"320000000000000000000","194ffe78bbf5d20dd18a1f01da552e00b7b11db1":"7000000000000000000000",c45d47ab0c9aa98a5bd62d16223ea2471b121ca4:"593640000000000000000","2487c3c4be86a2723d917c06b458550170c3edba":"1000000000000000000000",ec4d08aa2e47496dca87225de33f2b40a8a5b36f:"158000000000000000000",aaa8defe11e3613f11067fb983625a08995a8dfc:"200000000000000000000","50bb67c8b8d8bd0f63c4760904f2d333f400aace":"2000000000000000000000","1227e10a4dbf9caca31b1780239f557615fc35c1":"200000000000000000000","44a8989e32308121f72466978db395d1f76c3a4b":"7236900000000000000000","59569a21d28fba4bda37753405a081f2063da150":"4000000000000000000000",c3756bcdcc7eec74ed896adfc335275930266e08:"6000000000000000000000",ce3a61f0461b00935e85fa1ead82c45e5a64d488:"500000000000000000000","012f396a2b5eb83559bac515e5210df2c8c362ba":"200000000000000000000","93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c":"3999922000000000000000",e20bb9f3966419e14bbbaaaa6789e92496cfa479:"3465116000000000000000","9eef442d291a447d74c5d253c49ef324eac1d8f0":"3420000000000000000000",db6c2a73dac7424ab0d031b66761122566c01043:"3000000000000000000000","704d243c2978e46c2c86adbecd246e3b295ff633":"2012000000000000000000",d2ff672016f63b2f85398f4a6fedbb60a50d3cce:"342500000000000000000",d2051cb3cb6704f0548cc890ab0a19db3415b42a:"334000000000000000000","1111e5dbf45e6f906d62866f1708101788ddd571":"1300200000000000000000","6a686bf220b593deb9b7324615fb9144ded3f39d":"1460000000000000000000","911feea61fe0ed50c5b9e5a0d66071399d28bdc6":"60000000000000000000","3881defae1c07b3ce04c78abe26b0cdc8d73f010":"200000000000000000000",ea94f32808a2ef8a9bf0861d1d2404f7b7be258a:"20000000000000000000","2eef6b1417d7b10ecfc19b123a8a89e73e526c58":"600000000000000000000",dd8af9e7765223f4446f44d3d509819a3d3db411:"10000000000000000000000","2efc4c647dac6acac35577ad221758fef6616faa":"8000000000000000000000","1547b9bf7ad66274f3413827231ba405ee8c88c1":"17300000000000000000000","250a40cef3202397f240469548beb5626af4f23c":"92500000000000000000",c175be3194e669422d15fee81eb9f2c56c67d9c9:"200000000000000000000",c9e02608066828848aeb28c73672a12925181f4d:"500038000000000000000","8229ceb9f0d70839498d44e6abed93c5ca059f5d":"123300000000000000000000","39f198331e4b21c1b760a3155f4ab2fe00a74619":"2000000000000000000000","3ffcb870d4023d255d5167d8a507cefc366b68ba":"649400000000000000000","00dae27b350bae20c5652124af5d8b5cba001ec1":"40000000000000000000",fc5500825105cf712a318a5e9c3bfc69c89d0c12:"4000000000000000000000","1ed8bb3f06778b039e9961d81cb71a73e6787c8e":"2000000000000000000000","530ffac3bc3412e2ec0ea47b7981c770f5bb2f35":"133700000000000000000","5f344b01c7191a32d0762ac188f0ec2dd460911d":"1000000000000000000000","5cfa9877f719c79d9e494a08d1e41cf103fc87c9":"200000000000000000000",f6eaac7032d492ef17fd6095afc11d634f56b382:"500038000000000000000","962c0dec8a3d464bf39b1215eafd26480ae490cd":"2001680000000000000000","262a8bfd7d9dc5dd3ad78161b6bb560824373655":"1169820000000000000000","9b4824ff9fb2abda554dee4fb8cf549165570631":"20000000000000000000",bb3b9005f46fd2ca3b30162599928c77d9f6b601:"8000014000000000000000",f7dc251196fbcbb77c947d7c1946b0ff65021cea:"1000000000000000000000",af1148ef6c8e103d7530efc91679c9ac27000993:"200000000000000000000","0bb2650ea01aca755bc0c017b64b1ab5a66d82e3":"1337000000000000000000","0cda12bf72d461bbc479eb92e6491d057e6b5ad1":"10000000000000000000000","4e5b77f9066159e615933f2dda7477fa4e47d648":"200000000000000000000","391161b0e43c302066e8a68d2ce7e199ecdb1d57":"4000000000000000000000",c7e330cd0c890ac99fe771fcc7e7b009b7413d8a:"4000000000000000000000",d4b38a5fdb63e01714e9801db47bc990bd509183:"5999000000000000000000",bc0f98598f88056a26339620923b8f1eb074a9fd:"200000000000000000000",dbc59ed88973dead310884223af49763c05030f1:"20000000000000000000","0f85e42b1df321a4b3e835b50c00b06173968436":"985000000000000000000",d7788ef28658aa06cc53e1f3f0de58e5c371be78:"6685000000000000000000",ecd276af64c79d1bd9a92b86b5e88d9a95eb88f8:"20000000000000000000","81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec":"1820000000000000000000","5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5":"2000000000000000000000","99878f9d6e0a7ed9aec78297b73879a80195afe0":"3980000000000000000000","7294c918b1aefb4d25927ef9d799e71f93a28e85":"197000000000000000000",a33f70da7275ef057104dfa7db64f472e9f5d553:"80220000000000000000","255bdd6474cc8262f26a22c38f45940e1ceea69b":"4000000000000000000000","52f8b509fee1a874ab6f9d87367fbeaf15ac137f":"1000000000000000000000",e2728a3e8c2aaac983d05dc6877374a8f446eee9:"197600000000000000000",ed0206cb23315128f8caff26f6a30b985467d022:"40000000000000000000000","87cf36ad03c9eae9053abb5242de9117bb0f2a0b":"500000000000000000000",a929c8bd71db0c308dac06080a1747f21b1465aa:"500000000000000000000","9da6e075989c7419094cc9f6d2e49393bb199688":"11100000000000000000000","763eece0b08ac89e32bfa4bece769514d8cb5b85":"4000000000000000000000","5df3277ca85936c7a0d2c0795605ad25095e7159":"2000000000000000000000","7163758cbb6c4c525e0414a40a049dcccce919bb":"200000000000000000000","14cdddbc8b09e6675a9e9e05091cb92238c39e1e":"5100000000000000000000",b3b7f493b44a2c8d80ec78b1cdc75a652b73b06c:"2000000000000000000000",c69b855539ce1b04714728eec25a37f367951de7:"2000000000000000000000","052eab1f61b6d45517283f41d1441824878749d0":"4000000000000000000000","515651d6db4faf9ecd103a921bbbbe6ae970fdd4":"20000000000000000000000",c7aff91929797489555a2ff1d14d5c695a108355:"1000000000000000000000",d7ca7fdcfebe4588eff5421d1522b61328df7bf3:"4001070000000000000000",eefba12dfc996742db790464ca7d273be6e81b3e:"1000000000000000000000",ebaa216de9cc5a43031707d36fe6d5bedc05bdf0:"1969606000000000000000","559194304f14b1b93afe444f0624e053c23a0009":"400000000000000000000","4ecc19948dd9cd87b4c7201ab48e758f28e7cc76":"500200000000000000000",f224eb900b37b4490eee6a0b6420d85c947d8733:"970000000000000000000","97810bafc37e84306332aacb35e92ad911d23d24":"1000000000000000000000",bd67d2e2f82da8861341bc96a2c0791fddf39e40:"200014000000000000000","1b6495891240e64e594493c2662171db5e30ce13":"172400000000000000000","00bdd4013aa31c04616c2bc9785f2788f915679b":"13400000000000000000",c6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9:"400000000000000000000",b7c9f12b038e73436d17e1c12ffe1aeccdb3f58c:"540000000000000000000",c1b500011cfba95d7cd636e95e6cbf6167464b25:"200000000000000000000","39e0db4d60568c800b8c5500026c2594f5768960":"1000000000000000000000","40e3c283f7e24de0410c121bee60a5607f3e29a6":"1000000000000000000000","2f7d3290851be5c6b4b43f7d4574329f61a792c3":"100000000000000000000",c33ece935a8f4ef938ea7e1bac87cb925d8490ca:"33122000000000000000000","57bddf078834009c89d88e6282759dc45335b470":"2148000000000000000000","50ad187ab21167c2b6e78be0153f44504a07945e":"100076000000000000000","5bd24aac3612b20c609eb46779bf95698407c57c":"1970000000000000000000","16526c9edf943efa4f6d0f0bae81e18b31c54079":"985000000000000000000","4c6a9dc2cab10abb2e7c137006f08fecb5b779e1":"499000000000000000000","02c9f7940a7b8b7a410bf83dc9c22333d4275dd3":"5000000000000000000000",b9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f:"1000000000000000000000","7e268f131ddf687cc325c412f78ba961205e9112":"16000600000000000000000","180478a655d78d0f3b0c4f202b61485bc4002fd5":"2000000000000000000000",ed4014538cee664a2fbcb6dc669f7ab16d0ba57c:"200000000000000000000",f63a579bc3eac2a9490410128dbcebe6d9de8243:"1490000000000000000000","5d822d9b3ef4b502627407da272f67814a6becd4":"20000000000000000000",eb52ab10553492329c1c54833ae610f398a65b9d:"152000000000000000000","63340a57716bfa63eb6cd133721202575bf796f0":"209967000000000000000","933bf33f8299702b3a902642c33e0bfaea5c1ca3":"15200000000000000000","25bc49ef288cd165e525c661a812cf84fbec8f33":"338464000000000000000",c8231ba5a411a13e222b29bfc1083f763158f226:"1000090000000000000000","6c15ec3520bf8ebbc820bd0ff19778375494cf9d":"2005500000000000000000",aaced8a9563b1bc311dbdffc1ae7f57519c4440c:"2000000000000000000000",d90f3009db437e4e11c780bec8896f738d65ef0d:"4000000000000000000000","5603241eb8f08f721e348c9d9ad92f48e390aa24":"200000000000000000000","53cec6c88092f756efe56f7db11228a2db45b122":"4000000000000000000000","194cebb4929882bf3b4bf9864c2b1b0f62c283f9":"571300000000000000000","4be8628a8154874e048d80c142181022b180bcc1":"60000000000000000000","5fd973af366aa5157c54659bcfb27cbfa5ac15d6":"4000000000000000000000","303139bc596403d5d3931f774c66c4ba467454db":"1699830000000000000000","87584a3f613bd4fac74c1e780b86d6caeb890cb2":"1700000000000000000000","77f4e3bdf056883cc87280dbe640a18a0d02a207":"193806000000000000000","4de3fe34a6fbf634c051997f47cc7f48791f5824":"1999000000000000000000",c45a1ca1036b95004187cdac44a36e33a94ab5c3:"254800000000000000000","65d33eb39cda6453b19e61c1fe4db93170ef9d34":"13370000000000000000",f65616be9c8b797e7415227c9138faa0891742d7:"790000000000000000000",e17812f66c5e65941e186c46922b6e7b2f0eeb46:"1820000000000000000000",d47f50df89a1cff96513bef1b2ae3a2971accf2c:"840000000000000000000","8ed1528b447ed4297902f639c514d0944a88f8c8":"198800000000000000000",a4fb14409a67b45688a8593e5cc2cf596ced6f11:"1790000000000000000000","855d9aef2c39c6230d09c99ef6494989abe68785":"161000000000000000000","778c43d11afe3b586ff374192d96a7f23d2b9b7f":"2577139000000000000000",e3ece1f632711d13bfffa1f8f6840871ee58fb27:"4000000000000000000000",beb3358c50cf9f75ffc76d443c2c7f55075a0589:"2674000000000000000000",f156dc0b2a981e5b55d3f2f03b8134e331dbadb7:"100000000000000000000",eb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb:"1966000000000000000000","2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0":"18500000000000000000",ec75b4a47513120ba5f86039814f1998e3817ac3:"178756000000000000000","9c3d0692ceeef80aa4965ceed262ffc7f069f2dc":"200000000000000000000",e05029aceb0778675bef1741ab2cd2931ef7c84b:"5000057000000000000000","41d3b731a326e76858baa5f4bd89b57b36932343":"394000000000000000000",c346cb1fbce2ab285d8e5401f42dd7234d37e86d:"83500000000000000000","45f4fc60f08eaca10598f0336329801e3c92cb46":"200000000000000000000",f04a6a379708b9428d722aa2b06b77e88935cf89:"300000000000000000000","232832cd5977e00a4c30d0163f2e24f088a6cb09":"3000000000000000000000",d2ac0d3a58605e1d0f0eb3de25b2cad129ed6058:"4000000000000000000000",a356551bb77d4f45a6d7e09f0a089e79cca249cb:"340000000000000000000",b50c9f5789ae44e2dce017c714caf00c830084c2:"394000000000000000000","21fd6c5d97f9c600b76821ddd4e776350fce2be0":"1999946000000000000000",f0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c:"16700000000000000000000",ab7091932e4bc39dbb552380ca934fd7166d1e6e:"3340000000000000000000",acd8dd91f714764c45677c63d852e56eb9eece2e:"2000000000000000000000","57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b":"2000000000000000000000","5af46a25ac09cb73616b53b14fb42ff0a51cddb2":"4000000000000000000000","1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb":"4200000000000000000000","03337012ae1d7ff3ee7f697c403e7780188bf0ef":"200000000000000000000","32eb64be1b5dede408c6bdefbe6e405c16b7ed02":"1970000000000000000000","22e2488e2da26a49ae84c01bd54b21f2947891c6":"1730000000000000000000",be98a77fd41097b34f59d7589baad021659ff712:"900000000000000000000",dda4ed2a58a8dd20a73275347b580d71b95bf99a:"399000000000000000000","671110d96aaff11523cc546bf9940eedffb2faf7":"4000000000000000000000","5d71799c8df3bccb7ee446df50b8312bc4eb71c5":"200000000000000000000",ae179a460db66326743d24e67523a57b246daf7f:"4722920000000000000000","198bfcf1b07ae308fa2c02069ac9dafe7135fb47":"20000000000000000000","4662a1765ee921842ddc88898d1dc8627597bd7e":"10000000000000000000000","783eec8aa5dac77b2e6623ed5198a431abbaee07":"440000000000000000000",ed6643c0e8884b2d3211853785a08bf8f33ed29f:"1337000000000000000000","5cc7d3066d45d27621f78bb4b339473e442a860f":"9999908000000000000000","94ef8be45077c7d4c5652740de946a62624f713f":"100085000000000000000","2f853817afd3b8f3b86e9f60ee77b5d97773c0e3":"1451450000000000000000","3e0b8ed86ed669e12723af7572fbacfe829b1e16":"1499800000000000000000",fa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6:"291200000000000000000","2c234f505ca8dcc77d9b7e01d257c318cc19396d":"100000000000000000000",f3f24fc29e20403fc0e8f5ebbb553426f78270a2:"100000000000000000000","91546b79ecf69f936b5a561508b0d7e50cc5992f":"267400000000000000000","435443b81dfdb9bd8c6787bc2518e2d47e57c15f":"5968500000000000000000","3a06e3bb1edcfd0c44c3074de0bb606b049894a2":"10000000000000000000000","3a3108c1e680a33b336c21131334409d97e5adec":"20000000000000000000","2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210":"139740000000000000000",f44f8551ace933720712c5c491cdb6f2f951736c:"4000000000000000000000","5bc1f95507b1018642e45cd9c0e22733b9b1a326":"100000000000000000000","94ca56de777fd453177f5e0694c478e66aff8a84":"500000000000000000000",afdd1b786162b8317e20f0e979f4b2ce486d765d:"20000000000000000000","3a805fa0f7387f73055b7858ca8519edd93d634f":"1850000000000000000000","8b36224c7356e751f0c066c35e3b44860364bfc2":"998987000000000000000",cfecbea07c27002f65fe534bb8842d0925c78402:"4000000000000000000000","482982ac1f1c6d1721feecd9b9c96cd949805055":"10000000000000000000000",af880fc7567d5595cacce15c3fc14c8742c26c9e:"133700000000000000000",acc1c78786ab4d2b3b277135b5ba123e0400486b:"78800000000000000000","41f27e744bd29de2b0598f02a0bb9f98e681eaa4":"7760000000000000000000","09a025316f967fa8b9a1d60700063f5a68001caa":"38200000000000000000","391f20176d12360d724d51470a90703675594a4d":"1600000000000000000000",fe4d8403216fd571572bf1bdb01d00578978d688:"9850000000000000000000","900f0b8e35b668f81ef252b13855aa5007d012e7":"425000000000000000000",c35b95a2a3737cb8f0f596b34524872bd30da234:"7540000000000000000000","412a68f6c645559cc977fc4964047a201d1bb0e2":"50000000000000000000000",d3dad1b6d08d4581ccae65a8732db6ac69f0c69e:"6000000000000000000000","35855ec641ab9e081ed0c2a6dcd81354d0244a87":"1201897000000000000000","88015d7203c5e0224aeda286ed12f1a51b789333":"4999711000000000000000","251c12722c6879227992a304eb3576cd18434ea5":"2000000000000000000000","1f6f0030349752061c96072bc3d6eb3549208d6b":"23891000000000000000","86153063a1ae7f02f1a88136d4d69c7c5e3e4327":"1000000000000000000000","78355df0a230f83d032c703154414de3eedab557":"2000000000000000000000",c5b56cd234267c28e89c6f6b2266b086a12f970c:"4000000000000000000000","3e3cd3bec06591d6346f254b621eb41c89008d31":"993800000000000000000","378ea1dc8edc19bae82638029ea8752ce98bcfcd":"2000000000000000000000","67632046dcb25a54936928a96f423f3320cbed92":"2000000000000000000000",ddbee6f094eae63420b003fb4757142aea6cd0fd:"2000000000000000000000",b555d00f9190cc3677aef314acd73fdc39399259:"2000000000000000000000",e230fe1bff03186d0219f15d4c481b7d59be286a:"36710000000000000000","3e4e9265223c9738324cf20bd06006d0073edb8c":"133700000000000000000","7450ff7f99eaa9116275deac68e428df5bbcd8b9":"2000000000000000000000","021f69043de88c4917ca10f1842897eec0589c7c":"1978760000000000000000","351787843505f8e4eff46566cce6a59f4d1c5fe7":"9250000000000000000000",ebd37b256563e30c6f9289a8e2702f0852880833:"1999944000000000000000",ed41e1a28f5caa843880ef4e8b08bd6c33141edf:"790174000000000000000","8d238e036596987643d73173c37b0ad06055b96c":"2089724000000000000000","478e524ef2a381d70c82588a93ca7a5fa9d51cbf":"254908000000000000000000","4419ac618d5dea7cdc6077206fb07dbdd71c1702":"4000000000000000000000",ca25ff34934c1942e22a4e7bd56f14021a1af088:"197000000000000000000","5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b":"1000000000000000000000","4354221e62dc09e6406436163a185ef06d114a81":"2000000000000000000000",ca0432cb157b5179f02ebba5c9d1b54fec4d88ca:"1000000000000000000000","8a780ab87a9145fe10ed60fa476a740af4cab1d2":"334000000000000000000","4ff676e27f681a982d8fd9d20e648b3dce05e945":"2800000000000000000000","6c63fc85029a2654d79b2bea4de349e4524577c5":"660000000000000000000","1ac089c3bc4d82f06a20051a9d732dc0e734cb61":"700300000000000000000","4bf4479799ef82eea20943374f56a1bf54001e5e":"3940000000000000000000","08411652c871713609af0062a8a1281bf1bbcfd9":"1400000000000000000000",e1bfaa5a45c504428923c4a61192a55b1400b45d:"2674000000000000000000","5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3":"40000000000000000000000",bb27c6a7f91075475ab229619040f804c8ec7a6a:"10000000000000000000000","5d8d31faa864e22159cd6f5175ccecc53fa54d72":"26980000000000000000000","2dd8eeef87194abc2ce7585da1e35b7cea780cb7":"999999000000000000000","0e1801e70b6262861b1134ccbc391f568afc92f7":"4000000000000000000000","61042b80fd6095d1b87be2f00f109fabafd157a6":"100000000000000000000",fb5518714cefc36d04865de5915ef0ff47dfe743:"2000000000000000000000",b5add1e7809f7d03069bfe883b0a932210be8712:"1000000000000000000000",c2e2d498f70dcd0859e50b023a710a6d4b2133bd:"1037130000000000000000","4ad047fae67ef162fe68fedbc27d3b65caf10c36":"1970000000000000000000","69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f":"4000000000000000000000","683633010a88686bea5a98ea53e87997cbf73e69":"99960000000000000000","6cb11ecb32d3ce829601310636f5a10cf7cf9b5f":"20068370000000000000000",a613456996408af1c2e93e177788ab55895e2b32:"6366000000000000000000","8308ed0af7f8a3c1751fafc877b5a42af7d35882":"1000000000000000000000",e5edf8123f2403ce1a0299becf7aac744d075f23:"200200000000000000000","05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1":"400000000000000000000","00b277b099a8e866ca0ec65bcb87284fd142a582":"1970000000000000000000","4b9e068fc4680976e61504912985fd5ce94bab0d":"668500000000000000000","12134e7f6b017bf48e855a399ca58e2e892fa5c8":"1000000000000000000000",dffcea5421ec15900c6ecfc777184e140e209e24:"19980000000000000000","2132c0516a2e17174ac547c43b7b0020d1eb4c59":"985000000000000000000",d39a5da460392b940b3c69bc03757bf3f2e82489:"7019250000000000000000","66c8331efe7198e98b2d32b938688e3241d0e24f":"9620000000000000000000",bdca2a0ff34588af625fa8e28fc3015ab5a3aa00:"2339800000000000000000","7dfc342dffcf45dfee74f84c0995397bd1a63172":"250000000000000000000",a202547242806f6e70e74058d6e5292defc8c8d4:"2002000000000000000000","3bbc13d04accc0707aebdcaef087d0b87e0b5ee3":"3520000000000000000000",be5cba8d37427986e8ca2600e858bb03c359520f:"2955000000000000000000","4174fa1bc12a3b7183cbabb77a0b59557ba5f1db":"2000000000000000000000","9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16":"804000000000000000000","25e661c939863acc044e6f17b5698cce379ec3cc":"1370000000000000000000","24bd5904059091d2f9e12d6a26a010ca22ab14e8":"1880000000000000000000",c96626728aaa4c4fb3d31c26df3af310081710d1:"3340000000000000000000","0fb5d2c673bfb1ddca141b9894fd6d3f05da6720":"100000000000000000000","2de31afd189a13a76ff6fe73ead9f74bb5c4a629":"6000000000000000000000",bd09126c891c4a83068059fe0e15796c4661a9f4:"800000000000000000000","496f5843f6d24cd98d255e4c23d1e1f023227545":"1754143000000000000000","540cf23dd95c4d558a279d778d2b3735b3164191":"10000000000000000000000","9b5ec18e8313887df461d2902e81e67a8f113bb1":"100000000000000000000",b7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91:"1820000000000000000000","2590126870e0bde8a663ab040a72a5573d8d41c2":"5000000000000000000000","090fa9367bda57d0d3253a0a8ff76ce0b8e19a73":"1000000000000000000000","2a5ba9e34cd58da54c9a2712663a3be274c8e47b":"197000000000000000000","3e8641d43c42003f0a33c929f711079deb2b9e46":"500000000000000000000",f4d97664cc4eec9edbe7fa09f4750a663b507d79:"4000000000000000000000",b1540e94cff3465cc3d187e7c8e3bdaf984659e2:"2989950000000000000000",f96883582459908c827627e86f28e646f9c7fc7a:"8350000000000000000000",d4feed99e8917c5c5458635f3603ecb7e817a7d0:"300031000000000000000","14b1603ec62b20022033eec4d6d6655ac24a015a":"50000000000000000000",af8e1dcb314c950d3687434d309858e1a8739cd4:"267400000000000000000","4b9206ba6b549a1a7f969e1d5dba867539d1fa67":"7880000000000000000000","471010da492f4018833b088d9872901e06129174":"500000000000000000000",d243184c801e5d79d2063f3578dbae81e7b3a9cb:"1989700000000000000000","3eada8c92f56067e1bb73ce378da56dc2cdfd365":"2210000000000000000000","33ea6b7855e05b07ab80dab1e14de9b649e99b6c":"532000000000000000000","700711e311bb947355f755b579250ca7fd765a3e":"1790000000000000000000","87fb26c31e48644d693134205cae43b21f18614b":"1370000000000000000000","001d14804b399c6ef80e64576f657660804fec0b":"4200000000000000000000",f9642086b1fbae61a6804dbe5fb15ec2d2b537f4:"2000000000000000000000","6919dd5e5dfb1afa404703b9faea8cee35d00d70":"5910000000000000000000","9ac4da51d27822d1e208c96ea64a1e5b55299723":"100040000000000000000","1bd8ebaa7674bb18e19198db244f570313075f43":"150000000000000000000",e64ef012658d54f8e8609c4e9023c09fe865c83b:"28000000000000000000","43b079baf0727999e66bf743d5bcbf776c3b0922":"2000000000000000000000","06ac26ad92cb859bd5905ddce4266aa0ec50a9c5":"775000000000000000000","99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f":"985000000000000000000","4ae93082e45187c26160e66792f57fad3551c73a":"21658000000000000000000","7da7613445a21299aa74f0ad71431ec43fbb1be9":"68000000000000000000","4a9a26fd0a8ba10f977da4f77c31908dab4a8016":"1790000000000000000000","972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9":"200000000000000000000",b5046cb3dc1dedbd364514a2848e44c1de4ed147:"16445100000000000000000","48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb":"3220000000000000000000","46c1aa2244b9c8a957ca8fac431b0595a3b86824":"4000000000000000000000","21fd0bade5f4ef7474d058b7f3d854cb1300524e":"20000000000000000000","1864a3c7b48155448c54c88c708f166709736d31":"133700000000000000000","5dd53ae897526b167d39f1744ef7c3da5b37a293":"8000000000000000000000",ece111670b563ccdbebca52384290ecd68fe5c92:"20000000000000000000","74d671d99cbea1ab57906375b63ff42b50451d17":"1000000000000000000000","5717cc9301511d4a81b9f583148beed3d3cc8309":"2600000000000000000000","8f92844f282a92999ee5b4a8d773d06b694dbd9f":"1940000000000000000000",b5a606f4ddcbb9471ec67f658caf2b00ee73025e:"4325000000000000000000",bdb60b823a1173d45a0792245fb496f1fd3301cf:"2000000000000000000000","1d2615f8b6ca5012b663bdd094b0c5137c778ddf":"10000000000000000000000","82ff716fdf033ec7e942c909d9831867b8b6e2ef":"1790000000000000000000","44c14765127cde11fab46c5d2cf4d4b2890023fd":"2000000000000000000000",c72cb301258e91bc08998a805dd192f25c2f9a35:"591000000000000000000",ad732c976593eec4783b4e2ecd793979780bfedb:"2000000000000000000000",d8f62036f03b7635b858f1103f8a1d9019a892b6:"50000000000000000000","0a06fad7dcd7a492cbc053eeabde6934b39d8637":"20000000000000000000","67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d":"1790000000000000000000","4b5cdb1e428c91dd7cb54a6aed4571da054bfe52":"88000000000000000000",b3557d39b5411b84445f5f54f38f62d2714d0087:"600000000000000000000","0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb":"2000000000000000000000","9b2be7f56754f505e3441a10f7f0e20fd3ddf849":"340000000000000000000","0b93fca4a4f09cac20db60e065edcccc11e0a5b6":"200000000000000000000","3bc85d6c735b9cda4bba5f48b24b13e70630307b":"1970000000000000000000","52102354a6aca95d8a2e86d5debda6de69346076":"2000000000000000000000",cda4530f4b9bc50905b79d17c28fc46f95349bdf:"942000000000000000000",ff545bbb66fbd00eb5e6373ff4e326f5feb5fe12:"20000000000000000000","4030a925706b2c101c8c5cb9bd05fbb4f6759b18":"4000000000000000000000",f11e01c7a9d12499005f4dae7716095a34176277:"400000000000000000000",a4826b6c3882fad0ed5c8fbb25cc40cc4f33759f:"2068000000000000000000","28510e6eff1fc829b6576f4328bc3938ec7a6580":"10000000000000000000000","9ce5363b13e8238aa4dd15acd0b2e8afe0873247":"200000000000000000000",d97bc84abd47c05bbf457b2ef659d61ca5e5e48f:"122000000000000000000","4a719061f5285495b37b9d7ef8a51b07d6e6acac":"199800000000000000000","8b714522fa2839620470edcf0c4401b713663df1":"200000000000000000000",b6decf82969819ba02de29b9b593f21b64eeda0f:"740000000000000000000",c87d3ae3d88704d9ab0009dcc1a0067131f8ba3c:"1969606000000000000000",dccb370ed68aa922283043ef7cad1b9d403fc34a:"4000000000000000000000","2d532df4c63911d1ce91f6d1fcbff7960f78a885":"1669833000000000000000","1fcfd1d57f872290560cb62d600e1defbefccc1c":"1490000000000000000000",d9e27eb07dfc71a706060c7f079238ca93e88539:"1000000000000000000000",da7732f02f2e272eaf28df972ecc0ddeed9cf498:"205274000000000000000",bf09d77048e270b662330e9486b38b43cd781495:"436000000000000000000000","619f171445d42b02e2e07004ad8afe694fa53d6a":"20000000000000000000","2bdd03bebbee273b6ca1059b34999a5bbd61bb79":"20000000000000000000","8da1d359ba6cb4bcc57d7a437720d55db2f01c72":"80000000000000000000",be935793f45b70d8045d2654d8dd3ad24b5b6137:"880000000000000000000",ee71793e3acf12a7274f563961f537529d89c7de:"2000000000000000000000","86f05d19063e9369c6004eb3f123943a7cff4eab":"1999944000000000000000","87b10f9c280098179a2b76e9ce90be61fc844d0d":"1337000000000000000000","243c84d12420570cc4ef3baba1c959c283249520":"2345000000000000000000","6bc85acd5928722ef5095331ee88f484b8cf8357":"180000000000000000000","2561a138dcf83bd813e0e7f108642be3de3d6f05":"999940000000000000000","7d0350e40b338dda736661872be33f1f9752d755":"49933000000000000000",e5dc9349cb52e161196122cf87a38936e2c57f34:"2000000000000000000000","543a8c0efb8bcd15c543e2a6a4f807597631adef":"5893800000000000000000","0413d0cf78c001898a378b918cd6e498ea773c4d":"280000000000000000000","3708e59de6b4055088782902e0579c7201a8bf50":"200000000000000000000000","699fc6d68a4775573c1dcdaec830fefd50397c4e":"60000000000000000000","379a7f755a81a17edb7daaa28afc665dfa6be63a":"25000000000000000000","260a230e4465077e0b14ee4442a482d5b0c914bf":"1677935000000000000000","3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a":"1667400000000000000000","7f3a1e45f67e92c880e573b43379d71ee089db54":"100000000000000000000000","38643babea6011316cc797d9b093c897a17bdae7":"334400000000000000000","84675e9177726d45eaa46b3992a340ba7f710c95":"1000000000000000000000","0f83461ba224bb1e8fdd9dae535172b735acb4e0":"200000000000000000000","31aa3b1ebe8c4dbcb6a708b1d74831e60e497660":"400000000000000000000",a32cf7dde20c3dd5679ff5e325845c70c5962662:"20000000000000000000",c007f0bdb6e7009202b7af3ea90902697c721413:"2999966000000000000000","05c64004a9a826e94e5e4ee267fa2a7632dd4e6f":"16191931000000000000000",f622e584a6623eaaf99f2be49e5380c5cbcf5cd8:"200000000000000000000","9dc10fa38f9fb06810e11f60173ec3d2fd6a751e":"1970000000000000000000","423c3107f4bace414e499c64390a51f74615ca5e":"2000000000000000000000","92438e5203b6346ff886d7c36288aacccc78ceca":"1000000000000000000000",bef07d97c3481f9d6aee1c98f9d91a180a32442b:"100000000000000000000000","55aa5d313ebb084da0e7801091e29e92c5dec3aa":"2000000000000000000000","89c433d601fad714da6369308fd26c1dc9942bbf":"2000000000000000000000","25106ab6755df86d6b63a187703b0cfea0e594a0":"27400000000000000000","494256e99b0f9cd6e5ebca3899863252900165c8":"14000000000000000000000","5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5":"5000196000000000000000","135cecd955e5798370769230159303d9b1839f66":"5000000000000000000000",ced81ec3533ff1bfebf3e3843ee740ad11758d3e:"1970000000000000000000","688eb3853bbcc50ecfee0fa87f0ab693cabdef02":"31600000000000000000000","2159240813a73095a7ebf7c3b3743e8028ae5f09":"2000000000000000000000","99d1579cd42682b7644e1d4f7128441eeffe339d":"20000000000000000000000","8a243a0a9fea49b839547745ff2d11af3f4b0522":"985000000000000000000",c1a41a5a27199226e4c7eb198b031b59196f9842:"191000000000000000000","7514adbdc63f483f304d8e94b67ff3309f180b82":"622911000000000000000","74aeec915de01cc69b2cb5a6356feea14658c6c5":"232500000000000000000","76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20":"40200000000000000000000",a8a7b68adab4e3eadff19ffa58e34a3fcec0d96a:"6000000000000000000000","60de22a1507432a47b01cc68c52a0bf8a2e0d098":"19100000000000000000",ceb33d78e7547a9da2e87d51aec5f3441c87923a:"20000000000000000000","432809a2390f07c665921ff37d547d12f1c9966a":"30000000000000000000000",d5e656a1b916f9bf45afb07dd8afaf73b4c56f41:"97000000000000000000",e3410bb7557cf91d79fa69d0dfea0aa075402651:"2000000000000000000000",dee942d5caf5fac11421d86b010b458e5c392990:"4000000000000000000000",a98f109835f5eacd0543647c34a6b269e3802fac:"400000000000000000000","932b9c04d40d2ac83083d94298169dae81ab2ed0":"2000000000000000000000",ba10f2764290f875434372f79dbf713801caac01:"955000000000000000000",a2c7eaffdc2c9d937345206c909a52dfb14c478f:"143000000000000000000","6c67e0d7b62e2a08506945a5dfe38263339f1f22":"1970000000000000000000","60c3714fdddb634659e4a2b1ea42c4728cc7b8ba":"13370000000000000000","73b4d499de3f38bf35aaf769a6e318bc6d123692":"2000000000000000000000","3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984":"100000000000000000000","1e3badb1b6e1380e27039c576ae6222e963a5b53":"20000000000000000000000",abd4d6c1666358c0406fdf3af248f78ece830104:"2112000000000000000000","0c925ad5eb352c8ef76d0c222d115b0791b962a1":"3180000000000000000000",be9186c34a52514abb9107860f674f97b821bd5b:"509600000000000000000",b7f67314cb832e32e63b15a40ce0d7ffbdb26985:"1060866000000000000000","3f30d3bc9f602232bc724288ca46cd0b0788f715":"4000000000000000000000","970abd53a54fca4a6429207c182d4d57bb39d4a0":"2000000000000000000000","36d85dc3683156e63bf880a9fab7788cf8143a27":"20000000000000000000000","2836123046b284e5ef102bfd22b1765e508116ad":"411880000000000000000",de06d5ea777a4eb1475e605dbcbf43444e8037ea:"50000000000000000000000","9af11399511c213181bfda3a8b264c05fc81b3ce":"14000000000000000000000",e2191215983f33fd33e22cd4a2490054da53fddc:"15800000000000000000","2eebf59432b52892f9380bd140aa99dcf8ad0c0f":"152000000000000000000",dc087f9390fb9e976ac23ab689544a0942ec2021:"1820000000000000000000",fd4b989558ae11be0c3b36e2d6f2a54a9343ca2e:"2000000000000000000000","770c2fb2c4a81753ac0182ea460ec09c90a516f8":"20000000000000000000",b28dbfc6499894f73a71faa00abe0f4bc9d19f2a:"100000000000000000000",b0cef8e8fb8984a6019f01c679f272bbe68f5c77:"152000000000000000000",f400f93d5f5c7e3fc303129ac8fb0c2f786407fa:"2000000000000000000000",f2133431d1d9a37ba2f0762bc40c5acc8aa6978e:"2000000000000000000000","9003d270891ba2df643da8341583193545e3e000":"4000000000000000000000","8938d1b4daee55a54d738cf17e4477f6794e46f7":"18200000000000000000","98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e":"1000000000000000000000","009fdbf44e1f4a6362b769c39a475f95a96c2bc7":"564000000000000000000",d0f9597811b0b992bb7d3757aa25b4c2561d32e2:"500000000000000000000",dcd10c55bb854f754434f1219c2c9a98ace79f03:"4000086000000000000000","67048f3a12a4dd1f626c64264cb1d7971de2ca38":"180000000000000000000",d33cf82bf14c592640a08608914c237079d5be34:"2000000000000000000000",f5b068989df29c253577d0405ade6e0e7528f89e:"1610000000000000000000",a9a8eca11a23d64689a2aa3e417dbb3d336bb59a:"262025000000000000000","99413704b1a32e70f3bc0d69dd881c38566b54cb":"27382708000000000000000","2a085e25b64862f5e68d768e2b0f7a8529858eee":"1983618000000000000000","833d3fae542ad5f8b50ce19bde2bec579180c88c":"346000000000000000000",c3483d6e88ac1f4ae73cc4408d6c03abe0e49dca:"17000000000000000000000",fde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7:"2000000000000000000000",eddacd94ec89a2ef968fcf977a08f1fae2757869:"8000000000000000000000",dc29119745d2337320da51e19100c948d980b915:"160000000000000000000","640bf87415e0cf407301e5599a68366da09bbac8":"493207000000000000000",afcc7dbb8356d842d43ae7e23c8422b022a30803:"30400000000000000000000","9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78":"2000000000000000000000","9092918707c621fdbd1d90fb80eb787fd26f7350":"2460000000000000000000","263e57dacbe0149f82fe65a2664898866ff5b463":"38000000000000000000000","315db7439fa1d5b423afa7dd7198c1cf74c918bc":"600000000000000000000","09b4668696f86a080f8bebb91db8e6f87015915a":"656010000000000000000","5c31996dcac015f9be985b611f468730ef244d90":"200000000000000000000",b1179589e19db9d41557bbec1cb24ccc2dec1c7f:"100000000000000000000000","3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e":"2000000000000000000000",c9127b7f6629ee13fc3f60bc2f4467a20745a762:"16465639000000000000000","7306de0e288b56cfdf987ef0d3cc29660793f6dd":"508060000000000000000","2aa192777ca5b978b6b2c2ff800ac1860f753f47":"335000000000000000000","55da9dcdca61cbfe1f133c7bcefc867b9c8122f9":"880000000000000000000",cdd9efac4d6d60bd71d95585dce5d59705c13564:"100000000000000000000",ad8e48a377695de014363a523a28b1a40c78f208:"1000000000000000000000","252b6555afdc80f2d96d972d17db84ea5ad521ac":"7880000000000000000000","60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6":"26740000000000000000",f40b134fea22c6b29c8457f49f000f9cda789adb:"600000000000000000000","85a2f6ea94d05e8c1d9ae2f4910338a358e98ded":"2000000000000000000000",ae13a08511110f32e53be4127845c843a1a57c7b:"500000000000000000000","40db1ba585ce34531edec5494849391381e6ccd3":"1790000000000000000000","0c5589a7a89b9ad15b02751930415948a875fbef":"126000000000000000000","89054430dcdc28ac15fa635ef87c105e602bf70c":"108000000000000000000","6c882c27732cef5c7c13a686f0a2ea77555ac289":"100000000000000000000000",de374299c1d07d79537385190f442ef9ca24061f:"133700000000000000000",b146a0b925553cf06fcaf54a1b4dfea621290757:"2000200000000000000000","09ae49e37f121df5dc158cfde806f173a06b0c7f":"3988000000000000000000",b758896f1baa864f17ebed16d953886fee68aae6:"1000000000000000000000","30730466b8eb6dc90d5496aa76a3472d7dbe0bbe":"1999800000000000000000",fc02734033e57f70517e0afc7ee62461f06fad8e:"394000000000000000000",a9b2d2e0494eab18e07d37bbb856d80e80f84cd3:"10000000000000000000000","95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda":"2408672000000000000000",dab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927:"50000000000000000000000","94439ca9cc169a79d4a09cae5e67764a6f871a21":"240000000000000000000",e06c29a81517e0d487b67fb0b6aabc4f57368388:"401100000000000000000","458e3cc99e947844a18e6a42918fef7e7f5f5eb3":"36400000000000000000000","0a9804137803ba6868d93a55f9985fcd540451e4":"13370000000000000000","40630024bd2c58d248edd8465617b2bf1647da0e":"1000000000000000000000","15224ad1c0face46f9f556e4774a3025ad06bd52":"13370000000000000000","2e2810dee44ae4dff3d86342ab126657d653c336":"200000000000000000000","48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d":"44000000000000000000","46a30b8a808931217445c3f5a93e882c0345b426":"250019000000000000000","455396a4bbd9bae8af9fb7c4d64d471db9c24505":"161000000000000000000",edfda2d5db98f9380714664d54b4ee971a1cae03:"40044000000000000000",f5eadcd2d1b8657a121f33c458a8b13e76b65526:"249828000000000000000","90e7070f4d033fe6910c9efe5a278e1fc6234def":"100392000000000000000",d55508adbbbe9be81b80f97a6ea89add68da674f:"2000000000000000000000","66925de3e43f4b41bf9dadde27d5488ef569ea0d":"39400000000000000000",b7c077946674ba9341fb4c747a5d50f5d2da6415:"1000000000000000000000",c52d1a0c73c2a1be84915185f8b34faa0adf1de3:"1400001000000000000000","79b8aad879dd30567e8778d2d231c8f37ab8734e":"2000000000000000000000","3aae4872fd9093cbcad1406f1e8078bab50359e2":"39400000000000000000",b2e9d76bf50fc36bf7d3944b63e9ca889b699968:"2660000000000000000000","405f596b94b947344c033ce2dcbff12e25b79784":"2000000000000000000000","232cb1cd49993c144a3f88b3611e233569a86bd6":"15576000000000000000000","9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10":"20000000000000000000","095270cc42141dd998ad2862dbd1fe9b44e7e650":"1200000000000000000000","15d99468507aa0413fb60dca2adc7f569cb36b54":"2000000000000000000000","04852732b4c652f6c2e58eb36587e60a62da14db":"20000000000000000000000",ecf24cdd7c22928c441e694de4aa31b0fab59778:"600000000000000000000","512b91bbfaa9e581ef683fc90d9db22a8f49f48b":"310000000000000000000000",a88577a073fbaf33c4cd202e00ea70ef711b4006:"2000000000000000000000","00acc6f082a442828764d11f58d6894ae408f073":"60000000000000000000000","0355bcacbd21441e95adeedc30c17218c8a408ce":"400000000000000000000","4e73cf2379f124860f73d6d91bf59acc5cfc845b":"40110000000000000000","2a742b8910941e0932830a1d9692cfd28494cf40":"499986000000000000000","41a8c2830081b102df6e0131657c07ab635b54ce":"1999944000000000000000",b63064bd3355e6e07e2d377024125a33776c4afa:"38800000000000000000000","1a25e1c5bc7e5f50ec16f8885f210ea1b938800e":"4000000000000000000000","09b59b8698a7fbd3d2f8c73a008988de3e406b2b":"40000000000000000000000",c555b93156f09101233c6f7cf6eb3c4f196d3346:"3000000000000000000000","12f32c0a1f2daab676fe69abd9e018352d4ccd45":"50000000000000000000","5956b28ec7890b76fc061a1feb52d82ae81fb635":"2000000000000000000000",c739259e7f85f2659bef5f609ed86b3d596c201e:"200000000000000000000",fae92c1370e9e1859a5df83b56d0f586aa3b404c:"106480000000000000000",d5a7bec332adde18b3104b5792546aa59b879b52:"2000000000000000000000","4f88dfd01091a45a9e2676021e64286cd36b8d34":"1000000000000000000000","102c477d69aadba9a0b0f62b7459e17fbb1c1561":"2000000000000000000000","34272d5e7574315dcae9abbd317bac90289d4765":"1820000000000000000000",fe615d975c0887e0c9113ec7298420a793af8b96:"8000000000000000000000","487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68":"66850000000000000000","7e5d9993104e4cb545e179a2a3f971f744f98482":"2000000000000000000000","5529830a61c1f13c197e550beddfd6bd195c9d02":"10000000000000000000000","2f282abbb6d4a3c3cd3b5ca812f7643e80305f06":"1850000000000000000000","7352586d021ad0cf77e0e928404a59f374ff4582":"3400000000000000000000","03f7b92008813ae0a676eb212814afab35221069":"2000000000000000000000","056686078fb6bcf9ba0a8a8dc63a906f5feac0ea":"499800000000000000000","8063379a7bf2cb923a84c5093e68dac7f75481c5":"322102000000000000000","200264a09f8c68e3e6629795280f56254f8640d0":"20000000000000000000","5a891155f50e42074374c739baadf7df2651153a":"4775000000000000000000","80022a1207e910911fc92849b069ab0cdad043d3":"13370000000000000000",e781ec732d401202bb9bd13860910dd6c29ac0b6:"1240000000000000000000","4c2f1afef7c5868c44832fc77cb03b55f89e6d6e":"20000000000000000000000","34ff582952ff24458f7b13d51f0b4f987022c1fe":"2804400000000000000000","73914b22fc2f131584247d82be4fecbf978ad4ba":"2000000000000000000000","562be95aba17c5371fe2ba828799b1f55d2177d6":"38200000000000000000000","648f5bd2a2ae8902db37847d1cb0db9390b06248":"7769965000000000000000","6a9758743b603eea3aa0524b42889723c4153948":"10100000000000000000000","5985c59a449dfc5da787d8244e746c6d70caa55f":"100000000000000000000","56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846":"1000000000000000000000",d47c242edffea091bc54d57df5d1fdb93101476c:"2914000000000000000000",d482e7f68e41f238fe517829de15477fe0f6dd1d:"500000000000000000000","05bf4fcfe772e45b826443852e6c351350ce72a2":"8000000000000000000000",f10462e58fcc07f39584a187639451167e859201:"169830000000000000000","1aa27699cada8dc3a76f7933aa66c71919040e88":"400000000000000000000","24046b91da9b61b629cb8b8ec0c351a07e0703e4":"2000000000000000000000","41033c1b6d05e1ca89b0948fc64453fbe87ab25e":"1337000000000000000000","369822f5578b40dd1f4471706b22cd971352da6b":"346000000000000000000","044e853144e3364495e7a69fa1d46abea3ac0964":"49225000000000000000",abf728cf9312f22128024e7046c251f5dc5901ed:"29550000000000000000000",d781f7fc09184611568570b4986e2c72872b7ed0:"20002000000000000000","6bb4a661a33a71d424d49bb5df28622ed4dffcf4":"630400000000000000000",fef3b3dead1a6926d49aa32b12c22af54d9ff985:"1000000000000000000000",fa410971ad229c3036f41acf852f2ac999281950:"3997400000000000000000",de176b5284bcee3a838ba24f67fc7cbf67d78ef6:"37600000000000000000","23120046f6832102a752a76656691c863e17e59c":"329800000000000000000",a2f472fe4f22b77db489219ea4023d11582a9329:"40000000000000000000000",f0d64cf9df09741133d170485fd24b005011d520:"498680000000000000000","8b505e2871f7deb7a63895208e8227dcaa1bff05":"61216600000000000000000","481e3a91bfdc2f1c8428a0119d03a41601417e1c":"1000000000000000000000",bc69a0d2a31c3dbf7a9122116901b2bdfe9802a0:"3000000000000000000000","20a81680e465f88790f0074f60b4f35f5d1e6aa5":"1279851000000000000000","194a6bb302b8aba7a5b579df93e0df1574967625":"500000000000000000000","264cc8086a8710f91b21720905912cd7964ae868":"26740000000000000000","24aca08d5be85ebb9f3132dfc1b620824edfedf9":"18200000000000000000","1851a063ccdb30549077f1d139e72de7971197d5":"2000000000000000000000",f64a4ac8d540a9289c68d960d5fb7cc45a77831c:"2000000000000000000000",c3db5657bb72f10d58f231fddf11980aff678693:"5910000000000000000000",b46ace865e2c50ea4698d216ab455dff5a11cd72:"1000000000000000000000","9faea13c733412dc4b490402bfef27a0397a9bc3":"310000000000000000000",b40594c4f3664ef849cca6227b8a25aa690925ee:"4000000000000000000000","672fa0a019088db3166f6119438d07a99f8ba224":"13370000000000000000000",c1ffad07db96138c4b2a530ec1c7de29b8a0592c:"17600000000000000000","87af25d3f6f8eea15313d5fe4557e810c524c083":"19700000000000000000000",d6a22e598dabd38ea6e958bd79d48ddd9604f4df:"1000000000000000000000",a2a435de44a01bd0ecb29e44e47644e46a0cdffb:"500171000000000000000","549b47649cfad993e4064d2636a4baa0623305cc":"601650000000000000000","1321b605026f4ffb296a3e0edcb390c9c85608b7":"2000000000000000000000",b4bf24cb83686bc469869fefb044b909716993e2:"2000000000000000000000","12d91a92d74fc861a729646db192a125b79f5374":"18200000000000000000","7f0662b410298c99f311d3a1454a1eedba2fea76":"200000000000000000000","83908aa7478a6d1c9b9b0281148f8f9f242b9fdc":"2000000000000000000000",c1438c99dd51ef1ca8386af0a317e9b041457888:"223500000000000000000","545bb070e781172eb1608af7fc2895d6cb87197e":"2244000000000000000000","161d26ef6759ba5b9f20fdcd66f16132c352415e":"2000000000000000000000",d7f370d4bed9d57c6f49c999de729ee569d3f4e4:"200000000000000000000","90e35aabb2deef408bb9b5acef714457dfde6272":"100076000000000000000","0fcfc4065008cfd323305f6286b57a4dd7eee23b":"20000000000000000000000",cd725d70be97e677e3c8e85c0b26ef31e9955045:"1337000000000000000000",dcf6b657266e91a4dae6033ddac15332dd8d2b34:"1760000000000000000000","31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3":"500000000000000000000",cdea386f9d0fd804d02818f237b7d9fa7646d35e:"3012139000000000000000",d45b3341e8f15c80329320c3977e3b90e7826a7e:"500000000000000000000","0b649da3b96a102cdc6db652a0c07d65b1e443e6":"2000000000000000000000","0a58fddd71898de773a74fdae45e7bd84ef43646":"20000000000000000000","0256149f5b5063bea14e15661ffb58f9b459a957":"704000000000000000000","4438e880cb2766b0c1ceaec9d2418fceb952a044":"133712000000000000000","9ed80eda7f55054db9fb5282451688f26bb374c1":"300000000000000000000","8dab948ae81da301d972e3f617a912e5a753712e":"400000000000000000000","5b5d8c8eed6c85ac215661de026676823faa0a0c":"20000000000000000000000","46722a36a01e841d03f780935e917d85d5a67abd":"14900000000000000000",d4b8bdf3df9a51b0b91d16abbea05bb4783c8661:"1000000000000000000000","98f6b8e6213dbc9a5581f4cce6655f95252bdb07":"319968000000000000000","3599493ce65772cf93e98af1195ec0955dc98002":"1500048000000000000000",ecab5aba5b828de1705381f38bc744b32ba1b437:"940000000000000000000","9a82826d3c29481dcc2bd2950047e8b60486c338":"20000000000000000000000","6c474bc66a54780066aa4f512eefa773abf919c7":"94000000000000000000",d5903e9978ee20a38c3f498d63d57f31a39f6a06:"10380000000000000000000","341480cc8cb476f8d01ff30812e7c70e05afaf5d":"2000000000000000000000",af771039345a343001bc0f8a5923b126b60d509c:"985000000000000000000",b5a4679685fa14196c2e9230c8c4e33bffbc10e2:"1400000000000000000000","2a400dff8594de7228b4fd15c32322b75bb87da8":"95810000000000000000",a1336dfb96b6bcbe4b3edf3205be5723c90fad52:"5000000000000000000000",e9b1f1fca3fa47269f21b061c353b7f5e96d905a:"500000000000000000000","0ee414940487fd24e390378285c5d7b9334d8b65":"2680000000000000000000","6ab5b4c41cddb829690c2fda7f20c85e629dd5d5":"1860000000000000000000",dd63042f25ed32884ad26e3ad959eb94ea36bf67:"21340000000000000000000",c0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0:"5820000000000000000000",ed1a5c43c574d4e934299b24f1472cdc9fd6f010:"200000000000000000000",b2d9ab9664bcf6df203c346fc692fd9cbab9205e:"438000000000000000000",ede8c2cb876fbe8a4cca8290361a7ea01a69fdf8:"7813091000000000000000","6a7c252042e7468a3ff773d6450bba85efa26391":"500000000000000000000",a106e6923edd53ca8ed650968a9108d6ccfd9670:"9499935000000000000000","031e25db516b0f099faebfd94f890cf96660836b":"2000000000000000000000","7fdbc3a844e40d96b2f3a635322e6065f4ca0e84":"2000000000000000000000",df47a61b72535193c561cccc75c3f3ce0804a20e:"398000000000000000000",ed31305c319f9273d3936d8f5b2f71e9b1b22963:"100000000000000000000",a6b2d573297360102c07a18fc21df2e7499ff4eb:"4011000000000000000000",f68464bf64f2411356e4d3250efefe5c50a5f65b:"20000000000000000000","927cc2bfda0e088d02eff70b38b08aa53cc30941":"1852700000000000000000","41cb9896445f70a10a14215296daf614e32cf4d5":"1910000000000000000000","3ad70243d88bf0400f57c8c1fd57811848af162a":"860000000000000000000","63b9754d75d12d384039ec69063c0be210d5e0e3":"2694055000000000000000",ad1799aad7602b4540cd832f9db5f11150f1687a:"2000000000000000000000",a8b65ba3171a3f77a6350b9daf1f8d55b4d201eb:"745000000000000000000",ad0a4ae478e9636e88c604f242cf5439c6d45639:"3520000000000000000000","4cd0b0a6436362595ceade052ebc9b929fb6c6c0":"2000000000000000000000",c1d4af38e9ba799040894849b8a8219375f1ac78:"20000000000000000000000","49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a":"199358000000000000000",ae842210f44d14c4a4db91fc9d3b3b50014f7bf7:"4000000000000000000000","10a1c42dc1ba746986b985a522a73c93eae64c63":"1000000000000000000000","5103bc09933e9921fd53dc536f11f05d0d47107d":"4000000000000000000000",c88eec54d305c928cc2848c2fee23531acb96d49:"1999946000000000000000","9a2ce43b5d89d6936b8e8c354791b8afff962425":"2000000000000000000000","562020e3ed792d2f1835fe5f55417d5111460c6a":"20000000000000000000000",ed16ce39feef3bd7f5d162045e0f67c0f00046bb:"20000000000000000000",ab948a4ae3795cbca13126e19253bdc21d3a8514:"200000000000000000000",c12b7f40df9a2f7bf983661422ab84c9c1f50858:"8000000000000000000000","62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89":"250000000000000000000","423bca47abc00c7057e3ad34fca63e375fbd8b4a":"18000000000000000000000","5ff326cd60fd136b245e29e9087a6ad3a6527f0d":"1880000000000000000000","79ffb4ac13812a0b78c4a37b8275223e176bfda5":"17300000000000000000",f757fc8720d3c4fa5277075e60bd5c411aebd977:"2000000000000000000000","0bdbc54cc8bdbbb402a08911e2232a5460ce866b":"3000000000000000000000","9ee9760cc273d4706aa08375c3e46fa230aff3d5":"8950000000000000000000",d23a24d7f9468343c143a41d73b88f7cbe63be5e:"200000000000000000000","46d80631284203f6288ecd4e5758bb9d41d05dbe":"2000000000000000000000","3f4cd1399f8a34eddb9a17a471fc922b5870aafc":"200000000000000000000","44c54eaa8ac940f9e80f1e74e82fc14f1676856a":"7880000000000000000000",aec27ff5d7f9ddda91183f46f9d52543b6cd2b2f:"450000000000000000000","203c6283f20df7bc86542fdfb4e763ecdbbbeef5":"25000000000000000000000",bcaf347918efb2d63dde03e39275bbe97d26df50:"100000000000000000000","974d0541ab4a47ec7f75369c0069b64a1b817710":"400000000000000000000","5da54785c9bd30575c89deb59d2041d20a39e17b":"1967031000000000000000","1fb463a0389983df7d593f7bdd6d78497fed8879":"20000000000000000000","6e1ea4b183e252c9bb7767a006d4b43696cb8ae9":"294245000000000000000",c2aa74847e86edfdd3f3db22f8a2152feee5b7f7:"2048852000000000000000",a13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c:"1999944000000000000000","5135fb8757600cf474546252f74dc0746d06262c":"2000000000000000000000","43e7ec846358d7d0f937ad1c350ba069d7bf72bf":"118800000000000000000",f2ed3e77254acb83231dc0860e1a11242ba627db:"1980000000000000000000",c0a02ab94ebe56d045b41b629b98462e3a024a93:"100000000000000000000",f21549bdd1487912f900a7523db5f7626121bba3:"10000000000000000000000","886d0a9e17c9c095af2ea2358b89ec705212ee94":"28000000000000000000","211b29cefc79ae976744fdebcebd3cbb32c51303":"14000000000000000000000",b8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e:"5550000000000000000000",ec30addd895b82ee319e54fb04cb2bb03971f36b:"2000000000000000000000",b71b62f4b448c02b1201cb5e394ae627b0a560ee:"500000000000000000000",e1334e998379dfe983177062791b90f80ee22d8d:"500000000000000000000","1d633097a85225a1ff4321b12988fdd55c2b3844":"4000000000000000000000","8bd8d4c4e943f6c8073921dc17e3e8d7a0761627":"2933330000000000000000",a5d96e697d46358d119af7819dc7087f6ae47fef:"14605131000000000000000",d0809498c548047a1e2a2aa6a29cd61a0ee268bd:"2000000000000000000000","3cd6b7593cbee77830a8b19d0801958fcd4bc57a":"500000000000000000000",ead4d2eefb76abae5533961edd11400406b298fc:"3880000000000000000000","6331028cbb5a21485bc51b565142993bdb2582a9":"534800000000000000000","163bad4a122b457d64e8150a413eae4d07023e6b":"18800000000000000000",c522e20fbf04ed7f6b05a37b4718d6fce0142e1a:"4000000000000000000000","2d9bad6f1ee02a70f1f13def5cccb27a9a274031":"1790000000000000000000","5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5":"220000000000000000000",ec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c:"4250000000000000000000","3896ad743579d38e2302454d1fb6e2ab69e01bfd":"1880000000000000000000",e73ccf436725c151e255ccf5210cfce5a43f13e3:"19982000000000000000","9483d98f14a33fdc118d403955c29935edfc5f70":"459600000000000000000","1cfcf7517f0c08459720942b647ad192aa9c8828":"800000000000000000000","8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8":"100000000000000000000","06f68de3d739db41121eacf779aada3de8762107":"28000000000000000000","9909650dd5b1397b8b8b0eb69499b291b0ad1213":"200000000000000000000",b66675142e3111a1c2ea1eb2419cfa42aaf7a234:"1000000000000000000000","7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f":"4142296000000000000000","3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef":"16100000000000000000000",c47d610b399250f70ecf1389bab6292c91264f23:"288800000000000000000","51a6d627f66a8923d88d6094c4715380d3057cb6":"1152044000000000000000","6c0cc917cbee7d7c099763f14e64df7d34e2bf09":"250000000000000000000",aaaae68b321402c8ebc13468f341c63c0cf03fce:"1520000000000000000000","819cdaa5303678ef7cec59d48c82163acc60b952":"14523448000000000000000",d071192966eb69c3520fca3aa4dd04297ea04b4e:"110000000000000000000",e53425d8df1f11c341ff58ae5f1438abf1ca53cf:"322000000000000000000","8ffe322997b8e404422d19c54aadb18f5bc8e9b7":"3940000000000000000000","305f78d618b990b4295bac8a2dfa262884f804ea":"4000000000000000000000","274d69170fe7141401882b886ac4618c6ae40edb":"955000000000000000000","69c94e07c4a9be3384d95dfa3cb9290051873b7b":"70000000000000000000","859c600cf13d1d0273d5d1da3cd789e495899f27":"2674000000000000000000",c06cebbbf7f5149a66f7eb976b3e47d56516da2f:"2000000000000000000000","37bbc47212d82fcb5ee08f5225ecc2041ad2da7d":"3280000000000000000000","11e7997edd904503d77da6038ab0a4c834bbd563":"388000000000000000000",d333627445f2d787901ef33bb2a8a3675e27ffec:"400000000000000000000","16a58e985dccd707a594d193e7cca78b5d027849":"1360000000000000000000",f8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7:"4000000000000000000000","491561db8b6fafb9007e62d050c282e92c4b6bc8":"30000000000000000000000","21df1ec24b4e4bfe79b0c095cebae198f291fbd1":"20000000000000000000000",e208812a684098f3da4efe6aba256256adfe3fe6:"2000000000000000000000",f4ec8e97a20aa5f8dd206f55207e06b813df2cc0:"200000000000000000000","29eb7eefdae9feb449c63ff5f279d67510eb1422":"19400000000000000000","0d678706d037187f3e22e6f69b99a592d11ebc59":"1580000000000000000000",de6d363106cc6238d2f092f0f0372136d1cd50c6:"5348000000000000000000",c8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8:"4000000000000000000000","5267f4d41292f370863c90d793296903843625c7":"1400000000000000000000","4cda41dd533991290794e22ae324143e309b3d3d":"2400000000000000000000",f8a50cee2e688ceee3aca4d4a29725d4072cc483:"2000000000000000000000","5ed3bbc05240e0d399eb6ddfe60f62de4d9509af":"193999806000000000000000","0befb54707f61b2c9fb04715ab026e1bb72042bd":"4000000000000000000000",cab9a301e6bd46e940355028eccd40ce4d5a1ac3:"400000000000000000000","64672da3ab052821a0243d1ce4b6e0a36517b8eb":"200000000000000000000",eac0827eff0c6e3ff28a7d4a54f65cb7689d7b99:"2856500000000000000000",f4b6cdcfcb24230b337d770df6034dfbd4e1503f:"19000000000000000000000","7be2f7680c802da6154c92c0194ae732517a7169":"18200000000000000000","869f1aa30e4455beb1822091de5cadec79a8f946":"8000000000000000000000",c4681e73bb0e32f6b726204831ff69baa4877e32:"1820000000000000000000","962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971":"2000000000000000000000","131df8d330eb7cc7147d0a55576f05de8d26a8b7":"188000000000000000000","19f99f2c0b46ce8906875dc9f90ae104dae35594":"4507300000000000000000","91bb3f79022bf3c453f4ff256e269b15cf2c9cbd":"1519000000000000000000","7301dc4cf26d7186f2a11bf8b08bf229463f64a3":"2000000000000000000000","7cbca88fca6a0060b960985c9aa1b02534dc2208":"462500000000000000000",f3c1abd29dc57b41dc192d0e384d021df0b4f6d4:"2798000000000000000000","5d32f6f86e787ff78e63d78b0ef95fe6071852b8":"401100000000000000000","1678c5f2a522393225196361894f53cc752fe2f3":"1936000000000000000000","1cf04cb14380059efd3f238b65d5beb86afa14d8":"20000000000000000000","52e1731350f983cc2c4189842fde0613fad50ce1":"11640000000000000000000",d0b11d6f2bce945e0c6a5020c3b52753f803f9d1:"200000000000000000000","409bd75085821c1de70cdc3b11ffc3d923c74010":"4000000000000000000000","0bb7160aba293762f8734f3e0326ffc9a4cac190":"1000000000000000000000","7aad4dbcd3acf997df93586956f72b64d8ad94ee":"4000000000000000000000","2dec98329d1f96c3a59caa7981755452d4da49d5":"200000000000000000000",c18ab467feb5a0aadfff91230ff056464d78d800:"2000000000000000000000",c90c3765156bca8e4897ab802419153cbe5225a9:"200000000000000000000","85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355":"400000000000000000000",f4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a:"25380000000000000000",f50abbd4aa45d3eb88515465a8ba0b310fd9b521:"6685000000000000000000","4d200110124008d56f76981256420c946a6ff45c":"199955000000000000000",f4ba6a46d55140c439cbcf076cc657136262f4f8:"2000000000000000000000",fa7adf660b8d99ce15933d7c5f072f3cbeb99d33:"5910000000000000000000","84503334630d77f74147f68b2e086613c8f1ade9":"1600000000000000000000","31ed858788bda4d5270992221cc04206ec62610d":"1176000000000000000000",bfbca418d3529cb393081062032a6e1183c6b2dc:"8000000000000000000000","8263ece5d709e0d7ae71cca868ed37cd2fef807b":"990000000000000000000","23ba3864da583dab56f420873c37679690e02f00":"9800000000000000000000",cedcb3a1d6843fb6bef643617deaf38f8e98dd5f:"477500000000000000000","8fac748f784a0fed68dba43319b42a75b4649c6e":"910000000000000000000","18b8bcf98321da61fb4e3eacc1ec5417272dc27e":"880000000000000000000","776943ffb2ef5cdd35b83c28bc046bd4f4677098":"3000000000000000000000",fb8113f94d9173eefd5a3073f516803a10b286ae:"80000000000000000000","3e8349b67f5745449f659367d9ad4712db5b895a":"1820000000000000000000","79cfa9780ae6d87b2c31883f09276986c89a6735":"1000000000000000000000","5006fe4c22173980f00c74342b39cd231c653129":"2000000000000000000000","13848b46ea75beb7eaa85f59d866d77fd24cf21a":"50000000000000000000000",d64a2d50f8858537188a24e0f50df1681ab07ed7:"38800000000000000000000","4f9ce2af9b8c5e42c6808a3870ec576f313545d1":"10000000000000000000000","8764d02722000996ecd475b433298e9f540b05bf":"200000000000000000000","3b7c77dbe95dc2602ce3269a9545d04965fefdbd":"2000000000000000000000",c9dcbb056f4db7d9da39936202c5bd8230b3b477:"20000000000000000000000","9ecbabb0b22782b3754429e1757aaba04b81189f":"823743000000000000000","831c44b3084047184b2ad218680640903750c45d":"1970000000000000000000",ff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834:"3986000000000000000000","8ccf3aa21ab742576ad8c422f71bb188591dea8a":"1000000000000000000000",ddac312a9655426a9c0c9efa3fd82559ef4505bf:"401100000000000000000","9a3e2b1bf346dd070b027357feac44a4b2c97db8":"10000000000000000000000","69d39d510889e552a396135bfcdb06e37e387633":"4000000000000000000000","83a3148833d9644984f7c475a7850716efb480ff":"3400000000000000000000","62b4a9226e61683c72c183254690daf511b4117a":"260000000000000000000","50763add868fd7361178342fc055eaa2b95f6846":"66838000000000000000","91898eab8c05c0222883cd4db23b7795e1a24ad7":"2000000000000000000000","066647cfc85d23d37605573d208ca154b244d76c":"10000000000000000000000",aaf9ee4b886c6d1e95496fd274235bf4ecfcb07d:"1400000000000000000000","06860a93525955ff624940fadcffb8e149fd599c":"1999800000000000000000",e81c2d346c0adf4cc56708f6394ba6c8c8a64a1e:"2000000000000000000000","41a8e236a30e6d63c1ff644d132aa25c89537e01":"20000000000000000000","6a679e378fdce6bfd97fe62f043c6f6405d79e99":"4000000000000000000000","933436c8472655f64c3afaaf7c4c621c83a62b38":"1000000000000000000000",abe07ced6ac5ddf991eff6c3da226a741bd243fe:"10000000000000000000000",bb56a404723cff20d0685488b05a02cdc35aacaa:"20000000000000000000","0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af":"2000000000000000000000","23376ecabf746ce53321cf42c86649b92b67b2ff":"2000000000000000000000","644ba6c61082e989109f5c11d4b40e991660d403":"4000000000000000000000","680d5911ed8dd9eec45c060c223f89a7f620bbd5":"20000000000000000000000",cb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d:"1038000000000000000000","303a30ac4286ae17cf483dad7b870c6bd64d7b4a":"500000000000000000000","7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4":"800000000000000000000","854691ce714f325ced55ce5928ce9ba12facd1b8":"4380000000000000000000",a13cfe826d6d1841dcae443be8c387518136b5e8:"140000000000000000000000","5fcd84546896dd081db1a320bd4d8c1dd1528c4c":"20000000000000000000","3db5fe6a68bd3612ac15a99a61e555928eeceaf3":"1580000000000000000000","7a79e30ff057f70a3d0191f7f53f761537af7dff":"400000000000000000000","3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692":"20000000000000000000","05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39":"98500000000000000000",e4b6ae22c7735f5b89f34dd77ad0975f0acc9181:"1000000000000000000000","3f2dd55db7eab0ebee65b33ed8202c1e992e958b":"820000000000000000000","395d6d255520a8db29abc47d83a5db8a1a7df087":"100000000000000000000","1cc90876004109cd79a3dea866cb840ac364ba1b":"2000000000000000000000",c83e9d6a58253beebeb793e6f28b054a58491b74:"281800000000000000000","901d99b699e5c6911519cb2076b4c76330c54d22":"2000000000000000000000","3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c":"2000000000000000000000",b41eaf5d51a5ba1ba39bb418dbb54fab750efb1f:"1000000000000000000000",aa493d3f4fb866491cf8f800efb7e2324ed7cfe5:"1700000000000000000000","509982f56237ee458951047e0a2230f804e2e895":"17500000000000000000000","316e92a91bbda68b9e2f98b3c048934e3cc0b416":"2000000000000000000000",a3430e1f647f321ed34739562323c7d623410b56:"999942000000000000000",fca43bbc23a0d321ba9e46b929735ce7d8ef0c18:"20000000000000000000",ff45cb34c928364d9cc9d8bb00373474618f06f3:"100000000000000000000","8c999591fd72ef7111efca7a9e97a2356b3b000a":"4084000000000000000000","8579dadf1a395a3471e20b6f763d9a0ff19a3f6f":"4000000000000000000000",c8d4e1599d03b79809e0130a8dc38408f05e8cd3:"2945500000000000000000","2abce1808940cd4ef5b5e05285f82df7a9ab5e03":"9800000000000000000000","0bb0c12682a2f15c9b5741b2385cbe41f034068e":"1500000000000000000000","08b7bdcf944d5570838be70460243a8694485858":"2000000000000000000000",c452e0e4b3d6ae06b836f032ca09db409ddfe0fb:"800000000000000000000","48d4f2468f963fd79a006198bb67895d2d5aa4d3":"1400000000000000000000",f9e7222faaf0f4da40c1c4a40630373a09bed7b6:"2865000000000000000000",bf59aee281fa43fe97194351a9857e01a3b897b2:"600000000000000000000",da0d4b7ef91fb55ad265f251142067f10376ced6:"20000000000000000000000","2c6f5c124cc789f8bb398e3f889751bc4b602d9e":"24928000000000000000",c85ef27d820403805fc9ed259fff64acb8d6346a:"2000000000000000000000","9aa8308f42910e5ade09c1a5e282d6d91710bdbf":"200000000000000000000","9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6":"9999917000000000000000","137cf341e8516c815814ebcd73e6569af14cf7bc":"1000000000000000000000","889da662eb4a0a2a069d2bc24b05b4ee2e92c41b":"1663417000000000000000","0998d8273115b56af43c505e087aff0676ed3659":"3999984000000000000000","3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f":"1000000000000000000000",abc068b4979b0ea64a62d3b7aa897d73810dc533:"1970000000000000000000",d8fdf546674738c984d8fab857880b3e4280c09e:"20000000000000000000",aff161740a6d909fe99c59a9b77945c91cc91448:"60000000000000000000","92ad1b3d75fba67d54663da9fc848a8ade10fa67":"2000000000000000000000","819eb4990b5aba5547093da12b6b3c1093df6d46":"1000000000000000000000","643d9aeed4b180947ed2b9207cce4c3ddc55e1f7":"200000000000000000000",ab3e62e77a8b225e411592b1af300752fe412463:"9850000000000000000000","650b425555e4e4c51718146836a2c1ee77a5b421":"20000000000000000000000",ba8e46d69d2e2343d86c60d82cf42c2041a0c1c2:"100000000000000000000",f9570e924c95debb7061369792cf2efec2a82d5e:"20000000000000000000","4dc4bf5e7589c47b28378d7503cf96488061dbbd":"1760000000000000000000","3d7ea5bf03528100ed8af8aed2653e921b6e6725":"1000000000000000000000",a02bde6461686e19ac650c970d0672e76dcb4fc2:"8865000000000000000000",b0e760bb07c081777345e0578e8bc898226d4e3b:"2000000000000000000000","979cbf21dfec8ace3f1c196d82df962534df394f":"2832860000000000000000","9f8245c3ab7d173164861cd3991b94f1ba40a93a":"2860000000000000000000",c25cf826550c8eaf10af2234fef904ddb95213be:"1000000000000000000000","967bfaf76243cdb9403c67d2ceefdee90a3feb73":"970582000000000000000","0b2113504534642a1daf102eee10b9ebde76e261":"2733351000000000000000","74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2":"2000000000000000000000",f1da40736f99d5df3b068a5d745fafc6463fc9b1:"121546000000000000000","0fa6c7b0973d0bae2940540e247d3627e37ca347":"1000000000000000000000","72b05962fb2ad589d65ad16a22559eba1458f387":"133700000000000000000","6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7":"298000000000000000000","28eaea78cd4d95faecfb68836eafe83520f3bbb7":"200000000000000000000",f49f6f9baabc018c8f8e119e0115f491fc92a8a4:"10000000000000000000000","833316985d47742bfed410604a91953c05fb12b0":"2000000000000000000000",ead75016e3a0815072b6b108bcc1b799acf0383e:"2000000000000000000000","0032403587947b9f15622a68d104d54d33dbd1cd":"77500000000000000000","8f64b9c1246d857831643107d355b5c75fef5d4f":"1999944000000000000000","15dcafcc2bace7b55b54c01a1c514626bf61ebd8":"9400000000000000000000","6886ada7bbb0617bda842191c68c922ea3a8ac82":"1160000000000000000000",f736dc96760012388fe88b66c06efe57e0d7cf0a:"2100000000000000000000","0b288a5a8b75f3dc4191eb0457e1c83dbd204d25":"4853000000000000000000","56b6c23dd2ec90b4728f3bb2e764c3c50c85f144":"1000000000000000000000","6310b020fd98044957995092090f17f04e52cdfd":"1580000000000000000000",b0baeb30e313776c4c6d247402ba4167afcda1cc:"1970000000000000000000","7641f7d26a86cddb2be13081810e01c9c83c4b20":"13370000000000000000","07a8dadec142571a7d53a4297051786d072cba55":"22729000000000000000",cc73dd356b4979b579b401d4cc7a31a268ddce5a:"500000000000000000000",adf1acfe99bc8c14b304c8d905ba27657b8a7bc4:"20000000000000000000000","72dabb5b6eed9e99be915888f6568056381608f8":"208433000000000000000","9de20ae76aa08263b205d5142461961e2408d266":"252000000000000000000","9d4ff989b7bed9ab109d10c8c7e55f02d76734ad":"1000000000000000000000",e58dd23238ee6ea7c2138d385df500c325f376be:"1820000000000000000000","4bd6dd0cff23400e1730ba7b894504577d14e74a":"206028000000000000000000","35147430c3106500e79fa2f502462e94703c23b1":"1999944000000000000000",c0ae14d724832e2fce2778de7f7b8daf7b12a93e:"20000000000000000000",b57413060af3f14eb479065f1e9d19b3757ae8cc:"40000000000000000000","7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6":"314807840000000000000000","1c94d636e684eb155895ce6db4a2588fba1d001b":"2000000000000000000000",c721b2a7aa44c21298e85039d00e2e460e670b9c:"140800000000000000000","2d89a8006a4f137a20dc2bec46fe2eb312ea9654":"200000000000000000000","646afba71d849e80c0ed59cac519b278e7f7abe4":"1000000000000000000000","71f2cdd1b046e2da2fbb5a26723422b8325e25a3":"99960000000000000000","2c9fa72c95f37d08e9a36009e7a4b07f29bad41a":"16100000000000000000","848fbd29d67cf4a013cb02a4b176ef244e9ee68d":"20116000000000000000","68190ca885da4231874c1cfb42b1580a21737f38":"3820000000000000000000","9adf458bff3599eee1a26398853c575bc38c6313":"280000000000000000000",b72220ade364d0369f2d2da783ca474d7b9b34ce:"499986000000000000000","38e2af73393ea98a1d993a74df5cd754b98d529a":"1790000000000000000000","4d38d90f83f4515c03cc78326a154d358bd882b7":"185000000000000000000",aa8eb0823b07b0e6d20aadda0e95cf3835be192e:"32000000000000000000","008639dabbe3aeac887b5dc0e43e13bcd287d76c":"310200000000000000000",fa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650:"20000000000000000000",e26bf322774e18288769d67e3107deb7447707b8:"2000000000000000000000",e061a4f2fc77b296d19ada238e49a5cb8ecbfa70:"4000000000000000000000",b320834836d1dbfda9e7a3184d1ad1fd4320ccc0:"1000000000000000000000","0ed3bb3a4eb554cfca97947d575507cdfd6d21d8":"547863000000000000000","32fa0e86cd087dd68d693190f32d93310909ed53":"4000000000000000000000","5b759fa110a31c88469f54d44ba303d57dd3e10f":"1683760000000000000000","136f4907cab41e27084b9845069ff2fd0c9ade79":"4000000000000000000000","3d89e505cb46e211a53f32f167a877bec87f4b0a":"25019000000000000000","57a852fdb9b1405bf53ccf9508f83299d3206c52":"2000000000000000000000","747abc9649056d3926044d28c3ad09ed17b67d70":"5000057000000000000000","5c29f9e9a523c1f8669448b55c48cbd47c25e610":"964320000000000000000","30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d":"20200000000000000000","220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7":"800000000000000000000","5af7c072b2c5acd71c76addcce535cf7f8f93585":"20000000000000000000","81556db27349ab8b27004944ed50a46e941a0f5f":"3998000000000000000000","987618c85656207c7bac1507c0ffefa2fb64b092":"64419000000000000000",e0f372347c96b55f7d4306034beb83266fd90966:"400000000000000000000","71784c105117c1f68935797fe159abc74e43d16a":"2001600000000000000000","9284f96ddb47b5186ee558aa31324df5361c0f73":"16000000000000000000000",a60c1209754f5d87b181da4f0817a81859ef9fd8:"50000000000000000000","5afda9405c8e9736514574da928de67456010918":"6008500000000000000000","6978696d5150a9a263513f8f74c696f8b1397cab":"6640000000000000000000",a9ad1926bc66bdb331588ea8193788534d982c98:"30000000000000000000000",e3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8:"1337000000000000000000",e207578e1f4ddb8ff6d5867b39582d71b9812ac5:"3880000000000000000000","86883d54cd3915e549095530f9ab1805e8c5432d":"4000000000000000000000","6974c8a414ceaefd3c2e4dfdbef430568d9a960b":"334250000000000000000","532d32b00f305bcc24dcef56817d622f34fb2c24":"1800000000000000000000","761f8a3a2af0a8bdbe1da009321fb29764eb62a1":"10000000000000000000000","4677b04e0343a32131fd6abb39b1b6156bba3d5b":"200000000000000000000",ef69781f32ffce33346f2c9ae3f08493f3e82f89:"18200000000000000000",e3b3d2c9bf570be6a2f72adca1862c310936a43c:"100100000000000000000",d19caf39bb377fdf2cf19bd4fb52591c2631a63c:"1000000000000000000000","5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f":"2000000000000000000000","1c99fe9bb6c6d1066d912099547fd1f4809eacd9":"2000000000000000000000",bbfe0a830cace87b7293993a7e9496ce64f8e394:"6000000000000000000000","26c0054b700d3a7c2dcbe275689d4f4cad16a335":"2000000000000000000000","7d7e7c61779adb7706c94d32409a2bb4e994bf60":"865992000000000000000",d037d215d11d1df3d54fbd321cd295c5465e273b:"1400000000000000000000","08166f02313feae18bb044e7877c808b55b5bf58":"1970000000000000000000","781b1501647a2e06c0ed43ff197fccec35e1700b":"3000000000000000000000","74316adf25378c10f576d5b41a6f47fa98fce33d":"336082000000000000000","44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c":"410231000000000000000","178eaf6b8554c45dfde16b78ce0c157f2ee31351":"320000000000000000000",cf923a5d8fbc3d01aa079d1cfe4b43ce071b1611:"2000000000000000000000","0c28847e4f09dfce5f9b25af7c4e530f59c880fe":"1000000000000000000000","54ce88275956def5f9458e3b95decacd484021a0":"2000000000000000000000","9d4213339a01551861764c87a93ce8f85f87959a":"200000000000000000000",e559b5fd337b9c5572a9bf9e0f2521f7d446dbe4:"200000000000000000000",dcb03bfa6c1131234e56b7ea7c4f721487546b7a:"1337000000000000000000",db6ff71b3db0928f839e05a7323bfb57d29c87aa:"910000000000000000000",eb7c202b462b7cc5855d7484755f6e26ef43a115:"2000000000000000000000","323486ca64b375474fb2b759a9e7a135859bd9f6":"400000000000000000000","2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d":"10118000000000000000000","2cd87866568dd81ad47d9d3ad0846e5a65507373":"400000000000000000000","8566610901aace38b83244f3a9c831306a67b9dc":"3256000000000000000000","1c257ad4a55105ea3b58ed374b198da266c85f63":"10000000000000000000000",cf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d:"882038000000000000000",c934becaf71f225f8b4a4bf7b197f4ac9630345c:"20000000000000000000000","1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc":"2000000000000000000000","9d78a975b7db5e4d8e28845cfbe7e31401be0dd9":"1340000000000000000000","16aa52cb0b554723e7060f21f327b0a68315fea3":"250000000000000000000","97e28973b860c567402800fbb63ce39a048a3d79":"97000000000000000000","4ac5acad000b8877214cb1ae00eac9a37d59a0fd":"4000000000000000000000","01226e0ad8d62277b162621c62c928e96e0b9a8c":"2000000000000000000000","479abf2da4d58716fd973a0d13a75f530150260a":"20000000000000000000","31d81d526c195e3f10b5c6db52b5e59afbe0a995":"264000000000000000000","749087ac0f5a97c6fad021538bf1d6cda18e0daa":"1000000000000000000000","1565af837ef3b0bd4e2b23568d5023cd34b16498":"393284000000000000000","997d6592a31589acc31b9901fbeb3cc3d65b3215":"2000000000000000000000","9d207517422cc0d60de7c237097a4d4fce20940c":"500000000000000000000","24b8b446debd1947955dd084f2c544933346d3ad":"4324135000000000000000","107a03cf0842dbdeb0618fb587ca69189ec92ff5":"1970000000000000000000","7f603aec1759ea5f07c7f8d41a1428fbbaf9e762":"20000000000000000000","53a244672895480f4a2b1cdf7da5e5a242ec4dbc":"1000000000000000000000","7db4c7d5b797e9296e6382f203693db409449d62":"400000000000000000000","2ae82dab92a66389eea1abb901d1d57f5a7cca0b":"2000000000000000000000","16bc40215abbd9ae5d280b95b8010b4514ff1292":"200000000000000000000",bba4fac3c42039d828e742cde0efffe774941b39:"1999946000000000000000","5431ca427e6165a644bae326bd09750a178c650d":"2000000000000000000000",dcf33965531380163168fc11f67e89c6f1bc178a:"334885000000000000000","65fd02d704a12a4dace9471b0645f962a89671c8":"28615000000000000000","135d1719bf03e3f866312479fe338118cd387e70":"2000000000000000000000",f3159866c2bc86bba40f9d73bb99f1eee57bb9d7:"1000000000000000000000",e3a4621b66004588e31206f718cb00a319889cf0:"2000000000000000000000",abcdbc8f1dd13af578d4a4774a62182bedf9f9be:"36660000000000000000","9fbe066de57236dc830725d32a02aef9246c6c5e":"2000000000000000000000","81cfad760913d3c322fcc77b49c2ae3907e74f6e":"197000000000000000000","0ab59d390702c9c059db148eb4f3fcfa7d04c7e7":"18200000000000000000","2c2db28c3309375eea3c6d72cd6d0eec145afcc0":"2000000000000000000000","08306de51981e7aca1856859b7c778696a6b69f9":"3200000000000000000000",f814799f6ddf4dcb29c7ee870e75f9cc2d35326d:"1000000000000000000000",ee867d20916bd2e9c9ece08aa04385db667c912e:"50000000000000000000000","97a86f01ce3f7cfd4441330e1c9b19e1b10606ef":"2000000000000000000000","4c759813ad1386bed27ffae9e4815e3630cca312":"2000000000000000000000","8f226096c184ebb40105e08dac4d22e1c2d54d30":"306552000000000000000","13acada8980affc7504921be84eb4944c8fbb2bd":"1601600000000000000000","122dcfd81addb97d1a0e4925c4b549806e9f3beb":"1514954000000000000000","232f525d55859b7d4e608d20487faadb00293135":"4000000000000000000000","6f7ac681d45e418fce8b3a1db5bc3be6f06c9849":"2000000000000000000000","0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1":"2000000000000000000000","6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb":"1028200000000000000000","209377b6ad3fe101c9685b3576545c6b1684e73c":"1820000000000000000000","560fc08d079f047ed8d7df75551aa53501f57013":"7600000000000000000000","8e78f351457d016f4ad2755ec7424e5c21ba6d51":"146000000000000000000","2ce11a92fad024ff2b3e87e3b542e6c60dcbd996":"4000000000000000000000","8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46":"2000000000000000000000","673144f0ec142e770f4834fee0ee311832f3087b":"500038000000000000000",ba8a63f3f40de4a88388bc50212fea8e064fbb86:"2000000000000000000000",ee899b02cbcb3939cd61de1342d50482abb68532:"1760000000000000000000",c2d9eedbc9019263d9d16cc5ae072d1d3dd9db03:"20000000000000000000000","355c0c39f5d5700b41d375b3f17851dcd52401f9":"3979000000000000000000","8179c80970182cc5b7d82a4df06ea94db63a25f3":"727432000000000000000",b388b5dfecd2c5e4b596577c642556dbfe277855:"20000000000000000000",a9e28337e6357193d9e2cb236b01be44b81427df:"2200000000000000000000","04ba4bb87140022c214a6fac42db5a16dd954045":"1000000000000000000000","67c926093e9b8927933810d98222d62e2b8206bb":"1910000000000000000000",ed7346766e1a676d0d06ec821867a276a083bf31:"4012890000000000000000","92558226b384626cad48e09d966bf1395ee7ea5d":"334250000000000000000",bdf693f833c3fe471753184788eb4bfe4adc3f96:"1970000000000000000000","4474299d0ee090dc90789a1486489c3d0d645e6d":"1000000000000000000000",b1178ad47383c31c8134a1941cbcd474d06244e2:"1000000000000000000000","979d681c617da16f21bcaca101ed16ed015ab696":"1880000000000000000000","6b20c080606a79c73bd8e75b11717a4e8db3f1c3":"299720000000000000000",b85218f342f8012eda9f274e63ce2152b2dcfdab:"3100000000000000000000","530b61e42f39426d2408d40852b9e34ab5ebebc5":"267400000000000000000","76afc225f4fa307de484552bbe1d9d3f15074c4a":"2998800000000000000000","1e783e522ab7df0acaac9eeed3593039e5ac7579":"203435800000000000000000","0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9":"2000000000000000000000","7a8797690ab77b5470bf7c0c1bba612508e1ac7d":"8865000000000000000000","2a2ab6b74c7af1d9476bb5bcb4524797bedc3552":"1000000000000000000000","523e140dc811b186dee5d6c88bf68e90b8e096fd":"2000000000000000000000",ea8168fbf225e786459ca6bb18d963d26b505309:"500000000000000000000","20ff3ede8cadb5c37b48cb14580fb65e23090a7b":"42000000000000000000000",e482d255ede56b04c3e8df151f56e9ca62aaa8c2:"500000000000000000000","2e0880a34596230720f05ac8f065af8681dcb6c2":"100000000000000000000000",c674f28c8afd073f8b799691b2f0584df942e844:"2000000000000000000000",b646df98b49442746b61525c81a3b04ba3106250:"1970000000000000000000",d55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f:"2000000000000000000000","65ebaed27edb9dcc1957aee5f452ac2105a65c0e":"43531987000000000000000",f079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4:"20094000000000000000","867eba56748a5904350d2ca2a5ce9ca00b670a9b":"20000000000000000000000","51ee0cca3bcb10cd3e983722ced8493d926c0866":"999972000000000000000","88d541c840ce43cefbaf6d19af6b9859b573c145":"170000000000000000000",f851b010f633c40af1a8f06a73ebbaab65077ab5:"4400000000000000000000",e0aa69365555b73f282333d1e30c1bbd072854e8:"7000000000000000000000",c7b1c83e63203f9547263ef6282e7da33b6ed659:"18200000000000000000",af06f5fa6d1214ec43967d1bd4dde74ab814a938:"88000000000000000000","991173601947c2084a62d639527e961512579af9":"600000000000000000000","7a381122bada791a7ab1f6037dac80432753baad":"10000000000000000000000",e766f34ff16f3cfcc97321721f43ddf5a38b0cf4:"1550000000000000000000",d785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c:"1000000000000000000000",aebd4f205de799b64b3564b256d42a711d37ef99:"1177100000000000000000",a2fa17c0fb506ce494008b9557841c3f641b8cae:"20000000000000000000",a8aca748f9d312ec747f8b6578142694c7e9f399:"2000000000000000000000","950c68a40988154d2393fff8da7ccda99614f72c":"4597943000000000000000","075d15e2d33d8b4fa7dba8b9e607f04a261e340b":"1910000000000000000000","3616d448985f5d32aefa8b93a993e094bd854986":"205400000000000000000","4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe":"16000000000000000000000","84949dba559a63bfc845ded06e9f2d9b7f11ef24":"2000000000000000000000","937563d8a80fd5a537b0e66d20a02525d5d88660":"2500000000000000000000",b183ebee4fcb42c220e47774f59d6c54d5e32ab1:"1604266000000000000000","21e5d77320304c201c1e53b261a123d0a1063e81":"86972000000000000000",fa14b566234abee73042c31d21717182cba14aa1:"328000000000000000000","2da617695009cc57d26ad490b32a5dfbeb934e5e":"20000000000000000000000","3326b88de806184454c40b27f309d9dd6dcfb978":"17900000000000000000000","95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa":"1337000000000000000000","8db58e406e202df9bc703c480bd8ed248d52a032":"2000000000000000000000",f777361a3dd8ab62e5f1b9b047568cc0b555704c:"1000000000000000000000","83a93b5ba41bf88720e415790cdc0b67b4af34c4":"200000000000000000000","8a1cc5ac111c49bfcfd848f37dd768aa65c88802":"10000000000000000000000","52214378b54004056a7cc08c891327798ac6b248":"15200000000000000000000",ad80d865b85c34d2e6494b2e7aefea6b9af184db:"4000000000000000000000",e7d6240620f42c5edbb2ede6aec43da4ed9b5757:"1000000000000000000000",d0e35e047646e759f4517093d6408642517f084d:"3939507000000000000000","9340345ca6a3eabdb77363f2586043f29438ce0b":"530922000000000000000","6640ccf053555c130ae2b656647ea6e31637b9ab":"1970000000000000000000","184d86f3466ae6683b19729982e7a7e1a48347b2":"10000000000000000000000","84ec06f24700fe42414cb9897c154c88de2f6132":"1337000000000000000000",d1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe:"20000000000000000000000",e8a9a41740f44f54c3688b53e1ddd42e43c9fe94:"4000000000000000000000","6e3a51db743d334d2fe88224b5fe7c008e80e624":"106000000000000000000","3e94df5313fa520570ef232bc3311d5f622ff183":"2000000000000000000000","8957727e72cf629020f4e05edf799aa7458062d0":"2200000000000000000000",cf5e0eacd1b39d0655f2f77535ef6608eb950ba0:"2000000000000000000000",f4aaa3a6163e3706577b49c0767e948a681e16ee:"2000000000000000000000","97f1fe4c8083e596212a187728dd5cf80a31bec5":"20000000000000000000","57d5fd0e3d3049330ffcdcd020456917657ba2da":"1991240000000000000000","49bdbc7ba5abebb6389e91a3285220d3451bd253":"1000000000000000000000",ae126b382cf257fad7f0bc7d16297e54cc7267da:"300000000000000000000",bbf8616d97724af3def165d0e28cda89b800009a:"114063000000000000000",adb948b1b6fefe207de65e9bbc2de98e605d0b57:"2000000000000000000000","8a217db38bc35f215fd92906be42436fe7e6ed19":"6000000000000000000000",e28b062259e96eeb3c8d4104943f9eb325893cf5:"1337000000000000000000","6a6b18a45a76467e2e5d5a2ef911c3e12929857b":"82000000000000000000000",cb68ae5abe02dcf8cbc5aa719c25814651af8b85:"500000000000000000000","4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9":"20000000000000000000","58ba1569650e5bbbb21d35d3e175c0d6b0c651a9":"500000000000000000000","1eb4bf73156a82a0a6822080c6edf49c469af8b9":"1910000000000000000000","4103299671d46763978fa4aa19ee34b1fc952784":"200000000000000000000",e321bb4a946adafdade4571fb15c0043d39ee35f:"1575212000000000000000","893608751d68d046e85802926673cdf2f57f7cb8":"19700000000000000000","70fee08b00c6c2c04a3c625c1ff77caf1c32df01":"200000000000000000000","7b0fea1176d52159333a143c294943da36bbddb4":"9380000000000000000000",d331c823825a9e5263d052d8915d4dcde07a5c37:"564000000000000000000",a45432a6f2ac9d56577b938a37fabac8cc7c461c:"1000000000000000000000","764fc46d428b6dbc228a0f5f55c9508c772eab9f":"26000000000000000000000","1a95a8a8082e4652e4170df9271cb4bb4305f0b2":"50000000000000000000","08c9f1bfb689fdf804d769f82123360215aff93b":"1970000000000000000000","1572cdfab72a01ce968e78f5b5448da29853fbdd":"5061500000000000000000","379c7166849bc24a02d6535e2def13daeef8aa8d":"100000000000000000000",e0a254ac09b9725bebc8e460431dd0732ebcabbf:"6000000000000000000000","3225c1ca5f2a9c88156bb7d9cdc44a326653c214":"400000000000000000000","84686c7bad762c54b667d59f90943cd14d117a26":"20000000000000000000","3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c":"20000000000000000000","2ccf80e21898125eb4e807cd82e09b9d28592f6e":"2000000000000000000000",dde969aef34ea87ac299b7597e292b4a0155cc8a:"298819000000000000000","19e94e620050aad766b9e1bad931238312d4bf49":"2396000000000000000000","959f57fded6ae37913d900b81e5f48a79322c627":"255599000000000000000",b9b0a3219a3288d9b35b091b14650b8fe23dce2b:"14000000000000000000000","3575c770668a9d179f1ef768c293f80166e2aa3d":"474000000000000000000","58f05b262560503ca761c61890a4035f4c737280":"8000000000000000000000","3286d1bc657a312c8847d93cb3cb7950f2b0c6e3":"20000000000000000000000","1d9e6aaf8019a05f230e5def05af5d889bd4d0f2":"133700000000000000000",a375b4bc24a24e1f797593cc302b2f331063fa5c:"200000000000000000000","108ba7c2895c50e072dc6f964932d50c282d3034":"500000000000000000000",b6b34a263f10c3d2eceb0acc559a7b2ab85ce565:"4000000000000000000000",a4d2b429f1ad5349e31704969edc5f25ee8aca10:"10000000000000000000000","674adb21df4c98c7a347ac4c3c24266757dd7039":"2000000000000000000000","33565ba9da2c03e778ce12294f081dfe81064d24":"16000000000000000000000","4ddda7586b2237b053a7f3289cf460dc57d37a09":"10000000000000000000000",cc4faac00be6628f92ef6b8cb1b1e76aac81fa18:"205410000000000000000","5f99dc8e49e61d57daef606acdd91b4d7007326a":"3000000000000000000000",b8a979352759ba09e35aa5935df175bff678a108:"20000000000000000000","86fff220e59305c09f483860d6f94e96fbe32f57":"42900000000000000000","03e8b084537557e709eae2e1e1a5a6bce1ef8314":"20000000000000000000",dda4ff7de491c687df4574dd1b17ff8f246ba3d1:"19600000000000000000000","2538532936813c91e653284f017c80c3b8f8a36f":"2002000000000000000000","5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69":"1999400000000000000000","86740a46648e845a5d96461b18091ff57be8a16f":"98000000000000000000000","7e3f63e13129a221ba1ab06326342cd98b5126ae":"1597960000000000000000","1f5f3b34bd134b2781afe5a0424ac5846cdefd11":"99000000000000000000","39936c2719450b9420cc2522cf91db01f227c1c1":"500000000000000000000","967076a877b18ec15a415bb116f06ef32645dba3":"2000000000000000000000",a42908e7fe53980a9abf4044e957a54b70e99cbe:"2000000000000000000000","5eb371c407406c427b3b7de271ad3c1e04269579":"3000000000000000000000",a570223ae3caa851418a9843a1ac55db4824f4fd:"200000000000000000000","764692cccb33405dd0ab0c3379b49caf8e6221ba":"20000000000000000000",a365918bfe3f2627b9f3a86775d8756e0fd8a94b:"400000000000000000000","069ed0ab7aa77de571f16106051d92afe195f2d0":"200000000000000000000",bd432a3916249b4724293af9146e49b8280a7f2a:"4000000000000000000000","61c9dce8b2981cb40e98b0402bc3eb28348f03ac":"196910000000000000000","8f1fcc3c51e252b693bc5b0ec3f63529fe69281e":"6000000000000000000000","55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d":"1970000000000000000000","383a7c899ee18bc214969870bc7482f6d8f3570e":"10000000000000000000000",b14cc8de33d6338236539a489020ce4655a32bc6:"8000000000000000000000","448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad":"199955000000000000000","06f7dc8d1b9462cef6feb13368a7e3974b097f9f":"2000000000000000000000","9c9f89a3910f6a2ae8a91047a17ab788bddec170":"10000000000000000000000","5de598aba344378cab4431555b4f79992dc290c6":"1337000000000000000000","87e6034ecf23f8b5639d5f0ea70a22538a920423":"328000000000000000000","8b27392206b958cd375d7ef8af2cf8ef0598c0bc":"1000000000000000000000","49136fe6e28b7453fcb16b6bbbe9aaacba8337fd":"2000000000000000000000","6982fe8a867e93eb4a0bd051589399f2ec9a5292":"2000000000000000000000","9fd1052a60506bd1a9ef003afd9d033c267d8e99":"1000000000000000000000",d38fa2c4cc147ad06ad5a2f75579281f22a7cc1f:"20000000000000000000000","6f794dbdf623daa6e0d00774ad6962737c921ea4":"2000000000000000000000",e96b184e1f0f54924ac874f60bbf44707446b72b:"2910840000000000000000",b5ba29917c78a1d9e5c5c713666c1e411d7f693a:"3100000000000000000000","81d619ff5726f2405f12904c72eb1e24a0aaee4f":"20000000000000000000000",b02fa29387ec12e37f6922ac4ce98c5b09e0b00f:"2000000000000000000000",b7230d1d1ff2aca366963914a79df9f7c5ea2c98:"8000000000000000000000","7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26":"15202564000000000000000","8d9a0c70d2262042df1017d6c303132024772712":"2000000000000000000000","323aad41df4b6fc8fece8c93958aa901fa680843":"970000000000000000000",db04fad9c49f9e880beb8fcf1d3a3890e4b3846f:"1242482000000000000000","27824666d278d70423f03dfe1dc7a3f02f43e2b5":"1000070000000000000000",e04920dc6ecc1d6ecc084f88aa0af5db97bf893a:"182000000000000000000",b0c1b177a220e41f7c74d07cde8569c21c75c2f9:"5600000000000000000000","7864dc999fe4f8e003c0f43decc39aae1522dc0f":"94400000000000000000",c75c37ce2da06bbc40081159c6ba0f976e3993b1:"1078640000000000000000","179a825e0f1f6e985309668465cffed436f6aea9":"20000000000000000000","2c6b699d9ead349f067f45711a074a641db6a897":"20000000000000000000","068ce8bd6e902a45cb83b51541b40f39c4469712":"5240000000000000000000","767ac690791c2e23451089fe6c7083fe55deb62b":"820000000000000000000",b34f04b8db65bba9c26efc4ce6efc50481f3d65d:"20000000000000000000000","29aef48de8c9fbad4b9e4ca970797a5533eb722d":"10000000000000000000000","0a0ecda6636f7716ef1973614687fd89a820a706":"394000000000000000000",b32825d5f3db249ef4e85cc4f33153958976e8bc:"501375000000000000000","7ef16fd8d15b378a0fba306b8d03dd98fc92619f":"700000000000000000000",b58b52865ea55d8036f2fab26098b352ca837e18:"18200000000000000000","9b658fb361e046d4fcaa8aef6d02a99111223625":"2000000000000000000000",b2a498f03bd7178bd8a789a00f5237af79a3e3f8:"19400000000000000000000",cb48fe8265d9af55eb7006bc335645b0a3a183be:"3000000000000000000000","3cf9a1d465e78b7039e3694478e2627b36fcd141":"1372000000000000000000","5db84400570069a9573cab04b4e6b69535e202b8":"9700000000000000000000","214c89c5bd8e7d22bc574bb35e48950211c6f776":"18903000000000000000","53396f4a26c2b4604496306c5442e7fcba272e36":"20055000000000000000000","720994dbe56a3a95929774e20e1fe525cf3704e4":"8000000000000000000000","3571cf7ad304ecaee595792f4bbfa484418549d6":"5825500000000000000000","6042c644bae2b96f25f94d31f678c90dc96690db":"2000000000000000000000","2e24b597873bb141bdb237ea8a5ab747799af02d":"20000000000000000000000","08c802f87758349fa03e6bc2e2fd0791197eea9a":"2000000000000000000000","297a88921b5fca10e5bb9ded60025437ae221694":"200000000000000000000",aee49d68adedb081fd43705a5f78c778fb90de48:"20000000000000000000","4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e":"1000000000000000000000",dfaf31e622c03d9e18a0ddb8be60fbe3e661be0a:"9999800000000000000000","00aa5381b2138ebeffc191d5d8c391753b7098d2":"990049000000000000000","5b4c0c60f10ed2894bdb42d9dd1d210587810a0d":"500000000000000000000",c44f4ab5bc60397c737eb0683391b633f83c48fa:"1000000000000000000000","50bef2756248f9a7a380f91b051ba3be28a649ed":"1999884000000000000000","1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951":"20055000000000000000","9ec03e02e587b7769def538413e97f7e55be71d8":"19700000000000000000000","9874803fe1f3a0365e7922b14270eaeb032cc1b5":"1124500000000000000000","4e2310191ead8d3bc6489873a5f0c2ec6b87e1be":"1000000000000000000000","93678a3c57151aeb68efdc43ef4d36cb59a009f3":"30060000000000000000",f483f607a21fcc28100a018c568ffbe140380410:"1000000000000000000000","2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71":"1940000000000000000000","240e559e274aaef0c258998c979f671d1173b88b":"4000000000000000000000","108a2b7c336f784779d8b54d02a8d31d9a139c0a":"10000000000000000000000","9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6":"6000000000000000000000","194ff44aefc17bd20efd7a204c47d1620c86db5d":"2999400000000000000000","1f8116bd0af5570eaf0c56c49c7ab5e37a580458":"2000000000000000000000",d79835e404fb86bf845fba090d6ba25e0c8866a6:"2400000000000000000000",a8e7201ff619faffc332e6ad37ed41e301bf014a:"600000000000000000000","286906b6bd4972e3c71655e04baf36260c7cb153":"340000000000000000000",db4bc83b0e6baadb1156c5cf06e0f721808c52c7:"880000000000000000000",a158148a2e0f3e92dc2ce38febc20107e3253c96:"2000000000000000000000","9f6a322a6d469981426ae844865d7ee0bb15c7b3":"50003000000000000000","32f29e8727a74c6b4301e3ffff0687c1b870dae9":"1000000000000000000000","19918aa09e7d494e98ffa5db50350892f7156ac6":"10000000000000000000000","5a5f8508da0ebebb90be9033bd4d9e274105ae00":"6685000000000000000000","6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079":"792000000000000000000","72094f3951ffc9771dced23ada080bcaf9c7cca7":"6000000000000000000000","43f7e86e381ec51ec4906d1476cba97a3db584e4":"1000000000000000000000","05696b73916bd3033e05521e3211dfec026e98e4":"2000000000000000000000","5e7f70378775589fc66a81d3f653e954f55560eb":"2434000000000000000000","895613236f3584216ad75c5d3e07e3fa6863a778":"2000000000000000000000","4eb1454b573805c8aca37edec7149a41f61202f4":"300000000000000000000",d99999a2490d9494a530cae4daf38554f4dd633e:"120000000000000000000","1704cefcfb1331ec7a78388b29393e85c1af7916":"400000000000000000000",ac4acfc36ed6094a27e118ecc911cd473e8fb91f:"1799800000000000000000",a975b077fcb4cc8efcbf838459b6fa243a4159d6:"40000000000000000000","9c405cf697956138065e11c5f7559e67245bd1a5":"200000000000000000000",cafde855864c2598da3cafc05ad98df2898e8048:"14179272000000000000000","8ef711e43a13918f1303e81d0ea78c9eefd67eb2":"4000000000000000000000","0b14891999a65c9ef73308efe3100ca1b20e8192":"800000000000000000000","47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3":"131400000000000000000","04ba8a3f03f08b895095994dda619edaacee3e7a":"2000000000000000000000","02b6d65cb00b7b36e1fb5ed3632c4cb20a894130":"20000000000000000000000",f99aee444b5783c093cfffd1c4632cf93c6f050c:"400000000000000000000","2541314a0b408e95a694444977712a50713591ab":"1634706000000000000000","3096dca34108085bcf04ae72b94574a13e1a3e1d":"200000000000000000000","56df05bad46c3f00ae476ecf017bb8c877383ff1":"197248000000000000000","6d59b21cd0e2748804d9abe064eac2bef0c95f27":"2000000000000000000000",b29f5b7c1930d9f97a115e067066f0b54db44b3b:"1000000000000000000000","888c16144933197cac26504dd76e06fd6600c789":"100000000000000000000",dfe3c52a92c30396a4e33a50170dc900fcf8c9cf:"50000000000000000000",f76f69cee4faa0a63b30ae1e7881f4f715657010:"200000000000000000000",ee0007b0960d00908a94432a737557876aac7c31:"53053000000000000000",effc15e487b1beda0a8d1325bdb4172240dc540a:"64940000000000000000","40ab0a3e83d0c8ac9366910520eab1772bac3b1a":"976600000000000000000","1895a0eb4a4372722fcbc5afe6936f289c88a419":"910000000000000000000","81efe296ae76c860d1c5fbd33d47e8ce9996d157":"1000000000000000000000","9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a":"50000000000000000000",f2b4ab2c9427a9015ef6eefff5edb60139b719d1:"716800000000000000000","765be2e12f629e6349b97d21b62a17b7c830edab":"6000000000000000000000",ff61c9c1b7a3d8b53bba20b34466544b7b216644:"2000000000000000000000","36a08fd6fd1ac17ce15ed57eefb12a2be28188bf":"1337000000000000000000","17049311101d817efb1d65910f663662a699c98c":"1999800000000000000000","30511832918d8034a7bee72ef2bfee440ecbbcf6":"16100000000000000000000",d27c234ff7accace3d996708f8f9b04970f97d36:"1337000000000000000000",a961171f5342b173dd70e7bfe5b5ca238b13bcdd:"3397053000000000000000","30bf61b2d877fe10635126326fa189e4b0b1c3b0":"1027580000000000000000","4bb6d86b8314c22d8d37ea516d0019f156aae12d":"1000000000000000000000","5f363e0ab747e02d1b3b66abb69ea53c7baf523a":"11640000000000000000000","283e11203749b1fa4f32febb71e49d135919382a":"1000000000000000000000",ac5999a89d2dd286d5a80c6dee7e86aad40f9e12:"3880000000000000000000","3f6dd3650ee428dcb7759553b017a96a94286ac9":"1337000000000000000000",b3fc1d6881abfcb8becc0bb021b8b73b7233dd91:"50000000000000000000",f0832a6bb25503eeca435be31b0bf905ca1fcf57:"6685000000000000000000","9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c":"11027380000000000000000","4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d":"668500000000000000000",f3b668b3f14d920ebc379092db98031b67b219b3:"199955000000000000000",d91d889164479ce436ece51763e22cda19b22d6b:"3365200000000000000000",ffe28db53c9044b4ecd4053fd1b4b10d7056c688:"100000000000000000000",c77b01a6e911fa988d01a3ab33646beef9c138f3:"721400000000000000000",c0064f1d9474ab915d56906c9fb320a2c7098c9b:"358000000000000000000","4e3edad4864dab64cae4c5417a76774053dc6432":"590943000000000000000","71d2cc6d02578c65f73c575e76ce8fbcfadcf356":"72400000000000000000","9971df60f0ae66dce9e8c84e17149f09f9c52f64":"200000000000000000000","58e661d0ba73d6cf24099a5562b808f7b3673b68":"2000000000000000000000","84b0ee6bb837d3a4c4c5011c3a228c0edab4634a":"20000000000000000000","84375afbf59b3a1d61a1be32d075e0e15a4fbca5":"200000000000000000000","9ae9476bfecd3591964dd325cf8c2a24faed82c1":"4000000000000000000000","6a4c8907b600248057b1e46354b19bdc859c991a":"20000000000000000000","1c045649cd53dc23541f8ed4d341812808d5dd9c":"7000000000000000000000",c5e488cf2b5677933971f64cb8202dd05752a2c0:"1000000000000000000000",eb25481fcd9c221f1ac7e5fd1ecd9307a16215b8:"197000000000000000000",a61887818f914a20e31077290b83715a6b2d6ef9:"1880000000000000000000","679437eacf437878dc293d48a39c87b7421a216c":"64528000000000000000","331a1c26cc6994cdd3c14bece276ffff4b9df77c":"18049000000000000000","75b95696e8ec4510d56868a7c1a735c68b244890":"6400000000000000000000",a77f3ee19e9388bbbb2215c62397b96560132360:"200000000000000000000",bc7afc8477412274fc265df13c054473427d43c6:"130034000000000000000","91050a5cffadedb4bb6eaafbc9e5013428e96c80":"1700000000000000000000","24586ec5451735eeaaeb470dc8736aae752f82e5":"17600000000000000000","51039377eed0c573f986c5e8a95fb99a59e9330f":"1970000000000000000000",fbb161fe875f09290a4b262bc60110848f0d2226:"2000000000000000000000",ed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff:"9550000000000000000000",bad235d5085dc7b068a67c412677b03e1836884c:"2000000000000000000000","055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3":"100000000000000000000","4058808816fdaa3a5fc98ed47cfae6c18315422e":"199800000000000000000","3540c7bd7a8442d5bee21a2180a1c4edff1649e0":"1239295000000000000000",c5edbbd2ca0357654ad0ea4793f8c5cecd30e254:"6000000000000000000000",b5906b0ae9a28158e8ac550e39da086ee3157623:"200000000000000000000","4d801093c19ca9b8f342e33cc9c77bbd4c8312cf":"345005000000000000000","206482ee6f138a778fe1ad62b180ce856fbb23e6":"2000000000000000000000",c0ed0d4ad10de03435b153a0fc25de3b93f45204:"3160000000000000000000","29e67990e1b6d52e1055ffe049c53195a81542cf":"20000000000000000000000",e6d22209ffd0b87509ade3a8e2ef429879cb89b5:"17260000000000000000000",d6644d40e90bc97fe7dfe7cabd3269fd579ba4b3:"159000000000000000000",ece1290877b583e361a2d41b009346e6274e2538:"300000000000000000000",ab3861226ffec1289187fb84a08ec3ed043264e8:"1000000000000000000000","60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a":"1370000000000000000000","28b77585cb3d55a199ab291d3a18c68fe89a848a":"1960000000000000000000","73128173489528012e76b41a5e28c68ba4e3a9d4":"1000000000000000000000","018492488ba1a292342247b31855a55905fef269":"140000000000000000000","0bb54c72fd6610bfa4363397e020384b022b0c49":"1337000000000000000000","520f66a0e2657ff0ac4195f2f064cf2fa4b24250":"40000000000000000000",a1432ed2c6b7777a88e8d46d388e70477f208ca5:"7999538000000000000000","149ba10f0da2725dc704733e87f5a524ca88515e":"7880000000000000000000",b287f7f8d8c3872c1b586bcd7d0aedbf7e732732:"20000000000000000000",c46bbdef76d4ca60d316c07f5d1a780e3b165f7e:"2000000000000000000000",b5a589dd9f4071dbb6fba89b3f5d5dae7d96c163:"2000000000000000000000",d218efb4db981cdd6a797f4bd48c7c26293ceb40:"2975000000000000000000",af87d2371ef378957fbd05ba2f1d66931b01e2b8:"700000000000000000000","86ef6426211949cc37f4c75e7850369d0cf5f479":"13399196000000000000000",fb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0:"199950000000000000000",da16dd5c3d1a2714358fe3752cae53dbab2be98c:"19400000000000000000000","9eb7834e171d41e069a77947fca87622f0ba4e48":"100000000000000000000",e1d91b0954cede221d6f24c7985fc59965fb98b8:"2000000000000000000000","85d0d88754ac84b8b21ba93dd2bfec72626faba8":"1000000000000000000000","695b4cce085856d9e1f9ff3e79942023359e5fbc":"5000000000000000000000","9156d18029350e470408f15f1aa3be9f040a67c6":"1000000000000000000000",a9d64b4f3bb7850722b58b478ba691375e224e42:"6000000000000000000000","17e4a0e52bac3ee44efe0954e753d4b85d644e05":"2000000000000000000000",b8a79c84945e47a9c3438683d6b5842cff7684b1:"2000000000000000000000",cfac2e1bf33205b05533691a02267ee19cd81836:"1000000000000000000000","6b992521ec852370848ad697cc2df64e63cc06ff":"1000000000000000000000","60af0ee118443c9b37d2fead77f5e521debe1573":"1910000000000000000000",c6dbdb9efd5ec1b3786e0671eb2279b253f215ed:"1000000000000000000000","659c0a72c767a3a65ced0e1ca885a4c51fd9b779":"2000000000000000000000",ed1276513b6fc68628a74185c2e20cbbca7817bf:"191000000000000000000","5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8":"800000000000000000000","17c0fef6986cfb2e4041f9979d9940b69dff3de2":"4000000000000000000000",ca98c7988efa08e925ef9c9945520326e9f43b99:"4000000000000000000000",fe8f1fdcab7fbec9a6a3fcc507619600505c36a3:"19700000000000000000","4420aa35465be617ad2498f370de0a3cc4d230af":"2000000000000000000000","8232d1f9742edf8dd927da353b2ae7b4cbce7592":"668500000000000000000",eca5f58792b8c62d2af556717ee3ee3028be4dce:"2000000000000000000000","6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104":"1820000000000000000000","3ac2f0ff1612e4a1c346d53382abf6d8a25baa53":"2000000000000000000000",daa1bd7a9148fb865cd612dd35f162861d0f3bdc:"3066243000000000000000","5169c60aee4ceed1849ab36d664cff97061e8ea8":"3000000000000000000000","2a5e3a40d2cd0325766de73a3d671896b362c73b":"100000000000000000000000",a83382b6e15267974a8550b98f7176c1a353f9be:"3541608000000000000000",b50c149a1906fad2786ffb135aab501737e9e56f:"388000000000000000000",d9775965b716476675a8d513eb14bbf7b07cd14a:"5076200000000000000000","66662006015c1f8e3ccfcaebc8ee6807ee196303":"500024000000000000000","78746a958dced4c764f876508c414a68342cecb9":"50600000000000000000",e982e6f28c548f5f96f45e63f7ab708724f53fa1:"396238000000000000000","740bfd52e01667a3419b029a1b8e45576a86a2db":"16800000000000000000000","2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a":"2674000000000000000000","2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786":"3999800000000000000000","3e3161f1ea2fbf126e79da1801da9512b37988c9":"49250000000000000000000","7e2ba86da52e785d8625334f3397ba1c4bf2e8d1":"197000000000000000000","7608f437b31f18bc0b64d381ae86fd978ed7b31f":"50000000000000000000","25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509":"17000000000000000000000","745ad3abc6eeeb2471689b539e789ce2b8268306":"1129977000000000000000","09e437d448861228a232b62ee8d37965a904ed9c":"21708305000000000000000",be53322f43fbb58494d7cce19dda272b2450e827:"200018000000000000000","4166fc08ca85f766fde831460e9dc93c0e21aa6c":"1000000000000000000000","99c0174cf84e0783c220b4eb6ae18fe703854ad3":"2074800000000000000000","3cf484524fbdfadae26dc185e32b2b630fd2e726":"448798000000000000000",fdcd5d80b105897a57abc47865768b2900524295:"6400000000000000000000",f22f4078febbbaa8b0e78e642c8a42f35d433905:"1999944000000000000000",eac768bf14b8f9432e69eaa82a99fbeb94cd0c9c:"98500000000000000000000","2639eee9873ceec26fcc9454b548b9e7c54aa65c":"1000000000000000000000",c3c3c2510d678020485a63735d1307ec4ca6302b:"1000000000000000000000",b73d6a77559c86cf6574242903394bacf96e3570:"91200000000000000000","5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436":"20000000000000000000000","03377c0e556b640103289a6189e1aeae63493467":"20000000000000000000000","6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b":"4000000000000000000000",fc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb:"2000000000000000000000","4a835c25824c47ecbfc79439bf3f5c3481aa75cd":"1400000000000000000000",b5493ef173724445cf345c035d279ba759f28d51:"20000000000000000000",b9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a:"499928000000000000000","419bde7316cc1ed295c885ace342c79bf7ee33ea":"6000000000000000000000",e4625501f52b7af52b19ed612e9d54fdd006b492:"209440000000000000000",e9d599456b2543e6db80ea9b210e908026e2146e:"200000000000000000000","2c06dd922b61514aafedd84488c0c28e6dcf0e99":"100000000000000000000000","06b5ede6fdf1d6e9a34721379aeaa17c713dd82a":"2000000000000000000000",d8930a39c77357c30ad3a060f00b06046331fd62:"820000000000000000000",b2a2c2111612fb8bbb8e7dd9378d67f1a384f050:"20000000000000000000","1f174f40a0447234e66653914d75bc003e5690dc":"160000000000000000000",e06cb6294704eea7437c2fc3d30773b7bf38889a:"20094000000000000000",cd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24:"1000000000000000000000",f316ef1df2ff4d6c1808dba663ec8093697968e0:"1794400000000000000000","1e6915ebd9a19c81b692ad99b1218a592c1ac7b1":"4000000000000000000000","885493bda36a0432976546c1ddce71c3f4570021":"216700000000000000000","18b0407cdad4ce52600623bd5e1f6a81ab61f026":"319489000000000000000","187d9f0c07f8eb74faaad15ebc7b80447417f782":"20000000000000000000","5d6ccf806738091042ad97a6e095fe8c36aa79c5":"188000000000000000000","53437fecf34ab9d435f4deb8ca181519e2592035":"188000000000000000000",fd1faa347b0fcc804c2da86c36d5f1d18b7087bb:"52380000000000000000","650cf67db060cce17568d5f2a423687c49647609":"100000000000000000000",bcd95ef962462b6edfa10fda87d72242fe3edb5c:"334133000000000000000","3b5e8b3c77f792decb7a8985df916efb490aac23":"2000000000000000000000",f13b083093ba564e2dc631568cf7540d9a0ec719:"1999944000000000000000","373c547e0cb5ce632e1c5ad66155720c01c40995":"4691588000000000000000","7313461208455455465445a459b06c3773b0eb30":"2000000000000000000000","441f37e8a029fd02482f289c49b5d06d00e408a4":"333333000000000000000",d30d4c43adcf55b2cb53d68323264134498d89ce:"1000000000000000000000",f648ea89c27525710172944e79edff847803b775:"100000000000000000000000","0c7f869f8e90d53fdc03e8b2819b016b9d18eb26":"20000000000000000000000",c71f92a3a54a7b8c2f5ea44305fccb84eee23148:"49980000000000000000","7988901331e387f713faceb9005cb9b65136eb14":"1970000000000000000000",e9a39a8bac0f01c349c64cedb69897f633234ed2:"3980000000000000000000",ad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2:"999996000000000000000",f25259a5c939cd25966c9b6303d3731c53ddbc4c:"200000000000000000000",d1682c2159018dc3d07f08240a8c606daf65f8e1:"200000000000000000000000",a99991cebd98d9c838c25f7a7416d9e244ca250d:"1000000000000000000000","5a285755391e914e58025faa48cc685f4fd4f5b8":"26000000000000000000000","4d24b7ac47d2f27de90974ba3de5ead203544bcd":"100000000000000000000","21b182f2da2b384493cf5f35f83d9d1ee14f2a21":"2000000000000000000000","31ab088966ecc7229258f6098fce68cf39b38485":"1000000000000000000000","4977a7939d0939689455ce2639d0ee5a4cd910ed":"1820000000000000000000","07af938c1237a27c9030094dcf240750246e3d2c":"500000000000000000000","4e2bfa4a466f82671b800eee426ad00c071ba170":"4000000000000000000000","107379d4c467464f235bc18e55938aad3e688ad7":"50000000000000000000",f7b29b82195c882dab7897c2ae95e77710f57875:"2199000000000000000000","56586391040c57eec6f5affd8cd4abde10b50acc":"4000000000000000000000",ac608e2bac9dd20728d2947effbbbf900a9ce94b:"6000600000000000000000","48548b4ba62bcb2f0d34a88dc69a680e539cf046":"100084000000000000000","1665ab1739d71119ee6132abbd926a279fe67948":"100000000000000000000",af4493e8521ca89d95f5267c1ab63f9f45411e1b:"200000000000000000000",bf6925c00751008440a6739a02bf2b6cdaab5e3a:"1000000000000000000000","3fe40fbd919aad2818df01ee4df46c46842ac539":"6000000000000000000000","455b9296921a74d1fc41617f43b8303e6f3ed76c":"4200000000000000000000","7086b4bde3e35d4aeb24b825f1a215f99d85f745":"1999800000000000000000",d4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f:"40000000000000000000000",a4489a50ead5d5445a7bee4d2d5536c2a76c41f8:"200000000000000000000","505e4f7c275588c533a20ebd2ac13b409bbdea3c":"17600000000000000000","3bb53598cc20e2055dc553b049404ac9b7dd1e83":"615020000000000000000","52cd20403ba7eda6bc307a3d63b5911b817c1263":"20000000000000000000",a211da03cc0e31ecce5309998718515528a090df:"200000000000000000000",bcb422dc4dd2aae94abae95ea45dd1731bb6b0ba:"447500000000000000000",cbde9734b8e6aa538c291d6d7facedb0f338f857:"2000000000000000000000","171ca02a8b6d62bf4ca47e906914079861972cb2":"200000000000000000000",d40d0055fd9a38488aff923fd03d35ec46d711b3:"4999711000000000000000","3887192c7f705006b630091276b39ac680448d6b":"60000000000000000000","3f3c8e61e5604cef0605d436dd22accd862217fc":"1337000000000000000000","4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9":"6719600000000000000000","4571de672b9904bad8743692c21c4fdcea4c2e01":"4000000000000000000000","5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b":"120000000000000000000",d6300b3215b11de762ecde4b70b7927d01291582:"2000000000000000000000",f9e37447406c412197b2e2aebc001d6e30c98c60:"8346700000000000000000",bd047ff1e69cc6b29ad26497a9a6f27a903fc4dd:"865000000000000000000","23fa7eb51a48229598f97e762be0869652dffc66":"1000000000000000000000","6679aeecd87a57a73f3356811d2cf49d0c4d96dc":"600000000000000000000","23c55aeb5739876f0ac8d7ebea13be729685f000":"1337000000000000000000","757b65876dbf29bf911d4f0692a2c9beb1139808":"4124263000000000000000",e8fc36b0131ec120ac9e85afc10ce70b56d8b6ba:"200000000000000000000","1a89899cbebdbb64bb26a195a63c08491fcd9eee":"2000000000000000000000","6edf7f5283725c953ee64317f66188af1184b033":"8050000000000000000000","297385e88634465685c231a314a0d5dcd146af01":"1550000000000000000000","018f20a27b27ec441af723fd9099f2cbb79d6263":"2167000000000000000000",a5a4227f6cf98825c0d5baff5315752ccc1a1391:"10000000000000000000000","69517083e303d4fbb6c2114514215d69bc46a299":"100000000000000000000","1dab172effa6fbee534c94b17e794edac54f55f8":"1970000000000000000000",c6ee35934229693529dc41d9bb71a2496658b88e:"19700000000000000000000",a8ee1df5d44b128469e913569ef6ac81eeda4fc8:"500000000000000000000","35bd246865fab490ac087ac1f1d4f2c10d0cda03":"400000000000000000000","4bf8bf1d35a231315764fc8001809a949294fc49":"66850000000000000000",c70fa45576bf9c865f983893002c414926f61029:"400400000000000000000",fdeaac2acf1d138e19f2fc3f9fb74592e3ed818a:"668500000000000000000",bfbfbcb656c2992be8fcde8219fbc54aadd59f29:"9999924000000000000000","1722c4cbe70a94b6559d425084caeed4d6e66e21":"4000000000000000000000","00e681bc2d10db62de85848324492250348e90bf":"20000000000000000000000","5c308bac4857d33baea074f3956d3621d9fa28e1":"4999711000000000000000","68c08490c89bf0d6b6f320b1aca95c8312c00608":"4000000000000000000000",ce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05:"4000000000000000000000","427417bd16b1b3d22dbb902d8f9657016f24a61c":"2000000000000000000000","5ff93de6ee054cad459b2d5eb0f6870389dfcb74":"220000000000000000000","71946b7117fc915ed107385f42d99ddac63249c2":"2000000000000000000000","11ec00f849b6319cf51aa8dd8f66b35529c0be77":"2000000000000000000000","610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156":"20002000000000000000",a422e4bf0bf74147cc895bed8f16d3cef3426154:"349281000000000000000","745aecbaf9bb39b74a67ea1ce623de368481baa6":"10000000000000000000000","9f496cb2069563144d0811677ba0e4713a0a4143":"1122000000000000000000",c500b720734ed22938d78c5e48b2ba9367a575ba:"33400000000000000000000",cd072e6e1833137995196d7bb1725fef8761f655:"6000000000000000000000","94644ad116a41ce2ca7fbec609bdef738a2ac7c7":"5000000000000000000000",e8d942d82f175ecb1c16a405b10143b3f46b963a:"568600000000000000000",f73dd9c142b71bce11d06e30e7e7d032f2ec9c9e:"1970000000000000000000","1327d759d56e0ab87af37ecf63fe01f310be100a":"659200000000000000000","28fa2580f9ebe420f3e5eefdd371638e3b7af499":"6000000000000000000000","024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1":"180000000000000000000",b4b14bf45455d0ab0803358b7524a72be1a2045b:"500000000000000000000",b1e2dd95e39ae9775c55aeb13f12c2fa233053ba:"2000000000000000000000","35b03ea4245736f57b85d2eb79628f036ddcd705":"4000000000000000000000",eb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de:"42784000000000000000000","690594d306613cd3e2fd24bca9994ad98a3d73f8":"2000000000000000000000","8397a1bc47acd647418159b99cea57e1e6532d6e":"9169160000000000000000",b44815a0f28e569d0e921a4ade8fb2642526497a:"55500000000000000000",e24109be2f513d87498e926a286499754f9ed49e:"886500000000000000000","37ac29bda93f497bc4aeaab935452c431510341e":"985000000000000000000","4a81abe4984c7c6bef63d69820e55743c61f201c":"16011846000000000000000","66dcc5fb4ee7fee046e141819aa968799d644491":"1337000000000000000000","43ff38743ed0cd43308c066509cc8e7e72c862aa":"1940000000000000000000",b8f20005b61352ffa7699a1b52f01f5ab39167f1:"10000000000000000000000","1cda411bd5163baeca1e558563601ce720e24ee1":"18200000000000000000","86245f596691093ece3f3d3ca2263eace81941d9":"188000000000000000000",f52a5882e8927d944b359b26366ba2b9cacfbae8:"25000080000000000000000","118c18b2dce170e8f445753ba5d7513cb7636d2d":"8800000000000000000000","7168b3bb8c167321d9bdb023a6e9fd11afc9afd9":"1790000000000000000000",d9103bb6b67a55a7fece2d1af62d457c2178946d:"1000000000000000000000","8b9fda7d981fe9d64287f85c94d83f9074849fcc":"14000000000000000000000","91211712719f2b084d3b3875a85069f466363141":"1000000000000000000000","4863849739265a63b0a2bf236a5913e6f959ce15":"1520000000000000000000",c2d1778ef6ee5fe488c145f3586b6ebbe3fbb445:"1146000000000000000000","2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1":"300000000000000000000",fe9c0fffefb803081256c0cf4d6659e6d33eb4fb:"1528000000000000000000","893017ff1adad499aa065401b4236ce6e92b625a":"1999944000000000000000","073c67e09b5c713c5221c8a0c7f3f74466c347b0":"19400000000000000000000","93e303411afaf6c107a44101c9ac5b36e9d6538b":"66000000000000000000000","0ec50aa823f465b9464b0bc0c4a57724a555f5d6":"59100000000000000000000",a3e3a6ea509573e21bd0239ece0523a7b7d89b2f:"1970000000000000000000",c069ef0eb34299abd2e32dabc47944b272334824:"120000000000000000000","28a3da09a8194819ae199f2e6d9d1304817e28a5":"2000000000000000000000",e9495ba5842728c0ed97be37d0e422b98d69202c:"2000000000000000000000",bba976f1a1215f7512871892d45f7048acd356c8:"2000000000000000000000","887cac41cd706f3345f2d34ac34e01752a6e5909":"595366000000000000000",e0e0b2e29dde73af75987ee4446c829a189c95bc:"149000000000000000000","4a5fae3b0372c230c125d6d470140337ab915656":"1600000000000000000000","425177eb74ad0a9d9a5752228147ee6d6356a6e6":"13370000000000000000","5db7bba1f9573f24115d8c8c62e9ce8895068e9f":"49984000000000000000",fa6a37f018e97967937fc5e8617ba1d786dd5f77:"19999800000000000000000","45e3a93e72144ada860cbc56ff85145ada38c6da":"1610000000000000000000","67da922effa472a6b124e84ea8f86b24e0f515aa":"20000000000000000000",aa9bd4589535db27fa2bc903ca17d679dd654806:"2000000000000000000000","16a9e9b73ae98b864d1728798b8766dbc6ea8d12":"957480000000000000000",d6580ab5ed4c7dfa506fa6fe64ad5ce129707732:"4000000000000000000000","984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2":"6000000000000000000000","7746b6c6699c8f34ca2768a820f1ffa4c207fe05":"4000086000000000000000","2fa491fb5920a6574ebd289f39c1b2430d2d9a6a":"2000000000000000000000",fae76719d97eac41870428e940279d97dd57b2f6:"98500000000000000000000","41b2dbd79dda9b864f6a7030275419c39d3efd3b":"3200000000000000000000",dd8254121a6e942fc90828f2431f511dad7f32e6:"3018000000000000000000","37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7":"2000000000000000000000","3a10888b7e149cae272c01302c327d0af01a0b24":"17000000000000000000","401354a297952fa972ad383ca07a0a2811d74a71":"14000000000000000000","51865db148881951f51251710e82b9be0d7eadb2":"2000000000000000000000",bbbd6ecbb5752891b4ceb3cce73a8f477059376f:"36000000000000000000","3f236108eec72289bac3a65cd283f95e041d144c":"999925000000000000000",dc83b6fd0d512131204707eaf72ea0c8c9bef976:"2000000000000000000000","036eeff5ba90a6879a14dff4c5043b18ca0460c9":"100000000000000000000",fac5ca94758078fbfccd19db3558da7ee8a0a768:"1017500000000000000000",d0d62c47ea60fb90a3639209bbfdd4d933991cc6:"194000000000000000000","891cb8238c88e93a1bcf61db49bd82b47a7f4f84":"2680000000000000000000",df53003346d65c5e7a646bc034f2b7d32fcbe56a:"2000000000000000000000","6e89c51ea6de13e06cdc748b67c4410fe9bcab03":"4000000000000000000000",a61cdbadf04b1e54c883de6005fcdf16beb8eb2f:"2000000000000000000000",e3951de5aefaf0458768d774c254f7157735e505:"1600930000000000000000",f2732cf2c13b8bb8e7492a988f5f89e38273ddc8:"600000000000000000000","4752218e54de423f86c0501933917aea08c8fed5":"20000000000000000000000","152f4e860ef3ee806a502777a1b8dbc91a907668":"600000000000000000000","15b96f30c23b8664e7490651066b00c4391fbf84":"410650000000000000000","8693e9b8be94425eef7969bc69f9d42f7cad671e":"1000090000000000000000",f41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942:"1970000000000000000000","38458e0685573cb4d28f53098829904570179266":"40000000000000000000","53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c":"200000000000000000000","2dca0e449ab646dbdfd393a96662960bcab5ae1e":"40000000000000000000000","87d7ac0653ccc67aa9c3469eef4352193f7dbb86":"200000000000000000000000",ae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08:"1730000000000000000000","7751f363a0a7fd0533190809ddaf9340d8d11291":"20000000000000000000","708a2af425ceb01e87ffc1be54c0f532b20eacd6":"134159000000000000000",ac122a03cd058c122e5fe17b872f4877f9df9572:"1969606000000000000000","5da4ca88935c27f55c311048840e589e04a8a049":"80000000000000000000",e67c2c1665c88338688187629f49e99b60b2d3ba:"200000000000000000000",dec82373ade8ebcf2acb6f8bc2414dd7abb70d77:"200000000000000000000","47c247f53b9fbeb17bba0703a00c009fdb0f6eae":"20000000000000000000000","9a522e52c195bfb7cf5ffaaedb91a3ba7468161d":"1000000000000000000000","3159e90c48a915904adfe292b22fa5fd5e72796b":"1008800000000000000000",defddfd59b8d2c154eecf5c7c167bf0ba2905d3e:"93588000000000000000",ad1d68a038fd2586067ef6d135d9628e79c2c924:"4686168000000000000000","038e45eadd3d88b87fe4dab066680522f0dfc8f9":"10000000000000000000000","2561ec0f379218fe5ed4e028a3f744aa41754c72":"13370000000000000000",b95396daaa490df2569324fcc6623be052f132ca:"2000000000000000000000","2376ada90333b1d181084c97e645e810aa5b76f1":"750000000000000000000","07800d2f8068e448c79a4f69b1f15ef682aae5f6":"19400000000000000000000",adeb204aa0c38e179e81a94ed8b3e7d53047c26b:"608000000000000000000","0dc100b107011c7fc0a1339612a16ccec3285208":"2000000000000000000000",f0b1340b996f6f0bf0d9561c849caf7f4430befa:"100000000000000000000",e1443dbd95cc41237f613a48456988a04f683282:"4000086000000000000000",d3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f:"6618150000000000000000",b68899e7610d4c93a23535bcc448945ba1666f1c:"200000000000000000000",a7253763cf4a75df92ca1e766dc4ee8a2745147b:"10740000000000000000000","75d67ce14e8d29e8c2ffe381917b930b1aff1a87":"3000000000000000000000","493d48bda015a9bfcf1603936eab68024ce551e0":"22528000000000000000","7ddd57165c87a2707f025dcfc2508c09834759bc":"1400000000000000000000",cff7f89a4d4219a38295251331568210ffc1c134:"1760000000000000000000","168d30e53fa681092b52e9bae15a0dcb41a8c9bb":"100000000000000000000","99b743d1d9eff90d9a1934b4db21d519d89b4a38":"100000000000000000000",a3d0b03cffbb269f796ac29d80bfb07dc7c6ad06:"2000000000000000000000","816d9772cf11399116cc1e72c26c6774c9edd739":"200000000000000000000",a880e2a8bf88a1a82648b4013c49c4594c433cc8:"4728000000000000000000","2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34":"62221355000000000000000",cb86edbc8bbb1f9131022be649565ebdb09e32a1:"2000000000000000000000","3915eab5ab2e5977d075dec47d96b68b4b5cf515":"61520000000000000000000","8165cab0eafb5a328fc41ac64dae715b2eef2c65":"1000000000000000000000","416c86b72083d1f8907d84efd2d2d783dffa3efb":"1999944000000000000000",c524086d46c8112b128b2faf6f7c7d8160a8386c:"400000000000000000000","902d74a157f7d2b9a3378b1f56703730e03a1719":"4000000000000000000000","74ef2869cbe608856045d8c2041118579f2236ea":"59724000000000000000",af992dd669c0883e5515d3f3112a13f617a4c367:"2000000000000000000000","4c6a248fc97d705def495ca20759169ef0d36471":"760000000000000000000","974d2f17895f2902049deaaecf09c3046507402d":"14707000000000000000","0239b4f21f8e05cd01512b2be7a0e18a6d974607":"1000000000000000000000",b97a6733cd5fe99864b3b33460d1672434d5cafd:"1999579000000000000000",f558a2b2dd26dd9593aae04531fd3c3cc3854b67:"198000000000000000000",b577b6befa054e9c040461855094b002d7f57bd7:"114000000000000000000000","73bfe7710f31cab949b7a2604fbf5239cee79015":"2000000000000000000000","5717f2d8f18ffcc0e5fe247d3a4219037c3a649c":"3998000000000000000000","20707e425d2a11d2c89f391b2b809f556c592421":"2000000000000000000000","9a6708ddb8903c289f83fe889c1edcd61f854423":"1000000000000000000000",fa27cc49d00b6c987336a875ae39da58fb041b2e:"10000000000000000000000",d688e785c98f00f84b3aa1533355c7a258e87948:"500000000000000000000","927cb7dc187036b5427bc7e200c5ec450c1d27d4":"216000000000000000000",b2bfaa58b5196c5cb7f89de15f479d1838de713d:"21000000000000000000",e180de9e86f57bafacd7904f9826b6b4b26337a3:"830400000000000000000",a1204dad5f560728a35c0d8fc79481057bf77386:"1000000000000000000000","6b0da25af267d7836c226bcae8d872d2ce52c941":"6000000000000000000000","0517448dada761cc5ba4033ee881c83037036400":"1998000000000000000000","7ed0a5a847bef9a9da7cba1d6411f5c316312619":"39842000000000000000","5b5d517029321562111b43086d0b043591109a70":"2600000000000000000000","56fc1a7bad4047237ce116146296238e078f93ad":"178000000000000000000","6c5422fb4b14e6d98b6091fdec71f1f08640419d":"400000000000000000000","108fe8ee2a13da487b22c6ab6d582ea71064d98c":"399800000000000000000","0ad3e44d3c001fa290b393617030544108ac6eb9":"1969019000000000000000","25aee68d09afb71d8817f3f184ec562f7897b734":"2000000000000000000000",c2340a4ca94c9678b7494c3c852528ede5ee529f:"48669000000000000000","44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393":"417500000000000000000","8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4":"600000000000000000000","682897bc4f8e89029120fcffb787c01a93e64184":"10000000000000000000000",f7acff934b84da0969dc37a8fcf643b7d7fbed41:"1999944000000000000000",f05fcd4c0d73aa167e5553c8c0d6d4f2faa39757:"13334000000000000000000",c981d312d287d558871edd973abb76b979e5c35e:"1970000000000000000000","9da61ccd62bf860656e0325d7157e2f160d93bb5":"4999980000000000000000",d284a50382f83a616d39b8a9c0f396e0ebbfa95d:"1000070000000000000000",d6cf5c1bcf9da662bcea2255905099f9d6e84dcc:"8349332000000000000000",c71b2a3d7135d2a85fb5a571dcbe695e13fc43cd:"1000000000000000000000",b22dadd7e1e05232a93237baed98e0df92b1869e:"2000000000000000000000",b09fe6d4349b99bc37938054022d54fca366f7af:"200000000000000000000000","427e4751c3babe78cff8830886febc10f9908d74":"1970000000000000000000","60b358cb3dbefa37f47df2d7365840da8e3bc98c":"20000000000000000000",dcd5bca2005395b675fde5035659b26bfefc49ee:"197000000000000000000","81186931184137d1192ac88cd3e1e5d0fdb86a74":"2900000000000000000000",de212293f8f1d231fa10e609470d512cb8ffc512:"2000000000000000000000","1937c5c515057553ccbd46d5866455ce66290284":"1000000000000000000000000","592777261e3bd852c48eca95b3a44c5b7f2d422c":"20000000000000000000000",bbf84292d954acd9e4072fb860b1504106e077ae:"1500000000000000000000","3b4100e30a73b0c734b18ffa8426d19b19312f1a":"55300000000000000000000",a03a3dc7c533d1744295be955d61af3f52b51af5:"40000000000000000000","4aa148c2c33401e66a2b586e6577c4b292d3f240":"216200000000000000000",ff850e3be1eb6a4d726c08fa73aad358f39706da:"1940000000000000000000","743651b55ef8429df50cf81938c2508de5c8870f":"2000000000000000000000","3700e3027424d939dbde5d42fb78f6c4dbec1a8f":"40000000000000000000",c1cbd2e2332a524cf219b10d871ccc20af1fb0fa:"1000000000000000000000",e25b9f76b8ad023f057eb11ad94257a0862e4e8c:"2000000000000000000000","719e891fbcc0a33e19c12dc0f02039ca05b801df":"6185800000000000000000","39636b25811b176abfcfeeca64bc87452f1fdff4":"400000000000000000000","631030a5b27b07288a45696f189e1114f12a81c0":"499970000000000000000",bcc84597b91e73d5c5b4d69c80ecf146860f779a:"4380000000000000000000","095e0174829f34c3781be1a5e38d1541ea439b7f":"6000000000000000000000","2e7e05e29edda7e4ae25c5173543efd71f6d3d80":"6000000000000000000000",dbb6ac484027041642bbfd8d80f9d0c1cf33c1eb:"2000000000000000000000","153c08aa8b96a611ef63c0253e2a4334829e579d":"394000000000000000000","10f4bff0caa5027c0a6a2dcfc952824de2940909":"2000000000000000000000","2ef869f0350b57d53478d701e3fee529bc911c75":"50000000000000000000","70ab34bc17b66f9c3b63f151274f2a727c539263":"2000000000000000000000","3201259caf734ad7581c561051ba0bca7fd6946b":"180000000000000000000000","84e9cf8166c36abfa49053b7a1ad4036202681ef":"2000000000000000000000","4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87":"1000090000000000000000",e50b464ac9de35a5618b7cbf254674182b81b97e:"4100000000000000000000","2abdf1a637ef6c42a7e2fe217773d677e804ebdd":"5000000000000000000000","7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5":"1337000000000000000000","2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c":"1010694000000000000000","7b712c7af11676006a66d2fc5c1ab4c479ce6037":"8000000000000000000000","3466f67e39636c01f43b3a21a0e8529325c08624":"842864000000000000000",fdd502a74e813bcfa355ceda3c176f6a6871af7f:"400000000000000000000","26475419c06d5f147aa597248eb46cf7befa64a5":"1640000000000000000000","9243d7762d77287b12638688b9854e88a769b271":"1000000000000000000000","723d8baa2551d2addc43c21b45e8af4ca2bfb2c2":"1760000000000000000000",f2fbb6d887f8b8cc3a869aba847f3d1f643c53d6:"3999000000000000000000","2cdb3944650616e47cb182e060322fa1487978ce":"1820000000000000000000",f0d21663d8b0176e05fde1b90ef31f8530fda95f:"1999944000000000000000","77cc02f623a9cf98530997ea67d95c3b491859ae":"1354900000000000000000",d1b5a454ac3405bb4179208c6c84de006bcb9be9:"500000000000000000000",b9920fd0e2c735c256463caa240fb7ac86a93dfa:"1760000000000000000000",ed1f1e115a0d60ce02fb25df014d289e3a0cbe7d:"500000000000000000000","23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81":"2000000000000000000000",f0be0faf4d7923fc444622d1980cf2d990aab307:"2000000000000000000000","0829d0f7bb7c446cfbb0deadb2394d9db7249a87":"40110000000000000000","2ecac504b233866eb5a4a99e7bd2901359e43b3d":"20000000000000000000000","06d6cb308481c336a6e1a225a912f6e6355940a1":"1760000000000000000000",d4879fd12b1f3a27f7e109761b23ca343c48e3d8:"666000000000000000000","857f100b1a5930225efc7e9020d78327b41c02cb":"2000000000000000000000","3aa42c21b9b31c3e27ccd17e099af679cdf56907":"8000000000000000000000","764d5212263aff4a2a14f031f04ec749dc883e45":"1850000000000000000000",d03a2da41e868ed3fef5745b96f5eca462ff6fda:"3000000000000000000000","4f26690c992b7a312ab12e1385d94acd58288e7b":"14000000000000000000000","7b122162c913e7146cad0b7ed37affc92a0bf27f":"1506799000000000000000",c87352dba582ee2066b9c002a962e003134f78b1:"500000000000000000000","9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853":"835000000000000000000",ccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7:"152000000000000000000","557f5e65e0da33998219ad4e99570545b2a9d511":"11024000000000000000000",a5f0077b351f6c505cd515dfa6d2fa7f5c4cd287:"40000000000000000000000","79c6002f8452ca157f1317e80a2faf24475559b7":"20000000000000000000","3aa07a34a1afc8967d3d1383b96b62cf96d5fa90":"20000000000000000000000","7f389c12f3c6164f6446566c77669503c2792527":"98500000000000000000",ac4cc256ae74d624ace80db078b2207f57198f6b:"2001000000000000000000","823ba7647238d113bce9964a43d0a098118bfe4d":"200000000000000000000",f5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b:"200000000000000000000","7d34803569e00bd6b59fff081dfa5c0ab4197a62":"1712700000000000000000","061ea4877cd08944eb64c2966e9db8dedcfec06b":"1000000000000000000000",df37c22e603aedb60a627253c47d8ba866f6d972:"24000000000000000000000","529aa002c6962a3a8545027fd8b05f22b5bf9564":"1670000000000000000000",eb89a882670909cf377e9e78286ee97ba78d46c2:"802200000000000000000","9ac85397792a69d78f286b86432a07aeceb60e64":"14300000000000000000","9610592202c282ab9bd8a884518b3e0bd4758137":"268000000000000000000","73932709a97f02c98e51b091312865122385ae8e":"1430000000000000000000","5ef8c96186b37984cbfe04c598406e3b0ac3171f":"9400000000000000000000",b6f78da4f4d041b3bc14bc5ba519a5ba0c32f128:"172326253000000000000000","6f0edd23bcd85f6015f9289c28841fe04c83efeb":"19100000000000000000",a8a43c009100616cb4ae4e033f1fc5d7e0b6f152:"3939015000000000000000","7081fa6baad6cfb7f51b2cca16fb8970991a64ba":"233953000000000000000","9de7386dde401ce4c67b71b6553f8aa34ea5a17d":"60000000000000000000","54ec7300b81ac84333ed1b033cd5d7a33972e234":"200000000000000000000","67a80e0190721f94390d6802729dd12c31a895ad":"1999964000000000000000","3a4297da3c555e46c073669d0478fce75f2f790e":"1969606000000000000000",c2e0584a71348cc314b73b2029b6230b92dbb116:"2000000000000000000000","0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44":"4000000000000000000000","544b5b351d1bc82e9297439948cf4861dac9ae11":"22000000000000000000000","3ae62bd271a760637fad79c31c94ff62b4cd12f7":"2000000000000000000000","0d8023929d917234ae40512b1aabb5e8a4512771":"148000000000000000000","2858acacaf21ea81cab7598fdbd86b452e9e8e15":"666000000000000000000",c033b1325a0af45472c25527853b1f1c21fa35de:"2000000000000000000000",bbf85aaaa683738f073baef44ac9dc34c4c779ea:"2000000000000000000000","6ae57f27917c562a132a4d1bf7ec0ac785832926":"6000000000000000000000","88e6f9b247f988f6c0fc14c56f1de53ec69d43cc":"100000000000000000000",b72c2a011c0df50fbb6e28b20ae1aad217886790:"4000000000000000000000","161caf5a972ace8379a6d0a04ae6e163fe21df2b":"100000000000000000000000","2a63590efe9986c3fee09b0a0a338b15bed91f21":"6458400000000000000000","50e1c8ec98415bef442618708799437b86e6c205":"6000000000000000000000","33f4a6471eb1bca6a9f85b3b4872e10755c82be1":"2000000000000000000000","9c49deff47085fc09704caa2dca8c287a9a137da":"8000000000000000000000",e1173a247d29d8238df0922f4df25a05f2af77c3:"40007051000000000000000","51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c":"310000000000000000000",ecaf3350b7ce144d068b186010852c84dd0ce0f0:"2000000000000000000000","72393d37b451effb9e1ff3b8552712e2a970d8c2":"985000000000000000000","1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b":"2000000000000000000000",b8ab39805bd821184f6cbd3d2473347b12bf175c:"118200000000000000000",c55a6b4761fd11e8c85f15174d74767cd8bd9a68:"133700000000000000000","99d1b585965f406a42a49a1ca70f769e765a3f98":"16700000000000000000000","9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536":"320000000000000000000","7fef8c38779fb307ec6f044bebe47f3cfae796f1":"168561000000000000000","322d6f9a140d213f4c80cd051afe25c620bf4c7d":"20000000000000000000","3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a":"499970000000000000000","5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e":"9200000000000000000000","6e84c2fd18d8095714a96817189ca21cca62bab1":"340935000000000000000",a5bad86509fbe0e0e3c0e93f6d381f1af6e9d481:"6000000000000000000000","3954bdfe0bf587c695a305d9244c3d5bdddac9bb":"19187461000000000000000","63f0e5a752f79f67124eed633ad3fd2705a397d4":"3940000000000000000000","33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d":"432500000000000000000","68027d19558ed7339a08aee8de3559be063ec2ea":"2000000000000000000000","96f0462ae6f8b96088f7e9c68c74b9d8ad34b347":"1790000000000000000000",f1f391ca92808817b755a8b8f4e2ca08d1fd1108:"6000000000000000000000","7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06":"99999000000000000000",e9b9a2747510e310241d2ece98f56b3301d757e0:"2000000000000000000000","2100381d60a5b54adc09d19683a8f6d5bb4bfbcb":"10000000000000000000000","7495ae78c0d90261e2140ef2063104731a60d1ed":"34250000000000000000",dc911cf7dc5dd0813656670528e9338e67034786:"2000000000000000000000","262aed4bc0f4a4b2c6fb35793e835a49189cdfec":"10000000000000000000000","9ee93f339e6726ec65eea44f8a4bfe10da3d3282":"2000000000000000000000",a3a57b0716132804d60aac281197ff2b3d237b01:"1400000000000000000000",c799e34e88ff88be7de28e15e4f2a63d0b33c4cb:"200000000000000000000",c7506c1019121ff08a2c8c1591a65eb4bdfb4a3f:"600000000000000000000","795ebc2626fc39b0c86294e0e837dcf523553090":"1000000000000000000000","441aca82631324acbfa2468bda325bbd78477bbf":"6000000000000000000000","9f271d285500d73846b18f733e25dd8b4f5d4a8b":"722000000000000000000",d77892e2273b235d7689e430e7aeed9cbce8a1f3:"2000000000000000000000","4f8972838f70c903c9b6c6c46162e99d6216d451":"4610000000000000000000","4c85ed362f24f6b9f04cdfccd022ae535147cbb9":"1500000000000000000000","3807eff43aa97c76910a19752dd715ee0182d94e":"250190000000000000000","3a9e5441d44b243be55b75027a1ceb9eacf50df2":"1000000000000000000000","3deae43327913f62808faa1b6276a2bd6368ead9":"2000000000000000000000",c270456885342b640b4cfc1b520e1a544ee0d571:"1820000000000000000000","77798f201257b9c35204957057b54674aefa51df":"149000000000000000000","225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6":"2000000000000000000000","78df2681d6d602e22142d54116dea15d454957aa":"298000000000000000000","283396ce3cac398bcbe7227f323e78ff96d08767":"400000000000000000000","747ff7943b71dc4dcdb1668078f83dd7cc4520c2":"60000000000000000000",a4ed11b072d89fb136759fc69b428c48aa5d4ced:"262800000000000000000",cc043c4388d345f884c6855e71142a9f41fd6935:"20000000000000000000",ab14d221e33d544629198cd096ed63dfa28d9f47:"6000000000000000000000","251e6838f7cec5b383c1d90146341274daf8e502":"147510000000000000000","36a0e61e1be47fa87e30d32888ee0330901ca991":"20000000000000000000",bcfc98e5c82b6adb180a3fcb120b9a7690c86a3f:"1970000000000000000000","18a6d2fc52be73084023c91802f05bc24a4be09f":"2000000000000000000000","80591a42179f34e64d9df75dcd463b28686f5574":"20000000000000000000000","881230047c211d2d5b00d8de4c5139de5e3227c7":"10000000000000000000000","9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d":"140800000000000000000",a01fd1906a908506dedae1e208128872b56ee792:"3000000000000000000000","1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8":"2000000000000000000000","6add932193cd38494aa3f03aeccc4b7ab7fabca2":"89600000000000000000","2aaa35274d742546670b7426264521032af4f4c3":"10000000000000000000000","67b8a6e90fdf0a1cac441793301e8750a9fa7957":"895000000000000000000","5b5be0d8c67276baabd8edb30d48ea75640b8b29":"824480000000000000000","28d7e5866f1d85fd1ceb32bfbe1dfc36db434566":"7199000000000000000000","98e3e90b28fccaee828779b8d40a5568c4116e21":"40000000000000000000","2dd578f7407dfbd548d05e95ccc39c485429626a":"4200000000000000000000","8ca6989746b06e32e2487461b1ce996a273acfd7":"20000000000000000000",a6f93307f8bce03195fece872043e8a03f7bd11a:"2886000000000000000000",efbd52f97da5fd3a673a46cbf330447b7e8aad5c:"100033000000000000000","52bdd9af5978850bc24110718b3723759b437e59":"1730000000000000000000","6e073b66d1b8c66744d88096a8dd99ec7e0228da":"4000000000000000000000",a29d661a6376f66d0b74e2fe9d8f26c0247ec84c:"4117300000000000000000","7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018":"3000000000000000000000","2eca6a3c5d9f449d0956bd43fa7b4d7be8435958":"2000020000000000000000",f59f9f02bbc98efe097eabb78210979021898bfd:"9999800000000000000000","90e300ac71451e401f887f6e7728851647a80e07":"400000000000000000000","05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db":"910000000000000000000",e54102534de8f23effb093b31242ad3b233facfd:"4000000000000000000000",c127aab59065a28644a56ba3f15e2eac13da2995:"600000000000000000000",ed60c4ab6e540206317e35947a63a9ca6b03e2cb:"57275000000000000000",d855b03ccb029a7747b1f07303e0a664793539c8:"2000000000000000000000","1178501ff94add1c5881fe886136f6dfdbe61a94":"158000000000000000000",f447108b98df64b57e871033885c1ad71db1a3f9:"6916709000000000000000",deee2689fa9006b59cf285237de53b3a7fd01438:"450034000000000000000","7f01dc7c3747ca608f983dfc8c9b39e755a3b914":"206980000000000000000","9edeac4c026b93054dc5b1d6610c6f3960f2ad73":"1200000000000000000000",e3cffe239c64e7e20388e622117391301b298696:"500000000000000000000",ebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda:"2000000000000000000000","38c10b90c859cbb7815692f99dae520ab5febf5e":"13169000000000000000000","23f9ecf3e5dddca38815d3e59ed34b5b90b4a353":"204608000000000000000",d7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4:"1000000000000000000000","9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231":"2000000000000000000000","8b9577920053b1a00189304d888010d9ef2cb4bf":"500000000000000000000",fcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c:"8000000000000000000000","01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8":"600000000000000000000",abde147b2af789eaa586547e66c4fa2664d328a4:"247545000000000000000","64042ba68b12d4c151651ca2813b7352bd56f08e":"600000000000000000000",dccca42045ec3e16508b603fd936e7fd7de5f36a:"19700000000000000000",e77a89bd45dc04eeb4e41d7b596b707e6e51e74c:"12000000000000000000000",f77c7b845149efba19e261bc7c75157908afa990:"2000000000000000000000",fa5201fe1342af11307b9142a041243ca92e2f09:"152150000000000000000000","40df495ecf3f8b4cef2a6c189957248fe884bc2b":"12000000000000000000000","3d79a853d71be0621b44e29759656ca075fdf409":"2000000000000000000000","6de02f2dd67efdb7393402fa9eaacbcf589d2e56":"1182000000000000000000","729aad4627744e53f5d66309aa74448b3acdf46f":"2000000000000000000000","4e4318f5e13e824a54edfe30a7ed4f26cd3da504":"2000000000000000000000",c6a286e065c85f3af74812ed8bd3a8ce5d25e21d:"18200000000000000000",fd686de53fa97f99639e2568549720bc588c9efc:"1969606000000000000000","06b0ff834073cce1cbc9ea557ea87b605963e8b4":"300000000000000000000","72b5633fe477fe542e742facfd690c137854f216":"1670000000000000000000","8bf373d076814cbc57e1c6d16a82c5be13c73d37":"200000000000000000000",cf264e6925130906c4d7c18591aa41b2a67f6f58:"2000000000000000000000","0ea2a210312b3e867ee0d1cc682ce1d666f18ed5":"10000000000000000000000",d02afecf8e2ec2b62ac8ad204161fd1fae771d0e:"2000000000000000000000",e6b20f980ad853ad04cbfc887ce6601c6be0b24c:"4000000000000000000000","4280a58f8bb10b9440de94f42b4f592120820191":"2000000000000000000000",a914cdb571bfd93d64da66a4e108ea134e50d000:"1430143000000000000000","60864236930d04d8402b5dcbeb807f3caf611ea2":"4000000000000000000000",f9dd239008182fb519fb30eedd2093fed1639be8:"500000000000000000000","18e53243981aabc8767da10c73449f1391560eaa":"6000000000000000000000",c3a9226ae275df2cab312b911040634a9c9c9ef6:"4000000000000000000000","4fcc19ea9f4c57dcbce893193cfb166aa914edc5":"7001380000000000000000",c1e1409ca52c25435134d006c2a6a8542dfb7273:"34380000000000000000","981ddf0404e4d22dda556a0726f00b2d98ab9569":"999972000000000000000",e5bcc88c3b256f6ed5fe550e4a18198b943356ad:"2000000000000000000000","74a17f064b344e84db6365da9591ff1628257643":"20000000000000000000","2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d":"2000000000000000000000","8d04a5ebfb5db409db0617c9fa5631c192861f4a":"970000000000000000000",f18b14cbf6694336d0fe12ac1f25df2da0c05dbb:"3999800000000000000000","56ac20d63bd803595cec036da7ed1dc66e0a9e07":"63927000000000000000","92c94c2820dfcf7156e6f13088ece7958b3676fd":"95500000000000000000","968dea60df3e09ae3c8d3505e9c080454be0e819":"6000000000000000000000","9268d62646563611dc3b832a30aa2394c64613e3":"2000000000000000000000","5a192b964afd80773e5f5eda6a56f14e25e0c6f3":"500000000000000000000",df8d48b1eb07b3c217790e6c2df04dc319e7e848:"500000000000000000000","7f61fa6cf5f898b440dac5abd8600d6d691fdef9":"280000000000000000000","929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad":"2000000000000000000000","9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0":"2000000000000000000000",bf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb:"1580000000000000000000","46aa501870677e7f0a504876b4e8801a0ad01c46":"800000000000000000000","8f473d0ab876ddaa15608621d7013e6ff714b675":"470400000000000000000","02290fb5f9a517f82845acdeca0fc846039be233":"2000000000000000000000","8a5831282ce14a657a730dc18826f7f9b99db968":"4330268000000000000000","0328510c09dbcd85194a98d67c33ac49f2f94d60":"11000000000000000000000",cf883a20329667ea226a1e3c765dbb6bab32219f:"3038972000000000000000","2615100ea7e25bba9bca746058afbbb4ffbe4244":"500000000000000000000",b115ee3ab7641e1aa6d000e41bfc1ec7210c2f32:"13000000000000000000000","5cfa8d568575658ca4c1a593ac4c5d0e44c60745":"291000000000000000000",d3c24d4b3a5e0ff8a4622d518edd73f16ab28610:"20000000000000000000",a639acd96b31ba53b0d08763229e1f06fd105e9d:"8000000000000000000000",ffa4aff1a37f984b0a67272149273ae9bd41e3bc:"10000000000000000000000",cf684dfb8304729355b58315e8019b1aa2ad1bac:"432500000000000000000","5797b60fd2894ab3c2f4aede86daf2e788d745ad":"6000000000000000000000",a6a0de421ae54f6d17281308f5646d2f39f7775d:"2000000000000000000000","08504f05643fab5919f5eea55925d7a3ed7d807a":"20000000000000000000","7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2":"2000000000000000000000","1078d7f61b0e56c74ee6635b2e1819ef1e3d8785":"1000000000000000000000","6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137":"14172200000000000000000","6a2e86469a5bf37cee82e88b4c3863895d28fcaf":"519000000000000000000","197672fd39d6f246ce66a790d13aa922d70ea109":"1000000000000000000000","8009a7cbd192b3aed4adb983d5284552c16c7451":"4000000000000000000000",f6c3c48a1ac0a34799f04db86ec7a975fe7768f3:"1970000000000000000000","16be75e98a995a395222d00bd79ff4b6e638e191":"36000000000000000000000","6c05e34e5ef2f42ed09deff1026cd66bcb6960bb":"2000000000000000000000","5d6ae8cbd6b3393c22d16254100d0238e808147c":"719992000000000000000","1a376e1b2d2f590769bb858d4575320d4e149970":"4841200000000000000000",f6ead67dbf5b7eb13358e10f36189d53e643cfcf:"40000000000000000000000","467d5988249a68614716659840ed0ae6f6f457bc":"387500000000000000000",aa960e10c52391c54e15387cc67af827b5316dcc:"2000000000000000000000","483ba99034e900e3aedf61499d3b2bce39beb7aa":"985000000000000000000","86f23e9c0aafc78b9c404dcd60339a925bffa266":"400000000000000000000",d05a447c911dbb275bfb2e5a37e5a703a56f9997:"200000000000000000000",edb71ec41bda7dce86e766e6e8c3e9907723a69b:"20000000000000000000",f86a3ea8071f7095c7db8a05ae507a8929dbb876:"336000000000000000000","323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6":"13790000000000000000000","936f3813f5f6a13b8e4ffec83fe7f826186a71cd":"520000000000000000000","6db72bfd43fef465ca5632b45aab7261404e13bf":"2000000000000000000000","9bb76204186af2f63be79168601687fc9bad661f":"300000000000000000000","28ab165ffb69eda0c549ae38e9826f5f7f92f853":"1296890000000000000000",c73e2112282215dc0762f32b7e807dcd1a7aae3e:"6900000000000000000000",f8086e42661ea929d2dda1ab6c748ce3055d111e:"1000000000000000000000","4db21284bcd4f787a7556500d6d7d8f36623cf35":"1939806000000000000000",c48651c1d9c16bff4c9554886c3f3f26431f6f68:"658000000000000000000","9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7":"499971000000000000000","560da37e956d862f81a75fd580a7135c1b246352":"10000000000000000000000","4b60a3e253bf38c8d5662010bb93a473c965c3e5":"1490000000000000000000","64e02abb016cc23a2934f6bcddb681905021d563":"1000000000000000000000",ac2c8e09d06493a63858437bd20be01962450365:"1910000000000000000000","9bf9b3b2f23cf461eb591f28340bc719931c8364":"1000000000000000000000","9b5c39f7e0ac168c8ed0ed340477117d1b682ee9":"98000000000000000000",f75bb39c799779ebc04a336d260da63146ed98d0:"25000000000000000000",a7966c489f4c748a7ae980aa27a574251767caf9:"3000000000000000000000",ea53c954f4ed97fd4810111bdab69ef981ef25b9:"17300000000000000000000","03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c":"2000000000000000000000","3e63ce3b24ca2865b4c5a687b7aea3597ef6e548":"2000000000000000000000","500c902958f6421594d1b6ded712490d52ed6c44":"1970000000000000000000","6f44ca09f0c6a8294cbd519cdc594ad42c67579f":"50000000000000000000","3616fb46c81578c9c8eb4d3bf880451a88379d7d":"200000000000000000000","57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f":"100000000000000000000","1cebf0985d7f680aaa915c44cc62edb49eab269e":"1000000000000000000000",c0cbf6032fa39e7c46ff778a94f7d445fe22cf30:"310000000000000000000",c58b9cc61dedbb98c33f224d271f0e228b583433:"3880000000000000000000",e9c6dfae97f7099fc5f4e94b784db802923a1419:"48800000000000000000","9bacd3d40f3b82ac91a264d9d88d908eac8664b9":"20000000000000000000000","63d80048877596e0c28489e650cd4ac180096a49":"280000000000000000000",e6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc:"200000000000000000000",d418870bc2e4fa7b8a6121ae0872d55247b62501:"1580000000000000000000",e2f9383d5810ea7b43182b8704b62b27f5925d39:"400000000000000000000",bd5e473abce8f97a6932f77c2facaf9cc0a00514:"1117350000000000000000","2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa":"3000000000000000000000","9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb":"1126900000000000000000","6e96faeda3054302c45f58f161324c99a3eebb62":"20000000000000000000",ef93818f684db0c3675ec81332b3183ecc28a495:"1550000000000000000000","2659facb1e83436553b5b42989adb8075f9953ed":"29356000000000000000",c4ffadaaf2823fbea7bff702021bffc4853eb5c9:"42233000000000000000",e9864c1afc8eaad37f3ba56fcb7477cc622009b7:"79000000000000000000","87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77":"200400000000000000000",c043f2452dcb9602ef62bd360e033dd23971fe84:"2000000000000000000000","0fdd65402395df9bd19fee4507ef5345f745104c":"5000000000000000000000","939c4313d2280edf5e071bced846063f0a975d54":"120000000000000000000000",b28245037cb192f75785cb86cbfe7c930da258b0:"16000000000000000000000",a80cb1738bac08d4f9c08b4deff515545fa8584f:"500000000000000000000","62971bf2634cee0be3c9890f51a56099dbb9519b":"656000000000000000000",f2efe96560c9d97b72bd36447843885c1d90c231:"2000000000000000000000","0e390f44053ddfcef0d608b35e4d9c2cbe9871bb":"1970000000000000000000","61d101a033ee0e2ebb3100ede766df1ad0244954":"500000000000000000000","6785513cf732e47e87670770b5419be10cd1fc74":"2000000000000000000000","167699f48a78c615512515739958993312574f07":"39000000000000000000","68ec79d5be7155716c40941c79d78d17de9ef803":"500600000000000000000",a0e8ba661b48154cf843d4c2a5c0f792d528ee29:"400000000000000000000","1a201b4327cea7f399046246a3c87e6e03a3cda8":"1000000000000000000000",f60f62d73937953fef35169e11d872d2ea317eec:"5348000000000000000000",c0c04d0106810e3ec0e54a19f2ab8597e69a573d:"50000000000000000000",ef47cf073e36f271d522d7fa4e7120ad5007a0bc:"2500000000000000000000",a44fe800d96fcad73b7170d0f610cb8c0682d6ce:"4000000000000000000000","010f4a98dfa1d9799bf5c796fb550efbe7ecd877":"8023366000000000000000","708fa11fe33d85ad1befcbae3818acb71f6a7d7e":"18200000000000000000",b38c4e537b5df930d65a74d043831d6b485bbde4:"400000000000000000000","250a69430776f6347703f9529783955a6197b682":"1940000000000000000000","2d35a9df62757f7ffad1049afb06ca4afc464c51":"20000000000000000000","6aff1466c2623675e3cb0e75e423d37a25e442eb":"1730000000000000000000",fc15cb99a8d1030b12770add033a79ee0d0c908c:"350056000000000000000",e784dcc873aa8c1513ec26ff36bc92eac6d4c968:"200000000000000000000",b1c328fb98f2f19ab6646f0a7c8c566fda5a8540:"2500000000000000000000","247a0a11c57f0383b949de540b66dee68604b0a1":"1069600000000000000000","1af60343360e0b2d75255210375720df21db5c7d":"1000000000000000000000","8794bf47d54540ece5c72237a1ffb511ddb74762":"2000000000000000000000",e76d945aa89df1e457aa342b31028a5e9130b2ce:"1015200000000000000000",a30e0acb534c9b3084e8501da090b4eb16a2c0cd:"2000000000000000000000","7099d12f6ec656899b049a7657065d62996892c8":"400000000000000000000","7be7f2456971883b9a8dbe4c91dec08ac34e8862":"3000000000000000000000","42746aeea14f27beff0c0da64253f1e7971890a0":"1550000000000000000000","736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0":"313950000000000000000","822edff636563a6106e52e9a2598f7e6d0ef2782":"36099000000000000000","03c647a9f929b0781fe9ae01caa3e183e876777e":"445800000000000000000","63612e7862c27b587cfb6daf9912cb051f030a9f":"43458000000000000000",d46bae61b027e5bb422e83a3f9c93f3c8fc77d27:"2000000000000000000000","5f23ba1f37a96c45bc490259538a54c28ba3b0d5":"1200000000000000000000",d41d7fb49fe701baac257170426cc9b38ca3a9b2:"176000000000000000000","1ebacb7844fdc322f805904fbf1962802db1537c":"10000000000000000000000","9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23":"240000000000000000000",e4ca0a5238564dfc91e8bf22bade2901619a1cd4:"1000000000000000000000","1ad72d20a76e7fcc6b764058f48d417d496fa6cd":"2000000000000000000000",d3bc730937fa75d8452616ad1ef1fe7fffe0d0e7:"83363000000000000000",eac1482826acb6111e19d340a45fb851576bed60:"32177000000000000000","01e40521122530d9ac91113c06a0190b6d63850b":"1337000000000000000000","9e20e5fd361eabcf63891f5b87b09268b8eb3793":"100000000000000000000","69ff429074cb9b6c63bc914284bce5f0c8fbf7d0":"500000000000000000000","0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e":"200000000000000000000","5b4ea16db6809b0352d4b6e81c3913f76a51bb32":"400000000000000000000",d8fe088fffce948f5137ee23b01d959e84ac4223:"227942000000000000000","7e4e9409704121d1d77997026ff06ea9b19a8b90":"2602600000000000000000","96b434fe0657e42acc8212b6865139dede15979c":"4000000000000000000000","22f004df8de9e6ebf523ccace457accb26f97281":"10000000000000000000000",d8f9240c55cff035523c6d5bd300d370dc8f0c95:"285000000000000000000","9d9e57fde30e5068c03e49848edce343b7028358":"1730000000000000000000","317cf4a23cb191cdc56312c29d15e210b3b9b784":"144000000000000000000","79f08e01ce0988e63c7f8f2908fade43c7f9f5c9":"18200000000000000000","04e5f5bc7c923fd1e31735e72ef968fd67110c6e":"1611000000000000000000","1ec4ec4b77bf19d091a868e6f49154180541f90e":"2000000000000000000000","8737dae671823a8d5917e0157ace9c43468d946b":"1999944000000000000000",f998ca3411730a6cd10e7455b0410fb0f6d3ff80:"2000000000000000000000","6e2eab85dc89fe29dc0aa1853247dab43a523d56":"80000000000000000000","72c083beadbdc227c5fb43881597e32e83c26056":"20000000000000000000000","5902e44af769a87246a21e079c08bf36b06efeb3":"1000000000000000000000",cc2d04f0a4017189b340ca77198641dcf6456b91:"3940000000000000000000",bde4c73f969b89e9ceae66a2b51844480e038e9a:"1000000000000000000000",adff0d1d0b97471e76d789d2e49c8a74f9bd54ff:"1880000000000000000000","397cdb8c80c67950b18d654229610e93bfa6ee1a":"1172938000000000000000",a3e051fb744aa3410c3b88f899f5d57f168df12d:"2955000000000000000000","810db25675f45ea4c7f3177f37ce29e22d67999c":"200000000000000000000","1e13ec51142cebb7a26083412c3ce35144ba56a1":"5000000000000000000000","25bdfa3ee26f3849617b230062588a97e3cae701":"1000008000000000000000",ae538c73c5b38d8d584d7ebdadefb15cabe48357:"999000000000000000000",a2ecce2c49f72a0995a0bda57aacf1e9f001e22a:"4000000000000000000000","7e24fbdad290175eb2df6d180a19b9a9f41370be":"1000000000000000000000",e8cc43bc4f8acf39bff04ebfbf42aac06a328470:"400000000000000000000",c2779771f0536d79a8708f6931abc44b3035e999:"20002000000000000000000",ab27ba78c8e5e3daef31ad05aef0ff0325721e08:"468000000000000000000","563cb8803c1d32a25b27b64114852bd04d9c20cd":"204400000000000000000","08d4267feb15da9700f7ccc3c84a8918bf17cfde":"1790000000000000000000",d1778c13fbd968bc083cb7d1024ffe1f49d02caa:"4020000000000000000000","1796bcc97b8abc717f4b4a7c6b1036ea2182639f":"355242000000000000000",beecd6af900c8b064afcc6073f2d85d59af11956:"2000000000000000000000","045ed7f6d9ee9f252e073268db022c6326adfc5b":"100000000000000000000",b88a37c27f78a617d5c091b7d5b73a3761e65f2a:"2000000000000000000000","72fb49c29d23a18950c4b2dc0ddf410f532d6f53":"2000000000000000000000","6ecaefa6fc3ee534626db02c6f85a0c395571e77":"600000000000000000000",d1811c55976980f083901d8a0db269222dfb5cfe:"1550000000000000000000","98855c7dfbee335344904a12c40c731795b13a54":"1069600000000000000000","92a898d46f19719c38126a8a3c27867ae2cee596":"2000000000000000000000",ca428863a5ca30369892d612183ef9fb1a04bcea:"1520000000000000000000","797427e3dbf0feae7a2506f12df1dc40326e8505":"1000000000000000000000","3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc":"1970000000000000000000","28818e18b610001321b31df6fe7d2815cdadc9f5":"1000000000000000000000","5f3e1e6739b0c62200e00a003691d9efb238d89f":"3000000000000000000000",d9d370fec63576ab15b318bf9e58364dc2a3552a:"100000000000000000000",b223bf1fbf80485ca2b5567d98db7bc3534dd669:"4000000000000000000000","7b27d0d1f3dd3c140294d0488b783ebf4015277d":"400000000000000000000","7930c2d9cbfa87f510f8f98777ff8a8448ca5629":"199955000000000000000","820c19291196505b65059d9914b7090be1db87de":"140000000000000000000",e545ee84ea48e564161e9482d59bcf406a602ca2:"1850000000000000000000",af4cf41785161f571d0ca69c94f8021f41294eca:"9850000000000000000000","7a4f9b850690c7c94600dbee0ca4b0a411e9c221":"1910000000000000000000",ddab6b51a9030b40fb95cf0b748a059c2417bec7:"2000000000000000000000","315ef2da620fd330d12ee55de5f329a696e0a968":"150000000000000000000","4db1c43a0f834d7d0478b8960767ec1ac44c9aeb":"872870000000000000000","2fef81478a4b2e8098db5ff387ba2153f4e22b79":"999000000000000000000","6c6aa0d30b64721990b9504a863fa0bfb5e57da7":"2700000000000000000000","33380c6fff5acd2651309629db9a71bf3f20c5ba":"16100000000000000000000","4eebf1205d0cc20cee6c7f8ff3115f56d48fba26":"19400000000000000000","03cc9d2d21f86b84ac8ceaf971dba78a90e62570":"1610000000000000000000","728f9ab080157db3073156dbca1a169ef3179407":"500000000000000000000","30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7":"143731500000000000000000",f617b967b9bd485f7695d2ef51fb7792d898f500:"500000000000000000000",c0cbad3ccdf654da22cbcf5c786597ca1955c115:"2000000000000000000000","80522ddf944ec52e27d724ed4c93e1f7be6083d6":"200000000000000000000","4e90ccb13258acaa9f4febc0a34292f95991e230":"15800000000000000000",ff207308ced238a6c01ad0213ca9eb4465d42590:"1999944000000000000000","35f2949cf78bc219bb4f01907cf3b4b3d3865482":"289800000000000000000","68f525921dc11c329b754fbf3e529fc723c834cd":"1610000000000000000000","81139bfdcca656c430203f72958c543b6580d40c":"2000000000000000000000","9d511543b3d9dc60d47f09d49d01b6c498d82078":"11245000000000000000000","084d103254759b343cb2b9c2d8ff9e1ac5f14596":"7600000000000000000000",b323dcbf2eddc5382ee4bbbb201ca3931be8b438:"2000000000000000000000","349d2c918fd09e2807318e66ce432909176bd50b":"1120000000000000000000",b535f8db879fc67fec58824a5cbe6e5498aba692:"1910000000000000000000","824074312806da4748434266ee002140e3819ac2":"1507000000000000000000",e8ef100d7ce0895832f2678df72d4acf8c28b8e3:"500038000000000000000","84af1b157342d54368260d17876230a534b54b0e":"985000000000000000000","419a71a36c11d105e0f2aef5a3e598078e85c80b":"5000000000000000000000","55af092f94ba6a79918b0cf939eab3f01b3f51c7":"149940000000000000000","35a549e8fd6c368d6dcca6d2e7d18e4db95f5284":"499938000000000000000",f0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58:"2000000000000000000000",f4b759cc8a1c75f80849ebbcda878dc8f0d66de4:"400000000000000000000","21846f2fdf5a41ed8df36e5ed8544df75988ece3":"1999944000000000000000","229ff80bf5708009a9f739e0f8b560914016d5a6":"333333000000000000000",da505537537ffb33c415fec64e69bae090c5f60f:"160000000000000000000",b91d9e916cd40d193db60e79202778a0087716fc:"404800000000000000000",bb6823a1bd819f13515538264a2de052b4442208:"25610000000000000000","459393d63a063ef3721e16bd9fde45ee9dbd77fb":"1968818000000000000000","95f62d0243ede61dad9a3165f53905270d54e242":"1610000000000000000000",b0bb29a861ea1d424d45acd4bfc492fb8ed809b7:"80000000000000000000","5e74ed80e9655788e1bb269752319667fe754e5a":"56000000000000000000",a276b058cb98d88beedb67e543506c9a0d9470d8:"2668652000000000000000","8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70":"2000000000000000000000",e5102c3b711b810344197419b1cd8a7059f13e32:"299999000000000000000",c32038ca52aee19745be5c31fcdc54148bb2c4d0:"49984000000000000000","13e321728c9c57628058e93fc866a032dd0bda90":"714580000000000000000",c2bae4a233c2d85724f0dabebda0249d833e37d3:"5000000000000000000000","10d32416722ca4e648630548ead91edd79c06aff":"100000000000000000000",d5f07552b5c693c20067b378b809cee853b8f136:"505540000000000000000","8668af868a1e98885f937f2615ded6751804eb2d":"20000000000000000000","139d3531c9922ad56269f6309aa789fb2485f98c":"4000000000000000000000","1d29c7aab42b2048d2b25225d498dba67a03fbb2":"200000000000000000000",d35075ca61fe59d123969c36a82d1ab2d918aa38:"2674000000000000000000",d6fc0446c6a8d40ae3551db7e701d1fa876e4a49:"2000000000000000000000",fccd0d1ecee27addea95f6857aeec8c7a04b28ee:"10000000000000000000000",c12cfb7b3df70fceca0ede263500e27873f8ed16:"1000000000000000000000",d0db456178206f5c4430fe005063903c3d7a49a7:"706245000000000000000","73cf80ae9688e1580e68e782cd0811f7aa494d2c":"7760000000000000000000",d60651e393783423e5cc1bc5f889e44ef7ea243e:"398800000000000000000","048a8970ea4145c64d5517b8de5b46d0595aad06":"20000000000000000000000",dd9b485a3b1cd33a6a9c62f1e5bee92701856d25:"225073000000000000000","5b287c7e734299e727626f93fb1187a60d5057fe":"101230000000000000000","635c00fdf035bca15fa3610df3384e0fb79068b1":"9000000000000000000000","630a913a9031c9492abd4c41dbb15054cfec4416":"5688000000000000000000",af3614dcb68a36e45a4e911e62796247222d595b:"2259800000000000000000","335e22025b7a77c3a074c78b8e3dfe071341946e":"10178744000000000000000",f0e1dfa42adeac2f17f6fdf584c94862fd563393:"500000000000000000000","1a9e702f385dcd105e8b9fa428eea21c57ff528a":"1400000000000000000000","8ce4949d8a16542d423c17984e6739fa72ceb177":"24999975000000000000000","5f29c9de765dde25852af07d33f2ce468fd20982":"2000000000000000000000",dbf5f061a0f48e5e69618739a77d2ec19768d201:"152000000000000000000",b247cf9c72ec482af3eaa759658f793d670a570c:"912000000000000000000","99f4147ccc6bcb80cc842e69f6d00e30fa4133d9":"400000000000000000000",ba6d31b9a261d640b5dea51ef2162c3109f1eba8:"5000000000000000000000",f05ba8d7b68539d933300bc9289c3d9474d0419e:"126400000000000000000","682e96276f518d31d7e56e30dfb009c1218201bd":"20000000000000000000","0927220492194b2eda9fc4bbe38f25d681dfd36c":"6000000000000000000000",a3c33afc8cb4704e23153de2049d35ae71332472:"799600000000000000000","05c736d365aa37b5c0be9c12c8ad5cd903c32cf9":"6002000000000000000000",d8eef4cf4beb01ee20d111748b61cb4d3f641a01:"2740000000000000000000","16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3":"1000000000000000000000",d79db5ab43621a7a3da795e58929f3dd25af67d9:"1999944000000000000000","28efae6356509edface89fc61a7fdcdb39eea8e5":"5348000000000000000000",c55005a6c37e8ca7e543ce259973a3cace961a4a:"2000000000000000000000",ab3d86bc82927e0cd421d146e07f919327cdf6f9:"1910000000000000000000",b74ed2666001c16333cf7af59e4a3d4860363b9c:"193600000000000000000","1899f69f653b05a5a6e81f480711d09bbf97588c":"1955000000000000000000","27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c":"100000000000000000000",cd1ed263fbf6f6f7b48aef8f733d329d4382c7c7:"18500000000000000000",d97fe6f53f2a58f6d76d752adf74a8a2c18e9074:"309990000000000000000","80da2fdda29a9e27f9e115975e69ae9cfbf3f27e":"200000000000000000000","09146ea3885176f07782e1fe30dce3ce24c49e1f":"20000000000000000000","393ff4255e5c658f2e7f10ecbd292572671bc2d2":"2000000000000000000000",a390ca122b8501ee3e5e07a8ca4b419f7e4dae15:"100000000000000000000","6d9193996b194617211106d1635eb26cc4b66c6c":"399640000000000000000","999c49c174ca13bc836c1e0a92bff48b271543ca":"3280000000000000000000","7421ce5be381738ddc83f02621974ff0686c79b8":"1632000000000000000000","6be9030ee6e2fbc491aca3de4022d301772b7b7d":"26740000000000000000","81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7":"4000000000000000000000","8bc1ff8714828bf286ff7e8a7709106548ed1b18":"10000000000000000000000",a0aadbd9509722705f6d2358a5c79f37970f00f6:"200000000000000000000","3d881433f04a7d0d27f84944e08a512da3555287":"1200000000000000000000",cc1d6ead01aada3e8dc7b95dca25df26eefa639d:"2000000000000000000000","35106ba94e8563d4b3cb3c5c692c10e604b7ced8":"2000000000000000000000","4d8697af0fbf2ca36e8768f4af22133570685a60":"20000000000000000000","1afcc585896cd0ede129ee2de5c19ea811540b64":"3231259000000000000000",e5215631b14248d45a255296bed1fbfa0330ff35:"1310000000000000000000",e3878f91ca86053fced5444686a330e09cc388fb:"194000000000000000000","555df19390c16d01298772bae8bc3a1152199cbd":"200000000000000000000",dc3dae59ed0fe18b58511e6fe2fb69b219689423:"100000000000000000000","74648caac748dd135cd91ea14c28e1bd4d7ff6ae":"3100000000000000000000",cf2e2ad635e9861ae95cb9bafcca036b5281f5ce:"35200000000000000000000","14eec09bf03e352bd6ff1b1e876be664ceffd0cf":"20094000000000000000","856e5ab3f64c9ab56b009393b01664fc0324050e":"1790000000000000000000","632b9149d70178a7333634275e82d5953f27967b":"700000000000000000000","2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c":"1000000000000000000000","369ef761195f3a373e24ece6cd22520fe0b9e86e":"534933000000000000000","16afa787fc9f94bdff6976b1a42f430a8bf6fb0f":"2000000000000000000000","1b0b31afff4b6df3653a94d7c87978ae35f34aae":"354600000000000000000",b4d82f2e69943f7de0f5f7743879406fac2e9cec:"40000000000000000000","09d6cefd75b0c4b3f8f1d687a522c96123f1f539":"6000000000000000000000","01577afd4e50890247c9b10d44af73229aec884f":"680000000000000000000",a35606d51220ee7f2146d411582ee4ee4a45596e:"3996800000000000000000","352e77c861696ef96ad54934f894aa8ea35151dd":"1000000000000000000000",b87f5376c2de0b6cc3c179c06087aa473d6b4674:"1337000000000000000000","5b49afcd75447838f6e7ceda8d21777d4fc1c3c0":"4000000000000000000000",b884add88d83dc564ab8e0e02cbdb63919aea844:"2000000000000000000000","5c312a56c784b122099b764d059c21ece95e84ca":"95000000000000000000","4697baaf9ccb603fd30430689d435445e9c98bf5":"199600000000000000000",c625f8c98d27a09a1bcabd5128b1c2a94856af30:"200000000000000000000","19f5caf4c40e6908813c0745b0aea9586d9dd931":"664000000000000000000","1e596a81b357c6f24970cc313df6dbdaabd0d09e":"2000000000000000000000",c1631228efbf2a2e3a4092ee8900c639ed34fbc8:"955000000000000000000","6f6cf20649a9e973177ac67dbadee4ebe5c7bdda":"5080000000000000000000","5fa7bfe043886127d4011d8356a47e947963aca8":"1820000000000000000000","6af8e55969682c715f48ad4fc0fbb67eb59795a3":"2000000000000000000000","122f56122549d168a5c5e267f52662e5c5cce5c8":"185000000000000000000","7713ab8037411c09ba687f6f9364f0d3239fac28":"10000000000000000000000","31ccc616b3118268e75d9ab8996c8858ebd7f3c3":"399924000000000000000","09c88f917e4d6ad473fa12e98ea3c4472a5ed6da":"10000000000000000000000",e796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7:"512200000000000000000",a8285539869d88f8a961533755717d7eb65576ae:"200000000000000000000",d929c65d69d5bbaea59762662ef418bc21ad924a:"1000000000000000000000",f7418aa0e713d248228776b2e7434222ae75e3a5:"2000000000000000000000","7f0b90a1fdd48f27b268feb38382e55ddb50ef0f":"940000000000000000000","34a0431fff5ead927f3c69649616dc6e97945f6f":"400000000000000000000","1b3cb81e51011b549d78bf720b0d924ac763a7c2":"560000000000000000000000","155b3779bb6d56342e2fda817b5b2d81c7f41327":"50200000000000000000",ecd486fc196791b92cf612d348614f9156488b7e:"12000000000000000000000","82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea":"84999000000000000000","06b0c1e37f5a5ec4bbf50840548f9d3ac0288897":"4000098000000000000000",e6d49f86c228f47367a35e886caacb271e539429:"412656000000000000000","704a6eb41ba34f13addde7d2db7df04915c7a221":"1820000000000000000000","745ccf2d819edbbddea8117b5c49ed3c2a066e93":"4000000000000000000000","6d3b7836a2b9d899721a4d237b522385dce8dfcd":"1000070000000000000000","856aa23c82d7215bec8d57f60ad75ef14fa35f44":"20000000000000000000000",ea79057dabef5e64e7b44f7f18648e7e533718d2:"200000000000000000000","9df057cd03a4e27e8e032f857985fd7f01adc8d7":"2000000000000000000000","5f2f07d2d697e8c567fcfdfe020f49f360be2139":"2000000000000000000000","5efbdfe5389999633c26605a5bfc2c1bb5959393":"69200000000000000000","047e87c8f7d1fce3b01353a85862a948ac049f3e":"1490000000000000000000","265383d68b52d034161bfab01ae1b047942fbc32":"21000600000000000000000","760ff3354e0fde938d0fb5b82cef5ba15c3d2916":"10000000000000000000000",bc46d537cf2edd403565bde733b2e34b215001bd:"20000000000000000000000",ee58fb3db29070d0130188ce472be0a172b89055:"10021400000000000000000","75abe5270f3a78ce007cf37f8fbc045d489b7bb1":"1999944000000000000000","5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b":"2730000000000000000000","26cfffd052152bb3f957b478d5f98b233a7c2b92":"4000000000000000000000","0a4a011995c681bc999fdd79754e9a324ae3b379":"41350300000000000000000","6fa60df818a5446418b1bbd62826e0b9825e1318":"13200000000000000000000","63d55ad99b9137fd1b20cc2b4f03d42cbaddf334":"400000000000000000000","679b9a109930517e8999099ccf2a914c4c8dd934":"60000000000000000000","3e83544f0082552572c782bee5d218f1ef064a9d":"100076000000000000000","968b14648f018333687cd213fa640aec04ce6323":"1000000000000000000000","427b462ab84e5091f48a46eb0cdc92ddcb26e078":"2000000000000000000000",df8510793eee811c2dab1c93c6f4473f30fbef5b:"1000000000000000000000","362fbcb10662370a068fc2652602a2577937cce6":"200000000000000000000","5d83b21bd2712360436b67a597ee3378db3e7ae4":"2000000000000000000000","5777441c83e03f0be8dd340bde636850847c620b":"10000000000000000000000",c94a585203da7bbafd93e15884e660d4b1ead854:"7000000000000000000000","35a08081799173e001cc5bd46a02406dc95d1787":"10000000000000000000000","21d13f0c4024e967d9470791b50f22de3afecf1b":"4452210000000000000000",fdfd6134c04a8ab7eb16f00643f8fed7daaaecb2:"400000000000000000000",fd812bc69fb170ef57e2327e80affd14f8e4b6d2:"2000000000000000000000","7148aef33261d8031fac3f7182ff35928daf54d9":"4100000000000000000000","0b06390f2437b20ec4a3d3431b3279c6583e5ed7":"194000000000000000000","4909b31998ead414b8fb0e846bd5cbde393935be":"4000000000000000000000",b70dba9391682b4a364e77fe99256301a6c0bf1f:"200000000000000000000","6b83bae7b565244558555bcf4ba8da2011891c17":"2000000000000000000000","70a03549aa6168e97e88a508330a5a0bea74711a":"1337000000000000000000","0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9":"180000000000000000000","2ddf40905769bcc426cb2c2938ffe077e1e89d98":"3000000000000000000000","794b51c39e53d9e762b0613b829a44b472f4fff3":"667965000000000000000",d062588171cf99bbeb58f126b870f9a3728d61ec:"4500000000000000000000","8db185fe1b70a94a6a080e7e23a8bedc4acbf34b":"1400000000000000000000",e73bfeada6f0fd016fbc843ebcf6e370a65be70c:"1970000000000000000000","79ed10cf1f6db48206b50919b9b697081fbdaaf3":"2000000000000000000000","276b0521b0e68b277df0bb32f3fd48326350bfb2":"50000000000000000000","2e439348df8a4277b22a768457d1158e97c40904":"776970000000000000000","6c25327f8dcbb2f45e561e86e35d8850e53ab059":"1103200000000000000000","04d73896cf6593a691972a13a6e4871ff2c42b13":"2000000000000000000000",b10fd2a647102f881f74c9fbc37da632949f2375:"40000000000000000000","615f82365c5101f071e7d2cb6af14f7aad2c16c6":"20000000000000000000","93aa8f92ebfff991fc055e906e651ac768d32bc8":"940000000000000000000","0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2":"1000000000000000000000",ffc9cc3094b041ad0e076f968a0de3b167255866:"432400000000000000000","46531e8b1bde097fdf849d6d119885608a008df7":"200000000000000000000","23cd2598a20e149ead2ad69379576ecedb60e38e":"2000000000000000000000","85ca8bc6da2803d0725f5e1a456c89f9bc774e2f":"600000000000000000000",c0725ec2bdc33a1d826071dea29d62d4385a8c25:"40740000000000000000000","0e4765790352656bc656682c24fc5ef3e76a23c7":"46610000000000000000","2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4":"2760000000000000000000","0ec5308b31282e218fc9e759d4fec5db3708cec4":"1001000000000000000000",bf7701fc6225d5a17815438a8941d21ebc5d059d:"1880000000000000000000",c489c83ffbb0252ac0dbe3521217630e0f491f14:"4000000000000000000000","8eb51774af206b966b8909c45aa6722748802c0c":"500000000000000000000","7b9226d46fe751940bc416a798b69ccf0dfab667":"4200000000000000000000","8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650":"20000000000000000000000","9f19fac8a32437d80ac6837a0bb7841729f4972e":"650100000000000000000","201864a8f784c2277b0b7c9ee734f7b377eab648":"4467000000000000000000",a6101c961e8e1c15798ffcd0e3201d7786ec373a:"6000000000000000000000",d4ff46203efa23064b1caf00516e28704a82a4f8:"1337000000000000000000",aa136b47962bb8b4fb540db4ccf5fdd042ffb8cf:"500038000000000000000","704ae21d762d6e1dde28c235d13104597236db1a":"2000000000000000000000",f17a92e0361dbacecdc5de0d1894955af6a9b606:"2000000000000000000000","8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04":"17844175000000000000000","9ad47fdcf9cd942d28effd5b84115b31a658a13e":"3290000000000000000000",df0d08617bd252a911df8bd41a39b83ddf809673:"10000000000000000000000","4c666b86f1c5ee8ca41285f5bde4f79052081406":"500000000000000000000","88dec5bd3f4eba2d18b8aacefa7b721548c319ba":"1370000000000000000000","9f9fe0c95f10fee87af1af207236c8f3614ef02f":"6000000000000000000000",f7d0d310acea18406138baaabbfe0571e80de85f:"1337000000000000000000","9569c63a9284a805626db3a32e9d236393476151":"1970000000000000000000","5d5c2c1099bbeefb267e74b58880b444d94449e0":"253574000000000000000","8c6ae7a05a1de57582ae2768204276c0ff47ed03":"208000000000000000000000","432d884bd69db1acc0d89c64ade4cb4fc3a88b7a":"2483000000000000000000","672cbca8440a8577097b19aff593a2ad9d28a756":"80000000000000000000","19df9445a81c1b3d804aeaeb6f6e204e4236663f":"37387000000000000000","1cb5f33b4d488936d13e3161da33a1da7df70d1b":"200000000000000000000",df60f18c812a11ed4e2776e7a80ecf5e5305b3d6:"900000000000000000000",c99a9cd6c9c1be3534eecd92ecc22f5c38e9515b:"4821030000000000000000","00c40fe2095423509b9fd9b754323158af2310f3":"0",da4a5f557f3bab390a92f49b9b900af30c46ae80:"10000000000000000000000",f36df02fbd89607347afce2969b9c4236a58a506:"2000000000000000000000",c549df83c6f65eec0f1dc9a0934a5c5f3a50fd88:"2910000000000000000000","9f662e95274121f177566e636d23964cf1fd686f":"2000000000000000000000","5a267331facb262daaecd9dd63a9700c5f5259df":"100000000000000000000","117d9aa3c4d13bee12c7500f09f5dd1c66c46504":"206000000000000000000","1b4d07acd38183a61bb2783d2b7b178dd502ac8d":"200000000000000000000","3c0c3defac9cea7acc319a96c30b8e1fedab4574":"1940000000000000000000",e4dc22ed595bf0a337c01e03cc6be744255fc9e8:"191000000000000000000","8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9":"20000000000000000000000","40e2440ae142c880366a12c6d4102f4b8434b62a":"1000000000000000000000",f9ece022bccd2c92346911e79dd50303c01e0188:"1000000000000000000000",f70328ef97625fe745faa49ee0f9d4aa3b0dfb69:"1000000000000000000000",b6aacb8cb30bab2ae4a2424626e6e12b02d04605:"8000000000000000000000","154459fa2f21318e3434449789d826cdc1570ce5":"2000000000000000000000","684a44c069339d08e19a75668bdba303be855332":"70000000000000000000000","9fe501aa57ead79278937cd6308c5cfa7a5629fe":"50003000000000000000","3e45bd55db9060eced923bb9cb733cb3573fb531":"1640000000000000000000","9c9f3b8a811b21f3ff3fe20fe970051ce66a824f":"1157740000000000000000",e99aece90541cae224b87da673965e0aeb296afd:"920000000000000000000","2f6dce1330c59ef921602154572d4d4bacbd048a":"1000000000000000000000","6a6353b971589f18f2955cba28abe8acce6a5761":"3000000000000000000000","98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb":"300000000000000000000","8077c3e4c445586e094ce102937fa05b737b568c":"100000000000000000000","13371f92a56ea8381e43059a95128bdc4d43c5a6":"1000000000000000000000","35a6885083c899dabbf530ed6c12f4dd3a204cf5":"200000000000000000000","36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624":"10000000000000000000000","5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e":"2000000000000000000000","6fa6388d402b30afe59934c3b9e13d1186476018":"670000000000000000000","8251358ca4e060ddb559ca58bc0bddbeb4070203":"2000000000000000000000","17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0":"2000000000000000000000","298ec76b440d8807b3f78b5f90979bee42ed43db":"30000000000000000000000",ce4b065dbcb23047203262fb48c1188364977470:"500000000000000000000",c8e2adeb545e499d982c0c117363ceb489c5b11f:"985000000000000000000","9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d":"440000000000000000000",c76130c73cb9210238025c9df95d0be54ac67fbe:"1500000000000000000000","72d03d4dfab3500cf89b86866f15d4528e14a195":"4488000000000000000000",d193e583d6070563e7b862b9614a47e99489f3e5:"999972000000000000000","4df140ba796585dd5489315bca4bba680adbb818":"2674000000000000000000","009eef0a0886056e3f69211853b9b7457f3782e4":"3000512000000000000000","6e255b700ae7138a4bacf22888a9e2c00a285eec":"4000000000000000000000",aa47a4ffc979363232c99b99fada0f2734b0aeee:"8121800000000000000000","9d069197d1de50045a186f5ec744ac40e8af91c6":"2000000000000000000000",b514882c979bb642a80dd38754d5b8c8296d9a07:"955000000000000000000","17c0478657e1d3d17aaa331dd429cecf91f8ae5d":"999942000000000000000","5f9616c47b4a67f406b95a14fe6fc268396f1721":"200000000000000000000",f70a998a717b338d1dd99854409b1a338deea4b0:"2000000000000000000000",d1ee905957fe7cc70ec8f2868b43fe47b13febff:"44000000000000000000",fc018a690ad6746dbe3acf9712ddca52b6250039:"10000000000000000000000","5118557d600d05c2fcbf3806ffbd93d02025d730":"11360000000000000000000","1ef5c9c73650cfbbde5c885531d427c7c3fe5544":"6000000000000000000000",d1a396dcdab2c7494130b3fd307820340dfd8c1f:"17952000000000000000","2d8e061892a5dcce21966ae1bb0788fd3e8ba059":"250066000000000000000","8834b2453471f324fb26be5b25166b5b5726025d":"573000000000000000000","14f221159518783bc4a706676fc4f3c5ee405829":"200000000000000000000",c056d4bd6bf3cbacac65f8f5a0e3980b852740ae:"100000000000000000000","560536794a9e2b0049d10233c41adc5f418a264a":"1000000000000000000000",bc9e0ec6788f7df4c7fc210aacd220c27e45c910:"500000000000000000000","54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8":"1078000000000000000000","4361d4846fafb377b6c0ee49a596a78ddf3516a3":"3580000000000000000000","41c3c2367534d13ba2b33f185cdbe6ac43c2fa31":"4000000000000000000000","5dc6f45fef26b06e3302313f884daf48e2746fb9":"500000000000000000000",ad414d29cb7ee973fec54e22a388491786cf5402:"14000000000000000000000","802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c":"98040000000000000000","2aed2ce531c056b0097efc3c6de10c4762004ed9":"10430000000000000000000","39782ffe06ac78822a3c3a8afe305e50a56188ce":"10000000000000000000000",ec73833de4b810bb027810fc8f69f544e83c12d1:"1000000000000000000000","8d51a4cc62011322c696fd725b9fb8f53feaaa07":"1000000000000000000000","29298ccbdff689f87fe41aa6e98fdfb53deaf37a":"19800000000000000000000","827531a6c5817ae35f82b00b9754fcf74c55e232":"3600000000000000000000","9c581a60b61028d934167929b22d70b313c34fd0":"50000000000000000000000","0a077db13ffeb09484c217709d5886b8bf9c5a8b":"4000000000000000000000","07b7a57033f8f11330e4665e185d234e83ec140b":"4325683000000000000000","17f523f117bc9fe978aa481eb4f5561711371bc8":"1999884000000000000000",de42fcd24ce4239383304367595f068f0c610740:"45120000000000000000","2a46d353777176ff8e83ffa8001f4f70f9733aa5":"106000000000000000000","92e4392816e5f2ef5fb65837cec2c2325cc64922":"10000000000000000000000","9a3da65023a13020d22145cfc18bab10bd19ce4e":"456516000000000000000","1a085d43ec92414ea27b914fe767b6d46b1eef44":"29550000000000000000000","3b2367f8494b5fe18d683c055d89999c9f3d1b34":"10000000000000000000000","84244fc95a6957ed7c1504e49f30b8c35eca4b79":"2000000000000000000000","5e031b0a724471d476f3bcd2eb078338bf67fbef":"18200000000000000000","97e5cc6127c4f885be02f44b42d1c8b0ac91e493":"200000000000000000000",eb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16:"198000000000000000000","72feaf124579523954645b7fafff0378d1c8242e":"1000000000000000000000","8d07d42d831c2d7c838aa1872b3ad5d277176823":"349200000000000000000","9637dc12723d9c78588542eab082664f3f038d9d":"1000000000000000000000",e84b55b525f1039e744b918cb3332492e45eca7a:"200000000000000000000",b1d6b01b94d854fe8b374aa65e895cf22aa2560e:"940000000000000000000","8161d940c3760100b9080529f8a60325030f6edc":"300000000000000000000",d30ee9a12b4d68abace6baca9ad7bf5cd1faf91c:"1499936000000000000000","057949e1ca0570469e4ce3c690ae613a6b01c559":"200000000000000000000","4bf8e26f4c2790da6533a2ac9abac3c69a199433":"200000000000000000000","36fec62c2c425e219b18448ad757009d8c54026f":"400000000000000000000","77bfe93ccda750847e41a1affee6b2da96e7214e":"300000000000000000000",cc48414d2ac4d42a5962f29eee4497092f431352:"161000000000000000000",ddbddd1bbd38ffade0305d30f02028d92e9f3aa8:"2000000000000000000000","30c01142907acb1565f70438b9980ae731818738":"2000000000000000000000",cffc49c1787eebb2b56cabe92404b636147d4558:"5679305000000000000000",f99eeece39fa7ef5076d855061384009792cf2e0:"500000000000000000000",e9b6a790009bc16642c8d820b7cde0e9fd16d8f5:"3640000000000000000000","03b41b51f41df20dd279bae18c12775f77ad771c":"1000000000000000000000","787d313fd36b053eeeaedbce74b9fb0678333289":"27160000000000000000000","35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463":"1440000000000000000000","4c0aca508b3caf5ee028bc707dd1e800b838f453":"18200000000000000000","514632efbd642c04de6ca342315d40dd90a2dba6":"2674000000000000000000","36810ff9d213a271eda2b8aa798be654fa4bbe06":"2000000000000000000000","0c088006c64b30c4ddafbc36cb5f05469eb62834":"2000000000000000000000","568df31856699bb5acfc1fe1d680df9960ca4359":"1379999000000000000000",d48e3f9357e303513841b3f84bda83fc89727587:"1000000000000000000000","953ef652e7b769f53d6e786a58952fa93ee6abe7":"2860000000000000000000","7c60a05f7a4a5f8cf2784391362e755a8341ef59":"1892300000000000000000","7a6b26f438d9a352449155b8876cbd17c9d99b64":"6000000000000000000000","68f719ae342bd7fef18a05cbb02f705ad38ed5b2":"1050000000000000000000","45ca8d956608f9e00a2f9974028640888465668f":"2000000000000000000000","3eaf316b87615d88f7adc77c58e712ed4d77966b":"100141000000000000000","1f0412bfedcd964e837d092c71a5fcbaf30126e2":"20000000000000000000","7471f72eeb300624eb282eab4d03723c649b1b58":"8000000000000000000000","9bf71f7fb537ac54f4e514947fa7ff6728f16d2f":"33400000000000000000","1098c774c20ca1daac5ddb620365316d353f109c":"100000000000000000000","7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c":"200000000000000000000","0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89":"4000000000000000000000",ad6628352ed3390bafa86d923e56014cfcb360f4:"2000000000000000000000","02af2459a93d0b3f4d062636236cd4b29e3bcecf":"1910000000000000000000",ace2abb63b0604409fbde3e716d2876d44e8e5dd:"152000000000000000000",e710dcd09b8101f9437bd97db90a73ef993d0bf4:"386100000000000000000",d43ee438d83de9a37562bb4e286cb1bd19f4964d:"1000000000000000000000",ea3779d14a13f6c78566bcde403591413a6239db:"197000000000000000000000","6704f169e0d0b36b57bbc39f3c45437b5ee3d28d":"394000000000000000000","5584423050e3c2051f0bbd8f44bd6dbc27ecb62c":"3000000000000000000000","2f315d9016e8ee5f536681202f9084b032544d4d":"1037400000000000000000",e1b63201fae1f129f95c7a116bd9dde5159c6cda:"22837462000000000000000","2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e":"2396000000000000000000","38da1ba2de9e2c954b092dd9d81204fd016ba016":"10156000000000000000000","8a86e4a51c013b1fb4c76bcf30667c78d52eedef":"2000000000000000000000","8f717ec1552f4c440084fba1154a81dc003ebdc0":"10000000000000000000000",c760971bbc181c6a7cf77441f24247d19ce9b4cf:"2000000000000000000000","7f150afb1a77c2b45928c268c1e9bdb4641d47d8":"2000000000000000000000","1ea334b5750807ea74aac5ab8694ec5f28aa77cf":"492500000000000000000","2afb058c3d31032b353bf24f09ae20d54de57dbe":"1100000000000000000000",caef027b1ab504c73f41f2a10979b474f97e309f:"200000000000000000000","5dd112f368c0e6ceff77a9df02a5481651a02fb7":"169800000000000000000",bd93e550403e2a06113ed4c3fba1a8913b19407e:"2000000000000000000000","500c16352e901d48ba8d04e2c767121772790b02":"30239000000000000000",d2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8:"50000000000000000000","355ccfe0e77d557b971be1a558bc02df9eee0594":"1759120000000000000000","5aed0e6cfe95f9d680c76472a81a2b680a7f93e2":"197000000000000000000",f56442f60e21691395d0bffaa9194dcaff12e2b7:"260000000000000000000","7db9eacc52e429dc83b461c5f4d86010e5383a28":"1000000000000000000000","4b984ef26c576e815a2eaed2f5177f07dbb1c476":"1560000000000000000000","9846648836a307a057184fd51f628a5f8c12427c":"19100000000000000000000","4af0db077bb9ba5e443e21e148e59f379105c592":"600000000000000000000",e96e2d3813efd1165f12f602f97f4a62909d3c66:"2300000000000000000000","30e789b3d2465e946e6210fa5b35de4e8c93085f":"2000000000000000000000","97f99b6ba31346cd98a9fe4c308f87c5a58c5151":"6000000000000000000000","595e23d788a2d4bb85a15df7136d264a635511b3":"3940000000000000000000","2f61efa5819d705f2b1e4ee754aeb8a819506a75":"1460000000000000000000","3554947b7b947b0040da52ca180925c6d3b88ffe":"66850000000000000000","8feffadb387a1547fb284da9b8147f3e7c6dc6da":"837200000000000000000","258939bbf00c9de9af5338f5d714abf6d0c1c671":"1550000000000000000000","5b333696e04cca1692e71986579c920d6b2916f9":"500000000000000000000","5381448503c0c702542b1de7cc5fb5f6ab1cf6a5":"8000000000000000000000","7e81f6449a03374191f3b7cb05d938b72e090dff":"100000000000000000000","4ef1c214633ad9c0703b4e2374a2e33e3e429291":"1337000000000000000000",fed8476d10d584b38bfa6737600ef19d35c41ed8:"1820000000000000000000","1a95c9b7546b5d1786c3858fb1236446bc0ca4ce":"1970000000000000000000","3b07db5a357f5af2484cbc9d77d73b1fd0519fc7":"500000000000000000000","5f68a24c7eb4117667737b33393fb3c2148a53b6":"51800000000000000000",d8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060:"1700000000000000000000",d66acc0d11b689cea6d9ea5ff4014c224a5dc7c4:"18200000000000000000","6e72b2a1186a8e2916543b1cb36a68870ea5d197":"186000000000000000000","5102a4a42077e11c58df4773e3ac944623a66d9f":"2000325000000000000000","72480bede81ad96423f2228b5c61be44fb523100":"6400000000000000000000",e076db30ab486f79194ebbc45d8fab9a9242f654:"4840000000000000000000","8ceea15eec3bdad8023f98ecf25b2b8fef27db29":"2000000000000000000000","40652360d6716dc55cf9aab21f3482f816cc2cbd":"10000000000000000000000","13e02fb448d6c84ae17db310ad286d056160da95":"2000000000000000000000",d6598b1386e93c5ccb9602ff4bbbecdbd3701dc4:"224096000000000000000",d5ea472cb9466018110af00c37495b5c2c713112:"4997800000000000000000",bb75cb5051a0b0944b4673ca752a97037f7c8c15:"200000000000000000000","8af626a5f327d7506589eeb7010ff9c9446020d2":"1400000000000000000000","318c76ecfd8af68d70555352e1f601e35988042d":"501600000000000000000","5c3d19441d196cb443662020fcad7fbb79b29e78":"14300000000000000000","27101a0f56d39a88c5a84f9b324cdde33e5cb68c":"2000000000000000000000",e229e746a83f2ce253b0b03eb1472411b57e5700:"5730000000000000000000","604cdf18628dbfa8329194d478dd5201eecc4be7":"23000000000000000000","657473774f63ac3d6279fd0743d5790c4f161503":"200000000000000000000","1ddefefd35ab8f658b2471e54790bc17af98dea4":"1000000000000000000000",ac3900298dd14d7cc96d4abb428da1bae213ffed:"24730250000000000000000","944f07b96f90c5f0d7c0c580533149f3f585a078":"74000000000000000000","232c6d03b5b6e6711efff190e49c28eef36c82b0":"1337000000000000000000",c87c77e3c24adecdcd1038a38b56e18dead3b702:"8800000000000000000000",c4b6e5f09cc1b90df07803ce3d4d13766a9c46f4:"6000000000000000000000",d44334b4e23a169a0c16bd21e866bba52d970587:"2600000000000000000000","7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2":"20000000000000000000",cf694081c76d18c64ca71382be5cd63b3cb476f8:"1000000000000000000000","133e4f15e1e39c53435930aaedf3e0fe56fde843":"20000000000000000000",f067fb10dfb293e998abe564c055e3348f9fbf1e:"2000000000000000000000","94449c01b32a7fa55af8104f42cdd844aa8cbc40":"16548000000000000000000","0e2094ac1654a46ba1c4d3a40bb8c17da7f39688":"358000000000000000000","738ca94db7ce8be1c3056cd6988eb376359f3353":"25500000000000000000000","0cfb172335b16c87d519cd1475530d20577f5e0e":"100000000000000000000000","3cb561ce86424b359891e364ec925ffeff277df7":"200000000000000000000","5f981039fcf50225e2adf762752112d1cc26b6e3":"499954000000000000000",b43657a50eecbc3077e005d8f8d94f377876bad4:"35460000000000000000",d07e511864b1cf9969e3560602829e32fc4e71f5:"50000000000000000000","11306c7d57588637780fc9fde8e98ecb008f0164":"1999944000000000000000","45ca9862003b4e40a3171fb5cafa9028cac8de19":"13790000000000000000000","231d94155dbcfe2a93a319b6171f63b20bd2b6fa":"3819952000000000000000",e7533e270cc61fa164ac1553455c105d04887e14:"121550000000000000000","070d5d364cb7bbf822fc2ca91a35bdd441b215d5":"2000000000000000000000",d475477fa56390d33017518d6711027f05f28dbf:"1975032000000000000000",cea34a4dd93dd9aefd399002a97d997a1b4b89cd:"1500000000000000000000","560becdf52b71f3d8827d927610f1a980f33716f":"429413000000000000000",f632adff490da4b72d1236d04b510f74d2faa3cd:"1400000000000000000000","2fdd9b79df8df530ad63c20e62af431ae99216b8":"21000000000000000000","535201a0a1d73422801f55ded4dfaee4fbaa6e3b":"39641000000000000000","409d5a962edeeebea178018c0f38b9cdb213f289":"20000000000000000000","9d911f3682f32fe0792e9fb6ff3cfc47f589fca5":"4000000000000000000000","9f7a0392f857732e3004a375e6b1068d49d83031":"2000000000000000000000","6a04f5d53fc0f515be942b8f12a9cb7ab0f39778":"3129800000000000000000",be478e8e3dde6bd403bb2d1c657c4310ee192723:"492500000000000000000","007622d84a234bb8b078230fcf84b67ae9a8acae":"698800000000000000000","9475c510ec9a26979247744c3d8c3b0e0b5f44d3":"10000000000000000000000",df47a8ef95f2f49f8e6f58184154145d11f72797:"1910000000000000000000","13ce332dff65a6ab933897588aa23e000980fa82":"258400000000000000000","9c4bbcd5f1644a6f075824ddfe85c571d6abf69c":"1800000000000000000000",d42b20bd0311608b66f8a6d15b2a95e6de27c5bf:"2000000000000000000000",a4dd59ab5e517d398e49fa537f899fed4c15e95d:"20000000000000000000000","1a8a5ce414de9cd172937e37f2d59cff71ce57a0":"10000000000000000000000","55c564664166a1edf3913e0169f1cd451fdb5d0c":"2399800000000000000000","58ae2ddc5f4c8ada97e06c0086171767c423f5d7":"1610000000000000000000",fb79abdb925c55b9f98efeef64cfc9eb61f51bb1:"1794000000000000000000",e7a42f59fee074e4fb13ea9e57ecf1cc48282249:"20000000000000000000000","07e2b4cdeed9d087b12e556d9e770c13c099615f":"668500000000000000000","68473b7a7d965904bedba556dfbc17136cd5d434":"100000000000000000000","6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a":"200000000000000000000","24c117d1d2b3a97ab11a4679c99a774a9eade8d1":"1000000000000000000000",f68c5e33fa97139df5b2e63886ce34ebf3e4979c:"3320000000000000000000",bd7419dc2a090a46e2873d7de6eaaad59e19c479:"6802000000000000000000","1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130":"1000000000000000000000","2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687":"2400000000000000000000","426d15f407a01135b13a6b72f8f2520b3531e302":"20000000000000000000","0394b90fadb8604f86f43fc1e35d3124b32a5989":"764000000000000000000","7412c9bc30b4df439f023100e63924066afd53af":"500000000000000000000","80e7b3205230a566a1f061d922819bb4d4d2a0e1":"14000000000000000000000",ff4fc66069046c525658c337a917f2d4b832b409:"2000000000000000000000",f5061ee2e5ee26b815503677130e1de07a52db07:"100000000000000000000","49793463e1681083d6abd6e725d5bba745dccde8":"545974000000000000000","23551f56975fe92b31fa469c49ea66ee6662f41e":"1910000000000000000000",fad96ab6ac768ad5099452ac4777bd1a47edc48f:"100000000000000000000","2a746cd44027af3ebd37c378c85ef7f754ab5f28":"394000000000000000000",b8d389e624a3a7aebce4d3e5dbdf6cdc29932aed:"200000000000000000000","7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb":"4600000000000000000000","5435c6c1793317d32ce13bba4c4ffeb973b78adc":"250070000000000000000",dd04eee74e0bf30c3f8d6c2c7f52e0519210df93:"80000000000000000000","4331ab3747d35720a9d8ca25165cd285acd4bda8":"2000000000000000000000",b84c8b9fd33ece00af9199f3cf5fe0cce28cd14a:"3820000000000000000000","393f783b5cdb86221bf0294fb714959c7b45899c":"5910000000000000000000","259ec4d265f3ab536b7c70fa97aca142692c13fc":"20400000000000000000","5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4":"35200000000000000000",d54ba2d85681dc130e5b9b02c4e8c851391fd9b9:"3940000000000000000000","5cd8af60de65f24dc3ce5730ba92653022dc5963":"1790000000000000000000","3b42a66d979f582834747a8b60428e9b4eeccd23":"620400000000000000000","4b19eb0c354bc1393960eb06063b83926f0d67b2":"29000000000000000000","8cf3546fd1cda33d58845fc8fcfecabca7c5642a":"574027000000000000000","113612bc3ba0ee4898b49dd20233905f2f458f62":"14000000000000000000000","1f2afc0aed11bfc71e77a907657b36ea76e3fb99":"4000000000000000000000","03714b41d2a6f751008ef8dd4d2b29aecab8f36e":"6000000000000000000000","25721c87b0dc21377c7200e524b14a22f0af69fb":"4000000000000000000000","335858f749f169cabcfe52b796e3c11ec47ea3c2":"200000000000000000000","52fb46ac5d00c3518b2c3a1c177d442f8165555f":"1500000000000000000000","7a8c89c014509d56d7b68130668ff6a3ecec7370":"300000000000000000000","7d5d2f73949dadda0856b206989df0078d51a1e5":"10560000000000000000000",be538246dd4e6f0c20bf5ad1373c3b463a131e86:"200000000000000000000","62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd":"1000000000000000000000",aa0ca3737337178a0caac3099c584b056c56301c:"880000000000000000000","1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45":"18200000000000000000","6463f715d594a1a4ace4bb9c3b288a74decf294d":"1970000000000000000000",e00d153b10369143f97f54b8d4ca229eb3e8f324:"152000000000000000000","8d0b9ea53fd263415eac11391f7ce9123c447062":"2000000000000000000000",cacb675e0996235404efafbb2ecb8152271b55e0:"700000000000000000000",b615e940143eb57f875893bc98a61b3d618c1e8c:"20000000000000000000","606f177121f7855c21a5062330c8762264a97b31":"4000000000000000000000",e3925509c8d0b2a6738c5f6a72f35314491248ce:"1012961000000000000000","3f08d9ad894f813e8e2148c160d24b353a8e74b0":"60000000000000000000000","40f4f4c06c732cd35b119b893b127e7d9d0771e4":"10000000000000000000000","1406854d149e081ac09cb4ca560da463f3123059":"1337000000000000000000",ecf05d07ea026e7ebf4941002335baf2fed0f002:"200000000000000000000","9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2":"33518000000000000000",a2e0683a805de6a05edb2ffbb5e96f0570b637c3:"20000000000000000000",fba5486d53c6e240494241abf87e43c7600d413a:"1987592000000000000000",d81bd54ba2c44a6f6beb1561d68b80b5444e6dc6:"1163806000000000000000","5298ab182a19359ffcecafd7d1b5fa212dede6dd":"20000000000000000000",d1acb5adc1183973258d6b8524ffa28ffeb23de3:"4000000000000000000000","4e7aa67e12183ef9d7468ea28ad239c2eef71b76":"4925000000000000000000","509a20bc48e72be1cdaf9569c711e8648d957334":"2000000000000000000000","949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878":"685000000000000000000",edbac9527b54d6df7ae2e000cca3613ba015cae3:"1970000000000000000000",c697b70477cab42e2b8b266681f4ae7375bb2541:"5577200000000000000000","86c934e38e53be3b33f274d0539cfca159a4d0d1":"970000000000000000000","0877eeaeab78d5c00e83c32b2d98fa79ad51482f":"439420000000000000000","5e11ecf69d551d7f4f84df128046b3a13240a328":"20000000000000000000","43ff8853e98ed8406b95000ada848362d6a0392a":"22100000000000000000000",f11cf5d363746fee6864d3ca336dd80679bb87ae:"40000000000000000000000",fb223c1e22eac1269b32ee156a5385922ed36fb8:"2000000000000000000000","4e6600806289454acda330a2a3556010dfacade6":"6000000000000000000000",cfe2caaf3cec97061d0939748739bffe684ae91f:"10000000000000000000000",adeb52b604e5f77faaac88275b8d6b49e9f9f97f:"2089268000000000000000",d53c567f0c3ff2e08b7d59e2b5c73485437fc58d:"600000000000000000000",fbf75933e01b75b154ef0669076be87f62dffae1:"78000000000000000000000","7dfd2962b575bcbeee97f49142d63c30ab009f66":"4000000000000000000000",df6485c4297ac152b289b19dde32c77ec417f47d:"1000000000000000000000",ffb974673367f5c07be5fd270dc4b7138b074d57:"2470407000000000000000",f7d7af204c56f31fd94398e40df1964bd8bf123c:"150011000000000000000","4506fe19fa4b006baa3984529d8516db2b2b50ab":"2000000000000000000000",f4dc7ba85480bbb3f535c09568aaa3af6f3721c6:"7214962000000000000000",d171c3f2258aef35e599c7da1aa07300234da9a6:"2000000000000000000000","33581cee233088c0860d944e0cf1ceabb8261c2e":"13370000000000000000","1c2e3607e127caca0fbd5c5948adad7dd830b285":"19700000000000000000000",fd7ede8f5240a06541eb699d782c2f9afb2170f6:"1337000000000000000000","368c5414b56b8455171fbf076220c1cba4b5ca31":"557940000000000000000","3e8745ba322f5fd6cb50124ec46688c7a69a7fae":"4925000000000000000000","76506eb4a780c951c74a06b03d3b8362f0999d71":"500000000000000000000","96d62dfd46087f62409d93dd606188e70e381257":"2000000000000000000000","37eada93c475ded2f7e15e7787d400470fa52062":"200000000000000000000","26babf42b267fdcf3861fdd4236a5e474848b358":"1000000000000000000000","3526eece1a6bdc3ee7b400fe935b48463f31bed7":"82400000000000000000","27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a":"99941000000000000000",b3e3c439069880156600c2892e448d4136c92d9b:"850000000000000000000","574ad9355390e4889ef42acd138b2a27e78c00ae":"1557000000000000000000",f0b9d683cea12ba600baace219b0b3c97e8c00e4:"100000000000000000000",a437fe6ec103ca8d158f63b334224eccac5b3ea3:"8000000000000000000000","7a48d877b63a8f8f9383e9d01e53e80c528e955f":"8000000000000000000000",e965daa34039f7f0df62375a37e5ab8a72b301e7:"4796000000000000000000","72cd048a110574482983492dfb1bd27942a696ba":"2000000000000000000000","6611ce59a98b072ae959dc49ad511daaaaa19d6b":"200000000000000000000","0d92582fdba05eabc3e51538c56db8813785b328":"191000000000000000000",e87e9bbfbbb71c1a740c74c723426df55d063dd9:"7998000000000000000000","9c99a1da91d5920bc14e0cb914fdf62b94cb8358":"20000000000000000000000",fe8e6e3665570dff7a1bda697aa589c0b4e9024a:"2000000000000000000000","811461a2b0ca90badac06a9ea16e787b33b196cc":"164000000000000000000",d211b21f1b12b5096181590de07ef81a89537ead:"2000000000000000000000","01155057002f6b0d18acb9388d3bc8129f8f7a20":"1340000000000000000000","8ce22f9fa372449a420610b47ae0c8d565481232":"2000000000000000000000",e02b74a47628be315b1f76b315054ad44ae9716f:"4000000000000000000000","92a7c5a64362e9f842a23deca21035857f889800":"1999944000000000000000","5213f459e078ad3ab95a0920239fcf1633dc04ca":"2599989000000000000000",c9957ba94c1b29e5277ec36622704904c63dc023:"1923000000000000000000","6ac40f532dfee5118117d2ad352da77d4f6da2c8":"400000000000000000000",ea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90:"734000000000000000000",b01e389b28a31d8e4995bdd7d7c81beeab1e4119:"1000000000000000000000",ee97aa8ac69edf7a987d6d70979f8ec1fbca7a94:"376000000000000000000","0fad05507cdc8f24b2be4cb7fa5d927ddb911b88":"3004447000000000000000",b6e8afd93dfa9af27f39b4df06076710bee3dfab:"25000000000000000000","7d0b255efb57e10f7008aa22d40e9752dfcf0378":"29944000000000000000",aef5b12258a18dec07d5ec2e316574919d79d6d6:"2000000000000000000000","63666755bd41b5986997783c13043008242b3cb5":"500000000000000000000","921f5261f4f612760706892625c75e7bce96b708":"2000000000000000000000","10e1e3377885c42d7df218522ee7766887c05e6a":"300031000000000000000","134163be9fbbe1c5696ee255e90b13254395c318":"200000000000000000000","870f15e5df8b0eabd02569537a8ef93b56785c42":"388000000000000000000","68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d":"2000000000000000000000","1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e":"1000073000000000000000",cd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92:"90000000000000000000",c8de7a564c7f4012a6f6d10fd08f47890fbf07d4:"300000000000000000000",c0345b33f49ce27fe82cf7c84d141c68f590ce76:"1000000000000000000000",fe53b94989d89964da2061539526bbe979dd2ea9:"1930600000000000000000","14410fb310711be074a80883c635d0ef6afb2539":"2000000000000000000000","1d344e962567cb27e44db9f2fac7b68df1c1e6f7":"1940000000000000000000",fe016ec17ec5f10e3bb98ff4a1eda045157682ab:"375804000000000000000",e89da96e06beaf6bd880b378f0680c43fd2e9d30:"601400000000000000000","0fee81ac331efd8f81161c57382bb4507bb9ebec":"400030000000000000000","40cf90ef5b768c5da585002ccbe6617650d8e837":"999800000000000000000","256fa150cc87b5056a07d004efc84524739e62b5":"200000000000000000000","1b9b2dc2960e4cb9408f7405827c9b59071612fd":"1000000000000000000000","0efd1789eb1244a3dede0f5de582d8963cb1f39f":"1500000000000000000000","049c5d4bc6f25d4e456c697b52a07811ccd19fb1":"300048000000000000000","02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30":"685000000000000000000",c1827686c0169485ec15b3a7c8c01517a2874de1:"40000000000000000000",d8e5c9675ef4deed266b86956fc4590ea7d4a27d:"1000000000000000000000","48f883e567b436a27bb5a3124dbc84dec775a800":"771840000000000000000",a34076f84bd917f20f8342c98ba79e6fb08ecd31:"4200000000000000000000","21ce6d5b9018cec04ad6967944bea39e8030b6b8":"20000000000000000000","0596a27dc3ee115fce2f94b481bc207a9e261525":"1000000000000000000000","717cf9beab3638308ded7e195e0c86132d163fed":"15097428000000000000000",d5ce55d1b62f59433c2126bcec09bafc9dfaa514:"197000000000000000000","7dd46da677e161825e12e80dc446f58276e1127c":"820000000000000000000","98c5494a03ac91a768dffc0ea1dde0acbf889019":"200000000000000000000000","617ff2cc803e31c9082233b825d025be3f7b1056":"1970000000000000000000","1091176be19b9964a8f72e0ece6bf8e3cfad6e9c":"10020000000000000000000","4ea56e1112641c038d0565a9c296c463afefc17e":"182000000000000000000",e303167f3d4960fe881b32800a2b4aeff1b088d4:"2000000000000000000000","773141127d8cf318aebf88365add3d5527d85b6a":"1000076000000000000000",b916b1a01cdc4e56e7657715ea37e2a0f087d106:"2406017000000000000000","46a430a2d4a894a0d8aa3feac615361415c3f81f":"2000000000000000000000",e6a3010f0201bc94ff67a2f699dfc206f9e76742:"879088000000000000000",d7ad09c6d32657685355b5c6ec8e9f57b4ebb982:"1970000000000000000000","95e80a82c20cbe3d2060242cb92d735810d034a2":"32511000000000000000","9a390162535e398877e416787d6239e0754e937c":"1000000000000000000000",d85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac:"2010000000000000000000",c3e20c96df8d4e38f50b265a98a906d61bc51a71:"2000000000000000000000","2949fd1def5c76a286b3872424809a07db3966f3":"5236067000000000000000","86cdb7e51ac44772be3690f61d0e59766e8bfc18":"4000000000000000000000","749a4a768b5f237248938a12c623847bd4e688dc":"72000000000000000000","3524a000234ebaaf0789a134a2a417383ce5282a":"5635000000000000000000","7b43c7eea8d62355b0a8a81da081c6446b33e9e0":"4000000000000000000000","0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a":"1337000000000000000000","767fd7797d5169a05f7364321c19843a8c348e1e":"18800000000000000000","1b2639588b55c344b023e8de5fd4087b1f040361":"1500000000000000000000","1e33d1c2fb5e084f2f1d54bc5267727fec3f985d":"500000000000000000000","06b106649aa8c421ddcd1b8c32cd0418cf30da1f":"40000000000000000000000","3c5a241459c6abbf630239c98a30d20b8b3ac561":"157600000000000000000","0f4f94b9191bb7bb556aaad7c74ddb288417a50b":"1400000000000000000000",d6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15:"131784000000000000000","61adf5929a5e2981684ea243baa01f7d1f5e148a":"110302000000000000000","8f58d8348fc1dc4e0dd8343b6543c857045ee940":"13632400000000000000000",a6e3baa38e104a1e27a4d82869afb1c0ae6eff8d:"19690000000000000000","67350b5331926f5e28f3c1e986f96443809c8b8c":"352000000000000000000","0b5d66b13c87b392e94d91d5f76c0d450a552843":"2000000000000000000000","562a8dcbbeeef7b360685d27303bd69e094accf6":"10000000000000000000000",b5d9934d7b292bcf603b2880741eb760288383a0:"16700000000000000000","6fc53662371dca587b59850de78606e2359df383":"180000000000000000000",e069c0173352b10bf6834719db5bed01adf97bbc:"18894000000000000000","10a93457496f1108cd98e140a1ecdbae5e6de171":"399600000000000000000","69ff8901b541763f817c5f2998f02dcfc1df2997":"40000000000000000000","00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03":"2000000000000000000000","77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a":"1000000000000000000000","6d20ef9704670a500bb269b5832e859802049f01":"130000000000000000000","186afdc085f2a3dce4615edffbadf71a11780f50":"200000000000000000000","7ff0c63f70241bece19b737e5341b12b109031d8":"346000000000000000000","9d4174aa6af28476e229dadb46180808c67505c1":"1219430000000000000000","5fec49c665e64ee89dd441ee74056e1f01e92870":"6320000000000000000000","6cd228dc712169307fe27ceb7477b48cfc8272e5":"77600000000000000000",fd918536a8efa6f6cefe1fa1153995fef5e33d3b:"500000000000000000000","2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a":"1249961000000000000000","6ab323ae5056ed0a453072c5abe2e42fcf5d7139":"880000000000000000000","67d682a282ef73fb8d6e9071e2614f47ab1d0f5e":"1000000000000000000000","1858cf11aea79f5398ad2bb22267b5a3c952ea74":"9850000000000000000000","39d6caca22bccd6a72f87ee7d6b59e0bde21d719":"2002000000000000000000",daa63cbda45dd487a3f1cd4a746a01bb5e060b90:"4797800000000000000000",a90476e2efdfee4f387b0f32a50678b0efb573b5:"10000000000000000000000",ae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d:"795860000000000000000",ac2e766dac3f648f637ac6713fddb068e4a4f04d:"197000000000000000000","6191ddc9b64a8e0890b4323709d7a07c48b92a64":"775000000000000000000",cc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b:"400000000000000000000",ca23f62dff0d6460036c62e840aec5577e0befd2:"140800000000000000000","97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4":"50000000000000000000","848c994a79003fe7b7c26cc63212e1fc2f9c19eb":"2000000000000000000000","20c284ba10a20830fc3d699ec97d2dfa27e1b95e":"2000000000000000000000","4fa3f32ef4086448b344d5f0a9890d1ce4d617c3":"1500000000000000000000","255abc8d08a096a88f3d6ab55fbc7352bddcb9ce":"82161000000000000000","7c60e51f0be228e4d56fdd2992c814da7740c6bc":"200000000000000000000","1c356cfdb95febb714633b28d5c132dd84a9b436":"25000000000000000000","5062e5134c612f12694dbd0e131d4ce197d1b6a4":"1000000000000000000000",ed862616fcbfb3becb7406f73c5cbff00c940755:"1700000000000000000000","62c9b271ffd5b770a5eee4edc9787b5cdc709714":"2000000000000000000000","3c925619c9b33144463f0537d896358706c520b0":"2000000000000000000000",ffe2e28c3fb74749d7e780dc8a5d422538e6e451:"253319000000000000000","37195a635dcc62f56a718049d47e8f9f96832891":"1970000000000000000000","90e9a9a82edaa814c284d232b6e9ba90701d4952":"100007000000000000000",e0c4ab9072b4e6e3654a49f8a8db026a4b3386a9:"2000000000000000000000","439dee3f7679ff1030733f9340c096686b49390b":"2000000000000000000000","548558d08cfcb101181dac1eb6094b4e1a896fa6":"1999944000000000000000","3090f8130ec44466afadb36ed3c926133963677b":"4000000000000000000000",d1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b:"5828000000000000000000","65b42faecc1edfb14283ca979af545f63b30e60c":"18200000000000000000","6420f8bcc8164a6152a99d6b99693005ccf7e053":"999972000000000000000","84b4b74e6623ba9d1583e0cfbe49643f16384149":"20000000000000000000",b8310a16cc6abc465007694b930f978ece1930bd:"740000000000000000000","16019a4dafab43f4d9bf4163fae0847d848afca2":"25060000000000000000","479298a9de147e63a1c7d6d2fce089c7e64083bd":"9999999000000000000000","030973807b2f426914ad00181270acd27b8ff61f":"5348000000000000000000",b07bcf1cc5d4462e5124c965ecf0d70dc27aca75:"1600000000000000000000",a2f798e077b07d86124e1407df32890dbb4b6379:"200000000000000000000","0cbd921dbe121563b98a6871fecb14f1cc7e88d7":"200000000000000000000","6042276df2983fe2bc4759dc1943e18fdbc34f77":"1970000000000000000000",be2b2280523768ea8ac35cd9e888d60a719300d4:"2000000000000000000000","2f4da753430fc09e73acbccdcde9da647f2b5d37":"200000000000000000000","734223d27ff23e5906caed22595701bb34830ca1":"2000000000000000000000","5b430d779696a3653fc60e74fbcbacf6b9c2baf1":"14000000000000000000000","84232107932b12e03186583525ce023a703ef8d9":"2000000000000000000000","4ed14d81b60b23fb25054d8925dfa573dcae6168":"340000000000000000000","8b338411f26ccf37658cc75521d77629099e467d":"2000000000000000000000",a37622ac9bbdc4d82b75015d745b9f8de65a28ec:"2910000000000000000000","1dd77441844afe9cc18f15d8c77bccfb655ee034":"4850000000000000000000","65849be1af20100eb8a3ba5a5be4d3ae8db5a70e":"400000000000000000000",d5586da4e59583c8d86cccf71a86197f17996749:"2000000000000000000000","4b53ae59c784b6b5c43616b9a0809558e684e10c":"1200000000000000000000","55d42eb495bf46a634997b5f2ea362814918e2b0":"106128000000000000000","959ff17f1d51b473b44010052755a7fa8c75bd54":"1970000000000000000000","5a2daab25c31a61a92a4c82c9925a1d2ef58585e":"225400000000000000000","24c0c88b54a3544709828ab4ab06840559f6c5e2":"2674000000000000000000","7e8649e690fc8c1bfda1b5e186581f649b50fe33":"98500000000000000000","4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf":"39400000000000000000","5778ffdc9b94c5a59e224eb965b6de90f222d170":"335320000000000000000","825a7f4e10949cb6f8964268f1fa5f57e712b4c4":"20000000000000000000","6f39cc37caaa2ddc9b610f6131e0619fae772a3c":"500000000000000000000","5b437365ae3a9a2ff97c68e6f90a7620188c7d19":"2002000000000000000000","6710c2c03c65992b2e774be52d3ab4a6ba217ef7":"11600000000000000000000","896e335ca47af57962fa0f4dbf3e45e688cba584":"1368500000000000000000",b57549bfbc9bdd18f736b22650e48a73601fa65c:"446000000000000000000","85ca1e727e9d1a87991cc2c41840ebb9edf21d1b":"13370000000000000000",cf4166746e1d3bc1f8d0714b01f17e8a62df1464:"1004700000000000000000","4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7":"1820000000000000000000","9e5811b40be1e2a1e1d28c3b0774acde0a09603d":"3000000000000000000000","763886e333c56feff85be3951ab0b889ce262e95":"2000000000000000000000","2b101e822cd962962a06800a2c08d3b15d82b735":"152000000000000000000",a01e9476df84431825c836e8803a97e22fa5a0cd:"6000000000000000000000",be4e7d983f2e2a636b1102ec7039efebc842e98d:"66000000000000000000","9e427272516b3e67d4fcbf82f59390d04c8e28e5":"4000000000000000000000",e0d231e144ec9107386c7c9b02f1702ceaa4f700:"5000057000000000000000","6a0f056066c2d56628850273d7ecb7f8e6e9129e":"5000016000000000000000",d1538e9a87e59ca9ec8e5826a5b793f99f96c4c3:"1000000000000000000000",f85bab1cb3710fc05fa19ffac22e67521a0ba21d:"2003000000000000000000",f7cbdba6be6cfe68dbc23c2b0ff530ee05226f84:"20000000000000000000","4eb87ba8788eba0df87e5b9bd50a8e45368091c1":"20000000000000000000","1479a9ec7480b74b5db8fc499be352da7f84ee9c":"1000000000000000000000",d311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d:"200000000000000000000","425c1816868f7777cc2ba6c6d28c9e1e796c52b3":"10000000000000000000000","8510ee934f0cbc900e1007eb38a21e2a5101b8b2":"106000000000000000000","01e864d354741b423e6f42851724468c74f5aa9c":"20000000000000000000000",a543a066fb32a8668aa0736a0c9cd40d78098727:"1000000000000000000000",f3eb1948b951e22df1617829bf3b8d8680ec6b68:"4000000000000000000000",f6b782f4dcd745a6c0e2e030600e04a24b25e542:"400000000000000000000","229f4f1a2a4f540774505b4707a81de44410255b":"2000000000000000000000",cff8d06b00e3f50c191099ad56ba6ae26571cd88:"1000000000000000000000","910b7d577a7e39aa23acf62ad7f1ef342934b968":"10000000000000000000000","392433d2ce83d3fb4a7602cca3faca4ec140a4b0":"51000000000000000000","8ff46045687723dc33e4d099a06904f1ebb584dc":"2000000000000000000000","9ca0429f874f8dcee2e9c062a9020a842a587ab9":"2000000000000000000000","160ceb6f980e04315f53c4fc988b2bf69e284d7d":"19100000000000000000",c340f9b91c26728c31d121d5d6fc3bb56d3d8624:"2000000000000000000000",afa1d5ad38fed44759c05b8993c1aa0dace19f40:"80000000000000000000","3969b4f71bb8751ede43c016363a7a614f76118e":"2000000000000000000000","2bb6f578adfbe7b2a116b3554facf9969813c319":"7400000000000000000000","8334764b7b397a4e578f50364d60ce44899bff94":"92500000000000000000","9dd2196624a1ddf14a9d375e5f07152baf22afa2":"1211747000000000000000",f242da845d42d4bf779a00f295b40750fe49ea13:"1000000000000000000000",c6234657a807384126f8968ca1708bb07baa493c:"20000000000000000000","94c055e858357aaa30cf2041fa9059ce164a1f91":"19999000000000000000000","74c73c90528a157336f1e7ea20620ae53fd24728":"8969310000000000000000","19e7f3eb7bf67f3599209ebe08b62ad3327f8cde":"2000000000000000000000",b2b516fdd19e7f3864b6d2cf1b252a4156f1b03b:"53720000000000000000","8164e78314ae16b28926cc553d2ccb16f356270d":"8450000000000000000000","4d828894752f6f25175daf2177094487954b6f9f":"1459683000000000000000",ab84a0f147ad265400002b85029a41fc9ce57f85:"1000000000000000000000",f3fe51fde34413c73318b9c85437fe7e820f561a:"1003200000000000000000","16c7b31e8c376282ac2271728c31c95e35d952c3":"2000000000000000000000","80d5c40c59c7f54ea3a55fcfd175471ea35099b3":"1000000000000000000000","7abb10f5bd9bc33b8ec1a82d64b55b6b18777541":"20000000000000000000000","095b0ea2b218d82e0aea7c2889238a39c9bf9077":"20000000000000000000000","5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b":"2000000000000000000000","323749a3b971959e46c8b4822dcafaf7aaf9bd6e":"20064000000000000000",e0272213e8d2fd3e96bd6217b24b4ba01b617079:"20000000000000000000","00acbfb2f25a5485c739ef70a44eeeeb7c65a66f":"100000000000000000000","52f15423323c24f19ae2ab673717229d3f747d9b":"1026115000000000000000",cb4abfc282aed76e5d57affda542c1f382fcacf4:"8136100000000000000000",f71b4534f286e43093b1e15efea749e7597b8b57:"104410000000000000000000","44cd77535a893fa7c4d5eb3a240e79d099a72d2d":"820000000000000000000",eb3ce7fc381c51db7d5fbd692f8f9e058a4c703d:"200000000000000000000",f1c8c4a941b4628c0d6c30fda56452d99c7e1b64:"1449000000000000000000","277677aba1e52c3b53bfa2071d4e859a0af7e8e1":"1000000000000000000000",a5f075fd401335577b6683c281e6d101432dc6e0:"2680000000000000000000",e28dbc8efd5e416a762ec0e018864bb9aa83287b:"24533161000000000000000","2b717cd432a323a4659039848d3b87de26fc9546":"500000000000000000000000",b358e97c70b605b1d7d729dfb640b43c5eafd1e7:"20000000000000000000000","293c2306df3604ae4fda0d207aba736f67de0792":"200000000000000000000","74d366b07b2f56477d7c7077ac6fe497e0eb6559":"5000000000000000000000","490145afa8b54522bb21f352f06da5a788fa8f1d":"9231182000000000000000","862569211e8c6327b5415e3a67e5738b15baaf6e":"140000000000000000000","5a74ba62e7c81a3474e27d894fed33dd24ad95fe":"18200000000000000000","536e4d8029b73f5579dca33e70b24eba89e11d7e":"1970000000000000000000","25c6e74ff1d928df98137af4df8430df24f07cd7":"390000000000000000000","19b36b0c87ea664ed80318dc77b688dde87d95a5":"1948386000000000000000",abc4caeb474d4627cb6eb456ecba0ecd08ed8ae1:"3940000000000000000000","8ea656e71ec651bfa17c5a5759d86031cc359977":"100000000000000000000","8d620bde17228f6cbba74df6be87264d985cc179":"100000000000000000000",b2aa2f1f8e93e79713d92cea9ffce9a40af9c82d:"2000000000000000000000","198ef1ec325a96cc354c7266a038be8b5c558f67":"608334724000000000000000","6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad":"53480000000000000000",e056bf3ff41c26256fef51716612b9d39ade999c:"100009000000000000000","2c128c95d957215101f043dd8fc582456d41016d":"835000000000000000000","2560b09b89a4ae6849ed5a3c9958426631714466":"1700000000000000000000",d3d6e9fb82542fd29ed9ea3609891e151396b6f7:"54000000000000000000000",a7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0:"1610000000000000000000","020362c3ade878ca90d6b2d889a4cc5510eed5f3":"1042883000000000000000","14830704e99aaad5c55e1f502b27b22c12c91933":"620000000000000000000","8030b111c6983f0485ddaca76224c6180634789f":"80000000000000000000","2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910":"200000000000000000000","77d43fa7b481dbf3db530cfbf5fdced0e6571831":"2000000000000000000000","2d90b415a38e2e19cdd02ff3ad81a97af7cbf672":"109800000000000000000","2fc82ef076932341264f617a0c80dd571e6ae939":"7160000000000000000000",dfe549fe8430e552c6d07cc3b92ccd43b12fb50f:"83620000000000000000","1e8e689b02917cdc29245d0c9c68b094b41a9ed6":"2000000000000000000000","21c3a8bba267c8cca27b1a9afabad86f607af708":"8940000000000000000000","143c639752caeecf6a997d39709fc8f19878c7e8":"1970000000000000000000","02603d7a3bb297c67c877e5d34fbd5b913d4c63a":"20000000000000000000",a166f911c644ac3213d29e0e1ae010f794d5ad26:"2000000000000000000000","6eb3819617404058268f0c3cff3596bfe9148c1c":"1670000000000000000000","7a67dd043a504fc2f2fc7194e9becf484cecb1fb":"250000000000000000000",f824ee331e4ac3cc587693395b57ecf625a6c0c2:"1600930000000000000000","1179c60dbd068b150b074da4be23033b20c68558":"680000000000000000000",d2a479404347c5543aab292ae1bb4a6f158357fa:"4000000000000000000000",b0d32bd7e4e695b7b01aa3d0416f80557dba9903:"16300000000000000000000",f734ec03724ddee5bb5279aa1afcf61b0cb448a1:"4238080000000000000000",c04069dfb18b096c7867f8bee77a6dc7477ad062:"2674000000000000000000","80c53ee7e3357f94ce0d7868009c208b4a130125":"2000000000000000000000","0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301":"753978000000000000000","6ddb6092779d5842ead378e21e8120fd4c6bc132":"2000000000000000000000","82ea01e3bf2e83836e71704e22a2719377efd9c3":"3040000000000000000000","44c1110b18870ec81178d93d215838c551d48e64":"199958000000000000000","7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc":"2000000000000000000000",a11a03c4bb26d21eff677d5d555c80b25453ee7a:"69979000000000000000","19e5dea3370a2c746aae34a37c531f41da264e83":"200000000000000000000",c325c352801ba883b3226c5feb0df9eae2d6e653:"3940000000000000000000",ae5055814cb8be0c117bb8b1c8d2b63b4698b728:"32035000000000000000",deb1bc34d86d4a4dde2580d8beaf074eb0e1a244:"1580000000000000000000","558360206883dd1b6d4a59639e5629d0f0c675d0":"2000000000000000000000",a9d6f871ca781a759a20ac3adb972cf12829a208:"925000000000000000000",b0ac4eff6680ee14169cdadbffdb30804f6d25f5:"2000000000000000000000",f1b58faffa8794f50af8e88309c7a6265455d51a:"999800000000000000000",a61a54df784a44d71b771b87317509211381f200:"1000000000000000000000",baa4b64c2b15b79f5f204246fd70bcbd86e4a92a:"500000000000000000000",a20d8ff60caae31d02e0b665fa435d76f77c9442:"489600000000000000000",f3e74f470c7d3a3f0033780f76a89f3ef691e6cb:"3021800000000000000000",d330728131fe8e3a15487a34573c93457e2afe95:"4000000000000000000000","9af9dbe47422d177f945bdead7e6d82930356230":"3940000000000000000000","0eb5b662a1c718608fd52f0c25f9378830178519":"6091400000000000000000",fda6810ea5ac985d6ffbf1c511f1c142edcfddf7:"4000000000000000000000","832c54176bdf43d2c9bcd7b808b89556b89cbf31":"200000000000000000000","704d5de4846d39b53cd21d1c49f096db5c19ba29":"152000000000000000000","344a8db086faed4efc37131b3a22b0782dad7095":"500000000000000000000","8c7fa5cae82fedb69ab189d3ff27ae209293fb93":"400030000000000000000",ad660dec825522a9f62fcec3c5b731980dc286ea:"3000000000000000000000","13b9b10715714c09cfd610cf9c9846051cb1d513":"1970000000000000000000","40467d80e74c35407b7db51789234615fea66818":"388000000000000000000","30e9d5a0088f1ddb2fd380e2a049192266c51cbf":"196910000000000000000",b2d1e99af91231858e7065dd1918330dc4c747d5:"16700000000000000000000","9f21302ca5096bea7402b91b0fd506254f999a3d":"1246832000000000000000",d24b6644f439c8051dfc64d381b8c86c75c17538:"2000000000000000000000","8228ebc087480fd64547ca281f5eace3041453b9":"1970000000000000000000","29da3e35b23bb1f72f8e2258cf7f553359d24bac":"20000000000000000000000",c8e558a3c5697e6fb23a2594c880b7a1b68f9860:"10000000000000000000000","6b951a43274eeafc8a0903b0af2ec92bf1efc839":"100000000000000000000",d015f6fcb84df7bb410e8c8f04894a881dcac237:"1038000000000000000000","6ccb03acf7f53ce87aadcc21a9932de915f89804":"8000000000000000000000","388c85a9b9207d8146033fe38143f6d34b595c47":"200000000000000000000","429c06b487e8546abdfc958a25a3f0fba53f6f00":"13503000000000000000","771507aeee6a255dc2cd9df55154062d0897b297":"334250000000000000000","5a2b1c853aeb28c45539af76a00ac2d8a8242896":"25000000000000000000",f4d67a9044b435b66e8977ff39a28dc4bd53729a:"200000000000000000000","063759dd1c4e362eb19398951ff9f8fad1d31068":"10000000000000000000000",cb58990bcd90cfbf6d8f0986f6fa600276b94e2d:"999925000000000000000","6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2":"4000000000000000000000",deb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd:"2000000000000000000000","59203cc37599b648312a7cc9e06dacb589a9ae6a":"148689000000000000000",fc9b347464b2f9929d807e039dae48d3d98de379:"14000000000000000000000","48d2434b7a7dbbff08223b6387b05da2e5093126":"18000000000000000000000",c9d76446d5aadff80b68b91b08cd9bc8f5551ac1:"714000000000000000000","3d31587b5fd5869845788725a663290a49d3678c":"500000000000000000000",d8715ef9176f850b2e30eb8e382707f777a6fbe9:"2000000000000000000000","2c2147947ae33fb098b489a5c16bfff9abcd4e2a":"200000000000000000000",d6c0d0bc93a62e257174700e10f024c8b23f1f87:"2000000000000000000000",d1978f2e34407fab1dc2183d95cfda6260b35982:"788000000000000000000","1bf974d9904f45ce81a845e11ef4cbcf27af719e":"100000000000000000000","6e761eaa0f345f777b5441b73a0fa5b56b85f22d":"2000000000000000000000",ea60436912de6bf187d3a472ff8f5333a0f7ed06:"19700000000000000000","94f8f057db7e60e675ad940f155885d1a477348e":"401100000000000000000","8933491760c8f0b4df8caac78ed835caee21046d":"20000000000000000000000",a7775e4af6a23afa201fb78b915e51a515b7a728:"120000000000000000000",d8d64384249b776794063b569878d5e3b530a4b2:"177569000000000000000",be633a3737f68439bac7c90a52142058ee8e8a6f:"960000000000000000000","90bd62a050845261fa4a9f7cf241ea630b05efb8":"500000000000000000000","552987f0651b915b2e1e5328c121960d4bdd6af4":"1790000000000000000000","0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f":"1000000000000000000000","9e5a311d9f69898a7c6a9d6360680438e67a7b2f":"1490000000000000000000","78859c5b548b700d9284cee4b6633c2f52e529c2":"2955000000000000000000",d572309169b1402ec8131a17a6aac3222f89e6eb:"13800000000000000000000","8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e":"955000000000000000000","75c11d024d12ae486c1095b7a7b9c4af3e8edeb9":"20000000000000000000","903413878aea3bc1086309a3fe768b65559e8cab":"8000000000000000000000","6d0569e5558fc7df2766f2ba15dc8aeffc5beb75":"4001070000000000000000","3815b0743f94fc8cc8654fd9d597ed7d8b77c57e":"738578000000000000000","0f26480a150961b8e30750713a94ee6f2e47fc00":"1000000000000000000000",ede5de7c7fb7eee0f36e64530a41440edfbefacf:"617200000000000000000","763a7cbab70d7a64d0a7e52980f681472593490c":"600000000000000000000","6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74":"200000000000000000000",eb3bdd59dcdda5a9bb2ac1641fd02180f5f36560:"6600000000000000000000",f4ebf50bc7e54f82e9b9bd24baef29438e259ce6:"10000000000000000000000","882c8f81872c79fed521cb5f950d8b032322ea69":"40000000000000000000000","394132600f4155e07f4d45bc3eb8d9fb72dcd784":"2941000000000000000000","0be2b94ad950a2a62640c35bfccd6c67dae450f6":"1940000000000000000000",d4c6ac742e7c857d4a05a04c33d4d05c1467571d:"200000000000000000000","1fddd85fc98be9c4045961f40f93805ecc4549e5":"164000000000000000000","534065361cb854fac42bfb5c9fcde0604ac919da":"2000000000000000000000","9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786":"2547000000000000000000","4f3a4854911145ea01c644044bdb2e5a960a982f":"4000000000000000000000","00497e92cdc0e0b963d752b2296acb87da828b24":"194800000000000000000","4ff67fb87f6efba9279930cfbd1b7a343c79fade":"400000000000000000000","62f2e5ccecd52cc4b95e0597df27cc079715608c":"143000000000000000000","1eda084e796500ba14c5121c0d90846f66e4be62":"534800000000000000000","9836b4d30473641ab56aeee19242761d72725178":"2000000000000000000000",de55de0458f850b37e4d78a641dd2eb2dd8f38ce:"4000000000000000000000","140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0":"1600000000000000000000","2014261f01089f53795630ba9dd24f9a34c2d942":"1337000000000000000000","11415fab61e0dfd4b90676141a557a869ba0bde9":"2048000000000000000000","88344909644c7ad4930fd873ca1c0da2d434c07f":"131970000000000000000","88b217ccb786a254cf4dc57f5d9ac3c455a30483":"925000000000000000000",dfdbcec1014b96da2158ca513e9c8d3b9af1c3d0:"2000000000000000000000","1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d":"850000000000000000000",d70ad2c4e9eebfa637ef56bd486ad2a1e5bce093:"200000000000000000000","9ce27f245e02d1c312c1d500788c9def7690453b":"200000000000000000000","8234f463d18485501f8f85ace4972c9b632dbccc":"2000000000000000000000","994152fc95d5c1ca8b88113abbad4d710e40def6":"500000000000000000000",e5b980d28eece2c06fca6c9473068b37d4a6d6e9:"695200000000000000000","2d426912d059fad9740b2e390a2eeac0546ff01b":"1400000000000000000000","6d9997509882027ea947231424bedede2965d0ba":"2001600000000000000000","167ce7de65e84708595a525497a3eb5e5a665073":"575400000000000000000",e430c0024fdbf73a82e21fccf8cbd09138421c21:"4000000000000000000000","2e52912bc10ea39d54e293f7aed6b99a0f4c73be":"400000000000000000000","12cf8b0e465213211a5b53dfb0dd271a282c12c9":"15200000000000000000","06964e2d17e9189f88a8203936b40ac96e533c06":"18200000000000000000","66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f":"201412000000000000000","0a77e7f72b437b574f00128b21f2ac265133528c":"2000000000000000000000","78f5c74785c5668a838072048bf8b453594ddaab":"400000000000000000000","58e554af3d87629620da61d538c7f5b4b54c4afe":"1297081000000000000000","37a10451f36166cf643dd2de6c1cbba8a011cfa3":"380000000000000000000",fe9ad12ef05d6d90261f96c8340a0381974df477:"2000000000000000000000","057f7f81cd7a406fc45994408b5049912c566463":"1700000000000000000000","55a3df57b7aaec16a162fd5316f35bec082821cf":"1970000000000000000000",c0e0b903088e0c63f53dd069575452aff52410c3:"3000000000000000000000","63e88e2e539ffb450386b4e46789b223f5476c45":"6292000000000000000000","3727341f26c12001e378405ee38b2d8464ec7140":"2000000000000000000000",c96751656c0a8ef4357b7344322134b983504aca:"2000000000000000000000","1e060dc6c5f1cb8cc7e1452e02ee167508b56542":"12715500000000000000000","18136c9df167aa17b6f18e22a702c88f4bc28245":"4000000000000000000000","116108c12084612eeda7a93ddcf8d2602e279e5c":"2000000000000000000000",bbb643d2187b364afc10a6fd368d7d55f50d1a3c:"1000000000000000000000",ec83e798c396b7a55e2a2224abcd834b27ea459c:"12000000000000000000000","973f4e361fe5decd989d4c8f7d7cc97990385daf":"388500000000000000000",c0f29ed0076611b5e55e130547e68a48e26df5e4:"3000000000000000000000",fd4b551f6fdbcda6c511b5bb372250a6b783e534:"20600000000000000000","144b19f1f66cbe318347e48d84b14039466c5909":"2000000000000000000000",bf183641edb886ce60b8190261e14f42d93cce01:"25019000000000000000","94db807873860aac3d5aea1e885e52bff2869954":"3220000000000000000000","7a74cee4fa0f6370a7894f116cd00c1147b83e59":"800000000000000000000",cd32a4a8a27f1cc63954aa634f7857057334c7a3:"1085000000000000000000","7cbeb99932e97e6e02058cfc62d0b26bc7cca52b":"2000000000000000000000","8cde8b732e6023878eb23ed16229124b5f7afbec":"133700000000000000000","45c4ecb4ee891ea984a7c5cefd8dfb00310b2850":"1980000000000000000000","8b393fb0813ee101db1e14ecc7d322c72b8c0473":"455578000000000000000","7b66126879844dfa34fe65c9f288117fefb449ad":"6000000000000000000000","162ba503276214b509f97586bd842110d103d517":"9002000000000000000000","7dece6998ae1900dd3770cf4b93812bad84f0322":"100000000000000000000",ec0927bac7dc36669c28354ab1be83d7eec30934:"2000000000000000000000","8d7f3e61299c2db9b9c0487cf627519ed00a9123":"1742400000000000000000","4fc46c396e674869ad9481638f0013630c87caac":"1000000000000000000000",bf68d28aaf1eeefef646b65e8cc8d190f6c6da9c:"2000000000000000000000","00969747f7a5b30645fe00e44901435ace24cc37":"1700000000000000000000","494dec4d5ee88a2771a815f1ee7264942fb58b28":"2000000000000000000000",ffeac0305ede3a915295ec8e61c7f881006f4474:"98500000000000000000",b39139576194a0866195151f33f2140ad1cc86cf:"100000000000000000000000",fead1803e5e737a68e18472d9ac715f0994cc2be:"500000000000000000000","698ab9a2f33381e07c0c47433d0d21d6f336b127":"20000000000000000000",e5edc73e626f5d3441a45539b5f7a398c593edf6:"865000000000000000000",dd4f5fa2111db68f6bde3589b63029395b69a92d:"158400000000000000000","8c93c3c6db9d37717de165c3a1b4fe51952c08de":"400000000000000000000",f87bb07b289df7301e54c0efda6a2cf291e89200:"1400000000000000000000",e7a4560c84b20e0fb54c49670c2903b0a96c42a4:"598000000000000000000","00a5797f52c9d58f189f36b1d45d1bf6041f2f6b":"5456900000000000000000","9da3302240af0511c6fd1857e6ddb7394f77ab6b":"3100000000000000000000","2c2d15ff39561c1b72eda1cc027ffef23743a144":"3920000000000000000000","9b4c2715780ca4e99e60ebf219f1590c8cad500a":"1600000000000000000000",ff5e7ee7d5114821e159dca5e81f18f1bfffbff9:"2000000000000000000000","0169c1c210eae845e56840412e1f65993ea90fb4":"2000000000000000000000",abc45f84db7382dde54c5f7d8938c42f4f3a3bc4:"200000000000000000000",d9383d4b6d17b3f9cd426e10fb944015c0d44bfb:"800000000000000000000",c090fe23dcd86b358c32e48d2af91024259f6566:"200000000000000000000","9ffedcc36b7cc312ad2a9ede431a514fccb49ba3":"669800000000000000000","2ffe93ec1a5636e9ee34af70dff52682e6ff7079":"2000000000000000000000","6e01e4ad569c95d007ada30d5e2db12888492294":"4000000000000000000000",d4d92c62b280e00f626d8657f1b86166cb1f740f:"200028000000000000000","1d36683063b7e9eb99462dabd569bddce71686f2":"1000000000000000000000","3a48e0a7098b06a905802b87545731118e89f439":"2000000000000000000000",bd9e56e902f4be1fc8768d8038bac63e2acbbf8e:"999972000000000000000","4d67f2ab8599fef5fc413999aa01fd7fce70b43d":"10000000000000000000000","8e74e0d1b77ebc823aca03f119854cb12027f6d7":"107200000000000000000000","7e5b19ae1be94ff4dee635492a1b012d14db0213":"100000000000000000000","5de9e7d5d1b667d095dd34099c85b0421a0bc681":"20000000000000000000","316eb4e47df71b42e16d6fe46825b7327baf3124":"4000000000000000000000","772c297f0ad194482ee8c3f036bdeb01c201d5cc":"200000000000000000000",d7052519756af42590f15391b723a03fa564a951:"4615591000000000000000","2c6846a1aa999a2246a287056000ba4dcba8e63d":"10020000000000000000000",de5b005fe8daae8d1f05de3eda042066c6c4691c:"1100000000000000000000","254c1ecc630c2877de8095f0a8dba1e8bf1f550c":"1700000000000000000000",f8f226142a428434ab17a1864a2597f64aab2f06:"172473000000000000000",a6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf:"8000000000000000000000",e587b16abc8a74081e3613e14342c03375bf0847:"2000000000000000000000","6f176065e88e3c6fe626267d18a088aaa4db80bc":"3520000000000000000000","50dcbc27bcad984093a212a9b4178eabe9017561":"145512000000000000000",e1953c6e975814c571311c34c0f6a99cdf48ab82:"50000000000000000000",be0a2f385f09dbfce96732e12bb40ac349871ba8:"1610348000000000000000","4712540265cbeec3847022c59f1b318d43400a9e":"3500000000000000000000","29bdc4f28de0180f433c2694eb74f5504ce94337":"2000000000000000000000","2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e":"9940000000000000000000","506411fd79003480f6f2b6aac26b7ba792f094b2":"500000000000000000000","23ea669e3564819a83b0c26c00a16d9e826f6c46":"1430590000000000000000",e3ffb02cb7d9ea5243701689afd5d417d7ed2ece:"78000000000000000000","38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c":"50000000000000000000","8644cc281be332ccced36da483fb2a0746d9ba2e":"400000000000000000000",e8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3:"1940000000000000000000","0631dc40d74e5095e3729eddf49544ecd4396f67":"160000000000000000000","83c897a84b695eebe46679f7da19d776621c2694":"500000000000000000000",db73460b59d8e85045d5e752e62559875e42502e:"999800000000000000000","0dd4e674bbadb1b0dc824498713dce3b5156da29":"170000000000000000000",e3933d61b77dcdc716407f8250bc91e4ffaeb09d:"86600000000000000000000","58c90754d2f20a1cb1dd330625e04b45fa619d5c":"2000000000000000000000","895ec5545644e0b78330fffab8ddeac9e833156c":"600000000000000000000","7e1e29721d6cb91057f6c4042d8a0bbc644afe73":"159800000000000000000","72b90a4dc097239492c5b9777dcd1e52ba2be2c2":"6000000000000000000000","64241a7844290e0ab855f1d4aa75b55345032224":"1600000000000000000000","6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899":"695240000000000000000","3a035594c747476d42d1ee966c36224cdd224993":"355890000000000000000",de97f4330700b48c496d437c91ca1de9c4b01ba4:"2910840000000000000000","716ad3c33a9b9a0a18967357969b94ee7d2abc10":"482000000000000000000",bfbe05e88c9cbbcc0e92a405fac1d85de248ee24:"100000000000000000000",cfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e:"1850000000000000000000",d931ac2668ba6a84481ab139735aec14b7bfbabf:"2000000000000000000000",e3263ce8af6db3e467584502ed7109125eae22a5:"2000000000000000000000",f78258c12481bcdddbb72a8ca0c043097261c6c5:"20000000000000000000","4493123c021ece3b33b1a452c9268de14007f9d3":"6685000000000000000000","431f2c19e316b044a4b3e61a0c6ff8c104a1a12f":"1000000000000000000000",e63e787414b9048478a50733359ecdd7e3647aa6:"1580000000000000000000",e4715956f52f15306ee9506bf82bccc406b3895e:"274944000000000000000",f7f91e7acb5b8129a306877ce3168e6f438b66a1:"176000000000000000000",dcdbbd4e2604e40e1710cc6730289dccfad3892d:"4600000000000000000000","2b5f4b3f1e11707a227aa5e69fa49dded33fb321":"6000000000000000000000","01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38":"200000000000000000000","841145b44840c946e21dbc190264b8e0d5029369":"300000000000000000000000",bf05070c2c34219311c4548b2614a438810ded6d:"2000000000000000000000","38f387e1a4ed4a73106ef2b462e474e2e3143ad0":"6000000000000000000000",f116b0b4680f53ab72c968ba802e10aa1be11dc8:"20000000000000000000",bea0afc93aae2108a3fac059623bf86fa582a75e:"1700000000000000000000","4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8":"29200000000000000000",ab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6:"2400000000000000000000",d71fb130f0150c565269e00efb43902b52a455a6:"200000000000000000000","99b018932bcad355b6792b255db6702dec8ce5dd":"4000086000000000000000","4b904e934bd0cc8b20705f879e905b93ea0ccc30":"2000000000000000000000","672ec42faa8cd69aaa71b32cc7b404881d52ff91":"10000000000000000000000",acbc2d19e06c3babbb5b6f052b6bf7fc37e07229:"200000000000000000000",cea8743341533cb2f0b9c6efb8fda80d77162825:"100000000000000000000","9568b7de755628af359a84543de23504e15e41e6":"40000000000000000000000","6ec96d13bdb24dc7a557293f029e02dd74b97a55":"4000000000000000000000",d95c90ffbe5484864780b867494a83c89256d6e4:"1640000000000000000000",ade6f8163bf7c7bb4abe8e9893bd0cc112fe8872:"327600000000000000000","250eb7c66f869ddf49da85f3393e980c029aa434":"4000000000000000000000",a35c19132cac1935576abfed6c0495fb07881ba0:"2000000000000000000000",d5550caaf743b037c56fd2558a1c8ed235130750:"5347598000000000000000","03097923ba155e16d82f3ad3f6b815540884b92c":"1820000000000000000000",d6d9e30f0842012a7176a917d9d2048ca0738759:"4000000000000000000000",ab9ad36e5c74ce2e96399f57839431d0e79f96ab:"164000000000000000000","75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675":"67720000000000000000","4f6d4737d7a940382487264886697cf7637f8015":"1670000000000000000000","5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca":"1940000000000000000000",d843ee0863ce933e22f89c802d31287b9671e81c:"13370000000000000000","361f3ba9ed956b770f257d3672fe1ff9f7b0240c":"600000000000000000000","6c0ae9f043c834d44271f13406593dfe094f389f":"1517545000000000000000",db34745ede8576b499db01beb7c1ecda85cf4abe:"80000000000000000000","7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a":"20000000000000000000","128b908fe743a434203de294c441c7e20a86ea67":"713304000000000000000",df236bf6abf4f3293795bf0c28718f93e3b1b36b:"1337000000000000000000","14254ea126b52d0142da0a7e188ce255d8c47178":"775000000000000000000",ceed47ca5b899fd1623f21e9bd4db65a10e5b09d:"133196000000000000000","30acd858875fa24eef0d572fc7d62aad0ebddc35":"400000000000000000000","47a281dff64167197855bf6e705eb9f2cef632ea":"1000072000000000000000","297d5dbe222f2fb52531acbd0b013dc446ac7368":"20000000000000000000000",adf85203c8376a5fde9815384a350c3879c4cb93:"1147300000000000000000",c3e0471c64ff35fa5232cc3121d1d38d1a0fb7de:"2000000000000000000000",fdecc82ddfc56192e26f563c3d68cb544a96bfed:"440000000000000000000","2614f42d5da844377578e6b448dc24305bef2b03":"2000000000000000000000","1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859":"171313000000000000000",bd66ffedb530ea0b2e856dd12ac2296c31fe29e0:"200000000000000000000","6e84876dbb95c40b6656e42ba9aea08a993b54dc":"1101932000000000000000",a1c4f45a82e1c478d845082eb18875c4ea6539ab:"200000000000000000000000","2c964849b1f69cc7cea4442538ed87fdf16cfc8f":"2000000000000000000000","45b47105fe42c4712dce6e2a21c05bffd5ea47a9":"2000000000000000000000","31e9c00f0c206a4e4e7e0522170dc81e88f3eb70":"2685000000000000000000","5fe77703808f823e6c399352108bdb2c527cb87c":"1960000000000000000000","2272186ef27dcbe2f5fc373050fdae7f2ace2316":"16100000000000000000000",b7576e9d314df41ec5506494293afb1bd5d3f65d:"20000000000000000000",ac9fff68c61b011efbecf038ed72db97bb9e7281:"9550000000000000000000",cd9529492b5c29e475acb941402b3d3ba50686b0:"1970000000000000000000",f19b39389d47b11b8a2c3f1da9124decffbefaf7:"2000000000000000000000","9e951f6dc5e352afb8d04299d2478a451259bf56":"72004000000000000000","8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331":"2000000000000000000000","29cc804d922be91f5909f348b0aaa5d21b607830":"4000000000000000000000","5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55":"1000000000000000000000",a16160851d2b9c349b92e46f829abfb210943595:"1790000000000000000000",eac6b98842542ea10bb74f26d7c7488f698b6452:"20000000000000000000000","57825aeb09076caa477887fbc9ae37e8b27cc962":"100000000000000000000",b35e8a1c0dac7e0e66dbac736a592abd44012561:"14974000000000000000","756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25":"3220000000000000000000",e13b3d2bbfdcbc8772a23315724c1425167c5688:"1032115000000000000000","0a2dcb7a671701dbb8f495728088265873356c8e":"152120000000000000000","03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79":"2740000000000000000000","98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e":"12800000000000000000000",f8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a:"10000000000000000000000","02f7f67209b16a17550c694c72583819c80b54ad":"98400000000000000000","32bb2e9693e4e085344d2f0dbd46a283e3a087fd":"400000000000000000000","9c78963fbc263c09bd72e4f8def74a9475f7055c":"13790000000000000000000","27144ca9a7771a836ad50f803f64d869b2ae2b20":"4000000000000000000000",cc758d071d25a6320af68c5dc9c4f6955ba94520:"6000000000000000000000",cb42b44eb5fd60b5837e4f9eb47267523d1a229c:"865000000000000000000",aaf5b207b88b0de4ac40d747cee06e172df6e745:"31428000000000000000000","52d380511df19d5ec2807bbcb676581b67fd37a3":"13400000000000000000",aa1b3768c16d821f580e76c8e4c8e86d7dc78853:"400000000000000000000","41098a81452317c19e3eef0bd123bbe178e9e9ca":"2800000000000000000000","267148fd72c54f620a592fb92799319cc4532b5c":"410000000000000000000",d7cdbd41fff20df727c70b6255c1ba7606055468:"200000000000000000000","0e33fcbbc003510be35785b52a9c5d216bc005f4":"1880000000000000000000","6727daf5b9d68efcab489fedec96d7f7325dd423":"2000000000000000000000",cd0a161bc367ae0927a92aac9cf6e5086714efca:"2000000000000000000000","612667f172135b950b2cd1de10afdece6857b873":"1000000000000000000000","900194c4b1074305d19de405b0ac78280ecaf967":"1000000000000000000000","51f55ef47e6456a418ab32b9221ed27dba6608ee":"4200000000000000000000","0da532c910e3ac0dfb14db61cd739a93353fd05f":"1336866000000000000000","21df2dcdaf74b2bf803404dd4de6a35eabec1bbd":"6920000000000000000000",f0e7fb9e420a5340d536f40408344feaefc06aef:"1000000000000000000000","6742a2cfce8d79a2c4a51b77747498912245cd6a":"258064000000000000000","8663a241a0a89e70e182c845e2105c8ad7264bcf":"14825507000000000000000","18e113d8177c691a61be785852fa5bb47aeebdaf":"1337000000000000000000","1bec4d02ce85fc48feb62489841d85b170586a9b":"2400000000000000000000","287cf9d0902ef819a7a5f149445bf1775ee8c47c":"16000000000000000000000","28967280214e218a120c5dda37041b111ea36d74":"200000000000000000000",a0b771951ce1deee363ae2b771b73e07c4b5e800:"1400000000000000000000","29f8fba4c30772b057edbbe62ae7420c390572e1":"1000000000000000000000",ee34c7e7995db9f187cff156918cfb6f13f6e003:"1960000000000000000000","916bf7e3c545921d3206d900c24f14127cbd5e70":"18020000000000000000000","93235f340d2863e18d2f4c52996516138d220267":"73800000000000000000","7efec0c6253caf397f71287c1c07f6c9582b5b86":"482839000000000000000","8d2e31b08803b2c5f13d398ecad88528209f6057":"9993000000000000000000","964eab4b276b4cd8983e15ca72b106900fe41fce":"500000000000000000000",eea1e97988de75d821cd28ad6822b22cce988b31:"520000000000000000000","278c0bde630ec393b1e7267fc9d7d97019e4145b":"2000000000000000000000","82e4461eb9d849f0041c1404219e4272c4900ab4":"2000000000000000000000","4a73389298031b8816cca946421c199e18b343d6":"631254000000000000000","9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4":"500000000000000000000",cb9b5103e4ce89af4f64916150bff9eecb9faa5c:"500000000000000000000","740f641614779dcfa88ed1d425d60db42a060ca6":"998630000000000000000",a4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea:"20000000000000000000","25a500eeec7a662a841552b5168b707b0de21e9e":"10020000000000000000000","185a7fc4ace368d233e620b2a45935661292bdf2":"20000000000000000000000","9b68f67416a63bf4451a31164c92f672a68759e9":"60000000000000000000000",a38b5bd81a9db9d2b21d5ec7c60552cd02ed561b:"6000000000000000000000","61c830f1654718f075ccaba316faacb85b7d120b":"400000000000000000000","8392e53776713578015bff4940cf43849d7dcba1":"153190000000000000000",dc57477dafa42f705c7fe40eae9c81756e0225f1:"500044000000000000000",febc3173bc9072136354002b7b4fb3bfc53f22f1:"370000000000000000000",d78f84e38944a0e0255faece48ba4950d4bd39d2:"5000000000000000000000",a7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8:"2000000000000000000000",aa3f29601a1331745e05c42830a15e71938a6237:"1700000000000000000000",bec6640f4909b58cbf1e806342961d607595096c:"1999944000000000000000","9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6":"74500000000000000000",e3eb2c0a132a524f72ccc0d60fee8b41685d39e2:"1970000000000000000000","90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a":"900000000000000000000",f2742e6859c569d5f2108351e0bf4dca352a48a8:"10000000000000000000000",b134c004391ab4992878337a51ec242f42285742:"2000000000000000000000",ab7416ff32254951cbbc624ec7fb45fc7ecaa872:"340000000000000000000","9795f64319fc17dd0f8261f9d206fb66b64cd0c9":"200000000000000000000","64e03ef070a54703b7184e48276c5c0077ef4b34":"320000000000000000000","3430a16381f869f6ea5423915855e800883525a9":"17900000000000000000000",f4a367b166d2991a2bfda9f56463a09f252c1b1d:"1970000000000000000000","77c4a697e603d42b12056cbba761e7f51d0443f5":"680000000000000000000","153ef58a1e2e7a3eb6b459a80ab2a547c94182a2":"96000000000000000000000","6dbe8abfa1742806263981371bf3d35590806b6e":"20000000000000000000000","4c99dae96481e807c1f99f8b7fbde29b7547c5bf":"150000000000000000000",d5b9d277d8aad20697a51f76e20978996bffe055:"143250000000000000000","0f24105abbdaa03fa6309ef6c188e51f714a6e59":"200000000000000000000","1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c":"1337000000000000000000",f37b426547a1642d8033324814f0ede3114fc212:"401100000000000000000","318f1f8bd220b0558b95fb33100ffdbb640d7ca6":"4000000000000000000000","206d55d5792a514ec108e090599f2a065e501185":"200550000000000000000","11d2247a221e70c2d66d17ee138d38c55ffb8640":"10000000000000000000000",e8de725eca5def805ff7941d31ac1c2e342dfe95:"2462500000000000000000",d561cbbc05515de73ab8cf9eae1357341e7dfdf4:"6000000000000000000000","0455dcec8a7fc4461bfd7f37456fce3f4c3caac7":"400000000000000000000","5161fd49e847f67455f1c8bb7abb36e985260d03":"1200000000000000000000","8e073bad25e42218615f4a0e6b2ea8f8de2230c0":"2402500000000000000000","6c08a6dc0173c7342955d1d3f2c065d62f83aec7":"20000000000000000000","95cb6d8a6379f94aba8b885669562c4d448e56a7":"2000000000000000000000","2805415e1d7fdec6dedfb89e521d10592d743c10":"100000000000000000000",daacdaf42226d15cb1cf98fa15048c7f4ceefe69:"300000000000000000000",e33df4ce80ccb62a76b12bcdfcecc46289973aa9:"6000000000000000000000","8f8cd26e82e7c6defd02dfad07979021cbf7150c":"3000000000000000000000","77a17122fa31b98f1711d32a99f03ec326f33d08":"1700000000000000000000","6f791d359bc3536a315d6382b88311af8ed6da47":"92000000000000000000",de30e49e5ab313214d2f01dcabce8940b81b1c76:"197000000000000000000",cf9be9b9ab86c66b59968e67b8d4dcff46b1814a:"660000000000000000000","7fdfc88d78bf1b285ac64f1adb35dc11fcb03951":"2287900000000000000000",c5134cfbb1df7a20b0ed7057622eeed280947dad:"3800000000000000000000",fa9ec8efe08686fa58c181335872ba698560ecab:"1999944000000000000000",f6a8635757c5e8c134d20d028cf778cf8609e46a:"1459416000000000000000","6265b2e7730f36b776b52d0c9d02ada55d8e3cb6":"1000000000000000000000","6a8cea2de84a8df997fd3f84e3083d93de57cda9":"100007000000000000000","1b7ed974b6e234ce81247498429a5bd4a0a2d139":"2000000000000000000000","9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46":"1337000000000000000000",d7b740dff8c457668fdf74f6a266bfc1dcb723f9:"20000000000000000000","07bc2cc8eedc01970700efc9c4fb36735e98cd71":"4000000000000000000000","3e1c962063e0d5295941f210dca3ab531eec8809":"3000000000000000000000",b447571dacbb3ecbb6d1cf0b0c8f3838e52324e2:"30199000000000000000","87764e3677eef604cbc59aed24abdc566b09fc25":"3000000000000000000000","03aa622881236dd0f4940c24c324ff8b7b7e2186":"3200000000000000000000",a4a7d306f510cd58359428c0d2f7c3609d5674d7:"3349000000000000000000","3c83c1701db0388b68210d00f5717cd9bd322c6a":"30000000000000000000000","047d5a26d7ad8f8e70600f70a398ddaa1c2db26f":"6000000000000000000000","43767bf7fd2af95b72e9312da9443cb1688e4343":"300000000000000000000","34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e":"20000000000000000000000","65a9dad42e1632ba3e4e49623fab62a17e4d3611":"93120000000000000000","48e0cbd67f18acdb7a6291e1254db32e0972737f":"100007000000000000000",a5de5e434fdcdd688f1c31b6fb512cb196724701:"800000000000000000000","6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd":"30000000000000000000",b079bb4d9866143a6da72ae7ac0022062981315c:"760000000000000000000",c0413f5a7c2d9a4b8108289ef6ecd271781524f4:"50000000000000000000000",a91a5a7b341f99c535144e20be9c6b3bb4c28e4d:"5431790000000000000000","993f146178605e66d517be782ef0b3c61a4e1925":"7011998000000000000000","966c04781cb5e67dde3235d7f8620e1ab663a9a5":"75800000000000000000000",b3f82a87e59a39d0d2808f0751eb72c2329cdcc5:"5000000000000000000000","9b77ebced7e215f0920e8c2b870024f6ecb2ff31":"1000000000000000000000",fe697ff22ca547bfc95e33d960da605c6763f35b:"1325000000000000000000","480af52076009ca73781b70e43b95916a62203ab":"924171000000000000000",a9dc0424c6969d798358b393b1933a1f51bee00a:"20000000000000000000000","7aba56f63a48bc0817d6b97039039a7ad62fae2e":"600000000000000000000","59d139e2e40c7b97239d23dfaca33858f602d22b":"2000000000000000000000","8d6170ff66978e773bb621bf72b1ba7be3a7f87e":"200000000000000000000",d668523a90f0293d65c538d2dd6c57673710196e:"39500000000000000000",bbb5a0f4802c8648009e8a6998af352cde87544f:"95500000000000000000",fc43829ac787ff88aaf183ba352aadbf5a15b193:"3960000000000000000000",fe22a0b388668d1ae2643e771dacf38a434223cc:"4000304000000000000000","092acb624b08c05510189bbbe21e6524d644ccad":"18200000000000000000","8f0538ed71da1155e0f3bde5667ceb84318a1a87":"1940000000000000000000","06994cd83aa2640a97b2600b41339d1e0d3ede6c":"250000000000000000000","9d460c1b379ddb19a8c85b4c6747050ddf17a875":"3340000000000000000000","77a769fafdecf4a638762d5ba3969df63120a41d":"2000000000000000000000","5f375b86600c40cca8b2676b7a1a1d1644c5f52c":"78838000000000000000","15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2":"1910000000000000000000","6651736fb59b91fee9c93aa0bd6ea2f7b2506180":"500000000000000000000","361d9ed80b5bd27cf9f1226f26753258ee5f9b3f":"3530900000000000000000",c9b6b686111691ee6aa197c7231a88dc60bd295d:"500000000000000000000",e9b4a4853577a9dbcc2e795be0310d1bed28641a:"1000000000000000000000","36758e049cd98bcea12277a676f9297362890023":"4000000000000000000000","6bb50813146a9add42ee22038c9f1f7469d47f47":"200200000000000000000","6de4b581385cf7fc9fe8c77d131fe2ee7724c76a":"2308840000000000000000",d2a5a024230a57ccc666760b89b0e26cafd189c7:"49997115000000000000000","65af9087e05167715497c9a5a749189489004def":"835000000000000000000",ead21c1deccfbf1c5cd96688a2476b69ba07ce4a:"72800000000000000000",e308435204793764f5fcbe65eb510f5a744a655a:"200000000000000000000","9376dce2af2ec8dcda741b7e7345664681d93668":"1000000000000000000000",a1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b:"20000000000000000000",e2198c8ca1b399f7521561fd5384a7132fba486b:"1015200000000000000000","92c13fe0d6ce87fd50e03def9fa6400509bd7073":"40000000000000000000","7517f16c28d132bb40e3ba36c6aef131c462da17":"18200000000000000000","6a023af57d584d845e698736f130db9db40dfa9a":"98800000000000000000","1518627b88351fede796d3f3083364fbd4887b0c":"16000000000000000000000",f5b6e9061a4eb096160777e26762cf48bdd8b55d:"254030000000000000000","28073efc17d05cab3195c2db332b61984777a612":"1000000000000000000000",f06a854a3c5dc36d1c49f4c87d6db333b57e4add:"10000000000000000000000","9225983860a1cb4623c72480ac16272b0c95e5f5":"2000000000000000000000","5260dc51ee07bddaababb9ee744b393c7f4793a6":"34040000000000000000","0f127bbf8e311caea2ba502a33feced3f730ba42":"188000000000000000000","17d521a8d9779023f7164d233c3b6420ffd223ed":"20000000000000000000","8c2b7d8b608d28b77f5caa9cd645242a823e4cd9":"1820000000000000000000","6e866d032d405abdd65cf651411d803796c22311":"2000000000000000000000",dc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6:"1000000000000000000000",c84d9bea0a7b9f140220fd8b9097cfbfd5edf564:"123047000000000000000",ff86e5e8e15b53909600e41308dab75f0e24e46b:"902400000000000000000",d7164aa261c09ad9b2b5068d453ed8eb6aa13083:"3000000000000000000000","76aaf8c1ac012f8752d4c09bb46607b6651d5ca8":"20000000000000000000","41786a10d447f484d33244ccb7facd8b427b5b8c":"1000000000000000000000","2e0c57b47150f95aa6a7e16ab9b1cbf54328979a":"100000000000000000000","3f747237806fed3f828a6852eb0867f79027af89":"1500000000000000000000",a568db4d57e4d67462d733c69a9e0fe26e218327:"1096140000000000000000","1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c":"13400000000000000000",d1ea4d72a67b5b3e0f315559f52bd0614d713069:"2000000000000000000000",bfaeb91067617dcf8b44172b02af615674835dba:"160661000000000000000",b71a13ba8e95167b80331b52d69e37054fe7a826:"200000000000000000000",b67a80f170197d96cdcc4ab6cba627b4afa6e12c:"2400000000000000000000","35af040a0cc2337a76af288154c7561e1a233349":"1000000000000000000000",c86190904b8d079ec010e462cbffc90834ffaa5c:"10100000000000000000000","383304dd7a5720b29c1a10f60342219f48032f80":"5600000000000000000000","191313525238a21c767457a91374f02200c55448":"116400000000000000000",cc4a2f2cf86cf3e43375f360a4734691195f1490:"1348127000000000000000","4e020779b5ddd3df228a00cb48c2fc979da6ae38":"2000000000000000000000",e206fb7324e9deb79e19903496d6961b9be56603:"100000000000000000000","3ae160e3cd60ae31b9d6742d68e14e76bd96c517":"30000000000000000000","1f7d8e86d6eeb02545aad90e91327bd369d7d2f3":"20000000000000000000","68c7d1711b011a33f16f1f55b5c902cce970bdd7":"152000000000000000000","637be71b3aa815ff453d5642f73074450b64c82a":"2000000000000000000000","1584a2c066b7a455dbd6ae2807a7334e83c35fa5":"130000000000000000000","9c05e9d0f0758e795303717e31da213ca157e686":"1000000000000000000000","4f1a2da54a4c6da19d142412e56e815741db2325":"100000000000000000000","9a4ca8b82117894e43db72b9fa78f0b9b93ace09":"50000000000000000000","26c99f8849c9802b83c861217fd07a9e84cdb79d":"300000000000000000000","45c0d19f0b8e054f9e893836d5ecae7901af2812":"5000000000000000000000","00dc01cbf44978a42e8de8e436edf94205cfb6ec":"1458440000000000000000",de7dee220f0457a7187d56c1c41f2eb00ac56021:"629924000000000000000","1c128bd6cda5fca27575e4b43b3253c8c4172afe":"2000000000000000000000","666746fb93d1935c5a3c684e725010c4fad0b1d8":"20000000000000000000","51d78b178d707e396e8710965c4f41b1a1d9179d":"110600000000000000000","68f7573cd457e14c03fea43e302d30347c10705c":"5000000000000000000000","9d30cb237bc096f17036fc80dd21ca68992ca2d9":"30380000000000000000000",fbcfcc4a7b0f26cf26e9f3332132e2fc6a230766:"8000000000000000000000",b166e37d2e501ae73c84142b5ffb5aa655dd5a99:"1999000000000000000000","6df24f6685a62f791ba337bf3ff67e91f3d4bc3a":"2166000000000000000000","92e435340e9d253c00256389f52b067d55974e76":"268000000000000000000",ea53d26564859d9e90bb0e53b7abf560e0162c38:"400000000000000000000",e26657f0ed201ea2392c9222b80a7003608ddf30:"40000000000000000000",f4177a0d85d48b0e264211ce2aa2efd3f1b47f08:"3593425000000000000000","9d47ba5b4c8505ad8da42934280b61a0e1e8b971":"100000000000000000000","63c2a3d235e5eeabd0d4a6afdb89d94627396495":"1241620000000000000000","446a8039cecf9dce4879cbcaf3493bf545a88610":"7000000000000000000000","7fa37ed67887751a471f0eb306be44e0dbcd6089":"1060000000000000000000","26d4a16891f52922789217fcd886f7fce296d400":"2000000000000000000000","487e108502b0b189ef9c8c6da4d0db6261eec6c0":"1910000000000000000000","7484d26becc1eea8c6315ec3ee0a450117dc86a0":"12000000000000000000000",ad9e97a0482f353a05c0f792b977b6c7e811fa5f:"200000000000000000000","2273bad7bc4e487622d175ef7a66988b6a93c4ee":"20000000000000000000","3b93b16136f11eaf10996c95990d3b2739ccea5f":"10000000000000000000000",f3f1fa3918ca34e2cf7e84670b1f4d8eca160db3:"680000000000000000000","88a2154430c0e41147d3c1fee3b3b006f851edbd":"999972000000000000000","25185f325acf2d64500698f65c769ddf68301602":"5000000000000000000000",e9cafe41a5e8bbd90ba02d9e06585b4eb546c57f:"2000000000000000000000","95681cdae69b2049ce101e325c759892cac3f811":"2857600000000000000000","475066f9ad26655196d5535327bbeb9b7929cb04":"3040000000000000000000","6685fd2e2544702c360b8bb9ee78f130dad16da5":"2000000000000000000000","45e68db94c7d0ab7ac41857a71d67147870f4e71":"400000000000000000000000","4ad95d188d6464709add2555fb4d97fe1ebf311f":"346000000000000000000","73bedd6fda7ba3272185087b6351fc133d484e37":"5057200000000000000000","1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b":"590598000000000000000","77306ffe2e4a8f3ca826c1a249f7212da43aeffd":"20000000000000000000000",eb453f5a3adddd8ab56750fadb0fe7f94d9c89e7:"20000000000000000000","7201d1c06920cd397ae8ad869bcda6e47ffb1b5a":"20000000000000000000","821cb5cd05c7ef909fe1be60733d8963d760dc41":"4000000000000000000000","496e319592b341eaccd778dda7c8196d54cac775":"9250000000000000000000","88609e0a465b6e99fce907166d57e9da0814f5c8":"20000000000000000000000",c7ec62b804b1f69b1e3070b5d362c62fb309b070:"13068074000000000000000","3eb9ef06d0c259040319947e8c7a6812aa0253d8":"167000000000000000000",cbf37ff854a2f1ce53934494777892d3ec655782:"10000000000000000000000","02b1af72339b2a2256389fd64607de24f0de600a":"2000000000000000000000",a8beb91c2b99c8964aa95b6b4a184b1269fc3483:"400000000000000000000","922a20c79a1d3a26dd3829677bf1d45c8f672bb6":"4000000000000000000000",c5843399d150066bf7979c34ba294620368ad7c0:"200000000000000000000","8cd0cd22e620eda79c0461e896c93c44837e2968":"2000000000000000000000","6170dd0687bd55ca88b87adef51cfdc55c4dd458":"2005160000000000000000",eed384ef2d41d9d203974e57c12328ea760e08ea:"1000000000000000000000",b129a5cb7105fe810bd895dc7206a991a4545488:"30000000000000000000","3872f48dc5e3f817bc6b2ad2d030fc5e0471193d":"4000000000000000000000","514b7512c9ae5ea63cbf11715b63f21e18d296c1":"1999944000000000000000","7ab256b204800af20137fabcc916a23258752501":"20000000000000000000000",fc66faba277f4b5de64ad45eb19c31e00ced3ed5:"5640000000000000000000","39824f8bced176fd3ea22ec6a493d0ccc33fc147":"4000000000000000000000",e338e859fe2e8c15554848b75caecda877a0e832:"1801800000000000000000",e53c68796212033e4e6f9cff56e19c461eb454f9:"1000000000000000000000","8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f":"2000000000000000000000","6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a":"57300000000000000000","97de21e421c37fe4b8025f9a51b7b390b5df7804":"80000000000000000000000",d25aecd7eb8bd6345b063b5dbd271c77d3514494:"1820000000000000000000","57b23d6a1adc06c652a779c6a7fb6b95b9fead66":"200000000000000000000","0d658014a199061cf6b39433140303c20ffd4e5a":"8200000000000000000000","30eac740e4f02cb56eef0526e5d300322600d03e":"1970000000000000000000","4eead40aad8c73ef08fc84bc0a92c9092f6a36bf":"26740000000000000000","30f7d025d16f7bee105580486f9f561c7bae3fef":"500000000000000000000","0977bfba038a44fb49b03970d8d8cf2cb61f8b25":"420000000000000000000",b14bbeff70720975dc6191b2a44ff49f2672873c:"143000000000000000000",d588c3a5df228185d98ee7e60748255cdea68b01:"4000000000000000000000","225d35faedb391c7bc2db7fa9071160405996d00":"167774000000000000000",c0e457bd56ec36a1246bfa3230fff38e5926ef22:"1940000000000000000000","2a9c57fe7b6b138a920d676f3c76b6c2a0eef699":"9400000000000000000000","36df8f883c1273ec8a171f7a33cfd649b1fe6075":"227290000000000000000","234f46bab73fe45d31bf87f0a1e0466199f2ebac":"485000000000000000000",a2e1b8aa900e9c139b3fa122354f6156d92a18b1:"500000000000000000000","517cd7608e5d0d83a26b717f3603dac2277dc3a4":"2000000000000000000000","75f7539d309e9039989efe2e8b2dbd865a0df088":"2460000000000000000000","4b792e29683eb586e394bb33526c6001b397999e":"600000000000000000000",a34f9d568bf7afd94c2a5b8a5ff55c66c4087999:"2444000000000000000000","4b31bf41abc75c9ae2cd8f7f35163b6e2b745054":"382000000000000000000",e35453eef2cc3c7a044d0ac134ba615908fa82ee:"147510000000000000000","7aa79ac04316cc8d08f20065baa6d4142897d54e":"1400000000000000000000",f1dc8ac81042c67a9c3c6792b230c46ac016ca10:"200000000000000000000","2bb366b9edcb0da680f0e10b3b6e28748190d6c3":"5799400000000000000000",a567770b6ae320bdde50f904d663e746a61dace6:"2000000000000000000000",d9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9:"5348000000000000000000","27830c5f6023afaaf79745676c204a0faccda0ba":"240000000000000000000","3cb179cb4801a99b95c3b0c324a2bdc101a65360":"26000000000000000000","976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee":"240000000000000000000","752a5ee232612cd3005fb26e5b597de19f776be6":"5460000000000000000000","7d5aa33fc14b51841a06906edb2bb49c2a117269":"300048000000000000000","55ca6abe79ea2497f46fdbb830346010fe469cbe":"5730000000000000000000","6bec311ad05008b4af353c958c40bd06739a3ff3":"16380000000000000000000","30e9698cf1e08a9d048bd8d8048f28be7ed9409f":"6685000000000000000000","9afa536b4c66bc38d875c4b30099d9261fdb38eb":"205981000000000000000","6b63a2dfb2bcd0caec0022b88be30c1451ea56aa":"809021000000000000000",d07be0f90997caf903c8ac1d53cde904fb190741:"1000200000000000000000","893cdddf5377f3c751bf2e541120045a47cba101":"100000000000000000000",c1cdc601f89c0428b31302d187e0dc08ad7d1c57:"6000000000000000000000","8f8acb107607388479f64baaabea8ff007ada97d":"27281800000000000000000","88bc43012edb0ea9f062ac437843250a39b78fbb":"20000000000000000000000",fcfc3a5004d678613f0b36a642269a7f371c3f6a:"1000000000000000000000",f509557e90183fbf0f0651a786487bcc428ba175:"194000000000000000000",e3d915eda3b825d6ee4af9328d32ac18ada35497:"500000000000000000000",f237ef05261c34d79cc22b860de0f17f793c3860:"200000000000000000000",a3a2e319e7d3a1448b5aa2468953160c2dbcba71:"2000000000000000000000","3a368efe4ad786e26395ec9fc6ad698cae29fe01":"632200000000000000000","8e3240b0810e1cf407a500804740cf8d616432a4":"40309000000000000000","5691dd2f6745f20e22d2e1d1b955aa2903d65656":"1969606000000000000000","5f93ff832774db5114c55bb4bf44ccf3b58f903f":"192026650000000000000000","2c1cc6e18c152488ba11c2cc1bcefa2df306abd1":"1670000000000000000000",bde9786a84e75b48f18e726dd78d70e4af3ed802:"5730000000000000000000","79551cede376f747e3716c8d79400d766d2e0195":"46250000000000000000000","49f028395b5a86c9e07f7778630e4c2e3d373a77":"122735000000000000000","6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7":"2000000000000000000000","068e29b3f191c812a6393918f71ab933ae6847f2":"1999944000000000000000","6e64e6129f224e378c0e6e736a7e7a06c211e9ec":"1000000000000000000000",c4c15318d370c73318cc18bdd466dbaa4c6603bf:"19700000000000000000","8035bcffaefdeeea35830c497d14289d362023de":"300000000000000000000",a997dfc7986a27050848fa1c64d7a7d6e07acca2:"143000000000000000000","2fe13a8d0785de8758a5e41876c36e916cf75074":"4000000000000000000000","6f24c9af2b763480515d1b0951bb77a540f1e3f9":"1970000000000000000000","4c23b370fc992bb67cec06e26715b62f0b3a4ac3":"10000000000000000000000","4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039":"2000000000000000000000","117db836377fe15455e02c2ebda40b1ceb551b19":"6000000000000000000000",ef1c0477f1184d60accab374d374557a0a3e10f3:"152000000000000000000","99fe0d201228a753145655d428eb9fd94985d36d":"1939268000000000000000",b3731b046c8ac695a127fd79d0a5d5fa6ae6d12e:"1998000000000000000000",dce30c31f3ca66721ecb213c809aab561d9b52e4:"2000000000000000000000",ddd69c5b9bf5eb5a39cee7c3341a120d973fdb34:"1987730000000000000000","216e41864ef98f060da08ecae19ad1166a17d036":"5730000000000000000000","6a53d41ae4a752b21abed5374649953a513de5e5":"2000000000000000000000","20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5":"2000000000000000000000","19732bf973055dbd91a4533adaa2149a91d38380":"2000000000000000000000","51ea1c0934e3d04022ed9c95a087a150ef705e81":"6280000000000000000000",a0de5c601e696635c698b7ae9ca4539fc7b941ec:"346150000000000000000","94e1f5cb9b8abace03a1a6428256553b690c2355":"20000000000000000000",a539b4a401b584dfe0f344b1b422c65543167e2e:"200000000000000000000","50584d9206a46ce15c301117ee28f15c30e60e75":"13400000000000000000","856eb204241a87830fb229031343dc30854f581a":"1000000000000000000000","9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa":"500000000000000000000","8925da4549e15155e57a628522cea9dddf627d81":"1000070000000000000000",a89df34859edd7c820db887740d8ff9e15157c7b:"2000000000000000000000",ad9f4c890a3b511cee51dfe6cfd7f1093b76412c:"506600000000000000000",f8c7f34a38b31801da43063477b12b27d0f203ff:"494800000000000000000",a642501004c90ea9c9ed1998ba140a4cd62c6f5f:"250543000000000000000","508cf19119db70aa86454253da764a2cb1b2be1a":"1000000000000000000000","2979741174a8c1ea0b7f9edf658177859417f512":"461283000000000000000","654f524847b3a6acc0d3d5f1f362b603edf65f96":"8000000000000000000000","5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c":"1000000000000000000000","17e82e7078dc4fd9e879fb8a50667f53a5c54591":"200000000000000000000","8b07d050754dc9ba230db01c310afdb5395aa1b3":"118080000000000000000","5f77a107ab1226b3f95f10ee83aefc6c5dff3edc":"500000000000000000000","475a6193572d4a4e59d7be09cb960ddd8c530e2f":"667323000000000000000","6470a4f92ec6b0fccd01234fa59023e9ff1f3aac":"3000000000000000000000","2fbcef3384d420e4bf61a0669990bc7054f1a5af":"2000000000000000000000",bbabf6643beb4bd01c120bd0598a0987d82967d1:"3342500000000000000000","41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2":"2009400000000000000000",fb9473cf7712350a1fa0395273fc80560752e4fb:"123300000000000000000","38b2197106123387a0d4de368431a8bacdda30e2":"20000000000000000000","5ed56115bd6505a88273df5c56839470d24a2db7":"65601000000000000000","523f6d64690fdacd942853591bb0ff20d3656d95":"1820000000000000000000","55caff4bba04d220c9a5d2018672ec85e31ef83e":"2000000000000000000000","65af8d8b5b1d1eedfa77bcbc96c1b133f83306df":"98000000000000000000","7456c5b2c5436e3e571008933f1805ccfe34e9ec":"1000000000000000000000",a6eebbe464d39187bf80ca9c13d72027ec5ba8be:"3000000000000000000000",dd35cfdbcb993395537aecc9f59085a8d5ddb6f5:"1000000000000000000000","98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da":"901520000000000000000","860f5ffc10de767ded807f71e861d647dfd219b1":"10000000000000000000000","1a644a50cbc2aee823bd2bf243e825be4d47df02":"100007000000000000000",a8455b411765d6901e311e726403091e42c56683:"3380000000000000000000","3a86ee94862b743dd34f410969d94e2c5652d4ad":"201610000000000000000",a57360f002e0d64d2d74457d8ca4857ee00bcddf:"335780000000000000000",e59b3bd300893f97233ef947c46f7217e392f7e9:"1000000000000000000000","9f3a74fd5e7edcc1162993171381cbb632b7cff0":"10000000000000000000000","675d5caa609bf70a18aca580465d8fb7310d1bbb":"20000000000000000000000","77f609ca8720a023262c55c46f2d26fb3930ac69":"17300000000000000000",f8ac4a39b53c11307820973b441365cffe596f66:"2000000000000000000000","112634b4ec30ff786e024159f796a57939ea144e":"1999944000000000000000","49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a":"1474134000000000000000","91cc46aa379f856a6640dccd5a648a7902f849d9":"200000000000000000000",b46440c797a556e04c7d9104660491f96bb076bf:"14900000000000000000",e5968797468ef767101b761d431fce14abffdbb4:"8040000000000000000000",c0895efd056d9a3a81c3da578ada311bfb9356cf:"200000000000000000000","76846f0de03b5a76971ead298cdd08843a4bc6c6":"15500000000000000000","5f708eaf39d823946c51b3a3e9b7b3c003e26341":"1820000000000000000000","24f7450ddbf18b020feb1a2032d9d54b633edf37":"50000000000000000000",cae3a253bcb2cf4e13ba80c298ab0402da7c2aa0:"5400000000000000000000","91e8810652e8e6161525d63bb7751dc20f676076":"725000000000000000000","543629c95cdef428ad37d453ca9538a9f90900ac":"43250000000000000000000","6e79edd4845b076e4cd88d188b6e432dd93f35aa":"955000000000000000000",bd325d4029e0d8729f6d399c478224ae9e7ae41e:"3880000000000000000000","42cecfd2921079c2d7df3f08b07aa3beee5e219a":"1000000000000000000000","3690246ba3c80679e22eac4412a1aefce6d7cd82":"20000000000000000000000","577aeee8d4bc08fc97ab156ed57fb970925366be":"333046000000000000000",fe00bf439911a553982db638039245bcf032dbdc:"394000000000000000000","91f624b24a1fa5a056fe571229e7379db14b9a1e":"11999974000000000000000",f206d328e471d0117b246d2a4619827709e96df3:"3001000000000000000000","073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05":"70400000000000000000",f56048dd2181d4a36f64fcecc6215481e42abc15:"200000000000000000000",ef76a4cd8febcbc9b818f17828f8d93473f3f3cb:"4000000000000000000000","1031e0ecb54985ae21af1793950dc811888fde7c":"20000000000000000000","8e0fee38685a94aabcd7ce857b6b1409824f75b8":"500000000000000000000",f0cbef84e169630098d4e301b20208ef05846ac9:"259084000000000000000",bbca65b3266ea2fb73a03f921635f912c7bede00:"1970000000000000000000","0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd":"200000000000000000000",b8f30758faa808dbc919aa7b425ec922b93b8129:"1000076000000000000000","936dcf000194e3bff50ac5b4243a3ba014d661d8":"10000000000000000000000",b14ddb0386fb606398b8cc47565afae00ff1d66a:"2973024000000000000000","2ec95822eb887bc113b4712a4dfd7f13b097b5e7":"1000000000000000000000","0136a5af6c3299c6b5f005fdaddb148c070b299b":"20368000000000000000","37cb868d2c3f95b257611eb34a4188d58b749802":"2000000000000000000000",cd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d:"1148000000000000000000",b5fa8184e43ed3e0b8ab91216461b3528d84fd09:"2680000000000000000000","3dbf0dbfd77890800533f09dea8301b9f025d2a6":"1000000000000000000000",b553d25d6b5421e81c2ad05e0b8ba751f8f010e3:"2000000000000000000000",dbf8b13967f55125272de0562536c450ba5655a0:"2046830000000000000000","0f6e840a3f2a24647d8e43e09d45c7c335df4248":"2500000000000000000000",fa2fd29d03fee9a07893df3a269f56b72f2e1e64:"10000000000000000000000","8b57b2bc83cc8d4de331204e893f2f3b1db1079a":"40000000000000000000","7f541491d2ac00d2612f94aa7f0bcb014651fbd4":"376000000000000000000","4f4a9be10cd5d3fb5de48c17be296f895690645b":"40000000000000000000000","45d1c9eedf7cab41a779057b79395f5428d80528":"2000000000000000000000","662334814724935b7931ddca6100e00d467727cd":"637000000000000000000","2c52c984102ee0cd3e31821b84d408930efa1ac7":"2000000000000000000000","000d836201318ec6899a67540690382780743280":"200000000000000000000","81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b":"101600000000000000000","7860a3de38df382ae4a4dce18c0c07b98bce3dfa":"1000000000000000000000","5e8e4df18cf0af770978a8df8dac90931510a679":"2000000000000000000000","05d68dad61d3bbdfb3f779265c49474aff3fcd30":"39399000000000000000","96eafbf2fb6f4db9a436a74c45b5654452e23819":"20000000000000000000",d7d7f2caa462a41b3b30a34aeb3ba61010e2626f:"2000000000000000000000","0b71f554122469ef978e2f1fefd7cbb410982772":"3880000000000000000000","504666ce8931175e11a5ed11c1dcaa06e57f4e66":"11792000000000000000000",d00f067286c0fbd082f9f4a61083ec76deb3cee6:"1000000000000000000000","02e4cb22be46258a40e16d4338d802fffd00c151":"379786000000000000000","1c13d38637b9a47ce79d37a86f50fb409c060728":"1337000000000000000000",e30212b2011bb56bdbf1bc35690f3a4e0fd905ea:"8022000000000000000000","1df6911672679bb0ef3509038c0c27e394fdfe30":"540000000000000000000","2b8fe4166e23d11963c0932b8ade8e0145ea0770":"43250000000000000000000","6509eeb1347e842ffb413e37155e2cbc738273fd":"2000000000000000000000","8b7e9f6f05f7e36476a16e3e7100c9031cf404af":"1000000000000000000000",bec8caf7ee49468fee552eff3ac5234eb9b17d42:"2000000000000000000000","38898bbb4553e00bbfd0cf268b2fc464d154add5":"320000000000000000000",cbb3189e4bd7f45f178b1c30c76e26314d4a4b0a:"295007000000000000000",be1cd7f4c472070968f3bde268366b21eeea8321:"4300000000000000000000","976a18536af41874426308871bcd1512a775c9f8":"10000000000000000000000",e9c758f8da41e3346e4350e5ac3976345c6c1082:"1930050000000000000000","64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9":"200000000000000000000","9e01765aff08bc220550aca5ea2e1ce8e5b09923":"1000000000000000000000",ba0f39023bdb29eb1862a9f9059cab5d306e662f:"2000000000000000000000","2baf8d6e221174124820ee492b9459ec4fadafbb":"2000000000000000000000","655d5cd7489629e2413c2105b5a172d933c27af8":"4040060000000000000000",badc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739:"6000000000000000000000",e64f6e1d6401b56c076b64a1b0867d0b2f310d4e:"51570000000000000000","7a8563867901206f3f2bf0fa3e1c8109cabccd85":"137000000000000000000",d17fbe22d90462ed37280670a2ea0b3086a0d6d6:"199955000000000000000",e96d7d4cdd15553a4e4d316d6d6480ca3cea1e38:"12200000000000000000000",f04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f:"1000000000000000000000","81164deb10814ae08391f32c08667b6248c27d7a":"394000000000000000000","7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997":"60000000000000000000",c982586d63b0d74c201b1af8418372e30c7616be:"100000000000000000000","64cf0935bf19d2cebbecd8780d27d2e2b2c34166":"1970000000000000000000",cd566ad7b883f01fd3998a9a58a9dee4724ddca5:"58848000000000000000","9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e":"1200000000000000000000","0d69100c395ce6c5eaadf95d05d872837ededd21":"400000000000000000000",fe91eccf2bd566afa11696c5049fa84c69630a52:"1940000000000000000000","005d0ee8155ec0a6ff6808552ca5f16bb5be323a":"197000000000000000000","3e5cb8928c417825c03a3bfcc52183e5c91e42d7":"4264790000000000000000","9c1b771f09af882af0643083de2aa79dc097c40e":"2480000000000000000000",eba388b0da27c87b1cc0eac6c57b2c5a0b459c1a:"6800000000000000000000","7529f3797bb6a20f7ea6492419c84c867641d81c":"2000000000000000000000","532a7da0a5ad7407468d3be8e07e69c7dd64e861":"500000000000000000000",de82cc8d4a1bb1d9434392965b3e80bad3c03d4f:"1477500000000000000000","4a82694fa29d9e213202a1a209285df6e745c209":"4000000000000000000000","3e53ff2107a8debe3328493a92a586a7e1f49758":"23143470000000000000000",b2ddb786d3794e270187d0451ad6c8b79e0e8745:"400000000000000000000","6ebcf9957f5fc5e985add475223b04b8c14a7aed":"1730000000000000000000",c5c7590b5621ecf8358588de9b6890f2626143f1:"3000000000000000000000",ae4f122e35c0b1d1e4069291457c83c07f965fa3:"1000000000000000000000","47885ababedf4d928e1c3c71d7ca40d563ed595f":"1820000000000000000000","78ce3e3d474a8a047b92c41542242d0a08c70f99":"10000000000000000000000","6134d942f037f2cc3d424a230c603d67abd3edf7":"2000000000000000000000","1360e87df24c69ee6d51c76e73767ffe19a2131c":"92000000000000000000","5fd1c3e31778276cb42ea740f5eae9c641dbc701":"194000000000000000000","98397342ec5f3d4cb877e54ef5d6f1d366731bd4":"5910000000000000000000","6d4b5c05d06a20957e1748ab6df206f343f92f01":"10020475000000000000000",e6115b13f9795f7e956502d5074567dab945ce6b:"100000000000000000000000","23730c357a91026e44b1d0e2fc2a51d071d8d77b":"4000000000000000000000",fae881937047895a660cf229760f27e66828d643:"182000000000000000000",ff3ef6ba151c21b59986ae64f6e8228bc9a2c733:"2000000000000000000000",dfbd4232c17c407a980db87ffbcda03630e5c459:"553150000000000000000","4429a29fee198450672c0c1d073162250bec6474":"999200000000000000000","7e8f96cc29f57b0975120cb593b7dd833d606b53":"197000000000000000000","5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b":"0",daa776a6754469d7b9267a89b86725e740da0fa0:"1970000000000000000000","139e479764b499d666208c4a8a047a97043163dd":"598880000000000000000","5ad5e420755613886f35aa56ac403eebdfe4b0d0":"80000000000000000000000","3fe801e61335c5140dc7eda2ef5204460a501230":"2000000000000000000000",ce8a6b6d5033b1498b1ffeb41a41550405fa03a2:"4000000000000000000000","26c2ffc30efdc5273e76183a16c2698d6e531286":"776000000000000000000","71ec3aec3f8f9221f9149fede06903a0f9a232f2":"200000000000000000000",ef35f6d4b1075e6aa139151c974b2f4658f70538:"1111111000000000000000","26a68eab905a8b3dce00e317308225dab1b9f6b8":"1980000000000000000000","63f5b53d79bf2e411489526530223845fac6f601":"30000000000000000000000","481115296ab7db52492ff7b647d63329fb5cbc6b":"16100000000000000000000",f19f193508393e4d2a127b20b2031f39c82581c6:"3500088000000000000000","500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c":"5348000000000000000000","65ea67ad3fb56ad5fb94387dd38eb383001d7c68":"100000000000000000000","7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5":"1970000000000000000000","60be6f953f2a4d25b6256ffd2423ac1438252e4e":"150000000000000000000",ac1dfc984b71a19929a81d81f04a7cbb14073703:"600000000000000000000",a3c14ace28b192cbb062145fcbbd5869c67271f6:"8000000000000000000000","2da76b7c39b420e388ba2c1020b0856b0270648a":"2000000000000000000000","622be4b45495fcd93143efc412d699d6cdc23dc5":"17300000000000000000",d3f873bd9956135789ab00ebc195b922e94b259d:"2000000000000000000000","975f3764e97bbccf767cbd3b795ba86d8ba9840e":"346000000000000000000",fc39be41094b1997d2169e8264c2c3baa6c99bc4:"2000000000000000000000","12ffc1128605cb0c13709a7290506f2690977193":"3340000000000000000000","9b1168de8ab64b47552f3389800a9cc08b4666cf":"1730000000000000000000","9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0":"500000000000000000000","505a33a18634dd4800693c67f48a1d693d4833f8":"7252000000000000000000",d08fc09a0030fd0928cd321198580182a76aae9f:"1000000000000000000000","6acddca3cd2b4990e25cd65c24149d0912099e79":"3000037000000000000000","397a6ef8763a18f00fac217e055c0d3094101011":"2000000000000000000000","4e0bd32473c4c51bf25654def69f797c6b29a232":"1600930000000000000000","28d8c35fb7eea622582135e3ad47a227c9a663bd":"18200000000000000000",f96488698590dc3b2c555642b871348dfa067ad5:"500000000000000000000","4eebe80cb6f3ae5904f6f4b28d907f907189fcab":"1999944000000000000000","8d1abd897dacd4312e18080c88fb9647eab44052":"216000000000000000000","457029c469c4548d168cec3e65872e4428d42b67":"2000000000000000000000","1296acded1e063af39fe8ba0b4b63df789f70517":"100014000000000000000","71762c63678c18d1c6378ce068e666381315147e":"2000000000000000000000","6cc1c878fa6cde8a9a0b8311247e741e4642fe6d":"985000000000000000000","8d9ed7f4553058c26f7836a3802d3064eb1b363d":"90000000000000000000","5032e4bcf7932b49fdba377b6f1499636513cfc3":"100000000000000000000","462b678b51b584f3ed7ada070b5cd99c0bf7b87f":"100000000000000000000",c8aa49e3809f0899f28ab57e6743709d58419033:"880000000000000000000","01b1cae91a3b9559afb33cdc6d689442fdbfe037":"200000000000000000000",b1043004ec1941a8cf4f2b00b15700ddac6ff17e:"1000000000000000000000","5ba2c6c35dfaec296826591904d544464aeabd5e":"20000000000000000000",b32400fd13c5500917cb037b29fe22e7d5228f2d:"40000000000000000000000",d59d92d2c8701980cc073c375d720af064743c0c:"19000000000000000000000","11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2":"1000000000000000000000",d4cb21e590c5a0e06801366aff342c7d7db16424:"494000000000000000000","5b6d55f6712967405c659129f4b1de09acf2cb7b":"267400000000000000000","6179979907fe7f037e4c38029d60bcbab832b3d6":"1610000000000000000000","33c407133b84b3ca4c3ded1f4658900c38101624":"2800000000000000000000",cd2a36d753e9e0ed012a584d716807587b41d56a:"261400000000000000000","8155fa6c51eb31d808412d748aa086105018122f":"1880000000000000000000","3ecc8e1668dde995dc570fe414f44211c534a615":"2000000000000000000000",d6395db5a4bb66e60f4cfbcdf0057bb4d97862e2:"910000000000000000000",b6fb39786250081426a342c70d47ee521e5bc563:"15000000000000000000000","510eda5601499a0d5e1a006bfffd833672f2e267":"2000000000000000000000","98c19dba810ba611e68f2f83ee16f6e7744f0c1f":"200000000000000000000","34ff26eb60a8d1a95a489fae136ee91d4e58084c":"600000000000000000000","6ad90be252d9cd464d998125fab693060ba8e429":"4000000000000000000000","038323b184cff7a82ae2e1bda7793fe4319ca0bf":"20000000000000000000000",dc5305b4020a06b49d657c7ca34c35c91c5f2c56:"7045990000000000000000",c9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f:"2000000000000000000000","7beb81fb2f5e91526b2ac9795e76c69bcff04bc0":"69400000000000000000000",b8bc9bca7f71b4ed12e620438d620f53c114342f:"500000000000000000000",d288e7cb7ba9f620ab0f7452e508633d1c5aa276:"4000000000000000000000",a2e460a989cb15565f9ecca7d121a18e4eb405b6:"2000000000000000000000","7489cc8abe75cda4ef0d01cef2605e47eda67ab1":"133700000000000000000","38b403fb1fb7c14559a2d6f6564a5552bca39aff":"2000000000000000000000",e55c80520a1b0f755b9a2cd3ce214f7625653e8a:"2000000000000000000000","451b7070259bdba27100e36e23428a53dfe304e9":"13370000000000000000","8b5c914b128bf1695c088923fa467e7911f351fa":"98500000000000000000","17df49518d73b129f0da36b1c9b40cb66420fdc7":"10000000000000000000000",c1950543554d8a713003f662bb612c10ad4cdf21:"18200000000000000000",fa7606435b356cee257bd2fcd3d9eacb3cd1c4e1:"100000000000000000000",e0bad98eee9698dbf6d76085b7923de5754e906d:"167000000000000000000",ce53c8cdd74296aca987b2bc19c2b875a48749d0:"3000000000000000000000",d0c55abf976fdc3db2afe9be99d499484d576c02:"1000000000000000000000","238a6b7635252f5244486c0af0a73a207385e039":"1370000000000000000000",ceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec:"740745000000000000000","3847667038f33b01c1cc795d8daf5475eff5a0d4":"728330000000000000000",a08d215b5b6aac4861a281ac7e400b78fef04cbf:"20000000000000000000","2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73":"185000000000000000000","9e8f64ddcde9b8b451bafaa235a9bf511a25ac91":"2674000000000000000000",ddac6bf4bbdd7d597d9c686d0695593bedccc7fa:"865000000000000000000","22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd":"160000000000000000000","3aea4e82d2400248f99871a41ca257060d3a221b":"1000000000000000000000",fb126f0ec769f49dcefca2f200286451583084b8:"5013750000000000000000","1b8bd6d2eca20185a78e7d98e8e185678dac4830":"16700000000000000000000","664cd67dccc9ac8228b45c55db8d76550b659cdc":"394000000000000000000","553f37d92466550e9fd775ae74362df030179132":"2000000000000000000000","730d8763c6a4fd824ab8b859161ef7e3a96a1200":"20000000000000000000000","04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3":"100000000000000000000",f1624d980b65336feac5a6d54125005cfcf2aacb:"2000000000000000000000","0b7fc9ddf70576f6330669eaaa71b6a831e99528":"140000000000000000000",fa2bbca15d3fe39f8a328e91f90da14f7ac6253d:"200000000000000000000","07feef54c136850829badc4b49c3f2a73c89fb9e":"118200000000000000000","3703350c4d6fe337342cddc65bf1e2386bf3f9b2":"2020000000000000000000","6d7d1c949511f88303808c60c5ea0640fcc02683":"10000000000000000000000","34fa7792bad8bbd7ff64056214a33eb6600c1ea8":"50000000000000000000","994cc2b5227ec3cf048512467c41b7b7b748909f":"2000000000000000000000","08da3a7a0f452161cfbcec311bb68ebfdee17e88":"2000000000000000000000",bbb4ee1d82f2e156442cc93338a2fc286fa28864:"1370000000000000000000","7a2dfc770e24368131b7847795f203f3d50d5b56":"11400000000000000000000","7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88":"1910000000000000000000",c6a30ef5bb3320f40dc5e981230d52ae3ac19322:"182000000000000000000","6a74844d8e9cb5581c45079a2e94462a6cee8821":"1082970000000000000000",c3110be01dc9734cfc6e1ce07f87d77d1345b7e1:"4999998000000000000000",aeb916ebf49d0f86c13f7331cef19e129937512d:"599908000000000000000","3e5abd09ce5af7ba8487c359e0f2a93a986b0b18":"10000000000000000000000",cdd60d73efaad873c9bbfb178ca1b7105a81a681:"32000000000000000000","31eb123c95c82bf685ace7a75a1881a289efca10":"920034000000000000000","86e8670e27598ea09c3899ab7711d3b9fe901c17":"200000000000000000000",a144f6b60f72d64a21e330dadb62d8990ade2b09:"1000000000000000000000","68883e152e5660fee59626e7e3b4f05110e6222f":"54683300000000000000000",fe4249127950e2f896ec0e7e2e3d055aab10550f:"668500000000000000000","403d53cf620f0922b417848dee96c190b5bc8271":"9850000000000000000000",bec2e6de39c07c2bae556acfbee2c4728b9982e3:"573000000000000000000",f3c4716d1ee5279a86d0163a14618181e16136c7:"1000000000000000000000",e38ef28a5ed984a7db24a1ae782dfb87f397dfc6:"143000000000000000000","30fbe5885f9fcce9ea5edb82ed4a1196dd259aed":"5200000000000000000000","48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e":"120000000000000000000",b8d5c324a8209d7c8049d0d4aede02ba80ab578b:"16889329000000000000000","43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6":"6000000000000000000000",f9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4:"2000000000000000000000","0e21af1b8dbf27fcf63f37e047b87a825cbe7c27":"3000000000000000000000","1c35aab688a0cd8ef82e76541ba7ac39527f743b":"500000000000000000000","91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1":"401880000000000000000","4ba53ab549e2016dfa223c9ed5a38fad91288d07":"1400000000000000000000","99a4de19ded79008cfdcd45d014d2e584b8914a8":"1500000000000000000000","4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98":"150000000000000000000","9a633fcd112cceeb765fe0418170732a9705e79c":"18200000000000000000","292f228b0a94748c8eec612d246f989363e08f08":"185000000000000000000","9f3497f5ef5fe63095836c004eb9ce02e9013b4b":"633424000000000000000","0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394":"12000000000000000000000","74ebf4425646e6cf81b109ce7bf4a2a63d84815f":"40000000000000000000","8ce5e3b5f591d5eca38abf228f2e3c35134bdac0":"2319920000000000000000","90c41eba008e20cbe927f346603fc88698125969":"42000000000000000000","382ba76db41b75606dd48a48f0137e9174e031b6":"20000000000000000000","5d24bdbc1c47f0eb83d128cae48ac33c4817e91f":"1000000000000000000000",a64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9:"143000000000000000000",a18360e985f2062e8f8efe02ad2cbc91ad9a5aad:"3000000000000000000000",d251f903ae18727259eee841a189a1f569a5fd76:"10000000000000000000000",efa6b1f0db603537826891b8b4bc163984bb40cd:"985000000000000000000","47fff42c678551d141eb75a6ee398117df3e4a8d":"100010000000000000000",f2294adbb6f0dcc76e632ebef48ab49f124dbba4:"1443690000000000000000","53700d53254d430f22781a4a76a463933b5d6b08":"1970000000000000000000",b14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2:"8000000000000000000000","9ed4e63f526542d44fddd34d59cd25388ffd6bda":"3885000000000000000000","4cac91fb83a147d2f76c3267984b910a79933348":"2167000000000000000000","9b32cf4f5115f4b34a00a64c617de06387354323":"105501000000000000000",b8bedd576a4b4c2027da735a5bc3f533252a1808:"2000000000000000000000",c5a3b98e4593fea0b38c4f455a5065f051a2f815:"20309030000000000000000",eaf52388546ec35aca6f6c6393d8d609de3a4bf3:"20000000000000000000","4c423c76930d07f93c47a5cc4f615745c45a9d72":"100000000000000000000","9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e":"267400000000000000000","2bade91d154517620fd4b439ac97157a4102a9f7":"4000000000000000000000",da698d64c65c7f2b2c7253059cd3d181d899b6b7:"295500000000000000000",c6d8954e8f3fc533d2d230ff025cb4dce14f3426:"400000000000000000000","349a816b17ab3d27bbc0ae0051f6a070be1ff29d":"10000000000000000000000",ff4d9c8484c43c42ff2c5ab759996498d323994d:"4000000000000000000000","22944fbca9b57963084eb84df7c85fb9bcdfb856":"4649845000000000000000",bfd93c90c29c07bc5fb5fc49aeea55a40e134f35:"28000000000000000000000","3caedb5319fe806543c56e5021d372f71be9062e":"40000000000000000000000","9a079c92a629ca15c8cafa2eb28d5bc17af82811":"500000000000000000000","7d2a52a7cf0c8436a8e007976b6c26b7229d1e15":"438040000000000000000",cf89f7460ba3dfe83c5a1d3a019ee1250f242f0f:"985177000000000000000","577bfe64e3a1e3800e94db1c6c184d8dc8aafc66":"1498000000000000000000","7ffd02ed370c7060b2ae53c078c8012190dfbb75":"10000000000000000000000","90b62f131a5f29b45571513ee7a74a8f0b232202":"158000000000000000000","6e8212b722afd408a7a73ed3e2395ee6454a0330":"159000000000000000000","515f30bc90cdf4577ee47d65d785fbe2e837c6bc":"10166128000000000000000",c27376f45d21e15ede3b26f2655fcee02ccc0f2a:"20000000000000000000","3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f":"2000000000000000000000","25259d975a21d83ae30e33f800f53f37dfa01938":"20000000000000000000","8ed143701f2f72280fd04a7b4164281979ea87c9":"14000000000000000000","5ac99ad7816ae9020ff8adf79fa9869b7cea6601":"21000000000000000000000",f51fded80acb502890e87369741f3722514cefff:"20000042000000000000000",f657fcbe682eb4e8db152ecf892456000b513d15:"1940000000000000000000","62c37c52b97f4b040b1aa391d6dec152893c4707":"1000000000000000000000","89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e":"2955000000000000000000","53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183":"20000000000000000000","56f493a3d108aaa2d18d98922f8efe1662cfb73d":"2020000000000000000000",e9458f68bb272cb5673a04f781b403556fd3a387:"61000000000000000000",be525a33ea916177f17283fca29e8b350b7f530b:"2638000000000000000000","4feb846be43041fd6b34202897943e3f21cb7f04":"83226000000000000000","15aa530dc36958b4edb38eee6dd9e3c77d4c9145":"2000000000000000000000","2458d6555ff98a129cce4037953d00206eff4287":"197000000000000000000","8035fe4e6b6af27ae492a578515e9d39fa6fa65b":"4000000000000000000000","296b71c0015819c242a7861e6ff7eded8a5f71e3":"1999800000000000000000","8f1952eed1c548d9ee9b97d0169a07933be69f63":"1000000000000000000000",a421dbb89b3a07419084ad10c3c15dfe9b32d0c2:"20000000000000000000000","554336ee4ea155f9f24f87bca9ca72e253e12cd2":"100000000000000000000",ffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74:"2000000000000000000000",ea2c197d26e98b0da83e1b72c787618c979d3db0:"19700000000000000000","96aa573fed2f233410dbae5180145b23c31a02f0":"1730000000000000000000",c23b2f921ce4a37a259ee4ad8b2158d15d664f59:"25403000000000000000",d874b9dfae456a929ba3b1a27e572c9b2cecdfb3:"170000000000000000000",bf8b8005d636a49664f74275ef42438acd65ac91:"200000000000000000000","441a52001661fac718b2d7b351b7c6fb521a7afd":"400000000000000000000","812a55c43caedc597218379000ce510d548836fd":"18200000000000000000","5e90c85877198756b0366c0e17b28e52b446505a":"374288000000000000000",da3017c150dd0dce7fcf881b0a48d0d1c756c4c7:"100014000000000000000","6baf7a2a02ae78801e8904ad7ac05108fc56cff6":"1000000000000000000000","177dae78bc0113d8d39c4402f2a641ae2a105ab8":"1818320000000000000000","01b5b5bc5a117fa08b34ed1db9440608597ac548":"200000000000000000000",aae732eda65988c3a00c7f472f351c463b1c968e:"2000000000000000000000",d95342953c8a21e8b635eefac7819bea30f17047:"94160000000000000000000","8d616b1eee77eef6f176e0698db3c0c141b2fc8f":"500000000000000000000","12d20790b7d3dbd88c81a279b812039e8a603bd0":"1604400000000000000000","3734cb187491ede713ae5b3b2d12284af46b8101":"3000000000000000000000",dd967c4c5f8ae47e266fb416aad1964ee3e7e8c3:"7750000000000000000000","3dcef19c868b15d34eda426ec7e04b18b6017002":"1999800000000000000000",ce9d21c692cd3c01f2011f505f870036fa8f6cd2:"400000000000000000000",d44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4:"10000000000000000000000",b424d68d9d0d00cec1938c854e15ffb880ba0170:"200000000000000000000","1f2186ded23e0cf9521694e4e164593e690a9685":"300000000000000000000","7f4b5e278578c046cceaf65730a0e068329ed5b6":"1880000000000000000000","8c50aa2a9212bcde56418ae261f0b35e7a9dbb82":"400000000000000000000","1953313e2ad746239cb2270f48af34d8bb9c4465":"2000000000000000000000",a15025f595acdbf3110f77c5bf24477e6548f9e8:"2000000000000000000000","53af32c22fef99803f178cf90b802fb571c61cb9":"3880000000000000000000",d0a8abd80a199b54b08b65f01d209c27fef0115b:"6525979000000000000000","2b68306ba7f8daaf73f4c644ef7d2743c0f26856":"864800000000000000000","96924191b7df655b3319dc6d6137f481a73a0ff3":"4020000000000000000000","6fa72015fa78696efd9a86174f7f1f21019286b1":"1337000000000000000000","0b119df99c6b8de58a1e2c3f297a6744bf552277":"2000000000000000000000","61733947fab820dbd351efd67855ea0e881373a0":"20000000000000000000","8ae6f80b70e1f23c91fbd5a966b0e499d95df832":"197000000000000000000","01a7d9fa7d0eb1185c67e54da83c2e75db69e39f":"7623900000000000000000","9932ef1c85b75a9b2a80057d508734c51085becc":"50170000000000000000",aefcfe88c826ccf131d54eb4ea9eb80e61e1ee25:"340000000000000000000",c21fa6643a1f14c02996ad7144b75926e87ecb4b:"20000000000000000000000","97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed":"2000000000000000000000","3cafaf5e62505615068af8eb22a13ad8a9e55070":"1999600000000000000000","22f2dcff5ad78c3eb6850b5cb951127b659522e6":"13700000000000000000",aaad1baade5af04e2b17439e935987bf8c2bb4b9:"2000000000000000000000","298887bab57c5ba4f0615229d7525fa113b7ea89":"40000000000000000000","7539333046deb1ef3c4daf50619993f444e1de68":"1182000000000000000000","9752d14f5e1093f071711c1adbc4e3eb1e5c57f3":"2000000000000000000000",ed641e06368fb0efaa1703e01fe48f4a685309eb:"200000000000000000000",d0ee4d02cf24382c3090d3e99560de3678735cdf:"2400000000000000000000","47e25df8822538a8596b28c637896b4d143c351d":"80500000000000000000000","559706c332d20779c45f8a6d046a699159b74921":"380123000000000000000","3a4da78dce05aeb87de9aead9185726da1926798":"200000000000000000000","3041445a33ba158741160d9c344eb88e5c306f94":"60000000000000000000","08d4311c9c1bbaf87fabe1a1d01463828d5d98ce":"90000000000000000000000","6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f":"1000000000000000000000","29eaae82761762f4d2db53a9c68b0f6b0b6d4e66":"2000000000000000000000","0b7d339371e5be6727e6e331b5821fa24bdb9d5a":"857738000000000000000","4714cfa4f46bd6bd70737d75878197e08f88e631":"11792000000000000000000",ad92ca066edb7c711dfc5b166192d1edf8e77185:"36000000000000000000000",f97b56ebd5b77abc9fbacbabd494b9d2c221cd03:"1970000000000000000000","591bef3171d1c5957717a4e98d17eb142c214e56":"20000000000000000000000","899b3c249f0c4b81df75d212004d3d6d952fd223":"2000000000000000000000",a819d2ece122e028c8e8a04a064d02b9029b08b9:"1000000000000000000000",e341642d40d2afce2e9107c67079ac7a2660086c:"400000000000000000000","0329188f080657ab3a2afa522467178279832085":"216700000000000000000","03317826d1f70aa4bddfa09be0c4105552d2358b":"38800000000000000000","3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d":"1790000000000000000000","93c88e2d88621e30f58a9586bed4098999eb67dd":"31200000000000000000000",cd1e66ed539dd92fc40bbaa1fa16de8c02c14d45:"230000000000000000000",e6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e:"334250000000000000000","50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f":"26030000000000000000","4f64a85e8e9a40498c0c75fceb0337fb49083e5e":"1000000000000000000000","4b29437c97b4a844be71cca3b648d4ca0fdd9ba4":"150200000000000000000","1eee6cbee4fe96ad615a9cf5857a647940df8c78":"19400000000000000000","29f0edc60338e7112085a1d114da8c42ce8f55d6":"2958000000000000000000","23b1c4917fbd93ee3d48389306957384a5496cbf":"4000086000000000000000","1767525c5f5a22ed80e9d4d7710f0362d29efa33":"400000000000000000000","3064899a963c4779cbf613cd6980846af1e6ec65":"6999908000000000000000","68531f4dda808f5320767a03113428ca0ce2f389":"19400000000000000000","1db9ac9a9eaeec0a523757050c71f47278c72d50":"1337000000000000000000","7592c69d067b51b6cc639d1164d5578c60d2d244":"20000000000000000000",cf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c:"1063120000000000000000","8efec058cc546157766a632775404a334aaada87":"1999000000000000000000",faf5f0b7b6d558f5090d9ea1fb2d42259c586078:"6401000000000000000000","19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e":"2000000000000000000000","6e8a26689f7a2fdefd009cbaaa5310253450daba":"2049982000000000000000",e2f40d358f5e3fe7463ec70480bd2ed398a7063b:"20000000000000000000",fa19d6f7a50f4f079893d167bf14e21d0073d196:"530000000000000000000","3e2ca0d234baf607ad466a1b85f4a6488ef00ae7":"89505000000000000000",f8a49ca2390c1f6d5c0e62513b079571743f7cc6:"3000000000000000000000","5d3f3b1f7130b0bb21a0fd32396239179a25657f":"62474000000000000000000",f332c0f3e05a27d9126fd0b641a8c2d4060608fd:"5001041000000000000000",e304a32f05a83762744a9542976ff9b723fa31ea:"1576256000000000000000",f768f321fd6433d96b4f354d3cc1652c1732f57f:"10000000000000000000000","147af46ae9ccd18bb35ca01b353b51990e49dce1":"4000000000000000000000","21eae6feffa9fbf4cd874f4739ace530ccbe5937":"5000000000000000000000","6994fb3231d7e41d491a9d68d1fa4cae2cc15960":"4000000000000000000000","51126446ab3d8032557e8eba65597d75fadc815c":"322000000000000000000","24daaaddf7b06bbcea9b80590085a88567682b4e":"319008000000000000000",cd020f8edfcf524798a9b73a640334bbf72f80a5:"133700000000000000000","56febf9e1003af15b1bd4907ec089a4a1b91d268":"200000000000000000000","3c79c863c3d372b3ff0c6f452734a7f97042d706":"176000000000000000000",e1203eb3a723e99c2220117ca6afeb66fa424f61:"9461996000000000000000","18fb09188f27f1038e654031924f628a2106703d":"2000000000000000000000","2eba0c6ee5a1145c1c573984963a605d880a7a20":"500000000000000000000","4cefbe2398e47d52e78db4334c8b697675f193ae":"4011000000000000000000",c02471e3fc2ea0532615a7571d493289c13c36ef:"20000000000000000000",ba469aa5c386b19295d4a1b5473b540353390c85:"2000000000000000000000","7b11673cc019626b290cbdce26046f7e6d141e21":"500000000000000000000","26784ade91c8a83a8e39658c8d8277413ccc9954":"6000000000000000000000","57d3df804f2beee6ef53ab94cb3ee9cf524a18d3":"393606000000000000000",ccae0d3d852a7da3860f0636154c0a6ca31628d4:"106560000000000000000",bfe3a1fc6e24c8f7b3250560991f93cba2cf8047:"80000000000000000000000","724ce858857ec5481c86bd906e83a04882e5821d":"3000000000000000000000",fb37cf6b4f81a9e222fba22e9bd24b5098b733cf:"38800000000000000000","9b22a80d5c7b3374a05b446081f97d0a34079e7f":"3000000000000000000000","0a29a8a4d5fd950075ffb34d77afeb2d823bd689":"200000000000000000000",d01af9134faf5257174e8b79186f42ee354e642d:"1000000000000000000000","7f1619988f3715e94ff1d253262dc5581db3de1c":"900000000000000000000","6f137a71a6f197df2cbbf010dcbd3c444ef5c925":"2000000000000000000000","11efb8a20451161b644a8ccebbc1d343a3bbcb52":"3200000000000000000000","46504e6a215ac83bccf956befc82ab5a679371c8":"518898000000000000000",b523fff9749871b35388438837f7e6e0dea9cb6b:"2000000000000000000000",c5c6a4998a33feb764437a8be929a73ba34a0764:"50000000000000000000000","3cd7f7c7c2353780cde081eeec45822b25f2860c":"200000000000000000000",b3050beff9de33c80e1fa15225e28f2c413ae313:"700000000000000000000","59268171b833e0aa13c54b52ccc0422e4fa03aeb":"3000000000000000000000","7169724ee72271c534cad6420fb04ee644cb86fe":"410164000000000000000","6e6d5bbbb9053b89d744a27316c2a7b8c09b547d":"909831000000000000000","3f3f46b75cabe37bfacc8760281f4341ca7f463d":"602709000000000000000","7a33834e8583733e2d52aead589bd1affb1dd256":"1000000000000000000000",e94ded99dcb572b9bb1dcba32f6dee91e057984e:"394000000000000000000","19336a236ded755872411f2e0491d83e3e00159e":"940000000000000000000","63ac545c991243fa18aec41d4f6f598e555015dc":"600000000000000000000",cfee05c69d1f29e7714684c88de5a16098e91399:"1970000000000000000000","77be6b64d7c733a436adec5e14bf9ad7402b1b46":"1000000000000000000000","233bdddd5da94852f4ade8d212885682d9076bc6":"4000000000000000000000","952c57d2fb195107d4cd5ca300774119dfad2f78":"2000000000000000000000",e237baa4dbc9926e32a3d85d1264402d54db012f:"2000000000000000000000",aa91237e740d25a92f7fa146faa18ce56dc6e1f3:"925000000000000000000","2339e9492870afea2537f389ac2f838302a33c06":"2000000000000000000000","1d45586eb803ca2190650bf748a2b174312bb507":"1400000000000000000000",c61446b754c24e3b1642d9e51765b4d3e46b34b6:"2000000000000000000000",ac28b5edea05b76f8c5f97084541277c96696a4c:"1000000000000000000000","1a1c9a26e0e02418a5cf687da75a275c622c9440":"5000000000000000000000","299368609042a858d1ecdf1fc0ada5eaceca29cf":"2000000000000000000000","095f5a51d06f6340d80b6d29ea2e88118ad730fe":"2000200000000000000000","751a2ca34e7187c163d28e3618db28b13c196d26":"500000000000000000000","75b0e9c942a4f0f6f86d3f95ff998022fa67963b":"1490000000000000000000",d1b37f03cb107424e9c4dd575ccd4f4cee57e6cd:"2000000000000000000000","7f993ddb7e02c282b898f6155f680ef5b9aff907":"20000000000000000000000",a3d583a7b65b23f60b7905f3e4aa62aac87f4227:"1046779000000000000000","526bb533b76e20c8ee1ebf123f1e9ff4148e40be":"197000000000000000000","2160b4c02cac0a81de9108de434590a8bfe68735":"1970000000000000000000","010007394b8b7565a1658af88ce463499135d6b7":"100000000000000000000","64457fa33b0832506c4f7d1180dce48f46f3e0ff":"2000000000000000000000",b51e558eb5512fbcfa81f8d0bd938c79ebb5242b:"715000000000000000000","94f13f9f0836a3ee2437a84922d2984dc0f7d53b":"2999916000000000000000","6bd457ade051795df3f2465c3839aed3c5dee978":"999925000000000000000",f3dbcf135acb9dee1a489c593c024f03c2bbaece:"2000000000000000000000","61b902c5a673885826820d1fe14549e4865fbdc2":"334703000000000000000","2acc9c1a32240b4d5b2f777a2ea052b42fc1271c":"41764000000000000000000","6ddfef639155daab0a5cb4953aa8c5afaa880453":"1820000000000000000000","96ff6f509968f36cb42cba48db32f21f5676abf8":"1970000000000000000000",b4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5:"200000000000000000000","78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0":"2000000000000000000000",dec99e972fca7177508c8e1a47ac22d768acab7c:"2000000000000000000000",a07aa16d74aee8a9a3288d52db1551d593883297:"600000000000000000000",cf1169041c1745e45b172435a2fc99b49ace2b00:"31960000000000000000","526cb09ce3ada3672eec1deb46205be89a4b563e":"2468000000000000000000",ee6959de2b67967b71948c891ab00d8c8f38c7dc:"118200000000000000000",ca7ba3ff536c7e5f0e153800bd383db8312998e0:"169600000000000000000","1ed06ee51662a86c634588fb62dc43c8f27e7c17":"200000000000000000000","730447f97ce9b25f22ba1afb36df27f9586beb9b":"820000000000000000000",ae5c9bdad3c5c8a1220444aea5c229c1839f1d64:"477500000000000000000",a38306cb70baa8e49186bd68aa70a83d242f2907:"2000000000000000000000","71213fca313404204ecba87197741aa9dfe96338":"60000000000000000000","10e390ad2ba33d82b37388d09c4544c6b0225de5":"200000000000000000000","3b6e814f770748a7c3997806347605480a3fd509":"2000000000000000000000",fd452c3969ece3801c542020f1cdcaa1c71ed23d:"100000000000000000000000",e742b1e6069a8ffc3c4767235defb0d49cbed222:"800000000000000000000",d7225738dcf3578438f8e7c8b3837e42e04a262f:"445860000000000000000",cd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4:"2945500000000000000000",e80e7fef18a5db15b01473f3ad6b78b2a2f8acd9:"500000000000000000000","261575e9cf59c8226fa7aaf91de86fb70f5ac3ae":"300022000000000000000","7e71171f2949fa0c3ac254254b1f0440e5e6a038":"40000000000000000000","96ea6ac89a2bac95347b51dba63d8bd5ebdedce1":"2000000000000000000000",e6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7:"17200000000000000000000","2b99b42e4f42619ee36baa7e4af2d65eacfcba35":"40000000000000000000000",c6e4cc0c7283fc1c85bc4813effaaf72b49823c0:"276926000000000000000",dbc1ce0e49b1a705d22e2037aec878ee0d75c703:"250000000000000000000","806f44bdeb688037015e84ff218049e382332a33":"1999000000000000000000","1a3a330e4fcb69dbef5e6901783bf50fd1c15342":"4200000000000000000000",d2a84f75675c62d80c88756c428eee2bcb185421:"1200000000000000000000",c593b546b7698710a205ad468b2c13152219a342:"1550000000000000000000","3f627a769e6a950eb87017a7cd9ca20871136831":"13790000000000000000000",f2d5763ce073127e2cedde6faba786c73ca94141:"7900000000000000000000","162110f29eac5f7d02b543d8dcd5bb59a5e33b73":"2000000000000000000000","59473cd300fffae240f5785626c65dfec792b9af":"20000000000000000000","4dcd11815818ae29b85d01367349a8a7fb12d06b":"7900000000000000000000","9329ffdc268babde8874b366406c81445b9b2d35":"422415000000000000000","0ab4281ebb318590abb89a81df07fa3af904258a":"500000000000000000000","875061ee12e820041a01942cb0e65bb427b00060":"2800000000000000000000",c9b698e898d20d4d4f408e4e4d061922aa856307:"40000000000000000000",ca49a5f58adbefae23ee59eea241cf0482622eaa:"1430000000000000000000","196e85df7e732b4a8f0ed03623f4db9db0b8fa31":"21165000000000000000","4c760cd9e195ee4f2d6bce2500ff96da7c43ee91":"60000000000000000000000","024a098ae702bef5406c9c22b78bd4eb2cc7a293":"4000000000000000000000","9d81aea69aed6ad07089d61445348c17f34bfc5b":"300000000000000000000","76ab87dd5a05ad839a4e2fc8c85aa6ba05641730":"2000000000000000000000",c6e2f5af979a03fd723a1b6efa728318cf9c1800:"668500000000000000000","5db69fe93e6fb6fbd450966b97238b110ad8279a":"40000000000000000000000",a4259f8345f7e3a8b72b0fec2cf75e321fda4dc2:"1910000000000000000000","095030e4b82692dcf8b8d0912494b9b378ec9328":"1340000000000000000000","4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff":"2000000000000000000000","99c9f93e45fe3c1418c353e4c5ac3894eef8121e":"101870000000000000000",ffac3db879a6c7158e8dec603b407463ba0d31cf:"1970000000000000000000",ac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34:"2000000000000000000000","7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab":"1510990000000000000000",b7d581fe0af1ec383f3b3c416783f385146a7612:"20000000000000000000000",bb3fc0a29c034d710812dcc775c8cab9d28d6975:"1066806000000000000000","2c603ff0fe93616c43573ef279bfea40888d6ae7":"4740000000000000000000","15f2b7b16432ee50a5f55b41232f6334ed58bdc0":"400000000000000000000","7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae":"6000000000000000000000",f067e1f1d683556a4cc4fd0c0313239f32c4cfd8:"1000000000000000000000","52738c90d860e04cb12f498d96fdb5bf36fc340e":"30000000000000000000","45781bbe7714a1c8f73b1c747921df4f84278b70":"2000000000000000000000","4a97e8fcf4635ea7fc5e96ee51752ec388716b60":"546000000000000000000","54939ff08921b467cf2946751d856378296c63ed":"1000000000000000000000","6485470e61db110aebdbafd536769e3c599cc908":"600000000000000000000",e20d1bcb71286dc7128a9fc7c6ed7f733892eef5:"1003400000000000000000",d6eea898d4ae2b718027a19ce9a5eb7300abe3ca:"27475000000000000000","014974a1f46bf204944a853111e52f1602617def":"2000000000000000000000","6aa5732f3b86fb8c81efbe6b5b47b563730b06c8":"1000000000000000000000","6107d71dd6d0eefb11d4c916404cb98c753e117d":"2000000000000000000000",dd7bcda65924aaa49b80984ae173750258b92847:"10000000000000000000000","4e7b54474d01fefd388dfcd53b9f662624418a05":"8000000000000000000000","24fc73d20793098e09ddab5798506224fa1e1850":"200000000000000000000","2b8488bd2d3c197a3d26151815b5a798d27168dc":"6680000000000000000000","949131f28943925cfc97d41e0cea0b262973a730":"2800000000000000000000","60b8d6b73b79534fb08bb8cbcefac7f393c57bfe":"1760000000000000000000",d6acc220ba2e51dfcf21d443361eea765cbd35d8:"20000000000000000000",c4c6cb723dd7afa7eb535615e53f3cef14f18118:"1999999000000000000000","4c9a862ad115d6c8274ed0b944bdd6a5500510a7":"100000000000000000000","85732c065cbd64119941aed430ac59670b6c51c4":"731345000000000000000","0126e12ebc17035f35c0e9d11dd148393c405d7a":"1999600000000000000000","472048cc609aeb242165eaaa8705850cf3125de0":"1000000000000000000000",d2edd1ddd6d86dc005baeb541d22b640d5c7cae5:"20000000000000000000","4549b15979255f7e65e99b0d5604db98dfcac8bf":"4000000000000000000000",c6c7c191379897dd9c9d9a33839c4a5f62c0890d:"4000085000000000000000",d367009ab658263b62c2333a1c9e4140498e1389:"2000000000000000000000","143f5f1658d9e578f4f3d95f80c0b1bd3933cbda":"1490000000000000000000","1a09fdc2c7a20e23574b97c69e93deba67d37220":"1998000000000000000000",ac8b509aefea1dbfaf2bb33500d6570b6fd96d51:"1820000000000000000000","16ffac84032940f0121a09668b858a7e79ffa3bb":"3879210000000000000000",f338459f32a159b23db30ac335769ab2351aa63c:"30000000000000000000000",d82251456dc1380f8f5692f962828640ab9f2a03:"4879980000000000000000","47f4696bd462b20da09fb83ed2039818d77625b3":"149000000000000000000","3dde8b15b3ccbaa5780112c3d674f313bba68026":"1773000000000000000000",f70d637a845c06db6cdc91e6371ce7c4388a628e:"20000000000000000000","68295e8ea5afd9093fc0a465d157922b5d2ae234":"19982000000000000000","614e8bef3dd2c59b59a4145674401018351884ea":"20000000000000000000","4737d042dc6ae73ec73ae2517acea2fdd96487c5":"1000000000000000000000",cec6fc65853f9cce5f8e844676362e1579015f02:"2000000000000000000000",ae47e2609cfafe369d66d415d939de05081a9872:"27060000000000000000000","09a928d528ec1b3e25ffc83e218c1e0afe8928c7":"18200000000000000000","9b444fd337e5d75293adcfff70e1ea01db023222":"100000000000000000000","168bdec818eafc6d2992e5ef54aa0e1601e3c561":"1000110000000000000000","353dbec42f92b50f975129b93c4c997375f09073":"1999000000000000000000","6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b":"10001242000000000000000","6f2576da4de283bbe8e3ee69ddd66e5e711db3f5":"1260800000000000000000","3a3dd104cd7eb04f21932fd433ea7affd39369f5":"357500000000000000000",d44f4ac5fad76bdc1537a3b3af6472319b410d9d:"1600000000000000000000","3d9d6be57ff83e065985664f12564483f2e600b2":"2041600000000000000000","88f1045f19f2d3191816b1df18bb6e1435ad1b38":"240000000000000000000",ddab75fb2ff9fecb88f89476688e2b00e367ebf9:"19400000000000000000000","092e815558402d67f90d6bfe6da0b2fffa91455a":"60000000000000000000",a7024cfd742c1ec13c01fea18d3042e65f1d5dee:"11272229000000000000000","7f46bb25460dd7dae4211ca7f15ad312fc7dc75c":"6685000000000000000000","93f18cd2526040761488c513174d1e7963768b2c":"2416500000000000000000","352f25babf4a690673e35195efa8f79d05848aad":"66800000000000000000000",f7b151cc5e571c17c76539dbe9964cbb6fe5de79:"2148000000000000000000",ff3eee57c34d6dae970d8b311117c53586cd3502:"1700000000000000000000",ae6f0c73fdd77c489727512174d9b50296611c4c:"6000000000000000000000","7819b0458e314e2b53bfe00c38495fd4b9fdf8d6":"20000000000000000000","7fdba031c78f9c096d62d05a369eeab0bccc55e5":"2800000000000000000000","735e328666ed5637142b3306b77ccc5460e72c3d":"1968682000000000000000","0bfbb6925dc75e52cf2684224bbe0550fea685d3":"1970000000000000000000","6be16313643ebc91ff9bb1a2e116b854ea933a45":"500000000000000000000",d6acffd0bfd99c382e7bd56ff0e6144a9e52b08e:"160000000000000000000","276a006e3028ecd44cdb62ba0a77ce94ebd9f10f":"1800000000000000000000","10711c3dda32317885f0a2fd8ae92e82069b0d0b":"4000000000000000000000","43cb9652818c6f4d6796b0e89409306c79db6349":"2000000000000000000000","7109dd011d15f3122d9d3a27588c10d77744508b":"2000000000000000000000","3497dd66fd118071a78c2cb36e40b6651cc82598":"109600000000000000000","9bf672d979b36652fc5282547a6a6bc212ae4368":"656000000000000000000",eaed16eaf5daab5bf0295e5e077f59fb8255900b:"4000000000000000000000","7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24":"40000000000000000000","45a570dcc2090c86a6b3ea29a60863dde41f13b5":"232500000000000000000","433a3b68e56b0df1862b90586bbd39c840ff1936":"2000000000000000000000",e8eaf12944092dc3599b3953fa7cb1c9761cc246:"1800000000000000000000",ec11362cec810985d0ebbd7b73451444985b369f:"30000047000000000000000","78e83f80b3678c7a0a4e3e8c84dccde064426277":"1790000000000000000000","0cc67f8273e1bae0867fd42e8b8193d72679dbf8":"500000000000000000000",c70d856d621ec145303c0a6400cd17bbd6f5eaf7:"20000000000000000000",f468906e7edf664ab0d8be3d83eb7ab3f7ffdc78:"1700000000000000000000","3c286cfb30146e5fd790c2c8541552578de334d8":"10203000000000000000000",c401c427cccff10decb864202f36f5808322a0a8:"3329300000000000000000",afd019ff36a09155346b69974815a1c912c90aa4:"2000000000000000000000","96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2":"20000000000000000000000",a47779d8bc1c7bce0f011ccb39ef68b854f8de8f:"2000000000000000000000","58c650ced40bb65641b8e8a924a039def46854df":"18500000000000000000","86f4f40ad984fbb80933ae626e0e42f9333fdd41":"1000000000000000000000",b22d5055d9623135961e6abd273c90deea16a3e7:"1400000000000000000000",ee3564f5f1ba0f94ec7bac164bddbf31c6888b55:"100000000000000000000",cf26b47bd034bc508e6c4bcfd6c7d30034925761:"1800000000000000000000",e87dbac636a37721df54b08a32ef4959b5e4ff82:"2000000000000000000000","3bf86ed8a3153ec933786a02ac090301855e576b":"450000000000000000000000",cfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b:"170000000000000000000","85b16f0b8b34dff3804f69e2168a4f7b24d1042b":"317000000000000000000","84db1459bb00812ea67ecb3dc189b72187d9c501":"148851000000000000000","8c3a9ee71f729f236cba3867b4d79d8ceee25dbc":"100000000000000000000",e677c31fd9cb720075dca49f1abccd59ec33f734:"7800000000000000000000","8889448316ccf14ed86df8e2f478dc63c4338340":"15200000000000000000",b279c7d355c2880392aad1aa21ee867c3b3507df:"1261000000000000000000","12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5":"7722162000000000000000","8d2303341e1e1eb5e8189bde03f73a60a2a54861":"100000000000000000000","94d81074db5ae197d2bb1373ab80a87d121c4bd3":"9400000000000000000000","752c9febf42f66c4787bfa7eb17cf5333bba5070":"1966448000000000000000","16816aac0ede0d2d3cd442da79e063880f0f1d67":"2000000000000000000000",daac91c1e859d5e57ed3084b50200f9766e2c52b:"400000000000000000000","32c2fde2b6aabb80e5aea2b949a217f3cb092283":"5614827000000000000000",cdab46a5902080646fbf954204204ae88404822b:"544942000000000000000",fdf42343019b0b0c6bf260b173afab7e45b9d621:"1999944000000000000000","791f6040b4e3e50dcf3553f182cd97a90630b75d":"4000000000000000000000","4b762166dd1118e84369f804c75f9cd657bf730c":"500000000000000000000",a76d3f156251b72c0ccf4b47a3393cbd6f49a9c5:"1337000000000000000000",c5eb42295e9cadeaf2af12dede8a8d53c579c469:"3820000000000000000000",db9371b30c4c844e59e03e924be606a938d1d310:"2000000000000000000000","2cd39334ac7eac797257abe3736195f5b4b5ce0f":"99964000000000000000",ad44357e017e244f476931c7b8189efee80a5d0a:"300000000000000000000","4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3":"1248980000000000000000","73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f":"100000000000000000000","5a1d2d2d1d520304b6208849570437eb3091bb9f":"1970000000000000000000","53047dc8ac9083d90672e8b3473c100ccd278323":"40000000000000000000","26fe174cbf526650e0cd009bd6126502ce8e684d":"11640000000000000000000",e2df23f6ea04becf4ab701748dc0963184555cdb:"2000000000000000000000",c1170dbaadb3dee6198ea544baec93251860fda5:"1200000000000000000000","8bbeacfc29cfe93402db3c41d99ab759662e73ec":"2000000000000000000000","165305b787322e25dc6ad0cefe6c6f334678d569":"2000000000000000000000","095457f8ef8e2bdc362196b9a9125da09c67e3ab":"200000000000000000000","702802f36d00250fab53adbcd696f0176f638a49":"2000000000000000000000","489334c2b695c8ee0794bd864217fb9fd8f8b135":"18200000000000000000",fa8cf4e627698c5d5788abb7880417e750231399:"4244640000000000000000","3329eb3baf4345d600ced40e6e9975656f113742":"4999711000000000000000",b4dd5499daeb2507fb2de12297731d4c72b16bb0:"20000000000000000000","88c2516a7cdb09a6276d7297d30f5a4db1e84b86":"4000000000000000000000","612ced8dc0dc9e899ee46f7962333315f3f55e44":"338830000000000000000",d71e43a45177ad51cbe0f72184a5cb503917285a:"200000000000000000000","2fb566c94bbba4e3cb67cdda7d5fad7131539102":"2000000000000000000000","03be5b4629aefbbcab9de26d39576cb7f691d764":"200550000000000000000","025367960304beee34591118e9ac2d1358d8021a":"2000000000000000000000",a5d5b8b62d002def92413710d13b6ff8d4fc7dd3:"400000000000000000000",df3b72c5bd71d4814e88a62321a93d4011e3578b:"4000000000000000000000","3588895ac9fbafec012092dc05c0c302d90740fa":"3000000000000000000000","6021e85a8814fce1e82a41abd1d3b2dad2faefe0":"2000000000000000000000","17ee9f54d4ddc84d670eff11e54a659fd72f4455":"16000000000000000000000","873c6f70efb6b1d0f2bbc57eebcd70617c6ce662":"1013478000000000000000","1fcc7ce6a8485895a3199e16481f72e1f762defe":"1000000000000000000000",d0a7209b80cf60db62f57d0a5d7d521a69606655:"160000000000000000000",a514d00edd7108a6be839a638db2415418174196:"30000000000000000000000","046377f864b0143f282174a892a73d3ec8ec6132":"191000000000000000000",c126573d87b0175a5295f1dd07c575cf8cfa15f2:"10000000000000000000000","0e123d7da6d1e6fac2dcadd27029240bb39052fe":"1000000000000000000000",ad5a8d3c6478b69f657db3837a2575ef8e1df931:"36990000000000000000",db882eacedd0eff263511b312adbbc59c6b8b25b:"9100000000000000000000","0b43bd2391025581d8956ce42a072579cbbfcb14":"18800000000000000000",affea0473722cb7f0e0e86b9e11883bf428d8d54:"1940000000000000000000",e32b1c4725a1875449e98f970eb3e54062d15800:"200000000000000000000","98f4af3af0aede5fafdc42a081ecc1f89e3ccf20":"9400000000000000000000","3b4768fd71e2db2cbe7fa050483c27b4eb931df3":"2000000000000000000000",d5f7c41e07729dfa6dfc64c4423160a22c609fd3:"1790000000000000000000",d944c8a69ff2ca1249690c1229c7192f36251062:"1970000000000000000000","5ae64e853ba0a51282cb8db52e41615e7c9f733f":"2000000000000000000000",b13f93af30e8d7667381b2b95bc1a699d5e3e129:"420000000000000000000","8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07":"80000000000000000000","2448596f91c09baa30bc96106a2d37b5705e5d28":"2000000000000000000000",ccca24d8c56d6e2c07db086ec07e585be267ac8d:"200000000000000000000",f67bb8e2118bbcd59027666eedf6943ec9f880a5:"4000000000000000000000","7ae659eb3bc46852fa86fac4e21c768d50388945":"286000000000000000000","467e0ed54f3b76ae0636176e07420815a021736e":"2000000000000000000000",a46cd237b63eea438c8e3b6585f679e4860832ac:"1000000000000000000000","6b760d4877e6a627c1c967bee451a8507ddddbab":"910000000000000000000","593044670faeff00a55b5ae051eb7be870b11694":"133700000000000000000","533c06928f19d0a956cc28866bf6c8d8f4191a94":"292320000000000000000","262dc1364ccf6df85c43268ee182554dae692e29":"4927600000000000000000",e4368bc1420b35efda95fafbc73090521916aa34:"4000000000000000000000",feb92d30bf01ff9a1901666c5573532bfa07eeec:"1000000000000000000000",ee25b9a7032679b113588ed52c137d1a053a1e94:"199820000000000000000","20134cbff88bfadc466b52eceaa79857891d831e":"1000000000000000000000","07b1a306cb4312df66482c2cae72d1e061400fcd":"20000000000000000000000",e791d585b89936b25d298f9d35f9f9edc25a2932:"2000000000000000000000","2e6933543d4f2cc00b5350bd8068ba9243d6beb0":"2000000000000000000000",dae0d33eaa341569fa9ff5982684854a4a328a6e:"1000000000000000000000","125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd":"2000000000000000000000",ec99e95dece46ffffb175eb6400fbebb08ee9b95:"100000000000000000000",c538a0ff282aaa5f4b75cfb62c70037ee67d4fb5:"2000000000000000000000","60676d1fa21fca052297e24bf96389c5b12a70d7":"241500000000000000000","4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d":"2000000000000000000000",cdb597299030183f6e2d238533f4642aa58754b6:"400000000000000000000","1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d":"776000000000000000000",a7247c53d059eb7c9310f628d7fc6c6a0a773f08:"500000000000000000000","9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9":"1700000000000000000000",ddf95c1e99ce2f9f5698057c19d5c94027ee4a6e:"6000000000000000000000","83563bc364ed81a0c6da3b56ff49bbf267827a9c":"17332000000000000000000",a192698007cc11aa603d221d5feea076bcf7c30d:"2000000000000000000000","0134ff38155fabae94fd35c4ffe1d79de7ef9c59":"985000000000000000000","80977316944e5942e79b0e3abad38da746086519":"38800000000000000000","193d37ed347d1c2f4e35350d9a444bc57ca4db43":"60000000000000000000","009a6d7db326679b77c90391a7476d238f3ba33e":"200200000000000000000","337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae":"3980000000000000000000","7de7fe419cc61f91f408d234cc80d5ca3d054d99":"20000000000000000000",f47bb134da30a812d003af8dccb888f44bbf5724:"5190000000000000000000",fd920f722682afb5af451b0544d4f41b3b9d5742:"2330200000000000000000","0a917f3b5cb0b883047fd9b6593dbcd557f453b9":"1000000000000000000000",ce9786d3712fa200e9f68537eeaa1a06a6f45a4b:"1790000000000000000000","9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc":"272451000000000000000","0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf":"16000000000000000000000","4c0b1515dfced7a13e13ee12c0f523ae504f032b":"50000000000000000000000",ac2889b5966f0c7f9edb42895cb69d1c04f923a2:"5000000000000000000000",d008513b27604a89ba1763b6f84ce688b346945b:"1000000000000000000000",a4b09de6e713dc69546e76ef0acf40b94f0241e6:"322656000000000000000",b153f828dd076d4a7c1c2574bb2dee1a44a318a8:"400000000000000000000","02ade5db22f8b758ee1443626c64ec2f32aa0a15":"20000000000000000000000","0a0650861f785ed8e4bf1005c450bbd06eb48fb6":"3066860000000000000000",b75149e185f6e3927057739073a1822ae1cf0df2:"4000086000000000000000","84cb7da0502df45cf561817bbd2362f451be02da":"1337000000000000000000",c91bb562e42bd46130e2d3ae4652b6a4eb86bc0f:"540000000000000000000",b234035f7544463ce1e22bc553064684c513cd51:"249750000000000000000",e5e33800a1b2e96bde1031630a959aa007f26e51:"1337000000000000000000",ae5ce3355a7ba9b332760c0950c2bc45a85fa9a0:"400000000000000000000",e6f5eb649afb99599c414b27a9c9c855357fa878:"2674000000000000000000","7010be2df57bd0ab9ae8196cd50ab0c521aba9f9":"1970000000000000000000",ca4288014eddc5632f5facb5e38517a8f8bc5d98:"340000000000000000000","2784903f1d7c1b5cd901f8875d14a79b3cbe2a56":"22388000000000000000000",f8dce867f0a39c5bef9eeba609229efa02678b6c:"2000000000000000000000",e020e86362b487752836a6de0bc02cd8d89a8b6a:"6000000000000000000000",c4088c025f3e85013f5439fb3440a17301e544fe:"2325000000000000000000",befb448c0c5f683fb67ee570baf0db5686599751:"1970000000000000000000","2f187d5a704d5a338c5b2876a090dce964284e29":"4000000000000000000000",ec0e18a01dc4dc5daae567c3fa4c7f8f9b590205:"315900000000000000000","637f5869d6e4695f0eb9e27311c4878aff333380":"1969212000000000000000",d1100dd00fe2ddf18163ad964d0b69f1f2e9658a:"5959598000000000000000","17ef4acc1bf147e326749d10e677dcffd76f9e06":"39980000000000000000000","200dfc0b71e359b2b465440a36a6cdc352773007":"1500000000000000000000",efe0675da98a5dda70cd96196b87f4e726b43348:"1164000000000000000000",d5bd5e8455c130169357c471e3e681b7996a7276:"841500000000000000000","9c7b6dc5190fe2912963fcd579683ec7395116b0":"776000000000000000000",b105dd3d987cffd813e9c8500a80a1ad257d56c6:"1999944000000000000000","145250b06e4fa7cb2749422eb817bdda8b54de5f":"219000000000000000000",d96db33b7b5a950c3efa2dc31b10ba10a532ef87:"2000000000000000000000",af529bdb459cc185bee5a1c58bf7e8cce25c150d:"197000000000000000000","185546e8768d506873818ac9751c1f12116a3bef":"200000000000000000000","51d24bc3736f88dd63b7222026886630b6eb878d":"2000000000000000000000","69af28b0746cac0da17084b9398c5e36bb3a0df2":"1004700000000000000000","76f83ac3da30f7092628c7339f208bfc142cb1ee":"2842600000000000000000","00f463e137dcf625fbf3bca39eca98d2b968cf7f":"5910000000000000000000","2084fce505d97bebf1ad8c5ff6826fc645371fb2":"30000000000000000000","53a714f99fa00fef758e23a2e746326dad247ca7":"1490000000000000000000","0bf064428f83626722a7b5b26a9ab20421a7723e":"133700000000000000000",ac6f68e837cf1961cb14ab47446da168a16dde89:"1337000000000000000000","4b3c7388cc76da3d62d40067dabccd7ef0433d23":"100076000000000000000",deb9a49a43873020f0759185e20bbb4cf381bb8f:"211628000000000000000","5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5":"6000000000000000000000","9d0e7d92fb305853d798263bf15e97c72bf9d7e0":"1000000000000000000000","2b5c60e84535eeb4d580de127a12eb2677ccb392":"20000000000000000000000",d8d65420c18c2327cc5af97425f857e4a9fd51b3:"1760000000000000000000","30ec9392244a2108c987bc5cdde0ed9f837a817b":"1560562000000000000000","56a1d60d40f57f308eebf087dee3b37f1e7c2cba":"1159600000000000000000",a9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68:"5000000000000000000000",a67f38819565423aa85f3e3ab61bc763cbab89dd:"2130000000000000000000","62d5cc7117e18500ac2f9e3c26c86b0a94b0de15":"105000000000000000000","4970d3acf72b5b1f32a7003cf102c64ee0547941":"140000000000000000000000","76628150e2995b5b279fc83e0dd5f102a671dd1c":"40000000000000000000000","3d8f39881b9edfe91227c33fa4cdd91e678544b0":"86111000000000000000",ff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1:"1043000000000000000000","8d795c5f4a5689ad62da961671f028065286d554":"2048000000000000000000",be2346a27ff9b702044f500deff2e7ffe6824541:"20000000000000000000","0dbd417c372b8b0d01bcd944706bd32e60ae28d1":"340000000000000000000","467fbf41441600757fe15830c8cd5f4ffbbbd560":"10000000000000000000000","090cd67b60e81d54e7b5f6078f3e021ba65b9a1e":"1000000000000000000000","55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f":"1970000000000000000000","3b7b4f53c45655f3dc5f017edc23b16f9bc536fa":"100000000000000000000",d508d39c70916f6abc4cc7f999f011f077105802:"100470000000000000000","037dd056e7fdbd641db5b6bea2a8780a83fae180":"140000000000000000000","660557bb43f4be3a1b8b85e7df7b3c5bcd548057":"6000000000000000000000","02089361a3fe7451fb1f87f01a2d866653dc0b07":"39976000000000000000",c4bec96308a20f90cab18399c493fd3d065abf45:"14000000000000000000000",cca07bb794571d4acf041dad87f0d1ef3185b319:"2000000000000000000000",f2d0e986d814ea13c8f466a0538c53dc922651f0:"1380000000000000000000","662cfa038fab37a01745a364e1b98127c503746d":"3940000000000000000000","3336c3ef6e8b50ee90e037b164b7a8ea5faac65d":"272712000000000000000","30e33358fc21c85006e40f32357dc8895940aaf0":"1910000000000000000000","41a9a404fc9f5bfee48ec265b12523338e29a8bf":"388000000000000000000","6af235d2bbe050e6291615b71ca5829658810142":"3000000000000000000000",fd5a63157f914fd398eab19c137dd9550bb7715c:"100000000000000000000","8a4314fb61cd938fc33e15e816b113f2ac89a7fb":"432800000000000000000",b216dc59e27c3d7279f5cd5bb2becfb2606e14d9:"400000000000000000000",f5a5459fcdd5e5b273830df88eea4cb77ddadfb9:"74500000000000000000",df31025f5649d2c6eea41ed3bdd3471a790f759a:"20000000000000000000","721f9d17e5a0e74205947aeb9bc6a7938961038f":"51900000000000000000","08d0864dc32f9acb36bf4ea447e8dd6726906a15":"2000200000000000000000","54575c3114751e3c631971da6a2a02fd3ffbfcc8":"1940000000000000000000","8f60895fbebbb5017fcbff3cdda397292bf25ba6":"429177000000000000000","91fe8a4c6164df8fa606995d6ba7adcaf1c893ce":"17000000000000000000000","889087f66ff284f8b5efbd29493b706733ab1447":"9850000000000000000000","051633080d07a557adde319261b074997f14692d":"5800000000000000000000","59a12df2e3ef857aceff9306b309f6a500f70134":"1000000000000000000000","9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74":"1000060000000000000000","8846928d683289a2d11df8db7a9474988ef01348":"10000000000000000000000",dff1b220de3d8e9ca4c1b5be34a799bcded4f61c:"385428000000000000000","7e7c1e9a61a08a83984835c70ec31d34d3eaa87f":"191000000000000000000",fe210b8f04dc6d4f76216acfcbd59ba83be9b630:"20000000000000000000",dc8c2912f084a6d184aa73638513ccbc326e0102:"1295000000000000000000",dddd7b9e6eab409b92263ac272da801b664f8a57:"500000000000000000000000","86a5f8259ed5b09e188ce346ee92d34aa5dd93fa":"200000000000000000000",dc1f1979615f082140b8bb78c67b27a1942713b1:"60000000000000000000",ea66e7b84dcdbf36eea3e75b85382a75f1a15d96:"1729135000000000000000","039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706":"17300000000000000000","36bfe1fa3b7b70c172eb042f6819a8972595413e":"1000000000000000000000","039ef1ce52fe7963f166d5a275c4b1069fe3a832":"400008000000000000000",f1df55dcc34a051012b575cb968bc9c458ea09c9:"4000000000000000000000","168b5019b818691644835fe69bf229e17112d52c":"28000000000000000000000",f60bd735543e6bfd2ea6f11bff627340bc035a23:"2000000000000000000000","2cbb0c73df91b91740b6693b774a7d05177e8e58":"1850000000000000000000","9ffcf5ef46d933a519d1d16c6ba3189b27496224":"1000000000000000000000","0e11d77a8977fac30d268445e531149b31541a24":"2000000000000000000000",dfb1626ef48a1d7d7552a5e0298f1fc23a3b482d:"1713860000000000000000",cc943be1222cd1400a2399dd1b459445cf6d54a9:"12530000000000000000000",b37c2b9f50637bece0ca959208aefee6463ba720:"400000000000000000000","96b906ea729f4655afe3e57d35277c967dfa1577":"1000000000000000000000","7995bd8ce2e0c67bf1c7a531d477bca1b2b97561":"5945100000000000000000","96f820500b70f4a3e3239d619cff8f222075b135":"200000000000000000000",ad3565d52b688added08168b2d3872d17d0a26ae:"100000000000000000000","9e7c2050a227bbfd60937e268cea3e68fea8d1fe":"100000000000000000000","7e59dc60be8b2fc19abd0a5782c52c28400bce97":"1000000000000000000000","01ed5fba8d2eab673aec042d30e4e8a611d8c55a":"2000000000000000000000","59a087b9351ca42f58f36e021927a22988284f38":"18500000000000000000","2fe0023f5722650f3a8ac01009125e74e3f82e9b":"3000000000000000000000",bd1803370bddb129d239fd16ea8526a6188ae58e:"500000000000000000000",c70527d444c490e9fc3f5cc44e66eb4f306b380f:"4000000000000000000000","0f206e1a1da7207ea518b112418baa8b06260328":"600000000000000000000","6e1a046caf5b4a57f4fd4bc173622126b4e2fd86":"1790000000000000000000","84008a72f8036f3feba542e35078c057f32a8825":"100000000000000000000","246291165b59332df5f18ce5c98856fae95897d6":"1700000000000000000000","7e99dfbe989d3ba529d19751b7f4317f8953a3e2":"400000000000000000000","748c285ef1233fe4d31c8fb1378333721c12e27a":"2000000000000000000000","3dd12e556a603736feba4a6fa8bd4ac45d662a04":"167450000000000000000000",d0ae735d915e946866e1fea77e5ea466b5cadd16:"2000000000000000000000","4f767bc8794aef9a0a38fea5c81f14694ff21a13":"512200000000000000000","0e2f8e28a681f77c583bd0ecde16634bdd7e00cd":"95060000000000000000",d74a6e8d6aab34ce85976814c1327bd6ea0784d2:"100000000000000000000000","629be7ab126a5398edd6da9f18447e78c692a4fd":"2000000000000000000000","2e46fcee6a3bb145b594a243a3913fce5dad6fba":"10000000000000000000000",e39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc:"2000000000000000000000","119aa64d5b7d181dae9d3cb449955c89c1f963fa":"700000000000000000000",ce079f51887774d8021cb3b575f58f18e9acf984:"180000000000000000000","550c306f81ef5d9580c06cb1ab201b95c748a691":"665800000000000000000","06dc7f18cee7edab5b795337b1df6a9e8bd8ae59":"400000000000000000000",e21c778ef2a0d7f751ea8c074d1f812243863e4e:"5308559000000000000000","45d4b54d37a8cf599821235f062fa9d170ede8a4":"324000000000000000000","893a6c2eb8b40ab096b4f67e74a897b840746e86":"1730000000000000000000",d44d81e18f46e2cfb5c1fcf5041bc8569767d100:"36381800000000000000000",c5de1203d3cc2cea31c82ee2de5916880799eafd:"5000000000000000000000","7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e":"2000000000000000000000","3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7":"200000000000000000000",ac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6:"1000000000000000000000","7640a37f8052981515bce078da93afa4789b5734":"2000000000000000000000","76cac488111a4fd595f568ae3a858770fc915d5f":"200000000000000000000",ff4a408f50e9e72146a28ce4fc8d90271f116e84:"1970000000000000000000","249db29dbc19d1235da7298a04081c315742e9ac":"1801800000000000000000","3a04572847d31e81f7765ca5bfc9d557159f3683":"133031000000000000000",b6771b0bf3427f9ae7a93e7c2e61ee63941fdb08:"18800000000000000000000","30c26a8e971baa1855d633ba703f028cc7873140":"10000000000000000000000","167e3e3ae2003348459392f7dfce44af7c21ad59":"500000000000000000000","43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc":"2914000000000000000000","056b1546894f9a85e203fb336db569b16c25e04f":"169397000000000000000","70616e2892fa269705b2046b8fe3e72fa55816d3":"20000000000000000000000","8f4d1d41693e462cf982fd81d0aa701d3a5374c9":"4000000000000000000000",c518799a5925576213e21896e0539abb85b05ae3:"1000000000000000000000","0e3a28c1dfafb0505bdce19fe025f506a6d01ceb":"2000000000000000000000",e4a47e3933246c3fd62979a1ea19ffdf8c72ef37:"148273000000000000000",d231929735132102471ba59007b6644cc0c1de3e:"1000090000000000000000","555d8d3ce1798aca902754f164b8be2a02329c6c":"10000000000000000000000","5ab1a5615348001c7c775dc75748669b8be4de14":"690200000000000000000","2fee36a49ee50ecf716f1047915646779f8ba03f":"1056230000000000000000","54db5e06b4815d31cb56a8719ba33af2d73e7252":"670000000000000000000","7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9":"6000000000000000000000",c1384c6e717ebe4b23014e51f31c9df7e4e25b31:"500000000000000000000","474158a1a9dc693c133f65e47b5c3ae2f773a86f":"200200000000000000000","2934c0df7bbc172b6c186b0b72547ace8bf75454":"60000000000000000000","6966063aa5de1db5c671f3dd699d5abe213ee902":"8000000000000000000000","9225d46a5a80943924a39e5b84b96da0ac450581":"40000000000000000000000","671bbca099ff899bab07ea1cf86965c3054c8960":"50000000000000000000",f1f766b0e46d73fcd4d52e7a72e1b9190cc632b3:"8000000000000000000000",ef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f:"705668000000000000000","38d2e9154964b41c8d50a7487d391e7ee2c3d3c2":"3500000000000000000000","352a785f4a921632504ce5d015f83c49aa838d6d":"4314800000000000000000","743de50026ca67c94df54f066260e1d14acc11ac":"2000000000000000000000",b188078444027e386798a8ae68698919d5cc230d:"267400000000000000000","53608105ce4b9e11f86bf497ffca3b78967b5f96":"20000000000000000000000","3b159099075207c6807663b1f0f7eda54ac8cce3":"1969543000000000000000","141a5e39ee2f680a600fbf6fa297de90f3225cdd":"10000000000000000000000","44fff37be01a3888d3b8b8e18880a7ddefeeead3":"259145000000000000000",c5a629a3962552cb8eded889636aafbd0c18ce65:"10000000000000000000000",fdba5359f7ec3bc770ac49975d844ec9716256f1:"1000000000000000000000","7c1df24a4f7fb2c7b472e0bb006cb27dcd164156":"1000000000000000000000",ab7d54c7c6570efca5b4b8ce70f52a5773e5d53b:"279600000000000000000","3f173aa6edf469d185e59bd26ae4236b92b4d8e1":"320000000000000000000",a3f4ad14e0bb44e2ce2c14359c75b8e732d37054:"200000000000000000000",ac5f627231480d0d95302e6d89fc32cb1d4fe7e3:"200000000000000000000",d0775dba2af4c30a3a78365939cd71c2f9de95d2:"1940000000000000000000",ad94235fc3b3f47a2413af31e884914908ef0c45:"500008000000000000000",eaedcc6b8b6962d5d9288c156c579d47c0a9fcff:"85000000000000000000","7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6":"3008000000000000000000",ec73114c5e406fdbbe09b4fa621bd70ed54ea1ef:"24500000000000000000000",a690f1a4b20ab7ba34628620de9ca040c43c1963:"4000000000000000000000",cad14f9ebba76680eb836b079c7f7baaf481ed6d:"238600000000000000000","6c714a58fff6e97d14b8a5e305eb244065688bbd":"4000000000000000000000","3e618350fa01657ab0ef3ebac8e37012f8fc2b6f":"2804400000000000000000",c946d5acc1346eba0a7279a0ac1d465c996d827e:"16385128000000000000000","1164caaa8cc5977afe1fad8a7d6028ce2d57299b":"400000000000000000000","7917e5bd82a9790fd650d043cdd930f7799633db":"3999800000000000000000",d52aecc6493938a28ca1c367b701c21598b6a02e:"1100000000000000000000","98bed3a72eccfbafb923489293e429e703c7e25b":"2000000000000000000000","42db0b902559e04087dd5c441bc7611934184b89":"2014420000000000000000","43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b":"2000000000000000000000","85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb":"20000000000000000000","581b9fd6eae372f3501f42eb9619eec820b78a84":"19699015000000000000000","541db20a80cf3b17f1621f1b3ff79b882f50def3":"1000000000000000000000","4e8a6d63489ccc10a57f885f96eb04ecbb546024":"18500000000000000000000","28349f7ef974ea55fe36a1583b34cec3c45065f0":"234490000000000000000",a3241d890a92baf52908dc4aa049726be426ebd3:"19999560000000000000000",b4b11d109f608fa8edd3fea9f8c315649aeb3d11:"5000000000000000000000","5f321b3daaa296cadf29439f9dab062a4bffedd6":"81868000000000000000",c5ae86b0c6c7e3900f1368105c56537faf8d743e:"188000000000000000000","9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15":"20000000000000000000",a3facc50195c0b4933c85897fecc5bbd995c34b8:"20000000000000000000",f07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03:"5910000000000000000000","640aba6de984d94517377803705eaea7095f4a11":"10000000000000000000000","204ac98867a7c9c7ed711cb82f28a878caf69b48":"6000000000000000000000","9d34dac25bd15828faefaaf28f710753b39e89dc":"1090400000000000000000",fe418b421a9c6d373602790475d2303e11a75930:"1015200000000000000000","3f472963197883bbda5a9b7dfcb22db11440ad31":"481445000000000000000","1578bdbc371b4d243845330556fff2d5ef4dff67":"100000000000000000000",dba4796d0ceb4d3a836b84c96f910afc103f5ba0:"166666000000000000000","466fda6b9b58c5532750306a10a2a8c768103b07":"199955000000000000000","2770f14efb165ddeba79c10bb0af31c31e59334c":"3000000000000000000000","7c382c0296612e4e97e440e02d3871273b55f53b":"197600000000000000000","1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b":"3000000000000000000000",a9acf600081bb55bb6bfbab1815ffc4e17e85a95:"200000000000000000000",f93d5bcb0644b0cce5fcdda343f5168ffab2877d:"209978000000000000000",db0cc78f74d9827bdc8a6473276eb84fdc976212:"2000000000000000000000",b66411e3a02dedb726fa79107dc90bc1cae64d48:"2000000000000000000000","4d6e8fe109ccd2158e4db114132fe75fecc8be5b":"25019000000000000000","6fd947d5a73b175008ae6ee8228163da289b167d":"30000000000000000000000","32d950d5e93ea1d5b48db4714f867b0320b31c0f":"1015200000000000000000","9c99b62606281b5cefabf36156c8fe62839ef5f3":"4000000000000000000000","86c8d0d982b539f48f9830f9891f9d607a942659":"13260000000000000000000",f2127d54188fedef0f338a5f38c7ff73ad9f6f42:"20000000000000000000000",e864fec07ed1214a65311e11e329de040d04f0fd:"1656353000000000000000","1d09ad2412691cc581c1ab36b6f9434cd4f08b54":"7000000000000000000000","4ea70f04313fae65c3ff224a055c3d2dab28dddf":"19999800000000000000000",e0668fa82c14d6e8d93a53113ef2862fa81581bc:"870400000000000000000",f0d858105e1b648101ac3f85a0f8222bf4f81d6a:"600000000000000000000","0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf":"1820000000000000000000","5793abe6f1533311fd51536891783b3f9625ef1c":"827268000000000000000","8d667637e29eca05b6bfbef1f96d460eefbf9984":"4000000000000000000000",d76dbaebc30d4ef67b03e6e6ecc6d84e004d502d:"2019250000000000000000","42d1a6399b3016a8597f8b640927b8afbce4b215":"2980000000000000000000","21fd47c5256012198fa5abf131c06d6aa1965f75":"7880000000000000000000","2f2bba1b1796821a766fce64b84f28ec68f15aea":"20000000000000000000",d24bf12d2ddf457decb17874efde2052b65cbb49:"14000000000000000000000","88de13b09931877c910d593165c364c8a1641bd3":"3000000000000000000000","555ca9f05cc134ab54ae9bea1c3ff87aa85198ca":"100000000000000000000",ae9ecd6bdd952ef497c0050ae0ab8a82a91898ce:"30000000000000000000",ad8bfef8c68a4816b3916f35cb7bfcd7d3040976:"40000000000000000000000",dad136b88178b4837a6c780feba226b98569a94c:"200000000000000000000","800e7d631c6e573a90332f17f71f5fd19b528cb9":"152000000000000000000","94a9a71691317c2064271b51c9353fbded3501a8":"3340000000000000000000","80a0f6cc186cf6201400736e065a391f52a9df4a":"10000000000000000000000","712ff7370a13ed360973fedc9ff5d2c93a505e9e":"3940000000000000000000","42399659aca6a5a863ea2245c933fe9a35b7880e":"2044000000000000000000",ae239acffd4ebe2e1ba5b4170572dc79cc6533ec:"12000000000000000000000","007b9fc31905b4994b04c9e2cfdc5e2770503f42":"1999000000000000000000","7480de62254f2ba82b578219c07ba5be430dc3cb":"7040000000000000000000","917b8f9f3a8d09e9202c52c29e724196b897d35e":"161000000000000000000","708ea707bae4357f1ebea959c3a250acd6aa21b3":"500000000000000000000","6dc7053a718616cfc78bee6382ee51add0c70330":"2000000000000000000000",c4dac5a8a0264fbc1055391c509cc3ee21a6e04c:"6501000000000000000000",c1b2a0fb9cad45cd699192cd27540b88d3384279:"500000000000000000000",b07cb9c12405b711807543c4934465f87f98bd2d:"2000000000000000000000",c7f72bb758016b374714d4899bce22b4aec70a31:"1072706000000000000000","0c480de9f7461002908b49f60fc61e2b62d3140b":"10000000000000000000000","83d532d38d6dee3f60adc68b936133c7a2a1b0dd":"500000000000000000000","12afbcba1427a6a39e7ba4849f7ab1c4358ac31b":"20000000000000000000000",f8f6645e0dee644b3dad81d571ef9baf840021ad:"2000000000000000000000","40cf890591eae4a18f812a2954cb295f633327e6":"48132000000000000000","735b97f2fc1bd24b12076efaf3d1288073d20c8c":"20000000000000000000","47c7e5efb48b3aed4b7c6e824b435f357df4c723":"18200000000000000000",d34d708d7398024533a5a2b2309b19d3c55171bb:"400000000000000000000","64370e87202645125a35b207af1231fb6072f9a7":"200000000000000000000",b055af4cadfcfdb425cf65ba6431078f07ecd5ab:"100000000000000000000",c7de5e8eafb5f62b1a0af2195cf793c7894c9268:"1000000000000000000000",c63cd7882118b8a91e074d4c8f4ba91851303b9a:"260000000000000000000","164d7aac3eecbaeca1ad5191b753f173fe12ec33":"744090000000000000000",e4fb26d1ca1eecba3d8298d9d148119ac2bbf580:"400000000000000000000","613ac53be565d46536b820715b9b8d3ae68a4b95":"3760000000000000000000","7f616c6f008adfa082f34da7d0650460368075fb":"1000000000000000000000","9af100cc3dae83a33402051ce4496b16615483f6":"2000000000000000000000",b45cca0d36826662683cf7d0b2fdac687f02d0c4:"1000000000000000000000","93a6b3ab423010f981a7489d4aad25e2625c5741":"20190033000000000000000",ee049af005974dd1c7b3a9ca8d9aa77175ba53aa:"333333000000000000000","687927e3048bb5162ae7c15cf76bd124f9497b9e":"2000000000000000000000","1aa40270d21e5cde86b6316d1ac3c533494b79ed":"20000000000000000000","426259b0a756701a8b663528522156c0288f0f24":"9900000000000000000000","91c75e3cb4aa89f34619a164e2a47898f5674d9c":"2000000000000000000000","437983388ab59a4ffc215f8e8269461029c3f1c1":"20000000000000000000000","272a131a5a656a7a3aca35c8bd202222a7592258":"2674000000000000000000",bc0ca4f217e052753614d6b019948824d0d8688b:"400000000000000000000",cc6c03bd603e09de54e9c4d5ac6d41cbce715724:"98500000000000000000",d79aff13ba2da75d46240cac0a2467c656949823:"1730000000000000000000","477b24eee8839e4fd19d1250bd0b6645794a61ca":"8000000000000000000000","79fd6d48315066c204f9651869c1096c14fc9781":"2000000000000000000000","1463a873555bc0397e575c2471cf77fa9db146e0":"10000000000000000000000","89ab13ee266d779c35e8bb04cd8a90cc2103a95b":"60000000000000000000000","90acced7e48c08c6b934646dfa0adf29dc94074f":"56154000000000000000","31ea6eab19d00764e9a95e183f2b1b22fc7dc40f":"20000000000000000000","87a53ea39f59a35bada8352521645594a1a714cb":"1910000000000000000000","1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79":"4516200000000000000000",e36a8ea87f1e99e8a2dc1b2608d166667c9dfa01:"100000000000000000000",ec2cb8b9378dff31aec3c22e0e6dadff314ab5dd:"2000000000000000000000","3cadeb3d3eed3f62311d52553e70df4afce56f23":"4000000000000000000000","3ceca96bb1cdc214029cbc5e181d398ab94d3d41":"80000000000000000000000","3283eb7f9137dd39bed55ffe6b8dc845f3e1a079":"66224000000000000000","0954a8cb5d321fc3351a7523a617d0f58da676a7":"2506000000000000000000",de33d708a3b89e909eaf653b30fdc3a5d5ccb4b3:"177300000000000000000","1c6702b3b05a5114bdbcaeca25531aeeb34835f4":"26071500000000000000000",e5b96fc9ac03d448c1613ac91d15978145dbdfd1:"200000000000000000000",fbf204c813f836d83962c7870c7808ca347fd33e:"20000000000000000000","3b13631a1b89cb566548899a1d60915cdcc4205b":"2000000000000000000000",a87f7abd6fa31194289678efb63cf584ee5e2a61:"4000000000000000000000",c0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d:"136499000000000000000",ffd6da958eecbc016bab91058440d39b41c7be83:"20000000000000000000000","0e3dd7d4e429fe3930a6414035f52bdc599d784d":"40110000000000000000",e0663e8cd66792a641f56e5003660147880f018e:"2000000000000000000000","5b78eca27fbdea6f26befba8972b295e7814364b":"2000000000000000000000",ec9851bd917270610267d60518b54d3ca2b35b17:"40000000000000000000000",bc9c95dfab97a574cea2aa803b5caa197cef0cff:"420000000000000000000","100b4d0977fcbad4debd5e64a0497aeae5168fab":"314500000000000000000","1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb":"152000000000000000000",b4524c95a7860e21840296a616244019421c4aba:"8000000000000000000000","88975a5f1ef2528c300b83c0c607b8e87dd69315":"83500000000000000000","853e6abaf44469c72f151d4e223819aced4e3728":"2000000000000000000000",d604abce4330842e3d396ca73ddb5519ed3ec03f:"163940000000000000000",d209482bb549abc4777bea6d7f650062c9c57a1c:"320880000000000000000","590acbda37290c0d3ec84fc2000d7697f9a4b15d":"500000000000000000000","571950ea2c90c1427d939d61b4f2de4cf1cfbfb0":"20000000000000000000",cb94e76febe208116733e76e805d48d112ec9fca:"1000000000000000000000",fa8e3b1f13433900737daaf1f6299c4887f85b5f:"715000000000000000000","162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1":"2000000000000000000000","4bea288eea42c4955eb9faad2a9faf4783cbddac":"28790618000000000000000",c8ab1a3cf46cb8b064df2e222d39607394203277:"2000000000000000000000","318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7":"200000000000000000000","53c5fe0119e1e848640cee30adea96940f2a5d8b":"21746000000000000000000","0701f9f147ec486856f5e1b71de9f117e99e2105":"173360000000000000000","337cfe1157a5c6912010dd561533791769c2b6a6":"1000000000000000000000",fd60d2b5af3d35f7aaf0c393052e79c4d823d985:"56400000000000000000","0f049a8bdfd761de8ec02cee2829c4005b23c06b":"252000000000000000000","924bce7a853c970bb5ec7bb759baeb9c7410857b":"13700000000000000000","16abb8b021a710bdc78ea53494b20614ff4eafe8":"158000000000000000000","9e7f65a90e8508867bccc914256a1ea574cf07e3":"1240000000000000000000","01d03815c61f416b71a2610a2daba59ff6a6de5b":"9553100000000000000000","3df762049eda8ac6927d904c7af42f94e5519601":"2000000000000000000000","5593c9d4b664730fd93ca60151c25c2eaed93c3b":"200000000000000000000",e023f09b2887612c7c9cf1988e3a3a602b3394c9:"2000000000000000000000","4c13980c32dcf3920b78a4a7903312907c1b123f":"60024000000000000000",a282e969cac9f7a0e1c0cd90f5d0c438ac570da3:"627760000000000000000","3b22da2a0271c8efe102532773636a69b1c17e09":"502000000000000000000","1aa1021f550af158c747668dd13b463160f95a40":"1470000000000000000000",f15178ffc43aa8070ece327e930f809ab1a54f9d:"197600000000000000000",db1293a506e90cad2a59e1b8561f5e66961a6788:"2000000000000000000000","88c361640d6b69373b081ce0c433bd590287d5ec":"50000000000000000000000","3737216ee91f177732fb58fa4097267207e2cf55":"1520000000000000000000",a16d9e3d63986159a800b46837f45e8bb980ee0b:"2030400000000000000000",ec76f12e57a65504033f2c0bce6fc03bd7fa0ac4:"3580000000000000000000",d9f1b26408f0ec67ad1d0d6fe22e8515e1740624:"24000000000000000000","716ba01ead2a91270635f95f25bfaf2dd610ca23":"44750000000000000000000","42a98bf16027ce589c4ed2c95831e2724205064e":"10000000000000000000000","0f88aac9346cb0e7347fba70905475ba8b3e5ece":"10000000000000000000000","2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c":"20000000000000000000","3cea302a472a940379dd398a24eafdbadf88ad79":"3000000000000000000000",a29d5bda74e003474872bd5894b88533ff64c2b5:"10000000000000000000000","2d23766b6f6b05737dad80a419c40eda4d77103e":"3820000000000000000000",b07249e055044a9155359a402937bbd954fe48b6:"100000000000000000000",f1e980c559a1a8e5e50a47f8fffdc773b7e06a54:"30104784000000000000000","8275cd684c3679d5887d03664e338345dc3cdde1":"15800000000000000000",b27c1a24204c1e118d75149dd109311e07c073ab:"3100000000000000000000","451b3699475bed5d7905f8905aa3456f1ed788fc":"2560000000000000000000","31ad4d9946ef09d8e988d946b1227f9141901736":"22880000000000000000000","52b8a9592634f7300b7c5c59a3345b835f01b95c":"2000000000000000000000",b161725fdcedd17952d57b23ef285b7e4b1169e8:"50071000000000000000","74fc5a99c0c5460503a13b0509459da19ce7cd90":"200000000000000000000",d99df7421b9382e42c89b006c7f087702a0757c0:"480000000000000000000","8a4f4a7f52a355ba105fca2072d3065fc8f7944b":"500000000000000000000","12316fc7f178eac22eb2b25aedeadf3d75d00177":"19999999000000000000000",f598db2e09a8a5ee7d720d2b5c43bb126d11ecc2:"200000000000000000000","37b8beac7b1ca38829d61ab552c766f48a10c32f":"400000000000000000000","851dc38adb4593729a76f33a8616dab6f5f59a77":"100000000000000000000",bf4096bc547dbfc4e74809a31c039e7b389d5e17:"3940000000000000000000","98d3731992d1d40e1211c7f735f2189afa0702e0":"8000000000000000000000","0f4073c1b99df60a1549d69789c7318d9403a814":"20000000000000000000000",a430995ddb185b9865dbe62539ad90d22e4b73c2:"10000000000000000000000","898c72dd736558ef9e4be9fdc34fef54d7fc7e08":"1000000000000000000000",f9b617f752edecae3e909fbb911d2f8192f84209:"2674000000000000000000",e1ae029b17e373cde3de5a9152201a14cac4e119:"99968000000000000000",d8e8474292e7a051604ca164c0707783bb2885e8:"13370000000000000000000",f476f2cb7208a32e051fd94ea8662992638287a2:"100000000000000000000","3a84e950ed410e51b7e8801049ab2634b285fea1":"18690000000000000000000","5b7784caea01799ca30227827667ce207c5cbc76":"2000000000000000000000","3af65b3e28895a4a001153391d1e69c31fb9db39":"3940000000000000000000","95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2":"34225000000000000000",a8446c4781a737ac4328b1e15b8a0b3fbb0fd668:"21390500000000000000000","4888fb25cd50dbb9e048f41ca47d78b78a27c7d9":"17300000000000000000000","566c10d638e8b88b47d6e6a414497afdd00600d4":"99960000000000000000",bd47f5f76e3b930fd9485209efa0d4763da07568:"1000000000000000000000","1e1c6351776ac31091397ecf16002d979a1b2d51":"1400000000000000000000",edf603890228d7d5de9309942b5cad4219ef9ad7:"5000000000000000000000","1923cfc68b13ea7e2055803645c1e320156bd88d":"1337000000000000000000","8f8f37d0ad8f335d2a7101b41156b688a81a9cbe":"70000000000000000000","63334fcf1745840e4b094a3bb40bb76f9604c04c":"3978000000000000000000","001762430ea9c3a26e5749afdb70da5f78ddbb8c":"200000000000000000000","512116817ba9aaf843d1507c65a5ea640a7b9eec":"50000000000000000000","2961fb391c61957cb5c9e407dda29338d3b92c80":"999942000000000000000",fc2952b4c49fedd0bc0528a308495e6d6a1c71d6:"2000000000000000000000","13ec812284026e409bc066dfebf9d5a4a2bf801e":"1610000000000000000000",ef463c2679fb279164e20c3d2691358773a0ad95:"2000000000000000000000","3aadf98b61e5c896e7d100a3391d3250225d61df":"234000000000000000000",e8137fc1b2ec7cc7103af921899b4a39e1d959a1:"1490000000000000000000",b1a2b43a7433dd150bb82227ed519cd6b142d382:"2738000000000000000000",c1f39bd35dd9cec337b96f47c677818160df37b7:"20000000000000000000",b587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0:"630400000000000000000","41485612d03446ec4c05e5244e563f1cbae0f197":"970000000000000000000",a12623e629df93096704b16084be2cd89d562da4:"8500000000000000000000","3f2f381491797cc5c0d48296c14fd0cd00cdfa2d":"804000000000000000000","9470cc36594586821821c5c996b6edc83b6d5a32":"24000000000000000000","3605372d93a9010988018f9f315d032ed1880fa1":"500066000000000000000","12632388b2765ee4452b50161d1fffd91ab81f4a":"740000000000000000000","274a3d771a3d709796fbc4d5f48fce2fe38c79d6":"20000000000000000000",d60a52580728520df7546bc1e283291788dbae0c:"999910000000000000000","1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff":"1996800000000000000000",c282e6993fbe7a912ea047153ffd9274270e285b:"139939000000000000000",a291e9c7990d552dd1ae16cebc3fca342cbaf1d1:"20000000000000000000000","5547fdb4ae11953e01292b7807fa9223d0e4606a":"98940000000000000000",bded11612fb5c6da99d1e30e320bc0995466141e:"400000000000000000000",b73b4ff99eb88fd89b0b6d57a9bc338e886fa06a:"32000000000000000000",b1c751786939bba0d671a677a158c6abe7265e46:"10000000000000000000000",e881bbbe69722d81efecaa48d1952a10a2bfac8f:"16000000000000000000000",fe96c4cd381562401aa32a86e65b9d52fa8aee27:"2640000000000000000000","683dba36f7e94f40ea6aea0d79b8f521de55076e":"140000000000000000000","5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d":"199800000000000000000","8914a680a5aec5226d4baaec2e5552b44dd7c874":"100076000000000000000","041170f581de80e58b2a045c8f7c1493b001b7cb":"889800000000000000000","4665e47396c7db97eb2a03d90863d5d4ba319a94":"600000000000000000000",ed4be04a052d7accb3dcce90319dba4020ab2c68:"37547947000000000000000","4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6":"2000000000000000000000",a21442ab05340ade68c915f3c3399b9955f3f7eb:"775000000000000000000","655934da8e744eaa3de34dbbc0894c4eda0b61f2":"200000000000000000000","6038740ae28d66ba93b0be08482b3205a0f7a07b":"316000000000000000000","99924a9816bb7ddf3fec1844828e9ad7d06bf4e6":"1760000000000000000000","6847825bdee8240e28042c83cad642f286a3bddc":"1500000000000000000000",a718aaad59bf395cba2b23e09b02fe0c89816247:"999600000000000000000","2c89f5fdca3d155409b638b98a742e55eb4652b7":"98500000000000000000000","1a7044e2383f8708305b495bd1176b92e7ef043a":"200000000000000000000","282e80a554875a56799fa0a97f5510e795974c4e":"1000000000000000000000",ffb3bcc3196a8c3cb834cec94c34fed35b3e1054:"1340000000000000000000",d135794b149a18e147d16e621a6931f0a40a969a:"20000000000000000000000","6b94615db750656ac38c7e1cf29a9d13677f4e15":"12000000000000000000000",ecbe425e670d39094e20fb5643a9d818eed236de:"5000000000000000000000","511e0efb04ac4e3ff2e6550e498295bfcd56ffd5":"668500000000000000000",ff65511cada259260c1ddc41974ecaecd32d6357:"1760000000000000000000","9ffc5fe06f33f5a480b75aa94eb8556d997a16c0":"20000000000000000000","57df23bebdc65eb75feb9cb2fad1c073692b2baf":"4000000000000000000000","207ef80b5d60b6fbffc51f3a64b8c72036a5abbd":"6685000000000000000000",c573e841fa08174a208b060ccb7b4c0d7697127f:"668500000000000000000","411610b178d5617dfab934d293f512a93e5c10e1":"170000000000000000000","9991614c5baa47dd6c96874645f97add2c3d8380":"1970000000000000000000","2d3480bf0865074a72c7759ee5137b4d70c51ce9":"200000000000000000000","9d40e012f60425a340d82d03a1c757bfabc706fb":"169799000000000000000","47648bed01f3cd3249084e635d14daa9e7ec3c8a":"194000000000000000000",a5ff62222d80c013cec1a0e8850ed4d354dac16d:"207600000000000000000",f80d3619702fa5838c48391859a839fb9ce7160f:"1992800000000000000000","7c0f5e072043c9ee740242197e78cc4b98cdf960":"200000000000000000000",a40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa:"1000000000000000000000","2eeed50471a1a2bf53ee30b1232e6e9d80ef866d":"20000000000000000000","0c2808b951ed9e872d7b32790fcc5994ae41ffdc":"102000000000000000000000","7f06c89d59807fa60bc60136fcf814cbaf2543bd":"10000000000000000000000","8d4b603c5dd4570c34669515fdcc665890840c77":"18200000000000000000",d5e5c135d0c4c3303934711993d0d16ff9e7baa0:"2000000000000000000000","241361559feef80ef137302153bd9ed2f25db3ef":"20000000000000000000000",db63122de7037da4971531fae9af85867886c692:"277000000000000000000","417e4e2688b1fd66d821529e46ed4f42f8b3db3d":"2000000000000000000000","127db1cadf1b771cbd7475e1b272690f558c8565":"14000000000000000000000","48659d8f8c9a2fd44f68daa55d23a608fbe500dc":"2000000000000000000000",b3a64b1176724f5409e1414a3523661baee74b4a:"25610000000000000000",aa14422d6f0ae5a758194ed15780c838d67f1ee1:"28503824000000000000000",a0a0e65204541fca9b2fb282cd95138fae16f809:"10000000000000000000000",d2107b353726c3a2b46566eaa7d9f80b5d21dbe3:"20000000000000000000",e4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1:"300443000000000000000","09f3f601f605441140586ce0656fa24aa5b1d9ae":"1539400000000000000000","87fcbe7c4193ffcb08143779c9bec83fe7fda9fc":"100275000000000000000","03ebc63fda6660a465045e235fbe6e5cf195735f":"141840000000000000000",bdbaf6434d40d6355b1e80e40cc4ab9c68d96116:"100000000000000000000","4e2225a1bb59bc88a2316674d333b9b0afca6655":"155000000000000000000","4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b":"2000000000000000000000","4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98":"5640000000000000000000","27146913563aa745e2588430d9348e86ea7c3510":"400000000000000000000","4c5afe40f18ffc48d3a1aec41fc29de179f4d297":"2000000000000000000000","8a810114b2025db9fbb50099a6e0cb9e2efa6bdc":"1910000000000000000000","2dee90a28f192d676a8773232b56f18f239e2fad":"18587970000000000000000","60676e92d18b000509c61de540e6c5ddb676d509":"1200000000000000000000","9bfc659c9c601ea42a6b21b8f17084ec87d70212":"10000000000000000000000","5d5d6e821c6eef96810c83c491468560ef70bfb5":"2000000000000000000000",d5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a:"1999944000000000000000","33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc":"2000000000000000000000","3abb8adfc604f48d5984811d7f1d52fef6758270":"4475000000000000000000","980a84b686fc31bdc83c221058546a71b11f838a":"779471000000000000000","0b507cf553568daaf65504ae4eaa17a8ea3cdbf5":"2000000000000000000000","896009526a2c7b0c09a6f63a80bdf29d9c87de9c":"3462830000000000000000","9696052138338c722f1140815cf7749d0d3b3a74":"500000000000000000000","3831757eae7557cb8a37a4b10644b63e4d3b3c75":"200000000000000000000","62dc72729024375fc37cbb9c7c2393d10233330f":"2000000000000000000000","44098866a69b68c0b6bc168229b9603587058967":"188000000000000000000","25adb8f96f39492c9bb47c5edc88624e46075697":"26740000000000000000000",fd4de8e3748a289cf7d060517d9d38388db01fb8:"250000000000000000000","6be7595ea0f068489a2701ec4649158ddc43e178":"2000000000000000000000",d402b4f6a099ebe716cb14df4f79c0cd01c6071b:"2000000000000000000000",a07682000b1bcf3002f85c80c0fa2949bd1e82fd:"4000000000000000000000",eb4f00e28336ea09942588eeac921811c522143c:"2000000000000000000000","8f31c7005197ec997a87e69bec48649ab94bb2a5":"4000000000000000000000",e7fd8fd959aed2767ea7fa960ce1db53af802573:"1000000000000000000000",a8ef9ad274436042903e413c3b0c62f5f52ed584:"10000000000000000000000",d83ad260e9a6f432fb6ea28743299b4a09ad658c:"2000000000000000000000",b5c816a8283ca4df68a1a73d63bd80260488df08:"200000000000000000000",d7d3c75920590438b82c3e9515be2eb6ed7a8b1a:"60000000000000000000000",af3cb5965933e7dad883693b9c3e15beb68a4873:"2000000000000000000000","6e899e59a9b41ab7ea41df7517860f2acb59f4fd":"20000000000000000000000","527a8ca1268633a6c939c5de1b929aee92aeac8d":"900000000000000000000","1680cec5021ee93050f8ae127251839e74c1f1fd":"13098657000000000000000",ff7843c7010aa7e61519b762dfe49124a76b0e4e:"933580000000000000000000","140fba58dbc04803d84c2130f01978f9e0c73129":"400000000000000000000","0261ad3a172abf1315f0ffec3270986a8409cb25":"203500000000000000000",ab5a79016176320973e8cd38f6375530022531c0:"1000000000000000000000",fca73eff8771c0103ba3cc1a9c259448c72abf0b:"1000000000000000000000","07d41217badca5e0e60327d845a3464f0f27f84a":"4000000000000000000000","2c1c19114e3d6de27851484b8d2715e50f8a1065":"100000000000000000000",abd21eff954fc6a7de26912a7cbb303a6607804e:"1517000000000000000000",f303d5a816affd97e83d9e4dac2f79072bb0098f:"960000000000000000000","114cfefe50170dd97ae08f0a44544978c599548d":"863000000000000000000","647b85044df2cf0b4ed4882e88819fe22ae5f793":"1000032000000000000000","1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a":"2000000000000000000000","0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916":"600000000000000000000",c765e00476810947816af142d46d2ee7bca8cc4f:"500000000000000000000",b57b04fa23d1203fae061eac4542cb60f3a57637:"191000000000000000000",e192489b85a982c1883246d915b229cb13207f38:"5000000000000000000000","5f483ffb8f680aedf2a38f7833afdcde59b61e4b":"2000000000000000000000",b46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d:"3139000000000000000000","59c7f785c93160e5807ed34e5e534bc6188647a7":"640000000000000000000","18e4ce47483b53040adbab35172c01ef64506e0c":"9000000000000000000000","296d66b521571a4e4103a7f562c511e6aa732d81":"668500000000000000000",bcd99edc2160f210a05e3a1fa0b0434ced00439b:"2000000000000000000000",f14f0eb86db0eb68753f16918e5d4b807437bd3e:"200000000000000000000","60d5667140d12614b21c8e5e8a33082e32dfcf23":"20000000000000000000000","8ccabf25077f3aa41545344d53be1b2b9c339000":"1695400000000000000000","8cc0d7c016fa7aa950114aa1db094882eda274ea":"159800000000000000000",c71145e529c7a714e67903ee6206e4c3042b6727:"1430000000000000000000",c5e9939334f1252ed2ba26814487dfd2982b3128:"70000000000000000000",f09b3e87f913ddfd57ae8049c731dba9b636dfc3:"608000000000000000000","4349225a62f70aea480a029915a01e5379e64fa5":"2598000000000000000000","666b4f37d55d63b7d056b615bb74c96b3b01991a":"4000000000000000000000","8bd6b1c6d74d010d1008dba6ef835d4430b35c32":"50000000000000000000","7363cd90fbab5bb8c49ac20fc62c398fe6fb744c":"2000000000000000000000",b7479dab5022c4d5dbaaf8de171b4e951dd1a457:"80000000000000000000","5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9":"1910000000000000000000","32a20d028e2c6218b9d95b445c771524636a22ef":"9500000000000000000000","1bd28cd5c78aee51357c95c1ef9235e7c18bc854":"2000000000000000000000","693492a5c51396a482881669ccf6d8d779f00951":"345827000000000000000",bd723b289a7367b6ece2455ed61edb49670ab9c4:"4999995000000000000000","1be3542c3613687465f15a70aeeb81662b65cca8":"2000000000000000000000","5803e68b34da121aef08b602badbafb4d12481ca":"18000000000000000000000","9ac907ee85e6f3e223459992e256a43fa08fa8b2":"10000000000000000000000","833b6a8ec8da408186ac8a7d2a6dd61523e7ce84":"16000000000000000000000","64628c6fb8ec743adbd87ce5e018d531d9210437":"26740000000000000000","566c28e34c3808d9766fe8421ebf4f2b1c4f7d77":"1970000000000000000000","171ad9a04bedc8b861e8ed4bddf5717813b1bb48":"400000000000000000000","4f85bc1fc5cbc9c001e8f1372e07505370d8c71f":"940000000000000000000","6d2f976734b9d0070d1883cf7acab8b3e4920fc1":"10000000000000000000000","357a02c0a9dfe287de447fb67a70ec5b62366647":"26740000000000000000","44a01fb04ac0db2cce5dbe281e1c46e28b39d878":"1999944000000000000000","3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19":"170016000000000000000","334340ee4b9cdc81f850a75116d50ee9b69825bf":"2000000000000000000000",c0afb7d8b79370cfd663c68cc6b9702a37cd9eff:"1000000000000000000000","2016895df32c8ed5478269468423aea7b7fbce50":"20000000000000000000","1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb":"2000000000000000000000","260df8943a8c9a5dba7945327fd7e0837c11ad07":"200000000000000000000","32fbeed6f626fcdfd51acafb730b9eeff612f564":"2000000000000000000000","9bd88068e13075f3a8cac464a5f949d6d818c0f6":"6000000000000000000000",ab4572fbb1d72b575d69ec6ad17333873e8552fc:"1999942000000000000000",e44ea51063405154aae736be2bf1ee3b9be639ae:"4000000000000000000000","617f20894fa70e94a86a49cd74e03238f64d3cd9":"5000057000000000000000","3e914e3018ac00449341c49da71d04dfeeed6221":"4000000000000000000000","590181d445007bd0875aaf061c8d51153900836a":"2000000000000000000000","27987110221a880826adb2e7ab5eca78c6e31aec":"4000000000000000000000","06618e9d5762df62028601a81d4487d6a0ecb80e":"1337000000000000000000","8cc652dd13e7fe14dabbb36d5d320db9ffee8a54":"1790000000000000000000","8973aefd5efaee96095d9e288f6a046c97374b43":"141000000000000000000",dbd51cdf2c3bfacdff106221de2e19ad6d420414:"1760000000000000000000","25697ef20cccaa70d32d376f8272d9c1070c3d78":"200000000000000000000","0726c42e00f45404836eb1e280d073e7059687f5":"1623331000000000000000","5e0785532c7723e4c0af9357d5274b73bdddddde":"25000088000000000000000","38430e931d93be01b4c3ef0dc535f1e0a9610063":"10000000000000000000000","143d536b8b1cb84f56a39e0bc81fd5442bcacce1":"100000000000000000000","5c6d041da7af4487b9dc48e8e1f60766d0a56dbc":"1457800000000000000000",f9bfb59d538afc4874d4f5941b08c9730e38e24b:"40000000000000000000","83dbfd8eda01d0de8e158b16d0935fc2380a5dc7":"600000000000000000000","0e6cd664ad9c1ed64bf98749f40644b626e3792c":"60000000000000000000000",ce2e0da8934699bb1a553e55a0b85c169435bea3:"4999962000000000000000",a39bfee4aec9bd75bd22c6b672898ca9a1e95d32:"10000000000000000000000","1bc44c8761231ba1f11f5faa40fa669a013e12ce":"203586000000000000000","68809af5d532a11c1a4d6e32aac75c4c52b08ead":"10000000000000000000000","80cc21bd99f39005c58fe4a448909220218f66cb":"1000072000000000000000","1080c1d8358a15bc84dac8253c6883319020df2c":"2674000000000000000000","9eaf6a328a4076024efa6b67b48b21eedcc0f0b8":"158000000000000000000","1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4":"112970000000000000000",acbd185589f7a68a67aa4b1bd65077f8c64e4e21:"200000000000000000000",ff78541756ab2b706e0d70b18adb700fc4f1643d:"43250000000000000000000","7f0ec3db804692d4d1ea3245365aab0590075bc4":"4000000000000000000000","4a918032439159bb315b6725b6830dc83697739f":"343800000000000000000",bc1b021a78fde42d9b5226d6ec26e06aa3670090:"80000000000000000000","2f2523cc834f0086052402626296675186a8e582":"16000000000000000000000","9db2e15ca681f4c66048f6f9b7941ed08b1ff506":"4000000000000000000000","20b9a9e6bd8880d9994ae00dd0b9282a0beab816":"500000000000000000000","3bddbc8134f77d55597fc97c26d26698090604eb":"13700000000000000000","80c3a9f695b16db1597286d1b3a8b7696c39fa27":"100000000000000000000","53194d8afa3e883502767edbc30586af33b114d3":"2000000000000000000000",e2efd0a9bc407ece03d67e8ec8e9d283f48d2a49:"12280000000000000000000","1cb450920078aab2317c7db3b38af7dd298b2d41":"340000000000000000000",ca8276c477b4a07b80107b843594189607b53bec:"6000000000000000000000","147f4210ab5804940a0b7db8c14c28396b62a6bf":"2000000000000000000000",d3df3b53cb3b4755de54e180451cc44c9e8ae0aa:"659801000000000000000",f7c708015071d4fb0a3a2a09a45d156396e3349e:"3000000000000000000000",a8cafac32280d021020bf6f2a9782883d7aabe12:"100000000000000000000","399aa6f5d078cb0970882bc9992006f8fbdf3471":"1000000000000000000000","15669180dee29598869b08a721c7d24c4c0ee63f":"1000000000000000000000",bba8ab22d2fedbcfc63f684c08afdf1c175090b5:"99091000000000000000","5e5a441974a83d74c687ebdc633fb1a49e7b1ad7":"3000000000000000000000","98b769cc305cecfb629a00c907069d7ef9bc3a12":"26000000000000000000",c820c711f07705273807aaaa6de44d0e4b48be2e:"155000000000000000000","12aa7d86ddfbad301692feac8a08f841cb215c37":"137000000000000000000","6ff5d361b52ad0b68b1588607ec304ae5665fc98":"1940000000000000000000","2382a9d48ec83ea3652890fd0ee79c907b5b2dc1":"133700000000000000000",b2a144b1ea67b9510f2267f9da39d3f93de26642:"2000000000000000000000",b3e20eb4de18bd060221689894bee5aeb25351ee:"73535000000000000000","101a0a64f9afcc448a8a130d4dfcbee89537d854":"15200000000000000000000","1b826fb3c012b0d159e294ba5b8a499ff3c0e03c":"2000000000000000000000",aafb7b013aa1f8541c7e327bf650adbd194c208f:"1358000000000000000000","96eb523e832f500a017de13ec27f5d366c560eff":"307600000000000000000",c7bf17c4c11f98941f507e77084fffbd2dbd3db5:"1000000000000000000000","840ec83ea93621f034e7bb3762bb8e29ded4c479":"2500000000000000000000","0e9c511864a177f49be78202773f60489fe04e52":"6000000000000000000000",f6f1a44309051c6b25e47dff909b179bb9ab591c:"1940000000000000000000","63fe6bcc4b8a9850abbe75803730c932251f145b":"18200000000000000000",f88b58db37420b464c0be88b45ee2b95290f8cfa:"40000000000000000000","9d4d321177256ebd9afbda304135d517c3dc5693":"616000000000000000000","8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6":"1000000000000000000000",cb0dd7cf4e5d8661f6028943a4b9b75c914436a7:"120000000000000000000000",a3979a92760a135adf69d72f75e167755f1cb8c3:"100000000000000000000",ca22cda3606da5cad013b8074706d7e9e721a50c:"6816200000000000000000","157559adc55764cc6df79323092534e3d6645a66":"6000000000000000000000","4f52ad6170d25b2a2e850eadbb52413ff2303e7f":"3040000000000000000000",eed28c3f068e094a304b853c950a6809ebcb03e0:"17300000000000000000000","2e47f287f498233713850d3126823cc67dcee255":"14600000000000000000","6c359e58a13d4578a9338e335c67e7639f5fb4d7":"218000000000000000000","4968a2cedb457555a139295aea28776e54003c87":"10092310000000000000000","4041374b0feef4792e4b33691fb86897a4ff560c":"365000000000000000000","83e48055327c28b5936fd9f4447e73bdb2dd3376":"2674000000000000000000","32b7feebc5c59bf65e861c4c0be42a7611a5541a":"2212000000000000000000","21a6db6527467bc6dad54bc16e9fe2953b6794ed":"14000000000000000000000",e8ead1bb90ccc3aea2b0dcc5b58056554655d1d5:"7760000000000000000000","7a94b19992ceb8ce63bc92ee4b5aded10c4d9725":"16770000000000000000000","90e93e4dc17121487952333614002be42356498e":"1910000000000000000000",aab00abf5828d7ebf26b47ceaccdb8ba03325166:"10000000000000000000000","0a9ab2638b1cfd654d25dab018a0aebddf85fd55":"21801000000000000000",b12ed07b8a38ad5506363fc07a0b6d799936bdaf:"10000000000000000000000",f4a9d00cefa97b7a58ef9417fc6267a5069039ee:"21800000000000000000","04a1cada1cc751082ff8da928e3cfa000820a9e9":"40000000000000000000","9018cc1f48d2308e252ab6089fb99a7c1d569410":"200000000000000000000","895d694e880b13ccd0848a86c5ce411f88476bbf":"199955000000000000000","40a7f72867a7dc86770b162b7557a434ed50cce9":"1000000000000000000000","467ea10445827ef1e502daf76b928a209e0d4032":"2000000000000000000000","7553aa23b68aa5f57e135fe39fdc235eaca8c98c":"1000000000000000000000","31b43b015d0081643c6cda46a7073a6dfdbca825":"50019600000000000000000",d82fd9fdf6996bedad2843159c06f37e0924337d:"1688800000000000000000","24a4eb36a7e498c36f99975c1a8d729fd6b305d7":"258000000000000000000","91d66ea6288faa4b3d606c2aa45c7b6b8a252739":"2000000000000000000000","83a402438e0519773d5448326bfb61f8b20cf52d":"1520000000000000000000",c2fafdd30acb6d6706e9293cb02641f9edbe07b5:"1494224000000000000000","79dba256472db4e058f2e4cdc3ea4e8a42773833":"1460000000000000000000","498abdeb14c26b7b7234d70fceaef361a76dff72":"3000000000000000000000","7b73242d75ca9ad558d650290df17692d54cd8b8":"2000200000000000000000","6ec3659571b11f889dd439bcd4d67510a25be57e":"123000000000000000000",ab098633eeee0ccefdf632f9575456f6dd80fc86:"200000000000000000000000",f4a51fce4a1d5b94b0718389ba4e7814139ca738:"300000000000000000000","8f561b41b209f248c8a99f858788376250609cf3":"1700000000000000000000","05d0f4d728ebe82e84bf597515ad41b60bf28b39":"4200000000000000000000",dfdf43393c649caebe1bb18059decb39f09fb4e8:"400000000000000000000","0089508679abf8c71bf6781687120e3e6a84584d":"1800000000000000000000","80907f593148b57c46c177e23d25abc4aae18361":"100000000000000000000","94fcceadfe5c109c5eaeaf462d43873142c88e22":"4800000000000000000000",e89249738b7eced7cb666a663c49cbf6de8343ea:"2000000000000000000000","23c99ba087448e19c9701df66e0cab52368331fa":"2000000000000000000000",a68e0c30cba3bc5a883e540320f999c7cd558e5c:"1799869000000000000000","88888a57bd9687cbf950aeeacf9740dcc4d1ef59":"1820000000000000000000",e9b36fe9b51412ddca1a521d6e94bc901213dda8:"10000000000000000000000",a9145046fa3628cf5fd4c613927be531e6db1fdd:"112000000000000000000",e82c58c579431b673546b53a86459acaf1de9b93:"1000000000000000000000",bd6a474d66345bcdd707594adb63b30c7822af54:"4000000000000000000000","6a6159074ab573e0ee581f0f3df2d6a594629b74":"310000000000000000000","2e7f465520ec35cc23d68e75651bb6689544a196":"1050049000000000000000",ac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16:"1760000000000000000000",bd59094e074f8d79142ab1489f148e32151f2089:"20000000000000000000","0ba6e46af25a13f57169255a34a4dac7ce12be04":"500000000000000000000","35145f620397c69cb8e00962961f0f4886643989":"6000000000000000000000",d84b922f7841fc5774f00e14604ae0df42c8551e:"4011000000000000000000","44232ff66ddad1fd841266380036afd7cf7d7f42":"200000000000000000000","516954025fca2608f47da81c215eedfd844a09ff":"382000000000000000000",e5aa0b833bb916dc19a8dd683f0ede241d988eba:"3000000000000000000000","80ea1acc136eca4b68c842a95adf6b7fee7eb8a2":"4000000000000000000000","98a0e54c6d9dc8be96276cebf4fec460f6235d85":"1969803000000000000000","91620f3eb304e813d28b0297556d65dc4e5de5aa":"3820000000000000000000","7bb984c6dbb9e279966afafda59c01d02627c804":"8050000000000000000000","41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9":"133700000000000000000","8dbc3e6cb433e194f40f82b40faadb1f8b856116":"1910000000000000000000","889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7":"40000000000000000000",debbdd831e0f20ae6e378252decdf92f7cf0c658:"2000000000000000000000",a22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91:"1020000000000000000000","823219a25976bb2aa4af8bad41ac3526b493361f":"2000000000000000000000","6d39a9e98f81f769d73aad2cead276ac1387babe":"394000000000000000000","751abcb6cc033059911815c96fd191360ab0442d":"8000000000000000000000","64d80c3b8ba68282290b75e65d8978a15a87782c":"1970000000000000000000","6ba8f7e25fc2d871618e24e40184199137f9f6aa":"400020000000000000000","25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da":"2000000000000000000000","0f7b61c59b016322e8226cafaee9d9e76d50a1b3":"4000000000000000000000","7526e482529f0a14eec98871dddd0e721b0cd9a2":"20000000000000000000","071dd90d14d41f4ff7c413c24238d3359cd61a07":"36400000000000000000000",a986762f7a4f294f2e0b173279ad2c81a2223458:"20000000000000000000",e667f652f957c28c0e66d0b63417c80c8c9db878:"601650000000000000000","7b98e23cb96beee80a168069ebba8f20edd55ccf":"214500000000000000000","2d8e5bb8d3521695c77e7c834e0291bfacee7408":"1970000000000000000000",f23d01589eb12d439f7448ff54307529f191858d:"2000000000000000000000",abd9605b3e91acfd777830d16463478ae0fc7720:"133700000000000000000",eabb90d37989aab31feae547e0e6f3999ce6a35d:"2000000000000000000000","0abfb39b11486d79572866195ba26c630b6784db":"121500000000000000000000",d56a144d7af0ae8df649abae535a15983aa04d02:"5000000000000000000000","998c1f93bcdb6ff23c10d0dc924728b73be2ff9f":"1002750000000000000000",bc62b3096a91e7dc11a1592a293dd2542150d751:"1000000000000000000000","0c8f66c6017bce5b20347204b602b743bad78d60":"2000000000000000000000","4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1":"2000000000000000000000",b44605552471a6eee4daab71ff3bb41326d473e0:"839200000000000000000",fc3d226bb36a58f526568857b0bb12d109ec9301:"2000000000000000000000",adc8228ef928e18b2a807d00fb3c6c79cd1d9e96:"22800000000000000000","9df32a501c0b781c0281022f42a1293ffd7b892a":"9000000000000000000000",e7da609d40cde80f00ce5b4ffb6aa9d0b03494fc:"1000000000000000000000","9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d":"20769000000000000000","8e9c08f738661f9676236eff82ba6261dd3f4822":"100000000000000000000",deb97254474c0d2f5a7970dcdb2f52fb1098b896:"1000000000000000000000",b4256273962bf631d014555cc1da0dcc31616b49:"2000000000000000000000","23abd9e93e7957e5b636be6579051c15e5ce0b0e":"17188400000000000000000","382591e7217b435e8e884cdbf415fe377a6fe29e":"8022000000000000000000",f17adb740f45cbbde3094e7e13716f8103f563bd:"2000000000000000000000","61ed5596c697207f3d55b2a51aa7d50f07fa09e8":"2000000000000000000000","788e809741a3b14a22a4b1d937c82cfea489eebe":"7000000000000000000000","992646ac1acaabf5ddaba8f9429aa6a94e7496a7":"1000110000000000000000","51296f5044270d17707646129c86aad1645eadc1":"1337133000000000000000","6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00":"20000000000000000000","30db6b9b107e62102f434a9dd0960c2021f5ce4c":"599742000000000000000","63fc93001305adfbc9b85d29d9291a05f8f1410b":"1000000000000000000000",df6ed6006a6abe886ed33d95a4de28fc12183927:"910000000000000000000","4745ab181a36aa8cbf2289d0c45165bc7ebe2381":"39400000000000000000","7bb0fdf5a663b5fba28d9c902af0c811e252f298":"200000000000000000000",e0ff0bd9154439c4a5b7233e291d7d868af53f33:"396110000000000000000","09261f9acb451c3788844f0c1451a35bad5098e3":"8664000000000000000000","2813d263fc5ff2479e970595d6b6b560f8d6d6d1":"2000000000000000000000","2cd19694d1926a0fa9189edebafc671cf1b2caa5":"1000000000000000000000","05336e9a722728d963e7a1cf2759fd0274530fca":"915583000000000000000",e5b7af146986c0ff8f85d22e6cc334077d84e824:"2000000000000000000000","3e4fbd661015f6461ed6735cefef01f31445de3a":"16200000000000000000000","4f5df5b94357de948604c51b7893cddf6076baad":"3760000000000000000000","9567a0de811de6ff095b7ee64e7f1b83c2615b80":"267400000000000000000","955db3b74360b9a268677e73cea821668af6face":"30000000000000000000000","3e040d40cb80ba0125f3b15fdefcc83f3005da1b":"1038000000000000000000","43f470ed659e2991c375957e5ddec5bd1d382231":"100000000000000000000","047f9bf1529daf87d407175e6f171b5e59e9ff3e":"650000000000000000000","15e3b584056b62c973cf5eb096f1733e54c15c91":"936702000000000000000",c03de42a109b657a64e92224c08dc1275e80d9b2:"20000000000000000000",e4fc13cfcbac1b17ce7783acd423a845943f6b3a:"20000000000000000000","65ff874fafce4da318d6c93d57e2c38a0d73e820":"1000160000000000000000","8b997dbc078ad02961355da0a159f2927ed43d64":"197000000000000000000","2f5080b83f7e2dc0a1dd11b092ad042bff788f4c":"3338355000000000000000","1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2":"2000000000000000000000","5ade77fd81c25c0af713b10702768c1eb2f975e7":"20000000000000000000",acaaddcbf286cb0e215dda55598f7ff0f4ada5c6:"1000000000000000000000","64e0217a5b38aa40583625967fa9883690388b6f":"200000000000000000000",ae648155a658370f929be384f7e001047e49dd46:"13561000000000000000000",f7c1b443968b117b5dd9b755572fcd39ca5ec04b:"456082000000000000000",de027efbb38503226ed871099cb30bdb02af1335:"1000000000000000000000","49cf1e54be363106b920729d2d0ba46f0867989a":"268000000000000000000",e7f4d7fe6f561f7fa1da3005fd365451ad89df89:"200000000000000000000",b036916bdacf94b69e5a8a65602975eb026104dd:"20000000000000000000",e923c06177b3427ea448c0a6ff019b54cc548d95:"36281000000000000000",ad927e03d1599a78ca2bf0cad2a183dceb71eac0:"1970000000000000000000",ef39ca9173df15531d73e6b72a684b51ba0f2bb4:"1598000000000000000000","6443b8ae639de91cf73c5ae763eeeed3ddbb9253":"2000000000000000000000","8026435aac728d497b19b3e7e57c28c563954f2b":"1730000000000000000000",ed327a14d5cfadd98103fc0999718d7ed70528ea:"1440000000000000000000","38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33":"2000000000000000000000",f0b1f9e27832c6de6914d70afc238c749995ace4:"2000000000000000000000","770d98d31b4353fceee8560c4ccf803e88c0c4e0":"600000000000000000000",ba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e:"32200000000000000000000","233842b1d0692fd11140cf5acda4bf9630bae5f8":"2000000000000000000000",b5dd50a15da34968890a53b4f13fe1af081baaaa:"4000000000000000000000","72072a0ef1cff3d567cdd260e708ddc11cbc9a31":"100000000000000000000","81a88196fac5f23c3e12a69dec4b880eb7d97310":"2000000000000000000000","6c63f84556d290bfcd99e434ee9997bfd779577a":"2000000000000000000000","5f167aa242bc4c189adecb3ac4a7c452cf192fcf":"1999980000000000000000","445cb8de5e3df520b499efc980f52bff40f55c76":"2000000000000000000000",aec27ce2133e82d052520afb5c576d9f7eb93ed2:"65232380000000000000000","07dc2bf83bc6af19a842ffea661af5b41b67fda1":"1500000000000000000000",febd48d0ffdbd5656cd5e686363a61145228f279:"2800000000000000000000",a86db07d9f812f4796622d40e03d135874a88a74:"20000000000000000000","5413c97ffa4a6e2a7bba8961dc9fce8530a787d7":"1000000000000000000000",e2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908:"1400000000000000000000","2e8eb30a716e5fe15c74233e039bfb1106e81d12":"100000000000000000000",fd88d114220f081cb3d5e15be8152ab07366576a:"300000000000000000000",e408fceaa1b98f3c640f48fcba39f056066d6308:"10000000000000000000000","057dd29f2d19aa3da42327ea50bce86ff5c911d9":"4000000000000000000000",ed1065dbcf9d73c04ffc7908870d881468c1e132:"2000000000000000000000",bbc9d8112e5beb02dd29a2257b1fe69b3536a945:"2000000000000000000000","79c1be19711f73bee4e6316ae7549459aacea2e0":"400000000000000000000","1bcf3441a866bdbe963009ce33c81cbb0261b02c":"182000000000000000000",e2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926:"4000000000000000000000","77701e2c493da47c1b58f421b5495dee45bea39b":"6068279000000000000000","37a05aceb9395c8635a39a7c5d266ae610d10bf2":"30000000000000000000000",c6355ec4768c70a49af69513cd83a5bca7e3b9cd:"6000000000000000000000",e3c0c128327a9ad80148139e269773428e638cb0:"2000000000000000000000",f7f4898c4c526d955f21f055cb6e47b915e51964:"2288000000000000000000","29824e94cc4348bc963279dcdf47391715324cd3":"1940000000000000000000",eaa45cea02d87d2cc8fda9434e2d985bd4031584:"1920750000000000000000",e08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d:"2000000000000000000000","87c498170934b8233d1ad1e769317d5c475f2f40":"1015200000000000000000","352d29a26e8a41818181746467f582e6e84012e0":"6000000000000000000000","403220600a36f73f24e190d1edb2d61be3f41354":"304000000000000000000","0a48296f7631708c95d2b74975bc4ab88ac1392a":"5000000000000000000000",ffe0e997f1977a615f5a315af413fd4869343ba0:"100076000000000000000",ca66b2280fa282c5b67631ce552b62ee55ad8474:"1969488000000000000000","2b6ed29a95753c3ad948348e3e7b1a251080ffb9":"250000000000000000000000","492e70f04d18408cb41e25603730506b35a2876b":"39400000000000000000","0e6baaa3deb989f289620076668618e9ac332865":"200000000000000000000",b753a75f9ed10b21643a0a3dc0517ac96b1a4068:"401800000000000000000","3ad915d550b723415620f5a9b5b88a85f382f035":"1000000000000000000000",c992be59c6721caf4e028f9e8f05c25c55515bd4:"20000000000000000000","02b643d6fabd437a851accbe79abb7fde126dccf":"7200000000000000000000","88797e58675ed5cc4c19980783dbd0c956085153":"2000000000000000000000",ac142eda1157b9a9a64390df7e6ae694fac98905:"200000000000000000000","656579daedd29370d9b737ee3f5cd9d84bc2b342":"1430000000000000000000","9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78":"1337000000000000000000",bee8d0b008421954f92d000d390fb8f8e658eaee:"1000000000000000000000","7989d09f3826c3e5af8c752a8115723a84d80970":"415554000000000000000","7cd5d81eab37e11e6276a3a1091251607e0d7e38":"62856000000000000000","6ce1b0f6adc47051e8ab38b39edb4186b03babcc":"1207800000000000000000",abfcf5f25091ce57875fc674dcf104e2a73dd2f2:"19700000000000000000","1c3ef05dae9dcbd489f3024408669de244c52a02":"20000000000000000000000",cfa8b37127149bdbfee25c34d878510951ea10eb:"2000000000000000000000","74863acec75d03d53e860e64002f2c165e538377":"1000000000000000000000","59b9e733cba4be00429b4bd9dfa64732053a7d55":"20000000000000000000",aeadfcd0978edad74a32bd01a0a51d37f246e661:"260000000000000000000","08090876baadfee65c3d363ba55312748cfa873d":"1700170000000000000000",e589fa76984db5ec4004b46ee8a59492c30744ce:"2800000000000000000000","3485361ee6bf06ef6508ccd23d94641f814d3e2f":"2000000000000000000000","5cb731160d2e8965670bde925d9de5510935347d":"40000000000000000000","8ef4d8a2c23c5279187b64e96f741404085385f3":"299598000000000000000",e246683cc99db7c4a52bcbacaab0b32f6bfc93d7:"2000000000000000000000","7d273e637ef1eac481119413b91c989dc5eac122":"500000000000000000000","6efba8fb2ac5b6730729a972ec224426a287c3ad":"283152000000000000000","0773eeacc050f74720b4a1bd57895b1cceeb495d":"10000000000000000000000","88a122a2382c523931fb51a0ccad3beb5b7259c3":"2000000000000000000000",b0b779b94bfa3c2e1f587bcc9c7e21789222378f:"1550000000000000000000","86f95c5b11a293940e35c0b898d8b75f08aab06d":"29605000000000000000000",cf2288ef4ebf88e86db13d8a0e0bf52a056582c3:"2533000000000000000000","71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16":"1600000000000000000000","9917d68d4af341d651e7f0075c6de6d7144e7409":"5660000000000000000000","1e5800227d4dcf75e30f5595c5bed3f72e341e3b":"248300000000000000000","123759f333e13e3069e2034b4f05398918119d36":"20000000000000000000000",f798d16da4e460c460cd485fae0fa0599708eb82:"1000000000000000000000","864bec5069f855a4fd5892a6c4491db07c88ff7c":"1000000000000000000000",fa283299603d8758e8cab082125d2c8f7d445429:"6415633000000000000000",c811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2:"1400140000000000000000","61547d376e5369bcf978fc162c3c56ae453547e8":"200000000000000000000","0d747ee5969bf79d57381d6fe3a2406cd0d8ce27":"100000000000000000000000",f8962b75db5d24c7e8b7cef1068c3e67cebb30a5:"280000000000000000000","35bf6688522f35467a7f75302314c02ba176800e":"17400000000000000000000","05cb6c3b0072d3116761b532b218443b53e8f6c5":"141722000000000000000000","91c80caa081b38351d2a0e0e00f80a34e56474c1":"1000000000000000000000",d75a502a5b677287470f65c5aa51b87c10150572:"907400000000000000000","3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1":"2575465000000000000000","736bf1402c83800f893e583192582a134eb532e9":"9999996000000000000000",c2cb1ada5da9a0423873814793f16144ef36b2f3:"1334326000000000000000",efcce06bd6089d0e458ef561f5a689480afe7000:"600000000000000000000",bfe6bcb0f0c07852643324aa5df5fd6225abc3ca:"74500000000000000000","9d799e943e306ba2e5b99c8a6858cbb52c0cf735":"300000000000000000000",f45b1dcb2e41dc27ffa024daadf619c11175c087:"19700000000000000000","08e38ee0ce48c9ca645c1019f73b5355581c56e6":"1600000000000000000000","2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09":"3397053000000000000000",bdc02cd4330c93d6fbda4f6db2a85df22f43c233:"2000000000000000000000",acec91ef6941cf630ba9a3e787a012f4a2d91dd4:"80000000000000000000000","27ac073be79ce657a93aa693ee43bf0fa41fef04":"50000000000000000000000","22fe884d9037291b4d52e6285ae68dea0be9ffb5":"2000000000000000000000",c3107a9af3322d5238df0132419131629539577d:"492650000000000000000",b5cac5ed03477d390bb267d4ebd46101fbc2c3da:"197000000000000000000","58fb947364e7695765361ebb1e801ffb8b95e6d0":"200000000000000000000","32860997d730b2d83b73241a25d3667d51c908ef":"499938000000000000000",c79d5062c796dd7761f1f13e558d73a59f82f38b:"8000000000000000000000",fa142fe47eda97e6503b386b18a2bedd73ccb5b1:"850080000000000000000","6ca5de00817de0cedce5fd000128dede12648b3c":"20000000000000000000","214b743955a512de6e0d886a8cbd0282bee6d2a2":"2000000000000000000000",ede79ae1ff4f1606d59270216fa46ab2ddd4ecaa:"146000000000000000000","528101ce46b720a2214dcdae6618a53177ffa377":"508876000000000000000",b5870ce342d43343333673038b4764a46e925f3e:"1000000000000000000000","843bd3502f45f8bc4da370b323bdac3fcf5f19a6":"1476000000000000000000","5067f4549afbfe884c59cbc12b96934923d45db0":"1000000000000000000000","6f2a42e6e033d01061131929f7a6ee1538021e52":"2000000000000000000000",e9e1f7cb00a110edd0ebf8b377ef8a7bb856117f:"200000000000000000000",a387ecde0ee4c8079499fd8e03473bd88ad7522a:"1970000000000000000000","6dff90e6dc359d2590882b1483edbcf887c0e423":"1000000000000000000000","22e512149a18d369b73c71efa43e86c9edabaf1d":"1455000000000000000000",a3203095edb7028e6871ce0a84f548459f83300a:"4000000000000000000000","93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f":"19100000000000000000","8c75956e8fed50f5a7dd7cfd27da200f6746aea6":"1000000000000000000000",afc8ebe8988bd4105acc4c018e546a1e8f9c7888:"500000000000000000000",bf9acd4445d9c9554689cabbbab18800ff1741c2:"1000000000000000000000","603f2fab7afb6e017b94766069a4b43b38964923":"1656954000000000000000",a1f765c44fe45f790677944844be4f2d42165fbd:"3687750000000000000000","4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed":"2000000000000000000000","48f60a35484fe7792bcc8a7b6393d0dda1f6b717":"3600000000000000000000","588ed990a2aff44a94105d58c305257735c868ac":"16100000000000000000000","710be8fd5e2918468be2aabea80d828435d79612":"17600000000000000000","03ea6d26d080e57aee3926b18e8ed73a4e5b2826":"200000000000000000000","20824ba1dbebbef9846ef3d0f6c1b017e6912ec4":"7170194000000000000000",f7500c166f8bea2f82347606e5024be9e4f4ce99:"20000000000000000000","9d369165fb70b81a3a765f188fd60cbe5e7b0968":"2000000000000000000000","6fddbd9bca66e28765c2162c8433548c1052ed11":"82720000000000000000000","8b81156e698639943c01a75272ad3d35851ab282":"344946000000000000000","75804aac64b4199083982902994d9c5ed8828f11":"557800000000000000000",d6e8e97ae9839b9ee507eedb28edfb7477031439:"2000000000000000000000","6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875":"4000086000000000000000",afa539586e4719174a3b46b9b3e663a7d1b5b987:"5000000000000000000000",f8a065f287d91d77cd626af38ffa220d9b552a2b:"1910000000000000000000","30e60900cacc7203f314dc604347255167fc2a0f":"2000000000000000000000","796f87ba617a2930b1670be92ed1281fb0b346e1":"128400000000000000000",f114ff0d0f24eff896edde5471dea484824a99b3:"13700000000000000000","0b80fc70282cbdd5fde35bf78984db3bdb120188":"1000160000000000000000",da7ad025ebde25d22243cb830ea1d3f64a566323:"500000000000000000000","65a52141f56bef98991724c6e7053381da8b5925":"60140000000000000000",bbc8eaff637e94fcc58d913c7770c88f9b479277:"200000000000000000000","0469e8c440450b0e512626fe817e6754a8152830":"2000000000000000000000","0727be0a2a00212048b5520fbefb953ebc9d54a0":"10000000000000000000000","7d858493f07415e0912d05793c972113eae8ae88":"1818000000000000000000","7091303116d5f2389b23238b4d656a8596d984d3":"1094014000000000000000","3702e704cc21617439ad4ea27a5714f2fda1e932":"1000000000000000000000",b87de1bcd29269d521b8761cc39cfb4319d2ead5:"1000000000000000000000",f639ac31da9f67271bd10402b7654e5ce763bd47:"399996000000000000000",e7735ec76518fc6aa92da8715a9ee3f625788f13:"1997803000000000000000","51277fe7c81eebd252a03df69a6b9f326e272207":"59965000000000000000","3b8098533f7d9bdcd307dbb23e1777ca18418936":"2000000000000000000000","2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc":"1330755000000000000000","5c3c1c645b917543113b3e6c1c054da1fe742b9a":"800000000000000000000","5ecdbaeab9106ffe5d7b519696609a05baeb85ad":"20000000000000000000","45a820a0672f17dc74a08112bc643fd1167736c3":"199943000000000000000",beef94213879e02622142bea61290978939a60d7:"5728109000000000000000","6cd212aee04e013f3d2abad2a023606bfb5c6ac7":"1999944000000000000000","92698e345378c62d8eda184d94366a144b0c105b":"1400000000000000000000","2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a":"206764195000000000000000",b7a6791c16eb4e2162f14b6537a02b3d63bfc602:"780700000000000000000",fa105f1a11b6e4b1f56012a27922e2ac2da4812f:"9550000000000000000000","2306df931a940d58c01665fa4d0800802c02edfe":"1000000000000000000000",f37bf78c5875154711cb640d37ea6d28cfcb1259:"200000000000000000000","66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9":"594808000000000000000","2bafbf9e9ed2c219f7f2791374e7d05cb06777e7":"220000000000000000000","8e9b35ad4a0a86f758446fffde34269d940ceacd":"4000000000000000000000","1b43232ccd4880d6f46fa751a96cd82473315841":"80000000000000000000","6eefdc850e87b715c72791773c0316c3559b58a4":"4000000000000000000000",f2c03e2a38998c21648760f1e5ae7ea3077d8522:"2642456000000000000000","0625d06056968b002206ff91980140242bfaa499":"1000000000000000000000","6158e107c5eb54cb7604e0cd8dc1e07500d91c3c":"50000000000000000000","02477212ffdd75e5155651b76506b1646671a1eb":"1760000000000000000000",fa44a855e404c86d0ca8ef3324251dfb349c539e:"1552000000000000000000","49897fe932bbb3154c95d3bce6d93b6d732904dd":"4000000000000000000000","9b6641b13e172fc072ca4b8327a3bc28a15b66a9":"120000000000000000000",a46b4387fb4dcce011e76e4d73547d4481e09be5:"1337000000000000000000","72bb27cb99f3e2c2cf90a98f707d30e4a201a071":"1640000000000000000000",b6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233:"1999944000000000000000",e6cb3f3124c9c9cc3834b1274bc3336456a38bac:"427382000000000000000",fcbc5c71ace79741450b012cf6b8d3f17db68a70:"9550000000000000000000","15dbb48c98309764f99ced3692dcca35ee306bac":"150000000000000000000000","2e10910ba6e0bc17e055556614cb87090f4d7e5b":"200000000000000000000",e5fbe34984b637196f331c679d0c0c47d83410e1:"2000050000000000000000","6d120f0caae44fd94bcafe55e2e279ef96ba5c7a":"4000000000000000000000",aa5afcfd8309c2df9d15be5e6a504e7d706624c5:"5846763000000000000000","37959c20b7e9931d72f5a8ae869dafddad3b6d5c":"200000000000000000000",b041310fe9eed6864cedd4bee58df88eb4ed3cac:"10000000000000000000000","986df47e76e4d7a789cdee913cc9831650936c9d":"5000000000000000000000","35aaa0465d1c260c420fa30e2629869fb6559207":"704976000000000000000","7f655c6789eddf455cb4b88099720639389eebac":"6000000000000000000000","9e3eb509278fe0dcd8e0bbe78a194e06b6803943":"940000000000000000000","3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5":"200000000000000000000","9e960dcd03d5ba99cb115d17ff4c09248ad4d0be":"200000000000000000000",f057aa66ca767ede124a1c5b9cc5fc94ef0b0137:"2077730000000000000000",f38a6ca80168537e974d14e1c3d13990a44c2c1b:"6000000000000000000000","229e430de2b74f442651ddcdb70176bc054cad54":"13545000000000000000","27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6":"2000000000000000000000","10389858b800e8c0ec32f51ed61a355946cc409b":"200000000000000000000",fd2929271e9d2095a264767e7b0df52ea0d1d400:"3000040000000000000000","44250d476e062484e9080a3967bf3a4a732ad73f":"20000000000000000000","0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f":"200000000000000000000",e083d34863e0e17f926b7928edff317e998e9c4b:"400000000000000000000","7f7192c0df1c7db6d9ed65d71184d8e4155a17ba":"79800000000000000000","51e7b55c2f9820eed73884361b5066a59b6f45c6":"2000000000000000000000","4fa983bb5e3073a8edb557effeb4f9fb1d60ef86":"1599800000000000000000","5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b":"776000000000000000000","1f3959fc291110e88232c36b7667fc78a379613f":"18200000000000000000","2d7d5c40ddafc450b04a74a4dabc2bb5d665002e":"2000000000000000000000","5215183b8f80a9bc03d26ce91207832a0d39e620":"1000000000000000000000","5607590059a9fec1881149a44b36949aef85d560":"2000000000000000000000",f7c50f922ad16b61c6d1baa045ed816815bac48f:"12566370000000000000000",da10978a39a46ff0bb848cf65dd9c77509a6d70e:"2000000000000000000000",a7dcbba9b9bf6762c145416c506a71e3b497209c:"1999944000000000000000","54e01283cc8b384538dd646770b357c960d6cacd":"5000000000000000000000","78cf8336b328db3d87813a472b9e89b75e0cf3bc":"1000000000000000000000",ba24fc436753a739db2c8d40e6d4d04c528e86fa:"13000000000000000000000",dfe929a61c1b38eddbe82c25c2d6753cb1e12d68:"402500000000000000000","2b49fba29830360fcdb6da23bbfea5c0bbac5281":"20000000000000000000","76becae4a31d36f3cb577f2a43594fb1abc1bb96":"24860000000000000000000",e0cf698a053327ebd16b7d7700092fe2e8542446:"95275000000000000000",a3802d8a659e89a2c47e905430b2a827978950a7:"1000000000000000000000","75636cdb109050e43d5d6ec47e359e218e857eca":"22886800000000000000000","3d813ff2b6ed57b937dabf2b381d148a411fa085":"100000000000000000000",a9252551a624ae513719dabe5207fbefb2fd7749:"40000000000000000000",c749668042e71123a648975e08ed6382f83e05e2:"14000000000000000000000","04eca501630abce35218b174956b891ba25efb23":"1000060000000000000000","790f91bd5d1c5cc4739ae91300db89e1c1303c93":"2000000000000000000000","009560a3de627868f91fa8bfe1c1b7afaf08186b":"524000000000000000000","1329dd19cd4baa9fc64310efeceab22117251f12":"200000000000000000000","7005a772282b1f62afda63f89b5dc6ab64c84cb9":"18000000000000000000000",abfe936425dcc7b74b955082bbaaf2a11d78bc05:"1400000000000000000000","97d0d9725e3b70e675843173938ed371b62c7fac":"170000000000000000000","41ed2d8e7081482c919fc23d8f0091b3c82c4685":"1295460000000000000000","992365d764c5ce354039ddfc912e023a75b8e168":"18200000000000000000",e1c607c0a8a060da8f02a8eb38a013ea8cda5b8c:"805000000000000000000","3b2c45990e21474451cf4f59f01955b331c7d7c9":"2000000000000000000000","29ac2b458454a36c7e96c73a8667222a12242c71":"4000000000000000000000",b8555010776e3c5cb311a5adeefe9e92bb9a64b9:"4000000000000000000000","30380087786965149e81423b15e313ba32c5c783":"18200000000000000000",a2f86bc061884e9eef05640edd51a2f7c0596c69:"2000050000000000000000","9f98eb34d46979b0a6de8b05aa533a89b825dcf1":"86500000000000000000",c81fb7d20fd2800192f0aac198d6d6a37d3fcb7d:"259500000000000000000",a4035ab1e5180821f0f380f1131b7387c8d981cd:"20000000000000000000","782f52f0a676c77716d574c81ec4684f9a020a97":"850055000000000000000","261e0fa64c51137465eecf5b90f197f7937fdb05":"18000000000000000000000","276fd7d24f8f883f5a7a28295bf17151c7a84b03":"2000000000000000000000",a1f5b840140d5a9acef402ac3cc3886a68cad248:"2000000000000000000000",d2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33:"400000000000000000000","8ee584337ddbc80f9e3498df55f0a21eacb57fb1":"20000000000000000000","34393c5d91b9de597203e75bac4309b5fa3d28c3":"194000000000000000000","114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa":"3000000000000000000000",ab7c42c5e52d641a07ad75099c62928b7f86622f:"335940000000000000000","80bf995ed8ba92701d10fec49f9e7d014dbee026":"572153000000000000000","4a192035e2619b24b0709d56590e9183ccf2c1d9":"10000000000000000000000","376cd7577383e902951b60a2017ba7ea29e33576":"2000000000000000000000",f5437e158090b2a2d68f82b54a5864b95dd6dbea:"4010732000000000000000","13a5eecb38305df94971ef2d9e179ae6cebab337":"330000000000000000000",efc8cf1963c9a95267b228c086239889f4dfd467:"10000000000000000000000",db77b88dcb712fd17ee91a5b94748d720c90a994:"2000000000000000000000","9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f":"1000000000000000000000",ae36f7452121913e800e0fcd1a65a5471c23846f:"164000000000000000000",b124bcb6ffa430fcae2e86b45f27e3f21e81ee08:"2000000000000000000000",f2813a64c5265d020235cb9c319b6c96f906c41e:"350000000000000000000",e848ca7ebff5c24f9b9c316797a43bf7c356292d:"114000000000000000000","21a6feb6ab11c766fdd977f8df4121155f47a1c0":"57200000000000000000",e95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5:"18200000000000000000","0b369e002e1b4c7913fcf00f2d5e19c58165478f":"64520000000000000000","0909648c18a3ce5bae7a047ec2f868d24cdda81d":"3820000000000000000000",d32b45564614516c91b07fa9f72dcf787cce4e1c:"291000000000000000000",cf1bdb799b2ea63ce134668bdc198b54840f180b:"18200000000000000000",ae062c448618643075de7a0030342dced63dbad7:"825982000000000000000","99dfd0504c06c743e46534fd7b55f1f9c7ec3329":"2000000000000000000000","87fc4635263944ce14a46c75fa4a821f39ce7f72":"20000000000000000000","27c2d7ca504daa3d9066dc09137dc42f3aaab452":"600000000000000000000",cc60f836acdef3548a1fefcca13ec6a937db44a0:"86500000000000000000",c910a970556c9716ea53af66ddef93143124913d:"1580000000000000000000","8173c835646a672e0152be10ffe84162dd256e4c":"492000000000000000000",e989733ca1d58d9e7b5029ba5d444858bec03172:"581595000000000000000","86806474c358047d9406e6a07f40945bc8328e67":"6884000000000000000000","5395a4455d95d178b4532aa4725b193ffe512961":"1000000000000000000000","56397638bb3cebf1f62062794b5eb942f916171d":"2000000000000000000000","6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd":"20000000000000000000000","26ff0a51e7cece8400276978dbd6236ef162c0e6":"100020000000000000000000","4ca783b556e5bf53aa13c8116613d65782c9b642":"25200000000000000000000","15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296":"1000000000000000000000","50378af7ef54043f892ab7ce97d647793511b108":"19700000000000000000",e7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1:"2000000000000000000000","5317ecb023052ca7f5652be2fa854cfe4563df4d":"499986000000000000000",c94f7c35c027d47df8ef4f9df85a9248a17dd23b:"29944000000000000000","6a63fc89abc7f36e282d80787b7b04afd6553e71":"160000000000000000000","5fd3d6777ec2620ae83a05528ed425072d3ca8fd":"2000000000000000000000","29adcf83b6b20ac6a434abb1993cbd05c60ea2e4":"10000000000000000000000","8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64":"2730000000000000000000",d94a57882a52739bbe2a0647c80c24f58a2b4f1c:"1341230000000000000000","7286e89cd9de8f7a8a00c86ffdb53992dd9251d1":"1940000000000000000000","5773b6026721a1dd04b7828cd62b591bfb34534c":"27000000000000000000000","11fefb5dc1a4598aa712640c517775dfa1d91f8c":"10000000000000000000000",c6e324beeb5b36765ecd464260f7f26006c5c62e:"2000000000000000000000","118fbd753b9792395aef7a4d78d263cdcaabd4f7":"999800000000000000000",f8298591523e50b103f0b701d623cbf0f74556f6:"200000000000000000000",ab0ced762e1661fae1a92afb1408889413794825:"1910000000000000000000",fa67b67b4f37a0150915110ede073b05b853bda2:"647490000000000000000",ca122cf0f2948896b74843f49afed0ba1618eed7:"560000000000000000000","186b95f8e5effddcc94f1a315bf0295d3b1ea588":"1999944000000000000000","2915624bcb679137b8dae9ab57d11b4905eaee4b":"20000000000000000000","0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7":"3000026000000000000000",cb7479109b43b26657f4465f4d18c6f974be5f42:"1820000000000000000000","8dd6a9bae57f518549ada677466fea8ab04fd9b4":"4000000000000000000000","34958a46d30e30b273ecc6e5d358a212e5307e8c":"2000000000000000000000","2003717907a72560f4307f1beecc5436f43d21e7":"500000000000000000000","55ab99b0e0e55d7bb874b7cfe834de631c97ec23":"1031400000000000000000","79b48d2d6137c3854d611c01ea42427a0f597bb7":"191000000000000000000",d609ec0be70d0ad26f6e67c9d4762b52ee51122c:"1000000000000000000000",e8c3f045bb7d38c9d2f395b0ba8492b253230901:"9000000000000000000000",aaca60d9d700e78596bbbbb1f1e2f70f4627f9d8:"999996000000000000000","89d75b8e0831e46f80bc174188184e006fde0eae":"1000000000000000000000",b3667894b7863c068ad344873fcff4b5671e0689:"20000000000000000000000",bc1609d685b76b48ec909aa099219022f89b2ccd:"1182000000000000000000","88ee7f0efc8f778c6b687ec32be9e7d6f020b674":"2000000000000000000000","470ac5d1f3efe28f3802af925b571e63868b397d":"2000000000000000000000",abf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c:"2263600000000000000000","8cee38d6595788a56e3fb94634b3ffe1fbdb26d6":"20000000000000000000000","19798cbda715ea9a9b9d6aab942c55121e98bf91":"1200000000000000000000",e25a167b031e84616d0f013f31bda95dcc6350b9:"10560000000000000000000","6196c3d3c0908d254366b7bca55745222d9d4db1":"4000000000000000000000",e8e9850586e94f5299ab494bb821a5f40c00bd04:"3820000000000000000000","1059cbc63e36c43e88f30008aca7ce058eeaa096":"100000000000000000000000",c4f2913b265c430fa1ab8adf26c333fc1d9b66f2:"20000000000000000000","26e9e2ad729702626417ef25de0dc800f7a779b3":"1000000000000000000000","0dfbd4817050d91d9d625c02053cf61a3ee28572":"340000000000000000000","709fe9d2c1f1ce42207c9585044a60899f35942f":"2000000000000000000000","7ad82caea1a8b4ed05319b9c9870173c814e06ee":"616000000000000000000","2a595f16eee4cb0c17d9a2d939b3c10f6c677243":"1100000000000000000000",a8f89dd5cc6e64d7b1eeace00702022cd7d2f03d:"700000000000000000000",c0a6cbad77692a3d88d141ef769a99bb9e3c9951:"100000000000000000000","868c23be873466d4c74c220a19b245d1787e807f":"1366481000000000000000","2905b192e83ce659aa355b9d0c204e3e95f9bb9a":"2160817000000000000000","50b9fef0a1329b02d16506255f5a2db71ec92d1f":"1325464000000000000000",fc10b7a67b3268d5331bfb6a14def5ea4a162ca3:"200000000000000000000","85eb256b51c819d60ea61a82d12c9358d59c1cae":"460000000000000000000","75de7e9352e90b13a59a5878ffecc7831cac4d82":"2740000000000000000000",d32b2c79c36478c5431901f6d700b04dbe9b8810:"396000000000000000000","2d0326b23f0409c0c0e9236863a133075a94ba18":"210380000000000000000",d2e21ed56868fab28e0947927adaf29f23ebad6c:"1994000000000000000000","2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df":"1000000000000000000000","7d445267c59ab8d2a2d9e709990e09682580c49f":"1000000000000000000000",b6047cdf932db3e4045f4976122341537ed5961e:"20000000000000000000","2b3cf97311ff30f460945a9d8099f4a88e26d456":"2000000000000000000000","7f4f593b618c330ba2c3d5f41eceeb92e27e426c":"2775000000000000000000","72a2fc8675feb972fa41b50dffdbbae7fa2adfb7":"2853840000000000000000","076561a856455d7ef86e63f87c73dbb628a55f45":"900000000000000000000","03d1724fd00e54aabcd2de2a91e8462b1049dd3a":"2640000000000000000000","7ea0f96ee0a573a330b56897761f3d4c0130a8e3":"1337000000000000000000",fe65c4188d7922576909642044fdc52395560165:"4000000000000000000000","57883010b4ac857fedac03eab2551723a8447ffb":"1000000000000000000000","0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2":"9700000000000000000000",e75c1fb177089f3e58b1067935a6596ef1737fb5:"99910000000000000000",e0e978753d982f7f9d1d238a18bd4889aefe451b:"9700000000000000000000","5620f46d1451c2353d6243a5d4b427130be2d407":"60000000000000000000",f3d688f06bbdbf50f9932c4145cbe48ecdf68904:"20000000000000000000","3aa948ea02397755effb2f9dc9392df1058f7e33":"850000000000000000000","20d1417f99c569e3beb095856530fe12d0fceaaa":"1182175000000000000000",ac77bdf00fd5985b5db12bbef800380abc2a0677:"1000000000000000000000","267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e":"20000000000000000000","4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87":"8000000000000000000000","4c6b93a3bec16349540cbfcae96c9621d6645010":"2000000000000000000000",c9308879056dfe138ef8208f79a915c6bc7e70a8:"10000000000000000000000",c48b693cacefdbd6cb5d7895a42e3196327e261c:"1000000000000000000000",a0951970dfd0832fb83bda12c23545e79041756c:"600000000000000000000","7cdf74213945953db39ad0e8a9781add792e4d1d":"2000000000000000000000","75621865b6591365606ed378308c2d1def4f222c":"3100000000000000000000","67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61":"198067000000000000000","8f0af37566d152802f1ae8f928b25af9b139b448":"200000000000000000000","2c6afcd4037c1ed14fa74ff6758e0945a185a8e8":"17600000000000000000",c1b2aa8cb2bf62cdc13a47ecc4657facaa995f98:"1000129000000000000000","9e8144e08e89647811fe6b72d445d6a5f80ad244":"10000000000000000000000",e04ff5e5a7e2af995d8857ce0290b53a2b0eda5d:"1000000000000000000000","03dedfcd0b3c2e17c705da248790ef98a6bd5751":"1337000000000000000000","698a8a6f01f9ab682f637c7969be885f6c5302bf":"19400000000000000000",d82c6fedbdac98af2eed10b00f32b00056ca5a6d:"200000000000000000000","2697b339813b0c2d964b2471eb1c606f4ecb9616":"1154000000000000000000","987c9bcd6e3f3990a52be3eda4710c27518f4f72":"400000000000000000000",c5d48ca2db2f85d8c555cb0e9cfe826936783f9e:"200000000000000000000",da214c023e2326ff696c00393168ce46ffac39ec:"1000000000000000000000","86570ab259c9b1c32c9729202f77f590c07dd612":"200000000000000000000",a646a95c6d6f59f104c6541d7760757ab392b08c:"4200000000000000000000","1933e334c40f3acbad0c0b851158206924beca3a":"7551541000000000000000","3552a496eba67f12be6eedab360cd13661dc7480":"300000000000000000000","2a9c96c19151ffcbe29a4616d0c52b3933b4659f":"69263000000000000000","3b7b8e27de33d3ce7961b98d19a52fe79f6c25be":"100000000000000000000000",a1911405cf6e999ed011f0ddcd2a4ff7c28f2526:"40000000000000000000","0cae108e6db99b9e637876b064c6303eda8a65c8":"3000000000000000000000","3883becc08b9be68ad3b0836aac3b620dc0017ef":"2000000000000000000000",d0abcc70c0420e0e172f97d43b87d5e80c336ea9:"10000000000000000000000",cbf16a0fe2745258cd52db2bf21954c975fc6a15:"300000000000000000000","1b23cb8663554871fbbe0d9e60397efb6faedc3e":"200000000000000000000",fbede32c349f3300ef4cd33b4de7dc18e443d326:"3160000000000000000000","5e806e845730f8073e6cc9018ee90f5c05f909a3":"9480000000000000000000","425c338a1325e3a1578efa299e57d986eb474f81":"2000000000000000000000","8bf297f8f453523ed66a1acb7676856337b93bf0":"4000000000000000000000","38e8a31af2d265e31a9fff2d8f46286d1245a467":"20000000000000000000","7edafba8984baf631a820b6b92bbc2c53655f6bd":"2000000000000000000000",aa0200f1d17e9c54da0647bb96395d57a78538d8:"1056000000000000000000","433eb94a339086ed12d9bde9cd1d458603c97dd6":"100000000000000000000000",cd7e47909464d871b9a6dc76a8e9195db3485e7a:"9850000000000000000000","5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82":"1370000000000000000000",cea2896623f4910287a2bdc5be83aea3f2e6de08:"9359000000000000000000",cb4ad0c723da46ab56d526da0c1d25c73daff10a:"510000000000000000000",e2cf360aa2329eb79d2bf7ca04a27a17c532e4d8:"102000000000000000000",ea60549ec7553f511d2149f2d4666cbd9243d93c:"2000000000000000000000",cbb7be17953f2ccc93e1bc99805bf45511434e4c:"50440000000000000000000","3549bd40bbbc2b30095cac8be2c07a0588e0aed6":"20000000000000000000","6510df42a599bcb0a519cca961b488759a6f6777":"2000000000000000000000",ed12a1ba1fb8adfcb20dfa19582e525aa3b74524:"6685000000000000000000","135eb8c0e9e101deedec11f2ecdb66ae1aae8867":"20000000000000000000000",ee906d7d5f1748258174be4cbc38930302ab7b42:"200000000000000000000","253f1e742a2cec86b0d7b306e5eacb6ccb2f8554":"20040000000000000000000",ecd1a62802351a41568d23033004acc6c005a5d3:"50000000000000000000","558c54649a8a6e94722bd6d21d14714f71780534":"2000000000000000000000",ca657ec06fe5bc09cf23e52af7f80cc3689e6ede:"900000000000000000000","74bf7a5ab59293149b5c60cf364263e5ebf1aa0d":"115800000000000000000","7a6d781c77c4ba1fcadf687341c1e31799e93d27":"274000000000000000000","77028e409cc43a3bd33d21a9fc53ec606e94910e":"3880000000000000000000","4781a10a4df5eebc82f4cfe107ba1d8a7640bd66":"1790000000000000000000","78e08bc533413c26e291b3143ffa7cc9afb97b78":"200000000000000000000","03ef6ad20ff7bd4f002bac58d47544cf879ae728":"6895000000000000000000","0e3696cf1f4217b163d1bc12a5ea730f1c32a14a":"4000000000000000000000","825135b1a7fc1605614c8aa4d0ac6dbad08f480e":"1430000000000000000000","286b186d61ea1fd78d9930fe12b06537b05c3d51":"1000000000000000000000","8d6657f59711b1f803c6ebef682f915b62f92dc9":"2000000000000000000000",da8bbee182e455d2098acb338a6d45b4b17ed8b6:"2000000000000000000000","3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c":"2000000000000000000000",f5d9cf00d658dd45517a48a9d3f5f633541a533d:"116400000000000000000",c5f64babb7033142f20e46d7aa6201ed86f67103:"2000000000000000000000",a2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1:"200000000000000000000","6114b0eae5576903f80bfb98842d24ed92237f1e":"100000000000000000000","38df0c4abe7ded5fe068eadf154ac691774324a4":"1790000000000000000000","1c2010bd662df417f2a271879afb13ef4c88a3ae":"4000000000000000000000","918967918cd897dd0005e36dc6c883ef438fc8c7":"140000000000000000000",a522de7eb6ae1250522a513133a93bd42849475c:"20000000000000000000000","7de442c82386154d2e993cbd1280bb7ca6b12ada":"4002000000000000000000","66424bd8785b8cb461102a900283c35dfa07ef6a":"40221000000000000000","7bbbec5e70bdead8bb32b42805988e9648c0aa97":"1000076000000000000000",fec06fe27b44c784b2396ec92f7b923ad17e9077:"2000000000000000000000","95d550427b5a514c751d73a0f6d29fb65d22ed10":"300000000000000000000","8dde60eb08a099d7daa356daaab2470d7b025a6b":"197000000000000000000","81bccbff8f44347eb7fca95b27ce7c952492aaad":"152240000000000000000","3995e096b08a5a726800fcd17d9c64c64e088d2b":"200000000000000000000","4ee13c0d41200b46d19dee5c4bcec71d82bb8e38":"7893915000000000000000",c41461a3cfbd32c9865555a4813137c076312360:"999999000000000000000","3300fb149aded65bcba6c04e9cd6b7a03b893bb1":"18200000000000000000","29f9286c0e738d1721a691c6b95ab3d9a797ede8":"200000000000000000000000","34c8e5f1330fcb4b14ca75cb2580a4b93d204e36":"2000000000000000000000",ec5df227bfa85d7ad76b426e1cee963bc7f519dd:"1000000000000000000000","797510e386f56393ced8f477378a444c484f7dad":"1000000000000000000000","0191eb547e7bf6976b9b1b577546761de65622e2":"1999980000000000000000","615a6f36777f40d6617eb5819896186983fd3731":"5910000000000000000000","17580b766f7453525ca4c6a88b01b50570ea088c":"100000000000000000000","945d96ea573e8df7262bbfa572229b4b16016b0f":"209300000000000000000","2de0964400c282bdd78a919c6bf77c6b5f796179":"200000000000000000000","304ec69a74545721d7316aef4dcfb41ac59ee2f0":"200000000000000000000",be2b326e78ed10e550fee8efa8f8070396522f5a:"39400000000000000000000","1a0841b92a7f7075569dc4627e6b76cab05ade91":"1520000000000000000000","5fa61f152de6123516c751242979285f796ac791":"204000000000000000000","68c8791dc342c373769ea61fb7b510f251d32088":"1000000000000000000000","4167cd48e733418e8f99ffd134121c4a4ab278c4":"3640000000000000000000","598aaabae9ed833d7bc222e91fcaa0647b77580b":"1800000000000000000000","979f30158b574b999aab348107b9eed85b1ff8c1":"970000000000000000000","3ad06149b21c55ff867cc3fb9740d2bcc7101231":"197000000000000000000000","7133843a78d939c69d4486e10ebc7b602a349ff7":"329000000000000000000","8bdfda6c215720eda2136f91052321af4e936c1f":"1000008000000000000000","3e1c53300e4c168912163c7e99b95da268ad280a":"1003200000000000000000",e07ebbc7f4da416e42c8d4f842aba16233c12580:"2000000000000000000000",bac8922c4acc7d2cb6fd59a14eb45cf3e702214b:"800000000000000000000",bb6c284aac8a69b75cddb00f28e145583b56bece:"2000000000000000000000","0372ee5508bf8163ed284e5eef94ce4d7367e522":"100000000000000000000","17125b59ac51cee029e4bd78d7f5947d1ea49bb2":"22000000000000000000000",c88ca1e6e5f4d558d13780f488f10d4ad3130d34:"1550000000000000000000",a825fd5abb7926a67cf36ba246a24bd27be6f6ed:"17600000000000000000","04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186":"1870000000000000000000","6de4d15219182faf3aa2c5d4d2595ff23091a727":"1580000000000000000000",b203d29e6c56b92699c4b92d1f6f84648dc4cfbc:"400000000000000000000","80b42de170dbd723f454e88f7716452d92985092":"300202000000000000000","0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae":"1969803000000000000000","32034e8581d9484e8af42a28df190132ec29c466":"3460000000000000000000","7ee604c7a9dc2909ce321de6b9b24f5767577555":"5533575000000000000000",a387ce4e961a7847f560075c64e1596b5641d21c:"668500000000000000000",fcc9d4a4262e7a027ab7519110d802c495ceea39:"6370000000000000000000",ff8a2ca5a81333f19998255f203256e1a819c0aa:"224000000000000000000",f9811fa19dadbf029f8bfe569adb18228c80481a:"200000000000000000000","0d1f2a57713ebc6e94de29846e8844d376665763":"5000000000000000000000",eab0bd148309186cf8cbd13b7232d8095acb833a:"10691800000000000000000","36928b55bc861509d51c8cf1d546bfec6e3e90af":"1970000000000000000000","30480164bcd84974ebc0d90c9b9afab626cd1c73":"800000000000000000000","36339f84a5c2b44ce53dfdb6d4f97df78212a7df":"321600000000000000000",cfeacaaed57285e0ac7268ce6a4e35ecfdb242d7:"1086400000000000000000","572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb":"10400000000000000000000","5dded049a6e1f329dc4b971e722c9c1f2ade83f0":"1000000000000000000000","9756e176c9ef693ee1eec6b9f8b151d313beb099":"1200000000000000000000","01e6415d587b065490f1ed7f21d6e0f386ee6747":"2000000000000000000000",b4413576869c08f9512ad311fe925988a52d3414:"10000000000000000000000",da9f55460946d7bfb570ddec757ca5773b58429a:"507600000000000000000","7180b83ee5574317f21c8072b191d895d46153c3":"460000000000000000000","0aca9a5626913b08cfc9a66d40508dce52b60f87":"1910000000000000000000","5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a":"59000000000000000000","7edb02c61a227287611ad950696369cc4e647a68":"274000000000000000000",b2676841ee9f2d31c172e82303b0fe9bbf9f1e09:"200000000000000000000",a2222259dd9c3e3ded127084f808e92a1887302c:"162000000000000000000","4b3a7cc3a7d7b00ed5282221a60259f25bf6538a":"1000000000000000000000",e33ff987541dde5cdee0a8a96dcc3f33c3f24cc2:"200000000000000000000000","1e1a4828119be309bd88236e4d482b504dc55711":"2955000000000000000000","9b1811c3051f46e664ae4bc9c824d18592c4574a":"199955000000000000000","59fe00696dbd87b7976b29d1156c8842a2e17914":"2000000000000000000000","48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965":"2000000000000000000000",c90300cb1d4077e6a6d7e169a460468cf4a492d7:"2000000000000000000000","6dedf62e743f4d2c2a4b87a787f5424a7aeb393c":"180000000000000000000",fb744b951d094b310262c8f986c860df9ab1de65:"52009000000000000000","193ac65183651800e23580f8f0ead3bb597eb8a4":"50020000000000000000",bf05ff5ecf0df2df887759fb8274d93238ac267d:"800000000000000000000","6c0e712f405c59725fe829e9774bf4df7f4dd965":"57413800000000000000000","2744ff67464121e35afc2922177164fa2fcb0267":"100000000000000000000",d09cb2e6082d693a13e8d2f68dd1dd8461f55840:"1000000000000000000000",bc171e53d17ac9b61241ae436deec7af452e7496:"5348000000000000000000","71fa22cc6d33206b7d701a163a0dab31ae4d31d6":"1610000000000000000000","4da8030769844bc34186b85cd4c7348849ff49e9":"10000000000000000000000",c8616b4ec09128cdff39d6e4b9ac86eec471d5f2:"19400000000000000000","407295ebd94b48269c2d569c9b9af9aa05e83e5e":"10000000000000000000000",d45d5daa138dd1d374c71b9019916811f4b20a4e:"576000000000000000000","42c6edc515d35557808d13cd44dcc4400b2504e4":"197876000000000000000","0bc95cb32dbb574c832fa8174a81356d38bc92ac":"2000000000000000000000","5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b":"2000000000000000000000","54c93e03a9b2e8e4c3672835a9ee76f9615bc14e":"19400000000000000000","3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6":"1520000000000000000000",ba1531fb9e791896bcf3a80558a359f6e7c144bd:"3940000000000000000000",aa56a65dc4abb72f11bae32b6fbb07444791d5c9:"748600000000000000000",e437acbe0f6227b0e36f36e4bcf7cf613335fb68:"200000000000000000000","39d4a931402c0c79c457186f24df8729cf957031":"4000000000000000000000",e22b20c77894463baf774cc256d5bddbbf7ddd09:"1000000000000000000000","70a4067d448cc25dc8e70e651cea7cf84e92109e":"176000000000000000000",aa3925dc220bb4ae2177b2883078b6dc346ca1b2:"8000000000000000000000",ad57aa9d00d10c439b35efcc0becac2e3955c313:"200000000000000000000",e93d47a8ca885d540c4e526f25d5c6f2c108c4b8:"112640000000000000000000","232ce782506225fd9860a2edc14a7a3047736da2":"20000000000000000000","49a645e0667dfd7b32d075cc2467dd8c680907c4":"129560000000000000000",cf2e734042a355d05ffb2e3915b16811f45a695e:"2000000000000000000000","39b1c471ae94e12164452e811fbbe2b3cd7275ac":"2000000000000000000000",ffad3dd74e2c1f796ac640de56dc99b4c792a402:"5000000000000000000000",a69d7cd17d4842fe03f62a90b2fbf8f6af7bb380:"100000000000000000000","2001bef77b66f51e1599b02fb110194a0099b78d":"2000000000000000000000","95e7616424cd0961a71727247437f0069272280e":"400000000000000000000",c04f4bd4049f044685b883b62959ae631d667e35:"5820000000000000000000",ede0147ec032c3618310c1ff25690bf172193dac:"2000000000000000000000","66719c0682b2ac7f9e27abebec7edf8decf0ae0d":"20000000000000000000","45272b8f62e9f9fa8ce04420e1aea3eba9686eac":"4000000000000000000000",d1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c:"1970000000000000000000",e9133e7d31845d5f2b66a2618792e869311acf66:"24050000000000000000000",ebb62cf8e22c884b1b28c6fa88fbbc17938aa787:"798000000000000000000","6205c2d5647470848a3840f3887e9b015d34755c":"1800000000000000000000","76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29":"1524180000000000000000","6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee":"1480000000000000000000","797bb7f157d9feaa17f76da4f704b74dc1038341":"3340000000000000000000",ae8954f8d6166de507cf61297d0fc7ca6b9e7128:"300000000000000000000","75c1ad23d23f24b384d0c3149177e86697610d21":"6426082000000000000000","805d846fb0bc02a7337226d685be9ee773b9198a":"19999800000000000000000",c3cb6b36af443f2c6e258b4a39553a818747811f:"1610000000000000000000",cea43f7075816b60bbfce68b993af0881270f6c4:"2000000000000000000000",e0388aeddd3fe2ad56f85748e80e710a34b7c92e:"500000000000000000000",e131f87efc5ef07e43f0f2f4a747b551d750d9e6:"19999000000000000000000",c2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b:"20000000000000000000000",bd8765f41299c7f479923c4fd18f126d7229047d:"4000000000000000000000",c83ba6dd9549be1d3287a5a654d106c34c6b5da2:"7000000000000000000000",f870995fe1e522321d754337a45c0c9d7b38951c:"20000000000000000000","0d8ed7d0d15638330ed7e4eaccab8a458d75737e":"2000000000000000000000","36c510bf8d6e569bf2f37d47265dbcb502ff2bce":"30000000000000000000000","0eccf617844fd61fba62cb0e445b7ac68bcc1fbe":"387260000000000000000",ae10e27a014f0d306baf266d4897c89aeee2e974:"20000000000000000000000","1827039f09570294088fddf047165c33e696a492":"9550000000000000000000","23378f42926d0184b793b0c827a6dd3e3d334fcd":"56000000000000000000","467124ae7f452f26b3d574f6088894fa5d1cfb3b":"2700000000000000000000",aae61e43cb0d0c96b30699f77e00d711d0a3979b:"1000000000000000000000","15c7edb8118ee27b342285eb5926b47a855bc7a5":"20000000000000000000","0d5d98565c647ca5f177a2adb9d3022fac287f21":"200000000000000000000","7222fec7711781d26eaa4e8485f7aa3fac442483":"456000000000000000000",dc44275b1715baea1b0345735a29ac42c9f51b4f:"1164000000000000000000","04d82af9e01a936d97f8f85940b970f9d4db9936":"200000000000000000000","45533390e340fe0de3b3cf5fb9fc8ea552e29e62":"1460000000000000000000","1284f0cee9d2ff2989b65574d06ffd9ab0f7b805":"400000000000000000000",ed9ebccba42f9815e78233266dd6e835b6afc31b:"6000000000000000000000",e4324912d64ea3aef76b3c2ff9df82c7e13ae991:"2000000000000000000000","94c742fd7a8b7906b3bfe4f8904fc0be5c768033":"20000000000000000000000","62fb8bd1f0e66b90533e071e6cbe6111fef0bc63":"17600000000000000000000","2c83aeb02fcf067d65a47082fd977833ab1cec91":"150400000000000000000","06cbfa08cdd4fba737bac407be8224f4eef35828":"593459000000000000000","67ee406ea4a7ae6a3a381eb4edd2f09f174b4928":"1036000000000000000000","83c23d8a502124ee150f08d71dc6727410a0f901":"33999600000000000000000",f7c00cdb1f020310d5acab7b496aaa44b779085e:"1670000000000000000000",d096565b7c7407d06536580355fdd6d239144aa1:"250000000000000000000",f8d52dcc5f96cc28007b3ecbb409f7e22a646caa:"149200000000000000000","0c222c7c41c9b048efcce0a232434362e12d673b":"10007600000000000000000","503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e":"2000000000000000000000","77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e":"22380000000000000000",e62f98650712eb158753d82972b8e99ca3f61877:"2000000000000000000000","87a7c508ef71582dd9a54372f89cb01f252fb180":"200000000000000000000",f61283b4bd8504058ca360e993999b62cbc8cd67:"255000000000000000000","9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1":"100000000000000000000",d460a4b908dd2b056759b488850b66a838fc77a8:"1970000000000000000000","5431b1d18751b98fc9e2888ac7759f1535a2db47":"2000000000000000000000",da2a14f9724015d79014ed8e5909681d596148f1:"48499000000000000000",c989434f825aaf9c552f685eba7c11db4a5fc73a:"501000000000000000000","2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d":"600000000000000000000","78b978a9d7e91ee529ea4fc4b76feaf8762f698c":"32000000000000000000000",c89cf504b9f3f835181fd8424f5ccbc8e1bddf7d:"10000000000000000000000",e94941b6036019b4016a30c1037d5a6903babaad:"780000000000000000000","95d98d0c1069908f067a52acac2b8b534da37afd":"2054053000000000000000","8284923b62e68bbf7c2b9f3414d13ef6c812a904":"3880000000000000000000","3e5a39fdda70df1126ab0dc49a7378311a537a1f":"2400000000000000000000",a2ace4c993bb1e5383f8ac74e179066e814f0591:"100000000000000000000","0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d":"70000000000000000000000",d119417c46732cf34d1a1afb79c3e7e2cd8eece4:"2000000000000000000000",fdb33944f2360615e5be239577c8a19ba52d9887:"601650000000000000000",dd95dbe30f1f1877c5dd7684aeef302ab6885192:"8372000000000000000000","413f4b02669ccff6806bc826fcb7deca3b0ea9bc":"20000000000000000000","5800cd8130839e94495d2d8415a8ea2c90e0c5cb":"200000000000000000000","65053191319e067a25e6361d47f37f6318f83419":"394000000000000000000","9bc573bcda23b8b26f9073d90c230e8e71e0270b":"999544000000000000000","97f7760657c1e202759086963eb4211c5f8139b9":"49770000000000000000000","126897a311a14ad43b78e0920100c4426bfd6bdd":"973581000000000000000",d5276f0cd5ffd5ffb63f98b5703d5594ede0838b:"400000000000000000000",e9c35c913ca1fceab461582fe1a5815164b4fd21:"8000000000000000000000",b43067fe70d9b55973ba58dc64dd7f311e554259:"200000000000000000000","6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2":"1000000000000000000000",b1dba5250ba9625755246e067967f2ad2f0791de:"80000000000000000000000","72b7a03dda14ca9c661a1d469fd33736f673c8e8":"2000000000000000000000",e792349ce9f6f14f81d0674096befa1f9221cdea:"1685365000000000000000","1815279dff9952da3be8f77249dbe22243377be7":"4749800000000000000000","33481e856ebed48ea708a27426ef28e867f57cd1":"200000000000000000000","8eb8c71982a00fb84275293253f8044544b66b49":"400000000000000000000","65f5870f26bce089677dfc23b5001ee492483428":"5067230000000000000000","8e23facd12c765c36ab81a6dd34d8aa9e68918ae":"167310000000000000000","4912d902931676ff39fc34fe3c3cc8fb2182fa7a":"20000000000000000000",c09a66172aea370d9a63da04ff71ffbbfcff7f94:"2000000000000000000000",e969ea1595edc5c4a707cfde380929633251a2b0:"200000000000000000000","4f2b47e2775a1fa7178dad92985a5bbe493ba6d6":"200000000000000000000",cab9a97ada065c87816e6860a8f1426fe6b3d775:"1000000000000000000000",cdfd8217339725d7ebac11a63655f265eff1cc3d:"4999962000000000000000",ab4004c0403f7eabb0ea586f212156c4203d67f1:"1999944000000000000000","1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6":"9970823000000000000000",a951b244ff50cfae591d5e1a148df6a938ef2a1a:"1734000000000000000000",b158db43fa62d30e65f3d09bf781c7b67372ebaa:"1999000000000000000000","25e037f00a18270ba5ec3420229ddb0a2ce38fa2":"10000000000000000000000","2aaea1f1046f30f109faec1c63ef5c7594eb08da":"4000000000000000000000","73d7269ff06c9ffd33754ce588f74a966abbbbba":"6600000000000000000000","4c767b65fd91161f4fbdcc6a69e2f6ad711bb918":"720000000000000000000","92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc":"865000000000000000000",a04f2ae02add14c12faf65cb259022d0830a8e26:"100000000000000000000000","63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5":"1460000000000000000000","749ad6f2b5706bbe2f689a44c4b640b58e96b992":"100000000000000000000","4d836d9d3b0e2cbd4de050596faa490cffb60d5d":"300000000000000000000","59f6247b0d582aaa25e5114765e4bf3c774f43c2":"50000000000000000000","1293c78c7d6a443b9d74b0ba5ee7bb47fd418588":"6685000000000000000000","67bc85e87dc34c4e80aafa066ba8d29dbb8e438e":"402500000000000000000",a09f4d5eaa65a2f4cb750a49923401dae59090af:"140000000000000000000",ebbd4db9019952d68b1b0f6d8cf0683c00387bb5:"332330000000000000000",b16479ba8e7df8f63e1b95d149cd8529d735c2da:"846477000000000000000",e1b2aca154b8e0766c4eba30bc10c7f35036f368:"19980000000000000000","5c464197791c8a3da3c925436f277ab13bf2faa2":"8000000000000000000000","170a88a8997f92d238370f1affdee6347050b013":"3000800000000000000000",dadbfafd8b62b92a24efd75256dd83abdbd7bbdb:"19700000000000000000",bb993b96ee925ada7d99d786573d3f89180ce3aa:"2000000000000000000000",f2c362b0ef991bc82fb36e66ff75932ae8dd8225:"74000000000000000000","7f2382ffd8f83956467937f9ba72374623f11b38":"600000000000000000000","74d1a4d0c7524e018d4e06ed3b648092b5b6af2c":"50000000000000000000","24a750eae5874711116dd7d47b7186ce990d3103":"200000000000000000000",a8e42a4e33d7526cca19d9a36dcd6e8040d0ea73:"1080000000000000000000","3e1b2230afbbd310b4926a4c776d5ae7819c661d":"30000000000000000000000","6af9f0dfeeaebb5f64bf91ab771669bf05295553":"400000000000000000000","41e4a20275e39bdcefeb655c0322744b765140c2":"10000000000000000000000",ceb089ec8a78337e8ef88de11b49e3dd910f748f:"1000000000000000000000",e6bcd30a8fa138c5d9e5f6c7d2da806992812dcd:"260000000000000000000000",e08c60313106e3f9334fe6f7e7624d211130c077:"40000000000000000000",f5cffbba624e7eb321bc83c60ca68199b4e36671:"2000000000000000000000",d7c2803ed7b0e0837351411a8e6637d168bc5b05:"29549015000000000000000","0f3665d48e9f1419cd984fc7fa92788710c8f2e4":"2000000000000000000000",b48921c9687d5510744584936e8886bdbf2df69b:"1000000000000000000000",a94bbb8214cf8da0c2f668a2ac73e86248528d4b:"960000000000000000000",be0c2a80b9de084b172894a76cf4737a4f529e1a:"1999944000000000000000",fcf199f8b854222f182e4e1d099d4e323e2aae01:"1000000000000000000000",b52dfb45de5d74e3df208332bc571c809b8dcf32:"6000000000000000000000","704819d2e44d6ed1da25bfce84c49fcca25613e5":"400000000000000000000","6ff6cc90d649de4e96cffee1077a5b302a848dcb":"28600000000000000000","4d9c77d0750c5e6fbc247f2fd79274686cb353d6":"20000000000000000000","68e8022740f4af29eb48db32bcecddfd148d3de3":"1000000000000000000000","2cb615073a40dcdb99faa848572e987b3b056efb":"799600000000000000000","64adcceec53dd9d9dd15c8cc1a9e736de4241d2c":"56000000000000000000","2aec809df9325b9f483996e99f7331097f08aa0e":"4000000000000000000000","438c2f54ff8e629bab36b1442b760b12a88f02ae":"2000000000000000000000","9e35399071a4a101e9194daa3f09f04a0b5f9870":"4000000000000000000000",a5c336083b04f9471b8c6ed73679b74d66c363ec:"3014100000000000000000","7ad3f307616f19dcb143e6444dab9c3c33611f52":"50000000000000000000","455cb8ee39ffbc752331e5aefc588ef0ee593454":"999963000000000000000",c4c01afc3e0f045221da1284d7878574442fb9ac:"7419944000000000000000","99268327c373332e06c3f6164287d455b9d5fa4b":"2000000000000000000000","4367ae4b0ce964f4a54afd4b5c368496db169e9a":"2000000000000000000000","2cd79eb52027b12c18828e3eaab2969bfcd287e9":"20000000000000000000",b96841cabbc7dbd69ef0cf8f81dff3c8a5e21570:"12000000000000000000000",d7ebddb9f93987779b680155375438db65afcb6a:"100600000000000000000","0631d18bbbbd30d9e1732bf36edae2ce8901ab80":"3024800000000000000000","5fad960f6b2c84569c9f4d47bf1985fcb2c65da6":"999972000000000000000","01d599ee0d5f8c38ab2d392e2c65b74c3ce31820":"510000000000000000000",ff0cc8dac824fa24fc3caa2169e6e057cf638ad6:"4000000000000000000000",c25266c7676632f13ef29be455ed948add567792:"1337000000000000000000","9c344098ba615a398f11d009905b177c44a7b602":"1000000000000000000000","3b0accaf4b607cfe61d17334c214b75cdefdbd89":"2000000000000000000000","6d6634b5b8a40195d949027af4828802092ceeb6":"3000000000000000000000","208c45732c0a378f17ac8324926d459ba8b658b4":"2955000000000000000000",c24399b4bf86f7338fbf645e3b22b0e0b7973912:"2000000000000000000000","29763dd6da9a7c161173888321eba6b63c8fb845":"328000000000000000000","9c2fd54089af665df5971d73b804616039647375":"1000000000000000000000","0e09646c99af438e99fa274cb2f9c856cb65f736":"1910000000000000000000",be73274d8c5aa44a3cbefc8263c37ba121b20ad3:"500000000000000000000",ecfd004d02f36cd4d8b4a8c1a9533b6af85cd716:"5003800000000000000000",f978b025b64233555cc3c19ada7f4199c9348bf7:"400000000000000000000000","705ddd38355482b8c7d3b515bda1500dd7d7a817":"400000000000000000000","2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad":"504206000000000000000","1098cc20ef84bad5146639c4cd1ca6c3996cb99b":"18200000000000000000",afdac5c1cb56e245bf70330066a817eaafac4cd1:"20000000000000000000","910e996543344c6815fb97cda7af4b8698765a5b":"103400000000000000000","94612781033b57b146ee74e753c672017f5385e4":"3600000000000000000000",d03fc165576aaed525e5502c8e140f8b2e869639:"6850000000000000000000","293384c42b6f8f2905ce52b7205c2274376c612b":"1400000000000000000000","09ee12b1b42b05af9cf207d5fcac255b2ec411f2":"58929000000000000000",dbd71efa4b93c889e76593de609c3b04cbafbe08:"20000000000000000000",fa86ca27bf2854d98870837fb6f6dfe4bf6453fc:"322061000000000000000","61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af":"1640000000000000000000","6d4cbf3d8284833ae99344303e08b4d614bfda3b":"12000000000000000000000","2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf":"360000000000000000000","94a7cda8f481f9d89d42c303ae1632b3b709db1d":"300000000000000000000","7566496162ba584377be040a4f87777a707acaeb":"4000000000000000000000",bdc461462b6322b462bdb33f22799e8108e2417d:"668500000000000000000","7e47637e97c14622882be057bea229386f4052e5":"440000000000000000000","3b5c251d7fd7893ba209fe541cecd0ce253a990d":"30000000000000000000000","0e498800447177b8c8afc3fdfa7f69f4051bb629":"2140234000000000000000",b71623f35107cf7431a83fb3d204b29ee0b1a7f4:"19700000000000000000","1d395b30adda1cf21f091a4f4a7b753371189441":"100000000000000000000000","2c2428e4a66974edc822d5dbfb241b2728075158":"2000000000000000000000",a575f2891dcfcda83c5cf01474af11ee01b72dc2:"100076000000000000000",ad728121873f0456d0518b80ab6580a203706595:"500000000000000000000","48669eb5a801d8b75fb6aa58c3451b7058c243bf":"30940000000000000000000",b3ae54fba09d3ee1d6bdd1e957923919024c35fa:"65513000000000000000","0d35408f226566116fb8acdaa9e2c9d59b76683f":"940000000000000000000",df211cd21288d6c56fae66c3ff54625dd4b15427:"2500024000000000000000","8a746c5d67064711bfca685b95a4fe291a27028e":"40000000000000000000","1cf105ab23023b554c583e86d7921179ee83169f":"1970000000000000000000","8cfedef198db0a9143f09129b3fd64dcbb9b4956":"2000000000000000000000","1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66":"600200000000000000000",e74608f506866ada6bfbfdf20fea440be76989ef:"1999944000000000000000","27e63989ca1e903bc620cf1b9c3f67b9e2ae6581":"1337000000000000000000",bb0857f1c911b24b86c8a70681473fe6aaa1cce2:"100000000000000000000","4f8e8d274fb22a3fd36a47fe72980471544b3434":"200000000000000000000","127d3fc5003bf63c0d83e93957836515fd279045":"111890000000000000000","95809e8da3fbe4b7f281f0b8b1715f420f7d7d63":"2000000000000000000000","28904bb7c4302943b709b14d7970e42b8324e1a1":"10027500000000000000000",c07e3867ada096807a051a6c9c34cc3b3f4ad34a:"1788210000000000000000",f0b469eae89d400ce7d5d66a9695037036b88903:"20000000000000000000000","7445202f0c74297a004eb3726aa6a82dd7c02fa1":"2000000000000000000000",c58f62fee9711e6a05dc0910b618420aa127f288:"3980000000000000000000","801d65c518b11d0e3f4f470221417013c8e53ec5":"4000000000000000000000","41010fc8baf8437d17a04369809a168a17ca56fb":"100000000000000000000",a1998144968a5c70a6415554cefec2824690c4a5:"20000000000000000000",e9559185f166fc9513cc71116144ce2deb0f1d4b:"20000000000000000000000",ed5b4c41e762d942404373caf21ed4615d25e6c1:"2013960000000000000000","665b000f0b772750cc3c217a5ef429a92bf1ccbb":"4000000000000000000000",febd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e:"1990019000000000000000",a072691c8dd7cd4237ff72a75c1a9506d0ce5b9e:"370000000000000000000","6765df25280e8e4f38d4b1cf446fc5d7eb659e34":"100000000000000000000","524fb210522c5e23bb67dfbf8c26aa616da49955":"999971000000000000000",e987e6139e6146a717fef96bc24934a5447fe05d:"2000000000000000000000",d6110276cfe31e42825a577f6b435dbcc10cf764:"1000000000000000000000","5e51b8a3bb09d303ea7c86051582fd600fb3dc1a":"20000000000000000000","5c4f24e994ed8f850ea7818f471c8fac3bcf0452":"1724800000000000000000","85b2998d0c73302cb2ba13f489313301e053be15":"10000000000000000000000","0af6c8d539c96d50259e1ba6719e9c8060f388c2":"1000000000000000000000","7d901b28bf7f88ef73d8f73cca97564913ea8a24":"955000000000000000000",e01859f242f1a0ec602fa8a3b0b57640ec89075e:"555000000000000000000",c66ae4cee87fb3353219f77f1d6486c580280332:"29550000000000000000","2d40558b06f90a3923145592123b6774e46e31f4":"1000000000000000000000",ccf43975b76bfe735fec3cb7d4dd24f805ba0962:"60000000000000000000","1703b4b292b8a9deddede81bb25d89179f6446b6":"19690000000000000000000","0e9096d343c060db581a120112b278607ec6e52b":"20000000000000000000",f65819ac4cc14c137f05dd7977c7dae08d1a4ab5:"102000000000000000000",ca373fe3c906b8c6559ee49ccd07f37cd4fb5266:"1790000000000000000000",d28298524df5ec4b24b0ffb9df85170a145a9eb5:"287700000000000000000","5fcda847aaf8d7fa8bca08029ca2849166aa15a3":"623350000000000000000",bdc739a699700b2e8e2c4a4c7b058a0e513ddebe:"2000000000000000000000","0bb05f7224bb5804856556c07eeadbed87ba8f7c":"401100000000000000000",ab416fe30d58afe5d9454c7fce7f830bcc750356:"114515000000000000000","3eee6f1e96360b7689b3069adaf9af8eb60ce481":"1000000000000000000000","9a0d3cee3d9892ea3b3700a27ff84140d9025493":"60000000000000000000","5dc36de5359450a1ec09cb0c44cf2bb42b3ae435":"1117500000000000000000","35c8adc11125432b3b77acd64625fe58ebee9d66":"2000000000000000000000",a5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b:"766527000000000000000","31ea12d49a35a740780ddeeaece84c0835b26270":"200000000000000000000","7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5":"1490000000000000000000",cc6d7b12061bc96d104d606d65ffa32b0036eb07:"10000000000000000000000","322021022678a0166d204b3aaa7ad4ec4b88b7d0":"400000000000000000000",b31196714a48dff726ea9433cd2912f1a414b3b3:"2680000000000000000000","0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd":"3145000000000000000000","7d9d221a3df89ddd7b5f61c1468c6787d6b333e6":"138000000000000000000","367f59cc82795329384e41e1283115e791f26a01":"2000000000000000000000",fd9579f119bbc819a02b61e38d8803c942f24d32:"105600000000000000000","3e2f26235e137a7324e4dc154b5df5af46ea1a49":"22458000000000000000","4c1579af3312e4f88ae93c68e9449c2e9a68d9c4":"2000000000000000000000",ffb04726dfa41afdc819168418610472970d7bfc:"4000000000000000000000","403c64896a75cad816a9105e18d8aa5bf80f238e":"985000000000000000000","5cd588a14ec648ccf64729f9167aa7bf8be6eb3d":"1000000000000000000000","24b2be118b16d8b2174769d17b4cf84f07ca946d":"2000000000000000000000",d3bb59fa31258be62f8ed232f1a7d47b4a0b41ee:"100000000000000000000",cc9ac715cd6f2610c52b58676456884297018b29:"13370000000000000000","6f2a31900e240395b19f159c1d00dfe4d898ebdf":"1999600000000000000000",d60b247321a32a5affb96b1e279927cc584de943:"2265500000000000000000",f7a1ade2d0f529123d1055f19b17919f56214e67:"500000000000000000000",bea00df17067a43a82bc1daecafb6c14300e89e6:"1820000000000000000000",a2968fc1c64bac0b7ae0d68ba949874d6db253f4:"20000000000000000000000","92d8ad9a4d61683b80d4a6672e84c20d62421e80":"20000000000000000000","6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6":"2000000000000000000000","7a63869fc767a4c6b1cd0e0649f3634cb121d24b":"77500000000000000000","84f522f0520eba52dd18ad21fa4b829f2b89cb97":"4949566000000000000000",d6234aaf45c6f22e66a225ffb93add629b4ef80f:"1000000000000000000000",e3d8bf4efe84b1616d1b89e427ddc6c8830685ae:"2000000000000000000000",a3db364a332d884ba93b2617ae4d85a1489bea47:"1700000000000000000000","9f7986924aeb02687cd64189189fb167ded2dd5c":"985000000000000000000","2eaf4e2a46b789ccc288c8d1d9294e3fb0853896":"2000000000000000000000",a02dc6aa328b880de99eac546823fccf774047fb:"1970000000000000000000","873b7f786d3c99ff012c4a7cae2677270240b9c5":"1730000000000000000000","1d69c83d28ff0474ceebeacb3ad227a144ece7a3":"5474937000000000000000","7b827cae7ff4740918f2e030ab26cb98c4f46cf5":"7460000000000000000000","3083ef0ed4c4401196774a95cf4edc83edc1484f":"170000000000000000000000","40ad74bc0bce2a45e52f36c3debb1b3ada1b7619":"6790000000000000000000","05423a54c8d0f9707e704173d923b946edc8e700":"127543000000000000000","22eb7db0ba56b0f8b816ccb206e615d929185b0d":"80500000000000000000","66082c75a8de31a53913bbd44de3a0374f7faa41":"1460000000000000000000",e3d3eaa299887865569e88be219be507189be1c9:"456156000000000000000",ae57cc129a96a89981dac60d2ffb877d5dc5e432:"1110994000000000000000","1a2434cc774422d48d53d59c5d562cce8407c94b":"30000000000000000000","21546914dfd3af2add41b0ff3e83ffda7414e1e0":"5969100000000000000000","4dcf62a3de3f061db91498fd61060f1f6398ff73":"1999944000000000000000","6fd98e563d12ce0fd60f4f1f850ae396a9823c02":"1261000000000000000000",edf8a3e1d40f13b79ec8e3e1ecf262fd92116263:"158000000000000000000",c09e3cfc19f605ff3ec9c9c70e2540d7ee974366:"500000000000000000000","953572f0ea6df9b197cae40e4b8ecc056c4371c5":"1000000000000000000000","163cc8be227646cb09719159f28ed09c5dc0dce0":"1337000000000000000000",a3932a31d6ff75fb3b1271ace7caa7d5e1ff1051:"20000000000000000000000",f9a94bd56198da245ed01d1e6430b24b2708dcc0:"749938000000000000000","3eb8b33b21d23cda86d8288884ab470e164691b5":"500000000000000000000","84bcbf22c09607ac84341d2edbc03bfb1739d744":"500000000000000000000","961c59adc74505d1864d1ecfcb8afa0412593c93":"40000000000000000000000",f068dfe95d15cd3a7f98ffa688b4346842be2690:"1255160000000000000000","291efe0081dce8c14799f7b2a43619c0c3b3fc1f":"1200000000000000000000",be4fd073617022b67f5c13499b827f763639e4e3:"2000000000000000000000",e40a7c82e157540a0b00901dbb86c716e1a062da:"49800000000000000000","6635b46f711d2da6f0e16370cd8ee43efb2c2d52":"2000000000000000000000","43748928e8c3ec4436a1d092fbe43ac749be1251":"400000000000000000000",b557ab9439ef50d237b553f02508364a466a5c03:"200000000000000000000","11928378d27d55c520ceedf24ceb1e822d890df0":"8000000000000000000000","61518464fdd8b73c1bb6ac6db600654938dbf17a":"200000000000000000000","004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3":"2000000000000000000000",a5e0fc3c3affed3db6710947d1d6fb017f3e276d:"2000000000000000000000","8ecbcfacbfafe9f00c3922a24e2cf0026756ca20":"5640000000000000000000",fb5ffaa0f7615726357891475818939d2037cf96:"20000000000000000000",ae222865799079aaf4f0674a0cdaab02a6d570ff:"2000000000000000000000","9edc90f4be210865214ab5b35e5a8dd77415279d":"4000000000000000000000","9d7831e834c20b1baa697af1d8e0c621c5afff9a":"86500000000000000000","046d274b1af615fb505a764ad8dda770b1db2f3d":"2000000000000000000000",eaea23aa057200e7c9c15e8ff190d0e66c0c0e83:"2000000000000000000000","417a3cd19496530a6d4204c3b5a17ce0f207b1a5":"8000000000000000000000",a035a3652478f82dbd6d115faa8ca946ec9e681d:"109880000000000000000","4f5801b1eb30b712d8a0575a9a71ff965d4f34eb":"300000000000000000000","91dbb6aaad149585be47375c5d6de5ff09191518":"20000000000000000000000",d043a011ec4270ee7ec8b968737515e503f83028:"500000000000000000000",bb371c72c9f0316cea2bd9c6fbb4079e775429ef:"1760000000000000000000",aa1df92e51dff70b1973e0e924c66287b494a178:"534400000000000000000",bd5f46caab2c3d4b289396bbb07f203c4da82530:"80000000000000000000","4d29fc523a2c1629532121da9998e9b5ab9d1b45":"15800000000000000000",addb26317227f45c87a2cb90dc4cfd02fb23caf8:"1000000000000000000000","52e46783329a769301b175009d346768f4c87ee4":"2000000000000000000000",caad9dc20d589ce428d8fda3a9d53a607b7988b5:"4000000000000000000000","95034e1621865137cd4739b346dc17da3a27c34e":"1580000000000000000000","0c3239e2e841242db989a61518c22247e8c55208":"263656000000000000000","5a0d609aae2332b137ab3b2f26615a808f37e433":"160000000000000000000000","2334c590c7a48769103045c5b6534c8a3469f44a":"17443200000000000000000",ddfcca13f934f0cfbe231da13039d70475e6a1d0:"1000169000000000000000",ee7288d91086d9e2eb910014d9ab90a02d78c2a0:"2000000000000000000000",fb91fb1a695553f0c68e21276decf0b83909b86d:"100016000000000000000","38695fc7e1367ceb163ebb053751f9f68ddb07a0":"2000000000000000000000","65093b239bbfba23c7775ca7da5a8648a9f54cf7":"400000000000000000000","73d8fee3cb864dce22bb26ca9c2f086d5e95e63b":"1000000000000000000000",f7155213449892744bc60f2e04400788bd041fdd:"66850000000000000000",d1a71b2d0858e83270085d95a3b1549650035e23:"14900000000000000000000",eac17b81ed5191fb0802aa54337313834107aaa4:"8000000000000000000000",bb076aac92208069ea318a31ff8eeb14b7e996e3:"149000000000000000000","9f46e7c1e9078cae86305ac7060b01467d6685ee":"668500000000000000000","1598127982f2f8ad3b6b8fc3cf27bf617801ba2b":"173000000000000000000",e91dac0195b19e37b59b53f7c017c0b2395ba44c:"1880000000000000000000",a436c75453ccca4a1f1b62e5c4a30d86dde4be68:"2000000000000000000000","11001b89ed873e3aaec1155634b4681643986323":"1000000000000000000000",ab93b26ece0a0aa21365afed1fa9aea31cd54468:"1608000000000000000000",e77febabdf080f0f5dca1d3f5766f2a79c0ffa7c:"1386000000000000000000","1c4af0e863d2656c8635bc6ffec8dd9928908cb5":"2000000000000000000000","0c48ae62d1539788eba013d75ea60b64eeba4e80":"2213311000000000000000","423cc4594cf4abb6368de59fd2b1230734612143":"2000000000000000000000","7f6b28c88421e4857e459281d78461692489d3fb":"2000000000000000000000","806854588ecce541495f81c28a290373df0274b2":"582000000000000000000",dc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf:"20000000000000000000",b00996b0566ecb3e7243b8227988dcb352c21899:"12000000000000000000000",f5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c:"1337000000000000000000","55a61b109480b5b2c4fcfdef92d90584160c0d35":"44700000000000000000",b8947822d5ace7a6ad8326e95496221e0be6b73d:"20000000000000000000","492de46aaf8f1d708d59d79af1d03ad2cb60902f":"2000000000000000000000","0e0d6633db1e0c7f234a6df163a10e0ab39c200f":"200000000000000000000",f8bf9c04874e5a77f38f4c38527e80c676f7b887:"2000000000000000000000","15528350e0d9670a2ea27f7b4a33b9c0f9621d21":"4000086000000000000000",eccf7a0457b566b346ca673a180f444130216ac3:"100000000000000000000","10cf560964ff83c1c9674c783c0f73fcd89943fc":"40000000000000000000000",e7f06f699be31c440b43b4db0501ec0e25261644:"500000000000000000000",b6ce4dc560fc73dc69fb7a62e388db7e72ea764f:"966000000000000000000",f456055a11ab91ff668e2ec922961f2a23e3db25:"18200000000000000000","8dfbafbc0e5b5c86cd1ad697feea04f43188de96":"390060000000000000000","085b4ab75d8362d914435cedee1daa2b1ee1a23b":"3880000000000000000000",e400d651bb3f2d23d5f849e6f92d9c5795c43a8a:"2674000000000000000000","851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1":"148607000000000000000","4c935bb250778b3c4c7f7e07fc251fa630314aab":"1500000000000000000000",ebd356156a383123343d48843bffed6103e866b3:"1970000000000000000000",da0b48e489d302b4b7bf204f957c1c9be383b0df:"2000000000000000000000","7085ae7e7e4d932197b5c7858c00a3674626b7a5":"6000000000000000000000","5b06d1e6930c1054692b79e3dbe6ecce53966420":"205400000000000000000","8df53d96191471e059de51c718b983e4a51d2afd":"32000000000000000000000","0678654ac6761db904a2f7e8595ec1eaac734308":"878000000000000000000","89fee30d1728d96cecc1dab3da2e771afbcfaa41":"1999944000000000000000","59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019":"10000000000000000000000","2b129c26b75dde127f8320bd0f63410c92a9f876":"2200000000000000000000","3d6ae053fcbc318d6fd0fbc353b8bf542e680d27":"14300000000000000000","755a60bf522fbd8fff9723446b7e343a7068567e":"20000000000000000000000","947e11e5ea290d6fc3b38048979e0cd44ec7c17f":"2000000000000000000000","711ecf77d71b3d0ea95ce4758afecdb9c131079d":"760000000000000000000",de9eff4c798811d968dccb460d9b069cf30278e0:"400000000000000000000","4e892e8081bf36e488fddb3b2630f3f1e8da30d2":"12003800000000000000000","8ede7e3dc50749c6c50e2e28168478c34db81946":"19999800000000000000000","0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1":"2001000000000000000000",e51eb87e7fb7311f5228c479b48ec9878831ac4c:"2000000000000000000000","8b01da34d470c1d115acf4d8113c4dd8a8c338e4":"25220000000000000000000","4329fc0931cbeb033880fe4c9398ca45b0e2d11a":"2000400000000000000000","540c072802014ef0d561345aec481e8e11cb3570":"8000000000000000000000","21e5d2bae995ccfd08a5c16bb524e1f630448f82":"2800000000000000000000","5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a":"200000000000000000000","5c0f2e51378f6b0d7bab617331580b6e39ad3ca5":"9600000000000000000000",d2f241255dd7c3f73c07043071ec08ddd9c5cde5:"500000000000000000000",cbe1b948864d8474e765145858fca4550f784b92:"10000000000000000000000","30742ccdf4abbcd005681f8159345c9e79054b1a":"668500000000000000000","6aeb9f74742ea491813dbbf0d6fcde1a131d4db3":"440800000000000000000","821eb90994a2fbf94bdc3233910296f76f9bf6e7":"10000000000000000000000","25c1a37ee5f08265a1e10d3d90d5472955f97806":"1820000000000000000000","7ef98b52bee953bef992f305fda027f8911c5851":"514717000000000000000","8adc53ef8c18ed3051785d88e996f3e4b20ecd51":"42000000000000000000000","007f4a23ca00cd043d25c2888c1aa5688f81a344":"773658000000000000000","4a735d224792376d331367c093d31c8794341582":"1900000000000000000000","05440c5b073b529b4829209dff88090e07c4f6f5":"1288000000000000000000","5e772e27f28800c50dda973bb33e10762e6eea20":"1790000000000000000000",a429fa88731fdd350e8ecd6ea54296b6484fe695:"1969606000000000000000",e0d76b7166b1f3a12b4091ee2b29de8caa7d07db:"2000000000000000000000","7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84":"14000000000000000000000","883a78aeabaa50d8ddd8570bcd34265f14b19363":"3879951000000000000000","51f9c432a4e59ac86282d6adab4c2eb8919160eb":"530000000000000000000000",b86607021b62d340cf2652f3f95fd2dc67698bdf:"5000000000000000000000",acc0909fda2ea6b7b7a88db7a0aac868091ddbf6:"22155000000000000000","69b80ed90f84834afa3ff82eb964703b560977d6":"26740000000000000000",ca4ca9e4779d530ecbacd47e6a8058cfde65d98f:"800000000000000000000","5d6c5c720d66a6abca8397142e63d26818eaab54":"40000000000000000000",c2c13e72d268e7150dc799e7c6cf03c88954ced7:"700000000000000000000","6bbd1e719390e6b91043f8b6b9df898ea8001b34":"2000053000000000000000",a9ba6f413b82fcddf3affbbdd09287dcf50415ca:"4000000000000000000000",ced3c7be8de7585140952aeb501dc1f876ecafb0:"4000000000000000000000","1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1":"1000000000000000000000","7d6e990daa7105de2526339833f77b5c0b85d84f":"20000000000000000000000","68addf019d6b9cab70acb13f0b3117999f062e12":"49941000000000000000",a77428bcb2a0db76fc8ef1e20e461a0a32c5ac15:"401100000000000000000","26048fe84d9b010a62e731627e49bc2eb73f408f":"4000000000000000000000",ff26138330274df4e0a3081e6df7dd983ec6e78f:"2000000000000000000000",b7382d37db0398ac72410cf9813de9f8e1ec8dad:"1000070000000000000000","44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140":"17000000000000000000000","47fef58584465248a0810d60463ee93e5a6ee8d3":"283100000000000000000",bd2b70fecc37640f69514fc7f3404946aad86b11:"1200000000000000000000","649a85b93653075fa6562c409a565d087ba3e1ba":"2000000000000000000000","55866486ec168f79dbe0e1abb18864d98991ae2c":"16100000000000000000",d7e74afdbad55e96cebc5a374f2c8b768680f2b0:"99000000000000000000",a8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52:"30000000000000000000","744c0c77ba7f236920d1e434de5da33e48ebf02c":"1970000000000000000000","9445ba5c30e98961b8602461d0385d40fbd80311":"10000000000000000000000",eb835c1a911817878a33d167569ea3cdd387f328:"1000000000000000000000","761a6e362c97fbbd7c5977acba2da74687365f49":"183840000000000000000","38202c5cd7078d4f887673ab07109ad8ada89720":"1000000000000000000000","5abfec25f74cd88437631a7731906932776356f9":"11901484239480000000000000","28e4af30cd93f686a122ad7bb19f8a8785eee342":"2101000000000000000000","3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2":"4000000000000000000000","7bb9571f394b0b1a8eba5664e9d8b5e840677bea":"19700000000000000000","50fb36c27107ee2ca9a3236e2746cca19ace6b49":"2000000000000000000000",a3bc979b7080092fa1f92f6e0fb347e28d995045:"2800000000000000000000",d04b861b3d9acc563a901689941ab1e1861161a2:"20000000000000000000","58c555bc293cdb16c6362ed97ae9550b92ea180e":"20000000000000000000","8bf02bd748690e1fd1c76d270833048b66b25fd3":"11800000000000000000000",fbc01db54e47cdc3c438694ab717a856c23fe6e9:"8456774000000000000000","9c9a07a8e57c3172a919ef64789474490f0d9f51":"10000000000000000000000",fc7e22a503ec5abe9b08c50bd14999f520fa4884:"6387725000000000000000","9b773669e87d76018c090f8255e54409b9dca8b2":"20000000000000000000",ffe8cbc1681e5e9db74a0f93f8ed25897519120f:"1507000000000000000000","4d4cf5807429615e30cdface1e5aae4dad3055e6":"600000000000000000000",cfde0fc75d6f16c443c3038217372d99f5d907f7:"2419000000000000000000","818ffe271fc3973565c303f213f6d2da89897ebd":"5734655000000000000000",ba1fcaf223937ef89e85675503bdb7ca6a928b78:"640000000000000000000",a30a45520e5206d9004070e6af3e7bb2e8dd5313:"400000000000000000000",a747439ad0d393b5a03861d77296326de8bb9db9:"1000000000000000000000","14d00aad39a0a7d19ca05350f7b03727f08dd82e":"500000000000000000000","551999ddd205563327b9b530785acff9bc73a4ba":"6000000000000000000000",a4670731175893bbcff4fa85ce97d94fc51c4ba8:"8000000000000000000000",f858171a04d357a13b4941c16e7e55ddd4941329:"41984000000000000000",a6484cc684c4c91db53eb68a4da45a6a6bda3067:"6000000000000000000000","00d75ed60c774f8b3a5a5173fb1833ad7105a2d9":"2005500000000000000000",bf92418a0c6c31244d220260cb3e867dd7b4ef49:"99800000000000000000","716d50cca01e938500e6421cc070c3507c67d387":"2000000000000000000000","82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff":"1999998000000000000000","5a565285374a49eedd504c957d510874d00455bc":"100000000000000000000","778c79f4de1953ebce98fe8006d53a81fb514012":"999800000000000000000","41b2d34fde0b1029262b4172c81c1590405b03ae":"1000000000000000000000","4039bd50a2bde15ffe37191f410390962a2b8886":"200000000000000000000",c033be10cb48613bd5ebcb33ed4902f38b583003:"3000000000000000000000","5d5751819b4f3d26ed0c1ac571552735271dbefa":"1000000000000000000000",b600429752f399c80d0734744bae0a022eca67c6:"20000000000000000000",f875619d8a23e45d8998d184d480c0748970822a:"4000000000000000000000","71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd":"4365000000000000000000",b2f9c972c1e9737755b3ff1b3088738396395b26:"20000000000000000000000",a66a4963b27f1ee1932b172be5964e0d3ae54b51:"173000000000000000000","53ce88e66c5af2f29bbd8f592a56a3d15f206c32":"140840000000000000000","433e3ba1c51b810fc467d5ba4dea42f7a9885e69":"40000000000000000000000",c7837ad0a0bf14186937ace06c5546a36aa54f46:"4000000000000000000000",c3f8f67295a5cd049364d05d23502623a3e52e84:"6000000000000000000000","3fd0bb47798cf44cdfbe4d333de637df4a00e45c":"100040000000000000000",a1ae8d4540d4db6fdde7146f415b431eb55c7983:"197000000000000000000","5cccf1508bfd35c20530aa642500c10dee65eaed":"850000000000000000000",a53ead54f7850af21438cbe07af686279a315b86:"10000000000000000000000","8cf6da0204dbc4860b46ad973fc111008d9e0c46":"200000000000000000000","8e7936d592008fdc7aa04edeeb755ab513dbb89d":"20000000000000000000","4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b":"4200000000000000000000","2b4f4507bb6b9817942ce433781b708fbcd166fd":"18200000000000000000","026432af37dc5113f1f46d480a4de0b28052237e":"355800000000000000000",e780a56306ba1e6bb331952c22539b858af9f77d:"50000000000000000000000",d1f1694d22671b5aad6a94995c369fbe6133676f:"1000000000000000000000","7c45f0f8442a56dbd39dbf159995415c52ed479b":"2000000000000000000000",b65941d44c50d24666670d364766e991c02e11c2:"600000000000000000000","45e68db8dbbaba5fc2cb337c62bcd0d61b059189":"2000000000000000000000","05f3631f5664bdad5d0132c8388d36d7d8920918":"20000000000000000000","5475d7f174bdb1f789017c7c1705989646079d49":"9400000000000000000000",c7bf2ed1ed312940ee6aded1516e268e4a604856:"6000000000000000000000","39aaf0854db6eb39bc7b2e43846a76171c0445de":"1850000000000000000000",c817df1b91faf30fe3251571727c9711b45d8f06:"1999944000000000000000","7d13d6705884ab2157dd8dcc7046caf58ee94be4":"137200000000000000000000","478dc09a1311377c093f9cc8ae74111f65f82f39":"4000000000000000000000","8043ed22f997e5a2a4c16e364486ae64975692c4":"1130513000000000000000",b9a985501ee950829b17fae1c9cf348c3156542c:"294100000000000000000",d5cba5b26bea5d73fabb1abafacdef85def368cc:"200000000000000000000","6776e133d9dc354c12a951087b639650f539a433":"120000000000000000000","804ca94972634f633a51f3560b1d06c0b293b3b1":"200000000000000000000","0be1fdf626ee6189102d70d13b31012c95cd1cd6":"2000000000000000000000",f848fce9ab611c7d99206e23fac69ad488b94fe1:"48500000000000000000",f01195d657ef3c942e6cb83949e5a20b5cfa8b1e:"25760000000000000000000","78a5e89900bd3f81dd71ba869d25fec65261df15":"51900000000000000000000",d6f1e55b1694089ebcb4fe7d7882aa66c8976176:"19998846000000000000000",d5294b666242303b6df0b1c88d37429bc8c965aa:"300700000000000000000","3171877e9d820cc618fc0919b29efd333fda4934":"1000000000000000000000","2901f8077f34190bb47a8e227fa29b30ce113b31":"100000000000000000000","6b2284440221ce16a8382de5ff0229472269deec":"1000000000000000000000","1bba03ff6b4ad5bf18184acb21b188a399e9eb4a":"1790000000000000000000","80744618de396a543197ee4894abd06398dd7c27":"2000000000000000000000","1b799033ef6dc7127822f74542bb22dbfc09a308":"100000000000000000000",d513a45080ff2febe62cd5854abe29ee4467f996:"153200000000000000000",e761d27fa3502cc76bb1a608740e1403cf9dfc69:"280000000000000000000","53989ed330563fd57dfec9bd343c3760b0799390":"6208000000000000000000",ccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d:"900000000000000000000",f373e9daac0c8675f53b797a160f6fc034ae6b23:"100000000000000000000",abc9a99e8a2148a55a6d82bd51b98eb5391fdbaf:"6000000000000000000000",ffec0913c635baca2f5e57a37aa9fb7b6c9b6e26:"805000000000000000000","581a3af297efa4436a29af0072929abf9826f58b":"2000000000000000000000","924efa6db595b79313277e88319625076b580a10":"2000000000000000000000","65d8dd4e251cbc021f05b010f2d5dc520c3872e0":"834956000000000000000","6c67d6db1d03516c128b8ff234bf3d49b26d2941":"100000000000000000000000","496d365534530a5fc1577c0a5241cb88c4da7072":"1790000000000000000000",b85ff03e7b5fc422981fae5e9941dacbdaba7584:"1337000000000000000000",e13540ecee11b212e8b775dc8e71f374aae9b3f8:"2000000000000000000000",a02e3f8f5959a7aab7418612129b701ca1b80010:"20000000000000000000",a7a3f153cdc38821c20c5d8c8241b294a3f82b24:"500000000000000000000","366175403481e0ab15bb514615cbb989ebc68f82":"2000000000000000000000","5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85":"100000000000000000000000",a466d770d898d8c9d405e4a0e551efafcde53cf9:"492500000000000000000","5fa8a54e68176c4fe2c01cf671c515bfbdd528a8":"330000000000000000000000",e2e15c60dd381e3a4be25071ab249a4c5c5264da:"2350502000000000000000","0628bfbe5535782fb588406bc96660a49b011af5":"1520000000000000000000","04d6b8d4da867407bb997749debbcdc0b358538a":"1000000000000000000000","0e6ec313376271dff55423ab5422cc3a8b06b22b":"4000000000000000000000","8787d12677a5ec291e57e31ffbfad105c3324b87":"12438777000000000000000","58e2f11223fc8237f69d99c6289c148c0604f742":"24000000000000000000000","5600730a55f6b20ebd24811faa3de96d1662abab":"1880000000000000000000",fce089635ce97abac06b44819be5bb0a3e2e0b37:"92491000000000000000",fa0c1a988c8a17ad3528eb28b3409daa58225f26:"200000000000000000000","7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392":"1000000000000000000000",bd17eed82b9a2592019a1b1b3c0fbad45c408d22:"250000000000000000000","884a7a39d0916e05f1c242df55607f37df8c5fda":"23400000000000000000000",ca70f4ddbf069d2143bd6bbc7f696b52789b32e7:"3000000000000000000000","7b25bb9ca8e702217e9333225250e53c36804d48":"1880000000000000000000",ea8317197959424041d9d7c67a3ece1dbb78bb55:"394000000000000000000","5cb953a0e42f5030812226217fffc3ce230457e4":"100000000000000000000",d1f4dc1ddb8abb8848a8b14e25f3b55a8591c266:"250000000000000000000","6a42ca971c6578d5ade295c3e7f4ad331dd3424e":"6000000000000000000000","07e1162ceae3cf21a3f62d105990302e307f4e3b":"1530000000000000000000","5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b":"2000000000000000000000","5d2819e8d57821922ee445650ccaec7d40544a8d":"200000000000000000000","4c24b78baf2bafc7fcc69016426be973e20a50b2":"3000000000000000000000","630c5273126d517ce67101811cab16b8534cf9a8":"9422595000000000000000","291f929ca59b54f8443e3d4d75d95dee243cef78":"499938000000000000000","2dd325fdffb97b19995284afa5abdb574a1df16a":"500000000000000000000","4fce8429ba49caa0369d1e494db57e89eab2ad39":"200000000000000000000000","712b76510214dc620f6c3a1dd29aa22bf6d214fb":"6000000000000000000000","266f2da7f0085ef3f3fa09baee232b93c744db2e":"60000000000000000000000","0770c61be78772230cb5a3bb2429a72614a0b336":"6767695000000000000000","02dfcb17a1b87441036374b762a5d3418b1cb4d4":"1340860000000000000000","5e67df8969101adabd91accd6bb1991274af8df2":"500000000000000000000","7d9c59631e2ba2e8e82891f3979922aaa3b567a1":"8000000000000000000000","949f8c107bc7f0aceaa0f17052aadbd2f9732b2e":"2000000000000000000000",ea4e809e266ae5f13cdbe38f9d0456e6386d1274:"4500000000000000000000",cd5510a242dfb0183de925fba866e312fabc1657:"2400000000000000000000",a36e0d94b95364a82671b608cb2d373245612909:"150011000000000000000","0ec46696ffac1f58005fa8439824f08eed1df89b":"10000000000000000000000",c6fb1ee37417d080a0d048923bdabab095d077c6:"200000000000000000000","53c9eca40973f63bb5927be0bc6a8a8be1951f74":"2000000000000000000000",ea14bfda0a6e76668f8788321f07df37824ec5df:"200000000000000000000000",dfb4d4ade52fcc818acc7a2c6bb2b00224658f78:"7750000000000000000000","5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783":"1000000000000000000000","8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71":"2000000000000000000000","8f02bda6c36922a6be6a509be51906d393f7b99b":"1019835000000000000000","530077c9f7b907ff9cec0c77a41a70e9029add4a":"2000000000000000000000","08936a37df85b3a158cafd9de021f58137681347":"18200000000000000000","8e9c429266df057efa78dd1d5f77fc40742ad466":"300061000000000000000",acc59f3b30ceffc56461cc5b8df48902240e0e7b:"2000000000000000000000",f5534815dc635efa5cc84b2ac734723e21b29372:"1580000000000000000000",f873e57a65c93b6e18cb75f0dc077d5b8933dc5c:"197000000000000000000","25b78c9fad85b43343f0bfcd0fac11c9949ca5eb":"2000000000000000000000",aad2b7f8106695078e6c138ec81a7486aaca1eb2:"200000000000000000000","509c8668036d143fb8ae70b11995631f3dfcad87":"1000000000000000000000","3602458da86f6d6a9d9eb03daf97fe5619d442fa":"2000000000000000000000","9f607b3f12469f446121cebf3475356b71b4328c":"4000000000000000000000",fe3827d57630cf8761d512797b0b858e478bbd12:"20000000000000000000","9d9c4efe9f433989e23be94049215329fa55b4cb":"256215000000000000000","9bd905f1719fc7acd0159d4dc1f8db2f21472338":"1000000000000000000000","7d82e523cc2dc591da3954e8b6bb2caf6461e69c":"2316058000000000000000","74afe54902d615782576f8baac13ac970c050f6e":"177670000000000000000",aff11ccf699304d5f5862af86083451c26e79ae5:"1999000000000000000000","3885fee67107dc3a3c741ee290c98918c9b99397":"20000000000000000000","36343aeca07b6ed58a0e62fa4ecb498a124fc971":"300000000000000000000",c94a28fb3230a9ddfa964e770f2ce3c253a7be4f:"200000000000000000000","9882967cee68d2a839fad8ab4a7c3dddf6c0adc8":"1336866000000000000000","95df4e3445d7662624c48eba74cf9e0a53e9f732":"56000000000000000000000",ca9faa17542fafbb388eab21bc4c94e8a7b34788:"1999999000000000000000",c8b1850525d946f2ae84f317b15188c536a5dc86:"2685000000000000000000","39bac68d947859f59e9226089c96d62e9fbe3cde":"40000000000000000000",a9bfc410dddb20711e45c07387eab30a054e19ac:"1154750000000000000000","540a1819bd7c35861e791804e5fbb3bc97c9abb1":"1454400000000000000000","667b61c03bb937a9f5d0fc5a09f1ea3363c77035":"4250000000000000000000","010df1df4bed23760d2d1c03781586ddf7918e54":"60000000000000000000",bd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac:"1318800000000000000000",fb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e:"5910000000000000000000","3f0c83aac5717962734e5ceaeaecd39b28ad06be":"2000000000000000000000",f10661ff94140f203e7a482572437938bec9c3f7:"20000000000000000000000",bd3097a79b3c0d2ebff0e6e86ab0edadbed47096:"1670000000000000000000",edeb4894aadd0081bbddd3e8846804b583d19f27:"2000000000000000000000","49c9771fca19d5b9d245c891f8158fe49f47a062":"10000000000000000000000","6405dd13e93abcff377e700e3c1a0086eca27d29":"18200000000000000000",ce5e04f0184369bcfa06aca66ffa91bf59fa0fb9:"40000000000000000000","4364309a9fa07095600f79edc65120cdcd23dc64":"10000000000000000000000",b749b54e04d5b19bdcedfb84da7701ab478c27ae:"2680000000000000000000",f593c65285ee6bbd6637f3be8f89ad40d489f655:"3000000000000000000000",d224f880f9479a89d32f09e52be990b288135cef:"17300000000000000000000","85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e":"321750000000000000000",caf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31:"5000000000000000000000","51ca8bd4dc644fac47af675563d5804a0da21eeb":"788000000000000000000","19f643e1a8fa04ae16006028138333a59a96de87":"20000000000000000000","58b808a65b51e6338969afb95ec70735e451d526":"39998000000000000000000","574921838cc77d6c98b17d903a3ae0ee0da95bd0":"53480000000000000000000","7c6924d07c3ef5891966fe0a7856c87bef9d2034":"2000000000000000000000",f9767e4ecb4a5980527508d7bec3d45e4c649c13:"1910000000000000000000",f3be99b9103ce7550aa74ff1db18e09dfe32e005:"2000000000000000000000","625644c95a873ef8c06cdb9e9f6d8d7680043d62":"1800000000000000000000","6a44af96b3f032ae641beb67f4b6c83342d37c5d":"29000000000000000000",d3a10ec7a5c9324999dd9e9b6bde7c911e584bda:"600000000000000000000",e8ddbed732ebfe754096fde9086b8ea4a4cdc616:"2000000000000000000000","235fa66c025ef5540070ebcf0d372d8177c467ab":"33400000000000000000000","4d08471d68007aff2ae279bc5e3fe4156fbbe3de":"40000000000000000000000",dadc00ab7927603c2fcf31cee352f80e6c4d6351:"1999664000000000000000","7393cbe7f9ba2165e5a7553500b6e75da3c33abf":"100000000000000000000","77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024":"1970000000000000000000","7fea1962e35d62059768c749bedd96cab930d378":"2000000000000000000000","243b3bca6a299359e886ce33a30341fafe4d573d":"20000000000000000000000",b94d47b3c052a5e50e4261ae06a20f45d8eee297:"2000000000000000000000",e727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6:"2000000000000000000000",e510d6797fba3d6693835a844ea2ad540691971b:"17381000000000000000000","0cdc960b998c141998160dc179b36c15d28470ed":"500038000000000000000","3e76a62db187aa74f63817533b306cead0e8cebe":"31200000000000000000000","495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c":"1000000000000000000000","5126460d692c71c9af6f05574d93998368a23799":"52000000000000000000",a008019863c1a77c1499eb39bbd7bf2dd7a31cb9:"137000000000000000000","65ee20b06d9ad589a7e7ce04b9f5f795f402aece":"2000000000000000000000",f432b9dbaf11bdbd73b6519fc0a904198771aac6:"152000000000000000000","85946d56a4d371a93368539690b60ec825107454":"1730000000000000000000","26f9f7cefd7e394b9d3924412bf2c2831faf1f85":"4000000000000000000000",d4ebb1929a23871cf77fe049ab9602be08be0a73:"1910000000000000000000","4fdac1aa517007e0089430b3316a1badd12c01c7":"500000000000000000000","05e671de55afec964b074de574d5158d5d21b0a3":"3940000000000000000000","20181c4b41f6f972b66958215f19f570c15ddff1":"1600000000000000000000",cc9519d1f3985f6b255eaded12d5624a972721e1:"1000000000000000000000","169bbefc41cfd7d7cbb8dfc63020e9fb06d49546":"2000000000000000000000","175a183a3a235ffbb03ba835675267229417a091":"16000000000000000000000","8dde3cb8118568ef4503fe998ccdf536bf19a098":"4000000000000000000000","6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e":"1500000000000000000000","5cc4cba621f220637742057f6055b80dffd77e13":"39997692000000000000000",ecb94c568bfe59ade650645f4f26306c736cace4:"267400000000000000000",dfa6b8b8ad3184e357da282951d79161cfb089bc:"400000000000000000000",a3058c51737a4e96c55f2ef6bd7bb358167ec2a7:"606093000000000000000","051d424276b21239665186133d653bb8b1862f89":"1000000000000000000000",d05ffb2b74f867204fe531653b0248e21c13544e:"1000000000000000000000",e1f63ebbc62c7b7444040eb99623964f7667b376:"20000000000000000000",e5a3d7eb13b15c100177236d1beb30d17ee15420:"2000000000000000000000","18fa8625c9dc843c78c7ab259ff87c9599e07f10":"1000000000000000000000","64264aedd52dcae918a012fbcd0c030ee6f71821":"1000000000000000000000","6f1f4907b8f61f0c51568d692806b382f50324f5":"2000000000000000000000",becef61c1c442bef7ce04b73adb249a8ba047e00:"1000400000000000000000","7b893286427e72db219a21fc4dcd5fbf59283c31":"10000000000000000000000",ce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4:"2000000000000000000000","66ec16ee9caab411c55a6629e318de6ee216491d":"865000000000000000000","30b66150f1a63457023fdd45d0cc6cb54e0c0f06":"1000000000000000000000","87183160d172d2e084d327b86bcb7c1d8e6784ef":"4000086000000000000000",c420388fbee84ad656dd68cdc1fbaa9392780b34:"187767000000000000000","90f774c9147dde90853ddc43f08f16d455178b8c":"4000000000000000000000","1e1d7a5f2468b94ea826982dbf2125793c6e4a5a":"999940000000000000000","8043fdd0bc4c973d1663d55fc135508ec5d4f4fa":"20000000000000000000","7bca1da6c80a66baa5db5ac98541c4be276b447d":"679000000000000000000","73550beb732ba9ddafda7ae406e18f7feb0f8bb2":"2800000000000000000000",adc19ec835afe3e58d87dc93a8a9213c90451326:"1971200000000000000000","821d798af19989c3ae5b84a7a7283cd7fda1fabe":"20000000000000000000000","4c4e6f13fb5e3f70c3760262a03e317982691d10":"100000000000000000000","664e43119870af107a448db1278b044838ffcdaf":"400000000000000000000","8da1178f55d97772bb1d24111a404a4f8715b95d":"878149000000000000000","5e6e9747e162f8b45c656e0f6cae7a84bac80e4e":"2000000000000000000000",c7eac31abce6d5f1dea42202b6a674153db47a29:"591000000000000000000",d96711540e2e998343d4f590b6fc8fac3bb8b31d:"1758944000000000000000","9da4ec407077f4b9707b2d9d2ede5ea5282bf1df":"4000000000000000000000",f60c1b45f164b9580e20275a5c39e1d71e35f891:"2000000000000000000000",eb6394a7bfa4d28911d5a5b23e93f35e340c2294:"78000000000000000000",a89ac93b23370472daac337e9afdf642543f3e57:"10000000000000000000000",bb618e25221ad9a740b299ed1406bc3934b0b16d:"1000000000000000000000","817ac33bd8f847567372951f4a10d7a91ce3f430":"200015000000000000000",fe6a895b795cb4bf85903d3ce09c5aa43953d3bf:"3400000000000000000000","3673954399f6dfbe671818259bb278e2e92ee315":"200000000000000000000000",df0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5:"4367636000000000000000",ff12e49d8e06aa20f886293c0b98ed7eff788805:"4000000000000000000000","5aef16a226dd68071f2483e1da42598319f69b2c":"2000000000000000000000","0266ab1c6b0216230b9395443d5fa75e684568c6":"1000000000000000000000","14a7352066364404db50f0d0d78d754a22198ef4":"1880000000000000000000","444caf79b71338ee9aa7c733b02acaa7dc025948":"40000000000000000000","64e2de21200b1899c3a0c0653b5040136d0dc842":"20000000000000000000000","36e156610cd8ff64e780d89d0054385ca76755aa":"14000000000000000000000","0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b":"1185000000000000000000","38bf2a1f7a69de0e2546adb808b36335645da9ff":"2000320000000000000000","39f44663d92561091b82a70dcf593d754005973a":"199999000000000000000","24b9e6644f6ba4cde126270d81f6ab60f286dff4":"133700000000000000000","9b59eb213b1e7565e45047e04ea0374f10762d16":"2000000000000000000000","309544b6232c3dd737f945a03193d19b5f3f65b9":"1087440000000000000000",b28bb39f3466517cd46f979cf59653ee7d8f152e:"450000000000000000000","9da8e22ca10e67fea44e525e4751eeac36a31194":"260000000000000000000","4f8ae80238e60008557075ab6afe0a7f2e74d729":"100000000000000000000","74ed33acf43f35b98c9230b9e6642ecb5330839e":"681872000000000000000","22842ab830da509913f81dd1f04f10af9edd1c55":"2000000000000000000000",a8f37f0ab3a1d448a9e3ce40965f97a646083a34:"329800000000000000000","582b70669c97aab7d68148d8d4e90411e2810d56":"999972000000000000000",d5e55100fbd1956bbed2ca518d4b1fa376032b0b:"100000000000000000000",b7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b:"300000000000000000000",e081ca1f4882db6043d5a9190703fde0ab3bf56d:"400000000000000000000",c02077449a134a7ad1ef7e4d927affeceeadb5ae:"18200000000000000000",e09fea755aee1a44c0a89f03b5deb762ba33006f:"1100070000000000000000",b3717731dad65132da792d876030e46ac227bb8a:"1000000000000000000000","157eb3d3113bd3b597714d3a954edd018982a5cb":"2000000000000000000000",dc57345b38e0f067c9a31d9deac5275a10949321:"200000000000000000000","40ea5044b204b23076b1a5803bf1d30c0f88871a":"14000000000000000000000","2bab0fbe28d58420b52036770a12f9952aea6911":"3820000000000000000000",adaa0e548c035affed64ca678a963fabe9a26bfd:"70000000000000000000",bb48eaf516ce2dec3e41feb4c679e4957641164f:"3820000000000000000000","7693bdeb6fc82b5bca721355223175d47a084b4d":"22000000000000000000000","03cb98d7acd817de9d886d22fab3f1b57d92a608":"1600000000000000000000",f88900db737955b1519b1a7d170a18864ce590eb:"18200000000000000000","757fa55446c460968bb74b5ebca96c4ef2c709c5":"1015200000000000000000",da855d53477f505ec4c8d5e8bb9180d38681119c:"5600000000000000000000",e41aea250b877d423a63ba2bce2f3a61c0248d56:"260000000000000000000","8262169b615870134eb4ac6c5f471c6bf2f789fc":"462500000000000000000","66b0c100c49149935d14c0dc202cce907cea1a3d":"1970000000000000000000","854c0c469c246b83b5d1b3eca443b39af5ee128a":"1600000000000000000000",eb6810691d1ae0d19e47bd22cebee0b3ba27f88a:"2499922000000000000000","24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9":"1000000000000000000000",e31b4eef184c24ab098e36c802714bd4743dd0d4:"200000000000000000000","99b8c824869de9ed24f3bff6854cb6dd45cc3f9f":"1880000000000000000000","2ae73a79aea0278533accf21070922b1613f8f32":"3097417000000000000000",ddbd2b932c763ba5b1b7ae3b362eac3e8d40121a:"10000000000000000000000","1b4bbcb18165211b265b280716cb3f1f212176e8":"472325000000000000000",e177e0c201d335ba3956929c571588b51c5223ae:"2000000000000000000000","1945fe377fe6d4b71e3e791f6f17db243c9b8b0f":"2185500000000000000000","3e9b34a57f3375ae59c0a75e19c4b641228d9700":"17900000000000000000",a4d6c82eddae5947fbe9cdfbd548ae33d91a7191:"8000000000000000000000",bad4425e171c3e72975eb46ac0a015db315a5d8f:"2000000000000000000000",a2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742:"4639390000000000000000",b61c34fcacda701a5aa8702459deb0e4ae838df8:"35000000000000000000000","145e0600e2a927b2dd8d379356b45a2e7d51d3ae":"2545843000000000000000","8df339214b6ad1b24663ce716034749d6ef838d9":"11000000000000000000000","8fd9a5c33a7d9edce0997bdf77ab306424a11ea9":"2000000000000000000000","097da12cfc1f7c1a2464def08c29bed5e2f851e9":"20000000000000000000",ddabf13c3c8ea4e3d73d78ec717afafa430e5479:"41600000000000000000000","9eeb07bd2b7890195e7d46bdf2071b6617514ddb":"2000000000000000000000","819af9a1c27332b1c369bbda1b3de1c6e933d640":"314308000000000000000",d7d2c6fca8ad1f75395210b57de5dfd673933909:"340000000000000000000",cdd5d881a7362c9070073bdfbc75e72453ac510e:"842000000000000000000",e9ac36376efa06109d40726307dd1a57e213eaa9:"194000000000000000000","1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a":"346000000000000000000","3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a":"150000000000000000000","6c1ddd33c81966dc8621776071a4129482f2c65f":"40000000000000000000000","2ccb66494d0af689abf9483d365d782444e7dead":"1000000000000000000000","19571a2b8f81c6bcf66ab3a10083295617150003":"492500000000000000000","38ac664ee8e0795e4275cb852bcba6a479ad9c8d":"20000000000000000000",c4803bb407c762f90b7596e6fde194931e769590:"4000000000000000000000","93507e9e8119cbceda8ab087e7ecb071383d6981":"14000000000000000000000",b672734afcc224e2e609fc51d4f059732744c948:"295500000000000000000",fbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f:"40000000000000000000","8c81410ea8354cc5c65c41be8bd5de733c0b111d":"9550000000000000000000","942c6b8c955bc0d88812678a236725b32739d947":"1550000000000000000000",d2e817738abf1fb486583f80c350318bed860c80:"240010000000000000000",bff5df769934b8943ca9137d0efef2fe6ebbb34e:"100000000000000000000","6c4e426e8dc005dfa3516cb8a680b02eea95ae8e":"1337000000000000000000",f645dd7c890093e8e4c8aa92a6bb353522d3dc98:"134000000000000000000","4bac846af4169f1d95431b341d8800b22180af1a":"20000000000000000000","0514954c3c2fb657f9a06f510ea22748f027cdd3":"400000000000000000000","163dca73d7d6ea3f3e6062322a8734180c0b78ef":"2941400000000000000000",feaca2ac74624bf348dac9985143cfd652a4be55:"26148245000000000000000",fe80e9232deaff19baf99869883a4bdf0004e53c:"855680000000000000000","17108dab2c50f99de110e1b3b3b4cd82f5df28e7":"980000000000000000000","837a645dc95c49549f899c4e8bcf875324b2f57c":"600400000000000000000","762998e1d75227fced7a70be109a4c0b4ed86414":"20000000000000000000",c0a7e8435dff14c25577739db55c24d5bf57a3d9:"49250000000000000000000",aead88d689416b1c91f2364421375b7d3c70fb2e:"2000000000000000000000","9279b2228cec8f7b4dda3f320e9a0466c2f585ca":"5000000000000000000000","36726f3b885a24f92996da81625ec8ad16d8cbe6":"1543723000000000000000","3951e48e3c869e6b72a143b6a45068cdb9d466d0":"20000000000000000000",f5d61ac4ca95475e5b7bffd5f2f690b316759615:"31040000000000000000000","158a0d619253bf4432b5cd02c7b862f7c2b75636":"135733000000000000000",e56d431324c92911a1749df292709c14b77a65cd:"8200000000000000000000","9976947eff5f6ae5da08dd541192f378b428ff94":"8000000000000000000000","83210583c16a4e1e1dac84ebd37e3d0f7c57eba4":"2000000000000000000000",dcb64df43758c7cf974fa660484fbb718f8c67c1:"20000000000000000000000",d4205592844055b3c7a1f80cefe3b8eb509bcde7:"178973000000000000000",d0648a581b3508e135a2935d12c9657045d871ca:"8022000000000000000000",e7d17524d00bad82497c0f27156a647ff51d2792:"20000000000000000000","21582e99e502cbf3d3c23bdffb76e901ac6d56b2":"100000000000000000000",e61f280915c774a31d223cf80c069266e5adf19b:"880000000000000000000","03c91d92943603e752203e05340e566013b90045":"802200000000000000000","22561c5931143536309c17e832587b625c390b9a":"4000000000000000000000",e399c81a1d701b44f0b66f3399e66b275aaaf8c1:"1000000000000000000000","7f8dbce180ed9c563635aad2d97b4cbc428906d9":"2674000000000000000000","9f61beb46f5e853d0a8521c7446e68e34c7d0973":"560000000000000000000","6d3f2ba856ccbb0237fa7661156b14b013f21240":"1000000000000000000000","5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc":"2172412000000000000000",b600feab4aa96c537504d96057223141692c193a:"400000000000000000000",fab487500df20fb83ebed916791d561772adbebf:"1999980000000000000000",f8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109:"200000000000000000000","3f1bc420c53c002c9e90037c44fe6a8ef4ddc962":"173000000000000000000","82e577b515cb2b0860aafe1ce09a59e09fe7d040":"600000000000000000000",bc999e385c5aebcac8d6f3f0d60d5aa725336d0d:"2000000000000000000000",e16ce35961cd74bd590d04c4ad4a1989e05691c6:"146000000000000000000",eb76424c0fd597d3e341a9642ad1ee118b2b579d:"4000000000000000000000",c440c7ca2f964b6972ef664a2261dde892619d9c:"20000000000000000000000","460d5355b2ceeb6e62107d81e51270b26bf45620":"2005500000000000000000",fcada300283f6bcc134a91456760b0d77de410e0:"2000000000000000000000",be8d7f18adfe5d6cc775394989e1930c979d007d:"1000000000000000000000",a7f9220c8047826bd5d5183f4e676a6d77bfed36:"153368000000000000000","98d204f9085f8c8e7de23e589b64c6eff692cc63":"2000000000000000000000","5a2916b8d2e8cc12e207ab464d433e2370d823d9":"2000000000000000000000",c42d6aeb710e3a50bfb44d6c31092969a11aa7f3:"150052000000000000000","04ce45f600db18a9d0851b29d9393ebdaafe3dc5":"20000000000000000000","7a1370a742ec2687e761a19ac5a794329ee67404":"2999988000000000000000",da2ad58e77deddede2187646c465945a8dc3f641:"660000000000000000000",ec58bc0d0c20d8f49465664153c5c196fe59e6be:"400000000000000000000",f8063af4cc1dd9619ab5d8bff3fcd1faa8488221:"2000000000000000000000",b9231eb26e5f9e4b4d288f03906704fab96c87d6:"19700000000000000000000","6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e":"199600000000000000000",e49936a92a8ccf710eaac342bc454b9b14ebecb1:"2000000000000000000000","21dbdb817a0d8404c6bdd61504374e9c43c9210e":"9999917000000000000000","5cebe30b2a95f4aefda665651dc0cf7ef5758199":"18200000000000000000","597038ff91a0900cbbab488af483c790e6ec00a0":"10000000000000000000000","0fa5d8c5b3f294efd495ab69d768f81872508548":"2000000000000000000000",feef3b6eabc94affd3310c1c4d0e65375e131119:"20000000000000000000","1ce81d31a7923022e125bf48a3e03693b98dc9dd":"2000000000000000000000","5887dc6a33dfed5ac1edefe35ef91a216231ac96":"250000000000000000000","4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2":"2235000000000000000000",e845e387c4cbdf982280f6aa01c40e4be958ddb2:"25000000000000000000000","71d9494e50c5dd59c599dba3810ba1755e6537f0":"4000000000000000000000","6eb5578a6bb7c32153195b0d8020a6914852c059":"660000000000000000000000","543f8c674e2462d8d5daa0e80195a8708e11a29e":"63940000000000000000",a0459ef3693aacd1647cd5d8929839204cef53be:"1000000000000000000000",dda371e600d30688d4710e088e02fdf2b9524d5f:"6920000000000000000000",dd4dd6d36033b0636fcc8d0938609f4dd64f4a86:"60000000000000000000","3bd624b548cb659736907ed8aa3c0c705e24b575":"2000000000000000000000","414599092e879ae25372a84d735af5c4e510cd6d":"400000000000000000000","3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373":"1951100000000000000000","5948bc3650ed519bf891a572679fd992f8780c57":"197000000000000000000","8b74a7cb1bb8c58fce267466a30358adaf527f61":"13620000000000000000000","3f10800282d1b7ddc78fa92d8230074e1bf6aeae":"4925000000000000000000","32dbb6716c54e83165829a4abb36757849b6e47d":"1000000000000000000000",e6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7:"1460000000000000000000","052a58e035f1fe9cdd169bcf20970345d12b9c51":"1490000000000000000000","581bdf1bb276dbdd86aedcdb397a01efc0e00c5b":"1000000000000000000000","604e9477ebf4727c745bcabbedcb6ccf29994022":"1000060000000000000000","59b96deb8784885d8d3b4a166143cc435d2555a1":"1337000000000000000000","37d980a12ee3bf23cc5cdb63b4ae45691f74c837":"2000000000000000000000","3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f":"3000000000000000000000","49c941e0e5018726b7290fc473b471d41dae80d1":"500000000000000000000",f26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0:"775000000000000000000",d0944aa185a1337061ae20dc9dd96c83b2ba4602:"200000000000000000000","904caa429c619d940f8e6741826a0db692b19728":"1000000000000000000000",b95c9b10aa981cf4a67a71cc52c504dee8cf58bd:"4000000000000000000000","15874686b6733d10d703c9f9bec6c52eb8628d67":"2000000000000000000000","1374facd7b3f8d68649d60d4550ee69ff0484133":"269700000000000000000",b0e469c886593815b3495638595daef0665fae62:"1940000000000000000000","47ff6feb43212060bb1503d7a397fc08f4e70352":"2000000000000000000000",c60b04654e003b4683041f1cbd6bc38fda7cdbd6:"2000000000000000000000","3ecdb532e397579662b2a46141e78f8235936a5f":"66850000000000000000",b3a8c2cb7d358e5739941d945ba9045a023a8bbb:"1000000000000000000000","32ef5cdc671df5562a901aee5db716b9be76dcf6":"2000000000000000000000",c94110e71afe578aa218e4fc286403b0330ace8d:"2000000000000000000000","9b43dcb95fde318075a567f1e6b57617055ef9e8":"3940000000000000000000",efeea010756f81da4ba25b721787f058170befbd:"32470000000000000000",c88255eddcf521c6f81d97f5a42181c9073d4ef1:"290793000000000000000",dd47189a3e64397167f0620e484565b762bfbbf4:"1850000000000000000000","82f39b2758ae42277b86d69f75e628d958ebcab0":"40000000000000000000000",e37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5:"10000000000000000000000","62331df2a3cbee3520e911dea9f73e905f892505":"2000000000000000000000","8c5d16ed65e3ed7e8b96ca972bc86173e3500b03":"2000000000000000000000","8b9841862e77fbbe919470935583a93cf027e450":"2000054000000000000000",c8dd27f16bf22450f5771b9fe4ed4ffcb30936f4:"197000000000000000000",dec8a1a898f1b895d8301fe64ab3ad5de941f689:"787803000000000000000","61c4ee7c864c4d6b5e37ea1331c203739e826b2f":"30063000000000000000","3250e3e858c26adeccadf36a5663c22aa84c4170":"5000000000000000000000","299e0bca55e069de8504e89aca6eca21d38a9a5d":"55500000000000000000",d50f7fa03e389876d3908b60a537a6706304fb56:"100000000000000000000","69073269729e6414b26ec8dc0fd935c73b579f1e":"30000000000000000000000","14fcd1391e7d732f41766cdacd84fa1deb9ffdd2":"2000000000000000000000","823768746737ce6da312d53e54534e106f967cf3":"20000000000000000000","882f75708386653c80171d0663bfe30b017ed0ad":"2000000000000000000000",a25b086437fd2192d0a0f64f6ed044f38ef3da32:"335000000000000000000","5a9c8b69fc614d69564999b00dcb42db67f97e90":"3429227000000000000000",a2b701f9f5cdd09e4ba62baebae3a88257105885:"1000000000000000000000","5e7b8c54dc57b0402062719dee7ef5e37ea35d62":"2877224000000000000000","7ffabfbc390cbe43ce89188f0868b27dcb0f0cad":"6370000000000000000000",b5cdbc4115406f52e5aa85d0fea170d2979cc7ba:"1337000000000000000000","263814309de4e635cf585e0d365477fc40e66cf7":"146000000000000000000","24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4":"200200000000000000000",d3a941c961e8ca8b1070f23c6d6d0d2a758a4444:"200000000000000000000",a97beb3a48c45f1528284cb6a95f7de453358ec6:"31000000000000000000000","4dd131c74a068a37c90aded4f309c2409f6478d3":"400008000000000000000","653675b842d7d8b461f722b4117cb81dac8e639d":"31000000000000000000","561be9299b3e6b3e63b79b09169d1a948ae6db01":"500000000000000000000",dc067ed3e12d711ed475f5156ef7e71a80d934b9:"9550000000000000000000","08d97eadfcb7b064e1ccd9c8979fbee5e77a9719":"266063000000000000000","6e4c2ab7db026939dbd3bc68384af660a61816b2":"167000000000000000000",bf4c73a7ede7b164fe072114843654e4d8781dde:"2000000000000000000000",f504943aaf16796e0b341bbcdf21d11cc586cdd1:"9000000000000000000000",ea81ca8638540cd9d4d73d060f2cebf2241ffc3e:"1970000000000000000000","9944fee9d34a4a880023c78932c00b59d5c82a82":"750022000000000000000","12f460ae646cd2780fd35c50a6af4b9accfa85c6":"1000000000000000000000","4e232d53b3e6be8f895361d31c34d4762b12c82e":"1760000000000000000000","6bb2aca23fa1626d18efd6777fb97db02d8e0ae4":"40000000000000000000000",bc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b:"12000000000000000000000","2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0":"200000000000000000000","21ecb2dfa65779c7592d041cd2105a81f4fd4e46":"1000000000000000000000","34318625818ec13f11835ae97353ce377d6f590a":"1520000000000000000000",a7ef35ce87eda6c28df248785815053ec97a5045:"4999998000000000000000","6a514e6242f6b68c137e97fea1e78eb555a7e5f7":"20000000000000000000","9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b":"6000000000000000000000","43cc08d0732aa58adef7619bed46558ad7774173":"4443926000000000000000","12e9a4ad2ad57484dd700565bddb46423bd9bd31":"19999800000000000000000",ebbeeb259184a6e01cccfc2207bbd883785ac90a:"619966000000000000000","704ab1150d5e10f5e3499508f0bf70650f028d4b":"4000000000000000000000",fc361105dd90f9ede566499d69e9130395f12ac8:"395000000000000000000000",c1b9a5704d351cfe983f79abeec3dbbbae3bb629:"20000000000000000000","66f50406eb1b11a946cab45927cca37470e5a208":"2000000000000000000000","53942e7949d6788bb780a7e8a0792781b1614b84":"15899600000000000000000","32ba9a7d0423e03a525fe2ebeb661d2085778bd8":"20000000000000000000000","11c0358aa6479de21866fe21071924b65e70f8b9":"36400000000000000000000","76cb9c8b69f4387675c48253e234cb7e0d74a426":"7396300000000000000000","9f5f44026b576a4adb41e95961561d41039ca391":"250000000000000000000","533a73a4a2228eee05c4ffd718bbf3f9c1b129a7":"6000000000000000000000",dcc52d8f8d9fc742a8b82767f0555387c563efff:"500000000000000000000",f456a75bb99655a7412ce97da081816dfdb2b1f2:"200000000000000000000",d0c101fd1f01c63f6b1d19bc920d9f932314b136:"20000000000000000000000",dabc225042a6592cfa13ebe54efa41040878a5a2:"259550000000000000000","38eec6e217f4d41aa920e424b9525197041cd4c6":"4428166000000000000000","8a247d186510809f71cffc4559471c3910858121":"1790000000000000000000","4f152b2fb8659d43776ebb1e81673aa84169be96":"2000000000000000000000",b4496ddb27799a222457d73979116728e8a1845b:"2610331000000000000000","4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6":"1400000000000000000000","0f7bea4ef3f73ae0233df1e100718cbe29310bb0":"2000000000000000000000",c836e24a6fcf29943b3608e662290a215f6529ea:"292000000000000000000","1765361c2ec2f83616ce8363aae21025f2566f40":"5000000000000000000000",b6e6c3222b6b6f9be2875d2a89f127fb64100fe2:"8008000000000000000000","01bbc14f67af0639aab1441e6a08d4ce7162090f":"1309500000000000000000",af2058c7282cf67c8c3cf930133c89617ce75d29:"6920000000000000000000","464d9c89cce484df000277198ed8075fa63572d1":"20000000000000000000","50cd97e9378b5cf18f173963236c9951ef7438a5":"1400000000000000000000",cb47bd30cfa8ec5468aaa6a94642ced9c819c8d4:"4000000000000000000000","6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50":"2000000000000000000000","09b7a988d13ff89186736f03fdf46175b53d16e0":"6000000000000000000000","5bfafe97b1dd1d712be86d41df79895345875a87":"500000000000000000000",a06cd1f396396c0a64464651d7c205efaf387ca3:"1999944000000000000000",fc0096b21e95acb8d619d176a4a1d8d529badbef:"384601000000000000000",a74444f90fbb54e56f3ac9b6cfccaa4819e4614a:"20000000000000000000","3c15b3511df6f0342e7348cc89af39a168b7730f":"1000000000000000000000","3d6ff82c9377059fb30d9215723f60c775c891fe":"250066000000000000000",a524a8cccc49518d170a328270a2f88133fbaf5d:"294500000000000000000","8a7a06be199a3a58019d846ac9cbd4d95dd757de":"3000200000000000000000",d744ac7e5310be696a63b003c40bd039370561c6:"1670000000000000000000",fe362688845fa244cc807e4b1130eb3741a8051e:"1000000000000000000000",b2d0360515f17daba90fcbac8205d569b915d6ac:"6000000000000000000000",c53594c7cfb2a08f284cc9d7a63bbdfc0b319732:"49200000000000000000000",b3c228731d186d2ded5b5fbe004c666c8e469b86:"29000000000000000000","63e414603e80d4e5a0f5c18774204642258208e4":"5000000000000000000000","826ce5790532e0548c6102a30d3eac836bd6388f":"18000000000000000000000",c5e812f76f15f2e1f2f9bc4823483c8804636f67:"73000000000000000000","116fef5e601642c918cb89160fc2293ba71da936":"802200000000000000000","08b84536b74c8c01543da88b84d78bb95747d822":"200000000000000000000","04a80afad53ef1f84165cfd852b0fdf1b1c24ba8":"58000000000000000000","2b0362633614bfcb583569438ecc4ea57b1d337e":"20000000000000000000000",e95179527deca5916ca9a38f215c1e9ce737b4c9:"10000000000000000000000","2c5df866666a194b26cebb407e4a1fd73e208d5e":"1000000000000000000000","529e824fa072582b4032683ac7eecc1c04b4cac1":"2000000000000000000000","78634371e17304cbf339b1452a4ce438dc764cce":"10000000000000000000000",e172dfc8f80cd1f8cd8539dc26082014f5a8e3e8:"3000000000000000000000",b07618328a901307a1b7a0d058fcd5786e9e72fe:"30239500000000000000000",b0571153db1c4ed7acaefe13ecdfdb72e7e4f06a:"80520000000000000000000",ad910a23d6850613654af786337ad2a70868ac6d:"1999800000000000000000","4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3":"2000000000000000000000",be2471a67f6047918772d0e36839255ed9d691ae:"4000000000000000000000","28868324337e11ba106cb481da962f3a8453808d":"2000000000000000000000",d8f94579496725b5cb53d7985c989749aff849c0:"17000000000000000000000","4981c5ff66cc4e9680251fc4cd2ff907cb327865":"750000000000000000000",fd2872d19e57853cfa16effe93d0b1d47b4f93fb:"4000000000000000000000","63c8dfde0b8e01dadc2e748c824cc0369df090b3":"3880000000000000000000",c4dd048bfb840e2bc85cb53fcb75abc443c7e90f:"3716000000000000000000",f579714a45eb8f52c3d57bbdefd2c15b2e2f11df:"1560000000000000000000",cc7b0481cc32e6faef2386a07022bcb6d2c3b4fc:"3160000000000000000000",a0aa5f0201f04d3bbeb898132f7c11679466d901:"36600000000000000000",f3df63a97199933330383b3ed7570b96c4812334:"2000000000000000000000","42732d8ef49ffda04b19780fd3c18469fb374106":"425068000000000000000","6f92d6e4548c78996509ee684b2ee29ba3c532b4":"1000000000000000000000",fff4bad596633479a2a29f9a8b3f78eefd07e6ee:"100000000000000000000",ac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f:"200000000000000000000","553b6b1c57050e88cf0c31067b8d4cd1ff80cb09":"400000000000000000000","84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed":"619333000000000000000","9f4a7195ac7c151ca258cafda0cab083e049c602":"1537100000000000000000","2955c357fd8f75d5159a3dfa69c5b87a359dea8c":"2000000000000000000000","11d7844a471ef89a8d877555583ceebd1439ea26":"10098000000000000000000","34b454416e9fb4274e6addf853428a0198d62ee1":"407000000000000000000","308dd21cebe755126704b48c0f0dc234c60ba9b1":"200000000000000000000","381db4c8465df446a4ce15bf81d47e2f17c980bf":"32000000000000000000000","1abc4e253b080aeb437984ab05bca0979aa43e1c":"1000000000000000000000","53e35b12231f19c3fd774c88fec8cbeedf1408b2":"512000000000000000000","69e2e2e704307ccc5b5ca3f164fece2ea7b2e512":"7000000000000000000000","1914f1eb95d1277e93b6e61b668b7d77f13a11a1":"970000000000000000000","50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf":"200000000000000000000","46224f32f4ece5c8867090d4409d55e50b18432d":"6000000000000000000000",ff83855051ee8ffb70b4817dba3211ed2355869d:"400000000000000000000",fb39189af876e762c71d6c3e741893df226cedd6:"4000000000000000000000","9875623495a46cdbf259530ff838a1799ec38991":"2000000000000000000000",e1b39b88d9900dbc4a6cdc481e1060080a8aec3c:"2000000000000000000000","5baf6d749620803e8348af3710e5c4fbf20fc894":"5003680000000000000000","9c54e4ed479a856829c6bb42da9f0b692a75f728":"7520000000000000000000","486a6c8583a84484e3df43a123837f8c7e2317d0":"323378000000000000000",d235d15cb5eceebb61299e0e827fa82748911d89:"4000000000000000000000","47d792a756779aedf1343e8883a6619c6c281184":"2000000000000000000000","70c213488a020c3cfb39014ef5ba6404724bcaa3":"1940000000000000000000","133c490fa5bf7f372888e607d958fab7f955bae1":"1580000000000000000000",a9e194661aac704ee9dea043974e9692ded84a5d:"482400000000000000000",bc6b58364bf7f1951c309e0cba0595201cd73f9a:"1812400000000000000000","2309d34091445b3232590bd70f4f10025b2c9509":"10000000000000000000000",d89bc271b27ba3ab6962c94a559006ae38d5f56a:"2000000000000000000000",ff0e2fec304207467e1e3307f64cbf30af8fd9cd:"2000000000000000000000",c0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d:"64234000000000000000",b66f92124b5e63035859e390628869dbdea9485e:"9850000000000000000000",a9e6e25e656b762558619f147a21985b8874edfe:"2000000000000000000000",a43e1947a9242b355561c30a829dfeeca2815af8:"3878255000000000000000","8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb":"3000000000000000000000",aca2a838330b17302da731d30db48a04f0f207c1:"1337000000000000000000",fa60868aafd4ff4c5c57914b8ed58b425773dfa9:"8557400000000000000000","1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8":"1000000000000000000000",b4b185d943ee2b58631e33dff5af6854c17993ac:"1000000000000000000000","7719888795ad745924c75760ddb1827dffd8cda8":"1999980000000000000000",ccd521132d986cb96869842622a7dda26c3ed057:"2000000000000000000000","253e32b74ea4490ab92606fda0aa257bf23dcb8b":"10000000000000000000000","3712367e5e55a96d5a19168f6eb2bc7e9971f869":"1000000000000000000000","8f29a14a845ad458f2d108b568d813166bcdf477":"10000000000000000000000","51a8c2163602a32ee24cf4aa97fd9ea414516941":"62904000000000000000","61cea71fa464d62a07063f920b0cc917539733d8":"1670000000000000000000","6f81f3abb1f933b1df396b8e9cc723a89b7c9806":"280000000000000000000","61b1b8c012cd4c78f698e470f90256e6a30f48dd":"200000000000000000000","4f3f2c673069ac97c2023607152981f5cd6063a0":"600000000000000000000",e2efa5fca79538ce6068bf31d2c516d4d53c08e5:"131200000000000000000","2383c222e67e969190d3219ef14da37850e26c55":"2000000000000000000000",eac3af5784927fe9a598fc4eec38b8102f37bc58:"1000000000000000000000","4fe56ab3bae1b0a44433458333c4b05a248f8241":"2180000000000000000000",fe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd:"1970000000000000000000",f48e1f13f6af4d84b371d7de4b273d03a263278e:"600000000000000000000","1ba9228d388727f389150ea03b73c82de8eb2e09":"7258000000000000000000","37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb":"2000000000000000000000",e33840d8bca7da98a6f3d096d83de78b70b71ef8:"2000000000000000000000","8e7fd23848f4db07906a7d10c04b21803bb08227":"1000000000000000000000","07d4334ec385e8aa54eedaeadb30022f0cdfa4ab":"2629946000000000000000",d4b085fb086f3d0d68bf12926b1cc3142cae8770:"3700000000000000000000","5a87f034e6f68f4e74ffe60c64819436036cf7d7":"20000000000000000000",c00ab080b643e1c2bae363e0d195de2efffc1c44:"500000000000000000000","22f3c779dd79023ea92a78b65c1a1780f62d5c4a":"1970000000000000000000",c7d5c7054081e918ec687b5ab36e973d18132935:"182000000000000000000","9662ee021926682b31c5f200ce457abea76c6ce9":"670500000000000000000","116a09df66cb150e97578e297fb06e13040c893c":"2000000000000000000000",b7240af2af90b33c08ae9764103e35dce3638428:"8464547000000000000000",e8b28acda971725769db8f563d28666d41ddab6c:"10000000000000000000000","17d4918dfac15d77c47f9ed400a850190d64f151":"2000000000000000000000",c42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574:"149800000000000000000","5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0":"733202000000000000000","5869fb867d71f1387f863b698d09fdfb87c49b5c":"3666000000000000000000",d49a75bb933fca1fca9aa1303a64b6cb44ea30e1:"10000000000000000000000","76331e30796ce664b2700e0d4153700edc869777":"2000000000000000000000","8a5fb75793d043f1bcd43885e037bd30a528c927":"356500000000000000000",fc0ee6f7c2b3714ae9916c45566605b656f32441:"1760000000000000000000",bf50ce2e264b9fe2b06830617aedf502b2351b45:"1000000000000000000000","0f6000de1578619320aba5e392706b131fb1de6f":"499986000000000000000",c953f934c0eb2d0f144bdab00483fd8194865ce7:"2000000000000000000000","24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92":"1337000000000000000000",c6cd68ec35362c5ad84c82ad4edc232125912d99:"27750000000000000000000","2a67660a1368efcd626ef36b2b1b601980941c05":"133700000000000000000","9deb39027af877992b89f2ec4a1f822ecdf12693":"2000000000000000000000",c12f881fa112b8199ecbc73ec4185790e614a20f:"2000000000000000000000",d58a52e078a805596b0d56ea4ae1335af01c66eb:"267400000000000000000","4d7cfaa84cb33106800a8c802fb8aa463896c599":"1790000000000000000000","0ee391f03c765b11d69026fd1ab35395dc3802a0":"200000000000000000000",a192f06ab052d5fd7f94eea8318e827815fe677a:"131400000000000000000","8f0ab894bd3f4e697dbcfb859d497a9ba195994a":"39501652000000000000000","387eeafd6b4009deaf8bd5b85a72983a8dcc3487":"4000000000000000000000","03b0f17cd4469ddccfb7da697e82a91a5f9e7774":"20000000000000000000","11172b278ddd44eea2fdf4cb1d16962391c453d9":"935900000000000000000000","33d172ab075c51db1cd40a8ca8dbff0d93b843bb":"5727139000000000000000","909b5e763a39dcc795223d73a1dbb7d94ca75ac8":"2000000000000000000000","0ca12ab0b9666cf0cec6671a15292f2653476ab2":"210000600000000000000000","6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf":"800000000000000000000",d9e3857efd1e202a441770a777a49dcc45e2e0d3:"223500000000000000000",d703c6a4f11d60194579d58c2766a7ef16c30a29:"2000000000000000000000","838bd565f99fde48053f7917fe333cf84ad548ab":"200000000000000000000","8168edce7f2961cf295b9fcd5a45c06cdeda6ef5":"200000000000000000000",de50868eb7e3c71937ec73fa89dd8b9ee10d45aa:"1000000000000000000000","087498c0464668f31150f4d3c4bcdda5221ba102":"20000000000000000000","613fab44b16bbe554d44afd178ab1d02f37aeaa5":"2000000000000000000000",e2ee691f237ee6529b6557f2fcdd3dcf0c59ec63:"5450048000000000000000",a9ed377b7d6ec25971c1a597a3b0f3bead57c98f:"400000000000000000000","175feeea2aa4e0efda12e1588d2f483290ede81a":"200000000000000000000",b51ddcb4dd4e8ae6be336dd9654971d9fec86b41:"421133000000000000000","92c0f573eccf62c54810ee6ba8d1f113542b301b":"3384000000000000000000",a109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58:"1640000000000000000000",f74e6e145382b4db821fe0f2d98388f45609c69f:"100000000000000000000","378f37243f3ff0bef5e1dc85eb4308d9340c29f9":"2000200000000000000000","84e9949680bece6841b9a7e5250d08acd87d16cd":"200000000000000000000","882bd3a2e9d74110b24961c53777f22f1f46dc5d":"13370000000000000000000",acce01e0a70610dc70bb91e9926fa9957f372fba:"537000000000000000000",c5f687717246da8a200d20e5e9bcac60b67f3861:"28650000000000000000",e14617f6022501e97e7b3e2d8836aa61f0ff2dba:"200000000000000000000","076ee99d3548623a03b5f99859d2d785a1778d48":"200000000000000000000","2c424ee47f583cdce07ae318b6fad462381d4d2b":"4000000000000000000000",f98250730c4c61c57f129835f2680894794542f3:"4000000000000000000000",ed1b24b6912d51b334ac0de6e771c7c0454695ea:"40000000000000000000",ffd5170fd1a8118d558e7511e364b24906c4f6b3:"60085000000000000000",bf49c14898316567d8b709c2e50594b366c6d38c:"733202000000000000000","65ea26eabbe2f64ccccfe06829c25d4637520225":"700000000000000000000","5c5419565c3aad4e714e0739328e3521c98f05cc":"528000000000000000000",c53b50fd3b2b72bc6c430baf194a515585d3986d:"20000000000000000000","2b74c373d04bfb0fd60a18a01a88fbe84770e58c":"40000000000000000000",d97f4526dea9b163f8e8e33a6bcf92fb907de6ec:"284000000000000000000",a4a49f0bc8688cc9e6dc04e1e08d521026e65574:"200000000000000000000","575c00c2818210c28555a0ff29010289d3f82309":"10000000000000000000000","3f1233714f204de9de4ee96d073b368d8197989f":"38606000000000000000",f964d98d281730ba35b2e3a314796e7b42fedf67:"1543800000000000000000","1deec01abe5c0d952de9106c3dc30639d85005d6":"2000000000000000000000","12d60d65b7d9fc48840be5f891c745ce76ee501e":"21359400000000000000000","5c6136e218de0a61a137b2b3962d2a6112b809d7":"294273000000000000000",cd43258b7392a930839a51b2ef8ad23412f75a9f:"2000000000000000000000",db3f258ab2a3c2cf339c4499f75a4bd1d3472e9e:"1500000000000000000000","0edd4b580ff10fe06c4a03116239ef96622bae35":"197000000000000000000","1d157c5876c5cad553c912caf6ce2d5277e05c73":"2000000000000000000000",cda1b886e3a795c9ba77914e0a2fe5676f0f5ccf:"106024000000000000000",f50cbafd397edd556c0678988cb2af5c2617e0a2:"716000000000000000000","327bb49e754f6fb4f733c6e06f3989b4f65d4bee":"20000000000000000000",c44bdec8c36c5c68baa2ddf1d431693229726c43:"100000000000000000000000","34e2849bea583ab0cc37975190f322b395055582":"7780340000000000000000","9221c9ce01232665741096ac07235903ad1fe2fc":"126489000000000000000",ff3ded7a40d3aff0d7a8c45fa6136aa0433db457:"1999800000000000000000","10b5b34d1248fcf017f8c8ffc408ce899ceef92f":"267400000000000000000",f1a1f320407964fd3c8f2e2cc8a4580da94f01ea:"2000040000000000000000","6c800d4b49ba07250460f993b8cbe00b266a2553":"492500000000000000000",f827d56ed2d32720d4abf103d6d0ef4d3bcd559b:"26265000000000000000",ffb9c7217e66743031eb377af65c77db7359dcda:"40000000000000000000","530319db0a8f93e5bb7d4dbf4816314fbed8361b":"2000000000000000000000","9c28a2c4086091cb5da226a657ce3248e8ea7b6f":"280000000000000000000",db23a6fef1af7b581e772cf91882deb2516fc0a7:"200000000000000000000","6636d7ac637a48f61d38b14cfd4865d36d142805":"500000000000000000000",b3c260609b9df4095e6c5dff398eeb5e2df49985:"254030000000000000000","58e5c9e344c806650dacfc904d33edba5107b0de":"19100000000000000000","4f67396d2553f998785f704e07a639197dd1948d":"300080000000000000000","510d8159cc945768c7450790ba073ec0d9f89e30":"2560000000000000000000","593c48935beaff0fde19b04d309cd530a28e52ce":"4000000000000000000000",c27f4e08099d8cf39ee11601838ef9fc06d7fc41:"1790000000000000000000","07723e3c30e8b731ee456a291ee0e798b0204a77":"2000000000000000000000","0a652e2a8b77bd97a790d0e91361c98890dbb04e":"1000000000000000000000","671015b97670b10d5e583f3d62a61c1c79c5143f":"400000000000000000000","7cc24a6a958c20c7d1249660f7586226950b0d9a":"1970000000000000000000","6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2":"182000000000000000000","5c4368918ace6409c79eca80cdaae4391d2b624e":"4000000000000000000000","043707071e2ae21eed977891dc79cd5d8ee1c2da":"2000000000000000000000","39bfd978689bec048fc776aa15247f5e1d7c39a2":"20000000000000000000000","05915d4e225a668162aee7d6c25fcfc6ed18db03":"66348000000000000000","3f551ba93cd54693c183fb9ad60d65e1609673c9":"2000000000000000000000",a8c0b02faf02cb5519dda884de7bbc8c88a2da81:"16700000000000000000",bd0c5cd799ebc48642ef97d74e8e429064fee492:"326000000000000000000","0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639":"23031000000000000000","2ea5fee63f337a376e4b918ea82148f94d48a626":"1864242000000000000000",cc6c2df00e86eca40f21ffda1a67a1690f477c65:"3160000000000000000000",e5e37e19408f2cfbec83349dd48153a4a795a08f:"4200000000000000000000",f555a27bb1e2fd4e2cc784caee92939fc06e2fc9:"2000000000000000000000",dcf9719be87c6f46756db4891db9b611d2469c50:"1000000000000000000000","8e2f9034c9254719c38e50c9aa64305ed696df1e":"4728000000000000000000",a01f12d70f44aa7b113b285c22dcdb45873454a7:"18200000000000000000",bce40475d345b0712dee703d87cd7657fc7f3b62:"7750000000000000000000",bb19bf91cbad74cceb5f811db27e411bc2ea0656:"17600000000000000000",acc062702c59615d3444ef6214b8862b009a02ed:"1499936000000000000000","449ac4fbe383e36738855e364a57f471b2bfa131":"197000000000000000000000",ad59a78eb9a74a7fbdaefafa82eada8475f07f95:"500000000000000000000","6b6577f3909a4d6de0f411522d4570386400345c":"1880000000000000000000","79bf2f7b6e328aaf26e0bb093fa22da29ef2f471":"1790000000000000000000","940f715140509ffabf974546fab39022a41952d2":"1400000000000000000000","1d572edd2d87ca271a6714c15a3b37761dcca005":"127674000000000000000",d78ecd25adc86bc2051d96f65364866b42a426b7:"3877300000000000000000",f9729d48282c9e87166d5eef2d01eda9dbf78821:"99981000000000000000","17762560e82a93b3f522e0e524adb8612c3a7470":"1000000000000000000000",d500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced:"400000000000000000000",a11effab6cf0f5972cffe4d56596e98968144a8f:"1670000000000000000000",f64ecf2117931c6d535a311e4ffeaef9d49405b8:"2674000000000000000000","229cc4711b62755ea296445ac3b77fc633821cf2":"39481000000000000000",fc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d:"20000000000000000000",ea8527febfa1ade29e26419329d393b940bbb7dc:"1999944000000000000000",bce13e22322acfb355cd21fd0df60cf93add26c6:"200000000000000000000","19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6":"200000000000000000000",d2581a55ce23ab10d8ad8c44378f59079bd6f658:"8800000000000000000000","4073fa49b87117cb908cf1ab512da754a932d477":"1970000000000000000000",b6a82933c9eadabd981e5d6d60a6818ff806e36b:"400000000000000000000",c79806032bc7d828f19ac6a640c68e3d820fa442:"20000000000000000000","577b2d073c590c50306f5b1195a4b2ba9ecda625":"373600000000000000000","7f13d760498d7193ca6859bc95c901386423d76c":"5000000000000000000000","416784af609630b070d49a8bcd12235c6428a408":"20000000000000000000000",fbe71622bcbd31c1a36976e7e5f670c07ffe16de:"400000000000000000000",a5698035391e67a49013c0002079593114feb353:"240000000000000000000",ab2871e507c7be3965498e8fb462025a1a1c4264:"775000000000000000000","9c78fbb4df769ce2c156920cfedfda033a0e254a":"1970000000000000000000","95e6f93dac228bc7585a25735ac2d076cc3a4017":"6000000000000000000000","3c1f91f301f4b565bca24751aa1f761322709ddd":"1790000000000000000000",f77f9587ff7a2d7295f1f571c886bd33926a527c:"1999800000000000000000","755f587e5efff773a220726a13d0f2130d9f896b":"1000000000000000000000","8c6aa882ee322ca848578c06cb0fa911d3608305":"600000000000000000000","492cb5f861b187f9df21cd4485bed90b50ffe22d":"499928000000000000000","95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01":"136000000000000000000","4173419d5c9f6329551dc4d3d0ceac1b701b869e":"88000000000000000000","456ae0aca48ebcfae166060250525f63965e760f":"300000000000000000000","81f8de2c283d5fd4afbda85dedf9760eabbbb572":"3000000000000000000000",cd0af3474e22f069ec3407870dd770443d5b12b0:"2626262000000000000000","283c2314283c92d4b064f0aef9bb5246a7007f39":"200000000000000000000","29b3f561ee7a6e25941e98a5325b78adc79785f3":"100000000000000000000",cd4306d7f6947ac1744d4e13b8ef32cb657e1c00:"499986000000000000000",d9ec2efe99ff5cf00d03a8317b92a24aef441f7e:"2000000000000000000000","83dbf8a12853b40ac61996f8bf1dc8fdbaddd329":"970000000000000000000","9d93fab6e22845f8f45a07496f11de71530debc7":"1998000000000000000000",fd204f4f4aba2525ba728afdf78792cbdeb735ae:"2000000000000000000000","99fad50038d0d9d4c3fbb4bce05606ecadcd5121":"2000000000000000000000",d206aaddb336d45e7972e93cb075471d15897b5d:"600000000000000000000","428a1ee0ed331d7952ccbe1c7974b2852bd1938a":"2208370000000000000000","690228e4bb12a8d4b5e0a797b0c5cf2a7509131e":"1880000000000000000000",fa3a1aa4488b351aa7560cf5ee630a2fd45c3222:"878850000000000000000","0372e852582e0934344a0fed2178304df25d4628":"20000000000000000000000","35ea2163a38cdf9a123f82a5ec00258dae0bc767":"4000000000000000000000",d1fed0aee6f5dfd7e25769254c3cfad15adeccaa:"730000000000000000000",c05b740620f173f16e52471dc38b9c514a0b1526:"140000000000000000000","87e3062b2321e9dfb0875ce3849c9b2e3522d50a":"10000000000000000000000","303fbaebbe46b35b6e5b74946a5f99bc1585cae7":"878148000000000000000",e7a8e471eafb798f4554cc6e526730fd56e62c7d:"1000000000000000000000",ad7dd053859edff1cb6f9d2acbed6dd5e332426f:"1970000000000000000000",dc4345d6812e870ae90c568c67d2c567cfb4f03c:"6700000000000000000000",a6a08252c8595177cc2e60fc27593e2379c81fb1:"20055000000000000000",a9af21acbe482f8131896a228036ba51b19453c3:"49999000000000000000","86e3fe86e93da486b14266eadf056cbfa4d91443":"2000000000000000000000","744b03bba8582ae5498e2dc22d19949467ab53fc":"500000000000000000000",d3118ea3c83505a9d893bb67e2de142d537a3ee7:"20000000000000000000",b32f1c2689a5ce79f1bc970b31584f1bcf2283e7:"20000000000000000000","4828e4cbe34e1510afb72c2beeac8a4513eaebd9":"3940000000000000000000",b07bcc085ab3f729f24400416837b69936ba8873:"2000140000000000000000",bdc74873af922b9df474853b0fa7ff0bf8c82695:"3999000000000000000000","15ebd1c7cad2aff19275c657c4d808d010efa0f5":"200550000000000000000",cbc04b4d8b82caf670996f160c362940d66fcf1a:"6000000000000000000000","8197948121732e63d9c148194ecad46e30b749c8":"4000000000000000000000","69797bfb12c9bed682b91fbc593591d5e4023728":"10000000000000000000000",be9b8c34b78ee947ff81472eda7af9d204bc8466:"150000000000000000000",df3f57b8ee6434d047223def74b20f63f9e4f955:"250500000000000000000",a3ae1879007d801cb5f352716a4dd8ba2721de3d:"200000000000000000000000",cb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a:"1999944000000000000000",e03c00d00388ecbf4f263d0ac778bb41a57a40d9:"1000072000000000000000",fc2c1f88961d019c3e9ea33009152e0693fbf88a:"8000000000000000000000","8599cbd5a6a9dcd4b966be387d69775da5e33c6f":"58180000000000000000000",b7a31a7c38f3db09322eae11d2272141ea229902:"2000000000000000000000","231a15acc199c89fa9cb22441cc70330bdcce617":"500000000000000000000","3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165":"2000000000000000000000","92cfd60188efdfb2f8c2e7b1698abb9526c1511f":"2000000000000000000000","5c936f3b9d22c403db5e730ff177d74eef42dbbf":"75000000000000000000","931fe712f64207a2fd5022728843548bfb8cbb05":"2000000000000000000000","08d54e83ad486a934cfaeae283a33efd227c0e99":"1039000000000000000000",a339a3d8ca280e27d2415b26d1fc793228b66043:"1013600000000000000000","581f34b523e5b41c09c87c298e299cbc0e29d066":"1131607000000000000000",caaa68ee6cdf0d34454a769b0da148a1faaa1865:"7216000000000000000000","0838a7768d9c2aca8ba279adfee4b1f491e326f1":"200000000000000000000",dde77a4740ba08e7f73fbe3a1674912931742eeb:"19867021000000000000000",cbe810fe0fecc964474a1db97728bc87e973fcbd:"10000000000000000000000","86c28b5678af37d727ec05e4447790f15f71f2ea":"200000000000000000000",dd6c062193eac23d2fdbf997d5063a346bb3b470:"20000000000000000000","5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0":"345827000000000000000",e29d8ae452dcf3b6ac645e630409385551faae0a:"80276000000000000000","2fbc85798a583598b522166d6e9dda121d627dbc":"200000000000000000000","7a36aba5c31ea0ca7e277baa32ec46ce93cf7506":"20000000000000000000000",dbcbcd7a57ea9db2349b878af34b1ad642a7f1d1:"200000000000000000000","92aae59768eddff83cfe60bb512e730a05a161d7":"1708015000000000000000",a5e93b49ea7c509de7c44d6cfeddef5910deaaf2:"2000000000000000000000",e33d980220fab259af6a1f4b38cf0ef3c6e2ea1a:"2000000000000000000000","8ed0af11ff2870da0681004afe18b013f7bd3882":"4000000000000000000000",f23e5c633221a8f7363e65870c9f287424d2a960:"1380000000000000000000","96334bfe04fffa590213eab36514f338b864b736":"400000000000000000000",fa1f1971a775c3504fef5079f640c2c4bce7ac05:"2000000000000000000000",df44c47fc303ac76e74f97194cca67b5bb3c023f:"591000000000000000000","4b74f5e58e2edf76daf70151964a0b8f1de0663c":"324020000000000000000",e38b91b35190b6d9deed021c30af094b953fdcaa:"33340000000000000000","6b38de841fad7f53fe02da115bd86aaf662466bd":"1730000000000000000000","11675a25554607a3b6c92a9ee8f36f75edd3e336":"159800000000000000000","0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1":"94963000000000000000","0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424":"30000000000000000000000",fdd1195f797d4f35717d15e6f9810a9a3ff55460:"18200000000000000000","63a61dc30a8e3b30a763c4213c801cbf98738178":"1000000000000000000000",e5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3:"126260000000000000000",d6e09e98fe1300332104c1ca34fbfac554364ed9:"2000000000000000000000","5bd6862d517d4de4559d4eec0a06cad05e2f946e":"200000000000000000000","7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d":"22000000000000000000000",ae34861d342253194ffc6652dfde51ab44cad3fe:"466215000000000000000",f50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540:"3999952000000000000000",dd2bdfa917c1f310e6fa35aa8af16939c233cd7d:"400000000000000000000",e0060462c47ff9679baef07159cae08c29f274a9:"2000000000000000000000",b7d12e84a2e4c4a6345af1dd1da9f2504a2a996e:"200000000000000000000",f5500178cb998f126417831a08c2d7abfff6ab5f:"1308923000000000000000",fd377a385272900cb436a3bb7962cdffe93f5dad:"2000000000000000000000",a4a83a0738799b971bf2de708c2ebf911ca79eb2:"600000000000000000000","52a5e4de4393eeccf0581ac11b52c683c76ea15d":"19999800000000000000000",b07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87:"5260000000000000000000","35f5860149e4bbc04b8ac5b272be55ad1aca58e0":"200000000000000000000",fb135eb15a8bac72b69915342a60bbc06b7e077c:"20000000000000000000000","02d4a30968a39e2b3498c3a6a4ed45c1c6646822":"2000000000000000000000",e44b7264dd836bee8e87970340ed2b9aed8ed0a5:"5772100000000000000000",e90a354cec04d69e5d96ddc0c5138d3d33150aa0:"499971000000000000000","693d83be09459ef8390b2e30d7f7c28de4b4284e":"2000000000000000000000","87bf7cd5d8a929e1c785f9e5449106ac232463c9":"77800000000000000000",e5f8ef6d970636b0dcaa4f200ffdc9e75af1741c:"2000000000000000000000",fef09d70243f39ed8cd800bf9651479e8f4aca3c:"200000000000000000000",e98c91cadd924c92579e11b41217b282956cdaa1:"135800000000000000000",c2836188d9a29253e0cbda6571b058c289a0bb32:"2000000000000000000000",afa6946effd5ff53154f82010253df47ae280ccc:"1970000000000000000000","43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb":"1910000000000000000000","097ecda22567c2d91cb03f8c5215c22e9dcda949":"20055000000000000000","3e66b84769566ab67945d5fa81373556bcc3a1fa":"152000000000000000000","56373daab46316fd7e1576c61e6affcb6559ddd7":"215340000000000000000",faaeba8fc0bbda553ca72e30ef3d732e26e82041:"1338337000000000000000",f54c19d9ef3873bfd1f7a622d02d86249a328f06:"44284729000000000000000","825309a7d45d1812f51e6e8df5a7b96f6c908887":"2365000000000000000000","89009e3c6488bd5e570d1da34eabe28ed024de1b":"20000000000000000000000","63977cad7d0dcdc52b9ac9f2ffa136e8642882b8":"75000000000000000000",c239abdfae3e9af5457f52ed2b91fd0ab4d9c700:"2000000000000000000000","1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f":"179000000000000000000",a12a6c2d985daf0e4f5f207ae851aaf729b332cd:"100000000000000000000000",cbe52fc533d7dd608c92a260b37c3f45deb4eb33:"1000000000000000000000",abb2e6a72a40ba6ed908cdbcec3c5612583132fe:"1460000000000000000000","6503860b191008c15583bfc88158099301762828":"1000000000000000000000",a0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3:"1600000000000000000000",e154daeadb545838cbc6aa0c55751902f528682a:"4925000000000000000000","8e92aba38e72a098170b92959246537a2e5556c0":"267400000000000000000",d23d7affacdc3e9f3dae7afcb4006f58f8a44600:"3600000000000000000000","00d78d89b35f472716eceafebf600527d3a1f969":"27750000000000000000000","120f9de6e0af7ec02a07c609ca8447f157e6344c":"267400000000000000000",e0352fdf819ba265f14c06a6315c4ac1fe131b2e:"1000000000000000000000","8f47328ee03201c9d35ed2b5412b25decc859362":"2000000000000000000000","453e359a3397944c5a275ab1a2f70a5e5a3f6989":"240000000000000000000","9bf58efbea0784eb068adecfa0bb215084c73a35":"5800000000000000000000","21bfe1b45cacde6274fd8608d9a178bf3eeb6edc":"2009400000000000000000",d1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf:"3000000000000000000000","20a29c5079e26b3f18318bb2e50e8e8b346e5be8":"499986000000000000000","7d392852f3abd92ff4bb5bb26cb60874f2be6795":"1000070000000000000000","55852943492970f8d629a15366cdda06a94f4513":"2000000000000000000000",ab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5:"300000000000000000000","9d2bfc36106f038250c01801685785b16c86c60d":"380000000000000000000000","6e60aee1a78f8eda8b424c73e353354ae67c3042":"3490300000000000000000","7e29290038493559194e946d4e460b96fc38a156":"309072000000000000000","6006e36d929bf45d8f16231b126a011ae283d925":"176000000000000000000",d6d03572a45245dbd4368c4f82c95714bd2167e2:"1162200000000000000000",d1432538e35b7664956ae495a32abdf041a7a21c:"19700000000000000000000","2276264bec8526c0c0f270677abaf4f0e441e167":"1000000000000000000000",c8814e34523e38e1f927a7dce8466a447a093603:"10000000000000000000000","688a569e965524eb1d0ac3d3733eab909fb3d61e":"1320000000000000000000","90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c":"4000086000000000000000","239a733e6b855ac592d663156186a8a174d2449e":"1637020000000000000000",bcdfacb9d9023c3417182e9100e8ea1d373393a3:"59100000000000000000",ba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf:"1000000000000000000000","322e5c43b0f524389655a9b3ff24f2d4db3da10f":"4650000000000000000000",be5a60689998639ad75bc105a371743eef0f7940:"501700000000000000000",b727a9fc82e1cffc5c175fa1485a9befa2cdbdd1:"999000000000000000000",a3883a24f7f166205f1a6a9949076c26a76e7178:"1820000000000000000000","5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d":"539766000000000000000",e60955dc0bc156f6c41849f6bd776ba44b0ef0a1:"299982000000000000000",af203e229d7e6d419df4378ea98715515f631485:"1970000000000000000000","86499a1228ff2d7ee307759364506f8e8c8307a5":"1970000000000000000000","1a04cec420ad432215246d77fe178d339ed0b595":"316000000000000000000",cc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776:"60000000000000000000",cb50587412822304ebcba07dab3a0f09fffee486:"1370000000000000000000","4ae2a04d3909ef454e544ccfd614bfefa71089ae":"442800000000000000000",c8a2c4e59e1c7fc54805580438aed3e44afdf00e:"44000000000000000000","5792814f59a33a1843faa01baa089eb02ffb5cf1":"499986000000000000000",a1f2854050f872658ed82e52b0ad7bbc1cb921f6:"2010918000000000000000","92dca5e102b3b81b60f1a504634947c374a88ccb":"2000000000000000000000","732fead60f7bfdd6a9dec48125e3735db1b6654f":"20000000000000000000","6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8":"400000000000000000000",cde36d81d128c59da145652193eec2bfd96586ef:"4000000000000000000000","40eddb448d690ed72e05c225d34fc8350fa1e4c5":"7000000000000000000000","454b61b344c0ef965179238155f277c3829d0b38":"2000000000000000000000",ac3da526cfce88297302f34c49ca520dc271f9b2:"800000000000000000000",c989eec307e8839b9d7237cfda08822962abe487:"400000000000000000000",e99de258a4173ce9ac38ede26c0b3bea3c0973d5:"1656800000000000000000",ff0cb06c42e3d88948e45bd7b0d4e291aefeea51:"1910000000000000000000","0990e81cd785599ea236bd1966cf526302c35b9c":"1000000000000000000000","6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb":"935900000000000000000","5d958a9bd189c2985f86c58a8c69a7a78806e8da":"10200000000000000000000","98be696d51e390ff1c501b8a0f6331b628ddc5ad":"2000000000000000000000","09d0b8cd077c69d9f32d9cca43b3c208a21ed48b":"150011000000000000000","96e7c0c9d5bf10821bf140c558a145b7cac21397":"1056000000000000000000","5b736eb18353629bde9676dadd165034ce5ecc68":"1970000000000000000000",e5a365343cc4eb1e770368e1f1144a77b832d7e0:"20000000000000000000","4cf5537b85842f89cfee359eae500fc449d2118f":"1000000000000000000000",c71f1d75873f33dcb2dd4b3987a12d0791a5ce27:"1015200000000000000000","9bf703b41c3624e15f4054962390bcba3052f0fd":"6055000000000000000000","145e1de0147911ccd880875fbbea61f6a142d11d":"4000000000000000000000","68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6":"1970000000000000000000",d8eb78503ec31a54a90136781ae109004c743257:"1000000000000000000000",f25e4c70bc465632c89e5625a832a7722f6bffab:"4488000000000000000000","7b4d2a38269069c18557770d591d24c5121f5e83":"700000000000000000000","27d158ac3d3e1109ab6e570e90e85d3892cd7680":"100000000000000000000",d3679a47df2d99a49b01c98d1c3e0c987ce1e158:"280000000000000000000","095b949de3333a377d5019d893754a5e4656ff97":"340000000000000000000","6b17598a8ef54f797ae515ccb6517d1859bf8011":"100000000000000000000","3eaf0879b5b6db159b589f84578b6a74f6c10357":"7253657000000000000000","40d45d9d7625d15156c932b771ca7b0527130958":"100000000000000000000000","0392549a727f81655429cb928b529f25df4d1385":"26248000000000000000",c5b009baeaf788a276bd35813ad65b400b849f3b:"1000000000000000000000","6ed884459f809dfa1016e770edaf3e9fef46fa30":"3400170000000000000000","439d2f2f5110a4d58b1757935015408740fec7f8":"3830421000000000000000",dc46c13325cd8edf0230d068896486f007bf4ef1:"1337000000000000000000","8c54c7f8b9896e75d7d5f5c760258699957142ad":"40000000000000000000","61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a":"800000000000000000000","935069444a6a984de2084e46692ab99f671fc727":"9000000000000000000000",fc49c1439a41d6b3cf26bb67e0365224e5e38f5f:"1000076000000000000000",e1dfb5cc890ee8b2877e885d267c256187d019e6:"100000000000000000000",ee7c3ded7c28f459c92fe13b4d95bafbab02367d:"700000000000000000000",a5874d754635a762b381a5c4c792483af8f23d1d:"50000000000000000000",cfbb32b7d024350e3321fa20c9a914035372ffc6:"401100000000000000000","2bc429d618a66a4cf82dbb2d824e9356effa126a":"1999944000000000000000",db244f97d9c44b158a40ed9606d9f7bd38913331:"102000000000000000000","55e220876262c218af4f56784798c7e55da09e91":"133566000000000000000",ca41ccac30172052d522cd2f2f957d248153409f:"1970000000000000000000",b11fa7fb270abcdf5a2eab95aa30c4b53636efbf:"800000000000000000000","0ffea06d7113fb6aec2869f4a9dfb09007facef4":"225416000000000000000","646628a53c2c4193da88359ce718dadd92b7a48d":"200032000000000000000",ca8409083e01b397cf12928a05b68455ce6201df:"1600000000000000000000",dbbcbb79bf479a42ad71dbcab77b5adfaa872c58:"1730000000000000000000",db7d4037081f6c65f9476b0687d97f1e044d0a1d:"660000000000000000000","4be90d412129d5a4d0424361d6649d4e47a62316":"1015200000000000000000",e3ab3ca9b870e3f548517306bba4de2591afafc2:"1200062000000000000000","5c61ab79b408dd3229f662593705d72f1e147bb8":"22729000000000000000000","4f177f9d56953ded71a5611f393322c30279895c":"246000000000000000000",e6cb260b716d4c0ab726eeeb07c8707204e276ae:"1000000000000000000000","44355253b27748e3f34fe9cae1fb718c8f249529":"200000000000000000000",a309df54cabce70c95ec3033149cd6678a6fd4cf:"223600000000000000000",ec4867d2175ab5b9469361595546554684cda460:"3000000000000000000000","8d06e464245cad614939e0af0845e6d730e20374":"200359000000000000000","9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a":"2000000000000000000000",dcfff3e8d23c2a34b56bd1b3bd45c79374432239:"5000000000000000000000","7d7dd5ee614dbb6fbfbcd26305247a058c41faa1":"2000000000000000000000","8a9eca9c5aba8e139f8003edf1163afb70aa3aa9":"660000000000000000000",d942de4784f7a48716c0fd4b9d54a6e54c5f2f3e:"20000000000000000000000","07dae622630d1136381933d2ad6b22b839d82102":"200000000000000000000",abf12fa19e82f76c718f01bdca0003674523ef30:"2000000000000000000000","411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f":"425000000000000000000","99129d5b3c0cde47ea0def4dfc070d1f4a599527":"2000000000000000000000",c5cdcee0e85d117dabbf536a3f4069bf443f54e7:"1969606000000000000000",f218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f:"500000000000000000000",fe549bbfe64740189892932538daaf46d2b61d4f:"40000000000000000000",dc3f0e7672f71fe7525ba30b9755183a20b9166a:"9603617000000000000000","0e83b850481ab44d49e0a229a2e464902c69539b":"100000000000000000000","07ddd0422c86ef65bf0c7fc3452862b1228b08b8":"2065302000000000000000",a68c313445c22d919ee46cc2d0cdff043a755825:"75189000000000000000",a9e9dbce7a2cb03694799897bed7c54d155fdaa8:"197559000000000000000","18fccf62d2c3395453b7587b9e26f5cff9eb7482":"1000000000000000000000",ff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d:"1337000000000000000000","8f69eafd0233cadb4059ab779c46edf2a0506e48":"1788210000000000000000","9aa48c66e4fb4ad099934e32022e827427f277ba":"10000000000000000000000",f46980e3a4a9d29a6a6e90604537a3114bcb2897:"500000000000000000000","801732a481c380e57ed62d6c29de998af3fa3b13":"100000000000000000000","0cd6a141918d126b106d9f2ebf69e102de4d3277":"20000000000000000000","17589a6c006a54cad70103123aae0a82135fdeb4":"4000000000000000000000","8725e8c753b3acbfdca55f3c62dfe1a59454968a":"1000090000000000000000",d20dcb0b78682b94bc3000281448d557a20bfc83:"895000000000000000000",e84f8076a0f2969ecd333eef8de41042986291f2:"432000000000000000000",b3145b74506d1a8d047cdcdc55392a7b5350799a:"129314663000000000000000","0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d":"12800000000000000000000","0ca670eb2c8b96cba379217f5929c2b892f39ef6":"2000000000000000000000","25cfc4e25c35c13b69f7e77dbfb08baf58756b8d":"40000000000000000000000","182db85293f606e88988c3704cb3f0c0bbbfca5a":"133700000000000000000",bd73c3cbc26a175062ea0320dd84b253bce64358:"394000000000000000000","2680713d40808e2a50ed013150a2a694b96a7f1d":"1790000000000000000000","51e32f14f4ca5e287cdac057a7795ea9e0439953":"500000000000000000000",b1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3:"2000000000000000000000",d4c4d1a7c3c74984f6857b2f5f07e8face68056d:"2000000000000000000000","4651dc420e08c3293b27d2497890eb50223ae2f4":"20000000000000000000000",c74a3995f807de1db01a2eb9c62e97d0548f696f:"1000000000000000000000","0505a08e22a109015a22f685305354662a5531d5":"2600000000000000000000","39c773367c8825d3596c686f42bf0d14319e3f84":"133700000000000000000","0f929cf895db017af79f3ead2216b1bd69c37dc7":"2000000000000000000000",bdd3254e1b3a6dc6cc2c697d45711aca21d516b2:"2000000000000000000000",ae5d221afcd3d29355f508eadfca408ce33ca903:"100000000000000000000000","916cf17d71412805f4afc3444a0b8dd1d9339d16":"14300000000000000000","4319263f75402c0b5325f263be4a5080651087f0":"983086000000000000000","0f1c249cd962b00fd114a9349f6a6cc778d76c4d":"2000000000000000000000","54febcce20fe7a9098a755bd90988602a48c089e":"640000000000000000000","2c1800f35fa02d3eb6ff5b25285f5e4add13b38d":"906400000000000000000","72b904440e90e720d6ac1c2ad79c321dcc1c1a86":"1550000000000000000000",b0aa00950c0e81fa3210173e729aaf163a27cd71:"40000000000000000000000","663604b0503046e624cd26a8b6fb4742dce02a6f":"65400000000000000000","3c98594bf68b57351e8814ae9e6dfd2d254aa06f":"300000000000000000000","9c45202a25f6ad0011f115a5a72204f2f2198866":"5014000000000000000000",b02d062873334545cea29218e4057760590f7423:"3186000000000000000000","7bddb2ee98de19ee4c91f661ee8e67a91d054b97":"1000000000000000000000","9cf2928beef09a40f9bfc953be06a251116182fb":"6000000000000000000000","51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550":"1000000000000000000000",eb570dba975227b1c42d6e8dea2c56c9ad960670:"2000000000000000000000","970d8b8a0016d143054f149fb3b8e550dc0797c7":"1000000000000000000000",c7b39b060451000ca1049ba154bcfa00ff8af262:"100000000000000000000000","945e18769d7ee727c7013f92de24d117967ff317":"2000000000000000000000",d18eb9e1d285dabe93e5d4bae76beefe43b521e8:"668500000000000000000",c618521321abaf5b26513a4a9528086f220adc6f:"27000000000000000000",dd65f6e17163b5d203641f51cc7b24b00f02c8fb:"200000000000000000000","131faed12561bb7aee04e5185af802b1c3438d9b":"219000000000000000000","1ced6715f862b1ff86058201fcce5082b36e62b2":"6684522000000000000000",a0ff5b4cf016027e8323497d4428d3e5a83b8795:"6596500000000000000000","02e816afc1b5c0f39852131959d946eb3b07b5ad":"1000000000000000000000","153cf2842cb9de876c276fa64767d1a8ecf573bb":"2000000000000000000000","3bc6e3ee7a56ce8f14a37532590f63716b9966e8":"2000000000000000000000",f6d25d3f3d846d239f525fa8cac97bc43578dbac:"896000000000000000000","2066774d822793ff25f1760909479cf62491bf88":"55160000000000000000000","46779a5656ff00d73eac3ad0c38b6c853094fb40":"230752000000000000000","22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95":"23445000000000000000",ff88ebacc41b3687f39e4b59e159599b80cba33f:"400000000000000000000","2874f3e2985d5f7b406627e17baa772b01abcc9e":"6014000000000000000000",eb10458daca79e4a6b24b29a8a8ada711b7f2eb6:"3998000000000000000000","541060fc58c750c40512f83369c0a63340c122b6":"1970000000000000000000",fd2757cc3551a095878d97875615fe0c6a32aa8a:"598200000000000000000",be659d85e7c34f8833ea7f488de1fbb5d4149bef:"9072500000000000000000",e149b5726caf6d5eb5bf2acc41d4e2dc328de182:"1940000000000000000000","2fe0cc424b53a31f0916be08ec81c50bf8eab0c1":"600000000000000000000",e3712701619ca7623c55db3a0ad30e867db0168b:"20000000000000000000",f8ca336c8e91bd20e314c20b2dd4608b9c8b9459:"846000000000000000000","68acdaa9fb17d3c309911a77b05f5391fa034ee9":"8950000000000000000000",e77d7deab296c8b4fa07ca3be184163d5a6d606c:"92538000000000000000",e6b9545f7ed086e552924639f9a9edbbd5540b3e:"3760000000000000000000","2866b81decb02ee70ae250cee5cdc77b59d7b679":"2000000000000000000000","60e3cc43bcdb026aad759c7066f555bbf2ac66f5":"2000000000000000000000",fcbd85feea6a754fcf3449449e37ff9784f7773c:"3086000000000000000000","38a744efa6d5c2137defef8ef9187b649eee1c78":"4000000000000000000000","9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee":"2620100000000000000000","2020b81ae53926ace9f7d7415a050c031d585f20":"341200000000000000000","4244f1331158b9ce26bbe0b9236b9203ca351434":"10000000000000000000000","99c236141daec837ece04fdaee1d90cf8bbdc104":"2184000000000000000000","943d37864a4a537d35c8d99723cd6406ce2562e6":"2000000000000000000000",d79483f6a8444f2549d611afe02c432d15e11051:"20000000000000000000","9fd64373f2fbcd9c0faca60547cad62e26d9851f":"1000000000000000000000",b89c036ed7c492879921be41e10ca1698198a74c:"1820000000000000000000","7462c89caa9d8d7891b2545def216f7464d5bb21":"109162000000000000000",bb0366a7cfbd3445a70db7fe5ae34885754fd468:"6160000000000000000000","6c52cf0895bb35e656161e4dc46ae0e96dd3e62c":"4000086000000000000000",b9cf71b226583e3a921103a5316f855a65779d1b:"24000000000000000000000","016b60bb6d67928c29fd0313c666da8f1698d9c5":"2000000000000000000000","9454b3a8bff9709fd0e190877e6cb6c89974dbd6":"2674000000000000000000","84aac7fa197ff85c30e03b7a5382b957f41f3afb":"157600000000000000000",db6e560c9bc620d4bea3a94d47f7880bf47f2d5f:"89500000000000000000",eefd05b0e3c417d55b3343060486cdd5e92aa7a6:"1430000000000000000000","3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd":"185000000000000000000","9bfff50db36a785555f07652a153b0c42b1b8b76":"2000000000000000000000",d44f5edf2bcf2433f211dadd0cc450db1b008e14:"267400000000000000000","2378fd4382511e968ed192106737d324f454b535":"1000000000000000000000",c94089553ae4c22ca09fbc98f57075cf2ec59504:"4000000000000000000000","08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2":"4000000000000000000000",e48e65125421880d42bdf1018ab9778d96928f3f:"4200000000000000000000","67518e5d02b205180f0463a32004471f753c523e":"1984289000000000000000","0da7401262384e2e8b4b26dd154799b55145efa0":"300000000000000000000","0b6920a64b363b8d5d90802494cf564b547c430d":"1200000000000000000000",a5ab4bd3588f46cb272e56e93deed386ba8b753d:"1332989000000000000000","1788da9b57fd05edc4ff99e7fef301519c8a0a1e":"2000000000000000000000","17b2d6cf65c6f4a347ddc6572655354d8a412b29":"2000000000000000000000",d0319139fbab2e8e2accc1d924d4b11df6696c5a:"200000000000000000000","4c377bb03ab52c4cb79befa1dd114982924c4ae9":"1827814000000000000000",fb949c647fdcfd2514c7d58e31f28a532d8c5833:"20000000000000000000000","70e5e9da735ff077249dcb9aaf3db2a48d9498c0":"1000000000000000000000",fe6f5f42b6193b1ad16206e4afb5239d4d7db45e:"1730000000000000000000",bda4be317e7e4bed84c0495eee32d607ec38ca52:"2309457000000000000000","5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e":"2000000000000000000000",ba42f9aace4c184504abf5425762aca26f71fbdc:"37400000000000000000",beb4fd315559436045dcb99d49dcec03f40c42dc:"2000000000000000000000","452b64db8ef7d6df87c788639c2290be8482d575":"8000000000000000000000","66e09427c1e63deed7e12b8c55a6a19320ef4b6a":"170000000000000000000",faad905d847c7b23418aeecbe3addb8dd3f8924a:"1970000000000000000000",a29319e81069e5d60df00f3de5adee3505ecd5fb:"2000000000000000000000",cf348f2fe47b7e413c077a7baf3a75fbf8428692:"2000000000000000000000",e1e8c50b80a352b240ce7342bbfdf5690cc8cb14:"394000000000000000000","131c792c197d18bd045d7024937c1f84b60f4438":"4000000000000000000000",e49af4f34adaa2330b0e49dc74ec18ab2f92f827:"2000000000000000000000",f2e99f5cbb836b7ad36247571a302cbe4b481c69:"1970000000000000000000",c93fbde8d46d2bcc0fa9b33bd8ba7f8042125565:"1400000000000000000000","038779ca2dbe663e63db3fe75683ea0ec62e2383":"1670000000000000000000",a33cb450f95bb46e25afb50fe05feee6fb8cc8ea:"776000000000000000000","40ab66fe213ea56c3afb12c75be33f8e32fd085d":"4000000000000000000000","6403d062549690c8e8b63eae41d6c109476e2588":"2000000000000000000000",bfb0ea02feb61dec9e22a5070959330299c43072:"20000000000000000000000","99c475bf02e8b9214ada5fad02fdfd15ba365c0c":"591000000000000000000","904966cc2213b5b8cb5bd6089ef9cddbef7edfcc":"2000000000000000000000","767a03655af360841e810d83f5e61fb40f4cd113":"985000000000000000000",ab209fdca979d0a647010af9a8b52fc7d20d8cd1:"9129000000000000000000","6294eae6e420a3d5600a39c4141f838ff8e7cc48":"2955000000000000000000","9777cc61cf756be3b3c20cd4491c69d275e7a120":"10000000000000000000000",bcbf6ba166e2340db052ea23d28029b0de6aa380:"3880000000000000000000","9f10f2a0463b65ae30b070b3df18cf46f51e89bd":"1910000000000000000000","8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e":"3460000000000000000000","4f23b6b817ffa5c664acdad79bb7b726d30af0f9":"1760000000000000000000",b4c20040ccd9a1a3283da4d4a2f365820843d7e2:"1000000000000000000000","7f49e7a4269882bd8722d4a6f566347629624079":"2000000000000000000000","33629bd52f0e107bc071176c64df108f64777d49":"33425000000000000000","6a7b2e0d88867ff15d207c222bebf94fa6ce8397":"60000000000000000000000",b7ce684b09abda53389a875369f71958aeac3bdd:"2000000000000000000000",ffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca:"4000000000000000000000","849ab80790b28ff1ffd6ba394efc7463105c36f7":"34600000000000000000",b0b36af9aeeedf97b6b02280f114f13984ea3260:"985000000000000000000","4d57e716876c0c95ef5eaebd35c8f41b069b6bfe":"2000000000000000000000","2d2b032359b363964fc11a518263bfd05431e867":"149600000000000000000","2ccc1f1cb5f4a8002e186b20885d9dbc030c0894":"2000000000000000000000","016c85e1613b900fa357b8283b120e65aefcdd08":"799954000000000000000","710b0274d712c77e08a5707d6f3e70c0ce3d92cf":"6400000000000000000000","3cd3a6e93579c56d494171fc533e7a90e6f59464":"2000000000000000000000",fe0e30e214290d743dd30eb082f1f0a5225ade61:"200000000000000000000",d0718520eae0a4d62d70de1be0ca431c5eea2482:"2000000000000000000000",af7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b:"10000000000000000000000",b7d252ee9402b0eef144295f0e69f0db586c0871:"660000000000000000000",c3b928a76fad6578f04f0555e63952cd21d1520a:"2000000000000000000000",a7a517d7ad35820b09d497fa7e5540cde9495853:"2000000000000000000000",e6e886317b6a66a5b4f81bf164c538c264351765:"2000000000000000000000","0770b43dbae4b1f35a927b4fa8124d3866caf97b":"1016390000000000000000","52b4257cf41b6e28878d50d57b99914ffa89873a":"3930150000000000000000",e08bc29c2b48b169ff2bdc16714c586e6cb85ccf:"20000000000000000000","2372c4c1c9939f7aaf6cfac04090f00474840a09":"10000000000000000000000",ab6b65eab8dfc917ec0251b9db0ecfa0fa032849:"500000000000000000000","582e7cc46f1d7b4e6e9d95868bfd370573178f4c":"2000000000000000000000",f167f5868dcf4233a7830609682caf2df4b1b807:"2396150000000000000000",ec82f50d06475f684df1b392e00da341aa145444:"2000000000000000000000","0968ee5a378f8cadb3bafdbed1d19aaacf936711":"1000000000000000000000",a86613e6c4a4c9c55f5c10bcda32175dcbb4af60:"10696140000000000000000",a5cd123992194b34c4781314303b03c54948f4b9:"2010462000000000000000","52f058d46147e9006d29bf2c09304ad1cddd6e15":"1500000000000000000000","160226efe7b53a8af462d117a0108089bdecc2d1":"200550000000000000000","256292a191bdda34c4da6b6bd69147bf75e2a9ab":"14051000000000000000","1b8aa0160cd79f005f88510a714913d70ad3be33":"201760000000000000000",d4b2ff3bae1993ffea4d3b180231da439f7502a2:"2000000000000000000000",e408aa99835307eea4a6c5eb801fe694117f707d:"500000000000000000000",e60a55f2df996dc3aedb696c08dde039b2641de8:"2000000000000000000000","73df3c3e7955f4f2d859831be38000b1076b3884":"1970000000000000000000","6228ade95e8bb17d1ae23bfb0518414d497e0eb8":"400000000000000000000","0f46c81db780c1674ac73d314f06539ee56ebc83":"9850000000000000000000","762d6f30dab99135e4eca51d5243d6c8621102d5":"282000000000000000000","4ba0d9e89601772b496847a2bb4340186787d265":"1000000000000000000000",ca747576446a4c8f30b08340fee198de63ec92cf:"7020000000000000000000","99c31fe748583787cdd3e525b281b218961739e3":"1015200000000000000000","1210f80bdb826c175462ab0716e69e46c24ad076":"100000000000000000000","3f75ae61cc1d8042653b5baec4443e051c5e7abd":"95500000000000000000","5c4892907a0720df6fd3413e63ff767d6b398023":"13189467000000000000000","17f14632a7e2820be6e8f6df823558283dadab2d":"2000000000000000000000","1dc7f7dad85df53f1271152403f4e1e4fdb3afa0":"200000000000000000000","5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3":"2000000000000000000000","136d4b662bbd1080cfe4445b0fa213864435b7f1":"4000000000000000000000",c1ec81dd123d4b7c2dd9b4d438a7072c11dc874c:"2000000000000000000000","09f9575be57d004793c7a4eb84b71587f97cbb6a":"200000000000000000000","2c4b470307a059854055d91ec3794d80b53d0f4a":"20000000000000000000000","6af6c7ee99df271ba15bf384c0b764adcb4da182":"999972000000000000000","0dae3ee5b915b36487f9161f19846d101433318a":"1910000000000000000000","0dcf9d8c9804459f647c14138ed50fad563b4154":"173000000000000000000",bfa8c858df102cb12421008b0a31c4c7190ad560:"200000000000000000000",c2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c:"1337000000000000000000",d70a612bd6dda9eab0dddcff4aaf4122d38feae4:"540000000000000000000",e07137ae0d116d033533c4eab496f8a9fb09569c:"1400000000000000000000","7f49f20726471ac1c7a83ef106e9775ceb662566":"5910000000000000000000","1e706655e284dcf0bb37fe075d613a18dc12ff4a":"4376760000000000000000","03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41":"200000000000000000000","228242f8336eecd8242e1f000f41937e71dffbbf":"5000000000000000000000",e8ed51bbb3ace69e06024b33f86844c47348db9e:"165170600000000000000000","3b566a8afad19682dc2ce8679a3ce444a5b0fd4f":"2000000000000000000000",dc738fb217cead2f69594c08170de1af10c419e3:"100000000000000000000000","13032446e7d610aa00ec8c56c9b574d36ca1c016":"2000000000000000000000","6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54":"2000000000000000000000",b85f26dd0e72d9c29ebaf697a8af77472c2b58b5:"11900000000000000000000","055bd02caf19d6202bbcdc836d187bd1c01cf261":"100000000000000000000","3c322e611fdb820d47c6f8fc64b6fad74ca95f5e":"242514000000000000000","8daddf52efbd74da95b969a5476f4fbbb563bfd2":"835000000000000000000",c63ac417992e9f9b60386ed953e6d7dff2b090e8:"4000086000000000000000","27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6":"5000000000000000000000",d8f4bae6f84d910d6d7d5ac914b1e68372f94135:"100000000000000000000","9f83a293c324d4106c18faa8888f64d299054ca0":"200000000000000000000","39ee4fe00fbced647068d4f57c01cb22a80bccd1":"6000000000000000000000","404100db4c5d0eec557823b58343758bcc2c8083":"20000000000000000000","02751dc68cb5bd737027abf7ddb77390cd77c16b":"20000000000000000000",d10302faa1929a326904d376bf0b8dc93ad04c4c:"1790000000000000000000",cc419fd9912b85135659e77a93bc3df182d45115:"10000000000000000000000","10097198b4e7ee91ff82cc2f3bd95fed73c540c0":"2000000000000000000000","7e24d9e22ce1da3ce19f219ccee523376873f367":"5900150000000000000000","2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d":"2000000000000000000000","91a4149a2c7b1b3a67ea28aff34725e0bf8d7524":"1940000000000000000000",ead65262ed5d122df2b2751410f98c32d1238f51:"101680000000000000000",e20954d0f4108c82d4dcb2148d26bbd924f6dd24:"10000000000000000000000",ebb7d2e11bc6b58f0a8d45c2f6de3010570ac891:"26740000000000000000",ef115252b1b845cd857f002d630f1b6fa37a4e50:"1970000000000000000000","01a818135a414210c37c62b625aca1a54611ac36":"260000000000000000000",ea1ea0c599afb9cd36caacbbb52b5bbb97597377:"1069600000000000000000","7a7a4f807357a4bbe68e1aa806393210c411ccb3":"30000000000000000000000","6d40ca27826d97731b3e86effcd7b92a4161fe89":"2000000000000000000000","8431277d7bdd10457dc017408c8dbbbd414a8df3":"39400000000000000000","69b81d5981141ec7a7141060dfcf8f3599ffc63e":"5000000000000000000000","47688410ff25d654d72eb2bc06e4ad24f833b094":"160440000000000000000","6c101205b323d77544d6dc52af37aca3cec6f7f1":"10000000000000000000000",fb685c15e439965ef626bf0d834cd1a89f2b5695:"3940000000000000000000","673706b1b0e4dc7a949a7a796258a5b83bb5aa83":"16100000000000000000000",ecdaf93229b45ee672f65db506fb5eca00f7fce6:"1605009000000000000000",ec6904bae1f69790591709b0609783733f2573e3:"500000000000000000000","812ea7a3b2c86eed32ff4f2c73514cc63bacfbce":"1000000000000000000000","196c02210a450ab0b36370655f717aa87bd1c004":"259456000000000000000",d96ac2507409c7a383ab2eee1822a5d738b36b56:"200000000000000000000",ae2f9c19ac76136594432393b0471d08902164d3:"698600000000000000000","9d32962ea99700d93228e9dbdad2cc37bb99f07e":"3327560000000000000000","17e584e810e567702c61d55d434b34cdb5ee30f6":"5000000000000000000000",a3a93ef9dbea2636263d06d8492f6a41de907c22:"60000000000000000000","2b5016e2457387956562587115aa8759d8695fdf":"200000000000000000000000","140129eaa766b5a29f5b3af2574e4409f8f6d3f1":"6400000000000000000000","7025965d2b88da197d4459be3dc9386344cc1f31":"2005500000000000000000","388bdcdae794fc44082e667501344118ea96cd96":"1670000000000000000000",eee9d0526eda01e43116a395322dda8970578f39:"9999980000000000000000","6ec89b39f9f5276a553e8da30e6ec17aa47eefc7":"447500000000000000000","7e236666b2d06e63ea4e2ab84357e2dfc977e50e":"999972000000000000000","68df947c495bebaeb8e889b3f953d533874bf106":"546000000000000000000",d40ed66ab3ceff24ca05ecd471efb492c15f5ffa:"500000000000000000000",f0c70d0d6dab7663aa9ed9ceea567ee2c6b02765:"2089349000000000000000",b589676d15a04448344230d4ff27c95edf122c49:"1000000000000000000000",a0347f0a98776390165c166d32963bf74dcd0a2f:"1000000000000000000000",d47d8685faee147c520fd986709175bf2f886bef:"2000000000000000000000",a1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31:"100000000000000000000","4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f":"20000000000000000000","7cd20eccb518b60cab095b720f571570caaa447e":"500000000000000000000","2ff830cf55fb00d5a0e03514fecd44314bd6d9f1":"10000000000000000000000","0bb25ca7d188e71e4d693d7b170717d6f8f0a70a":"336870000000000000000",e9a2b4914e8553bf0d7c00ca532369b879f931bf:"2000000000000000000000","720e6b22bf430966fa32b6acb9a506eebf662c61":"152000000000000000000","7ade5d66b944bb860c0efdc86276d58f4653f711":"2000000000000000000000","2eaff9f8f8113064d3957ac6d6e11eee42c8195d":"1970000000000000000000","0c8fd7775e54a6d9c9a3bf890e761f6577693ff0":"9850000000000000000000","290a56d41f6e9efbdcea0342e0b7929a8cdfcb05":"344000000000000000000",d73ed2d985b5f21b55b274643bc6da031d8edd8d:"49250000000000000000000","80156d10efa8b230c99410630d37e269d4093cea":"2000000000000000000000","0989c200440b878991b69d6095dfe69e33a22e70":"1910000000000000000000",ec8014efc7cbe5b0ce50f3562cf4e67f8593cd32:"17300000000000000000",de612d0724e84ea4a7feaa3d2142bd5ee82d3201:"20000000000000000000","0f832a93df9d7f74cd0fb8546b7198bf5377d925":"143000000000000000000",aa2c670096d3f939305325427eb955a8a60db3c5:"2003010000000000000000","25287b815f5c82380a73b0b13fbaf982be24c4d3":"40000000000000000000",e75c3b38a58a3f33d55690a5a59766be185e0284:"500000000000000000000","1940dc9364a852165f47414e27f5002445a4f143":"10850000000000000000000",e5b826196c0e1bc1119b021cf6d259a610c99670:"200000000000000000000","82a15cef1d6c8260eaf159ea3f0180d8677dce1c":"2000000000000000000000",da06044e293c652c467fe74146bf185b21338a1c:"1000000000000000000000",f815c10a032d13c34b8976fa6e3bd2c9131a8ba9:"1337000000000000000000",cd95fa423d6fc120274aacde19f4eeb766f10420:"200000000000000000000",e3a4f83c39f85af9c8b1b312bfe5fc3423afa634:"28650000000000000000","768ce0daa029b7ded022e5fc574d11cde3ecb517":"322000000000000000000",e3ec18a74ed43855409a26ade7830de8e42685ef:"19700000000000000000",b2bdbedf95908476d7148a370cc693743628057f:"4000000000000000000000",bbb8ffe43f98de8eae184623ae5264e424d0b8d7:"107600000000000000000","090cebef292c3eb081a05fd8aaf7d39bf07b89d4":"4000000000000000000000",dd2a233adede66fe1126d6c16823b62a021feddb:"2000000000000000000000",d8cd64e0284eec53aa4639afc4750810b97fab56:"20000000000000000000",e5953fea497104ef9ad2d4e5841c271f073519c2:"704000000000000000000","967d4142af770515dd7062af93498dbfdff29f20":"20200000000000000000",fd191a35157d781373fb411bf9f25290047c5eef:"1000000000000000000000","8967d7b9bdb7b4aed22e65a15dc803cb7a213f10":"400000000000000000000","51e43fe0d25c782860af81ea89dd793c13f0cbb1":"60000000000000000000",a38476691d34942eea6b2f76889223047db4617a:"2000000000000000000000","1321ccf29739b974e5a516f18f3a843671e39642":"4000000000000000000000","4d71a6eb3d7f327e1834278e280b039eddd31c2f":"6000000000000000000000",dc2d15a69f6bb33b246aef40450751c2f6756ad2:"1996000000000000000000",ec89f2b678a1a15b9134ec5eb70c6a62071fbaf9:"200000000000000000000","27bf943c1633fe32f8bcccdb6302b407a5724e44":"940229000000000000000",d0a6c6f9e9c4b383d716b31de78d56414de8fa91:"300000000000000000000","7b6175ec9befc738249535ddde34688cd36edf25":"10000000000000000000000","41ce79950935cff55bf78e4ccec2fe631785db95":"2000000000000000000000","5598b3a79a48f32b1f5fc915b87b645d805d1afe":"500000000000000000000","5c4881165cb42bb82e97396c8ef44adbf173fb99":"110600000000000000000","25b0533b81d02a617b9229c7ec5d6f2f672e5b5a":"1000000000000000000000","015f097d9acddcddafaf2a107eb93a40fc94b04c":"20000000000000000000000",b84b53d0bb125656cddc52eb852ab71d7259f3d5:"16000000000000000000000","1a79c7f4039c67a39d7513884cdc0e2c34222490":"20000000000000000000","926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f":"2000000000000000000000",c2fe7d75731f636dcd09dbda0671393ba0c82a7d:"2200000000000000000000","30248d58e414b20fed3a6c482b59d9d8f5a4b7e2":"60000000000000000000",d0e194f34b1db609288509ccd2e73b6131a2538b:"999972000000000000000",e8f29969e75c65e01ce3d86154207d0a9e7c76f2:"2991807000000000000000",cb93199b9c90bc4915bd859e3d42866dc8c18749:"231800000000000000000",e6fe0afb9dcedd37b2e22c451ba6feab67348033:"10000000000000000000000","82f854c9c2f087dffa985ac8201e626ca5467686":"100000000000000000000000","63bb664f9117037628594da7e3c5089fd618b5b5":"20000000000000000000",f8d17424c767bea31205739a2b57a7277214eebe:"42000000000000000000","4ca8db4a5efefc80f4cd9bbcccb03265931332b6":"200000000000000000000",c56e6b62ba6e40e52aab167d21df025d0055754b:"2000000000000000000000","0d8c40a79e18994ff99ec251ee10d088c3912e80":"114600000000000000000","40a331195b977325c2aa28fa2f42cb25ec3c253c":"2000000000000000000000",a2c5854ff1599f98892c5725d262be1da98aadac:"314315000000000000000","23ab09e73f87aa0f3be0139df0c8eb6be5634f95":"8000000000000000000000",b8040536958d5998ce4bec0cfc9c2204989848e9:"24472420000000000000000","42d6b263d9e9f4116c411424fc9955783c763030":"2000000000000000000000",c496cbb0459a6a01600fc589a55a32b454217f9d:"274000000000000000000","48302c311ef8e5dc664158dd583c81194d6e0d58":"3364760000000000000000",d5b284040130abf7c1d163712371cc7e28ad66da:"1970000000000000000000",d22f0ca4cd479e661775053bcc49e390f670dd8a:"1000000000000000000000",e597f083a469c4591c3d2b1d2c772787befe27b2:"280000000000000000000","668b6ba8ab08eace39c502ef672bd5ccb6a67a20":"31135320000000000000000",a3bff1dfa9971668360c0d82828432e27bf54e67:"200000000000000000000",ee655bb4ee0e8d5478526fb9f15e4064e09ff3dd:"200000000000000000000","121f855b70149ac83473b9706fb44d47828b983b":"1400000000000000000000","20a15256d50ce058bf0eac43aa533aa16ec9b380":"20000000000000000000","69bcfc1d43b4ba19de7b274bdffb35139412d3d7":"985000000000000000000",db288f80ffe232c2ba47cc94c763cf6fc9b82b0d:"85000000000000000000",e1cb83ec5eb6f1eeb85e99b2fc63812fde957184:"20000000000000000000000",a419a984142363267575566089340eea0ea20819:"1999944000000000000000","8489f6ad1d9a94a297789156899db64154f1dbb5":"358849000000000000000",d609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa:"2000000000000000000000",df1fa2e20e31985ebe2c0f0c93b54c0fb67a264b:"200000000000000000000",efe8ff87fc260e0767638dd5d02fc4672e0ec06d:"2000000000000000000000",eef1bbb1e5a83fde8248f88ee3018afa2d1332eb:"200000000000000000000","4b3aab335ebbfaa870cc4d605e7d2e74c668369f":"60000000000000000000000","8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4":"4000000000000000000000","0b0b3862112aeec3a03492b1b05f440eca54256e":"4000000000000000000000",dff4007931786593b229efe5959f3a4e219e51af:"4925000000000000000000",fec14e5485de2b3eef5e74c46146db8e454e0335:"179000000000000000000",ac21c1e5a3d7e0b50681679dd6c792dbca87decb:"100000000000000000000000","796ebbf49b3e36d67694ad79f8ff36767ac6fab0":"60800000000000000000",ae7739124ed153052503fc101410d1ffd8cd13b7:"999942000000000000000","86026cad3fe4ea1ce7fca260d3d45eb09ea6a364":"200000000000000000000",b2fc84a3e50a50af02f94da0383ed59f71ff01d7:"30000000000000000000000",bbab000b0408ed015a37c04747bc461ab14e151b:"6000000000000000000000",c4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304:"1000000000000000000000",cc606f511397a38fc7872bd3b0bd03c71bbd768b:"1000000000000000000000",f346d7de92741c08fc58a64db55b062dde012d14:"295106000000000000000","33f15223310d44de8b6636685f3a4c3d9c5655a5":"250500000000000000000","3c860e2e663f46db53427b29fe3ea5e5bf62bbcc":"98500000000000000000",acb94338554bc488cc88ae2d9d94080d6bdf8410:"1000000000000000000000","9c5cc111092c122116f1a85f4ee31408741a7d2f":"492500000000000000000","5f76f0a306269c78306b3d650dc3e9c37084db61":"2400000000000000000000","2c0cc3f951482cc8a2925815684eb9f94e060200":"6000000000000000000000",b74372dbfa181dc9242f39bf1d3731dffe2bdacf:"2000000000000000000000","3bab4b01a7c84ba13feea9b0bb191b77a3aadca3":"200000000000000000000","39aa05e56d7d32385421cf9336e90d3d15a9f859":"26000000000000000000","4a52bad20357228faa1e996bed790c93674ba7d0":"1337000000000000000000",ff128f4b355be1dc4a6f94fa510d7f15d53c2aff:"2720000000000000000000","92793ac5b37268774a7130de2bbd330405661773":"40110000000000000000",db19a3982230368f0177219cb10cb259cdb2257c:"2000000000000000000000","8d1794da509cb297053661a14aa892333231e3c1":"199600000000000000000","9b7c8810cc7cc89e804e6d3e38121850472877fe":"2000000000000000000000",ed3cbc3782cebd67989b305c4133b2cde32211eb:"400000000000000000000","8532490897bbb4ce8b7f6b837e4cba848fbe9976":"100000000000000000000",c384ac6ee27c39e2f278c220bdfa5baed626d9d3:"600000000000000000000",b1459285863ea2db3759e546ceb3fb3761f5909c:"1122309000000000000000","634efc24371107b4cbf03f79a93dfd93e431d5fd":"1221341000000000000000",ef9f59aeda418c1494682d941aab4924b5f4929a:"100000000000000000000000",e7311c9533f0092c7248c9739b5b2c864a34b1ce:"2803436000000000000000",e6e621eaab01f20ef0836b7cad47464cb5fd3c96:"316014000000000000000",cd102cd6db3df14ad6af0f87c72479861bfc3d24:"2000000000000000000000","005a9c03f69d17d66cbb8ad721008a9ebbb836fb":"2000000000000000000000",a072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70:"400000000000000000000",f2ab1161750244d0ecd048ee0d3e51abb143a2fd:"1235800000000000000000",f686785b89720b61145fea80978d6acc8e0bc196:"4000000000000000000000","0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d":"197000000000000000000",c32ec7e42ad16ce3e2555ad4c54306eda0b26758:"2000000000000000000000",f3fa723552a5d0512e2b62f48dca7b2b8105305b:"137000000000000000000","6dc3f92baa1d21dab7382b893261a0356fa7c187":"1730000000000000000000","4627c606842671abde8295ee5dd94c7f549534f4":"286600000000000000000",e39e46e15d22ce56e0c32f1877b7d1a264cf94f3:"20000000000000000000000",d7d157e4c0a96437a6d285741dd23ec4361fa36b:"2000000000000000000000","68f8f45155e98c5029a4ebc5b527a92e9fa83120":"4436101000000000000000","9aba2b5e27ff78baaab5cdc988b7be855cebbdce":"9999000000000000000000","66b39837cb3cac8a802afe3f12a258bbca62dacd":"400000000000000000000",d39b7cbc94003fc948f0cde27b100db8ccd6e063:"400000000000000000000","3db9ed7f024c7e26372feacf2b050803445e3810":"1285600000000000000000","3fbc1e4518d73400c6d046359439fb68ea1a49f4":"16400000000000000000000",e3da4f3240844c9b6323b4996921207122454399:"11539639000000000000000","09afa73bc047ef46b977fd9763f87286a6be68c6":"501500000000000000000","1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c":"135400000000000000000","2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6":"30617000000000000000","9a9d1dc0baa77d6e20c3d849c78862dd1c054c87":"880000000000000000000","3ccef88679573947e94997798a1e327e08603a65":"807700000000000000000","850b9db18ff84bf0c7da49ea3781d92090ad7e64":"2600000000000000000000","361c75931696bc3d427d93e76c77fd13b241f6f4":"549212000000000000000",c8f2b320e6dfd70906c597bad2f9501312c78259:"1504800000000000000000","8dc1d5111d09af25fdfcac455c7cec283e6d6775":"2000000000000000000000",cd7ece086b4b619b3b369352ee38b71ddb06439a:"200000000000000000000",f607c2150d3e1b99f24fa1c7d540add35c4ebe1e:"3098020000000000000000","32485c818728c197fea487fbb6e829159eba8370":"1053893000000000000000","8e670815fb67aeaea57b86534edc00cdf564fee5":"3300000000000000000000","10df681506e34930ac7a5c67a54c3e89ce92b981":"2153800000000000000000","1cf2eb7a8ccac2adeaef0ee87347d535d3b94058":"2000000000000000000000",f0dc43f205619127507b2b1c1cfdf32d28310920:"301973000000000000000",f2c2904e9fa664a11ee25656d8fd2cc0d9a522a0:"13370000000000000000","70670fbb05d33014444b8d1e8e7700258b8caa6d":"2000000000000000000000","5160ed612e1b48e73f3fc15bc4321b8f23b8a24b":"562800000000000000000","54a62bf9233e146ffec3876e45f20ee8414adeba":"10000000000000000000000","26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc":"2935300000000000000000","205fc843e19a4913d1881eb69b69c0fa3be5c50b":"9700000000000000000000",e001aba77c02e172086c1950fffbcaa30b83488f:"1970000000000000000000","21efbca09b3580b98e73f5b2f7f4dc0bf02c529c":"2000000000000000000000",c4d916574e68c49f7ef9d3d82d1638b2b7ee0985:"1580000000000000000000",cab0d32cf3767fa6b3537c84328baa9f50458136:"8960000000000000000000","7ce4686446f1949ebed67215eb0d5a1dd72c11b8":"2217776000000000000000","7837fcb876da00d1eb3b88feb3df3fa4042fac82":"1760000000000000000000","71e38ff545f30fe14ca863d4f5297fd48c73a5ce":"3580000000000000000000",e528a0e5a267d667e9393a6584e19b34dc9be973:"5600000000000000000000",c5374928cdf193705443b14cc20da423473cd9cf:"138139000000000000000",e406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe:"100000000000000000000",d7ef340e66b0d7afcce20a19cb7bfc81da33d94e:"3000000000000000000000",e012db453827a58e16c1365608d36ed658720507:"2000000000000000000000",d59638d3c5faa7711bf085745f9d5bdc23d498d8:"2000000000000000000000","008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c":"1000000000000000000000","8a3470282d5e2a2aefd7a75094c822c4f5aeef8a":"242743000000000000000","38b3965c21fa893931079beacfffaf153678b6eb":"170374000000000000000","57dd9471cbfa262709f5f486bcb774c5f527b8f8":"197000000000000000000","5a60c924162873fc7ea4da7f972e350167376031":"83583000000000000000",b9013c51bd078a098fae05bf2ace0849c6be17a5:"80000000000000000000",dc23b260fcc26e7d10f4bd044af794579460d9da:"500038000000000000000","45db03bccfd6a5f4d0266b82a22a368792c77d83":"8000000000000000000000","3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73":"8022000000000000000000","42d3a5a901f2f6bd9356f112a70180e5a1550b60":"925000000000000000000","47219229e8cd56659a65c2a943e2dd9a8f4bfd89":"1520000000000000000000",a20d071b1b003063497d7990e1249dabf36c35f7:"1000000000000000000000","6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392":"60140000000000000000","0c2d5c920538e953caaf24f0737f554cc6927742":"1000000000000000000000",eedf6c4280e6eb05b934ace428e11d4231b5905b:"200000000000000000000",ffa696ecbd787e66abae4fe87b635f07ca57d848:"1337000000000000000000","3e81772175237eb4cbe0fe2dcafdadffeb6a1999":"8800000000000000000000",b44783c8e57b480793cbd69a45d90c7b4f0c48ac:"20000000000000000000",f84f090adf3f8db7e194b350fbb77500699f66fd:"1970000000000000000000","2e9824b5c132111bca24ddfba7e575a5cd7296c1":"17201900000000000000000","5cce72d068c7c3f55b1d2819545e77317cae8240":"1940000000000000000000",d815e1d9f4e2b5e57e34826b7cfd8881b8546890:"17300000000000000000",f901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6:"400000000000000000000",a960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88:"1522704000000000000000",f7e45a12aa711c709acefe95f33b78612d2ad22a:"66230000000000000000000",c332df50b13c013490a5d7c75dbfa366da87b6d6:"4000000000000000000000",d467cf064c0871989b90d8b2eb14ccc63b360823:"200000000000000000000",b9144b677c2dc614ceefdf50985f1183208ea64c:"2000000000000000000000",ea7c4d6dc729cd6b157c03ad237ca19a209346c3:"2000000000000000000000","9c9de44724a4054da0eaa605abcc802668778bea":"200020000000000000000",d7140c8e5a4307fab0cc27badd9295018bf87970:"109600000000000000000",c33acdb3ba1aab27507b86b15d67faf91ecf6293:"2000000000000000000000",db2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4:"4000000000000000000000",bfcb9730246304700da90b4153e71141622e1c41:"1000000000000000000000","07dc8c8b927adbedfa8f5d639b4352351f2f36d2":"314382000000000000000","2d5391e938b34858cf965b840531d5efda410b09":"1400000000000000000000","0b5e2011ebc25a007f21362960498afb8af280fb":"2000000000000000000000",ed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5:"280000000000000000000",a3232d068d50064903c9ebc563b515acc8b7b097:"2002000000000000000000","66274fea82cd30b6c29b23350e4f4f3d310a5899":"2070000000000000000000",dbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb:"1600000000000000000000",a1f8d8bcf90e777f19b3a649759ad95027abdfc3:"200000000000000000000","5bd23547477f6d09d7b2a005c5ee650c510c56d7":"10000000000000000000000",ec3b8b58a12703e581ce5ffd7e21c57d1e5c663f:"1700000000000000000000","54310b3aa88703a725dfa57de6e646935164802c":"1910000000000000000000","8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d":"354200000000000000000",c80b36d1beafba5fcc644d60ac6e46ed2927e7dc:"13370000000000000000","1ea492bce1ad107e337f4bd4a7ac9a7babcccdab":"100000000000000000000",aaf023fef290a49bb78bb7abc95d669c50d528b0:"200000000000000000000","80b79f338390d1ba1b3737a29a0257e5d91e0731":"20000000000000000000",f382e4c20410b951089e19ba96a2fee3d91cce7e:"5054000000000000000000","0748713145ef83c3f0ef4d31d823786f7e9cc689":"4500000000000000000000","21e219c89ca8ac14ae4cba6130eeb77d9e6d3962":"789580000000000000000",ca9a042a6a806ffc92179500d24429e8ab528117:"1100000000000000000000",bcc9593b2da6df6a34d71b1aa38dacf876f95b88:"20000000000000000000",d1438267231704fc7280d563adf4763844a80722:"200000000000000000000","4989e1ab5e7cd00746b3938ef0f0d064a2025ba5":"2000000000000000000000",bd4b60faec740a21e3071391f96aa534f7c1f44e:"182000000000000000000","8c7cb4e48b25031aa1c4f92925d631a8c3edc761":"1000000000000000000000","322788b5e29bf4f5f55ae1ddb32085fda91b8ebe":"200000000000000000000",f15e182c4fbbad79bd93342242d4dccf2be58925:"1940000000000000000000","1548b770a5118ede87dba2f690337f616de683ab":"527558000000000000000","69c2d835f13ee90580408e6a3283c8cca6a434a2":"656000000000000000000",a1e4380a3b1f749673e270229993ee55f35663b4:"2000000000000000000000",c7675e5647b9d8daf4d3dff1e552f6b07154ac38:"180000000000000000000",a02c1e34064f0475f7fa831ccb25014c3aa31ca2:"60000000000000000000","517c75430de401c341032686112790f46d4d369e":"388000000000000000000","29681d9912ddd07eaabb88d05d90f766e862417d":"1000000000000000000000","544dda421dc1eb73bb24e3e56a248013b87c0f44":"1970000000000000000000","2ab97e8d59eee648ab6caf8696f89937143864d6":"3820000000000000000000","79c130c762b8765b19d2abc9a083ab8f3aad7940":"3940000000000000000000",f9650d6989f199ab1cc479636ded30f241021f65:"850000000000000000000",d1c96e70f05ae0e6cd6021b2083750a7717cde56:"500000000000000000000","88106c27d20b74b4b98ca62b232bd5c97411171f":"197000000000000000000","37ab66083a4fa23848b886f9e66d79cdc150cc70":"88510000000000000000000","8e6156336be2cdbe32140df08a2ba55fd0a58463":"74480000000000000000","2982d76a15f847dd41f1922af368fe678d0e681e":"100000000000000000000","209e8e29d33beae8fb6baa783d133e1d9ec1bc0b":"835000000000000000000",b325674c01e3f7290d5226339fbeac67d221279f:"2800000000000000000000",f20c9a99b74759d782f25c1ceca802a27e0b436c:"1670000000000000000000","61bf84d5ab026f58c873f86ff0dfca82b55733ae":"2000000000000000000000","0734a0a81c9562f4d9e9e10a8503da15db46d76e":"18200000000000000000","0521bc3a9f8711fecb10f50797d71083e341eb9d":"20000000000000000000","3301d9ca2f3bfe026279cd6819f79a293d98156e":"50000000000000000000000","549d51af29f724c967f59423b85b2681e7b15136":"3760000000000000000000","2053ac97548a0c4e8b80bc72590cd6a098fe7516":"187000000000000000000",aa321fdbd449180db8ddd34f0fe906ec18ee0914:"685000000000000000000","697f55536bf85ada51841f0287623a9f0ed09a17":"10000000000000000000000",df57353aaff2aadb0a04f9014e8da7884e86589c:"152800000000000000000","6807ddc88db489b033e6b2f9a81553571ab3c805":"29944000000000000000","90057af9aa66307ec9f033b29724d3b2f41eb6f9":"121930000000000000000000","3ff836b6f57b901b440c30e4dbd065cf37d3d48c":"200000000000000000000","91051764af6b808e4212c77e30a5572eaa317070":"1000000000000000000000","7faa30c31519b584e97250ed2a3cf3385ed5fd50":"2000000000000000000000",fb842ca2c5ef133917a236a0d4ac40690110b038:"306000000000000000000",aa167026d39ab7a85635944ed9edb2bfeba11850:"8298000000000000000000","57beea716cbd81700a73d67f9ff039529c2d9025":"200000000000000000000","654b7e808799a83d7287c67706f2abf49a496404":"1970000000000000000000",dde8f0c31b7415511dced1cd7d46323e4bd12232:"1610000000000000000000","8667fa1155fed732cfb8dca5a0d765ce0d0705ed":"81770000000000000000","905526568ac123afc0e84aa715124febe83dc87c":"17900000000000000000","8e98766524b0cf2747c50dd43b9567594d9731de":"1997200000000000000000",c6df2075ebd240d44869c2be6bdf82e63d4ef1f5:"20000000000000000000","2ff5cab12c0d957fd333f382eeb75107a64cb8e8":"10000000000000000000000","3055efd26029e0d11b930df4f53b162c8c3fd2ce":"499938000000000000000",b2c53efa33fe4a3a1a80205c73ec3b1dbcad0602:"1918595000000000000000","766b3759e8794e926dac473d913a8fb61ad0c2c9":"86500000000000000000","882aa798bf41df179f85520130f15ccdf59b5e58":"2000000000000000000000","80b23d380b825c46e0393899a85556462da0e18c":"2000000000000000000000","51f4663ab44ff79345f427a0f6f8a6c8a53ff234":"20000000000000000000000","8d5ef172bf77315ea64e85d0061986c794c6f519":"3940000000000000000000","75ac547017134c04ae1e11d60e63ec04d18db4ef":"6000000000000000000000",ce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1:"20000000000000000000","21408b4d7a2c0e6eca4143f2cacdbbccba121bd8":"20000000000000000000000","9c526a140683edf1431cfaa128a935e2b614d88b":"111000000000000000000","599728a78618d1a17b9e34e0fed8e857d5c40622":"14000000000000000000000","6ac4d4be2db0d99da3faaaf7525af282051d6a90":"80185000000000000000","785c8ea774d73044a734fa790a1b1e743e77ed7c":"238750000000000000000",ff2726294148b86c78a9372497e459898ed3fee3:"1970000000000000000000","68a86c402388fddc59028fec7021e98cbf830eac":"19100000000000000000","6121af398a5b2da69f65c6381aec88ce9cc6441f":"640000000000000000000","5a6686b0f17e07edfc59b759c77d5bef164d3879":"1490000000000000000000",a2d38de1c73906f6a7ca6efeb97cf6f69cc421be:"1000000000000000000000",ae3f98a443efe00f3e711d525d9894dc9a61157b:"295500000000000000000","5f1c8a04c90d735b8a152909aeae636fb0ce1665":"6999974000000000000000",d687cec0059087fdc713d4d2d65e77daefedc15f:"60000000000000000000","845203750f7148a9aa262921e86d43bf641974fd":"100000000000000000000","64464a6805b462412a901d2db8174b06c22deea6":"475600000000000000000","053471cd9a41925b3904a5a8ffca3659e034be23":"199600000000000000000","911ff233e1a211c0172c92b46cf997030582c83a":"1970000000000000000000",d930b27a78876485d0f48b70dd5336549679ca8f:"40000000000000000000","6ba9b21b35106be159d1c1c2657ac56cd29ffd44":"4480000000000000000000",ebac2b4408ef5431a13b8508e86250982114e145:"4000000000000000000000","931df34d1225bcd4224e63680d5c4c09bce735a6":"68000000000000000000","23eb6fd85671a9063ab7678ebe265a20f61a02b3":"2000000000000000000000",b32af3d3e8d075344926546f2e32887bf93b16bd:"200000000000000000000","8261fa230c901d43ff579f4780d399f31e6076bc":"2000000000000000000000","84a74ceecff65cb93b2f949d773ef1ad7fb4a245":"92998000000000000000",da982e9643ffece723075a40fe776e5ace04b29b:"160884000000000000000",ba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8:"890342000000000000000","82f2e991fd324c5f5d17768e9f61335db6319d6c":"500000000000000000000","3e84b35c5b2265507061d30b6f12da033fe6f8b9":"1790000000000000000000","2895e80999d406ad592e2b262737d35f7db4b699":"1940000000000000000000","65f534346d2ffb787fa9cf185d745ba42986bd6e":"500000000000000000000",c7368b9709a5c1b51c0adf187a65df14e12b7dba:"9489681000000000000000",ba176dbe3249e345cd4fa967c0ed13b24c47e586:"399990000000000000000",cff6a6fe3e9a922a12f21faa038156918c4fcb9c:"78800000000000000000",bcbd31252ec288f91e298cd812c92160e738331a:"1975802000000000000000","5543dd6d169eec8a213bbf7a8af9ffd15d4ff759":"18200000000000000000",b65bd780c7434115162027565223f44e5498ff8c:"19999800000000000000000","4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e":"2000000000000000000000","04aafc8ae5ce6f4903c89d7fac9cb19512224777":"500000000000000000000",fdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c:"87000000000000000000000","38c7851f5ffd4cee98df30f3b25597af8a6ca263":"2631920000000000000000","0e320219838e859b2f9f18b72e3d4073ca50b37d":"2000000000000000000000",bbbf39b1b67995a42241504f9703d2a14a515696:"1580000000000000000000","5b800bfd1b3ed4a57d875aed26d42f1a7708d72a":"6392000000000000000000","5b85e60e2af0544f2f01c64e2032900ebd38a3c7":"2000000000000000000000",c9ac01c3fb0929033f0ccc7e1acfeaaba7945d47:"12459235000000000000000",f355d3ec0cfb907d8dbb1bf3464e458128190bac:"4925600000000000000000","69c08d744754de709ce96e15ae0d1d395b3a2263":"1000000000000000000000",cef77451dfa2c643e00b156d6c6ff84e2373eb66:"188000000000000000000",f3034367f87d24d3077fa9a2e38a8b0ccb1104ef:"1000000000000000000000","73473e72115110d0c3f11708f86e77be2bb0983c":"20000000000000000000","761e6caec189c230a162ec006530193e67cf9d19":"2000000000000000000000",e9caf827be9d607915b365c83f0d3b7ea8c79b50:"3000000000000000000000",eda4b2fa59d684b27a810df8978a73df308a63c2:"4000000000000000000000","065ff575fd9c16d3cb6fd68ffc8f483fc32ec835":"200000000000000000000",a72ee666c4b35e82a506808b443cebd5c632c7dd:"800000000000000000000","5b30608c678e1ac464a8994c3b33e5cdf3497112":"400000000000000000000",b0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce:"4000000000000000000000",d7274d50804d9c77da93fa480156efe57ba501de:"1940000000000000000000",a609c26dd350c235e44b2b9c1dddccd0a9d9f837:"1000000000000000000000",bddfa34d0ebf1b04af53b99b82494a9e3d8aa100:"12000000000000000000000",fd40242bb34a70855ef0fd90f3802dec2136b327:"1930600000000000000000","58aed6674affd9f64233272a578dd9386b99c263":"3400000000000000000000","24434a3e32e54ecf272fe3470b5f6f512f675520":"5910000000000000000000",a379a5070c503d2fac89b8b3afa080fd45ed4bec:"19700000000000000000000","37e169a93808d8035698f815c7235613c1e659f2":"1000000000000000000000","849b116f596301c5d8bb62e0e97a8248126e39f3":"300000000000000000000",fe7011b698bf3371132d7445b19eb5b094356aee:"2000000000000000000000",f16de1891d8196461395f9b136265b3b9546f6ef:"31313000000000000000","6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae":"1357800000000000000000","8bb0212f3295e029cab1d961b04133a1809e7b91":"2000000000000000000000","408a69a40715e1b313e1354e600800a1e6dc02a5":"35144000000000000000",ddf0cce1fe996d917635f00712f4052091dff9ea:"2000000000000000000000","50fef296955588caae74c62ec32a23a454e09ab8":"1201200000000000000000",d913f0771949753c4726acaa2bd3619c5c20ff77:"3000000000000000000000","9d6ecfa03af2c6e144b7c4692a86951e902e9e1f":"3000310000000000000000",ecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7:"5000000000000000000000","33e9b71823952e1f66958c278fc28b1196a6c5a4":"100000000000000000000","9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c":"200000000000000000000","16f313cf8ad000914a0a176dc6a4342b79ec2538":"2000000000000000000000","991ac7ca7097115f26205eee0ef7d41eb4e311ae":"20000000000000000000",ddfafdbc7c90f1320e54b98f374617fbd01d109f:"13370000000000000000","26b11d066588ce74a572a85a6328739212aa8b40":"2000000000000000000000",ef2c34bb487d3762c3cca782ccdd7a8fbb0a9931:"180000000000000000000",a9be88ad1e518b0bbb024ab1d8f0e73f790e0c76:"2800000000000000000000","4a7494cce44855cc80582842be958a0d1c0072ee":"2400000000000000000000","23569542c97d566018c907acfcf391d14067e87e":"2000000000000000000000",d252960b0bf6b2848fdead80136db5f507f8be02:"2000000000000000000000","2c0f5b9df43625798e7e03c1a5fd6a6d091af82b":"31200000000000000000",a7c9d388ebd873e66b1713448397d0f37f8bd3a8:"5000000000000000000000","3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5":"11886645000000000000000",f287ff52f461117adb3e1daa71932d1493c65f2e:"3640000000000000000000",c852428d2b586497acd30c56aa13fb5582f84402:"945600000000000000000","296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791":"1000000000000000000000","817493cd9bc623702a24a56f9f82e3fd48f3cd31":"2920000000000000000000","7adfedb06d91f3cc7390450b85550270883c7bb7":"322312000000000000000","8d544c32c07fd0842c761d53a897d6c950bb7599":"200000000000000000000","86297d730fe0f7a9ee24e08fb1087b31adb306a7":"2000000000000000000000",f64fe0939a8d1eea2a0ecd9a9730fd7958e33109:"20600000000000000000",b06eab09a610c6a53d56a946b2c43487ac1d5b2d:"1000000000000000000000",bae9b82f7299631408659dd74e891cb8f3860fe5:"1970000000000000000000","0eda80f4ed074aea697aeddf283b63dbca3dc4da":"2000000000000000000000",ea686c5057093c171c66db99e01b0ececb308683:"384907000000000000000","425725c0f08f0811f5f006eec91c5c5c126b12ae":"150000000000000000000",b18e67a5050a1dc9fb190919a33da838ef445014:"20000000000000000000","8dd484ff8a307364eb66c525a571aac701c5c318":"4000000000000000000000","6671b182c9f741a0cd3c356c73c23126d4f9e6f4":"200000000000000000000",ba0249e01d945bef93ee5ec61925e03c5ca509fd:"4000000000000000000000",b2968f7d35f208871631c6687b3f3daeabc6616c:"156060000000000000000",a6f62b8a3d7f11220701ab9ffffcb327959a2785:"506000000000000000000",c885a18aabf4541b7b7b7ecd30f6fae6869d9569:"2000000000000000000000","33fb577a4d214fe010d32cca7c3eeda63f87ceef":"1000000000000000000000",be86d0b0438419ceb1a038319237ba5206d72e46:"999942000000000000000","466292f0e80d43a78774277590a9eb45961214f4":"970000000000000000000",b33c0323fbf9c26c1d8ac44ef74391d0804696da:"20000000000000000000",f7bc4c44910d5aedd66ed2355538a6b193c361ec:"96980000000000000000",d0f04f52109aebec9a7b1e9332761e9fe2b97bb5:"4000000000000000000000",cb4a914d2bb029f32e5fef5c234c4fec2d2dd577:"1800000000000000000000","2e619f57abc1e987aa936ae3a2264962e7eb2d9a":"756000000000000000000","166bf6dab22d841b486c38e7ba6ab33a1487ed8c":"20000000000000000000000",c3a046e3d2b2bf681488826e32d9c061518cfe8c:"2600000000000000000000",d082275f745a2cac0276fbdb02d4b2a3ab1711fe:"30000000000000000000",a701df79f594901afe1444485e6b20c3bda2b9b3:"1000000000000000000000",dec3eec2640a752c466e2b7e7ee685afe9ac41f4:"1324245000000000000000","8134dd1c9df0d6c8a5812426bb55c761ca831f08":"122360000000000000000",bfc57aa666fae28e9f107a49cb5089a4e22151dd:"1000000000000000000000",c3c2297329a6fd99117e54fc6af379b4d556547e:"6000000000000000000000","40585200683a403901372912a89834aadcb55fdb":"2000000000000000000000",cd49bf185e70d04507999f92a4de4455312827d0:"1000000000000000000000","9c6bc9a46b03ae5404f043dfcf21883e4110cc33":"200000000000000000000","1f49b86d0d3945590698a6aaf1673c37755ca80d":"700000000000000000000",efeb1997aad277cc33430e6111ed0943594048b8:"2000000000000000000000","7c0883054c2d02bc7a852b1f86c42777d0d5c856":"500000000000000000000",ff49a775814ec00051a795a875de24592ea400d4:"200000000000000000000000",f039683d7b3d225bc7d8dfadef63163441be41e2:"34380000000000000000",a3ba0d3a3617b1e31b4e422ce269e873828d5d69:"850000000000000000000",d116f3dcd5db744bd008887687aa0ec9fd7292aa:"1000000000000000000000","5719f49b720da68856f4b9e708f25645bdbc4b41":"640000000000000000000","870796abc0db84af82da52a0ed68734de7e636f5":"300000000000000000000","68b6854788a7c6496cdbf5f84b9ec5ef392b78bb":"19700000000000000000000","8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b":"1940000000000000000000","421684baa9c0b4b5f55338e6f6e7c8e146d41cb7":"1500000000000000000000",dd26b429fd43d84ec179825324bad5bfb916b360:"5142000000000000000000","3821862493242c0aeb84b90de05d250c1e50c074":"322200000000000000000","68a7425fe09eb28cf86eb1793e41b211e57bd68d":"668500000000000000000",da875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43:"2000000000000000000000",c2663f8145dbfec6c646fc5c49961345de1c9f11:"690000000000000000000",e89c22f1a4e1d4746ecfaa59ed386fee12d51e37:"44932000000000000000",eff86b5123bcdc17ed4ce8e05b7e12e51393a1f7:"500000000000000000000","6c3d18704126aa99ee3342ce60f5d4c85f1867cd":"50000000000000000000",b8d531a964bcea13829620c0ced72422dadb4cca:"169990000000000000000","7c29d47d57a733f56b9b217063b513dc3b315923":"4000000000000000000000",bc1e80c181616342ebb3fb3992072f1b28b802c6:"4000000000000000000000","31313ffd635bf2f3324841a88c07ed146144ceeb":"1970000000000000000000",cc4feb72df98ff35a138e01761d1203f9b7edf0a:"7000000000000000000000","741693c30376508513082020cc2b63e9fa92131b":"1200000000000000000000",aa3135cb54f102cbefe09e96103a1a796718ff54:"57800000000000000000",ef61155ba009dcdebef10b28d9da3d1bc6c9ced4:"59100000000000000000",b3c94811e7175b148b281c1a845bfc9bb6fbc115:"200000000000000000000","96d9cca8f55eea0040ec6eb348a1774b95d93ef4":"4000000000000000000000",ce62125adec3370ac52110953a4e760be9451e3b:"152000000000000000000",aca1e6bc64cc3180f620e94dc5b1bcfd8158e45d:"2000000000000000000000",bc237148d30c13836ffa2cad520ee4d2e5c4eeff:"1970000000000000000000","0e024e7f029c6aaf3a8b910f5e080873b85795aa":"1000000000000000000000","7283cd4675da58c496556151dafd80c7f995d318":"760000000000000000000","39b299327490d72f9a9edff11b83afd0e9d3c450":"200000000000000000000","5f333a3b2310765a0d1832b9be4c0a03704c1c09":"1000000000000000000000","5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e":"5910000000000000000000","833db42c14163c7be4cab86ac593e06266d699d5":"174212000000000000000000",f32d25eb0ea2b8b3028a4c7a155dc1aae865784d:"5710684000000000000000","1fa2319fed8c2d462adf2e17feec6a6f30516e95":"125300000000000000000",c49cfaa967f3afbf55031061fc4cef88f85da584:"2000000000000000000000","43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd":"16100000000000000000",cf3f9128b07203a3e10d7d5755c0c4abc6e2cac2:"5000000000000000000000","8f4d1e7e4561284a34fef9673c0d34e12af4aa03":"2000000000000000000000","934af21b7ebfa467e2ced65aa34edd3a0ec71332":"35420000000000000000000","5d231a70c1dfeb360abd97f616e2d10d39f3cab5":"400000000000000000000","2d5d7335acb0362b47dfa3a8a4d3f5949544d380":"200000000000000000000",d1e1f2b9c16c309874dee7fac32675aff129c398:"72800000000000000000",a43b6da6cb7aac571dff27f09d39f846f53769b1:"380000000000000000000","779274bf1803a336e4d3b00ddd93f2d4f5f4a62e":"1000000000000000000000",a644ed922cc237a3e5c4979a995477f36e50bc62:"583900000000000000000",ee6c03429969ca1262cb3f0a4a54afa7d348d7f5:"256100000000000000000","4f06246b8d4bd29661f43e93762201d286935ab1":"4818730000000000000000",e04972a83ca4112bc871c72d4ae1616c2f0728db:"267606000000000000000",df098f5e4e3dffa51af237bda8652c4f73ed9ca6:"502000000000000000000",dfded2574b27d1613a7d98b715159b0d00baab28:"20000000000000000000000","17d931d4c56294dcbe77c8655be4695f006d4a3c":"2000000000000000000000","3ccb71aa6880cb0b84012d90e60740ec06acd78f":"2000000000000000000000",e57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6:"2000000000000000000000",fb3860f4121c432ebdc8ec6a0331b1b709792e90:"600400000000000000000",fa00c376e89c05e887817a9dd0748d96f341aa89:"300700000000000000000",c7a018f0968a51d1f6603c5c49dc545bcb0ff293:"4000000000000000000000","7d73863038ccca22f96affda10496e51e1e6cd48":"20000000000000000000","38ea6f5b5a7b88417551b4123dc127dfe9342da6":"400000000000000000000","014b7f67b14f5d983d87014f570c8b993b9872b5":"200000000000000000000","8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611":"20000000000000000000","7eb4b0185c92b6439a08e7322168cb353c8a774a":"10165988000000000000000",d29dc08efbb3d72e263f78ab7610d0226de76b00:"12000000000000000000000","72a8260826294726a75bf39cd9aa9e07a3ea14cd":"2000000000000000000000","4cb5c6cd713ca447b848ae2f56b761ca14d7ad57":"267400000000000000000","49185dd7c23632f46c759473ebae966008cd3598":"254030000000000000000","13d67a7e25f2b12cdb85585009f8acc49b967301":"1999944000000000000000","9d913b5d339c95d87745562563fea98b23c60cc4":"170718000000000000000",abdc9f1bcf4d19ee96591030e772c334302f7d83:"40110000000000000000000",e9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df:"1970000000000000000000","1fd296be03ad737c92f9c6869e8d80a71c5714aa":"13370000000000000000","2f13657526b177cad547c3908c840eff647b45d9":"1170685000000000000000",e69fcc26ed225f7b2e379834c524d70c1735e5bc:"2000000000000000000000",bade43599e02f84f4c3014571c976b13a36c65ab:"4000000000000000000000","184a4f0beb71ffd558a6b6e8f228b78796c4cf3e":"12000000000000000000000",d1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7:"20000000000000000000","0bd67dbde07a856ebd893b5edc4f3a5be4202616":"2000000000000000000000","6b30f1823910b86d3acb5a6afc9defb6f3a30bf8":"4200000000000000000000","9a63d185a79129fdab19b58bb631ea36a420544e":"42000000000000000000",df660a91dab9f730f6190d50c8390561500756ca:"2000000000000000000000",a1a1f0fa6d20b50a794f02ef52085c9d036aa6ca:"1000000000000000000000","4ec768295eeabafc42958415e22be216cde77618":"59600000000000000000",c348fc5a461323b57be303cb89361b991913df28:"100000000000000000000000","3a7db224acae17de7798797d82cdf8253017dfa8":"5000000000000000000000","8bea40379347a5c891d59a6363315640f5a7e07a":"1999992000000000000000","2257fca16a6e5c2a647c3c29f36ce229ab93b17e":"4000000000000000000000",e492818aa684e5a676561b725d42f3cc56ae5198:"800000000000000000000",c841884fa4785fb773b28e9715fae99a5134305d:"2000000000000000000000","0d9443a79468a5bbf7c13c6e225d1de91aee07df":"70000000000000000000","6d4008b4a888a826f248ee6a0b0dfde9f93210b9":"5460000000000000000000","884980eb4565c1048317a8f47fdbb461965be481":"3999922000000000000000","985d70d207892bed398590024e2421b1cc119359":"20000000000000000000000",d9ec8fe69b7716c0865af888a11b2b12f720ed33:"4000000000000000000000","49b74e169265f01a89ec4c9072c5a4cd72e4e835":"16100000000000000000000","4c3e95cc3957d252ce0bf0c87d5b4f2234672e70":"2500000000000000000000",d9ff115d01266c9f73b063c1c238ef3565e63b36:"680000000000000000000","48c5c6970b9161bb1c7b7adfed9cdede8a1ba864":"4000000000000000000000",ea6afe2cc928ac8391eb1e165fc40040e37421e7:"2997569000000000000000","08ccda50e4b26a0ffc0ef92e9205310706bec2c7":"6077440000000000000000",e6e9a39d750fe994394eb68286e5ea62a6997882:"600000000000000000000","4b58101f44f7e389e12d471d1635b71614fdd605":"160000000000000000000","8d93dac785f88f1a84bf927d53652b45a154ccdd":"158000000000000000000","415d096ab06293183f3c033d25f6cf7178ac3bc7":"40000000000000000000",c3e387b03ce95ccfd7fa51dd840183bc43532809:"2000000000000000000000",da34b2eae30bafe8daeccde819a794cd89e09549:"2000000000000000000000",fa279bfd8767f956bf7fa0bd5660168da75686bd:"2674000000000000000000",b98ca31785ef06be49a1e47e864f60d076ca472e:"4000000000000000000000",b768b5234eba3a9968b34d6ddb481c8419b3655d:"14974000000000000000","31047d703f63b93424fbbd6e2f1f9e74de13e709":"2850123000000000000000","9a24ce8d485cc4c86e49deb39022f92c7430e67e":"1300000000000000000000",e62f9d7c64e8e2635aeb883dd73ba684ee7c1079:"8000000000000000000000",f15d9d5a21b1929e790371a17f16d95f0c69655c:"2000000000000000000000","285ae51b9500c58d541365d97569f14bb2a3709b":"2000000000000000000000","09c177f1ae442411ddacf187d46db956148360e7":"8950000000000000000000","12173074980153aeaa4b0dcbc7132eadcec21b64":"240000000000000000000","351f16e5e0735af56751b0e225b2421171394090":"13370000000000000000000",ac52b77e15664814f39e4f271be641308d91d6cc:"220000000000000000000","99c883258546cc7e4e971f522e389918da5ea63a":"4000000000000000000000",aa16269aac9c0d803068d82fc79151dadd334b66:"4000000000000000000000","7c9a110cb11f2598b2b20e2ca400325e41e9db33":"26000000000000000000000","583e83ba55e67e13e0e76f8392d873cd21fbf798":"20000000000000000000","555ebe84daa42ba256ea789105cec4b693f12f18":"100000000000000000000","978c430ce4359b06bc2cdf5c2985fc950e50d5c8":"480000000000000000000",dc1eb9b6e64351f56424509645f83e79eee76cf4:"4000000000000000000000","5b290c01967c812e4dc4c90b174c1b4015bae71e":"149946000000000000000",e7d213947fcb904ad738480b1eed2f5c329f27e8:"18718000000000000000",c517d0315c878813c717e18cafa1eab2654e01da:"10000000000000000000000","7e972a8a7c2a44c93b21436c38d21b9252c345fe":"1790000000000000000000","9cb28ac1a20a106f7f373692c5ce4c73f13732a1":"1000000000000000000000","14ab164b3b524c82d6abfbc0de831126ae8d1375":"2000000000000000000000",d46f8223452982a1eea019a8816efc2d6fc00768:"137000000000000000000","5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e":"537000000000000000000","66fdc9fee351fa1538eb0d87d819fcf09e7c106a":"6016500000000000000000",e7be82c6593c1eeddd2ae0b15001ff201ab57b2f:"19100000000000000000","47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5":"1000000000000000000000","0f2d8daf04b5414a0261f549ff6477b80f2f1d07":"200000000000000000000000","84bfcef0491a0ae0694b37ceac024584f2aa0467":"1999944000000000000000",ec5feafe210c12bfc9a5d05925a123f1e73fbef8:"456000000000000000000000","7023c70956e04a92d70025aad297b539af355869":"2000000000000000000000",d66ddf1159cf22fd8c7a4bc8d5807756d433c43e:"2200000000000000000000",d0638ea57189a6a699024ad78c71d939c1c2ff8c:"2632000000000000000000","70d25ed2c8ada59c088cf70dd22bf2db93acc18a":"1056600000000000000000",a4875928458ec2005dbb578c5cd33580f0cf1452:"1000000000000000000000",b5ad5157dda921e6bafacd9086ae73ae1f611d3f:"2000000000000000000000",c493489e56c3bdd829007dc2f956412906f76bfa:"48968000000000000000",c57612de91110c482e6f505bcd23f3c5047d1d61:"3580000000000000000000","9b18478655a4851cc906e660feac61f7f4c8bffc":"4174120000000000000000",b21b7979bf7c5ca01fa82dd640b41c39e6c6bc75:"1999944000000000000000",a9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5:"198800000000000000000","6f29bb375be5ed34ed999bb830ee2957dde76d16":"2000000000000000000000",a006268446643ec5e81e7acb3f17f1c351ee2ed9:"4000000000000000000000","42ddd014dc52bfbcc555325a40b516f4866a1dd3":"2000000000000000000000",d6d6776958ee23143a81adadeb08382009e996c2:"3000000000000000000000",d34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15:"320000000000000000000",dac0c177f11c5c3e3e78f2efd663d13221488574:"1000000000000000000000","814135da8f9811075783bf1ab67062af8d3e9f40":"20000000000000000000","7c3eb713c4c9e0381cd8154c7c9a7db8645cde17":"200000000000000000000",f49c47b3efd86b6e6a5bc9418d1f9fec814b69ef:"20000000000000000000000","35f1da127b83376f1b88c82a3359f67a5e67dd50":"1910000000000000000000","44dfba50b829becc5f4f14d1b04aab3320a295e5":"1000000000000000000000","0b924df007e9c0878417cfe63b976ea1a382a897":"40000000000000000000","82438fd2b32a9bdd674b49d8cc5fa2eff9781847":"20000000000000000000","794529d09d017271359730027075b87ad83dae6e":"310000000000000000000",f4b49100757772f33c177b9a76ba95226c8f3dd8:"6700000000000000000000","8563c49361b625e768771c96151dbfbd1c906976":"2000000000000000000000","0b9df80fbe232009dacf0aa8cac59376e2476203":"2000000000000000000000","149b6dbde632c19f5af47cb493114bebd9b03c1f":"12000000000000000000000",d7a1431ee453d1e49a0550d1256879b4f5d10201:"1670000000000000000000","1d37616b793f94911838ac8e19ee9449df921ec4":"1500000000000000000000",d6670c036df754be43dadd8f50feea289d061fd6:"5988459000000000000000","02778e390fa17510a3428af2870c4273547d386c":"16163700000000000000000",b89f4632df5909e58b2a9964f74feb9a3b01e0c5:"21406707000000000000000","76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1":"2000000000000000000000","36bf43ff35df90908824336c9b31ce33067e2f50":"346837200000000000000000",b53bcb174c2518348b818aece020364596466ba3:"2000000000000000000000",b4dd460cd016725a64b22ea4f8e06e06674e033e:"5370000000000000000000",cda1741109c0265b3fb2bf8d5ec9c2b8a3346b63:"20000000000000000000",feb8b8e2af716ae41fc7c04bcf29540156461e6b:"1555396000000000000000",a49f523aa51364cbc7d995163d34eb590ded2f08:"2659160000000000000000",a7e74f0bdb278ff0a805a648618ec52b166ff1be:"100000000000000000000","5ead29037a12896478b1296ab714e9cb95428c81":"71500000000000000000",cdecf5675433cdb0c2e55a68db5d8bbe78419dd2:"20000000000000000000",c24ccebc2344cce56417fb684cf81613f0f4b9bd:"1550000000000000000000","5a70106f20d63f875265e48e0d35f00e17d02bc9":"20000000000000000000","2606c3b3b4ca1b091498602cb1978bf3b95221c0":"400000000000000000000","1ad4563ea5786be1159935abb0f1d5879c3e7372":"6000000000000000000000",b782bfd1e2de70f467646f9bc09ea5b1fcf450af:"267400000000000000000","649a2b9879cd8fb736e6703b0c7747849796f10f":"7358102000000000000000","1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48":"1700000000000000000000","824b3c3c443e19295d7ef6faa7f374a4798486a8":"20000000000000000000",a7758cecb60e8f614cce96137ef72b4fbd07774a:"500000000000000000000","981f712775c0dad97518ffedcb47b9ad1d6c2762":"6685000000000000000000","26e801b62c827191dd68d31a011990947fd0ebe0":"20000000000000000000","95447046313b2f3a5e19b948fd3b8bedc82c717c":"500000000000000000000","0b701101a4109f9cb360dc57b77442673d5e5983":"2000000000000000000000","5b25cae86dcafa2a60e7723631fc5fa49c1ad87d":"2491200000000000000000",f73ac46c203be1538111b151ec8220c786d84144:"294515000000000000000",e8c3d3b0e17f97d1e756e684f94e1470f99c95a1:"400000000000000000000","8c900a8236b08c2b65405d39d75f20062a7561fd":"1640000000000000000000","43898c49a34d509bfed4f76041ee91caf3aa6aa5":"300000000000000000000",c85325eab2a59b3ed863c86a5f2906a04229ffa9:"465600000000000000000","4a430170152de5172633dd8262d107a0afd96a0f":"3160000000000000000000","6e0ee70612c976287d499ddfa6c0dcc12c06deea":"129980000000000000000","21c07380484f6cbc8724ad32bc864c3b5ad500b7":"1000000000000000000000",ff5162f2354dc492c75fd6e3a107268660eecb47:"1700000000000000000000","8845e9f90e96336bac3c616be9d88402683e004c":"2000000000000000000000",f23c7b0cb8cd59b82bd890644a57daf40c85e278:"50038000000000000000","1784948bf99848c89e445638504dd698271b5924":"6037580000000000000000",b39f4c00b2630cab7db7295ef43d47d501e17fd7:"4000000000000000000000","3fb7d197b3ba4fe045efc23d50a14585f558d9b2":"20000000000000000000",bd043b67c63e60f841ccca15b129cdfe6590c8e3:"200000000000000000000","86ca0145957e6b0dfe36875fbe7a0dec55e17a28":"10000000000000000000000",dae7201eab8c063302930d693929d07f95e71962:"2687370000000000000000",cc034985d3f28c2d39b1a34bced4d3b2b6ca234e:"182000000000000000000","40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6":"4000000000000000000000",b1896a37e5d8825a2d01765ae5de629977de8352:"200000000000000000000",d9f547f2c1de0ed98a53d161df57635dd21a00bd:"98500000000000000000","2fea1b2f834f02fc54333f8a809f0438e5870aa9":"20200000000000000000","68b31836a30a016ada157b638ac15da73f18cfde":"26000000000000000000",bc967fe4418c18b99858966d870678dca2b88879:"8740000000000000000000","16bae5d24eff91778cd98b4d3a1cc3162f44aa77":"401100000000000000000",f476e1267f86247cc908816f2e7ad5388c952db0:"4000000000000000000000","0203ae01d4c41cae1865e04b1f5b53cdfaecae31":"1006054000000000000000",bd4bd5b122d8ef7b7c8f0667450320db2116142e:"600000000000000000000",a394ad4fd9e6530e6f5c53faecbede81cb172da1:"5600000000000000000000","3a9960266df6492063538a99f487c950a3a5ec9e":"24000000000000000000000",d8069f84b521493f4715037f3226b25f33b60586:"1910000000000000000000","136c834bf111326d207395295b2e583ea7f33572":"100000000000000000000",c5c73d61cce7c8fe4c8fce29f39092cd193e0fff:"8000000000000000000000","3cfbf066565970639e130df2a7d16b0e14d6091c":"1700000000000000000000","61b905de663fc17386523b3a28e2f7d037a655cd":"500000000000000000000",fda0ce15330707f10bce3201172d2018b9ddea74:"51900000000000000000",f7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0:"2000000000000000000000",c3db9fb6f46c480af34465d79753b4e2b74a67ce:"20000000000000000000000",ebe46cc3c34c32f5add6c3195bb486c4713eb918:"1000000000000000000000","91d2a9ee1a6db20f5317cca7fbe2313895db8ef8":"8499600000000000000000",c4cc45a2b63c27c0b4429e58cd42da59be739bd6:"1000000000000000000000",a43b81f99356c0af141a03010d77bd042c71c1ee:"2000000000000000000000","4c45d4c9a725d11112bfcbca00bf31186ccaadb7":"400000000000000000000",bf9f271f7a7e12e36dd2fe9facebf385fe6142bd:"62760000000000000000",e0ce80a461b648a501fd0b824690c8868b0e4de8:"500000000000000000000",a1f7dde1d738d8cd679ea1ee965bee224be7d04d:"1127000000000000000000","7f1c81ee1697fc144b7c0be5493b5615ae7fddca":"500200000000000000000",b508f987b2de34ae4cf193de85bff61389621f88:"6000000000000000000000","5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3":"1000000000000000000000",d02108d2ae3cab10cbcf1657af223e027c8210f6:"2000140000000000000000","952183cfd38e352e579d36decec5b18450f7fba0":"2000000000000000000000",eb90c793b3539761e1c814a29671148692193eb4:"12000000000000000000000","1076212d4f758c8ec7121c1c7d74254926459284":"35000056000000000000000",f05ceeab65410564709951773c8445ad9f4ec797:"299982000000000000000","05361d8eb6941d4e90fb7e1418a95a32d5257732":"20000000000000000000",a5783bf33432ff82ac498985d7d460ae67ec3673:"1820000000000000000000",b1cd4bdfd104489a026ec99d597307a04279f173:"20000000000000000000000","876c3f218b4776df3ca9dbfb270de152d94ed252":"100000000000000000000","8a36869ad478997cbf6d8924d20a3c8018e9855b":"20000000000000000000",fb3fe09bb836861529d7518da27635f538505615:"1399904000000000000000",d093e829819fd2e25b973800bb3d5841dd152d05:"4000000000000000000000","126d91f7ad86debb0557c612ca276eb7f96d00a1":"100000000000000000000","2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c":"2000000000000000000000",c4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da:"200000000000000000000","305d26c10bdc103f6b9c21272eb7cb2d9108c47e":"500000000000000000000",d0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3:"840000000000000000000","522323aad71dbc96d85af90f084b99c3f09decb7":"6000000000000000000000",f43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351:"1999944000000000000000",a2dc65ee256b59a5bd7929774f904b358df3ada1:"21319600000000000000000",f382df583155d8548f3f93440cd5f68cb79d6026:"266619800000000000000000","0c967e3061b87a753e84507eb60986782c8f3013":"100000000000000000000",a3a262afd2936819230892fde84f2d5a594ab283:"1880000000000000000000","93868ddb2a794d02ebda2fa4807c76e3609858dc":"2027851000000000000000",cd35ff010ec501a721a1b2f07a9ca5877dfcf95a:"4011000000000000000000","5824a7e22838277134308c5f4b50dab65e43bb31":"6000000000000000000000","7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba":"100000000000000000000","30513fca9f36fd788cfea7a340e86df98294a244":"447000000000000000000","283e6252b4efcf4654391acb75f903c59b78c5fb":"12000000000000000000000",eddbaafbc21be8f25562f1ed6d05d6afb58f02c2:"2000000000000000000000","0dcfe837ea1cf28c65fccec3bef1f84e59d150c0":"200000000000000000000","828ba651cb930ed9787156299a3de44cd08b7212":"1337000000000000000000",cfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe:"54508000000000000000","0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f":"2000000000000000000000","205f5166f12440d85762c967d3ae86184f8f4d98":"432500000000000000000","25dad495a11a86b9eeece1eeec805e57f157faff":"16000000000000000000000","6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314":"2000000000000000000000","91a787bc5196f34857fe0c372f4df376aaa76613":"2000000000000000000000",b0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85:"4999711000000000000000","6e4d2e39c8836629e5b487b1918a669aebdd9536":"1000000000000000000000",dc703a5f3794c84d6cb3544918cae14a35c3bd4f:"1850000000000000000000","47beb20f759100542aa93d41118b3211d664920e":"2000000000000000000000","5a7735007d70b06844da9901cdfadb11a2582c2f":"6000000000000000000000",aff107960b7ec34ed690b665024d60838c190f70:"500000000000000000000","563a03ab9c56b600f6d25b660c21e16335517a75":"1000000000000000000000",a106465bbd19e1b6bce50d1b1157dc59095a3630:"2000000000000000000000",ca9dec02841adf5cc920576a5187edd2bd434a18:"500000000000000000000","572ac1aba0de23ae41a7cae1dc0842d8abfc103b":"1910000000000000000000","5f74ed0e24ff80d9b2c4a44baa9975428cd6b935":"2980000000000000000000",f2049532fd458a83ca1bff2eebacb6d5ca63f4a4:"3625693000000000000000",cee699c0707a7836252b292f047ce8ad289b2f55:"324700000000000000000","8b3696f3c60de32432a2e4c395ef0303b7e81e75":"30000000000000000000000","13dee03e3799952d0738843d4be8fc0a803fb20e":"2000000000000000000000",c853215b9b9f2d2cd0741e585e987b5fb80c212e:"1550000000000000000000","851c0d62be4635d4777e8035e37e4ba8517c6132":"500000000000000000000",a76b743f981b693072a131b22ba510965c2fefd7:"18200000000000000000","69bd25ade1a3346c59c4e930db2a9d715ef0a27a":"4000000000000000000000","0fec4ee0d7ca180290b6bd20f9992342f60ff68d":"334383000000000000000",ccfd725760a68823ff1e062f4cc97e1360e8d997:"399800000000000000000","9f017706b830fb9c30efb0a09f506b9157457534":"2000000000000000000000","420fb86e7d2b51401fc5e8c72015decb4ef8fc2e":"1000000000000000000000",cb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b:"10000000000000000000000","6c822029218ac8e98a260c1e064029348839875b":"5010000000000000000000","1c68a66138783a63c98cc675a9ec77af4598d35e":"50100000000000000000",f270792576f05d514493ffd1f5e84bec4b2df810:"1000000000000000000000","9191f94698210516cf6321a142070e20597674ed":"17194000000000000000",c0ca3277942e7445874be31ceb902972714f1823:"250000000000000000000","35e096120deaa5c1ecb1645e2ccb8b4edbd9299a":"500000000000000000000",e2bbf84641e3541f6c33e6ed683a635a70bde2ec:"502763000000000000000",d12d77ae01a92d35117bac705aacd982d02e74c1:"1000000000000000000000",dabb0889fc042926b05ef57b2520910abc4b4149:"2000000000000000000000","5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb":"1000000000000000000000",abd154903513b8da4f019f68284b0656a1d0169b:"1000000000000000000000",ad377cd25eb53e83ae091a0a1d2b4516f484afde:"1940000000000000000000","08c2f236ac4adcd3fda9fbc6e4532253f9da3bec":"20000000000000000000","71135d8f05963c905a4a07922909235a896a52ea":"3000000000000000000000","080546508a3d2682c8b9884f13637b8847b44db3":"2000000000000000000000","2d61bfc56873923c2b00095dc3eaa0f590d8ae0f":"20760000000000000000000",cbfa6af6c283b046e2772c6063b0b21553c40106:"2000000000000000000000",ccabc6048a53464424fcf76eeb9e6e1801fa23d4:"49250000000000000000","60cc3d445ebdf76a7d7ae571c6971dff68cc8585":"1000000000000000000000",fff33a3bd36abdbd412707b8e310d6011454a7ae:"8000000000000000000000",d2dbebe89b0357aea98bbe8e496338debb28e805:"4000000000000000000000","5f521282e9b278dc8c034c72af53ee29e5443d78":"6520000000000000000000",c5a48a8500f9b4e22f0eb16c6f4649687674267d:"812721000000000000000","8cb3aa3fcd212854d7578fcc30fdede6742a312a":"300000000000000000000","90d2809ae1d1ffd8f63eda01de49dd552df3d1bc":"3998000000000000000000","96a55f00dff405dc4de5e58c57f6f6f0cac55d2f":"1962711000000000000000",ae842e81858ecfedf6506c686dc204ac15bf8b24:"40000000000000000000","0be6a09e4307fe48d412b8d1a1a8284dce486261":"19180000000000000000000",c9c7ac0bdd9342b5ead4360923f68c72a6ba633a:"500000000000000000000",ea8f30b6e4c5e65290fb9864259bc5990fa8ee8a:"20000000000000000000","74d37a51747bf8b771bfbf43943933d100d21483":"1000000000000000000000","1a04d5389eb006f9ce880c30d15353f8d11c4b31":"17072800000000000000000","726a14c90e3f84144c765cffacba3e0df11b48be":"10000000000000000000000","86b7bd563ceab686f96244f9ddc02ad7b0b14bc2":"10000000000000000000000","2bbe672a1857508f630f2a5edb563d9e9de92815":"2000000000000000000000",a17070c2e9c5a940a4ec0e4954c4d7d643be8f49:"1999965000000000000000",f2d1b7357724ec4c03185b879b63f57e26589153:"6000000000000000000000",d6a7ac4de7b510f0e8de519d973fa4c01ba83400:"1880000000000000000000","593b45a1864ac5c7e8f0caaeba0d873cd5d113b2":"6000000000000000000000","0837539b5f6a522a482cdcd3a9bb7043af39bdd2":"6000000000000000000000",b927abd2d28aaaa24db31778d27419df8e1b04bb:"27531000000000000000",b2e085fddd1468ba07415b274e734e11237fb2a9:"100000000000000000000","970938522afb5e8f994873c9fbdc26e3b37e314c":"1000000000000000000000",f3de5f26ef6aded6f06d3b911346ee70401da4a0:"354718000000000000000",bffb6929241f788693273e7022e60e3eab1fe84f:"2000000000000000000000",b56ad2aec6c8c3f19e1515bbb7dd91285256b639:"1000000000000000000000","47730f5f8ebf89ac72ef80e46c12195038ecdc49":"3160000000000000000000",f39a9d7aa3581df07ee4279ae6c312ef21033658:"4000000000000000000000","36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0":"198479000000000000000","89e3b59a15864737d493c1d23cc53dbf8dcb1362":"4000000000000000000000",bd08e0cddec097db7901ea819a3d1fd9de8951a2:"20000000000000000000","533444584082eba654e1ad30e149735c6f7ba922":"1730000000000000000000","6a8a4317c45faa0554ccdb482548183e295a24b9":"1000000000000000000000","22ce349159eeb144ef06ff2636588aef79f62832":"188000000000000000000","3cd1d9731bd548c1dd6fcea61beb75d91754f7d3":"5130285000000000000000","8b7056f6abf3b118d026e944d5c073433ca451d7":"999999000000000000000","15f1b352110d68901d8f67aac46a6cfafe031477":"200000000000000000000","0f789e30397c53bf256fc364e6ef39f853504114":"3640000000000000000000","750bbb8c06bbbf240843cc75782ee02f08a97453":"835000000000000000000",fff7ac99c8e4feb60c9750054bdc14ce1857f181:"1000000000000000000000","5c6f36af90ab1a656c6ec8c7d521512762bba3e1":"1999800000000000000000","6811b54cd19663b11b94da1de2448285cd9f68d9":"1100000000000000000000","6f50929777824c291a49c46dc854f379a6bea080":"360000000000000000000",e83604e4ff6be7f96f6018d3ec3072ec525dff6b:"182000000000000000000",d731bb6b5f3c37395e09ceaccd14a918a6060789:"3940000000000000000000","372e453a6b629f27678cc8aeb5e57ce85ec0aef9":"200000000000000000000","86924fb211aad23cf5ce600e0aae806396444087":"10000000000000000000000","18c6723a6753299cb914477d04a3bd218df8c775":"1000000000000000000000",e00484788db50fc6a48e379d123e508b0f6e5ab1:"1000000000000000000000","150e3dbcbcfc84ccf89b73427763a565c23e60d0":"40000000000000000000","8ffa062122ac307418821adb9311075a3703bfa3":"1000000000000000000000","21206ce22ea480e85940d31314e0d64f4e4d3a04":"1000000000000000000000",ac024f594f9558f04943618eb0e6b2ee501dc272:"2000000000000000000000",b2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04:"2000000000000000000000",abc74706964960dfe0dca3dca79e9216056f1cf4:"40000000000000000000000",d7eb903162271c1afa35fe69e37322c8a4d29b11:"10000000000000000000000",d7c6265dea11876c903b718e4cd8ab24fe265bde:"2000000000000000000000",cba288cd3c1eb4d59ddb06a6421c14c345a47b24:"4000000000000000000000","8c22426055b76f11f0a2de1a7f819a619685fe60":"1980000000000000000000",f463a90cb3f13e1f0643423636beab84c123b06d:"40000000000000000000","2b5ced9987c0765f900e49cf9da2d9f9c1138855":"400000000000000000000","9bb760d5c289a3e1db18db095345ca413b9a43c2":"197000000000000000000",d66ab79294074c8b627d842dab41e17dd70c5de5:"1000000000000000000000","0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630":"2000000000000000000000",d612597bc31743c78633f633f239b1e9426bd925:"76000000000000000000000","140518a3194bad1350b8949e650565debe6db315":"2000000000000000000000",daedd4ad107b271e89486cbf80ebd621dd974578:"2000000000000000000000",c36c0b63bfd75c2f8efb060883d868cccd6cbdb4:"3000000000000000000000",e646665872e40b0d7aa2ff82729caaba5bc3e89e:"400000000000000000000",b5fb7ea2ddc1598b667a9d57dd39e85a38f35d56:"500000000000000000000",e51421f8ee2210c71ed870fe618276c8954afbe9:"1337000000000000000000","08a9a44e1f41de3dbba7a363a3ab412c124cd15e":"200000000000000000000","562bced38ab2ab6c080f3b0541b8456e70824b3f":"641760000000000000000","1e484d0621f0f5331b35d5408d9aae4eb1acf21e":"20000000000000000000","3a476bd2c9e664c63ab266aa4c6e4a4825f516c3":"200000000000000000000","8d6df209484d7b94702b03a53e56b9fb0660f6f0":"2000000000000000000000","5970fb1b144dd751e4ce2eca7caa20e363dc4da3":"10000000000000000000000",d1dd79fb158160e5b4e8e23f312e6a907fbc4d4e:"500000000000000000000","7ee5ca805dce23af89c2d444e7e40766c54c7404":"240660000000000000000","93e0f37ecdfb0086e3e862a97034447b1e4dec1a":"30000000000000000000",e10ac19c546fc2547c61c139f5d1f45a6666d5b0:"4775000000000000000000","1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c":"200000000000000000000",d771d9e0ca8a08a113775731434eb3270599c40d:"20000000000000000000",e69d1c378b771e0feff051db69d966ac6779f4ed:"553000000000000000000","0ef85b49d08a75198692914eddb4b22cf5fa4450":"2004800000000000000000",ed70a37cdd1cbda9746d939658ae2a6181288578:"9600000000000000000000",eee761847e33fd61d99387ee14628694d1bfd525:"2000000000000000000000","271d3d481cb88e7671ad216949b6365e06303de0":"4000000000000000000000","5255dc69155a45b970c604d30047e2f530690e7f":"20000000000000000000",cabab6274ed15089737e287be878b757934864e2:"20000000000000000000000","9defe56a0ff1a1947dba0923f7dd258d8f12fa45":"26880000000000000000000",b7a2c103728b7305b5ae6e961c94ee99c9fe8e2b:"50000000000000000000000",b498bb0f520005b6216a4425b75aa9adc52d622b:"4000000000000000000000",c1132878235c5ddba5d9f3228b5236e47020dc6f:"1000000000000000000000",f81622e55757daea6675975dd93538da7d16991e:"2000000000000000000000",ce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec:"2000000000000000000000","86a1eadeeb30461345d9ef6bd05216fa247c0d0c":"2000000000000000000000","7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5":"2000000000000000000000","6bbc3f358a668dd1a11f0380f3f73108426abd4a":"4000000000000000000000",b1e6e810c24ab0488de9e01e574837829f7c77d0:"400000000000000000000","03eb3cb860f6028da554d344a2bb5a500ae8b86f":"2000000000000000000000",e5481a7fed42b901bbed20789bd4ade50d5f83b9:"2000000000000000000000","1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb":"554988000000000000000","30037988702671acbe892c03fe5788aa98af287a":"2800000000000000000000",edb473353979a206879de144c10a3c51d7d7081a:"6000000000000000000000","22bdffc240a88ff7431af3bff50e14da37d5183e":"1000000000000000000000","9374869d4a9911ee1eaf558bc4c2b63ec63acfdd":"1000000000000000000000",b756ad52f3bf74a7d24c67471e0887436936504c:"20000000000000000000000","8bd0b65a50ef5cef84fec420be7b89ed1470ceb9":"11999000000000000000000",af26f7c6bf453e2078f08953e4b28004a2c1e209:"100000000000000000000","7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a":"300000000000000000000000",dde670d01639667576a22dd05d3246d61f06e083:"26740000000000000000","5cf44e10540d65716423b1bcb542d21ff83a94cd":"10000000000000000000000",f96b4c00766f53736a8574f822e6474c2f21da2d:"400000000000000000000","8d89170b92b2be2c08d57c48a7b190a2f146720f":"19700000000000000000000","142b87c5043ffb5a91df18c2e109ced6fe4a71db":"200000000000000000000","42d34940edd2e7005d46e2188e4cfece8311d74d":"158000000000000000000","562105e82b099735de49f62692cc87cd38a8edcd":"6000000000000000000000","457bcef37dd3d60b2dd019e3fe61d46b3f1e7252":"20000000000000000000",cf8882359c0fb23387f5674074d8b17ade512f98:"6000000000000000000000",f0c081da52a9ae36642adf5e08205f05c54168a6:"111000000000000000000","551e7784778ef8e048e495df49f2614f84a4f1dc":"600000000000000000000","3c869c09696523ced824a070414605bb76231ff2":"1000000000000000000000","7e7f18a02eccaa5d61ab8fbf030343c434a25ef7":"66850000000000000000","9328d55ccb3fce531f199382339f0e576ee840a3":"4000000000000000000000","9d0f347e826b7dceaad279060a35c0061ecf334b":"4000000000000000000000","680640838bd07a447b168d6d923b90cf6c43cdca":"1730000000000000000000",c951900c341abbb3bafbf7ee2029377071dbc36a:"327600000000000000000",ddf5810a0eb2fb2e32323bb2c99509ab320f24ac:"17900000000000000000000","2489ac126934d4d6a94df08743da7b7691e9798e":"1000000000000000000000",f42f905231c770f0a406f2b768877fb49eee0f21:"197000000000000000000","756f45e3fa69347a9a973a725e3c98bc4db0b5a0":"200000000000000000000"}},function(e,a,t){const r=t(3);function c(e){e.copy=function(e){var a=e();return c(a),a}.bind(e,e.copy.bind(e)),e.get=function(e,a,t){var c=r.sha3(a);e(c,t)}.bind(e,e.get.bind(e)),e.put=function(e,a,t,c){if(t){var n=r.sha3(a);e(n,t,c)}else this.del(a,c)}.bind(e,e.put.bind(e)),e.del=function(e,a,t){var c=r.sha3(a);e(c,t)}.bind(e,e.del.bind(e))}e.exports=c},function(e,a,t){const r=t(44),c=t(891),n=t(1).inherits;function i(){r.apply(this,arguments),c(this)}e.exports=i,n(i,r)},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(892),n=t(29),i=t(18),f=t(45),o=t(888),d=t(887),s=t(3),b=s.BN,u=s.rlp;function l(e){var a=e.trie;a||(a=new c(a));var t=e.blockchain;t||(t=o),this.blockchain=t,this.trie=a,this._storageTries={},this.cache=new d(a),this._touched=new Set}e.exports=l;var p=l.prototype;p.copy=function(){return new l({trie:this.trie.copy(),blockchain:this.blockchain})},p.getAccount=function(e,a){this.cache.getOrLoad(e,a)},p.exists=function(e,a){this.cache.getOrLoad(e,function(e,t){a(e,t.exists)})},p.putAccount=function(e,a,t){this.cache.put(e,a),this._touched.add(e.toString("hex")),t()},p.getAccountBalance=function(e,a){this.getAccount(e,function(e,t){if(e)return a(e);a(null,t.balance)})},p.putAccountBalance=function(e,a,t){var r=this;r.getAccount(e,function(c,n){return c?t(c):new b(a).isZero()&&!n.exists?t(null):(n.balance=a,void r.putAccount(e,n,t))})},p.putContractCode=function(e,a,t){var r=this;r.getAccount(e,function(c,n){if(c)return t(c);n.setCode(r.trie,a,function(a){if(a)return t(a);r.putAccount(e,n,t)})})},p.getContractCode=function(e,a){var t=this;t.getAccount(e,function(e,r){if(e)return a(e);r.getCode(t.trie,a)})},p._lookupStorageTrie=function(e,a){var t=this;t.getAccount(e,function(e,r){if(e)return a(e);var c=t.trie.copy();c.root=r.stateRoot,c._checkpoints=[],a(null,c)})},p._getStorageTrie=function(e,a){var t=this._storageTries[e.toString("hex")];if(t)return a(null,t);this._lookupStorageTrie(e,a)},p.getContractStorage=function(e,a,t){this._getStorageTrie(e,function(e,r){if(e)return t(e);r.get(a,function(e,a){if(e)return t(e);var r=u.decode(a);t(null,r)})})},p.putContractStorage=function(e,a,t,r){var c=this;c._getStorageTrie(e,function(n,i){if(n)return r(n);if(t&&t.length){var f=u.encode(t);i.put(a,f,o)}else i.del(a,o);function o(a){if(a)return r(a);c._storageTries[e.toString("hex")]=i;var t=c.cache.get(e);t.stateRoot=i.root,c.putAccount(e,t,r),c._touched.add(e.toString("hex"))}})},p.commitContracts=function(e){var a=this;i.each(Object.keys(a._storageTries),function(e,t){var r=a._storageTries[e];delete a._storageTries[e],r.isCheckpoint?r.commit(t):t()},e)},p.revertContracts=function(){this._storageTries={},this._touched.clear()},p.getBlockHash=function(e,a){this.blockchain.getBlock(e,function(e,t){if(e)return a(e);var r=t.hash();a(null,r)})},p.checkpoint=function(){this.trie.checkpoint(),this.cache.checkpoint()},p.commit=function(e){var a=this;a.trie.commit(function(){a.cache.commit(),e()})},p.revert=function(e){this.trie.revert(),this.cache.revert(),e()},p.getStateRoot=function(e){var a=this;a.cacheFlush(function(t){if(t)return e(t);var r=a.trie.root;e(null,r)})},p.warmCache=function(e,a){this.cache.warm(e,a)},p.dumpStorage=function(e,a){this._getStorageTrie(e,function(e,t){if(e)return a(e);var r={},c=t.createReadStream();c.on("data",function(e){r[e.key.toString("hex")]=e.value.toString("hex")}),c.on("end",function(){a(r)})})},p.hasGenesisState=function(e){var a=n.genesisStateRoot.v;this.trie.checkRoot(a,e)},p.generateCanonicalGenesis=function(e){var a=this;this.hasGenesisState(function(t,r){r||t?e(t):a.generateGenesis(n.genesisState,e)})},p.generateGenesis=function(e,a){var t=this,c=Object.keys(e);i.eachSeries(c,function(a,c){var n=new f;n.balance=new b(e[a]).toArrayLike(r),a=r.from(a,"hex"),t.trie.put(a,n.serialize(),c)},a)},p.accountIsEmpty=function(e,a){this.getAccount(e,function(e,t){if(e)return a(e);a(null,""===t.nonce.toString("hex")&&""===t.balance.toString("hex")&&t.codeHash.toString("hex")===s.SHA3_NULL_S)})},p.cleanupTouchedAccounts=function(e){var a=this,t=Array.from(a._touched);i.forEach(t,function(e,t){var c=r.from(e,"hex");a.accountIsEmpty(c,function(e,r){e?t(e):(r&&a.cache.del(c),t(null))})},function(){a._touched.clear(),e()})}},function(e){e.exports=[{ip:"52.16.188.185",port:"30303",id:"a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c"},{ip:"54.94.239.50",port:"30303",id:"de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786"},{ip:"52.74.57.123",port:"30303",id:"1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082"},{ip:"5.1.83.226",port:"30303",id:"979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9"}]},function(e){e.exports={"3282791d6fd713f1e94f4bfd565eaa78b3a0599d":"1337000000000000000000","17961d633bcf20a7b029a7d94b7df4da2ec5427f":"229427000000000000000","493a67fe23decc63b10dda75f3287695a81bd5ab":"880000000000000000000","01fb8ec12425a04f813e46c54c05748ca6b29aa9":"259800000000000000000",d2a030ac8952325f9e1db378a71485a24e1b07b2:"2000000000000000000000","77a34907f305a54c85db09c363fde3c47e6ae21f":"985000000000000000000","391a77405c09a72b5e8436237aaaf95d68da1709":"49082000000000000000","00aada25ea2286709abb422d41923fd380cd04c7":"650100000000000000000",acc46a2a555c74ded4a2bd094e821b97843b40c0:"1940000000000000000000",de07fb5b7a464e3ba7fbe09e9acb271af5338c58:"50000000000000000000","4c696be99f3a690440c3436a59a7d7e937d6ba0d":"3460000000000000000000",fa33553285a973719a0d5f956ff861b2d89ed304:"20000000000000000000","67cfda6e70bf7657d39059b59790e5145afdbe61":"646000000000000000000",a321091d3018064279db399d2b2a88a6f440ae24:"3200000000000000000000",fb3fa1ac08aba9cc3bf0fe9d483820688f65b410:"30000000000000000000000","6715c14035fb57bb3d667f7b707498c41074b855":"700000000000000000000",d4344f7d5cad65d17e5c2d0e7323943d6f62fe92:"267400000000000000000",a3294626ec2984c43b43da4d5d8e4669b11d4b59:"1008000000000000000000","656018584130db83ab0591a8128d9381666a8d0e":"63960000000000000000","0fa010ce0c731d3b628e36b91f571300e49dbeab":"999800000000000000000","3098b65db93ecacaf7353c48808390a223d57684":"449965000000000000000",ae635bf73831119d2d29c0d04ff8f8d8d0a57a46:"1337000000000000000000","0f7515ff0e808f695e0c20485ff96ed2f7b79310":"1000169000000000000000","8b30c04098d7a7e6420c357ea7bfa49bac9a8a18":"8000200000000000000000","64dba2d6615b8bd7571836dc75bc79d314f5ecee":"10000000000000000000000",e7912d4cf4562c573ddc5b71e37310e378ef86c9:"394000000000000000000",a4da34450d22ec0ffcede0004b02f7872ee0b73a:"93342000000000000000","34437d1465640b136cb5841c3f934f9ba0b7097d":"173000000000000000000",c652871d192422c6bc235fa063b44a7e1d43e385:"155000000000000000000",a8a708e84f82db86a35502193b4c6ee9a76ebe8f:"1015200000000000000000","5c3f567faff7bad1b5120022e8cbcaa82b4917b3":"2000000000000000000000",dbc1d0ee2bab531140de137722cd36bdb4e47194:"200000000000000000000",f59dab1bf8df11327e61f9b7a14b563a96ec3554:"6000000000000000000000","456f8d746682b224679349064d1b368c7c05b176":"3700000000000000000000","5f13154631466dcb1353c890932a7c97e0878e90":"6000000000000000000000",f4b1626e24f30bcad9273c527fcc714b5d007b8f:"200000000000000000000",a8db0b9b201453333c757f6ad9bcb555c02da93b:"2199970000000000000000",a0fc7e53c5ebd27a2abdac45261f84ab3b51aefb:"3008250000000000000000","1b636b7a496f044d7359596e353a104616436f6b":"360354000000000000000","74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40":"999954000000000000000","9834682180b982d166badb9d9d1d9bbf016d87ee":"2000000000000000000000","1e6e0153fc161bc05e656bbb144c7187bf4fe84d":"2000000000000000000000","989c0ccff654da03aeb11af701054561d6297e1d":"4000000000000000000000","78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef":"100000000000000000000","9ef1896b007c32a15114fb89d73dbd47f9122b69":"4000000000000000000000","33320dd90f2baa110dd334872a998f148426453c":"999972000000000000000",e72e1d335cc29a96b9b1c02f003a16d971e90b9d:"1580000000000000000000","0921605f99164e3bcc28f31caece78973182561d":"793744000000000000000",fc00a420a36107dfd5f495128a5fe5abb2db0f34:"5960000000000000000000",dfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486:"4000000000000000000000","646e043d0597a664948fbb0dc15475a3a4f3a6ed":"20000000000000000000","79aeb34566b974c35a5881dec020927da7df5d25":"2000000000000000000000",dbadc61ed5f0460a7f18e51b2fb2614d9264a0e0:"40000000000000000000","97b91efe7350c2d57e7e406bab18f3617bcde14a":"9999980000000000000000","8398e07ebcb4f75ff2116de77c1c2a99f303a4cf":"500000000000000000000",f02796295101674288c1d93467053d042219b794:"740000000000000000000",f4ed848ec961739c2c7e352f435ba70a7cd5db38:"1970000000000000000000","82485728d0e281563758c75ab27ed9e882a0002d":"147000000000000000000","427ec668ac9404e895cc861511d1620a4912be98":"40000000000000000000000","1bbc199e586790be87afedc849c04726745c5d7b":"4000000000000000000000","10d945334ecde47beb9ca3816c173dfbbd0b5333":"1400000000000000000000","1dcebcb7656df5dcaa3368a055d22f9ed6cdd940":"499800000000000000000","2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c":"161000000000000000000","0a47ad9059a249fc936b2662353da6905f75c2b9":"2000000000000000000000","768498934e37e905f1d0e77b44b574bcf3ec4ae8":"20000000000000000000000",f46b6b9c7cb552829c1d3dfd8ffb11aabae782f6:"21000000000000000000","7aea25d42b2612286e99c53697c6bc4100e2dbbf":"2000000000000000000000",af3615c789d0b1152ad4db25fe5dcf222804cf62:"1000000000000000000000","92e6581e1da1f9b846e09347333dc818e2d2ac66":"3640000000000000000000","240305727313d01e73542c775ff59d11cd35f819":"5931229000000000000000",b95cfda8465ba9c2661b249fc3ab661bdfa35ff0:"318949000000000000000","1b0d076817e8d68ee2df4e1da1c1142d198c4435":"1550000000000000000000","93c2e64e5de5589ed25006e843196ee9b1cf0b3e":"1670000000000000000000","0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b":"3940000000000000000000","22b96ab2cad55db100b53001f9e4db378104c807":"10000000000000000000000",a927d48bb6cb814bc609cbcaa9151f5d459a27e1:"271600000000000000000","5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2":"13400000000000000000","9adbd3bc7b0afc05d1d2eda49ff863939c48db46":"199955000000000000000",ac7e03702723cb16ee27e22dd0b815dc2d5cae9f:"16000000000000000000000","1e210e7047886daa52aaf70f4b991dac68e3025e":"200000000000000000000",c98048687f2bfcc9bd90ed18736c57edd352b65d:"1000000000000000000000","81c18c2a238ddc4cba230a072dd7dc101e620273":"1337000000000000000000",cb3d766c983f192bcecac70f4ee03dd9ff714d51:"100000000000000000000","44a63d18424587b9b307bfc3c364ae10cd04c713":"20000000000000000000","4ab2d34f04834fbf7479649cab923d2c4725c553":"3520000000000000000000",b834acf3015322c58382eeb2b79638906e88b6de:"24000000000000000000000","7d551397f79a2988b064afd0efebee802c7721bc":"39400000000000000000000",b537d36a70eeb8d3e5c80de815225c1158cb92c4:"1500000000000000000000","805ce51297a0793b812067f017b3e7b2df9bb1f9":"100000000000000000000","085ba65febe23eefc2c802666ab1262382cfc494":"400000000000000000000",b1c0d08b36e184f9952a4037e3e53a667d070a4e:"1000000000000000000000","83fe5a1b328bae440711beaf6aad6026eda6d220":"20000000000000000000000","7fd679e5fb0da2a5d116194dcb508318edc580f3":"6560000000000000000000","41ad369f758fef38a19aa3149379832c818ef2a0":"1000060000000000000000","6d846dc12657e91af25008519c3e857f51707dd6":"4590000000000000000000",c02d6eadeacf1b78b3ca85035c637bb1ce01f490:"4000000000000000000000","826eb7cd7319b82dd07a1f3b409071d96e39677f":"1000000000000000000000","4ac9905a4cb6ab1cfd62546ee5917300b87c4fde":"1015200000000000000000",cf6e52e6b77480b1867efec6446d9fc3cc3577e8:"222010000000000000000","2476b2bb751ce748e1a4c4ff7b230be0c15d2245":"4000000000000000000000","1a505e62a74e87e577473e4f3afa16bedd3cfa52":"500000000000000000000","21d02705f3f64905d80ed9147913ea8c7307d695":"1363740000000000000000","7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf":"500000000000000000000","5338ef70eac9dd9af5a0503b5efad1039e67e725":"2674000000000000000000","50ca86b5eb1d01874df8e5f34945d49c6c1ab848":"1000000000000000000000",f3cc8bcb559465f81bfe583bd7ab0a2306453b9e:"20000000000000000000000","5c323457e187761a8276e359b7b7af3f3b6e3df6":"10000000000000000000000","4d82d7700c123bb919419bbaf046799c6b0e2c66":"20000000000000000000000","8a66abbc2d30ce21a833b0db8e561d5105e0a72c":"699958000000000000000","2ae53866fc2d14d572ab73b4a065a1188267f527":"8000000000000000000000","9af5c9894c33e42c2c518e3ac670ea9505d1b53e":"18200000000000000000",cba25c7a503cc8e0d04971ca05c762f9b762b48b:"500000000000000000000",fda3042819af3e662900e1b92b4358eda6e92590:"118200000000000000000000","9bd7c38a4210304a4d653edeff1b3ce45fce7843":"282000000000000000000",edc22fb92c638e1e21ff5cf039daa6e734dafb29:"298000000000000000000",a1f193a0592f1feb9fdfc90aa813784eb80471c9:"1400000000000000000000",e97fde0b67716325cf0ecce8a191a3761b2c791d:"1004700000000000000000","110237cf9117e767922fc4a1b78d7964da82df20":"3940000000000000000000",e32f95766d57b5cd4b173289d6876f9e64558194:"100000000000000000000",f2d59c8923759073d6f415aaf8eb065ff2f3b685:"7880000000000000000000",c53d79f7cb9b70952fd30fce58d54b9f0b59f647:"5089200000000000000000","9eb281c32719c40fdb3e216db0f37fbc73a026b7":"20000000000000000000","2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8":"399910000000000000000","61ba87c77e9b596de7ba0e326fddfeec2163ef66":"200000000000000000000",de1121829c9a08284087a43fbd2fc1142a3233b4:"1000000000000000000000","22a25812ab56dcc423175ed1d8adacce33cd1810":"1850000000000000000000","518cef27b10582b6d14f69483ddaa0dd3c87bb5c":"600000000000000000000","59161749fedcf1c721f2202d13ade2abcf460b3d":"2000000000000000000000","3e36c17253c11cf38974ed0db1b759160da63783":"7000000000000000000000",cbfa76db04ce38fb205d37b8d377cf1380da0317:"1430000000000000000000",a7e83772bc200f9006aa2a260dbaa8483dc52b30:"207730000000000000000",e87eac6d602b4109c9671bf57b950c2cfdb99d55:"49932000000000000000","9b06ad841dffbe4ccf46f1039fc386f3c321446e":"2000000000000000000000",e0f903c1e48ac421ab48528f3d4a2648080fe043:"1015200000000000000000","5d872b122e994ef27c71d7deb457bf65429eca6c":"7999973000000000000000",f34083ecea385017aa40bdd35ef7effb4ce7762d:"400000000000000000000","7f3709391f3fbeba3592d175c740e87a09541d02":"480000000000000000000","888e94917083d152202b53163939869d271175b4":"4000000000000000000000",bed4c8f006a27c1e5f7ce205de75f516bfb9f764:"16000000000000000000000",b3a6bd41f9d9c3201e050b87198fbda399342210:"3622615000000000000000","550aadae1221b07afea39fba2ed62e05e5b7b5f9":"20000000000000000000",bcedc4267ccb89b31bb764d7211171008d94d44d:"200000000000000000000","6229dcc203b1edccfdf06e87910c452a1f4d7a72":"32500000000000000000000","94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf":"23280000000000000000","0e0c9d005ea016c295cd795cc9213e87febc33eb":"198000000000000000000","55d057bcc04bd0f4af9642513aa5090bb3ff93fe":"1106680000000000000000",ed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4:"30895000000000000000","86c4ce06d9ac185bb148d96f7b7abe73f441006d":"10000000000000000000000","2c04115c3e52961b0dc0b0bf31fba4546f5966fd":"200000000000000000000",b959dce02e91d9db02b1bd8b7d17a9c41a97af09:"8000000000000000000000",e01547ba42fcafaf93938becf7699f74290af74f:"2000000000000000000000",c593d6e37d14b566643ac4135f243caa0787c182:"12000000000000000000000","2c0ee134d8b36145b47beee7af8d2738dbda08e8":"201000000000000000000","0ef54ac7264d2254abbb5f8b41adde875157db7c":"40000000000000000000","0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5":"4000000000000000000000","873e49135c3391991060290aa7f6ccb8f85a78db":"20000000000000000000","05236d4c90d065f9e3938358aaffd777b86aec49":"500000000000000000000",d2abd84a181093e5e229136f42d835e8235de109:"100007000000000000000",b56a780028039c81caf37b6775c620e786954764:"2000000000000000000000","86df73bd377f2c09de63c45d67f283eaefa0f4ab":"1000000000000000000000","7670b02f2c3cf8fd4f4730f3381a71ea431c33c7":"267400000000000000000","24aa1151bb765fa3a89ca50eb6e1b1c706417fd4":"3100000000000000000000","43227d65334e691cf231b4a4e1d339b95d598afb":"10000000000000000000000","695550656cbf90b75d92ad9122d90d23ca68ca4d":"1000000000000000000000","5281733473e00d87f11e9955e589b59f4ac28e7a":"660360000000000000000000","99a96bf2242ea1b39ece6fcc0d18aed00c0179f3":"300000000000000000000",b1cf94f8091505055f010ab4bac696e0ca0f67a1:"1580000000000000000000","54391b4d176d476cea164e5fb535c69700cb2535":"100076000000000000000","152f2bd229ddf3cb0fdaf455c183209c0e1e39a2":"2000000000000000000000",affc99d5ebb4a84fe7788d97dce274b038240438:"5000000000000000000000","23df8f48ee009256ea797e1fa369beebcf6bc663":"2302671000000000000000","3a72d635aadeee4382349db98a1813a4cfeb3df1":"200000000000000000000000",ce26f9a5305f8381094354dbfc92664e84f902b5:"230200000000000000000",d283b8edb10a25528a4404de1c65e7410dbcaa67:"12000000000000000000000",a7859fc07f756ea7dcebbccd42f05817582d973f:"10000000000000000000000",b28181a458a440f1c6bb1de8400281a3148f4c35:"376000000000000000000","27b1694eafa165ebd7cc7bc99e74814a951419dc":"800000000000000000000","66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6":"100000000000000000000","926082cb7eed4b1993ad245a477267e1c33cd568":"374300000000000000000","4a47fc3e177f567a1e3893e000e36bba23520ab8":"2000000000000000000000","594a76f06935388dde5e234696a0668bc20d2ddc":"2800000000000000000000",e91fa0badaddb9a97e88d3f4db7c55d6bb7430fe:"376000000000000000000","574de1b3f38d915846ae3718564a5ada20c2f3ed":"4000000000000000000000","5816c2687777b6d7d2a2432d59a41fa059e3a406":"133700000000000000000000",b50955aa6e341571986608bdc891c2139f540cdf:"1970000000000000000000","6d44974a31d187eda16ddd47b9c7ec5002d61fbe":"940000000000000000000","80abec5aa36e5c9d098f1b942881bd5acac6963d":"2000000000000000000000","294f494b3f2e143c2ffc9738cbfd9501850b874e":"2240000000000000000000",bca3ffd4683fba0ad3bbc90734b611da9cfb457e:"200000000000000000000","5992624c54cdec60a5ae938033af8be0c50cbb0a":"3621678000000000000000","6560941328ff587cbc56c38c78238a7bb5f442f6":"744900000000000000000","74b7e0228baed65957aebb4d916d333aae164f0e":"2000000000000000000000","8516fcaf77c893970fcd1a958ba9a00e49044019":"196279000000000000000",b992a967308c02b98af91ee760fd3b6b4824ab0e:"2000000000000000000000","30bb4357cd6910c86d2238bf727cbe8156680e62":"100014000000000000000",b8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7:"150000000000000000000000","28d4ebf41e3d3c451e943bdd7e1f175fae932a3d":"6000000000000000000000","8c83d424a3cf24d51f01923dd54a18d6b6fede7b":"4000000000000000000000","7efc90766a00bc52372cac97fabd8a3c831f8ecd":"158000000000000000000","7c2b9603884a4f2e464eceb97d17938d828bc02c":"3000000000000000000000","9d250ae4f110d71cafc7b0adb52e8d9acb6679b8":"9840000000000000000000","61b3df2e9e9fd968131f1e88f0a0eb5bd765464d":"4000000000000000000000","9ae13bd882f2576575921a94974cbea861ba0d35":"3160000000000000000000","3d09688d93ad07f3abe68c722723cd680990435e":"29999948000000000000000","5e58e255fc19870a04305ff2a04631f2ff294bb1":"17600000000000000000",bcaed0acb6a76f113f7c613555a2c3b0f5bf34a5:"193600000000000000000","159adce27aa10b47236429a34a5ac42cad5b6416":"31867951000000000000000",e834c64318205ca7dd4a21abcb08266cb21ff02c:"999999000000000000000","7b6a84718dd86e63338429ac811d7c8a860f21f1":"1790000000000000000000","2118c116ab0cdf6fd11d54a4309307b477c3fc0f":"10000000000000000000000","34a901a69f036bcf9f7843c0ba01b426e8c3dc2b":"4000000000000000000000",c7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e:"1580000000000000000000",c6045b3c350b4ce9ca0c6b754fb41a69b97e9900:"925000000000000000000",cf5a6f9df75579c644f794711215b30d77a0ce40:"2000000000000000000000",e2904b1aefa056398b6234cb35811288d736db67:"40000000000000000000","7101bd799e411cde14bdfac25b067ac890eab8e8":"1450054000000000000000",cc45fb3a555bad807b388a0357c855205f7c75e8:"865000000000000000000",ff0c3c7798e8733dd2668152891bab80a8be955c:"80220000000000000000","3536453322c1466cb905af5c335ca8db74bff1e6":"447000000000000000000","08cac8952641d8fc526ec1ab4f2df826a5e7710f":"300000000000000000000","0d8aab8f74ea862cdf766805009d3f3e42d8d00b":"5820000000000000000000","8908760cd39b9c1e8184e6a752ee888e3f0b7045":"6000000000000000000000","8156360bbd370961ceca6b6691d75006ad204cf2":"40000000000000000000000",a304588f0d850cd8d38f76e9e83c1bf63e333ede:"39800000000000000000","14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d":"15500000000000000000000",a009bf076f1ba3fa57d2a7217218bed5565a7a7a:"1000000000000000000000","1c89060f987c518fa079ec2c0a5ebfa30f5d20f7":"38000000000000000000000","8895eb726226edc3f78cc6a515077b3296fdb95e":"3940000000000000000000","7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0":"1670000000000000000000",b3c65b845aba6cd816fbaae983e0e46c82aa8622:"1000000000000000000000",eff51d72adfae143edf3a42b1aec55a2ccdd0b90:"300000000000000000000","05bb64a916be66f460f5e3b64332110d209e19ae":"4200000000000000000000",d5b117ec116eb846418961eb7edb629cd0dd697f:"3000000000000000000000","05e97b09492cd68f63b12b892ed1d11d152c0eca":"1015200000000000000000","84cc7878da605fdb019fab9b4ccfc157709cdda5":"1336922000000000000000","79cac6494f11ef2798748cb53285bd8e22f97cda":"2000000000000000000000",bd5a8c94bd8be6470644f70c8f8a33a8a55c6341:"200000000000000000000",b119e79aa9b916526581cbf521ef474ae84dcff4:"1470700000000000000000",aff1045adf27a1aa329461b24de1bae9948a698b:"33400000000000000000","4398628ea6632d393e929cbd928464c568aa4a0c":"1400000000000000000000","99997668f7c1a4ff9e31f9977ae3224bcb887a85":"291200000000000000000",bc0e8745c3a549445c2be900f52300804ab56289:"33104697000000000000000",e5bab4f0afd8a9d1a381b45761aa18f3d3cce105:"1508010000000000000000",be60037e90714a4b917e61f193d834906703b13a:"1700000000000000000000","8ed4284c0f47449c15b8d9b3245de8beb6ce80bf":"800000000000000000000","333ad1596401e05aea2d36ca47318ef4cd2cb3df":"2910000000000000000000","22db559f2c3c1475a2e6ffe83a5979599196a7fa":"1000000000000000000000",fdf449f108c6fb4f5a2b081eed7e45e6919e4d25:"2000000000000000000000","0be1bcb90343fae5303173f461bd914a4839056c":"6000000000000000000000",b981ad5e6b7793a23fc6c1e8692eb2965d18d0da:"9999924000000000000000",c75d2259306aec7df022768c69899a652185dbc4:"4000000000000000000000","6c2e9be6d4ab450fd12531f33f028c614674f197":"3580000000000000000000","6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702":"20000000000000000000000",aabdb35c1514984a039213793f3345a168e81ff1:"309760000000000000000",d315deea1d8c1271f9d1311263ab47c007afb6f5:"69760000000000000000","4faf90b76ecfb9631bf9022176032d8b2c207009":"1000032000000000000000","3e7a966b5dc357ffb07e9fe067c45791fd8e3049":"59100000000000000000","2e64a8d71111a22f4c5de1e039b336f68d398a7c":"2000000000000000000000","181fbba852a7f50178b1c7f03ed9e58d54162929":"666000000000000000000","4f7330096f79ed264ee0127f5d30d2f73c52b3d8":"499970000000000000000",a8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1:"5800000000000000000000","1f9c3268458da301a2be5ab08257f77bb5a98aa4":"200000000000000000000",fc372ff6927cb396d9cf29803500110da632bc52:"2000000000000000000000","4fa554ab955c249217386a4d3263bbf72895434e":"19982000000000000000","2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3":"2000000000000000000000","5e32c72191b8392c55f510d8e3326e3a60501d62":"44000000000000000000000","1dfaee077212f1beaf0e6f2f1840537ae154ad86":"1000000000000000000000","7eaba035e2af3793fd74674b102540cf190addb9":"1273000000000000000000",d62edb96fce2969aaf6c545e967cf1c0bc805205:"85705000000000000000","220dc68df019b6b0ccbffb784b5a5ab4b15d4060":"3940000000000000000000","45bb829652d8bfb58b8527f0ecb621c29e212ec3":"2000000000000000000000","79b120eb8806732321288f675a27a9225f1cd2eb":"2465000000000000000000","740af1eefd3365d78ba7b12cb1a673e06a077246":"19700000000000000000000","0f042c9c2fb18766f836bb59f735f27dc329fe3c":"10000000000000000000000","6dda5f788a6c688ddf921fa3852eb6d6c6c62966":"40000000000000000000","96ad579bbfa8db8ebec9d286a72e4661eed8e356":"1070750000000000000000","0c2073ba44d3ddbdb639c04e191039a71716237f":"1430000000000000000000","1a3520453582c718a21c42375bc50773255253e1":"790000000000000000000",efcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d:"401100000000000000000","0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623":"4000000000000000000000","80f07ac09e7b2c3c0a3d1e9413a544c73a41becb":"20000000000000000000",c3631c7698b6c5111989bf452727b3f9395a6dea:"10683500000000000000000","4cc22c9bc9ad05d875a397dbe847ed221c920c67":"2000000000000000000000","1a987e3f83de75a42f1bde7c997c19217b4a5f24":"2000000000000000000000","5b2b64e9c058e382a8b299224eecaa16e09c8d92":"161000000000000000000","86caafacf32aa0317c032ac36babed974791dc03":"40000000000000000000000","1cd1f0a314cbb200de0a0cb1ef97e920709d97c2":"2000000000000000000000","7d980f4b566bb045517e4c14c87750de9346744b":"1337000000000000000000","8b5f29cc2faa262cdef30ef554f50eb488146eac":"5818250000000000000000","5153a0c3c8912881bf1c3501bf64b45649e48222":"4000000000000000000000",d21a7341eb84fd151054e5e387bb25d36e499c09:"14000000000000000000000","9560e8ac6718a6a1cdcff189d603c9063e413da6":"4000000000000000000000",e49ba0cd96816c4607773cf8a5970bb5bc16a1e6:"1670000000000000000000",b8ac117d9f0dba80901445823c4c9d4fa3fedc6e:"15759015000000000000000",af67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2:"1670000000000000000000",b43c27f7a0a122084b98f483922541c8836cee2c:"715000000000000000000","4d9279962029a8bd45639737e98b511eff074c21":"1337000000000000000000",c667441e7f29799aba616451d53b3f489f9e0f48:"13920000000000000000000","275875ff4fbb0cf3a430213127487f7608d04cba":"500080000000000000000","9a953b5bcc709379fcb559d7b916afdaa50cadcc":"100000000000000000000","7ea791ebab0445a00efdfc4e4a8e9a7e7565136d":"18200000000000000000","6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6":"1940000000000000000000",f1b4ecc63525f7432c3d834ffe2b970fbeb87212:"3000064000000000000000","6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7":"4271316000000000000000",bba3c68004248e489573abb2743677066b24c8a7:"2000000000000000000000",b7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f:"4000000000000000000000",fe98c664c3e447a95e69bd582171b7176ea2a685:"4000000000000000000000",ce71086d4c602554b82dcbfce88d20634d53cc4d:"43250000000000000000000","1c601993789207f965bb865cbb4cd657cce76fc0":"98294000000000000000","476b5599089a3fb6f29c6c72e49b2e4740ea808d":"2800000000000000000000","3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2":"140000000000000000000",c4f7d2e2e22084c44f70feaab6c32105f3da376f:"1970000000000000000000",c1eba5684aa1b24cba63150263b7a9131aeec28d:"20000000000000000000","94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b":"1940000000000000000000",ded877378407b94e781c4ef4af7cfc5bc220b516:"372500000000000000000","699c9ee47195511f35f862ca4c22fd35ae8ffbf4":"80000000000000000000",e3a89a1927cc4e2d43fbcda1e414d324a7d9e057:"205500000000000000000","4d93696fa24859f5d2939aebfa54b4b51ae1dccc":"19100000000000000000","0af65f14784e55a6f95667fd73252a1c94072d2a":"192987000000000000000","5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7":"970000000000000000000","426f78f70db259ac8534145b2934f4ef1098b5d8":"360000000000000000000","58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d":"2000000000000000000000","8eae29435598ba8f1c93428cdb3e2b4d31078e00":"2000000000000000000000","17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5":"26989000000000000000",ab3e78294ba886a0cfd5d3487fb3a3078d338d6e:"1970000000000000000000",bdf6e68c0cd7584080e847d72cbb23aad46aeb1d:"1970000000000000000000",f989346772995ec1906faffeba2a7fe7de9c6bab:"6685000000000000000000",dc5f5ad663a6f263327d64cac9cb133d2c960597:"2000000000000000000000","68fe1357218d095849cd579842c4aa02ff888d93":"2000000000000000000000",e09c68e61998d9c81b14e4ee802ba7adf6d74cdb:"4000000000000000000000","890fe11f3c24db8732d6c2e772e2297c7e65f139":"62980000000000000000000",a76929890a7b47fb859196016c6fdd8289ceb755:"5000000000000000000000","2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354":"1580000000000000000000","19687daa39c368139b6e7be60dc1753a9f0cbea3":"8000000000000000000000",c69be440134d6280980144a9f64d84748a37f349:"715000000000000000000","3d8d0723721e73a6c0d860aa0557abd14c1ee362":"5000000000000000000000","2b241f037337eb4acc61849bd272ac133f7cdf4b":"378000000000000000000000","24b95ebef79500baa0eda72e77f877415df75c33":"910000000000000000000","106ed5c719b5261477890425ae7551dc59bd255c":"11979600000000000000000","5b2e2f1618552eab0db98add55637c2951f1fb19":"12000000000000000000000","403145cb4ae7489fcc90cd985c6dc782b3cc4e44":"5999800000000000000000",e8be24f289443ee473bc76822f55098d89b91cc5:"2000000000000000000000",f6bc37b1d2a3788d589b6de212dc1713b2f6e78e:"5000000000000000000000","67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5":"240000000000000000000","6580b1bc94390f04b397bd73e95d96ef11eaf3a8":"20000000000000000000","98bf4af3810b842387db70c14d46099626003d10":"4000000000000000000000","17993d312aa1106957868f6a55a5e8f12f77c843":"450065000000000000000","0729b4b47c09eb16158464c8aa7fd9690b438839":"1999800000000000000000",ae70e69d2c4a0af818807b1a2705f79fd0b5dbc4:"985000000000000000000","38b50146e71916a5448de12a4d742135dcf39833":"32200000000000000000000","38439aaa24e3636f3a18e020ea1da7e145160d86":"2600000000000000000000","54b4429b182f0377be7e626939c5db6440f75d7a":"1970000000000000000000","7179726f5c71ae1b6d16a68428174e6b34b23646":"7353500000000000000000",c2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69:"970000000000000000000","912304118b80473d9e9fe3ee458fbe610ffda2bb":"200000000000000000000","3308b03466c27a17dfe1aafceb81e16d2934566f":"17000000000000000000000","10346414bec6d3dcc44e50e54d54c2b8c3734e3e":"4000000000000000000000","4fee50c5f988206b09a573469fb1d0b42ebb6dce":"2009400000000000000000","9ece1400800936c7c6485fcdd3626017d09afbf6":"310000000000000000000",ddf3ad76353810be6a89d731b787f6f17188612b:"20000000000000000000000","72402300e81d146c2e644e2bbda1da163ca3fb56":"7000000000000000000000",bb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76:"850000000000000000000",c3dd58903886303b928625257ae1a013d71ae216:"2000000000000000000000",ca6c818befd251361e02744068be99d8aa60b84a:"6000000000000000000000",b8d2ddc66f308c0158ae3ccb7b869f7d199d7b32:"844800000000000000000","8e486a0442d171c8605be348fee57eb5085eff0d":"4000000000000000000000",a807104f2703d679f8deafc442befe849e42950b:"2000000000000000000000",bb61a04bffd57c10470d45c39103f64650347616:"1000000000000000000000",d1c45954a62b911ad701ff2e90131e8ceb89c95c:"1394000000000000000000","5e65458be964ae449f71773704979766f8898761":"528600000000000000000",f9b37825f03073d31e249378c30c795c33f83af2:"200152000000000000000",e309974ce39d60aadf2e69673251bf0e04760a10:"254030000000000000000",d541ac187ad7e090522de6da3213e9a7f4439673:"2000000000000000000000",f33efc6397aa65fb53a8f07a0f893aae30e8bcee:"2304850000000000000000",d2f1998e1cb1580cec4f6c047dcd3dcec54cf73c:"200000000000000000000","0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d":"100000000000000000000","637d67d87f586f0a5a479e20ee13ea310a10b647":"48300000000000000000000","1a5ee533acbfb3a2d76d5b685277b796c56a052b":"2000000000000000000000","323fca5ed77f699f9d9930f5ceeff8e56f59f03c":"1337000000000000000000",a5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16:"22892000000000000000","93258255b37c7f58f4b10673a932dd3afd90f4f2":"1000000000000000000000","950fe9c6cad50c18f11a9ed9c45740a6180612d0":"8000000000000000000000",ee31167f9cc93b3c6465609d79db0cde90e8484c:"2000000000000000000000","6ebb5e6957aa821ef659b6018a393a504cae4450":"2000000000000000000000",be305a796e33bbf7f9aeae6512959066efda1010:"10880000000000000000000","537f9d4d31ef70839d84b0d9cdb72b9afedbdf35":"70000000000000000000000",fe9e1197d7974a7648dcc7a03112a88edbc9045d:"4925000000000000000000","99f77f998b20e0bcdcd9fc838641526cf25918ef":"1790000000000000000000","76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4":"1000000000000000000000",defe9141f4704599159d7b223de42bffd80496b3:"100000000000000000000","7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0":"199800000000000000000","23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14":"4000000000000000000000","9f86a066edb61fcb5856de93b75c8c791864b97b":"2000000000000000000000","871b8a8b51dea1989a5921f13ec1a955a515ad47":"8000000000000000000000","4efcd9c79fb4334ca6247b0a33bd9cc33208e272":"1337000000000000000000","35ac1d3ed7464fa3db14e7729213ceaa378c095e":"1520000000000000000000",c69d663c8d60908391c8d236191533fdf7775613:"485000000000000000000",c2ed5ffdd1add855a2692fe062b5d618742360d4:"1200000000000000000000","454f0141d721d33cbdc41018bd01119aa4784818":"6000000000000000000000","6c8687e3417710bb8a93559021a1469e6a86bc77":"11126675000000000000000",ec5b198a00cfb55a97b5d53644cffa8a04d2ab45:"2000000000000000000000",cd59f3dde77e09940befb6ee58031965cae7a336:"10000000000000000000000","8eebec1a62c08b05a7d1d59180af9ff0d18e3f36":"500000000000000000000","92a971a739799f8cb48ea8475d72b2d2474172e6":"3940000000000000000000",bed4649df646e2819229032d8868556fe1e053d3:"18200000000000000000",c50fe415a641b0856c4e75bf960515441afa358d:"2000000000000000000000","91f516146cda20281719978060c6be4149067c88":"2000000000000000000000","54a1370116fe22099e015d07cd2669dd291cc9d1":"20000000000000000000","80c04efd310f440483c73f744b5b9e64599ce3ec":"1200000000000000000000",a8914c95b560ec13f140577338c32bcbb77d3a7a:"180000000000000000000",e3c812737ac606baf7522ad817428a36050e7a34:"1940000000000000000000","6d1456fff0104ee844a3314737843338d24cd66c":"141840000000000000000","0e6ece99111cad1961c748ed3df51edd69d2a3b1":"100000000000000000000000","019d709579ff4bc09fdcdde431dc1447d2c260bc":"20000000000000000000",ebff84bbef423071e604c361bba677f5593def4e:"10000000000000000000000",e10c540088113fa6ec00b4b2c8824f8796e96ec4:"236400000000000000000000",e03220c697bcd28f26ef0b74404a8beb06b2ba7b:"8000000000000000000000",e69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8:"16915503000000000000000",e5fb31a5caee6a96de393bdbf89fbe65fe125bb3:"1000000000000000000000","030fb3401f72bd3418b7d1da75bf8c519dd707dc":"3000000000000000000000","1c751e7f24df9d94a637a5dedeffc58277b5db19":"3220000000000000000000",bded7e07d0711e684de65ac8b2ab57c55c1a8645:"591000000000000000000",dd7ff441ba6ffe3671f3c0dabbff1823a5043370:"2000000000000000000000",b55474ba58f0f2f40e6cbabed4ea176e011fcad6:"1970000000000000000000",b92427ad7578b4bfe20a9f63a7c5506d5ca12dc8:"2000000000000000000000","91a8baaed012ea2e63803b593d0d0c2aab4c5b0a":"1500000000000000000000",a97e072144499fe5ebbd354acc7e7efb58985d08:"2674000000000000000000","75c2ffa1bef54919d2097f7a142d2e14f9b04a58":"2673866000000000000000","53faf165be031ec18330d9fce5bd1281a1af08db":"140000000000000000000","055ab658c6f0ed4f875ed6742e4bc7292d1abbf0":"83500000000000000000","6f18ec767e320508195f1374500e3f2e125689ff":"1000000000000000000000","90fc537b210658660a83baa9ac4a8402f65746a8":"1880000000000000000000","34664d220fa7f37958024a3332d684bcc6d4c8bd":"10000000000000000000000","15acb61568ec4af7ea2819386181b116a6c5ee70":"31000000000000000000000","69d98f38a3ba3dbc01fa5c2c1427d862832f2f70":"100000000000000000000000",ece1152682b7598fe2d1e21ec15533885435ac85:"4000000000000000000000",f618d9b104411480a863e623fc55232d1a4f48aa:"265793000000000000000",f9debaecb5f339beea4894e5204bfa340d067f25:"1665000000000000000000","5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f":"3000000000000000000000","67df242d240dd4b8071d72f8fcf35bb3809d71e8":"4000000000000000000000",c4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde:"320000000000000000000","01a25a5f5af0169b30864c3be4d7563ccd44f09e":"1430000000000000000000","7f6efb6f4318876d2ee624e27595f44446f68e93":"1550000000000000000000","82249fe70f61c6b16f19a324840fdc020231bb02":"9504014000000000000000","205237c4be146fba99478f3a7dad17b09138da95":"2000000000000000000000",fd1fb5a89a89a721b8797068fbc47f3e9d52e149:"236400000000000000000",e47fbaed99fc209962604ebd20e240f74f4591f1:"2000000000000000000000",a24c3ab62181e9a15b78c4621e4c7c588127be26:"162410000000000000000",b6cd7432d5161be79768ad45de3e447a07982063:"4000000000000000000000","32a70691255c9fc9791a4f75c8b81f388e0a2503":"985000000000000000000","562f16d79abfcec3943e34b20f05f97bdfcda605":"4000000000000000000000",dbc66965e426ff1ac87ad6eb78c1d95271158f9f:"18200000000000000000","7e87863ec43a481df04d017762edcb5caa629b5a":"39400000000000000000","587d6849b168f6c3332b7abae7eb6c42c37f48bf":"880000000000000000000","721158be5762b119cc9b2035e88ee4ee78f29b82":"10000000000000000000000","84b91e2e2902d05e2b591b41083bd7beb2d52c74":"9848621000000000000000","632cecb10cfcf38ec986b43b8770adece9200221":"20000000000000000000",c34e3ba1322ed0571183a24f94204ee49c186641:"58200000000000000000",ae78bb849139a6ba38ae92a09a69601cc4cb62d1:"500000000000000000000","5ce0b6862cce9162e87e0849e387cb5df4f9118c":"1670000000000000000000",f52c0a7877345fe0c233bb0f04fd6ab18b6f14ba:"400440000000000000000000",e016dc138e25815b90be3fe9eee8ffb2e105624f:"500000000000000000000","5789d01db12c816ac268e9af19dc0dd6d99f15df":"200000000000000000000",d8b77db9b81bbe90427b62f702b201ffc29ff618:"930200000000000000000","5dff811dad819ece3ba602c383fb5dc64c0a3a48":"186000000000000000000",af3087e62e04bf900d5a54dc3e946274da92423b:"20000000000000000000","8c1023fde1574db8bb54f1739670157ca47da652":"6969382000000000000000",bb3b010b18e6e2be1135871026b7ba15ea0fde24:"10044000000000000000000",cabdaf354f4720a466a764a528d60e3a482a393c:"1000000000000000000000","94bbc67d13f89ebca594be94bc5170920c30d9f3":"80200000000000000000","3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5":"446000000000000000000","281250a29121270a4ee5d78d24feafe82c70ba3a":"1000000000000000000000","590ccb5911cf78f6f622f535c474375f4a12cfcf":"20000000000000000000000","542e8096bafb88162606002e8c8a3ed19814aeac":"2000000000000000000000",a65426cff378ed23253513b19f496de45fa7e18f:"7200000000000000000000","4aa693b122f314482a47b11cc77c68a497876162":"1970000000000000000000",d9b783d31d32adc50fa3eacaa15d92b568eaeb47:"34010000000000000000000","068e655766b944fb263619658740b850c94afa31":"35200000000000000000","9e23c5e4b782b00a5fadf1aead87dacf5b0367a1":"20000000000000000000",bf17f397f8f46f1bae45d187148c06eeb959fa4d:"1001440000000000000000","8578e10212ca14ff0732a8241e37467db85632a9":"6000000000000000000000","2cb5495a505336c2465410d1cae095b8e1ba5cdd":"20000000000000000000000","695b0f5242753701b264a67071a2dc880836b8db":"16400000000000000000",f2edde37f9a8c39ddea24d79f4015757d06bf786:"100000000000000000000000","480f31b989311e4124c6a7465f5a44094d36f9d0":"1025000000000000000000",cf157612764e0fd696c8cb5fba85df4c0ddc3cb0:"30000000000000000000000","27521deb3b6ef1416ea4c781a2e5d7b36ee81c61":"2000000000000000000000","6efd90b535e00bbd889fda7e9c3184f879a151db":"10100000000000000000000",b635a4bc71fb28fdd5d2c322983a56c284426e69:"170000000000000000000",a17c9e4323069518189d5207a0728dcb92306a3f:"1000000000000000000000","6af940f63ec9b8d876272aca96fef65cdacecdea":"3000000000000000000000","469358709332c82b887e20bcddd0220f8edba7d0":"17300000000000000000000",a257ad594bd88328a7d90fc0a907df95eecae316:"520510000000000000000","6f051666cb4f7bd2b1907221b829b555d7a3db74":"1760000000000000000000","46bfc5b207eb2013e2e60f775fecd71810c5990c":"1550000000000000000000","62b9081e7710345e38e02e16449ace1b85bcfc4e":"910000000000000000000",bc73f7b1ca3b773b34249ada2e2c8a9274cc17c2:"2000000000000000000000","1adaf4abfa867db17f99af6abebf707a3cf55df6":"6000000000000000000000","8d629c20608135491b5013f1002586a0383130e5":"1370000000000000000000","38e46de4453c38e941e7930f43304f94bb7b2be8":"2005500000000000000000","3485f621256433b98a4200dad857efe55937ec98":"2000000000000000000000","775c10c93e0db7205b2643458233c64fc33fd75b":"2000000000000000000000","7c4401ae98f12ef6de39ae24cf9fc51f80eba16b":"200000000000000000000","17b807afa3ddd647e723542e7b52fee39527f306":"400010000000000000000","0ab366e6e7d5abbce6b44a438d69a1cabb90d133":"320000000000000000000","194ffe78bbf5d20dd18a1f01da552e00b7b11db1":"7000000000000000000000",c45d47ab0c9aa98a5bd62d16223ea2471b121ca4:"593640000000000000000","2487c3c4be86a2723d917c06b458550170c3edba":"1000000000000000000000",ec4d08aa2e47496dca87225de33f2b40a8a5b36f:"158000000000000000000",aaa8defe11e3613f11067fb983625a08995a8dfc:"200000000000000000000","50bb67c8b8d8bd0f63c4760904f2d333f400aace":"2000000000000000000000","1227e10a4dbf9caca31b1780239f557615fc35c1":"200000000000000000000","44a8989e32308121f72466978db395d1f76c3a4b":"7236900000000000000000","59569a21d28fba4bda37753405a081f2063da150":"4000000000000000000000",c3756bcdcc7eec74ed896adfc335275930266e08:"6000000000000000000000",ce3a61f0461b00935e85fa1ead82c45e5a64d488:"500000000000000000000","012f396a2b5eb83559bac515e5210df2c8c362ba":"200000000000000000000","93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c":"3999922000000000000000",e20bb9f3966419e14bbbaaaa6789e92496cfa479:"3465116000000000000000","9eef442d291a447d74c5d253c49ef324eac1d8f0":"3420000000000000000000",db6c2a73dac7424ab0d031b66761122566c01043:"3000000000000000000000","704d243c2978e46c2c86adbecd246e3b295ff633":"2012000000000000000000",d2ff672016f63b2f85398f4a6fedbb60a50d3cce:"342500000000000000000",d2051cb3cb6704f0548cc890ab0a19db3415b42a:"334000000000000000000","1111e5dbf45e6f906d62866f1708101788ddd571":"1300200000000000000000","6a686bf220b593deb9b7324615fb9144ded3f39d":"1460000000000000000000","911feea61fe0ed50c5b9e5a0d66071399d28bdc6":"60000000000000000000","3881defae1c07b3ce04c78abe26b0cdc8d73f010":"200000000000000000000",ea94f32808a2ef8a9bf0861d1d2404f7b7be258a:"20000000000000000000","2eef6b1417d7b10ecfc19b123a8a89e73e526c58":"600000000000000000000",dd8af9e7765223f4446f44d3d509819a3d3db411:"10000000000000000000000","2efc4c647dac6acac35577ad221758fef6616faa":"8000000000000000000000","1547b9bf7ad66274f3413827231ba405ee8c88c1":"17300000000000000000000","250a40cef3202397f240469548beb5626af4f23c":"92500000000000000000",c175be3194e669422d15fee81eb9f2c56c67d9c9:"200000000000000000000",c9e02608066828848aeb28c73672a12925181f4d:"500038000000000000000","8229ceb9f0d70839498d44e6abed93c5ca059f5d":"123300000000000000000000","39f198331e4b21c1b760a3155f4ab2fe00a74619":"2000000000000000000000","3ffcb870d4023d255d5167d8a507cefc366b68ba":"649400000000000000000","00dae27b350bae20c5652124af5d8b5cba001ec1":"40000000000000000000",fc5500825105cf712a318a5e9c3bfc69c89d0c12:"4000000000000000000000","1ed8bb3f06778b039e9961d81cb71a73e6787c8e":"2000000000000000000000","530ffac3bc3412e2ec0ea47b7981c770f5bb2f35":"133700000000000000000","5f344b01c7191a32d0762ac188f0ec2dd460911d":"1000000000000000000000","5cfa9877f719c79d9e494a08d1e41cf103fc87c9":"200000000000000000000",f6eaac7032d492ef17fd6095afc11d634f56b382:"500038000000000000000","962c0dec8a3d464bf39b1215eafd26480ae490cd":"2001680000000000000000","262a8bfd7d9dc5dd3ad78161b6bb560824373655":"1169820000000000000000","9b4824ff9fb2abda554dee4fb8cf549165570631":"20000000000000000000",bb3b9005f46fd2ca3b30162599928c77d9f6b601:"8000014000000000000000",f7dc251196fbcbb77c947d7c1946b0ff65021cea:"1000000000000000000000",af1148ef6c8e103d7530efc91679c9ac27000993:"200000000000000000000","0bb2650ea01aca755bc0c017b64b1ab5a66d82e3":"1337000000000000000000","0cda12bf72d461bbc479eb92e6491d057e6b5ad1":"10000000000000000000000","4e5b77f9066159e615933f2dda7477fa4e47d648":"200000000000000000000","391161b0e43c302066e8a68d2ce7e199ecdb1d57":"4000000000000000000000",c7e330cd0c890ac99fe771fcc7e7b009b7413d8a:"4000000000000000000000",d4b38a5fdb63e01714e9801db47bc990bd509183:"5999000000000000000000",bc0f98598f88056a26339620923b8f1eb074a9fd:"200000000000000000000",dbc59ed88973dead310884223af49763c05030f1:"20000000000000000000","0f85e42b1df321a4b3e835b50c00b06173968436":"985000000000000000000",d7788ef28658aa06cc53e1f3f0de58e5c371be78:"6685000000000000000000",ecd276af64c79d1bd9a92b86b5e88d9a95eb88f8:"20000000000000000000","81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec":"1820000000000000000000","5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5":"2000000000000000000000","99878f9d6e0a7ed9aec78297b73879a80195afe0":"3980000000000000000000","7294c918b1aefb4d25927ef9d799e71f93a28e85":"197000000000000000000",a33f70da7275ef057104dfa7db64f472e9f5d553:"80220000000000000000","255bdd6474cc8262f26a22c38f45940e1ceea69b":"4000000000000000000000","52f8b509fee1a874ab6f9d87367fbeaf15ac137f":"1000000000000000000000",e2728a3e8c2aaac983d05dc6877374a8f446eee9:"197600000000000000000",ed0206cb23315128f8caff26f6a30b985467d022:"40000000000000000000000","87cf36ad03c9eae9053abb5242de9117bb0f2a0b":"500000000000000000000",a929c8bd71db0c308dac06080a1747f21b1465aa:"500000000000000000000","9da6e075989c7419094cc9f6d2e49393bb199688":"11100000000000000000000","763eece0b08ac89e32bfa4bece769514d8cb5b85":"4000000000000000000000","5df3277ca85936c7a0d2c0795605ad25095e7159":"2000000000000000000000","7163758cbb6c4c525e0414a40a049dcccce919bb":"200000000000000000000","14cdddbc8b09e6675a9e9e05091cb92238c39e1e":"5100000000000000000000",b3b7f493b44a2c8d80ec78b1cdc75a652b73b06c:"2000000000000000000000",c69b855539ce1b04714728eec25a37f367951de7:"2000000000000000000000","052eab1f61b6d45517283f41d1441824878749d0":"4000000000000000000000","515651d6db4faf9ecd103a921bbbbe6ae970fdd4":"20000000000000000000000",c7aff91929797489555a2ff1d14d5c695a108355:"1000000000000000000000",d7ca7fdcfebe4588eff5421d1522b61328df7bf3:"4001070000000000000000",eefba12dfc996742db790464ca7d273be6e81b3e:"1000000000000000000000",ebaa216de9cc5a43031707d36fe6d5bedc05bdf0:"1969606000000000000000","559194304f14b1b93afe444f0624e053c23a0009":"400000000000000000000","4ecc19948dd9cd87b4c7201ab48e758f28e7cc76":"500200000000000000000",f224eb900b37b4490eee6a0b6420d85c947d8733:"970000000000000000000","97810bafc37e84306332aacb35e92ad911d23d24":"1000000000000000000000",bd67d2e2f82da8861341bc96a2c0791fddf39e40:"200014000000000000000","1b6495891240e64e594493c2662171db5e30ce13":"172400000000000000000","00bdd4013aa31c04616c2bc9785f2788f915679b":"13400000000000000000",c6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9:"400000000000000000000",b7c9f12b038e73436d17e1c12ffe1aeccdb3f58c:"540000000000000000000",c1b500011cfba95d7cd636e95e6cbf6167464b25:"200000000000000000000","39e0db4d60568c800b8c5500026c2594f5768960":"1000000000000000000000","40e3c283f7e24de0410c121bee60a5607f3e29a6":"1000000000000000000000","2f7d3290851be5c6b4b43f7d4574329f61a792c3":"100000000000000000000",c33ece935a8f4ef938ea7e1bac87cb925d8490ca:"33122000000000000000000","57bddf078834009c89d88e6282759dc45335b470":"2148000000000000000000","50ad187ab21167c2b6e78be0153f44504a07945e":"100076000000000000000","5bd24aac3612b20c609eb46779bf95698407c57c":"1970000000000000000000","16526c9edf943efa4f6d0f0bae81e18b31c54079":"985000000000000000000","4c6a9dc2cab10abb2e7c137006f08fecb5b779e1":"499000000000000000000","02c9f7940a7b8b7a410bf83dc9c22333d4275dd3":"5000000000000000000000",b9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f:"1000000000000000000000","7e268f131ddf687cc325c412f78ba961205e9112":"16000600000000000000000","180478a655d78d0f3b0c4f202b61485bc4002fd5":"2000000000000000000000",ed4014538cee664a2fbcb6dc669f7ab16d0ba57c:"200000000000000000000",f63a579bc3eac2a9490410128dbcebe6d9de8243:"1490000000000000000000","5d822d9b3ef4b502627407da272f67814a6becd4":"20000000000000000000",eb52ab10553492329c1c54833ae610f398a65b9d:"152000000000000000000","63340a57716bfa63eb6cd133721202575bf796f0":"209967000000000000000","933bf33f8299702b3a902642c33e0bfaea5c1ca3":"15200000000000000000","25bc49ef288cd165e525c661a812cf84fbec8f33":"338464000000000000000",c8231ba5a411a13e222b29bfc1083f763158f226:"1000090000000000000000","6c15ec3520bf8ebbc820bd0ff19778375494cf9d":"2005500000000000000000",aaced8a9563b1bc311dbdffc1ae7f57519c4440c:"2000000000000000000000",d90f3009db437e4e11c780bec8896f738d65ef0d:"4000000000000000000000","5603241eb8f08f721e348c9d9ad92f48e390aa24":"200000000000000000000","53cec6c88092f756efe56f7db11228a2db45b122":"4000000000000000000000","194cebb4929882bf3b4bf9864c2b1b0f62c283f9":"571300000000000000000","4be8628a8154874e048d80c142181022b180bcc1":"60000000000000000000","5fd973af366aa5157c54659bcfb27cbfa5ac15d6":"4000000000000000000000","303139bc596403d5d3931f774c66c4ba467454db":"1699830000000000000000","87584a3f613bd4fac74c1e780b86d6caeb890cb2":"1700000000000000000000","77f4e3bdf056883cc87280dbe640a18a0d02a207":"193806000000000000000","4de3fe34a6fbf634c051997f47cc7f48791f5824":"1999000000000000000000",c45a1ca1036b95004187cdac44a36e33a94ab5c3:"254800000000000000000","65d33eb39cda6453b19e61c1fe4db93170ef9d34":"13370000000000000000",f65616be9c8b797e7415227c9138faa0891742d7:"790000000000000000000",e17812f66c5e65941e186c46922b6e7b2f0eeb46:"1820000000000000000000",d47f50df89a1cff96513bef1b2ae3a2971accf2c:"840000000000000000000","8ed1528b447ed4297902f639c514d0944a88f8c8":"198800000000000000000",a4fb14409a67b45688a8593e5cc2cf596ced6f11:"1790000000000000000000","855d9aef2c39c6230d09c99ef6494989abe68785":"161000000000000000000","778c43d11afe3b586ff374192d96a7f23d2b9b7f":"2577139000000000000000",e3ece1f632711d13bfffa1f8f6840871ee58fb27:"4000000000000000000000",beb3358c50cf9f75ffc76d443c2c7f55075a0589:"2674000000000000000000",f156dc0b2a981e5b55d3f2f03b8134e331dbadb7:"100000000000000000000",eb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb:"1966000000000000000000","2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0":"18500000000000000000",ec75b4a47513120ba5f86039814f1998e3817ac3:"178756000000000000000","9c3d0692ceeef80aa4965ceed262ffc7f069f2dc":"200000000000000000000",e05029aceb0778675bef1741ab2cd2931ef7c84b:"5000057000000000000000","41d3b731a326e76858baa5f4bd89b57b36932343":"394000000000000000000",c346cb1fbce2ab285d8e5401f42dd7234d37e86d:"83500000000000000000","45f4fc60f08eaca10598f0336329801e3c92cb46":"200000000000000000000",f04a6a379708b9428d722aa2b06b77e88935cf89:"300000000000000000000","232832cd5977e00a4c30d0163f2e24f088a6cb09":"3000000000000000000000",d2ac0d3a58605e1d0f0eb3de25b2cad129ed6058:"4000000000000000000000",a356551bb77d4f45a6d7e09f0a089e79cca249cb:"340000000000000000000",b50c9f5789ae44e2dce017c714caf00c830084c2:"394000000000000000000","21fd6c5d97f9c600b76821ddd4e776350fce2be0":"1999946000000000000000",f0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c:"16700000000000000000000",ab7091932e4bc39dbb552380ca934fd7166d1e6e:"3340000000000000000000",acd8dd91f714764c45677c63d852e56eb9eece2e:"2000000000000000000000","57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b":"2000000000000000000000","5af46a25ac09cb73616b53b14fb42ff0a51cddb2":"4000000000000000000000","1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb":"4200000000000000000000","03337012ae1d7ff3ee7f697c403e7780188bf0ef":"200000000000000000000","32eb64be1b5dede408c6bdefbe6e405c16b7ed02":"1970000000000000000000","22e2488e2da26a49ae84c01bd54b21f2947891c6":"1730000000000000000000",be98a77fd41097b34f59d7589baad021659ff712:"900000000000000000000",dda4ed2a58a8dd20a73275347b580d71b95bf99a:"399000000000000000000","671110d96aaff11523cc546bf9940eedffb2faf7":"4000000000000000000000","5d71799c8df3bccb7ee446df50b8312bc4eb71c5":"200000000000000000000",ae179a460db66326743d24e67523a57b246daf7f:"4722920000000000000000","198bfcf1b07ae308fa2c02069ac9dafe7135fb47":"20000000000000000000","4662a1765ee921842ddc88898d1dc8627597bd7e":"10000000000000000000000","783eec8aa5dac77b2e6623ed5198a431abbaee07":"440000000000000000000",ed6643c0e8884b2d3211853785a08bf8f33ed29f:"1337000000000000000000","5cc7d3066d45d27621f78bb4b339473e442a860f":"9999908000000000000000","94ef8be45077c7d4c5652740de946a62624f713f":"100085000000000000000","2f853817afd3b8f3b86e9f60ee77b5d97773c0e3":"1451450000000000000000","3e0b8ed86ed669e12723af7572fbacfe829b1e16":"1499800000000000000000",fa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6:"291200000000000000000","2c234f505ca8dcc77d9b7e01d257c318cc19396d":"100000000000000000000",f3f24fc29e20403fc0e8f5ebbb553426f78270a2:"100000000000000000000","91546b79ecf69f936b5a561508b0d7e50cc5992f":"267400000000000000000","435443b81dfdb9bd8c6787bc2518e2d47e57c15f":"5968500000000000000000","3a06e3bb1edcfd0c44c3074de0bb606b049894a2":"10000000000000000000000","3a3108c1e680a33b336c21131334409d97e5adec":"20000000000000000000","2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210":"139740000000000000000",f44f8551ace933720712c5c491cdb6f2f951736c:"4000000000000000000000","5bc1f95507b1018642e45cd9c0e22733b9b1a326":"100000000000000000000","94ca56de777fd453177f5e0694c478e66aff8a84":"500000000000000000000",afdd1b786162b8317e20f0e979f4b2ce486d765d:"20000000000000000000","3a805fa0f7387f73055b7858ca8519edd93d634f":"1850000000000000000000","8b36224c7356e751f0c066c35e3b44860364bfc2":"998987000000000000000",cfecbea07c27002f65fe534bb8842d0925c78402:"4000000000000000000000","482982ac1f1c6d1721feecd9b9c96cd949805055":"10000000000000000000000",af880fc7567d5595cacce15c3fc14c8742c26c9e:"133700000000000000000",acc1c78786ab4d2b3b277135b5ba123e0400486b:"78800000000000000000","41f27e744bd29de2b0598f02a0bb9f98e681eaa4":"7760000000000000000000","09a025316f967fa8b9a1d60700063f5a68001caa":"38200000000000000000","391f20176d12360d724d51470a90703675594a4d":"1600000000000000000000",fe4d8403216fd571572bf1bdb01d00578978d688:"9850000000000000000000","900f0b8e35b668f81ef252b13855aa5007d012e7":"425000000000000000000",c35b95a2a3737cb8f0f596b34524872bd30da234:"7540000000000000000000","412a68f6c645559cc977fc4964047a201d1bb0e2":"50000000000000000000000",d3dad1b6d08d4581ccae65a8732db6ac69f0c69e:"6000000000000000000000","35855ec641ab9e081ed0c2a6dcd81354d0244a87":"1201897000000000000000","88015d7203c5e0224aeda286ed12f1a51b789333":"4999711000000000000000","251c12722c6879227992a304eb3576cd18434ea5":"2000000000000000000000","1f6f0030349752061c96072bc3d6eb3549208d6b":"23891000000000000000","86153063a1ae7f02f1a88136d4d69c7c5e3e4327":"1000000000000000000000","78355df0a230f83d032c703154414de3eedab557":"2000000000000000000000",c5b56cd234267c28e89c6f6b2266b086a12f970c:"4000000000000000000000","3e3cd3bec06591d6346f254b621eb41c89008d31":"993800000000000000000","378ea1dc8edc19bae82638029ea8752ce98bcfcd":"2000000000000000000000","67632046dcb25a54936928a96f423f3320cbed92":"2000000000000000000000",ddbee6f094eae63420b003fb4757142aea6cd0fd:"2000000000000000000000",b555d00f9190cc3677aef314acd73fdc39399259:"2000000000000000000000",e230fe1bff03186d0219f15d4c481b7d59be286a:"36710000000000000000","3e4e9265223c9738324cf20bd06006d0073edb8c":"133700000000000000000","7450ff7f99eaa9116275deac68e428df5bbcd8b9":"2000000000000000000000","021f69043de88c4917ca10f1842897eec0589c7c":"1978760000000000000000","351787843505f8e4eff46566cce6a59f4d1c5fe7":"9250000000000000000000",ebd37b256563e30c6f9289a8e2702f0852880833:"1999944000000000000000",ed41e1a28f5caa843880ef4e8b08bd6c33141edf:"790174000000000000000","8d238e036596987643d73173c37b0ad06055b96c":"2089724000000000000000","478e524ef2a381d70c82588a93ca7a5fa9d51cbf":"254908000000000000000000","4419ac618d5dea7cdc6077206fb07dbdd71c1702":"4000000000000000000000",ca25ff34934c1942e22a4e7bd56f14021a1af088:"197000000000000000000","5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b":"1000000000000000000000","4354221e62dc09e6406436163a185ef06d114a81":"2000000000000000000000",ca0432cb157b5179f02ebba5c9d1b54fec4d88ca:"1000000000000000000000","8a780ab87a9145fe10ed60fa476a740af4cab1d2":"334000000000000000000","4ff676e27f681a982d8fd9d20e648b3dce05e945":"2800000000000000000000","6c63fc85029a2654d79b2bea4de349e4524577c5":"660000000000000000000","1ac089c3bc4d82f06a20051a9d732dc0e734cb61":"700300000000000000000","4bf4479799ef82eea20943374f56a1bf54001e5e":"3940000000000000000000","08411652c871713609af0062a8a1281bf1bbcfd9":"1400000000000000000000",e1bfaa5a45c504428923c4a61192a55b1400b45d:"2674000000000000000000","5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3":"40000000000000000000000",bb27c6a7f91075475ab229619040f804c8ec7a6a:"10000000000000000000000","5d8d31faa864e22159cd6f5175ccecc53fa54d72":"26980000000000000000000","2dd8eeef87194abc2ce7585da1e35b7cea780cb7":"999999000000000000000","0e1801e70b6262861b1134ccbc391f568afc92f7":"4000000000000000000000","61042b80fd6095d1b87be2f00f109fabafd157a6":"100000000000000000000",fb5518714cefc36d04865de5915ef0ff47dfe743:"2000000000000000000000",b5add1e7809f7d03069bfe883b0a932210be8712:"1000000000000000000000",c2e2d498f70dcd0859e50b023a710a6d4b2133bd:"1037130000000000000000","4ad047fae67ef162fe68fedbc27d3b65caf10c36":"1970000000000000000000","69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f":"4000000000000000000000","683633010a88686bea5a98ea53e87997cbf73e69":"99960000000000000000","6cb11ecb32d3ce829601310636f5a10cf7cf9b5f":"20068370000000000000000",a613456996408af1c2e93e177788ab55895e2b32:"6366000000000000000000","8308ed0af7f8a3c1751fafc877b5a42af7d35882":"1000000000000000000000",e5edf8123f2403ce1a0299becf7aac744d075f23:"200200000000000000000","05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1":"400000000000000000000","00b277b099a8e866ca0ec65bcb87284fd142a582":"1970000000000000000000","4b9e068fc4680976e61504912985fd5ce94bab0d":"668500000000000000000","12134e7f6b017bf48e855a399ca58e2e892fa5c8":"1000000000000000000000",dffcea5421ec15900c6ecfc777184e140e209e24:"19980000000000000000","2132c0516a2e17174ac547c43b7b0020d1eb4c59":"985000000000000000000",d39a5da460392b940b3c69bc03757bf3f2e82489:"7019250000000000000000","66c8331efe7198e98b2d32b938688e3241d0e24f":"9620000000000000000000",bdca2a0ff34588af625fa8e28fc3015ab5a3aa00:"2339800000000000000000","7dfc342dffcf45dfee74f84c0995397bd1a63172":"250000000000000000000",a202547242806f6e70e74058d6e5292defc8c8d4:"2002000000000000000000","3bbc13d04accc0707aebdcaef087d0b87e0b5ee3":"3520000000000000000000",be5cba8d37427986e8ca2600e858bb03c359520f:"2955000000000000000000","4174fa1bc12a3b7183cbabb77a0b59557ba5f1db":"2000000000000000000000","9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16":"804000000000000000000","25e661c939863acc044e6f17b5698cce379ec3cc":"1370000000000000000000","24bd5904059091d2f9e12d6a26a010ca22ab14e8":"1880000000000000000000",c96626728aaa4c4fb3d31c26df3af310081710d1:"3340000000000000000000","0fb5d2c673bfb1ddca141b9894fd6d3f05da6720":"100000000000000000000","2de31afd189a13a76ff6fe73ead9f74bb5c4a629":"6000000000000000000000",bd09126c891c4a83068059fe0e15796c4661a9f4:"800000000000000000000","496f5843f6d24cd98d255e4c23d1e1f023227545":"1754143000000000000000","540cf23dd95c4d558a279d778d2b3735b3164191":"10000000000000000000000","9b5ec18e8313887df461d2902e81e67a8f113bb1":"100000000000000000000",b7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91:"1820000000000000000000","2590126870e0bde8a663ab040a72a5573d8d41c2":"5000000000000000000000","090fa9367bda57d0d3253a0a8ff76ce0b8e19a73":"1000000000000000000000","2a5ba9e34cd58da54c9a2712663a3be274c8e47b":"197000000000000000000","3e8641d43c42003f0a33c929f711079deb2b9e46":"500000000000000000000",f4d97664cc4eec9edbe7fa09f4750a663b507d79:"4000000000000000000000",b1540e94cff3465cc3d187e7c8e3bdaf984659e2:"2989950000000000000000",f96883582459908c827627e86f28e646f9c7fc7a:"8350000000000000000000",d4feed99e8917c5c5458635f3603ecb7e817a7d0:"300031000000000000000","14b1603ec62b20022033eec4d6d6655ac24a015a":"50000000000000000000",af8e1dcb314c950d3687434d309858e1a8739cd4:"267400000000000000000","4b9206ba6b549a1a7f969e1d5dba867539d1fa67":"7880000000000000000000","471010da492f4018833b088d9872901e06129174":"500000000000000000000",d243184c801e5d79d2063f3578dbae81e7b3a9cb:"1989700000000000000000","3eada8c92f56067e1bb73ce378da56dc2cdfd365":"2210000000000000000000","33ea6b7855e05b07ab80dab1e14de9b649e99b6c":"532000000000000000000","700711e311bb947355f755b579250ca7fd765a3e":"1790000000000000000000","87fb26c31e48644d693134205cae43b21f18614b":"1370000000000000000000","001d14804b399c6ef80e64576f657660804fec0b":"4200000000000000000000",f9642086b1fbae61a6804dbe5fb15ec2d2b537f4:"2000000000000000000000","6919dd5e5dfb1afa404703b9faea8cee35d00d70":"5910000000000000000000","9ac4da51d27822d1e208c96ea64a1e5b55299723":"100040000000000000000","1bd8ebaa7674bb18e19198db244f570313075f43":"150000000000000000000",e64ef012658d54f8e8609c4e9023c09fe865c83b:"28000000000000000000","43b079baf0727999e66bf743d5bcbf776c3b0922":"2000000000000000000000","06ac26ad92cb859bd5905ddce4266aa0ec50a9c5":"775000000000000000000","99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f":"985000000000000000000","4ae93082e45187c26160e66792f57fad3551c73a":"21658000000000000000000","7da7613445a21299aa74f0ad71431ec43fbb1be9":"68000000000000000000","4a9a26fd0a8ba10f977da4f77c31908dab4a8016":"1790000000000000000000","972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9":"200000000000000000000",b5046cb3dc1dedbd364514a2848e44c1de4ed147:"16445100000000000000000","48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb":"3220000000000000000000","46c1aa2244b9c8a957ca8fac431b0595a3b86824":"4000000000000000000000","21fd0bade5f4ef7474d058b7f3d854cb1300524e":"20000000000000000000","1864a3c7b48155448c54c88c708f166709736d31":"133700000000000000000","5dd53ae897526b167d39f1744ef7c3da5b37a293":"8000000000000000000000",ece111670b563ccdbebca52384290ecd68fe5c92:"20000000000000000000","74d671d99cbea1ab57906375b63ff42b50451d17":"1000000000000000000000","5717cc9301511d4a81b9f583148beed3d3cc8309":"2600000000000000000000","8f92844f282a92999ee5b4a8d773d06b694dbd9f":"1940000000000000000000",b5a606f4ddcbb9471ec67f658caf2b00ee73025e:"4325000000000000000000",bdb60b823a1173d45a0792245fb496f1fd3301cf:"2000000000000000000000","1d2615f8b6ca5012b663bdd094b0c5137c778ddf":"10000000000000000000000","82ff716fdf033ec7e942c909d9831867b8b6e2ef":"1790000000000000000000","44c14765127cde11fab46c5d2cf4d4b2890023fd":"2000000000000000000000",c72cb301258e91bc08998a805dd192f25c2f9a35:"591000000000000000000",ad732c976593eec4783b4e2ecd793979780bfedb:"2000000000000000000000",d8f62036f03b7635b858f1103f8a1d9019a892b6:"50000000000000000000","0a06fad7dcd7a492cbc053eeabde6934b39d8637":"20000000000000000000","67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d":"1790000000000000000000","4b5cdb1e428c91dd7cb54a6aed4571da054bfe52":"88000000000000000000",b3557d39b5411b84445f5f54f38f62d2714d0087:"600000000000000000000","0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb":"2000000000000000000000","9b2be7f56754f505e3441a10f7f0e20fd3ddf849":"340000000000000000000","0b93fca4a4f09cac20db60e065edcccc11e0a5b6":"200000000000000000000","3bc85d6c735b9cda4bba5f48b24b13e70630307b":"1970000000000000000000","52102354a6aca95d8a2e86d5debda6de69346076":"2000000000000000000000",cda4530f4b9bc50905b79d17c28fc46f95349bdf:"942000000000000000000",ff545bbb66fbd00eb5e6373ff4e326f5feb5fe12:"20000000000000000000","4030a925706b2c101c8c5cb9bd05fbb4f6759b18":"4000000000000000000000",f11e01c7a9d12499005f4dae7716095a34176277:"400000000000000000000",a4826b6c3882fad0ed5c8fbb25cc40cc4f33759f:"2068000000000000000000","28510e6eff1fc829b6576f4328bc3938ec7a6580":"10000000000000000000000","9ce5363b13e8238aa4dd15acd0b2e8afe0873247":"200000000000000000000",d97bc84abd47c05bbf457b2ef659d61ca5e5e48f:"122000000000000000000","4a719061f5285495b37b9d7ef8a51b07d6e6acac":"199800000000000000000","8b714522fa2839620470edcf0c4401b713663df1":"200000000000000000000",b6decf82969819ba02de29b9b593f21b64eeda0f:"740000000000000000000",c87d3ae3d88704d9ab0009dcc1a0067131f8ba3c:"1969606000000000000000",dccb370ed68aa922283043ef7cad1b9d403fc34a:"4000000000000000000000","2d532df4c63911d1ce91f6d1fcbff7960f78a885":"1669833000000000000000","1fcfd1d57f872290560cb62d600e1defbefccc1c":"1490000000000000000000",d9e27eb07dfc71a706060c7f079238ca93e88539:"1000000000000000000000",da7732f02f2e272eaf28df972ecc0ddeed9cf498:"205274000000000000000",bf09d77048e270b662330e9486b38b43cd781495:"436000000000000000000000","619f171445d42b02e2e07004ad8afe694fa53d6a":"20000000000000000000","2bdd03bebbee273b6ca1059b34999a5bbd61bb79":"20000000000000000000","8da1d359ba6cb4bcc57d7a437720d55db2f01c72":"80000000000000000000",be935793f45b70d8045d2654d8dd3ad24b5b6137:"880000000000000000000",ee71793e3acf12a7274f563961f537529d89c7de:"2000000000000000000000","86f05d19063e9369c6004eb3f123943a7cff4eab":"1999944000000000000000","87b10f9c280098179a2b76e9ce90be61fc844d0d":"1337000000000000000000","243c84d12420570cc4ef3baba1c959c283249520":"2345000000000000000000","6bc85acd5928722ef5095331ee88f484b8cf8357":"180000000000000000000","2561a138dcf83bd813e0e7f108642be3de3d6f05":"999940000000000000000","7d0350e40b338dda736661872be33f1f9752d755":"49933000000000000000",e5dc9349cb52e161196122cf87a38936e2c57f34:"2000000000000000000000","543a8c0efb8bcd15c543e2a6a4f807597631adef":"5893800000000000000000","0413d0cf78c001898a378b918cd6e498ea773c4d":"280000000000000000000","3708e59de6b4055088782902e0579c7201a8bf50":"200000000000000000000000","699fc6d68a4775573c1dcdaec830fefd50397c4e":"60000000000000000000","379a7f755a81a17edb7daaa28afc665dfa6be63a":"25000000000000000000","260a230e4465077e0b14ee4442a482d5b0c914bf":"1677935000000000000000","3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a":"1667400000000000000000","7f3a1e45f67e92c880e573b43379d71ee089db54":"100000000000000000000000","38643babea6011316cc797d9b093c897a17bdae7":"334400000000000000000","84675e9177726d45eaa46b3992a340ba7f710c95":"1000000000000000000000","0f83461ba224bb1e8fdd9dae535172b735acb4e0":"200000000000000000000","31aa3b1ebe8c4dbcb6a708b1d74831e60e497660":"400000000000000000000",a32cf7dde20c3dd5679ff5e325845c70c5962662:"20000000000000000000",c007f0bdb6e7009202b7af3ea90902697c721413:"2999966000000000000000","05c64004a9a826e94e5e4ee267fa2a7632dd4e6f":"16191931000000000000000",f622e584a6623eaaf99f2be49e5380c5cbcf5cd8:"200000000000000000000","9dc10fa38f9fb06810e11f60173ec3d2fd6a751e":"1970000000000000000000","423c3107f4bace414e499c64390a51f74615ca5e":"2000000000000000000000","92438e5203b6346ff886d7c36288aacccc78ceca":"1000000000000000000000",bef07d97c3481f9d6aee1c98f9d91a180a32442b:"100000000000000000000000","55aa5d313ebb084da0e7801091e29e92c5dec3aa":"2000000000000000000000","89c433d601fad714da6369308fd26c1dc9942bbf":"2000000000000000000000","25106ab6755df86d6b63a187703b0cfea0e594a0":"27400000000000000000","494256e99b0f9cd6e5ebca3899863252900165c8":"14000000000000000000000","5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5":"5000196000000000000000","135cecd955e5798370769230159303d9b1839f66":"5000000000000000000000",ced81ec3533ff1bfebf3e3843ee740ad11758d3e:"1970000000000000000000","688eb3853bbcc50ecfee0fa87f0ab693cabdef02":"31600000000000000000000","2159240813a73095a7ebf7c3b3743e8028ae5f09":"2000000000000000000000","99d1579cd42682b7644e1d4f7128441eeffe339d":"20000000000000000000000","8a243a0a9fea49b839547745ff2d11af3f4b0522":"985000000000000000000",c1a41a5a27199226e4c7eb198b031b59196f9842:"191000000000000000000","7514adbdc63f483f304d8e94b67ff3309f180b82":"622911000000000000000","74aeec915de01cc69b2cb5a6356feea14658c6c5":"232500000000000000000","76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20":"40200000000000000000000",a8a7b68adab4e3eadff19ffa58e34a3fcec0d96a:"6000000000000000000000","60de22a1507432a47b01cc68c52a0bf8a2e0d098":"19100000000000000000",ceb33d78e7547a9da2e87d51aec5f3441c87923a:"20000000000000000000","432809a2390f07c665921ff37d547d12f1c9966a":"30000000000000000000000",d5e656a1b916f9bf45afb07dd8afaf73b4c56f41:"97000000000000000000",e3410bb7557cf91d79fa69d0dfea0aa075402651:"2000000000000000000000",dee942d5caf5fac11421d86b010b458e5c392990:"4000000000000000000000",a98f109835f5eacd0543647c34a6b269e3802fac:"400000000000000000000","932b9c04d40d2ac83083d94298169dae81ab2ed0":"2000000000000000000000",ba10f2764290f875434372f79dbf713801caac01:"955000000000000000000",a2c7eaffdc2c9d937345206c909a52dfb14c478f:"143000000000000000000","6c67e0d7b62e2a08506945a5dfe38263339f1f22":"1970000000000000000000","60c3714fdddb634659e4a2b1ea42c4728cc7b8ba":"13370000000000000000","73b4d499de3f38bf35aaf769a6e318bc6d123692":"2000000000000000000000","3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984":"100000000000000000000","1e3badb1b6e1380e27039c576ae6222e963a5b53":"20000000000000000000000",abd4d6c1666358c0406fdf3af248f78ece830104:"2112000000000000000000","0c925ad5eb352c8ef76d0c222d115b0791b962a1":"3180000000000000000000",be9186c34a52514abb9107860f674f97b821bd5b:"509600000000000000000",b7f67314cb832e32e63b15a40ce0d7ffbdb26985:"1060866000000000000000","3f30d3bc9f602232bc724288ca46cd0b0788f715":"4000000000000000000000","970abd53a54fca4a6429207c182d4d57bb39d4a0":"2000000000000000000000","36d85dc3683156e63bf880a9fab7788cf8143a27":"20000000000000000000000","2836123046b284e5ef102bfd22b1765e508116ad":"411880000000000000000",de06d5ea777a4eb1475e605dbcbf43444e8037ea:"50000000000000000000000","9af11399511c213181bfda3a8b264c05fc81b3ce":"14000000000000000000000",e2191215983f33fd33e22cd4a2490054da53fddc:"15800000000000000000","2eebf59432b52892f9380bd140aa99dcf8ad0c0f":"152000000000000000000",dc087f9390fb9e976ac23ab689544a0942ec2021:"1820000000000000000000",fd4b989558ae11be0c3b36e2d6f2a54a9343ca2e:"2000000000000000000000","770c2fb2c4a81753ac0182ea460ec09c90a516f8":"20000000000000000000",b28dbfc6499894f73a71faa00abe0f4bc9d19f2a:"100000000000000000000",b0cef8e8fb8984a6019f01c679f272bbe68f5c77:"152000000000000000000",f400f93d5f5c7e3fc303129ac8fb0c2f786407fa:"2000000000000000000000",f2133431d1d9a37ba2f0762bc40c5acc8aa6978e:"2000000000000000000000","9003d270891ba2df643da8341583193545e3e000":"4000000000000000000000","8938d1b4daee55a54d738cf17e4477f6794e46f7":"18200000000000000000","98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e":"1000000000000000000000","009fdbf44e1f4a6362b769c39a475f95a96c2bc7":"564000000000000000000",d0f9597811b0b992bb7d3757aa25b4c2561d32e2:"500000000000000000000",dcd10c55bb854f754434f1219c2c9a98ace79f03:"4000086000000000000000","67048f3a12a4dd1f626c64264cb1d7971de2ca38":"180000000000000000000",d33cf82bf14c592640a08608914c237079d5be34:"2000000000000000000000",f5b068989df29c253577d0405ade6e0e7528f89e:"1610000000000000000000",a9a8eca11a23d64689a2aa3e417dbb3d336bb59a:"262025000000000000000","99413704b1a32e70f3bc0d69dd881c38566b54cb":"27382708000000000000000","2a085e25b64862f5e68d768e2b0f7a8529858eee":"1983618000000000000000","833d3fae542ad5f8b50ce19bde2bec579180c88c":"346000000000000000000",c3483d6e88ac1f4ae73cc4408d6c03abe0e49dca:"17000000000000000000000",fde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7:"2000000000000000000000",eddacd94ec89a2ef968fcf977a08f1fae2757869:"8000000000000000000000",dc29119745d2337320da51e19100c948d980b915:"160000000000000000000","640bf87415e0cf407301e5599a68366da09bbac8":"493207000000000000000",afcc7dbb8356d842d43ae7e23c8422b022a30803:"30400000000000000000000","9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78":"2000000000000000000000","9092918707c621fdbd1d90fb80eb787fd26f7350":"2460000000000000000000","263e57dacbe0149f82fe65a2664898866ff5b463":"38000000000000000000000","315db7439fa1d5b423afa7dd7198c1cf74c918bc":"600000000000000000000","09b4668696f86a080f8bebb91db8e6f87015915a":"656010000000000000000","5c31996dcac015f9be985b611f468730ef244d90":"200000000000000000000",b1179589e19db9d41557bbec1cb24ccc2dec1c7f:"100000000000000000000000","3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e":"2000000000000000000000",c9127b7f6629ee13fc3f60bc2f4467a20745a762:"16465639000000000000000","7306de0e288b56cfdf987ef0d3cc29660793f6dd":"508060000000000000000","2aa192777ca5b978b6b2c2ff800ac1860f753f47":"335000000000000000000","55da9dcdca61cbfe1f133c7bcefc867b9c8122f9":"880000000000000000000",cdd9efac4d6d60bd71d95585dce5d59705c13564:"100000000000000000000",ad8e48a377695de014363a523a28b1a40c78f208:"1000000000000000000000","252b6555afdc80f2d96d972d17db84ea5ad521ac":"7880000000000000000000","60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6":"26740000000000000000",f40b134fea22c6b29c8457f49f000f9cda789adb:"600000000000000000000","85a2f6ea94d05e8c1d9ae2f4910338a358e98ded":"2000000000000000000000",ae13a08511110f32e53be4127845c843a1a57c7b:"500000000000000000000","40db1ba585ce34531edec5494849391381e6ccd3":"1790000000000000000000","0c5589a7a89b9ad15b02751930415948a875fbef":"126000000000000000000","89054430dcdc28ac15fa635ef87c105e602bf70c":"108000000000000000000","6c882c27732cef5c7c13a686f0a2ea77555ac289":"100000000000000000000000",de374299c1d07d79537385190f442ef9ca24061f:"133700000000000000000",b146a0b925553cf06fcaf54a1b4dfea621290757:"2000200000000000000000","09ae49e37f121df5dc158cfde806f173a06b0c7f":"3988000000000000000000",b758896f1baa864f17ebed16d953886fee68aae6:"1000000000000000000000","30730466b8eb6dc90d5496aa76a3472d7dbe0bbe":"1999800000000000000000",fc02734033e57f70517e0afc7ee62461f06fad8e:"394000000000000000000",a9b2d2e0494eab18e07d37bbb856d80e80f84cd3:"10000000000000000000000","95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda":"2408672000000000000000",dab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927:"50000000000000000000000","94439ca9cc169a79d4a09cae5e67764a6f871a21":"240000000000000000000",e06c29a81517e0d487b67fb0b6aabc4f57368388:"401100000000000000000","458e3cc99e947844a18e6a42918fef7e7f5f5eb3":"36400000000000000000000","0a9804137803ba6868d93a55f9985fcd540451e4":"13370000000000000000","40630024bd2c58d248edd8465617b2bf1647da0e":"1000000000000000000000","15224ad1c0face46f9f556e4774a3025ad06bd52":"13370000000000000000","2e2810dee44ae4dff3d86342ab126657d653c336":"200000000000000000000","48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d":"44000000000000000000","46a30b8a808931217445c3f5a93e882c0345b426":"250019000000000000000","455396a4bbd9bae8af9fb7c4d64d471db9c24505":"161000000000000000000",edfda2d5db98f9380714664d54b4ee971a1cae03:"40044000000000000000",f5eadcd2d1b8657a121f33c458a8b13e76b65526:"249828000000000000000","90e7070f4d033fe6910c9efe5a278e1fc6234def":"100392000000000000000",d55508adbbbe9be81b80f97a6ea89add68da674f:"2000000000000000000000","66925de3e43f4b41bf9dadde27d5488ef569ea0d":"39400000000000000000",b7c077946674ba9341fb4c747a5d50f5d2da6415:"1000000000000000000000",c52d1a0c73c2a1be84915185f8b34faa0adf1de3:"1400001000000000000000","79b8aad879dd30567e8778d2d231c8f37ab8734e":"2000000000000000000000","3aae4872fd9093cbcad1406f1e8078bab50359e2":"39400000000000000000",b2e9d76bf50fc36bf7d3944b63e9ca889b699968:"2660000000000000000000","405f596b94b947344c033ce2dcbff12e25b79784":"2000000000000000000000","232cb1cd49993c144a3f88b3611e233569a86bd6":"15576000000000000000000","9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10":"20000000000000000000","095270cc42141dd998ad2862dbd1fe9b44e7e650":"1200000000000000000000","15d99468507aa0413fb60dca2adc7f569cb36b54":"2000000000000000000000","04852732b4c652f6c2e58eb36587e60a62da14db":"20000000000000000000000",ecf24cdd7c22928c441e694de4aa31b0fab59778:"600000000000000000000","512b91bbfaa9e581ef683fc90d9db22a8f49f48b":"310000000000000000000000",a88577a073fbaf33c4cd202e00ea70ef711b4006:"2000000000000000000000","00acc6f082a442828764d11f58d6894ae408f073":"60000000000000000000000","0355bcacbd21441e95adeedc30c17218c8a408ce":"400000000000000000000","4e73cf2379f124860f73d6d91bf59acc5cfc845b":"40110000000000000000","2a742b8910941e0932830a1d9692cfd28494cf40":"499986000000000000000","41a8c2830081b102df6e0131657c07ab635b54ce":"1999944000000000000000",b63064bd3355e6e07e2d377024125a33776c4afa:"38800000000000000000000","1a25e1c5bc7e5f50ec16f8885f210ea1b938800e":"4000000000000000000000","09b59b8698a7fbd3d2f8c73a008988de3e406b2b":"40000000000000000000000",c555b93156f09101233c6f7cf6eb3c4f196d3346:"3000000000000000000000","12f32c0a1f2daab676fe69abd9e018352d4ccd45":"50000000000000000000","5956b28ec7890b76fc061a1feb52d82ae81fb635":"2000000000000000000000",c739259e7f85f2659bef5f609ed86b3d596c201e:"200000000000000000000",fae92c1370e9e1859a5df83b56d0f586aa3b404c:"106480000000000000000",d5a7bec332adde18b3104b5792546aa59b879b52:"2000000000000000000000","4f88dfd01091a45a9e2676021e64286cd36b8d34":"1000000000000000000000","102c477d69aadba9a0b0f62b7459e17fbb1c1561":"2000000000000000000000","34272d5e7574315dcae9abbd317bac90289d4765":"1820000000000000000000",fe615d975c0887e0c9113ec7298420a793af8b96:"8000000000000000000000","487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68":"66850000000000000000","7e5d9993104e4cb545e179a2a3f971f744f98482":"2000000000000000000000","5529830a61c1f13c197e550beddfd6bd195c9d02":"10000000000000000000000","2f282abbb6d4a3c3cd3b5ca812f7643e80305f06":"1850000000000000000000","7352586d021ad0cf77e0e928404a59f374ff4582":"3400000000000000000000","03f7b92008813ae0a676eb212814afab35221069":"2000000000000000000000","056686078fb6bcf9ba0a8a8dc63a906f5feac0ea":"499800000000000000000","8063379a7bf2cb923a84c5093e68dac7f75481c5":"322102000000000000000","200264a09f8c68e3e6629795280f56254f8640d0":"20000000000000000000","5a891155f50e42074374c739baadf7df2651153a":"4775000000000000000000","80022a1207e910911fc92849b069ab0cdad043d3":"13370000000000000000",e781ec732d401202bb9bd13860910dd6c29ac0b6:"1240000000000000000000","4c2f1afef7c5868c44832fc77cb03b55f89e6d6e":"20000000000000000000000","34ff582952ff24458f7b13d51f0b4f987022c1fe":"2804400000000000000000","73914b22fc2f131584247d82be4fecbf978ad4ba":"2000000000000000000000","562be95aba17c5371fe2ba828799b1f55d2177d6":"38200000000000000000000","648f5bd2a2ae8902db37847d1cb0db9390b06248":"7769965000000000000000","6a9758743b603eea3aa0524b42889723c4153948":"10100000000000000000000","5985c59a449dfc5da787d8244e746c6d70caa55f":"100000000000000000000","56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846":"1000000000000000000000",d47c242edffea091bc54d57df5d1fdb93101476c:"2914000000000000000000",d482e7f68e41f238fe517829de15477fe0f6dd1d:"500000000000000000000","05bf4fcfe772e45b826443852e6c351350ce72a2":"8000000000000000000000",f10462e58fcc07f39584a187639451167e859201:"169830000000000000000","1aa27699cada8dc3a76f7933aa66c71919040e88":"400000000000000000000","24046b91da9b61b629cb8b8ec0c351a07e0703e4":"2000000000000000000000","41033c1b6d05e1ca89b0948fc64453fbe87ab25e":"1337000000000000000000","369822f5578b40dd1f4471706b22cd971352da6b":"346000000000000000000","044e853144e3364495e7a69fa1d46abea3ac0964":"49225000000000000000",abf728cf9312f22128024e7046c251f5dc5901ed:"29550000000000000000000",d781f7fc09184611568570b4986e2c72872b7ed0:"20002000000000000000","6bb4a661a33a71d424d49bb5df28622ed4dffcf4":"630400000000000000000",fef3b3dead1a6926d49aa32b12c22af54d9ff985:"1000000000000000000000",fa410971ad229c3036f41acf852f2ac999281950:"3997400000000000000000",de176b5284bcee3a838ba24f67fc7cbf67d78ef6:"37600000000000000000","23120046f6832102a752a76656691c863e17e59c":"329800000000000000000",a2f472fe4f22b77db489219ea4023d11582a9329:"40000000000000000000000",f0d64cf9df09741133d170485fd24b005011d520:"498680000000000000000","8b505e2871f7deb7a63895208e8227dcaa1bff05":"61216600000000000000000","481e3a91bfdc2f1c8428a0119d03a41601417e1c":"1000000000000000000000",bc69a0d2a31c3dbf7a9122116901b2bdfe9802a0:"3000000000000000000000","20a81680e465f88790f0074f60b4f35f5d1e6aa5":"1279851000000000000000","194a6bb302b8aba7a5b579df93e0df1574967625":"500000000000000000000","264cc8086a8710f91b21720905912cd7964ae868":"26740000000000000000","24aca08d5be85ebb9f3132dfc1b620824edfedf9":"18200000000000000000","1851a063ccdb30549077f1d139e72de7971197d5":"2000000000000000000000",f64a4ac8d540a9289c68d960d5fb7cc45a77831c:"2000000000000000000000",c3db5657bb72f10d58f231fddf11980aff678693:"5910000000000000000000",b46ace865e2c50ea4698d216ab455dff5a11cd72:"1000000000000000000000","9faea13c733412dc4b490402bfef27a0397a9bc3":"310000000000000000000",b40594c4f3664ef849cca6227b8a25aa690925ee:"4000000000000000000000","672fa0a019088db3166f6119438d07a99f8ba224":"13370000000000000000000",c1ffad07db96138c4b2a530ec1c7de29b8a0592c:"17600000000000000000","87af25d3f6f8eea15313d5fe4557e810c524c083":"19700000000000000000000",d6a22e598dabd38ea6e958bd79d48ddd9604f4df:"1000000000000000000000",a2a435de44a01bd0ecb29e44e47644e46a0cdffb:"500171000000000000000","549b47649cfad993e4064d2636a4baa0623305cc":"601650000000000000000","1321b605026f4ffb296a3e0edcb390c9c85608b7":"2000000000000000000000",b4bf24cb83686bc469869fefb044b909716993e2:"2000000000000000000000","12d91a92d74fc861a729646db192a125b79f5374":"18200000000000000000","7f0662b410298c99f311d3a1454a1eedba2fea76":"200000000000000000000","83908aa7478a6d1c9b9b0281148f8f9f242b9fdc":"2000000000000000000000",c1438c99dd51ef1ca8386af0a317e9b041457888:"223500000000000000000","545bb070e781172eb1608af7fc2895d6cb87197e":"2244000000000000000000","161d26ef6759ba5b9f20fdcd66f16132c352415e":"2000000000000000000000",d7f370d4bed9d57c6f49c999de729ee569d3f4e4:"200000000000000000000","90e35aabb2deef408bb9b5acef714457dfde6272":"100076000000000000000","0fcfc4065008cfd323305f6286b57a4dd7eee23b":"20000000000000000000000",cd725d70be97e677e3c8e85c0b26ef31e9955045:"1337000000000000000000",dcf6b657266e91a4dae6033ddac15332dd8d2b34:"1760000000000000000000","31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3":"500000000000000000000",cdea386f9d0fd804d02818f237b7d9fa7646d35e:"3012139000000000000000",d45b3341e8f15c80329320c3977e3b90e7826a7e:"500000000000000000000","0b649da3b96a102cdc6db652a0c07d65b1e443e6":"2000000000000000000000","0a58fddd71898de773a74fdae45e7bd84ef43646":"20000000000000000000","0256149f5b5063bea14e15661ffb58f9b459a957":"704000000000000000000","4438e880cb2766b0c1ceaec9d2418fceb952a044":"133712000000000000000","9ed80eda7f55054db9fb5282451688f26bb374c1":"300000000000000000000","8dab948ae81da301d972e3f617a912e5a753712e":"400000000000000000000","5b5d8c8eed6c85ac215661de026676823faa0a0c":"20000000000000000000000","46722a36a01e841d03f780935e917d85d5a67abd":"14900000000000000000",d4b8bdf3df9a51b0b91d16abbea05bb4783c8661:"1000000000000000000000","98f6b8e6213dbc9a5581f4cce6655f95252bdb07":"319968000000000000000","3599493ce65772cf93e98af1195ec0955dc98002":"1500048000000000000000",ecab5aba5b828de1705381f38bc744b32ba1b437:"940000000000000000000","9a82826d3c29481dcc2bd2950047e8b60486c338":"20000000000000000000000","6c474bc66a54780066aa4f512eefa773abf919c7":"94000000000000000000",d5903e9978ee20a38c3f498d63d57f31a39f6a06:"10380000000000000000000","341480cc8cb476f8d01ff30812e7c70e05afaf5d":"2000000000000000000000",af771039345a343001bc0f8a5923b126b60d509c:"985000000000000000000",b5a4679685fa14196c2e9230c8c4e33bffbc10e2:"1400000000000000000000","2a400dff8594de7228b4fd15c32322b75bb87da8":"95810000000000000000",a1336dfb96b6bcbe4b3edf3205be5723c90fad52:"5000000000000000000000",e9b1f1fca3fa47269f21b061c353b7f5e96d905a:"500000000000000000000","0ee414940487fd24e390378285c5d7b9334d8b65":"2680000000000000000000","6ab5b4c41cddb829690c2fda7f20c85e629dd5d5":"1860000000000000000000",dd63042f25ed32884ad26e3ad959eb94ea36bf67:"21340000000000000000000",c0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0:"5820000000000000000000",ed1a5c43c574d4e934299b24f1472cdc9fd6f010:"200000000000000000000",b2d9ab9664bcf6df203c346fc692fd9cbab9205e:"438000000000000000000",ede8c2cb876fbe8a4cca8290361a7ea01a69fdf8:"7813091000000000000000","6a7c252042e7468a3ff773d6450bba85efa26391":"500000000000000000000",a106e6923edd53ca8ed650968a9108d6ccfd9670:"9499935000000000000000","031e25db516b0f099faebfd94f890cf96660836b":"2000000000000000000000","7fdbc3a844e40d96b2f3a635322e6065f4ca0e84":"2000000000000000000000",df47a61b72535193c561cccc75c3f3ce0804a20e:"398000000000000000000",ed31305c319f9273d3936d8f5b2f71e9b1b22963:"100000000000000000000",a6b2d573297360102c07a18fc21df2e7499ff4eb:"4011000000000000000000",f68464bf64f2411356e4d3250efefe5c50a5f65b:"20000000000000000000","927cc2bfda0e088d02eff70b38b08aa53cc30941":"1852700000000000000000","41cb9896445f70a10a14215296daf614e32cf4d5":"1910000000000000000000","3ad70243d88bf0400f57c8c1fd57811848af162a":"860000000000000000000","63b9754d75d12d384039ec69063c0be210d5e0e3":"2694055000000000000000",ad1799aad7602b4540cd832f9db5f11150f1687a:"2000000000000000000000",a8b65ba3171a3f77a6350b9daf1f8d55b4d201eb:"745000000000000000000",ad0a4ae478e9636e88c604f242cf5439c6d45639:"3520000000000000000000","4cd0b0a6436362595ceade052ebc9b929fb6c6c0":"2000000000000000000000",c1d4af38e9ba799040894849b8a8219375f1ac78:"20000000000000000000000","49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a":"199358000000000000000",ae842210f44d14c4a4db91fc9d3b3b50014f7bf7:"4000000000000000000000","10a1c42dc1ba746986b985a522a73c93eae64c63":"1000000000000000000000","5103bc09933e9921fd53dc536f11f05d0d47107d":"4000000000000000000000",c88eec54d305c928cc2848c2fee23531acb96d49:"1999946000000000000000","9a2ce43b5d89d6936b8e8c354791b8afff962425":"2000000000000000000000","562020e3ed792d2f1835fe5f55417d5111460c6a":"20000000000000000000000",ed16ce39feef3bd7f5d162045e0f67c0f00046bb:"20000000000000000000",ab948a4ae3795cbca13126e19253bdc21d3a8514:"200000000000000000000",c12b7f40df9a2f7bf983661422ab84c9c1f50858:"8000000000000000000000","62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89":"250000000000000000000","423bca47abc00c7057e3ad34fca63e375fbd8b4a":"18000000000000000000000","5ff326cd60fd136b245e29e9087a6ad3a6527f0d":"1880000000000000000000","79ffb4ac13812a0b78c4a37b8275223e176bfda5":"17300000000000000000",f757fc8720d3c4fa5277075e60bd5c411aebd977:"2000000000000000000000","0bdbc54cc8bdbbb402a08911e2232a5460ce866b":"3000000000000000000000","9ee9760cc273d4706aa08375c3e46fa230aff3d5":"8950000000000000000000",d23a24d7f9468343c143a41d73b88f7cbe63be5e:"200000000000000000000","46d80631284203f6288ecd4e5758bb9d41d05dbe":"2000000000000000000000","3f4cd1399f8a34eddb9a17a471fc922b5870aafc":"200000000000000000000","44c54eaa8ac940f9e80f1e74e82fc14f1676856a":"7880000000000000000000",aec27ff5d7f9ddda91183f46f9d52543b6cd2b2f:"450000000000000000000","203c6283f20df7bc86542fdfb4e763ecdbbbeef5":"25000000000000000000000",bcaf347918efb2d63dde03e39275bbe97d26df50:"100000000000000000000","974d0541ab4a47ec7f75369c0069b64a1b817710":"400000000000000000000","5da54785c9bd30575c89deb59d2041d20a39e17b":"1967031000000000000000","1fb463a0389983df7d593f7bdd6d78497fed8879":"20000000000000000000","6e1ea4b183e252c9bb7767a006d4b43696cb8ae9":"294245000000000000000",c2aa74847e86edfdd3f3db22f8a2152feee5b7f7:"2048852000000000000000",a13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c:"1999944000000000000000","5135fb8757600cf474546252f74dc0746d06262c":"2000000000000000000000","43e7ec846358d7d0f937ad1c350ba069d7bf72bf":"118800000000000000000",f2ed3e77254acb83231dc0860e1a11242ba627db:"1980000000000000000000",c0a02ab94ebe56d045b41b629b98462e3a024a93:"100000000000000000000",f21549bdd1487912f900a7523db5f7626121bba3:"10000000000000000000000","886d0a9e17c9c095af2ea2358b89ec705212ee94":"28000000000000000000","211b29cefc79ae976744fdebcebd3cbb32c51303":"14000000000000000000000",b8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e:"5550000000000000000000",ec30addd895b82ee319e54fb04cb2bb03971f36b:"2000000000000000000000",b71b62f4b448c02b1201cb5e394ae627b0a560ee:"500000000000000000000",e1334e998379dfe983177062791b90f80ee22d8d:"500000000000000000000","1d633097a85225a1ff4321b12988fdd55c2b3844":"4000000000000000000000","8bd8d4c4e943f6c8073921dc17e3e8d7a0761627":"2933330000000000000000",a5d96e697d46358d119af7819dc7087f6ae47fef:"14605131000000000000000",d0809498c548047a1e2a2aa6a29cd61a0ee268bd:"2000000000000000000000","3cd6b7593cbee77830a8b19d0801958fcd4bc57a":"500000000000000000000",ead4d2eefb76abae5533961edd11400406b298fc:"3880000000000000000000","6331028cbb5a21485bc51b565142993bdb2582a9":"534800000000000000000","163bad4a122b457d64e8150a413eae4d07023e6b":"18800000000000000000",c522e20fbf04ed7f6b05a37b4718d6fce0142e1a:"4000000000000000000000","2d9bad6f1ee02a70f1f13def5cccb27a9a274031":"1790000000000000000000","5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5":"220000000000000000000",ec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c:"4250000000000000000000","3896ad743579d38e2302454d1fb6e2ab69e01bfd":"1880000000000000000000",e73ccf436725c151e255ccf5210cfce5a43f13e3:"19982000000000000000","9483d98f14a33fdc118d403955c29935edfc5f70":"459600000000000000000","1cfcf7517f0c08459720942b647ad192aa9c8828":"800000000000000000000","8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8":"100000000000000000000","06f68de3d739db41121eacf779aada3de8762107":"28000000000000000000","9909650dd5b1397b8b8b0eb69499b291b0ad1213":"200000000000000000000",b66675142e3111a1c2ea1eb2419cfa42aaf7a234:"1000000000000000000000","7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f":"4142296000000000000000","3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef":"16100000000000000000000",c47d610b399250f70ecf1389bab6292c91264f23:"288800000000000000000","51a6d627f66a8923d88d6094c4715380d3057cb6":"1152044000000000000000","6c0cc917cbee7d7c099763f14e64df7d34e2bf09":"250000000000000000000",aaaae68b321402c8ebc13468f341c63c0cf03fce:"1520000000000000000000","819cdaa5303678ef7cec59d48c82163acc60b952":"14523448000000000000000",d071192966eb69c3520fca3aa4dd04297ea04b4e:"110000000000000000000",e53425d8df1f11c341ff58ae5f1438abf1ca53cf:"322000000000000000000","8ffe322997b8e404422d19c54aadb18f5bc8e9b7":"3940000000000000000000","305f78d618b990b4295bac8a2dfa262884f804ea":"4000000000000000000000","274d69170fe7141401882b886ac4618c6ae40edb":"955000000000000000000","69c94e07c4a9be3384d95dfa3cb9290051873b7b":"70000000000000000000","859c600cf13d1d0273d5d1da3cd789e495899f27":"2674000000000000000000",c06cebbbf7f5149a66f7eb976b3e47d56516da2f:"2000000000000000000000","37bbc47212d82fcb5ee08f5225ecc2041ad2da7d":"3280000000000000000000","11e7997edd904503d77da6038ab0a4c834bbd563":"388000000000000000000",d333627445f2d787901ef33bb2a8a3675e27ffec:"400000000000000000000","16a58e985dccd707a594d193e7cca78b5d027849":"1360000000000000000000",f8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7:"4000000000000000000000","491561db8b6fafb9007e62d050c282e92c4b6bc8":"30000000000000000000000","21df1ec24b4e4bfe79b0c095cebae198f291fbd1":"20000000000000000000000",e208812a684098f3da4efe6aba256256adfe3fe6:"2000000000000000000000",f4ec8e97a20aa5f8dd206f55207e06b813df2cc0:"200000000000000000000","29eb7eefdae9feb449c63ff5f279d67510eb1422":"19400000000000000000","0d678706d037187f3e22e6f69b99a592d11ebc59":"1580000000000000000000",de6d363106cc6238d2f092f0f0372136d1cd50c6:"5348000000000000000000",c8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8:"4000000000000000000000","5267f4d41292f370863c90d793296903843625c7":"1400000000000000000000","4cda41dd533991290794e22ae324143e309b3d3d":"2400000000000000000000",f8a50cee2e688ceee3aca4d4a29725d4072cc483:"2000000000000000000000","5ed3bbc05240e0d399eb6ddfe60f62de4d9509af":"193999806000000000000000","0befb54707f61b2c9fb04715ab026e1bb72042bd":"4000000000000000000000",cab9a301e6bd46e940355028eccd40ce4d5a1ac3:"400000000000000000000","64672da3ab052821a0243d1ce4b6e0a36517b8eb":"200000000000000000000",eac0827eff0c6e3ff28a7d4a54f65cb7689d7b99:"2856500000000000000000",f4b6cdcfcb24230b337d770df6034dfbd4e1503f:"19000000000000000000000","7be2f7680c802da6154c92c0194ae732517a7169":"18200000000000000000","869f1aa30e4455beb1822091de5cadec79a8f946":"8000000000000000000000",c4681e73bb0e32f6b726204831ff69baa4877e32:"1820000000000000000000","962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971":"2000000000000000000000","131df8d330eb7cc7147d0a55576f05de8d26a8b7":"188000000000000000000","19f99f2c0b46ce8906875dc9f90ae104dae35594":"4507300000000000000000","91bb3f79022bf3c453f4ff256e269b15cf2c9cbd":"1519000000000000000000","7301dc4cf26d7186f2a11bf8b08bf229463f64a3":"2000000000000000000000","7cbca88fca6a0060b960985c9aa1b02534dc2208":"462500000000000000000",f3c1abd29dc57b41dc192d0e384d021df0b4f6d4:"2798000000000000000000","5d32f6f86e787ff78e63d78b0ef95fe6071852b8":"401100000000000000000","1678c5f2a522393225196361894f53cc752fe2f3":"1936000000000000000000","1cf04cb14380059efd3f238b65d5beb86afa14d8":"20000000000000000000","52e1731350f983cc2c4189842fde0613fad50ce1":"11640000000000000000000",d0b11d6f2bce945e0c6a5020c3b52753f803f9d1:"200000000000000000000","409bd75085821c1de70cdc3b11ffc3d923c74010":"4000000000000000000000","0bb7160aba293762f8734f3e0326ffc9a4cac190":"1000000000000000000000","7aad4dbcd3acf997df93586956f72b64d8ad94ee":"4000000000000000000000","2dec98329d1f96c3a59caa7981755452d4da49d5":"200000000000000000000",c18ab467feb5a0aadfff91230ff056464d78d800:"2000000000000000000000",c90c3765156bca8e4897ab802419153cbe5225a9:"200000000000000000000","85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355":"400000000000000000000",f4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a:"25380000000000000000",f50abbd4aa45d3eb88515465a8ba0b310fd9b521:"6685000000000000000000","4d200110124008d56f76981256420c946a6ff45c":"199955000000000000000",f4ba6a46d55140c439cbcf076cc657136262f4f8:"2000000000000000000000",fa7adf660b8d99ce15933d7c5f072f3cbeb99d33:"5910000000000000000000","84503334630d77f74147f68b2e086613c8f1ade9":"1600000000000000000000","31ed858788bda4d5270992221cc04206ec62610d":"1176000000000000000000",bfbca418d3529cb393081062032a6e1183c6b2dc:"8000000000000000000000","8263ece5d709e0d7ae71cca868ed37cd2fef807b":"990000000000000000000","23ba3864da583dab56f420873c37679690e02f00":"9800000000000000000000",cedcb3a1d6843fb6bef643617deaf38f8e98dd5f:"477500000000000000000","8fac748f784a0fed68dba43319b42a75b4649c6e":"910000000000000000000","18b8bcf98321da61fb4e3eacc1ec5417272dc27e":"880000000000000000000","776943ffb2ef5cdd35b83c28bc046bd4f4677098":"3000000000000000000000",fb8113f94d9173eefd5a3073f516803a10b286ae:"80000000000000000000","3e8349b67f5745449f659367d9ad4712db5b895a":"1820000000000000000000","79cfa9780ae6d87b2c31883f09276986c89a6735":"1000000000000000000000","5006fe4c22173980f00c74342b39cd231c653129":"2000000000000000000000","13848b46ea75beb7eaa85f59d866d77fd24cf21a":"50000000000000000000000",d64a2d50f8858537188a24e0f50df1681ab07ed7:"38800000000000000000000","4f9ce2af9b8c5e42c6808a3870ec576f313545d1":"10000000000000000000000","8764d02722000996ecd475b433298e9f540b05bf":"200000000000000000000","3b7c77dbe95dc2602ce3269a9545d04965fefdbd":"2000000000000000000000",c9dcbb056f4db7d9da39936202c5bd8230b3b477:"20000000000000000000000","9ecbabb0b22782b3754429e1757aaba04b81189f":"823743000000000000000","831c44b3084047184b2ad218680640903750c45d":"1970000000000000000000",ff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834:"3986000000000000000000","8ccf3aa21ab742576ad8c422f71bb188591dea8a":"1000000000000000000000",ddac312a9655426a9c0c9efa3fd82559ef4505bf:"401100000000000000000","9a3e2b1bf346dd070b027357feac44a4b2c97db8":"10000000000000000000000","69d39d510889e552a396135bfcdb06e37e387633":"4000000000000000000000","83a3148833d9644984f7c475a7850716efb480ff":"3400000000000000000000","62b4a9226e61683c72c183254690daf511b4117a":"260000000000000000000","50763add868fd7361178342fc055eaa2b95f6846":"66838000000000000000","91898eab8c05c0222883cd4db23b7795e1a24ad7":"2000000000000000000000","066647cfc85d23d37605573d208ca154b244d76c":"10000000000000000000000",aaf9ee4b886c6d1e95496fd274235bf4ecfcb07d:"1400000000000000000000","06860a93525955ff624940fadcffb8e149fd599c":"1999800000000000000000",e81c2d346c0adf4cc56708f6394ba6c8c8a64a1e:"2000000000000000000000","41a8e236a30e6d63c1ff644d132aa25c89537e01":"20000000000000000000","6a679e378fdce6bfd97fe62f043c6f6405d79e99":"4000000000000000000000","933436c8472655f64c3afaaf7c4c621c83a62b38":"1000000000000000000000",abe07ced6ac5ddf991eff6c3da226a741bd243fe:"10000000000000000000000",bb56a404723cff20d0685488b05a02cdc35aacaa:"20000000000000000000","0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af":"2000000000000000000000","23376ecabf746ce53321cf42c86649b92b67b2ff":"2000000000000000000000","644ba6c61082e989109f5c11d4b40e991660d403":"4000000000000000000000","680d5911ed8dd9eec45c060c223f89a7f620bbd5":"20000000000000000000000",cb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d:"1038000000000000000000","303a30ac4286ae17cf483dad7b870c6bd64d7b4a":"500000000000000000000","7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4":"800000000000000000000","854691ce714f325ced55ce5928ce9ba12facd1b8":"4380000000000000000000",a13cfe826d6d1841dcae443be8c387518136b5e8:"140000000000000000000000","5fcd84546896dd081db1a320bd4d8c1dd1528c4c":"20000000000000000000","3db5fe6a68bd3612ac15a99a61e555928eeceaf3":"1580000000000000000000","7a79e30ff057f70a3d0191f7f53f761537af7dff":"400000000000000000000","3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692":"20000000000000000000","05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39":"98500000000000000000",e4b6ae22c7735f5b89f34dd77ad0975f0acc9181:"1000000000000000000000","3f2dd55db7eab0ebee65b33ed8202c1e992e958b":"820000000000000000000","395d6d255520a8db29abc47d83a5db8a1a7df087":"100000000000000000000","1cc90876004109cd79a3dea866cb840ac364ba1b":"2000000000000000000000",c83e9d6a58253beebeb793e6f28b054a58491b74:"281800000000000000000","901d99b699e5c6911519cb2076b4c76330c54d22":"2000000000000000000000","3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c":"2000000000000000000000",b41eaf5d51a5ba1ba39bb418dbb54fab750efb1f:"1000000000000000000000",aa493d3f4fb866491cf8f800efb7e2324ed7cfe5:"1700000000000000000000","509982f56237ee458951047e0a2230f804e2e895":"17500000000000000000000","316e92a91bbda68b9e2f98b3c048934e3cc0b416":"2000000000000000000000",a3430e1f647f321ed34739562323c7d623410b56:"999942000000000000000",fca43bbc23a0d321ba9e46b929735ce7d8ef0c18:"20000000000000000000",ff45cb34c928364d9cc9d8bb00373474618f06f3:"100000000000000000000","8c999591fd72ef7111efca7a9e97a2356b3b000a":"4084000000000000000000","8579dadf1a395a3471e20b6f763d9a0ff19a3f6f":"4000000000000000000000",c8d4e1599d03b79809e0130a8dc38408f05e8cd3:"2945500000000000000000","2abce1808940cd4ef5b5e05285f82df7a9ab5e03":"9800000000000000000000","0bb0c12682a2f15c9b5741b2385cbe41f034068e":"1500000000000000000000","08b7bdcf944d5570838be70460243a8694485858":"2000000000000000000000",c452e0e4b3d6ae06b836f032ca09db409ddfe0fb:"800000000000000000000","48d4f2468f963fd79a006198bb67895d2d5aa4d3":"1400000000000000000000",f9e7222faaf0f4da40c1c4a40630373a09bed7b6:"2865000000000000000000",bf59aee281fa43fe97194351a9857e01a3b897b2:"600000000000000000000",da0d4b7ef91fb55ad265f251142067f10376ced6:"20000000000000000000000","2c6f5c124cc789f8bb398e3f889751bc4b602d9e":"24928000000000000000",c85ef27d820403805fc9ed259fff64acb8d6346a:"2000000000000000000000","9aa8308f42910e5ade09c1a5e282d6d91710bdbf":"200000000000000000000","9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6":"9999917000000000000000","137cf341e8516c815814ebcd73e6569af14cf7bc":"1000000000000000000000","889da662eb4a0a2a069d2bc24b05b4ee2e92c41b":"1663417000000000000000","0998d8273115b56af43c505e087aff0676ed3659":"3999984000000000000000","3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f":"1000000000000000000000",abc068b4979b0ea64a62d3b7aa897d73810dc533:"1970000000000000000000",d8fdf546674738c984d8fab857880b3e4280c09e:"20000000000000000000",aff161740a6d909fe99c59a9b77945c91cc91448:"60000000000000000000","92ad1b3d75fba67d54663da9fc848a8ade10fa67":"2000000000000000000000","819eb4990b5aba5547093da12b6b3c1093df6d46":"1000000000000000000000","643d9aeed4b180947ed2b9207cce4c3ddc55e1f7":"200000000000000000000",ab3e62e77a8b225e411592b1af300752fe412463:"9850000000000000000000","650b425555e4e4c51718146836a2c1ee77a5b421":"20000000000000000000000",ba8e46d69d2e2343d86c60d82cf42c2041a0c1c2:"100000000000000000000",f9570e924c95debb7061369792cf2efec2a82d5e:"20000000000000000000","4dc4bf5e7589c47b28378d7503cf96488061dbbd":"1760000000000000000000","3d7ea5bf03528100ed8af8aed2653e921b6e6725":"1000000000000000000000",a02bde6461686e19ac650c970d0672e76dcb4fc2:"8865000000000000000000",b0e760bb07c081777345e0578e8bc898226d4e3b:"2000000000000000000000","979cbf21dfec8ace3f1c196d82df962534df394f":"2832860000000000000000","9f8245c3ab7d173164861cd3991b94f1ba40a93a":"2860000000000000000000",c25cf826550c8eaf10af2234fef904ddb95213be:"1000000000000000000000","967bfaf76243cdb9403c67d2ceefdee90a3feb73":"970582000000000000000","0b2113504534642a1daf102eee10b9ebde76e261":"2733351000000000000000","74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2":"2000000000000000000000",f1da40736f99d5df3b068a5d745fafc6463fc9b1:"121546000000000000000","0fa6c7b0973d0bae2940540e247d3627e37ca347":"1000000000000000000000","72b05962fb2ad589d65ad16a22559eba1458f387":"133700000000000000000","6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7":"298000000000000000000","28eaea78cd4d95faecfb68836eafe83520f3bbb7":"200000000000000000000",f49f6f9baabc018c8f8e119e0115f491fc92a8a4:"10000000000000000000000","833316985d47742bfed410604a91953c05fb12b0":"2000000000000000000000",ead75016e3a0815072b6b108bcc1b799acf0383e:"2000000000000000000000","0032403587947b9f15622a68d104d54d33dbd1cd":"77500000000000000000","8f64b9c1246d857831643107d355b5c75fef5d4f":"1999944000000000000000","15dcafcc2bace7b55b54c01a1c514626bf61ebd8":"9400000000000000000000","6886ada7bbb0617bda842191c68c922ea3a8ac82":"1160000000000000000000",f736dc96760012388fe88b66c06efe57e0d7cf0a:"2100000000000000000000","0b288a5a8b75f3dc4191eb0457e1c83dbd204d25":"4853000000000000000000","56b6c23dd2ec90b4728f3bb2e764c3c50c85f144":"1000000000000000000000","6310b020fd98044957995092090f17f04e52cdfd":"1580000000000000000000",b0baeb30e313776c4c6d247402ba4167afcda1cc:"1970000000000000000000","7641f7d26a86cddb2be13081810e01c9c83c4b20":"13370000000000000000","07a8dadec142571a7d53a4297051786d072cba55":"22729000000000000000",cc73dd356b4979b579b401d4cc7a31a268ddce5a:"500000000000000000000",adf1acfe99bc8c14b304c8d905ba27657b8a7bc4:"20000000000000000000000","72dabb5b6eed9e99be915888f6568056381608f8":"208433000000000000000","9de20ae76aa08263b205d5142461961e2408d266":"252000000000000000000","9d4ff989b7bed9ab109d10c8c7e55f02d76734ad":"1000000000000000000000",e58dd23238ee6ea7c2138d385df500c325f376be:"1820000000000000000000","4bd6dd0cff23400e1730ba7b894504577d14e74a":"206028000000000000000000","35147430c3106500e79fa2f502462e94703c23b1":"1999944000000000000000",c0ae14d724832e2fce2778de7f7b8daf7b12a93e:"20000000000000000000",b57413060af3f14eb479065f1e9d19b3757ae8cc:"40000000000000000000","7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6":"314807840000000000000000","1c94d636e684eb155895ce6db4a2588fba1d001b":"2000000000000000000000",c721b2a7aa44c21298e85039d00e2e460e670b9c:"140800000000000000000","2d89a8006a4f137a20dc2bec46fe2eb312ea9654":"200000000000000000000","646afba71d849e80c0ed59cac519b278e7f7abe4":"1000000000000000000000","71f2cdd1b046e2da2fbb5a26723422b8325e25a3":"99960000000000000000","2c9fa72c95f37d08e9a36009e7a4b07f29bad41a":"16100000000000000000","848fbd29d67cf4a013cb02a4b176ef244e9ee68d":"20116000000000000000","68190ca885da4231874c1cfb42b1580a21737f38":"3820000000000000000000","9adf458bff3599eee1a26398853c575bc38c6313":"280000000000000000000",b72220ade364d0369f2d2da783ca474d7b9b34ce:"499986000000000000000","38e2af73393ea98a1d993a74df5cd754b98d529a":"1790000000000000000000","4d38d90f83f4515c03cc78326a154d358bd882b7":"185000000000000000000",aa8eb0823b07b0e6d20aadda0e95cf3835be192e:"32000000000000000000","008639dabbe3aeac887b5dc0e43e13bcd287d76c":"310200000000000000000",fa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650:"20000000000000000000",e26bf322774e18288769d67e3107deb7447707b8:"2000000000000000000000",e061a4f2fc77b296d19ada238e49a5cb8ecbfa70:"4000000000000000000000",b320834836d1dbfda9e7a3184d1ad1fd4320ccc0:"1000000000000000000000","0ed3bb3a4eb554cfca97947d575507cdfd6d21d8":"547863000000000000000","32fa0e86cd087dd68d693190f32d93310909ed53":"4000000000000000000000","5b759fa110a31c88469f54d44ba303d57dd3e10f":"1683760000000000000000","136f4907cab41e27084b9845069ff2fd0c9ade79":"4000000000000000000000","3d89e505cb46e211a53f32f167a877bec87f4b0a":"25019000000000000000","57a852fdb9b1405bf53ccf9508f83299d3206c52":"2000000000000000000000","747abc9649056d3926044d28c3ad09ed17b67d70":"5000057000000000000000","5c29f9e9a523c1f8669448b55c48cbd47c25e610":"964320000000000000000","30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d":"20200000000000000000","220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7":"800000000000000000000","5af7c072b2c5acd71c76addcce535cf7f8f93585":"20000000000000000000","81556db27349ab8b27004944ed50a46e941a0f5f":"3998000000000000000000","987618c85656207c7bac1507c0ffefa2fb64b092":"64419000000000000000",e0f372347c96b55f7d4306034beb83266fd90966:"400000000000000000000","71784c105117c1f68935797fe159abc74e43d16a":"2001600000000000000000","9284f96ddb47b5186ee558aa31324df5361c0f73":"16000000000000000000000",a60c1209754f5d87b181da4f0817a81859ef9fd8:"50000000000000000000","5afda9405c8e9736514574da928de67456010918":"6008500000000000000000","6978696d5150a9a263513f8f74c696f8b1397cab":"6640000000000000000000",a9ad1926bc66bdb331588ea8193788534d982c98:"30000000000000000000000",e3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8:"1337000000000000000000",e207578e1f4ddb8ff6d5867b39582d71b9812ac5:"3880000000000000000000","86883d54cd3915e549095530f9ab1805e8c5432d":"4000000000000000000000","6974c8a414ceaefd3c2e4dfdbef430568d9a960b":"334250000000000000000","532d32b00f305bcc24dcef56817d622f34fb2c24":"1800000000000000000000","761f8a3a2af0a8bdbe1da009321fb29764eb62a1":"10000000000000000000000","4677b04e0343a32131fd6abb39b1b6156bba3d5b":"200000000000000000000",ef69781f32ffce33346f2c9ae3f08493f3e82f89:"18200000000000000000",e3b3d2c9bf570be6a2f72adca1862c310936a43c:"100100000000000000000",d19caf39bb377fdf2cf19bd4fb52591c2631a63c:"1000000000000000000000","5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f":"2000000000000000000000","1c99fe9bb6c6d1066d912099547fd1f4809eacd9":"2000000000000000000000",bbfe0a830cace87b7293993a7e9496ce64f8e394:"6000000000000000000000","26c0054b700d3a7c2dcbe275689d4f4cad16a335":"2000000000000000000000","7d7e7c61779adb7706c94d32409a2bb4e994bf60":"865992000000000000000",d037d215d11d1df3d54fbd321cd295c5465e273b:"1400000000000000000000","08166f02313feae18bb044e7877c808b55b5bf58":"1970000000000000000000","781b1501647a2e06c0ed43ff197fccec35e1700b":"3000000000000000000000","74316adf25378c10f576d5b41a6f47fa98fce33d":"336082000000000000000","44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c":"410231000000000000000","178eaf6b8554c45dfde16b78ce0c157f2ee31351":"320000000000000000000",cf923a5d8fbc3d01aa079d1cfe4b43ce071b1611:"2000000000000000000000","0c28847e4f09dfce5f9b25af7c4e530f59c880fe":"1000000000000000000000","54ce88275956def5f9458e3b95decacd484021a0":"2000000000000000000000","9d4213339a01551861764c87a93ce8f85f87959a":"200000000000000000000",e559b5fd337b9c5572a9bf9e0f2521f7d446dbe4:"200000000000000000000",dcb03bfa6c1131234e56b7ea7c4f721487546b7a:"1337000000000000000000",db6ff71b3db0928f839e05a7323bfb57d29c87aa:"910000000000000000000",eb7c202b462b7cc5855d7484755f6e26ef43a115:"2000000000000000000000","323486ca64b375474fb2b759a9e7a135859bd9f6":"400000000000000000000","2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d":"10118000000000000000000","2cd87866568dd81ad47d9d3ad0846e5a65507373":"400000000000000000000","8566610901aace38b83244f3a9c831306a67b9dc":"3256000000000000000000","1c257ad4a55105ea3b58ed374b198da266c85f63":"10000000000000000000000",cf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d:"882038000000000000000",c934becaf71f225f8b4a4bf7b197f4ac9630345c:"20000000000000000000000","1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc":"2000000000000000000000","9d78a975b7db5e4d8e28845cfbe7e31401be0dd9":"1340000000000000000000","16aa52cb0b554723e7060f21f327b0a68315fea3":"250000000000000000000","97e28973b860c567402800fbb63ce39a048a3d79":"97000000000000000000","4ac5acad000b8877214cb1ae00eac9a37d59a0fd":"4000000000000000000000","01226e0ad8d62277b162621c62c928e96e0b9a8c":"2000000000000000000000","479abf2da4d58716fd973a0d13a75f530150260a":"20000000000000000000","31d81d526c195e3f10b5c6db52b5e59afbe0a995":"264000000000000000000","749087ac0f5a97c6fad021538bf1d6cda18e0daa":"1000000000000000000000","1565af837ef3b0bd4e2b23568d5023cd34b16498":"393284000000000000000","997d6592a31589acc31b9901fbeb3cc3d65b3215":"2000000000000000000000","9d207517422cc0d60de7c237097a4d4fce20940c":"500000000000000000000","24b8b446debd1947955dd084f2c544933346d3ad":"4324135000000000000000","107a03cf0842dbdeb0618fb587ca69189ec92ff5":"1970000000000000000000","7f603aec1759ea5f07c7f8d41a1428fbbaf9e762":"20000000000000000000","53a244672895480f4a2b1cdf7da5e5a242ec4dbc":"1000000000000000000000","7db4c7d5b797e9296e6382f203693db409449d62":"400000000000000000000","2ae82dab92a66389eea1abb901d1d57f5a7cca0b":"2000000000000000000000","16bc40215abbd9ae5d280b95b8010b4514ff1292":"200000000000000000000",bba4fac3c42039d828e742cde0efffe774941b39:"1999946000000000000000","5431ca427e6165a644bae326bd09750a178c650d":"2000000000000000000000",dcf33965531380163168fc11f67e89c6f1bc178a:"334885000000000000000","65fd02d704a12a4dace9471b0645f962a89671c8":"28615000000000000000","135d1719bf03e3f866312479fe338118cd387e70":"2000000000000000000000",f3159866c2bc86bba40f9d73bb99f1eee57bb9d7:"1000000000000000000000",e3a4621b66004588e31206f718cb00a319889cf0:"2000000000000000000000",abcdbc8f1dd13af578d4a4774a62182bedf9f9be:"36660000000000000000","9fbe066de57236dc830725d32a02aef9246c6c5e":"2000000000000000000000","81cfad760913d3c322fcc77b49c2ae3907e74f6e":"197000000000000000000","0ab59d390702c9c059db148eb4f3fcfa7d04c7e7":"18200000000000000000","2c2db28c3309375eea3c6d72cd6d0eec145afcc0":"2000000000000000000000","08306de51981e7aca1856859b7c778696a6b69f9":"3200000000000000000000",f814799f6ddf4dcb29c7ee870e75f9cc2d35326d:"1000000000000000000000",ee867d20916bd2e9c9ece08aa04385db667c912e:"50000000000000000000000","97a86f01ce3f7cfd4441330e1c9b19e1b10606ef":"2000000000000000000000","4c759813ad1386bed27ffae9e4815e3630cca312":"2000000000000000000000","8f226096c184ebb40105e08dac4d22e1c2d54d30":"306552000000000000000","13acada8980affc7504921be84eb4944c8fbb2bd":"1601600000000000000000","122dcfd81addb97d1a0e4925c4b549806e9f3beb":"1514954000000000000000","232f525d55859b7d4e608d20487faadb00293135":"4000000000000000000000","6f7ac681d45e418fce8b3a1db5bc3be6f06c9849":"2000000000000000000000","0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1":"2000000000000000000000","6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb":"1028200000000000000000","209377b6ad3fe101c9685b3576545c6b1684e73c":"1820000000000000000000","560fc08d079f047ed8d7df75551aa53501f57013":"7600000000000000000000","8e78f351457d016f4ad2755ec7424e5c21ba6d51":"146000000000000000000","2ce11a92fad024ff2b3e87e3b542e6c60dcbd996":"4000000000000000000000","8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46":"2000000000000000000000","673144f0ec142e770f4834fee0ee311832f3087b":"500038000000000000000",ba8a63f3f40de4a88388bc50212fea8e064fbb86:"2000000000000000000000",ee899b02cbcb3939cd61de1342d50482abb68532:"1760000000000000000000",c2d9eedbc9019263d9d16cc5ae072d1d3dd9db03:"20000000000000000000000","355c0c39f5d5700b41d375b3f17851dcd52401f9":"3979000000000000000000","8179c80970182cc5b7d82a4df06ea94db63a25f3":"727432000000000000000",b388b5dfecd2c5e4b596577c642556dbfe277855:"20000000000000000000",a9e28337e6357193d9e2cb236b01be44b81427df:"2200000000000000000000","04ba4bb87140022c214a6fac42db5a16dd954045":"1000000000000000000000","67c926093e9b8927933810d98222d62e2b8206bb":"1910000000000000000000",ed7346766e1a676d0d06ec821867a276a083bf31:"4012890000000000000000","92558226b384626cad48e09d966bf1395ee7ea5d":"334250000000000000000",bdf693f833c3fe471753184788eb4bfe4adc3f96:"1970000000000000000000","4474299d0ee090dc90789a1486489c3d0d645e6d":"1000000000000000000000",b1178ad47383c31c8134a1941cbcd474d06244e2:"1000000000000000000000","979d681c617da16f21bcaca101ed16ed015ab696":"1880000000000000000000","6b20c080606a79c73bd8e75b11717a4e8db3f1c3":"299720000000000000000",b85218f342f8012eda9f274e63ce2152b2dcfdab:"3100000000000000000000","530b61e42f39426d2408d40852b9e34ab5ebebc5":"267400000000000000000","76afc225f4fa307de484552bbe1d9d3f15074c4a":"2998800000000000000000","1e783e522ab7df0acaac9eeed3593039e5ac7579":"203435800000000000000000","0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9":"2000000000000000000000","7a8797690ab77b5470bf7c0c1bba612508e1ac7d":"8865000000000000000000","2a2ab6b74c7af1d9476bb5bcb4524797bedc3552":"1000000000000000000000","523e140dc811b186dee5d6c88bf68e90b8e096fd":"2000000000000000000000",ea8168fbf225e786459ca6bb18d963d26b505309:"500000000000000000000","20ff3ede8cadb5c37b48cb14580fb65e23090a7b":"42000000000000000000000",e482d255ede56b04c3e8df151f56e9ca62aaa8c2:"500000000000000000000","2e0880a34596230720f05ac8f065af8681dcb6c2":"100000000000000000000000",c674f28c8afd073f8b799691b2f0584df942e844:"2000000000000000000000",b646df98b49442746b61525c81a3b04ba3106250:"1970000000000000000000",d55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f:"2000000000000000000000","65ebaed27edb9dcc1957aee5f452ac2105a65c0e":"43531987000000000000000",f079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4:"20094000000000000000","867eba56748a5904350d2ca2a5ce9ca00b670a9b":"20000000000000000000000","51ee0cca3bcb10cd3e983722ced8493d926c0866":"999972000000000000000","88d541c840ce43cefbaf6d19af6b9859b573c145":"170000000000000000000",f851b010f633c40af1a8f06a73ebbaab65077ab5:"4400000000000000000000",e0aa69365555b73f282333d1e30c1bbd072854e8:"7000000000000000000000",c7b1c83e63203f9547263ef6282e7da33b6ed659:"18200000000000000000",af06f5fa6d1214ec43967d1bd4dde74ab814a938:"88000000000000000000","991173601947c2084a62d639527e961512579af9":"600000000000000000000","7a381122bada791a7ab1f6037dac80432753baad":"10000000000000000000000",e766f34ff16f3cfcc97321721f43ddf5a38b0cf4:"1550000000000000000000",d785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c:"1000000000000000000000",aebd4f205de799b64b3564b256d42a711d37ef99:"1177100000000000000000",a2fa17c0fb506ce494008b9557841c3f641b8cae:"20000000000000000000",a8aca748f9d312ec747f8b6578142694c7e9f399:"2000000000000000000000","950c68a40988154d2393fff8da7ccda99614f72c":"4597943000000000000000","075d15e2d33d8b4fa7dba8b9e607f04a261e340b":"1910000000000000000000","3616d448985f5d32aefa8b93a993e094bd854986":"205400000000000000000","4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe":"16000000000000000000000","84949dba559a63bfc845ded06e9f2d9b7f11ef24":"2000000000000000000000","937563d8a80fd5a537b0e66d20a02525d5d88660":"2500000000000000000000",b183ebee4fcb42c220e47774f59d6c54d5e32ab1:"1604266000000000000000","21e5d77320304c201c1e53b261a123d0a1063e81":"86972000000000000000",fa14b566234abee73042c31d21717182cba14aa1:"328000000000000000000","2da617695009cc57d26ad490b32a5dfbeb934e5e":"20000000000000000000000","3326b88de806184454c40b27f309d9dd6dcfb978":"17900000000000000000000","95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa":"1337000000000000000000","8db58e406e202df9bc703c480bd8ed248d52a032":"2000000000000000000000",f777361a3dd8ab62e5f1b9b047568cc0b555704c:"1000000000000000000000","83a93b5ba41bf88720e415790cdc0b67b4af34c4":"200000000000000000000","8a1cc5ac111c49bfcfd848f37dd768aa65c88802":"10000000000000000000000","52214378b54004056a7cc08c891327798ac6b248":"15200000000000000000000",ad80d865b85c34d2e6494b2e7aefea6b9af184db:"4000000000000000000000",e7d6240620f42c5edbb2ede6aec43da4ed9b5757:"1000000000000000000000",d0e35e047646e759f4517093d6408642517f084d:"3939507000000000000000","9340345ca6a3eabdb77363f2586043f29438ce0b":"530922000000000000000","6640ccf053555c130ae2b656647ea6e31637b9ab":"1970000000000000000000","184d86f3466ae6683b19729982e7a7e1a48347b2":"10000000000000000000000","84ec06f24700fe42414cb9897c154c88de2f6132":"1337000000000000000000",d1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe:"20000000000000000000000",e8a9a41740f44f54c3688b53e1ddd42e43c9fe94:"4000000000000000000000","6e3a51db743d334d2fe88224b5fe7c008e80e624":"106000000000000000000","3e94df5313fa520570ef232bc3311d5f622ff183":"2000000000000000000000","8957727e72cf629020f4e05edf799aa7458062d0":"2200000000000000000000",cf5e0eacd1b39d0655f2f77535ef6608eb950ba0:"2000000000000000000000",f4aaa3a6163e3706577b49c0767e948a681e16ee:"2000000000000000000000","97f1fe4c8083e596212a187728dd5cf80a31bec5":"20000000000000000000","57d5fd0e3d3049330ffcdcd020456917657ba2da":"1991240000000000000000","49bdbc7ba5abebb6389e91a3285220d3451bd253":"1000000000000000000000",ae126b382cf257fad7f0bc7d16297e54cc7267da:"300000000000000000000",bbf8616d97724af3def165d0e28cda89b800009a:"114063000000000000000",adb948b1b6fefe207de65e9bbc2de98e605d0b57:"2000000000000000000000","8a217db38bc35f215fd92906be42436fe7e6ed19":"6000000000000000000000",e28b062259e96eeb3c8d4104943f9eb325893cf5:"1337000000000000000000","6a6b18a45a76467e2e5d5a2ef911c3e12929857b":"82000000000000000000000",cb68ae5abe02dcf8cbc5aa719c25814651af8b85:"500000000000000000000","4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9":"20000000000000000000","58ba1569650e5bbbb21d35d3e175c0d6b0c651a9":"500000000000000000000","1eb4bf73156a82a0a6822080c6edf49c469af8b9":"1910000000000000000000","4103299671d46763978fa4aa19ee34b1fc952784":"200000000000000000000",e321bb4a946adafdade4571fb15c0043d39ee35f:"1575212000000000000000","893608751d68d046e85802926673cdf2f57f7cb8":"19700000000000000000","70fee08b00c6c2c04a3c625c1ff77caf1c32df01":"200000000000000000000","7b0fea1176d52159333a143c294943da36bbddb4":"9380000000000000000000",d331c823825a9e5263d052d8915d4dcde07a5c37:"564000000000000000000",a45432a6f2ac9d56577b938a37fabac8cc7c461c:"1000000000000000000000","764fc46d428b6dbc228a0f5f55c9508c772eab9f":"26000000000000000000000","1a95a8a8082e4652e4170df9271cb4bb4305f0b2":"50000000000000000000","08c9f1bfb689fdf804d769f82123360215aff93b":"1970000000000000000000","1572cdfab72a01ce968e78f5b5448da29853fbdd":"5061500000000000000000","379c7166849bc24a02d6535e2def13daeef8aa8d":"100000000000000000000",e0a254ac09b9725bebc8e460431dd0732ebcabbf:"6000000000000000000000","3225c1ca5f2a9c88156bb7d9cdc44a326653c214":"400000000000000000000","84686c7bad762c54b667d59f90943cd14d117a26":"20000000000000000000","3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c":"20000000000000000000","2ccf80e21898125eb4e807cd82e09b9d28592f6e":"2000000000000000000000",dde969aef34ea87ac299b7597e292b4a0155cc8a:"298819000000000000000","19e94e620050aad766b9e1bad931238312d4bf49":"2396000000000000000000","959f57fded6ae37913d900b81e5f48a79322c627":"255599000000000000000",b9b0a3219a3288d9b35b091b14650b8fe23dce2b:"14000000000000000000000","3575c770668a9d179f1ef768c293f80166e2aa3d":"474000000000000000000","58f05b262560503ca761c61890a4035f4c737280":"8000000000000000000000","3286d1bc657a312c8847d93cb3cb7950f2b0c6e3":"20000000000000000000000","1d9e6aaf8019a05f230e5def05af5d889bd4d0f2":"133700000000000000000",a375b4bc24a24e1f797593cc302b2f331063fa5c:"200000000000000000000","108ba7c2895c50e072dc6f964932d50c282d3034":"500000000000000000000",b6b34a263f10c3d2eceb0acc559a7b2ab85ce565:"4000000000000000000000",a4d2b429f1ad5349e31704969edc5f25ee8aca10:"10000000000000000000000","674adb21df4c98c7a347ac4c3c24266757dd7039":"2000000000000000000000","33565ba9da2c03e778ce12294f081dfe81064d24":"16000000000000000000000","4ddda7586b2237b053a7f3289cf460dc57d37a09":"10000000000000000000000",cc4faac00be6628f92ef6b8cb1b1e76aac81fa18:"205410000000000000000","5f99dc8e49e61d57daef606acdd91b4d7007326a":"3000000000000000000000",b8a979352759ba09e35aa5935df175bff678a108:"20000000000000000000","86fff220e59305c09f483860d6f94e96fbe32f57":"42900000000000000000","03e8b084537557e709eae2e1e1a5a6bce1ef8314":"20000000000000000000",dda4ff7de491c687df4574dd1b17ff8f246ba3d1:"19600000000000000000000","2538532936813c91e653284f017c80c3b8f8a36f":"2002000000000000000000","5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69":"1999400000000000000000","86740a46648e845a5d96461b18091ff57be8a16f":"98000000000000000000000","7e3f63e13129a221ba1ab06326342cd98b5126ae":"1597960000000000000000","1f5f3b34bd134b2781afe5a0424ac5846cdefd11":"99000000000000000000","39936c2719450b9420cc2522cf91db01f227c1c1":"500000000000000000000","967076a877b18ec15a415bb116f06ef32645dba3":"2000000000000000000000",a42908e7fe53980a9abf4044e957a54b70e99cbe:"2000000000000000000000","5eb371c407406c427b3b7de271ad3c1e04269579":"3000000000000000000000",a570223ae3caa851418a9843a1ac55db4824f4fd:"200000000000000000000","764692cccb33405dd0ab0c3379b49caf8e6221ba":"20000000000000000000",a365918bfe3f2627b9f3a86775d8756e0fd8a94b:"400000000000000000000","069ed0ab7aa77de571f16106051d92afe195f2d0":"200000000000000000000",bd432a3916249b4724293af9146e49b8280a7f2a:"4000000000000000000000","61c9dce8b2981cb40e98b0402bc3eb28348f03ac":"196910000000000000000","8f1fcc3c51e252b693bc5b0ec3f63529fe69281e":"6000000000000000000000","55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d":"1970000000000000000000","383a7c899ee18bc214969870bc7482f6d8f3570e":"10000000000000000000000",b14cc8de33d6338236539a489020ce4655a32bc6:"8000000000000000000000","448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad":"199955000000000000000","06f7dc8d1b9462cef6feb13368a7e3974b097f9f":"2000000000000000000000","9c9f89a3910f6a2ae8a91047a17ab788bddec170":"10000000000000000000000","5de598aba344378cab4431555b4f79992dc290c6":"1337000000000000000000","87e6034ecf23f8b5639d5f0ea70a22538a920423":"328000000000000000000","8b27392206b958cd375d7ef8af2cf8ef0598c0bc":"1000000000000000000000","49136fe6e28b7453fcb16b6bbbe9aaacba8337fd":"2000000000000000000000","6982fe8a867e93eb4a0bd051589399f2ec9a5292":"2000000000000000000000","9fd1052a60506bd1a9ef003afd9d033c267d8e99":"1000000000000000000000",d38fa2c4cc147ad06ad5a2f75579281f22a7cc1f:"20000000000000000000000","6f794dbdf623daa6e0d00774ad6962737c921ea4":"2000000000000000000000",e96b184e1f0f54924ac874f60bbf44707446b72b:"2910840000000000000000",b5ba29917c78a1d9e5c5c713666c1e411d7f693a:"3100000000000000000000","81d619ff5726f2405f12904c72eb1e24a0aaee4f":"20000000000000000000000",b02fa29387ec12e37f6922ac4ce98c5b09e0b00f:"2000000000000000000000",b7230d1d1ff2aca366963914a79df9f7c5ea2c98:"8000000000000000000000","7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26":"15202564000000000000000","8d9a0c70d2262042df1017d6c303132024772712":"2000000000000000000000","323aad41df4b6fc8fece8c93958aa901fa680843":"970000000000000000000",db04fad9c49f9e880beb8fcf1d3a3890e4b3846f:"1242482000000000000000","27824666d278d70423f03dfe1dc7a3f02f43e2b5":"1000070000000000000000",e04920dc6ecc1d6ecc084f88aa0af5db97bf893a:"182000000000000000000",b0c1b177a220e41f7c74d07cde8569c21c75c2f9:"5600000000000000000000","7864dc999fe4f8e003c0f43decc39aae1522dc0f":"94400000000000000000",c75c37ce2da06bbc40081159c6ba0f976e3993b1:"1078640000000000000000","179a825e0f1f6e985309668465cffed436f6aea9":"20000000000000000000","2c6b699d9ead349f067f45711a074a641db6a897":"20000000000000000000","068ce8bd6e902a45cb83b51541b40f39c4469712":"5240000000000000000000","767ac690791c2e23451089fe6c7083fe55deb62b":"820000000000000000000",b34f04b8db65bba9c26efc4ce6efc50481f3d65d:"20000000000000000000000","29aef48de8c9fbad4b9e4ca970797a5533eb722d":"10000000000000000000000","0a0ecda6636f7716ef1973614687fd89a820a706":"394000000000000000000",b32825d5f3db249ef4e85cc4f33153958976e8bc:"501375000000000000000","7ef16fd8d15b378a0fba306b8d03dd98fc92619f":"700000000000000000000",b58b52865ea55d8036f2fab26098b352ca837e18:"18200000000000000000","9b658fb361e046d4fcaa8aef6d02a99111223625":"2000000000000000000000",b2a498f03bd7178bd8a789a00f5237af79a3e3f8:"19400000000000000000000",cb48fe8265d9af55eb7006bc335645b0a3a183be:"3000000000000000000000","3cf9a1d465e78b7039e3694478e2627b36fcd141":"1372000000000000000000","5db84400570069a9573cab04b4e6b69535e202b8":"9700000000000000000000","214c89c5bd8e7d22bc574bb35e48950211c6f776":"18903000000000000000","53396f4a26c2b4604496306c5442e7fcba272e36":"20055000000000000000000","720994dbe56a3a95929774e20e1fe525cf3704e4":"8000000000000000000000","3571cf7ad304ecaee595792f4bbfa484418549d6":"5825500000000000000000","6042c644bae2b96f25f94d31f678c90dc96690db":"2000000000000000000000","2e24b597873bb141bdb237ea8a5ab747799af02d":"20000000000000000000000","08c802f87758349fa03e6bc2e2fd0791197eea9a":"2000000000000000000000","297a88921b5fca10e5bb9ded60025437ae221694":"200000000000000000000",aee49d68adedb081fd43705a5f78c778fb90de48:"20000000000000000000","4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e":"1000000000000000000000",dfaf31e622c03d9e18a0ddb8be60fbe3e661be0a:"9999800000000000000000","00aa5381b2138ebeffc191d5d8c391753b7098d2":"990049000000000000000","5b4c0c60f10ed2894bdb42d9dd1d210587810a0d":"500000000000000000000",c44f4ab5bc60397c737eb0683391b633f83c48fa:"1000000000000000000000","50bef2756248f9a7a380f91b051ba3be28a649ed":"1999884000000000000000","1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951":"20055000000000000000","9ec03e02e587b7769def538413e97f7e55be71d8":"19700000000000000000000","9874803fe1f3a0365e7922b14270eaeb032cc1b5":"1124500000000000000000","4e2310191ead8d3bc6489873a5f0c2ec6b87e1be":"1000000000000000000000","93678a3c57151aeb68efdc43ef4d36cb59a009f3":"30060000000000000000",f483f607a21fcc28100a018c568ffbe140380410:"1000000000000000000000","2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71":"1940000000000000000000","240e559e274aaef0c258998c979f671d1173b88b":"4000000000000000000000","108a2b7c336f784779d8b54d02a8d31d9a139c0a":"10000000000000000000000","9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6":"6000000000000000000000","194ff44aefc17bd20efd7a204c47d1620c86db5d":"2999400000000000000000","1f8116bd0af5570eaf0c56c49c7ab5e37a580458":"2000000000000000000000",d79835e404fb86bf845fba090d6ba25e0c8866a6:"2400000000000000000000",a8e7201ff619faffc332e6ad37ed41e301bf014a:"600000000000000000000","286906b6bd4972e3c71655e04baf36260c7cb153":"340000000000000000000",db4bc83b0e6baadb1156c5cf06e0f721808c52c7:"880000000000000000000",a158148a2e0f3e92dc2ce38febc20107e3253c96:"2000000000000000000000","9f6a322a6d469981426ae844865d7ee0bb15c7b3":"50003000000000000000","32f29e8727a74c6b4301e3ffff0687c1b870dae9":"1000000000000000000000","19918aa09e7d494e98ffa5db50350892f7156ac6":"10000000000000000000000","5a5f8508da0ebebb90be9033bd4d9e274105ae00":"6685000000000000000000","6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079":"792000000000000000000","72094f3951ffc9771dced23ada080bcaf9c7cca7":"6000000000000000000000","43f7e86e381ec51ec4906d1476cba97a3db584e4":"1000000000000000000000","05696b73916bd3033e05521e3211dfec026e98e4":"2000000000000000000000","5e7f70378775589fc66a81d3f653e954f55560eb":"2434000000000000000000","895613236f3584216ad75c5d3e07e3fa6863a778":"2000000000000000000000","4eb1454b573805c8aca37edec7149a41f61202f4":"300000000000000000000",d99999a2490d9494a530cae4daf38554f4dd633e:"120000000000000000000","1704cefcfb1331ec7a78388b29393e85c1af7916":"400000000000000000000",ac4acfc36ed6094a27e118ecc911cd473e8fb91f:"1799800000000000000000",a975b077fcb4cc8efcbf838459b6fa243a4159d6:"40000000000000000000","9c405cf697956138065e11c5f7559e67245bd1a5":"200000000000000000000",cafde855864c2598da3cafc05ad98df2898e8048:"14179272000000000000000","8ef711e43a13918f1303e81d0ea78c9eefd67eb2":"4000000000000000000000","0b14891999a65c9ef73308efe3100ca1b20e8192":"800000000000000000000","47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3":"131400000000000000000","04ba8a3f03f08b895095994dda619edaacee3e7a":"2000000000000000000000","02b6d65cb00b7b36e1fb5ed3632c4cb20a894130":"20000000000000000000000",f99aee444b5783c093cfffd1c4632cf93c6f050c:"400000000000000000000","2541314a0b408e95a694444977712a50713591ab":"1634706000000000000000","3096dca34108085bcf04ae72b94574a13e1a3e1d":"200000000000000000000","56df05bad46c3f00ae476ecf017bb8c877383ff1":"197248000000000000000","6d59b21cd0e2748804d9abe064eac2bef0c95f27":"2000000000000000000000",b29f5b7c1930d9f97a115e067066f0b54db44b3b:"1000000000000000000000","888c16144933197cac26504dd76e06fd6600c789":"100000000000000000000",dfe3c52a92c30396a4e33a50170dc900fcf8c9cf:"50000000000000000000",f76f69cee4faa0a63b30ae1e7881f4f715657010:"200000000000000000000",ee0007b0960d00908a94432a737557876aac7c31:"53053000000000000000",effc15e487b1beda0a8d1325bdb4172240dc540a:"64940000000000000000","40ab0a3e83d0c8ac9366910520eab1772bac3b1a":"976600000000000000000","1895a0eb4a4372722fcbc5afe6936f289c88a419":"910000000000000000000","81efe296ae76c860d1c5fbd33d47e8ce9996d157":"1000000000000000000000","9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a":"50000000000000000000",f2b4ab2c9427a9015ef6eefff5edb60139b719d1:"716800000000000000000","765be2e12f629e6349b97d21b62a17b7c830edab":"6000000000000000000000",ff61c9c1b7a3d8b53bba20b34466544b7b216644:"2000000000000000000000","36a08fd6fd1ac17ce15ed57eefb12a2be28188bf":"1337000000000000000000","17049311101d817efb1d65910f663662a699c98c":"1999800000000000000000","30511832918d8034a7bee72ef2bfee440ecbbcf6":"16100000000000000000000",d27c234ff7accace3d996708f8f9b04970f97d36:"1337000000000000000000",a961171f5342b173dd70e7bfe5b5ca238b13bcdd:"3397053000000000000000","30bf61b2d877fe10635126326fa189e4b0b1c3b0":"1027580000000000000000","4bb6d86b8314c22d8d37ea516d0019f156aae12d":"1000000000000000000000","5f363e0ab747e02d1b3b66abb69ea53c7baf523a":"11640000000000000000000","283e11203749b1fa4f32febb71e49d135919382a":"1000000000000000000000",ac5999a89d2dd286d5a80c6dee7e86aad40f9e12:"3880000000000000000000","3f6dd3650ee428dcb7759553b017a96a94286ac9":"1337000000000000000000",b3fc1d6881abfcb8becc0bb021b8b73b7233dd91:"50000000000000000000",f0832a6bb25503eeca435be31b0bf905ca1fcf57:"6685000000000000000000","9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c":"11027380000000000000000","4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d":"668500000000000000000",f3b668b3f14d920ebc379092db98031b67b219b3:"199955000000000000000",d91d889164479ce436ece51763e22cda19b22d6b:"3365200000000000000000",ffe28db53c9044b4ecd4053fd1b4b10d7056c688:"100000000000000000000",c77b01a6e911fa988d01a3ab33646beef9c138f3:"721400000000000000000",c0064f1d9474ab915d56906c9fb320a2c7098c9b:"358000000000000000000","4e3edad4864dab64cae4c5417a76774053dc6432":"590943000000000000000","71d2cc6d02578c65f73c575e76ce8fbcfadcf356":"72400000000000000000","9971df60f0ae66dce9e8c84e17149f09f9c52f64":"200000000000000000000","58e661d0ba73d6cf24099a5562b808f7b3673b68":"2000000000000000000000","84b0ee6bb837d3a4c4c5011c3a228c0edab4634a":"20000000000000000000","84375afbf59b3a1d61a1be32d075e0e15a4fbca5":"200000000000000000000","9ae9476bfecd3591964dd325cf8c2a24faed82c1":"4000000000000000000000","6a4c8907b600248057b1e46354b19bdc859c991a":"20000000000000000000","1c045649cd53dc23541f8ed4d341812808d5dd9c":"7000000000000000000000",c5e488cf2b5677933971f64cb8202dd05752a2c0:"1000000000000000000000",eb25481fcd9c221f1ac7e5fd1ecd9307a16215b8:"197000000000000000000",a61887818f914a20e31077290b83715a6b2d6ef9:"1880000000000000000000","679437eacf437878dc293d48a39c87b7421a216c":"64528000000000000000","331a1c26cc6994cdd3c14bece276ffff4b9df77c":"18049000000000000000","75b95696e8ec4510d56868a7c1a735c68b244890":"6400000000000000000000",a77f3ee19e9388bbbb2215c62397b96560132360:"200000000000000000000",bc7afc8477412274fc265df13c054473427d43c6:"130034000000000000000","91050a5cffadedb4bb6eaafbc9e5013428e96c80":"1700000000000000000000","24586ec5451735eeaaeb470dc8736aae752f82e5":"17600000000000000000","51039377eed0c573f986c5e8a95fb99a59e9330f":"1970000000000000000000",fbb161fe875f09290a4b262bc60110848f0d2226:"2000000000000000000000",ed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff:"9550000000000000000000",bad235d5085dc7b068a67c412677b03e1836884c:"2000000000000000000000","055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3":"100000000000000000000","4058808816fdaa3a5fc98ed47cfae6c18315422e":"199800000000000000000","3540c7bd7a8442d5bee21a2180a1c4edff1649e0":"1239295000000000000000",c5edbbd2ca0357654ad0ea4793f8c5cecd30e254:"6000000000000000000000",b5906b0ae9a28158e8ac550e39da086ee3157623:"200000000000000000000","4d801093c19ca9b8f342e33cc9c77bbd4c8312cf":"345005000000000000000","206482ee6f138a778fe1ad62b180ce856fbb23e6":"2000000000000000000000",c0ed0d4ad10de03435b153a0fc25de3b93f45204:"3160000000000000000000","29e67990e1b6d52e1055ffe049c53195a81542cf":"20000000000000000000000",e6d22209ffd0b87509ade3a8e2ef429879cb89b5:"17260000000000000000000",d6644d40e90bc97fe7dfe7cabd3269fd579ba4b3:"159000000000000000000",ece1290877b583e361a2d41b009346e6274e2538:"300000000000000000000",ab3861226ffec1289187fb84a08ec3ed043264e8:"1000000000000000000000","60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a":"1370000000000000000000","28b77585cb3d55a199ab291d3a18c68fe89a848a":"1960000000000000000000","73128173489528012e76b41a5e28c68ba4e3a9d4":"1000000000000000000000","018492488ba1a292342247b31855a55905fef269":"140000000000000000000","0bb54c72fd6610bfa4363397e020384b022b0c49":"1337000000000000000000","520f66a0e2657ff0ac4195f2f064cf2fa4b24250":"40000000000000000000",a1432ed2c6b7777a88e8d46d388e70477f208ca5:"7999538000000000000000","149ba10f0da2725dc704733e87f5a524ca88515e":"7880000000000000000000",b287f7f8d8c3872c1b586bcd7d0aedbf7e732732:"20000000000000000000",c46bbdef76d4ca60d316c07f5d1a780e3b165f7e:"2000000000000000000000",b5a589dd9f4071dbb6fba89b3f5d5dae7d96c163:"2000000000000000000000",d218efb4db981cdd6a797f4bd48c7c26293ceb40:"2975000000000000000000",af87d2371ef378957fbd05ba2f1d66931b01e2b8:"700000000000000000000","86ef6426211949cc37f4c75e7850369d0cf5f479":"13399196000000000000000",fb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0:"199950000000000000000",da16dd5c3d1a2714358fe3752cae53dbab2be98c:"19400000000000000000000","9eb7834e171d41e069a77947fca87622f0ba4e48":"100000000000000000000",e1d91b0954cede221d6f24c7985fc59965fb98b8:"2000000000000000000000","85d0d88754ac84b8b21ba93dd2bfec72626faba8":"1000000000000000000000","695b4cce085856d9e1f9ff3e79942023359e5fbc":"5000000000000000000000","9156d18029350e470408f15f1aa3be9f040a67c6":"1000000000000000000000",a9d64b4f3bb7850722b58b478ba691375e224e42:"6000000000000000000000","17e4a0e52bac3ee44efe0954e753d4b85d644e05":"2000000000000000000000",b8a79c84945e47a9c3438683d6b5842cff7684b1:"2000000000000000000000",cfac2e1bf33205b05533691a02267ee19cd81836:"1000000000000000000000","6b992521ec852370848ad697cc2df64e63cc06ff":"1000000000000000000000","60af0ee118443c9b37d2fead77f5e521debe1573":"1910000000000000000000",c6dbdb9efd5ec1b3786e0671eb2279b253f215ed:"1000000000000000000000","659c0a72c767a3a65ced0e1ca885a4c51fd9b779":"2000000000000000000000",ed1276513b6fc68628a74185c2e20cbbca7817bf:"191000000000000000000","5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8":"800000000000000000000","17c0fef6986cfb2e4041f9979d9940b69dff3de2":"4000000000000000000000",ca98c7988efa08e925ef9c9945520326e9f43b99:"4000000000000000000000",fe8f1fdcab7fbec9a6a3fcc507619600505c36a3:"19700000000000000000","4420aa35465be617ad2498f370de0a3cc4d230af":"2000000000000000000000","8232d1f9742edf8dd927da353b2ae7b4cbce7592":"668500000000000000000",eca5f58792b8c62d2af556717ee3ee3028be4dce:"2000000000000000000000","6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104":"1820000000000000000000","3ac2f0ff1612e4a1c346d53382abf6d8a25baa53":"2000000000000000000000",daa1bd7a9148fb865cd612dd35f162861d0f3bdc:"3066243000000000000000","5169c60aee4ceed1849ab36d664cff97061e8ea8":"3000000000000000000000","2a5e3a40d2cd0325766de73a3d671896b362c73b":"100000000000000000000000",a83382b6e15267974a8550b98f7176c1a353f9be:"3541608000000000000000",b50c149a1906fad2786ffb135aab501737e9e56f:"388000000000000000000",d9775965b716476675a8d513eb14bbf7b07cd14a:"5076200000000000000000","66662006015c1f8e3ccfcaebc8ee6807ee196303":"500024000000000000000","78746a958dced4c764f876508c414a68342cecb9":"50600000000000000000",e982e6f28c548f5f96f45e63f7ab708724f53fa1:"396238000000000000000","740bfd52e01667a3419b029a1b8e45576a86a2db":"16800000000000000000000","2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a":"2674000000000000000000","2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786":"3999800000000000000000","3e3161f1ea2fbf126e79da1801da9512b37988c9":"49250000000000000000000","7e2ba86da52e785d8625334f3397ba1c4bf2e8d1":"197000000000000000000","7608f437b31f18bc0b64d381ae86fd978ed7b31f":"50000000000000000000","25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509":"17000000000000000000000","745ad3abc6eeeb2471689b539e789ce2b8268306":"1129977000000000000000","09e437d448861228a232b62ee8d37965a904ed9c":"21708305000000000000000",be53322f43fbb58494d7cce19dda272b2450e827:"200018000000000000000","4166fc08ca85f766fde831460e9dc93c0e21aa6c":"1000000000000000000000","99c0174cf84e0783c220b4eb6ae18fe703854ad3":"2074800000000000000000","3cf484524fbdfadae26dc185e32b2b630fd2e726":"448798000000000000000",fdcd5d80b105897a57abc47865768b2900524295:"6400000000000000000000",f22f4078febbbaa8b0e78e642c8a42f35d433905:"1999944000000000000000",eac768bf14b8f9432e69eaa82a99fbeb94cd0c9c:"98500000000000000000000","2639eee9873ceec26fcc9454b548b9e7c54aa65c":"1000000000000000000000",c3c3c2510d678020485a63735d1307ec4ca6302b:"1000000000000000000000",b73d6a77559c86cf6574242903394bacf96e3570:"91200000000000000000","5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436":"20000000000000000000000","03377c0e556b640103289a6189e1aeae63493467":"20000000000000000000000","6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b":"4000000000000000000000",fc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb:"2000000000000000000000","4a835c25824c47ecbfc79439bf3f5c3481aa75cd":"1400000000000000000000",b5493ef173724445cf345c035d279ba759f28d51:"20000000000000000000",b9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a:"499928000000000000000","419bde7316cc1ed295c885ace342c79bf7ee33ea":"6000000000000000000000",e4625501f52b7af52b19ed612e9d54fdd006b492:"209440000000000000000",e9d599456b2543e6db80ea9b210e908026e2146e:"200000000000000000000","2c06dd922b61514aafedd84488c0c28e6dcf0e99":"100000000000000000000000","06b5ede6fdf1d6e9a34721379aeaa17c713dd82a":"2000000000000000000000",d8930a39c77357c30ad3a060f00b06046331fd62:"820000000000000000000",b2a2c2111612fb8bbb8e7dd9378d67f1a384f050:"20000000000000000000","1f174f40a0447234e66653914d75bc003e5690dc":"160000000000000000000",e06cb6294704eea7437c2fc3d30773b7bf38889a:"20094000000000000000",cd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24:"1000000000000000000000",f316ef1df2ff4d6c1808dba663ec8093697968e0:"1794400000000000000000","1e6915ebd9a19c81b692ad99b1218a592c1ac7b1":"4000000000000000000000","885493bda36a0432976546c1ddce71c3f4570021":"216700000000000000000","18b0407cdad4ce52600623bd5e1f6a81ab61f026":"319489000000000000000","187d9f0c07f8eb74faaad15ebc7b80447417f782":"20000000000000000000","5d6ccf806738091042ad97a6e095fe8c36aa79c5":"188000000000000000000","53437fecf34ab9d435f4deb8ca181519e2592035":"188000000000000000000",fd1faa347b0fcc804c2da86c36d5f1d18b7087bb:"52380000000000000000","650cf67db060cce17568d5f2a423687c49647609":"100000000000000000000",bcd95ef962462b6edfa10fda87d72242fe3edb5c:"334133000000000000000","3b5e8b3c77f792decb7a8985df916efb490aac23":"2000000000000000000000",f13b083093ba564e2dc631568cf7540d9a0ec719:"1999944000000000000000","373c547e0cb5ce632e1c5ad66155720c01c40995":"4691588000000000000000","7313461208455455465445a459b06c3773b0eb30":"2000000000000000000000","441f37e8a029fd02482f289c49b5d06d00e408a4":"333333000000000000000",d30d4c43adcf55b2cb53d68323264134498d89ce:"1000000000000000000000",f648ea89c27525710172944e79edff847803b775:"100000000000000000000000","0c7f869f8e90d53fdc03e8b2819b016b9d18eb26":"20000000000000000000000",c71f92a3a54a7b8c2f5ea44305fccb84eee23148:"49980000000000000000","7988901331e387f713faceb9005cb9b65136eb14":"1970000000000000000000",e9a39a8bac0f01c349c64cedb69897f633234ed2:"3980000000000000000000",ad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2:"999996000000000000000",f25259a5c939cd25966c9b6303d3731c53ddbc4c:"200000000000000000000",d1682c2159018dc3d07f08240a8c606daf65f8e1:"200000000000000000000000",a99991cebd98d9c838c25f7a7416d9e244ca250d:"1000000000000000000000","5a285755391e914e58025faa48cc685f4fd4f5b8":"26000000000000000000000","4d24b7ac47d2f27de90974ba3de5ead203544bcd":"100000000000000000000","21b182f2da2b384493cf5f35f83d9d1ee14f2a21":"2000000000000000000000","31ab088966ecc7229258f6098fce68cf39b38485":"1000000000000000000000","4977a7939d0939689455ce2639d0ee5a4cd910ed":"1820000000000000000000","07af938c1237a27c9030094dcf240750246e3d2c":"500000000000000000000","4e2bfa4a466f82671b800eee426ad00c071ba170":"4000000000000000000000","107379d4c467464f235bc18e55938aad3e688ad7":"50000000000000000000",f7b29b82195c882dab7897c2ae95e77710f57875:"2199000000000000000000","56586391040c57eec6f5affd8cd4abde10b50acc":"4000000000000000000000",ac608e2bac9dd20728d2947effbbbf900a9ce94b:"6000600000000000000000","48548b4ba62bcb2f0d34a88dc69a680e539cf046":"100084000000000000000","1665ab1739d71119ee6132abbd926a279fe67948":"100000000000000000000",af4493e8521ca89d95f5267c1ab63f9f45411e1b:"200000000000000000000",bf6925c00751008440a6739a02bf2b6cdaab5e3a:"1000000000000000000000","3fe40fbd919aad2818df01ee4df46c46842ac539":"6000000000000000000000","455b9296921a74d1fc41617f43b8303e6f3ed76c":"4200000000000000000000","7086b4bde3e35d4aeb24b825f1a215f99d85f745":"1999800000000000000000",d4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f:"40000000000000000000000",a4489a50ead5d5445a7bee4d2d5536c2a76c41f8:"200000000000000000000","505e4f7c275588c533a20ebd2ac13b409bbdea3c":"17600000000000000000","3bb53598cc20e2055dc553b049404ac9b7dd1e83":"615020000000000000000","52cd20403ba7eda6bc307a3d63b5911b817c1263":"20000000000000000000",a211da03cc0e31ecce5309998718515528a090df:"200000000000000000000",bcb422dc4dd2aae94abae95ea45dd1731bb6b0ba:"447500000000000000000",cbde9734b8e6aa538c291d6d7facedb0f338f857:"2000000000000000000000","171ca02a8b6d62bf4ca47e906914079861972cb2":"200000000000000000000",d40d0055fd9a38488aff923fd03d35ec46d711b3:"4999711000000000000000","3887192c7f705006b630091276b39ac680448d6b":"60000000000000000000","3f3c8e61e5604cef0605d436dd22accd862217fc":"1337000000000000000000","4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9":"6719600000000000000000","4571de672b9904bad8743692c21c4fdcea4c2e01":"4000000000000000000000","5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b":"120000000000000000000",d6300b3215b11de762ecde4b70b7927d01291582:"2000000000000000000000",f9e37447406c412197b2e2aebc001d6e30c98c60:"8346700000000000000000",bd047ff1e69cc6b29ad26497a9a6f27a903fc4dd:"865000000000000000000","23fa7eb51a48229598f97e762be0869652dffc66":"1000000000000000000000","6679aeecd87a57a73f3356811d2cf49d0c4d96dc":"600000000000000000000","23c55aeb5739876f0ac8d7ebea13be729685f000":"1337000000000000000000","757b65876dbf29bf911d4f0692a2c9beb1139808":"4124263000000000000000",e8fc36b0131ec120ac9e85afc10ce70b56d8b6ba:"200000000000000000000","1a89899cbebdbb64bb26a195a63c08491fcd9eee":"2000000000000000000000","6edf7f5283725c953ee64317f66188af1184b033":"8050000000000000000000","297385e88634465685c231a314a0d5dcd146af01":"1550000000000000000000","018f20a27b27ec441af723fd9099f2cbb79d6263":"2167000000000000000000",a5a4227f6cf98825c0d5baff5315752ccc1a1391:"10000000000000000000000","69517083e303d4fbb6c2114514215d69bc46a299":"100000000000000000000","1dab172effa6fbee534c94b17e794edac54f55f8":"1970000000000000000000",c6ee35934229693529dc41d9bb71a2496658b88e:"19700000000000000000000",a8ee1df5d44b128469e913569ef6ac81eeda4fc8:"500000000000000000000","35bd246865fab490ac087ac1f1d4f2c10d0cda03":"400000000000000000000","4bf8bf1d35a231315764fc8001809a949294fc49":"66850000000000000000",c70fa45576bf9c865f983893002c414926f61029:"400400000000000000000",fdeaac2acf1d138e19f2fc3f9fb74592e3ed818a:"668500000000000000000",bfbfbcb656c2992be8fcde8219fbc54aadd59f29:"9999924000000000000000","1722c4cbe70a94b6559d425084caeed4d6e66e21":"4000000000000000000000","00e681bc2d10db62de85848324492250348e90bf":"20000000000000000000000","5c308bac4857d33baea074f3956d3621d9fa28e1":"4999711000000000000000","68c08490c89bf0d6b6f320b1aca95c8312c00608":"4000000000000000000000",ce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05:"4000000000000000000000","427417bd16b1b3d22dbb902d8f9657016f24a61c":"2000000000000000000000","5ff93de6ee054cad459b2d5eb0f6870389dfcb74":"220000000000000000000","71946b7117fc915ed107385f42d99ddac63249c2":"2000000000000000000000","11ec00f849b6319cf51aa8dd8f66b35529c0be77":"2000000000000000000000","610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156":"20002000000000000000",a422e4bf0bf74147cc895bed8f16d3cef3426154:"349281000000000000000","745aecbaf9bb39b74a67ea1ce623de368481baa6":"10000000000000000000000","9f496cb2069563144d0811677ba0e4713a0a4143":"1122000000000000000000",c500b720734ed22938d78c5e48b2ba9367a575ba:"33400000000000000000000",cd072e6e1833137995196d7bb1725fef8761f655:"6000000000000000000000","94644ad116a41ce2ca7fbec609bdef738a2ac7c7":"5000000000000000000000",e8d942d82f175ecb1c16a405b10143b3f46b963a:"568600000000000000000",f73dd9c142b71bce11d06e30e7e7d032f2ec9c9e:"1970000000000000000000","1327d759d56e0ab87af37ecf63fe01f310be100a":"659200000000000000000","28fa2580f9ebe420f3e5eefdd371638e3b7af499":"6000000000000000000000","024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1":"180000000000000000000",b4b14bf45455d0ab0803358b7524a72be1a2045b:"500000000000000000000",b1e2dd95e39ae9775c55aeb13f12c2fa233053ba:"2000000000000000000000","35b03ea4245736f57b85d2eb79628f036ddcd705":"4000000000000000000000",eb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de:"42784000000000000000000","690594d306613cd3e2fd24bca9994ad98a3d73f8":"2000000000000000000000","8397a1bc47acd647418159b99cea57e1e6532d6e":"9169160000000000000000",b44815a0f28e569d0e921a4ade8fb2642526497a:"55500000000000000000",e24109be2f513d87498e926a286499754f9ed49e:"886500000000000000000","37ac29bda93f497bc4aeaab935452c431510341e":"985000000000000000000","4a81abe4984c7c6bef63d69820e55743c61f201c":"16011846000000000000000","66dcc5fb4ee7fee046e141819aa968799d644491":"1337000000000000000000","43ff38743ed0cd43308c066509cc8e7e72c862aa":"1940000000000000000000",b8f20005b61352ffa7699a1b52f01f5ab39167f1:"10000000000000000000000","1cda411bd5163baeca1e558563601ce720e24ee1":"18200000000000000000","86245f596691093ece3f3d3ca2263eace81941d9":"188000000000000000000",f52a5882e8927d944b359b26366ba2b9cacfbae8:"25000080000000000000000","118c18b2dce170e8f445753ba5d7513cb7636d2d":"8800000000000000000000","7168b3bb8c167321d9bdb023a6e9fd11afc9afd9":"1790000000000000000000",d9103bb6b67a55a7fece2d1af62d457c2178946d:"1000000000000000000000","8b9fda7d981fe9d64287f85c94d83f9074849fcc":"14000000000000000000000","91211712719f2b084d3b3875a85069f466363141":"1000000000000000000000","4863849739265a63b0a2bf236a5913e6f959ce15":"1520000000000000000000",c2d1778ef6ee5fe488c145f3586b6ebbe3fbb445:"1146000000000000000000","2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1":"300000000000000000000",fe9c0fffefb803081256c0cf4d6659e6d33eb4fb:"1528000000000000000000","893017ff1adad499aa065401b4236ce6e92b625a":"1999944000000000000000","073c67e09b5c713c5221c8a0c7f3f74466c347b0":"19400000000000000000000","93e303411afaf6c107a44101c9ac5b36e9d6538b":"66000000000000000000000","0ec50aa823f465b9464b0bc0c4a57724a555f5d6":"59100000000000000000000",a3e3a6ea509573e21bd0239ece0523a7b7d89b2f:"1970000000000000000000",c069ef0eb34299abd2e32dabc47944b272334824:"120000000000000000000","28a3da09a8194819ae199f2e6d9d1304817e28a5":"2000000000000000000000",e9495ba5842728c0ed97be37d0e422b98d69202c:"2000000000000000000000",bba976f1a1215f7512871892d45f7048acd356c8:"2000000000000000000000","887cac41cd706f3345f2d34ac34e01752a6e5909":"595366000000000000000",e0e0b2e29dde73af75987ee4446c829a189c95bc:"149000000000000000000","4a5fae3b0372c230c125d6d470140337ab915656":"1600000000000000000000","425177eb74ad0a9d9a5752228147ee6d6356a6e6":"13370000000000000000","5db7bba1f9573f24115d8c8c62e9ce8895068e9f":"49984000000000000000",fa6a37f018e97967937fc5e8617ba1d786dd5f77:"19999800000000000000000","45e3a93e72144ada860cbc56ff85145ada38c6da":"1610000000000000000000","67da922effa472a6b124e84ea8f86b24e0f515aa":"20000000000000000000",aa9bd4589535db27fa2bc903ca17d679dd654806:"2000000000000000000000","16a9e9b73ae98b864d1728798b8766dbc6ea8d12":"957480000000000000000",d6580ab5ed4c7dfa506fa6fe64ad5ce129707732:"4000000000000000000000","984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2":"6000000000000000000000","7746b6c6699c8f34ca2768a820f1ffa4c207fe05":"4000086000000000000000","2fa491fb5920a6574ebd289f39c1b2430d2d9a6a":"2000000000000000000000",fae76719d97eac41870428e940279d97dd57b2f6:"98500000000000000000000","41b2dbd79dda9b864f6a7030275419c39d3efd3b":"3200000000000000000000",dd8254121a6e942fc90828f2431f511dad7f32e6:"3018000000000000000000","37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7":"2000000000000000000000","3a10888b7e149cae272c01302c327d0af01a0b24":"17000000000000000000","401354a297952fa972ad383ca07a0a2811d74a71":"14000000000000000000","51865db148881951f51251710e82b9be0d7eadb2":"2000000000000000000000",bbbd6ecbb5752891b4ceb3cce73a8f477059376f:"36000000000000000000","3f236108eec72289bac3a65cd283f95e041d144c":"999925000000000000000",dc83b6fd0d512131204707eaf72ea0c8c9bef976:"2000000000000000000000","036eeff5ba90a6879a14dff4c5043b18ca0460c9":"100000000000000000000",fac5ca94758078fbfccd19db3558da7ee8a0a768:"1017500000000000000000",d0d62c47ea60fb90a3639209bbfdd4d933991cc6:"194000000000000000000","891cb8238c88e93a1bcf61db49bd82b47a7f4f84":"2680000000000000000000",df53003346d65c5e7a646bc034f2b7d32fcbe56a:"2000000000000000000000","6e89c51ea6de13e06cdc748b67c4410fe9bcab03":"4000000000000000000000",a61cdbadf04b1e54c883de6005fcdf16beb8eb2f:"2000000000000000000000",e3951de5aefaf0458768d774c254f7157735e505:"1600930000000000000000",f2732cf2c13b8bb8e7492a988f5f89e38273ddc8:"600000000000000000000","4752218e54de423f86c0501933917aea08c8fed5":"20000000000000000000000","152f4e860ef3ee806a502777a1b8dbc91a907668":"600000000000000000000","15b96f30c23b8664e7490651066b00c4391fbf84":"410650000000000000000","8693e9b8be94425eef7969bc69f9d42f7cad671e":"1000090000000000000000",f41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942:"1970000000000000000000","38458e0685573cb4d28f53098829904570179266":"40000000000000000000","53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c":"200000000000000000000","2dca0e449ab646dbdfd393a96662960bcab5ae1e":"40000000000000000000000","87d7ac0653ccc67aa9c3469eef4352193f7dbb86":"200000000000000000000000",ae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08:"1730000000000000000000","7751f363a0a7fd0533190809ddaf9340d8d11291":"20000000000000000000","708a2af425ceb01e87ffc1be54c0f532b20eacd6":"134159000000000000000",ac122a03cd058c122e5fe17b872f4877f9df9572:"1969606000000000000000","5da4ca88935c27f55c311048840e589e04a8a049":"80000000000000000000",e67c2c1665c88338688187629f49e99b60b2d3ba:"200000000000000000000",dec82373ade8ebcf2acb6f8bc2414dd7abb70d77:"200000000000000000000","47c247f53b9fbeb17bba0703a00c009fdb0f6eae":"20000000000000000000000","9a522e52c195bfb7cf5ffaaedb91a3ba7468161d":"1000000000000000000000","3159e90c48a915904adfe292b22fa5fd5e72796b":"1008800000000000000000",defddfd59b8d2c154eecf5c7c167bf0ba2905d3e:"93588000000000000000",ad1d68a038fd2586067ef6d135d9628e79c2c924:"4686168000000000000000","038e45eadd3d88b87fe4dab066680522f0dfc8f9":"10000000000000000000000","2561ec0f379218fe5ed4e028a3f744aa41754c72":"13370000000000000000",b95396daaa490df2569324fcc6623be052f132ca:"2000000000000000000000","2376ada90333b1d181084c97e645e810aa5b76f1":"750000000000000000000","07800d2f8068e448c79a4f69b1f15ef682aae5f6":"19400000000000000000000",adeb204aa0c38e179e81a94ed8b3e7d53047c26b:"608000000000000000000","0dc100b107011c7fc0a1339612a16ccec3285208":"2000000000000000000000",f0b1340b996f6f0bf0d9561c849caf7f4430befa:"100000000000000000000",e1443dbd95cc41237f613a48456988a04f683282:"4000086000000000000000",d3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f:"6618150000000000000000",b68899e7610d4c93a23535bcc448945ba1666f1c:"200000000000000000000",a7253763cf4a75df92ca1e766dc4ee8a2745147b:"10740000000000000000000","75d67ce14e8d29e8c2ffe381917b930b1aff1a87":"3000000000000000000000","493d48bda015a9bfcf1603936eab68024ce551e0":"22528000000000000000","7ddd57165c87a2707f025dcfc2508c09834759bc":"1400000000000000000000",cff7f89a4d4219a38295251331568210ffc1c134:"1760000000000000000000","168d30e53fa681092b52e9bae15a0dcb41a8c9bb":"100000000000000000000","99b743d1d9eff90d9a1934b4db21d519d89b4a38":"100000000000000000000",a3d0b03cffbb269f796ac29d80bfb07dc7c6ad06:"2000000000000000000000","816d9772cf11399116cc1e72c26c6774c9edd739":"200000000000000000000",a880e2a8bf88a1a82648b4013c49c4594c433cc8:"4728000000000000000000","2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34":"62221355000000000000000",cb86edbc8bbb1f9131022be649565ebdb09e32a1:"2000000000000000000000","3915eab5ab2e5977d075dec47d96b68b4b5cf515":"61520000000000000000000","8165cab0eafb5a328fc41ac64dae715b2eef2c65":"1000000000000000000000","416c86b72083d1f8907d84efd2d2d783dffa3efb":"1999944000000000000000",c524086d46c8112b128b2faf6f7c7d8160a8386c:"400000000000000000000","902d74a157f7d2b9a3378b1f56703730e03a1719":"4000000000000000000000","74ef2869cbe608856045d8c2041118579f2236ea":"59724000000000000000",af992dd669c0883e5515d3f3112a13f617a4c367:"2000000000000000000000","4c6a248fc97d705def495ca20759169ef0d36471":"760000000000000000000","974d2f17895f2902049deaaecf09c3046507402d":"14707000000000000000","0239b4f21f8e05cd01512b2be7a0e18a6d974607":"1000000000000000000000",b97a6733cd5fe99864b3b33460d1672434d5cafd:"1999579000000000000000",f558a2b2dd26dd9593aae04531fd3c3cc3854b67:"198000000000000000000",b577b6befa054e9c040461855094b002d7f57bd7:"114000000000000000000000","73bfe7710f31cab949b7a2604fbf5239cee79015":"2000000000000000000000","5717f2d8f18ffcc0e5fe247d3a4219037c3a649c":"3998000000000000000000","20707e425d2a11d2c89f391b2b809f556c592421":"2000000000000000000000","9a6708ddb8903c289f83fe889c1edcd61f854423":"1000000000000000000000",fa27cc49d00b6c987336a875ae39da58fb041b2e:"10000000000000000000000",d688e785c98f00f84b3aa1533355c7a258e87948:"500000000000000000000","927cb7dc187036b5427bc7e200c5ec450c1d27d4":"216000000000000000000",b2bfaa58b5196c5cb7f89de15f479d1838de713d:"21000000000000000000",e180de9e86f57bafacd7904f9826b6b4b26337a3:"830400000000000000000",a1204dad5f560728a35c0d8fc79481057bf77386:"1000000000000000000000","6b0da25af267d7836c226bcae8d872d2ce52c941":"6000000000000000000000","0517448dada761cc5ba4033ee881c83037036400":"1998000000000000000000","7ed0a5a847bef9a9da7cba1d6411f5c316312619":"39842000000000000000","5b5d517029321562111b43086d0b043591109a70":"2600000000000000000000","56fc1a7bad4047237ce116146296238e078f93ad":"178000000000000000000","6c5422fb4b14e6d98b6091fdec71f1f08640419d":"400000000000000000000","108fe8ee2a13da487b22c6ab6d582ea71064d98c":"399800000000000000000","0ad3e44d3c001fa290b393617030544108ac6eb9":"1969019000000000000000","25aee68d09afb71d8817f3f184ec562f7897b734":"2000000000000000000000",c2340a4ca94c9678b7494c3c852528ede5ee529f:"48669000000000000000","44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393":"417500000000000000000","8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4":"600000000000000000000","682897bc4f8e89029120fcffb787c01a93e64184":"10000000000000000000000",f7acff934b84da0969dc37a8fcf643b7d7fbed41:"1999944000000000000000",f05fcd4c0d73aa167e5553c8c0d6d4f2faa39757:"13334000000000000000000",c981d312d287d558871edd973abb76b979e5c35e:"1970000000000000000000","9da61ccd62bf860656e0325d7157e2f160d93bb5":"4999980000000000000000",d284a50382f83a616d39b8a9c0f396e0ebbfa95d:"1000070000000000000000",d6cf5c1bcf9da662bcea2255905099f9d6e84dcc:"8349332000000000000000",c71b2a3d7135d2a85fb5a571dcbe695e13fc43cd:"1000000000000000000000",b22dadd7e1e05232a93237baed98e0df92b1869e:"2000000000000000000000",b09fe6d4349b99bc37938054022d54fca366f7af:"200000000000000000000000","427e4751c3babe78cff8830886febc10f9908d74":"1970000000000000000000","60b358cb3dbefa37f47df2d7365840da8e3bc98c":"20000000000000000000",dcd5bca2005395b675fde5035659b26bfefc49ee:"197000000000000000000","81186931184137d1192ac88cd3e1e5d0fdb86a74":"2900000000000000000000",de212293f8f1d231fa10e609470d512cb8ffc512:"2000000000000000000000","1937c5c515057553ccbd46d5866455ce66290284":"1000000000000000000000000","592777261e3bd852c48eca95b3a44c5b7f2d422c":"20000000000000000000000",bbf84292d954acd9e4072fb860b1504106e077ae:"1500000000000000000000","3b4100e30a73b0c734b18ffa8426d19b19312f1a":"55300000000000000000000",a03a3dc7c533d1744295be955d61af3f52b51af5:"40000000000000000000","4aa148c2c33401e66a2b586e6577c4b292d3f240":"216200000000000000000",ff850e3be1eb6a4d726c08fa73aad358f39706da:"1940000000000000000000","743651b55ef8429df50cf81938c2508de5c8870f":"2000000000000000000000","3700e3027424d939dbde5d42fb78f6c4dbec1a8f":"40000000000000000000",c1cbd2e2332a524cf219b10d871ccc20af1fb0fa:"1000000000000000000000",e25b9f76b8ad023f057eb11ad94257a0862e4e8c:"2000000000000000000000","719e891fbcc0a33e19c12dc0f02039ca05b801df":"6185800000000000000000","39636b25811b176abfcfeeca64bc87452f1fdff4":"400000000000000000000","631030a5b27b07288a45696f189e1114f12a81c0":"499970000000000000000",bcc84597b91e73d5c5b4d69c80ecf146860f779a:"4380000000000000000000","095e0174829f34c3781be1a5e38d1541ea439b7f":"6000000000000000000000","2e7e05e29edda7e4ae25c5173543efd71f6d3d80":"6000000000000000000000",dbb6ac484027041642bbfd8d80f9d0c1cf33c1eb:"2000000000000000000000","153c08aa8b96a611ef63c0253e2a4334829e579d":"394000000000000000000","10f4bff0caa5027c0a6a2dcfc952824de2940909":"2000000000000000000000","2ef869f0350b57d53478d701e3fee529bc911c75":"50000000000000000000","70ab34bc17b66f9c3b63f151274f2a727c539263":"2000000000000000000000","3201259caf734ad7581c561051ba0bca7fd6946b":"180000000000000000000000","84e9cf8166c36abfa49053b7a1ad4036202681ef":"2000000000000000000000","4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87":"1000090000000000000000",e50b464ac9de35a5618b7cbf254674182b81b97e:"4100000000000000000000","2abdf1a637ef6c42a7e2fe217773d677e804ebdd":"5000000000000000000000","7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5":"1337000000000000000000","2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c":"1010694000000000000000","7b712c7af11676006a66d2fc5c1ab4c479ce6037":"8000000000000000000000","3466f67e39636c01f43b3a21a0e8529325c08624":"842864000000000000000",fdd502a74e813bcfa355ceda3c176f6a6871af7f:"400000000000000000000","26475419c06d5f147aa597248eb46cf7befa64a5":"1640000000000000000000","9243d7762d77287b12638688b9854e88a769b271":"1000000000000000000000","723d8baa2551d2addc43c21b45e8af4ca2bfb2c2":"1760000000000000000000",f2fbb6d887f8b8cc3a869aba847f3d1f643c53d6:"3999000000000000000000","2cdb3944650616e47cb182e060322fa1487978ce":"1820000000000000000000",f0d21663d8b0176e05fde1b90ef31f8530fda95f:"1999944000000000000000","77cc02f623a9cf98530997ea67d95c3b491859ae":"1354900000000000000000",d1b5a454ac3405bb4179208c6c84de006bcb9be9:"500000000000000000000",b9920fd0e2c735c256463caa240fb7ac86a93dfa:"1760000000000000000000",ed1f1e115a0d60ce02fb25df014d289e3a0cbe7d:"500000000000000000000","23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81":"2000000000000000000000",f0be0faf4d7923fc444622d1980cf2d990aab307:"2000000000000000000000","0829d0f7bb7c446cfbb0deadb2394d9db7249a87":"40110000000000000000","2ecac504b233866eb5a4a99e7bd2901359e43b3d":"20000000000000000000000","06d6cb308481c336a6e1a225a912f6e6355940a1":"1760000000000000000000",d4879fd12b1f3a27f7e109761b23ca343c48e3d8:"666000000000000000000","857f100b1a5930225efc7e9020d78327b41c02cb":"2000000000000000000000","3aa42c21b9b31c3e27ccd17e099af679cdf56907":"8000000000000000000000","764d5212263aff4a2a14f031f04ec749dc883e45":"1850000000000000000000",d03a2da41e868ed3fef5745b96f5eca462ff6fda:"3000000000000000000000","4f26690c992b7a312ab12e1385d94acd58288e7b":"14000000000000000000000","7b122162c913e7146cad0b7ed37affc92a0bf27f":"1506799000000000000000",c87352dba582ee2066b9c002a962e003134f78b1:"500000000000000000000","9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853":"835000000000000000000",ccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7:"152000000000000000000","557f5e65e0da33998219ad4e99570545b2a9d511":"11024000000000000000000",a5f0077b351f6c505cd515dfa6d2fa7f5c4cd287:"40000000000000000000000","79c6002f8452ca157f1317e80a2faf24475559b7":"20000000000000000000","3aa07a34a1afc8967d3d1383b96b62cf96d5fa90":"20000000000000000000000","7f389c12f3c6164f6446566c77669503c2792527":"98500000000000000000",ac4cc256ae74d624ace80db078b2207f57198f6b:"2001000000000000000000","823ba7647238d113bce9964a43d0a098118bfe4d":"200000000000000000000",f5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b:"200000000000000000000","7d34803569e00bd6b59fff081dfa5c0ab4197a62":"1712700000000000000000","061ea4877cd08944eb64c2966e9db8dedcfec06b":"1000000000000000000000",df37c22e603aedb60a627253c47d8ba866f6d972:"24000000000000000000000","529aa002c6962a3a8545027fd8b05f22b5bf9564":"1670000000000000000000",eb89a882670909cf377e9e78286ee97ba78d46c2:"802200000000000000000","9ac85397792a69d78f286b86432a07aeceb60e64":"14300000000000000000","9610592202c282ab9bd8a884518b3e0bd4758137":"268000000000000000000","73932709a97f02c98e51b091312865122385ae8e":"1430000000000000000000","5ef8c96186b37984cbfe04c598406e3b0ac3171f":"9400000000000000000000",b6f78da4f4d041b3bc14bc5ba519a5ba0c32f128:"172326253000000000000000","6f0edd23bcd85f6015f9289c28841fe04c83efeb":"19100000000000000000",a8a43c009100616cb4ae4e033f1fc5d7e0b6f152:"3939015000000000000000","7081fa6baad6cfb7f51b2cca16fb8970991a64ba":"233953000000000000000","9de7386dde401ce4c67b71b6553f8aa34ea5a17d":"60000000000000000000","54ec7300b81ac84333ed1b033cd5d7a33972e234":"200000000000000000000","67a80e0190721f94390d6802729dd12c31a895ad":"1999964000000000000000","3a4297da3c555e46c073669d0478fce75f2f790e":"1969606000000000000000",c2e0584a71348cc314b73b2029b6230b92dbb116:"2000000000000000000000","0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44":"4000000000000000000000","544b5b351d1bc82e9297439948cf4861dac9ae11":"22000000000000000000000","3ae62bd271a760637fad79c31c94ff62b4cd12f7":"2000000000000000000000","0d8023929d917234ae40512b1aabb5e8a4512771":"148000000000000000000","2858acacaf21ea81cab7598fdbd86b452e9e8e15":"666000000000000000000",c033b1325a0af45472c25527853b1f1c21fa35de:"2000000000000000000000",bbf85aaaa683738f073baef44ac9dc34c4c779ea:"2000000000000000000000","6ae57f27917c562a132a4d1bf7ec0ac785832926":"6000000000000000000000","88e6f9b247f988f6c0fc14c56f1de53ec69d43cc":"100000000000000000000",b72c2a011c0df50fbb6e28b20ae1aad217886790:"4000000000000000000000","161caf5a972ace8379a6d0a04ae6e163fe21df2b":"100000000000000000000000","2a63590efe9986c3fee09b0a0a338b15bed91f21":"6458400000000000000000","50e1c8ec98415bef442618708799437b86e6c205":"6000000000000000000000","33f4a6471eb1bca6a9f85b3b4872e10755c82be1":"2000000000000000000000","9c49deff47085fc09704caa2dca8c287a9a137da":"8000000000000000000000",e1173a247d29d8238df0922f4df25a05f2af77c3:"40007051000000000000000","51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c":"310000000000000000000",ecaf3350b7ce144d068b186010852c84dd0ce0f0:"2000000000000000000000","72393d37b451effb9e1ff3b8552712e2a970d8c2":"985000000000000000000","1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b":"2000000000000000000000",b8ab39805bd821184f6cbd3d2473347b12bf175c:"118200000000000000000",c55a6b4761fd11e8c85f15174d74767cd8bd9a68:"133700000000000000000","99d1b585965f406a42a49a1ca70f769e765a3f98":"16700000000000000000000","9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536":"320000000000000000000","7fef8c38779fb307ec6f044bebe47f3cfae796f1":"168561000000000000000","322d6f9a140d213f4c80cd051afe25c620bf4c7d":"20000000000000000000","3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a":"499970000000000000000","5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e":"9200000000000000000000","6e84c2fd18d8095714a96817189ca21cca62bab1":"340935000000000000000",a5bad86509fbe0e0e3c0e93f6d381f1af6e9d481:"6000000000000000000000","3954bdfe0bf587c695a305d9244c3d5bdddac9bb":"19187461000000000000000","63f0e5a752f79f67124eed633ad3fd2705a397d4":"3940000000000000000000","33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d":"432500000000000000000","68027d19558ed7339a08aee8de3559be063ec2ea":"2000000000000000000000","96f0462ae6f8b96088f7e9c68c74b9d8ad34b347":"1790000000000000000000",f1f391ca92808817b755a8b8f4e2ca08d1fd1108:"6000000000000000000000","7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06":"99999000000000000000",e9b9a2747510e310241d2ece98f56b3301d757e0:"2000000000000000000000","2100381d60a5b54adc09d19683a8f6d5bb4bfbcb":"10000000000000000000000","7495ae78c0d90261e2140ef2063104731a60d1ed":"34250000000000000000",dc911cf7dc5dd0813656670528e9338e67034786:"2000000000000000000000","262aed4bc0f4a4b2c6fb35793e835a49189cdfec":"10000000000000000000000","9ee93f339e6726ec65eea44f8a4bfe10da3d3282":"2000000000000000000000",a3a57b0716132804d60aac281197ff2b3d237b01:"1400000000000000000000",c799e34e88ff88be7de28e15e4f2a63d0b33c4cb:"200000000000000000000",c7506c1019121ff08a2c8c1591a65eb4bdfb4a3f:"600000000000000000000","795ebc2626fc39b0c86294e0e837dcf523553090":"1000000000000000000000","441aca82631324acbfa2468bda325bbd78477bbf":"6000000000000000000000","9f271d285500d73846b18f733e25dd8b4f5d4a8b":"722000000000000000000",d77892e2273b235d7689e430e7aeed9cbce8a1f3:"2000000000000000000000","4f8972838f70c903c9b6c6c46162e99d6216d451":"4610000000000000000000","4c85ed362f24f6b9f04cdfccd022ae535147cbb9":"1500000000000000000000","3807eff43aa97c76910a19752dd715ee0182d94e":"250190000000000000000","3a9e5441d44b243be55b75027a1ceb9eacf50df2":"1000000000000000000000","3deae43327913f62808faa1b6276a2bd6368ead9":"2000000000000000000000",c270456885342b640b4cfc1b520e1a544ee0d571:"1820000000000000000000","77798f201257b9c35204957057b54674aefa51df":"149000000000000000000","225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6":"2000000000000000000000","78df2681d6d602e22142d54116dea15d454957aa":"298000000000000000000","283396ce3cac398bcbe7227f323e78ff96d08767":"400000000000000000000","747ff7943b71dc4dcdb1668078f83dd7cc4520c2":"60000000000000000000",a4ed11b072d89fb136759fc69b428c48aa5d4ced:"262800000000000000000",cc043c4388d345f884c6855e71142a9f41fd6935:"20000000000000000000",ab14d221e33d544629198cd096ed63dfa28d9f47:"6000000000000000000000","251e6838f7cec5b383c1d90146341274daf8e502":"147510000000000000000","36a0e61e1be47fa87e30d32888ee0330901ca991":"20000000000000000000",bcfc98e5c82b6adb180a3fcb120b9a7690c86a3f:"1970000000000000000000","18a6d2fc52be73084023c91802f05bc24a4be09f":"2000000000000000000000","80591a42179f34e64d9df75dcd463b28686f5574":"20000000000000000000000","881230047c211d2d5b00d8de4c5139de5e3227c7":"10000000000000000000000","9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d":"140800000000000000000",a01fd1906a908506dedae1e208128872b56ee792:"3000000000000000000000","1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8":"2000000000000000000000","6add932193cd38494aa3f03aeccc4b7ab7fabca2":"89600000000000000000","2aaa35274d742546670b7426264521032af4f4c3":"10000000000000000000000","67b8a6e90fdf0a1cac441793301e8750a9fa7957":"895000000000000000000","5b5be0d8c67276baabd8edb30d48ea75640b8b29":"824480000000000000000","28d7e5866f1d85fd1ceb32bfbe1dfc36db434566":"7199000000000000000000","98e3e90b28fccaee828779b8d40a5568c4116e21":"40000000000000000000","2dd578f7407dfbd548d05e95ccc39c485429626a":"4200000000000000000000","8ca6989746b06e32e2487461b1ce996a273acfd7":"20000000000000000000",a6f93307f8bce03195fece872043e8a03f7bd11a:"2886000000000000000000",efbd52f97da5fd3a673a46cbf330447b7e8aad5c:"100033000000000000000","52bdd9af5978850bc24110718b3723759b437e59":"1730000000000000000000","6e073b66d1b8c66744d88096a8dd99ec7e0228da":"4000000000000000000000",a29d661a6376f66d0b74e2fe9d8f26c0247ec84c:"4117300000000000000000","7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018":"3000000000000000000000","2eca6a3c5d9f449d0956bd43fa7b4d7be8435958":"2000020000000000000000",f59f9f02bbc98efe097eabb78210979021898bfd:"9999800000000000000000","90e300ac71451e401f887f6e7728851647a80e07":"400000000000000000000","05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db":"910000000000000000000",e54102534de8f23effb093b31242ad3b233facfd:"4000000000000000000000",c127aab59065a28644a56ba3f15e2eac13da2995:"600000000000000000000",ed60c4ab6e540206317e35947a63a9ca6b03e2cb:"57275000000000000000",d855b03ccb029a7747b1f07303e0a664793539c8:"2000000000000000000000","1178501ff94add1c5881fe886136f6dfdbe61a94":"158000000000000000000",f447108b98df64b57e871033885c1ad71db1a3f9:"6916709000000000000000",deee2689fa9006b59cf285237de53b3a7fd01438:"450034000000000000000","7f01dc7c3747ca608f983dfc8c9b39e755a3b914":"206980000000000000000","9edeac4c026b93054dc5b1d6610c6f3960f2ad73":"1200000000000000000000",e3cffe239c64e7e20388e622117391301b298696:"500000000000000000000",ebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda:"2000000000000000000000","38c10b90c859cbb7815692f99dae520ab5febf5e":"13169000000000000000000","23f9ecf3e5dddca38815d3e59ed34b5b90b4a353":"204608000000000000000",d7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4:"1000000000000000000000","9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231":"2000000000000000000000","8b9577920053b1a00189304d888010d9ef2cb4bf":"500000000000000000000",fcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c:"8000000000000000000000","01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8":"600000000000000000000",abde147b2af789eaa586547e66c4fa2664d328a4:"247545000000000000000","64042ba68b12d4c151651ca2813b7352bd56f08e":"600000000000000000000",dccca42045ec3e16508b603fd936e7fd7de5f36a:"19700000000000000000",e77a89bd45dc04eeb4e41d7b596b707e6e51e74c:"12000000000000000000000",f77c7b845149efba19e261bc7c75157908afa990:"2000000000000000000000",fa5201fe1342af11307b9142a041243ca92e2f09:"152150000000000000000000","40df495ecf3f8b4cef2a6c189957248fe884bc2b":"12000000000000000000000","3d79a853d71be0621b44e29759656ca075fdf409":"2000000000000000000000","6de02f2dd67efdb7393402fa9eaacbcf589d2e56":"1182000000000000000000","729aad4627744e53f5d66309aa74448b3acdf46f":"2000000000000000000000","4e4318f5e13e824a54edfe30a7ed4f26cd3da504":"2000000000000000000000",c6a286e065c85f3af74812ed8bd3a8ce5d25e21d:"18200000000000000000",fd686de53fa97f99639e2568549720bc588c9efc:"1969606000000000000000","06b0ff834073cce1cbc9ea557ea87b605963e8b4":"300000000000000000000","72b5633fe477fe542e742facfd690c137854f216":"1670000000000000000000","8bf373d076814cbc57e1c6d16a82c5be13c73d37":"200000000000000000000",cf264e6925130906c4d7c18591aa41b2a67f6f58:"2000000000000000000000","0ea2a210312b3e867ee0d1cc682ce1d666f18ed5":"10000000000000000000000",d02afecf8e2ec2b62ac8ad204161fd1fae771d0e:"2000000000000000000000",e6b20f980ad853ad04cbfc887ce6601c6be0b24c:"4000000000000000000000","4280a58f8bb10b9440de94f42b4f592120820191":"2000000000000000000000",a914cdb571bfd93d64da66a4e108ea134e50d000:"1430143000000000000000","60864236930d04d8402b5dcbeb807f3caf611ea2":"4000000000000000000000",f9dd239008182fb519fb30eedd2093fed1639be8:"500000000000000000000","18e53243981aabc8767da10c73449f1391560eaa":"6000000000000000000000",c3a9226ae275df2cab312b911040634a9c9c9ef6:"4000000000000000000000","4fcc19ea9f4c57dcbce893193cfb166aa914edc5":"7001380000000000000000",c1e1409ca52c25435134d006c2a6a8542dfb7273:"34380000000000000000","981ddf0404e4d22dda556a0726f00b2d98ab9569":"999972000000000000000",e5bcc88c3b256f6ed5fe550e4a18198b943356ad:"2000000000000000000000","74a17f064b344e84db6365da9591ff1628257643":"20000000000000000000","2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d":"2000000000000000000000","8d04a5ebfb5db409db0617c9fa5631c192861f4a":"970000000000000000000",f18b14cbf6694336d0fe12ac1f25df2da0c05dbb:"3999800000000000000000","56ac20d63bd803595cec036da7ed1dc66e0a9e07":"63927000000000000000","92c94c2820dfcf7156e6f13088ece7958b3676fd":"95500000000000000000","968dea60df3e09ae3c8d3505e9c080454be0e819":"6000000000000000000000","9268d62646563611dc3b832a30aa2394c64613e3":"2000000000000000000000","5a192b964afd80773e5f5eda6a56f14e25e0c6f3":"500000000000000000000",df8d48b1eb07b3c217790e6c2df04dc319e7e848:"500000000000000000000","7f61fa6cf5f898b440dac5abd8600d6d691fdef9":"280000000000000000000","929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad":"2000000000000000000000","9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0":"2000000000000000000000",bf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb:"1580000000000000000000","46aa501870677e7f0a504876b4e8801a0ad01c46":"800000000000000000000","8f473d0ab876ddaa15608621d7013e6ff714b675":"470400000000000000000","02290fb5f9a517f82845acdeca0fc846039be233":"2000000000000000000000","8a5831282ce14a657a730dc18826f7f9b99db968":"4330268000000000000000","0328510c09dbcd85194a98d67c33ac49f2f94d60":"11000000000000000000000",cf883a20329667ea226a1e3c765dbb6bab32219f:"3038972000000000000000","2615100ea7e25bba9bca746058afbbb4ffbe4244":"500000000000000000000",b115ee3ab7641e1aa6d000e41bfc1ec7210c2f32:"13000000000000000000000","5cfa8d568575658ca4c1a593ac4c5d0e44c60745":"291000000000000000000",d3c24d4b3a5e0ff8a4622d518edd73f16ab28610:"20000000000000000000",a639acd96b31ba53b0d08763229e1f06fd105e9d:"8000000000000000000000",ffa4aff1a37f984b0a67272149273ae9bd41e3bc:"10000000000000000000000",cf684dfb8304729355b58315e8019b1aa2ad1bac:"432500000000000000000","5797b60fd2894ab3c2f4aede86daf2e788d745ad":"6000000000000000000000",a6a0de421ae54f6d17281308f5646d2f39f7775d:"2000000000000000000000","08504f05643fab5919f5eea55925d7a3ed7d807a":"20000000000000000000","7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2":"2000000000000000000000","1078d7f61b0e56c74ee6635b2e1819ef1e3d8785":"1000000000000000000000","6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137":"14172200000000000000000","6a2e86469a5bf37cee82e88b4c3863895d28fcaf":"519000000000000000000","197672fd39d6f246ce66a790d13aa922d70ea109":"1000000000000000000000","8009a7cbd192b3aed4adb983d5284552c16c7451":"4000000000000000000000",f6c3c48a1ac0a34799f04db86ec7a975fe7768f3:"1970000000000000000000","16be75e98a995a395222d00bd79ff4b6e638e191":"36000000000000000000000","6c05e34e5ef2f42ed09deff1026cd66bcb6960bb":"2000000000000000000000","5d6ae8cbd6b3393c22d16254100d0238e808147c":"719992000000000000000","1a376e1b2d2f590769bb858d4575320d4e149970":"4841200000000000000000",f6ead67dbf5b7eb13358e10f36189d53e643cfcf:"40000000000000000000000","467d5988249a68614716659840ed0ae6f6f457bc":"387500000000000000000",aa960e10c52391c54e15387cc67af827b5316dcc:"2000000000000000000000","483ba99034e900e3aedf61499d3b2bce39beb7aa":"985000000000000000000","86f23e9c0aafc78b9c404dcd60339a925bffa266":"400000000000000000000",d05a447c911dbb275bfb2e5a37e5a703a56f9997:"200000000000000000000",edb71ec41bda7dce86e766e6e8c3e9907723a69b:"20000000000000000000",f86a3ea8071f7095c7db8a05ae507a8929dbb876:"336000000000000000000","323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6":"13790000000000000000000","936f3813f5f6a13b8e4ffec83fe7f826186a71cd":"520000000000000000000","6db72bfd43fef465ca5632b45aab7261404e13bf":"2000000000000000000000","9bb76204186af2f63be79168601687fc9bad661f":"300000000000000000000","28ab165ffb69eda0c549ae38e9826f5f7f92f853":"1296890000000000000000",c73e2112282215dc0762f32b7e807dcd1a7aae3e:"6900000000000000000000",f8086e42661ea929d2dda1ab6c748ce3055d111e:"1000000000000000000000","4db21284bcd4f787a7556500d6d7d8f36623cf35":"1939806000000000000000",c48651c1d9c16bff4c9554886c3f3f26431f6f68:"658000000000000000000","9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7":"499971000000000000000","560da37e956d862f81a75fd580a7135c1b246352":"10000000000000000000000","4b60a3e253bf38c8d5662010bb93a473c965c3e5":"1490000000000000000000","64e02abb016cc23a2934f6bcddb681905021d563":"1000000000000000000000",ac2c8e09d06493a63858437bd20be01962450365:"1910000000000000000000","9bf9b3b2f23cf461eb591f28340bc719931c8364":"1000000000000000000000","9b5c39f7e0ac168c8ed0ed340477117d1b682ee9":"98000000000000000000",f75bb39c799779ebc04a336d260da63146ed98d0:"25000000000000000000",a7966c489f4c748a7ae980aa27a574251767caf9:"3000000000000000000000",ea53c954f4ed97fd4810111bdab69ef981ef25b9:"17300000000000000000000","03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c":"2000000000000000000000","3e63ce3b24ca2865b4c5a687b7aea3597ef6e548":"2000000000000000000000","500c902958f6421594d1b6ded712490d52ed6c44":"1970000000000000000000","6f44ca09f0c6a8294cbd519cdc594ad42c67579f":"50000000000000000000","3616fb46c81578c9c8eb4d3bf880451a88379d7d":"200000000000000000000","57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f":"100000000000000000000","1cebf0985d7f680aaa915c44cc62edb49eab269e":"1000000000000000000000",c0cbf6032fa39e7c46ff778a94f7d445fe22cf30:"310000000000000000000",c58b9cc61dedbb98c33f224d271f0e228b583433:"3880000000000000000000",e9c6dfae97f7099fc5f4e94b784db802923a1419:"48800000000000000000","9bacd3d40f3b82ac91a264d9d88d908eac8664b9":"20000000000000000000000","63d80048877596e0c28489e650cd4ac180096a49":"280000000000000000000",e6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc:"200000000000000000000",d418870bc2e4fa7b8a6121ae0872d55247b62501:"1580000000000000000000",e2f9383d5810ea7b43182b8704b62b27f5925d39:"400000000000000000000",bd5e473abce8f97a6932f77c2facaf9cc0a00514:"1117350000000000000000","2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa":"3000000000000000000000","9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb":"1126900000000000000000","6e96faeda3054302c45f58f161324c99a3eebb62":"20000000000000000000",ef93818f684db0c3675ec81332b3183ecc28a495:"1550000000000000000000","2659facb1e83436553b5b42989adb8075f9953ed":"29356000000000000000",c4ffadaaf2823fbea7bff702021bffc4853eb5c9:"42233000000000000000",e9864c1afc8eaad37f3ba56fcb7477cc622009b7:"79000000000000000000","87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77":"200400000000000000000",c043f2452dcb9602ef62bd360e033dd23971fe84:"2000000000000000000000","0fdd65402395df9bd19fee4507ef5345f745104c":"5000000000000000000000","939c4313d2280edf5e071bced846063f0a975d54":"120000000000000000000000",b28245037cb192f75785cb86cbfe7c930da258b0:"16000000000000000000000",a80cb1738bac08d4f9c08b4deff515545fa8584f:"500000000000000000000","62971bf2634cee0be3c9890f51a56099dbb9519b":"656000000000000000000",f2efe96560c9d97b72bd36447843885c1d90c231:"2000000000000000000000","0e390f44053ddfcef0d608b35e4d9c2cbe9871bb":"1970000000000000000000","61d101a033ee0e2ebb3100ede766df1ad0244954":"500000000000000000000","6785513cf732e47e87670770b5419be10cd1fc74":"2000000000000000000000","167699f48a78c615512515739958993312574f07":"39000000000000000000","68ec79d5be7155716c40941c79d78d17de9ef803":"500600000000000000000",a0e8ba661b48154cf843d4c2a5c0f792d528ee29:"400000000000000000000","1a201b4327cea7f399046246a3c87e6e03a3cda8":"1000000000000000000000",f60f62d73937953fef35169e11d872d2ea317eec:"5348000000000000000000",c0c04d0106810e3ec0e54a19f2ab8597e69a573d:"50000000000000000000",ef47cf073e36f271d522d7fa4e7120ad5007a0bc:"2500000000000000000000",a44fe800d96fcad73b7170d0f610cb8c0682d6ce:"4000000000000000000000","010f4a98dfa1d9799bf5c796fb550efbe7ecd877":"8023366000000000000000","708fa11fe33d85ad1befcbae3818acb71f6a7d7e":"18200000000000000000",b38c4e537b5df930d65a74d043831d6b485bbde4:"400000000000000000000","250a69430776f6347703f9529783955a6197b682":"1940000000000000000000","2d35a9df62757f7ffad1049afb06ca4afc464c51":"20000000000000000000","6aff1466c2623675e3cb0e75e423d37a25e442eb":"1730000000000000000000",fc15cb99a8d1030b12770add033a79ee0d0c908c:"350056000000000000000",e784dcc873aa8c1513ec26ff36bc92eac6d4c968:"200000000000000000000",b1c328fb98f2f19ab6646f0a7c8c566fda5a8540:"2500000000000000000000","247a0a11c57f0383b949de540b66dee68604b0a1":"1069600000000000000000","1af60343360e0b2d75255210375720df21db5c7d":"1000000000000000000000","8794bf47d54540ece5c72237a1ffb511ddb74762":"2000000000000000000000",e76d945aa89df1e457aa342b31028a5e9130b2ce:"1015200000000000000000",a30e0acb534c9b3084e8501da090b4eb16a2c0cd:"2000000000000000000000","7099d12f6ec656899b049a7657065d62996892c8":"400000000000000000000","7be7f2456971883b9a8dbe4c91dec08ac34e8862":"3000000000000000000000","42746aeea14f27beff0c0da64253f1e7971890a0":"1550000000000000000000","736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0":"313950000000000000000","822edff636563a6106e52e9a2598f7e6d0ef2782":"36099000000000000000","03c647a9f929b0781fe9ae01caa3e183e876777e":"445800000000000000000","63612e7862c27b587cfb6daf9912cb051f030a9f":"43458000000000000000",d46bae61b027e5bb422e83a3f9c93f3c8fc77d27:"2000000000000000000000","5f23ba1f37a96c45bc490259538a54c28ba3b0d5":"1200000000000000000000",d41d7fb49fe701baac257170426cc9b38ca3a9b2:"176000000000000000000","1ebacb7844fdc322f805904fbf1962802db1537c":"10000000000000000000000","9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23":"240000000000000000000",e4ca0a5238564dfc91e8bf22bade2901619a1cd4:"1000000000000000000000","1ad72d20a76e7fcc6b764058f48d417d496fa6cd":"2000000000000000000000",d3bc730937fa75d8452616ad1ef1fe7fffe0d0e7:"83363000000000000000",eac1482826acb6111e19d340a45fb851576bed60:"32177000000000000000","01e40521122530d9ac91113c06a0190b6d63850b":"1337000000000000000000","9e20e5fd361eabcf63891f5b87b09268b8eb3793":"100000000000000000000","69ff429074cb9b6c63bc914284bce5f0c8fbf7d0":"500000000000000000000","0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e":"200000000000000000000","5b4ea16db6809b0352d4b6e81c3913f76a51bb32":"400000000000000000000",d8fe088fffce948f5137ee23b01d959e84ac4223:"227942000000000000000","7e4e9409704121d1d77997026ff06ea9b19a8b90":"2602600000000000000000","96b434fe0657e42acc8212b6865139dede15979c":"4000000000000000000000","22f004df8de9e6ebf523ccace457accb26f97281":"10000000000000000000000",d8f9240c55cff035523c6d5bd300d370dc8f0c95:"285000000000000000000","9d9e57fde30e5068c03e49848edce343b7028358":"1730000000000000000000","317cf4a23cb191cdc56312c29d15e210b3b9b784":"144000000000000000000","79f08e01ce0988e63c7f8f2908fade43c7f9f5c9":"18200000000000000000","04e5f5bc7c923fd1e31735e72ef968fd67110c6e":"1611000000000000000000","1ec4ec4b77bf19d091a868e6f49154180541f90e":"2000000000000000000000","8737dae671823a8d5917e0157ace9c43468d946b":"1999944000000000000000",f998ca3411730a6cd10e7455b0410fb0f6d3ff80:"2000000000000000000000","6e2eab85dc89fe29dc0aa1853247dab43a523d56":"80000000000000000000","72c083beadbdc227c5fb43881597e32e83c26056":"20000000000000000000000","5902e44af769a87246a21e079c08bf36b06efeb3":"1000000000000000000000",cc2d04f0a4017189b340ca77198641dcf6456b91:"3940000000000000000000",bde4c73f969b89e9ceae66a2b51844480e038e9a:"1000000000000000000000",adff0d1d0b97471e76d789d2e49c8a74f9bd54ff:"1880000000000000000000","397cdb8c80c67950b18d654229610e93bfa6ee1a":"1172938000000000000000",a3e051fb744aa3410c3b88f899f5d57f168df12d:"2955000000000000000000","810db25675f45ea4c7f3177f37ce29e22d67999c":"200000000000000000000","1e13ec51142cebb7a26083412c3ce35144ba56a1":"5000000000000000000000","25bdfa3ee26f3849617b230062588a97e3cae701":"1000008000000000000000",ae538c73c5b38d8d584d7ebdadefb15cabe48357:"999000000000000000000",a2ecce2c49f72a0995a0bda57aacf1e9f001e22a:"4000000000000000000000","7e24fbdad290175eb2df6d180a19b9a9f41370be":"1000000000000000000000",e8cc43bc4f8acf39bff04ebfbf42aac06a328470:"400000000000000000000",c2779771f0536d79a8708f6931abc44b3035e999:"20002000000000000000000",ab27ba78c8e5e3daef31ad05aef0ff0325721e08:"468000000000000000000","563cb8803c1d32a25b27b64114852bd04d9c20cd":"204400000000000000000","08d4267feb15da9700f7ccc3c84a8918bf17cfde":"1790000000000000000000",d1778c13fbd968bc083cb7d1024ffe1f49d02caa:"4020000000000000000000","1796bcc97b8abc717f4b4a7c6b1036ea2182639f":"355242000000000000000",beecd6af900c8b064afcc6073f2d85d59af11956:"2000000000000000000000","045ed7f6d9ee9f252e073268db022c6326adfc5b":"100000000000000000000",b88a37c27f78a617d5c091b7d5b73a3761e65f2a:"2000000000000000000000","72fb49c29d23a18950c4b2dc0ddf410f532d6f53":"2000000000000000000000","6ecaefa6fc3ee534626db02c6f85a0c395571e77":"600000000000000000000",d1811c55976980f083901d8a0db269222dfb5cfe:"1550000000000000000000","98855c7dfbee335344904a12c40c731795b13a54":"1069600000000000000000","92a898d46f19719c38126a8a3c27867ae2cee596":"2000000000000000000000",ca428863a5ca30369892d612183ef9fb1a04bcea:"1520000000000000000000","797427e3dbf0feae7a2506f12df1dc40326e8505":"1000000000000000000000","3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc":"1970000000000000000000","28818e18b610001321b31df6fe7d2815cdadc9f5":"1000000000000000000000","5f3e1e6739b0c62200e00a003691d9efb238d89f":"3000000000000000000000",d9d370fec63576ab15b318bf9e58364dc2a3552a:"100000000000000000000",b223bf1fbf80485ca2b5567d98db7bc3534dd669:"4000000000000000000000","7b27d0d1f3dd3c140294d0488b783ebf4015277d":"400000000000000000000","7930c2d9cbfa87f510f8f98777ff8a8448ca5629":"199955000000000000000","820c19291196505b65059d9914b7090be1db87de":"140000000000000000000",e545ee84ea48e564161e9482d59bcf406a602ca2:"1850000000000000000000",af4cf41785161f571d0ca69c94f8021f41294eca:"9850000000000000000000","7a4f9b850690c7c94600dbee0ca4b0a411e9c221":"1910000000000000000000",ddab6b51a9030b40fb95cf0b748a059c2417bec7:"2000000000000000000000","315ef2da620fd330d12ee55de5f329a696e0a968":"150000000000000000000","4db1c43a0f834d7d0478b8960767ec1ac44c9aeb":"872870000000000000000","2fef81478a4b2e8098db5ff387ba2153f4e22b79":"999000000000000000000","6c6aa0d30b64721990b9504a863fa0bfb5e57da7":"2700000000000000000000","33380c6fff5acd2651309629db9a71bf3f20c5ba":"16100000000000000000000","4eebf1205d0cc20cee6c7f8ff3115f56d48fba26":"19400000000000000000","03cc9d2d21f86b84ac8ceaf971dba78a90e62570":"1610000000000000000000","728f9ab080157db3073156dbca1a169ef3179407":"500000000000000000000","30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7":"143731500000000000000000",f617b967b9bd485f7695d2ef51fb7792d898f500:"500000000000000000000",c0cbad3ccdf654da22cbcf5c786597ca1955c115:"2000000000000000000000","80522ddf944ec52e27d724ed4c93e1f7be6083d6":"200000000000000000000","4e90ccb13258acaa9f4febc0a34292f95991e230":"15800000000000000000",ff207308ced238a6c01ad0213ca9eb4465d42590:"1999944000000000000000","35f2949cf78bc219bb4f01907cf3b4b3d3865482":"289800000000000000000","68f525921dc11c329b754fbf3e529fc723c834cd":"1610000000000000000000","81139bfdcca656c430203f72958c543b6580d40c":"2000000000000000000000","9d511543b3d9dc60d47f09d49d01b6c498d82078":"11245000000000000000000","084d103254759b343cb2b9c2d8ff9e1ac5f14596":"7600000000000000000000",b323dcbf2eddc5382ee4bbbb201ca3931be8b438:"2000000000000000000000","349d2c918fd09e2807318e66ce432909176bd50b":"1120000000000000000000",b535f8db879fc67fec58824a5cbe6e5498aba692:"1910000000000000000000","824074312806da4748434266ee002140e3819ac2":"1507000000000000000000",e8ef100d7ce0895832f2678df72d4acf8c28b8e3:"500038000000000000000","84af1b157342d54368260d17876230a534b54b0e":"985000000000000000000","419a71a36c11d105e0f2aef5a3e598078e85c80b":"5000000000000000000000","55af092f94ba6a79918b0cf939eab3f01b3f51c7":"149940000000000000000","35a549e8fd6c368d6dcca6d2e7d18e4db95f5284":"499938000000000000000",f0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58:"2000000000000000000000",f4b759cc8a1c75f80849ebbcda878dc8f0d66de4:"400000000000000000000","21846f2fdf5a41ed8df36e5ed8544df75988ece3":"1999944000000000000000","229ff80bf5708009a9f739e0f8b560914016d5a6":"333333000000000000000",da505537537ffb33c415fec64e69bae090c5f60f:"160000000000000000000",b91d9e916cd40d193db60e79202778a0087716fc:"404800000000000000000",bb6823a1bd819f13515538264a2de052b4442208:"25610000000000000000","459393d63a063ef3721e16bd9fde45ee9dbd77fb":"1968818000000000000000","95f62d0243ede61dad9a3165f53905270d54e242":"1610000000000000000000",b0bb29a861ea1d424d45acd4bfc492fb8ed809b7:"80000000000000000000","5e74ed80e9655788e1bb269752319667fe754e5a":"56000000000000000000",a276b058cb98d88beedb67e543506c9a0d9470d8:"2668652000000000000000","8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70":"2000000000000000000000",e5102c3b711b810344197419b1cd8a7059f13e32:"299999000000000000000",c32038ca52aee19745be5c31fcdc54148bb2c4d0:"49984000000000000000","13e321728c9c57628058e93fc866a032dd0bda90":"714580000000000000000",c2bae4a233c2d85724f0dabebda0249d833e37d3:"5000000000000000000000","10d32416722ca4e648630548ead91edd79c06aff":"100000000000000000000",d5f07552b5c693c20067b378b809cee853b8f136:"505540000000000000000","8668af868a1e98885f937f2615ded6751804eb2d":"20000000000000000000","139d3531c9922ad56269f6309aa789fb2485f98c":"4000000000000000000000","1d29c7aab42b2048d2b25225d498dba67a03fbb2":"200000000000000000000",d35075ca61fe59d123969c36a82d1ab2d918aa38:"2674000000000000000000",d6fc0446c6a8d40ae3551db7e701d1fa876e4a49:"2000000000000000000000",fccd0d1ecee27addea95f6857aeec8c7a04b28ee:"10000000000000000000000",c12cfb7b3df70fceca0ede263500e27873f8ed16:"1000000000000000000000",d0db456178206f5c4430fe005063903c3d7a49a7:"706245000000000000000","73cf80ae9688e1580e68e782cd0811f7aa494d2c":"7760000000000000000000",d60651e393783423e5cc1bc5f889e44ef7ea243e:"398800000000000000000","048a8970ea4145c64d5517b8de5b46d0595aad06":"20000000000000000000000",dd9b485a3b1cd33a6a9c62f1e5bee92701856d25:"225073000000000000000","5b287c7e734299e727626f93fb1187a60d5057fe":"101230000000000000000","635c00fdf035bca15fa3610df3384e0fb79068b1":"9000000000000000000000","630a913a9031c9492abd4c41dbb15054cfec4416":"5688000000000000000000",af3614dcb68a36e45a4e911e62796247222d595b:"2259800000000000000000","335e22025b7a77c3a074c78b8e3dfe071341946e":"10178744000000000000000",f0e1dfa42adeac2f17f6fdf584c94862fd563393:"500000000000000000000","1a9e702f385dcd105e8b9fa428eea21c57ff528a":"1400000000000000000000","8ce4949d8a16542d423c17984e6739fa72ceb177":"24999975000000000000000","5f29c9de765dde25852af07d33f2ce468fd20982":"2000000000000000000000",dbf5f061a0f48e5e69618739a77d2ec19768d201:"152000000000000000000",b247cf9c72ec482af3eaa759658f793d670a570c:"912000000000000000000","99f4147ccc6bcb80cc842e69f6d00e30fa4133d9":"400000000000000000000",ba6d31b9a261d640b5dea51ef2162c3109f1eba8:"5000000000000000000000",f05ba8d7b68539d933300bc9289c3d9474d0419e:"126400000000000000000","682e96276f518d31d7e56e30dfb009c1218201bd":"20000000000000000000","0927220492194b2eda9fc4bbe38f25d681dfd36c":"6000000000000000000000",a3c33afc8cb4704e23153de2049d35ae71332472:"799600000000000000000","05c736d365aa37b5c0be9c12c8ad5cd903c32cf9":"6002000000000000000000",d8eef4cf4beb01ee20d111748b61cb4d3f641a01:"2740000000000000000000","16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3":"1000000000000000000000",d79db5ab43621a7a3da795e58929f3dd25af67d9:"1999944000000000000000","28efae6356509edface89fc61a7fdcdb39eea8e5":"5348000000000000000000",c55005a6c37e8ca7e543ce259973a3cace961a4a:"2000000000000000000000",ab3d86bc82927e0cd421d146e07f919327cdf6f9:"1910000000000000000000",b74ed2666001c16333cf7af59e4a3d4860363b9c:"193600000000000000000","1899f69f653b05a5a6e81f480711d09bbf97588c":"1955000000000000000000","27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c":"100000000000000000000",cd1ed263fbf6f6f7b48aef8f733d329d4382c7c7:"18500000000000000000",d97fe6f53f2a58f6d76d752adf74a8a2c18e9074:"309990000000000000000","80da2fdda29a9e27f9e115975e69ae9cfbf3f27e":"200000000000000000000","09146ea3885176f07782e1fe30dce3ce24c49e1f":"20000000000000000000","393ff4255e5c658f2e7f10ecbd292572671bc2d2":"2000000000000000000000",a390ca122b8501ee3e5e07a8ca4b419f7e4dae15:"100000000000000000000","6d9193996b194617211106d1635eb26cc4b66c6c":"399640000000000000000","999c49c174ca13bc836c1e0a92bff48b271543ca":"3280000000000000000000","7421ce5be381738ddc83f02621974ff0686c79b8":"1632000000000000000000","6be9030ee6e2fbc491aca3de4022d301772b7b7d":"26740000000000000000","81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7":"4000000000000000000000","8bc1ff8714828bf286ff7e8a7709106548ed1b18":"10000000000000000000000",a0aadbd9509722705f6d2358a5c79f37970f00f6:"200000000000000000000","3d881433f04a7d0d27f84944e08a512da3555287":"1200000000000000000000",cc1d6ead01aada3e8dc7b95dca25df26eefa639d:"2000000000000000000000","35106ba94e8563d4b3cb3c5c692c10e604b7ced8":"2000000000000000000000","4d8697af0fbf2ca36e8768f4af22133570685a60":"20000000000000000000","1afcc585896cd0ede129ee2de5c19ea811540b64":"3231259000000000000000",e5215631b14248d45a255296bed1fbfa0330ff35:"1310000000000000000000",e3878f91ca86053fced5444686a330e09cc388fb:"194000000000000000000","555df19390c16d01298772bae8bc3a1152199cbd":"200000000000000000000",dc3dae59ed0fe18b58511e6fe2fb69b219689423:"100000000000000000000","74648caac748dd135cd91ea14c28e1bd4d7ff6ae":"3100000000000000000000",cf2e2ad635e9861ae95cb9bafcca036b5281f5ce:"35200000000000000000000","14eec09bf03e352bd6ff1b1e876be664ceffd0cf":"20094000000000000000","856e5ab3f64c9ab56b009393b01664fc0324050e":"1790000000000000000000","632b9149d70178a7333634275e82d5953f27967b":"700000000000000000000","2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c":"1000000000000000000000","369ef761195f3a373e24ece6cd22520fe0b9e86e":"534933000000000000000","16afa787fc9f94bdff6976b1a42f430a8bf6fb0f":"2000000000000000000000","1b0b31afff4b6df3653a94d7c87978ae35f34aae":"354600000000000000000",b4d82f2e69943f7de0f5f7743879406fac2e9cec:"40000000000000000000","09d6cefd75b0c4b3f8f1d687a522c96123f1f539":"6000000000000000000000","01577afd4e50890247c9b10d44af73229aec884f":"680000000000000000000",a35606d51220ee7f2146d411582ee4ee4a45596e:"3996800000000000000000","352e77c861696ef96ad54934f894aa8ea35151dd":"1000000000000000000000",b87f5376c2de0b6cc3c179c06087aa473d6b4674:"1337000000000000000000","5b49afcd75447838f6e7ceda8d21777d4fc1c3c0":"4000000000000000000000",b884add88d83dc564ab8e0e02cbdb63919aea844:"2000000000000000000000","5c312a56c784b122099b764d059c21ece95e84ca":"95000000000000000000","4697baaf9ccb603fd30430689d435445e9c98bf5":"199600000000000000000",c625f8c98d27a09a1bcabd5128b1c2a94856af30:"200000000000000000000","19f5caf4c40e6908813c0745b0aea9586d9dd931":"664000000000000000000","1e596a81b357c6f24970cc313df6dbdaabd0d09e":"2000000000000000000000",c1631228efbf2a2e3a4092ee8900c639ed34fbc8:"955000000000000000000","6f6cf20649a9e973177ac67dbadee4ebe5c7bdda":"5080000000000000000000","5fa7bfe043886127d4011d8356a47e947963aca8":"1820000000000000000000","6af8e55969682c715f48ad4fc0fbb67eb59795a3":"2000000000000000000000","122f56122549d168a5c5e267f52662e5c5cce5c8":"185000000000000000000","7713ab8037411c09ba687f6f9364f0d3239fac28":"10000000000000000000000","31ccc616b3118268e75d9ab8996c8858ebd7f3c3":"399924000000000000000","09c88f917e4d6ad473fa12e98ea3c4472a5ed6da":"10000000000000000000000",e796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7:"512200000000000000000",a8285539869d88f8a961533755717d7eb65576ae:"200000000000000000000",d929c65d69d5bbaea59762662ef418bc21ad924a:"1000000000000000000000",f7418aa0e713d248228776b2e7434222ae75e3a5:"2000000000000000000000","7f0b90a1fdd48f27b268feb38382e55ddb50ef0f":"940000000000000000000","34a0431fff5ead927f3c69649616dc6e97945f6f":"400000000000000000000","1b3cb81e51011b549d78bf720b0d924ac763a7c2":"560000000000000000000000","155b3779bb6d56342e2fda817b5b2d81c7f41327":"50200000000000000000",ecd486fc196791b92cf612d348614f9156488b7e:"12000000000000000000000","82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea":"84999000000000000000","06b0c1e37f5a5ec4bbf50840548f9d3ac0288897":"4000098000000000000000",e6d49f86c228f47367a35e886caacb271e539429:"412656000000000000000","704a6eb41ba34f13addde7d2db7df04915c7a221":"1820000000000000000000","745ccf2d819edbbddea8117b5c49ed3c2a066e93":"4000000000000000000000","6d3b7836a2b9d899721a4d237b522385dce8dfcd":"1000070000000000000000","856aa23c82d7215bec8d57f60ad75ef14fa35f44":"20000000000000000000000",ea79057dabef5e64e7b44f7f18648e7e533718d2:"200000000000000000000","9df057cd03a4e27e8e032f857985fd7f01adc8d7":"2000000000000000000000","5f2f07d2d697e8c567fcfdfe020f49f360be2139":"2000000000000000000000","5efbdfe5389999633c26605a5bfc2c1bb5959393":"69200000000000000000","047e87c8f7d1fce3b01353a85862a948ac049f3e":"1490000000000000000000","265383d68b52d034161bfab01ae1b047942fbc32":"21000600000000000000000","760ff3354e0fde938d0fb5b82cef5ba15c3d2916":"10000000000000000000000",bc46d537cf2edd403565bde733b2e34b215001bd:"20000000000000000000000",ee58fb3db29070d0130188ce472be0a172b89055:"10021400000000000000000","75abe5270f3a78ce007cf37f8fbc045d489b7bb1":"1999944000000000000000","5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b":"2730000000000000000000","26cfffd052152bb3f957b478d5f98b233a7c2b92":"4000000000000000000000","0a4a011995c681bc999fdd79754e9a324ae3b379":"41350300000000000000000","6fa60df818a5446418b1bbd62826e0b9825e1318":"13200000000000000000000","63d55ad99b9137fd1b20cc2b4f03d42cbaddf334":"400000000000000000000","679b9a109930517e8999099ccf2a914c4c8dd934":"60000000000000000000","3e83544f0082552572c782bee5d218f1ef064a9d":"100076000000000000000","968b14648f018333687cd213fa640aec04ce6323":"1000000000000000000000","427b462ab84e5091f48a46eb0cdc92ddcb26e078":"2000000000000000000000",df8510793eee811c2dab1c93c6f4473f30fbef5b:"1000000000000000000000","362fbcb10662370a068fc2652602a2577937cce6":"200000000000000000000","5d83b21bd2712360436b67a597ee3378db3e7ae4":"2000000000000000000000","5777441c83e03f0be8dd340bde636850847c620b":"10000000000000000000000",c94a585203da7bbafd93e15884e660d4b1ead854:"7000000000000000000000","35a08081799173e001cc5bd46a02406dc95d1787":"10000000000000000000000","21d13f0c4024e967d9470791b50f22de3afecf1b":"4452210000000000000000",fdfd6134c04a8ab7eb16f00643f8fed7daaaecb2:"400000000000000000000",fd812bc69fb170ef57e2327e80affd14f8e4b6d2:"2000000000000000000000","7148aef33261d8031fac3f7182ff35928daf54d9":"4100000000000000000000","0b06390f2437b20ec4a3d3431b3279c6583e5ed7":"194000000000000000000","4909b31998ead414b8fb0e846bd5cbde393935be":"4000000000000000000000",b70dba9391682b4a364e77fe99256301a6c0bf1f:"200000000000000000000","6b83bae7b565244558555bcf4ba8da2011891c17":"2000000000000000000000","70a03549aa6168e97e88a508330a5a0bea74711a":"1337000000000000000000","0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9":"180000000000000000000","2ddf40905769bcc426cb2c2938ffe077e1e89d98":"3000000000000000000000","794b51c39e53d9e762b0613b829a44b472f4fff3":"667965000000000000000",d062588171cf99bbeb58f126b870f9a3728d61ec:"4500000000000000000000","8db185fe1b70a94a6a080e7e23a8bedc4acbf34b":"1400000000000000000000",e73bfeada6f0fd016fbc843ebcf6e370a65be70c:"1970000000000000000000","79ed10cf1f6db48206b50919b9b697081fbdaaf3":"2000000000000000000000","276b0521b0e68b277df0bb32f3fd48326350bfb2":"50000000000000000000","2e439348df8a4277b22a768457d1158e97c40904":"776970000000000000000","6c25327f8dcbb2f45e561e86e35d8850e53ab059":"1103200000000000000000","04d73896cf6593a691972a13a6e4871ff2c42b13":"2000000000000000000000",b10fd2a647102f881f74c9fbc37da632949f2375:"40000000000000000000","615f82365c5101f071e7d2cb6af14f7aad2c16c6":"20000000000000000000","93aa8f92ebfff991fc055e906e651ac768d32bc8":"940000000000000000000","0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2":"1000000000000000000000",ffc9cc3094b041ad0e076f968a0de3b167255866:"432400000000000000000","46531e8b1bde097fdf849d6d119885608a008df7":"200000000000000000000","23cd2598a20e149ead2ad69379576ecedb60e38e":"2000000000000000000000","85ca8bc6da2803d0725f5e1a456c89f9bc774e2f":"600000000000000000000",c0725ec2bdc33a1d826071dea29d62d4385a8c25:"40740000000000000000000","0e4765790352656bc656682c24fc5ef3e76a23c7":"46610000000000000000","2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4":"2760000000000000000000","0ec5308b31282e218fc9e759d4fec5db3708cec4":"1001000000000000000000",bf7701fc6225d5a17815438a8941d21ebc5d059d:"1880000000000000000000",c489c83ffbb0252ac0dbe3521217630e0f491f14:"4000000000000000000000","8eb51774af206b966b8909c45aa6722748802c0c":"500000000000000000000","7b9226d46fe751940bc416a798b69ccf0dfab667":"4200000000000000000000","8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650":"20000000000000000000000","9f19fac8a32437d80ac6837a0bb7841729f4972e":"650100000000000000000","201864a8f784c2277b0b7c9ee734f7b377eab648":"4467000000000000000000",a6101c961e8e1c15798ffcd0e3201d7786ec373a:"6000000000000000000000",d4ff46203efa23064b1caf00516e28704a82a4f8:"1337000000000000000000",aa136b47962bb8b4fb540db4ccf5fdd042ffb8cf:"500038000000000000000","704ae21d762d6e1dde28c235d13104597236db1a":"2000000000000000000000",f17a92e0361dbacecdc5de0d1894955af6a9b606:"2000000000000000000000","8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04":"17844175000000000000000","9ad47fdcf9cd942d28effd5b84115b31a658a13e":"3290000000000000000000",df0d08617bd252a911df8bd41a39b83ddf809673:"10000000000000000000000","4c666b86f1c5ee8ca41285f5bde4f79052081406":"500000000000000000000","88dec5bd3f4eba2d18b8aacefa7b721548c319ba":"1370000000000000000000","9f9fe0c95f10fee87af1af207236c8f3614ef02f":"6000000000000000000000",f7d0d310acea18406138baaabbfe0571e80de85f:"1337000000000000000000","9569c63a9284a805626db3a32e9d236393476151":"1970000000000000000000","5d5c2c1099bbeefb267e74b58880b444d94449e0":"253574000000000000000","8c6ae7a05a1de57582ae2768204276c0ff47ed03":"208000000000000000000000","432d884bd69db1acc0d89c64ade4cb4fc3a88b7a":"2483000000000000000000","672cbca8440a8577097b19aff593a2ad9d28a756":"80000000000000000000","19df9445a81c1b3d804aeaeb6f6e204e4236663f":"37387000000000000000","1cb5f33b4d488936d13e3161da33a1da7df70d1b":"200000000000000000000",df60f18c812a11ed4e2776e7a80ecf5e5305b3d6:"900000000000000000000",c99a9cd6c9c1be3534eecd92ecc22f5c38e9515b:"4821030000000000000000","00c40fe2095423509b9fd9b754323158af2310f3":"0",da4a5f557f3bab390a92f49b9b900af30c46ae80:"10000000000000000000000",f36df02fbd89607347afce2969b9c4236a58a506:"2000000000000000000000",c549df83c6f65eec0f1dc9a0934a5c5f3a50fd88:"2910000000000000000000","9f662e95274121f177566e636d23964cf1fd686f":"2000000000000000000000","5a267331facb262daaecd9dd63a9700c5f5259df":"100000000000000000000","117d9aa3c4d13bee12c7500f09f5dd1c66c46504":"206000000000000000000","1b4d07acd38183a61bb2783d2b7b178dd502ac8d":"200000000000000000000","3c0c3defac9cea7acc319a96c30b8e1fedab4574":"1940000000000000000000",e4dc22ed595bf0a337c01e03cc6be744255fc9e8:"191000000000000000000","8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9":"20000000000000000000000","40e2440ae142c880366a12c6d4102f4b8434b62a":"1000000000000000000000",f9ece022bccd2c92346911e79dd50303c01e0188:"1000000000000000000000",f70328ef97625fe745faa49ee0f9d4aa3b0dfb69:"1000000000000000000000",b6aacb8cb30bab2ae4a2424626e6e12b02d04605:"8000000000000000000000","154459fa2f21318e3434449789d826cdc1570ce5":"2000000000000000000000","684a44c069339d08e19a75668bdba303be855332":"70000000000000000000000","9fe501aa57ead79278937cd6308c5cfa7a5629fe":"50003000000000000000","3e45bd55db9060eced923bb9cb733cb3573fb531":"1640000000000000000000","9c9f3b8a811b21f3ff3fe20fe970051ce66a824f":"1157740000000000000000",e99aece90541cae224b87da673965e0aeb296afd:"920000000000000000000","2f6dce1330c59ef921602154572d4d4bacbd048a":"1000000000000000000000","6a6353b971589f18f2955cba28abe8acce6a5761":"3000000000000000000000","98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb":"300000000000000000000","8077c3e4c445586e094ce102937fa05b737b568c":"100000000000000000000","13371f92a56ea8381e43059a95128bdc4d43c5a6":"1000000000000000000000","35a6885083c899dabbf530ed6c12f4dd3a204cf5":"200000000000000000000","36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624":"10000000000000000000000","5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e":"2000000000000000000000","6fa6388d402b30afe59934c3b9e13d1186476018":"670000000000000000000","8251358ca4e060ddb559ca58bc0bddbeb4070203":"2000000000000000000000","17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0":"2000000000000000000000","298ec76b440d8807b3f78b5f90979bee42ed43db":"30000000000000000000000",ce4b065dbcb23047203262fb48c1188364977470:"500000000000000000000",c8e2adeb545e499d982c0c117363ceb489c5b11f:"985000000000000000000","9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d":"440000000000000000000",c76130c73cb9210238025c9df95d0be54ac67fbe:"1500000000000000000000","72d03d4dfab3500cf89b86866f15d4528e14a195":"4488000000000000000000",d193e583d6070563e7b862b9614a47e99489f3e5:"999972000000000000000","4df140ba796585dd5489315bca4bba680adbb818":"2674000000000000000000","009eef0a0886056e3f69211853b9b7457f3782e4":"3000512000000000000000","6e255b700ae7138a4bacf22888a9e2c00a285eec":"4000000000000000000000",aa47a4ffc979363232c99b99fada0f2734b0aeee:"8121800000000000000000","9d069197d1de50045a186f5ec744ac40e8af91c6":"2000000000000000000000",b514882c979bb642a80dd38754d5b8c8296d9a07:"955000000000000000000","17c0478657e1d3d17aaa331dd429cecf91f8ae5d":"999942000000000000000","5f9616c47b4a67f406b95a14fe6fc268396f1721":"200000000000000000000",f70a998a717b338d1dd99854409b1a338deea4b0:"2000000000000000000000",d1ee905957fe7cc70ec8f2868b43fe47b13febff:"44000000000000000000",fc018a690ad6746dbe3acf9712ddca52b6250039:"10000000000000000000000","5118557d600d05c2fcbf3806ffbd93d02025d730":"11360000000000000000000","1ef5c9c73650cfbbde5c885531d427c7c3fe5544":"6000000000000000000000",d1a396dcdab2c7494130b3fd307820340dfd8c1f:"17952000000000000000","2d8e061892a5dcce21966ae1bb0788fd3e8ba059":"250066000000000000000","8834b2453471f324fb26be5b25166b5b5726025d":"573000000000000000000","14f221159518783bc4a706676fc4f3c5ee405829":"200000000000000000000",c056d4bd6bf3cbacac65f8f5a0e3980b852740ae:"100000000000000000000","560536794a9e2b0049d10233c41adc5f418a264a":"1000000000000000000000",bc9e0ec6788f7df4c7fc210aacd220c27e45c910:"500000000000000000000","54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8":"1078000000000000000000","4361d4846fafb377b6c0ee49a596a78ddf3516a3":"3580000000000000000000","41c3c2367534d13ba2b33f185cdbe6ac43c2fa31":"4000000000000000000000","5dc6f45fef26b06e3302313f884daf48e2746fb9":"500000000000000000000",ad414d29cb7ee973fec54e22a388491786cf5402:"14000000000000000000000","802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c":"98040000000000000000","2aed2ce531c056b0097efc3c6de10c4762004ed9":"10430000000000000000000","39782ffe06ac78822a3c3a8afe305e50a56188ce":"10000000000000000000000",ec73833de4b810bb027810fc8f69f544e83c12d1:"1000000000000000000000","8d51a4cc62011322c696fd725b9fb8f53feaaa07":"1000000000000000000000","29298ccbdff689f87fe41aa6e98fdfb53deaf37a":"19800000000000000000000","827531a6c5817ae35f82b00b9754fcf74c55e232":"3600000000000000000000","9c581a60b61028d934167929b22d70b313c34fd0":"50000000000000000000000","0a077db13ffeb09484c217709d5886b8bf9c5a8b":"4000000000000000000000","07b7a57033f8f11330e4665e185d234e83ec140b":"4325683000000000000000","17f523f117bc9fe978aa481eb4f5561711371bc8":"1999884000000000000000",de42fcd24ce4239383304367595f068f0c610740:"45120000000000000000","2a46d353777176ff8e83ffa8001f4f70f9733aa5":"106000000000000000000","92e4392816e5f2ef5fb65837cec2c2325cc64922":"10000000000000000000000","9a3da65023a13020d22145cfc18bab10bd19ce4e":"456516000000000000000","1a085d43ec92414ea27b914fe767b6d46b1eef44":"29550000000000000000000","3b2367f8494b5fe18d683c055d89999c9f3d1b34":"10000000000000000000000","84244fc95a6957ed7c1504e49f30b8c35eca4b79":"2000000000000000000000","5e031b0a724471d476f3bcd2eb078338bf67fbef":"18200000000000000000","97e5cc6127c4f885be02f44b42d1c8b0ac91e493":"200000000000000000000",eb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16:"198000000000000000000","72feaf124579523954645b7fafff0378d1c8242e":"1000000000000000000000","8d07d42d831c2d7c838aa1872b3ad5d277176823":"349200000000000000000","9637dc12723d9c78588542eab082664f3f038d9d":"1000000000000000000000",e84b55b525f1039e744b918cb3332492e45eca7a:"200000000000000000000",b1d6b01b94d854fe8b374aa65e895cf22aa2560e:"940000000000000000000","8161d940c3760100b9080529f8a60325030f6edc":"300000000000000000000",d30ee9a12b4d68abace6baca9ad7bf5cd1faf91c:"1499936000000000000000","057949e1ca0570469e4ce3c690ae613a6b01c559":"200000000000000000000","4bf8e26f4c2790da6533a2ac9abac3c69a199433":"200000000000000000000","36fec62c2c425e219b18448ad757009d8c54026f":"400000000000000000000","77bfe93ccda750847e41a1affee6b2da96e7214e":"300000000000000000000",cc48414d2ac4d42a5962f29eee4497092f431352:"161000000000000000000",ddbddd1bbd38ffade0305d30f02028d92e9f3aa8:"2000000000000000000000","30c01142907acb1565f70438b9980ae731818738":"2000000000000000000000",cffc49c1787eebb2b56cabe92404b636147d4558:"5679305000000000000000",f99eeece39fa7ef5076d855061384009792cf2e0:"500000000000000000000",e9b6a790009bc16642c8d820b7cde0e9fd16d8f5:"3640000000000000000000","03b41b51f41df20dd279bae18c12775f77ad771c":"1000000000000000000000","787d313fd36b053eeeaedbce74b9fb0678333289":"27160000000000000000000","35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463":"1440000000000000000000","4c0aca508b3caf5ee028bc707dd1e800b838f453":"18200000000000000000","514632efbd642c04de6ca342315d40dd90a2dba6":"2674000000000000000000","36810ff9d213a271eda2b8aa798be654fa4bbe06":"2000000000000000000000","0c088006c64b30c4ddafbc36cb5f05469eb62834":"2000000000000000000000","568df31856699bb5acfc1fe1d680df9960ca4359":"1379999000000000000000",d48e3f9357e303513841b3f84bda83fc89727587:"1000000000000000000000","953ef652e7b769f53d6e786a58952fa93ee6abe7":"2860000000000000000000","7c60a05f7a4a5f8cf2784391362e755a8341ef59":"1892300000000000000000","7a6b26f438d9a352449155b8876cbd17c9d99b64":"6000000000000000000000","68f719ae342bd7fef18a05cbb02f705ad38ed5b2":"1050000000000000000000","45ca8d956608f9e00a2f9974028640888465668f":"2000000000000000000000","3eaf316b87615d88f7adc77c58e712ed4d77966b":"100141000000000000000","1f0412bfedcd964e837d092c71a5fcbaf30126e2":"20000000000000000000","7471f72eeb300624eb282eab4d03723c649b1b58":"8000000000000000000000","9bf71f7fb537ac54f4e514947fa7ff6728f16d2f":"33400000000000000000","1098c774c20ca1daac5ddb620365316d353f109c":"100000000000000000000","7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c":"200000000000000000000","0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89":"4000000000000000000000",ad6628352ed3390bafa86d923e56014cfcb360f4:"2000000000000000000000","02af2459a93d0b3f4d062636236cd4b29e3bcecf":"1910000000000000000000",ace2abb63b0604409fbde3e716d2876d44e8e5dd:"152000000000000000000",e710dcd09b8101f9437bd97db90a73ef993d0bf4:"386100000000000000000",d43ee438d83de9a37562bb4e286cb1bd19f4964d:"1000000000000000000000",ea3779d14a13f6c78566bcde403591413a6239db:"197000000000000000000000","6704f169e0d0b36b57bbc39f3c45437b5ee3d28d":"394000000000000000000","5584423050e3c2051f0bbd8f44bd6dbc27ecb62c":"3000000000000000000000","2f315d9016e8ee5f536681202f9084b032544d4d":"1037400000000000000000",e1b63201fae1f129f95c7a116bd9dde5159c6cda:"22837462000000000000000","2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e":"2396000000000000000000","38da1ba2de9e2c954b092dd9d81204fd016ba016":"10156000000000000000000","8a86e4a51c013b1fb4c76bcf30667c78d52eedef":"2000000000000000000000","8f717ec1552f4c440084fba1154a81dc003ebdc0":"10000000000000000000000",c760971bbc181c6a7cf77441f24247d19ce9b4cf:"2000000000000000000000","7f150afb1a77c2b45928c268c1e9bdb4641d47d8":"2000000000000000000000","1ea334b5750807ea74aac5ab8694ec5f28aa77cf":"492500000000000000000","2afb058c3d31032b353bf24f09ae20d54de57dbe":"1100000000000000000000",caef027b1ab504c73f41f2a10979b474f97e309f:"200000000000000000000","5dd112f368c0e6ceff77a9df02a5481651a02fb7":"169800000000000000000",bd93e550403e2a06113ed4c3fba1a8913b19407e:"2000000000000000000000","500c16352e901d48ba8d04e2c767121772790b02":"30239000000000000000",d2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8:"50000000000000000000","355ccfe0e77d557b971be1a558bc02df9eee0594":"1759120000000000000000","5aed0e6cfe95f9d680c76472a81a2b680a7f93e2":"197000000000000000000",f56442f60e21691395d0bffaa9194dcaff12e2b7:"260000000000000000000","7db9eacc52e429dc83b461c5f4d86010e5383a28":"1000000000000000000000","4b984ef26c576e815a2eaed2f5177f07dbb1c476":"1560000000000000000000","9846648836a307a057184fd51f628a5f8c12427c":"19100000000000000000000","4af0db077bb9ba5e443e21e148e59f379105c592":"600000000000000000000",e96e2d3813efd1165f12f602f97f4a62909d3c66:"2300000000000000000000","30e789b3d2465e946e6210fa5b35de4e8c93085f":"2000000000000000000000","97f99b6ba31346cd98a9fe4c308f87c5a58c5151":"6000000000000000000000","595e23d788a2d4bb85a15df7136d264a635511b3":"3940000000000000000000","2f61efa5819d705f2b1e4ee754aeb8a819506a75":"1460000000000000000000","3554947b7b947b0040da52ca180925c6d3b88ffe":"66850000000000000000","8feffadb387a1547fb284da9b8147f3e7c6dc6da":"837200000000000000000","258939bbf00c9de9af5338f5d714abf6d0c1c671":"1550000000000000000000","5b333696e04cca1692e71986579c920d6b2916f9":"500000000000000000000","5381448503c0c702542b1de7cc5fb5f6ab1cf6a5":"8000000000000000000000","7e81f6449a03374191f3b7cb05d938b72e090dff":"100000000000000000000","4ef1c214633ad9c0703b4e2374a2e33e3e429291":"1337000000000000000000",fed8476d10d584b38bfa6737600ef19d35c41ed8:"1820000000000000000000","1a95c9b7546b5d1786c3858fb1236446bc0ca4ce":"1970000000000000000000","3b07db5a357f5af2484cbc9d77d73b1fd0519fc7":"500000000000000000000","5f68a24c7eb4117667737b33393fb3c2148a53b6":"51800000000000000000",d8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060:"1700000000000000000000",d66acc0d11b689cea6d9ea5ff4014c224a5dc7c4:"18200000000000000000","6e72b2a1186a8e2916543b1cb36a68870ea5d197":"186000000000000000000","5102a4a42077e11c58df4773e3ac944623a66d9f":"2000325000000000000000","72480bede81ad96423f2228b5c61be44fb523100":"6400000000000000000000",e076db30ab486f79194ebbc45d8fab9a9242f654:"4840000000000000000000","8ceea15eec3bdad8023f98ecf25b2b8fef27db29":"2000000000000000000000","40652360d6716dc55cf9aab21f3482f816cc2cbd":"10000000000000000000000","13e02fb448d6c84ae17db310ad286d056160da95":"2000000000000000000000",d6598b1386e93c5ccb9602ff4bbbecdbd3701dc4:"224096000000000000000",d5ea472cb9466018110af00c37495b5c2c713112:"4997800000000000000000",bb75cb5051a0b0944b4673ca752a97037f7c8c15:"200000000000000000000","8af626a5f327d7506589eeb7010ff9c9446020d2":"1400000000000000000000","318c76ecfd8af68d70555352e1f601e35988042d":"501600000000000000000","5c3d19441d196cb443662020fcad7fbb79b29e78":"14300000000000000000","27101a0f56d39a88c5a84f9b324cdde33e5cb68c":"2000000000000000000000",e229e746a83f2ce253b0b03eb1472411b57e5700:"5730000000000000000000","604cdf18628dbfa8329194d478dd5201eecc4be7":"23000000000000000000","657473774f63ac3d6279fd0743d5790c4f161503":"200000000000000000000","1ddefefd35ab8f658b2471e54790bc17af98dea4":"1000000000000000000000",ac3900298dd14d7cc96d4abb428da1bae213ffed:"24730250000000000000000","944f07b96f90c5f0d7c0c580533149f3f585a078":"74000000000000000000","232c6d03b5b6e6711efff190e49c28eef36c82b0":"1337000000000000000000",c87c77e3c24adecdcd1038a38b56e18dead3b702:"8800000000000000000000",c4b6e5f09cc1b90df07803ce3d4d13766a9c46f4:"6000000000000000000000",d44334b4e23a169a0c16bd21e866bba52d970587:"2600000000000000000000","7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2":"20000000000000000000",cf694081c76d18c64ca71382be5cd63b3cb476f8:"1000000000000000000000","133e4f15e1e39c53435930aaedf3e0fe56fde843":"20000000000000000000",f067fb10dfb293e998abe564c055e3348f9fbf1e:"2000000000000000000000","94449c01b32a7fa55af8104f42cdd844aa8cbc40":"16548000000000000000000","0e2094ac1654a46ba1c4d3a40bb8c17da7f39688":"358000000000000000000","738ca94db7ce8be1c3056cd6988eb376359f3353":"25500000000000000000000","0cfb172335b16c87d519cd1475530d20577f5e0e":"100000000000000000000000","3cb561ce86424b359891e364ec925ffeff277df7":"200000000000000000000","5f981039fcf50225e2adf762752112d1cc26b6e3":"499954000000000000000",b43657a50eecbc3077e005d8f8d94f377876bad4:"35460000000000000000",d07e511864b1cf9969e3560602829e32fc4e71f5:"50000000000000000000","11306c7d57588637780fc9fde8e98ecb008f0164":"1999944000000000000000","45ca9862003b4e40a3171fb5cafa9028cac8de19":"13790000000000000000000","231d94155dbcfe2a93a319b6171f63b20bd2b6fa":"3819952000000000000000",e7533e270cc61fa164ac1553455c105d04887e14:"121550000000000000000","070d5d364cb7bbf822fc2ca91a35bdd441b215d5":"2000000000000000000000",d475477fa56390d33017518d6711027f05f28dbf:"1975032000000000000000",cea34a4dd93dd9aefd399002a97d997a1b4b89cd:"1500000000000000000000","560becdf52b71f3d8827d927610f1a980f33716f":"429413000000000000000",f632adff490da4b72d1236d04b510f74d2faa3cd:"1400000000000000000000","2fdd9b79df8df530ad63c20e62af431ae99216b8":"21000000000000000000","535201a0a1d73422801f55ded4dfaee4fbaa6e3b":"39641000000000000000","409d5a962edeeebea178018c0f38b9cdb213f289":"20000000000000000000","9d911f3682f32fe0792e9fb6ff3cfc47f589fca5":"4000000000000000000000","9f7a0392f857732e3004a375e6b1068d49d83031":"2000000000000000000000","6a04f5d53fc0f515be942b8f12a9cb7ab0f39778":"3129800000000000000000",be478e8e3dde6bd403bb2d1c657c4310ee192723:"492500000000000000000","007622d84a234bb8b078230fcf84b67ae9a8acae":"698800000000000000000","9475c510ec9a26979247744c3d8c3b0e0b5f44d3":"10000000000000000000000",df47a8ef95f2f49f8e6f58184154145d11f72797:"1910000000000000000000","13ce332dff65a6ab933897588aa23e000980fa82":"258400000000000000000","9c4bbcd5f1644a6f075824ddfe85c571d6abf69c":"1800000000000000000000",d42b20bd0311608b66f8a6d15b2a95e6de27c5bf:"2000000000000000000000",a4dd59ab5e517d398e49fa537f899fed4c15e95d:"20000000000000000000000","1a8a5ce414de9cd172937e37f2d59cff71ce57a0":"10000000000000000000000","55c564664166a1edf3913e0169f1cd451fdb5d0c":"2399800000000000000000","58ae2ddc5f4c8ada97e06c0086171767c423f5d7":"1610000000000000000000",fb79abdb925c55b9f98efeef64cfc9eb61f51bb1:"1794000000000000000000",e7a42f59fee074e4fb13ea9e57ecf1cc48282249:"20000000000000000000000","07e2b4cdeed9d087b12e556d9e770c13c099615f":"668500000000000000000","68473b7a7d965904bedba556dfbc17136cd5d434":"100000000000000000000","6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a":"200000000000000000000","24c117d1d2b3a97ab11a4679c99a774a9eade8d1":"1000000000000000000000",f68c5e33fa97139df5b2e63886ce34ebf3e4979c:"3320000000000000000000",bd7419dc2a090a46e2873d7de6eaaad59e19c479:"6802000000000000000000","1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130":"1000000000000000000000","2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687":"2400000000000000000000","426d15f407a01135b13a6b72f8f2520b3531e302":"20000000000000000000","0394b90fadb8604f86f43fc1e35d3124b32a5989":"764000000000000000000","7412c9bc30b4df439f023100e63924066afd53af":"500000000000000000000","80e7b3205230a566a1f061d922819bb4d4d2a0e1":"14000000000000000000000",ff4fc66069046c525658c337a917f2d4b832b409:"2000000000000000000000",f5061ee2e5ee26b815503677130e1de07a52db07:"100000000000000000000","49793463e1681083d6abd6e725d5bba745dccde8":"545974000000000000000","23551f56975fe92b31fa469c49ea66ee6662f41e":"1910000000000000000000",fad96ab6ac768ad5099452ac4777bd1a47edc48f:"100000000000000000000","2a746cd44027af3ebd37c378c85ef7f754ab5f28":"394000000000000000000",b8d389e624a3a7aebce4d3e5dbdf6cdc29932aed:"200000000000000000000","7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb":"4600000000000000000000","5435c6c1793317d32ce13bba4c4ffeb973b78adc":"250070000000000000000",dd04eee74e0bf30c3f8d6c2c7f52e0519210df93:"80000000000000000000","4331ab3747d35720a9d8ca25165cd285acd4bda8":"2000000000000000000000",b84c8b9fd33ece00af9199f3cf5fe0cce28cd14a:"3820000000000000000000","393f783b5cdb86221bf0294fb714959c7b45899c":"5910000000000000000000","259ec4d265f3ab536b7c70fa97aca142692c13fc":"20400000000000000000","5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4":"35200000000000000000",d54ba2d85681dc130e5b9b02c4e8c851391fd9b9:"3940000000000000000000","5cd8af60de65f24dc3ce5730ba92653022dc5963":"1790000000000000000000","3b42a66d979f582834747a8b60428e9b4eeccd23":"620400000000000000000","4b19eb0c354bc1393960eb06063b83926f0d67b2":"29000000000000000000","8cf3546fd1cda33d58845fc8fcfecabca7c5642a":"574027000000000000000","113612bc3ba0ee4898b49dd20233905f2f458f62":"14000000000000000000000","1f2afc0aed11bfc71e77a907657b36ea76e3fb99":"4000000000000000000000","03714b41d2a6f751008ef8dd4d2b29aecab8f36e":"6000000000000000000000","25721c87b0dc21377c7200e524b14a22f0af69fb":"4000000000000000000000","335858f749f169cabcfe52b796e3c11ec47ea3c2":"200000000000000000000","52fb46ac5d00c3518b2c3a1c177d442f8165555f":"1500000000000000000000","7a8c89c014509d56d7b68130668ff6a3ecec7370":"300000000000000000000","7d5d2f73949dadda0856b206989df0078d51a1e5":"10560000000000000000000",be538246dd4e6f0c20bf5ad1373c3b463a131e86:"200000000000000000000","62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd":"1000000000000000000000",aa0ca3737337178a0caac3099c584b056c56301c:"880000000000000000000","1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45":"18200000000000000000","6463f715d594a1a4ace4bb9c3b288a74decf294d":"1970000000000000000000",e00d153b10369143f97f54b8d4ca229eb3e8f324:"152000000000000000000","8d0b9ea53fd263415eac11391f7ce9123c447062":"2000000000000000000000",cacb675e0996235404efafbb2ecb8152271b55e0:"700000000000000000000",b615e940143eb57f875893bc98a61b3d618c1e8c:"20000000000000000000","606f177121f7855c21a5062330c8762264a97b31":"4000000000000000000000",e3925509c8d0b2a6738c5f6a72f35314491248ce:"1012961000000000000000","3f08d9ad894f813e8e2148c160d24b353a8e74b0":"60000000000000000000000","40f4f4c06c732cd35b119b893b127e7d9d0771e4":"10000000000000000000000","1406854d149e081ac09cb4ca560da463f3123059":"1337000000000000000000",ecf05d07ea026e7ebf4941002335baf2fed0f002:"200000000000000000000","9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2":"33518000000000000000",a2e0683a805de6a05edb2ffbb5e96f0570b637c3:"20000000000000000000",fba5486d53c6e240494241abf87e43c7600d413a:"1987592000000000000000",d81bd54ba2c44a6f6beb1561d68b80b5444e6dc6:"1163806000000000000000","5298ab182a19359ffcecafd7d1b5fa212dede6dd":"20000000000000000000",d1acb5adc1183973258d6b8524ffa28ffeb23de3:"4000000000000000000000","4e7aa67e12183ef9d7468ea28ad239c2eef71b76":"4925000000000000000000","509a20bc48e72be1cdaf9569c711e8648d957334":"2000000000000000000000","949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878":"685000000000000000000",edbac9527b54d6df7ae2e000cca3613ba015cae3:"1970000000000000000000",c697b70477cab42e2b8b266681f4ae7375bb2541:"5577200000000000000000","86c934e38e53be3b33f274d0539cfca159a4d0d1":"970000000000000000000","0877eeaeab78d5c00e83c32b2d98fa79ad51482f":"439420000000000000000","5e11ecf69d551d7f4f84df128046b3a13240a328":"20000000000000000000","43ff8853e98ed8406b95000ada848362d6a0392a":"22100000000000000000000",f11cf5d363746fee6864d3ca336dd80679bb87ae:"40000000000000000000000",fb223c1e22eac1269b32ee156a5385922ed36fb8:"2000000000000000000000","4e6600806289454acda330a2a3556010dfacade6":"6000000000000000000000",cfe2caaf3cec97061d0939748739bffe684ae91f:"10000000000000000000000",adeb52b604e5f77faaac88275b8d6b49e9f9f97f:"2089268000000000000000",d53c567f0c3ff2e08b7d59e2b5c73485437fc58d:"600000000000000000000",fbf75933e01b75b154ef0669076be87f62dffae1:"78000000000000000000000","7dfd2962b575bcbeee97f49142d63c30ab009f66":"4000000000000000000000",df6485c4297ac152b289b19dde32c77ec417f47d:"1000000000000000000000",ffb974673367f5c07be5fd270dc4b7138b074d57:"2470407000000000000000",f7d7af204c56f31fd94398e40df1964bd8bf123c:"150011000000000000000","4506fe19fa4b006baa3984529d8516db2b2b50ab":"2000000000000000000000",f4dc7ba85480bbb3f535c09568aaa3af6f3721c6:"7214962000000000000000",d171c3f2258aef35e599c7da1aa07300234da9a6:"2000000000000000000000","33581cee233088c0860d944e0cf1ceabb8261c2e":"13370000000000000000","1c2e3607e127caca0fbd5c5948adad7dd830b285":"19700000000000000000000",fd7ede8f5240a06541eb699d782c2f9afb2170f6:"1337000000000000000000","368c5414b56b8455171fbf076220c1cba4b5ca31":"557940000000000000000","3e8745ba322f5fd6cb50124ec46688c7a69a7fae":"4925000000000000000000","76506eb4a780c951c74a06b03d3b8362f0999d71":"500000000000000000000","96d62dfd46087f62409d93dd606188e70e381257":"2000000000000000000000","37eada93c475ded2f7e15e7787d400470fa52062":"200000000000000000000","26babf42b267fdcf3861fdd4236a5e474848b358":"1000000000000000000000","3526eece1a6bdc3ee7b400fe935b48463f31bed7":"82400000000000000000","27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a":"99941000000000000000",b3e3c439069880156600c2892e448d4136c92d9b:"850000000000000000000","574ad9355390e4889ef42acd138b2a27e78c00ae":"1557000000000000000000",f0b9d683cea12ba600baace219b0b3c97e8c00e4:"100000000000000000000",a437fe6ec103ca8d158f63b334224eccac5b3ea3:"8000000000000000000000","7a48d877b63a8f8f9383e9d01e53e80c528e955f":"8000000000000000000000",e965daa34039f7f0df62375a37e5ab8a72b301e7:"4796000000000000000000","72cd048a110574482983492dfb1bd27942a696ba":"2000000000000000000000","6611ce59a98b072ae959dc49ad511daaaaa19d6b":"200000000000000000000","0d92582fdba05eabc3e51538c56db8813785b328":"191000000000000000000",e87e9bbfbbb71c1a740c74c723426df55d063dd9:"7998000000000000000000","9c99a1da91d5920bc14e0cb914fdf62b94cb8358":"20000000000000000000000",fe8e6e3665570dff7a1bda697aa589c0b4e9024a:"2000000000000000000000","811461a2b0ca90badac06a9ea16e787b33b196cc":"164000000000000000000",d211b21f1b12b5096181590de07ef81a89537ead:"2000000000000000000000","01155057002f6b0d18acb9388d3bc8129f8f7a20":"1340000000000000000000","8ce22f9fa372449a420610b47ae0c8d565481232":"2000000000000000000000",e02b74a47628be315b1f76b315054ad44ae9716f:"4000000000000000000000","92a7c5a64362e9f842a23deca21035857f889800":"1999944000000000000000","5213f459e078ad3ab95a0920239fcf1633dc04ca":"2599989000000000000000",c9957ba94c1b29e5277ec36622704904c63dc023:"1923000000000000000000","6ac40f532dfee5118117d2ad352da77d4f6da2c8":"400000000000000000000",ea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90:"734000000000000000000",b01e389b28a31d8e4995bdd7d7c81beeab1e4119:"1000000000000000000000",ee97aa8ac69edf7a987d6d70979f8ec1fbca7a94:"376000000000000000000","0fad05507cdc8f24b2be4cb7fa5d927ddb911b88":"3004447000000000000000",b6e8afd93dfa9af27f39b4df06076710bee3dfab:"25000000000000000000","7d0b255efb57e10f7008aa22d40e9752dfcf0378":"29944000000000000000",aef5b12258a18dec07d5ec2e316574919d79d6d6:"2000000000000000000000","63666755bd41b5986997783c13043008242b3cb5":"500000000000000000000","921f5261f4f612760706892625c75e7bce96b708":"2000000000000000000000","10e1e3377885c42d7df218522ee7766887c05e6a":"300031000000000000000","134163be9fbbe1c5696ee255e90b13254395c318":"200000000000000000000","870f15e5df8b0eabd02569537a8ef93b56785c42":"388000000000000000000","68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d":"2000000000000000000000","1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e":"1000073000000000000000",cd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92:"90000000000000000000",c8de7a564c7f4012a6f6d10fd08f47890fbf07d4:"300000000000000000000",c0345b33f49ce27fe82cf7c84d141c68f590ce76:"1000000000000000000000",fe53b94989d89964da2061539526bbe979dd2ea9:"1930600000000000000000","14410fb310711be074a80883c635d0ef6afb2539":"2000000000000000000000","1d344e962567cb27e44db9f2fac7b68df1c1e6f7":"1940000000000000000000",fe016ec17ec5f10e3bb98ff4a1eda045157682ab:"375804000000000000000",e89da96e06beaf6bd880b378f0680c43fd2e9d30:"601400000000000000000","0fee81ac331efd8f81161c57382bb4507bb9ebec":"400030000000000000000","40cf90ef5b768c5da585002ccbe6617650d8e837":"999800000000000000000","256fa150cc87b5056a07d004efc84524739e62b5":"200000000000000000000","1b9b2dc2960e4cb9408f7405827c9b59071612fd":"1000000000000000000000","0efd1789eb1244a3dede0f5de582d8963cb1f39f":"1500000000000000000000","049c5d4bc6f25d4e456c697b52a07811ccd19fb1":"300048000000000000000","02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30":"685000000000000000000",c1827686c0169485ec15b3a7c8c01517a2874de1:"40000000000000000000",d8e5c9675ef4deed266b86956fc4590ea7d4a27d:"1000000000000000000000","48f883e567b436a27bb5a3124dbc84dec775a800":"771840000000000000000",a34076f84bd917f20f8342c98ba79e6fb08ecd31:"4200000000000000000000","21ce6d5b9018cec04ad6967944bea39e8030b6b8":"20000000000000000000","0596a27dc3ee115fce2f94b481bc207a9e261525":"1000000000000000000000","717cf9beab3638308ded7e195e0c86132d163fed":"15097428000000000000000",d5ce55d1b62f59433c2126bcec09bafc9dfaa514:"197000000000000000000","7dd46da677e161825e12e80dc446f58276e1127c":"820000000000000000000","98c5494a03ac91a768dffc0ea1dde0acbf889019":"200000000000000000000000","617ff2cc803e31c9082233b825d025be3f7b1056":"1970000000000000000000","1091176be19b9964a8f72e0ece6bf8e3cfad6e9c":"10020000000000000000000","4ea56e1112641c038d0565a9c296c463afefc17e":"182000000000000000000",e303167f3d4960fe881b32800a2b4aeff1b088d4:"2000000000000000000000","773141127d8cf318aebf88365add3d5527d85b6a":"1000076000000000000000",b916b1a01cdc4e56e7657715ea37e2a0f087d106:"2406017000000000000000","46a430a2d4a894a0d8aa3feac615361415c3f81f":"2000000000000000000000",e6a3010f0201bc94ff67a2f699dfc206f9e76742:"879088000000000000000",d7ad09c6d32657685355b5c6ec8e9f57b4ebb982:"1970000000000000000000","95e80a82c20cbe3d2060242cb92d735810d034a2":"32511000000000000000","9a390162535e398877e416787d6239e0754e937c":"1000000000000000000000",d85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac:"2010000000000000000000",c3e20c96df8d4e38f50b265a98a906d61bc51a71:"2000000000000000000000","2949fd1def5c76a286b3872424809a07db3966f3":"5236067000000000000000","86cdb7e51ac44772be3690f61d0e59766e8bfc18":"4000000000000000000000","749a4a768b5f237248938a12c623847bd4e688dc":"72000000000000000000","3524a000234ebaaf0789a134a2a417383ce5282a":"5635000000000000000000","7b43c7eea8d62355b0a8a81da081c6446b33e9e0":"4000000000000000000000","0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a":"1337000000000000000000","767fd7797d5169a05f7364321c19843a8c348e1e":"18800000000000000000","1b2639588b55c344b023e8de5fd4087b1f040361":"1500000000000000000000","1e33d1c2fb5e084f2f1d54bc5267727fec3f985d":"500000000000000000000","06b106649aa8c421ddcd1b8c32cd0418cf30da1f":"40000000000000000000000","3c5a241459c6abbf630239c98a30d20b8b3ac561":"157600000000000000000","0f4f94b9191bb7bb556aaad7c74ddb288417a50b":"1400000000000000000000",d6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15:"131784000000000000000","61adf5929a5e2981684ea243baa01f7d1f5e148a":"110302000000000000000","8f58d8348fc1dc4e0dd8343b6543c857045ee940":"13632400000000000000000",a6e3baa38e104a1e27a4d82869afb1c0ae6eff8d:"19690000000000000000","67350b5331926f5e28f3c1e986f96443809c8b8c":"352000000000000000000","0b5d66b13c87b392e94d91d5f76c0d450a552843":"2000000000000000000000","562a8dcbbeeef7b360685d27303bd69e094accf6":"10000000000000000000000",b5d9934d7b292bcf603b2880741eb760288383a0:"16700000000000000000","6fc53662371dca587b59850de78606e2359df383":"180000000000000000000",e069c0173352b10bf6834719db5bed01adf97bbc:"18894000000000000000","10a93457496f1108cd98e140a1ecdbae5e6de171":"399600000000000000000","69ff8901b541763f817c5f2998f02dcfc1df2997":"40000000000000000000","00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03":"2000000000000000000000","77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a":"1000000000000000000000","6d20ef9704670a500bb269b5832e859802049f01":"130000000000000000000","186afdc085f2a3dce4615edffbadf71a11780f50":"200000000000000000000","7ff0c63f70241bece19b737e5341b12b109031d8":"346000000000000000000","9d4174aa6af28476e229dadb46180808c67505c1":"1219430000000000000000","5fec49c665e64ee89dd441ee74056e1f01e92870":"6320000000000000000000","6cd228dc712169307fe27ceb7477b48cfc8272e5":"77600000000000000000",fd918536a8efa6f6cefe1fa1153995fef5e33d3b:"500000000000000000000","2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a":"1249961000000000000000","6ab323ae5056ed0a453072c5abe2e42fcf5d7139":"880000000000000000000","67d682a282ef73fb8d6e9071e2614f47ab1d0f5e":"1000000000000000000000","1858cf11aea79f5398ad2bb22267b5a3c952ea74":"9850000000000000000000","39d6caca22bccd6a72f87ee7d6b59e0bde21d719":"2002000000000000000000",daa63cbda45dd487a3f1cd4a746a01bb5e060b90:"4797800000000000000000",a90476e2efdfee4f387b0f32a50678b0efb573b5:"10000000000000000000000",ae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d:"795860000000000000000",ac2e766dac3f648f637ac6713fddb068e4a4f04d:"197000000000000000000","6191ddc9b64a8e0890b4323709d7a07c48b92a64":"775000000000000000000",cc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b:"400000000000000000000",ca23f62dff0d6460036c62e840aec5577e0befd2:"140800000000000000000","97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4":"50000000000000000000","848c994a79003fe7b7c26cc63212e1fc2f9c19eb":"2000000000000000000000","20c284ba10a20830fc3d699ec97d2dfa27e1b95e":"2000000000000000000000","4fa3f32ef4086448b344d5f0a9890d1ce4d617c3":"1500000000000000000000","255abc8d08a096a88f3d6ab55fbc7352bddcb9ce":"82161000000000000000","7c60e51f0be228e4d56fdd2992c814da7740c6bc":"200000000000000000000","1c356cfdb95febb714633b28d5c132dd84a9b436":"25000000000000000000","5062e5134c612f12694dbd0e131d4ce197d1b6a4":"1000000000000000000000",ed862616fcbfb3becb7406f73c5cbff00c940755:"1700000000000000000000","62c9b271ffd5b770a5eee4edc9787b5cdc709714":"2000000000000000000000","3c925619c9b33144463f0537d896358706c520b0":"2000000000000000000000",ffe2e28c3fb74749d7e780dc8a5d422538e6e451:"253319000000000000000","37195a635dcc62f56a718049d47e8f9f96832891":"1970000000000000000000","90e9a9a82edaa814c284d232b6e9ba90701d4952":"100007000000000000000",e0c4ab9072b4e6e3654a49f8a8db026a4b3386a9:"2000000000000000000000","439dee3f7679ff1030733f9340c096686b49390b":"2000000000000000000000","548558d08cfcb101181dac1eb6094b4e1a896fa6":"1999944000000000000000","3090f8130ec44466afadb36ed3c926133963677b":"4000000000000000000000",d1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b:"5828000000000000000000","65b42faecc1edfb14283ca979af545f63b30e60c":"18200000000000000000","6420f8bcc8164a6152a99d6b99693005ccf7e053":"999972000000000000000","84b4b74e6623ba9d1583e0cfbe49643f16384149":"20000000000000000000",b8310a16cc6abc465007694b930f978ece1930bd:"740000000000000000000","16019a4dafab43f4d9bf4163fae0847d848afca2":"25060000000000000000","479298a9de147e63a1c7d6d2fce089c7e64083bd":"9999999000000000000000","030973807b2f426914ad00181270acd27b8ff61f":"5348000000000000000000",b07bcf1cc5d4462e5124c965ecf0d70dc27aca75:"1600000000000000000000",a2f798e077b07d86124e1407df32890dbb4b6379:"200000000000000000000","0cbd921dbe121563b98a6871fecb14f1cc7e88d7":"200000000000000000000","6042276df2983fe2bc4759dc1943e18fdbc34f77":"1970000000000000000000",be2b2280523768ea8ac35cd9e888d60a719300d4:"2000000000000000000000","2f4da753430fc09e73acbccdcde9da647f2b5d37":"200000000000000000000","734223d27ff23e5906caed22595701bb34830ca1":"2000000000000000000000","5b430d779696a3653fc60e74fbcbacf6b9c2baf1":"14000000000000000000000","84232107932b12e03186583525ce023a703ef8d9":"2000000000000000000000","4ed14d81b60b23fb25054d8925dfa573dcae6168":"340000000000000000000","8b338411f26ccf37658cc75521d77629099e467d":"2000000000000000000000",a37622ac9bbdc4d82b75015d745b9f8de65a28ec:"2910000000000000000000","1dd77441844afe9cc18f15d8c77bccfb655ee034":"4850000000000000000000","65849be1af20100eb8a3ba5a5be4d3ae8db5a70e":"400000000000000000000",d5586da4e59583c8d86cccf71a86197f17996749:"2000000000000000000000","4b53ae59c784b6b5c43616b9a0809558e684e10c":"1200000000000000000000","55d42eb495bf46a634997b5f2ea362814918e2b0":"106128000000000000000","959ff17f1d51b473b44010052755a7fa8c75bd54":"1970000000000000000000","5a2daab25c31a61a92a4c82c9925a1d2ef58585e":"225400000000000000000","24c0c88b54a3544709828ab4ab06840559f6c5e2":"2674000000000000000000","7e8649e690fc8c1bfda1b5e186581f649b50fe33":"98500000000000000000","4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf":"39400000000000000000","5778ffdc9b94c5a59e224eb965b6de90f222d170":"335320000000000000000","825a7f4e10949cb6f8964268f1fa5f57e712b4c4":"20000000000000000000","6f39cc37caaa2ddc9b610f6131e0619fae772a3c":"500000000000000000000","5b437365ae3a9a2ff97c68e6f90a7620188c7d19":"2002000000000000000000","6710c2c03c65992b2e774be52d3ab4a6ba217ef7":"11600000000000000000000","896e335ca47af57962fa0f4dbf3e45e688cba584":"1368500000000000000000",b57549bfbc9bdd18f736b22650e48a73601fa65c:"446000000000000000000","85ca1e727e9d1a87991cc2c41840ebb9edf21d1b":"13370000000000000000",cf4166746e1d3bc1f8d0714b01f17e8a62df1464:"1004700000000000000000","4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7":"1820000000000000000000","9e5811b40be1e2a1e1d28c3b0774acde0a09603d":"3000000000000000000000","763886e333c56feff85be3951ab0b889ce262e95":"2000000000000000000000","2b101e822cd962962a06800a2c08d3b15d82b735":"152000000000000000000",a01e9476df84431825c836e8803a97e22fa5a0cd:"6000000000000000000000",be4e7d983f2e2a636b1102ec7039efebc842e98d:"66000000000000000000","9e427272516b3e67d4fcbf82f59390d04c8e28e5":"4000000000000000000000",e0d231e144ec9107386c7c9b02f1702ceaa4f700:"5000057000000000000000","6a0f056066c2d56628850273d7ecb7f8e6e9129e":"5000016000000000000000",d1538e9a87e59ca9ec8e5826a5b793f99f96c4c3:"1000000000000000000000",f85bab1cb3710fc05fa19ffac22e67521a0ba21d:"2003000000000000000000",f7cbdba6be6cfe68dbc23c2b0ff530ee05226f84:"20000000000000000000","4eb87ba8788eba0df87e5b9bd50a8e45368091c1":"20000000000000000000","1479a9ec7480b74b5db8fc499be352da7f84ee9c":"1000000000000000000000",d311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d:"200000000000000000000","425c1816868f7777cc2ba6c6d28c9e1e796c52b3":"10000000000000000000000","8510ee934f0cbc900e1007eb38a21e2a5101b8b2":"106000000000000000000","01e864d354741b423e6f42851724468c74f5aa9c":"20000000000000000000000",a543a066fb32a8668aa0736a0c9cd40d78098727:"1000000000000000000000",f3eb1948b951e22df1617829bf3b8d8680ec6b68:"4000000000000000000000",f6b782f4dcd745a6c0e2e030600e04a24b25e542:"400000000000000000000","229f4f1a2a4f540774505b4707a81de44410255b":"2000000000000000000000",cff8d06b00e3f50c191099ad56ba6ae26571cd88:"1000000000000000000000","910b7d577a7e39aa23acf62ad7f1ef342934b968":"10000000000000000000000","392433d2ce83d3fb4a7602cca3faca4ec140a4b0":"51000000000000000000","8ff46045687723dc33e4d099a06904f1ebb584dc":"2000000000000000000000","9ca0429f874f8dcee2e9c062a9020a842a587ab9":"2000000000000000000000","160ceb6f980e04315f53c4fc988b2bf69e284d7d":"19100000000000000000",c340f9b91c26728c31d121d5d6fc3bb56d3d8624:"2000000000000000000000",afa1d5ad38fed44759c05b8993c1aa0dace19f40:"80000000000000000000","3969b4f71bb8751ede43c016363a7a614f76118e":"2000000000000000000000","2bb6f578adfbe7b2a116b3554facf9969813c319":"7400000000000000000000","8334764b7b397a4e578f50364d60ce44899bff94":"92500000000000000000","9dd2196624a1ddf14a9d375e5f07152baf22afa2":"1211747000000000000000",f242da845d42d4bf779a00f295b40750fe49ea13:"1000000000000000000000",c6234657a807384126f8968ca1708bb07baa493c:"20000000000000000000","94c055e858357aaa30cf2041fa9059ce164a1f91":"19999000000000000000000","74c73c90528a157336f1e7ea20620ae53fd24728":"8969310000000000000000","19e7f3eb7bf67f3599209ebe08b62ad3327f8cde":"2000000000000000000000",b2b516fdd19e7f3864b6d2cf1b252a4156f1b03b:"53720000000000000000","8164e78314ae16b28926cc553d2ccb16f356270d":"8450000000000000000000","4d828894752f6f25175daf2177094487954b6f9f":"1459683000000000000000",ab84a0f147ad265400002b85029a41fc9ce57f85:"1000000000000000000000",f3fe51fde34413c73318b9c85437fe7e820f561a:"1003200000000000000000","16c7b31e8c376282ac2271728c31c95e35d952c3":"2000000000000000000000","80d5c40c59c7f54ea3a55fcfd175471ea35099b3":"1000000000000000000000","7abb10f5bd9bc33b8ec1a82d64b55b6b18777541":"20000000000000000000000","095b0ea2b218d82e0aea7c2889238a39c9bf9077":"20000000000000000000000","5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b":"2000000000000000000000","323749a3b971959e46c8b4822dcafaf7aaf9bd6e":"20064000000000000000",e0272213e8d2fd3e96bd6217b24b4ba01b617079:"20000000000000000000","00acbfb2f25a5485c739ef70a44eeeeb7c65a66f":"100000000000000000000","52f15423323c24f19ae2ab673717229d3f747d9b":"1026115000000000000000",cb4abfc282aed76e5d57affda542c1f382fcacf4:"8136100000000000000000",f71b4534f286e43093b1e15efea749e7597b8b57:"104410000000000000000000","44cd77535a893fa7c4d5eb3a240e79d099a72d2d":"820000000000000000000",eb3ce7fc381c51db7d5fbd692f8f9e058a4c703d:"200000000000000000000",f1c8c4a941b4628c0d6c30fda56452d99c7e1b64:"1449000000000000000000","277677aba1e52c3b53bfa2071d4e859a0af7e8e1":"1000000000000000000000",a5f075fd401335577b6683c281e6d101432dc6e0:"2680000000000000000000",e28dbc8efd5e416a762ec0e018864bb9aa83287b:"24533161000000000000000","2b717cd432a323a4659039848d3b87de26fc9546":"500000000000000000000000",b358e97c70b605b1d7d729dfb640b43c5eafd1e7:"20000000000000000000000","293c2306df3604ae4fda0d207aba736f67de0792":"200000000000000000000","74d366b07b2f56477d7c7077ac6fe497e0eb6559":"5000000000000000000000","490145afa8b54522bb21f352f06da5a788fa8f1d":"9231182000000000000000","862569211e8c6327b5415e3a67e5738b15baaf6e":"140000000000000000000","5a74ba62e7c81a3474e27d894fed33dd24ad95fe":"18200000000000000000","536e4d8029b73f5579dca33e70b24eba89e11d7e":"1970000000000000000000","25c6e74ff1d928df98137af4df8430df24f07cd7":"390000000000000000000","19b36b0c87ea664ed80318dc77b688dde87d95a5":"1948386000000000000000",abc4caeb474d4627cb6eb456ecba0ecd08ed8ae1:"3940000000000000000000","8ea656e71ec651bfa17c5a5759d86031cc359977":"100000000000000000000","8d620bde17228f6cbba74df6be87264d985cc179":"100000000000000000000",b2aa2f1f8e93e79713d92cea9ffce9a40af9c82d:"2000000000000000000000","198ef1ec325a96cc354c7266a038be8b5c558f67":"608334724000000000000000","6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad":"53480000000000000000",e056bf3ff41c26256fef51716612b9d39ade999c:"100009000000000000000","2c128c95d957215101f043dd8fc582456d41016d":"835000000000000000000","2560b09b89a4ae6849ed5a3c9958426631714466":"1700000000000000000000",d3d6e9fb82542fd29ed9ea3609891e151396b6f7:"54000000000000000000000",a7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0:"1610000000000000000000","020362c3ade878ca90d6b2d889a4cc5510eed5f3":"1042883000000000000000","14830704e99aaad5c55e1f502b27b22c12c91933":"620000000000000000000","8030b111c6983f0485ddaca76224c6180634789f":"80000000000000000000","2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910":"200000000000000000000","77d43fa7b481dbf3db530cfbf5fdced0e6571831":"2000000000000000000000","2d90b415a38e2e19cdd02ff3ad81a97af7cbf672":"109800000000000000000","2fc82ef076932341264f617a0c80dd571e6ae939":"7160000000000000000000",dfe549fe8430e552c6d07cc3b92ccd43b12fb50f:"83620000000000000000","1e8e689b02917cdc29245d0c9c68b094b41a9ed6":"2000000000000000000000","21c3a8bba267c8cca27b1a9afabad86f607af708":"8940000000000000000000","143c639752caeecf6a997d39709fc8f19878c7e8":"1970000000000000000000","02603d7a3bb297c67c877e5d34fbd5b913d4c63a":"20000000000000000000",a166f911c644ac3213d29e0e1ae010f794d5ad26:"2000000000000000000000","6eb3819617404058268f0c3cff3596bfe9148c1c":"1670000000000000000000","7a67dd043a504fc2f2fc7194e9becf484cecb1fb":"250000000000000000000",f824ee331e4ac3cc587693395b57ecf625a6c0c2:"1600930000000000000000","1179c60dbd068b150b074da4be23033b20c68558":"680000000000000000000",d2a479404347c5543aab292ae1bb4a6f158357fa:"4000000000000000000000",b0d32bd7e4e695b7b01aa3d0416f80557dba9903:"16300000000000000000000",f734ec03724ddee5bb5279aa1afcf61b0cb448a1:"4238080000000000000000",c04069dfb18b096c7867f8bee77a6dc7477ad062:"2674000000000000000000","80c53ee7e3357f94ce0d7868009c208b4a130125":"2000000000000000000000","0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301":"753978000000000000000","6ddb6092779d5842ead378e21e8120fd4c6bc132":"2000000000000000000000","82ea01e3bf2e83836e71704e22a2719377efd9c3":"3040000000000000000000","44c1110b18870ec81178d93d215838c551d48e64":"199958000000000000000","7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc":"2000000000000000000000",a11a03c4bb26d21eff677d5d555c80b25453ee7a:"69979000000000000000","19e5dea3370a2c746aae34a37c531f41da264e83":"200000000000000000000",c325c352801ba883b3226c5feb0df9eae2d6e653:"3940000000000000000000",ae5055814cb8be0c117bb8b1c8d2b63b4698b728:"32035000000000000000",deb1bc34d86d4a4dde2580d8beaf074eb0e1a244:"1580000000000000000000","558360206883dd1b6d4a59639e5629d0f0c675d0":"2000000000000000000000",a9d6f871ca781a759a20ac3adb972cf12829a208:"925000000000000000000",b0ac4eff6680ee14169cdadbffdb30804f6d25f5:"2000000000000000000000",f1b58faffa8794f50af8e88309c7a6265455d51a:"999800000000000000000",a61a54df784a44d71b771b87317509211381f200:"1000000000000000000000",baa4b64c2b15b79f5f204246fd70bcbd86e4a92a:"500000000000000000000",a20d8ff60caae31d02e0b665fa435d76f77c9442:"489600000000000000000",f3e74f470c7d3a3f0033780f76a89f3ef691e6cb:"3021800000000000000000",d330728131fe8e3a15487a34573c93457e2afe95:"4000000000000000000000","9af9dbe47422d177f945bdead7e6d82930356230":"3940000000000000000000","0eb5b662a1c718608fd52f0c25f9378830178519":"6091400000000000000000",fda6810ea5ac985d6ffbf1c511f1c142edcfddf7:"4000000000000000000000","832c54176bdf43d2c9bcd7b808b89556b89cbf31":"200000000000000000000","704d5de4846d39b53cd21d1c49f096db5c19ba29":"152000000000000000000","344a8db086faed4efc37131b3a22b0782dad7095":"500000000000000000000","8c7fa5cae82fedb69ab189d3ff27ae209293fb93":"400030000000000000000",ad660dec825522a9f62fcec3c5b731980dc286ea:"3000000000000000000000","13b9b10715714c09cfd610cf9c9846051cb1d513":"1970000000000000000000","40467d80e74c35407b7db51789234615fea66818":"388000000000000000000","30e9d5a0088f1ddb2fd380e2a049192266c51cbf":"196910000000000000000",b2d1e99af91231858e7065dd1918330dc4c747d5:"16700000000000000000000","9f21302ca5096bea7402b91b0fd506254f999a3d":"1246832000000000000000",d24b6644f439c8051dfc64d381b8c86c75c17538:"2000000000000000000000","8228ebc087480fd64547ca281f5eace3041453b9":"1970000000000000000000","29da3e35b23bb1f72f8e2258cf7f553359d24bac":"20000000000000000000000",c8e558a3c5697e6fb23a2594c880b7a1b68f9860:"10000000000000000000000","6b951a43274eeafc8a0903b0af2ec92bf1efc839":"100000000000000000000",d015f6fcb84df7bb410e8c8f04894a881dcac237:"1038000000000000000000","6ccb03acf7f53ce87aadcc21a9932de915f89804":"8000000000000000000000","388c85a9b9207d8146033fe38143f6d34b595c47":"200000000000000000000","429c06b487e8546abdfc958a25a3f0fba53f6f00":"13503000000000000000","771507aeee6a255dc2cd9df55154062d0897b297":"334250000000000000000","5a2b1c853aeb28c45539af76a00ac2d8a8242896":"25000000000000000000",f4d67a9044b435b66e8977ff39a28dc4bd53729a:"200000000000000000000","063759dd1c4e362eb19398951ff9f8fad1d31068":"10000000000000000000000",cb58990bcd90cfbf6d8f0986f6fa600276b94e2d:"999925000000000000000","6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2":"4000000000000000000000",deb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd:"2000000000000000000000","59203cc37599b648312a7cc9e06dacb589a9ae6a":"148689000000000000000",fc9b347464b2f9929d807e039dae48d3d98de379:"14000000000000000000000","48d2434b7a7dbbff08223b6387b05da2e5093126":"18000000000000000000000",c9d76446d5aadff80b68b91b08cd9bc8f5551ac1:"714000000000000000000","3d31587b5fd5869845788725a663290a49d3678c":"500000000000000000000",d8715ef9176f850b2e30eb8e382707f777a6fbe9:"2000000000000000000000","2c2147947ae33fb098b489a5c16bfff9abcd4e2a":"200000000000000000000",d6c0d0bc93a62e257174700e10f024c8b23f1f87:"2000000000000000000000",d1978f2e34407fab1dc2183d95cfda6260b35982:"788000000000000000000","1bf974d9904f45ce81a845e11ef4cbcf27af719e":"100000000000000000000","6e761eaa0f345f777b5441b73a0fa5b56b85f22d":"2000000000000000000000",ea60436912de6bf187d3a472ff8f5333a0f7ed06:"19700000000000000000","94f8f057db7e60e675ad940f155885d1a477348e":"401100000000000000000","8933491760c8f0b4df8caac78ed835caee21046d":"20000000000000000000000",a7775e4af6a23afa201fb78b915e51a515b7a728:"120000000000000000000",d8d64384249b776794063b569878d5e3b530a4b2:"177569000000000000000",be633a3737f68439bac7c90a52142058ee8e8a6f:"960000000000000000000","90bd62a050845261fa4a9f7cf241ea630b05efb8":"500000000000000000000","552987f0651b915b2e1e5328c121960d4bdd6af4":"1790000000000000000000","0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f":"1000000000000000000000","9e5a311d9f69898a7c6a9d6360680438e67a7b2f":"1490000000000000000000","78859c5b548b700d9284cee4b6633c2f52e529c2":"2955000000000000000000",d572309169b1402ec8131a17a6aac3222f89e6eb:"13800000000000000000000","8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e":"955000000000000000000","75c11d024d12ae486c1095b7a7b9c4af3e8edeb9":"20000000000000000000","903413878aea3bc1086309a3fe768b65559e8cab":"8000000000000000000000","6d0569e5558fc7df2766f2ba15dc8aeffc5beb75":"4001070000000000000000","3815b0743f94fc8cc8654fd9d597ed7d8b77c57e":"738578000000000000000","0f26480a150961b8e30750713a94ee6f2e47fc00":"1000000000000000000000",ede5de7c7fb7eee0f36e64530a41440edfbefacf:"617200000000000000000","763a7cbab70d7a64d0a7e52980f681472593490c":"600000000000000000000","6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74":"200000000000000000000",eb3bdd59dcdda5a9bb2ac1641fd02180f5f36560:"6600000000000000000000",f4ebf50bc7e54f82e9b9bd24baef29438e259ce6:"10000000000000000000000","882c8f81872c79fed521cb5f950d8b032322ea69":"40000000000000000000000","394132600f4155e07f4d45bc3eb8d9fb72dcd784":"2941000000000000000000","0be2b94ad950a2a62640c35bfccd6c67dae450f6":"1940000000000000000000",d4c6ac742e7c857d4a05a04c33d4d05c1467571d:"200000000000000000000","1fddd85fc98be9c4045961f40f93805ecc4549e5":"164000000000000000000","534065361cb854fac42bfb5c9fcde0604ac919da":"2000000000000000000000","9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786":"2547000000000000000000","4f3a4854911145ea01c644044bdb2e5a960a982f":"4000000000000000000000","00497e92cdc0e0b963d752b2296acb87da828b24":"194800000000000000000","4ff67fb87f6efba9279930cfbd1b7a343c79fade":"400000000000000000000","62f2e5ccecd52cc4b95e0597df27cc079715608c":"143000000000000000000","1eda084e796500ba14c5121c0d90846f66e4be62":"534800000000000000000","9836b4d30473641ab56aeee19242761d72725178":"2000000000000000000000",de55de0458f850b37e4d78a641dd2eb2dd8f38ce:"4000000000000000000000","140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0":"1600000000000000000000","2014261f01089f53795630ba9dd24f9a34c2d942":"1337000000000000000000","11415fab61e0dfd4b90676141a557a869ba0bde9":"2048000000000000000000","88344909644c7ad4930fd873ca1c0da2d434c07f":"131970000000000000000","88b217ccb786a254cf4dc57f5d9ac3c455a30483":"925000000000000000000",dfdbcec1014b96da2158ca513e9c8d3b9af1c3d0:"2000000000000000000000","1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d":"850000000000000000000",d70ad2c4e9eebfa637ef56bd486ad2a1e5bce093:"200000000000000000000","9ce27f245e02d1c312c1d500788c9def7690453b":"200000000000000000000","8234f463d18485501f8f85ace4972c9b632dbccc":"2000000000000000000000","994152fc95d5c1ca8b88113abbad4d710e40def6":"500000000000000000000",e5b980d28eece2c06fca6c9473068b37d4a6d6e9:"695200000000000000000","2d426912d059fad9740b2e390a2eeac0546ff01b":"1400000000000000000000","6d9997509882027ea947231424bedede2965d0ba":"2001600000000000000000","167ce7de65e84708595a525497a3eb5e5a665073":"575400000000000000000",e430c0024fdbf73a82e21fccf8cbd09138421c21:"4000000000000000000000","2e52912bc10ea39d54e293f7aed6b99a0f4c73be":"400000000000000000000","12cf8b0e465213211a5b53dfb0dd271a282c12c9":"15200000000000000000","06964e2d17e9189f88a8203936b40ac96e533c06":"18200000000000000000","66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f":"201412000000000000000","0a77e7f72b437b574f00128b21f2ac265133528c":"2000000000000000000000","78f5c74785c5668a838072048bf8b453594ddaab":"400000000000000000000","58e554af3d87629620da61d538c7f5b4b54c4afe":"1297081000000000000000","37a10451f36166cf643dd2de6c1cbba8a011cfa3":"380000000000000000000",fe9ad12ef05d6d90261f96c8340a0381974df477:"2000000000000000000000","057f7f81cd7a406fc45994408b5049912c566463":"1700000000000000000000","55a3df57b7aaec16a162fd5316f35bec082821cf":"1970000000000000000000",c0e0b903088e0c63f53dd069575452aff52410c3:"3000000000000000000000","63e88e2e539ffb450386b4e46789b223f5476c45":"6292000000000000000000","3727341f26c12001e378405ee38b2d8464ec7140":"2000000000000000000000",c96751656c0a8ef4357b7344322134b983504aca:"2000000000000000000000","1e060dc6c5f1cb8cc7e1452e02ee167508b56542":"12715500000000000000000","18136c9df167aa17b6f18e22a702c88f4bc28245":"4000000000000000000000","116108c12084612eeda7a93ddcf8d2602e279e5c":"2000000000000000000000",bbb643d2187b364afc10a6fd368d7d55f50d1a3c:"1000000000000000000000",ec83e798c396b7a55e2a2224abcd834b27ea459c:"12000000000000000000000","973f4e361fe5decd989d4c8f7d7cc97990385daf":"388500000000000000000",c0f29ed0076611b5e55e130547e68a48e26df5e4:"3000000000000000000000",fd4b551f6fdbcda6c511b5bb372250a6b783e534:"20600000000000000000","144b19f1f66cbe318347e48d84b14039466c5909":"2000000000000000000000",bf183641edb886ce60b8190261e14f42d93cce01:"25019000000000000000","94db807873860aac3d5aea1e885e52bff2869954":"3220000000000000000000","7a74cee4fa0f6370a7894f116cd00c1147b83e59":"800000000000000000000",cd32a4a8a27f1cc63954aa634f7857057334c7a3:"1085000000000000000000","7cbeb99932e97e6e02058cfc62d0b26bc7cca52b":"2000000000000000000000","8cde8b732e6023878eb23ed16229124b5f7afbec":"133700000000000000000","45c4ecb4ee891ea984a7c5cefd8dfb00310b2850":"1980000000000000000000","8b393fb0813ee101db1e14ecc7d322c72b8c0473":"455578000000000000000","7b66126879844dfa34fe65c9f288117fefb449ad":"6000000000000000000000","162ba503276214b509f97586bd842110d103d517":"9002000000000000000000","7dece6998ae1900dd3770cf4b93812bad84f0322":"100000000000000000000",ec0927bac7dc36669c28354ab1be83d7eec30934:"2000000000000000000000","8d7f3e61299c2db9b9c0487cf627519ed00a9123":"1742400000000000000000","4fc46c396e674869ad9481638f0013630c87caac":"1000000000000000000000",bf68d28aaf1eeefef646b65e8cc8d190f6c6da9c:"2000000000000000000000","00969747f7a5b30645fe00e44901435ace24cc37":"1700000000000000000000","494dec4d5ee88a2771a815f1ee7264942fb58b28":"2000000000000000000000",ffeac0305ede3a915295ec8e61c7f881006f4474:"98500000000000000000",b39139576194a0866195151f33f2140ad1cc86cf:"100000000000000000000000",fead1803e5e737a68e18472d9ac715f0994cc2be:"500000000000000000000","698ab9a2f33381e07c0c47433d0d21d6f336b127":"20000000000000000000",e5edc73e626f5d3441a45539b5f7a398c593edf6:"865000000000000000000",dd4f5fa2111db68f6bde3589b63029395b69a92d:"158400000000000000000","8c93c3c6db9d37717de165c3a1b4fe51952c08de":"400000000000000000000",f87bb07b289df7301e54c0efda6a2cf291e89200:"1400000000000000000000",e7a4560c84b20e0fb54c49670c2903b0a96c42a4:"598000000000000000000","00a5797f52c9d58f189f36b1d45d1bf6041f2f6b":"5456900000000000000000","9da3302240af0511c6fd1857e6ddb7394f77ab6b":"3100000000000000000000","2c2d15ff39561c1b72eda1cc027ffef23743a144":"3920000000000000000000","9b4c2715780ca4e99e60ebf219f1590c8cad500a":"1600000000000000000000",ff5e7ee7d5114821e159dca5e81f18f1bfffbff9:"2000000000000000000000","0169c1c210eae845e56840412e1f65993ea90fb4":"2000000000000000000000",abc45f84db7382dde54c5f7d8938c42f4f3a3bc4:"200000000000000000000",d9383d4b6d17b3f9cd426e10fb944015c0d44bfb:"800000000000000000000",c090fe23dcd86b358c32e48d2af91024259f6566:"200000000000000000000","9ffedcc36b7cc312ad2a9ede431a514fccb49ba3":"669800000000000000000","2ffe93ec1a5636e9ee34af70dff52682e6ff7079":"2000000000000000000000","6e01e4ad569c95d007ada30d5e2db12888492294":"4000000000000000000000",d4d92c62b280e00f626d8657f1b86166cb1f740f:"200028000000000000000","1d36683063b7e9eb99462dabd569bddce71686f2":"1000000000000000000000","3a48e0a7098b06a905802b87545731118e89f439":"2000000000000000000000",bd9e56e902f4be1fc8768d8038bac63e2acbbf8e:"999972000000000000000","4d67f2ab8599fef5fc413999aa01fd7fce70b43d":"10000000000000000000000","8e74e0d1b77ebc823aca03f119854cb12027f6d7":"107200000000000000000000","7e5b19ae1be94ff4dee635492a1b012d14db0213":"100000000000000000000","5de9e7d5d1b667d095dd34099c85b0421a0bc681":"20000000000000000000","316eb4e47df71b42e16d6fe46825b7327baf3124":"4000000000000000000000","772c297f0ad194482ee8c3f036bdeb01c201d5cc":"200000000000000000000",d7052519756af42590f15391b723a03fa564a951:"4615591000000000000000","2c6846a1aa999a2246a287056000ba4dcba8e63d":"10020000000000000000000",de5b005fe8daae8d1f05de3eda042066c6c4691c:"1100000000000000000000","254c1ecc630c2877de8095f0a8dba1e8bf1f550c":"1700000000000000000000",f8f226142a428434ab17a1864a2597f64aab2f06:"172473000000000000000",a6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf:"8000000000000000000000",e587b16abc8a74081e3613e14342c03375bf0847:"2000000000000000000000","6f176065e88e3c6fe626267d18a088aaa4db80bc":"3520000000000000000000","50dcbc27bcad984093a212a9b4178eabe9017561":"145512000000000000000",e1953c6e975814c571311c34c0f6a99cdf48ab82:"50000000000000000000",be0a2f385f09dbfce96732e12bb40ac349871ba8:"1610348000000000000000","4712540265cbeec3847022c59f1b318d43400a9e":"3500000000000000000000","29bdc4f28de0180f433c2694eb74f5504ce94337":"2000000000000000000000","2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e":"9940000000000000000000","506411fd79003480f6f2b6aac26b7ba792f094b2":"500000000000000000000","23ea669e3564819a83b0c26c00a16d9e826f6c46":"1430590000000000000000",e3ffb02cb7d9ea5243701689afd5d417d7ed2ece:"78000000000000000000","38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c":"50000000000000000000","8644cc281be332ccced36da483fb2a0746d9ba2e":"400000000000000000000",e8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3:"1940000000000000000000","0631dc40d74e5095e3729eddf49544ecd4396f67":"160000000000000000000","83c897a84b695eebe46679f7da19d776621c2694":"500000000000000000000",db73460b59d8e85045d5e752e62559875e42502e:"999800000000000000000","0dd4e674bbadb1b0dc824498713dce3b5156da29":"170000000000000000000",e3933d61b77dcdc716407f8250bc91e4ffaeb09d:"86600000000000000000000","58c90754d2f20a1cb1dd330625e04b45fa619d5c":"2000000000000000000000","895ec5545644e0b78330fffab8ddeac9e833156c":"600000000000000000000","7e1e29721d6cb91057f6c4042d8a0bbc644afe73":"159800000000000000000","72b90a4dc097239492c5b9777dcd1e52ba2be2c2":"6000000000000000000000","64241a7844290e0ab855f1d4aa75b55345032224":"1600000000000000000000","6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899":"695240000000000000000","3a035594c747476d42d1ee966c36224cdd224993":"355890000000000000000",de97f4330700b48c496d437c91ca1de9c4b01ba4:"2910840000000000000000","716ad3c33a9b9a0a18967357969b94ee7d2abc10":"482000000000000000000",bfbe05e88c9cbbcc0e92a405fac1d85de248ee24:"100000000000000000000",cfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e:"1850000000000000000000",d931ac2668ba6a84481ab139735aec14b7bfbabf:"2000000000000000000000",e3263ce8af6db3e467584502ed7109125eae22a5:"2000000000000000000000",f78258c12481bcdddbb72a8ca0c043097261c6c5:"20000000000000000000","4493123c021ece3b33b1a452c9268de14007f9d3":"6685000000000000000000","431f2c19e316b044a4b3e61a0c6ff8c104a1a12f":"1000000000000000000000",e63e787414b9048478a50733359ecdd7e3647aa6:"1580000000000000000000",e4715956f52f15306ee9506bf82bccc406b3895e:"274944000000000000000",f7f91e7acb5b8129a306877ce3168e6f438b66a1:"176000000000000000000",dcdbbd4e2604e40e1710cc6730289dccfad3892d:"4600000000000000000000","2b5f4b3f1e11707a227aa5e69fa49dded33fb321":"6000000000000000000000","01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38":"200000000000000000000","841145b44840c946e21dbc190264b8e0d5029369":"300000000000000000000000",bf05070c2c34219311c4548b2614a438810ded6d:"2000000000000000000000","38f387e1a4ed4a73106ef2b462e474e2e3143ad0":"6000000000000000000000",f116b0b4680f53ab72c968ba802e10aa1be11dc8:"20000000000000000000",bea0afc93aae2108a3fac059623bf86fa582a75e:"1700000000000000000000","4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8":"29200000000000000000",ab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6:"2400000000000000000000",d71fb130f0150c565269e00efb43902b52a455a6:"200000000000000000000","99b018932bcad355b6792b255db6702dec8ce5dd":"4000086000000000000000","4b904e934bd0cc8b20705f879e905b93ea0ccc30":"2000000000000000000000","672ec42faa8cd69aaa71b32cc7b404881d52ff91":"10000000000000000000000",acbc2d19e06c3babbb5b6f052b6bf7fc37e07229:"200000000000000000000",cea8743341533cb2f0b9c6efb8fda80d77162825:"100000000000000000000","9568b7de755628af359a84543de23504e15e41e6":"40000000000000000000000","6ec96d13bdb24dc7a557293f029e02dd74b97a55":"4000000000000000000000",d95c90ffbe5484864780b867494a83c89256d6e4:"1640000000000000000000",ade6f8163bf7c7bb4abe8e9893bd0cc112fe8872:"327600000000000000000","250eb7c66f869ddf49da85f3393e980c029aa434":"4000000000000000000000",a35c19132cac1935576abfed6c0495fb07881ba0:"2000000000000000000000",d5550caaf743b037c56fd2558a1c8ed235130750:"5347598000000000000000","03097923ba155e16d82f3ad3f6b815540884b92c":"1820000000000000000000",d6d9e30f0842012a7176a917d9d2048ca0738759:"4000000000000000000000",ab9ad36e5c74ce2e96399f57839431d0e79f96ab:"164000000000000000000","75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675":"67720000000000000000","4f6d4737d7a940382487264886697cf7637f8015":"1670000000000000000000","5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca":"1940000000000000000000",d843ee0863ce933e22f89c802d31287b9671e81c:"13370000000000000000","361f3ba9ed956b770f257d3672fe1ff9f7b0240c":"600000000000000000000","6c0ae9f043c834d44271f13406593dfe094f389f":"1517545000000000000000",db34745ede8576b499db01beb7c1ecda85cf4abe:"80000000000000000000","7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a":"20000000000000000000","128b908fe743a434203de294c441c7e20a86ea67":"713304000000000000000",df236bf6abf4f3293795bf0c28718f93e3b1b36b:"1337000000000000000000","14254ea126b52d0142da0a7e188ce255d8c47178":"775000000000000000000",ceed47ca5b899fd1623f21e9bd4db65a10e5b09d:"133196000000000000000","30acd858875fa24eef0d572fc7d62aad0ebddc35":"400000000000000000000","47a281dff64167197855bf6e705eb9f2cef632ea":"1000072000000000000000","297d5dbe222f2fb52531acbd0b013dc446ac7368":"20000000000000000000000",adf85203c8376a5fde9815384a350c3879c4cb93:"1147300000000000000000",c3e0471c64ff35fa5232cc3121d1d38d1a0fb7de:"2000000000000000000000",fdecc82ddfc56192e26f563c3d68cb544a96bfed:"440000000000000000000","2614f42d5da844377578e6b448dc24305bef2b03":"2000000000000000000000","1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859":"171313000000000000000",bd66ffedb530ea0b2e856dd12ac2296c31fe29e0:"200000000000000000000","6e84876dbb95c40b6656e42ba9aea08a993b54dc":"1101932000000000000000",a1c4f45a82e1c478d845082eb18875c4ea6539ab:"200000000000000000000000","2c964849b1f69cc7cea4442538ed87fdf16cfc8f":"2000000000000000000000","45b47105fe42c4712dce6e2a21c05bffd5ea47a9":"2000000000000000000000","31e9c00f0c206a4e4e7e0522170dc81e88f3eb70":"2685000000000000000000","5fe77703808f823e6c399352108bdb2c527cb87c":"1960000000000000000000","2272186ef27dcbe2f5fc373050fdae7f2ace2316":"16100000000000000000000",b7576e9d314df41ec5506494293afb1bd5d3f65d:"20000000000000000000",ac9fff68c61b011efbecf038ed72db97bb9e7281:"9550000000000000000000",cd9529492b5c29e475acb941402b3d3ba50686b0:"1970000000000000000000",f19b39389d47b11b8a2c3f1da9124decffbefaf7:"2000000000000000000000","9e951f6dc5e352afb8d04299d2478a451259bf56":"72004000000000000000","8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331":"2000000000000000000000","29cc804d922be91f5909f348b0aaa5d21b607830":"4000000000000000000000","5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55":"1000000000000000000000",a16160851d2b9c349b92e46f829abfb210943595:"1790000000000000000000",eac6b98842542ea10bb74f26d7c7488f698b6452:"20000000000000000000000","57825aeb09076caa477887fbc9ae37e8b27cc962":"100000000000000000000",b35e8a1c0dac7e0e66dbac736a592abd44012561:"14974000000000000000","756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25":"3220000000000000000000",e13b3d2bbfdcbc8772a23315724c1425167c5688:"1032115000000000000000","0a2dcb7a671701dbb8f495728088265873356c8e":"152120000000000000000","03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79":"2740000000000000000000","98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e":"12800000000000000000000",f8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a:"10000000000000000000000","02f7f67209b16a17550c694c72583819c80b54ad":"98400000000000000000","32bb2e9693e4e085344d2f0dbd46a283e3a087fd":"400000000000000000000","9c78963fbc263c09bd72e4f8def74a9475f7055c":"13790000000000000000000","27144ca9a7771a836ad50f803f64d869b2ae2b20":"4000000000000000000000",cc758d071d25a6320af68c5dc9c4f6955ba94520:"6000000000000000000000",cb42b44eb5fd60b5837e4f9eb47267523d1a229c:"865000000000000000000",aaf5b207b88b0de4ac40d747cee06e172df6e745:"31428000000000000000000","52d380511df19d5ec2807bbcb676581b67fd37a3":"13400000000000000000",aa1b3768c16d821f580e76c8e4c8e86d7dc78853:"400000000000000000000","41098a81452317c19e3eef0bd123bbe178e9e9ca":"2800000000000000000000","267148fd72c54f620a592fb92799319cc4532b5c":"410000000000000000000",d7cdbd41fff20df727c70b6255c1ba7606055468:"200000000000000000000","0e33fcbbc003510be35785b52a9c5d216bc005f4":"1880000000000000000000","6727daf5b9d68efcab489fedec96d7f7325dd423":"2000000000000000000000",cd0a161bc367ae0927a92aac9cf6e5086714efca:"2000000000000000000000","612667f172135b950b2cd1de10afdece6857b873":"1000000000000000000000","900194c4b1074305d19de405b0ac78280ecaf967":"1000000000000000000000","51f55ef47e6456a418ab32b9221ed27dba6608ee":"4200000000000000000000","0da532c910e3ac0dfb14db61cd739a93353fd05f":"1336866000000000000000","21df2dcdaf74b2bf803404dd4de6a35eabec1bbd":"6920000000000000000000",f0e7fb9e420a5340d536f40408344feaefc06aef:"1000000000000000000000","6742a2cfce8d79a2c4a51b77747498912245cd6a":"258064000000000000000","8663a241a0a89e70e182c845e2105c8ad7264bcf":"14825507000000000000000","18e113d8177c691a61be785852fa5bb47aeebdaf":"1337000000000000000000","1bec4d02ce85fc48feb62489841d85b170586a9b":"2400000000000000000000","287cf9d0902ef819a7a5f149445bf1775ee8c47c":"16000000000000000000000","28967280214e218a120c5dda37041b111ea36d74":"200000000000000000000",a0b771951ce1deee363ae2b771b73e07c4b5e800:"1400000000000000000000","29f8fba4c30772b057edbbe62ae7420c390572e1":"1000000000000000000000",ee34c7e7995db9f187cff156918cfb6f13f6e003:"1960000000000000000000","916bf7e3c545921d3206d900c24f14127cbd5e70":"18020000000000000000000","93235f340d2863e18d2f4c52996516138d220267":"73800000000000000000","7efec0c6253caf397f71287c1c07f6c9582b5b86":"482839000000000000000","8d2e31b08803b2c5f13d398ecad88528209f6057":"9993000000000000000000","964eab4b276b4cd8983e15ca72b106900fe41fce":"500000000000000000000",eea1e97988de75d821cd28ad6822b22cce988b31:"520000000000000000000","278c0bde630ec393b1e7267fc9d7d97019e4145b":"2000000000000000000000","82e4461eb9d849f0041c1404219e4272c4900ab4":"2000000000000000000000","4a73389298031b8816cca946421c199e18b343d6":"631254000000000000000","9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4":"500000000000000000000",cb9b5103e4ce89af4f64916150bff9eecb9faa5c:"500000000000000000000","740f641614779dcfa88ed1d425d60db42a060ca6":"998630000000000000000",a4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea:"20000000000000000000","25a500eeec7a662a841552b5168b707b0de21e9e":"10020000000000000000000","185a7fc4ace368d233e620b2a45935661292bdf2":"20000000000000000000000","9b68f67416a63bf4451a31164c92f672a68759e9":"60000000000000000000000",a38b5bd81a9db9d2b21d5ec7c60552cd02ed561b:"6000000000000000000000","61c830f1654718f075ccaba316faacb85b7d120b":"400000000000000000000","8392e53776713578015bff4940cf43849d7dcba1":"153190000000000000000",dc57477dafa42f705c7fe40eae9c81756e0225f1:"500044000000000000000",febc3173bc9072136354002b7b4fb3bfc53f22f1:"370000000000000000000",d78f84e38944a0e0255faece48ba4950d4bd39d2:"5000000000000000000000",a7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8:"2000000000000000000000",aa3f29601a1331745e05c42830a15e71938a6237:"1700000000000000000000",bec6640f4909b58cbf1e806342961d607595096c:"1999944000000000000000","9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6":"74500000000000000000",e3eb2c0a132a524f72ccc0d60fee8b41685d39e2:"1970000000000000000000","90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a":"900000000000000000000",f2742e6859c569d5f2108351e0bf4dca352a48a8:"10000000000000000000000",b134c004391ab4992878337a51ec242f42285742:"2000000000000000000000",ab7416ff32254951cbbc624ec7fb45fc7ecaa872:"340000000000000000000","9795f64319fc17dd0f8261f9d206fb66b64cd0c9":"200000000000000000000","64e03ef070a54703b7184e48276c5c0077ef4b34":"320000000000000000000","3430a16381f869f6ea5423915855e800883525a9":"17900000000000000000000",f4a367b166d2991a2bfda9f56463a09f252c1b1d:"1970000000000000000000","77c4a697e603d42b12056cbba761e7f51d0443f5":"680000000000000000000","153ef58a1e2e7a3eb6b459a80ab2a547c94182a2":"96000000000000000000000","6dbe8abfa1742806263981371bf3d35590806b6e":"20000000000000000000000","4c99dae96481e807c1f99f8b7fbde29b7547c5bf":"150000000000000000000",d5b9d277d8aad20697a51f76e20978996bffe055:"143250000000000000000","0f24105abbdaa03fa6309ef6c188e51f714a6e59":"200000000000000000000","1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c":"1337000000000000000000",f37b426547a1642d8033324814f0ede3114fc212:"401100000000000000000","318f1f8bd220b0558b95fb33100ffdbb640d7ca6":"4000000000000000000000","206d55d5792a514ec108e090599f2a065e501185":"200550000000000000000","11d2247a221e70c2d66d17ee138d38c55ffb8640":"10000000000000000000000",e8de725eca5def805ff7941d31ac1c2e342dfe95:"2462500000000000000000",d561cbbc05515de73ab8cf9eae1357341e7dfdf4:"6000000000000000000000","0455dcec8a7fc4461bfd7f37456fce3f4c3caac7":"400000000000000000000","5161fd49e847f67455f1c8bb7abb36e985260d03":"1200000000000000000000","8e073bad25e42218615f4a0e6b2ea8f8de2230c0":"2402500000000000000000","6c08a6dc0173c7342955d1d3f2c065d62f83aec7":"20000000000000000000","95cb6d8a6379f94aba8b885669562c4d448e56a7":"2000000000000000000000","2805415e1d7fdec6dedfb89e521d10592d743c10":"100000000000000000000",daacdaf42226d15cb1cf98fa15048c7f4ceefe69:"300000000000000000000",e33df4ce80ccb62a76b12bcdfcecc46289973aa9:"6000000000000000000000","8f8cd26e82e7c6defd02dfad07979021cbf7150c":"3000000000000000000000","77a17122fa31b98f1711d32a99f03ec326f33d08":"1700000000000000000000","6f791d359bc3536a315d6382b88311af8ed6da47":"92000000000000000000",de30e49e5ab313214d2f01dcabce8940b81b1c76:"197000000000000000000",cf9be9b9ab86c66b59968e67b8d4dcff46b1814a:"660000000000000000000","7fdfc88d78bf1b285ac64f1adb35dc11fcb03951":"2287900000000000000000",c5134cfbb1df7a20b0ed7057622eeed280947dad:"3800000000000000000000",fa9ec8efe08686fa58c181335872ba698560ecab:"1999944000000000000000",f6a8635757c5e8c134d20d028cf778cf8609e46a:"1459416000000000000000","6265b2e7730f36b776b52d0c9d02ada55d8e3cb6":"1000000000000000000000","6a8cea2de84a8df997fd3f84e3083d93de57cda9":"100007000000000000000","1b7ed974b6e234ce81247498429a5bd4a0a2d139":"2000000000000000000000","9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46":"1337000000000000000000",d7b740dff8c457668fdf74f6a266bfc1dcb723f9:"20000000000000000000","07bc2cc8eedc01970700efc9c4fb36735e98cd71":"4000000000000000000000","3e1c962063e0d5295941f210dca3ab531eec8809":"3000000000000000000000",b447571dacbb3ecbb6d1cf0b0c8f3838e52324e2:"30199000000000000000","87764e3677eef604cbc59aed24abdc566b09fc25":"3000000000000000000000","03aa622881236dd0f4940c24c324ff8b7b7e2186":"3200000000000000000000",a4a7d306f510cd58359428c0d2f7c3609d5674d7:"3349000000000000000000","3c83c1701db0388b68210d00f5717cd9bd322c6a":"30000000000000000000000","047d5a26d7ad8f8e70600f70a398ddaa1c2db26f":"6000000000000000000000","43767bf7fd2af95b72e9312da9443cb1688e4343":"300000000000000000000","34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e":"20000000000000000000000","65a9dad42e1632ba3e4e49623fab62a17e4d3611":"93120000000000000000","48e0cbd67f18acdb7a6291e1254db32e0972737f":"100007000000000000000",a5de5e434fdcdd688f1c31b6fb512cb196724701:"800000000000000000000","6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd":"30000000000000000000",b079bb4d9866143a6da72ae7ac0022062981315c:"760000000000000000000",c0413f5a7c2d9a4b8108289ef6ecd271781524f4:"50000000000000000000000",a91a5a7b341f99c535144e20be9c6b3bb4c28e4d:"5431790000000000000000","993f146178605e66d517be782ef0b3c61a4e1925":"7011998000000000000000","966c04781cb5e67dde3235d7f8620e1ab663a9a5":"75800000000000000000000",b3f82a87e59a39d0d2808f0751eb72c2329cdcc5:"5000000000000000000000","9b77ebced7e215f0920e8c2b870024f6ecb2ff31":"1000000000000000000000",fe697ff22ca547bfc95e33d960da605c6763f35b:"1325000000000000000000","480af52076009ca73781b70e43b95916a62203ab":"924171000000000000000",a9dc0424c6969d798358b393b1933a1f51bee00a:"20000000000000000000000","7aba56f63a48bc0817d6b97039039a7ad62fae2e":"600000000000000000000","59d139e2e40c7b97239d23dfaca33858f602d22b":"2000000000000000000000","8d6170ff66978e773bb621bf72b1ba7be3a7f87e":"200000000000000000000",d668523a90f0293d65c538d2dd6c57673710196e:"39500000000000000000",bbb5a0f4802c8648009e8a6998af352cde87544f:"95500000000000000000",fc43829ac787ff88aaf183ba352aadbf5a15b193:"3960000000000000000000",fe22a0b388668d1ae2643e771dacf38a434223cc:"4000304000000000000000","092acb624b08c05510189bbbe21e6524d644ccad":"18200000000000000000","8f0538ed71da1155e0f3bde5667ceb84318a1a87":"1940000000000000000000","06994cd83aa2640a97b2600b41339d1e0d3ede6c":"250000000000000000000","9d460c1b379ddb19a8c85b4c6747050ddf17a875":"3340000000000000000000","77a769fafdecf4a638762d5ba3969df63120a41d":"2000000000000000000000","5f375b86600c40cca8b2676b7a1a1d1644c5f52c":"78838000000000000000","15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2":"1910000000000000000000","6651736fb59b91fee9c93aa0bd6ea2f7b2506180":"500000000000000000000","361d9ed80b5bd27cf9f1226f26753258ee5f9b3f":"3530900000000000000000",c9b6b686111691ee6aa197c7231a88dc60bd295d:"500000000000000000000",e9b4a4853577a9dbcc2e795be0310d1bed28641a:"1000000000000000000000","36758e049cd98bcea12277a676f9297362890023":"4000000000000000000000","6bb50813146a9add42ee22038c9f1f7469d47f47":"200200000000000000000","6de4b581385cf7fc9fe8c77d131fe2ee7724c76a":"2308840000000000000000",d2a5a024230a57ccc666760b89b0e26cafd189c7:"49997115000000000000000","65af9087e05167715497c9a5a749189489004def":"835000000000000000000",ead21c1deccfbf1c5cd96688a2476b69ba07ce4a:"72800000000000000000",e308435204793764f5fcbe65eb510f5a744a655a:"200000000000000000000","9376dce2af2ec8dcda741b7e7345664681d93668":"1000000000000000000000",a1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b:"20000000000000000000",e2198c8ca1b399f7521561fd5384a7132fba486b:"1015200000000000000000","92c13fe0d6ce87fd50e03def9fa6400509bd7073":"40000000000000000000","7517f16c28d132bb40e3ba36c6aef131c462da17":"18200000000000000000","6a023af57d584d845e698736f130db9db40dfa9a":"98800000000000000000","1518627b88351fede796d3f3083364fbd4887b0c":"16000000000000000000000",f5b6e9061a4eb096160777e26762cf48bdd8b55d:"254030000000000000000","28073efc17d05cab3195c2db332b61984777a612":"1000000000000000000000",f06a854a3c5dc36d1c49f4c87d6db333b57e4add:"10000000000000000000000","9225983860a1cb4623c72480ac16272b0c95e5f5":"2000000000000000000000","5260dc51ee07bddaababb9ee744b393c7f4793a6":"34040000000000000000","0f127bbf8e311caea2ba502a33feced3f730ba42":"188000000000000000000","17d521a8d9779023f7164d233c3b6420ffd223ed":"20000000000000000000","8c2b7d8b608d28b77f5caa9cd645242a823e4cd9":"1820000000000000000000","6e866d032d405abdd65cf651411d803796c22311":"2000000000000000000000",dc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6:"1000000000000000000000",c84d9bea0a7b9f140220fd8b9097cfbfd5edf564:"123047000000000000000",ff86e5e8e15b53909600e41308dab75f0e24e46b:"902400000000000000000",d7164aa261c09ad9b2b5068d453ed8eb6aa13083:"3000000000000000000000","76aaf8c1ac012f8752d4c09bb46607b6651d5ca8":"20000000000000000000","41786a10d447f484d33244ccb7facd8b427b5b8c":"1000000000000000000000","2e0c57b47150f95aa6a7e16ab9b1cbf54328979a":"100000000000000000000","3f747237806fed3f828a6852eb0867f79027af89":"1500000000000000000000",a568db4d57e4d67462d733c69a9e0fe26e218327:"1096140000000000000000","1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c":"13400000000000000000",d1ea4d72a67b5b3e0f315559f52bd0614d713069:"2000000000000000000000",bfaeb91067617dcf8b44172b02af615674835dba:"160661000000000000000",b71a13ba8e95167b80331b52d69e37054fe7a826:"200000000000000000000",b67a80f170197d96cdcc4ab6cba627b4afa6e12c:"2400000000000000000000","35af040a0cc2337a76af288154c7561e1a233349":"1000000000000000000000",c86190904b8d079ec010e462cbffc90834ffaa5c:"10100000000000000000000","383304dd7a5720b29c1a10f60342219f48032f80":"5600000000000000000000","191313525238a21c767457a91374f02200c55448":"116400000000000000000",cc4a2f2cf86cf3e43375f360a4734691195f1490:"1348127000000000000000","4e020779b5ddd3df228a00cb48c2fc979da6ae38":"2000000000000000000000",e206fb7324e9deb79e19903496d6961b9be56603:"100000000000000000000","3ae160e3cd60ae31b9d6742d68e14e76bd96c517":"30000000000000000000","1f7d8e86d6eeb02545aad90e91327bd369d7d2f3":"20000000000000000000","68c7d1711b011a33f16f1f55b5c902cce970bdd7":"152000000000000000000","637be71b3aa815ff453d5642f73074450b64c82a":"2000000000000000000000","1584a2c066b7a455dbd6ae2807a7334e83c35fa5":"130000000000000000000","9c05e9d0f0758e795303717e31da213ca157e686":"1000000000000000000000","4f1a2da54a4c6da19d142412e56e815741db2325":"100000000000000000000","9a4ca8b82117894e43db72b9fa78f0b9b93ace09":"50000000000000000000","26c99f8849c9802b83c861217fd07a9e84cdb79d":"300000000000000000000","45c0d19f0b8e054f9e893836d5ecae7901af2812":"5000000000000000000000","00dc01cbf44978a42e8de8e436edf94205cfb6ec":"1458440000000000000000",de7dee220f0457a7187d56c1c41f2eb00ac56021:"629924000000000000000","1c128bd6cda5fca27575e4b43b3253c8c4172afe":"2000000000000000000000","666746fb93d1935c5a3c684e725010c4fad0b1d8":"20000000000000000000","51d78b178d707e396e8710965c4f41b1a1d9179d":"110600000000000000000","68f7573cd457e14c03fea43e302d30347c10705c":"5000000000000000000000","9d30cb237bc096f17036fc80dd21ca68992ca2d9":"30380000000000000000000",fbcfcc4a7b0f26cf26e9f3332132e2fc6a230766:"8000000000000000000000",b166e37d2e501ae73c84142b5ffb5aa655dd5a99:"1999000000000000000000","6df24f6685a62f791ba337bf3ff67e91f3d4bc3a":"2166000000000000000000","92e435340e9d253c00256389f52b067d55974e76":"268000000000000000000",ea53d26564859d9e90bb0e53b7abf560e0162c38:"400000000000000000000",e26657f0ed201ea2392c9222b80a7003608ddf30:"40000000000000000000",f4177a0d85d48b0e264211ce2aa2efd3f1b47f08:"3593425000000000000000","9d47ba5b4c8505ad8da42934280b61a0e1e8b971":"100000000000000000000","63c2a3d235e5eeabd0d4a6afdb89d94627396495":"1241620000000000000000","446a8039cecf9dce4879cbcaf3493bf545a88610":"7000000000000000000000","7fa37ed67887751a471f0eb306be44e0dbcd6089":"1060000000000000000000","26d4a16891f52922789217fcd886f7fce296d400":"2000000000000000000000","487e108502b0b189ef9c8c6da4d0db6261eec6c0":"1910000000000000000000","7484d26becc1eea8c6315ec3ee0a450117dc86a0":"12000000000000000000000",ad9e97a0482f353a05c0f792b977b6c7e811fa5f:"200000000000000000000","2273bad7bc4e487622d175ef7a66988b6a93c4ee":"20000000000000000000","3b93b16136f11eaf10996c95990d3b2739ccea5f":"10000000000000000000000",f3f1fa3918ca34e2cf7e84670b1f4d8eca160db3:"680000000000000000000","88a2154430c0e41147d3c1fee3b3b006f851edbd":"999972000000000000000","25185f325acf2d64500698f65c769ddf68301602":"5000000000000000000000",e9cafe41a5e8bbd90ba02d9e06585b4eb546c57f:"2000000000000000000000","95681cdae69b2049ce101e325c759892cac3f811":"2857600000000000000000","475066f9ad26655196d5535327bbeb9b7929cb04":"3040000000000000000000","6685fd2e2544702c360b8bb9ee78f130dad16da5":"2000000000000000000000","45e68db94c7d0ab7ac41857a71d67147870f4e71":"400000000000000000000000","4ad95d188d6464709add2555fb4d97fe1ebf311f":"346000000000000000000","73bedd6fda7ba3272185087b6351fc133d484e37":"5057200000000000000000","1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b":"590598000000000000000","77306ffe2e4a8f3ca826c1a249f7212da43aeffd":"20000000000000000000000",eb453f5a3adddd8ab56750fadb0fe7f94d9c89e7:"20000000000000000000","7201d1c06920cd397ae8ad869bcda6e47ffb1b5a":"20000000000000000000","821cb5cd05c7ef909fe1be60733d8963d760dc41":"4000000000000000000000","496e319592b341eaccd778dda7c8196d54cac775":"9250000000000000000000","88609e0a465b6e99fce907166d57e9da0814f5c8":"20000000000000000000000",c7ec62b804b1f69b1e3070b5d362c62fb309b070:"13068074000000000000000","3eb9ef06d0c259040319947e8c7a6812aa0253d8":"167000000000000000000",cbf37ff854a2f1ce53934494777892d3ec655782:"10000000000000000000000","02b1af72339b2a2256389fd64607de24f0de600a":"2000000000000000000000",a8beb91c2b99c8964aa95b6b4a184b1269fc3483:"400000000000000000000","922a20c79a1d3a26dd3829677bf1d45c8f672bb6":"4000000000000000000000",c5843399d150066bf7979c34ba294620368ad7c0:"200000000000000000000","8cd0cd22e620eda79c0461e896c93c44837e2968":"2000000000000000000000","6170dd0687bd55ca88b87adef51cfdc55c4dd458":"2005160000000000000000",eed384ef2d41d9d203974e57c12328ea760e08ea:"1000000000000000000000",b129a5cb7105fe810bd895dc7206a991a4545488:"30000000000000000000","3872f48dc5e3f817bc6b2ad2d030fc5e0471193d":"4000000000000000000000","514b7512c9ae5ea63cbf11715b63f21e18d296c1":"1999944000000000000000","7ab256b204800af20137fabcc916a23258752501":"20000000000000000000000",fc66faba277f4b5de64ad45eb19c31e00ced3ed5:"5640000000000000000000","39824f8bced176fd3ea22ec6a493d0ccc33fc147":"4000000000000000000000",e338e859fe2e8c15554848b75caecda877a0e832:"1801800000000000000000",e53c68796212033e4e6f9cff56e19c461eb454f9:"1000000000000000000000","8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f":"2000000000000000000000","6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a":"57300000000000000000","97de21e421c37fe4b8025f9a51b7b390b5df7804":"80000000000000000000000",d25aecd7eb8bd6345b063b5dbd271c77d3514494:"1820000000000000000000","57b23d6a1adc06c652a779c6a7fb6b95b9fead66":"200000000000000000000","0d658014a199061cf6b39433140303c20ffd4e5a":"8200000000000000000000","30eac740e4f02cb56eef0526e5d300322600d03e":"1970000000000000000000","4eead40aad8c73ef08fc84bc0a92c9092f6a36bf":"26740000000000000000","30f7d025d16f7bee105580486f9f561c7bae3fef":"500000000000000000000","0977bfba038a44fb49b03970d8d8cf2cb61f8b25":"420000000000000000000",b14bbeff70720975dc6191b2a44ff49f2672873c:"143000000000000000000",d588c3a5df228185d98ee7e60748255cdea68b01:"4000000000000000000000","225d35faedb391c7bc2db7fa9071160405996d00":"167774000000000000000",c0e457bd56ec36a1246bfa3230fff38e5926ef22:"1940000000000000000000","2a9c57fe7b6b138a920d676f3c76b6c2a0eef699":"9400000000000000000000","36df8f883c1273ec8a171f7a33cfd649b1fe6075":"227290000000000000000","234f46bab73fe45d31bf87f0a1e0466199f2ebac":"485000000000000000000",a2e1b8aa900e9c139b3fa122354f6156d92a18b1:"500000000000000000000","517cd7608e5d0d83a26b717f3603dac2277dc3a4":"2000000000000000000000","75f7539d309e9039989efe2e8b2dbd865a0df088":"2460000000000000000000","4b792e29683eb586e394bb33526c6001b397999e":"600000000000000000000",a34f9d568bf7afd94c2a5b8a5ff55c66c4087999:"2444000000000000000000","4b31bf41abc75c9ae2cd8f7f35163b6e2b745054":"382000000000000000000",e35453eef2cc3c7a044d0ac134ba615908fa82ee:"147510000000000000000","7aa79ac04316cc8d08f20065baa6d4142897d54e":"1400000000000000000000",f1dc8ac81042c67a9c3c6792b230c46ac016ca10:"200000000000000000000","2bb366b9edcb0da680f0e10b3b6e28748190d6c3":"5799400000000000000000",a567770b6ae320bdde50f904d663e746a61dace6:"2000000000000000000000",d9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9:"5348000000000000000000","27830c5f6023afaaf79745676c204a0faccda0ba":"240000000000000000000","3cb179cb4801a99b95c3b0c324a2bdc101a65360":"26000000000000000000","976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee":"240000000000000000000","752a5ee232612cd3005fb26e5b597de19f776be6":"5460000000000000000000","7d5aa33fc14b51841a06906edb2bb49c2a117269":"300048000000000000000","55ca6abe79ea2497f46fdbb830346010fe469cbe":"5730000000000000000000","6bec311ad05008b4af353c958c40bd06739a3ff3":"16380000000000000000000","30e9698cf1e08a9d048bd8d8048f28be7ed9409f":"6685000000000000000000","9afa536b4c66bc38d875c4b30099d9261fdb38eb":"205981000000000000000","6b63a2dfb2bcd0caec0022b88be30c1451ea56aa":"809021000000000000000",d07be0f90997caf903c8ac1d53cde904fb190741:"1000200000000000000000","893cdddf5377f3c751bf2e541120045a47cba101":"100000000000000000000",c1cdc601f89c0428b31302d187e0dc08ad7d1c57:"6000000000000000000000","8f8acb107607388479f64baaabea8ff007ada97d":"27281800000000000000000","88bc43012edb0ea9f062ac437843250a39b78fbb":"20000000000000000000000",fcfc3a5004d678613f0b36a642269a7f371c3f6a:"1000000000000000000000",f509557e90183fbf0f0651a786487bcc428ba175:"194000000000000000000",e3d915eda3b825d6ee4af9328d32ac18ada35497:"500000000000000000000",f237ef05261c34d79cc22b860de0f17f793c3860:"200000000000000000000",a3a2e319e7d3a1448b5aa2468953160c2dbcba71:"2000000000000000000000","3a368efe4ad786e26395ec9fc6ad698cae29fe01":"632200000000000000000","8e3240b0810e1cf407a500804740cf8d616432a4":"40309000000000000000","5691dd2f6745f20e22d2e1d1b955aa2903d65656":"1969606000000000000000","5f93ff832774db5114c55bb4bf44ccf3b58f903f":"192026650000000000000000","2c1cc6e18c152488ba11c2cc1bcefa2df306abd1":"1670000000000000000000",bde9786a84e75b48f18e726dd78d70e4af3ed802:"5730000000000000000000","79551cede376f747e3716c8d79400d766d2e0195":"46250000000000000000000","49f028395b5a86c9e07f7778630e4c2e3d373a77":"122735000000000000000","6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7":"2000000000000000000000","068e29b3f191c812a6393918f71ab933ae6847f2":"1999944000000000000000","6e64e6129f224e378c0e6e736a7e7a06c211e9ec":"1000000000000000000000",c4c15318d370c73318cc18bdd466dbaa4c6603bf:"19700000000000000000","8035bcffaefdeeea35830c497d14289d362023de":"300000000000000000000",a997dfc7986a27050848fa1c64d7a7d6e07acca2:"143000000000000000000","2fe13a8d0785de8758a5e41876c36e916cf75074":"4000000000000000000000","6f24c9af2b763480515d1b0951bb77a540f1e3f9":"1970000000000000000000","4c23b370fc992bb67cec06e26715b62f0b3a4ac3":"10000000000000000000000","4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039":"2000000000000000000000","117db836377fe15455e02c2ebda40b1ceb551b19":"6000000000000000000000",ef1c0477f1184d60accab374d374557a0a3e10f3:"152000000000000000000","99fe0d201228a753145655d428eb9fd94985d36d":"1939268000000000000000",b3731b046c8ac695a127fd79d0a5d5fa6ae6d12e:"1998000000000000000000",dce30c31f3ca66721ecb213c809aab561d9b52e4:"2000000000000000000000",ddd69c5b9bf5eb5a39cee7c3341a120d973fdb34:"1987730000000000000000","216e41864ef98f060da08ecae19ad1166a17d036":"5730000000000000000000","6a53d41ae4a752b21abed5374649953a513de5e5":"2000000000000000000000","20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5":"2000000000000000000000","19732bf973055dbd91a4533adaa2149a91d38380":"2000000000000000000000","51ea1c0934e3d04022ed9c95a087a150ef705e81":"6280000000000000000000",a0de5c601e696635c698b7ae9ca4539fc7b941ec:"346150000000000000000","94e1f5cb9b8abace03a1a6428256553b690c2355":"20000000000000000000",a539b4a401b584dfe0f344b1b422c65543167e2e:"200000000000000000000","50584d9206a46ce15c301117ee28f15c30e60e75":"13400000000000000000","856eb204241a87830fb229031343dc30854f581a":"1000000000000000000000","9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa":"500000000000000000000","8925da4549e15155e57a628522cea9dddf627d81":"1000070000000000000000",a89df34859edd7c820db887740d8ff9e15157c7b:"2000000000000000000000",ad9f4c890a3b511cee51dfe6cfd7f1093b76412c:"506600000000000000000",f8c7f34a38b31801da43063477b12b27d0f203ff:"494800000000000000000",a642501004c90ea9c9ed1998ba140a4cd62c6f5f:"250543000000000000000","508cf19119db70aa86454253da764a2cb1b2be1a":"1000000000000000000000","2979741174a8c1ea0b7f9edf658177859417f512":"461283000000000000000","654f524847b3a6acc0d3d5f1f362b603edf65f96":"8000000000000000000000","5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c":"1000000000000000000000","17e82e7078dc4fd9e879fb8a50667f53a5c54591":"200000000000000000000","8b07d050754dc9ba230db01c310afdb5395aa1b3":"118080000000000000000","5f77a107ab1226b3f95f10ee83aefc6c5dff3edc":"500000000000000000000","475a6193572d4a4e59d7be09cb960ddd8c530e2f":"667323000000000000000","6470a4f92ec6b0fccd01234fa59023e9ff1f3aac":"3000000000000000000000","2fbcef3384d420e4bf61a0669990bc7054f1a5af":"2000000000000000000000",bbabf6643beb4bd01c120bd0598a0987d82967d1:"3342500000000000000000","41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2":"2009400000000000000000",fb9473cf7712350a1fa0395273fc80560752e4fb:"123300000000000000000","38b2197106123387a0d4de368431a8bacdda30e2":"20000000000000000000","5ed56115bd6505a88273df5c56839470d24a2db7":"65601000000000000000","523f6d64690fdacd942853591bb0ff20d3656d95":"1820000000000000000000","55caff4bba04d220c9a5d2018672ec85e31ef83e":"2000000000000000000000","65af8d8b5b1d1eedfa77bcbc96c1b133f83306df":"98000000000000000000","7456c5b2c5436e3e571008933f1805ccfe34e9ec":"1000000000000000000000",a6eebbe464d39187bf80ca9c13d72027ec5ba8be:"3000000000000000000000",dd35cfdbcb993395537aecc9f59085a8d5ddb6f5:"1000000000000000000000","98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da":"901520000000000000000","860f5ffc10de767ded807f71e861d647dfd219b1":"10000000000000000000000","1a644a50cbc2aee823bd2bf243e825be4d47df02":"100007000000000000000",a8455b411765d6901e311e726403091e42c56683:"3380000000000000000000","3a86ee94862b743dd34f410969d94e2c5652d4ad":"201610000000000000000",a57360f002e0d64d2d74457d8ca4857ee00bcddf:"335780000000000000000",e59b3bd300893f97233ef947c46f7217e392f7e9:"1000000000000000000000","9f3a74fd5e7edcc1162993171381cbb632b7cff0":"10000000000000000000000","675d5caa609bf70a18aca580465d8fb7310d1bbb":"20000000000000000000000","77f609ca8720a023262c55c46f2d26fb3930ac69":"17300000000000000000",f8ac4a39b53c11307820973b441365cffe596f66:"2000000000000000000000","112634b4ec30ff786e024159f796a57939ea144e":"1999944000000000000000","49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a":"1474134000000000000000","91cc46aa379f856a6640dccd5a648a7902f849d9":"200000000000000000000",b46440c797a556e04c7d9104660491f96bb076bf:"14900000000000000000",e5968797468ef767101b761d431fce14abffdbb4:"8040000000000000000000",c0895efd056d9a3a81c3da578ada311bfb9356cf:"200000000000000000000","76846f0de03b5a76971ead298cdd08843a4bc6c6":"15500000000000000000","5f708eaf39d823946c51b3a3e9b7b3c003e26341":"1820000000000000000000","24f7450ddbf18b020feb1a2032d9d54b633edf37":"50000000000000000000",cae3a253bcb2cf4e13ba80c298ab0402da7c2aa0:"5400000000000000000000","91e8810652e8e6161525d63bb7751dc20f676076":"725000000000000000000","543629c95cdef428ad37d453ca9538a9f90900ac":"43250000000000000000000","6e79edd4845b076e4cd88d188b6e432dd93f35aa":"955000000000000000000",bd325d4029e0d8729f6d399c478224ae9e7ae41e:"3880000000000000000000","42cecfd2921079c2d7df3f08b07aa3beee5e219a":"1000000000000000000000","3690246ba3c80679e22eac4412a1aefce6d7cd82":"20000000000000000000000","577aeee8d4bc08fc97ab156ed57fb970925366be":"333046000000000000000",fe00bf439911a553982db638039245bcf032dbdc:"394000000000000000000","91f624b24a1fa5a056fe571229e7379db14b9a1e":"11999974000000000000000",f206d328e471d0117b246d2a4619827709e96df3:"3001000000000000000000","073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05":"70400000000000000000",f56048dd2181d4a36f64fcecc6215481e42abc15:"200000000000000000000",ef76a4cd8febcbc9b818f17828f8d93473f3f3cb:"4000000000000000000000","1031e0ecb54985ae21af1793950dc811888fde7c":"20000000000000000000","8e0fee38685a94aabcd7ce857b6b1409824f75b8":"500000000000000000000",f0cbef84e169630098d4e301b20208ef05846ac9:"259084000000000000000",bbca65b3266ea2fb73a03f921635f912c7bede00:"1970000000000000000000","0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd":"200000000000000000000",b8f30758faa808dbc919aa7b425ec922b93b8129:"1000076000000000000000","936dcf000194e3bff50ac5b4243a3ba014d661d8":"10000000000000000000000",b14ddb0386fb606398b8cc47565afae00ff1d66a:"2973024000000000000000","2ec95822eb887bc113b4712a4dfd7f13b097b5e7":"1000000000000000000000","0136a5af6c3299c6b5f005fdaddb148c070b299b":"20368000000000000000","37cb868d2c3f95b257611eb34a4188d58b749802":"2000000000000000000000",cd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d:"1148000000000000000000",b5fa8184e43ed3e0b8ab91216461b3528d84fd09:"2680000000000000000000","3dbf0dbfd77890800533f09dea8301b9f025d2a6":"1000000000000000000000",b553d25d6b5421e81c2ad05e0b8ba751f8f010e3:"2000000000000000000000",dbf8b13967f55125272de0562536c450ba5655a0:"2046830000000000000000","0f6e840a3f2a24647d8e43e09d45c7c335df4248":"2500000000000000000000",fa2fd29d03fee9a07893df3a269f56b72f2e1e64:"10000000000000000000000","8b57b2bc83cc8d4de331204e893f2f3b1db1079a":"40000000000000000000","7f541491d2ac00d2612f94aa7f0bcb014651fbd4":"376000000000000000000","4f4a9be10cd5d3fb5de48c17be296f895690645b":"40000000000000000000000","45d1c9eedf7cab41a779057b79395f5428d80528":"2000000000000000000000","662334814724935b7931ddca6100e00d467727cd":"637000000000000000000","2c52c984102ee0cd3e31821b84d408930efa1ac7":"2000000000000000000000","000d836201318ec6899a67540690382780743280":"200000000000000000000","81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b":"101600000000000000000","7860a3de38df382ae4a4dce18c0c07b98bce3dfa":"1000000000000000000000","5e8e4df18cf0af770978a8df8dac90931510a679":"2000000000000000000000","05d68dad61d3bbdfb3f779265c49474aff3fcd30":"39399000000000000000","96eafbf2fb6f4db9a436a74c45b5654452e23819":"20000000000000000000",d7d7f2caa462a41b3b30a34aeb3ba61010e2626f:"2000000000000000000000","0b71f554122469ef978e2f1fefd7cbb410982772":"3880000000000000000000","504666ce8931175e11a5ed11c1dcaa06e57f4e66":"11792000000000000000000",d00f067286c0fbd082f9f4a61083ec76deb3cee6:"1000000000000000000000","02e4cb22be46258a40e16d4338d802fffd00c151":"379786000000000000000","1c13d38637b9a47ce79d37a86f50fb409c060728":"1337000000000000000000",e30212b2011bb56bdbf1bc35690f3a4e0fd905ea:"8022000000000000000000","1df6911672679bb0ef3509038c0c27e394fdfe30":"540000000000000000000","2b8fe4166e23d11963c0932b8ade8e0145ea0770":"43250000000000000000000","6509eeb1347e842ffb413e37155e2cbc738273fd":"2000000000000000000000","8b7e9f6f05f7e36476a16e3e7100c9031cf404af":"1000000000000000000000",bec8caf7ee49468fee552eff3ac5234eb9b17d42:"2000000000000000000000","38898bbb4553e00bbfd0cf268b2fc464d154add5":"320000000000000000000",cbb3189e4bd7f45f178b1c30c76e26314d4a4b0a:"295007000000000000000",be1cd7f4c472070968f3bde268366b21eeea8321:"4300000000000000000000","976a18536af41874426308871bcd1512a775c9f8":"10000000000000000000000",e9c758f8da41e3346e4350e5ac3976345c6c1082:"1930050000000000000000","64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9":"200000000000000000000","9e01765aff08bc220550aca5ea2e1ce8e5b09923":"1000000000000000000000",ba0f39023bdb29eb1862a9f9059cab5d306e662f:"2000000000000000000000","2baf8d6e221174124820ee492b9459ec4fadafbb":"2000000000000000000000","655d5cd7489629e2413c2105b5a172d933c27af8":"4040060000000000000000",badc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739:"6000000000000000000000",e64f6e1d6401b56c076b64a1b0867d0b2f310d4e:"51570000000000000000","7a8563867901206f3f2bf0fa3e1c8109cabccd85":"137000000000000000000",d17fbe22d90462ed37280670a2ea0b3086a0d6d6:"199955000000000000000",e96d7d4cdd15553a4e4d316d6d6480ca3cea1e38:"12200000000000000000000",f04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f:"1000000000000000000000","81164deb10814ae08391f32c08667b6248c27d7a":"394000000000000000000","7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997":"60000000000000000000",c982586d63b0d74c201b1af8418372e30c7616be:"100000000000000000000","64cf0935bf19d2cebbecd8780d27d2e2b2c34166":"1970000000000000000000",cd566ad7b883f01fd3998a9a58a9dee4724ddca5:"58848000000000000000","9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e":"1200000000000000000000","0d69100c395ce6c5eaadf95d05d872837ededd21":"400000000000000000000",fe91eccf2bd566afa11696c5049fa84c69630a52:"1940000000000000000000","005d0ee8155ec0a6ff6808552ca5f16bb5be323a":"197000000000000000000","3e5cb8928c417825c03a3bfcc52183e5c91e42d7":"4264790000000000000000","9c1b771f09af882af0643083de2aa79dc097c40e":"2480000000000000000000",eba388b0da27c87b1cc0eac6c57b2c5a0b459c1a:"6800000000000000000000","7529f3797bb6a20f7ea6492419c84c867641d81c":"2000000000000000000000","532a7da0a5ad7407468d3be8e07e69c7dd64e861":"500000000000000000000",de82cc8d4a1bb1d9434392965b3e80bad3c03d4f:"1477500000000000000000","4a82694fa29d9e213202a1a209285df6e745c209":"4000000000000000000000","3e53ff2107a8debe3328493a92a586a7e1f49758":"23143470000000000000000",b2ddb786d3794e270187d0451ad6c8b79e0e8745:"400000000000000000000","6ebcf9957f5fc5e985add475223b04b8c14a7aed":"1730000000000000000000",c5c7590b5621ecf8358588de9b6890f2626143f1:"3000000000000000000000",ae4f122e35c0b1d1e4069291457c83c07f965fa3:"1000000000000000000000","47885ababedf4d928e1c3c71d7ca40d563ed595f":"1820000000000000000000","78ce3e3d474a8a047b92c41542242d0a08c70f99":"10000000000000000000000","6134d942f037f2cc3d424a230c603d67abd3edf7":"2000000000000000000000","1360e87df24c69ee6d51c76e73767ffe19a2131c":"92000000000000000000","5fd1c3e31778276cb42ea740f5eae9c641dbc701":"194000000000000000000","98397342ec5f3d4cb877e54ef5d6f1d366731bd4":"5910000000000000000000","6d4b5c05d06a20957e1748ab6df206f343f92f01":"10020475000000000000000",e6115b13f9795f7e956502d5074567dab945ce6b:"100000000000000000000000","23730c357a91026e44b1d0e2fc2a51d071d8d77b":"4000000000000000000000",fae881937047895a660cf229760f27e66828d643:"182000000000000000000",ff3ef6ba151c21b59986ae64f6e8228bc9a2c733:"2000000000000000000000",dfbd4232c17c407a980db87ffbcda03630e5c459:"553150000000000000000","4429a29fee198450672c0c1d073162250bec6474":"999200000000000000000","7e8f96cc29f57b0975120cb593b7dd833d606b53":"197000000000000000000","5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b":"0",daa776a6754469d7b9267a89b86725e740da0fa0:"1970000000000000000000","139e479764b499d666208c4a8a047a97043163dd":"598880000000000000000","5ad5e420755613886f35aa56ac403eebdfe4b0d0":"80000000000000000000000","3fe801e61335c5140dc7eda2ef5204460a501230":"2000000000000000000000",ce8a6b6d5033b1498b1ffeb41a41550405fa03a2:"4000000000000000000000","26c2ffc30efdc5273e76183a16c2698d6e531286":"776000000000000000000","71ec3aec3f8f9221f9149fede06903a0f9a232f2":"200000000000000000000",ef35f6d4b1075e6aa139151c974b2f4658f70538:"1111111000000000000000","26a68eab905a8b3dce00e317308225dab1b9f6b8":"1980000000000000000000","63f5b53d79bf2e411489526530223845fac6f601":"30000000000000000000000","481115296ab7db52492ff7b647d63329fb5cbc6b":"16100000000000000000000",f19f193508393e4d2a127b20b2031f39c82581c6:"3500088000000000000000","500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c":"5348000000000000000000","65ea67ad3fb56ad5fb94387dd38eb383001d7c68":"100000000000000000000","7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5":"1970000000000000000000","60be6f953f2a4d25b6256ffd2423ac1438252e4e":"150000000000000000000",ac1dfc984b71a19929a81d81f04a7cbb14073703:"600000000000000000000",a3c14ace28b192cbb062145fcbbd5869c67271f6:"8000000000000000000000","2da76b7c39b420e388ba2c1020b0856b0270648a":"2000000000000000000000","622be4b45495fcd93143efc412d699d6cdc23dc5":"17300000000000000000",d3f873bd9956135789ab00ebc195b922e94b259d:"2000000000000000000000","975f3764e97bbccf767cbd3b795ba86d8ba9840e":"346000000000000000000",fc39be41094b1997d2169e8264c2c3baa6c99bc4:"2000000000000000000000","12ffc1128605cb0c13709a7290506f2690977193":"3340000000000000000000","9b1168de8ab64b47552f3389800a9cc08b4666cf":"1730000000000000000000","9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0":"500000000000000000000","505a33a18634dd4800693c67f48a1d693d4833f8":"7252000000000000000000",d08fc09a0030fd0928cd321198580182a76aae9f:"1000000000000000000000","6acddca3cd2b4990e25cd65c24149d0912099e79":"3000037000000000000000","397a6ef8763a18f00fac217e055c0d3094101011":"2000000000000000000000","4e0bd32473c4c51bf25654def69f797c6b29a232":"1600930000000000000000","28d8c35fb7eea622582135e3ad47a227c9a663bd":"18200000000000000000",f96488698590dc3b2c555642b871348dfa067ad5:"500000000000000000000","4eebe80cb6f3ae5904f6f4b28d907f907189fcab":"1999944000000000000000","8d1abd897dacd4312e18080c88fb9647eab44052":"216000000000000000000","457029c469c4548d168cec3e65872e4428d42b67":"2000000000000000000000","1296acded1e063af39fe8ba0b4b63df789f70517":"100014000000000000000","71762c63678c18d1c6378ce068e666381315147e":"2000000000000000000000","6cc1c878fa6cde8a9a0b8311247e741e4642fe6d":"985000000000000000000","8d9ed7f4553058c26f7836a3802d3064eb1b363d":"90000000000000000000","5032e4bcf7932b49fdba377b6f1499636513cfc3":"100000000000000000000","462b678b51b584f3ed7ada070b5cd99c0bf7b87f":"100000000000000000000",c8aa49e3809f0899f28ab57e6743709d58419033:"880000000000000000000","01b1cae91a3b9559afb33cdc6d689442fdbfe037":"200000000000000000000",b1043004ec1941a8cf4f2b00b15700ddac6ff17e:"1000000000000000000000","5ba2c6c35dfaec296826591904d544464aeabd5e":"20000000000000000000",b32400fd13c5500917cb037b29fe22e7d5228f2d:"40000000000000000000000",d59d92d2c8701980cc073c375d720af064743c0c:"19000000000000000000000","11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2":"1000000000000000000000",d4cb21e590c5a0e06801366aff342c7d7db16424:"494000000000000000000","5b6d55f6712967405c659129f4b1de09acf2cb7b":"267400000000000000000","6179979907fe7f037e4c38029d60bcbab832b3d6":"1610000000000000000000","33c407133b84b3ca4c3ded1f4658900c38101624":"2800000000000000000000",cd2a36d753e9e0ed012a584d716807587b41d56a:"261400000000000000000","8155fa6c51eb31d808412d748aa086105018122f":"1880000000000000000000","3ecc8e1668dde995dc570fe414f44211c534a615":"2000000000000000000000",d6395db5a4bb66e60f4cfbcdf0057bb4d97862e2:"910000000000000000000",b6fb39786250081426a342c70d47ee521e5bc563:"15000000000000000000000","510eda5601499a0d5e1a006bfffd833672f2e267":"2000000000000000000000","98c19dba810ba611e68f2f83ee16f6e7744f0c1f":"200000000000000000000","34ff26eb60a8d1a95a489fae136ee91d4e58084c":"600000000000000000000","6ad90be252d9cd464d998125fab693060ba8e429":"4000000000000000000000","038323b184cff7a82ae2e1bda7793fe4319ca0bf":"20000000000000000000000",dc5305b4020a06b49d657c7ca34c35c91c5f2c56:"7045990000000000000000",c9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f:"2000000000000000000000","7beb81fb2f5e91526b2ac9795e76c69bcff04bc0":"69400000000000000000000",b8bc9bca7f71b4ed12e620438d620f53c114342f:"500000000000000000000",d288e7cb7ba9f620ab0f7452e508633d1c5aa276:"4000000000000000000000",a2e460a989cb15565f9ecca7d121a18e4eb405b6:"2000000000000000000000","7489cc8abe75cda4ef0d01cef2605e47eda67ab1":"133700000000000000000","38b403fb1fb7c14559a2d6f6564a5552bca39aff":"2000000000000000000000",e55c80520a1b0f755b9a2cd3ce214f7625653e8a:"2000000000000000000000","451b7070259bdba27100e36e23428a53dfe304e9":"13370000000000000000","8b5c914b128bf1695c088923fa467e7911f351fa":"98500000000000000000","17df49518d73b129f0da36b1c9b40cb66420fdc7":"10000000000000000000000",c1950543554d8a713003f662bb612c10ad4cdf21:"18200000000000000000",fa7606435b356cee257bd2fcd3d9eacb3cd1c4e1:"100000000000000000000",e0bad98eee9698dbf6d76085b7923de5754e906d:"167000000000000000000",ce53c8cdd74296aca987b2bc19c2b875a48749d0:"3000000000000000000000",d0c55abf976fdc3db2afe9be99d499484d576c02:"1000000000000000000000","238a6b7635252f5244486c0af0a73a207385e039":"1370000000000000000000",ceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec:"740745000000000000000","3847667038f33b01c1cc795d8daf5475eff5a0d4":"728330000000000000000",a08d215b5b6aac4861a281ac7e400b78fef04cbf:"20000000000000000000","2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73":"185000000000000000000","9e8f64ddcde9b8b451bafaa235a9bf511a25ac91":"2674000000000000000000",ddac6bf4bbdd7d597d9c686d0695593bedccc7fa:"865000000000000000000","22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd":"160000000000000000000","3aea4e82d2400248f99871a41ca257060d3a221b":"1000000000000000000000",fb126f0ec769f49dcefca2f200286451583084b8:"5013750000000000000000","1b8bd6d2eca20185a78e7d98e8e185678dac4830":"16700000000000000000000","664cd67dccc9ac8228b45c55db8d76550b659cdc":"394000000000000000000","553f37d92466550e9fd775ae74362df030179132":"2000000000000000000000","730d8763c6a4fd824ab8b859161ef7e3a96a1200":"20000000000000000000000","04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3":"100000000000000000000",f1624d980b65336feac5a6d54125005cfcf2aacb:"2000000000000000000000","0b7fc9ddf70576f6330669eaaa71b6a831e99528":"140000000000000000000",fa2bbca15d3fe39f8a328e91f90da14f7ac6253d:"200000000000000000000","07feef54c136850829badc4b49c3f2a73c89fb9e":"118200000000000000000","3703350c4d6fe337342cddc65bf1e2386bf3f9b2":"2020000000000000000000","6d7d1c949511f88303808c60c5ea0640fcc02683":"10000000000000000000000","34fa7792bad8bbd7ff64056214a33eb6600c1ea8":"50000000000000000000","994cc2b5227ec3cf048512467c41b7b7b748909f":"2000000000000000000000","08da3a7a0f452161cfbcec311bb68ebfdee17e88":"2000000000000000000000",bbb4ee1d82f2e156442cc93338a2fc286fa28864:"1370000000000000000000","7a2dfc770e24368131b7847795f203f3d50d5b56":"11400000000000000000000","7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88":"1910000000000000000000",c6a30ef5bb3320f40dc5e981230d52ae3ac19322:"182000000000000000000","6a74844d8e9cb5581c45079a2e94462a6cee8821":"1082970000000000000000",c3110be01dc9734cfc6e1ce07f87d77d1345b7e1:"4999998000000000000000",aeb916ebf49d0f86c13f7331cef19e129937512d:"599908000000000000000","3e5abd09ce5af7ba8487c359e0f2a93a986b0b18":"10000000000000000000000",cdd60d73efaad873c9bbfb178ca1b7105a81a681:"32000000000000000000","31eb123c95c82bf685ace7a75a1881a289efca10":"920034000000000000000","86e8670e27598ea09c3899ab7711d3b9fe901c17":"200000000000000000000",a144f6b60f72d64a21e330dadb62d8990ade2b09:"1000000000000000000000","68883e152e5660fee59626e7e3b4f05110e6222f":"54683300000000000000000",fe4249127950e2f896ec0e7e2e3d055aab10550f:"668500000000000000000","403d53cf620f0922b417848dee96c190b5bc8271":"9850000000000000000000",bec2e6de39c07c2bae556acfbee2c4728b9982e3:"573000000000000000000",f3c4716d1ee5279a86d0163a14618181e16136c7:"1000000000000000000000",e38ef28a5ed984a7db24a1ae782dfb87f397dfc6:"143000000000000000000","30fbe5885f9fcce9ea5edb82ed4a1196dd259aed":"5200000000000000000000","48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e":"120000000000000000000",b8d5c324a8209d7c8049d0d4aede02ba80ab578b:"16889329000000000000000","43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6":"6000000000000000000000",f9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4:"2000000000000000000000","0e21af1b8dbf27fcf63f37e047b87a825cbe7c27":"3000000000000000000000","1c35aab688a0cd8ef82e76541ba7ac39527f743b":"500000000000000000000","91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1":"401880000000000000000","4ba53ab549e2016dfa223c9ed5a38fad91288d07":"1400000000000000000000","99a4de19ded79008cfdcd45d014d2e584b8914a8":"1500000000000000000000","4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98":"150000000000000000000","9a633fcd112cceeb765fe0418170732a9705e79c":"18200000000000000000","292f228b0a94748c8eec612d246f989363e08f08":"185000000000000000000","9f3497f5ef5fe63095836c004eb9ce02e9013b4b":"633424000000000000000","0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394":"12000000000000000000000","74ebf4425646e6cf81b109ce7bf4a2a63d84815f":"40000000000000000000","8ce5e3b5f591d5eca38abf228f2e3c35134bdac0":"2319920000000000000000","90c41eba008e20cbe927f346603fc88698125969":"42000000000000000000","382ba76db41b75606dd48a48f0137e9174e031b6":"20000000000000000000","5d24bdbc1c47f0eb83d128cae48ac33c4817e91f":"1000000000000000000000",a64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9:"143000000000000000000",a18360e985f2062e8f8efe02ad2cbc91ad9a5aad:"3000000000000000000000",d251f903ae18727259eee841a189a1f569a5fd76:"10000000000000000000000",efa6b1f0db603537826891b8b4bc163984bb40cd:"985000000000000000000","47fff42c678551d141eb75a6ee398117df3e4a8d":"100010000000000000000",f2294adbb6f0dcc76e632ebef48ab49f124dbba4:"1443690000000000000000","53700d53254d430f22781a4a76a463933b5d6b08":"1970000000000000000000",b14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2:"8000000000000000000000","9ed4e63f526542d44fddd34d59cd25388ffd6bda":"3885000000000000000000","4cac91fb83a147d2f76c3267984b910a79933348":"2167000000000000000000","9b32cf4f5115f4b34a00a64c617de06387354323":"105501000000000000000",b8bedd576a4b4c2027da735a5bc3f533252a1808:"2000000000000000000000",c5a3b98e4593fea0b38c4f455a5065f051a2f815:"20309030000000000000000",eaf52388546ec35aca6f6c6393d8d609de3a4bf3:"20000000000000000000","4c423c76930d07f93c47a5cc4f615745c45a9d72":"100000000000000000000","9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e":"267400000000000000000","2bade91d154517620fd4b439ac97157a4102a9f7":"4000000000000000000000",da698d64c65c7f2b2c7253059cd3d181d899b6b7:"295500000000000000000",c6d8954e8f3fc533d2d230ff025cb4dce14f3426:"400000000000000000000","349a816b17ab3d27bbc0ae0051f6a070be1ff29d":"10000000000000000000000",ff4d9c8484c43c42ff2c5ab759996498d323994d:"4000000000000000000000","22944fbca9b57963084eb84df7c85fb9bcdfb856":"4649845000000000000000",bfd93c90c29c07bc5fb5fc49aeea55a40e134f35:"28000000000000000000000","3caedb5319fe806543c56e5021d372f71be9062e":"40000000000000000000000","9a079c92a629ca15c8cafa2eb28d5bc17af82811":"500000000000000000000","7d2a52a7cf0c8436a8e007976b6c26b7229d1e15":"438040000000000000000",cf89f7460ba3dfe83c5a1d3a019ee1250f242f0f:"985177000000000000000","577bfe64e3a1e3800e94db1c6c184d8dc8aafc66":"1498000000000000000000","7ffd02ed370c7060b2ae53c078c8012190dfbb75":"10000000000000000000000","90b62f131a5f29b45571513ee7a74a8f0b232202":"158000000000000000000","6e8212b722afd408a7a73ed3e2395ee6454a0330":"159000000000000000000","515f30bc90cdf4577ee47d65d785fbe2e837c6bc":"10166128000000000000000",c27376f45d21e15ede3b26f2655fcee02ccc0f2a:"20000000000000000000","3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f":"2000000000000000000000","25259d975a21d83ae30e33f800f53f37dfa01938":"20000000000000000000","8ed143701f2f72280fd04a7b4164281979ea87c9":"14000000000000000000","5ac99ad7816ae9020ff8adf79fa9869b7cea6601":"21000000000000000000000",f51fded80acb502890e87369741f3722514cefff:"20000042000000000000000",f657fcbe682eb4e8db152ecf892456000b513d15:"1940000000000000000000","62c37c52b97f4b040b1aa391d6dec152893c4707":"1000000000000000000000","89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e":"2955000000000000000000","53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183":"20000000000000000000","56f493a3d108aaa2d18d98922f8efe1662cfb73d":"2020000000000000000000",e9458f68bb272cb5673a04f781b403556fd3a387:"61000000000000000000",be525a33ea916177f17283fca29e8b350b7f530b:"2638000000000000000000","4feb846be43041fd6b34202897943e3f21cb7f04":"83226000000000000000","15aa530dc36958b4edb38eee6dd9e3c77d4c9145":"2000000000000000000000","2458d6555ff98a129cce4037953d00206eff4287":"197000000000000000000","8035fe4e6b6af27ae492a578515e9d39fa6fa65b":"4000000000000000000000","296b71c0015819c242a7861e6ff7eded8a5f71e3":"1999800000000000000000","8f1952eed1c548d9ee9b97d0169a07933be69f63":"1000000000000000000000",a421dbb89b3a07419084ad10c3c15dfe9b32d0c2:"20000000000000000000000","554336ee4ea155f9f24f87bca9ca72e253e12cd2":"100000000000000000000",ffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74:"2000000000000000000000",ea2c197d26e98b0da83e1b72c787618c979d3db0:"19700000000000000000","96aa573fed2f233410dbae5180145b23c31a02f0":"1730000000000000000000",c23b2f921ce4a37a259ee4ad8b2158d15d664f59:"25403000000000000000",d874b9dfae456a929ba3b1a27e572c9b2cecdfb3:"170000000000000000000",bf8b8005d636a49664f74275ef42438acd65ac91:"200000000000000000000","441a52001661fac718b2d7b351b7c6fb521a7afd":"400000000000000000000","812a55c43caedc597218379000ce510d548836fd":"18200000000000000000","5e90c85877198756b0366c0e17b28e52b446505a":"374288000000000000000",da3017c150dd0dce7fcf881b0a48d0d1c756c4c7:"100014000000000000000","6baf7a2a02ae78801e8904ad7ac05108fc56cff6":"1000000000000000000000","177dae78bc0113d8d39c4402f2a641ae2a105ab8":"1818320000000000000000","01b5b5bc5a117fa08b34ed1db9440608597ac548":"200000000000000000000",aae732eda65988c3a00c7f472f351c463b1c968e:"2000000000000000000000",d95342953c8a21e8b635eefac7819bea30f17047:"94160000000000000000000","8d616b1eee77eef6f176e0698db3c0c141b2fc8f":"500000000000000000000","12d20790b7d3dbd88c81a279b812039e8a603bd0":"1604400000000000000000","3734cb187491ede713ae5b3b2d12284af46b8101":"3000000000000000000000",dd967c4c5f8ae47e266fb416aad1964ee3e7e8c3:"7750000000000000000000","3dcef19c868b15d34eda426ec7e04b18b6017002":"1999800000000000000000",ce9d21c692cd3c01f2011f505f870036fa8f6cd2:"400000000000000000000",d44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4:"10000000000000000000000",b424d68d9d0d00cec1938c854e15ffb880ba0170:"200000000000000000000","1f2186ded23e0cf9521694e4e164593e690a9685":"300000000000000000000","7f4b5e278578c046cceaf65730a0e068329ed5b6":"1880000000000000000000","8c50aa2a9212bcde56418ae261f0b35e7a9dbb82":"400000000000000000000","1953313e2ad746239cb2270f48af34d8bb9c4465":"2000000000000000000000",a15025f595acdbf3110f77c5bf24477e6548f9e8:"2000000000000000000000","53af32c22fef99803f178cf90b802fb571c61cb9":"3880000000000000000000",d0a8abd80a199b54b08b65f01d209c27fef0115b:"6525979000000000000000","2b68306ba7f8daaf73f4c644ef7d2743c0f26856":"864800000000000000000","96924191b7df655b3319dc6d6137f481a73a0ff3":"4020000000000000000000","6fa72015fa78696efd9a86174f7f1f21019286b1":"1337000000000000000000","0b119df99c6b8de58a1e2c3f297a6744bf552277":"2000000000000000000000","61733947fab820dbd351efd67855ea0e881373a0":"20000000000000000000","8ae6f80b70e1f23c91fbd5a966b0e499d95df832":"197000000000000000000","01a7d9fa7d0eb1185c67e54da83c2e75db69e39f":"7623900000000000000000","9932ef1c85b75a9b2a80057d508734c51085becc":"50170000000000000000",aefcfe88c826ccf131d54eb4ea9eb80e61e1ee25:"340000000000000000000",c21fa6643a1f14c02996ad7144b75926e87ecb4b:"20000000000000000000000","97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed":"2000000000000000000000","3cafaf5e62505615068af8eb22a13ad8a9e55070":"1999600000000000000000","22f2dcff5ad78c3eb6850b5cb951127b659522e6":"13700000000000000000",aaad1baade5af04e2b17439e935987bf8c2bb4b9:"2000000000000000000000","298887bab57c5ba4f0615229d7525fa113b7ea89":"40000000000000000000","7539333046deb1ef3c4daf50619993f444e1de68":"1182000000000000000000","9752d14f5e1093f071711c1adbc4e3eb1e5c57f3":"2000000000000000000000",ed641e06368fb0efaa1703e01fe48f4a685309eb:"200000000000000000000",d0ee4d02cf24382c3090d3e99560de3678735cdf:"2400000000000000000000","47e25df8822538a8596b28c637896b4d143c351d":"80500000000000000000000","559706c332d20779c45f8a6d046a699159b74921":"380123000000000000000","3a4da78dce05aeb87de9aead9185726da1926798":"200000000000000000000","3041445a33ba158741160d9c344eb88e5c306f94":"60000000000000000000","08d4311c9c1bbaf87fabe1a1d01463828d5d98ce":"90000000000000000000000","6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f":"1000000000000000000000","29eaae82761762f4d2db53a9c68b0f6b0b6d4e66":"2000000000000000000000","0b7d339371e5be6727e6e331b5821fa24bdb9d5a":"857738000000000000000","4714cfa4f46bd6bd70737d75878197e08f88e631":"11792000000000000000000",ad92ca066edb7c711dfc5b166192d1edf8e77185:"36000000000000000000000",f97b56ebd5b77abc9fbacbabd494b9d2c221cd03:"1970000000000000000000","591bef3171d1c5957717a4e98d17eb142c214e56":"20000000000000000000000","899b3c249f0c4b81df75d212004d3d6d952fd223":"2000000000000000000000",a819d2ece122e028c8e8a04a064d02b9029b08b9:"1000000000000000000000",e341642d40d2afce2e9107c67079ac7a2660086c:"400000000000000000000","0329188f080657ab3a2afa522467178279832085":"216700000000000000000","03317826d1f70aa4bddfa09be0c4105552d2358b":"38800000000000000000","3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d":"1790000000000000000000","93c88e2d88621e30f58a9586bed4098999eb67dd":"31200000000000000000000",cd1e66ed539dd92fc40bbaa1fa16de8c02c14d45:"230000000000000000000",e6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e:"334250000000000000000","50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f":"26030000000000000000","4f64a85e8e9a40498c0c75fceb0337fb49083e5e":"1000000000000000000000","4b29437c97b4a844be71cca3b648d4ca0fdd9ba4":"150200000000000000000","1eee6cbee4fe96ad615a9cf5857a647940df8c78":"19400000000000000000","29f0edc60338e7112085a1d114da8c42ce8f55d6":"2958000000000000000000","23b1c4917fbd93ee3d48389306957384a5496cbf":"4000086000000000000000","1767525c5f5a22ed80e9d4d7710f0362d29efa33":"400000000000000000000","3064899a963c4779cbf613cd6980846af1e6ec65":"6999908000000000000000","68531f4dda808f5320767a03113428ca0ce2f389":"19400000000000000000","1db9ac9a9eaeec0a523757050c71f47278c72d50":"1337000000000000000000","7592c69d067b51b6cc639d1164d5578c60d2d244":"20000000000000000000",cf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c:"1063120000000000000000","8efec058cc546157766a632775404a334aaada87":"1999000000000000000000",faf5f0b7b6d558f5090d9ea1fb2d42259c586078:"6401000000000000000000","19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e":"2000000000000000000000","6e8a26689f7a2fdefd009cbaaa5310253450daba":"2049982000000000000000",e2f40d358f5e3fe7463ec70480bd2ed398a7063b:"20000000000000000000",fa19d6f7a50f4f079893d167bf14e21d0073d196:"530000000000000000000","3e2ca0d234baf607ad466a1b85f4a6488ef00ae7":"89505000000000000000",f8a49ca2390c1f6d5c0e62513b079571743f7cc6:"3000000000000000000000","5d3f3b1f7130b0bb21a0fd32396239179a25657f":"62474000000000000000000",f332c0f3e05a27d9126fd0b641a8c2d4060608fd:"5001041000000000000000",e304a32f05a83762744a9542976ff9b723fa31ea:"1576256000000000000000",f768f321fd6433d96b4f354d3cc1652c1732f57f:"10000000000000000000000","147af46ae9ccd18bb35ca01b353b51990e49dce1":"4000000000000000000000","21eae6feffa9fbf4cd874f4739ace530ccbe5937":"5000000000000000000000","6994fb3231d7e41d491a9d68d1fa4cae2cc15960":"4000000000000000000000","51126446ab3d8032557e8eba65597d75fadc815c":"322000000000000000000","24daaaddf7b06bbcea9b80590085a88567682b4e":"319008000000000000000",cd020f8edfcf524798a9b73a640334bbf72f80a5:"133700000000000000000","56febf9e1003af15b1bd4907ec089a4a1b91d268":"200000000000000000000","3c79c863c3d372b3ff0c6f452734a7f97042d706":"176000000000000000000",e1203eb3a723e99c2220117ca6afeb66fa424f61:"9461996000000000000000","18fb09188f27f1038e654031924f628a2106703d":"2000000000000000000000","2eba0c6ee5a1145c1c573984963a605d880a7a20":"500000000000000000000","4cefbe2398e47d52e78db4334c8b697675f193ae":"4011000000000000000000",c02471e3fc2ea0532615a7571d493289c13c36ef:"20000000000000000000",ba469aa5c386b19295d4a1b5473b540353390c85:"2000000000000000000000","7b11673cc019626b290cbdce26046f7e6d141e21":"500000000000000000000","26784ade91c8a83a8e39658c8d8277413ccc9954":"6000000000000000000000","57d3df804f2beee6ef53ab94cb3ee9cf524a18d3":"393606000000000000000",ccae0d3d852a7da3860f0636154c0a6ca31628d4:"106560000000000000000",bfe3a1fc6e24c8f7b3250560991f93cba2cf8047:"80000000000000000000000","724ce858857ec5481c86bd906e83a04882e5821d":"3000000000000000000000",fb37cf6b4f81a9e222fba22e9bd24b5098b733cf:"38800000000000000000","9b22a80d5c7b3374a05b446081f97d0a34079e7f":"3000000000000000000000","0a29a8a4d5fd950075ffb34d77afeb2d823bd689":"200000000000000000000",d01af9134faf5257174e8b79186f42ee354e642d:"1000000000000000000000","7f1619988f3715e94ff1d253262dc5581db3de1c":"900000000000000000000","6f137a71a6f197df2cbbf010dcbd3c444ef5c925":"2000000000000000000000","11efb8a20451161b644a8ccebbc1d343a3bbcb52":"3200000000000000000000","46504e6a215ac83bccf956befc82ab5a679371c8":"518898000000000000000",b523fff9749871b35388438837f7e6e0dea9cb6b:"2000000000000000000000",c5c6a4998a33feb764437a8be929a73ba34a0764:"50000000000000000000000","3cd7f7c7c2353780cde081eeec45822b25f2860c":"200000000000000000000",b3050beff9de33c80e1fa15225e28f2c413ae313:"700000000000000000000","59268171b833e0aa13c54b52ccc0422e4fa03aeb":"3000000000000000000000","7169724ee72271c534cad6420fb04ee644cb86fe":"410164000000000000000","6e6d5bbbb9053b89d744a27316c2a7b8c09b547d":"909831000000000000000","3f3f46b75cabe37bfacc8760281f4341ca7f463d":"602709000000000000000","7a33834e8583733e2d52aead589bd1affb1dd256":"1000000000000000000000",e94ded99dcb572b9bb1dcba32f6dee91e057984e:"394000000000000000000","19336a236ded755872411f2e0491d83e3e00159e":"940000000000000000000","63ac545c991243fa18aec41d4f6f598e555015dc":"600000000000000000000",cfee05c69d1f29e7714684c88de5a16098e91399:"1970000000000000000000","77be6b64d7c733a436adec5e14bf9ad7402b1b46":"1000000000000000000000","233bdddd5da94852f4ade8d212885682d9076bc6":"4000000000000000000000","952c57d2fb195107d4cd5ca300774119dfad2f78":"2000000000000000000000",e237baa4dbc9926e32a3d85d1264402d54db012f:"2000000000000000000000",aa91237e740d25a92f7fa146faa18ce56dc6e1f3:"925000000000000000000","2339e9492870afea2537f389ac2f838302a33c06":"2000000000000000000000","1d45586eb803ca2190650bf748a2b174312bb507":"1400000000000000000000",c61446b754c24e3b1642d9e51765b4d3e46b34b6:"2000000000000000000000",ac28b5edea05b76f8c5f97084541277c96696a4c:"1000000000000000000000","1a1c9a26e0e02418a5cf687da75a275c622c9440":"5000000000000000000000","299368609042a858d1ecdf1fc0ada5eaceca29cf":"2000000000000000000000","095f5a51d06f6340d80b6d29ea2e88118ad730fe":"2000200000000000000000","751a2ca34e7187c163d28e3618db28b13c196d26":"500000000000000000000","75b0e9c942a4f0f6f86d3f95ff998022fa67963b":"1490000000000000000000",d1b37f03cb107424e9c4dd575ccd4f4cee57e6cd:"2000000000000000000000","7f993ddb7e02c282b898f6155f680ef5b9aff907":"20000000000000000000000",a3d583a7b65b23f60b7905f3e4aa62aac87f4227:"1046779000000000000000","526bb533b76e20c8ee1ebf123f1e9ff4148e40be":"197000000000000000000","2160b4c02cac0a81de9108de434590a8bfe68735":"1970000000000000000000","010007394b8b7565a1658af88ce463499135d6b7":"100000000000000000000","64457fa33b0832506c4f7d1180dce48f46f3e0ff":"2000000000000000000000",b51e558eb5512fbcfa81f8d0bd938c79ebb5242b:"715000000000000000000","94f13f9f0836a3ee2437a84922d2984dc0f7d53b":"2999916000000000000000","6bd457ade051795df3f2465c3839aed3c5dee978":"999925000000000000000",f3dbcf135acb9dee1a489c593c024f03c2bbaece:"2000000000000000000000","61b902c5a673885826820d1fe14549e4865fbdc2":"334703000000000000000","2acc9c1a32240b4d5b2f777a2ea052b42fc1271c":"41764000000000000000000","6ddfef639155daab0a5cb4953aa8c5afaa880453":"1820000000000000000000","96ff6f509968f36cb42cba48db32f21f5676abf8":"1970000000000000000000",b4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5:"200000000000000000000","78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0":"2000000000000000000000",dec99e972fca7177508c8e1a47ac22d768acab7c:"2000000000000000000000",a07aa16d74aee8a9a3288d52db1551d593883297:"600000000000000000000",cf1169041c1745e45b172435a2fc99b49ace2b00:"31960000000000000000","526cb09ce3ada3672eec1deb46205be89a4b563e":"2468000000000000000000",ee6959de2b67967b71948c891ab00d8c8f38c7dc:"118200000000000000000",ca7ba3ff536c7e5f0e153800bd383db8312998e0:"169600000000000000000","1ed06ee51662a86c634588fb62dc43c8f27e7c17":"200000000000000000000","730447f97ce9b25f22ba1afb36df27f9586beb9b":"820000000000000000000",ae5c9bdad3c5c8a1220444aea5c229c1839f1d64:"477500000000000000000",a38306cb70baa8e49186bd68aa70a83d242f2907:"2000000000000000000000","71213fca313404204ecba87197741aa9dfe96338":"60000000000000000000","10e390ad2ba33d82b37388d09c4544c6b0225de5":"200000000000000000000","3b6e814f770748a7c3997806347605480a3fd509":"2000000000000000000000",fd452c3969ece3801c542020f1cdcaa1c71ed23d:"100000000000000000000000",e742b1e6069a8ffc3c4767235defb0d49cbed222:"800000000000000000000",d7225738dcf3578438f8e7c8b3837e42e04a262f:"445860000000000000000",cd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4:"2945500000000000000000",e80e7fef18a5db15b01473f3ad6b78b2a2f8acd9:"500000000000000000000","261575e9cf59c8226fa7aaf91de86fb70f5ac3ae":"300022000000000000000","7e71171f2949fa0c3ac254254b1f0440e5e6a038":"40000000000000000000","96ea6ac89a2bac95347b51dba63d8bd5ebdedce1":"2000000000000000000000",e6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7:"17200000000000000000000","2b99b42e4f42619ee36baa7e4af2d65eacfcba35":"40000000000000000000000",c6e4cc0c7283fc1c85bc4813effaaf72b49823c0:"276926000000000000000",dbc1ce0e49b1a705d22e2037aec878ee0d75c703:"250000000000000000000","806f44bdeb688037015e84ff218049e382332a33":"1999000000000000000000","1a3a330e4fcb69dbef5e6901783bf50fd1c15342":"4200000000000000000000",d2a84f75675c62d80c88756c428eee2bcb185421:"1200000000000000000000",c593b546b7698710a205ad468b2c13152219a342:"1550000000000000000000","3f627a769e6a950eb87017a7cd9ca20871136831":"13790000000000000000000",f2d5763ce073127e2cedde6faba786c73ca94141:"7900000000000000000000","162110f29eac5f7d02b543d8dcd5bb59a5e33b73":"2000000000000000000000","59473cd300fffae240f5785626c65dfec792b9af":"20000000000000000000","4dcd11815818ae29b85d01367349a8a7fb12d06b":"7900000000000000000000","9329ffdc268babde8874b366406c81445b9b2d35":"422415000000000000000","0ab4281ebb318590abb89a81df07fa3af904258a":"500000000000000000000","875061ee12e820041a01942cb0e65bb427b00060":"2800000000000000000000",c9b698e898d20d4d4f408e4e4d061922aa856307:"40000000000000000000",ca49a5f58adbefae23ee59eea241cf0482622eaa:"1430000000000000000000","196e85df7e732b4a8f0ed03623f4db9db0b8fa31":"21165000000000000000","4c760cd9e195ee4f2d6bce2500ff96da7c43ee91":"60000000000000000000000","024a098ae702bef5406c9c22b78bd4eb2cc7a293":"4000000000000000000000","9d81aea69aed6ad07089d61445348c17f34bfc5b":"300000000000000000000","76ab87dd5a05ad839a4e2fc8c85aa6ba05641730":"2000000000000000000000",c6e2f5af979a03fd723a1b6efa728318cf9c1800:"668500000000000000000","5db69fe93e6fb6fbd450966b97238b110ad8279a":"40000000000000000000000",a4259f8345f7e3a8b72b0fec2cf75e321fda4dc2:"1910000000000000000000","095030e4b82692dcf8b8d0912494b9b378ec9328":"1340000000000000000000","4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff":"2000000000000000000000","99c9f93e45fe3c1418c353e4c5ac3894eef8121e":"101870000000000000000",ffac3db879a6c7158e8dec603b407463ba0d31cf:"1970000000000000000000",ac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34:"2000000000000000000000","7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab":"1510990000000000000000",b7d581fe0af1ec383f3b3c416783f385146a7612:"20000000000000000000000",bb3fc0a29c034d710812dcc775c8cab9d28d6975:"1066806000000000000000","2c603ff0fe93616c43573ef279bfea40888d6ae7":"4740000000000000000000","15f2b7b16432ee50a5f55b41232f6334ed58bdc0":"400000000000000000000","7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae":"6000000000000000000000",f067e1f1d683556a4cc4fd0c0313239f32c4cfd8:"1000000000000000000000","52738c90d860e04cb12f498d96fdb5bf36fc340e":"30000000000000000000","45781bbe7714a1c8f73b1c747921df4f84278b70":"2000000000000000000000","4a97e8fcf4635ea7fc5e96ee51752ec388716b60":"546000000000000000000","54939ff08921b467cf2946751d856378296c63ed":"1000000000000000000000","6485470e61db110aebdbafd536769e3c599cc908":"600000000000000000000",e20d1bcb71286dc7128a9fc7c6ed7f733892eef5:"1003400000000000000000",d6eea898d4ae2b718027a19ce9a5eb7300abe3ca:"27475000000000000000","014974a1f46bf204944a853111e52f1602617def":"2000000000000000000000","6aa5732f3b86fb8c81efbe6b5b47b563730b06c8":"1000000000000000000000","6107d71dd6d0eefb11d4c916404cb98c753e117d":"2000000000000000000000",dd7bcda65924aaa49b80984ae173750258b92847:"10000000000000000000000","4e7b54474d01fefd388dfcd53b9f662624418a05":"8000000000000000000000","24fc73d20793098e09ddab5798506224fa1e1850":"200000000000000000000","2b8488bd2d3c197a3d26151815b5a798d27168dc":"6680000000000000000000","949131f28943925cfc97d41e0cea0b262973a730":"2800000000000000000000","60b8d6b73b79534fb08bb8cbcefac7f393c57bfe":"1760000000000000000000",d6acc220ba2e51dfcf21d443361eea765cbd35d8:"20000000000000000000",c4c6cb723dd7afa7eb535615e53f3cef14f18118:"1999999000000000000000","4c9a862ad115d6c8274ed0b944bdd6a5500510a7":"100000000000000000000","85732c065cbd64119941aed430ac59670b6c51c4":"731345000000000000000","0126e12ebc17035f35c0e9d11dd148393c405d7a":"1999600000000000000000","472048cc609aeb242165eaaa8705850cf3125de0":"1000000000000000000000",d2edd1ddd6d86dc005baeb541d22b640d5c7cae5:"20000000000000000000","4549b15979255f7e65e99b0d5604db98dfcac8bf":"4000000000000000000000",c6c7c191379897dd9c9d9a33839c4a5f62c0890d:"4000085000000000000000",d367009ab658263b62c2333a1c9e4140498e1389:"2000000000000000000000","143f5f1658d9e578f4f3d95f80c0b1bd3933cbda":"1490000000000000000000","1a09fdc2c7a20e23574b97c69e93deba67d37220":"1998000000000000000000",ac8b509aefea1dbfaf2bb33500d6570b6fd96d51:"1820000000000000000000","16ffac84032940f0121a09668b858a7e79ffa3bb":"3879210000000000000000",f338459f32a159b23db30ac335769ab2351aa63c:"30000000000000000000000",d82251456dc1380f8f5692f962828640ab9f2a03:"4879980000000000000000","47f4696bd462b20da09fb83ed2039818d77625b3":"149000000000000000000","3dde8b15b3ccbaa5780112c3d674f313bba68026":"1773000000000000000000",f70d637a845c06db6cdc91e6371ce7c4388a628e:"20000000000000000000","68295e8ea5afd9093fc0a465d157922b5d2ae234":"19982000000000000000","614e8bef3dd2c59b59a4145674401018351884ea":"20000000000000000000","4737d042dc6ae73ec73ae2517acea2fdd96487c5":"1000000000000000000000",cec6fc65853f9cce5f8e844676362e1579015f02:"2000000000000000000000",ae47e2609cfafe369d66d415d939de05081a9872:"27060000000000000000000","09a928d528ec1b3e25ffc83e218c1e0afe8928c7":"18200000000000000000","9b444fd337e5d75293adcfff70e1ea01db023222":"100000000000000000000","168bdec818eafc6d2992e5ef54aa0e1601e3c561":"1000110000000000000000","353dbec42f92b50f975129b93c4c997375f09073":"1999000000000000000000","6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b":"10001242000000000000000","6f2576da4de283bbe8e3ee69ddd66e5e711db3f5":"1260800000000000000000","3a3dd104cd7eb04f21932fd433ea7affd39369f5":"357500000000000000000",d44f4ac5fad76bdc1537a3b3af6472319b410d9d:"1600000000000000000000","3d9d6be57ff83e065985664f12564483f2e600b2":"2041600000000000000000","88f1045f19f2d3191816b1df18bb6e1435ad1b38":"240000000000000000000",ddab75fb2ff9fecb88f89476688e2b00e367ebf9:"19400000000000000000000","092e815558402d67f90d6bfe6da0b2fffa91455a":"60000000000000000000",a7024cfd742c1ec13c01fea18d3042e65f1d5dee:"11272229000000000000000","7f46bb25460dd7dae4211ca7f15ad312fc7dc75c":"6685000000000000000000","93f18cd2526040761488c513174d1e7963768b2c":"2416500000000000000000","352f25babf4a690673e35195efa8f79d05848aad":"66800000000000000000000",f7b151cc5e571c17c76539dbe9964cbb6fe5de79:"2148000000000000000000",ff3eee57c34d6dae970d8b311117c53586cd3502:"1700000000000000000000",ae6f0c73fdd77c489727512174d9b50296611c4c:"6000000000000000000000","7819b0458e314e2b53bfe00c38495fd4b9fdf8d6":"20000000000000000000","7fdba031c78f9c096d62d05a369eeab0bccc55e5":"2800000000000000000000","735e328666ed5637142b3306b77ccc5460e72c3d":"1968682000000000000000","0bfbb6925dc75e52cf2684224bbe0550fea685d3":"1970000000000000000000","6be16313643ebc91ff9bb1a2e116b854ea933a45":"500000000000000000000",d6acffd0bfd99c382e7bd56ff0e6144a9e52b08e:"160000000000000000000","276a006e3028ecd44cdb62ba0a77ce94ebd9f10f":"1800000000000000000000","10711c3dda32317885f0a2fd8ae92e82069b0d0b":"4000000000000000000000","43cb9652818c6f4d6796b0e89409306c79db6349":"2000000000000000000000","7109dd011d15f3122d9d3a27588c10d77744508b":"2000000000000000000000","3497dd66fd118071a78c2cb36e40b6651cc82598":"109600000000000000000","9bf672d979b36652fc5282547a6a6bc212ae4368":"656000000000000000000",eaed16eaf5daab5bf0295e5e077f59fb8255900b:"4000000000000000000000","7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24":"40000000000000000000","45a570dcc2090c86a6b3ea29a60863dde41f13b5":"232500000000000000000","433a3b68e56b0df1862b90586bbd39c840ff1936":"2000000000000000000000",e8eaf12944092dc3599b3953fa7cb1c9761cc246:"1800000000000000000000",ec11362cec810985d0ebbd7b73451444985b369f:"30000047000000000000000","78e83f80b3678c7a0a4e3e8c84dccde064426277":"1790000000000000000000","0cc67f8273e1bae0867fd42e8b8193d72679dbf8":"500000000000000000000",c70d856d621ec145303c0a6400cd17bbd6f5eaf7:"20000000000000000000",f468906e7edf664ab0d8be3d83eb7ab3f7ffdc78:"1700000000000000000000","3c286cfb30146e5fd790c2c8541552578de334d8":"10203000000000000000000",c401c427cccff10decb864202f36f5808322a0a8:"3329300000000000000000",afd019ff36a09155346b69974815a1c912c90aa4:"2000000000000000000000","96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2":"20000000000000000000000",a47779d8bc1c7bce0f011ccb39ef68b854f8de8f:"2000000000000000000000","58c650ced40bb65641b8e8a924a039def46854df":"18500000000000000000","86f4f40ad984fbb80933ae626e0e42f9333fdd41":"1000000000000000000000",b22d5055d9623135961e6abd273c90deea16a3e7:"1400000000000000000000",ee3564f5f1ba0f94ec7bac164bddbf31c6888b55:"100000000000000000000",cf26b47bd034bc508e6c4bcfd6c7d30034925761:"1800000000000000000000",e87dbac636a37721df54b08a32ef4959b5e4ff82:"2000000000000000000000","3bf86ed8a3153ec933786a02ac090301855e576b":"450000000000000000000000",cfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b:"170000000000000000000","85b16f0b8b34dff3804f69e2168a4f7b24d1042b":"317000000000000000000","84db1459bb00812ea67ecb3dc189b72187d9c501":"148851000000000000000","8c3a9ee71f729f236cba3867b4d79d8ceee25dbc":"100000000000000000000",e677c31fd9cb720075dca49f1abccd59ec33f734:"7800000000000000000000","8889448316ccf14ed86df8e2f478dc63c4338340":"15200000000000000000",b279c7d355c2880392aad1aa21ee867c3b3507df:"1261000000000000000000","12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5":"7722162000000000000000","8d2303341e1e1eb5e8189bde03f73a60a2a54861":"100000000000000000000","94d81074db5ae197d2bb1373ab80a87d121c4bd3":"9400000000000000000000","752c9febf42f66c4787bfa7eb17cf5333bba5070":"1966448000000000000000","16816aac0ede0d2d3cd442da79e063880f0f1d67":"2000000000000000000000",daac91c1e859d5e57ed3084b50200f9766e2c52b:"400000000000000000000","32c2fde2b6aabb80e5aea2b949a217f3cb092283":"5614827000000000000000",cdab46a5902080646fbf954204204ae88404822b:"544942000000000000000",fdf42343019b0b0c6bf260b173afab7e45b9d621:"1999944000000000000000","791f6040b4e3e50dcf3553f182cd97a90630b75d":"4000000000000000000000","4b762166dd1118e84369f804c75f9cd657bf730c":"500000000000000000000",a76d3f156251b72c0ccf4b47a3393cbd6f49a9c5:"1337000000000000000000",c5eb42295e9cadeaf2af12dede8a8d53c579c469:"3820000000000000000000",db9371b30c4c844e59e03e924be606a938d1d310:"2000000000000000000000","2cd39334ac7eac797257abe3736195f5b4b5ce0f":"99964000000000000000",ad44357e017e244f476931c7b8189efee80a5d0a:"300000000000000000000","4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3":"1248980000000000000000","73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f":"100000000000000000000","5a1d2d2d1d520304b6208849570437eb3091bb9f":"1970000000000000000000","53047dc8ac9083d90672e8b3473c100ccd278323":"40000000000000000000","26fe174cbf526650e0cd009bd6126502ce8e684d":"11640000000000000000000",e2df23f6ea04becf4ab701748dc0963184555cdb:"2000000000000000000000",c1170dbaadb3dee6198ea544baec93251860fda5:"1200000000000000000000","8bbeacfc29cfe93402db3c41d99ab759662e73ec":"2000000000000000000000","165305b787322e25dc6ad0cefe6c6f334678d569":"2000000000000000000000","095457f8ef8e2bdc362196b9a9125da09c67e3ab":"200000000000000000000","702802f36d00250fab53adbcd696f0176f638a49":"2000000000000000000000","489334c2b695c8ee0794bd864217fb9fd8f8b135":"18200000000000000000",fa8cf4e627698c5d5788abb7880417e750231399:"4244640000000000000000","3329eb3baf4345d600ced40e6e9975656f113742":"4999711000000000000000",b4dd5499daeb2507fb2de12297731d4c72b16bb0:"20000000000000000000","88c2516a7cdb09a6276d7297d30f5a4db1e84b86":"4000000000000000000000","612ced8dc0dc9e899ee46f7962333315f3f55e44":"338830000000000000000",d71e43a45177ad51cbe0f72184a5cb503917285a:"200000000000000000000","2fb566c94bbba4e3cb67cdda7d5fad7131539102":"2000000000000000000000","03be5b4629aefbbcab9de26d39576cb7f691d764":"200550000000000000000","025367960304beee34591118e9ac2d1358d8021a":"2000000000000000000000",a5d5b8b62d002def92413710d13b6ff8d4fc7dd3:"400000000000000000000",df3b72c5bd71d4814e88a62321a93d4011e3578b:"4000000000000000000000","3588895ac9fbafec012092dc05c0c302d90740fa":"3000000000000000000000","6021e85a8814fce1e82a41abd1d3b2dad2faefe0":"2000000000000000000000","17ee9f54d4ddc84d670eff11e54a659fd72f4455":"16000000000000000000000","873c6f70efb6b1d0f2bbc57eebcd70617c6ce662":"1013478000000000000000","1fcc7ce6a8485895a3199e16481f72e1f762defe":"1000000000000000000000",d0a7209b80cf60db62f57d0a5d7d521a69606655:"160000000000000000000",a514d00edd7108a6be839a638db2415418174196:"30000000000000000000000","046377f864b0143f282174a892a73d3ec8ec6132":"191000000000000000000",c126573d87b0175a5295f1dd07c575cf8cfa15f2:"10000000000000000000000","0e123d7da6d1e6fac2dcadd27029240bb39052fe":"1000000000000000000000",ad5a8d3c6478b69f657db3837a2575ef8e1df931:"36990000000000000000",db882eacedd0eff263511b312adbbc59c6b8b25b:"9100000000000000000000","0b43bd2391025581d8956ce42a072579cbbfcb14":"18800000000000000000",affea0473722cb7f0e0e86b9e11883bf428d8d54:"1940000000000000000000",e32b1c4725a1875449e98f970eb3e54062d15800:"200000000000000000000","98f4af3af0aede5fafdc42a081ecc1f89e3ccf20":"9400000000000000000000","3b4768fd71e2db2cbe7fa050483c27b4eb931df3":"2000000000000000000000",d5f7c41e07729dfa6dfc64c4423160a22c609fd3:"1790000000000000000000",d944c8a69ff2ca1249690c1229c7192f36251062:"1970000000000000000000","5ae64e853ba0a51282cb8db52e41615e7c9f733f":"2000000000000000000000",b13f93af30e8d7667381b2b95bc1a699d5e3e129:"420000000000000000000","8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07":"80000000000000000000","2448596f91c09baa30bc96106a2d37b5705e5d28":"2000000000000000000000",ccca24d8c56d6e2c07db086ec07e585be267ac8d:"200000000000000000000",f67bb8e2118bbcd59027666eedf6943ec9f880a5:"4000000000000000000000","7ae659eb3bc46852fa86fac4e21c768d50388945":"286000000000000000000","467e0ed54f3b76ae0636176e07420815a021736e":"2000000000000000000000",a46cd237b63eea438c8e3b6585f679e4860832ac:"1000000000000000000000","6b760d4877e6a627c1c967bee451a8507ddddbab":"910000000000000000000","593044670faeff00a55b5ae051eb7be870b11694":"133700000000000000000","533c06928f19d0a956cc28866bf6c8d8f4191a94":"292320000000000000000","262dc1364ccf6df85c43268ee182554dae692e29":"4927600000000000000000",e4368bc1420b35efda95fafbc73090521916aa34:"4000000000000000000000",feb92d30bf01ff9a1901666c5573532bfa07eeec:"1000000000000000000000",ee25b9a7032679b113588ed52c137d1a053a1e94:"199820000000000000000","20134cbff88bfadc466b52eceaa79857891d831e":"1000000000000000000000","07b1a306cb4312df66482c2cae72d1e061400fcd":"20000000000000000000000",e791d585b89936b25d298f9d35f9f9edc25a2932:"2000000000000000000000","2e6933543d4f2cc00b5350bd8068ba9243d6beb0":"2000000000000000000000",dae0d33eaa341569fa9ff5982684854a4a328a6e:"1000000000000000000000","125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd":"2000000000000000000000",ec99e95dece46ffffb175eb6400fbebb08ee9b95:"100000000000000000000",c538a0ff282aaa5f4b75cfb62c70037ee67d4fb5:"2000000000000000000000","60676d1fa21fca052297e24bf96389c5b12a70d7":"241500000000000000000","4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d":"2000000000000000000000",cdb597299030183f6e2d238533f4642aa58754b6:"400000000000000000000","1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d":"776000000000000000000",a7247c53d059eb7c9310f628d7fc6c6a0a773f08:"500000000000000000000","9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9":"1700000000000000000000",ddf95c1e99ce2f9f5698057c19d5c94027ee4a6e:"6000000000000000000000","83563bc364ed81a0c6da3b56ff49bbf267827a9c":"17332000000000000000000",a192698007cc11aa603d221d5feea076bcf7c30d:"2000000000000000000000","0134ff38155fabae94fd35c4ffe1d79de7ef9c59":"985000000000000000000","80977316944e5942e79b0e3abad38da746086519":"38800000000000000000","193d37ed347d1c2f4e35350d9a444bc57ca4db43":"60000000000000000000","009a6d7db326679b77c90391a7476d238f3ba33e":"200200000000000000000","337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae":"3980000000000000000000","7de7fe419cc61f91f408d234cc80d5ca3d054d99":"20000000000000000000",f47bb134da30a812d003af8dccb888f44bbf5724:"5190000000000000000000",fd920f722682afb5af451b0544d4f41b3b9d5742:"2330200000000000000000","0a917f3b5cb0b883047fd9b6593dbcd557f453b9":"1000000000000000000000",ce9786d3712fa200e9f68537eeaa1a06a6f45a4b:"1790000000000000000000","9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc":"272451000000000000000","0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf":"16000000000000000000000","4c0b1515dfced7a13e13ee12c0f523ae504f032b":"50000000000000000000000",ac2889b5966f0c7f9edb42895cb69d1c04f923a2:"5000000000000000000000",d008513b27604a89ba1763b6f84ce688b346945b:"1000000000000000000000",a4b09de6e713dc69546e76ef0acf40b94f0241e6:"322656000000000000000",b153f828dd076d4a7c1c2574bb2dee1a44a318a8:"400000000000000000000","02ade5db22f8b758ee1443626c64ec2f32aa0a15":"20000000000000000000000","0a0650861f785ed8e4bf1005c450bbd06eb48fb6":"3066860000000000000000",b75149e185f6e3927057739073a1822ae1cf0df2:"4000086000000000000000","84cb7da0502df45cf561817bbd2362f451be02da":"1337000000000000000000",c91bb562e42bd46130e2d3ae4652b6a4eb86bc0f:"540000000000000000000",b234035f7544463ce1e22bc553064684c513cd51:"249750000000000000000",e5e33800a1b2e96bde1031630a959aa007f26e51:"1337000000000000000000",ae5ce3355a7ba9b332760c0950c2bc45a85fa9a0:"400000000000000000000",e6f5eb649afb99599c414b27a9c9c855357fa878:"2674000000000000000000","7010be2df57bd0ab9ae8196cd50ab0c521aba9f9":"1970000000000000000000",ca4288014eddc5632f5facb5e38517a8f8bc5d98:"340000000000000000000","2784903f1d7c1b5cd901f8875d14a79b3cbe2a56":"22388000000000000000000",f8dce867f0a39c5bef9eeba609229efa02678b6c:"2000000000000000000000",e020e86362b487752836a6de0bc02cd8d89a8b6a:"6000000000000000000000",c4088c025f3e85013f5439fb3440a17301e544fe:"2325000000000000000000",befb448c0c5f683fb67ee570baf0db5686599751:"1970000000000000000000","2f187d5a704d5a338c5b2876a090dce964284e29":"4000000000000000000000",ec0e18a01dc4dc5daae567c3fa4c7f8f9b590205:"315900000000000000000","637f5869d6e4695f0eb9e27311c4878aff333380":"1969212000000000000000",d1100dd00fe2ddf18163ad964d0b69f1f2e9658a:"5959598000000000000000","17ef4acc1bf147e326749d10e677dcffd76f9e06":"39980000000000000000000","200dfc0b71e359b2b465440a36a6cdc352773007":"1500000000000000000000",efe0675da98a5dda70cd96196b87f4e726b43348:"1164000000000000000000",d5bd5e8455c130169357c471e3e681b7996a7276:"841500000000000000000","9c7b6dc5190fe2912963fcd579683ec7395116b0":"776000000000000000000",b105dd3d987cffd813e9c8500a80a1ad257d56c6:"1999944000000000000000","145250b06e4fa7cb2749422eb817bdda8b54de5f":"219000000000000000000",d96db33b7b5a950c3efa2dc31b10ba10a532ef87:"2000000000000000000000",af529bdb459cc185bee5a1c58bf7e8cce25c150d:"197000000000000000000","185546e8768d506873818ac9751c1f12116a3bef":"200000000000000000000","51d24bc3736f88dd63b7222026886630b6eb878d":"2000000000000000000000","69af28b0746cac0da17084b9398c5e36bb3a0df2":"1004700000000000000000","76f83ac3da30f7092628c7339f208bfc142cb1ee":"2842600000000000000000","00f463e137dcf625fbf3bca39eca98d2b968cf7f":"5910000000000000000000","2084fce505d97bebf1ad8c5ff6826fc645371fb2":"30000000000000000000","53a714f99fa00fef758e23a2e746326dad247ca7":"1490000000000000000000","0bf064428f83626722a7b5b26a9ab20421a7723e":"133700000000000000000",ac6f68e837cf1961cb14ab47446da168a16dde89:"1337000000000000000000","4b3c7388cc76da3d62d40067dabccd7ef0433d23":"100076000000000000000",deb9a49a43873020f0759185e20bbb4cf381bb8f:"211628000000000000000","5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5":"6000000000000000000000","9d0e7d92fb305853d798263bf15e97c72bf9d7e0":"1000000000000000000000","2b5c60e84535eeb4d580de127a12eb2677ccb392":"20000000000000000000000",d8d65420c18c2327cc5af97425f857e4a9fd51b3:"1760000000000000000000","30ec9392244a2108c987bc5cdde0ed9f837a817b":"1560562000000000000000","56a1d60d40f57f308eebf087dee3b37f1e7c2cba":"1159600000000000000000",a9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68:"5000000000000000000000",a67f38819565423aa85f3e3ab61bc763cbab89dd:"2130000000000000000000","62d5cc7117e18500ac2f9e3c26c86b0a94b0de15":"105000000000000000000","4970d3acf72b5b1f32a7003cf102c64ee0547941":"140000000000000000000000","76628150e2995b5b279fc83e0dd5f102a671dd1c":"40000000000000000000000","3d8f39881b9edfe91227c33fa4cdd91e678544b0":"86111000000000000000",ff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1:"1043000000000000000000","8d795c5f4a5689ad62da961671f028065286d554":"2048000000000000000000",be2346a27ff9b702044f500deff2e7ffe6824541:"20000000000000000000","0dbd417c372b8b0d01bcd944706bd32e60ae28d1":"340000000000000000000","467fbf41441600757fe15830c8cd5f4ffbbbd560":"10000000000000000000000","090cd67b60e81d54e7b5f6078f3e021ba65b9a1e":"1000000000000000000000","55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f":"1970000000000000000000","3b7b4f53c45655f3dc5f017edc23b16f9bc536fa":"100000000000000000000",d508d39c70916f6abc4cc7f999f011f077105802:"100470000000000000000","037dd056e7fdbd641db5b6bea2a8780a83fae180":"140000000000000000000","660557bb43f4be3a1b8b85e7df7b3c5bcd548057":"6000000000000000000000","02089361a3fe7451fb1f87f01a2d866653dc0b07":"39976000000000000000",c4bec96308a20f90cab18399c493fd3d065abf45:"14000000000000000000000",cca07bb794571d4acf041dad87f0d1ef3185b319:"2000000000000000000000",f2d0e986d814ea13c8f466a0538c53dc922651f0:"1380000000000000000000","662cfa038fab37a01745a364e1b98127c503746d":"3940000000000000000000","3336c3ef6e8b50ee90e037b164b7a8ea5faac65d":"272712000000000000000","30e33358fc21c85006e40f32357dc8895940aaf0":"1910000000000000000000","41a9a404fc9f5bfee48ec265b12523338e29a8bf":"388000000000000000000","6af235d2bbe050e6291615b71ca5829658810142":"3000000000000000000000",fd5a63157f914fd398eab19c137dd9550bb7715c:"100000000000000000000","8a4314fb61cd938fc33e15e816b113f2ac89a7fb":"432800000000000000000",b216dc59e27c3d7279f5cd5bb2becfb2606e14d9:"400000000000000000000",f5a5459fcdd5e5b273830df88eea4cb77ddadfb9:"74500000000000000000",df31025f5649d2c6eea41ed3bdd3471a790f759a:"20000000000000000000","721f9d17e5a0e74205947aeb9bc6a7938961038f":"51900000000000000000","08d0864dc32f9acb36bf4ea447e8dd6726906a15":"2000200000000000000000","54575c3114751e3c631971da6a2a02fd3ffbfcc8":"1940000000000000000000","8f60895fbebbb5017fcbff3cdda397292bf25ba6":"429177000000000000000","91fe8a4c6164df8fa606995d6ba7adcaf1c893ce":"17000000000000000000000","889087f66ff284f8b5efbd29493b706733ab1447":"9850000000000000000000","051633080d07a557adde319261b074997f14692d":"5800000000000000000000","59a12df2e3ef857aceff9306b309f6a500f70134":"1000000000000000000000","9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74":"1000060000000000000000","8846928d683289a2d11df8db7a9474988ef01348":"10000000000000000000000",dff1b220de3d8e9ca4c1b5be34a799bcded4f61c:"385428000000000000000","7e7c1e9a61a08a83984835c70ec31d34d3eaa87f":"191000000000000000000",fe210b8f04dc6d4f76216acfcbd59ba83be9b630:"20000000000000000000",dc8c2912f084a6d184aa73638513ccbc326e0102:"1295000000000000000000",dddd7b9e6eab409b92263ac272da801b664f8a57:"500000000000000000000000","86a5f8259ed5b09e188ce346ee92d34aa5dd93fa":"200000000000000000000",dc1f1979615f082140b8bb78c67b27a1942713b1:"60000000000000000000",ea66e7b84dcdbf36eea3e75b85382a75f1a15d96:"1729135000000000000000","039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706":"17300000000000000000","36bfe1fa3b7b70c172eb042f6819a8972595413e":"1000000000000000000000","039ef1ce52fe7963f166d5a275c4b1069fe3a832":"400008000000000000000",f1df55dcc34a051012b575cb968bc9c458ea09c9:"4000000000000000000000","168b5019b818691644835fe69bf229e17112d52c":"28000000000000000000000",f60bd735543e6bfd2ea6f11bff627340bc035a23:"2000000000000000000000","2cbb0c73df91b91740b6693b774a7d05177e8e58":"1850000000000000000000","9ffcf5ef46d933a519d1d16c6ba3189b27496224":"1000000000000000000000","0e11d77a8977fac30d268445e531149b31541a24":"2000000000000000000000",dfb1626ef48a1d7d7552a5e0298f1fc23a3b482d:"1713860000000000000000",cc943be1222cd1400a2399dd1b459445cf6d54a9:"12530000000000000000000",b37c2b9f50637bece0ca959208aefee6463ba720:"400000000000000000000","96b906ea729f4655afe3e57d35277c967dfa1577":"1000000000000000000000","7995bd8ce2e0c67bf1c7a531d477bca1b2b97561":"5945100000000000000000","96f820500b70f4a3e3239d619cff8f222075b135":"200000000000000000000",ad3565d52b688added08168b2d3872d17d0a26ae:"100000000000000000000","9e7c2050a227bbfd60937e268cea3e68fea8d1fe":"100000000000000000000","7e59dc60be8b2fc19abd0a5782c52c28400bce97":"1000000000000000000000","01ed5fba8d2eab673aec042d30e4e8a611d8c55a":"2000000000000000000000","59a087b9351ca42f58f36e021927a22988284f38":"18500000000000000000","2fe0023f5722650f3a8ac01009125e74e3f82e9b":"3000000000000000000000",bd1803370bddb129d239fd16ea8526a6188ae58e:"500000000000000000000",c70527d444c490e9fc3f5cc44e66eb4f306b380f:"4000000000000000000000","0f206e1a1da7207ea518b112418baa8b06260328":"600000000000000000000","6e1a046caf5b4a57f4fd4bc173622126b4e2fd86":"1790000000000000000000","84008a72f8036f3feba542e35078c057f32a8825":"100000000000000000000","246291165b59332df5f18ce5c98856fae95897d6":"1700000000000000000000","7e99dfbe989d3ba529d19751b7f4317f8953a3e2":"400000000000000000000","748c285ef1233fe4d31c8fb1378333721c12e27a":"2000000000000000000000","3dd12e556a603736feba4a6fa8bd4ac45d662a04":"167450000000000000000000",d0ae735d915e946866e1fea77e5ea466b5cadd16:"2000000000000000000000","4f767bc8794aef9a0a38fea5c81f14694ff21a13":"512200000000000000000","0e2f8e28a681f77c583bd0ecde16634bdd7e00cd":"95060000000000000000",d74a6e8d6aab34ce85976814c1327bd6ea0784d2:"100000000000000000000000","629be7ab126a5398edd6da9f18447e78c692a4fd":"2000000000000000000000","2e46fcee6a3bb145b594a243a3913fce5dad6fba":"10000000000000000000000",e39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc:"2000000000000000000000","119aa64d5b7d181dae9d3cb449955c89c1f963fa":"700000000000000000000",ce079f51887774d8021cb3b575f58f18e9acf984:"180000000000000000000","550c306f81ef5d9580c06cb1ab201b95c748a691":"665800000000000000000","06dc7f18cee7edab5b795337b1df6a9e8bd8ae59":"400000000000000000000",e21c778ef2a0d7f751ea8c074d1f812243863e4e:"5308559000000000000000","45d4b54d37a8cf599821235f062fa9d170ede8a4":"324000000000000000000","893a6c2eb8b40ab096b4f67e74a897b840746e86":"1730000000000000000000",d44d81e18f46e2cfb5c1fcf5041bc8569767d100:"36381800000000000000000",c5de1203d3cc2cea31c82ee2de5916880799eafd:"5000000000000000000000","7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e":"2000000000000000000000","3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7":"200000000000000000000",ac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6:"1000000000000000000000","7640a37f8052981515bce078da93afa4789b5734":"2000000000000000000000","76cac488111a4fd595f568ae3a858770fc915d5f":"200000000000000000000",ff4a408f50e9e72146a28ce4fc8d90271f116e84:"1970000000000000000000","249db29dbc19d1235da7298a04081c315742e9ac":"1801800000000000000000","3a04572847d31e81f7765ca5bfc9d557159f3683":"133031000000000000000",b6771b0bf3427f9ae7a93e7c2e61ee63941fdb08:"18800000000000000000000","30c26a8e971baa1855d633ba703f028cc7873140":"10000000000000000000000","167e3e3ae2003348459392f7dfce44af7c21ad59":"500000000000000000000","43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc":"2914000000000000000000","056b1546894f9a85e203fb336db569b16c25e04f":"169397000000000000000","70616e2892fa269705b2046b8fe3e72fa55816d3":"20000000000000000000000","8f4d1d41693e462cf982fd81d0aa701d3a5374c9":"4000000000000000000000",c518799a5925576213e21896e0539abb85b05ae3:"1000000000000000000000","0e3a28c1dfafb0505bdce19fe025f506a6d01ceb":"2000000000000000000000",e4a47e3933246c3fd62979a1ea19ffdf8c72ef37:"148273000000000000000",d231929735132102471ba59007b6644cc0c1de3e:"1000090000000000000000","555d8d3ce1798aca902754f164b8be2a02329c6c":"10000000000000000000000","5ab1a5615348001c7c775dc75748669b8be4de14":"690200000000000000000","2fee36a49ee50ecf716f1047915646779f8ba03f":"1056230000000000000000","54db5e06b4815d31cb56a8719ba33af2d73e7252":"670000000000000000000","7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9":"6000000000000000000000",c1384c6e717ebe4b23014e51f31c9df7e4e25b31:"500000000000000000000","474158a1a9dc693c133f65e47b5c3ae2f773a86f":"200200000000000000000","2934c0df7bbc172b6c186b0b72547ace8bf75454":"60000000000000000000","6966063aa5de1db5c671f3dd699d5abe213ee902":"8000000000000000000000","9225d46a5a80943924a39e5b84b96da0ac450581":"40000000000000000000000","671bbca099ff899bab07ea1cf86965c3054c8960":"50000000000000000000",f1f766b0e46d73fcd4d52e7a72e1b9190cc632b3:"8000000000000000000000",ef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f:"705668000000000000000","38d2e9154964b41c8d50a7487d391e7ee2c3d3c2":"3500000000000000000000","352a785f4a921632504ce5d015f83c49aa838d6d":"4314800000000000000000","743de50026ca67c94df54f066260e1d14acc11ac":"2000000000000000000000",b188078444027e386798a8ae68698919d5cc230d:"267400000000000000000","53608105ce4b9e11f86bf497ffca3b78967b5f96":"20000000000000000000000","3b159099075207c6807663b1f0f7eda54ac8cce3":"1969543000000000000000","141a5e39ee2f680a600fbf6fa297de90f3225cdd":"10000000000000000000000","44fff37be01a3888d3b8b8e18880a7ddefeeead3":"259145000000000000000",c5a629a3962552cb8eded889636aafbd0c18ce65:"10000000000000000000000",fdba5359f7ec3bc770ac49975d844ec9716256f1:"1000000000000000000000","7c1df24a4f7fb2c7b472e0bb006cb27dcd164156":"1000000000000000000000",ab7d54c7c6570efca5b4b8ce70f52a5773e5d53b:"279600000000000000000","3f173aa6edf469d185e59bd26ae4236b92b4d8e1":"320000000000000000000",a3f4ad14e0bb44e2ce2c14359c75b8e732d37054:"200000000000000000000",ac5f627231480d0d95302e6d89fc32cb1d4fe7e3:"200000000000000000000",d0775dba2af4c30a3a78365939cd71c2f9de95d2:"1940000000000000000000",ad94235fc3b3f47a2413af31e884914908ef0c45:"500008000000000000000",eaedcc6b8b6962d5d9288c156c579d47c0a9fcff:"85000000000000000000","7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6":"3008000000000000000000",ec73114c5e406fdbbe09b4fa621bd70ed54ea1ef:"24500000000000000000000",a690f1a4b20ab7ba34628620de9ca040c43c1963:"4000000000000000000000",cad14f9ebba76680eb836b079c7f7baaf481ed6d:"238600000000000000000","6c714a58fff6e97d14b8a5e305eb244065688bbd":"4000000000000000000000","3e618350fa01657ab0ef3ebac8e37012f8fc2b6f":"2804400000000000000000",c946d5acc1346eba0a7279a0ac1d465c996d827e:"16385128000000000000000","1164caaa8cc5977afe1fad8a7d6028ce2d57299b":"400000000000000000000","7917e5bd82a9790fd650d043cdd930f7799633db":"3999800000000000000000",d52aecc6493938a28ca1c367b701c21598b6a02e:"1100000000000000000000","98bed3a72eccfbafb923489293e429e703c7e25b":"2000000000000000000000","42db0b902559e04087dd5c441bc7611934184b89":"2014420000000000000000","43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b":"2000000000000000000000","85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb":"20000000000000000000","581b9fd6eae372f3501f42eb9619eec820b78a84":"19699015000000000000000","541db20a80cf3b17f1621f1b3ff79b882f50def3":"1000000000000000000000","4e8a6d63489ccc10a57f885f96eb04ecbb546024":"18500000000000000000000","28349f7ef974ea55fe36a1583b34cec3c45065f0":"234490000000000000000",a3241d890a92baf52908dc4aa049726be426ebd3:"19999560000000000000000",b4b11d109f608fa8edd3fea9f8c315649aeb3d11:"5000000000000000000000","5f321b3daaa296cadf29439f9dab062a4bffedd6":"81868000000000000000",c5ae86b0c6c7e3900f1368105c56537faf8d743e:"188000000000000000000","9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15":"20000000000000000000",a3facc50195c0b4933c85897fecc5bbd995c34b8:"20000000000000000000",f07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03:"5910000000000000000000","640aba6de984d94517377803705eaea7095f4a11":"10000000000000000000000","204ac98867a7c9c7ed711cb82f28a878caf69b48":"6000000000000000000000","9d34dac25bd15828faefaaf28f710753b39e89dc":"1090400000000000000000",fe418b421a9c6d373602790475d2303e11a75930:"1015200000000000000000","3f472963197883bbda5a9b7dfcb22db11440ad31":"481445000000000000000","1578bdbc371b4d243845330556fff2d5ef4dff67":"100000000000000000000",dba4796d0ceb4d3a836b84c96f910afc103f5ba0:"166666000000000000000","466fda6b9b58c5532750306a10a2a8c768103b07":"199955000000000000000","2770f14efb165ddeba79c10bb0af31c31e59334c":"3000000000000000000000","7c382c0296612e4e97e440e02d3871273b55f53b":"197600000000000000000","1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b":"3000000000000000000000",a9acf600081bb55bb6bfbab1815ffc4e17e85a95:"200000000000000000000",f93d5bcb0644b0cce5fcdda343f5168ffab2877d:"209978000000000000000",db0cc78f74d9827bdc8a6473276eb84fdc976212:"2000000000000000000000",b66411e3a02dedb726fa79107dc90bc1cae64d48:"2000000000000000000000","4d6e8fe109ccd2158e4db114132fe75fecc8be5b":"25019000000000000000","6fd947d5a73b175008ae6ee8228163da289b167d":"30000000000000000000000","32d950d5e93ea1d5b48db4714f867b0320b31c0f":"1015200000000000000000","9c99b62606281b5cefabf36156c8fe62839ef5f3":"4000000000000000000000","86c8d0d982b539f48f9830f9891f9d607a942659":"13260000000000000000000",f2127d54188fedef0f338a5f38c7ff73ad9f6f42:"20000000000000000000000",e864fec07ed1214a65311e11e329de040d04f0fd:"1656353000000000000000","1d09ad2412691cc581c1ab36b6f9434cd4f08b54":"7000000000000000000000","4ea70f04313fae65c3ff224a055c3d2dab28dddf":"19999800000000000000000",e0668fa82c14d6e8d93a53113ef2862fa81581bc:"870400000000000000000",f0d858105e1b648101ac3f85a0f8222bf4f81d6a:"600000000000000000000","0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf":"1820000000000000000000","5793abe6f1533311fd51536891783b3f9625ef1c":"827268000000000000000","8d667637e29eca05b6bfbef1f96d460eefbf9984":"4000000000000000000000",d76dbaebc30d4ef67b03e6e6ecc6d84e004d502d:"2019250000000000000000","42d1a6399b3016a8597f8b640927b8afbce4b215":"2980000000000000000000","21fd47c5256012198fa5abf131c06d6aa1965f75":"7880000000000000000000","2f2bba1b1796821a766fce64b84f28ec68f15aea":"20000000000000000000",d24bf12d2ddf457decb17874efde2052b65cbb49:"14000000000000000000000","88de13b09931877c910d593165c364c8a1641bd3":"3000000000000000000000","555ca9f05cc134ab54ae9bea1c3ff87aa85198ca":"100000000000000000000",ae9ecd6bdd952ef497c0050ae0ab8a82a91898ce:"30000000000000000000",ad8bfef8c68a4816b3916f35cb7bfcd7d3040976:"40000000000000000000000",dad136b88178b4837a6c780feba226b98569a94c:"200000000000000000000","800e7d631c6e573a90332f17f71f5fd19b528cb9":"152000000000000000000","94a9a71691317c2064271b51c9353fbded3501a8":"3340000000000000000000","80a0f6cc186cf6201400736e065a391f52a9df4a":"10000000000000000000000","712ff7370a13ed360973fedc9ff5d2c93a505e9e":"3940000000000000000000","42399659aca6a5a863ea2245c933fe9a35b7880e":"2044000000000000000000",ae239acffd4ebe2e1ba5b4170572dc79cc6533ec:"12000000000000000000000","007b9fc31905b4994b04c9e2cfdc5e2770503f42":"1999000000000000000000","7480de62254f2ba82b578219c07ba5be430dc3cb":"7040000000000000000000","917b8f9f3a8d09e9202c52c29e724196b897d35e":"161000000000000000000","708ea707bae4357f1ebea959c3a250acd6aa21b3":"500000000000000000000","6dc7053a718616cfc78bee6382ee51add0c70330":"2000000000000000000000",c4dac5a8a0264fbc1055391c509cc3ee21a6e04c:"6501000000000000000000",c1b2a0fb9cad45cd699192cd27540b88d3384279:"500000000000000000000",b07cb9c12405b711807543c4934465f87f98bd2d:"2000000000000000000000",c7f72bb758016b374714d4899bce22b4aec70a31:"1072706000000000000000","0c480de9f7461002908b49f60fc61e2b62d3140b":"10000000000000000000000","83d532d38d6dee3f60adc68b936133c7a2a1b0dd":"500000000000000000000","12afbcba1427a6a39e7ba4849f7ab1c4358ac31b":"20000000000000000000000",f8f6645e0dee644b3dad81d571ef9baf840021ad:"2000000000000000000000","40cf890591eae4a18f812a2954cb295f633327e6":"48132000000000000000","735b97f2fc1bd24b12076efaf3d1288073d20c8c":"20000000000000000000","47c7e5efb48b3aed4b7c6e824b435f357df4c723":"18200000000000000000",d34d708d7398024533a5a2b2309b19d3c55171bb:"400000000000000000000","64370e87202645125a35b207af1231fb6072f9a7":"200000000000000000000",b055af4cadfcfdb425cf65ba6431078f07ecd5ab:"100000000000000000000",c7de5e8eafb5f62b1a0af2195cf793c7894c9268:"1000000000000000000000",c63cd7882118b8a91e074d4c8f4ba91851303b9a:"260000000000000000000","164d7aac3eecbaeca1ad5191b753f173fe12ec33":"744090000000000000000",e4fb26d1ca1eecba3d8298d9d148119ac2bbf580:"400000000000000000000","613ac53be565d46536b820715b9b8d3ae68a4b95":"3760000000000000000000","7f616c6f008adfa082f34da7d0650460368075fb":"1000000000000000000000","9af100cc3dae83a33402051ce4496b16615483f6":"2000000000000000000000",b45cca0d36826662683cf7d0b2fdac687f02d0c4:"1000000000000000000000","93a6b3ab423010f981a7489d4aad25e2625c5741":"20190033000000000000000",ee049af005974dd1c7b3a9ca8d9aa77175ba53aa:"333333000000000000000","687927e3048bb5162ae7c15cf76bd124f9497b9e":"2000000000000000000000","1aa40270d21e5cde86b6316d1ac3c533494b79ed":"20000000000000000000","426259b0a756701a8b663528522156c0288f0f24":"9900000000000000000000","91c75e3cb4aa89f34619a164e2a47898f5674d9c":"2000000000000000000000","437983388ab59a4ffc215f8e8269461029c3f1c1":"20000000000000000000000","272a131a5a656a7a3aca35c8bd202222a7592258":"2674000000000000000000",bc0ca4f217e052753614d6b019948824d0d8688b:"400000000000000000000",cc6c03bd603e09de54e9c4d5ac6d41cbce715724:"98500000000000000000",d79aff13ba2da75d46240cac0a2467c656949823:"1730000000000000000000","477b24eee8839e4fd19d1250bd0b6645794a61ca":"8000000000000000000000","79fd6d48315066c204f9651869c1096c14fc9781":"2000000000000000000000","1463a873555bc0397e575c2471cf77fa9db146e0":"10000000000000000000000","89ab13ee266d779c35e8bb04cd8a90cc2103a95b":"60000000000000000000000","90acced7e48c08c6b934646dfa0adf29dc94074f":"56154000000000000000","31ea6eab19d00764e9a95e183f2b1b22fc7dc40f":"20000000000000000000","87a53ea39f59a35bada8352521645594a1a714cb":"1910000000000000000000","1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79":"4516200000000000000000",e36a8ea87f1e99e8a2dc1b2608d166667c9dfa01:"100000000000000000000",ec2cb8b9378dff31aec3c22e0e6dadff314ab5dd:"2000000000000000000000","3cadeb3d3eed3f62311d52553e70df4afce56f23":"4000000000000000000000","3ceca96bb1cdc214029cbc5e181d398ab94d3d41":"80000000000000000000000","3283eb7f9137dd39bed55ffe6b8dc845f3e1a079":"66224000000000000000","0954a8cb5d321fc3351a7523a617d0f58da676a7":"2506000000000000000000",de33d708a3b89e909eaf653b30fdc3a5d5ccb4b3:"177300000000000000000","1c6702b3b05a5114bdbcaeca25531aeeb34835f4":"26071500000000000000000",e5b96fc9ac03d448c1613ac91d15978145dbdfd1:"200000000000000000000",fbf204c813f836d83962c7870c7808ca347fd33e:"20000000000000000000","3b13631a1b89cb566548899a1d60915cdcc4205b":"2000000000000000000000",a87f7abd6fa31194289678efb63cf584ee5e2a61:"4000000000000000000000",c0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d:"136499000000000000000",ffd6da958eecbc016bab91058440d39b41c7be83:"20000000000000000000000","0e3dd7d4e429fe3930a6414035f52bdc599d784d":"40110000000000000000",e0663e8cd66792a641f56e5003660147880f018e:"2000000000000000000000","5b78eca27fbdea6f26befba8972b295e7814364b":"2000000000000000000000",ec9851bd917270610267d60518b54d3ca2b35b17:"40000000000000000000000",bc9c95dfab97a574cea2aa803b5caa197cef0cff:"420000000000000000000","100b4d0977fcbad4debd5e64a0497aeae5168fab":"314500000000000000000","1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb":"152000000000000000000",b4524c95a7860e21840296a616244019421c4aba:"8000000000000000000000","88975a5f1ef2528c300b83c0c607b8e87dd69315":"83500000000000000000","853e6abaf44469c72f151d4e223819aced4e3728":"2000000000000000000000",d604abce4330842e3d396ca73ddb5519ed3ec03f:"163940000000000000000",d209482bb549abc4777bea6d7f650062c9c57a1c:"320880000000000000000","590acbda37290c0d3ec84fc2000d7697f9a4b15d":"500000000000000000000","571950ea2c90c1427d939d61b4f2de4cf1cfbfb0":"20000000000000000000",cb94e76febe208116733e76e805d48d112ec9fca:"1000000000000000000000",fa8e3b1f13433900737daaf1f6299c4887f85b5f:"715000000000000000000","162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1":"2000000000000000000000","4bea288eea42c4955eb9faad2a9faf4783cbddac":"28790618000000000000000",c8ab1a3cf46cb8b064df2e222d39607394203277:"2000000000000000000000","318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7":"200000000000000000000","53c5fe0119e1e848640cee30adea96940f2a5d8b":"21746000000000000000000","0701f9f147ec486856f5e1b71de9f117e99e2105":"173360000000000000000","337cfe1157a5c6912010dd561533791769c2b6a6":"1000000000000000000000",fd60d2b5af3d35f7aaf0c393052e79c4d823d985:"56400000000000000000","0f049a8bdfd761de8ec02cee2829c4005b23c06b":"252000000000000000000","924bce7a853c970bb5ec7bb759baeb9c7410857b":"13700000000000000000","16abb8b021a710bdc78ea53494b20614ff4eafe8":"158000000000000000000","9e7f65a90e8508867bccc914256a1ea574cf07e3":"1240000000000000000000","01d03815c61f416b71a2610a2daba59ff6a6de5b":"9553100000000000000000","3df762049eda8ac6927d904c7af42f94e5519601":"2000000000000000000000","5593c9d4b664730fd93ca60151c25c2eaed93c3b":"200000000000000000000",e023f09b2887612c7c9cf1988e3a3a602b3394c9:"2000000000000000000000","4c13980c32dcf3920b78a4a7903312907c1b123f":"60024000000000000000",a282e969cac9f7a0e1c0cd90f5d0c438ac570da3:"627760000000000000000","3b22da2a0271c8efe102532773636a69b1c17e09":"502000000000000000000","1aa1021f550af158c747668dd13b463160f95a40":"1470000000000000000000",f15178ffc43aa8070ece327e930f809ab1a54f9d:"197600000000000000000",db1293a506e90cad2a59e1b8561f5e66961a6788:"2000000000000000000000","88c361640d6b69373b081ce0c433bd590287d5ec":"50000000000000000000000","3737216ee91f177732fb58fa4097267207e2cf55":"1520000000000000000000",a16d9e3d63986159a800b46837f45e8bb980ee0b:"2030400000000000000000",ec76f12e57a65504033f2c0bce6fc03bd7fa0ac4:"3580000000000000000000",d9f1b26408f0ec67ad1d0d6fe22e8515e1740624:"24000000000000000000","716ba01ead2a91270635f95f25bfaf2dd610ca23":"44750000000000000000000","42a98bf16027ce589c4ed2c95831e2724205064e":"10000000000000000000000","0f88aac9346cb0e7347fba70905475ba8b3e5ece":"10000000000000000000000","2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c":"20000000000000000000","3cea302a472a940379dd398a24eafdbadf88ad79":"3000000000000000000000",a29d5bda74e003474872bd5894b88533ff64c2b5:"10000000000000000000000","2d23766b6f6b05737dad80a419c40eda4d77103e":"3820000000000000000000",b07249e055044a9155359a402937bbd954fe48b6:"100000000000000000000",f1e980c559a1a8e5e50a47f8fffdc773b7e06a54:"30104784000000000000000","8275cd684c3679d5887d03664e338345dc3cdde1":"15800000000000000000",b27c1a24204c1e118d75149dd109311e07c073ab:"3100000000000000000000","451b3699475bed5d7905f8905aa3456f1ed788fc":"2560000000000000000000","31ad4d9946ef09d8e988d946b1227f9141901736":"22880000000000000000000","52b8a9592634f7300b7c5c59a3345b835f01b95c":"2000000000000000000000",b161725fdcedd17952d57b23ef285b7e4b1169e8:"50071000000000000000","74fc5a99c0c5460503a13b0509459da19ce7cd90":"200000000000000000000",d99df7421b9382e42c89b006c7f087702a0757c0:"480000000000000000000","8a4f4a7f52a355ba105fca2072d3065fc8f7944b":"500000000000000000000","12316fc7f178eac22eb2b25aedeadf3d75d00177":"19999999000000000000000",f598db2e09a8a5ee7d720d2b5c43bb126d11ecc2:"200000000000000000000","37b8beac7b1ca38829d61ab552c766f48a10c32f":"400000000000000000000","851dc38adb4593729a76f33a8616dab6f5f59a77":"100000000000000000000",bf4096bc547dbfc4e74809a31c039e7b389d5e17:"3940000000000000000000","98d3731992d1d40e1211c7f735f2189afa0702e0":"8000000000000000000000","0f4073c1b99df60a1549d69789c7318d9403a814":"20000000000000000000000",a430995ddb185b9865dbe62539ad90d22e4b73c2:"10000000000000000000000","898c72dd736558ef9e4be9fdc34fef54d7fc7e08":"1000000000000000000000",f9b617f752edecae3e909fbb911d2f8192f84209:"2674000000000000000000",e1ae029b17e373cde3de5a9152201a14cac4e119:"99968000000000000000",d8e8474292e7a051604ca164c0707783bb2885e8:"13370000000000000000000",f476f2cb7208a32e051fd94ea8662992638287a2:"100000000000000000000","3a84e950ed410e51b7e8801049ab2634b285fea1":"18690000000000000000000","5b7784caea01799ca30227827667ce207c5cbc76":"2000000000000000000000","3af65b3e28895a4a001153391d1e69c31fb9db39":"3940000000000000000000","95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2":"34225000000000000000",a8446c4781a737ac4328b1e15b8a0b3fbb0fd668:"21390500000000000000000","4888fb25cd50dbb9e048f41ca47d78b78a27c7d9":"17300000000000000000000","566c10d638e8b88b47d6e6a414497afdd00600d4":"99960000000000000000",bd47f5f76e3b930fd9485209efa0d4763da07568:"1000000000000000000000","1e1c6351776ac31091397ecf16002d979a1b2d51":"1400000000000000000000",edf603890228d7d5de9309942b5cad4219ef9ad7:"5000000000000000000000","1923cfc68b13ea7e2055803645c1e320156bd88d":"1337000000000000000000","8f8f37d0ad8f335d2a7101b41156b688a81a9cbe":"70000000000000000000","63334fcf1745840e4b094a3bb40bb76f9604c04c":"3978000000000000000000","001762430ea9c3a26e5749afdb70da5f78ddbb8c":"200000000000000000000","512116817ba9aaf843d1507c65a5ea640a7b9eec":"50000000000000000000","2961fb391c61957cb5c9e407dda29338d3b92c80":"999942000000000000000",fc2952b4c49fedd0bc0528a308495e6d6a1c71d6:"2000000000000000000000","13ec812284026e409bc066dfebf9d5a4a2bf801e":"1610000000000000000000",ef463c2679fb279164e20c3d2691358773a0ad95:"2000000000000000000000","3aadf98b61e5c896e7d100a3391d3250225d61df":"234000000000000000000",e8137fc1b2ec7cc7103af921899b4a39e1d959a1:"1490000000000000000000",b1a2b43a7433dd150bb82227ed519cd6b142d382:"2738000000000000000000",c1f39bd35dd9cec337b96f47c677818160df37b7:"20000000000000000000",b587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0:"630400000000000000000","41485612d03446ec4c05e5244e563f1cbae0f197":"970000000000000000000",a12623e629df93096704b16084be2cd89d562da4:"8500000000000000000000","3f2f381491797cc5c0d48296c14fd0cd00cdfa2d":"804000000000000000000","9470cc36594586821821c5c996b6edc83b6d5a32":"24000000000000000000","3605372d93a9010988018f9f315d032ed1880fa1":"500066000000000000000","12632388b2765ee4452b50161d1fffd91ab81f4a":"740000000000000000000","274a3d771a3d709796fbc4d5f48fce2fe38c79d6":"20000000000000000000",d60a52580728520df7546bc1e283291788dbae0c:"999910000000000000000","1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff":"1996800000000000000000",c282e6993fbe7a912ea047153ffd9274270e285b:"139939000000000000000",a291e9c7990d552dd1ae16cebc3fca342cbaf1d1:"20000000000000000000000","5547fdb4ae11953e01292b7807fa9223d0e4606a":"98940000000000000000",bded11612fb5c6da99d1e30e320bc0995466141e:"400000000000000000000",b73b4ff99eb88fd89b0b6d57a9bc338e886fa06a:"32000000000000000000",b1c751786939bba0d671a677a158c6abe7265e46:"10000000000000000000000",e881bbbe69722d81efecaa48d1952a10a2bfac8f:"16000000000000000000000",fe96c4cd381562401aa32a86e65b9d52fa8aee27:"2640000000000000000000","683dba36f7e94f40ea6aea0d79b8f521de55076e":"140000000000000000000","5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d":"199800000000000000000","8914a680a5aec5226d4baaec2e5552b44dd7c874":"100076000000000000000","041170f581de80e58b2a045c8f7c1493b001b7cb":"889800000000000000000","4665e47396c7db97eb2a03d90863d5d4ba319a94":"600000000000000000000",ed4be04a052d7accb3dcce90319dba4020ab2c68:"37547947000000000000000","4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6":"2000000000000000000000",a21442ab05340ade68c915f3c3399b9955f3f7eb:"775000000000000000000","655934da8e744eaa3de34dbbc0894c4eda0b61f2":"200000000000000000000","6038740ae28d66ba93b0be08482b3205a0f7a07b":"316000000000000000000","99924a9816bb7ddf3fec1844828e9ad7d06bf4e6":"1760000000000000000000","6847825bdee8240e28042c83cad642f286a3bddc":"1500000000000000000000",a718aaad59bf395cba2b23e09b02fe0c89816247:"999600000000000000000","2c89f5fdca3d155409b638b98a742e55eb4652b7":"98500000000000000000000","1a7044e2383f8708305b495bd1176b92e7ef043a":"200000000000000000000","282e80a554875a56799fa0a97f5510e795974c4e":"1000000000000000000000",ffb3bcc3196a8c3cb834cec94c34fed35b3e1054:"1340000000000000000000",d135794b149a18e147d16e621a6931f0a40a969a:"20000000000000000000000","6b94615db750656ac38c7e1cf29a9d13677f4e15":"12000000000000000000000",ecbe425e670d39094e20fb5643a9d818eed236de:"5000000000000000000000","511e0efb04ac4e3ff2e6550e498295bfcd56ffd5":"668500000000000000000",ff65511cada259260c1ddc41974ecaecd32d6357:"1760000000000000000000","9ffc5fe06f33f5a480b75aa94eb8556d997a16c0":"20000000000000000000","57df23bebdc65eb75feb9cb2fad1c073692b2baf":"4000000000000000000000","207ef80b5d60b6fbffc51f3a64b8c72036a5abbd":"6685000000000000000000",c573e841fa08174a208b060ccb7b4c0d7697127f:"668500000000000000000","411610b178d5617dfab934d293f512a93e5c10e1":"170000000000000000000","9991614c5baa47dd6c96874645f97add2c3d8380":"1970000000000000000000","2d3480bf0865074a72c7759ee5137b4d70c51ce9":"200000000000000000000","9d40e012f60425a340d82d03a1c757bfabc706fb":"169799000000000000000","47648bed01f3cd3249084e635d14daa9e7ec3c8a":"194000000000000000000",a5ff62222d80c013cec1a0e8850ed4d354dac16d:"207600000000000000000",f80d3619702fa5838c48391859a839fb9ce7160f:"1992800000000000000000","7c0f5e072043c9ee740242197e78cc4b98cdf960":"200000000000000000000",a40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa:"1000000000000000000000","2eeed50471a1a2bf53ee30b1232e6e9d80ef866d":"20000000000000000000","0c2808b951ed9e872d7b32790fcc5994ae41ffdc":"102000000000000000000000","7f06c89d59807fa60bc60136fcf814cbaf2543bd":"10000000000000000000000","8d4b603c5dd4570c34669515fdcc665890840c77":"18200000000000000000",d5e5c135d0c4c3303934711993d0d16ff9e7baa0:"2000000000000000000000","241361559feef80ef137302153bd9ed2f25db3ef":"20000000000000000000000",db63122de7037da4971531fae9af85867886c692:"277000000000000000000","417e4e2688b1fd66d821529e46ed4f42f8b3db3d":"2000000000000000000000","127db1cadf1b771cbd7475e1b272690f558c8565":"14000000000000000000000","48659d8f8c9a2fd44f68daa55d23a608fbe500dc":"2000000000000000000000",b3a64b1176724f5409e1414a3523661baee74b4a:"25610000000000000000",aa14422d6f0ae5a758194ed15780c838d67f1ee1:"28503824000000000000000",a0a0e65204541fca9b2fb282cd95138fae16f809:"10000000000000000000000",d2107b353726c3a2b46566eaa7d9f80b5d21dbe3:"20000000000000000000",e4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1:"300443000000000000000","09f3f601f605441140586ce0656fa24aa5b1d9ae":"1539400000000000000000","87fcbe7c4193ffcb08143779c9bec83fe7fda9fc":"100275000000000000000","03ebc63fda6660a465045e235fbe6e5cf195735f":"141840000000000000000",bdbaf6434d40d6355b1e80e40cc4ab9c68d96116:"100000000000000000000","4e2225a1bb59bc88a2316674d333b9b0afca6655":"155000000000000000000","4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b":"2000000000000000000000","4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98":"5640000000000000000000","27146913563aa745e2588430d9348e86ea7c3510":"400000000000000000000","4c5afe40f18ffc48d3a1aec41fc29de179f4d297":"2000000000000000000000","8a810114b2025db9fbb50099a6e0cb9e2efa6bdc":"1910000000000000000000","2dee90a28f192d676a8773232b56f18f239e2fad":"18587970000000000000000","60676e92d18b000509c61de540e6c5ddb676d509":"1200000000000000000000","9bfc659c9c601ea42a6b21b8f17084ec87d70212":"10000000000000000000000","5d5d6e821c6eef96810c83c491468560ef70bfb5":"2000000000000000000000",d5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a:"1999944000000000000000","33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc":"2000000000000000000000","3abb8adfc604f48d5984811d7f1d52fef6758270":"4475000000000000000000","980a84b686fc31bdc83c221058546a71b11f838a":"779471000000000000000","0b507cf553568daaf65504ae4eaa17a8ea3cdbf5":"2000000000000000000000","896009526a2c7b0c09a6f63a80bdf29d9c87de9c":"3462830000000000000000","9696052138338c722f1140815cf7749d0d3b3a74":"500000000000000000000","3831757eae7557cb8a37a4b10644b63e4d3b3c75":"200000000000000000000","62dc72729024375fc37cbb9c7c2393d10233330f":"2000000000000000000000","44098866a69b68c0b6bc168229b9603587058967":"188000000000000000000","25adb8f96f39492c9bb47c5edc88624e46075697":"26740000000000000000000",fd4de8e3748a289cf7d060517d9d38388db01fb8:"250000000000000000000","6be7595ea0f068489a2701ec4649158ddc43e178":"2000000000000000000000",d402b4f6a099ebe716cb14df4f79c0cd01c6071b:"2000000000000000000000",a07682000b1bcf3002f85c80c0fa2949bd1e82fd:"4000000000000000000000",eb4f00e28336ea09942588eeac921811c522143c:"2000000000000000000000","8f31c7005197ec997a87e69bec48649ab94bb2a5":"4000000000000000000000",e7fd8fd959aed2767ea7fa960ce1db53af802573:"1000000000000000000000",a8ef9ad274436042903e413c3b0c62f5f52ed584:"10000000000000000000000",d83ad260e9a6f432fb6ea28743299b4a09ad658c:"2000000000000000000000",b5c816a8283ca4df68a1a73d63bd80260488df08:"200000000000000000000",d7d3c75920590438b82c3e9515be2eb6ed7a8b1a:"60000000000000000000000",af3cb5965933e7dad883693b9c3e15beb68a4873:"2000000000000000000000","6e899e59a9b41ab7ea41df7517860f2acb59f4fd":"20000000000000000000000","527a8ca1268633a6c939c5de1b929aee92aeac8d":"900000000000000000000","1680cec5021ee93050f8ae127251839e74c1f1fd":"13098657000000000000000",ff7843c7010aa7e61519b762dfe49124a76b0e4e:"933580000000000000000000","140fba58dbc04803d84c2130f01978f9e0c73129":"400000000000000000000","0261ad3a172abf1315f0ffec3270986a8409cb25":"203500000000000000000",ab5a79016176320973e8cd38f6375530022531c0:"1000000000000000000000",fca73eff8771c0103ba3cc1a9c259448c72abf0b:"1000000000000000000000","07d41217badca5e0e60327d845a3464f0f27f84a":"4000000000000000000000","2c1c19114e3d6de27851484b8d2715e50f8a1065":"100000000000000000000",abd21eff954fc6a7de26912a7cbb303a6607804e:"1517000000000000000000",f303d5a816affd97e83d9e4dac2f79072bb0098f:"960000000000000000000","114cfefe50170dd97ae08f0a44544978c599548d":"863000000000000000000","647b85044df2cf0b4ed4882e88819fe22ae5f793":"1000032000000000000000","1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a":"2000000000000000000000","0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916":"600000000000000000000",c765e00476810947816af142d46d2ee7bca8cc4f:"500000000000000000000",b57b04fa23d1203fae061eac4542cb60f3a57637:"191000000000000000000",e192489b85a982c1883246d915b229cb13207f38:"5000000000000000000000","5f483ffb8f680aedf2a38f7833afdcde59b61e4b":"2000000000000000000000",b46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d:"3139000000000000000000","59c7f785c93160e5807ed34e5e534bc6188647a7":"640000000000000000000","18e4ce47483b53040adbab35172c01ef64506e0c":"9000000000000000000000","296d66b521571a4e4103a7f562c511e6aa732d81":"668500000000000000000",bcd99edc2160f210a05e3a1fa0b0434ced00439b:"2000000000000000000000",f14f0eb86db0eb68753f16918e5d4b807437bd3e:"200000000000000000000","60d5667140d12614b21c8e5e8a33082e32dfcf23":"20000000000000000000000","8ccabf25077f3aa41545344d53be1b2b9c339000":"1695400000000000000000","8cc0d7c016fa7aa950114aa1db094882eda274ea":"159800000000000000000",c71145e529c7a714e67903ee6206e4c3042b6727:"1430000000000000000000",c5e9939334f1252ed2ba26814487dfd2982b3128:"70000000000000000000",f09b3e87f913ddfd57ae8049c731dba9b636dfc3:"608000000000000000000","4349225a62f70aea480a029915a01e5379e64fa5":"2598000000000000000000","666b4f37d55d63b7d056b615bb74c96b3b01991a":"4000000000000000000000","8bd6b1c6d74d010d1008dba6ef835d4430b35c32":"50000000000000000000","7363cd90fbab5bb8c49ac20fc62c398fe6fb744c":"2000000000000000000000",b7479dab5022c4d5dbaaf8de171b4e951dd1a457:"80000000000000000000","5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9":"1910000000000000000000","32a20d028e2c6218b9d95b445c771524636a22ef":"9500000000000000000000","1bd28cd5c78aee51357c95c1ef9235e7c18bc854":"2000000000000000000000","693492a5c51396a482881669ccf6d8d779f00951":"345827000000000000000",bd723b289a7367b6ece2455ed61edb49670ab9c4:"4999995000000000000000","1be3542c3613687465f15a70aeeb81662b65cca8":"2000000000000000000000","5803e68b34da121aef08b602badbafb4d12481ca":"18000000000000000000000","9ac907ee85e6f3e223459992e256a43fa08fa8b2":"10000000000000000000000","833b6a8ec8da408186ac8a7d2a6dd61523e7ce84":"16000000000000000000000","64628c6fb8ec743adbd87ce5e018d531d9210437":"26740000000000000000","566c28e34c3808d9766fe8421ebf4f2b1c4f7d77":"1970000000000000000000","171ad9a04bedc8b861e8ed4bddf5717813b1bb48":"400000000000000000000","4f85bc1fc5cbc9c001e8f1372e07505370d8c71f":"940000000000000000000","6d2f976734b9d0070d1883cf7acab8b3e4920fc1":"10000000000000000000000","357a02c0a9dfe287de447fb67a70ec5b62366647":"26740000000000000000","44a01fb04ac0db2cce5dbe281e1c46e28b39d878":"1999944000000000000000","3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19":"170016000000000000000","334340ee4b9cdc81f850a75116d50ee9b69825bf":"2000000000000000000000",c0afb7d8b79370cfd663c68cc6b9702a37cd9eff:"1000000000000000000000","2016895df32c8ed5478269468423aea7b7fbce50":"20000000000000000000","1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb":"2000000000000000000000","260df8943a8c9a5dba7945327fd7e0837c11ad07":"200000000000000000000","32fbeed6f626fcdfd51acafb730b9eeff612f564":"2000000000000000000000","9bd88068e13075f3a8cac464a5f949d6d818c0f6":"6000000000000000000000",ab4572fbb1d72b575d69ec6ad17333873e8552fc:"1999942000000000000000",e44ea51063405154aae736be2bf1ee3b9be639ae:"4000000000000000000000","617f20894fa70e94a86a49cd74e03238f64d3cd9":"5000057000000000000000","3e914e3018ac00449341c49da71d04dfeeed6221":"4000000000000000000000","590181d445007bd0875aaf061c8d51153900836a":"2000000000000000000000","27987110221a880826adb2e7ab5eca78c6e31aec":"4000000000000000000000","06618e9d5762df62028601a81d4487d6a0ecb80e":"1337000000000000000000","8cc652dd13e7fe14dabbb36d5d320db9ffee8a54":"1790000000000000000000","8973aefd5efaee96095d9e288f6a046c97374b43":"141000000000000000000",dbd51cdf2c3bfacdff106221de2e19ad6d420414:"1760000000000000000000","25697ef20cccaa70d32d376f8272d9c1070c3d78":"200000000000000000000","0726c42e00f45404836eb1e280d073e7059687f5":"1623331000000000000000","5e0785532c7723e4c0af9357d5274b73bdddddde":"25000088000000000000000","38430e931d93be01b4c3ef0dc535f1e0a9610063":"10000000000000000000000","143d536b8b1cb84f56a39e0bc81fd5442bcacce1":"100000000000000000000","5c6d041da7af4487b9dc48e8e1f60766d0a56dbc":"1457800000000000000000",f9bfb59d538afc4874d4f5941b08c9730e38e24b:"40000000000000000000","83dbfd8eda01d0de8e158b16d0935fc2380a5dc7":"600000000000000000000","0e6cd664ad9c1ed64bf98749f40644b626e3792c":"60000000000000000000000",ce2e0da8934699bb1a553e55a0b85c169435bea3:"4999962000000000000000",a39bfee4aec9bd75bd22c6b672898ca9a1e95d32:"10000000000000000000000","1bc44c8761231ba1f11f5faa40fa669a013e12ce":"203586000000000000000","68809af5d532a11c1a4d6e32aac75c4c52b08ead":"10000000000000000000000","80cc21bd99f39005c58fe4a448909220218f66cb":"1000072000000000000000","1080c1d8358a15bc84dac8253c6883319020df2c":"2674000000000000000000","9eaf6a328a4076024efa6b67b48b21eedcc0f0b8":"158000000000000000000","1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4":"112970000000000000000",acbd185589f7a68a67aa4b1bd65077f8c64e4e21:"200000000000000000000",ff78541756ab2b706e0d70b18adb700fc4f1643d:"43250000000000000000000","7f0ec3db804692d4d1ea3245365aab0590075bc4":"4000000000000000000000","4a918032439159bb315b6725b6830dc83697739f":"343800000000000000000",bc1b021a78fde42d9b5226d6ec26e06aa3670090:"80000000000000000000","2f2523cc834f0086052402626296675186a8e582":"16000000000000000000000","9db2e15ca681f4c66048f6f9b7941ed08b1ff506":"4000000000000000000000","20b9a9e6bd8880d9994ae00dd0b9282a0beab816":"500000000000000000000","3bddbc8134f77d55597fc97c26d26698090604eb":"13700000000000000000","80c3a9f695b16db1597286d1b3a8b7696c39fa27":"100000000000000000000","53194d8afa3e883502767edbc30586af33b114d3":"2000000000000000000000",e2efd0a9bc407ece03d67e8ec8e9d283f48d2a49:"12280000000000000000000","1cb450920078aab2317c7db3b38af7dd298b2d41":"340000000000000000000",ca8276c477b4a07b80107b843594189607b53bec:"6000000000000000000000","147f4210ab5804940a0b7db8c14c28396b62a6bf":"2000000000000000000000",d3df3b53cb3b4755de54e180451cc44c9e8ae0aa:"659801000000000000000",f7c708015071d4fb0a3a2a09a45d156396e3349e:"3000000000000000000000",a8cafac32280d021020bf6f2a9782883d7aabe12:"100000000000000000000","399aa6f5d078cb0970882bc9992006f8fbdf3471":"1000000000000000000000","15669180dee29598869b08a721c7d24c4c0ee63f":"1000000000000000000000",bba8ab22d2fedbcfc63f684c08afdf1c175090b5:"99091000000000000000","5e5a441974a83d74c687ebdc633fb1a49e7b1ad7":"3000000000000000000000","98b769cc305cecfb629a00c907069d7ef9bc3a12":"26000000000000000000",c820c711f07705273807aaaa6de44d0e4b48be2e:"155000000000000000000","12aa7d86ddfbad301692feac8a08f841cb215c37":"137000000000000000000","6ff5d361b52ad0b68b1588607ec304ae5665fc98":"1940000000000000000000","2382a9d48ec83ea3652890fd0ee79c907b5b2dc1":"133700000000000000000",b2a144b1ea67b9510f2267f9da39d3f93de26642:"2000000000000000000000",b3e20eb4de18bd060221689894bee5aeb25351ee:"73535000000000000000","101a0a64f9afcc448a8a130d4dfcbee89537d854":"15200000000000000000000","1b826fb3c012b0d159e294ba5b8a499ff3c0e03c":"2000000000000000000000",aafb7b013aa1f8541c7e327bf650adbd194c208f:"1358000000000000000000","96eb523e832f500a017de13ec27f5d366c560eff":"307600000000000000000",c7bf17c4c11f98941f507e77084fffbd2dbd3db5:"1000000000000000000000","840ec83ea93621f034e7bb3762bb8e29ded4c479":"2500000000000000000000","0e9c511864a177f49be78202773f60489fe04e52":"6000000000000000000000",f6f1a44309051c6b25e47dff909b179bb9ab591c:"1940000000000000000000","63fe6bcc4b8a9850abbe75803730c932251f145b":"18200000000000000000",f88b58db37420b464c0be88b45ee2b95290f8cfa:"40000000000000000000","9d4d321177256ebd9afbda304135d517c3dc5693":"616000000000000000000","8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6":"1000000000000000000000",cb0dd7cf4e5d8661f6028943a4b9b75c914436a7:"120000000000000000000000",a3979a92760a135adf69d72f75e167755f1cb8c3:"100000000000000000000",ca22cda3606da5cad013b8074706d7e9e721a50c:"6816200000000000000000","157559adc55764cc6df79323092534e3d6645a66":"6000000000000000000000","4f52ad6170d25b2a2e850eadbb52413ff2303e7f":"3040000000000000000000",eed28c3f068e094a304b853c950a6809ebcb03e0:"17300000000000000000000","2e47f287f498233713850d3126823cc67dcee255":"14600000000000000000","6c359e58a13d4578a9338e335c67e7639f5fb4d7":"218000000000000000000","4968a2cedb457555a139295aea28776e54003c87":"10092310000000000000000","4041374b0feef4792e4b33691fb86897a4ff560c":"365000000000000000000","83e48055327c28b5936fd9f4447e73bdb2dd3376":"2674000000000000000000","32b7feebc5c59bf65e861c4c0be42a7611a5541a":"2212000000000000000000","21a6db6527467bc6dad54bc16e9fe2953b6794ed":"14000000000000000000000",e8ead1bb90ccc3aea2b0dcc5b58056554655d1d5:"7760000000000000000000","7a94b19992ceb8ce63bc92ee4b5aded10c4d9725":"16770000000000000000000","90e93e4dc17121487952333614002be42356498e":"1910000000000000000000",aab00abf5828d7ebf26b47ceaccdb8ba03325166:"10000000000000000000000","0a9ab2638b1cfd654d25dab018a0aebddf85fd55":"21801000000000000000",b12ed07b8a38ad5506363fc07a0b6d799936bdaf:"10000000000000000000000",f4a9d00cefa97b7a58ef9417fc6267a5069039ee:"21800000000000000000","04a1cada1cc751082ff8da928e3cfa000820a9e9":"40000000000000000000","9018cc1f48d2308e252ab6089fb99a7c1d569410":"200000000000000000000","895d694e880b13ccd0848a86c5ce411f88476bbf":"199955000000000000000","40a7f72867a7dc86770b162b7557a434ed50cce9":"1000000000000000000000","467ea10445827ef1e502daf76b928a209e0d4032":"2000000000000000000000","7553aa23b68aa5f57e135fe39fdc235eaca8c98c":"1000000000000000000000","31b43b015d0081643c6cda46a7073a6dfdbca825":"50019600000000000000000",d82fd9fdf6996bedad2843159c06f37e0924337d:"1688800000000000000000","24a4eb36a7e498c36f99975c1a8d729fd6b305d7":"258000000000000000000","91d66ea6288faa4b3d606c2aa45c7b6b8a252739":"2000000000000000000000","83a402438e0519773d5448326bfb61f8b20cf52d":"1520000000000000000000",c2fafdd30acb6d6706e9293cb02641f9edbe07b5:"1494224000000000000000","79dba256472db4e058f2e4cdc3ea4e8a42773833":"1460000000000000000000","498abdeb14c26b7b7234d70fceaef361a76dff72":"3000000000000000000000","7b73242d75ca9ad558d650290df17692d54cd8b8":"2000200000000000000000","6ec3659571b11f889dd439bcd4d67510a25be57e":"123000000000000000000",ab098633eeee0ccefdf632f9575456f6dd80fc86:"200000000000000000000000",f4a51fce4a1d5b94b0718389ba4e7814139ca738:"300000000000000000000","8f561b41b209f248c8a99f858788376250609cf3":"1700000000000000000000","05d0f4d728ebe82e84bf597515ad41b60bf28b39":"4200000000000000000000",dfdf43393c649caebe1bb18059decb39f09fb4e8:"400000000000000000000","0089508679abf8c71bf6781687120e3e6a84584d":"1800000000000000000000","80907f593148b57c46c177e23d25abc4aae18361":"100000000000000000000","94fcceadfe5c109c5eaeaf462d43873142c88e22":"4800000000000000000000",e89249738b7eced7cb666a663c49cbf6de8343ea:"2000000000000000000000","23c99ba087448e19c9701df66e0cab52368331fa":"2000000000000000000000",a68e0c30cba3bc5a883e540320f999c7cd558e5c:"1799869000000000000000","88888a57bd9687cbf950aeeacf9740dcc4d1ef59":"1820000000000000000000",e9b36fe9b51412ddca1a521d6e94bc901213dda8:"10000000000000000000000",a9145046fa3628cf5fd4c613927be531e6db1fdd:"112000000000000000000",e82c58c579431b673546b53a86459acaf1de9b93:"1000000000000000000000",bd6a474d66345bcdd707594adb63b30c7822af54:"4000000000000000000000","6a6159074ab573e0ee581f0f3df2d6a594629b74":"310000000000000000000","2e7f465520ec35cc23d68e75651bb6689544a196":"1050049000000000000000",ac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16:"1760000000000000000000",bd59094e074f8d79142ab1489f148e32151f2089:"20000000000000000000","0ba6e46af25a13f57169255a34a4dac7ce12be04":"500000000000000000000","35145f620397c69cb8e00962961f0f4886643989":"6000000000000000000000",d84b922f7841fc5774f00e14604ae0df42c8551e:"4011000000000000000000","44232ff66ddad1fd841266380036afd7cf7d7f42":"200000000000000000000","516954025fca2608f47da81c215eedfd844a09ff":"382000000000000000000",e5aa0b833bb916dc19a8dd683f0ede241d988eba:"3000000000000000000000","80ea1acc136eca4b68c842a95adf6b7fee7eb8a2":"4000000000000000000000","98a0e54c6d9dc8be96276cebf4fec460f6235d85":"1969803000000000000000","91620f3eb304e813d28b0297556d65dc4e5de5aa":"3820000000000000000000","7bb984c6dbb9e279966afafda59c01d02627c804":"8050000000000000000000","41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9":"133700000000000000000","8dbc3e6cb433e194f40f82b40faadb1f8b856116":"1910000000000000000000","889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7":"40000000000000000000",debbdd831e0f20ae6e378252decdf92f7cf0c658:"2000000000000000000000",a22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91:"1020000000000000000000","823219a25976bb2aa4af8bad41ac3526b493361f":"2000000000000000000000","6d39a9e98f81f769d73aad2cead276ac1387babe":"394000000000000000000","751abcb6cc033059911815c96fd191360ab0442d":"8000000000000000000000","64d80c3b8ba68282290b75e65d8978a15a87782c":"1970000000000000000000","6ba8f7e25fc2d871618e24e40184199137f9f6aa":"400020000000000000000","25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da":"2000000000000000000000","0f7b61c59b016322e8226cafaee9d9e76d50a1b3":"4000000000000000000000","7526e482529f0a14eec98871dddd0e721b0cd9a2":"20000000000000000000","071dd90d14d41f4ff7c413c24238d3359cd61a07":"36400000000000000000000",a986762f7a4f294f2e0b173279ad2c81a2223458:"20000000000000000000",e667f652f957c28c0e66d0b63417c80c8c9db878:"601650000000000000000","7b98e23cb96beee80a168069ebba8f20edd55ccf":"214500000000000000000","2d8e5bb8d3521695c77e7c834e0291bfacee7408":"1970000000000000000000",f23d01589eb12d439f7448ff54307529f191858d:"2000000000000000000000",abd9605b3e91acfd777830d16463478ae0fc7720:"133700000000000000000",eabb90d37989aab31feae547e0e6f3999ce6a35d:"2000000000000000000000","0abfb39b11486d79572866195ba26c630b6784db":"121500000000000000000000",d56a144d7af0ae8df649abae535a15983aa04d02:"5000000000000000000000","998c1f93bcdb6ff23c10d0dc924728b73be2ff9f":"1002750000000000000000",bc62b3096a91e7dc11a1592a293dd2542150d751:"1000000000000000000000","0c8f66c6017bce5b20347204b602b743bad78d60":"2000000000000000000000","4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1":"2000000000000000000000",b44605552471a6eee4daab71ff3bb41326d473e0:"839200000000000000000",fc3d226bb36a58f526568857b0bb12d109ec9301:"2000000000000000000000",adc8228ef928e18b2a807d00fb3c6c79cd1d9e96:"22800000000000000000","9df32a501c0b781c0281022f42a1293ffd7b892a":"9000000000000000000000",e7da609d40cde80f00ce5b4ffb6aa9d0b03494fc:"1000000000000000000000","9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d":"20769000000000000000","8e9c08f738661f9676236eff82ba6261dd3f4822":"100000000000000000000",deb97254474c0d2f5a7970dcdb2f52fb1098b896:"1000000000000000000000",b4256273962bf631d014555cc1da0dcc31616b49:"2000000000000000000000","23abd9e93e7957e5b636be6579051c15e5ce0b0e":"17188400000000000000000","382591e7217b435e8e884cdbf415fe377a6fe29e":"8022000000000000000000",f17adb740f45cbbde3094e7e13716f8103f563bd:"2000000000000000000000","61ed5596c697207f3d55b2a51aa7d50f07fa09e8":"2000000000000000000000","788e809741a3b14a22a4b1d937c82cfea489eebe":"7000000000000000000000","992646ac1acaabf5ddaba8f9429aa6a94e7496a7":"1000110000000000000000","51296f5044270d17707646129c86aad1645eadc1":"1337133000000000000000","6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00":"20000000000000000000","30db6b9b107e62102f434a9dd0960c2021f5ce4c":"599742000000000000000","63fc93001305adfbc9b85d29d9291a05f8f1410b":"1000000000000000000000",df6ed6006a6abe886ed33d95a4de28fc12183927:"910000000000000000000","4745ab181a36aa8cbf2289d0c45165bc7ebe2381":"39400000000000000000","7bb0fdf5a663b5fba28d9c902af0c811e252f298":"200000000000000000000",e0ff0bd9154439c4a5b7233e291d7d868af53f33:"396110000000000000000","09261f9acb451c3788844f0c1451a35bad5098e3":"8664000000000000000000","2813d263fc5ff2479e970595d6b6b560f8d6d6d1":"2000000000000000000000","2cd19694d1926a0fa9189edebafc671cf1b2caa5":"1000000000000000000000","05336e9a722728d963e7a1cf2759fd0274530fca":"915583000000000000000",e5b7af146986c0ff8f85d22e6cc334077d84e824:"2000000000000000000000","3e4fbd661015f6461ed6735cefef01f31445de3a":"16200000000000000000000","4f5df5b94357de948604c51b7893cddf6076baad":"3760000000000000000000","9567a0de811de6ff095b7ee64e7f1b83c2615b80":"267400000000000000000","955db3b74360b9a268677e73cea821668af6face":"30000000000000000000000","3e040d40cb80ba0125f3b15fdefcc83f3005da1b":"1038000000000000000000","43f470ed659e2991c375957e5ddec5bd1d382231":"100000000000000000000","047f9bf1529daf87d407175e6f171b5e59e9ff3e":"650000000000000000000","15e3b584056b62c973cf5eb096f1733e54c15c91":"936702000000000000000",c03de42a109b657a64e92224c08dc1275e80d9b2:"20000000000000000000",e4fc13cfcbac1b17ce7783acd423a845943f6b3a:"20000000000000000000","65ff874fafce4da318d6c93d57e2c38a0d73e820":"1000160000000000000000","8b997dbc078ad02961355da0a159f2927ed43d64":"197000000000000000000","2f5080b83f7e2dc0a1dd11b092ad042bff788f4c":"3338355000000000000000","1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2":"2000000000000000000000","5ade77fd81c25c0af713b10702768c1eb2f975e7":"20000000000000000000",acaaddcbf286cb0e215dda55598f7ff0f4ada5c6:"1000000000000000000000","64e0217a5b38aa40583625967fa9883690388b6f":"200000000000000000000",ae648155a658370f929be384f7e001047e49dd46:"13561000000000000000000",f7c1b443968b117b5dd9b755572fcd39ca5ec04b:"456082000000000000000",de027efbb38503226ed871099cb30bdb02af1335:"1000000000000000000000","49cf1e54be363106b920729d2d0ba46f0867989a":"268000000000000000000",e7f4d7fe6f561f7fa1da3005fd365451ad89df89:"200000000000000000000",b036916bdacf94b69e5a8a65602975eb026104dd:"20000000000000000000",e923c06177b3427ea448c0a6ff019b54cc548d95:"36281000000000000000",ad927e03d1599a78ca2bf0cad2a183dceb71eac0:"1970000000000000000000",ef39ca9173df15531d73e6b72a684b51ba0f2bb4:"1598000000000000000000","6443b8ae639de91cf73c5ae763eeeed3ddbb9253":"2000000000000000000000","8026435aac728d497b19b3e7e57c28c563954f2b":"1730000000000000000000",ed327a14d5cfadd98103fc0999718d7ed70528ea:"1440000000000000000000","38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33":"2000000000000000000000",f0b1f9e27832c6de6914d70afc238c749995ace4:"2000000000000000000000","770d98d31b4353fceee8560c4ccf803e88c0c4e0":"600000000000000000000",ba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e:"32200000000000000000000","233842b1d0692fd11140cf5acda4bf9630bae5f8":"2000000000000000000000",b5dd50a15da34968890a53b4f13fe1af081baaaa:"4000000000000000000000","72072a0ef1cff3d567cdd260e708ddc11cbc9a31":"100000000000000000000","81a88196fac5f23c3e12a69dec4b880eb7d97310":"2000000000000000000000","6c63f84556d290bfcd99e434ee9997bfd779577a":"2000000000000000000000","5f167aa242bc4c189adecb3ac4a7c452cf192fcf":"1999980000000000000000","445cb8de5e3df520b499efc980f52bff40f55c76":"2000000000000000000000",aec27ce2133e82d052520afb5c576d9f7eb93ed2:"65232380000000000000000","07dc2bf83bc6af19a842ffea661af5b41b67fda1":"1500000000000000000000",febd48d0ffdbd5656cd5e686363a61145228f279:"2800000000000000000000",a86db07d9f812f4796622d40e03d135874a88a74:"20000000000000000000","5413c97ffa4a6e2a7bba8961dc9fce8530a787d7":"1000000000000000000000",e2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908:"1400000000000000000000","2e8eb30a716e5fe15c74233e039bfb1106e81d12":"100000000000000000000",fd88d114220f081cb3d5e15be8152ab07366576a:"300000000000000000000",e408fceaa1b98f3c640f48fcba39f056066d6308:"10000000000000000000000","057dd29f2d19aa3da42327ea50bce86ff5c911d9":"4000000000000000000000",ed1065dbcf9d73c04ffc7908870d881468c1e132:"2000000000000000000000",bbc9d8112e5beb02dd29a2257b1fe69b3536a945:"2000000000000000000000","79c1be19711f73bee4e6316ae7549459aacea2e0":"400000000000000000000","1bcf3441a866bdbe963009ce33c81cbb0261b02c":"182000000000000000000",e2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926:"4000000000000000000000","77701e2c493da47c1b58f421b5495dee45bea39b":"6068279000000000000000","37a05aceb9395c8635a39a7c5d266ae610d10bf2":"30000000000000000000000",c6355ec4768c70a49af69513cd83a5bca7e3b9cd:"6000000000000000000000",e3c0c128327a9ad80148139e269773428e638cb0:"2000000000000000000000",f7f4898c4c526d955f21f055cb6e47b915e51964:"2288000000000000000000","29824e94cc4348bc963279dcdf47391715324cd3":"1940000000000000000000",eaa45cea02d87d2cc8fda9434e2d985bd4031584:"1920750000000000000000",e08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d:"2000000000000000000000","87c498170934b8233d1ad1e769317d5c475f2f40":"1015200000000000000000","352d29a26e8a41818181746467f582e6e84012e0":"6000000000000000000000","403220600a36f73f24e190d1edb2d61be3f41354":"304000000000000000000","0a48296f7631708c95d2b74975bc4ab88ac1392a":"5000000000000000000000",ffe0e997f1977a615f5a315af413fd4869343ba0:"100076000000000000000",ca66b2280fa282c5b67631ce552b62ee55ad8474:"1969488000000000000000","2b6ed29a95753c3ad948348e3e7b1a251080ffb9":"250000000000000000000000","492e70f04d18408cb41e25603730506b35a2876b":"39400000000000000000","0e6baaa3deb989f289620076668618e9ac332865":"200000000000000000000",b753a75f9ed10b21643a0a3dc0517ac96b1a4068:"401800000000000000000","3ad915d550b723415620f5a9b5b88a85f382f035":"1000000000000000000000",c992be59c6721caf4e028f9e8f05c25c55515bd4:"20000000000000000000","02b643d6fabd437a851accbe79abb7fde126dccf":"7200000000000000000000","88797e58675ed5cc4c19980783dbd0c956085153":"2000000000000000000000",ac142eda1157b9a9a64390df7e6ae694fac98905:"200000000000000000000","656579daedd29370d9b737ee3f5cd9d84bc2b342":"1430000000000000000000","9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78":"1337000000000000000000",bee8d0b008421954f92d000d390fb8f8e658eaee:"1000000000000000000000","7989d09f3826c3e5af8c752a8115723a84d80970":"415554000000000000000","7cd5d81eab37e11e6276a3a1091251607e0d7e38":"62856000000000000000","6ce1b0f6adc47051e8ab38b39edb4186b03babcc":"1207800000000000000000",abfcf5f25091ce57875fc674dcf104e2a73dd2f2:"19700000000000000000","1c3ef05dae9dcbd489f3024408669de244c52a02":"20000000000000000000000",cfa8b37127149bdbfee25c34d878510951ea10eb:"2000000000000000000000","74863acec75d03d53e860e64002f2c165e538377":"1000000000000000000000","59b9e733cba4be00429b4bd9dfa64732053a7d55":"20000000000000000000",aeadfcd0978edad74a32bd01a0a51d37f246e661:"260000000000000000000","08090876baadfee65c3d363ba55312748cfa873d":"1700170000000000000000",e589fa76984db5ec4004b46ee8a59492c30744ce:"2800000000000000000000","3485361ee6bf06ef6508ccd23d94641f814d3e2f":"2000000000000000000000","5cb731160d2e8965670bde925d9de5510935347d":"40000000000000000000","8ef4d8a2c23c5279187b64e96f741404085385f3":"299598000000000000000",e246683cc99db7c4a52bcbacaab0b32f6bfc93d7:"2000000000000000000000","7d273e637ef1eac481119413b91c989dc5eac122":"500000000000000000000","6efba8fb2ac5b6730729a972ec224426a287c3ad":"283152000000000000000","0773eeacc050f74720b4a1bd57895b1cceeb495d":"10000000000000000000000","88a122a2382c523931fb51a0ccad3beb5b7259c3":"2000000000000000000000",b0b779b94bfa3c2e1f587bcc9c7e21789222378f:"1550000000000000000000","86f95c5b11a293940e35c0b898d8b75f08aab06d":"29605000000000000000000",cf2288ef4ebf88e86db13d8a0e0bf52a056582c3:"2533000000000000000000","71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16":"1600000000000000000000","9917d68d4af341d651e7f0075c6de6d7144e7409":"5660000000000000000000","1e5800227d4dcf75e30f5595c5bed3f72e341e3b":"248300000000000000000","123759f333e13e3069e2034b4f05398918119d36":"20000000000000000000000",f798d16da4e460c460cd485fae0fa0599708eb82:"1000000000000000000000","864bec5069f855a4fd5892a6c4491db07c88ff7c":"1000000000000000000000",fa283299603d8758e8cab082125d2c8f7d445429:"6415633000000000000000",c811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2:"1400140000000000000000","61547d376e5369bcf978fc162c3c56ae453547e8":"200000000000000000000","0d747ee5969bf79d57381d6fe3a2406cd0d8ce27":"100000000000000000000000",f8962b75db5d24c7e8b7cef1068c3e67cebb30a5:"280000000000000000000","35bf6688522f35467a7f75302314c02ba176800e":"17400000000000000000000","05cb6c3b0072d3116761b532b218443b53e8f6c5":"141722000000000000000000","91c80caa081b38351d2a0e0e00f80a34e56474c1":"1000000000000000000000",d75a502a5b677287470f65c5aa51b87c10150572:"907400000000000000000","3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1":"2575465000000000000000","736bf1402c83800f893e583192582a134eb532e9":"9999996000000000000000",c2cb1ada5da9a0423873814793f16144ef36b2f3:"1334326000000000000000",efcce06bd6089d0e458ef561f5a689480afe7000:"600000000000000000000",bfe6bcb0f0c07852643324aa5df5fd6225abc3ca:"74500000000000000000","9d799e943e306ba2e5b99c8a6858cbb52c0cf735":"300000000000000000000",f45b1dcb2e41dc27ffa024daadf619c11175c087:"19700000000000000000","08e38ee0ce48c9ca645c1019f73b5355581c56e6":"1600000000000000000000","2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09":"3397053000000000000000",bdc02cd4330c93d6fbda4f6db2a85df22f43c233:"2000000000000000000000",acec91ef6941cf630ba9a3e787a012f4a2d91dd4:"80000000000000000000000","27ac073be79ce657a93aa693ee43bf0fa41fef04":"50000000000000000000000","22fe884d9037291b4d52e6285ae68dea0be9ffb5":"2000000000000000000000",c3107a9af3322d5238df0132419131629539577d:"492650000000000000000",b5cac5ed03477d390bb267d4ebd46101fbc2c3da:"197000000000000000000","58fb947364e7695765361ebb1e801ffb8b95e6d0":"200000000000000000000","32860997d730b2d83b73241a25d3667d51c908ef":"499938000000000000000",c79d5062c796dd7761f1f13e558d73a59f82f38b:"8000000000000000000000",fa142fe47eda97e6503b386b18a2bedd73ccb5b1:"850080000000000000000","6ca5de00817de0cedce5fd000128dede12648b3c":"20000000000000000000","214b743955a512de6e0d886a8cbd0282bee6d2a2":"2000000000000000000000",ede79ae1ff4f1606d59270216fa46ab2ddd4ecaa:"146000000000000000000","528101ce46b720a2214dcdae6618a53177ffa377":"508876000000000000000",b5870ce342d43343333673038b4764a46e925f3e:"1000000000000000000000","843bd3502f45f8bc4da370b323bdac3fcf5f19a6":"1476000000000000000000","5067f4549afbfe884c59cbc12b96934923d45db0":"1000000000000000000000","6f2a42e6e033d01061131929f7a6ee1538021e52":"2000000000000000000000",e9e1f7cb00a110edd0ebf8b377ef8a7bb856117f:"200000000000000000000",a387ecde0ee4c8079499fd8e03473bd88ad7522a:"1970000000000000000000","6dff90e6dc359d2590882b1483edbcf887c0e423":"1000000000000000000000","22e512149a18d369b73c71efa43e86c9edabaf1d":"1455000000000000000000",a3203095edb7028e6871ce0a84f548459f83300a:"4000000000000000000000","93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f":"19100000000000000000","8c75956e8fed50f5a7dd7cfd27da200f6746aea6":"1000000000000000000000",afc8ebe8988bd4105acc4c018e546a1e8f9c7888:"500000000000000000000",bf9acd4445d9c9554689cabbbab18800ff1741c2:"1000000000000000000000","603f2fab7afb6e017b94766069a4b43b38964923":"1656954000000000000000",a1f765c44fe45f790677944844be4f2d42165fbd:"3687750000000000000000","4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed":"2000000000000000000000","48f60a35484fe7792bcc8a7b6393d0dda1f6b717":"3600000000000000000000","588ed990a2aff44a94105d58c305257735c868ac":"16100000000000000000000","710be8fd5e2918468be2aabea80d828435d79612":"17600000000000000000","03ea6d26d080e57aee3926b18e8ed73a4e5b2826":"200000000000000000000","20824ba1dbebbef9846ef3d0f6c1b017e6912ec4":"7170194000000000000000",f7500c166f8bea2f82347606e5024be9e4f4ce99:"20000000000000000000","9d369165fb70b81a3a765f188fd60cbe5e7b0968":"2000000000000000000000","6fddbd9bca66e28765c2162c8433548c1052ed11":"82720000000000000000000","8b81156e698639943c01a75272ad3d35851ab282":"344946000000000000000","75804aac64b4199083982902994d9c5ed8828f11":"557800000000000000000",d6e8e97ae9839b9ee507eedb28edfb7477031439:"2000000000000000000000","6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875":"4000086000000000000000",afa539586e4719174a3b46b9b3e663a7d1b5b987:"5000000000000000000000",f8a065f287d91d77cd626af38ffa220d9b552a2b:"1910000000000000000000","30e60900cacc7203f314dc604347255167fc2a0f":"2000000000000000000000","796f87ba617a2930b1670be92ed1281fb0b346e1":"128400000000000000000",f114ff0d0f24eff896edde5471dea484824a99b3:"13700000000000000000","0b80fc70282cbdd5fde35bf78984db3bdb120188":"1000160000000000000000",da7ad025ebde25d22243cb830ea1d3f64a566323:"500000000000000000000","65a52141f56bef98991724c6e7053381da8b5925":"60140000000000000000",bbc8eaff637e94fcc58d913c7770c88f9b479277:"200000000000000000000","0469e8c440450b0e512626fe817e6754a8152830":"2000000000000000000000","0727be0a2a00212048b5520fbefb953ebc9d54a0":"10000000000000000000000","7d858493f07415e0912d05793c972113eae8ae88":"1818000000000000000000","7091303116d5f2389b23238b4d656a8596d984d3":"1094014000000000000000","3702e704cc21617439ad4ea27a5714f2fda1e932":"1000000000000000000000",b87de1bcd29269d521b8761cc39cfb4319d2ead5:"1000000000000000000000",f639ac31da9f67271bd10402b7654e5ce763bd47:"399996000000000000000",e7735ec76518fc6aa92da8715a9ee3f625788f13:"1997803000000000000000","51277fe7c81eebd252a03df69a6b9f326e272207":"59965000000000000000","3b8098533f7d9bdcd307dbb23e1777ca18418936":"2000000000000000000000","2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc":"1330755000000000000000","5c3c1c645b917543113b3e6c1c054da1fe742b9a":"800000000000000000000","5ecdbaeab9106ffe5d7b519696609a05baeb85ad":"20000000000000000000","45a820a0672f17dc74a08112bc643fd1167736c3":"199943000000000000000",beef94213879e02622142bea61290978939a60d7:"5728109000000000000000","6cd212aee04e013f3d2abad2a023606bfb5c6ac7":"1999944000000000000000","92698e345378c62d8eda184d94366a144b0c105b":"1400000000000000000000","2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a":"206764195000000000000000",b7a6791c16eb4e2162f14b6537a02b3d63bfc602:"780700000000000000000",fa105f1a11b6e4b1f56012a27922e2ac2da4812f:"9550000000000000000000","2306df931a940d58c01665fa4d0800802c02edfe":"1000000000000000000000",f37bf78c5875154711cb640d37ea6d28cfcb1259:"200000000000000000000","66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9":"594808000000000000000","2bafbf9e9ed2c219f7f2791374e7d05cb06777e7":"220000000000000000000","8e9b35ad4a0a86f758446fffde34269d940ceacd":"4000000000000000000000","1b43232ccd4880d6f46fa751a96cd82473315841":"80000000000000000000","6eefdc850e87b715c72791773c0316c3559b58a4":"4000000000000000000000",f2c03e2a38998c21648760f1e5ae7ea3077d8522:"2642456000000000000000","0625d06056968b002206ff91980140242bfaa499":"1000000000000000000000","6158e107c5eb54cb7604e0cd8dc1e07500d91c3c":"50000000000000000000","02477212ffdd75e5155651b76506b1646671a1eb":"1760000000000000000000",fa44a855e404c86d0ca8ef3324251dfb349c539e:"1552000000000000000000","49897fe932bbb3154c95d3bce6d93b6d732904dd":"4000000000000000000000","9b6641b13e172fc072ca4b8327a3bc28a15b66a9":"120000000000000000000",a46b4387fb4dcce011e76e4d73547d4481e09be5:"1337000000000000000000","72bb27cb99f3e2c2cf90a98f707d30e4a201a071":"1640000000000000000000",b6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233:"1999944000000000000000",e6cb3f3124c9c9cc3834b1274bc3336456a38bac:"427382000000000000000",fcbc5c71ace79741450b012cf6b8d3f17db68a70:"9550000000000000000000","15dbb48c98309764f99ced3692dcca35ee306bac":"150000000000000000000000","2e10910ba6e0bc17e055556614cb87090f4d7e5b":"200000000000000000000",e5fbe34984b637196f331c679d0c0c47d83410e1:"2000050000000000000000","6d120f0caae44fd94bcafe55e2e279ef96ba5c7a":"4000000000000000000000",aa5afcfd8309c2df9d15be5e6a504e7d706624c5:"5846763000000000000000","37959c20b7e9931d72f5a8ae869dafddad3b6d5c":"200000000000000000000",b041310fe9eed6864cedd4bee58df88eb4ed3cac:"10000000000000000000000","986df47e76e4d7a789cdee913cc9831650936c9d":"5000000000000000000000","35aaa0465d1c260c420fa30e2629869fb6559207":"704976000000000000000","7f655c6789eddf455cb4b88099720639389eebac":"6000000000000000000000","9e3eb509278fe0dcd8e0bbe78a194e06b6803943":"940000000000000000000","3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5":"200000000000000000000","9e960dcd03d5ba99cb115d17ff4c09248ad4d0be":"200000000000000000000",f057aa66ca767ede124a1c5b9cc5fc94ef0b0137:"2077730000000000000000",f38a6ca80168537e974d14e1c3d13990a44c2c1b:"6000000000000000000000","229e430de2b74f442651ddcdb70176bc054cad54":"13545000000000000000","27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6":"2000000000000000000000","10389858b800e8c0ec32f51ed61a355946cc409b":"200000000000000000000",fd2929271e9d2095a264767e7b0df52ea0d1d400:"3000040000000000000000","44250d476e062484e9080a3967bf3a4a732ad73f":"20000000000000000000","0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f":"200000000000000000000",e083d34863e0e17f926b7928edff317e998e9c4b:"400000000000000000000","7f7192c0df1c7db6d9ed65d71184d8e4155a17ba":"79800000000000000000","51e7b55c2f9820eed73884361b5066a59b6f45c6":"2000000000000000000000","4fa983bb5e3073a8edb557effeb4f9fb1d60ef86":"1599800000000000000000","5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b":"776000000000000000000","1f3959fc291110e88232c36b7667fc78a379613f":"18200000000000000000","2d7d5c40ddafc450b04a74a4dabc2bb5d665002e":"2000000000000000000000","5215183b8f80a9bc03d26ce91207832a0d39e620":"1000000000000000000000","5607590059a9fec1881149a44b36949aef85d560":"2000000000000000000000",f7c50f922ad16b61c6d1baa045ed816815bac48f:"12566370000000000000000",da10978a39a46ff0bb848cf65dd9c77509a6d70e:"2000000000000000000000",a7dcbba9b9bf6762c145416c506a71e3b497209c:"1999944000000000000000","54e01283cc8b384538dd646770b357c960d6cacd":"5000000000000000000000","78cf8336b328db3d87813a472b9e89b75e0cf3bc":"1000000000000000000000",ba24fc436753a739db2c8d40e6d4d04c528e86fa:"13000000000000000000000",dfe929a61c1b38eddbe82c25c2d6753cb1e12d68:"402500000000000000000","2b49fba29830360fcdb6da23bbfea5c0bbac5281":"20000000000000000000","76becae4a31d36f3cb577f2a43594fb1abc1bb96":"24860000000000000000000",e0cf698a053327ebd16b7d7700092fe2e8542446:"95275000000000000000",a3802d8a659e89a2c47e905430b2a827978950a7:"1000000000000000000000","75636cdb109050e43d5d6ec47e359e218e857eca":"22886800000000000000000","3d813ff2b6ed57b937dabf2b381d148a411fa085":"100000000000000000000",a9252551a624ae513719dabe5207fbefb2fd7749:"40000000000000000000",c749668042e71123a648975e08ed6382f83e05e2:"14000000000000000000000","04eca501630abce35218b174956b891ba25efb23":"1000060000000000000000","790f91bd5d1c5cc4739ae91300db89e1c1303c93":"2000000000000000000000","009560a3de627868f91fa8bfe1c1b7afaf08186b":"524000000000000000000","1329dd19cd4baa9fc64310efeceab22117251f12":"200000000000000000000","7005a772282b1f62afda63f89b5dc6ab64c84cb9":"18000000000000000000000",abfe936425dcc7b74b955082bbaaf2a11d78bc05:"1400000000000000000000","97d0d9725e3b70e675843173938ed371b62c7fac":"170000000000000000000","41ed2d8e7081482c919fc23d8f0091b3c82c4685":"1295460000000000000000","992365d764c5ce354039ddfc912e023a75b8e168":"18200000000000000000",e1c607c0a8a060da8f02a8eb38a013ea8cda5b8c:"805000000000000000000","3b2c45990e21474451cf4f59f01955b331c7d7c9":"2000000000000000000000","29ac2b458454a36c7e96c73a8667222a12242c71":"4000000000000000000000",b8555010776e3c5cb311a5adeefe9e92bb9a64b9:"4000000000000000000000","30380087786965149e81423b15e313ba32c5c783":"18200000000000000000",a2f86bc061884e9eef05640edd51a2f7c0596c69:"2000050000000000000000","9f98eb34d46979b0a6de8b05aa533a89b825dcf1":"86500000000000000000",c81fb7d20fd2800192f0aac198d6d6a37d3fcb7d:"259500000000000000000",a4035ab1e5180821f0f380f1131b7387c8d981cd:"20000000000000000000","782f52f0a676c77716d574c81ec4684f9a020a97":"850055000000000000000","261e0fa64c51137465eecf5b90f197f7937fdb05":"18000000000000000000000","276fd7d24f8f883f5a7a28295bf17151c7a84b03":"2000000000000000000000",a1f5b840140d5a9acef402ac3cc3886a68cad248:"2000000000000000000000",d2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33:"400000000000000000000","8ee584337ddbc80f9e3498df55f0a21eacb57fb1":"20000000000000000000","34393c5d91b9de597203e75bac4309b5fa3d28c3":"194000000000000000000","114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa":"3000000000000000000000",ab7c42c5e52d641a07ad75099c62928b7f86622f:"335940000000000000000","80bf995ed8ba92701d10fec49f9e7d014dbee026":"572153000000000000000","4a192035e2619b24b0709d56590e9183ccf2c1d9":"10000000000000000000000","376cd7577383e902951b60a2017ba7ea29e33576":"2000000000000000000000",f5437e158090b2a2d68f82b54a5864b95dd6dbea:"4010732000000000000000","13a5eecb38305df94971ef2d9e179ae6cebab337":"330000000000000000000",efc8cf1963c9a95267b228c086239889f4dfd467:"10000000000000000000000",db77b88dcb712fd17ee91a5b94748d720c90a994:"2000000000000000000000","9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f":"1000000000000000000000",ae36f7452121913e800e0fcd1a65a5471c23846f:"164000000000000000000",b124bcb6ffa430fcae2e86b45f27e3f21e81ee08:"2000000000000000000000",f2813a64c5265d020235cb9c319b6c96f906c41e:"350000000000000000000",e848ca7ebff5c24f9b9c316797a43bf7c356292d:"114000000000000000000","21a6feb6ab11c766fdd977f8df4121155f47a1c0":"57200000000000000000",e95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5:"18200000000000000000","0b369e002e1b4c7913fcf00f2d5e19c58165478f":"64520000000000000000","0909648c18a3ce5bae7a047ec2f868d24cdda81d":"3820000000000000000000",d32b45564614516c91b07fa9f72dcf787cce4e1c:"291000000000000000000",cf1bdb799b2ea63ce134668bdc198b54840f180b:"18200000000000000000",ae062c448618643075de7a0030342dced63dbad7:"825982000000000000000","99dfd0504c06c743e46534fd7b55f1f9c7ec3329":"2000000000000000000000","87fc4635263944ce14a46c75fa4a821f39ce7f72":"20000000000000000000","27c2d7ca504daa3d9066dc09137dc42f3aaab452":"600000000000000000000",cc60f836acdef3548a1fefcca13ec6a937db44a0:"86500000000000000000",c910a970556c9716ea53af66ddef93143124913d:"1580000000000000000000","8173c835646a672e0152be10ffe84162dd256e4c":"492000000000000000000",e989733ca1d58d9e7b5029ba5d444858bec03172:"581595000000000000000","86806474c358047d9406e6a07f40945bc8328e67":"6884000000000000000000","5395a4455d95d178b4532aa4725b193ffe512961":"1000000000000000000000","56397638bb3cebf1f62062794b5eb942f916171d":"2000000000000000000000","6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd":"20000000000000000000000","26ff0a51e7cece8400276978dbd6236ef162c0e6":"100020000000000000000000","4ca783b556e5bf53aa13c8116613d65782c9b642":"25200000000000000000000","15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296":"1000000000000000000000","50378af7ef54043f892ab7ce97d647793511b108":"19700000000000000000",e7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1:"2000000000000000000000","5317ecb023052ca7f5652be2fa854cfe4563df4d":"499986000000000000000",c94f7c35c027d47df8ef4f9df85a9248a17dd23b:"29944000000000000000","6a63fc89abc7f36e282d80787b7b04afd6553e71":"160000000000000000000","5fd3d6777ec2620ae83a05528ed425072d3ca8fd":"2000000000000000000000","29adcf83b6b20ac6a434abb1993cbd05c60ea2e4":"10000000000000000000000","8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64":"2730000000000000000000",d94a57882a52739bbe2a0647c80c24f58a2b4f1c:"1341230000000000000000","7286e89cd9de8f7a8a00c86ffdb53992dd9251d1":"1940000000000000000000","5773b6026721a1dd04b7828cd62b591bfb34534c":"27000000000000000000000","11fefb5dc1a4598aa712640c517775dfa1d91f8c":"10000000000000000000000",c6e324beeb5b36765ecd464260f7f26006c5c62e:"2000000000000000000000","118fbd753b9792395aef7a4d78d263cdcaabd4f7":"999800000000000000000",f8298591523e50b103f0b701d623cbf0f74556f6:"200000000000000000000",ab0ced762e1661fae1a92afb1408889413794825:"1910000000000000000000",fa67b67b4f37a0150915110ede073b05b853bda2:"647490000000000000000",ca122cf0f2948896b74843f49afed0ba1618eed7:"560000000000000000000","186b95f8e5effddcc94f1a315bf0295d3b1ea588":"1999944000000000000000","2915624bcb679137b8dae9ab57d11b4905eaee4b":"20000000000000000000","0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7":"3000026000000000000000",cb7479109b43b26657f4465f4d18c6f974be5f42:"1820000000000000000000","8dd6a9bae57f518549ada677466fea8ab04fd9b4":"4000000000000000000000","34958a46d30e30b273ecc6e5d358a212e5307e8c":"2000000000000000000000","2003717907a72560f4307f1beecc5436f43d21e7":"500000000000000000000","55ab99b0e0e55d7bb874b7cfe834de631c97ec23":"1031400000000000000000","79b48d2d6137c3854d611c01ea42427a0f597bb7":"191000000000000000000",d609ec0be70d0ad26f6e67c9d4762b52ee51122c:"1000000000000000000000",e8c3f045bb7d38c9d2f395b0ba8492b253230901:"9000000000000000000000",aaca60d9d700e78596bbbbb1f1e2f70f4627f9d8:"999996000000000000000","89d75b8e0831e46f80bc174188184e006fde0eae":"1000000000000000000000",b3667894b7863c068ad344873fcff4b5671e0689:"20000000000000000000000",bc1609d685b76b48ec909aa099219022f89b2ccd:"1182000000000000000000","88ee7f0efc8f778c6b687ec32be9e7d6f020b674":"2000000000000000000000","470ac5d1f3efe28f3802af925b571e63868b397d":"2000000000000000000000",abf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c:"2263600000000000000000","8cee38d6595788a56e3fb94634b3ffe1fbdb26d6":"20000000000000000000000","19798cbda715ea9a9b9d6aab942c55121e98bf91":"1200000000000000000000",e25a167b031e84616d0f013f31bda95dcc6350b9:"10560000000000000000000","6196c3d3c0908d254366b7bca55745222d9d4db1":"4000000000000000000000",e8e9850586e94f5299ab494bb821a5f40c00bd04:"3820000000000000000000","1059cbc63e36c43e88f30008aca7ce058eeaa096":"100000000000000000000000",c4f2913b265c430fa1ab8adf26c333fc1d9b66f2:"20000000000000000000","26e9e2ad729702626417ef25de0dc800f7a779b3":"1000000000000000000000","0dfbd4817050d91d9d625c02053cf61a3ee28572":"340000000000000000000","709fe9d2c1f1ce42207c9585044a60899f35942f":"2000000000000000000000","7ad82caea1a8b4ed05319b9c9870173c814e06ee":"616000000000000000000","2a595f16eee4cb0c17d9a2d939b3c10f6c677243":"1100000000000000000000",a8f89dd5cc6e64d7b1eeace00702022cd7d2f03d:"700000000000000000000",c0a6cbad77692a3d88d141ef769a99bb9e3c9951:"100000000000000000000","868c23be873466d4c74c220a19b245d1787e807f":"1366481000000000000000","2905b192e83ce659aa355b9d0c204e3e95f9bb9a":"2160817000000000000000","50b9fef0a1329b02d16506255f5a2db71ec92d1f":"1325464000000000000000",fc10b7a67b3268d5331bfb6a14def5ea4a162ca3:"200000000000000000000","85eb256b51c819d60ea61a82d12c9358d59c1cae":"460000000000000000000","75de7e9352e90b13a59a5878ffecc7831cac4d82":"2740000000000000000000",d32b2c79c36478c5431901f6d700b04dbe9b8810:"396000000000000000000","2d0326b23f0409c0c0e9236863a133075a94ba18":"210380000000000000000",d2e21ed56868fab28e0947927adaf29f23ebad6c:"1994000000000000000000","2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df":"1000000000000000000000","7d445267c59ab8d2a2d9e709990e09682580c49f":"1000000000000000000000",b6047cdf932db3e4045f4976122341537ed5961e:"20000000000000000000","2b3cf97311ff30f460945a9d8099f4a88e26d456":"2000000000000000000000","7f4f593b618c330ba2c3d5f41eceeb92e27e426c":"2775000000000000000000","72a2fc8675feb972fa41b50dffdbbae7fa2adfb7":"2853840000000000000000","076561a856455d7ef86e63f87c73dbb628a55f45":"900000000000000000000","03d1724fd00e54aabcd2de2a91e8462b1049dd3a":"2640000000000000000000","7ea0f96ee0a573a330b56897761f3d4c0130a8e3":"1337000000000000000000",fe65c4188d7922576909642044fdc52395560165:"4000000000000000000000","57883010b4ac857fedac03eab2551723a8447ffb":"1000000000000000000000","0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2":"9700000000000000000000",e75c1fb177089f3e58b1067935a6596ef1737fb5:"99910000000000000000",e0e978753d982f7f9d1d238a18bd4889aefe451b:"9700000000000000000000","5620f46d1451c2353d6243a5d4b427130be2d407":"60000000000000000000",f3d688f06bbdbf50f9932c4145cbe48ecdf68904:"20000000000000000000","3aa948ea02397755effb2f9dc9392df1058f7e33":"850000000000000000000","20d1417f99c569e3beb095856530fe12d0fceaaa":"1182175000000000000000",ac77bdf00fd5985b5db12bbef800380abc2a0677:"1000000000000000000000","267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e":"20000000000000000000","4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87":"8000000000000000000000","4c6b93a3bec16349540cbfcae96c9621d6645010":"2000000000000000000000",c9308879056dfe138ef8208f79a915c6bc7e70a8:"10000000000000000000000",c48b693cacefdbd6cb5d7895a42e3196327e261c:"1000000000000000000000",a0951970dfd0832fb83bda12c23545e79041756c:"600000000000000000000","7cdf74213945953db39ad0e8a9781add792e4d1d":"2000000000000000000000","75621865b6591365606ed378308c2d1def4f222c":"3100000000000000000000","67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61":"198067000000000000000","8f0af37566d152802f1ae8f928b25af9b139b448":"200000000000000000000","2c6afcd4037c1ed14fa74ff6758e0945a185a8e8":"17600000000000000000",c1b2aa8cb2bf62cdc13a47ecc4657facaa995f98:"1000129000000000000000","9e8144e08e89647811fe6b72d445d6a5f80ad244":"10000000000000000000000",e04ff5e5a7e2af995d8857ce0290b53a2b0eda5d:"1000000000000000000000","03dedfcd0b3c2e17c705da248790ef98a6bd5751":"1337000000000000000000","698a8a6f01f9ab682f637c7969be885f6c5302bf":"19400000000000000000",d82c6fedbdac98af2eed10b00f32b00056ca5a6d:"200000000000000000000","2697b339813b0c2d964b2471eb1c606f4ecb9616":"1154000000000000000000","987c9bcd6e3f3990a52be3eda4710c27518f4f72":"400000000000000000000",c5d48ca2db2f85d8c555cb0e9cfe826936783f9e:"200000000000000000000",da214c023e2326ff696c00393168ce46ffac39ec:"1000000000000000000000","86570ab259c9b1c32c9729202f77f590c07dd612":"200000000000000000000",a646a95c6d6f59f104c6541d7760757ab392b08c:"4200000000000000000000","1933e334c40f3acbad0c0b851158206924beca3a":"7551541000000000000000","3552a496eba67f12be6eedab360cd13661dc7480":"300000000000000000000","2a9c96c19151ffcbe29a4616d0c52b3933b4659f":"69263000000000000000","3b7b8e27de33d3ce7961b98d19a52fe79f6c25be":"100000000000000000000000",a1911405cf6e999ed011f0ddcd2a4ff7c28f2526:"40000000000000000000","0cae108e6db99b9e637876b064c6303eda8a65c8":"3000000000000000000000","3883becc08b9be68ad3b0836aac3b620dc0017ef":"2000000000000000000000",d0abcc70c0420e0e172f97d43b87d5e80c336ea9:"10000000000000000000000",cbf16a0fe2745258cd52db2bf21954c975fc6a15:"300000000000000000000","1b23cb8663554871fbbe0d9e60397efb6faedc3e":"200000000000000000000",fbede32c349f3300ef4cd33b4de7dc18e443d326:"3160000000000000000000","5e806e845730f8073e6cc9018ee90f5c05f909a3":"9480000000000000000000","425c338a1325e3a1578efa299e57d986eb474f81":"2000000000000000000000","8bf297f8f453523ed66a1acb7676856337b93bf0":"4000000000000000000000","38e8a31af2d265e31a9fff2d8f46286d1245a467":"20000000000000000000","7edafba8984baf631a820b6b92bbc2c53655f6bd":"2000000000000000000000",aa0200f1d17e9c54da0647bb96395d57a78538d8:"1056000000000000000000","433eb94a339086ed12d9bde9cd1d458603c97dd6":"100000000000000000000000",cd7e47909464d871b9a6dc76a8e9195db3485e7a:"9850000000000000000000","5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82":"1370000000000000000000",cea2896623f4910287a2bdc5be83aea3f2e6de08:"9359000000000000000000",cb4ad0c723da46ab56d526da0c1d25c73daff10a:"510000000000000000000",e2cf360aa2329eb79d2bf7ca04a27a17c532e4d8:"102000000000000000000",ea60549ec7553f511d2149f2d4666cbd9243d93c:"2000000000000000000000",cbb7be17953f2ccc93e1bc99805bf45511434e4c:"50440000000000000000000","3549bd40bbbc2b30095cac8be2c07a0588e0aed6":"20000000000000000000","6510df42a599bcb0a519cca961b488759a6f6777":"2000000000000000000000",ed12a1ba1fb8adfcb20dfa19582e525aa3b74524:"6685000000000000000000","135eb8c0e9e101deedec11f2ecdb66ae1aae8867":"20000000000000000000000",ee906d7d5f1748258174be4cbc38930302ab7b42:"200000000000000000000","253f1e742a2cec86b0d7b306e5eacb6ccb2f8554":"20040000000000000000000",ecd1a62802351a41568d23033004acc6c005a5d3:"50000000000000000000","558c54649a8a6e94722bd6d21d14714f71780534":"2000000000000000000000",ca657ec06fe5bc09cf23e52af7f80cc3689e6ede:"900000000000000000000","74bf7a5ab59293149b5c60cf364263e5ebf1aa0d":"115800000000000000000","7a6d781c77c4ba1fcadf687341c1e31799e93d27":"274000000000000000000","77028e409cc43a3bd33d21a9fc53ec606e94910e":"3880000000000000000000","4781a10a4df5eebc82f4cfe107ba1d8a7640bd66":"1790000000000000000000","78e08bc533413c26e291b3143ffa7cc9afb97b78":"200000000000000000000","03ef6ad20ff7bd4f002bac58d47544cf879ae728":"6895000000000000000000","0e3696cf1f4217b163d1bc12a5ea730f1c32a14a":"4000000000000000000000","825135b1a7fc1605614c8aa4d0ac6dbad08f480e":"1430000000000000000000","286b186d61ea1fd78d9930fe12b06537b05c3d51":"1000000000000000000000","8d6657f59711b1f803c6ebef682f915b62f92dc9":"2000000000000000000000",da8bbee182e455d2098acb338a6d45b4b17ed8b6:"2000000000000000000000","3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c":"2000000000000000000000",f5d9cf00d658dd45517a48a9d3f5f633541a533d:"116400000000000000000",c5f64babb7033142f20e46d7aa6201ed86f67103:"2000000000000000000000",a2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1:"200000000000000000000","6114b0eae5576903f80bfb98842d24ed92237f1e":"100000000000000000000","38df0c4abe7ded5fe068eadf154ac691774324a4":"1790000000000000000000","1c2010bd662df417f2a271879afb13ef4c88a3ae":"4000000000000000000000","918967918cd897dd0005e36dc6c883ef438fc8c7":"140000000000000000000",a522de7eb6ae1250522a513133a93bd42849475c:"20000000000000000000000","7de442c82386154d2e993cbd1280bb7ca6b12ada":"4002000000000000000000","66424bd8785b8cb461102a900283c35dfa07ef6a":"40221000000000000000","7bbbec5e70bdead8bb32b42805988e9648c0aa97":"1000076000000000000000",fec06fe27b44c784b2396ec92f7b923ad17e9077:"2000000000000000000000","95d550427b5a514c751d73a0f6d29fb65d22ed10":"300000000000000000000","8dde60eb08a099d7daa356daaab2470d7b025a6b":"197000000000000000000","81bccbff8f44347eb7fca95b27ce7c952492aaad":"152240000000000000000","3995e096b08a5a726800fcd17d9c64c64e088d2b":"200000000000000000000","4ee13c0d41200b46d19dee5c4bcec71d82bb8e38":"7893915000000000000000",c41461a3cfbd32c9865555a4813137c076312360:"999999000000000000000","3300fb149aded65bcba6c04e9cd6b7a03b893bb1":"18200000000000000000","29f9286c0e738d1721a691c6b95ab3d9a797ede8":"200000000000000000000000","34c8e5f1330fcb4b14ca75cb2580a4b93d204e36":"2000000000000000000000",ec5df227bfa85d7ad76b426e1cee963bc7f519dd:"1000000000000000000000","797510e386f56393ced8f477378a444c484f7dad":"1000000000000000000000","0191eb547e7bf6976b9b1b577546761de65622e2":"1999980000000000000000","615a6f36777f40d6617eb5819896186983fd3731":"5910000000000000000000","17580b766f7453525ca4c6a88b01b50570ea088c":"100000000000000000000","945d96ea573e8df7262bbfa572229b4b16016b0f":"209300000000000000000","2de0964400c282bdd78a919c6bf77c6b5f796179":"200000000000000000000","304ec69a74545721d7316aef4dcfb41ac59ee2f0":"200000000000000000000",be2b326e78ed10e550fee8efa8f8070396522f5a:"39400000000000000000000","1a0841b92a7f7075569dc4627e6b76cab05ade91":"1520000000000000000000","5fa61f152de6123516c751242979285f796ac791":"204000000000000000000","68c8791dc342c373769ea61fb7b510f251d32088":"1000000000000000000000","4167cd48e733418e8f99ffd134121c4a4ab278c4":"3640000000000000000000","598aaabae9ed833d7bc222e91fcaa0647b77580b":"1800000000000000000000","979f30158b574b999aab348107b9eed85b1ff8c1":"970000000000000000000","3ad06149b21c55ff867cc3fb9740d2bcc7101231":"197000000000000000000000","7133843a78d939c69d4486e10ebc7b602a349ff7":"329000000000000000000","8bdfda6c215720eda2136f91052321af4e936c1f":"1000008000000000000000","3e1c53300e4c168912163c7e99b95da268ad280a":"1003200000000000000000",e07ebbc7f4da416e42c8d4f842aba16233c12580:"2000000000000000000000",bac8922c4acc7d2cb6fd59a14eb45cf3e702214b:"800000000000000000000",bb6c284aac8a69b75cddb00f28e145583b56bece:"2000000000000000000000","0372ee5508bf8163ed284e5eef94ce4d7367e522":"100000000000000000000","17125b59ac51cee029e4bd78d7f5947d1ea49bb2":"22000000000000000000000",c88ca1e6e5f4d558d13780f488f10d4ad3130d34:"1550000000000000000000",a825fd5abb7926a67cf36ba246a24bd27be6f6ed:"17600000000000000000","04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186":"1870000000000000000000","6de4d15219182faf3aa2c5d4d2595ff23091a727":"1580000000000000000000",b203d29e6c56b92699c4b92d1f6f84648dc4cfbc:"400000000000000000000","80b42de170dbd723f454e88f7716452d92985092":"300202000000000000000","0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae":"1969803000000000000000","32034e8581d9484e8af42a28df190132ec29c466":"3460000000000000000000","7ee604c7a9dc2909ce321de6b9b24f5767577555":"5533575000000000000000",a387ce4e961a7847f560075c64e1596b5641d21c:"668500000000000000000",fcc9d4a4262e7a027ab7519110d802c495ceea39:"6370000000000000000000",ff8a2ca5a81333f19998255f203256e1a819c0aa:"224000000000000000000",f9811fa19dadbf029f8bfe569adb18228c80481a:"200000000000000000000","0d1f2a57713ebc6e94de29846e8844d376665763":"5000000000000000000000",eab0bd148309186cf8cbd13b7232d8095acb833a:"10691800000000000000000","36928b55bc861509d51c8cf1d546bfec6e3e90af":"1970000000000000000000","30480164bcd84974ebc0d90c9b9afab626cd1c73":"800000000000000000000","36339f84a5c2b44ce53dfdb6d4f97df78212a7df":"321600000000000000000",cfeacaaed57285e0ac7268ce6a4e35ecfdb242d7:"1086400000000000000000","572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb":"10400000000000000000000","5dded049a6e1f329dc4b971e722c9c1f2ade83f0":"1000000000000000000000","9756e176c9ef693ee1eec6b9f8b151d313beb099":"1200000000000000000000","01e6415d587b065490f1ed7f21d6e0f386ee6747":"2000000000000000000000",b4413576869c08f9512ad311fe925988a52d3414:"10000000000000000000000",da9f55460946d7bfb570ddec757ca5773b58429a:"507600000000000000000","7180b83ee5574317f21c8072b191d895d46153c3":"460000000000000000000","0aca9a5626913b08cfc9a66d40508dce52b60f87":"1910000000000000000000","5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a":"59000000000000000000","7edb02c61a227287611ad950696369cc4e647a68":"274000000000000000000",b2676841ee9f2d31c172e82303b0fe9bbf9f1e09:"200000000000000000000",a2222259dd9c3e3ded127084f808e92a1887302c:"162000000000000000000","4b3a7cc3a7d7b00ed5282221a60259f25bf6538a":"1000000000000000000000",e33ff987541dde5cdee0a8a96dcc3f33c3f24cc2:"200000000000000000000000","1e1a4828119be309bd88236e4d482b504dc55711":"2955000000000000000000","9b1811c3051f46e664ae4bc9c824d18592c4574a":"199955000000000000000","59fe00696dbd87b7976b29d1156c8842a2e17914":"2000000000000000000000","48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965":"2000000000000000000000",c90300cb1d4077e6a6d7e169a460468cf4a492d7:"2000000000000000000000","6dedf62e743f4d2c2a4b87a787f5424a7aeb393c":"180000000000000000000",fb744b951d094b310262c8f986c860df9ab1de65:"52009000000000000000","193ac65183651800e23580f8f0ead3bb597eb8a4":"50020000000000000000",bf05ff5ecf0df2df887759fb8274d93238ac267d:"800000000000000000000","6c0e712f405c59725fe829e9774bf4df7f4dd965":"57413800000000000000000","2744ff67464121e35afc2922177164fa2fcb0267":"100000000000000000000",d09cb2e6082d693a13e8d2f68dd1dd8461f55840:"1000000000000000000000",bc171e53d17ac9b61241ae436deec7af452e7496:"5348000000000000000000","71fa22cc6d33206b7d701a163a0dab31ae4d31d6":"1610000000000000000000","4da8030769844bc34186b85cd4c7348849ff49e9":"10000000000000000000000",c8616b4ec09128cdff39d6e4b9ac86eec471d5f2:"19400000000000000000","407295ebd94b48269c2d569c9b9af9aa05e83e5e":"10000000000000000000000",d45d5daa138dd1d374c71b9019916811f4b20a4e:"576000000000000000000","42c6edc515d35557808d13cd44dcc4400b2504e4":"197876000000000000000","0bc95cb32dbb574c832fa8174a81356d38bc92ac":"2000000000000000000000","5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b":"2000000000000000000000","54c93e03a9b2e8e4c3672835a9ee76f9615bc14e":"19400000000000000000","3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6":"1520000000000000000000",ba1531fb9e791896bcf3a80558a359f6e7c144bd:"3940000000000000000000",aa56a65dc4abb72f11bae32b6fbb07444791d5c9:"748600000000000000000",e437acbe0f6227b0e36f36e4bcf7cf613335fb68:"200000000000000000000","39d4a931402c0c79c457186f24df8729cf957031":"4000000000000000000000",e22b20c77894463baf774cc256d5bddbbf7ddd09:"1000000000000000000000","70a4067d448cc25dc8e70e651cea7cf84e92109e":"176000000000000000000",aa3925dc220bb4ae2177b2883078b6dc346ca1b2:"8000000000000000000000",ad57aa9d00d10c439b35efcc0becac2e3955c313:"200000000000000000000",e93d47a8ca885d540c4e526f25d5c6f2c108c4b8:"112640000000000000000000","232ce782506225fd9860a2edc14a7a3047736da2":"20000000000000000000","49a645e0667dfd7b32d075cc2467dd8c680907c4":"129560000000000000000",cf2e734042a355d05ffb2e3915b16811f45a695e:"2000000000000000000000","39b1c471ae94e12164452e811fbbe2b3cd7275ac":"2000000000000000000000",ffad3dd74e2c1f796ac640de56dc99b4c792a402:"5000000000000000000000",a69d7cd17d4842fe03f62a90b2fbf8f6af7bb380:"100000000000000000000","2001bef77b66f51e1599b02fb110194a0099b78d":"2000000000000000000000","95e7616424cd0961a71727247437f0069272280e":"400000000000000000000",c04f4bd4049f044685b883b62959ae631d667e35:"5820000000000000000000",ede0147ec032c3618310c1ff25690bf172193dac:"2000000000000000000000","66719c0682b2ac7f9e27abebec7edf8decf0ae0d":"20000000000000000000","45272b8f62e9f9fa8ce04420e1aea3eba9686eac":"4000000000000000000000",d1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c:"1970000000000000000000",e9133e7d31845d5f2b66a2618792e869311acf66:"24050000000000000000000",ebb62cf8e22c884b1b28c6fa88fbbc17938aa787:"798000000000000000000","6205c2d5647470848a3840f3887e9b015d34755c":"1800000000000000000000","76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29":"1524180000000000000000","6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee":"1480000000000000000000","797bb7f157d9feaa17f76da4f704b74dc1038341":"3340000000000000000000",ae8954f8d6166de507cf61297d0fc7ca6b9e7128:"300000000000000000000","75c1ad23d23f24b384d0c3149177e86697610d21":"6426082000000000000000","805d846fb0bc02a7337226d685be9ee773b9198a":"19999800000000000000000",c3cb6b36af443f2c6e258b4a39553a818747811f:"1610000000000000000000",cea43f7075816b60bbfce68b993af0881270f6c4:"2000000000000000000000",e0388aeddd3fe2ad56f85748e80e710a34b7c92e:"500000000000000000000",e131f87efc5ef07e43f0f2f4a747b551d750d9e6:"19999000000000000000000",c2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b:"20000000000000000000000",bd8765f41299c7f479923c4fd18f126d7229047d:"4000000000000000000000",c83ba6dd9549be1d3287a5a654d106c34c6b5da2:"7000000000000000000000",f870995fe1e522321d754337a45c0c9d7b38951c:"20000000000000000000","0d8ed7d0d15638330ed7e4eaccab8a458d75737e":"2000000000000000000000","36c510bf8d6e569bf2f37d47265dbcb502ff2bce":"30000000000000000000000","0eccf617844fd61fba62cb0e445b7ac68bcc1fbe":"387260000000000000000",ae10e27a014f0d306baf266d4897c89aeee2e974:"20000000000000000000000","1827039f09570294088fddf047165c33e696a492":"9550000000000000000000","23378f42926d0184b793b0c827a6dd3e3d334fcd":"56000000000000000000","467124ae7f452f26b3d574f6088894fa5d1cfb3b":"2700000000000000000000",aae61e43cb0d0c96b30699f77e00d711d0a3979b:"1000000000000000000000","15c7edb8118ee27b342285eb5926b47a855bc7a5":"20000000000000000000","0d5d98565c647ca5f177a2adb9d3022fac287f21":"200000000000000000000","7222fec7711781d26eaa4e8485f7aa3fac442483":"456000000000000000000",dc44275b1715baea1b0345735a29ac42c9f51b4f:"1164000000000000000000","04d82af9e01a936d97f8f85940b970f9d4db9936":"200000000000000000000","45533390e340fe0de3b3cf5fb9fc8ea552e29e62":"1460000000000000000000","1284f0cee9d2ff2989b65574d06ffd9ab0f7b805":"400000000000000000000",ed9ebccba42f9815e78233266dd6e835b6afc31b:"6000000000000000000000",e4324912d64ea3aef76b3c2ff9df82c7e13ae991:"2000000000000000000000","94c742fd7a8b7906b3bfe4f8904fc0be5c768033":"20000000000000000000000","62fb8bd1f0e66b90533e071e6cbe6111fef0bc63":"17600000000000000000000","2c83aeb02fcf067d65a47082fd977833ab1cec91":"150400000000000000000","06cbfa08cdd4fba737bac407be8224f4eef35828":"593459000000000000000","67ee406ea4a7ae6a3a381eb4edd2f09f174b4928":"1036000000000000000000","83c23d8a502124ee150f08d71dc6727410a0f901":"33999600000000000000000",f7c00cdb1f020310d5acab7b496aaa44b779085e:"1670000000000000000000",d096565b7c7407d06536580355fdd6d239144aa1:"250000000000000000000",f8d52dcc5f96cc28007b3ecbb409f7e22a646caa:"149200000000000000000","0c222c7c41c9b048efcce0a232434362e12d673b":"10007600000000000000000","503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e":"2000000000000000000000","77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e":"22380000000000000000",e62f98650712eb158753d82972b8e99ca3f61877:"2000000000000000000000","87a7c508ef71582dd9a54372f89cb01f252fb180":"200000000000000000000",f61283b4bd8504058ca360e993999b62cbc8cd67:"255000000000000000000","9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1":"100000000000000000000",d460a4b908dd2b056759b488850b66a838fc77a8:"1970000000000000000000","5431b1d18751b98fc9e2888ac7759f1535a2db47":"2000000000000000000000",da2a14f9724015d79014ed8e5909681d596148f1:"48499000000000000000",c989434f825aaf9c552f685eba7c11db4a5fc73a:"501000000000000000000","2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d":"600000000000000000000","78b978a9d7e91ee529ea4fc4b76feaf8762f698c":"32000000000000000000000",c89cf504b9f3f835181fd8424f5ccbc8e1bddf7d:"10000000000000000000000",e94941b6036019b4016a30c1037d5a6903babaad:"780000000000000000000","95d98d0c1069908f067a52acac2b8b534da37afd":"2054053000000000000000","8284923b62e68bbf7c2b9f3414d13ef6c812a904":"3880000000000000000000","3e5a39fdda70df1126ab0dc49a7378311a537a1f":"2400000000000000000000",a2ace4c993bb1e5383f8ac74e179066e814f0591:"100000000000000000000","0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d":"70000000000000000000000",d119417c46732cf34d1a1afb79c3e7e2cd8eece4:"2000000000000000000000",fdb33944f2360615e5be239577c8a19ba52d9887:"601650000000000000000",dd95dbe30f1f1877c5dd7684aeef302ab6885192:"8372000000000000000000","413f4b02669ccff6806bc826fcb7deca3b0ea9bc":"20000000000000000000","5800cd8130839e94495d2d8415a8ea2c90e0c5cb":"200000000000000000000","65053191319e067a25e6361d47f37f6318f83419":"394000000000000000000","9bc573bcda23b8b26f9073d90c230e8e71e0270b":"999544000000000000000","97f7760657c1e202759086963eb4211c5f8139b9":"49770000000000000000000","126897a311a14ad43b78e0920100c4426bfd6bdd":"973581000000000000000",d5276f0cd5ffd5ffb63f98b5703d5594ede0838b:"400000000000000000000",e9c35c913ca1fceab461582fe1a5815164b4fd21:"8000000000000000000000",b43067fe70d9b55973ba58dc64dd7f311e554259:"200000000000000000000","6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2":"1000000000000000000000",b1dba5250ba9625755246e067967f2ad2f0791de:"80000000000000000000000","72b7a03dda14ca9c661a1d469fd33736f673c8e8":"2000000000000000000000",e792349ce9f6f14f81d0674096befa1f9221cdea:"1685365000000000000000","1815279dff9952da3be8f77249dbe22243377be7":"4749800000000000000000","33481e856ebed48ea708a27426ef28e867f57cd1":"200000000000000000000","8eb8c71982a00fb84275293253f8044544b66b49":"400000000000000000000","65f5870f26bce089677dfc23b5001ee492483428":"5067230000000000000000","8e23facd12c765c36ab81a6dd34d8aa9e68918ae":"167310000000000000000","4912d902931676ff39fc34fe3c3cc8fb2182fa7a":"20000000000000000000",c09a66172aea370d9a63da04ff71ffbbfcff7f94:"2000000000000000000000",e969ea1595edc5c4a707cfde380929633251a2b0:"200000000000000000000","4f2b47e2775a1fa7178dad92985a5bbe493ba6d6":"200000000000000000000",cab9a97ada065c87816e6860a8f1426fe6b3d775:"1000000000000000000000",cdfd8217339725d7ebac11a63655f265eff1cc3d:"4999962000000000000000",ab4004c0403f7eabb0ea586f212156c4203d67f1:"1999944000000000000000","1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6":"9970823000000000000000",a951b244ff50cfae591d5e1a148df6a938ef2a1a:"1734000000000000000000",b158db43fa62d30e65f3d09bf781c7b67372ebaa:"1999000000000000000000","25e037f00a18270ba5ec3420229ddb0a2ce38fa2":"10000000000000000000000","2aaea1f1046f30f109faec1c63ef5c7594eb08da":"4000000000000000000000","73d7269ff06c9ffd33754ce588f74a966abbbbba":"6600000000000000000000","4c767b65fd91161f4fbdcc6a69e2f6ad711bb918":"720000000000000000000","92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc":"865000000000000000000",a04f2ae02add14c12faf65cb259022d0830a8e26:"100000000000000000000000","63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5":"1460000000000000000000","749ad6f2b5706bbe2f689a44c4b640b58e96b992":"100000000000000000000","4d836d9d3b0e2cbd4de050596faa490cffb60d5d":"300000000000000000000","59f6247b0d582aaa25e5114765e4bf3c774f43c2":"50000000000000000000","1293c78c7d6a443b9d74b0ba5ee7bb47fd418588":"6685000000000000000000","67bc85e87dc34c4e80aafa066ba8d29dbb8e438e":"402500000000000000000",a09f4d5eaa65a2f4cb750a49923401dae59090af:"140000000000000000000",ebbd4db9019952d68b1b0f6d8cf0683c00387bb5:"332330000000000000000",b16479ba8e7df8f63e1b95d149cd8529d735c2da:"846477000000000000000",e1b2aca154b8e0766c4eba30bc10c7f35036f368:"19980000000000000000","5c464197791c8a3da3c925436f277ab13bf2faa2":"8000000000000000000000","170a88a8997f92d238370f1affdee6347050b013":"3000800000000000000000",dadbfafd8b62b92a24efd75256dd83abdbd7bbdb:"19700000000000000000",bb993b96ee925ada7d99d786573d3f89180ce3aa:"2000000000000000000000",f2c362b0ef991bc82fb36e66ff75932ae8dd8225:"74000000000000000000","7f2382ffd8f83956467937f9ba72374623f11b38":"600000000000000000000","74d1a4d0c7524e018d4e06ed3b648092b5b6af2c":"50000000000000000000","24a750eae5874711116dd7d47b7186ce990d3103":"200000000000000000000",a8e42a4e33d7526cca19d9a36dcd6e8040d0ea73:"1080000000000000000000","3e1b2230afbbd310b4926a4c776d5ae7819c661d":"30000000000000000000000","6af9f0dfeeaebb5f64bf91ab771669bf05295553":"400000000000000000000","41e4a20275e39bdcefeb655c0322744b765140c2":"10000000000000000000000",ceb089ec8a78337e8ef88de11b49e3dd910f748f:"1000000000000000000000",e6bcd30a8fa138c5d9e5f6c7d2da806992812dcd:"260000000000000000000000",e08c60313106e3f9334fe6f7e7624d211130c077:"40000000000000000000",f5cffbba624e7eb321bc83c60ca68199b4e36671:"2000000000000000000000",d7c2803ed7b0e0837351411a8e6637d168bc5b05:"29549015000000000000000","0f3665d48e9f1419cd984fc7fa92788710c8f2e4":"2000000000000000000000",b48921c9687d5510744584936e8886bdbf2df69b:"1000000000000000000000",a94bbb8214cf8da0c2f668a2ac73e86248528d4b:"960000000000000000000",be0c2a80b9de084b172894a76cf4737a4f529e1a:"1999944000000000000000",fcf199f8b854222f182e4e1d099d4e323e2aae01:"1000000000000000000000",b52dfb45de5d74e3df208332bc571c809b8dcf32:"6000000000000000000000","704819d2e44d6ed1da25bfce84c49fcca25613e5":"400000000000000000000","6ff6cc90d649de4e96cffee1077a5b302a848dcb":"28600000000000000000","4d9c77d0750c5e6fbc247f2fd79274686cb353d6":"20000000000000000000","68e8022740f4af29eb48db32bcecddfd148d3de3":"1000000000000000000000","2cb615073a40dcdb99faa848572e987b3b056efb":"799600000000000000000","64adcceec53dd9d9dd15c8cc1a9e736de4241d2c":"56000000000000000000","2aec809df9325b9f483996e99f7331097f08aa0e":"4000000000000000000000","438c2f54ff8e629bab36b1442b760b12a88f02ae":"2000000000000000000000","9e35399071a4a101e9194daa3f09f04a0b5f9870":"4000000000000000000000",a5c336083b04f9471b8c6ed73679b74d66c363ec:"3014100000000000000000","7ad3f307616f19dcb143e6444dab9c3c33611f52":"50000000000000000000","455cb8ee39ffbc752331e5aefc588ef0ee593454":"999963000000000000000",c4c01afc3e0f045221da1284d7878574442fb9ac:"7419944000000000000000","99268327c373332e06c3f6164287d455b9d5fa4b":"2000000000000000000000","4367ae4b0ce964f4a54afd4b5c368496db169e9a":"2000000000000000000000","2cd79eb52027b12c18828e3eaab2969bfcd287e9":"20000000000000000000",b96841cabbc7dbd69ef0cf8f81dff3c8a5e21570:"12000000000000000000000",d7ebddb9f93987779b680155375438db65afcb6a:"100600000000000000000","0631d18bbbbd30d9e1732bf36edae2ce8901ab80":"3024800000000000000000","5fad960f6b2c84569c9f4d47bf1985fcb2c65da6":"999972000000000000000","01d599ee0d5f8c38ab2d392e2c65b74c3ce31820":"510000000000000000000",ff0cc8dac824fa24fc3caa2169e6e057cf638ad6:"4000000000000000000000",c25266c7676632f13ef29be455ed948add567792:"1337000000000000000000","9c344098ba615a398f11d009905b177c44a7b602":"1000000000000000000000","3b0accaf4b607cfe61d17334c214b75cdefdbd89":"2000000000000000000000","6d6634b5b8a40195d949027af4828802092ceeb6":"3000000000000000000000","208c45732c0a378f17ac8324926d459ba8b658b4":"2955000000000000000000",c24399b4bf86f7338fbf645e3b22b0e0b7973912:"2000000000000000000000","29763dd6da9a7c161173888321eba6b63c8fb845":"328000000000000000000","9c2fd54089af665df5971d73b804616039647375":"1000000000000000000000","0e09646c99af438e99fa274cb2f9c856cb65f736":"1910000000000000000000",be73274d8c5aa44a3cbefc8263c37ba121b20ad3:"500000000000000000000",ecfd004d02f36cd4d8b4a8c1a9533b6af85cd716:"5003800000000000000000",f978b025b64233555cc3c19ada7f4199c9348bf7:"400000000000000000000000","705ddd38355482b8c7d3b515bda1500dd7d7a817":"400000000000000000000","2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad":"504206000000000000000","1098cc20ef84bad5146639c4cd1ca6c3996cb99b":"18200000000000000000",afdac5c1cb56e245bf70330066a817eaafac4cd1:"20000000000000000000","910e996543344c6815fb97cda7af4b8698765a5b":"103400000000000000000","94612781033b57b146ee74e753c672017f5385e4":"3600000000000000000000",d03fc165576aaed525e5502c8e140f8b2e869639:"6850000000000000000000","293384c42b6f8f2905ce52b7205c2274376c612b":"1400000000000000000000","09ee12b1b42b05af9cf207d5fcac255b2ec411f2":"58929000000000000000",dbd71efa4b93c889e76593de609c3b04cbafbe08:"20000000000000000000",fa86ca27bf2854d98870837fb6f6dfe4bf6453fc:"322061000000000000000","61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af":"1640000000000000000000","6d4cbf3d8284833ae99344303e08b4d614bfda3b":"12000000000000000000000","2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf":"360000000000000000000","94a7cda8f481f9d89d42c303ae1632b3b709db1d":"300000000000000000000","7566496162ba584377be040a4f87777a707acaeb":"4000000000000000000000",bdc461462b6322b462bdb33f22799e8108e2417d:"668500000000000000000","7e47637e97c14622882be057bea229386f4052e5":"440000000000000000000","3b5c251d7fd7893ba209fe541cecd0ce253a990d":"30000000000000000000000","0e498800447177b8c8afc3fdfa7f69f4051bb629":"2140234000000000000000",b71623f35107cf7431a83fb3d204b29ee0b1a7f4:"19700000000000000000","1d395b30adda1cf21f091a4f4a7b753371189441":"100000000000000000000000","2c2428e4a66974edc822d5dbfb241b2728075158":"2000000000000000000000",a575f2891dcfcda83c5cf01474af11ee01b72dc2:"100076000000000000000",ad728121873f0456d0518b80ab6580a203706595:"500000000000000000000","48669eb5a801d8b75fb6aa58c3451b7058c243bf":"30940000000000000000000",b3ae54fba09d3ee1d6bdd1e957923919024c35fa:"65513000000000000000","0d35408f226566116fb8acdaa9e2c9d59b76683f":"940000000000000000000",df211cd21288d6c56fae66c3ff54625dd4b15427:"2500024000000000000000","8a746c5d67064711bfca685b95a4fe291a27028e":"40000000000000000000","1cf105ab23023b554c583e86d7921179ee83169f":"1970000000000000000000","8cfedef198db0a9143f09129b3fd64dcbb9b4956":"2000000000000000000000","1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66":"600200000000000000000",e74608f506866ada6bfbfdf20fea440be76989ef:"1999944000000000000000","27e63989ca1e903bc620cf1b9c3f67b9e2ae6581":"1337000000000000000000",bb0857f1c911b24b86c8a70681473fe6aaa1cce2:"100000000000000000000","4f8e8d274fb22a3fd36a47fe72980471544b3434":"200000000000000000000","127d3fc5003bf63c0d83e93957836515fd279045":"111890000000000000000","95809e8da3fbe4b7f281f0b8b1715f420f7d7d63":"2000000000000000000000","28904bb7c4302943b709b14d7970e42b8324e1a1":"10027500000000000000000",c07e3867ada096807a051a6c9c34cc3b3f4ad34a:"1788210000000000000000",f0b469eae89d400ce7d5d66a9695037036b88903:"20000000000000000000000","7445202f0c74297a004eb3726aa6a82dd7c02fa1":"2000000000000000000000",c58f62fee9711e6a05dc0910b618420aa127f288:"3980000000000000000000","801d65c518b11d0e3f4f470221417013c8e53ec5":"4000000000000000000000","41010fc8baf8437d17a04369809a168a17ca56fb":"100000000000000000000",a1998144968a5c70a6415554cefec2824690c4a5:"20000000000000000000",e9559185f166fc9513cc71116144ce2deb0f1d4b:"20000000000000000000000",ed5b4c41e762d942404373caf21ed4615d25e6c1:"2013960000000000000000","665b000f0b772750cc3c217a5ef429a92bf1ccbb":"4000000000000000000000",febd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e:"1990019000000000000000",a072691c8dd7cd4237ff72a75c1a9506d0ce5b9e:"370000000000000000000","6765df25280e8e4f38d4b1cf446fc5d7eb659e34":"100000000000000000000","524fb210522c5e23bb67dfbf8c26aa616da49955":"999971000000000000000",e987e6139e6146a717fef96bc24934a5447fe05d:"2000000000000000000000",d6110276cfe31e42825a577f6b435dbcc10cf764:"1000000000000000000000","5e51b8a3bb09d303ea7c86051582fd600fb3dc1a":"20000000000000000000","5c4f24e994ed8f850ea7818f471c8fac3bcf0452":"1724800000000000000000","85b2998d0c73302cb2ba13f489313301e053be15":"10000000000000000000000","0af6c8d539c96d50259e1ba6719e9c8060f388c2":"1000000000000000000000","7d901b28bf7f88ef73d8f73cca97564913ea8a24":"955000000000000000000",e01859f242f1a0ec602fa8a3b0b57640ec89075e:"555000000000000000000",c66ae4cee87fb3353219f77f1d6486c580280332:"29550000000000000000","2d40558b06f90a3923145592123b6774e46e31f4":"1000000000000000000000",ccf43975b76bfe735fec3cb7d4dd24f805ba0962:"60000000000000000000","1703b4b292b8a9deddede81bb25d89179f6446b6":"19690000000000000000000","0e9096d343c060db581a120112b278607ec6e52b":"20000000000000000000",f65819ac4cc14c137f05dd7977c7dae08d1a4ab5:"102000000000000000000",ca373fe3c906b8c6559ee49ccd07f37cd4fb5266:"1790000000000000000000",d28298524df5ec4b24b0ffb9df85170a145a9eb5:"287700000000000000000","5fcda847aaf8d7fa8bca08029ca2849166aa15a3":"623350000000000000000",bdc739a699700b2e8e2c4a4c7b058a0e513ddebe:"2000000000000000000000","0bb05f7224bb5804856556c07eeadbed87ba8f7c":"401100000000000000000",ab416fe30d58afe5d9454c7fce7f830bcc750356:"114515000000000000000","3eee6f1e96360b7689b3069adaf9af8eb60ce481":"1000000000000000000000","9a0d3cee3d9892ea3b3700a27ff84140d9025493":"60000000000000000000","5dc36de5359450a1ec09cb0c44cf2bb42b3ae435":"1117500000000000000000","35c8adc11125432b3b77acd64625fe58ebee9d66":"2000000000000000000000",a5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b:"766527000000000000000","31ea12d49a35a740780ddeeaece84c0835b26270":"200000000000000000000","7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5":"1490000000000000000000",cc6d7b12061bc96d104d606d65ffa32b0036eb07:"10000000000000000000000","322021022678a0166d204b3aaa7ad4ec4b88b7d0":"400000000000000000000",b31196714a48dff726ea9433cd2912f1a414b3b3:"2680000000000000000000","0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd":"3145000000000000000000","7d9d221a3df89ddd7b5f61c1468c6787d6b333e6":"138000000000000000000","367f59cc82795329384e41e1283115e791f26a01":"2000000000000000000000",fd9579f119bbc819a02b61e38d8803c942f24d32:"105600000000000000000","3e2f26235e137a7324e4dc154b5df5af46ea1a49":"22458000000000000000","4c1579af3312e4f88ae93c68e9449c2e9a68d9c4":"2000000000000000000000",ffb04726dfa41afdc819168418610472970d7bfc:"4000000000000000000000","403c64896a75cad816a9105e18d8aa5bf80f238e":"985000000000000000000","5cd588a14ec648ccf64729f9167aa7bf8be6eb3d":"1000000000000000000000","24b2be118b16d8b2174769d17b4cf84f07ca946d":"2000000000000000000000",d3bb59fa31258be62f8ed232f1a7d47b4a0b41ee:"100000000000000000000",cc9ac715cd6f2610c52b58676456884297018b29:"13370000000000000000","6f2a31900e240395b19f159c1d00dfe4d898ebdf":"1999600000000000000000",d60b247321a32a5affb96b1e279927cc584de943:"2265500000000000000000",f7a1ade2d0f529123d1055f19b17919f56214e67:"500000000000000000000",bea00df17067a43a82bc1daecafb6c14300e89e6:"1820000000000000000000",a2968fc1c64bac0b7ae0d68ba949874d6db253f4:"20000000000000000000000","92d8ad9a4d61683b80d4a6672e84c20d62421e80":"20000000000000000000","6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6":"2000000000000000000000","7a63869fc767a4c6b1cd0e0649f3634cb121d24b":"77500000000000000000","84f522f0520eba52dd18ad21fa4b829f2b89cb97":"4949566000000000000000",d6234aaf45c6f22e66a225ffb93add629b4ef80f:"1000000000000000000000",e3d8bf4efe84b1616d1b89e427ddc6c8830685ae:"2000000000000000000000",a3db364a332d884ba93b2617ae4d85a1489bea47:"1700000000000000000000","9f7986924aeb02687cd64189189fb167ded2dd5c":"985000000000000000000","2eaf4e2a46b789ccc288c8d1d9294e3fb0853896":"2000000000000000000000",a02dc6aa328b880de99eac546823fccf774047fb:"1970000000000000000000","873b7f786d3c99ff012c4a7cae2677270240b9c5":"1730000000000000000000","1d69c83d28ff0474ceebeacb3ad227a144ece7a3":"5474937000000000000000","7b827cae7ff4740918f2e030ab26cb98c4f46cf5":"7460000000000000000000","3083ef0ed4c4401196774a95cf4edc83edc1484f":"170000000000000000000000","40ad74bc0bce2a45e52f36c3debb1b3ada1b7619":"6790000000000000000000","05423a54c8d0f9707e704173d923b946edc8e700":"127543000000000000000","22eb7db0ba56b0f8b816ccb206e615d929185b0d":"80500000000000000000","66082c75a8de31a53913bbd44de3a0374f7faa41":"1460000000000000000000",e3d3eaa299887865569e88be219be507189be1c9:"456156000000000000000",ae57cc129a96a89981dac60d2ffb877d5dc5e432:"1110994000000000000000","1a2434cc774422d48d53d59c5d562cce8407c94b":"30000000000000000000","21546914dfd3af2add41b0ff3e83ffda7414e1e0":"5969100000000000000000","4dcf62a3de3f061db91498fd61060f1f6398ff73":"1999944000000000000000","6fd98e563d12ce0fd60f4f1f850ae396a9823c02":"1261000000000000000000",edf8a3e1d40f13b79ec8e3e1ecf262fd92116263:"158000000000000000000",c09e3cfc19f605ff3ec9c9c70e2540d7ee974366:"500000000000000000000","953572f0ea6df9b197cae40e4b8ecc056c4371c5":"1000000000000000000000","163cc8be227646cb09719159f28ed09c5dc0dce0":"1337000000000000000000",a3932a31d6ff75fb3b1271ace7caa7d5e1ff1051:"20000000000000000000000",f9a94bd56198da245ed01d1e6430b24b2708dcc0:"749938000000000000000","3eb8b33b21d23cda86d8288884ab470e164691b5":"500000000000000000000","84bcbf22c09607ac84341d2edbc03bfb1739d744":"500000000000000000000","961c59adc74505d1864d1ecfcb8afa0412593c93":"40000000000000000000000",f068dfe95d15cd3a7f98ffa688b4346842be2690:"1255160000000000000000","291efe0081dce8c14799f7b2a43619c0c3b3fc1f":"1200000000000000000000",be4fd073617022b67f5c13499b827f763639e4e3:"2000000000000000000000",e40a7c82e157540a0b00901dbb86c716e1a062da:"49800000000000000000","6635b46f711d2da6f0e16370cd8ee43efb2c2d52":"2000000000000000000000","43748928e8c3ec4436a1d092fbe43ac749be1251":"400000000000000000000",b557ab9439ef50d237b553f02508364a466a5c03:"200000000000000000000","11928378d27d55c520ceedf24ceb1e822d890df0":"8000000000000000000000","61518464fdd8b73c1bb6ac6db600654938dbf17a":"200000000000000000000","004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3":"2000000000000000000000",a5e0fc3c3affed3db6710947d1d6fb017f3e276d:"2000000000000000000000","8ecbcfacbfafe9f00c3922a24e2cf0026756ca20":"5640000000000000000000",fb5ffaa0f7615726357891475818939d2037cf96:"20000000000000000000",ae222865799079aaf4f0674a0cdaab02a6d570ff:"2000000000000000000000","9edc90f4be210865214ab5b35e5a8dd77415279d":"4000000000000000000000","9d7831e834c20b1baa697af1d8e0c621c5afff9a":"86500000000000000000","046d274b1af615fb505a764ad8dda770b1db2f3d":"2000000000000000000000",eaea23aa057200e7c9c15e8ff190d0e66c0c0e83:"2000000000000000000000","417a3cd19496530a6d4204c3b5a17ce0f207b1a5":"8000000000000000000000",a035a3652478f82dbd6d115faa8ca946ec9e681d:"109880000000000000000","4f5801b1eb30b712d8a0575a9a71ff965d4f34eb":"300000000000000000000","91dbb6aaad149585be47375c5d6de5ff09191518":"20000000000000000000000",d043a011ec4270ee7ec8b968737515e503f83028:"500000000000000000000",bb371c72c9f0316cea2bd9c6fbb4079e775429ef:"1760000000000000000000",aa1df92e51dff70b1973e0e924c66287b494a178:"534400000000000000000",bd5f46caab2c3d4b289396bbb07f203c4da82530:"80000000000000000000","4d29fc523a2c1629532121da9998e9b5ab9d1b45":"15800000000000000000",addb26317227f45c87a2cb90dc4cfd02fb23caf8:"1000000000000000000000","52e46783329a769301b175009d346768f4c87ee4":"2000000000000000000000",caad9dc20d589ce428d8fda3a9d53a607b7988b5:"4000000000000000000000","95034e1621865137cd4739b346dc17da3a27c34e":"1580000000000000000000","0c3239e2e841242db989a61518c22247e8c55208":"263656000000000000000","5a0d609aae2332b137ab3b2f26615a808f37e433":"160000000000000000000000","2334c590c7a48769103045c5b6534c8a3469f44a":"17443200000000000000000",ddfcca13f934f0cfbe231da13039d70475e6a1d0:"1000169000000000000000",ee7288d91086d9e2eb910014d9ab90a02d78c2a0:"2000000000000000000000",fb91fb1a695553f0c68e21276decf0b83909b86d:"100016000000000000000","38695fc7e1367ceb163ebb053751f9f68ddb07a0":"2000000000000000000000","65093b239bbfba23c7775ca7da5a8648a9f54cf7":"400000000000000000000","73d8fee3cb864dce22bb26ca9c2f086d5e95e63b":"1000000000000000000000",f7155213449892744bc60f2e04400788bd041fdd:"66850000000000000000",d1a71b2d0858e83270085d95a3b1549650035e23:"14900000000000000000000",eac17b81ed5191fb0802aa54337313834107aaa4:"8000000000000000000000",bb076aac92208069ea318a31ff8eeb14b7e996e3:"149000000000000000000","9f46e7c1e9078cae86305ac7060b01467d6685ee":"668500000000000000000","1598127982f2f8ad3b6b8fc3cf27bf617801ba2b":"173000000000000000000",e91dac0195b19e37b59b53f7c017c0b2395ba44c:"1880000000000000000000",a436c75453ccca4a1f1b62e5c4a30d86dde4be68:"2000000000000000000000","11001b89ed873e3aaec1155634b4681643986323":"1000000000000000000000",ab93b26ece0a0aa21365afed1fa9aea31cd54468:"1608000000000000000000",e77febabdf080f0f5dca1d3f5766f2a79c0ffa7c:"1386000000000000000000","1c4af0e863d2656c8635bc6ffec8dd9928908cb5":"2000000000000000000000","0c48ae62d1539788eba013d75ea60b64eeba4e80":"2213311000000000000000","423cc4594cf4abb6368de59fd2b1230734612143":"2000000000000000000000","7f6b28c88421e4857e459281d78461692489d3fb":"2000000000000000000000","806854588ecce541495f81c28a290373df0274b2":"582000000000000000000",dc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf:"20000000000000000000",b00996b0566ecb3e7243b8227988dcb352c21899:"12000000000000000000000",f5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c:"1337000000000000000000","55a61b109480b5b2c4fcfdef92d90584160c0d35":"44700000000000000000",b8947822d5ace7a6ad8326e95496221e0be6b73d:"20000000000000000000","492de46aaf8f1d708d59d79af1d03ad2cb60902f":"2000000000000000000000","0e0d6633db1e0c7f234a6df163a10e0ab39c200f":"200000000000000000000",f8bf9c04874e5a77f38f4c38527e80c676f7b887:"2000000000000000000000","15528350e0d9670a2ea27f7b4a33b9c0f9621d21":"4000086000000000000000",eccf7a0457b566b346ca673a180f444130216ac3:"100000000000000000000","10cf560964ff83c1c9674c783c0f73fcd89943fc":"40000000000000000000000",e7f06f699be31c440b43b4db0501ec0e25261644:"500000000000000000000",b6ce4dc560fc73dc69fb7a62e388db7e72ea764f:"966000000000000000000",f456055a11ab91ff668e2ec922961f2a23e3db25:"18200000000000000000","8dfbafbc0e5b5c86cd1ad697feea04f43188de96":"390060000000000000000","085b4ab75d8362d914435cedee1daa2b1ee1a23b":"3880000000000000000000",e400d651bb3f2d23d5f849e6f92d9c5795c43a8a:"2674000000000000000000","851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1":"148607000000000000000","4c935bb250778b3c4c7f7e07fc251fa630314aab":"1500000000000000000000",ebd356156a383123343d48843bffed6103e866b3:"1970000000000000000000",da0b48e489d302b4b7bf204f957c1c9be383b0df:"2000000000000000000000","7085ae7e7e4d932197b5c7858c00a3674626b7a5":"6000000000000000000000","5b06d1e6930c1054692b79e3dbe6ecce53966420":"205400000000000000000","8df53d96191471e059de51c718b983e4a51d2afd":"32000000000000000000000","0678654ac6761db904a2f7e8595ec1eaac734308":"878000000000000000000","89fee30d1728d96cecc1dab3da2e771afbcfaa41":"1999944000000000000000","59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019":"10000000000000000000000","2b129c26b75dde127f8320bd0f63410c92a9f876":"2200000000000000000000","3d6ae053fcbc318d6fd0fbc353b8bf542e680d27":"14300000000000000000","755a60bf522fbd8fff9723446b7e343a7068567e":"20000000000000000000000","947e11e5ea290d6fc3b38048979e0cd44ec7c17f":"2000000000000000000000","711ecf77d71b3d0ea95ce4758afecdb9c131079d":"760000000000000000000",de9eff4c798811d968dccb460d9b069cf30278e0:"400000000000000000000","4e892e8081bf36e488fddb3b2630f3f1e8da30d2":"12003800000000000000000","8ede7e3dc50749c6c50e2e28168478c34db81946":"19999800000000000000000","0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1":"2001000000000000000000",e51eb87e7fb7311f5228c479b48ec9878831ac4c:"2000000000000000000000","8b01da34d470c1d115acf4d8113c4dd8a8c338e4":"25220000000000000000000","4329fc0931cbeb033880fe4c9398ca45b0e2d11a":"2000400000000000000000","540c072802014ef0d561345aec481e8e11cb3570":"8000000000000000000000","21e5d2bae995ccfd08a5c16bb524e1f630448f82":"2800000000000000000000","5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a":"200000000000000000000","5c0f2e51378f6b0d7bab617331580b6e39ad3ca5":"9600000000000000000000",d2f241255dd7c3f73c07043071ec08ddd9c5cde5:"500000000000000000000",cbe1b948864d8474e765145858fca4550f784b92:"10000000000000000000000","30742ccdf4abbcd005681f8159345c9e79054b1a":"668500000000000000000","6aeb9f74742ea491813dbbf0d6fcde1a131d4db3":"440800000000000000000","821eb90994a2fbf94bdc3233910296f76f9bf6e7":"10000000000000000000000","25c1a37ee5f08265a1e10d3d90d5472955f97806":"1820000000000000000000","7ef98b52bee953bef992f305fda027f8911c5851":"514717000000000000000","8adc53ef8c18ed3051785d88e996f3e4b20ecd51":"42000000000000000000000","007f4a23ca00cd043d25c2888c1aa5688f81a344":"773658000000000000000","4a735d224792376d331367c093d31c8794341582":"1900000000000000000000","05440c5b073b529b4829209dff88090e07c4f6f5":"1288000000000000000000","5e772e27f28800c50dda973bb33e10762e6eea20":"1790000000000000000000",a429fa88731fdd350e8ecd6ea54296b6484fe695:"1969606000000000000000",e0d76b7166b1f3a12b4091ee2b29de8caa7d07db:"2000000000000000000000","7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84":"14000000000000000000000","883a78aeabaa50d8ddd8570bcd34265f14b19363":"3879951000000000000000","51f9c432a4e59ac86282d6adab4c2eb8919160eb":"530000000000000000000000",b86607021b62d340cf2652f3f95fd2dc67698bdf:"5000000000000000000000",acc0909fda2ea6b7b7a88db7a0aac868091ddbf6:"22155000000000000000","69b80ed90f84834afa3ff82eb964703b560977d6":"26740000000000000000",ca4ca9e4779d530ecbacd47e6a8058cfde65d98f:"800000000000000000000","5d6c5c720d66a6abca8397142e63d26818eaab54":"40000000000000000000",c2c13e72d268e7150dc799e7c6cf03c88954ced7:"700000000000000000000","6bbd1e719390e6b91043f8b6b9df898ea8001b34":"2000053000000000000000",a9ba6f413b82fcddf3affbbdd09287dcf50415ca:"4000000000000000000000",ced3c7be8de7585140952aeb501dc1f876ecafb0:"4000000000000000000000","1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1":"1000000000000000000000","7d6e990daa7105de2526339833f77b5c0b85d84f":"20000000000000000000000","68addf019d6b9cab70acb13f0b3117999f062e12":"49941000000000000000",a77428bcb2a0db76fc8ef1e20e461a0a32c5ac15:"401100000000000000000","26048fe84d9b010a62e731627e49bc2eb73f408f":"4000000000000000000000",ff26138330274df4e0a3081e6df7dd983ec6e78f:"2000000000000000000000",b7382d37db0398ac72410cf9813de9f8e1ec8dad:"1000070000000000000000","44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140":"17000000000000000000000","47fef58584465248a0810d60463ee93e5a6ee8d3":"283100000000000000000",bd2b70fecc37640f69514fc7f3404946aad86b11:"1200000000000000000000","649a85b93653075fa6562c409a565d087ba3e1ba":"2000000000000000000000","55866486ec168f79dbe0e1abb18864d98991ae2c":"16100000000000000000",d7e74afdbad55e96cebc5a374f2c8b768680f2b0:"99000000000000000000",a8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52:"30000000000000000000","744c0c77ba7f236920d1e434de5da33e48ebf02c":"1970000000000000000000","9445ba5c30e98961b8602461d0385d40fbd80311":"10000000000000000000000",eb835c1a911817878a33d167569ea3cdd387f328:"1000000000000000000000","761a6e362c97fbbd7c5977acba2da74687365f49":"183840000000000000000","38202c5cd7078d4f887673ab07109ad8ada89720":"1000000000000000000000","5abfec25f74cd88437631a7731906932776356f9":"11901484239480000000000000","28e4af30cd93f686a122ad7bb19f8a8785eee342":"2101000000000000000000","3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2":"4000000000000000000000","7bb9571f394b0b1a8eba5664e9d8b5e840677bea":"19700000000000000000","50fb36c27107ee2ca9a3236e2746cca19ace6b49":"2000000000000000000000",a3bc979b7080092fa1f92f6e0fb347e28d995045:"2800000000000000000000",d04b861b3d9acc563a901689941ab1e1861161a2:"20000000000000000000","58c555bc293cdb16c6362ed97ae9550b92ea180e":"20000000000000000000","8bf02bd748690e1fd1c76d270833048b66b25fd3":"11800000000000000000000",fbc01db54e47cdc3c438694ab717a856c23fe6e9:"8456774000000000000000","9c9a07a8e57c3172a919ef64789474490f0d9f51":"10000000000000000000000",fc7e22a503ec5abe9b08c50bd14999f520fa4884:"6387725000000000000000","9b773669e87d76018c090f8255e54409b9dca8b2":"20000000000000000000",ffe8cbc1681e5e9db74a0f93f8ed25897519120f:"1507000000000000000000","4d4cf5807429615e30cdface1e5aae4dad3055e6":"600000000000000000000",cfde0fc75d6f16c443c3038217372d99f5d907f7:"2419000000000000000000","818ffe271fc3973565c303f213f6d2da89897ebd":"5734655000000000000000",ba1fcaf223937ef89e85675503bdb7ca6a928b78:"640000000000000000000",a30a45520e5206d9004070e6af3e7bb2e8dd5313:"400000000000000000000",a747439ad0d393b5a03861d77296326de8bb9db9:"1000000000000000000000","14d00aad39a0a7d19ca05350f7b03727f08dd82e":"500000000000000000000","551999ddd205563327b9b530785acff9bc73a4ba":"6000000000000000000000",a4670731175893bbcff4fa85ce97d94fc51c4ba8:"8000000000000000000000",f858171a04d357a13b4941c16e7e55ddd4941329:"41984000000000000000",a6484cc684c4c91db53eb68a4da45a6a6bda3067:"6000000000000000000000","00d75ed60c774f8b3a5a5173fb1833ad7105a2d9":"2005500000000000000000",bf92418a0c6c31244d220260cb3e867dd7b4ef49:"99800000000000000000","716d50cca01e938500e6421cc070c3507c67d387":"2000000000000000000000","82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff":"1999998000000000000000","5a565285374a49eedd504c957d510874d00455bc":"100000000000000000000","778c79f4de1953ebce98fe8006d53a81fb514012":"999800000000000000000","41b2d34fde0b1029262b4172c81c1590405b03ae":"1000000000000000000000","4039bd50a2bde15ffe37191f410390962a2b8886":"200000000000000000000",c033be10cb48613bd5ebcb33ed4902f38b583003:"3000000000000000000000","5d5751819b4f3d26ed0c1ac571552735271dbefa":"1000000000000000000000",b600429752f399c80d0734744bae0a022eca67c6:"20000000000000000000",f875619d8a23e45d8998d184d480c0748970822a:"4000000000000000000000","71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd":"4365000000000000000000",b2f9c972c1e9737755b3ff1b3088738396395b26:"20000000000000000000000",a66a4963b27f1ee1932b172be5964e0d3ae54b51:"173000000000000000000","53ce88e66c5af2f29bbd8f592a56a3d15f206c32":"140840000000000000000","433e3ba1c51b810fc467d5ba4dea42f7a9885e69":"40000000000000000000000",c7837ad0a0bf14186937ace06c5546a36aa54f46:"4000000000000000000000",c3f8f67295a5cd049364d05d23502623a3e52e84:"6000000000000000000000","3fd0bb47798cf44cdfbe4d333de637df4a00e45c":"100040000000000000000",a1ae8d4540d4db6fdde7146f415b431eb55c7983:"197000000000000000000","5cccf1508bfd35c20530aa642500c10dee65eaed":"850000000000000000000",a53ead54f7850af21438cbe07af686279a315b86:"10000000000000000000000","8cf6da0204dbc4860b46ad973fc111008d9e0c46":"200000000000000000000","8e7936d592008fdc7aa04edeeb755ab513dbb89d":"20000000000000000000","4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b":"4200000000000000000000","2b4f4507bb6b9817942ce433781b708fbcd166fd":"18200000000000000000","026432af37dc5113f1f46d480a4de0b28052237e":"355800000000000000000",e780a56306ba1e6bb331952c22539b858af9f77d:"50000000000000000000000",d1f1694d22671b5aad6a94995c369fbe6133676f:"1000000000000000000000","7c45f0f8442a56dbd39dbf159995415c52ed479b":"2000000000000000000000",b65941d44c50d24666670d364766e991c02e11c2:"600000000000000000000","45e68db8dbbaba5fc2cb337c62bcd0d61b059189":"2000000000000000000000","05f3631f5664bdad5d0132c8388d36d7d8920918":"20000000000000000000","5475d7f174bdb1f789017c7c1705989646079d49":"9400000000000000000000",c7bf2ed1ed312940ee6aded1516e268e4a604856:"6000000000000000000000","39aaf0854db6eb39bc7b2e43846a76171c0445de":"1850000000000000000000",c817df1b91faf30fe3251571727c9711b45d8f06:"1999944000000000000000","7d13d6705884ab2157dd8dcc7046caf58ee94be4":"137200000000000000000000","478dc09a1311377c093f9cc8ae74111f65f82f39":"4000000000000000000000","8043ed22f997e5a2a4c16e364486ae64975692c4":"1130513000000000000000",b9a985501ee950829b17fae1c9cf348c3156542c:"294100000000000000000",d5cba5b26bea5d73fabb1abafacdef85def368cc:"200000000000000000000","6776e133d9dc354c12a951087b639650f539a433":"120000000000000000000","804ca94972634f633a51f3560b1d06c0b293b3b1":"200000000000000000000","0be1fdf626ee6189102d70d13b31012c95cd1cd6":"2000000000000000000000",f848fce9ab611c7d99206e23fac69ad488b94fe1:"48500000000000000000",f01195d657ef3c942e6cb83949e5a20b5cfa8b1e:"25760000000000000000000","78a5e89900bd3f81dd71ba869d25fec65261df15":"51900000000000000000000",d6f1e55b1694089ebcb4fe7d7882aa66c8976176:"19998846000000000000000",d5294b666242303b6df0b1c88d37429bc8c965aa:"300700000000000000000","3171877e9d820cc618fc0919b29efd333fda4934":"1000000000000000000000","2901f8077f34190bb47a8e227fa29b30ce113b31":"100000000000000000000","6b2284440221ce16a8382de5ff0229472269deec":"1000000000000000000000","1bba03ff6b4ad5bf18184acb21b188a399e9eb4a":"1790000000000000000000","80744618de396a543197ee4894abd06398dd7c27":"2000000000000000000000","1b799033ef6dc7127822f74542bb22dbfc09a308":"100000000000000000000",d513a45080ff2febe62cd5854abe29ee4467f996:"153200000000000000000",e761d27fa3502cc76bb1a608740e1403cf9dfc69:"280000000000000000000","53989ed330563fd57dfec9bd343c3760b0799390":"6208000000000000000000",ccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d:"900000000000000000000",f373e9daac0c8675f53b797a160f6fc034ae6b23:"100000000000000000000",abc9a99e8a2148a55a6d82bd51b98eb5391fdbaf:"6000000000000000000000",ffec0913c635baca2f5e57a37aa9fb7b6c9b6e26:"805000000000000000000","581a3af297efa4436a29af0072929abf9826f58b":"2000000000000000000000","924efa6db595b79313277e88319625076b580a10":"2000000000000000000000","65d8dd4e251cbc021f05b010f2d5dc520c3872e0":"834956000000000000000","6c67d6db1d03516c128b8ff234bf3d49b26d2941":"100000000000000000000000","496d365534530a5fc1577c0a5241cb88c4da7072":"1790000000000000000000",b85ff03e7b5fc422981fae5e9941dacbdaba7584:"1337000000000000000000",e13540ecee11b212e8b775dc8e71f374aae9b3f8:"2000000000000000000000",a02e3f8f5959a7aab7418612129b701ca1b80010:"20000000000000000000",a7a3f153cdc38821c20c5d8c8241b294a3f82b24:"500000000000000000000","366175403481e0ab15bb514615cbb989ebc68f82":"2000000000000000000000","5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85":"100000000000000000000000",a466d770d898d8c9d405e4a0e551efafcde53cf9:"492500000000000000000","5fa8a54e68176c4fe2c01cf671c515bfbdd528a8":"330000000000000000000000",e2e15c60dd381e3a4be25071ab249a4c5c5264da:"2350502000000000000000","0628bfbe5535782fb588406bc96660a49b011af5":"1520000000000000000000","04d6b8d4da867407bb997749debbcdc0b358538a":"1000000000000000000000","0e6ec313376271dff55423ab5422cc3a8b06b22b":"4000000000000000000000","8787d12677a5ec291e57e31ffbfad105c3324b87":"12438777000000000000000","58e2f11223fc8237f69d99c6289c148c0604f742":"24000000000000000000000","5600730a55f6b20ebd24811faa3de96d1662abab":"1880000000000000000000",fce089635ce97abac06b44819be5bb0a3e2e0b37:"92491000000000000000",fa0c1a988c8a17ad3528eb28b3409daa58225f26:"200000000000000000000","7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392":"1000000000000000000000",bd17eed82b9a2592019a1b1b3c0fbad45c408d22:"250000000000000000000","884a7a39d0916e05f1c242df55607f37df8c5fda":"23400000000000000000000",ca70f4ddbf069d2143bd6bbc7f696b52789b32e7:"3000000000000000000000","7b25bb9ca8e702217e9333225250e53c36804d48":"1880000000000000000000",ea8317197959424041d9d7c67a3ece1dbb78bb55:"394000000000000000000","5cb953a0e42f5030812226217fffc3ce230457e4":"100000000000000000000",d1f4dc1ddb8abb8848a8b14e25f3b55a8591c266:"250000000000000000000","6a42ca971c6578d5ade295c3e7f4ad331dd3424e":"6000000000000000000000","07e1162ceae3cf21a3f62d105990302e307f4e3b":"1530000000000000000000","5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b":"2000000000000000000000","5d2819e8d57821922ee445650ccaec7d40544a8d":"200000000000000000000","4c24b78baf2bafc7fcc69016426be973e20a50b2":"3000000000000000000000","630c5273126d517ce67101811cab16b8534cf9a8":"9422595000000000000000","291f929ca59b54f8443e3d4d75d95dee243cef78":"499938000000000000000","2dd325fdffb97b19995284afa5abdb574a1df16a":"500000000000000000000","4fce8429ba49caa0369d1e494db57e89eab2ad39":"200000000000000000000000","712b76510214dc620f6c3a1dd29aa22bf6d214fb":"6000000000000000000000","266f2da7f0085ef3f3fa09baee232b93c744db2e":"60000000000000000000000","0770c61be78772230cb5a3bb2429a72614a0b336":"6767695000000000000000","02dfcb17a1b87441036374b762a5d3418b1cb4d4":"1340860000000000000000","5e67df8969101adabd91accd6bb1991274af8df2":"500000000000000000000","7d9c59631e2ba2e8e82891f3979922aaa3b567a1":"8000000000000000000000","949f8c107bc7f0aceaa0f17052aadbd2f9732b2e":"2000000000000000000000",ea4e809e266ae5f13cdbe38f9d0456e6386d1274:"4500000000000000000000",cd5510a242dfb0183de925fba866e312fabc1657:"2400000000000000000000",a36e0d94b95364a82671b608cb2d373245612909:"150011000000000000000","0ec46696ffac1f58005fa8439824f08eed1df89b":"10000000000000000000000",c6fb1ee37417d080a0d048923bdabab095d077c6:"200000000000000000000","53c9eca40973f63bb5927be0bc6a8a8be1951f74":"2000000000000000000000",ea14bfda0a6e76668f8788321f07df37824ec5df:"200000000000000000000000",dfb4d4ade52fcc818acc7a2c6bb2b00224658f78:"7750000000000000000000","5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783":"1000000000000000000000","8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71":"2000000000000000000000","8f02bda6c36922a6be6a509be51906d393f7b99b":"1019835000000000000000","530077c9f7b907ff9cec0c77a41a70e9029add4a":"2000000000000000000000","08936a37df85b3a158cafd9de021f58137681347":"18200000000000000000","8e9c429266df057efa78dd1d5f77fc40742ad466":"300061000000000000000",acc59f3b30ceffc56461cc5b8df48902240e0e7b:"2000000000000000000000",f5534815dc635efa5cc84b2ac734723e21b29372:"1580000000000000000000",f873e57a65c93b6e18cb75f0dc077d5b8933dc5c:"197000000000000000000","25b78c9fad85b43343f0bfcd0fac11c9949ca5eb":"2000000000000000000000",aad2b7f8106695078e6c138ec81a7486aaca1eb2:"200000000000000000000","509c8668036d143fb8ae70b11995631f3dfcad87":"1000000000000000000000","3602458da86f6d6a9d9eb03daf97fe5619d442fa":"2000000000000000000000","9f607b3f12469f446121cebf3475356b71b4328c":"4000000000000000000000",fe3827d57630cf8761d512797b0b858e478bbd12:"20000000000000000000","9d9c4efe9f433989e23be94049215329fa55b4cb":"256215000000000000000","9bd905f1719fc7acd0159d4dc1f8db2f21472338":"1000000000000000000000","7d82e523cc2dc591da3954e8b6bb2caf6461e69c":"2316058000000000000000","74afe54902d615782576f8baac13ac970c050f6e":"177670000000000000000",aff11ccf699304d5f5862af86083451c26e79ae5:"1999000000000000000000","3885fee67107dc3a3c741ee290c98918c9b99397":"20000000000000000000","36343aeca07b6ed58a0e62fa4ecb498a124fc971":"300000000000000000000",c94a28fb3230a9ddfa964e770f2ce3c253a7be4f:"200000000000000000000","9882967cee68d2a839fad8ab4a7c3dddf6c0adc8":"1336866000000000000000","95df4e3445d7662624c48eba74cf9e0a53e9f732":"56000000000000000000000",ca9faa17542fafbb388eab21bc4c94e8a7b34788:"1999999000000000000000",c8b1850525d946f2ae84f317b15188c536a5dc86:"2685000000000000000000","39bac68d947859f59e9226089c96d62e9fbe3cde":"40000000000000000000",a9bfc410dddb20711e45c07387eab30a054e19ac:"1154750000000000000000","540a1819bd7c35861e791804e5fbb3bc97c9abb1":"1454400000000000000000","667b61c03bb937a9f5d0fc5a09f1ea3363c77035":"4250000000000000000000","010df1df4bed23760d2d1c03781586ddf7918e54":"60000000000000000000",bd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac:"1318800000000000000000",fb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e:"5910000000000000000000","3f0c83aac5717962734e5ceaeaecd39b28ad06be":"2000000000000000000000",f10661ff94140f203e7a482572437938bec9c3f7:"20000000000000000000000",bd3097a79b3c0d2ebff0e6e86ab0edadbed47096:"1670000000000000000000",edeb4894aadd0081bbddd3e8846804b583d19f27:"2000000000000000000000","49c9771fca19d5b9d245c891f8158fe49f47a062":"10000000000000000000000","6405dd13e93abcff377e700e3c1a0086eca27d29":"18200000000000000000",ce5e04f0184369bcfa06aca66ffa91bf59fa0fb9:"40000000000000000000","4364309a9fa07095600f79edc65120cdcd23dc64":"10000000000000000000000",b749b54e04d5b19bdcedfb84da7701ab478c27ae:"2680000000000000000000",f593c65285ee6bbd6637f3be8f89ad40d489f655:"3000000000000000000000",d224f880f9479a89d32f09e52be990b288135cef:"17300000000000000000000","85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e":"321750000000000000000",caf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31:"5000000000000000000000","51ca8bd4dc644fac47af675563d5804a0da21eeb":"788000000000000000000","19f643e1a8fa04ae16006028138333a59a96de87":"20000000000000000000","58b808a65b51e6338969afb95ec70735e451d526":"39998000000000000000000","574921838cc77d6c98b17d903a3ae0ee0da95bd0":"53480000000000000000000","7c6924d07c3ef5891966fe0a7856c87bef9d2034":"2000000000000000000000",f9767e4ecb4a5980527508d7bec3d45e4c649c13:"1910000000000000000000",f3be99b9103ce7550aa74ff1db18e09dfe32e005:"2000000000000000000000","625644c95a873ef8c06cdb9e9f6d8d7680043d62":"1800000000000000000000","6a44af96b3f032ae641beb67f4b6c83342d37c5d":"29000000000000000000",d3a10ec7a5c9324999dd9e9b6bde7c911e584bda:"600000000000000000000",e8ddbed732ebfe754096fde9086b8ea4a4cdc616:"2000000000000000000000","235fa66c025ef5540070ebcf0d372d8177c467ab":"33400000000000000000000","4d08471d68007aff2ae279bc5e3fe4156fbbe3de":"40000000000000000000000",dadc00ab7927603c2fcf31cee352f80e6c4d6351:"1999664000000000000000","7393cbe7f9ba2165e5a7553500b6e75da3c33abf":"100000000000000000000","77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024":"1970000000000000000000","7fea1962e35d62059768c749bedd96cab930d378":"2000000000000000000000","243b3bca6a299359e886ce33a30341fafe4d573d":"20000000000000000000000",b94d47b3c052a5e50e4261ae06a20f45d8eee297:"2000000000000000000000",e727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6:"2000000000000000000000",e510d6797fba3d6693835a844ea2ad540691971b:"17381000000000000000000","0cdc960b998c141998160dc179b36c15d28470ed":"500038000000000000000","3e76a62db187aa74f63817533b306cead0e8cebe":"31200000000000000000000","495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c":"1000000000000000000000","5126460d692c71c9af6f05574d93998368a23799":"52000000000000000000",a008019863c1a77c1499eb39bbd7bf2dd7a31cb9:"137000000000000000000","65ee20b06d9ad589a7e7ce04b9f5f795f402aece":"2000000000000000000000",f432b9dbaf11bdbd73b6519fc0a904198771aac6:"152000000000000000000","85946d56a4d371a93368539690b60ec825107454":"1730000000000000000000","26f9f7cefd7e394b9d3924412bf2c2831faf1f85":"4000000000000000000000",d4ebb1929a23871cf77fe049ab9602be08be0a73:"1910000000000000000000","4fdac1aa517007e0089430b3316a1badd12c01c7":"500000000000000000000","05e671de55afec964b074de574d5158d5d21b0a3":"3940000000000000000000","20181c4b41f6f972b66958215f19f570c15ddff1":"1600000000000000000000",cc9519d1f3985f6b255eaded12d5624a972721e1:"1000000000000000000000","169bbefc41cfd7d7cbb8dfc63020e9fb06d49546":"2000000000000000000000","175a183a3a235ffbb03ba835675267229417a091":"16000000000000000000000","8dde3cb8118568ef4503fe998ccdf536bf19a098":"4000000000000000000000","6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e":"1500000000000000000000","5cc4cba621f220637742057f6055b80dffd77e13":"39997692000000000000000",ecb94c568bfe59ade650645f4f26306c736cace4:"267400000000000000000",dfa6b8b8ad3184e357da282951d79161cfb089bc:"400000000000000000000",a3058c51737a4e96c55f2ef6bd7bb358167ec2a7:"606093000000000000000","051d424276b21239665186133d653bb8b1862f89":"1000000000000000000000",d05ffb2b74f867204fe531653b0248e21c13544e:"1000000000000000000000",e1f63ebbc62c7b7444040eb99623964f7667b376:"20000000000000000000",e5a3d7eb13b15c100177236d1beb30d17ee15420:"2000000000000000000000","18fa8625c9dc843c78c7ab259ff87c9599e07f10":"1000000000000000000000","64264aedd52dcae918a012fbcd0c030ee6f71821":"1000000000000000000000","6f1f4907b8f61f0c51568d692806b382f50324f5":"2000000000000000000000",becef61c1c442bef7ce04b73adb249a8ba047e00:"1000400000000000000000","7b893286427e72db219a21fc4dcd5fbf59283c31":"10000000000000000000000",ce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4:"2000000000000000000000","66ec16ee9caab411c55a6629e318de6ee216491d":"865000000000000000000","30b66150f1a63457023fdd45d0cc6cb54e0c0f06":"1000000000000000000000","87183160d172d2e084d327b86bcb7c1d8e6784ef":"4000086000000000000000",c420388fbee84ad656dd68cdc1fbaa9392780b34:"187767000000000000000","90f774c9147dde90853ddc43f08f16d455178b8c":"4000000000000000000000","1e1d7a5f2468b94ea826982dbf2125793c6e4a5a":"999940000000000000000","8043fdd0bc4c973d1663d55fc135508ec5d4f4fa":"20000000000000000000","7bca1da6c80a66baa5db5ac98541c4be276b447d":"679000000000000000000","73550beb732ba9ddafda7ae406e18f7feb0f8bb2":"2800000000000000000000",adc19ec835afe3e58d87dc93a8a9213c90451326:"1971200000000000000000","821d798af19989c3ae5b84a7a7283cd7fda1fabe":"20000000000000000000000","4c4e6f13fb5e3f70c3760262a03e317982691d10":"100000000000000000000","664e43119870af107a448db1278b044838ffcdaf":"400000000000000000000","8da1178f55d97772bb1d24111a404a4f8715b95d":"878149000000000000000","5e6e9747e162f8b45c656e0f6cae7a84bac80e4e":"2000000000000000000000",c7eac31abce6d5f1dea42202b6a674153db47a29:"591000000000000000000",d96711540e2e998343d4f590b6fc8fac3bb8b31d:"1758944000000000000000","9da4ec407077f4b9707b2d9d2ede5ea5282bf1df":"4000000000000000000000",f60c1b45f164b9580e20275a5c39e1d71e35f891:"2000000000000000000000",eb6394a7bfa4d28911d5a5b23e93f35e340c2294:"78000000000000000000",a89ac93b23370472daac337e9afdf642543f3e57:"10000000000000000000000",bb618e25221ad9a740b299ed1406bc3934b0b16d:"1000000000000000000000","817ac33bd8f847567372951f4a10d7a91ce3f430":"200015000000000000000",fe6a895b795cb4bf85903d3ce09c5aa43953d3bf:"3400000000000000000000","3673954399f6dfbe671818259bb278e2e92ee315":"200000000000000000000000",df0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5:"4367636000000000000000",ff12e49d8e06aa20f886293c0b98ed7eff788805:"4000000000000000000000","5aef16a226dd68071f2483e1da42598319f69b2c":"2000000000000000000000","0266ab1c6b0216230b9395443d5fa75e684568c6":"1000000000000000000000","14a7352066364404db50f0d0d78d754a22198ef4":"1880000000000000000000","444caf79b71338ee9aa7c733b02acaa7dc025948":"40000000000000000000","64e2de21200b1899c3a0c0653b5040136d0dc842":"20000000000000000000000","36e156610cd8ff64e780d89d0054385ca76755aa":"14000000000000000000000","0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b":"1185000000000000000000","38bf2a1f7a69de0e2546adb808b36335645da9ff":"2000320000000000000000","39f44663d92561091b82a70dcf593d754005973a":"199999000000000000000","24b9e6644f6ba4cde126270d81f6ab60f286dff4":"133700000000000000000","9b59eb213b1e7565e45047e04ea0374f10762d16":"2000000000000000000000","309544b6232c3dd737f945a03193d19b5f3f65b9":"1087440000000000000000",b28bb39f3466517cd46f979cf59653ee7d8f152e:"450000000000000000000","9da8e22ca10e67fea44e525e4751eeac36a31194":"260000000000000000000","4f8ae80238e60008557075ab6afe0a7f2e74d729":"100000000000000000000","74ed33acf43f35b98c9230b9e6642ecb5330839e":"681872000000000000000","22842ab830da509913f81dd1f04f10af9edd1c55":"2000000000000000000000",a8f37f0ab3a1d448a9e3ce40965f97a646083a34:"329800000000000000000","582b70669c97aab7d68148d8d4e90411e2810d56":"999972000000000000000",d5e55100fbd1956bbed2ca518d4b1fa376032b0b:"100000000000000000000",b7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b:"300000000000000000000",e081ca1f4882db6043d5a9190703fde0ab3bf56d:"400000000000000000000",c02077449a134a7ad1ef7e4d927affeceeadb5ae:"18200000000000000000",e09fea755aee1a44c0a89f03b5deb762ba33006f:"1100070000000000000000",b3717731dad65132da792d876030e46ac227bb8a:"1000000000000000000000","157eb3d3113bd3b597714d3a954edd018982a5cb":"2000000000000000000000",dc57345b38e0f067c9a31d9deac5275a10949321:"200000000000000000000","40ea5044b204b23076b1a5803bf1d30c0f88871a":"14000000000000000000000","2bab0fbe28d58420b52036770a12f9952aea6911":"3820000000000000000000",adaa0e548c035affed64ca678a963fabe9a26bfd:"70000000000000000000",bb48eaf516ce2dec3e41feb4c679e4957641164f:"3820000000000000000000","7693bdeb6fc82b5bca721355223175d47a084b4d":"22000000000000000000000","03cb98d7acd817de9d886d22fab3f1b57d92a608":"1600000000000000000000",f88900db737955b1519b1a7d170a18864ce590eb:"18200000000000000000","757fa55446c460968bb74b5ebca96c4ef2c709c5":"1015200000000000000000",da855d53477f505ec4c8d5e8bb9180d38681119c:"5600000000000000000000",e41aea250b877d423a63ba2bce2f3a61c0248d56:"260000000000000000000","8262169b615870134eb4ac6c5f471c6bf2f789fc":"462500000000000000000","66b0c100c49149935d14c0dc202cce907cea1a3d":"1970000000000000000000","854c0c469c246b83b5d1b3eca443b39af5ee128a":"1600000000000000000000",eb6810691d1ae0d19e47bd22cebee0b3ba27f88a:"2499922000000000000000","24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9":"1000000000000000000000",e31b4eef184c24ab098e36c802714bd4743dd0d4:"200000000000000000000","99b8c824869de9ed24f3bff6854cb6dd45cc3f9f":"1880000000000000000000","2ae73a79aea0278533accf21070922b1613f8f32":"3097417000000000000000",ddbd2b932c763ba5b1b7ae3b362eac3e8d40121a:"10000000000000000000000","1b4bbcb18165211b265b280716cb3f1f212176e8":"472325000000000000000",e177e0c201d335ba3956929c571588b51c5223ae:"2000000000000000000000","1945fe377fe6d4b71e3e791f6f17db243c9b8b0f":"2185500000000000000000","3e9b34a57f3375ae59c0a75e19c4b641228d9700":"17900000000000000000",a4d6c82eddae5947fbe9cdfbd548ae33d91a7191:"8000000000000000000000",bad4425e171c3e72975eb46ac0a015db315a5d8f:"2000000000000000000000",a2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742:"4639390000000000000000",b61c34fcacda701a5aa8702459deb0e4ae838df8:"35000000000000000000000","145e0600e2a927b2dd8d379356b45a2e7d51d3ae":"2545843000000000000000","8df339214b6ad1b24663ce716034749d6ef838d9":"11000000000000000000000","8fd9a5c33a7d9edce0997bdf77ab306424a11ea9":"2000000000000000000000","097da12cfc1f7c1a2464def08c29bed5e2f851e9":"20000000000000000000",ddabf13c3c8ea4e3d73d78ec717afafa430e5479:"41600000000000000000000","9eeb07bd2b7890195e7d46bdf2071b6617514ddb":"2000000000000000000000","819af9a1c27332b1c369bbda1b3de1c6e933d640":"314308000000000000000",d7d2c6fca8ad1f75395210b57de5dfd673933909:"340000000000000000000",cdd5d881a7362c9070073bdfbc75e72453ac510e:"842000000000000000000",e9ac36376efa06109d40726307dd1a57e213eaa9:"194000000000000000000","1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a":"346000000000000000000","3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a":"150000000000000000000","6c1ddd33c81966dc8621776071a4129482f2c65f":"40000000000000000000000","2ccb66494d0af689abf9483d365d782444e7dead":"1000000000000000000000","19571a2b8f81c6bcf66ab3a10083295617150003":"492500000000000000000","38ac664ee8e0795e4275cb852bcba6a479ad9c8d":"20000000000000000000",c4803bb407c762f90b7596e6fde194931e769590:"4000000000000000000000","93507e9e8119cbceda8ab087e7ecb071383d6981":"14000000000000000000000",b672734afcc224e2e609fc51d4f059732744c948:"295500000000000000000",fbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f:"40000000000000000000","8c81410ea8354cc5c65c41be8bd5de733c0b111d":"9550000000000000000000","942c6b8c955bc0d88812678a236725b32739d947":"1550000000000000000000",d2e817738abf1fb486583f80c350318bed860c80:"240010000000000000000",bff5df769934b8943ca9137d0efef2fe6ebbb34e:"100000000000000000000","6c4e426e8dc005dfa3516cb8a680b02eea95ae8e":"1337000000000000000000",f645dd7c890093e8e4c8aa92a6bb353522d3dc98:"134000000000000000000","4bac846af4169f1d95431b341d8800b22180af1a":"20000000000000000000","0514954c3c2fb657f9a06f510ea22748f027cdd3":"400000000000000000000","163dca73d7d6ea3f3e6062322a8734180c0b78ef":"2941400000000000000000",feaca2ac74624bf348dac9985143cfd652a4be55:"26148245000000000000000",fe80e9232deaff19baf99869883a4bdf0004e53c:"855680000000000000000","17108dab2c50f99de110e1b3b3b4cd82f5df28e7":"980000000000000000000","837a645dc95c49549f899c4e8bcf875324b2f57c":"600400000000000000000","762998e1d75227fced7a70be109a4c0b4ed86414":"20000000000000000000",c0a7e8435dff14c25577739db55c24d5bf57a3d9:"49250000000000000000000",aead88d689416b1c91f2364421375b7d3c70fb2e:"2000000000000000000000","9279b2228cec8f7b4dda3f320e9a0466c2f585ca":"5000000000000000000000","36726f3b885a24f92996da81625ec8ad16d8cbe6":"1543723000000000000000","3951e48e3c869e6b72a143b6a45068cdb9d466d0":"20000000000000000000",f5d61ac4ca95475e5b7bffd5f2f690b316759615:"31040000000000000000000","158a0d619253bf4432b5cd02c7b862f7c2b75636":"135733000000000000000",e56d431324c92911a1749df292709c14b77a65cd:"8200000000000000000000","9976947eff5f6ae5da08dd541192f378b428ff94":"8000000000000000000000","83210583c16a4e1e1dac84ebd37e3d0f7c57eba4":"2000000000000000000000",dcb64df43758c7cf974fa660484fbb718f8c67c1:"20000000000000000000000",d4205592844055b3c7a1f80cefe3b8eb509bcde7:"178973000000000000000",d0648a581b3508e135a2935d12c9657045d871ca:"8022000000000000000000",e7d17524d00bad82497c0f27156a647ff51d2792:"20000000000000000000","21582e99e502cbf3d3c23bdffb76e901ac6d56b2":"100000000000000000000",e61f280915c774a31d223cf80c069266e5adf19b:"880000000000000000000","03c91d92943603e752203e05340e566013b90045":"802200000000000000000","22561c5931143536309c17e832587b625c390b9a":"4000000000000000000000",e399c81a1d701b44f0b66f3399e66b275aaaf8c1:"1000000000000000000000","7f8dbce180ed9c563635aad2d97b4cbc428906d9":"2674000000000000000000","9f61beb46f5e853d0a8521c7446e68e34c7d0973":"560000000000000000000","6d3f2ba856ccbb0237fa7661156b14b013f21240":"1000000000000000000000","5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc":"2172412000000000000000",b600feab4aa96c537504d96057223141692c193a:"400000000000000000000",fab487500df20fb83ebed916791d561772adbebf:"1999980000000000000000",f8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109:"200000000000000000000","3f1bc420c53c002c9e90037c44fe6a8ef4ddc962":"173000000000000000000","82e577b515cb2b0860aafe1ce09a59e09fe7d040":"600000000000000000000",bc999e385c5aebcac8d6f3f0d60d5aa725336d0d:"2000000000000000000000",e16ce35961cd74bd590d04c4ad4a1989e05691c6:"146000000000000000000",eb76424c0fd597d3e341a9642ad1ee118b2b579d:"4000000000000000000000",c440c7ca2f964b6972ef664a2261dde892619d9c:"20000000000000000000000","460d5355b2ceeb6e62107d81e51270b26bf45620":"2005500000000000000000",fcada300283f6bcc134a91456760b0d77de410e0:"2000000000000000000000",be8d7f18adfe5d6cc775394989e1930c979d007d:"1000000000000000000000",a7f9220c8047826bd5d5183f4e676a6d77bfed36:"153368000000000000000","98d204f9085f8c8e7de23e589b64c6eff692cc63":"2000000000000000000000","5a2916b8d2e8cc12e207ab464d433e2370d823d9":"2000000000000000000000",c42d6aeb710e3a50bfb44d6c31092969a11aa7f3:"150052000000000000000","04ce45f600db18a9d0851b29d9393ebdaafe3dc5":"20000000000000000000","7a1370a742ec2687e761a19ac5a794329ee67404":"2999988000000000000000",da2ad58e77deddede2187646c465945a8dc3f641:"660000000000000000000",ec58bc0d0c20d8f49465664153c5c196fe59e6be:"400000000000000000000",f8063af4cc1dd9619ab5d8bff3fcd1faa8488221:"2000000000000000000000",b9231eb26e5f9e4b4d288f03906704fab96c87d6:"19700000000000000000000","6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e":"199600000000000000000",e49936a92a8ccf710eaac342bc454b9b14ebecb1:"2000000000000000000000","21dbdb817a0d8404c6bdd61504374e9c43c9210e":"9999917000000000000000","5cebe30b2a95f4aefda665651dc0cf7ef5758199":"18200000000000000000","597038ff91a0900cbbab488af483c790e6ec00a0":"10000000000000000000000","0fa5d8c5b3f294efd495ab69d768f81872508548":"2000000000000000000000",feef3b6eabc94affd3310c1c4d0e65375e131119:"20000000000000000000","1ce81d31a7923022e125bf48a3e03693b98dc9dd":"2000000000000000000000","5887dc6a33dfed5ac1edefe35ef91a216231ac96":"250000000000000000000","4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2":"2235000000000000000000",e845e387c4cbdf982280f6aa01c40e4be958ddb2:"25000000000000000000000","71d9494e50c5dd59c599dba3810ba1755e6537f0":"4000000000000000000000","6eb5578a6bb7c32153195b0d8020a6914852c059":"660000000000000000000000","543f8c674e2462d8d5daa0e80195a8708e11a29e":"63940000000000000000",a0459ef3693aacd1647cd5d8929839204cef53be:"1000000000000000000000",dda371e600d30688d4710e088e02fdf2b9524d5f:"6920000000000000000000",dd4dd6d36033b0636fcc8d0938609f4dd64f4a86:"60000000000000000000","3bd624b548cb659736907ed8aa3c0c705e24b575":"2000000000000000000000","414599092e879ae25372a84d735af5c4e510cd6d":"400000000000000000000","3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373":"1951100000000000000000","5948bc3650ed519bf891a572679fd992f8780c57":"197000000000000000000","8b74a7cb1bb8c58fce267466a30358adaf527f61":"13620000000000000000000","3f10800282d1b7ddc78fa92d8230074e1bf6aeae":"4925000000000000000000","32dbb6716c54e83165829a4abb36757849b6e47d":"1000000000000000000000",e6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7:"1460000000000000000000","052a58e035f1fe9cdd169bcf20970345d12b9c51":"1490000000000000000000","581bdf1bb276dbdd86aedcdb397a01efc0e00c5b":"1000000000000000000000","604e9477ebf4727c745bcabbedcb6ccf29994022":"1000060000000000000000","59b96deb8784885d8d3b4a166143cc435d2555a1":"1337000000000000000000","37d980a12ee3bf23cc5cdb63b4ae45691f74c837":"2000000000000000000000","3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f":"3000000000000000000000","49c941e0e5018726b7290fc473b471d41dae80d1":"500000000000000000000",f26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0:"775000000000000000000",d0944aa185a1337061ae20dc9dd96c83b2ba4602:"200000000000000000000","904caa429c619d940f8e6741826a0db692b19728":"1000000000000000000000",b95c9b10aa981cf4a67a71cc52c504dee8cf58bd:"4000000000000000000000","15874686b6733d10d703c9f9bec6c52eb8628d67":"2000000000000000000000","1374facd7b3f8d68649d60d4550ee69ff0484133":"269700000000000000000",b0e469c886593815b3495638595daef0665fae62:"1940000000000000000000","47ff6feb43212060bb1503d7a397fc08f4e70352":"2000000000000000000000",c60b04654e003b4683041f1cbd6bc38fda7cdbd6:"2000000000000000000000","3ecdb532e397579662b2a46141e78f8235936a5f":"66850000000000000000",b3a8c2cb7d358e5739941d945ba9045a023a8bbb:"1000000000000000000000","32ef5cdc671df5562a901aee5db716b9be76dcf6":"2000000000000000000000",c94110e71afe578aa218e4fc286403b0330ace8d:"2000000000000000000000","9b43dcb95fde318075a567f1e6b57617055ef9e8":"3940000000000000000000",efeea010756f81da4ba25b721787f058170befbd:"32470000000000000000",c88255eddcf521c6f81d97f5a42181c9073d4ef1:"290793000000000000000",dd47189a3e64397167f0620e484565b762bfbbf4:"1850000000000000000000","82f39b2758ae42277b86d69f75e628d958ebcab0":"40000000000000000000000",e37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5:"10000000000000000000000","62331df2a3cbee3520e911dea9f73e905f892505":"2000000000000000000000","8c5d16ed65e3ed7e8b96ca972bc86173e3500b03":"2000000000000000000000","8b9841862e77fbbe919470935583a93cf027e450":"2000054000000000000000",c8dd27f16bf22450f5771b9fe4ed4ffcb30936f4:"197000000000000000000",dec8a1a898f1b895d8301fe64ab3ad5de941f689:"787803000000000000000","61c4ee7c864c4d6b5e37ea1331c203739e826b2f":"30063000000000000000","3250e3e858c26adeccadf36a5663c22aa84c4170":"5000000000000000000000","299e0bca55e069de8504e89aca6eca21d38a9a5d":"55500000000000000000",d50f7fa03e389876d3908b60a537a6706304fb56:"100000000000000000000","69073269729e6414b26ec8dc0fd935c73b579f1e":"30000000000000000000000","14fcd1391e7d732f41766cdacd84fa1deb9ffdd2":"2000000000000000000000","823768746737ce6da312d53e54534e106f967cf3":"20000000000000000000","882f75708386653c80171d0663bfe30b017ed0ad":"2000000000000000000000",a25b086437fd2192d0a0f64f6ed044f38ef3da32:"335000000000000000000","5a9c8b69fc614d69564999b00dcb42db67f97e90":"3429227000000000000000",a2b701f9f5cdd09e4ba62baebae3a88257105885:"1000000000000000000000","5e7b8c54dc57b0402062719dee7ef5e37ea35d62":"2877224000000000000000","7ffabfbc390cbe43ce89188f0868b27dcb0f0cad":"6370000000000000000000",b5cdbc4115406f52e5aa85d0fea170d2979cc7ba:"1337000000000000000000","263814309de4e635cf585e0d365477fc40e66cf7":"146000000000000000000","24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4":"200200000000000000000",d3a941c961e8ca8b1070f23c6d6d0d2a758a4444:"200000000000000000000",a97beb3a48c45f1528284cb6a95f7de453358ec6:"31000000000000000000000","4dd131c74a068a37c90aded4f309c2409f6478d3":"400008000000000000000","653675b842d7d8b461f722b4117cb81dac8e639d":"31000000000000000000","561be9299b3e6b3e63b79b09169d1a948ae6db01":"500000000000000000000",dc067ed3e12d711ed475f5156ef7e71a80d934b9:"9550000000000000000000","08d97eadfcb7b064e1ccd9c8979fbee5e77a9719":"266063000000000000000","6e4c2ab7db026939dbd3bc68384af660a61816b2":"167000000000000000000",bf4c73a7ede7b164fe072114843654e4d8781dde:"2000000000000000000000",f504943aaf16796e0b341bbcdf21d11cc586cdd1:"9000000000000000000000",ea81ca8638540cd9d4d73d060f2cebf2241ffc3e:"1970000000000000000000","9944fee9d34a4a880023c78932c00b59d5c82a82":"750022000000000000000","12f460ae646cd2780fd35c50a6af4b9accfa85c6":"1000000000000000000000","4e232d53b3e6be8f895361d31c34d4762b12c82e":"1760000000000000000000","6bb2aca23fa1626d18efd6777fb97db02d8e0ae4":"40000000000000000000000",bc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b:"12000000000000000000000","2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0":"200000000000000000000","21ecb2dfa65779c7592d041cd2105a81f4fd4e46":"1000000000000000000000","34318625818ec13f11835ae97353ce377d6f590a":"1520000000000000000000",a7ef35ce87eda6c28df248785815053ec97a5045:"4999998000000000000000","6a514e6242f6b68c137e97fea1e78eb555a7e5f7":"20000000000000000000","9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b":"6000000000000000000000","43cc08d0732aa58adef7619bed46558ad7774173":"4443926000000000000000","12e9a4ad2ad57484dd700565bddb46423bd9bd31":"19999800000000000000000",ebbeeb259184a6e01cccfc2207bbd883785ac90a:"619966000000000000000","704ab1150d5e10f5e3499508f0bf70650f028d4b":"4000000000000000000000",fc361105dd90f9ede566499d69e9130395f12ac8:"395000000000000000000000",c1b9a5704d351cfe983f79abeec3dbbbae3bb629:"20000000000000000000","66f50406eb1b11a946cab45927cca37470e5a208":"2000000000000000000000","53942e7949d6788bb780a7e8a0792781b1614b84":"15899600000000000000000","32ba9a7d0423e03a525fe2ebeb661d2085778bd8":"20000000000000000000000","11c0358aa6479de21866fe21071924b65e70f8b9":"36400000000000000000000","76cb9c8b69f4387675c48253e234cb7e0d74a426":"7396300000000000000000","9f5f44026b576a4adb41e95961561d41039ca391":"250000000000000000000","533a73a4a2228eee05c4ffd718bbf3f9c1b129a7":"6000000000000000000000",dcc52d8f8d9fc742a8b82767f0555387c563efff:"500000000000000000000",f456a75bb99655a7412ce97da081816dfdb2b1f2:"200000000000000000000",d0c101fd1f01c63f6b1d19bc920d9f932314b136:"20000000000000000000000",dabc225042a6592cfa13ebe54efa41040878a5a2:"259550000000000000000","38eec6e217f4d41aa920e424b9525197041cd4c6":"4428166000000000000000","8a247d186510809f71cffc4559471c3910858121":"1790000000000000000000","4f152b2fb8659d43776ebb1e81673aa84169be96":"2000000000000000000000",b4496ddb27799a222457d73979116728e8a1845b:"2610331000000000000000","4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6":"1400000000000000000000","0f7bea4ef3f73ae0233df1e100718cbe29310bb0":"2000000000000000000000",c836e24a6fcf29943b3608e662290a215f6529ea:"292000000000000000000","1765361c2ec2f83616ce8363aae21025f2566f40":"5000000000000000000000",b6e6c3222b6b6f9be2875d2a89f127fb64100fe2:"8008000000000000000000","01bbc14f67af0639aab1441e6a08d4ce7162090f":"1309500000000000000000",af2058c7282cf67c8c3cf930133c89617ce75d29:"6920000000000000000000","464d9c89cce484df000277198ed8075fa63572d1":"20000000000000000000","50cd97e9378b5cf18f173963236c9951ef7438a5":"1400000000000000000000",cb47bd30cfa8ec5468aaa6a94642ced9c819c8d4:"4000000000000000000000","6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50":"2000000000000000000000","09b7a988d13ff89186736f03fdf46175b53d16e0":"6000000000000000000000","5bfafe97b1dd1d712be86d41df79895345875a87":"500000000000000000000",a06cd1f396396c0a64464651d7c205efaf387ca3:"1999944000000000000000",fc0096b21e95acb8d619d176a4a1d8d529badbef:"384601000000000000000",a74444f90fbb54e56f3ac9b6cfccaa4819e4614a:"20000000000000000000","3c15b3511df6f0342e7348cc89af39a168b7730f":"1000000000000000000000","3d6ff82c9377059fb30d9215723f60c775c891fe":"250066000000000000000",a524a8cccc49518d170a328270a2f88133fbaf5d:"294500000000000000000","8a7a06be199a3a58019d846ac9cbd4d95dd757de":"3000200000000000000000",d744ac7e5310be696a63b003c40bd039370561c6:"1670000000000000000000",fe362688845fa244cc807e4b1130eb3741a8051e:"1000000000000000000000",b2d0360515f17daba90fcbac8205d569b915d6ac:"6000000000000000000000",c53594c7cfb2a08f284cc9d7a63bbdfc0b319732:"49200000000000000000000",b3c228731d186d2ded5b5fbe004c666c8e469b86:"29000000000000000000","63e414603e80d4e5a0f5c18774204642258208e4":"5000000000000000000000","826ce5790532e0548c6102a30d3eac836bd6388f":"18000000000000000000000",c5e812f76f15f2e1f2f9bc4823483c8804636f67:"73000000000000000000","116fef5e601642c918cb89160fc2293ba71da936":"802200000000000000000","08b84536b74c8c01543da88b84d78bb95747d822":"200000000000000000000","04a80afad53ef1f84165cfd852b0fdf1b1c24ba8":"58000000000000000000","2b0362633614bfcb583569438ecc4ea57b1d337e":"20000000000000000000000",e95179527deca5916ca9a38f215c1e9ce737b4c9:"10000000000000000000000","2c5df866666a194b26cebb407e4a1fd73e208d5e":"1000000000000000000000","529e824fa072582b4032683ac7eecc1c04b4cac1":"2000000000000000000000","78634371e17304cbf339b1452a4ce438dc764cce":"10000000000000000000000",e172dfc8f80cd1f8cd8539dc26082014f5a8e3e8:"3000000000000000000000",b07618328a901307a1b7a0d058fcd5786e9e72fe:"30239500000000000000000",b0571153db1c4ed7acaefe13ecdfdb72e7e4f06a:"80520000000000000000000",ad910a23d6850613654af786337ad2a70868ac6d:"1999800000000000000000","4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3":"2000000000000000000000",be2471a67f6047918772d0e36839255ed9d691ae:"4000000000000000000000","28868324337e11ba106cb481da962f3a8453808d":"2000000000000000000000",d8f94579496725b5cb53d7985c989749aff849c0:"17000000000000000000000","4981c5ff66cc4e9680251fc4cd2ff907cb327865":"750000000000000000000",fd2872d19e57853cfa16effe93d0b1d47b4f93fb:"4000000000000000000000","63c8dfde0b8e01dadc2e748c824cc0369df090b3":"3880000000000000000000",c4dd048bfb840e2bc85cb53fcb75abc443c7e90f:"3716000000000000000000",f579714a45eb8f52c3d57bbdefd2c15b2e2f11df:"1560000000000000000000",cc7b0481cc32e6faef2386a07022bcb6d2c3b4fc:"3160000000000000000000",a0aa5f0201f04d3bbeb898132f7c11679466d901:"36600000000000000000",f3df63a97199933330383b3ed7570b96c4812334:"2000000000000000000000","42732d8ef49ffda04b19780fd3c18469fb374106":"425068000000000000000","6f92d6e4548c78996509ee684b2ee29ba3c532b4":"1000000000000000000000",fff4bad596633479a2a29f9a8b3f78eefd07e6ee:"100000000000000000000",ac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f:"200000000000000000000","553b6b1c57050e88cf0c31067b8d4cd1ff80cb09":"400000000000000000000","84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed":"619333000000000000000","9f4a7195ac7c151ca258cafda0cab083e049c602":"1537100000000000000000","2955c357fd8f75d5159a3dfa69c5b87a359dea8c":"2000000000000000000000","11d7844a471ef89a8d877555583ceebd1439ea26":"10098000000000000000000","34b454416e9fb4274e6addf853428a0198d62ee1":"407000000000000000000","308dd21cebe755126704b48c0f0dc234c60ba9b1":"200000000000000000000","381db4c8465df446a4ce15bf81d47e2f17c980bf":"32000000000000000000000","1abc4e253b080aeb437984ab05bca0979aa43e1c":"1000000000000000000000","53e35b12231f19c3fd774c88fec8cbeedf1408b2":"512000000000000000000","69e2e2e704307ccc5b5ca3f164fece2ea7b2e512":"7000000000000000000000","1914f1eb95d1277e93b6e61b668b7d77f13a11a1":"970000000000000000000","50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf":"200000000000000000000","46224f32f4ece5c8867090d4409d55e50b18432d":"6000000000000000000000",ff83855051ee8ffb70b4817dba3211ed2355869d:"400000000000000000000",fb39189af876e762c71d6c3e741893df226cedd6:"4000000000000000000000","9875623495a46cdbf259530ff838a1799ec38991":"2000000000000000000000",e1b39b88d9900dbc4a6cdc481e1060080a8aec3c:"2000000000000000000000","5baf6d749620803e8348af3710e5c4fbf20fc894":"5003680000000000000000","9c54e4ed479a856829c6bb42da9f0b692a75f728":"7520000000000000000000","486a6c8583a84484e3df43a123837f8c7e2317d0":"323378000000000000000",d235d15cb5eceebb61299e0e827fa82748911d89:"4000000000000000000000","47d792a756779aedf1343e8883a6619c6c281184":"2000000000000000000000","70c213488a020c3cfb39014ef5ba6404724bcaa3":"1940000000000000000000","133c490fa5bf7f372888e607d958fab7f955bae1":"1580000000000000000000",a9e194661aac704ee9dea043974e9692ded84a5d:"482400000000000000000",bc6b58364bf7f1951c309e0cba0595201cd73f9a:"1812400000000000000000","2309d34091445b3232590bd70f4f10025b2c9509":"10000000000000000000000",d89bc271b27ba3ab6962c94a559006ae38d5f56a:"2000000000000000000000",ff0e2fec304207467e1e3307f64cbf30af8fd9cd:"2000000000000000000000",c0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d:"64234000000000000000",b66f92124b5e63035859e390628869dbdea9485e:"9850000000000000000000",a9e6e25e656b762558619f147a21985b8874edfe:"2000000000000000000000",a43e1947a9242b355561c30a829dfeeca2815af8:"3878255000000000000000","8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb":"3000000000000000000000",aca2a838330b17302da731d30db48a04f0f207c1:"1337000000000000000000",fa60868aafd4ff4c5c57914b8ed58b425773dfa9:"8557400000000000000000","1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8":"1000000000000000000000",b4b185d943ee2b58631e33dff5af6854c17993ac:"1000000000000000000000","7719888795ad745924c75760ddb1827dffd8cda8":"1999980000000000000000",ccd521132d986cb96869842622a7dda26c3ed057:"2000000000000000000000","253e32b74ea4490ab92606fda0aa257bf23dcb8b":"10000000000000000000000","3712367e5e55a96d5a19168f6eb2bc7e9971f869":"1000000000000000000000","8f29a14a845ad458f2d108b568d813166bcdf477":"10000000000000000000000","51a8c2163602a32ee24cf4aa97fd9ea414516941":"62904000000000000000","61cea71fa464d62a07063f920b0cc917539733d8":"1670000000000000000000","6f81f3abb1f933b1df396b8e9cc723a89b7c9806":"280000000000000000000","61b1b8c012cd4c78f698e470f90256e6a30f48dd":"200000000000000000000","4f3f2c673069ac97c2023607152981f5cd6063a0":"600000000000000000000",e2efa5fca79538ce6068bf31d2c516d4d53c08e5:"131200000000000000000","2383c222e67e969190d3219ef14da37850e26c55":"2000000000000000000000",eac3af5784927fe9a598fc4eec38b8102f37bc58:"1000000000000000000000","4fe56ab3bae1b0a44433458333c4b05a248f8241":"2180000000000000000000",fe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd:"1970000000000000000000",f48e1f13f6af4d84b371d7de4b273d03a263278e:"600000000000000000000","1ba9228d388727f389150ea03b73c82de8eb2e09":"7258000000000000000000","37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb":"2000000000000000000000",e33840d8bca7da98a6f3d096d83de78b70b71ef8:"2000000000000000000000","8e7fd23848f4db07906a7d10c04b21803bb08227":"1000000000000000000000","07d4334ec385e8aa54eedaeadb30022f0cdfa4ab":"2629946000000000000000",d4b085fb086f3d0d68bf12926b1cc3142cae8770:"3700000000000000000000","5a87f034e6f68f4e74ffe60c64819436036cf7d7":"20000000000000000000",c00ab080b643e1c2bae363e0d195de2efffc1c44:"500000000000000000000","22f3c779dd79023ea92a78b65c1a1780f62d5c4a":"1970000000000000000000",c7d5c7054081e918ec687b5ab36e973d18132935:"182000000000000000000","9662ee021926682b31c5f200ce457abea76c6ce9":"670500000000000000000","116a09df66cb150e97578e297fb06e13040c893c":"2000000000000000000000",b7240af2af90b33c08ae9764103e35dce3638428:"8464547000000000000000",e8b28acda971725769db8f563d28666d41ddab6c:"10000000000000000000000","17d4918dfac15d77c47f9ed400a850190d64f151":"2000000000000000000000",c42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574:"149800000000000000000","5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0":"733202000000000000000","5869fb867d71f1387f863b698d09fdfb87c49b5c":"3666000000000000000000",d49a75bb933fca1fca9aa1303a64b6cb44ea30e1:"10000000000000000000000","76331e30796ce664b2700e0d4153700edc869777":"2000000000000000000000","8a5fb75793d043f1bcd43885e037bd30a528c927":"356500000000000000000",fc0ee6f7c2b3714ae9916c45566605b656f32441:"1760000000000000000000",bf50ce2e264b9fe2b06830617aedf502b2351b45:"1000000000000000000000","0f6000de1578619320aba5e392706b131fb1de6f":"499986000000000000000",c953f934c0eb2d0f144bdab00483fd8194865ce7:"2000000000000000000000","24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92":"1337000000000000000000",c6cd68ec35362c5ad84c82ad4edc232125912d99:"27750000000000000000000","2a67660a1368efcd626ef36b2b1b601980941c05":"133700000000000000000","9deb39027af877992b89f2ec4a1f822ecdf12693":"2000000000000000000000",c12f881fa112b8199ecbc73ec4185790e614a20f:"2000000000000000000000",d58a52e078a805596b0d56ea4ae1335af01c66eb:"267400000000000000000","4d7cfaa84cb33106800a8c802fb8aa463896c599":"1790000000000000000000","0ee391f03c765b11d69026fd1ab35395dc3802a0":"200000000000000000000",a192f06ab052d5fd7f94eea8318e827815fe677a:"131400000000000000000","8f0ab894bd3f4e697dbcfb859d497a9ba195994a":"39501652000000000000000","387eeafd6b4009deaf8bd5b85a72983a8dcc3487":"4000000000000000000000","03b0f17cd4469ddccfb7da697e82a91a5f9e7774":"20000000000000000000","11172b278ddd44eea2fdf4cb1d16962391c453d9":"935900000000000000000000","33d172ab075c51db1cd40a8ca8dbff0d93b843bb":"5727139000000000000000","909b5e763a39dcc795223d73a1dbb7d94ca75ac8":"2000000000000000000000","0ca12ab0b9666cf0cec6671a15292f2653476ab2":"210000600000000000000000","6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf":"800000000000000000000",d9e3857efd1e202a441770a777a49dcc45e2e0d3:"223500000000000000000",d703c6a4f11d60194579d58c2766a7ef16c30a29:"2000000000000000000000","838bd565f99fde48053f7917fe333cf84ad548ab":"200000000000000000000","8168edce7f2961cf295b9fcd5a45c06cdeda6ef5":"200000000000000000000",de50868eb7e3c71937ec73fa89dd8b9ee10d45aa:"1000000000000000000000","087498c0464668f31150f4d3c4bcdda5221ba102":"20000000000000000000","613fab44b16bbe554d44afd178ab1d02f37aeaa5":"2000000000000000000000",e2ee691f237ee6529b6557f2fcdd3dcf0c59ec63:"5450048000000000000000",a9ed377b7d6ec25971c1a597a3b0f3bead57c98f:"400000000000000000000","175feeea2aa4e0efda12e1588d2f483290ede81a":"200000000000000000000",b51ddcb4dd4e8ae6be336dd9654971d9fec86b41:"421133000000000000000","92c0f573eccf62c54810ee6ba8d1f113542b301b":"3384000000000000000000",a109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58:"1640000000000000000000",f74e6e145382b4db821fe0f2d98388f45609c69f:"100000000000000000000","378f37243f3ff0bef5e1dc85eb4308d9340c29f9":"2000200000000000000000","84e9949680bece6841b9a7e5250d08acd87d16cd":"200000000000000000000","882bd3a2e9d74110b24961c53777f22f1f46dc5d":"13370000000000000000000",acce01e0a70610dc70bb91e9926fa9957f372fba:"537000000000000000000",c5f687717246da8a200d20e5e9bcac60b67f3861:"28650000000000000000",e14617f6022501e97e7b3e2d8836aa61f0ff2dba:"200000000000000000000","076ee99d3548623a03b5f99859d2d785a1778d48":"200000000000000000000","2c424ee47f583cdce07ae318b6fad462381d4d2b":"4000000000000000000000",f98250730c4c61c57f129835f2680894794542f3:"4000000000000000000000",ed1b24b6912d51b334ac0de6e771c7c0454695ea:"40000000000000000000",ffd5170fd1a8118d558e7511e364b24906c4f6b3:"60085000000000000000",bf49c14898316567d8b709c2e50594b366c6d38c:"733202000000000000000","65ea26eabbe2f64ccccfe06829c25d4637520225":"700000000000000000000","5c5419565c3aad4e714e0739328e3521c98f05cc":"528000000000000000000",c53b50fd3b2b72bc6c430baf194a515585d3986d:"20000000000000000000","2b74c373d04bfb0fd60a18a01a88fbe84770e58c":"40000000000000000000",d97f4526dea9b163f8e8e33a6bcf92fb907de6ec:"284000000000000000000",a4a49f0bc8688cc9e6dc04e1e08d521026e65574:"200000000000000000000","575c00c2818210c28555a0ff29010289d3f82309":"10000000000000000000000","3f1233714f204de9de4ee96d073b368d8197989f":"38606000000000000000",f964d98d281730ba35b2e3a314796e7b42fedf67:"1543800000000000000000","1deec01abe5c0d952de9106c3dc30639d85005d6":"2000000000000000000000","12d60d65b7d9fc48840be5f891c745ce76ee501e":"21359400000000000000000","5c6136e218de0a61a137b2b3962d2a6112b809d7":"294273000000000000000",cd43258b7392a930839a51b2ef8ad23412f75a9f:"2000000000000000000000",db3f258ab2a3c2cf339c4499f75a4bd1d3472e9e:"1500000000000000000000","0edd4b580ff10fe06c4a03116239ef96622bae35":"197000000000000000000","1d157c5876c5cad553c912caf6ce2d5277e05c73":"2000000000000000000000",cda1b886e3a795c9ba77914e0a2fe5676f0f5ccf:"106024000000000000000",f50cbafd397edd556c0678988cb2af5c2617e0a2:"716000000000000000000","327bb49e754f6fb4f733c6e06f3989b4f65d4bee":"20000000000000000000",c44bdec8c36c5c68baa2ddf1d431693229726c43:"100000000000000000000000","34e2849bea583ab0cc37975190f322b395055582":"7780340000000000000000","9221c9ce01232665741096ac07235903ad1fe2fc":"126489000000000000000",ff3ded7a40d3aff0d7a8c45fa6136aa0433db457:"1999800000000000000000","10b5b34d1248fcf017f8c8ffc408ce899ceef92f":"267400000000000000000",f1a1f320407964fd3c8f2e2cc8a4580da94f01ea:"2000040000000000000000","6c800d4b49ba07250460f993b8cbe00b266a2553":"492500000000000000000",f827d56ed2d32720d4abf103d6d0ef4d3bcd559b:"26265000000000000000",ffb9c7217e66743031eb377af65c77db7359dcda:"40000000000000000000","530319db0a8f93e5bb7d4dbf4816314fbed8361b":"2000000000000000000000","9c28a2c4086091cb5da226a657ce3248e8ea7b6f":"280000000000000000000",db23a6fef1af7b581e772cf91882deb2516fc0a7:"200000000000000000000","6636d7ac637a48f61d38b14cfd4865d36d142805":"500000000000000000000",b3c260609b9df4095e6c5dff398eeb5e2df49985:"254030000000000000000","58e5c9e344c806650dacfc904d33edba5107b0de":"19100000000000000000","4f67396d2553f998785f704e07a639197dd1948d":"300080000000000000000","510d8159cc945768c7450790ba073ec0d9f89e30":"2560000000000000000000","593c48935beaff0fde19b04d309cd530a28e52ce":"4000000000000000000000",c27f4e08099d8cf39ee11601838ef9fc06d7fc41:"1790000000000000000000","07723e3c30e8b731ee456a291ee0e798b0204a77":"2000000000000000000000","0a652e2a8b77bd97a790d0e91361c98890dbb04e":"1000000000000000000000","671015b97670b10d5e583f3d62a61c1c79c5143f":"400000000000000000000","7cc24a6a958c20c7d1249660f7586226950b0d9a":"1970000000000000000000","6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2":"182000000000000000000","5c4368918ace6409c79eca80cdaae4391d2b624e":"4000000000000000000000","043707071e2ae21eed977891dc79cd5d8ee1c2da":"2000000000000000000000","39bfd978689bec048fc776aa15247f5e1d7c39a2":"20000000000000000000000","05915d4e225a668162aee7d6c25fcfc6ed18db03":"66348000000000000000","3f551ba93cd54693c183fb9ad60d65e1609673c9":"2000000000000000000000",a8c0b02faf02cb5519dda884de7bbc8c88a2da81:"16700000000000000000",bd0c5cd799ebc48642ef97d74e8e429064fee492:"326000000000000000000","0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639":"23031000000000000000","2ea5fee63f337a376e4b918ea82148f94d48a626":"1864242000000000000000",cc6c2df00e86eca40f21ffda1a67a1690f477c65:"3160000000000000000000",e5e37e19408f2cfbec83349dd48153a4a795a08f:"4200000000000000000000",f555a27bb1e2fd4e2cc784caee92939fc06e2fc9:"2000000000000000000000",dcf9719be87c6f46756db4891db9b611d2469c50:"1000000000000000000000","8e2f9034c9254719c38e50c9aa64305ed696df1e":"4728000000000000000000",a01f12d70f44aa7b113b285c22dcdb45873454a7:"18200000000000000000",bce40475d345b0712dee703d87cd7657fc7f3b62:"7750000000000000000000",bb19bf91cbad74cceb5f811db27e411bc2ea0656:"17600000000000000000",acc062702c59615d3444ef6214b8862b009a02ed:"1499936000000000000000","449ac4fbe383e36738855e364a57f471b2bfa131":"197000000000000000000000",ad59a78eb9a74a7fbdaefafa82eada8475f07f95:"500000000000000000000","6b6577f3909a4d6de0f411522d4570386400345c":"1880000000000000000000","79bf2f7b6e328aaf26e0bb093fa22da29ef2f471":"1790000000000000000000","940f715140509ffabf974546fab39022a41952d2":"1400000000000000000000","1d572edd2d87ca271a6714c15a3b37761dcca005":"127674000000000000000",d78ecd25adc86bc2051d96f65364866b42a426b7:"3877300000000000000000",f9729d48282c9e87166d5eef2d01eda9dbf78821:"99981000000000000000","17762560e82a93b3f522e0e524adb8612c3a7470":"1000000000000000000000",d500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced:"400000000000000000000",a11effab6cf0f5972cffe4d56596e98968144a8f:"1670000000000000000000",f64ecf2117931c6d535a311e4ffeaef9d49405b8:"2674000000000000000000","229cc4711b62755ea296445ac3b77fc633821cf2":"39481000000000000000",fc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d:"20000000000000000000",ea8527febfa1ade29e26419329d393b940bbb7dc:"1999944000000000000000",bce13e22322acfb355cd21fd0df60cf93add26c6:"200000000000000000000","19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6":"200000000000000000000",d2581a55ce23ab10d8ad8c44378f59079bd6f658:"8800000000000000000000","4073fa49b87117cb908cf1ab512da754a932d477":"1970000000000000000000",b6a82933c9eadabd981e5d6d60a6818ff806e36b:"400000000000000000000",c79806032bc7d828f19ac6a640c68e3d820fa442:"20000000000000000000","577b2d073c590c50306f5b1195a4b2ba9ecda625":"373600000000000000000","7f13d760498d7193ca6859bc95c901386423d76c":"5000000000000000000000","416784af609630b070d49a8bcd12235c6428a408":"20000000000000000000000",fbe71622bcbd31c1a36976e7e5f670c07ffe16de:"400000000000000000000",a5698035391e67a49013c0002079593114feb353:"240000000000000000000",ab2871e507c7be3965498e8fb462025a1a1c4264:"775000000000000000000","9c78fbb4df769ce2c156920cfedfda033a0e254a":"1970000000000000000000","95e6f93dac228bc7585a25735ac2d076cc3a4017":"6000000000000000000000","3c1f91f301f4b565bca24751aa1f761322709ddd":"1790000000000000000000",f77f9587ff7a2d7295f1f571c886bd33926a527c:"1999800000000000000000","755f587e5efff773a220726a13d0f2130d9f896b":"1000000000000000000000","8c6aa882ee322ca848578c06cb0fa911d3608305":"600000000000000000000","492cb5f861b187f9df21cd4485bed90b50ffe22d":"499928000000000000000","95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01":"136000000000000000000","4173419d5c9f6329551dc4d3d0ceac1b701b869e":"88000000000000000000","456ae0aca48ebcfae166060250525f63965e760f":"300000000000000000000","81f8de2c283d5fd4afbda85dedf9760eabbbb572":"3000000000000000000000",cd0af3474e22f069ec3407870dd770443d5b12b0:"2626262000000000000000","283c2314283c92d4b064f0aef9bb5246a7007f39":"200000000000000000000","29b3f561ee7a6e25941e98a5325b78adc79785f3":"100000000000000000000",cd4306d7f6947ac1744d4e13b8ef32cb657e1c00:"499986000000000000000",d9ec2efe99ff5cf00d03a8317b92a24aef441f7e:"2000000000000000000000","83dbf8a12853b40ac61996f8bf1dc8fdbaddd329":"970000000000000000000","9d93fab6e22845f8f45a07496f11de71530debc7":"1998000000000000000000",fd204f4f4aba2525ba728afdf78792cbdeb735ae:"2000000000000000000000","99fad50038d0d9d4c3fbb4bce05606ecadcd5121":"2000000000000000000000",d206aaddb336d45e7972e93cb075471d15897b5d:"600000000000000000000","428a1ee0ed331d7952ccbe1c7974b2852bd1938a":"2208370000000000000000","690228e4bb12a8d4b5e0a797b0c5cf2a7509131e":"1880000000000000000000",fa3a1aa4488b351aa7560cf5ee630a2fd45c3222:"878850000000000000000","0372e852582e0934344a0fed2178304df25d4628":"20000000000000000000000","35ea2163a38cdf9a123f82a5ec00258dae0bc767":"4000000000000000000000",d1fed0aee6f5dfd7e25769254c3cfad15adeccaa:"730000000000000000000",c05b740620f173f16e52471dc38b9c514a0b1526:"140000000000000000000","87e3062b2321e9dfb0875ce3849c9b2e3522d50a":"10000000000000000000000","303fbaebbe46b35b6e5b74946a5f99bc1585cae7":"878148000000000000000",e7a8e471eafb798f4554cc6e526730fd56e62c7d:"1000000000000000000000",ad7dd053859edff1cb6f9d2acbed6dd5e332426f:"1970000000000000000000",dc4345d6812e870ae90c568c67d2c567cfb4f03c:"6700000000000000000000",a6a08252c8595177cc2e60fc27593e2379c81fb1:"20055000000000000000",a9af21acbe482f8131896a228036ba51b19453c3:"49999000000000000000","86e3fe86e93da486b14266eadf056cbfa4d91443":"2000000000000000000000","744b03bba8582ae5498e2dc22d19949467ab53fc":"500000000000000000000",d3118ea3c83505a9d893bb67e2de142d537a3ee7:"20000000000000000000",b32f1c2689a5ce79f1bc970b31584f1bcf2283e7:"20000000000000000000","4828e4cbe34e1510afb72c2beeac8a4513eaebd9":"3940000000000000000000",b07bcc085ab3f729f24400416837b69936ba8873:"2000140000000000000000",bdc74873af922b9df474853b0fa7ff0bf8c82695:"3999000000000000000000","15ebd1c7cad2aff19275c657c4d808d010efa0f5":"200550000000000000000",cbc04b4d8b82caf670996f160c362940d66fcf1a:"6000000000000000000000","8197948121732e63d9c148194ecad46e30b749c8":"4000000000000000000000","69797bfb12c9bed682b91fbc593591d5e4023728":"10000000000000000000000",be9b8c34b78ee947ff81472eda7af9d204bc8466:"150000000000000000000",df3f57b8ee6434d047223def74b20f63f9e4f955:"250500000000000000000",a3ae1879007d801cb5f352716a4dd8ba2721de3d:"200000000000000000000000",cb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a:"1999944000000000000000",e03c00d00388ecbf4f263d0ac778bb41a57a40d9:"1000072000000000000000",fc2c1f88961d019c3e9ea33009152e0693fbf88a:"8000000000000000000000","8599cbd5a6a9dcd4b966be387d69775da5e33c6f":"58180000000000000000000",b7a31a7c38f3db09322eae11d2272141ea229902:"2000000000000000000000","231a15acc199c89fa9cb22441cc70330bdcce617":"500000000000000000000","3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165":"2000000000000000000000","92cfd60188efdfb2f8c2e7b1698abb9526c1511f":"2000000000000000000000","5c936f3b9d22c403db5e730ff177d74eef42dbbf":"75000000000000000000","931fe712f64207a2fd5022728843548bfb8cbb05":"2000000000000000000000","08d54e83ad486a934cfaeae283a33efd227c0e99":"1039000000000000000000",a339a3d8ca280e27d2415b26d1fc793228b66043:"1013600000000000000000","581f34b523e5b41c09c87c298e299cbc0e29d066":"1131607000000000000000",caaa68ee6cdf0d34454a769b0da148a1faaa1865:"7216000000000000000000","0838a7768d9c2aca8ba279adfee4b1f491e326f1":"200000000000000000000",dde77a4740ba08e7f73fbe3a1674912931742eeb:"19867021000000000000000",cbe810fe0fecc964474a1db97728bc87e973fcbd:"10000000000000000000000","86c28b5678af37d727ec05e4447790f15f71f2ea":"200000000000000000000",dd6c062193eac23d2fdbf997d5063a346bb3b470:"20000000000000000000","5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0":"345827000000000000000",e29d8ae452dcf3b6ac645e630409385551faae0a:"80276000000000000000","2fbc85798a583598b522166d6e9dda121d627dbc":"200000000000000000000","7a36aba5c31ea0ca7e277baa32ec46ce93cf7506":"20000000000000000000000",dbcbcd7a57ea9db2349b878af34b1ad642a7f1d1:"200000000000000000000","92aae59768eddff83cfe60bb512e730a05a161d7":"1708015000000000000000",a5e93b49ea7c509de7c44d6cfeddef5910deaaf2:"2000000000000000000000",e33d980220fab259af6a1f4b38cf0ef3c6e2ea1a:"2000000000000000000000","8ed0af11ff2870da0681004afe18b013f7bd3882":"4000000000000000000000",f23e5c633221a8f7363e65870c9f287424d2a960:"1380000000000000000000","96334bfe04fffa590213eab36514f338b864b736":"400000000000000000000",fa1f1971a775c3504fef5079f640c2c4bce7ac05:"2000000000000000000000",df44c47fc303ac76e74f97194cca67b5bb3c023f:"591000000000000000000","4b74f5e58e2edf76daf70151964a0b8f1de0663c":"324020000000000000000",e38b91b35190b6d9deed021c30af094b953fdcaa:"33340000000000000000","6b38de841fad7f53fe02da115bd86aaf662466bd":"1730000000000000000000","11675a25554607a3b6c92a9ee8f36f75edd3e336":"159800000000000000000","0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1":"94963000000000000000","0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424":"30000000000000000000000",fdd1195f797d4f35717d15e6f9810a9a3ff55460:"18200000000000000000","63a61dc30a8e3b30a763c4213c801cbf98738178":"1000000000000000000000",e5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3:"126260000000000000000",d6e09e98fe1300332104c1ca34fbfac554364ed9:"2000000000000000000000","5bd6862d517d4de4559d4eec0a06cad05e2f946e":"200000000000000000000","7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d":"22000000000000000000000",ae34861d342253194ffc6652dfde51ab44cad3fe:"466215000000000000000",f50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540:"3999952000000000000000",dd2bdfa917c1f310e6fa35aa8af16939c233cd7d:"400000000000000000000",e0060462c47ff9679baef07159cae08c29f274a9:"2000000000000000000000",b7d12e84a2e4c4a6345af1dd1da9f2504a2a996e:"200000000000000000000",f5500178cb998f126417831a08c2d7abfff6ab5f:"1308923000000000000000",fd377a385272900cb436a3bb7962cdffe93f5dad:"2000000000000000000000",a4a83a0738799b971bf2de708c2ebf911ca79eb2:"600000000000000000000","52a5e4de4393eeccf0581ac11b52c683c76ea15d":"19999800000000000000000",b07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87:"5260000000000000000000","35f5860149e4bbc04b8ac5b272be55ad1aca58e0":"200000000000000000000",fb135eb15a8bac72b69915342a60bbc06b7e077c:"20000000000000000000000","02d4a30968a39e2b3498c3a6a4ed45c1c6646822":"2000000000000000000000",e44b7264dd836bee8e87970340ed2b9aed8ed0a5:"5772100000000000000000",e90a354cec04d69e5d96ddc0c5138d3d33150aa0:"499971000000000000000","693d83be09459ef8390b2e30d7f7c28de4b4284e":"2000000000000000000000","87bf7cd5d8a929e1c785f9e5449106ac232463c9":"77800000000000000000",e5f8ef6d970636b0dcaa4f200ffdc9e75af1741c:"2000000000000000000000",fef09d70243f39ed8cd800bf9651479e8f4aca3c:"200000000000000000000",e98c91cadd924c92579e11b41217b282956cdaa1:"135800000000000000000",c2836188d9a29253e0cbda6571b058c289a0bb32:"2000000000000000000000",afa6946effd5ff53154f82010253df47ae280ccc:"1970000000000000000000","43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb":"1910000000000000000000","097ecda22567c2d91cb03f8c5215c22e9dcda949":"20055000000000000000","3e66b84769566ab67945d5fa81373556bcc3a1fa":"152000000000000000000","56373daab46316fd7e1576c61e6affcb6559ddd7":"215340000000000000000",faaeba8fc0bbda553ca72e30ef3d732e26e82041:"1338337000000000000000",f54c19d9ef3873bfd1f7a622d02d86249a328f06:"44284729000000000000000","825309a7d45d1812f51e6e8df5a7b96f6c908887":"2365000000000000000000","89009e3c6488bd5e570d1da34eabe28ed024de1b":"20000000000000000000000","63977cad7d0dcdc52b9ac9f2ffa136e8642882b8":"75000000000000000000",c239abdfae3e9af5457f52ed2b91fd0ab4d9c700:"2000000000000000000000","1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f":"179000000000000000000",a12a6c2d985daf0e4f5f207ae851aaf729b332cd:"100000000000000000000000",cbe52fc533d7dd608c92a260b37c3f45deb4eb33:"1000000000000000000000",abb2e6a72a40ba6ed908cdbcec3c5612583132fe:"1460000000000000000000","6503860b191008c15583bfc88158099301762828":"1000000000000000000000",a0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3:"1600000000000000000000",e154daeadb545838cbc6aa0c55751902f528682a:"4925000000000000000000","8e92aba38e72a098170b92959246537a2e5556c0":"267400000000000000000",d23d7affacdc3e9f3dae7afcb4006f58f8a44600:"3600000000000000000000","00d78d89b35f472716eceafebf600527d3a1f969":"27750000000000000000000","120f9de6e0af7ec02a07c609ca8447f157e6344c":"267400000000000000000",e0352fdf819ba265f14c06a6315c4ac1fe131b2e:"1000000000000000000000","8f47328ee03201c9d35ed2b5412b25decc859362":"2000000000000000000000","453e359a3397944c5a275ab1a2f70a5e5a3f6989":"240000000000000000000","9bf58efbea0784eb068adecfa0bb215084c73a35":"5800000000000000000000","21bfe1b45cacde6274fd8608d9a178bf3eeb6edc":"2009400000000000000000",d1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf:"3000000000000000000000","20a29c5079e26b3f18318bb2e50e8e8b346e5be8":"499986000000000000000","7d392852f3abd92ff4bb5bb26cb60874f2be6795":"1000070000000000000000","55852943492970f8d629a15366cdda06a94f4513":"2000000000000000000000",ab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5:"300000000000000000000","9d2bfc36106f038250c01801685785b16c86c60d":"380000000000000000000000","6e60aee1a78f8eda8b424c73e353354ae67c3042":"3490300000000000000000","7e29290038493559194e946d4e460b96fc38a156":"309072000000000000000","6006e36d929bf45d8f16231b126a011ae283d925":"176000000000000000000",d6d03572a45245dbd4368c4f82c95714bd2167e2:"1162200000000000000000",d1432538e35b7664956ae495a32abdf041a7a21c:"19700000000000000000000","2276264bec8526c0c0f270677abaf4f0e441e167":"1000000000000000000000",c8814e34523e38e1f927a7dce8466a447a093603:"10000000000000000000000","688a569e965524eb1d0ac3d3733eab909fb3d61e":"1320000000000000000000","90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c":"4000086000000000000000","239a733e6b855ac592d663156186a8a174d2449e":"1637020000000000000000",bcdfacb9d9023c3417182e9100e8ea1d373393a3:"59100000000000000000",ba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf:"1000000000000000000000","322e5c43b0f524389655a9b3ff24f2d4db3da10f":"4650000000000000000000",be5a60689998639ad75bc105a371743eef0f7940:"501700000000000000000",b727a9fc82e1cffc5c175fa1485a9befa2cdbdd1:"999000000000000000000",a3883a24f7f166205f1a6a9949076c26a76e7178:"1820000000000000000000","5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d":"539766000000000000000",e60955dc0bc156f6c41849f6bd776ba44b0ef0a1:"299982000000000000000",af203e229d7e6d419df4378ea98715515f631485:"1970000000000000000000","86499a1228ff2d7ee307759364506f8e8c8307a5":"1970000000000000000000","1a04cec420ad432215246d77fe178d339ed0b595":"316000000000000000000",cc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776:"60000000000000000000",cb50587412822304ebcba07dab3a0f09fffee486:"1370000000000000000000","4ae2a04d3909ef454e544ccfd614bfefa71089ae":"442800000000000000000",c8a2c4e59e1c7fc54805580438aed3e44afdf00e:"44000000000000000000","5792814f59a33a1843faa01baa089eb02ffb5cf1":"499986000000000000000",a1f2854050f872658ed82e52b0ad7bbc1cb921f6:"2010918000000000000000","92dca5e102b3b81b60f1a504634947c374a88ccb":"2000000000000000000000","732fead60f7bfdd6a9dec48125e3735db1b6654f":"20000000000000000000","6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8":"400000000000000000000",cde36d81d128c59da145652193eec2bfd96586ef:"4000000000000000000000","40eddb448d690ed72e05c225d34fc8350fa1e4c5":"7000000000000000000000","454b61b344c0ef965179238155f277c3829d0b38":"2000000000000000000000",ac3da526cfce88297302f34c49ca520dc271f9b2:"800000000000000000000",c989eec307e8839b9d7237cfda08822962abe487:"400000000000000000000",e99de258a4173ce9ac38ede26c0b3bea3c0973d5:"1656800000000000000000",ff0cb06c42e3d88948e45bd7b0d4e291aefeea51:"1910000000000000000000","0990e81cd785599ea236bd1966cf526302c35b9c":"1000000000000000000000","6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb":"935900000000000000000","5d958a9bd189c2985f86c58a8c69a7a78806e8da":"10200000000000000000000","98be696d51e390ff1c501b8a0f6331b628ddc5ad":"2000000000000000000000","09d0b8cd077c69d9f32d9cca43b3c208a21ed48b":"150011000000000000000","96e7c0c9d5bf10821bf140c558a145b7cac21397":"1056000000000000000000","5b736eb18353629bde9676dadd165034ce5ecc68":"1970000000000000000000",e5a365343cc4eb1e770368e1f1144a77b832d7e0:"20000000000000000000","4cf5537b85842f89cfee359eae500fc449d2118f":"1000000000000000000000",c71f1d75873f33dcb2dd4b3987a12d0791a5ce27:"1015200000000000000000","9bf703b41c3624e15f4054962390bcba3052f0fd":"6055000000000000000000","145e1de0147911ccd880875fbbea61f6a142d11d":"4000000000000000000000","68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6":"1970000000000000000000",d8eb78503ec31a54a90136781ae109004c743257:"1000000000000000000000",f25e4c70bc465632c89e5625a832a7722f6bffab:"4488000000000000000000","7b4d2a38269069c18557770d591d24c5121f5e83":"700000000000000000000","27d158ac3d3e1109ab6e570e90e85d3892cd7680":"100000000000000000000",d3679a47df2d99a49b01c98d1c3e0c987ce1e158:"280000000000000000000","095b949de3333a377d5019d893754a5e4656ff97":"340000000000000000000","6b17598a8ef54f797ae515ccb6517d1859bf8011":"100000000000000000000","3eaf0879b5b6db159b589f84578b6a74f6c10357":"7253657000000000000000","40d45d9d7625d15156c932b771ca7b0527130958":"100000000000000000000000","0392549a727f81655429cb928b529f25df4d1385":"26248000000000000000",c5b009baeaf788a276bd35813ad65b400b849f3b:"1000000000000000000000","6ed884459f809dfa1016e770edaf3e9fef46fa30":"3400170000000000000000","439d2f2f5110a4d58b1757935015408740fec7f8":"3830421000000000000000",dc46c13325cd8edf0230d068896486f007bf4ef1:"1337000000000000000000","8c54c7f8b9896e75d7d5f5c760258699957142ad":"40000000000000000000","61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a":"800000000000000000000","935069444a6a984de2084e46692ab99f671fc727":"9000000000000000000000",fc49c1439a41d6b3cf26bb67e0365224e5e38f5f:"1000076000000000000000",e1dfb5cc890ee8b2877e885d267c256187d019e6:"100000000000000000000",ee7c3ded7c28f459c92fe13b4d95bafbab02367d:"700000000000000000000",a5874d754635a762b381a5c4c792483af8f23d1d:"50000000000000000000",cfbb32b7d024350e3321fa20c9a914035372ffc6:"401100000000000000000","2bc429d618a66a4cf82dbb2d824e9356effa126a":"1999944000000000000000",db244f97d9c44b158a40ed9606d9f7bd38913331:"102000000000000000000","55e220876262c218af4f56784798c7e55da09e91":"133566000000000000000",ca41ccac30172052d522cd2f2f957d248153409f:"1970000000000000000000",b11fa7fb270abcdf5a2eab95aa30c4b53636efbf:"800000000000000000000","0ffea06d7113fb6aec2869f4a9dfb09007facef4":"225416000000000000000","646628a53c2c4193da88359ce718dadd92b7a48d":"200032000000000000000",ca8409083e01b397cf12928a05b68455ce6201df:"1600000000000000000000",dbbcbb79bf479a42ad71dbcab77b5adfaa872c58:"1730000000000000000000",db7d4037081f6c65f9476b0687d97f1e044d0a1d:"660000000000000000000","4be90d412129d5a4d0424361d6649d4e47a62316":"1015200000000000000000",e3ab3ca9b870e3f548517306bba4de2591afafc2:"1200062000000000000000","5c61ab79b408dd3229f662593705d72f1e147bb8":"22729000000000000000000","4f177f9d56953ded71a5611f393322c30279895c":"246000000000000000000",e6cb260b716d4c0ab726eeeb07c8707204e276ae:"1000000000000000000000","44355253b27748e3f34fe9cae1fb718c8f249529":"200000000000000000000",a309df54cabce70c95ec3033149cd6678a6fd4cf:"223600000000000000000",ec4867d2175ab5b9469361595546554684cda460:"3000000000000000000000","8d06e464245cad614939e0af0845e6d730e20374":"200359000000000000000","9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a":"2000000000000000000000",dcfff3e8d23c2a34b56bd1b3bd45c79374432239:"5000000000000000000000","7d7dd5ee614dbb6fbfbcd26305247a058c41faa1":"2000000000000000000000","8a9eca9c5aba8e139f8003edf1163afb70aa3aa9":"660000000000000000000",d942de4784f7a48716c0fd4b9d54a6e54c5f2f3e:"20000000000000000000000","07dae622630d1136381933d2ad6b22b839d82102":"200000000000000000000",abf12fa19e82f76c718f01bdca0003674523ef30:"2000000000000000000000","411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f":"425000000000000000000","99129d5b3c0cde47ea0def4dfc070d1f4a599527":"2000000000000000000000",c5cdcee0e85d117dabbf536a3f4069bf443f54e7:"1969606000000000000000",f218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f:"500000000000000000000",fe549bbfe64740189892932538daaf46d2b61d4f:"40000000000000000000",dc3f0e7672f71fe7525ba30b9755183a20b9166a:"9603617000000000000000","0e83b850481ab44d49e0a229a2e464902c69539b":"100000000000000000000","07ddd0422c86ef65bf0c7fc3452862b1228b08b8":"2065302000000000000000",a68c313445c22d919ee46cc2d0cdff043a755825:"75189000000000000000",a9e9dbce7a2cb03694799897bed7c54d155fdaa8:"197559000000000000000","18fccf62d2c3395453b7587b9e26f5cff9eb7482":"1000000000000000000000",ff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d:"1337000000000000000000","8f69eafd0233cadb4059ab779c46edf2a0506e48":"1788210000000000000000","9aa48c66e4fb4ad099934e32022e827427f277ba":"10000000000000000000000",f46980e3a4a9d29a6a6e90604537a3114bcb2897:"500000000000000000000","801732a481c380e57ed62d6c29de998af3fa3b13":"100000000000000000000","0cd6a141918d126b106d9f2ebf69e102de4d3277":"20000000000000000000","17589a6c006a54cad70103123aae0a82135fdeb4":"4000000000000000000000","8725e8c753b3acbfdca55f3c62dfe1a59454968a":"1000090000000000000000",d20dcb0b78682b94bc3000281448d557a20bfc83:"895000000000000000000",e84f8076a0f2969ecd333eef8de41042986291f2:"432000000000000000000",b3145b74506d1a8d047cdcdc55392a7b5350799a:"129314663000000000000000","0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d":"12800000000000000000000","0ca670eb2c8b96cba379217f5929c2b892f39ef6":"2000000000000000000000","25cfc4e25c35c13b69f7e77dbfb08baf58756b8d":"40000000000000000000000","182db85293f606e88988c3704cb3f0c0bbbfca5a":"133700000000000000000",bd73c3cbc26a175062ea0320dd84b253bce64358:"394000000000000000000","2680713d40808e2a50ed013150a2a694b96a7f1d":"1790000000000000000000","51e32f14f4ca5e287cdac057a7795ea9e0439953":"500000000000000000000",b1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3:"2000000000000000000000",d4c4d1a7c3c74984f6857b2f5f07e8face68056d:"2000000000000000000000","4651dc420e08c3293b27d2497890eb50223ae2f4":"20000000000000000000000",c74a3995f807de1db01a2eb9c62e97d0548f696f:"1000000000000000000000","0505a08e22a109015a22f685305354662a5531d5":"2600000000000000000000","39c773367c8825d3596c686f42bf0d14319e3f84":"133700000000000000000","0f929cf895db017af79f3ead2216b1bd69c37dc7":"2000000000000000000000",bdd3254e1b3a6dc6cc2c697d45711aca21d516b2:"2000000000000000000000",ae5d221afcd3d29355f508eadfca408ce33ca903:"100000000000000000000000","916cf17d71412805f4afc3444a0b8dd1d9339d16":"14300000000000000000","4319263f75402c0b5325f263be4a5080651087f0":"983086000000000000000","0f1c249cd962b00fd114a9349f6a6cc778d76c4d":"2000000000000000000000","54febcce20fe7a9098a755bd90988602a48c089e":"640000000000000000000","2c1800f35fa02d3eb6ff5b25285f5e4add13b38d":"906400000000000000000","72b904440e90e720d6ac1c2ad79c321dcc1c1a86":"1550000000000000000000",b0aa00950c0e81fa3210173e729aaf163a27cd71:"40000000000000000000000","663604b0503046e624cd26a8b6fb4742dce02a6f":"65400000000000000000","3c98594bf68b57351e8814ae9e6dfd2d254aa06f":"300000000000000000000","9c45202a25f6ad0011f115a5a72204f2f2198866":"5014000000000000000000",b02d062873334545cea29218e4057760590f7423:"3186000000000000000000","7bddb2ee98de19ee4c91f661ee8e67a91d054b97":"1000000000000000000000","9cf2928beef09a40f9bfc953be06a251116182fb":"6000000000000000000000","51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550":"1000000000000000000000",eb570dba975227b1c42d6e8dea2c56c9ad960670:"2000000000000000000000","970d8b8a0016d143054f149fb3b8e550dc0797c7":"1000000000000000000000",c7b39b060451000ca1049ba154bcfa00ff8af262:"100000000000000000000000","945e18769d7ee727c7013f92de24d117967ff317":"2000000000000000000000",d18eb9e1d285dabe93e5d4bae76beefe43b521e8:"668500000000000000000",c618521321abaf5b26513a4a9528086f220adc6f:"27000000000000000000",dd65f6e17163b5d203641f51cc7b24b00f02c8fb:"200000000000000000000","131faed12561bb7aee04e5185af802b1c3438d9b":"219000000000000000000","1ced6715f862b1ff86058201fcce5082b36e62b2":"6684522000000000000000",a0ff5b4cf016027e8323497d4428d3e5a83b8795:"6596500000000000000000","02e816afc1b5c0f39852131959d946eb3b07b5ad":"1000000000000000000000","153cf2842cb9de876c276fa64767d1a8ecf573bb":"2000000000000000000000","3bc6e3ee7a56ce8f14a37532590f63716b9966e8":"2000000000000000000000",f6d25d3f3d846d239f525fa8cac97bc43578dbac:"896000000000000000000","2066774d822793ff25f1760909479cf62491bf88":"55160000000000000000000","46779a5656ff00d73eac3ad0c38b6c853094fb40":"230752000000000000000","22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95":"23445000000000000000",ff88ebacc41b3687f39e4b59e159599b80cba33f:"400000000000000000000","2874f3e2985d5f7b406627e17baa772b01abcc9e":"6014000000000000000000",eb10458daca79e4a6b24b29a8a8ada711b7f2eb6:"3998000000000000000000","541060fc58c750c40512f83369c0a63340c122b6":"1970000000000000000000",fd2757cc3551a095878d97875615fe0c6a32aa8a:"598200000000000000000",be659d85e7c34f8833ea7f488de1fbb5d4149bef:"9072500000000000000000",e149b5726caf6d5eb5bf2acc41d4e2dc328de182:"1940000000000000000000","2fe0cc424b53a31f0916be08ec81c50bf8eab0c1":"600000000000000000000",e3712701619ca7623c55db3a0ad30e867db0168b:"20000000000000000000",f8ca336c8e91bd20e314c20b2dd4608b9c8b9459:"846000000000000000000","68acdaa9fb17d3c309911a77b05f5391fa034ee9":"8950000000000000000000",e77d7deab296c8b4fa07ca3be184163d5a6d606c:"92538000000000000000",e6b9545f7ed086e552924639f9a9edbbd5540b3e:"3760000000000000000000","2866b81decb02ee70ae250cee5cdc77b59d7b679":"2000000000000000000000","60e3cc43bcdb026aad759c7066f555bbf2ac66f5":"2000000000000000000000",fcbd85feea6a754fcf3449449e37ff9784f7773c:"3086000000000000000000","38a744efa6d5c2137defef8ef9187b649eee1c78":"4000000000000000000000","9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee":"2620100000000000000000","2020b81ae53926ace9f7d7415a050c031d585f20":"341200000000000000000","4244f1331158b9ce26bbe0b9236b9203ca351434":"10000000000000000000000","99c236141daec837ece04fdaee1d90cf8bbdc104":"2184000000000000000000","943d37864a4a537d35c8d99723cd6406ce2562e6":"2000000000000000000000",d79483f6a8444f2549d611afe02c432d15e11051:"20000000000000000000","9fd64373f2fbcd9c0faca60547cad62e26d9851f":"1000000000000000000000",b89c036ed7c492879921be41e10ca1698198a74c:"1820000000000000000000","7462c89caa9d8d7891b2545def216f7464d5bb21":"109162000000000000000",bb0366a7cfbd3445a70db7fe5ae34885754fd468:"6160000000000000000000","6c52cf0895bb35e656161e4dc46ae0e96dd3e62c":"4000086000000000000000",b9cf71b226583e3a921103a5316f855a65779d1b:"24000000000000000000000","016b60bb6d67928c29fd0313c666da8f1698d9c5":"2000000000000000000000","9454b3a8bff9709fd0e190877e6cb6c89974dbd6":"2674000000000000000000","84aac7fa197ff85c30e03b7a5382b957f41f3afb":"157600000000000000000",db6e560c9bc620d4bea3a94d47f7880bf47f2d5f:"89500000000000000000",eefd05b0e3c417d55b3343060486cdd5e92aa7a6:"1430000000000000000000","3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd":"185000000000000000000","9bfff50db36a785555f07652a153b0c42b1b8b76":"2000000000000000000000",d44f5edf2bcf2433f211dadd0cc450db1b008e14:"267400000000000000000","2378fd4382511e968ed192106737d324f454b535":"1000000000000000000000",c94089553ae4c22ca09fbc98f57075cf2ec59504:"4000000000000000000000","08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2":"4000000000000000000000",e48e65125421880d42bdf1018ab9778d96928f3f:"4200000000000000000000","67518e5d02b205180f0463a32004471f753c523e":"1984289000000000000000","0da7401262384e2e8b4b26dd154799b55145efa0":"300000000000000000000","0b6920a64b363b8d5d90802494cf564b547c430d":"1200000000000000000000",a5ab4bd3588f46cb272e56e93deed386ba8b753d:"1332989000000000000000","1788da9b57fd05edc4ff99e7fef301519c8a0a1e":"2000000000000000000000","17b2d6cf65c6f4a347ddc6572655354d8a412b29":"2000000000000000000000",d0319139fbab2e8e2accc1d924d4b11df6696c5a:"200000000000000000000","4c377bb03ab52c4cb79befa1dd114982924c4ae9":"1827814000000000000000",fb949c647fdcfd2514c7d58e31f28a532d8c5833:"20000000000000000000000","70e5e9da735ff077249dcb9aaf3db2a48d9498c0":"1000000000000000000000",fe6f5f42b6193b1ad16206e4afb5239d4d7db45e:"1730000000000000000000",bda4be317e7e4bed84c0495eee32d607ec38ca52:"2309457000000000000000","5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e":"2000000000000000000000",ba42f9aace4c184504abf5425762aca26f71fbdc:"37400000000000000000",beb4fd315559436045dcb99d49dcec03f40c42dc:"2000000000000000000000","452b64db8ef7d6df87c788639c2290be8482d575":"8000000000000000000000","66e09427c1e63deed7e12b8c55a6a19320ef4b6a":"170000000000000000000",faad905d847c7b23418aeecbe3addb8dd3f8924a:"1970000000000000000000",a29319e81069e5d60df00f3de5adee3505ecd5fb:"2000000000000000000000",cf348f2fe47b7e413c077a7baf3a75fbf8428692:"2000000000000000000000",e1e8c50b80a352b240ce7342bbfdf5690cc8cb14:"394000000000000000000","131c792c197d18bd045d7024937c1f84b60f4438":"4000000000000000000000",e49af4f34adaa2330b0e49dc74ec18ab2f92f827:"2000000000000000000000",f2e99f5cbb836b7ad36247571a302cbe4b481c69:"1970000000000000000000",c93fbde8d46d2bcc0fa9b33bd8ba7f8042125565:"1400000000000000000000","038779ca2dbe663e63db3fe75683ea0ec62e2383":"1670000000000000000000",a33cb450f95bb46e25afb50fe05feee6fb8cc8ea:"776000000000000000000","40ab66fe213ea56c3afb12c75be33f8e32fd085d":"4000000000000000000000","6403d062549690c8e8b63eae41d6c109476e2588":"2000000000000000000000",bfb0ea02feb61dec9e22a5070959330299c43072:"20000000000000000000000","99c475bf02e8b9214ada5fad02fdfd15ba365c0c":"591000000000000000000","904966cc2213b5b8cb5bd6089ef9cddbef7edfcc":"2000000000000000000000","767a03655af360841e810d83f5e61fb40f4cd113":"985000000000000000000",ab209fdca979d0a647010af9a8b52fc7d20d8cd1:"9129000000000000000000","6294eae6e420a3d5600a39c4141f838ff8e7cc48":"2955000000000000000000","9777cc61cf756be3b3c20cd4491c69d275e7a120":"10000000000000000000000",bcbf6ba166e2340db052ea23d28029b0de6aa380:"3880000000000000000000","9f10f2a0463b65ae30b070b3df18cf46f51e89bd":"1910000000000000000000","8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e":"3460000000000000000000","4f23b6b817ffa5c664acdad79bb7b726d30af0f9":"1760000000000000000000",b4c20040ccd9a1a3283da4d4a2f365820843d7e2:"1000000000000000000000","7f49e7a4269882bd8722d4a6f566347629624079":"2000000000000000000000","33629bd52f0e107bc071176c64df108f64777d49":"33425000000000000000","6a7b2e0d88867ff15d207c222bebf94fa6ce8397":"60000000000000000000000",b7ce684b09abda53389a875369f71958aeac3bdd:"2000000000000000000000",ffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca:"4000000000000000000000","849ab80790b28ff1ffd6ba394efc7463105c36f7":"34600000000000000000",b0b36af9aeeedf97b6b02280f114f13984ea3260:"985000000000000000000","4d57e716876c0c95ef5eaebd35c8f41b069b6bfe":"2000000000000000000000","2d2b032359b363964fc11a518263bfd05431e867":"149600000000000000000","2ccc1f1cb5f4a8002e186b20885d9dbc030c0894":"2000000000000000000000","016c85e1613b900fa357b8283b120e65aefcdd08":"799954000000000000000","710b0274d712c77e08a5707d6f3e70c0ce3d92cf":"6400000000000000000000","3cd3a6e93579c56d494171fc533e7a90e6f59464":"2000000000000000000000",fe0e30e214290d743dd30eb082f1f0a5225ade61:"200000000000000000000",d0718520eae0a4d62d70de1be0ca431c5eea2482:"2000000000000000000000",af7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b:"10000000000000000000000",b7d252ee9402b0eef144295f0e69f0db586c0871:"660000000000000000000",c3b928a76fad6578f04f0555e63952cd21d1520a:"2000000000000000000000",a7a517d7ad35820b09d497fa7e5540cde9495853:"2000000000000000000000",e6e886317b6a66a5b4f81bf164c538c264351765:"2000000000000000000000","0770b43dbae4b1f35a927b4fa8124d3866caf97b":"1016390000000000000000","52b4257cf41b6e28878d50d57b99914ffa89873a":"3930150000000000000000",e08bc29c2b48b169ff2bdc16714c586e6cb85ccf:"20000000000000000000","2372c4c1c9939f7aaf6cfac04090f00474840a09":"10000000000000000000000",ab6b65eab8dfc917ec0251b9db0ecfa0fa032849:"500000000000000000000","582e7cc46f1d7b4e6e9d95868bfd370573178f4c":"2000000000000000000000",f167f5868dcf4233a7830609682caf2df4b1b807:"2396150000000000000000",ec82f50d06475f684df1b392e00da341aa145444:"2000000000000000000000","0968ee5a378f8cadb3bafdbed1d19aaacf936711":"1000000000000000000000",a86613e6c4a4c9c55f5c10bcda32175dcbb4af60:"10696140000000000000000",a5cd123992194b34c4781314303b03c54948f4b9:"2010462000000000000000","52f058d46147e9006d29bf2c09304ad1cddd6e15":"1500000000000000000000","160226efe7b53a8af462d117a0108089bdecc2d1":"200550000000000000000","256292a191bdda34c4da6b6bd69147bf75e2a9ab":"14051000000000000000","1b8aa0160cd79f005f88510a714913d70ad3be33":"201760000000000000000",d4b2ff3bae1993ffea4d3b180231da439f7502a2:"2000000000000000000000",e408aa99835307eea4a6c5eb801fe694117f707d:"500000000000000000000",e60a55f2df996dc3aedb696c08dde039b2641de8:"2000000000000000000000","73df3c3e7955f4f2d859831be38000b1076b3884":"1970000000000000000000","6228ade95e8bb17d1ae23bfb0518414d497e0eb8":"400000000000000000000","0f46c81db780c1674ac73d314f06539ee56ebc83":"9850000000000000000000","762d6f30dab99135e4eca51d5243d6c8621102d5":"282000000000000000000","4ba0d9e89601772b496847a2bb4340186787d265":"1000000000000000000000",ca747576446a4c8f30b08340fee198de63ec92cf:"7020000000000000000000","99c31fe748583787cdd3e525b281b218961739e3":"1015200000000000000000","1210f80bdb826c175462ab0716e69e46c24ad076":"100000000000000000000","3f75ae61cc1d8042653b5baec4443e051c5e7abd":"95500000000000000000","5c4892907a0720df6fd3413e63ff767d6b398023":"13189467000000000000000","17f14632a7e2820be6e8f6df823558283dadab2d":"2000000000000000000000","1dc7f7dad85df53f1271152403f4e1e4fdb3afa0":"200000000000000000000","5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3":"2000000000000000000000","136d4b662bbd1080cfe4445b0fa213864435b7f1":"4000000000000000000000",c1ec81dd123d4b7c2dd9b4d438a7072c11dc874c:"2000000000000000000000","09f9575be57d004793c7a4eb84b71587f97cbb6a":"200000000000000000000","2c4b470307a059854055d91ec3794d80b53d0f4a":"20000000000000000000000","6af6c7ee99df271ba15bf384c0b764adcb4da182":"999972000000000000000","0dae3ee5b915b36487f9161f19846d101433318a":"1910000000000000000000","0dcf9d8c9804459f647c14138ed50fad563b4154":"173000000000000000000",bfa8c858df102cb12421008b0a31c4c7190ad560:"200000000000000000000",c2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c:"1337000000000000000000",d70a612bd6dda9eab0dddcff4aaf4122d38feae4:"540000000000000000000",e07137ae0d116d033533c4eab496f8a9fb09569c:"1400000000000000000000","7f49f20726471ac1c7a83ef106e9775ceb662566":"5910000000000000000000","1e706655e284dcf0bb37fe075d613a18dc12ff4a":"4376760000000000000000","03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41":"200000000000000000000","228242f8336eecd8242e1f000f41937e71dffbbf":"5000000000000000000000",e8ed51bbb3ace69e06024b33f86844c47348db9e:"165170600000000000000000","3b566a8afad19682dc2ce8679a3ce444a5b0fd4f":"2000000000000000000000",dc738fb217cead2f69594c08170de1af10c419e3:"100000000000000000000000","13032446e7d610aa00ec8c56c9b574d36ca1c016":"2000000000000000000000","6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54":"2000000000000000000000",b85f26dd0e72d9c29ebaf697a8af77472c2b58b5:"11900000000000000000000","055bd02caf19d6202bbcdc836d187bd1c01cf261":"100000000000000000000","3c322e611fdb820d47c6f8fc64b6fad74ca95f5e":"242514000000000000000","8daddf52efbd74da95b969a5476f4fbbb563bfd2":"835000000000000000000",c63ac417992e9f9b60386ed953e6d7dff2b090e8:"4000086000000000000000","27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6":"5000000000000000000000",d8f4bae6f84d910d6d7d5ac914b1e68372f94135:"100000000000000000000","9f83a293c324d4106c18faa8888f64d299054ca0":"200000000000000000000","39ee4fe00fbced647068d4f57c01cb22a80bccd1":"6000000000000000000000","404100db4c5d0eec557823b58343758bcc2c8083":"20000000000000000000","02751dc68cb5bd737027abf7ddb77390cd77c16b":"20000000000000000000",d10302faa1929a326904d376bf0b8dc93ad04c4c:"1790000000000000000000",cc419fd9912b85135659e77a93bc3df182d45115:"10000000000000000000000","10097198b4e7ee91ff82cc2f3bd95fed73c540c0":"2000000000000000000000","7e24d9e22ce1da3ce19f219ccee523376873f367":"5900150000000000000000","2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d":"2000000000000000000000","91a4149a2c7b1b3a67ea28aff34725e0bf8d7524":"1940000000000000000000",ead65262ed5d122df2b2751410f98c32d1238f51:"101680000000000000000",e20954d0f4108c82d4dcb2148d26bbd924f6dd24:"10000000000000000000000",ebb7d2e11bc6b58f0a8d45c2f6de3010570ac891:"26740000000000000000",ef115252b1b845cd857f002d630f1b6fa37a4e50:"1970000000000000000000","01a818135a414210c37c62b625aca1a54611ac36":"260000000000000000000",ea1ea0c599afb9cd36caacbbb52b5bbb97597377:"1069600000000000000000","7a7a4f807357a4bbe68e1aa806393210c411ccb3":"30000000000000000000000","6d40ca27826d97731b3e86effcd7b92a4161fe89":"2000000000000000000000","8431277d7bdd10457dc017408c8dbbbd414a8df3":"39400000000000000000","69b81d5981141ec7a7141060dfcf8f3599ffc63e":"5000000000000000000000","47688410ff25d654d72eb2bc06e4ad24f833b094":"160440000000000000000","6c101205b323d77544d6dc52af37aca3cec6f7f1":"10000000000000000000000",fb685c15e439965ef626bf0d834cd1a89f2b5695:"3940000000000000000000","673706b1b0e4dc7a949a7a796258a5b83bb5aa83":"16100000000000000000000",ecdaf93229b45ee672f65db506fb5eca00f7fce6:"1605009000000000000000",ec6904bae1f69790591709b0609783733f2573e3:"500000000000000000000","812ea7a3b2c86eed32ff4f2c73514cc63bacfbce":"1000000000000000000000","196c02210a450ab0b36370655f717aa87bd1c004":"259456000000000000000",d96ac2507409c7a383ab2eee1822a5d738b36b56:"200000000000000000000",ae2f9c19ac76136594432393b0471d08902164d3:"698600000000000000000","9d32962ea99700d93228e9dbdad2cc37bb99f07e":"3327560000000000000000","17e584e810e567702c61d55d434b34cdb5ee30f6":"5000000000000000000000",a3a93ef9dbea2636263d06d8492f6a41de907c22:"60000000000000000000","2b5016e2457387956562587115aa8759d8695fdf":"200000000000000000000000","140129eaa766b5a29f5b3af2574e4409f8f6d3f1":"6400000000000000000000","7025965d2b88da197d4459be3dc9386344cc1f31":"2005500000000000000000","388bdcdae794fc44082e667501344118ea96cd96":"1670000000000000000000",eee9d0526eda01e43116a395322dda8970578f39:"9999980000000000000000","6ec89b39f9f5276a553e8da30e6ec17aa47eefc7":"447500000000000000000","7e236666b2d06e63ea4e2ab84357e2dfc977e50e":"999972000000000000000","68df947c495bebaeb8e889b3f953d533874bf106":"546000000000000000000",d40ed66ab3ceff24ca05ecd471efb492c15f5ffa:"500000000000000000000",f0c70d0d6dab7663aa9ed9ceea567ee2c6b02765:"2089349000000000000000",b589676d15a04448344230d4ff27c95edf122c49:"1000000000000000000000",a0347f0a98776390165c166d32963bf74dcd0a2f:"1000000000000000000000",d47d8685faee147c520fd986709175bf2f886bef:"2000000000000000000000",a1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31:"100000000000000000000","4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f":"20000000000000000000","7cd20eccb518b60cab095b720f571570caaa447e":"500000000000000000000","2ff830cf55fb00d5a0e03514fecd44314bd6d9f1":"10000000000000000000000","0bb25ca7d188e71e4d693d7b170717d6f8f0a70a":"336870000000000000000",e9a2b4914e8553bf0d7c00ca532369b879f931bf:"2000000000000000000000","720e6b22bf430966fa32b6acb9a506eebf662c61":"152000000000000000000","7ade5d66b944bb860c0efdc86276d58f4653f711":"2000000000000000000000","2eaff9f8f8113064d3957ac6d6e11eee42c8195d":"1970000000000000000000","0c8fd7775e54a6d9c9a3bf890e761f6577693ff0":"9850000000000000000000","290a56d41f6e9efbdcea0342e0b7929a8cdfcb05":"344000000000000000000",d73ed2d985b5f21b55b274643bc6da031d8edd8d:"49250000000000000000000","80156d10efa8b230c99410630d37e269d4093cea":"2000000000000000000000","0989c200440b878991b69d6095dfe69e33a22e70":"1910000000000000000000",ec8014efc7cbe5b0ce50f3562cf4e67f8593cd32:"17300000000000000000",de612d0724e84ea4a7feaa3d2142bd5ee82d3201:"20000000000000000000","0f832a93df9d7f74cd0fb8546b7198bf5377d925":"143000000000000000000",aa2c670096d3f939305325427eb955a8a60db3c5:"2003010000000000000000","25287b815f5c82380a73b0b13fbaf982be24c4d3":"40000000000000000000",e75c3b38a58a3f33d55690a5a59766be185e0284:"500000000000000000000","1940dc9364a852165f47414e27f5002445a4f143":"10850000000000000000000",e5b826196c0e1bc1119b021cf6d259a610c99670:"200000000000000000000","82a15cef1d6c8260eaf159ea3f0180d8677dce1c":"2000000000000000000000",da06044e293c652c467fe74146bf185b21338a1c:"1000000000000000000000",f815c10a032d13c34b8976fa6e3bd2c9131a8ba9:"1337000000000000000000",cd95fa423d6fc120274aacde19f4eeb766f10420:"200000000000000000000",e3a4f83c39f85af9c8b1b312bfe5fc3423afa634:"28650000000000000000","768ce0daa029b7ded022e5fc574d11cde3ecb517":"322000000000000000000",e3ec18a74ed43855409a26ade7830de8e42685ef:"19700000000000000000",b2bdbedf95908476d7148a370cc693743628057f:"4000000000000000000000",bbb8ffe43f98de8eae184623ae5264e424d0b8d7:"107600000000000000000","090cebef292c3eb081a05fd8aaf7d39bf07b89d4":"4000000000000000000000",dd2a233adede66fe1126d6c16823b62a021feddb:"2000000000000000000000",d8cd64e0284eec53aa4639afc4750810b97fab56:"20000000000000000000",e5953fea497104ef9ad2d4e5841c271f073519c2:"704000000000000000000","967d4142af770515dd7062af93498dbfdff29f20":"20200000000000000000",fd191a35157d781373fb411bf9f25290047c5eef:"1000000000000000000000","8967d7b9bdb7b4aed22e65a15dc803cb7a213f10":"400000000000000000000","51e43fe0d25c782860af81ea89dd793c13f0cbb1":"60000000000000000000",a38476691d34942eea6b2f76889223047db4617a:"2000000000000000000000","1321ccf29739b974e5a516f18f3a843671e39642":"4000000000000000000000","4d71a6eb3d7f327e1834278e280b039eddd31c2f":"6000000000000000000000",dc2d15a69f6bb33b246aef40450751c2f6756ad2:"1996000000000000000000",ec89f2b678a1a15b9134ec5eb70c6a62071fbaf9:"200000000000000000000","27bf943c1633fe32f8bcccdb6302b407a5724e44":"940229000000000000000",d0a6c6f9e9c4b383d716b31de78d56414de8fa91:"300000000000000000000","7b6175ec9befc738249535ddde34688cd36edf25":"10000000000000000000000","41ce79950935cff55bf78e4ccec2fe631785db95":"2000000000000000000000","5598b3a79a48f32b1f5fc915b87b645d805d1afe":"500000000000000000000","5c4881165cb42bb82e97396c8ef44adbf173fb99":"110600000000000000000","25b0533b81d02a617b9229c7ec5d6f2f672e5b5a":"1000000000000000000000","015f097d9acddcddafaf2a107eb93a40fc94b04c":"20000000000000000000000",b84b53d0bb125656cddc52eb852ab71d7259f3d5:"16000000000000000000000","1a79c7f4039c67a39d7513884cdc0e2c34222490":"20000000000000000000","926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f":"2000000000000000000000",c2fe7d75731f636dcd09dbda0671393ba0c82a7d:"2200000000000000000000","30248d58e414b20fed3a6c482b59d9d8f5a4b7e2":"60000000000000000000",d0e194f34b1db609288509ccd2e73b6131a2538b:"999972000000000000000",e8f29969e75c65e01ce3d86154207d0a9e7c76f2:"2991807000000000000000",cb93199b9c90bc4915bd859e3d42866dc8c18749:"231800000000000000000",e6fe0afb9dcedd37b2e22c451ba6feab67348033:"10000000000000000000000","82f854c9c2f087dffa985ac8201e626ca5467686":"100000000000000000000000","63bb664f9117037628594da7e3c5089fd618b5b5":"20000000000000000000",f8d17424c767bea31205739a2b57a7277214eebe:"42000000000000000000","4ca8db4a5efefc80f4cd9bbcccb03265931332b6":"200000000000000000000",c56e6b62ba6e40e52aab167d21df025d0055754b:"2000000000000000000000","0d8c40a79e18994ff99ec251ee10d088c3912e80":"114600000000000000000","40a331195b977325c2aa28fa2f42cb25ec3c253c":"2000000000000000000000",a2c5854ff1599f98892c5725d262be1da98aadac:"314315000000000000000","23ab09e73f87aa0f3be0139df0c8eb6be5634f95":"8000000000000000000000",b8040536958d5998ce4bec0cfc9c2204989848e9:"24472420000000000000000","42d6b263d9e9f4116c411424fc9955783c763030":"2000000000000000000000",c496cbb0459a6a01600fc589a55a32b454217f9d:"274000000000000000000","48302c311ef8e5dc664158dd583c81194d6e0d58":"3364760000000000000000",d5b284040130abf7c1d163712371cc7e28ad66da:"1970000000000000000000",d22f0ca4cd479e661775053bcc49e390f670dd8a:"1000000000000000000000",e597f083a469c4591c3d2b1d2c772787befe27b2:"280000000000000000000","668b6ba8ab08eace39c502ef672bd5ccb6a67a20":"31135320000000000000000",a3bff1dfa9971668360c0d82828432e27bf54e67:"200000000000000000000",ee655bb4ee0e8d5478526fb9f15e4064e09ff3dd:"200000000000000000000","121f855b70149ac83473b9706fb44d47828b983b":"1400000000000000000000","20a15256d50ce058bf0eac43aa533aa16ec9b380":"20000000000000000000","69bcfc1d43b4ba19de7b274bdffb35139412d3d7":"985000000000000000000",db288f80ffe232c2ba47cc94c763cf6fc9b82b0d:"85000000000000000000",e1cb83ec5eb6f1eeb85e99b2fc63812fde957184:"20000000000000000000000",a419a984142363267575566089340eea0ea20819:"1999944000000000000000","8489f6ad1d9a94a297789156899db64154f1dbb5":"358849000000000000000",d609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa:"2000000000000000000000",df1fa2e20e31985ebe2c0f0c93b54c0fb67a264b:"200000000000000000000",efe8ff87fc260e0767638dd5d02fc4672e0ec06d:"2000000000000000000000",eef1bbb1e5a83fde8248f88ee3018afa2d1332eb:"200000000000000000000","4b3aab335ebbfaa870cc4d605e7d2e74c668369f":"60000000000000000000000","8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4":"4000000000000000000000","0b0b3862112aeec3a03492b1b05f440eca54256e":"4000000000000000000000",dff4007931786593b229efe5959f3a4e219e51af:"4925000000000000000000",fec14e5485de2b3eef5e74c46146db8e454e0335:"179000000000000000000",ac21c1e5a3d7e0b50681679dd6c792dbca87decb:"100000000000000000000000","796ebbf49b3e36d67694ad79f8ff36767ac6fab0":"60800000000000000000",ae7739124ed153052503fc101410d1ffd8cd13b7:"999942000000000000000","86026cad3fe4ea1ce7fca260d3d45eb09ea6a364":"200000000000000000000",b2fc84a3e50a50af02f94da0383ed59f71ff01d7:"30000000000000000000000",bbab000b0408ed015a37c04747bc461ab14e151b:"6000000000000000000000",c4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304:"1000000000000000000000",cc606f511397a38fc7872bd3b0bd03c71bbd768b:"1000000000000000000000",f346d7de92741c08fc58a64db55b062dde012d14:"295106000000000000000","33f15223310d44de8b6636685f3a4c3d9c5655a5":"250500000000000000000","3c860e2e663f46db53427b29fe3ea5e5bf62bbcc":"98500000000000000000",acb94338554bc488cc88ae2d9d94080d6bdf8410:"1000000000000000000000","9c5cc111092c122116f1a85f4ee31408741a7d2f":"492500000000000000000","5f76f0a306269c78306b3d650dc3e9c37084db61":"2400000000000000000000","2c0cc3f951482cc8a2925815684eb9f94e060200":"6000000000000000000000",b74372dbfa181dc9242f39bf1d3731dffe2bdacf:"2000000000000000000000","3bab4b01a7c84ba13feea9b0bb191b77a3aadca3":"200000000000000000000","39aa05e56d7d32385421cf9336e90d3d15a9f859":"26000000000000000000","4a52bad20357228faa1e996bed790c93674ba7d0":"1337000000000000000000",ff128f4b355be1dc4a6f94fa510d7f15d53c2aff:"2720000000000000000000","92793ac5b37268774a7130de2bbd330405661773":"40110000000000000000",db19a3982230368f0177219cb10cb259cdb2257c:"2000000000000000000000","8d1794da509cb297053661a14aa892333231e3c1":"199600000000000000000","9b7c8810cc7cc89e804e6d3e38121850472877fe":"2000000000000000000000",ed3cbc3782cebd67989b305c4133b2cde32211eb:"400000000000000000000","8532490897bbb4ce8b7f6b837e4cba848fbe9976":"100000000000000000000",c384ac6ee27c39e2f278c220bdfa5baed626d9d3:"600000000000000000000",b1459285863ea2db3759e546ceb3fb3761f5909c:"1122309000000000000000","634efc24371107b4cbf03f79a93dfd93e431d5fd":"1221341000000000000000",ef9f59aeda418c1494682d941aab4924b5f4929a:"100000000000000000000000",e7311c9533f0092c7248c9739b5b2c864a34b1ce:"2803436000000000000000",e6e621eaab01f20ef0836b7cad47464cb5fd3c96:"316014000000000000000",cd102cd6db3df14ad6af0f87c72479861bfc3d24:"2000000000000000000000","005a9c03f69d17d66cbb8ad721008a9ebbb836fb":"2000000000000000000000",a072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70:"400000000000000000000",f2ab1161750244d0ecd048ee0d3e51abb143a2fd:"1235800000000000000000",f686785b89720b61145fea80978d6acc8e0bc196:"4000000000000000000000","0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d":"197000000000000000000",c32ec7e42ad16ce3e2555ad4c54306eda0b26758:"2000000000000000000000",f3fa723552a5d0512e2b62f48dca7b2b8105305b:"137000000000000000000","6dc3f92baa1d21dab7382b893261a0356fa7c187":"1730000000000000000000","4627c606842671abde8295ee5dd94c7f549534f4":"286600000000000000000",e39e46e15d22ce56e0c32f1877b7d1a264cf94f3:"20000000000000000000000",d7d157e4c0a96437a6d285741dd23ec4361fa36b:"2000000000000000000000","68f8f45155e98c5029a4ebc5b527a92e9fa83120":"4436101000000000000000","9aba2b5e27ff78baaab5cdc988b7be855cebbdce":"9999000000000000000000","66b39837cb3cac8a802afe3f12a258bbca62dacd":"400000000000000000000",d39b7cbc94003fc948f0cde27b100db8ccd6e063:"400000000000000000000","3db9ed7f024c7e26372feacf2b050803445e3810":"1285600000000000000000","3fbc1e4518d73400c6d046359439fb68ea1a49f4":"16400000000000000000000",e3da4f3240844c9b6323b4996921207122454399:"11539639000000000000000","09afa73bc047ef46b977fd9763f87286a6be68c6":"501500000000000000000","1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c":"135400000000000000000","2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6":"30617000000000000000","9a9d1dc0baa77d6e20c3d849c78862dd1c054c87":"880000000000000000000","3ccef88679573947e94997798a1e327e08603a65":"807700000000000000000","850b9db18ff84bf0c7da49ea3781d92090ad7e64":"2600000000000000000000","361c75931696bc3d427d93e76c77fd13b241f6f4":"549212000000000000000",c8f2b320e6dfd70906c597bad2f9501312c78259:"1504800000000000000000","8dc1d5111d09af25fdfcac455c7cec283e6d6775":"2000000000000000000000",cd7ece086b4b619b3b369352ee38b71ddb06439a:"200000000000000000000",f607c2150d3e1b99f24fa1c7d540add35c4ebe1e:"3098020000000000000000","32485c818728c197fea487fbb6e829159eba8370":"1053893000000000000000","8e670815fb67aeaea57b86534edc00cdf564fee5":"3300000000000000000000","10df681506e34930ac7a5c67a54c3e89ce92b981":"2153800000000000000000","1cf2eb7a8ccac2adeaef0ee87347d535d3b94058":"2000000000000000000000",f0dc43f205619127507b2b1c1cfdf32d28310920:"301973000000000000000",f2c2904e9fa664a11ee25656d8fd2cc0d9a522a0:"13370000000000000000","70670fbb05d33014444b8d1e8e7700258b8caa6d":"2000000000000000000000","5160ed612e1b48e73f3fc15bc4321b8f23b8a24b":"562800000000000000000","54a62bf9233e146ffec3876e45f20ee8414adeba":"10000000000000000000000","26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc":"2935300000000000000000","205fc843e19a4913d1881eb69b69c0fa3be5c50b":"9700000000000000000000",e001aba77c02e172086c1950fffbcaa30b83488f:"1970000000000000000000","21efbca09b3580b98e73f5b2f7f4dc0bf02c529c":"2000000000000000000000",c4d916574e68c49f7ef9d3d82d1638b2b7ee0985:"1580000000000000000000",cab0d32cf3767fa6b3537c84328baa9f50458136:"8960000000000000000000","7ce4686446f1949ebed67215eb0d5a1dd72c11b8":"2217776000000000000000","7837fcb876da00d1eb3b88feb3df3fa4042fac82":"1760000000000000000000","71e38ff545f30fe14ca863d4f5297fd48c73a5ce":"3580000000000000000000",e528a0e5a267d667e9393a6584e19b34dc9be973:"5600000000000000000000",c5374928cdf193705443b14cc20da423473cd9cf:"138139000000000000000",e406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe:"100000000000000000000",d7ef340e66b0d7afcce20a19cb7bfc81da33d94e:"3000000000000000000000",e012db453827a58e16c1365608d36ed658720507:"2000000000000000000000",d59638d3c5faa7711bf085745f9d5bdc23d498d8:"2000000000000000000000","008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c":"1000000000000000000000","8a3470282d5e2a2aefd7a75094c822c4f5aeef8a":"242743000000000000000","38b3965c21fa893931079beacfffaf153678b6eb":"170374000000000000000","57dd9471cbfa262709f5f486bcb774c5f527b8f8":"197000000000000000000","5a60c924162873fc7ea4da7f972e350167376031":"83583000000000000000",b9013c51bd078a098fae05bf2ace0849c6be17a5:"80000000000000000000",dc23b260fcc26e7d10f4bd044af794579460d9da:"500038000000000000000","45db03bccfd6a5f4d0266b82a22a368792c77d83":"8000000000000000000000","3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73":"8022000000000000000000","42d3a5a901f2f6bd9356f112a70180e5a1550b60":"925000000000000000000","47219229e8cd56659a65c2a943e2dd9a8f4bfd89":"1520000000000000000000",a20d071b1b003063497d7990e1249dabf36c35f7:"1000000000000000000000","6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392":"60140000000000000000","0c2d5c920538e953caaf24f0737f554cc6927742":"1000000000000000000000",eedf6c4280e6eb05b934ace428e11d4231b5905b:"200000000000000000000",ffa696ecbd787e66abae4fe87b635f07ca57d848:"1337000000000000000000","3e81772175237eb4cbe0fe2dcafdadffeb6a1999":"8800000000000000000000",b44783c8e57b480793cbd69a45d90c7b4f0c48ac:"20000000000000000000",f84f090adf3f8db7e194b350fbb77500699f66fd:"1970000000000000000000","2e9824b5c132111bca24ddfba7e575a5cd7296c1":"17201900000000000000000","5cce72d068c7c3f55b1d2819545e77317cae8240":"1940000000000000000000",d815e1d9f4e2b5e57e34826b7cfd8881b8546890:"17300000000000000000",f901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6:"400000000000000000000",a960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88:"1522704000000000000000",f7e45a12aa711c709acefe95f33b78612d2ad22a:"66230000000000000000000",c332df50b13c013490a5d7c75dbfa366da87b6d6:"4000000000000000000000",d467cf064c0871989b90d8b2eb14ccc63b360823:"200000000000000000000",b9144b677c2dc614ceefdf50985f1183208ea64c:"2000000000000000000000",ea7c4d6dc729cd6b157c03ad237ca19a209346c3:"2000000000000000000000","9c9de44724a4054da0eaa605abcc802668778bea":"200020000000000000000",d7140c8e5a4307fab0cc27badd9295018bf87970:"109600000000000000000",c33acdb3ba1aab27507b86b15d67faf91ecf6293:"2000000000000000000000",db2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4:"4000000000000000000000",bfcb9730246304700da90b4153e71141622e1c41:"1000000000000000000000","07dc8c8b927adbedfa8f5d639b4352351f2f36d2":"314382000000000000000","2d5391e938b34858cf965b840531d5efda410b09":"1400000000000000000000","0b5e2011ebc25a007f21362960498afb8af280fb":"2000000000000000000000",ed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5:"280000000000000000000",a3232d068d50064903c9ebc563b515acc8b7b097:"2002000000000000000000","66274fea82cd30b6c29b23350e4f4f3d310a5899":"2070000000000000000000",dbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb:"1600000000000000000000",a1f8d8bcf90e777f19b3a649759ad95027abdfc3:"200000000000000000000","5bd23547477f6d09d7b2a005c5ee650c510c56d7":"10000000000000000000000",ec3b8b58a12703e581ce5ffd7e21c57d1e5c663f:"1700000000000000000000","54310b3aa88703a725dfa57de6e646935164802c":"1910000000000000000000","8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d":"354200000000000000000",c80b36d1beafba5fcc644d60ac6e46ed2927e7dc:"13370000000000000000","1ea492bce1ad107e337f4bd4a7ac9a7babcccdab":"100000000000000000000",aaf023fef290a49bb78bb7abc95d669c50d528b0:"200000000000000000000","80b79f338390d1ba1b3737a29a0257e5d91e0731":"20000000000000000000",f382e4c20410b951089e19ba96a2fee3d91cce7e:"5054000000000000000000","0748713145ef83c3f0ef4d31d823786f7e9cc689":"4500000000000000000000","21e219c89ca8ac14ae4cba6130eeb77d9e6d3962":"789580000000000000000",ca9a042a6a806ffc92179500d24429e8ab528117:"1100000000000000000000",bcc9593b2da6df6a34d71b1aa38dacf876f95b88:"20000000000000000000",d1438267231704fc7280d563adf4763844a80722:"200000000000000000000","4989e1ab5e7cd00746b3938ef0f0d064a2025ba5":"2000000000000000000000",bd4b60faec740a21e3071391f96aa534f7c1f44e:"182000000000000000000","8c7cb4e48b25031aa1c4f92925d631a8c3edc761":"1000000000000000000000","322788b5e29bf4f5f55ae1ddb32085fda91b8ebe":"200000000000000000000",f15e182c4fbbad79bd93342242d4dccf2be58925:"1940000000000000000000","1548b770a5118ede87dba2f690337f616de683ab":"527558000000000000000","69c2d835f13ee90580408e6a3283c8cca6a434a2":"656000000000000000000",a1e4380a3b1f749673e270229993ee55f35663b4:"2000000000000000000000",c7675e5647b9d8daf4d3dff1e552f6b07154ac38:"180000000000000000000",a02c1e34064f0475f7fa831ccb25014c3aa31ca2:"60000000000000000000","517c75430de401c341032686112790f46d4d369e":"388000000000000000000","29681d9912ddd07eaabb88d05d90f766e862417d":"1000000000000000000000","544dda421dc1eb73bb24e3e56a248013b87c0f44":"1970000000000000000000","2ab97e8d59eee648ab6caf8696f89937143864d6":"3820000000000000000000","79c130c762b8765b19d2abc9a083ab8f3aad7940":"3940000000000000000000",f9650d6989f199ab1cc479636ded30f241021f65:"850000000000000000000",d1c96e70f05ae0e6cd6021b2083750a7717cde56:"500000000000000000000","88106c27d20b74b4b98ca62b232bd5c97411171f":"197000000000000000000","37ab66083a4fa23848b886f9e66d79cdc150cc70":"88510000000000000000000","8e6156336be2cdbe32140df08a2ba55fd0a58463":"74480000000000000000","2982d76a15f847dd41f1922af368fe678d0e681e":"100000000000000000000","209e8e29d33beae8fb6baa783d133e1d9ec1bc0b":"835000000000000000000",b325674c01e3f7290d5226339fbeac67d221279f:"2800000000000000000000",f20c9a99b74759d782f25c1ceca802a27e0b436c:"1670000000000000000000","61bf84d5ab026f58c873f86ff0dfca82b55733ae":"2000000000000000000000","0734a0a81c9562f4d9e9e10a8503da15db46d76e":"18200000000000000000","0521bc3a9f8711fecb10f50797d71083e341eb9d":"20000000000000000000","3301d9ca2f3bfe026279cd6819f79a293d98156e":"50000000000000000000000","549d51af29f724c967f59423b85b2681e7b15136":"3760000000000000000000","2053ac97548a0c4e8b80bc72590cd6a098fe7516":"187000000000000000000",aa321fdbd449180db8ddd34f0fe906ec18ee0914:"685000000000000000000","697f55536bf85ada51841f0287623a9f0ed09a17":"10000000000000000000000",df57353aaff2aadb0a04f9014e8da7884e86589c:"152800000000000000000","6807ddc88db489b033e6b2f9a81553571ab3c805":"29944000000000000000","90057af9aa66307ec9f033b29724d3b2f41eb6f9":"121930000000000000000000","3ff836b6f57b901b440c30e4dbd065cf37d3d48c":"200000000000000000000","91051764af6b808e4212c77e30a5572eaa317070":"1000000000000000000000","7faa30c31519b584e97250ed2a3cf3385ed5fd50":"2000000000000000000000",fb842ca2c5ef133917a236a0d4ac40690110b038:"306000000000000000000",aa167026d39ab7a85635944ed9edb2bfeba11850:"8298000000000000000000","57beea716cbd81700a73d67f9ff039529c2d9025":"200000000000000000000","654b7e808799a83d7287c67706f2abf49a496404":"1970000000000000000000",dde8f0c31b7415511dced1cd7d46323e4bd12232:"1610000000000000000000","8667fa1155fed732cfb8dca5a0d765ce0d0705ed":"81770000000000000000","905526568ac123afc0e84aa715124febe83dc87c":"17900000000000000000","8e98766524b0cf2747c50dd43b9567594d9731de":"1997200000000000000000",c6df2075ebd240d44869c2be6bdf82e63d4ef1f5:"20000000000000000000","2ff5cab12c0d957fd333f382eeb75107a64cb8e8":"10000000000000000000000","3055efd26029e0d11b930df4f53b162c8c3fd2ce":"499938000000000000000",b2c53efa33fe4a3a1a80205c73ec3b1dbcad0602:"1918595000000000000000","766b3759e8794e926dac473d913a8fb61ad0c2c9":"86500000000000000000","882aa798bf41df179f85520130f15ccdf59b5e58":"2000000000000000000000","80b23d380b825c46e0393899a85556462da0e18c":"2000000000000000000000","51f4663ab44ff79345f427a0f6f8a6c8a53ff234":"20000000000000000000000","8d5ef172bf77315ea64e85d0061986c794c6f519":"3940000000000000000000","75ac547017134c04ae1e11d60e63ec04d18db4ef":"6000000000000000000000",ce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1:"20000000000000000000","21408b4d7a2c0e6eca4143f2cacdbbccba121bd8":"20000000000000000000000","9c526a140683edf1431cfaa128a935e2b614d88b":"111000000000000000000","599728a78618d1a17b9e34e0fed8e857d5c40622":"14000000000000000000000","6ac4d4be2db0d99da3faaaf7525af282051d6a90":"80185000000000000000","785c8ea774d73044a734fa790a1b1e743e77ed7c":"238750000000000000000",ff2726294148b86c78a9372497e459898ed3fee3:"1970000000000000000000","68a86c402388fddc59028fec7021e98cbf830eac":"19100000000000000000","6121af398a5b2da69f65c6381aec88ce9cc6441f":"640000000000000000000","5a6686b0f17e07edfc59b759c77d5bef164d3879":"1490000000000000000000",a2d38de1c73906f6a7ca6efeb97cf6f69cc421be:"1000000000000000000000",ae3f98a443efe00f3e711d525d9894dc9a61157b:"295500000000000000000","5f1c8a04c90d735b8a152909aeae636fb0ce1665":"6999974000000000000000",d687cec0059087fdc713d4d2d65e77daefedc15f:"60000000000000000000","845203750f7148a9aa262921e86d43bf641974fd":"100000000000000000000","64464a6805b462412a901d2db8174b06c22deea6":"475600000000000000000","053471cd9a41925b3904a5a8ffca3659e034be23":"199600000000000000000","911ff233e1a211c0172c92b46cf997030582c83a":"1970000000000000000000",d930b27a78876485d0f48b70dd5336549679ca8f:"40000000000000000000","6ba9b21b35106be159d1c1c2657ac56cd29ffd44":"4480000000000000000000",ebac2b4408ef5431a13b8508e86250982114e145:"4000000000000000000000","931df34d1225bcd4224e63680d5c4c09bce735a6":"68000000000000000000","23eb6fd85671a9063ab7678ebe265a20f61a02b3":"2000000000000000000000",b32af3d3e8d075344926546f2e32887bf93b16bd:"200000000000000000000","8261fa230c901d43ff579f4780d399f31e6076bc":"2000000000000000000000","84a74ceecff65cb93b2f949d773ef1ad7fb4a245":"92998000000000000000",da982e9643ffece723075a40fe776e5ace04b29b:"160884000000000000000",ba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8:"890342000000000000000","82f2e991fd324c5f5d17768e9f61335db6319d6c":"500000000000000000000","3e84b35c5b2265507061d30b6f12da033fe6f8b9":"1790000000000000000000","2895e80999d406ad592e2b262737d35f7db4b699":"1940000000000000000000","65f534346d2ffb787fa9cf185d745ba42986bd6e":"500000000000000000000",c7368b9709a5c1b51c0adf187a65df14e12b7dba:"9489681000000000000000",ba176dbe3249e345cd4fa967c0ed13b24c47e586:"399990000000000000000",cff6a6fe3e9a922a12f21faa038156918c4fcb9c:"78800000000000000000",bcbd31252ec288f91e298cd812c92160e738331a:"1975802000000000000000","5543dd6d169eec8a213bbf7a8af9ffd15d4ff759":"18200000000000000000",b65bd780c7434115162027565223f44e5498ff8c:"19999800000000000000000","4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e":"2000000000000000000000","04aafc8ae5ce6f4903c89d7fac9cb19512224777":"500000000000000000000",fdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c:"87000000000000000000000","38c7851f5ffd4cee98df30f3b25597af8a6ca263":"2631920000000000000000","0e320219838e859b2f9f18b72e3d4073ca50b37d":"2000000000000000000000",bbbf39b1b67995a42241504f9703d2a14a515696:"1580000000000000000000","5b800bfd1b3ed4a57d875aed26d42f1a7708d72a":"6392000000000000000000","5b85e60e2af0544f2f01c64e2032900ebd38a3c7":"2000000000000000000000",c9ac01c3fb0929033f0ccc7e1acfeaaba7945d47:"12459235000000000000000",f355d3ec0cfb907d8dbb1bf3464e458128190bac:"4925600000000000000000","69c08d744754de709ce96e15ae0d1d395b3a2263":"1000000000000000000000",cef77451dfa2c643e00b156d6c6ff84e2373eb66:"188000000000000000000",f3034367f87d24d3077fa9a2e38a8b0ccb1104ef:"1000000000000000000000","73473e72115110d0c3f11708f86e77be2bb0983c":"20000000000000000000","761e6caec189c230a162ec006530193e67cf9d19":"2000000000000000000000",e9caf827be9d607915b365c83f0d3b7ea8c79b50:"3000000000000000000000",eda4b2fa59d684b27a810df8978a73df308a63c2:"4000000000000000000000","065ff575fd9c16d3cb6fd68ffc8f483fc32ec835":"200000000000000000000",a72ee666c4b35e82a506808b443cebd5c632c7dd:"800000000000000000000","5b30608c678e1ac464a8994c3b33e5cdf3497112":"400000000000000000000",b0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce:"4000000000000000000000",d7274d50804d9c77da93fa480156efe57ba501de:"1940000000000000000000",a609c26dd350c235e44b2b9c1dddccd0a9d9f837:"1000000000000000000000",bddfa34d0ebf1b04af53b99b82494a9e3d8aa100:"12000000000000000000000",fd40242bb34a70855ef0fd90f3802dec2136b327:"1930600000000000000000","58aed6674affd9f64233272a578dd9386b99c263":"3400000000000000000000","24434a3e32e54ecf272fe3470b5f6f512f675520":"5910000000000000000000",a379a5070c503d2fac89b8b3afa080fd45ed4bec:"19700000000000000000000","37e169a93808d8035698f815c7235613c1e659f2":"1000000000000000000000","849b116f596301c5d8bb62e0e97a8248126e39f3":"300000000000000000000",fe7011b698bf3371132d7445b19eb5b094356aee:"2000000000000000000000",f16de1891d8196461395f9b136265b3b9546f6ef:"31313000000000000000","6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae":"1357800000000000000000","8bb0212f3295e029cab1d961b04133a1809e7b91":"2000000000000000000000","408a69a40715e1b313e1354e600800a1e6dc02a5":"35144000000000000000",ddf0cce1fe996d917635f00712f4052091dff9ea:"2000000000000000000000","50fef296955588caae74c62ec32a23a454e09ab8":"1201200000000000000000",d913f0771949753c4726acaa2bd3619c5c20ff77:"3000000000000000000000","9d6ecfa03af2c6e144b7c4692a86951e902e9e1f":"3000310000000000000000",ecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7:"5000000000000000000000","33e9b71823952e1f66958c278fc28b1196a6c5a4":"100000000000000000000","9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c":"200000000000000000000","16f313cf8ad000914a0a176dc6a4342b79ec2538":"2000000000000000000000","991ac7ca7097115f26205eee0ef7d41eb4e311ae":"20000000000000000000",ddfafdbc7c90f1320e54b98f374617fbd01d109f:"13370000000000000000","26b11d066588ce74a572a85a6328739212aa8b40":"2000000000000000000000",ef2c34bb487d3762c3cca782ccdd7a8fbb0a9931:"180000000000000000000",a9be88ad1e518b0bbb024ab1d8f0e73f790e0c76:"2800000000000000000000","4a7494cce44855cc80582842be958a0d1c0072ee":"2400000000000000000000","23569542c97d566018c907acfcf391d14067e87e":"2000000000000000000000",d252960b0bf6b2848fdead80136db5f507f8be02:"2000000000000000000000","2c0f5b9df43625798e7e03c1a5fd6a6d091af82b":"31200000000000000000",a7c9d388ebd873e66b1713448397d0f37f8bd3a8:"5000000000000000000000","3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5":"11886645000000000000000",f287ff52f461117adb3e1daa71932d1493c65f2e:"3640000000000000000000",c852428d2b586497acd30c56aa13fb5582f84402:"945600000000000000000","296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791":"1000000000000000000000","817493cd9bc623702a24a56f9f82e3fd48f3cd31":"2920000000000000000000","7adfedb06d91f3cc7390450b85550270883c7bb7":"322312000000000000000","8d544c32c07fd0842c761d53a897d6c950bb7599":"200000000000000000000","86297d730fe0f7a9ee24e08fb1087b31adb306a7":"2000000000000000000000",f64fe0939a8d1eea2a0ecd9a9730fd7958e33109:"20600000000000000000",b06eab09a610c6a53d56a946b2c43487ac1d5b2d:"1000000000000000000000",bae9b82f7299631408659dd74e891cb8f3860fe5:"1970000000000000000000","0eda80f4ed074aea697aeddf283b63dbca3dc4da":"2000000000000000000000",ea686c5057093c171c66db99e01b0ececb308683:"384907000000000000000","425725c0f08f0811f5f006eec91c5c5c126b12ae":"150000000000000000000",b18e67a5050a1dc9fb190919a33da838ef445014:"20000000000000000000","8dd484ff8a307364eb66c525a571aac701c5c318":"4000000000000000000000","6671b182c9f741a0cd3c356c73c23126d4f9e6f4":"200000000000000000000",ba0249e01d945bef93ee5ec61925e03c5ca509fd:"4000000000000000000000",b2968f7d35f208871631c6687b3f3daeabc6616c:"156060000000000000000",a6f62b8a3d7f11220701ab9ffffcb327959a2785:"506000000000000000000",c885a18aabf4541b7b7b7ecd30f6fae6869d9569:"2000000000000000000000","33fb577a4d214fe010d32cca7c3eeda63f87ceef":"1000000000000000000000",be86d0b0438419ceb1a038319237ba5206d72e46:"999942000000000000000","466292f0e80d43a78774277590a9eb45961214f4":"970000000000000000000",b33c0323fbf9c26c1d8ac44ef74391d0804696da:"20000000000000000000",f7bc4c44910d5aedd66ed2355538a6b193c361ec:"96980000000000000000",d0f04f52109aebec9a7b1e9332761e9fe2b97bb5:"4000000000000000000000",cb4a914d2bb029f32e5fef5c234c4fec2d2dd577:"1800000000000000000000","2e619f57abc1e987aa936ae3a2264962e7eb2d9a":"756000000000000000000","166bf6dab22d841b486c38e7ba6ab33a1487ed8c":"20000000000000000000000",c3a046e3d2b2bf681488826e32d9c061518cfe8c:"2600000000000000000000",d082275f745a2cac0276fbdb02d4b2a3ab1711fe:"30000000000000000000",a701df79f594901afe1444485e6b20c3bda2b9b3:"1000000000000000000000",dec3eec2640a752c466e2b7e7ee685afe9ac41f4:"1324245000000000000000","8134dd1c9df0d6c8a5812426bb55c761ca831f08":"122360000000000000000",bfc57aa666fae28e9f107a49cb5089a4e22151dd:"1000000000000000000000",c3c2297329a6fd99117e54fc6af379b4d556547e:"6000000000000000000000","40585200683a403901372912a89834aadcb55fdb":"2000000000000000000000",cd49bf185e70d04507999f92a4de4455312827d0:"1000000000000000000000","9c6bc9a46b03ae5404f043dfcf21883e4110cc33":"200000000000000000000","1f49b86d0d3945590698a6aaf1673c37755ca80d":"700000000000000000000",efeb1997aad277cc33430e6111ed0943594048b8:"2000000000000000000000","7c0883054c2d02bc7a852b1f86c42777d0d5c856":"500000000000000000000",ff49a775814ec00051a795a875de24592ea400d4:"200000000000000000000000",f039683d7b3d225bc7d8dfadef63163441be41e2:"34380000000000000000",a3ba0d3a3617b1e31b4e422ce269e873828d5d69:"850000000000000000000",d116f3dcd5db744bd008887687aa0ec9fd7292aa:"1000000000000000000000","5719f49b720da68856f4b9e708f25645bdbc4b41":"640000000000000000000","870796abc0db84af82da52a0ed68734de7e636f5":"300000000000000000000","68b6854788a7c6496cdbf5f84b9ec5ef392b78bb":"19700000000000000000000","8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b":"1940000000000000000000","421684baa9c0b4b5f55338e6f6e7c8e146d41cb7":"1500000000000000000000",dd26b429fd43d84ec179825324bad5bfb916b360:"5142000000000000000000","3821862493242c0aeb84b90de05d250c1e50c074":"322200000000000000000","68a7425fe09eb28cf86eb1793e41b211e57bd68d":"668500000000000000000",da875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43:"2000000000000000000000",c2663f8145dbfec6c646fc5c49961345de1c9f11:"690000000000000000000",e89c22f1a4e1d4746ecfaa59ed386fee12d51e37:"44932000000000000000",eff86b5123bcdc17ed4ce8e05b7e12e51393a1f7:"500000000000000000000","6c3d18704126aa99ee3342ce60f5d4c85f1867cd":"50000000000000000000",b8d531a964bcea13829620c0ced72422dadb4cca:"169990000000000000000","7c29d47d57a733f56b9b217063b513dc3b315923":"4000000000000000000000",bc1e80c181616342ebb3fb3992072f1b28b802c6:"4000000000000000000000","31313ffd635bf2f3324841a88c07ed146144ceeb":"1970000000000000000000",cc4feb72df98ff35a138e01761d1203f9b7edf0a:"7000000000000000000000","741693c30376508513082020cc2b63e9fa92131b":"1200000000000000000000",aa3135cb54f102cbefe09e96103a1a796718ff54:"57800000000000000000",ef61155ba009dcdebef10b28d9da3d1bc6c9ced4:"59100000000000000000",b3c94811e7175b148b281c1a845bfc9bb6fbc115:"200000000000000000000","96d9cca8f55eea0040ec6eb348a1774b95d93ef4":"4000000000000000000000",ce62125adec3370ac52110953a4e760be9451e3b:"152000000000000000000",aca1e6bc64cc3180f620e94dc5b1bcfd8158e45d:"2000000000000000000000",bc237148d30c13836ffa2cad520ee4d2e5c4eeff:"1970000000000000000000","0e024e7f029c6aaf3a8b910f5e080873b85795aa":"1000000000000000000000","7283cd4675da58c496556151dafd80c7f995d318":"760000000000000000000","39b299327490d72f9a9edff11b83afd0e9d3c450":"200000000000000000000","5f333a3b2310765a0d1832b9be4c0a03704c1c09":"1000000000000000000000","5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e":"5910000000000000000000","833db42c14163c7be4cab86ac593e06266d699d5":"174212000000000000000000",f32d25eb0ea2b8b3028a4c7a155dc1aae865784d:"5710684000000000000000","1fa2319fed8c2d462adf2e17feec6a6f30516e95":"125300000000000000000",c49cfaa967f3afbf55031061fc4cef88f85da584:"2000000000000000000000","43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd":"16100000000000000000",cf3f9128b07203a3e10d7d5755c0c4abc6e2cac2:"5000000000000000000000","8f4d1e7e4561284a34fef9673c0d34e12af4aa03":"2000000000000000000000","934af21b7ebfa467e2ced65aa34edd3a0ec71332":"35420000000000000000000","5d231a70c1dfeb360abd97f616e2d10d39f3cab5":"400000000000000000000","2d5d7335acb0362b47dfa3a8a4d3f5949544d380":"200000000000000000000",d1e1f2b9c16c309874dee7fac32675aff129c398:"72800000000000000000",a43b6da6cb7aac571dff27f09d39f846f53769b1:"380000000000000000000","779274bf1803a336e4d3b00ddd93f2d4f5f4a62e":"1000000000000000000000",a644ed922cc237a3e5c4979a995477f36e50bc62:"583900000000000000000",ee6c03429969ca1262cb3f0a4a54afa7d348d7f5:"256100000000000000000","4f06246b8d4bd29661f43e93762201d286935ab1":"4818730000000000000000",e04972a83ca4112bc871c72d4ae1616c2f0728db:"267606000000000000000",df098f5e4e3dffa51af237bda8652c4f73ed9ca6:"502000000000000000000",dfded2574b27d1613a7d98b715159b0d00baab28:"20000000000000000000000","17d931d4c56294dcbe77c8655be4695f006d4a3c":"2000000000000000000000","3ccb71aa6880cb0b84012d90e60740ec06acd78f":"2000000000000000000000",e57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6:"2000000000000000000000",fb3860f4121c432ebdc8ec6a0331b1b709792e90:"600400000000000000000",fa00c376e89c05e887817a9dd0748d96f341aa89:"300700000000000000000",c7a018f0968a51d1f6603c5c49dc545bcb0ff293:"4000000000000000000000","7d73863038ccca22f96affda10496e51e1e6cd48":"20000000000000000000","38ea6f5b5a7b88417551b4123dc127dfe9342da6":"400000000000000000000","014b7f67b14f5d983d87014f570c8b993b9872b5":"200000000000000000000","8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611":"20000000000000000000","7eb4b0185c92b6439a08e7322168cb353c8a774a":"10165988000000000000000",d29dc08efbb3d72e263f78ab7610d0226de76b00:"12000000000000000000000","72a8260826294726a75bf39cd9aa9e07a3ea14cd":"2000000000000000000000","4cb5c6cd713ca447b848ae2f56b761ca14d7ad57":"267400000000000000000","49185dd7c23632f46c759473ebae966008cd3598":"254030000000000000000","13d67a7e25f2b12cdb85585009f8acc49b967301":"1999944000000000000000","9d913b5d339c95d87745562563fea98b23c60cc4":"170718000000000000000",abdc9f1bcf4d19ee96591030e772c334302f7d83:"40110000000000000000000",e9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df:"1970000000000000000000","1fd296be03ad737c92f9c6869e8d80a71c5714aa":"13370000000000000000","2f13657526b177cad547c3908c840eff647b45d9":"1170685000000000000000",e69fcc26ed225f7b2e379834c524d70c1735e5bc:"2000000000000000000000",bade43599e02f84f4c3014571c976b13a36c65ab:"4000000000000000000000","184a4f0beb71ffd558a6b6e8f228b78796c4cf3e":"12000000000000000000000",d1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7:"20000000000000000000","0bd67dbde07a856ebd893b5edc4f3a5be4202616":"2000000000000000000000","6b30f1823910b86d3acb5a6afc9defb6f3a30bf8":"4200000000000000000000","9a63d185a79129fdab19b58bb631ea36a420544e":"42000000000000000000",df660a91dab9f730f6190d50c8390561500756ca:"2000000000000000000000",a1a1f0fa6d20b50a794f02ef52085c9d036aa6ca:"1000000000000000000000","4ec768295eeabafc42958415e22be216cde77618":"59600000000000000000",c348fc5a461323b57be303cb89361b991913df28:"100000000000000000000000","3a7db224acae17de7798797d82cdf8253017dfa8":"5000000000000000000000","8bea40379347a5c891d59a6363315640f5a7e07a":"1999992000000000000000","2257fca16a6e5c2a647c3c29f36ce229ab93b17e":"4000000000000000000000",e492818aa684e5a676561b725d42f3cc56ae5198:"800000000000000000000",c841884fa4785fb773b28e9715fae99a5134305d:"2000000000000000000000","0d9443a79468a5bbf7c13c6e225d1de91aee07df":"70000000000000000000","6d4008b4a888a826f248ee6a0b0dfde9f93210b9":"5460000000000000000000","884980eb4565c1048317a8f47fdbb461965be481":"3999922000000000000000","985d70d207892bed398590024e2421b1cc119359":"20000000000000000000000",d9ec8fe69b7716c0865af888a11b2b12f720ed33:"4000000000000000000000","49b74e169265f01a89ec4c9072c5a4cd72e4e835":"16100000000000000000000","4c3e95cc3957d252ce0bf0c87d5b4f2234672e70":"2500000000000000000000",d9ff115d01266c9f73b063c1c238ef3565e63b36:"680000000000000000000","48c5c6970b9161bb1c7b7adfed9cdede8a1ba864":"4000000000000000000000",ea6afe2cc928ac8391eb1e165fc40040e37421e7:"2997569000000000000000","08ccda50e4b26a0ffc0ef92e9205310706bec2c7":"6077440000000000000000",e6e9a39d750fe994394eb68286e5ea62a6997882:"600000000000000000000","4b58101f44f7e389e12d471d1635b71614fdd605":"160000000000000000000","8d93dac785f88f1a84bf927d53652b45a154ccdd":"158000000000000000000","415d096ab06293183f3c033d25f6cf7178ac3bc7":"40000000000000000000",c3e387b03ce95ccfd7fa51dd840183bc43532809:"2000000000000000000000",da34b2eae30bafe8daeccde819a794cd89e09549:"2000000000000000000000",fa279bfd8767f956bf7fa0bd5660168da75686bd:"2674000000000000000000",b98ca31785ef06be49a1e47e864f60d076ca472e:"4000000000000000000000",b768b5234eba3a9968b34d6ddb481c8419b3655d:"14974000000000000000","31047d703f63b93424fbbd6e2f1f9e74de13e709":"2850123000000000000000","9a24ce8d485cc4c86e49deb39022f92c7430e67e":"1300000000000000000000",e62f9d7c64e8e2635aeb883dd73ba684ee7c1079:"8000000000000000000000",f15d9d5a21b1929e790371a17f16d95f0c69655c:"2000000000000000000000","285ae51b9500c58d541365d97569f14bb2a3709b":"2000000000000000000000","09c177f1ae442411ddacf187d46db956148360e7":"8950000000000000000000","12173074980153aeaa4b0dcbc7132eadcec21b64":"240000000000000000000","351f16e5e0735af56751b0e225b2421171394090":"13370000000000000000000",ac52b77e15664814f39e4f271be641308d91d6cc:"220000000000000000000","99c883258546cc7e4e971f522e389918da5ea63a":"4000000000000000000000",aa16269aac9c0d803068d82fc79151dadd334b66:"4000000000000000000000","7c9a110cb11f2598b2b20e2ca400325e41e9db33":"26000000000000000000000","583e83ba55e67e13e0e76f8392d873cd21fbf798":"20000000000000000000","555ebe84daa42ba256ea789105cec4b693f12f18":"100000000000000000000","978c430ce4359b06bc2cdf5c2985fc950e50d5c8":"480000000000000000000",dc1eb9b6e64351f56424509645f83e79eee76cf4:"4000000000000000000000","5b290c01967c812e4dc4c90b174c1b4015bae71e":"149946000000000000000",e7d213947fcb904ad738480b1eed2f5c329f27e8:"18718000000000000000",c517d0315c878813c717e18cafa1eab2654e01da:"10000000000000000000000","7e972a8a7c2a44c93b21436c38d21b9252c345fe":"1790000000000000000000","9cb28ac1a20a106f7f373692c5ce4c73f13732a1":"1000000000000000000000","14ab164b3b524c82d6abfbc0de831126ae8d1375":"2000000000000000000000",d46f8223452982a1eea019a8816efc2d6fc00768:"137000000000000000000","5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e":"537000000000000000000","66fdc9fee351fa1538eb0d87d819fcf09e7c106a":"6016500000000000000000",e7be82c6593c1eeddd2ae0b15001ff201ab57b2f:"19100000000000000000","47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5":"1000000000000000000000","0f2d8daf04b5414a0261f549ff6477b80f2f1d07":"200000000000000000000000","84bfcef0491a0ae0694b37ceac024584f2aa0467":"1999944000000000000000",ec5feafe210c12bfc9a5d05925a123f1e73fbef8:"456000000000000000000000","7023c70956e04a92d70025aad297b539af355869":"2000000000000000000000",d66ddf1159cf22fd8c7a4bc8d5807756d433c43e:"2200000000000000000000",d0638ea57189a6a699024ad78c71d939c1c2ff8c:"2632000000000000000000","70d25ed2c8ada59c088cf70dd22bf2db93acc18a":"1056600000000000000000",a4875928458ec2005dbb578c5cd33580f0cf1452:"1000000000000000000000",b5ad5157dda921e6bafacd9086ae73ae1f611d3f:"2000000000000000000000",c493489e56c3bdd829007dc2f956412906f76bfa:"48968000000000000000",c57612de91110c482e6f505bcd23f3c5047d1d61:"3580000000000000000000","9b18478655a4851cc906e660feac61f7f4c8bffc":"4174120000000000000000",b21b7979bf7c5ca01fa82dd640b41c39e6c6bc75:"1999944000000000000000",a9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5:"198800000000000000000","6f29bb375be5ed34ed999bb830ee2957dde76d16":"2000000000000000000000",a006268446643ec5e81e7acb3f17f1c351ee2ed9:"4000000000000000000000","42ddd014dc52bfbcc555325a40b516f4866a1dd3":"2000000000000000000000",d6d6776958ee23143a81adadeb08382009e996c2:"3000000000000000000000",d34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15:"320000000000000000000",dac0c177f11c5c3e3e78f2efd663d13221488574:"1000000000000000000000","814135da8f9811075783bf1ab67062af8d3e9f40":"20000000000000000000","7c3eb713c4c9e0381cd8154c7c9a7db8645cde17":"200000000000000000000",f49c47b3efd86b6e6a5bc9418d1f9fec814b69ef:"20000000000000000000000","35f1da127b83376f1b88c82a3359f67a5e67dd50":"1910000000000000000000","44dfba50b829becc5f4f14d1b04aab3320a295e5":"1000000000000000000000","0b924df007e9c0878417cfe63b976ea1a382a897":"40000000000000000000","82438fd2b32a9bdd674b49d8cc5fa2eff9781847":"20000000000000000000","794529d09d017271359730027075b87ad83dae6e":"310000000000000000000",f4b49100757772f33c177b9a76ba95226c8f3dd8:"6700000000000000000000","8563c49361b625e768771c96151dbfbd1c906976":"2000000000000000000000","0b9df80fbe232009dacf0aa8cac59376e2476203":"2000000000000000000000","149b6dbde632c19f5af47cb493114bebd9b03c1f":"12000000000000000000000",d7a1431ee453d1e49a0550d1256879b4f5d10201:"1670000000000000000000","1d37616b793f94911838ac8e19ee9449df921ec4":"1500000000000000000000",d6670c036df754be43dadd8f50feea289d061fd6:"5988459000000000000000","02778e390fa17510a3428af2870c4273547d386c":"16163700000000000000000",b89f4632df5909e58b2a9964f74feb9a3b01e0c5:"21406707000000000000000","76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1":"2000000000000000000000","36bf43ff35df90908824336c9b31ce33067e2f50":"346837200000000000000000",b53bcb174c2518348b818aece020364596466ba3:"2000000000000000000000",b4dd460cd016725a64b22ea4f8e06e06674e033e:"5370000000000000000000",cda1741109c0265b3fb2bf8d5ec9c2b8a3346b63:"20000000000000000000",feb8b8e2af716ae41fc7c04bcf29540156461e6b:"1555396000000000000000",a49f523aa51364cbc7d995163d34eb590ded2f08:"2659160000000000000000",a7e74f0bdb278ff0a805a648618ec52b166ff1be:"100000000000000000000","5ead29037a12896478b1296ab714e9cb95428c81":"71500000000000000000",cdecf5675433cdb0c2e55a68db5d8bbe78419dd2:"20000000000000000000",c24ccebc2344cce56417fb684cf81613f0f4b9bd:"1550000000000000000000","5a70106f20d63f875265e48e0d35f00e17d02bc9":"20000000000000000000","2606c3b3b4ca1b091498602cb1978bf3b95221c0":"400000000000000000000","1ad4563ea5786be1159935abb0f1d5879c3e7372":"6000000000000000000000",b782bfd1e2de70f467646f9bc09ea5b1fcf450af:"267400000000000000000","649a2b9879cd8fb736e6703b0c7747849796f10f":"7358102000000000000000","1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48":"1700000000000000000000","824b3c3c443e19295d7ef6faa7f374a4798486a8":"20000000000000000000",a7758cecb60e8f614cce96137ef72b4fbd07774a:"500000000000000000000","981f712775c0dad97518ffedcb47b9ad1d6c2762":"6685000000000000000000","26e801b62c827191dd68d31a011990947fd0ebe0":"20000000000000000000","95447046313b2f3a5e19b948fd3b8bedc82c717c":"500000000000000000000","0b701101a4109f9cb360dc57b77442673d5e5983":"2000000000000000000000","5b25cae86dcafa2a60e7723631fc5fa49c1ad87d":"2491200000000000000000",f73ac46c203be1538111b151ec8220c786d84144:"294515000000000000000",e8c3d3b0e17f97d1e756e684f94e1470f99c95a1:"400000000000000000000","8c900a8236b08c2b65405d39d75f20062a7561fd":"1640000000000000000000","43898c49a34d509bfed4f76041ee91caf3aa6aa5":"300000000000000000000",c85325eab2a59b3ed863c86a5f2906a04229ffa9:"465600000000000000000","4a430170152de5172633dd8262d107a0afd96a0f":"3160000000000000000000","6e0ee70612c976287d499ddfa6c0dcc12c06deea":"129980000000000000000","21c07380484f6cbc8724ad32bc864c3b5ad500b7":"1000000000000000000000",ff5162f2354dc492c75fd6e3a107268660eecb47:"1700000000000000000000","8845e9f90e96336bac3c616be9d88402683e004c":"2000000000000000000000",f23c7b0cb8cd59b82bd890644a57daf40c85e278:"50038000000000000000","1784948bf99848c89e445638504dd698271b5924":"6037580000000000000000",b39f4c00b2630cab7db7295ef43d47d501e17fd7:"4000000000000000000000","3fb7d197b3ba4fe045efc23d50a14585f558d9b2":"20000000000000000000",bd043b67c63e60f841ccca15b129cdfe6590c8e3:"200000000000000000000","86ca0145957e6b0dfe36875fbe7a0dec55e17a28":"10000000000000000000000",dae7201eab8c063302930d693929d07f95e71962:"2687370000000000000000",cc034985d3f28c2d39b1a34bced4d3b2b6ca234e:"182000000000000000000","40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6":"4000000000000000000000",b1896a37e5d8825a2d01765ae5de629977de8352:"200000000000000000000",d9f547f2c1de0ed98a53d161df57635dd21a00bd:"98500000000000000000","2fea1b2f834f02fc54333f8a809f0438e5870aa9":"20200000000000000000","68b31836a30a016ada157b638ac15da73f18cfde":"26000000000000000000",bc967fe4418c18b99858966d870678dca2b88879:"8740000000000000000000","16bae5d24eff91778cd98b4d3a1cc3162f44aa77":"401100000000000000000",f476e1267f86247cc908816f2e7ad5388c952db0:"4000000000000000000000","0203ae01d4c41cae1865e04b1f5b53cdfaecae31":"1006054000000000000000",bd4bd5b122d8ef7b7c8f0667450320db2116142e:"600000000000000000000",a394ad4fd9e6530e6f5c53faecbede81cb172da1:"5600000000000000000000","3a9960266df6492063538a99f487c950a3a5ec9e":"24000000000000000000000",d8069f84b521493f4715037f3226b25f33b60586:"1910000000000000000000","136c834bf111326d207395295b2e583ea7f33572":"100000000000000000000",c5c73d61cce7c8fe4c8fce29f39092cd193e0fff:"8000000000000000000000","3cfbf066565970639e130df2a7d16b0e14d6091c":"1700000000000000000000","61b905de663fc17386523b3a28e2f7d037a655cd":"500000000000000000000",fda0ce15330707f10bce3201172d2018b9ddea74:"51900000000000000000",f7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0:"2000000000000000000000",c3db9fb6f46c480af34465d79753b4e2b74a67ce:"20000000000000000000000",ebe46cc3c34c32f5add6c3195bb486c4713eb918:"1000000000000000000000","91d2a9ee1a6db20f5317cca7fbe2313895db8ef8":"8499600000000000000000",c4cc45a2b63c27c0b4429e58cd42da59be739bd6:"1000000000000000000000",a43b81f99356c0af141a03010d77bd042c71c1ee:"2000000000000000000000","4c45d4c9a725d11112bfcbca00bf31186ccaadb7":"400000000000000000000",bf9f271f7a7e12e36dd2fe9facebf385fe6142bd:"62760000000000000000",e0ce80a461b648a501fd0b824690c8868b0e4de8:"500000000000000000000",a1f7dde1d738d8cd679ea1ee965bee224be7d04d:"1127000000000000000000","7f1c81ee1697fc144b7c0be5493b5615ae7fddca":"500200000000000000000",b508f987b2de34ae4cf193de85bff61389621f88:"6000000000000000000000","5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3":"1000000000000000000000",d02108d2ae3cab10cbcf1657af223e027c8210f6:"2000140000000000000000","952183cfd38e352e579d36decec5b18450f7fba0":"2000000000000000000000",eb90c793b3539761e1c814a29671148692193eb4:"12000000000000000000000","1076212d4f758c8ec7121c1c7d74254926459284":"35000056000000000000000",f05ceeab65410564709951773c8445ad9f4ec797:"299982000000000000000","05361d8eb6941d4e90fb7e1418a95a32d5257732":"20000000000000000000",a5783bf33432ff82ac498985d7d460ae67ec3673:"1820000000000000000000",b1cd4bdfd104489a026ec99d597307a04279f173:"20000000000000000000000","876c3f218b4776df3ca9dbfb270de152d94ed252":"100000000000000000000","8a36869ad478997cbf6d8924d20a3c8018e9855b":"20000000000000000000",fb3fe09bb836861529d7518da27635f538505615:"1399904000000000000000",d093e829819fd2e25b973800bb3d5841dd152d05:"4000000000000000000000","126d91f7ad86debb0557c612ca276eb7f96d00a1":"100000000000000000000","2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c":"2000000000000000000000",c4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da:"200000000000000000000","305d26c10bdc103f6b9c21272eb7cb2d9108c47e":"500000000000000000000",d0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3:"840000000000000000000","522323aad71dbc96d85af90f084b99c3f09decb7":"6000000000000000000000",f43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351:"1999944000000000000000",a2dc65ee256b59a5bd7929774f904b358df3ada1:"21319600000000000000000",f382df583155d8548f3f93440cd5f68cb79d6026:"266619800000000000000000","0c967e3061b87a753e84507eb60986782c8f3013":"100000000000000000000",a3a262afd2936819230892fde84f2d5a594ab283:"1880000000000000000000","93868ddb2a794d02ebda2fa4807c76e3609858dc":"2027851000000000000000",cd35ff010ec501a721a1b2f07a9ca5877dfcf95a:"4011000000000000000000","5824a7e22838277134308c5f4b50dab65e43bb31":"6000000000000000000000","7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba":"100000000000000000000","30513fca9f36fd788cfea7a340e86df98294a244":"447000000000000000000","283e6252b4efcf4654391acb75f903c59b78c5fb":"12000000000000000000000",eddbaafbc21be8f25562f1ed6d05d6afb58f02c2:"2000000000000000000000","0dcfe837ea1cf28c65fccec3bef1f84e59d150c0":"200000000000000000000","828ba651cb930ed9787156299a3de44cd08b7212":"1337000000000000000000",cfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe:"54508000000000000000","0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f":"2000000000000000000000","205f5166f12440d85762c967d3ae86184f8f4d98":"432500000000000000000","25dad495a11a86b9eeece1eeec805e57f157faff":"16000000000000000000000","6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314":"2000000000000000000000","91a787bc5196f34857fe0c372f4df376aaa76613":"2000000000000000000000",b0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85:"4999711000000000000000","6e4d2e39c8836629e5b487b1918a669aebdd9536":"1000000000000000000000",dc703a5f3794c84d6cb3544918cae14a35c3bd4f:"1850000000000000000000","47beb20f759100542aa93d41118b3211d664920e":"2000000000000000000000","5a7735007d70b06844da9901cdfadb11a2582c2f":"6000000000000000000000",aff107960b7ec34ed690b665024d60838c190f70:"500000000000000000000","563a03ab9c56b600f6d25b660c21e16335517a75":"1000000000000000000000",a106465bbd19e1b6bce50d1b1157dc59095a3630:"2000000000000000000000",ca9dec02841adf5cc920576a5187edd2bd434a18:"500000000000000000000","572ac1aba0de23ae41a7cae1dc0842d8abfc103b":"1910000000000000000000","5f74ed0e24ff80d9b2c4a44baa9975428cd6b935":"2980000000000000000000",f2049532fd458a83ca1bff2eebacb6d5ca63f4a4:"3625693000000000000000",cee699c0707a7836252b292f047ce8ad289b2f55:"324700000000000000000","8b3696f3c60de32432a2e4c395ef0303b7e81e75":"30000000000000000000000","13dee03e3799952d0738843d4be8fc0a803fb20e":"2000000000000000000000",c853215b9b9f2d2cd0741e585e987b5fb80c212e:"1550000000000000000000","851c0d62be4635d4777e8035e37e4ba8517c6132":"500000000000000000000",a76b743f981b693072a131b22ba510965c2fefd7:"18200000000000000000","69bd25ade1a3346c59c4e930db2a9d715ef0a27a":"4000000000000000000000","0fec4ee0d7ca180290b6bd20f9992342f60ff68d":"334383000000000000000",ccfd725760a68823ff1e062f4cc97e1360e8d997:"399800000000000000000","9f017706b830fb9c30efb0a09f506b9157457534":"2000000000000000000000","420fb86e7d2b51401fc5e8c72015decb4ef8fc2e":"1000000000000000000000",cb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b:"10000000000000000000000","6c822029218ac8e98a260c1e064029348839875b":"5010000000000000000000","1c68a66138783a63c98cc675a9ec77af4598d35e":"50100000000000000000",f270792576f05d514493ffd1f5e84bec4b2df810:"1000000000000000000000","9191f94698210516cf6321a142070e20597674ed":"17194000000000000000",c0ca3277942e7445874be31ceb902972714f1823:"250000000000000000000","35e096120deaa5c1ecb1645e2ccb8b4edbd9299a":"500000000000000000000",e2bbf84641e3541f6c33e6ed683a635a70bde2ec:"502763000000000000000",d12d77ae01a92d35117bac705aacd982d02e74c1:"1000000000000000000000",dabb0889fc042926b05ef57b2520910abc4b4149:"2000000000000000000000","5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb":"1000000000000000000000",abd154903513b8da4f019f68284b0656a1d0169b:"1000000000000000000000",ad377cd25eb53e83ae091a0a1d2b4516f484afde:"1940000000000000000000","08c2f236ac4adcd3fda9fbc6e4532253f9da3bec":"20000000000000000000","71135d8f05963c905a4a07922909235a896a52ea":"3000000000000000000000","080546508a3d2682c8b9884f13637b8847b44db3":"2000000000000000000000","2d61bfc56873923c2b00095dc3eaa0f590d8ae0f":"20760000000000000000000",cbfa6af6c283b046e2772c6063b0b21553c40106:"2000000000000000000000",ccabc6048a53464424fcf76eeb9e6e1801fa23d4:"49250000000000000000","60cc3d445ebdf76a7d7ae571c6971dff68cc8585":"1000000000000000000000",fff33a3bd36abdbd412707b8e310d6011454a7ae:"8000000000000000000000",d2dbebe89b0357aea98bbe8e496338debb28e805:"4000000000000000000000","5f521282e9b278dc8c034c72af53ee29e5443d78":"6520000000000000000000",c5a48a8500f9b4e22f0eb16c6f4649687674267d:"812721000000000000000","8cb3aa3fcd212854d7578fcc30fdede6742a312a":"300000000000000000000","90d2809ae1d1ffd8f63eda01de49dd552df3d1bc":"3998000000000000000000","96a55f00dff405dc4de5e58c57f6f6f0cac55d2f":"1962711000000000000000",ae842e81858ecfedf6506c686dc204ac15bf8b24:"40000000000000000000","0be6a09e4307fe48d412b8d1a1a8284dce486261":"19180000000000000000000",c9c7ac0bdd9342b5ead4360923f68c72a6ba633a:"500000000000000000000",ea8f30b6e4c5e65290fb9864259bc5990fa8ee8a:"20000000000000000000","74d37a51747bf8b771bfbf43943933d100d21483":"1000000000000000000000","1a04d5389eb006f9ce880c30d15353f8d11c4b31":"17072800000000000000000","726a14c90e3f84144c765cffacba3e0df11b48be":"10000000000000000000000","86b7bd563ceab686f96244f9ddc02ad7b0b14bc2":"10000000000000000000000","2bbe672a1857508f630f2a5edb563d9e9de92815":"2000000000000000000000",a17070c2e9c5a940a4ec0e4954c4d7d643be8f49:"1999965000000000000000",f2d1b7357724ec4c03185b879b63f57e26589153:"6000000000000000000000",d6a7ac4de7b510f0e8de519d973fa4c01ba83400:"1880000000000000000000","593b45a1864ac5c7e8f0caaeba0d873cd5d113b2":"6000000000000000000000","0837539b5f6a522a482cdcd3a9bb7043af39bdd2":"6000000000000000000000",b927abd2d28aaaa24db31778d27419df8e1b04bb:"27531000000000000000",b2e085fddd1468ba07415b274e734e11237fb2a9:"100000000000000000000","970938522afb5e8f994873c9fbdc26e3b37e314c":"1000000000000000000000",f3de5f26ef6aded6f06d3b911346ee70401da4a0:"354718000000000000000",bffb6929241f788693273e7022e60e3eab1fe84f:"2000000000000000000000",b56ad2aec6c8c3f19e1515bbb7dd91285256b639:"1000000000000000000000","47730f5f8ebf89ac72ef80e46c12195038ecdc49":"3160000000000000000000",f39a9d7aa3581df07ee4279ae6c312ef21033658:"4000000000000000000000","36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0":"198479000000000000000","89e3b59a15864737d493c1d23cc53dbf8dcb1362":"4000000000000000000000",bd08e0cddec097db7901ea819a3d1fd9de8951a2:"20000000000000000000","533444584082eba654e1ad30e149735c6f7ba922":"1730000000000000000000","6a8a4317c45faa0554ccdb482548183e295a24b9":"1000000000000000000000","22ce349159eeb144ef06ff2636588aef79f62832":"188000000000000000000","3cd1d9731bd548c1dd6fcea61beb75d91754f7d3":"5130285000000000000000","8b7056f6abf3b118d026e944d5c073433ca451d7":"999999000000000000000","15f1b352110d68901d8f67aac46a6cfafe031477":"200000000000000000000","0f789e30397c53bf256fc364e6ef39f853504114":"3640000000000000000000","750bbb8c06bbbf240843cc75782ee02f08a97453":"835000000000000000000",fff7ac99c8e4feb60c9750054bdc14ce1857f181:"1000000000000000000000","5c6f36af90ab1a656c6ec8c7d521512762bba3e1":"1999800000000000000000","6811b54cd19663b11b94da1de2448285cd9f68d9":"1100000000000000000000","6f50929777824c291a49c46dc854f379a6bea080":"360000000000000000000",e83604e4ff6be7f96f6018d3ec3072ec525dff6b:"182000000000000000000",d731bb6b5f3c37395e09ceaccd14a918a6060789:"3940000000000000000000","372e453a6b629f27678cc8aeb5e57ce85ec0aef9":"200000000000000000000","86924fb211aad23cf5ce600e0aae806396444087":"10000000000000000000000","18c6723a6753299cb914477d04a3bd218df8c775":"1000000000000000000000",e00484788db50fc6a48e379d123e508b0f6e5ab1:"1000000000000000000000","150e3dbcbcfc84ccf89b73427763a565c23e60d0":"40000000000000000000","8ffa062122ac307418821adb9311075a3703bfa3":"1000000000000000000000","21206ce22ea480e85940d31314e0d64f4e4d3a04":"1000000000000000000000",ac024f594f9558f04943618eb0e6b2ee501dc272:"2000000000000000000000",b2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04:"2000000000000000000000",abc74706964960dfe0dca3dca79e9216056f1cf4:"40000000000000000000000",d7eb903162271c1afa35fe69e37322c8a4d29b11:"10000000000000000000000",d7c6265dea11876c903b718e4cd8ab24fe265bde:"2000000000000000000000",cba288cd3c1eb4d59ddb06a6421c14c345a47b24:"4000000000000000000000","8c22426055b76f11f0a2de1a7f819a619685fe60":"1980000000000000000000",f463a90cb3f13e1f0643423636beab84c123b06d:"40000000000000000000","2b5ced9987c0765f900e49cf9da2d9f9c1138855":"400000000000000000000","9bb760d5c289a3e1db18db095345ca413b9a43c2":"197000000000000000000",d66ab79294074c8b627d842dab41e17dd70c5de5:"1000000000000000000000","0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630":"2000000000000000000000",d612597bc31743c78633f633f239b1e9426bd925:"76000000000000000000000","140518a3194bad1350b8949e650565debe6db315":"2000000000000000000000",daedd4ad107b271e89486cbf80ebd621dd974578:"2000000000000000000000",c36c0b63bfd75c2f8efb060883d868cccd6cbdb4:"3000000000000000000000",e646665872e40b0d7aa2ff82729caaba5bc3e89e:"400000000000000000000",b5fb7ea2ddc1598b667a9d57dd39e85a38f35d56:"500000000000000000000",e51421f8ee2210c71ed870fe618276c8954afbe9:"1337000000000000000000","08a9a44e1f41de3dbba7a363a3ab412c124cd15e":"200000000000000000000","562bced38ab2ab6c080f3b0541b8456e70824b3f":"641760000000000000000","1e484d0621f0f5331b35d5408d9aae4eb1acf21e":"20000000000000000000","3a476bd2c9e664c63ab266aa4c6e4a4825f516c3":"200000000000000000000","8d6df209484d7b94702b03a53e56b9fb0660f6f0":"2000000000000000000000","5970fb1b144dd751e4ce2eca7caa20e363dc4da3":"10000000000000000000000",d1dd79fb158160e5b4e8e23f312e6a907fbc4d4e:"500000000000000000000","7ee5ca805dce23af89c2d444e7e40766c54c7404":"240660000000000000000","93e0f37ecdfb0086e3e862a97034447b1e4dec1a":"30000000000000000000",e10ac19c546fc2547c61c139f5d1f45a6666d5b0:"4775000000000000000000","1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c":"200000000000000000000",d771d9e0ca8a08a113775731434eb3270599c40d:"20000000000000000000",e69d1c378b771e0feff051db69d966ac6779f4ed:"553000000000000000000","0ef85b49d08a75198692914eddb4b22cf5fa4450":"2004800000000000000000",ed70a37cdd1cbda9746d939658ae2a6181288578:"9600000000000000000000",eee761847e33fd61d99387ee14628694d1bfd525:"2000000000000000000000","271d3d481cb88e7671ad216949b6365e06303de0":"4000000000000000000000","5255dc69155a45b970c604d30047e2f530690e7f":"20000000000000000000",cabab6274ed15089737e287be878b757934864e2:"20000000000000000000000","9defe56a0ff1a1947dba0923f7dd258d8f12fa45":"26880000000000000000000",b7a2c103728b7305b5ae6e961c94ee99c9fe8e2b:"50000000000000000000000",b498bb0f520005b6216a4425b75aa9adc52d622b:"4000000000000000000000",c1132878235c5ddba5d9f3228b5236e47020dc6f:"1000000000000000000000",f81622e55757daea6675975dd93538da7d16991e:"2000000000000000000000",ce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec:"2000000000000000000000","86a1eadeeb30461345d9ef6bd05216fa247c0d0c":"2000000000000000000000","7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5":"2000000000000000000000","6bbc3f358a668dd1a11f0380f3f73108426abd4a":"4000000000000000000000",b1e6e810c24ab0488de9e01e574837829f7c77d0:"400000000000000000000","03eb3cb860f6028da554d344a2bb5a500ae8b86f":"2000000000000000000000",e5481a7fed42b901bbed20789bd4ade50d5f83b9:"2000000000000000000000","1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb":"554988000000000000000","30037988702671acbe892c03fe5788aa98af287a":"2800000000000000000000",edb473353979a206879de144c10a3c51d7d7081a:"6000000000000000000000","22bdffc240a88ff7431af3bff50e14da37d5183e":"1000000000000000000000","9374869d4a9911ee1eaf558bc4c2b63ec63acfdd":"1000000000000000000000",b756ad52f3bf74a7d24c67471e0887436936504c:"20000000000000000000000","8bd0b65a50ef5cef84fec420be7b89ed1470ceb9":"11999000000000000000000",af26f7c6bf453e2078f08953e4b28004a2c1e209:"100000000000000000000","7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a":"300000000000000000000000",dde670d01639667576a22dd05d3246d61f06e083:"26740000000000000000","5cf44e10540d65716423b1bcb542d21ff83a94cd":"10000000000000000000000",f96b4c00766f53736a8574f822e6474c2f21da2d:"400000000000000000000","8d89170b92b2be2c08d57c48a7b190a2f146720f":"19700000000000000000000","142b87c5043ffb5a91df18c2e109ced6fe4a71db":"200000000000000000000","42d34940edd2e7005d46e2188e4cfece8311d74d":"158000000000000000000","562105e82b099735de49f62692cc87cd38a8edcd":"6000000000000000000000","457bcef37dd3d60b2dd019e3fe61d46b3f1e7252":"20000000000000000000",cf8882359c0fb23387f5674074d8b17ade512f98:"6000000000000000000000",f0c081da52a9ae36642adf5e08205f05c54168a6:"111000000000000000000","551e7784778ef8e048e495df49f2614f84a4f1dc":"600000000000000000000","3c869c09696523ced824a070414605bb76231ff2":"1000000000000000000000","7e7f18a02eccaa5d61ab8fbf030343c434a25ef7":"66850000000000000000","9328d55ccb3fce531f199382339f0e576ee840a3":"4000000000000000000000","9d0f347e826b7dceaad279060a35c0061ecf334b":"4000000000000000000000","680640838bd07a447b168d6d923b90cf6c43cdca":"1730000000000000000000",c951900c341abbb3bafbf7ee2029377071dbc36a:"327600000000000000000",ddf5810a0eb2fb2e32323bb2c99509ab320f24ac:"17900000000000000000000","2489ac126934d4d6a94df08743da7b7691e9798e":"1000000000000000000000",f42f905231c770f0a406f2b768877fb49eee0f21:"197000000000000000000","756f45e3fa69347a9a973a725e3c98bc4db0b5a0":"200000000000000000000"}},function(e){e.exports={genesisGasLimit:{v:5e3,d:"Gas limit of the Genesis block."},genesisDifficulty:{v:17179869184,d:"Difficulty of the Genesis block."},genesisNonce:{v:"0x0000000000000042",d:"the geneis nonce"},genesisExtraData:{v:"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",d:"extra data "},genesisHash:{v:"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",d:"genesis hash"},genesisStateRoot:{v:"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",d:"the genesis state root"},minGasLimit:{v:5e3,d:"Minimum the gas limit may ever be."},gasLimitBoundDivisor:{v:1024,d:"The bound divisor of the gas limit, used in update calculations."},minimumDifficulty:{v:131072,d:"The minimum that the difficulty may ever be."},difficultyBoundDivisor:{v:2048,d:"The bound divisor of the difficulty, used in the update calculations."},durationLimit:{v:13,d:"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not."},maximumExtraDataSize:{v:32,d:"Maximum size extra data may be after Genesis."},epochDuration:{v:3e4,d:"Duration between proof-of-work epochs."},stackLimit:{v:1024,d:"Maximum size of VM stack allowed."},callCreateDepth:{v:1024,d:"Maximum depth of call/create stack."},tierStepGas:{v:[0,2,3,5,8,10,20],d:"Once per operation, for a selection of them."},expGas:{v:10,d:"Once per EXP instuction."},expByteGas:{v:10,d:"Times ceil(log256(exponent)) for the EXP instruction."},sha3Gas:{v:30,d:"Once per SHA3 operation."},sha3WordGas:{v:6,d:"Once per word of the SHA3 operation's data."},sloadGas:{v:50,d:"Once per SLOAD operation."},sstoreSetGas:{v:2e4,d:"Once per SSTORE operation if the zeroness changes from zero."},sstoreResetGas:{v:5e3,d:"Once per SSTORE operation if the zeroness does not change from zero."},sstoreRefundGas:{v:15e3,d:"Once per SSTORE operation if the zeroness changes to zero."},jumpdestGas:{v:1,d:"Refunded gas, once per SSTORE operation if the zeroness changes to zero."},logGas:{v:375,d:"Per LOG* operation."},logDataGas:{v:8,d:"Per byte in a LOG* operation's data."},logTopicGas:{v:375,d:"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas."},createGas:{v:32e3,d:"Once per CREATE operation & contract-creation transaction."},callGas:{v:40,d:"Once per CALL operation & message call transaction."},callStipend:{v:2300,d:"Free gas given at beginning of call."},callValueTransferGas:{v:9e3,d:"Paid for CALL when the value transfor is non-zero."},callNewAccountGas:{v:25e3,d:"Paid for CALL when the destination address didn't exist prior."},suicideRefundGas:{v:24e3,d:"Refunded following a suicide operation."},memoryGas:{v:3,d:"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL."},quadCoeffDiv:{v:512,d:"Divisor for the quadratic particle of the memory cost equation."},createDataGas:{v:200,d:""},txGas:{v:21e3,d:"Per transaction. NOTE: Not payable on data of calls between transactions."},txCreation:{v:32e3,d:"the cost of creating a contract via tx"},txDataZeroGas:{v:4,d:"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions."},txDataNonZeroGas:{v:68,d:"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions."},copyGas:{v:3,d:"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added."},ecrecoverGas:{v:3e3,d:""},sha256Gas:{v:60,d:""},sha256WordGas:{v:12,d:""},ripemd160Gas:{v:600,d:""},ripemd160WordGas:{v:120,d:""},identityGas:{v:15,d:""},identityWordGas:{v:3,d:""},minerReward:{v:"5000000000000000000",d:"the amount a miner get rewarded for mining a block"},ommerReward:{v:"625000000000000000",d:"The amount of wei a miner of an uncle block gets for being inculded in the blockchain"},niblingReward:{v:"156250000000000000",d:"the amount a miner gets for inculding a uncle"},homeSteadForkNumber:{v:1e6,d:"the block that the homestead fork started at"},timebombPeriod:{v:1e5,d:"Exponential difficulty timebomb period"},freeBlockPeriod:{v:2}}},function(e,a,t){const r=t(362),c=t(333),n=r.BN;var i=e.exports=function(e){var a=[{name:"parentHash",length:32,default:r.zeros(32)},{name:"uncleHash",default:r.SHA3_RLP_ARRAY},{name:"coinbase",length:20,default:r.zeros(20)},{name:"stateRoot",length:32,default:r.zeros(32)},{name:"transactionsTrie",length:32,default:r.SHA3_RLP},{name:"receiptTrie",length:32,default:r.SHA3_RLP},{name:"bloom",default:r.zeros(256)},{name:"difficulty",default:new Buffer([])},{name:"number",default:r.intToBuffer(c.homeSteadForkNumber.v)},{name:"gasLimit",default:new Buffer("ffffffffffffff","hex")},{name:"gasUsed",empty:!0,default:new Buffer([])},{name:"timestamp",default:new Buffer([])},{name:"extraData",allowZero:!0,empty:!0,default:new Buffer([])},{name:"mixHash",default:r.zeros(32)},{name:"nonce",default:new Buffer([])}];r.defineProperties(this,a,e)};i.prototype.canonicalDifficulty=function(e){const a=new n(this.timestamp),t=new n(e.header.timestamp),r=new n(e.header.difficulty),i=new n(c.minimumDifficulty.v);var f,o=r.div(new n(c.difficultyBoundDivisor.v));if(this.isHomestead()){var d=a.sub(t).divn(10).neg().addn(1),s=new n(-99);1===s.cmp(d)&&(d=s),f=r.add(o.mul(d))}else f=1===t.addn(c.durationLimit.v).cmp(a)?o.add(r):r.sub(o);var b=new n(this.number).divn(1e5).subn(2);return b.isNeg()||f.iadd(new n(2).pow(b)),-1===f.cmp(i)&&(f=i),f},i.prototype.validateDifficulty=function(e){return 0===this.canonicalDifficulty(e).cmp(new n(this.difficulty))},i.prototype.validateGasLimit=function(e){const a=r.bufferToInt(e.header.gasLimit),t=r.bufferToInt(this.gasLimit),n=Math.floor(a/c.gasLimitBoundDivisor.v);return a+n>t&&a-n<t&&c.minGasLimit.v<t},i.prototype.validate=function(e,a,t){var i=this;if(2===arguments.length&&(t=a,a=!1),this.isGenesis())return t();e.getBlock(i.parentHash,function(e,f){if(e)return t("could not find parent block");if(i.parentBlock=f,0!==new n(i.number).cmp(new n(f.header.number).addn(1)))return t("invalid number");if(a){var o=a.sub(new n(f.header.number));if(-1!==o.cmpn(8)||1!==o.cmpn(1))return t("uncle block has a parent that is too old or to young")}return i.validateDifficulty(f)?i.validateGasLimit(f)?r.bufferToInt(f.header.number)+1!==r.bufferToInt(i.number)?t("invalid heigth"):r.bufferToInt(i.timestamp)<=r.bufferToInt(f.header.timestamp)?t("invalid timestamp"):i.extraData.length>c.maximumExtraDataSize.v?t("invalid amount of extra data"):void t():t("invalid gas limit"):t("invalid Difficulty")})},i.prototype.hash=function(){return r.rlphash(this.raw)},i.prototype.isGenesis=function(){return""===this.number.toString("hex")},i.prototype.isHomestead=function(){return r.bufferToInt(this.number)>=c.homeSteadForkNumber.v}},function(e,a,t){var r;
/*!
 * async
 * https://github.com/caolan/async
 *
 * Copyright 2010-2014 Caolan McMahon
 * Released under the MIT license
 */
/*!
 * async
 * https://github.com/caolan/async
 *
 * Copyright 2010-2014 Caolan McMahon
 * Released under the MIT license
 */
!function(){var t,c={};function n(){}function i(e){return e}function f(e){return!!e}function o(e){return!e}var d="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this;function s(e){return function(){if(null===e)throw new Error("Callback was already called.");e.apply(this,arguments),e=null}}function b(e){return function(){null!==e&&(e.apply(this,arguments),e=null)}}null!=d&&(t=d.async),c.noConflict=function(){return d.async=t,c};var u=Object.prototype.toString,l=Array.isArray||function(e){return"[object Array]"===u.call(e)};function p(e){return l(e)||"number"==typeof e.length&&e.length>=0&&e.length%1==0}function h(e,a){for(var t=-1,r=e.length;++t<r;)a(e[t],t,e)}function m(e,a){for(var t=-1,r=e.length,c=Array(r);++t<r;)c[t]=a(e[t],t,e);return c}function g(e){return m(Array(e),function(e,a){return a})}function v(e,a){for(var t=0;t<e.length;t++)if(e[t]===a)return t;return-1}var y=Object.keys||function(e){var a=[];for(var t in e)e.hasOwnProperty(t)&&a.push(t);return a};function _(e){var a,t,r=-1;return p(e)?(a=e.length,function(){return++r<a?r:null}):(t=y(e),a=t.length,function(){return++r<a?t[r]:null})}function w(e,a){return a=null==a?e.length-1:+a,function(){for(var t=Math.max(arguments.length-a,0),r=Array(t),c=0;c<t;c++)r[c]=arguments[c+a];switch(a){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r)}}}function A(e){return function(a,t,r){return e(a,r)}}var k="function"==typeof setImmediate&&setImmediate,x=k?function(e){k(e)}:function(e){setTimeout(e,0)};function E(e){return function(a,t,r){r=b(r||n);var c=_(a=a||[]);if(e<=0)return r(null);var i=!1,f=0,o=!1;!function n(){if(i&&f<=0)return r(null);for(;f<e&&!o;){var d=c();if(null===d)return i=!0,void(f<=0&&r(null));f+=1,t(a[d],d,s(function(e){f-=1,e?(r(e),o=!0):n()}))}}()}}function S(e){return function(a,t,r){return e(c.eachOf,a,t,r)}}function T(e){return function(a,t,r,c){return e(E(t),a,r,c)}}function j(e){return function(a,t,r){return e(c.eachOfSeries,a,t,r)}}function C(e,a,t,r){r=b(r||n);var c=p(a=a||[])?[]:{};e(a,function(e,a,r){t(e,function(e,t){c[a]=t,r(e)})},function(e){r(e,c)})}function R(e,a,t,r){var c=[];e(a,function(e,a,r){t(e,function(t){t&&c.push({index:a,value:e}),r()})},function(){r(m(c.sort(function(e,a){return e.index-a.index}),function(e){return e.value}))})}function O(e,a,t,r){R(e,a,function(e,a){t(e,function(e){a(!e)})},r)}function B(e,a,t){return function(r,c,n,i){function f(){i&&i(t(!1,void 0))}function o(e,r,c){if(!i)return c();n(e,function(r){i&&a(r)&&(i(t(!0,e)),i=n=!1),c()})}arguments.length>3?e(r,c,o,f):(i=n,n=c,e(r,o,f))}}function M(e,a){return a}function N(e,a,t){t=t||n;var r=p(a)?[]:{};e(a,function(e,a,t){e(w(function(e,c){c.length<=1&&(c=c[0]),r[a]=c,t(e)}))},function(e){t(e,r)})}function I(e,a,t,r){var c=[];e(a,function(e,a,r){t(e,function(e,a){c=c.concat(a||[]),r(e)})},function(e){r(e,c)})}function P(e,a,t){if(null==a)a=1;else if(0===a)throw new Error("Concurrency must not be zero");function r(e,a,t,r){if(null!=r&&"function"!=typeof r)throw new Error("task callback must be a function");if(e.started=!0,l(a)||(a=[a]),0===a.length&&e.idle())return c.setImmediate(function(){e.drain()});h(a,function(a){var c={data:a,callback:r||n};t?e.tasks.unshift(c):e.tasks.push(c),e.tasks.length===e.concurrency&&e.saturated()}),c.setImmediate(e.process)}function i(e,a){return function(){f-=1;var t=!1,r=arguments;h(a,function(e){h(o,function(a,r){a!==e||t||(o.splice(r,1),t=!0)}),e.callback.apply(e,r)}),e.tasks.length+f===0&&e.drain(),e.process()}}var f=0,o=[],d={tasks:[],concurrency:a,payload:t,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(e,a){r(d,e,!1,a)},kill:function(){d.drain=n,d.tasks=[]},unshift:function(e,a){r(d,e,!0,a)},process:function(){for(;!d.paused&&f<d.concurrency&&d.tasks.length;){var a=d.payload?d.tasks.splice(0,d.payload):d.tasks.splice(0,d.tasks.length),t=m(a,function(e){return e.data});0===d.tasks.length&&d.empty(),f+=1,o.push(a[0]);var r=s(i(d,a));e(t,r)}},length:function(){return d.tasks.length},running:function(){return f},workersList:function(){return o},idle:function(){return d.tasks.length+f===0},pause:function(){d.paused=!0},resume:function(){if(!1!==d.paused){d.paused=!1;for(var e=Math.min(d.concurrency,d.tasks.length),a=1;a<=e;a++)c.setImmediate(d.process)}}};return d}function F(e){return w(function(a,t){a.apply(null,t.concat([w(function(a,t){"object"==typeof console&&(a?console.error&&console.error(a):console[e]&&h(t,function(a){console[e](a)}))})]))})}function L(e){return function(a,t,r){e(g(a),t,r)}}function D(e){return w(function(a,t){var r=w(function(t){var r=this,c=t.pop();return e(a,function(e,a,c){e.apply(r,t.concat([c]))},c)});return t.length?r.apply(this,t):r})}function z(e){return w(function(a){var t=a.pop();a.push(function(){var e=arguments;r?c.setImmediate(function(){t.apply(null,e)}):t.apply(null,e)});var r=!0;e.apply(this,a),r=!1})}"object"==typeof process&&"function"==typeof process.nextTick?c.nextTick=process.nextTick:c.nextTick=x,c.setImmediate=k?x:c.nextTick,c.forEach=c.each=function(e,a,t){return c.eachOf(e,A(a),t)},c.forEachSeries=c.eachSeries=function(e,a,t){return c.eachOfSeries(e,A(a),t)},c.forEachLimit=c.eachLimit=function(e,a,t,r){return E(a)(e,A(t),r)},c.forEachOf=c.eachOf=function(e,a,t){t=b(t||n);for(var r,c=_(e=e||[]),i=0;null!=(r=c());)i+=1,a(e[r],r,s(f));function f(e){i--,e?t(e):null===r&&i<=0&&t(null)}0===i&&t(null)},c.forEachOfSeries=c.eachOfSeries=function(e,a,t){t=b(t||n);var r=_(e=e||[]),i=r();!function n(){var f=!0;if(null===i)return t(null);a(e[i],i,s(function(e){if(e)t(e);else{if(null===(i=r()))return t(null);f?c.setImmediate(n):n()}})),f=!1}()},c.forEachOfLimit=c.eachOfLimit=function(e,a,t,r){E(a)(e,t,r)},c.map=S(C),c.mapSeries=j(C),c.mapLimit=T(C),c.inject=c.foldl=c.reduce=function(e,a,t,r){c.eachOfSeries(e,function(e,r,c){t(a,e,function(e,t){a=t,c(e)})},function(e){r(e,a)})},c.foldr=c.reduceRight=function(e,a,t,r){var n=m(e,i).reverse();c.reduce(n,a,t,r)},c.transform=function(e,a,t,r){3===arguments.length&&(r=t,t=a,a=l(e)?[]:{}),c.eachOf(e,function(e,r,c){t(a,e,r,c)},function(e){r(e,a)})},c.select=c.filter=S(R),c.selectLimit=c.filterLimit=T(R),c.selectSeries=c.filterSeries=j(R),c.reject=S(O),c.rejectLimit=T(O),c.rejectSeries=j(O),c.any=c.some=B(c.eachOf,f,i),c.someLimit=B(c.eachOfLimit,f,i),c.all=c.every=B(c.eachOf,o,o),c.everyLimit=B(c.eachOfLimit,o,o),c.detect=B(c.eachOf,i,M),c.detectSeries=B(c.eachOfSeries,i,M),c.detectLimit=B(c.eachOfLimit,i,M),c.sortBy=function(e,a,t){function r(e,a){var t=e.criteria,r=a.criteria;return t<r?-1:t>r?1:0}c.map(e,function(e,t){a(e,function(a,r){a?t(a):t(null,{value:e,criteria:r})})},function(e,a){if(e)return t(e);t(null,m(a.sort(r),function(e){return e.value}))})},c.auto=function(e,a,t){"function"==typeof arguments[1]&&(t=a,a=null),t=b(t||n);var r=y(e),i=r.length;if(!i)return t(null);a||(a=i);var f={},o=0,d=!1,s=[];function u(e){s.unshift(e)}function p(){i--,h(s.slice(0),function(e){e()})}u(function(){i||t(null,f)}),h(r,function(r){if(!d){for(var n,i=l(e[r])?e[r]:[e[r]],b=w(function(e,a){if(o--,a.length<=1&&(a=a[0]),e){var n={};!function(e,a){h(y(e),function(t){a(e[t],t)})}(f,function(e,a){n[a]=e}),n[r]=a,d=!0,t(e,n)}else f[r]=a,c.setImmediate(p)}),m=i.slice(0,i.length-1),g=m.length;g--;){if(!(n=e[m[g]]))throw new Error("Has nonexistent dependency in "+m.join(", "));if(l(n)&&v(n,r)>=0)throw new Error("Has cyclic dependencies")}_()?(o++,i[i.length-1](b,f)):u(function e(){_()&&(o++,function(e){var a=v(s,e);a>=0&&s.splice(a,1)}(e),i[i.length-1](b,f))})}function _(){return o<a&&function(e,a,t){return h(e,function(e,r,c){t=a(t,e,r,c)}),t}(m,function(e,a){return e&&f.hasOwnProperty(a)},!0)&&!f.hasOwnProperty(r)}})},c.retry=function(e,a,t){var r=5,n=0,i=[],f={times:r,interval:n};var o=arguments.length;if(o<1||o>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");function d(e,a){function t(e,t){return function(r){e(function(e,a){r(!e||t,{err:e,result:a})},a)}}function r(e){return function(a){setTimeout(function(){a(null)},e)}}for(;f.times;){var n=!(f.times-=1);i.push(t(f.task,n)),!n&&f.interval>0&&i.push(r(f.interval))}c.series(i,function(a,t){t=t[t.length-1],(e||f.callback)(t.err,t.result)})}return o<=2&&"function"==typeof e&&(t=a,a=e),"function"!=typeof e&&function(e,a){if("number"==typeof a)e.times=parseInt(a,10)||r;else{if("object"!=typeof a)throw new Error("Unsupported argument type for 'times': "+typeof a);e.times=parseInt(a.times,10)||r,e.interval=parseInt(a.interval,10)||n}}(f,e),f.callback=t,f.task=a,f.callback?d():d},c.waterfall=function(e,a){if(a=b(a||n),!l(e)){var t=new Error("First argument to waterfall must be an array of functions");return a(t)}if(!e.length)return a();!function e(t){return w(function(r,c){if(r)a.apply(null,[r].concat(c));else{var n=t.next();n?c.push(e(n)):c.push(a),z(t).apply(null,c)}})}(c.iterator(e))()},c.parallel=function(e,a){N(c.eachOf,e,a)},c.parallelLimit=function(e,a,t){N(E(a),e,t)},c.series=function(e,a){N(c.eachOfSeries,e,a)},c.iterator=function(e){return function a(t){function r(){return e.length&&e[t].apply(null,arguments),r.next()}return r.next=function(){return t<e.length-1?a(t+1):null},r}(0)},c.apply=w(function(e,a){return w(function(t){return e.apply(null,a.concat(t))})}),c.concat=S(I),c.concatSeries=j(I),c.whilst=function(e,a,t){if(t=t||n,e()){var r=w(function(c,n){c?t(c):e.apply(this,n)?a(r):t.apply(null,[null].concat(n))});a(r)}else t(null)},c.doWhilst=function(e,a,t){var r=0;return c.whilst(function(){return++r<=1||a.apply(this,arguments)},e,t)},c.until=function(e,a,t){return c.whilst(function(){return!e.apply(this,arguments)},a,t)},c.doUntil=function(e,a,t){return c.doWhilst(e,function(){return!a.apply(this,arguments)},t)},c.during=function(e,a,t){t=t||n;var r=w(function(a,r){a?t(a):(r.push(c),e.apply(this,r))}),c=function(e,c){e?t(e):c?a(r):t(null)};e(c)},c.doDuring=function(e,a,t){var r=0;c.during(function(e){r++<1?e(null,!0):a.apply(this,arguments)},e,t)},c.queue=function(e,a){return P(function(a,t){e(a[0],t)},a,1)},c.priorityQueue=function(e,a){function t(e,a){return e.priority-a.priority}var r=c.queue(e,a);return r.push=function(e,a,i){!function(e,a,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");if(e.started=!0,l(a)||(a=[a]),0===a.length)return c.setImmediate(function(){e.drain()});h(a,function(a){var f={data:a,priority:r,callback:"function"==typeof i?i:n};e.tasks.splice(function(e,a,t){for(var r=-1,c=e.length-1;r<c;){var n=r+(c-r+1>>>1);t(a,e[n])>=0?r=n:c=n-1}return r}(e.tasks,f,t)+1,0,f),e.tasks.length===e.concurrency&&e.saturated(),c.setImmediate(e.process)})}(r,e,a,i)},delete r.unshift,r},c.cargo=function(e,a){return P(e,1,a)},c.log=F("log"),c.dir=F("dir"),c.memoize=function(e,a){var t={},r={},n=Object.prototype.hasOwnProperty;a=a||i;var f=w(function(i){var f=i.pop(),o=a.apply(null,i);n.call(t,o)?c.setImmediate(function(){f.apply(null,t[o])}):n.call(r,o)?r[o].push(f):(r[o]=[f],e.apply(null,i.concat([w(function(e){t[o]=e;var a=r[o];delete r[o];for(var c=0,n=a.length;c<n;c++)a[c].apply(null,e)})])))});return f.memo=t,f.unmemoized=e,f},c.unmemoize=function(e){return function(){return(e.unmemoized||e).apply(null,arguments)}},c.times=L(c.map),c.timesSeries=L(c.mapSeries),c.timesLimit=function(e,a,t,r){return c.mapLimit(g(e),a,t,r)},c.seq=function(){var e=arguments;return w(function(a){var t=this,r=a[a.length-1];"function"==typeof r?a.pop():r=n,c.reduce(e,a,function(e,a,r){a.apply(t,e.concat([w(function(e,a){r(e,a)})]))},function(e,a){r.apply(t,[e].concat(a))})})},c.compose=function(){return c.seq.apply(null,Array.prototype.reverse.call(arguments))},c.applyEach=D(c.eachOf),c.applyEachSeries=D(c.eachOfSeries),c.forever=function(e,a){var t=s(a||n),r=z(e);!function e(a){if(a)return t(a);r(e)}()},c.ensureAsync=z,c.constant=w(function(e){var a=[null].concat(e);return function(e){return e.apply(this,a)}}),c.wrapSync=c.asyncify=function(e){return w(function(a){var t,r=a.pop();try{t=e.apply(this,a)}catch(e){return r(e)}!function(e){var a=typeof e;return"function"===a||"object"===a&&!!e}(t)||"function"!=typeof t.then?r(null,t):t.then(function(e){r(null,e)}).catch(function(e){r(e.message?e:new Error(e))})})},"object"==typeof e&&e.exports?e.exports=c:void 0===(r=function(){return c}.apply(a,[]))||(e.exports=r)}()},function(e,a,t){const r=t(176),c=t(3),n=t(61).matchingNibbleLength;a.prove=function(e,a,t){var r;e.findPath(a,function(e,a,c,n){if(e)return t(e);if(c.length>0)return t(new Error("Node does not contain the key"));r=n;for(var i=[],f=0;f<r.length;f++){var o=r[f].serialize();(o.length>=32||0===f)&&i.push(o)}t(null,i)})},a.verifyProof=function(e,a,t,i){a=r.stringToNibbles(a);for(var f=c.toBuffer(e),o=0;o<t.length;o++){var d=c.toBuffer(t[o]),s=c.sha3(t[o]);if(Buffer.compare(s,f))return i(new Error("Bad proof node "+o+": hash mismatch"));var b,u=new r(c.rlp.decode(d));if("branch"===u.type){if(0===a.length)return o!==t.length-1?i(new Error("Additional nodes at end of proof (branch)")):i(null,u.value);if(b=u.raw[a[0]],a=a.slice(1),2===b.length){var l=new r(b);return o!==t.length-1?i(new Error("Additional nodes at end of proof (embeddedNode)")):n(l.key,a)!==l.key.length?i(new Error("Key length does not match with the proof one (embeddedNode)")):0!==(a=a.slice(l.key.length)).length?i(new Error("Key does not match with the proof one (embeddedNode)")):i(null,l.value)}f=b}else{if("extention"!==u.type&&"leaf"!==u.type)return i(new Error("Invalid node type"));if(n(u.key,a)!==u.key.length)return i(new Error("Key does not match with the proof one (extention|leaf)"));if(b=u.value,0===(a=a.slice(u.key.length)).length)return o!==t.length-1?i(new Error("Additional nodes at end of proof (extention|leaf)")):i(null,b);f=b}}i(new Error("Unexpected end of proof"))}},function(e,a){e.exports=function(e){return null!==e&&("object"==typeof e||"function"==typeof e)}},function(e,a){var t=Object.prototype.toString;e.exports=function(e){var a=t.call(e),r="[object Arguments]"===a;return r||(r="[object Array]"!==a&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),r}},function(e,a){var t=Object.prototype.hasOwnProperty,r=Object.prototype.toString;e.exports=function(e,a){if(!function(e){var a="function"==typeof e&&!(e instanceof RegExp)||"[object Function]"===r.call(e);return a||"undefined"==typeof window||(a=e===window.setTimeout||e===window.alert||e===window.confirm||e===window.prompt),a}(a))throw new TypeError("iterator must be a function");var c,n,i="string"==typeof e,f=e.length,o=arguments.length>2?arguments[2]:null;if(f===+f)for(c=0;c<f;c++)null===o?a(i?e.charAt(c):e[c],c,e):a.call(o,i?e.charAt(c):e[c],c,e);else for(n in e)t.call(e,n)&&(null===o?a(e[n],n,e):a.call(o,e[n],n,e))}},function(e,a,t){!function(){"use strict";var a,r=Object.prototype.hasOwnProperty,c=Object.prototype.toString,n=t(902),i=t(901),f=!{toString:null}.propertyIsEnumerable("toString"),o=function(){}.propertyIsEnumerable("prototype"),d=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];a=function(e){var a=null!==e&&"object"==typeof e,t="[object Function]"===c.call(e),s=i(e),b=[];if(!a&&!t&&!s)throw new TypeError("Object.keys called on a non-object");if(s)n(e,function(e){b.push(e)});else{var u,l=o&&t;for(u in e)l&&"prototype"===u||!r.call(e,u)||b.push(u)}if(f){var p=e.constructor,h=p&&p.prototype===e;n(d,function(a){h&&"constructor"===a||!r.call(e,a)||b.push(a)})}return b},e.exports=a}()},function(e,a,t){e.exports=Object.keys||t(903)},function(e,a,t){var r=t(904),c=t(900);e.exports=function(){for(var e={},a=0;a<arguments.length;a++){var t=arguments[a];if(c(t))for(var n=r(t),i=0;i<n.length;i++){var f=n[i];e[f]=t[f]}}return e}},function(e,a,t){e.exports=n;var r=t(334),c=t(17);function n(e){if(!(this instanceof n))return new n(e);r.call(this,e)}c.inherits=t(0),c.inherits(n,r),n.prototype._transform=function(e,a,t){t(null,e)}},function(e,a,t){var r=t(6);(a=e.exports=t(336)).Stream=r,a.Readable=a,a.Writable=t(335),a.Duplex=t(175),a.Transform=t(334),a.PassThrough=t(906),process.browser||"disable"!==process.env.READABLE_STREAM||(e.exports=t(6))},function(e,a,t){var r=t(6).Writable||t(907).Writable,c=t(1).inherits,n=t(905),i={type:"put",keyEncoding:"utf8",valueEncoding:"utf8"},f=["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le"],o=function(){var e={};return f.forEach(function(a){e[a]={valueEncoding:a}}),e}();function d(e,a){if(!(this instanceof d))return new d(e,a);r.call(this,{objectMode:!0}),this._options=n(i,function(e,a){var t="string"==typeof a;return!t&&a&&a.encoding&&!a.valueEncoding&&(a.valueEncoding=a.encoding),n(e&&e.options||{},t?o[a]||o[i.valueEncoding]:a)}(a,e)),this._db=a,this._buffer=[],this.writable=!0,this.readable=!1;var t=this;this.on("finish",function e(){if(t._buffer&&t._buffer.length)return t._flush(e);t.writable=!1,t.emit("close")})}c(d,r),d.prototype._write=function e(a,t,r){var c=this;if(!c._destroyed)return c._db.isOpen()?void(c._options.maxBufferLength&&c._buffer.length>c._options.maxBufferLength?c.once("_flush",r):(0===c._buffer.length&&process.nextTick(function(){c._flush()}),c._buffer.push(a),r())):c._db.once("ready",function(){e.call(c,a,t,r)})},d.prototype._flush=function(e){var a=this,t=a._buffer;if(!a._destroyed&&t){if(!a._db.isOpen())return a._db.on("ready",function(){a._flush(e)});a._buffer=[],a._db.batch(t.map(function(e){return{type:e.type||a._options.type,key:e.key,value:e.value,keyEncoding:e.keyEncoding||a._options.keyEncoding,valueEncoding:e.valueEncoding||e.encoding||a._options.valueEncoding}}),function(t){t?(a.writable=!1,a.emit("error",t)):(e&&e(),a.emit("_flush"))})}},d.prototype.toString=function(){return"LevelUP.WriteStream"},d.prototype.destroy=function(){this._destroyed||(this._buffer=null,this._destroyed=!0,this.writable=!1,this.emit("close"))},d.prototype.destroySoon=function(){this.end()},e.exports=function(e){return e.writeStream=e.createWriteStream=function(a){return new d(a,e)},e},e.exports.WriteStream=d},function(e,a,t){const r=t(179),c=t(349),n=t(177),i=t(1).inherits,f=t(343).Readable,o=t(908),d=t(61).callTogether;function s(e){this._scratch=null,e._checkpoints=[],Object.defineProperty(e,"isCheckpoint",{get:function(){return!!e._checkpoints.length}}),e.checkpoint=b,e.commit=u,e.revert=l,e._enterCpMode=p,e._exitCpMode=h,e.createScratchReadStream=g,e.copy=function(e){var a=e();return s(a),a._scratch=this._scratch,a}.bind(e,e.copy.bind(e))}function b(){var e=this.isCheckpoint;this._checkpoints.push(this.root),!e&&this.isCheckpoint&&this._enterCpMode()}function u(e){var a=this;e=d(e,a.sem.leave),a.sem.take(function(){if(!a.isCheckpoint)throw new Error("trying to commit when not checkpointed");a._checkpoints.pop(),a.isCheckpoint?e():a._exitCpMode(!0,e)})}function l(e){var a=this;e=d(e,a.sem.leave),a.sem.take(function(){!a.isCheckpoint||(a.root=a._checkpoints.pop(),a.isCheckpoint)?e():a._exitCpMode(!1,e)})}function p(){this._scratch=r("",{db:c}),this._getDBs=[this._scratch].concat(this._getDBs),this.__putDBs=this._putDBs,this._putDBs=[this._scratch],this._putRaw=this.putRaw,this.putRaw=m}function h(e,a){var t=this,r=this._scratch;this._scratch=null,this._getDBs=this._getDBs.slice(1),this._putDBs=this.__putDBs,this.putRaw=this._putRaw,e?n.map(this._putDBs,function(e,a){e.createWriteStream||(e=o(e)),t.createScratchReadStream(r).pipe(e.createWriteStream()).on("close",a)},a):a()}function m(e,a,t){n.each(this.__putDBs,function(t,r){t.put(e,a,{keyEncoding:"binary",valueEncoding:"binary"},r)},t)}function g(e){var a=this.copy();return e=e||this._scratch,a._getDBs=[e],a._scratch=e,new v(a)}function v(e){this.trie=e,this.next=null,f.call(this,{objectMode:!0})}e.exports=s,i(v,f),v.prototype._read=function(){var e=this;e._started||(e._started=!0,e.trie._findDbNodes(function(a,t,r,c){e.push({key:a,value:t.serialize()}),c()},function(){e.push(null)}))}},function(e,a){function t(e){this.maxPoolSize=e,this.currentPoolSize=0,this.queue=[]}e.exports=t,t.prototype.execute=function(e,a){var t=this;t.currentPoolSize<t.maxPoolSize?(t.currentPoolSize++,a(function(){if(t.currentPoolSize--,t.queue.length>0){t.queue.sort(function(e,a){return a.priority-e.priority});var e=t.queue.shift();t.execute(e.priority,e.task)}})):t.queue.push({priority:e,task:a})}},function(e,a,t){"use strict";e.exports=n;var r=t(337),c=t(17);function n(e){if(!(this instanceof n))return new n(e);r.call(this,e)}c.inherits=t(0),c.inherits(n,r),n.prototype._transform=function(e,a,t){t(null,e)}},function(e,a,t){e.exports=t(1).deprecate},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(1);function n(e,a,t){e.copy(a,t)}e.exports=function(){function e(){!function(e,a){if(!(e instanceof a))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var a={data:e,next:null};this.length>0?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 r.alloc(0);if(1===this.length)return this.head.data;for(var a=r.allocUnsafe(e>>>0),t=this.head,c=0;t;)n(t.data,a,c),c+=t.data.length,t=t.next;return a},e}(),c&&c.inspect&&c.inspect.custom&&(e.exports.prototype[c.inspect.custom]=function(){var e=c.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,a){var t={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==t.call(e)}},function(e,a,t){const r=t(343).Readable,c=t(176),n=t(1);function i(e){this.trie=e,this.next=null,r.call(this,{objectMode:!0})}e.exports=i,n.inherits(i,r),i.prototype._read=function(){var e=this;e._started||(e._started=!0,e.trie._findValueNodes(function(a,t,r,n){e.push({key:c.nibblesToBuffer(r),value:t.value}),n()},function(){e.push(null)}))}},function(e,a,t){!function(a){"use strict";var t=function(e){setTimeout(e,0)};"undefined"!=typeof process&&process&&"function"==typeof process.nextTick&&(t=process.nextTick),e.exports=function(e){var a={capacity:e||1,current:0,queue:[],firstHere:!1,take:function(){if(!1===a.firstHere){a.current++,a.firstHere=!0;var e=1}else e=0;var t={n:1};"function"==typeof arguments[0]?t.task=arguments[0]:t.n=arguments[0],arguments.length>=2&&("function"==typeof arguments[1]?t.task=arguments[1]:t.n=arguments[1]);var r=t.task;if(t.task=function(){r(a.leave)},a.current+t.n-e>a.capacity)return 1===e&&(a.current--,a.firstHere=!1),a.queue.push(t);a.current+=t.n-e,t.task(a.leave),1===e&&(a.firstHere=!1)},leave:function(e){if(e=e||1,a.current-=e,a.queue.length){var r=a.queue[0];r.n+a.current>a.capacity||(a.queue.shift(),a.current+=r.n,t(r.task))}else if(a.current<0)throw new Error("leave called too many times.")},available:function(e){return e=e||1,a.current+e<=a.capacity}};return a}}()},function(e,a){e.exports=setImmediate},function(e,a){function t(e){return void 0!==e&&""!==e}function r(e,a){return Object.hasOwnProperty.call(e,a)}function c(e,a){return Object.hasOwnProperty.call(e,a)&&a}a.compare=function(e,a){if(Buffer.isBuffer(e)){for(var t=Math.min(e.length,a.length),r=0;r<t;r++){var c=e[r]-a[r];if(c)return c}return e.length-a.length}return e<a?-1:e>a?1:0};var n=a.lowerBoundKey=function(e){return c(e,"gt")||c(e,"gte")||c(e,"min")||(e.reverse?c(e,"end"):c(e,"start"))||void 0},i=a.lowerBound=function(e,a){var t=n(e);return t?e[t]:a},f=a.lowerBoundInclusive=function(e){return!r(e,"gt")},o=a.upperBoundInclusive=function(e){return!r(e,"lt")},d=a.lowerBoundExclusive=function(e){return!f(e)},s=a.upperBoundExclusive=function(e){return!o(e)},b=a.upperBoundKey=function(e){return c(e,"lt")||c(e,"lte")||c(e,"max")||(e.reverse?c(e,"start"):c(e,"end"))||void 0},u=a.upperBound=function(e,a){var t=b(e);return t?e[t]:a};function l(e){return e}a.start=function(e,a){return e.reverse?u(e,a):i(e,a)},a.end=function(e,a){return e.reverse?i(e,a):u(e,a)},a.startInclusive=function(e){return e.reverse?o(e):f(e)},a.endInclusive=function(e){return e.reverse?f(e):o(e)},a.toLtgt=function(e,t,c,n,i){t=t||{},c=c||l;var f=arguments.length>3,o=a.lowerBoundKey(e),d=a.upperBoundKey(e);return o?"gt"===o?t.gt=c(e.gt,!1):t.gte=c(e[o],!1):f&&(t.gte=c(n,!1)),d?"lt"===d?t.lt=c(e.lt,!0):t.lte=c(e[d],!0):f&&(t.lte=c(i,!0)),null!=e.reverse&&(t.reverse=!!e.reverse),r(t,"max")&&delete t.max,r(t,"min")&&delete t.min,r(t,"start")&&delete t.start,r(t,"end")&&delete t.end,t},a.contains=function(e,r,c){c=c||a.compare;var n=i(e);if(t(n)&&((f=c(r,n))<0||0===f&&d(e)))return!1;var f,o=u(e);if(t(o)&&((f=c(r,o))>0||0===f&&s(e)))return!1;return!0},a.filter=function(e,t){return function(r){return a.contains(e,r,t)}}},function(e,a,t){var r=t(347);e.exports=function(e){return!(!e||"object"!=typeof e)&&Object.keys(r.prototype).filter(function(e){return"_"!=e[0]&&"approximateSize"!=e}).every(function(a){return"function"==typeof e[a]})}},function(e,a){var t;a=e.exports=W,t="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},a.SEMVER_SPEC_VERSION="2.0.0";var r=256,c=Number.MAX_SAFE_INTEGER||9007199254740991,n=a.re=[],i=a.src=[],f=0,o=f++;i[o]="0|[1-9]\\d*";var d=f++;i[d]="[0-9]+";var s=f++;i[s]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var b=f++;i[b]="("+i[o]+")\\.("+i[o]+")\\.("+i[o]+")";var u=f++;i[u]="("+i[d]+")\\.("+i[d]+")\\.("+i[d]+")";var l=f++;i[l]="(?:"+i[o]+"|"+i[s]+")";var p=f++;i[p]="(?:"+i[d]+"|"+i[s]+")";var h=f++;i[h]="(?:-("+i[l]+"(?:\\."+i[l]+")*))";var m=f++;i[m]="(?:-?("+i[p]+"(?:\\."+i[p]+")*))";var g=f++;i[g]="[0-9A-Za-z-]+";var v=f++;i[v]="(?:\\+("+i[g]+"(?:\\."+i[g]+")*))";var y=f++,_="v?"+i[b]+i[h]+"?"+i[v]+"?";i[y]="^"+_+"$";var w="[v=\\s]*"+i[u]+i[m]+"?"+i[v]+"?",A=f++;i[A]="^"+w+"$";var k=f++;i[k]="((?:<|>)?=?)";var x=f++;i[x]=i[d]+"|x|X|\\*";var E=f++;i[E]=i[o]+"|x|X|\\*";var S=f++;i[S]="[v=\\s]*("+i[E]+")(?:\\.("+i[E]+")(?:\\.("+i[E]+")(?:"+i[h]+")?"+i[v]+"?)?)?";var T=f++;i[T]="[v=\\s]*("+i[x]+")(?:\\.("+i[x]+")(?:\\.("+i[x]+")(?:"+i[m]+")?"+i[v]+"?)?)?";var j=f++;i[j]="^"+i[k]+"\\s*"+i[S]+"$";var C=f++;i[C]="^"+i[k]+"\\s*"+i[T]+"$";var R=f++;i[R]="(?:~>?)";var O=f++;i[O]="(\\s*)"+i[R]+"\\s+",n[O]=new RegExp(i[O],"g");var B=f++;i[B]="^"+i[R]+i[S]+"$";var M=f++;i[M]="^"+i[R]+i[T]+"$";var N=f++;i[N]="(?:\\^)";var I=f++;i[I]="(\\s*)"+i[N]+"\\s+",n[I]=new RegExp(i[I],"g");var P=f++;i[P]="^"+i[N]+i[S]+"$";var F=f++;i[F]="^"+i[N]+i[T]+"$";var L=f++;i[L]="^"+i[k]+"\\s*("+w+")$|^$";var D=f++;i[D]="^"+i[k]+"\\s*("+_+")$|^$";var z=f++;i[z]="(\\s*)"+i[k]+"\\s*("+w+"|"+i[S]+")",n[z]=new RegExp(i[z],"g");var q=f++;i[q]="^\\s*("+i[S]+")\\s+-\\s+("+i[S]+")\\s*$";var U=f++;i[U]="^\\s*("+i[T]+")\\s+-\\s+("+i[T]+")\\s*$";var H=f++;i[H]="(<|>)?=?\\s*\\*";for(var V=0;V<f;V++)t(V,i[V]),n[V]||(n[V]=new RegExp(i[V]));function G(e,a){if(e instanceof W)return e;if("string"!=typeof e)return null;if(e.length>r)return null;if(!(a?n[A]:n[y]).test(e))return null;try{return new W(e,a)}catch(e){return null}}function W(e,a){if(e instanceof W){if(e.loose===a)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>r)throw new TypeError("version is longer than "+r+" characters");if(!(this instanceof W))return new W(e,a);t("SemVer",e,a),this.loose=a;var i=e.trim().match(a?n[A]:n[y]);if(!i)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>c||this.major<0)throw new TypeError("Invalid major version");if(this.minor>c||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>c||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var a=+e;if(a>=0&&a<c)return a}return e}):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}a.parse=G,a.valid=function(e,a){var t=G(e,a);return t?t.version:null},a.clean=function(e,a){var t=G(e.trim().replace(/^[=v]+/,""),a);return t?t.version:null},a.SemVer=W,W.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},W.prototype.toString=function(){return this.version},W.prototype.compare=function(e){return t("SemVer.compare",this.version,this.loose,e),e instanceof W||(e=new W(e,this.loose)),this.compareMain(e)||this.comparePre(e)},W.prototype.compareMain=function(e){return e instanceof W||(e=new W(e,this.loose)),K(this.major,e.major)||K(this.minor,e.minor)||K(this.patch,e.patch)},W.prototype.comparePre=function(e){if(e instanceof W||(e=new W(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var a=0;do{var r=this.prerelease[a],c=e.prerelease[a];if(t("prerelease compare",a,r,c),void 0===r&&void 0===c)return 0;if(void 0===c)return 1;if(void 0===r)return-1;if(r!==c)return K(r,c)}while(++a)},W.prototype.inc=function(e,a){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",a);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",a);break;case"prepatch":this.prerelease.length=0,this.inc("patch",a),this.inc("pre",a);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",a),this.inc("pre",a);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var t=this.prerelease.length;--t>=0;)"number"==typeof this.prerelease[t]&&(this.prerelease[t]++,t=-2);-1===t&&this.prerelease.push(0)}a&&(this.prerelease[0]===a?isNaN(this.prerelease[1])&&(this.prerelease=[a,0]):this.prerelease=[a,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},a.inc=function(e,a,t,r){"string"==typeof t&&(r=t,t=void 0);try{return new W(e,t).inc(a,r).version}catch(e){return null}},a.diff=function(e,a){if(X(e,a))return null;var t=G(e),r=G(a);if(t.prerelease.length||r.prerelease.length){for(var c in t)if(("major"===c||"minor"===c||"patch"===c)&&t[c]!==r[c])return"pre"+c;return"prerelease"}for(var c in t)if(("major"===c||"minor"===c||"patch"===c)&&t[c]!==r[c])return c},a.compareIdentifiers=K;var Y=/^[0-9]+$/;function K(e,a){var t=Y.test(e),r=Y.test(a);return t&&r&&(e=+e,a=+a),t&&!r?-1:r&&!t?1:e<a?-1:e>a?1:0}function Q(e,a,t){return new W(e,t).compare(new W(a,t))}function Z(e,a,t){return Q(e,a,t)>0}function J(e,a,t){return Q(e,a,t)<0}function X(e,a,t){return 0===Q(e,a,t)}function $(e,a,t){return 0!==Q(e,a,t)}function ee(e,a,t){return Q(e,a,t)>=0}function ae(e,a,t){return Q(e,a,t)<=0}function te(e,a,t,r){var c;switch(a){case"===":"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),c=e===t;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof t&&(t=t.version),c=e!==t;break;case"":case"=":case"==":c=X(e,t,r);break;case"!=":c=$(e,t,r);break;case">":c=Z(e,t,r);break;case">=":c=ee(e,t,r);break;case"<":c=J(e,t,r);break;case"<=":c=ae(e,t,r);break;default:throw new TypeError("Invalid operator: "+a)}return c}function re(e,a){if(e instanceof re){if(e.loose===a)return e;e=e.value}if(!(this instanceof re))return new re(e,a);t("comparator",e,a),this.loose=a,this.parse(e),this.semver===ce?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}a.rcompareIdentifiers=function(e,a){return K(a,e)},a.major=function(e,a){return new W(e,a).major},a.minor=function(e,a){return new W(e,a).minor},a.patch=function(e,a){return new W(e,a).patch},a.compare=Q,a.compareLoose=function(e,a){return Q(e,a,!0)},a.rcompare=function(e,a,t){return Q(a,e,t)},a.sort=function(e,t){return e.sort(function(e,r){return a.compare(e,r,t)})},a.rsort=function(e,t){return e.sort(function(e,r){return a.rcompare(e,r,t)})},a.gt=Z,a.lt=J,a.eq=X,a.neq=$,a.gte=ee,a.lte=ae,a.cmp=te,a.Comparator=re;var ce={};function ne(e,a){if(e instanceof ne)return e.loose===a?e:new ne(e.raw,a);if(e instanceof re)return new ne(e.value,a);if(!(this instanceof ne))return new ne(e,a);if(this.loose=a,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function ie(e){return!e||"x"===e.toLowerCase()||"*"===e}function fe(e,a,t,r,c,n,i,f,o,d,s,b,u){return((a=ie(t)?"":ie(r)?">="+t+".0.0":ie(c)?">="+t+"."+r+".0":">="+a)+" "+(f=ie(o)?"":ie(d)?"<"+(+o+1)+".0.0":ie(s)?"<"+o+"."+(+d+1)+".0":b?"<="+o+"."+d+"."+s+"-"+b:"<="+f)).trim()}function oe(e,a){for(var r=0;r<e.length;r++)if(!e[r].test(a))return!1;if(a.prerelease.length){for(r=0;r<e.length;r++)if(t(e[r].semver),e[r].semver!==ce&&e[r].semver.prerelease.length>0){var c=e[r].semver;if(c.major===a.major&&c.minor===a.minor&&c.patch===a.patch)return!0}return!1}return!0}function de(e,a,t){try{a=new ne(a,t)}catch(e){return!1}return a.test(e)}function se(e,a,t,r){var c,n,i,f,o;switch(e=new W(e,r),a=new ne(a,r),t){case">":c=Z,n=ae,i=J,f=">",o=">=";break;case"<":c=J,n=ee,i=Z,f="<",o="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(de(e,a,r))return!1;for(var d=0;d<a.set.length;++d){var s=null,b=null;if(a.set[d].forEach(function(e){e.semver===ce&&(e=new re(">=0.0.0")),s=s||e,b=b||e,c(e.semver,s.semver,r)?s=e:i(e.semver,b.semver,r)&&(b=e)}),s.operator===f||s.operator===o)return!1;if((!b.operator||b.operator===f)&&n(e,b.semver))return!1;if(b.operator===o&&i(e,b.semver))return!1}return!0}re.prototype.parse=function(e){var a=this.loose?n[L]:n[D],t=e.match(a);if(!t)throw new TypeError("Invalid comparator: "+e);this.operator=t[1],"="===this.operator&&(this.operator=""),t[2]?this.semver=new W(t[2],this.loose):this.semver=ce},re.prototype.toString=function(){return this.value},re.prototype.test=function(e){return t("Comparator.test",e,this.loose),this.semver===ce||("string"==typeof e&&(e=new W(e,this.loose)),te(e,this.operator,this.semver,this.loose))},re.prototype.intersects=function(e,a){if(!(e instanceof re))throw new TypeError("a Comparator is required");var t;if(""===this.operator)return t=new ne(e.value,a),de(this.value,t,a);if(""===e.operator)return t=new ne(this.value,a),de(e.semver,t,a);var r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),c=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),n=this.semver.version===e.semver.version,i=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),f=te(this.semver,"<",e.semver,a)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),o=te(this.semver,">",e.semver,a)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||c||n&&i||f||o},a.Range=ne,ne.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},ne.prototype.toString=function(){return this.range},ne.prototype.parseRange=function(e){var a=this.loose;e=e.trim(),t("range",e,a);var r=a?n[U]:n[q];e=e.replace(r,fe),t("hyphen replace",e),e=e.replace(n[z],"$1$2$3"),t("comparator trim",e,n[z]),e=(e=(e=e.replace(n[O],"$1~")).replace(n[I],"$1^")).split(/\s+/).join(" ");var c=a?n[L]:n[D],i=e.split(" ").map(function(e){return function(e,a){return t("comp",e),e=function(e,a){return e.trim().split(/\s+/).map(function(e){return function(e,a){t("caret",e,a);var r=a?n[F]:n[P];return e.replace(r,function(a,r,c,n,i){var f;return t("caret",e,a,r,c,n,i),ie(r)?f="":ie(c)?f=">="+r+".0.0 <"+(+r+1)+".0.0":ie(n)?f="0"===r?">="+r+"."+c+".0 <"+r+"."+(+c+1)+".0":">="+r+"."+c+".0 <"+(+r+1)+".0.0":i?(t("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),f="0"===r?"0"===c?">="+r+"."+c+"."+n+i+" <"+r+"."+c+"."+(+n+1):">="+r+"."+c+"."+n+i+" <"+r+"."+(+c+1)+".0":">="+r+"."+c+"."+n+i+" <"+(+r+1)+".0.0"):(t("no pr"),f="0"===r?"0"===c?">="+r+"."+c+"."+n+" <"+r+"."+c+"."+(+n+1):">="+r+"."+c+"."+n+" <"+r+"."+(+c+1)+".0":">="+r+"."+c+"."+n+" <"+(+r+1)+".0.0"),t("caret return",f),f})}(e,a)}).join(" ")}(e,a),t("caret",e),e=function(e,a){return e.trim().split(/\s+/).map(function(e){return function(e,a){var r=a?n[M]:n[B];return e.replace(r,function(a,r,c,n,i){var f;return t("tilde",e,a,r,c,n,i),ie(r)?f="":ie(c)?f=">="+r+".0.0 <"+(+r+1)+".0.0":ie(n)?f=">="+r+"."+c+".0 <"+r+"."+(+c+1)+".0":i?(t("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),f=">="+r+"."+c+"."+n+i+" <"+r+"."+(+c+1)+".0"):f=">="+r+"."+c+"."+n+" <"+r+"."+(+c+1)+".0",t("tilde return",f),f})}(e,a)}).join(" ")}(e,a),t("tildes",e),e=function(e,a){return t("replaceXRanges",e,a),e.split(/\s+/).map(function(e){return function(e,a){e=e.trim();var r=a?n[C]:n[j];return e.replace(r,function(a,r,c,n,i,f){t("xRange",e,a,r,c,n,i,f);var o=ie(c),d=o||ie(n),s=d||ie(i),b=s;return"="===r&&b&&(r=""),o?a=">"===r||"<"===r?"<0.0.0":"*":r&&b?(d&&(n=0),s&&(i=0),">"===r?(r=">=",d?(c=+c+1,n=0,i=0):s&&(n=+n+1,i=0)):"<="===r&&(r="<",d?c=+c+1:n=+n+1),a=r+c+"."+n+"."+i):d?a=">="+c+".0.0 <"+(+c+1)+".0.0":s&&(a=">="+c+"."+n+".0 <"+c+"."+(+n+1)+".0"),t("xRange return",a),a})}(e,a)}).join(" ")}(e,a),t("xrange",e),e=function(e,a){return t("replaceStars",e,a),e.trim().replace(n[H],"")}(e,a),t("stars",e),e}(e,a)}).join(" ").split(/\s+/);return this.loose&&(i=i.filter(function(e){return!!e.match(c)})),i=i.map(function(e){return new re(e,a)})},ne.prototype.intersects=function(e,a){if(!(e instanceof ne))throw new TypeError("a Range is required");return this.set.some(function(t){return t.every(function(t){return e.set.some(function(e){return e.every(function(e){return t.intersects(e,a)})})})})},a.toComparators=function(e,a){return new ne(e,a).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})},ne.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new W(e,this.loose));for(var a=0;a<this.set.length;a++)if(oe(this.set[a],e))return!0;return!1},a.satisfies=de,a.maxSatisfying=function(e,a,t){var r=null,c=null;try{var n=new ne(a,t)}catch(e){return null}return e.forEach(function(e){n.test(e)&&(r&&-1!==c.compare(e)||(c=new W(r=e,t)))}),r},a.minSatisfying=function(e,a,t){var r=null,c=null;try{var n=new ne(a,t)}catch(e){return null}return e.forEach(function(e){n.test(e)&&(r&&1!==c.compare(e)||(c=new W(r=e,t)))}),r},a.validRange=function(e,a){try{return new ne(e,a).range||"*"}catch(e){return null}},a.ltr=function(e,a,t){return se(e,a,"<",t)},a.gtr=function(e,a,t){return se(e,a,">",t)},a.outside=se,a.prerelease=function(e,a){var t=G(e,a);return t&&t.prerelease.length?t.prerelease:null},a.intersects=function(e,a,t){return e=new ne(e,t),a=new ne(a,t),e.intersects(a)}},function(e){e.exports={_args:[["levelup@1.3.9","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"levelup@1.3.9",_id:"levelup@1.3.9",_inBundle:!1,_integrity:"sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",_location:"/ganache-core/levelup",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"levelup@1.3.9",name:"levelup",escapedName:"levelup",rawSpec:"1.3.9",saveSpec:null,fetchSpec:"1.3.9"},_requiredBy:["/ganache-core","/ganache-core/merkle-patricia-tree"],_resolved:"https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",_spec:"1.3.9",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",browser:{"./lib/leveldown.js":!1,leveldown:!1,"leveldown/package":!1,semver:!1},bugs:{url:"https://github.com/level/levelup/issues"},contributors:[{name:"Rod Vagg",email:"r@va.gg",url:"https://github.com/rvagg"},{name:"John Chesley",email:"john@chesl.es",url:"https://github.com/chesles/"},{name:"Jake Verbaten",email:"raynos2@gmail.com",url:"https://github.com/raynos"},{name:"Dominic Tarr",email:"dominic.tarr@gmail.com",url:"https://github.com/dominictarr"},{name:"Max Ogden",email:"max@maxogden.com",url:"https://github.com/maxogden"},{name:"Lars-Magnus Skog",email:"ralphtheninja@riseup.net",url:"https://github.com/ralphtheninja"},{name:"David Björklund",email:"david.bjorklund@gmail.com",url:"https://github.com/kesla"},{name:"Julian Gruber",email:"julian@juliangruber.com",url:"https://github.com/juliangruber"},{name:"Paolo Fragomeni",email:"paolo@async.ly",url:"https://github.com/0x00a"},{name:"Anton Whalley",email:"anton.whalley@nearform.com",url:"https://github.com/No9"},{name:"Matteo Collina",email:"matteo.collina@gmail.com",url:"https://github.com/mcollina"},{name:"Pedro Teixeira",email:"pedro.teixeira@gmail.com",url:"https://github.com/pgte"},{name:"James Halliday",email:"mail@substack.net",url:"https://github.com/substack"},{name:"Jarrett Cruger",email:"jcrugzz@gmail.com",url:"https://github.com/jcrugzz"}],dependencies:{"deferred-leveldown":"~1.2.1","level-codec":"~7.0.0","level-errors":"~1.0.3","level-iterator-stream":"~1.3.0",prr:"~1.0.1",semver:"~5.4.1",xtend:"~4.0.0"},description:"Fast & simple storage - a Node.js-style LevelDB wrapper",devDependencies:{after:"^0.8.2",async:"^2.5.0",bl:"^1.2.1",browserify:"^14.3.0",bustermove:"~1.0.0",delayed:"~1.0.1",faucet:"~0.0.1",leveldown:"^1.1.0",memdown:"^1.2.4","msgpack-js":"~0.3.0",referee:"~1.2.0",rimraf:"^2.6.1","safe-buffer":"^5.1.0","slow-stream":"0.0.4",standard:"^10.0.2",tape:"^4.7.0"},homepage:"https://github.com/level/levelup",keywords:["leveldb","stream","database","db","store","storage","json"],license:"MIT",main:"lib/levelup.js",name:"levelup",repository:{type:"git",url:"git+https://github.com/level/levelup.git"},scripts:{test:"standard && tape test/*-test.js | faucet"},version:"1.3.9"}},function(e,a,t){var r,c=t(86).LevelUPError,n=t(1).format;function i(e){return new c(n("Failed to require LevelDOWN (%s). Try `npm install leveldown` if it's missing",e.message))}e.exports=function(){if(r)return r;var e,a=t(921).devDependencies.leveldown;try{e=t(!function(){var e=new Error("Cannot find module 'leveldown/package.json'");throw e.code="MODULE_NOT_FOUND",e}()).version}catch(e){throw i(e)}if(!t(920).satisfies(e,a))throw new c("Installed version of LevelDOWN ("+e+") does not match required version ("+a+")");try{return r=t(!function(){var e=new Error("Cannot find module 'leveldown'");throw e.code="MODULE_NOT_FOUND",e}())}catch(e){throw i(e)}}},function(e,a){a.utf8=a["utf-8"]={encode:function(e){return r(e)?e:String(e)},decode:function(e){return"string"==typeof e?e:String(e)},buffer:!1,type:"utf8"},a.json={encode:JSON.stringify,decode:JSON.parse,buffer:!1,type:"json"},a.binary={encode:function(e){return r(e)?e:new Buffer(e)},decode:t,buffer:!0,type:"binary"},a.none={encode:t,decode:t,buffer:!1,type:"id"},a.id=a.none;function t(e){return e}function r(e){return void 0===e||null===e||Buffer.isBuffer(e)}["hex","ascii","base64","ucs2","ucs-2","utf16le","utf-16le"].forEach(function(e){a[e]={encode:function(a){return r(a)?a:new Buffer(a,e)},decode:function(a){return a.toString(e)},buffer:!0,type:e}})},function(e,a,t){var r=t(923);function c(e){this.opts=e||{},this.encodings=r}e.exports=c,c.prototype._encoding=function(e){return"string"==typeof e&&(e=r[e]),e||(e=r.id),e},c.prototype._keyEncoding=function(e,a){return this._encoding(a&&a.keyEncoding||e&&e.keyEncoding||this.opts.keyEncoding)},c.prototype._valueEncoding=function(e,a){return this._encoding(a&&(a.valueEncoding||a.encoding)||e&&(e.valueEncoding||e.encoding)||this.opts.valueEncoding||this.opts.encoding)},c.prototype.encodeKey=function(e,a,t){return this._keyEncoding(a,t).encode(e)},c.prototype.encodeValue=function(e,a,t){return this._valueEncoding(a,t).encode(e)},c.prototype.decodeKey=function(e,a){return this._keyEncoding(a).decode(e)},c.prototype.decodeValue=function(e,a){return this._valueEncoding(a).decode(e)},c.prototype.encodeBatch=function(e,a){var t=this;return e.map(function(e){var r={type:e.type,key:t.encodeKey(e.key,a,e)};return t.keyAsBuffer(a,e)&&(r.keyEncoding="binary"),e.prefix&&(r.prefix=e.prefix),"value"in e&&(r.value=t.encodeValue(e.value,a,e),t.valueAsBuffer(a,e)&&(r.valueEncoding="binary")),r})};var n=["lt","gt","lte","gte","start","end"];c.prototype.encodeLtgt=function(e){var a=this,t={};return Object.keys(e).forEach(function(r){t[r]=n.indexOf(r)>-1?a.encodeKey(e[r],e):e[r]}),t},c.prototype.createStreamDecoder=function(e){var a=this;return e.keys&&e.values?function(t,r){return{key:a.decodeKey(t,e),value:a.decodeValue(r,e)}}:e.keys?function(t){return a.decodeKey(t,e)}:e.values?function(t,r){return a.decodeValue(r,e)}:function(){}},c.prototype.keyAsBuffer=function(e){return this._keyEncoding(e).buffer},c.prototype.valueAsBuffer=function(e){return this._valueEncoding(e).buffer}},function(e,a,t){var r=t(350),c=t(86).WriteError,n=r.getOptions,i=r.dispatchError;function f(e,a){this._levelup=e,this._codec=a,this.batch=e.db.batch(),this.ops=[],this.length=0}f.prototype.put=function(e,a,t){t=n(t);var r=this._codec.encodeKey(e,t),i=this._codec.encodeValue(a,t);try{this.batch.put(r,i)}catch(e){throw new c(e)}return this.ops.push({type:"put",key:r,value:i}),this.length++,this},f.prototype.del=function(e,a){a=n(a);var t=this._codec.encodeKey(e,a);try{this.batch.del(t)}catch(e){throw new c(e)}return this.ops.push({type:"del",key:t}),this.length++,this},f.prototype.clear=function(){try{this.batch.clear()}catch(e){throw new c(e)}return this.ops=[],this.length=0,this},f.prototype.write=function(e){var a=this._levelup,t=this.ops;try{this.batch.write(function(r){if(r)return i(a,new c(r),e);a.emit("batch",t),e&&e()})}catch(e){throw new c(e)}},e.exports=f},function(e,a,t){var r=t(359);function c(e,a,t){a&&"string"!=typeof a&&(a=a.message||a.name),r(this,{type:e,name:e,cause:"string"!=typeof a?a:t,message:a},"ewr")}function n(e,a){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),c.call(this,"CustomError",e,a)}n.prototype=new Error,e.exports=function(e){var a=function(a,t){return function(e,a,t){var r=function(t,n){c.call(this,a,t,n),"FilesystemError"==a&&(this.code=this.cause.code,this.path=this.cause.path,this.errno=this.cause.errno,this.message=(e.errno[this.cause.errno]?e.errno[this.cause.errno].description:this.cause.message)+(this.cause.path?" ["+this.cause.path+"]":"")),Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,r)};return r.prototype=t?new t:new n,r}(e,a,t)};return{CustomError:n,FilesystemError:a("FilesystemError"),createError:a}}},function(e,a,t){e.exports=n;var r=t(352),c=t(17);function n(e){if(!(this instanceof n))return new n(e);r.call(this,e)}c.inherits=t(0),c.inherits(n,r),n.prototype._transform=function(e,a,t){t(null,e)}},function(e,a,t){(a=e.exports=t(354)).Stream=t(6),a.Readable=a,a.Writable=t(353),a.Duplex=t(64),a.Transform=t(352),a.PassThrough=t(927),process.browser||"disable"!==process.env.READABLE_STREAM||(e.exports=t(6))},function(e,a,t){var r=t(0),c=t(928).Readable,n=t(39),i=t(86).EncodingError;function f(e,a){if(!(this instanceof f))return new f(e,a);c.call(this,n(a,{objectMode:!0})),this._iterator=e,this._destroyed=!1,this._decoder=null,a&&a.decoder&&(this._decoder=a.decoder),this.on("end",this._cleanup.bind(this))}e.exports=f,r(f,c),f.prototype._read=function(){var e=this;this._destroyed||this._iterator.next(function(a,t,r){if(!e._destroyed){if(a)return e.emit("error",a);if(void 0===t&&void 0===r)e.push(null);else{if(!e._decoder)return e.push({key:t,value:r});try{r=e._decoder(t,r)}catch(a){return e.emit("error",new i(a)),void e.push(null)}e.push(r)}}})},f.prototype.destroy=f.prototype._cleanup=function(){var e=this;this._destroyed||(this._destroyed=!0,this._iterator.end(function(a){if(a)return e.emit("error",a);e.emit("close")}))}},function(e,a,t){var r=t(1),c=t(358).AbstractIterator;function n(e){c.call(this,e),this._options=e,this._iterator=null,this._operations=[]}r.inherits(n,c),n.prototype.setDb=function(e){var a=this._iterator=e.iterator(this._options);this._operations.forEach(function(e){a[e.method].apply(a,e.args)})},n.prototype._operation=function(e,a){if(this._iterator)return this._iterator[e].apply(this._iterator,a);this._operations.push({method:e,args:a})},"next end".split(" ").forEach(function(e){n.prototype["_"+e]=function(){this._operation(e,arguments)}}),e.exports=n},function(e,a,t){var r=t(357);e.exports=function(e){return!(!e||"object"!=typeof e)&&Object.keys(r.prototype).filter(function(e){return"_"!=e[0]&&"approximateSize"!=e}).every(function(a){return"function"==typeof e[a]})}},function(e,a,t){var r=t(1),c=t(358).AbstractLevelDOWN,n=t(930);function i(e){c.call(this,"string"==typeof e?e:""),this._db=void 0,this._operations=[],this._iterators=[]}r.inherits(i,c),i.prototype.setDb=function(e){this._db=e,this._operations.forEach(function(a){e[a.method].apply(e,a.args)}),this._iterators.forEach(function(a){a.setDb(e)})},i.prototype._open=function(e,a){return process.nextTick(a)},i.prototype._operation=function(e,a){if(this._db)return this._db[e].apply(this._db,a);this._operations.push({method:e,args:a})},"put get del batch approximateSize".split(" ").forEach(function(e){i.prototype["_"+e]=function(){this._operation(e,arguments)}}),i.prototype._isBuffer=function(e){return Buffer.isBuffer(e)},i.prototype._iterator=function(e){if(this._db)return this._db.iterator.apply(this._db,arguments);var a=new n(e);return this._iterators.push(a),a},e.exports=i,e.exports.DeferredIterator=n},function(e,a,t){const r=t(11),c=t(179),n=t(349),i=t(177),f=t(52),o=t(3),d=t(916),s=t(176),b=t(915),u=t(910),l=t(61).matchingNibbleLength,p=t(61).doKeysMatch,h=t(61).callTogether,m=t(61).asyncFirstSeries;function g(e,a){var t=this;this.EMPTY_TRIE_ROOT=o.SHA3_RLP,this.sem=d(1),this.db=e||c("",{db:n}),this._getDBs=[this.db],this._putDBs=[this.db],Object.defineProperty(this,"root",{set:function(e){e?(e=o.toBuffer(e),r(32===e.length,"Invalid root length. Roots are 32 bytes")):e=t.EMPTY_TRIE_ROOT,this._root=e},get:function(){return this._root}}),this.root=a}e.exports=g,g.prototype.get=function(e,a){e=o.toBuffer(e),this.findPath(e,function(e,t,r,c){var n=null;t&&0===r.length&&(n=t.value),a(e,n)})},g.prototype.put=function(e,a,t){var r=this;e=o.toBuffer(e),(a=o.toBuffer(a))&&""!==a.toString()?(t=h(t,r.sem.leave),r.sem.take(function(){r.root.toString("hex")!==o.SHA3_RLP.toString("hex")?r.findPath(e,function(c,n,i,f){if(c)return t(c);r._updateNode(e,a,i,f,t)}):r._createInitialNode(e,a,t)})):r.del(e,t)},g.prototype.del=function(e,a){var t=this;e=o.toBuffer(e),a=h(a,t.sem.leave),t.sem.take(function(){t.findPath(e,function(r,c,n,i){if(r)return a(r);c?t._deleteNode(e,i,a):a()})})},g.prototype.getRaw=function(e,a){e=o.toBuffer(e),m(this._getDBs,function(a,t){a.get(e,{keyEncoding:"binary",valueEncoding:"binary"},function(e,a){t(null,e||!a?null:a)})},a)},g.prototype._lookupNode=function(e,a){s.isRawNode(e)?a(new s(e)):this.getRaw(e,function(e,t){if(e)throw e;t&&(t=new s(f.decode(t))),a(t)})},g.prototype._putRaw=function(e,a,t){i.each(this._putDBs,function(t,r){t.put(e,a,{keyEncoding:"binary",valueEncoding:"binary"},r)},t)},g.prototype.putRaw=g.prototype._putRaw,g.prototype.delRaw=function(e,a){i.each(this._putDBs,function(a,t){a.del(e,{keyEncoding:"binary"},t)},a)},g.prototype._putNode=function(e,a){var t=e.hash(),r=e.serialize();this._putRaw(t,r,a)},g.prototype._batchNodes=function(e,a){i.each(this._putDBs,function(a,t){a.batch(e,{keyEncoding:"binary",valueEncoding:"binary"},t)},a)},g.prototype.findPath=function(e,a){var t=this.root,r=[];e=s.stringToNibbles(e),this._walkTrie(t,function(a,t,c,n){var i=t.key||[],f=e.slice(l(c,e)),o=l(f,i);if(r.push(t),"branch"===t.type)if(0===f.length)n.return(null,t,[],r);else{var d=f[0],s=t.getValue(d);s?n.only(d):n.return(null,null,f,r)}else"leaf"===t.type?p(f,i)?n.return(null,t,[],r):n.return(null,null,f,r):"extention"===t.type&&(o!==i.length?n.return(null,null,f,r):n.next())},a)},g.prototype._findNode=function(e,a,t,r){this.findPath(e,function(){r.apply(null,arguments)})},g.prototype._findValueNodes=function(e,a){this._walkTrie(this.root,function(a,t,r,c){var n=r;t.key&&(n=r.concat(t.key)),"leaf"===t.type?e(a,t,n,c.next):"branch"===t.type&&t.value?e(a,t,n,c.next):c.next()},a)},g.prototype._findDbNodes=function(e,a){this._walkTrie(this.root,function(a,t,r,c){s.isRawNode(a)?c.next():e(a,t,r,c.next)},a)},g.prototype._updateNode=function(e,a,t,r,c){var n=[],i=r.pop();e=s.stringToNibbles(e);var f=!1;if("leaf"===i.type){for(var o=0,d=0;d<r.length;d++){var b=r[d];"branch"===b.type?o++:o+=b.key.length}l(i.key,e.slice(o))===i.key.length&&0===t.length&&(f=!0)}if(f)i.value=a,r.push(i);else if("branch"===i.type)if(r.push(i),0!==t){t.shift();var u=new s("leaf",t,a);r.push(u)}else i.value=a;else{var p=i.key,h=l(p,t),m=new s("branch");if(0!==h){var g=i.key.slice(0,h),v=new s("extention",g,a);r.push(v),p.splice(0,h),t.splice(0,h)}if(r.push(m),0!==p.length){var y=p.shift();if(0!==p.length||"leaf"===i.type){i.key=p;var _=this._formatNode(i,!1,n);m.setValue(y,_)}else this._formatNode(i,!1,!0,n),m.setValue(y,i.value)}else m.value=i.value;if(0!==t.length){t.shift();var w=new s("leaf",t,a);r.push(w)}else m.value=a}this._saveStack(e,r,n,c)},g.prototype._walkTrie=function(e,a,t){var r=this;e=e||r.root,t=t||function(){};var c=!1,n=[];if(e.toString("hex")===o.SHA3_RLP.toString("hex"))return t();r._lookupNode(e,function(o){!function e(t,o,d,s){if(!o)return s();if(c)return s();var b=!1;d=d||[];var u={stop:function(){b=!0,s()},return:function(){c=!0,n=arguments,s()},next:function(){if(c)return s();if(b)return s();var a=o.getChildren();i.forEachOf(a,function(a,t,c){var n=a[0],i=a[1],o=d.concat(n),s=o.length;f.execute(s,function(a){r._lookupNode(i,function(t){a(),e(i,t,o,c)})})},s)},only:function(a){var t=o.getValue(a),c=d.slice();c.push(a);var n=c.length;f.execute(n,function(a){r._lookupNode(t,function(r){a(),e(t,r,c,s)})})}};a(t,o,d,u)}(e,o,null,function(e){if(e)return t(e);t.apply(null,n)})});var f=new u(500)},g.prototype._saveStack=function(e,a,t,r){for(var c;a.length;){var n=a.pop();if("leaf"===n.type)e.splice(e.length-n.key.length);else if("extention"===n.type)e.splice(e.length-n.key.length),c&&(n.value=c);else if("branch"===n.type&&c){var i=e.pop();n.setValue(i,c)}c=this._formatNode(n,0===a.length,t)}c&&(this.root=c),this._batchNodes(t,r)},g.prototype._deleteNode=function(e,a,t){var r=a.pop(),c=a.pop(),n=[],i=this;if(Array.isArray(e)||(e=s.stringToNibbles(e)),c){if("branch"===r.type)r.value=null;else{var f=r.key;e.splice(e.length-f.length),this._formatNode(r,!1,!0,n),c.setValue(e.pop(),null),r=c,c=a.pop()}var o=[];if(r.raw.forEach(function(e,a){var t=r.getValue(a);t&&o.push([a,t])}),1===o.length){var d=o[0][1],b=o[0][0];this._lookupNode(d,function(r){e=function(e,a,t,r,c){var n=t.key;if(r&&"branch"!==r.type){var i=r.key;"branch"===t.type?(i.push(a),e.push(a),r.key=i,c.push(r)):(n.unshift(a),e=e.concat(n),i=i.concat(n),t.key=i),c.push(t)}else{if(r&&c.push(r),"branch"===t.type){var f=new s("extention",[a],null);c.push(f),e.push(a)}else n.unshift(a),t.key=n,n.unshift(0),n.unshift(e.length),e.splice.apply(e,n);c.push(t)}return e}(e,b,r,c,a),i._saveStack(e,a,n,t)})}else c&&a.push(c),a.push(r),i._saveStack(e,a,n,t)}else this.root=this.EMPTY_TRIE_ROOT,t()},g.prototype._createInitialNode=function(e,a,t){var r=new s("leaf",e,a);this.root=r.hash(),this._putNode(r,t)},g.prototype._formatNode=function(e,a,t,r){3===arguments.length&&(r=t,t=!1);var c=e.serialize();if(c.length>=32||a){var n=e.hash();return t&&this.isCheckpoint?r.push({type:"del",key:n}):r.push({type:"put",key:n,value:c}),n}return e.raw},g.prototype.createReadStream=function(){return new b(this)},g.prototype.copy=function(){return new g(this.db,this.root)},g.prototype.batch=function(e,a){var t=this;i.eachSeries(e,function(e,a){"put"===e.type?t.put(e.key,e.value,a):"del"===e.type?t.del(e.key,a):a()},a)},g.prototype.checkRoot=function(e,a){e=o.toBuffer(e),this._lookupNode(e,function(e){a(null,!!e)})}},function(e,a){!function(a,t){"use strict";var r=void 0!==e;r&&(a=global).JS_SHA3_TEST&&(a.navigator={userAgent:"Chrome"});var c=(a.JS_SHA3_TEST||!r)&&-1!=navigator.userAgent.indexOf("Chrome"),n="0123456789abcdef".split(""),i=[1,256,65536,16777216],f=[6,1536,393216,100663296],o=[0,8,16,24],d=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],s=[],b=[],u=function(e){return y(e,224,i)},l=function(e){return y(e,256,i)},p=function(e){return y(e,384,i)},h=function(e){return y(e,224,f)},m=function(e){return y(e,256,f)},g=function(e){return y(e,384,f)},v=function(e){return y(e,512,f)},y=function(e,t,r){var f="string"!=typeof e;f&&e.constructor==a.ArrayBuffer&&(e=new Uint8Array(e)),void 0===t&&(t=512,r=i);var u,l,p,h,m,g,v,y,_,w,A,k,x,E,S,T,j,C,R,O,B,M,N,I,P,F,L,D,z,q,U,H,V,G,W,Y,K,Q,Z,J,X,$,ee,ae,te,re,ce,ne,ie,fe,oe,de,se,be,ue,le,pe,he,me,ge,ve,ye,_e,we,Ae,ke,xe=!1,Ee=0,Se=0,Te=e.length,je=(1600-2*t)/32,Ce=4*je;for(h=0;h<50;++h)b[h]=0;u=0;do{for(s[0]=u,h=1;h<je+1;++h)s[h]=0;if(f)for(h=Se;Ee<Te&&h<Ce;++Ee)s[h>>2]|=e[Ee]<<o[3&h++];else for(h=Se;Ee<Te&&h<Ce;++Ee)(l=e.charCodeAt(Ee))<128?s[h>>2]|=l<<o[3&h++]:l<2048?(s[h>>2]|=(192|l>>6)<<o[3&h++],s[h>>2]|=(128|63&l)<<o[3&h++]):l<55296||l>=57344?(s[h>>2]|=(224|l>>12)<<o[3&h++],s[h>>2]|=(128|l>>6&63)<<o[3&h++],s[h>>2]|=(128|63&l)<<o[3&h++]):(l=65536+((1023&l)<<10|1023&e.charCodeAt(++Ee)),s[h>>2]|=(240|l>>18)<<o[3&h++],s[h>>2]|=(128|l>>12&63)<<o[3&h++],s[h>>2]|=(128|l>>6&63)<<o[3&h++],s[h>>2]|=(128|63&l)<<o[3&h++]);for(Se=h-Ce,Ee==Te&&(s[h>>2]|=r[3&h],++Ee),u=s[je],Ee>Te&&h<Ce&&(s[je-1]|=2147483648,xe=!0),h=0;h<je;++h)b[h]^=s[h];for(p=0;p<48;p+=2)v=b[0]^b[10]^b[20]^b[30]^b[40],y=b[1]^b[11]^b[21]^b[31]^b[41],_=b[2]^b[12]^b[22]^b[32]^b[42],w=b[3]^b[13]^b[23]^b[33]^b[43],A=b[4]^b[14]^b[24]^b[34]^b[44],k=b[5]^b[15]^b[25]^b[35]^b[45],x=b[6]^b[16]^b[26]^b[36]^b[46],E=b[7]^b[17]^b[27]^b[37]^b[47],m=(S=b[8]^b[18]^b[28]^b[38]^b[48])^(_<<1|w>>>31),g=(T=b[9]^b[19]^b[29]^b[39]^b[49])^(w<<1|_>>>31),b[0]^=m,b[1]^=g,b[10]^=m,b[11]^=g,b[20]^=m,b[21]^=g,b[30]^=m,b[31]^=g,b[40]^=m,b[41]^=g,m=v^(A<<1|k>>>31),g=y^(k<<1|A>>>31),b[2]^=m,b[3]^=g,b[12]^=m,b[13]^=g,b[22]^=m,b[23]^=g,b[32]^=m,b[33]^=g,b[42]^=m,b[43]^=g,m=_^(x<<1|E>>>31),g=w^(E<<1|x>>>31),b[4]^=m,b[5]^=g,b[14]^=m,b[15]^=g,b[24]^=m,b[25]^=g,b[34]^=m,b[35]^=g,b[44]^=m,b[45]^=g,m=A^(S<<1|T>>>31),g=k^(T<<1|S>>>31),b[6]^=m,b[7]^=g,b[16]^=m,b[17]^=g,b[26]^=m,b[27]^=g,b[36]^=m,b[37]^=g,b[46]^=m,b[47]^=g,m=x^(v<<1|y>>>31),g=E^(y<<1|v>>>31),b[8]^=m,b[9]^=g,b[18]^=m,b[19]^=g,b[28]^=m,b[29]^=g,b[38]^=m,b[39]^=g,b[48]^=m,b[49]^=g,j=b[0],C=b[1],ie=b[11]<<4|b[10]>>>28,fe=b[10]<<4|b[11]>>>28,U=b[20]<<3|b[21]>>>29,H=b[21]<<3|b[20]>>>29,_e=b[31]<<9|b[30]>>>23,we=b[30]<<9|b[31]>>>23,te=b[40]<<18|b[41]>>>14,re=b[41]<<18|b[40]>>>14,K=b[2]<<1|b[3]>>>31,Q=b[3]<<1|b[2]>>>31,R=b[13]<<12|b[12]>>>20,O=b[12]<<12|b[13]>>>20,oe=b[22]<<10|b[23]>>>22,de=b[23]<<10|b[22]>>>22,V=b[33]<<13|b[32]>>>19,G=b[32]<<13|b[33]>>>19,Ae=b[42]<<2|b[43]>>>30,ke=b[43]<<2|b[42]>>>30,pe=b[5]<<30|b[4]>>>2,he=b[4]<<30|b[5]>>>2,Z=b[14]<<6|b[15]>>>26,J=b[15]<<6|b[14]>>>26,B=b[25]<<11|b[24]>>>21,M=b[24]<<11|b[25]>>>21,se=b[34]<<15|b[35]>>>17,be=b[35]<<15|b[34]>>>17,W=b[45]<<29|b[44]>>>3,Y=b[44]<<29|b[45]>>>3,L=b[6]<<28|b[7]>>>4,D=b[7]<<28|b[6]>>>4,me=b[17]<<23|b[16]>>>9,ge=b[16]<<23|b[17]>>>9,X=b[26]<<25|b[27]>>>7,$=b[27]<<25|b[26]>>>7,N=b[36]<<21|b[37]>>>11,I=b[37]<<21|b[36]>>>11,ue=b[47]<<24|b[46]>>>8,le=b[46]<<24|b[47]>>>8,ce=b[8]<<27|b[9]>>>5,ne=b[9]<<27|b[8]>>>5,z=b[18]<<20|b[19]>>>12,q=b[19]<<20|b[18]>>>12,ve=b[29]<<7|b[28]>>>25,ye=b[28]<<7|b[29]>>>25,ee=b[38]<<8|b[39]>>>24,ae=b[39]<<8|b[38]>>>24,P=b[48]<<14|b[49]>>>18,F=b[49]<<14|b[48]>>>18,b[0]=j^~R&B,b[1]=C^~O&M,b[10]=L^~z&U,b[11]=D^~q&H,b[20]=K^~Z&X,b[21]=Q^~J&$,b[30]=ce^~ie&oe,b[31]=ne^~fe&de,b[40]=pe^~me&ve,b[41]=he^~ge&ye,b[2]=R^~B&N,b[3]=O^~M&I,b[12]=z^~U&V,b[13]=q^~H&G,b[22]=Z^~X&ee,b[23]=J^~$&ae,b[32]=ie^~oe&se,b[33]=fe^~de&be,b[42]=me^~ve&_e,b[43]=ge^~ye&we,b[4]=B^~N&P,b[5]=M^~I&F,b[14]=U^~V&W,b[15]=H^~G&Y,b[24]=X^~ee&te,b[25]=$^~ae&re,b[34]=oe^~se&ue,b[35]=de^~be&le,b[44]=ve^~_e&Ae,b[45]=ye^~we&ke,b[6]=N^~P&j,b[7]=I^~F&C,b[16]=V^~W&L,b[17]=G^~Y&D,b[26]=ee^~te&K,b[27]=ae^~re&Q,b[36]=se^~ue&ce,b[37]=be^~le&ne,b[46]=_e^~Ae&pe,b[47]=we^~ke&he,b[8]=P^~j&R,b[9]=F^~C&O,b[18]=W^~L&z,b[19]=Y^~D&q,b[28]=te^~K&Z,b[29]=re^~Q&J,b[38]=ue^~ce&ie,b[39]=le^~ne&fe,b[48]=Ae^~pe&me,b[49]=ke^~he&ge,b[0]^=d[p],b[1]^=d[p+1]}while(!xe);var Re="";if(c)j=b[0],C=b[1],R=b[2],O=b[3],B=b[4],M=b[5],N=b[6],I=b[7],P=b[8],F=b[9],L=b[10],D=b[11],z=b[12],q=b[13],U=b[14],H=b[15],Re+=n[j>>4&15]+n[15&j]+n[j>>12&15]+n[j>>8&15]+n[j>>20&15]+n[j>>16&15]+n[j>>28&15]+n[j>>24&15]+n[C>>4&15]+n[15&C]+n[C>>12&15]+n[C>>8&15]+n[C>>20&15]+n[C>>16&15]+n[C>>28&15]+n[C>>24&15]+n[R>>4&15]+n[15&R]+n[R>>12&15]+n[R>>8&15]+n[R>>20&15]+n[R>>16&15]+n[R>>28&15]+n[R>>24&15]+n[O>>4&15]+n[15&O]+n[O>>12&15]+n[O>>8&15]+n[O>>20&15]+n[O>>16&15]+n[O>>28&15]+n[O>>24&15]+n[B>>4&15]+n[15&B]+n[B>>12&15]+n[B>>8&15]+n[B>>20&15]+n[B>>16&15]+n[B>>28&15]+n[B>>24&15]+n[M>>4&15]+n[15&M]+n[M>>12&15]+n[M>>8&15]+n[M>>20&15]+n[M>>16&15]+n[M>>28&15]+n[M>>24&15]+n[N>>4&15]+n[15&N]+n[N>>12&15]+n[N>>8&15]+n[N>>20&15]+n[N>>16&15]+n[N>>28&15]+n[N>>24&15],t>=256&&(Re+=n[I>>4&15]+n[15&I]+n[I>>12&15]+n[I>>8&15]+n[I>>20&15]+n[I>>16&15]+n[I>>28&15]+n[I>>24&15]),t>=384&&(Re+=n[P>>4&15]+n[15&P]+n[P>>12&15]+n[P>>8&15]+n[P>>20&15]+n[P>>16&15]+n[P>>28&15]+n[P>>24&15]+n[F>>4&15]+n[15&F]+n[F>>12&15]+n[F>>8&15]+n[F>>20&15]+n[F>>16&15]+n[F>>28&15]+n[F>>24&15]+n[L>>4&15]+n[15&L]+n[L>>12&15]+n[L>>8&15]+n[L>>20&15]+n[L>>16&15]+n[L>>28&15]+n[L>>24&15]+n[D>>4&15]+n[15&D]+n[D>>12&15]+n[D>>8&15]+n[D>>20&15]+n[D>>16&15]+n[D>>28&15]+n[D>>24&15]),512==t&&(Re+=n[z>>4&15]+n[15&z]+n[z>>12&15]+n[z>>8&15]+n[z>>20&15]+n[z>>16&15]+n[z>>28&15]+n[z>>24&15]+n[q>>4&15]+n[15&q]+n[q>>12&15]+n[q>>8&15]+n[q>>20&15]+n[q>>16&15]+n[q>>28&15]+n[q>>24&15]+n[U>>4&15]+n[15&U]+n[U>>12&15]+n[U>>8&15]+n[U>>20&15]+n[U>>16&15]+n[U>>28&15]+n[U>>24&15]+n[H>>4&15]+n[15&H]+n[H>>12&15]+n[H>>8&15]+n[H>>20&15]+n[H>>16&15]+n[H>>28&15]+n[H>>24&15]);else for(h=0,p=t/32;h<p;++h)m=b[h],Re+=n[m>>4&15]+n[15&m]+n[m>>12&15]+n[m>>8&15]+n[m>>20&15]+n[m>>16&15]+n[m>>28&15]+n[m>>24&15];return Re};!a.JS_SHA3_TEST&&r?e.exports={sha3_512:v,sha3_384:g,sha3_256:m,sha3_224:h,keccak_512:y,keccak_384:p,keccak_256:l,keccak_224:u}:a&&(a.sha3_512=v,a.sha3_384=g,a.sha3_256=m,a.sha3_224=h,a.keccak_512=y,a.keccak_384=p,a.keccak_256=l,a.keccak_224=u)}(this)},function(e,a,t){const r=t(934),c=[224,256,384,512];var n=function(e){if(void 0!==e&&-1==c.indexOf(e))throw new Error("Unsupported hash length");this.content=[],this.bitcount=e?"keccak_"+e:"keccak_512"};n.prototype.update=function(e){if(Buffer.isBuffer(e))this.content.push(e);else{if("string"!=typeof e)throw new Error("Unsupported argument to update");this.content.push(new Buffer(e))}return this},n.prototype.digest=function(e){var a=r[this.bitcount](Buffer.concat(this.content));if("hex"===e)return a;if("binary"===e||void 0===e)return new Buffer(a,"hex").toString("binary");throw new Error("Unsupported encoding for digest: "+e)},e.exports={SHA3Hash:n}},function(e,a,t){e.exports=t(935).SHA3Hash},function(e,a,t){var r=t(45),c=(t(87),t(174),t(171)),n=(t(44),t(117)),i=t(3),f=t(860),o=t(852),d=t(326),s=t(831),b=t(18),u=t(322),l=t(414),p=t(116),h=(t(1),t(412)),m=t(66),g=t(19),v=t(411),y=(t(93),t(410));StateManager=function(e,a){this.options=e=this._applyDefaultOptions(e||{}),e.fork?this.blockchain=new l(e):this.blockchain=new u(e),this.vm=this.blockchain.vm,this.stateTrie=this.blockchain.stateTrie,this.accounts={},this.secure=!!e.secure,this.account_passwords={},this.personal_accounts={},this.total_accounts=e.total_accounts,this.coinbase=null,this.latest_filter_id=1,this.action_queue=[],this.action_processing,this.snapshots=[],this.logger=e.logger,this.net_version=e.network_id,this.mnemonic=e.mnemonic,this.wallet=s.fromMasterSeed(o.mnemonicToSeed(this.mnemonic)),this.wallet_hdpath=e.hdPath,this.gasPriceVal=g.rpcQuantityHexString(e.gasPrice),this.is_mining=!0,this.blockTime=e.blockTime,this.is_mining_on_interval=!!e.blockTime,this.mining_interval_timeout=null,this._provider=a};const _={total_accounts:10,gasPrice:"0x77359400",default_balance_ether:100,unlocked_accounts:[],hdPath:"m/44'/60'/0'/0/"};StateManager.prototype._applyDefaultOptions=function(e){if(e.seed||(e.seed=v.randomAlphaNumericString(10,f())),!e.mnemonic){let a=v.randomBytes(16,f(e.seed));e.mnemonic=o.entropyToMnemonic(a.toString("hex"))}return e.fork||e.network_id||(e.network_id=(new Date).getTime()),m.merge(e,_,Object.assign({},e))},StateManager.prototype.initialize=function(e){var a=this,t=[];let r=g.hex(p.utils.toWei(a.options.default_balance_ether.toString(),"ether"));if(a.options.accounts)t=a.options.accounts.map(a.createAccount.bind(a));else{if(!a.total_accounts)return e(new Error("Cannot initialize chain: either options.accounts or options.total_accounts must be specified"));for(var c=0;c<a.total_accounts;c++)t.push(a.createAccount({index:c,balance:r}))}a.coinbase=g.hex(t[0].address),a.accounts={},t.forEach(function(e){a.accounts[e.address]=e,a.personal_accounts[e.address.toLowerCase()]=!0}),a.unlocked_accounts=a.options.unlocked_accounts.reduce(function(e,a){if(0!=(a+"").indexOf("0x")){let e=parseInt(a),r=t[e];if(!r)throw new Error(`Account at index ${e} not found. Max index available is ${t.length-1}.`);a=r.address.toLowerCase()}return e[a.toLowerCase()]=!0,e},{}),a.secure||t.forEach(function(e){a.unlocked_accounts[e.address.toLowerCase()]=e}),a.blockchain.initialize(t,function(t){if(t)return e(t);a.net_version||(a.net_version=a.blockchain.fork_version),a.is_mining_on_interval&&a.mineOnInterval(),e()})},StateManager.prototype.mineOnInterval=function(){var e=this;clearTimeout(e.mining_interval_timeout),e.mining_interval_timeout=null,e.mining_interval_timeout=setTimeout(function(){e._provider.send({method:"evm_mine"},e.mineOnInterval.bind(e))},1e3*this.blockTime),this.mining_interval_timeout&&this.mining_interval_timeout.unref&&this.mining_interval_timeout.unref()},StateManager.prototype.createAccount=function(e,a){var t;if(e.generate)t=d.generate().getPrivateKey();else if(e.secretKey)t=i.toBuffer(g.hex(e.secretKey));else{var c=void 0===e.index?a:e.index;t=this.wallet.derivePath(this.wallet_hdpath+c).getWallet().getPrivateKey()}var n=i.privateToPublic(t),f=i.publicToAddress(n),o=new r;return o.balance=g.hex(e.balance),{secretKey:t,publicKey:n,address:g.hex(f).toLowerCase(),account:o}},StateManager.prototype.blockNumber=function(e){return this.blockchain.getHeight(e)},StateManager.prototype.gasPrice=function(){return this.gasPriceVal},StateManager.prototype.getBalance=function(e,a,t){this.blockchain.getBalance(e,a,function(e,a){a&&(a=g.rpcQuantityHexString(a)),t(e,a)})},StateManager.prototype.getTransactionCount=function(e,a,t){this.blockchain.getNonce(e,a,function(e,a){a&&(a=g.rpcQuantityHexString(a)),t(e,a)})},StateManager.prototype.getCode=function(e,a,t){this.blockchain.getCode(e,a,function(e,a){a&&(a=g.hex(a)),t(e,a)})},StateManager.prototype.queueRawTransaction=function(e,a){var t=Buffer.from(i.stripHexPrefix(e),"hex"),r=new n(t),c={from:r.from.toString("hex"),to:r.to.toString("hex"),gas:r.gasLimit.toString("hex"),gasPrice:r.gasPrice.toString("hex"),value:r.value.toString("hex"),data:r.data.toString("hex"),nonce:r.nonce.toString("hex")};r.v&&r.v.length>0&&r.r&&r.r.length>0&&r.s&&r.s.length>0&&(c.v=r.v.toString("hex"),c.r=r.r.toString("hex"),c.s=r.s.toString("hex")),this.queueTransaction("eth_sendRawTransaction",c,null,a)},StateManager.prototype.queueStorage=function(e,a,t,r){this.action_queue.push({method:"eth_getStorageAt",address:i.addHexPrefix(e),position:i.addHexPrefix(a),block:t,callback:r}),this.processNextAction()},StateManager.prototype.queueTransaction=function(e,a,t,r){if(null!=a.from){if(a.from=i.addHexPrefix(a.from).toLowerCase(),"eth_sendTransaction"==e&&null==this.accounts[a.from]&&null==this.unlocked_accounts[a.from])return r(new y("sender account not recognized"));if("eth_sendTransaction"==e&&null==this.unlocked_accounts[a.from])return r(new y("signer account is locked"));var c={gasPrice:"0x1",gasLimit:g.hex(this.blockchain.defaultTransactionGasLimit),value:"0x0"};if(null!=a.gas&&(c.gasLimit=i.addHexPrefix(a.gas)),null!=a.gasPrice?c.gasPrice=i.addHexPrefix(a.gasPrice):c.gasPrice=this.gasPriceVal,null!=a.to&&(c.to=i.addHexPrefix(a.to)),null!=a.value&&(c.value=i.addHexPrefix(a.value)),null!=a.data&&(c.data=i.addHexPrefix(a.data)),null!=a.nonce&&(c.nonce=i.addHexPrefix(a.nonce)),null!=a.v&&null!=a.s&&null!=a.v&&(c.v=i.addHexPrefix(a.v),c.r=i.addHexPrefix(a.r),c.s=i.addHexPrefix(a.s)),"0x0"!=c.to&&""!=c.to||delete c.to,c.to&&"string"!=typeof c.to)return r(new y("Invalid to address"));if(g.number(c.gasLimit)>g.number(this.blockchain.blockGasLimit))return r(new y("Exceeds block gas limit"));var f=i.toBuffer(a.from);try{new n(c).from=f}catch(e){return r(e)}this.action_queue.push({method:e,from:a.from,tx:c,callback:r,blockNumber:t}),this.processNextAction()}else r(new y("from not found; is required"))},StateManager.prototype.queueTransactionTrace=function(e,a,t){this.action_queue.push({method:"debug_traceTransaction",hash:g.hex(e),params:a,callback:t}),this.processNextAction()},StateManager.prototype.processNextAction=function(e){var a=this;if(1==e||1!=this.action_processing&&0!=this.action_queue.length){var t=this.action_queue.shift();this.action_processing=!0;var r=function(e,r){t.callback(e,r),a.action_queue.length>0?a.processNextAction(!0):a.action_processing=!1};if("function"==typeof t.method){var c=t.method();return r(null,c)}"eth_getStorageAt"==t.method?this.blockchain.getStorage(t.address,t.position,t.block,function(e,a){if(e)return r(e);a&&(a=i.rlp.decode(a)),a=g.hex(a||0),r(null,a)}):"debug_traceTransaction"==t.method?this.blockchain.processTransactionTrace(t.hash,t.params,r):"eth_sendTransaction"==t.method||"eth_sendRawTransaction"==t.method?this.processTransaction(t.from,t.tx,r):"eth_call"==t.method?this.processCall(t.from,t.tx,t.blockNumber,r):"eth_estimateGas"==t.method&&this.processGasEstimate(t.from,t.tx,t.blockNumber,r)}},StateManager.prototype.sign=function(e,a){var t=this.accounts[g.hex(e).toLowerCase()];if(!t)throw new Error("cannot sign data; no private key");var r=t.secretKey,c=Buffer.from(a.replace("0x",""),"hex"),n=i.hashPersonalMessage(c),f=i.ecsign(n,Buffer.from(r));return i.toRpcSig(f.v,f.r,f.s)},StateManager.prototype.signTypedData=function(e,a){var t=this.accounts[g.hex(e).toLowerCase()];if(!t)throw new Error("cannot sign data; no private key");if(!a.types)throw new Error("cannot sign data; types missing");if(!a.types.EIP712Domain)throw new Error("cannot sign data; EIP712Domain definition missing");if(!a.domain)throw new Error("cannot sign data; domain missing");if(!a.primaryType)throw new Error("cannot sign data; primaryType missing");if(!a.message)throw new Error("cannot sign data; message missing");return h.signTypedData(t.secretKey,{data:a})},StateManager.prototype.printTransactionReceipt=function(e,a,t){var r=this;r.blockchain.getTransactionReceipt(e,function(c,n){if(c)return t(c);r.blockchain.latestBlock(function(c,i){if(c)return t(c);n=n.toJSON(),r.logger.log(""),r.logger.log("  Transaction: "+e),null!=n.contractAddress&&r.logger.log("  Contract created: "+n.contractAddress),r.logger.log("  Gas usage: "+parseInt(n.gasUsed,16)),r.logger.log("  Block Number: "+parseInt(n.blockNumber,16)),r.logger.log("  Block Time: "+new Date(1e3*g.number(i.header.timestamp)).toString()),a&&r.logger.log("  Runtime Error: "+a.error),r.logger.log(""),t(null,e)})})},StateManager.prototype.processBlock=function(e,a){var t=this;"function"==typeof e&&(a=e,e=null),t.blockchain.processNextBlock(e,function(e,r,n){if(e&&e instanceof c==0)return a(e,r,n);b.eachSeries(r,function(a,r){var c=g.hex(a.hash()),n=null==e?{results:{}}:e;t.printTransactionReceipt(c,n.results[c],r)},a(e,r,n))})},StateManager.prototype.processBlocks=function(e,a){var t=this;"function"==typeof e&&(a=e,e=null);var r=null,n=0;b.whilst(function(){return null==e?t.blockchain.pending_transactions.length>0:n<e},function(e){t.processBlock(function(a,t,i){if(n+=1,a){if(a instanceof c==0)return e(a);null==r?r=a:r.combine(a)}e()})},function(e){a(e||r)})},StateManager.prototype.processCall=function(e,a,t,r){var c=this;c.createFakeTransactionWithCorrectNonce(a,e,function(e,a){if(e)return r(e);c.blockchain.processCall(a,t,function(e,a){if(e)return r(e);var t="0x0";return!a.error&&a.vm.return?t=g.hex(a.vm.return):a.error&&c.logger.log(`Error processing call: ${a.error}`),r(null,t)})})},StateManager.prototype.processGasEstimate=function(e,a,t,r){var c=this;c.createFakeTransactionWithCorrectNonce(a,e,function(e,a){if(e)return r(e);c.blockchain.processCall(a,t,function(e,a){if(e)return r(e);var t="0x0";return a.error?c.logger.log(`Error calculating gas estimate: ${a.error}`):t=a.gasRefund?g.hex(a.gasUsed.add(a.gasRefund)):g.hex(a.gasUsed),r(null,t)})})},StateManager.prototype.processTransaction=function(e,a,t){var r=this;r.createFakeTransactionWithCorrectNonce(a,e,function(e,a){if(e)return t(e);r.blockchain.queueTransaction(a);var c=g.hex(a.hash());if(0==r.is_mining||r.is_mining_on_interval)return t(null,c);r.processBlocks(function(e){if(e)return t(e);t(null,c)})})},StateManager.prototype.getTransactionReceipt=function(e,a){this.blockchain.getTransactionReceipt(e,function(e,t){if(e&&e.notFound)return a(null,null);a(e,t)})},StateManager.prototype.getBlock=function(e,a){this.blockchain.getBlock(e,a)},StateManager.prototype.getLogs=function(e,a){var t=this,r=e.address&&(Array.isArray(e.address)?e.address:[e.address]);r=r&&r.map(function(e){return e.toLowerCase()});var c=e.topics||[];b.parallel({fromBlock:this.blockchain.getEffectiveBlockNumber.bind(this.blockchain,e.fromBlock||"latest"),toBlock:this.blockchain.getEffectiveBlockNumber.bind(this.blockchain,e.toBlock||"latest"),latestBlock:this.blockchain.getEffectiveBlockNumber.bind(this.blockchain,"latest")},function(e,n){var i=n.fromBlock,f=n.toBlock,o=n.latestBlock;f>o&&(f=o);var d=[],s=i;b.whilst(function(){return s<=f},function(e){t.blockchain.getBlockLogs(s,function(a,t){if(a)return e(a);var n=r?t.filter(function(e){return r.indexOf(e.address.toLowerCase())>-1}):t;n=n.filter(function(e){for(var a=!0,t=0;t<c.length;t++){var r=c[t],n=e.topics[t];if(null!=r){var i=Array.isArray(r)?r.includes(n):r===n;if(t>=e.topics.length||!i){a=!1;break}}}return a}),d.push.apply(d,n),s+=1,e()})},function(e){if(e)return a(e);d=d.map(function(e){return e.toJSON()}),a(e,d)})})},StateManager.prototype.snapshot=function(e){var a=this;this.blockchain.getHeight(function(t,r){if(t)return e(t);a.snapshots.push({blockNumber:r,timeAdjustment:a.blockchain.timeAdjustment}),a.logger.log("Saved snapshot #"+a.snapshots.length),e(null,g.hex(a.snapshots.length))})},StateManager.prototype.revert=function(e,a){var t=this;if(e=i.bufferToInt(e),this.logger.log("Reverting to snapshot #"+e),e>this.snapshots.length)return!1;e-=1;var r=this.snapshots[e].timeAdjustment;b.whilst(function(){return t.snapshots.length>e},function(e){var a=t.snapshots.pop();b.during(function(e){t.blockchain.getHeight(function(t,r){if(t)return e(t);e(null,r>a.blockNumber)})},function(e){t.blockchain.popBlock(function(a){if(a)return e(a);e()})},e)},function(e){if(e)return a(e);t.blockchain.clearPendingTransactions(),t.blockchain.timeAdjustment=r,a(null,!0)})},StateManager.prototype.hasContractCode=function(e,a){this.vm.stateManager.getContractCode(e,function(e,t){null!=e?a(e,!1):a(null,!0)})},StateManager.prototype.startMining=function(e){this.is_mining=!0,this.is_mining_on_interval?(this.mineOnInterval(),e()):this.processBlocks(e)},StateManager.prototype.stopMining=function(e){this.is_mining=!1,clearTimeout(this.mining_interval_timeout),this.mining_interval_timeout=null,e()},StateManager.prototype.isUnlocked=function(e){return null!=this.unlocked_accounts[e.toLowerCase()]},StateManager.prototype.createFakeTransactionWithCorrectNonce=function(e,a,t){const r=this;r.blockchain.getQueuedNonce(a,(c,i)=>{if(c)return t(c);var f=new n(e);if(f.from=a,null==e.nonce)f.nonce=g.hex(i);else if(g.number(e.nonce)!==g.number(i))return t(new y("the tx doesn't have the correct nonce. "+`account has nonce of: ${g.number(i)} `+`tx has nonce of: ${g.number(f.nonce)}`));w(e)?r.getCode(g.hex(e.to),"latest",function(a,r){a?t(a):"0x0"===r?t(new y(`Attempting to run transaction which calls a contract function, but recipient address ${g.hex(e.to)} is not a contract address`)):t(null,f)}):t(null,f)})};var w=function(e){let a=g.hex(e.to||"0x0"),t=g.hex(e.data||"0x0");return"0x0"!==a&&"0x0"!==t};e.exports=StateManager},function(e,a,t){var r=t(3),c=t(1).inherits,n=t(937),i=t(19),f=t(93),o=t(189),d=t(409);t(66);function s(e,a){var t=this;this.state=e.state||new n(e,a),this.options=e,this.initialized=!1,this.initialization_error=null,this.post_initialization_callbacks=[],this.state.initialize(function(e){e&&(t.initialization_error=e),t.initialized=!0;var a=t.post_initialization_callbacks;t.post_initialization_callbacks=[],a.forEach(function(e){setImmediate(function(){e(t.initialization_error,t.state)})})})}c(s,t(88)),s.prototype.waitForInitialization=function(e){0==this.initialized?this.post_initialization_callbacks.push(e):e(this.initialization_error,this.state)},s.prototype.handleRequest=function(e,a,t){if(null!=this.initialization_error)return t(this.initialization_error);if(0!=this.initialized){var r=this[e.method];if(null==r)return t(new Error("Method "+e.method+" not supported."));var c=e.params||[],n=[].concat(c),i=!1;if(this.requiresDefaultBlockParameter(e.method)&&n.length<r.length-1&&(n.push("latest"),i=!0),n.push(t),n.length>r.length||void 0!==r.minLength&&n.length<r.minLength||void 0===r.minLength&&n.length<r.length){var f=`Incorrect number of arguments. Method '${e.method}' requires `;return r.minLength?f+=`between ${r.minLength-1} and ${r.length-1} arguments. `:f+=`exactly ${r.length-1} arguments. `,f+=i?"Including the implicit block argument, r":"R",f+=`equest specified ${n.length-1} arguments: ${JSON.stringify(n)}.`,t(new Error(f))}r.apply(this,n)}else this.waitForInitialization(this.getDelayedHandler(e,a,t))},s.prototype.getDelayedHandler=function(e,a,t){var r=this;return function(c,n){c&&t(c),r.handleRequest(e,a,t)}},s.prototype.requiresDefaultBlockParameter=function(e){return!0==={eth_getBalance:!0,eth_getCode:!0,eth_getTransactionCount:!0,eth_getStorageAt:!0,eth_call:!0,eth_estimateGas:!0}[e]},s.prototype.eth_accounts=function(e){e(null,Object.keys(this.state.accounts))},s.prototype.eth_blockNumber=function(e){this.state.blockNumber(function(a,t){if(a)return e(a);e(null,i.hex(t))})},s.prototype.eth_coinbase=function(e){e(null,this.state.coinbase)},s.prototype.eth_mining=function(e){e(null,this.state.is_mining)},s.prototype.eth_hashrate=function(e){e(null,"0x0")},s.prototype.eth_gasPrice=function(e){e(null,r.addHexPrefix(this.state.gasPrice()))},s.prototype.eth_getBalance=function(e,a,t){this.state.getBalance(e,a,t)},s.prototype.eth_getCode=function(e,a,t){this.state.getCode(e,a,t)},s.prototype.eth_getBlockByNumber=function(e,a,t){this.state.blockchain.getBlock(e,function(e,r){if(e)return e.message&&e.message.indexOf("index out of range")>=0?t(null,null):t(e);t(null,o.toJSON(r,a))})},s.prototype.eth_getBlockByHash=function(e,a,t){this.eth_getBlockByNumber.apply(this,arguments)},s.prototype.eth_getBlockTransactionCountByNumber=function(e,a){this.state.blockchain.getBlock(e,function(e,t){if(e)return e.message.indexOf("index out of range")?a(null,0):a(e);a(null,t.transactions.length)})},s.prototype.eth_getBlockTransactionCountByHash=function(e,a){this.eth_getBlockTransactionCountByNumber.apply(this,arguments)},s.prototype.eth_getTransactionReceipt=function(e,a){this.state.getTransactionReceipt(e,function(e,t){if(e)return a(e);var r=null;t&&(r=t.toJSON()),a(null,r)})},s.prototype.eth_getTransactionByHash=function(e,a){this.state.getTransactionReceipt(e,function(e,t){if(e)return a(e);var r=null;t&&(r=f.toJSON(t.tx,t.block)),a(null,r)})},s.prototype.eth_getTransactionByBlockHashAndIndex=function(e,a,t){a=i.number(a),this.state.getBlock(e,function(e,r){if(e)return e.notFound?t(null,null):t(e);if(a>=r.transactions.length)return t(new Error("Transaction at index "+i.hex(a)+" does not exist in block."));var c=r.transactions[a],n=f.toJSON(c,r);t(null,n)})},s.prototype.eth_getTransactionByBlockNumberAndIndex=function(e,a,t){this.eth_getTransactionByBlockHashAndIndex(e,a,t)},s.prototype.eth_getTransactionCount=function(e,a,t){this.state.getTransactionCount(e,a,(e,a)=>(e&&e.message&&e.message.indexOf("index out of range")>=0&&(e=new Error("Unknown block number")),t(e,a)))},s.prototype.eth_sign=function(e,a,t){var r,c;try{r=this.state.sign(e,a)}catch(e){c=e}t(c,r)},s.prototype.eth_signTypedData=function(e,a,t){var r,c;try{r=this.state.signTypedData(e,a)}catch(e){c=e}t(c,r)},s.prototype.eth_sendTransaction=function(e,a){this.state.queueTransaction("eth_sendTransaction",e,null,a)},s.prototype.eth_sendRawTransaction=function(e,a){this.state.queueRawTransaction(e,a)},s.prototype.eth_call=function(e,a,t){e.gas||(e.gas=this.state.blockchain.blockGasLimit),this.state.queueTransaction("eth_call",e,a,t)},s.prototype.eth_estimateGas=function(e,a,t){e.gas||(e.gas=this.state.blockchain.blockGasLimit),this.state.queueTransaction("eth_estimateGas",e,a,t)},s.prototype.eth_getStorageAt=function(e,a,t,r){this.state.queueStorage(e,a,t,r)},s.prototype.eth_newBlockFilter=function(e){var a=r.addHexPrefix(r.intToHex(this.state.latest_filter_id));this.state.latest_filter_id+=1,e(null,a)},s.prototype.eth_getFilterChanges=function(e,a){var t=this.state.latestBlock().hash().toString("hex");this.state.mine(),a(null,[t])},s.prototype.eth_getLogs=function(e,a){this.state.getLogs(e,a)},s.prototype.eth_uninstallFilter=function(e,a){a(null,!0)},s.prototype.eth_protocolVersion=function(e){e(null,"63")},s.prototype.bzz_hive=function(e){e(null,[])},s.prototype.bzz_info=function(e){e(null,[])},s.prototype.shh_version=function(e){e(null,"2")},s.prototype.eth_getCompilers=function(e){e(null,["solidity"])},s.prototype.eth_syncing=function(e){e(null,!1)},s.prototype.net_listening=function(e){e(null,!0)},s.prototype.net_peerCount=function(e){e(null,0)},s.prototype.web3_clientVersion=function(e){e(null,"EthereumJS TestRPC/v"+d.version+"/ethereum-js")},s.prototype.web3_sha3=function(e,a){a(null,i.hex(r.sha3(e)))},s.prototype.net_version=function(e){e(null,this.state.net_version+"")},s.prototype.miner_start=function(e,a){a||"function"!=typeof e||(a=e,e=null),this.state.startMining(function(e){a(e,!0)})},s.prototype.miner_start.minLength=1,s.prototype.miner_stop=function(e){this.state.stopMining(function(a){e(a,!0)})},s.prototype.rpc_modules=function(e){e(null,{eth:"1.0",net:"1.0",rpc:"1.0",web3:"1.0",evm:"1.0",personal:"1.0"})},s.prototype.personal_listAccounts=function(e){e(null,Object.keys(this.state.personal_accounts))},s.prototype.personal_newAccount=function(e,a){var t=this.state.createAccount({generate:!0});this.state.accounts[t.address.toLowerCase()]=t,this.state.personal_accounts[t.address.toLowerCase()]=!0,this.state.account_passwords[t.address.toLowerCase()]=e,a(null,t.address)},s.prototype.personal_importRawKey=function(e,a,t){var r=this.state.createAccount({secretKey:e});this.state.accounts[r.address.toLowerCase()]=r,this.state.personal_accounts[r.address.toLowerCase()]=!0,this.state.account_passwords[r.address.toLowerCase()]=a,t(null,r.address)},s.prototype.personal_lockAccount=function(e,a){if(!0!==this.state.personal_accounts[e.toLowerCase()])return a("Account not found");delete this.state.unlocked_accounts[e.toLowerCase()],a(null,!0)},s.prototype.personal_unlockAccount=function(e,a,t,r){if(!0!==this.state.personal_accounts[e.toLowerCase()])return r("Account not found");var c=this.state.account_passwords[e.toLowerCase()];if(void 0!==c&&c!==a)return r("Invalid password");this.state.unlocked_accounts[e.toLowerCase()]=!0,r(null,!0)},s.prototype.personal_sendTransaction=function(e,a,t){if(null!=e.from){var c=r.addHexPrefix(e.from).toLowerCase(),n=this;n.personal_unlockAccount(c,a,null,function(a){if(a)return t(a);n.state.queueTransaction("eth_sendTransaction",e,null,function(e,a){n.state.unlocked_accounts[c.toLowerCase()]=!1,t(e,a)})})}else t("Sender not found")},s.prototype.evm_snapshot=function(e){this.state.snapshot(e)},s.prototype.evm_revert=function(e,a){this.state.revert(e,a)},s.prototype.evm_increaseTime=function(e,a){a(null,this.state.blockchain.increaseTime(e))},s.prototype.evm_setTime=function(e,a){a(null,this.state.blockchain.setTime(e))},s.prototype.evm_mine=function(e,a){"function"==typeof e&&(a=e,e=void 0),this.state.processBlock(e,function(e){if(e)return a(e);a(e,"0x0")})},s.prototype.evm_mine.minLength=1,s.prototype.debug_traceTransaction=function(e,a,t){"function"==typeof a&&(t=a,a=[]),this.state.queueTransactionTrace(e,a,t)},e.exports=s},function(e,a,t){var r=t(88);function c(){}(0,t(1).inherits)(c,r),e.exports=c,c.prototype.handleRequest=function(e,a,t){if("eth_estimateGas"!=e.method&&"eth_call"!=e.method)return a();var r=e.params[0];null==r.from?this.emitPayload({method:"eth_coinbase"},function(e,c){if(e)return t(e);var n=c.result;r.from=n,a()}):a()}},function(e,a,t){var r=t(88),c=t(1).inherits,n=t(18),i=t(19);function f(){this.watching={}}c(f,r),e.exports=f,f.prototype.handleRequest=function(e,a,t){return"eth_newBlockFilter"==e.method?this.handleNewBlockFilter(e,a,t):"eth_getFilterChanges"==e.method?this.handleGetFilterChanges(e,a,t):void a()},f.prototype.handleNewBlockFilter=function(e,a,t){var r=this;a(function(e,a,t){if(e)return t();r.watching[a]=!0,t()})},f.prototype.handleGetFilterChanges=function(e,a,t){var r=this,c=e.params[0];if(!this.watching[c])return a();a(function(e,a,t){if(e)return t();var f,o,d;n.series([function(e){0!=a.length?(f=a[0],e()):r.emitPayload({method:"eth_blockNumber"},function(a,t){if(a)return e(a);d=i.number(t.result),e()})},function(e){if(d)return e();r.emitPayload({method:"eth_getBlockByHash",params:[f,!1]},function(a,t){if(a)return e(a);d=i.number(t.result.number),e()})},function(e){if(0==d)return o=void 0,e();d-=1,r.emitPayload({method:"eth_getBlockByNumber",params:[d,!1]},function(a,t){if(a)return e(a);o=t.result.hash,e()})}],function(e){o&&(a[0]=o),delete r.watching[c],t()})})}},function(e,a,t){var r=t(88);function c(){this.methods={eth_call:!0,eth_getStorageAt:!0,eth_sendTransaction:!0,eth_sendRawTransaction:!0,eth_newBlockFilter:!0,eth_getFilterChanges:!0,eth_getFilterLogs:!0},this.queue=[],this.isWorking=!1}(0,t(1).inherits)(c,r),e.exports=c,c.prototype.handleRequest=function(e,a,t){if(1!=e.external||1!=this.methods[e.method])return a();this.queue.push([e,a]),0==this.isWorking&&this.processNext()},c.prototype.processNext=function(){var e=this;if(0!=this.queue.length){this.isWorking=!0;var a=this.queue.shift();a[0];(0,a[1])(function(a,t,r){r(),e.processNext()})}else this.isWorking=!1}},function(e,a){e.exports=function(e,a){if(!e)throw a||"Assertion failed"}},function(e,a,t){const r=t(3),c=t(942);e.exports={intToQuantityHex:function(e){c("number"==typeof e&&e===Math.floor(e),"intToQuantityHex arg must be an integer");var a=r.toBuffer(e).toString("hex");"0"===a[0]&&(a=a.substring(1));return r.addHexPrefix(a)},quantityHexToInt:function(e){c("string"==typeof e,"arg to quantityHexToInt must be a string");var a=r.stripHexPrefix(e);a.length%2!=0&&(a="0"+a);var t=new Buffer(a,"hex");return r.bufferToInt(t)}}},function(e,a,t){const r=t(18),c=t(1).inherits,n=t(3),i=t(88),f=t(364),o=t(5).EventEmitter;function d(e){e=e||{};const a=this;a.filterIndex=0,a.filters={},a.filterDestroyHandlers={},a.asyncBlockHandlers={},a.asyncPendingBlockHandlers={},a._ready=new f,a._ready.setMaxListeners(e.maxFilters||25),a._ready.go(),a.pendingBlockTimeout=e.pendingBlockTimeout||4e3,a.checkForPendingBlocksActive=!1,setTimeout(function(){a.engine.on("block",function(e){a._ready.stop();var t=g(a.asyncBlockHandlers).map(function(a){return a.bind(null,e)});r.parallel(t,function(e){e&&console.error(e),a._ready.go()})})})}function s(e){o.apply(this),this.type="block",this.engine=e.engine,this.blockNumber=e.blockNumber,this.updates=[]}function b(e){o.apply(this),this.type="log",this.fromBlock=void 0!==e.fromBlock?e.fromBlock:"latest",this.toBlock=void 0!==e.toBlock?e.toBlock:"latest",this.address=e.address?function(e){return"0x"===e.slice(0,2)?e:"0x"+e}(e.address):e.address,this.topics=e.topics||[],this.updates=[],this.allResults=[]}function u(){o.apply(this),this.type="pendingTx",this.updates=[],this.allResults=[]}function l(e){return n.intToHex(e)}function p(e){return Number(e)}function h(e){return function(e){let a=n.stripHexPrefix(e);for(;"0"===a[0];)a=a.substr(1);return`0x${a}`}(e.toString("hex"))}function m(e){return e&&-1===["earliest","latest","pending"].indexOf(e)}function g(e){return Object.keys(e).map(function(a){return e[a]})}e.exports=d,c(d,i),d.prototype.handleRequest=function(e,a,t){const r=this;switch(e.method){case"eth_newBlockFilter":return void r.newBlockFilter(t);case"eth_newPendingTransactionFilter":return r.newPendingTransactionFilter(t),void r.checkForPendingBlocks();case"eth_newFilter":return void r.newLogFilter(e.params[0],t);case"eth_getFilterChanges":return void r._ready.await(function(){r.getFilterChanges(e.params[0],t)});case"eth_getFilterLogs":return void r._ready.await(function(){r.getFilterLogs(e.params[0],t)});case"eth_uninstallFilter":return void r._ready.await(function(){r.uninstallFilter(e.params[0],t)});default:return void a()}},d.prototype.newBlockFilter=function(e){const a=this;a._getBlockNumber(function(t,r){if(t)return e(t);var c=new s({blockNumber:r}),n=c.update.bind(c);a.engine.on("block",n);a.filterIndex++,a.filters[a.filterIndex]=c,a.filterDestroyHandlers[a.filterIndex]=function(){a.engine.removeListener("block",n)};var i=l(a.filterIndex);e(null,i)})},d.prototype.newLogFilter=function(e,a){const t=this;t._getBlockNumber(function(r,c){if(r)return a(r);var n=new b(e),i=n.update.bind(n);t.filterIndex++,t.asyncBlockHandlers[t.filterIndex]=function(e,a){t._logsForBlock(e,function(e,t){if(e)return a(e);i(t),a()})},t.filters[t.filterIndex]=n;var f=l(t.filterIndex);a(null,f)})},d.prototype.newPendingTransactionFilter=function(e){const a=this;var t=new u,r=t.update.bind(t);a.filterIndex++,a.asyncPendingBlockHandlers[a.filterIndex]=function(e,t){a._txHashesForBlock(e,function(e,a){if(e)return t(e);r(a),t()})},a.filters[a.filterIndex]=t,e(null,l(a.filterIndex))},d.prototype.getFilterChanges=function(e,a){var t=Number.parseInt(e,16),r=this.filters[t];if(r||console.warn("FilterSubprovider - no filter with that id:",e),!r)return a(null,[]);var c=r.getChanges();r.clearChanges(),a(null,c)},d.prototype.getFilterLogs=function(e,a){const t=this;var r=Number.parseInt(e,16),c=t.filters[r];if(c||console.warn("FilterSubprovider - no filter with that id:",e),!c)return a(null,[]);if("log"===c.type)t.emitPayload({method:"eth_getLogs",params:[{fromBlock:c.fromBlock,toBlock:c.toBlock,address:c.address,topics:c.topics}]},function(e,t){if(e)return a(e);a(null,t.result)});else{var n=c.getAllResults();a(null,n)}},d.prototype.uninstallFilter=function(e,a){var t=Number.parseInt(e,16);if(this.filters[t]){this.filters[t].removeAllListeners();var r=this.filterDestroyHandlers[t];delete this.filters[t],delete this.asyncBlockHandlers[t],delete this.asyncPendingBlockHandlers[t],delete this.filterDestroyHandlers[t],r&&r(),a(null,!0)}else a(null,!1)},d.prototype.checkForPendingBlocks=function(){const e=this;e.checkForPendingBlocksActive||!!Object.keys(e.asyncPendingBlockHandlers).length&&(e.checkForPendingBlocksActive=!0,e.emitPayload({method:"eth_getBlockByNumber",params:["pending",!0]},function(a,t){if(a)return e.checkForPendingBlocksActive=!1,void console.error(a);e.onNewPendingBlock(t.result,function(a){a&&console.error(a),e.checkForPendingBlocksActive=!1,setTimeout(e.checkForPendingBlocks.bind(e),e.pendingBlockTimeout)})}))},d.prototype.onNewPendingBlock=function(e,a){var t=g(this.asyncPendingBlockHandlers).map(function(a){return a.bind(null,e)});r.parallel(t,a)},d.prototype._getBlockNumber=function(e){e(null,h(this.engine.currentBlock.number))},d.prototype._logsForBlock=function(e,a){var t=h(e.number);this.emitPayload({method:"eth_getLogs",params:[{fromBlock:t,toBlock:t}]},function(e,t){return e?a(e):t.error?a(t.error):void a(null,t.result)})},d.prototype._txHashesForBlock=function(e,a){var t=e.transactions;if(0===t.length)return a(null,[]);"string"==typeof t[0]?a(null,t):a(null,t.map(e=>e.hash))},c(s,o),s.prototype.update=function(e){var a=function(e){return"0x"+e.toString("hex")}(e.hash);this.updates.push(a),this.emit("data",e)},s.prototype.getChanges=function(){return this.updates},s.prototype.clearChanges=function(){this.updates=[]},c(b,o),b.prototype.validateLog=function(e){return!(m(this.fromBlock)&&p(this.fromBlock)>=p(e.blockNumber))&&(!(m(this.toBlock)&&p(this.toBlock)<=p(e.blockNumber))&&((!this.address||this.address.toLowerCase()===e.address.toLowerCase())&&this.topics.reduce(function(a,t,r){if(!a)return!1;if(!t)return!0;var c=e.topics[r];return!!c&&(Array.isArray(t)?t:[t]).filter(function(e){return c.toLowerCase()===e.toLowerCase()}).length>0},!0)))},b.prototype.update=function(e){const a=this;var t=[];e.forEach(function(e){a.validateLog(e)&&(t.push(e),a.updates.push(e),a.allResults.push(e))}),t.length>0&&a.emit("data",t)},b.prototype.getChanges=function(){return this.updates},b.prototype.getAllResults=function(){return this.allResults},b.prototype.clearChanges=function(){this.updates=[]},c(u,o),u.prototype.validateUnique=function(e){return-1===this.allResults.indexOf(e)},u.prototype.update=function(e){const a=this;var t=[];e.forEach(function(e){a.validateUnique(e)&&(t.push(e),a.updates.push(e),a.allResults.push(e))}),t.length>0&&a.emit("data",t)},u.prototype.getChanges=function(){return this.updates},u.prototype.getAllResults=function(){return this.allResults},u.prototype.clearChanges=function(){this.updates=[]}},function(e,a,t){const r=t(5).EventEmitter,c=t(944),n=t(943),i=t(1).inherits,f=t(3);function o(e){e=e||{},r.apply(this,Array.prototype.slice.call(arguments)),c.apply(this,[e]),this.subscriptions={}}i(o,c),Object.assign(o.prototype,r.prototype),o.prototype.constructor=o,o.prototype.eth_subscribe=function(e,a){const t=this;let r=()=>{},c=e.params[0];switch(c){case"logs":let n=e.params[1];r=t.newLogFilter.bind(t,n);break;case"newPendingTransactions":r=t.newPendingTransactionFilter.bind(t);break;case"newHeads":r=t.newBlockFilter.bind(t);break;case"syncing":default:return void a(new Error("unsupported subscription type"))}r(function(e,r){if(e)return a(e);const n=Number.parseInt(r,16);t.subscriptions[n]=c,t.filters[n].on("data",function(e){Array.isArray(e)||(e=[e]);var a=t._notificationHandler.bind(t,r,c);e.forEach(a),t.filters[n].clearChanges()}),"newPendingTransactions"===c&&t.checkForPendingBlocks(),a(null,r)})},o.prototype.eth_unsubscribe=function(e,a){const t=this;let r=e.params[0];const c=Number.parseInt(r,16);if(t.subscriptions[c]){t.subscriptions[c];t.uninstallFilter(r,function(e,r){delete t.subscriptions[c],a(e,r)})}else a(new Error(`Subscription ID ${r} not found.`))},o.prototype._notificationHandler=function(e,a,t){const r=this;"newHeads"===a&&(t=r._notificationResultFromBlock(t)),r.emit("data",null,{jsonrpc:"2.0",method:"eth_subscription",params:{subscription:e,result:t}})},o.prototype._notificationResultFromBlock=function(e){return{hash:f.bufferToHex(e.hash),parentHash:f.bufferToHex(e.parentHash),sha3Uncles:f.bufferToHex(e.sha3Uncles),miner:f.bufferToHex(e.miner),stateRoot:f.bufferToHex(e.stateRoot),transactionsRoot:f.bufferToHex(e.transactionsRoot),receiptsRoot:f.bufferToHex(e.receiptsRoot),logsBloom:f.bufferToHex(e.logsBloom),difficulty:n.intToQuantityHex(f.bufferToInt(e.difficulty)),number:n.intToQuantityHex(f.bufferToInt(e.number)),gasLimit:n.intToQuantityHex(f.bufferToInt(e.gasLimit)),gasUsed:n.intToQuantityHex(f.bufferToInt(e.gasUsed)),nonce:e.nonce?f.bufferToHex(e.nonce):null,timestamp:n.intToQuantityHex(f.bufferToInt(e.timestamp)),extraData:f.bufferToHex(e.extraData)}},o.prototype.handleRequest=function(e,a,t){switch(e.method){case"eth_subscribe":this.eth_subscribe(e,t);break;case"eth_unsubscribe":this.eth_unsubscribe(e,t);break;default:c.prototype.handleRequest.apply(this,Array.prototype.slice.call(arguments))}},e.exports=o},function(e,a){const t=3;e.exports=function(){var e=(new Date).getTime()*Math.pow(10,t),a=Math.floor(Math.random()*Math.pow(10,t));return e+a}},function(e,a){var t,r,c,n=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,i={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function f(e){return n.lastIndex=0,n.test(e)?'"'+e.replace(n,function(e){var a=i[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}e.exports=function(e,a,n){var i;if(t="",r="","number"==typeof n)for(i=0;i<n;i+=1)r+=" ";else"string"==typeof n&&(r=n);if(c=a,a&&"function"!=typeof a&&("object"!=typeof a||"number"!=typeof a.length))throw new Error("JSON.stringify");return function e(a,n){var i,o,d,s,b,u=t,l=n[a];switch(l&&"object"==typeof l&&"function"==typeof l.toJSON&&(l=l.toJSON(a)),"function"==typeof c&&(l=c.call(n,a,l)),typeof l){case"string":return f(l);case"number":return isFinite(l)?String(l):"null";case"boolean":case"null":return String(l);case"object":if(!l)return"null";if(t+=r,b=[],"[object Array]"===Object.prototype.toString.apply(l)){for(s=l.length,i=0;i<s;i+=1)b[i]=e(i,l)||"null";return d=0===b.length?"[]":t?"[\n"+t+b.join(",\n"+t)+"\n"+u+"]":"["+b.join(",")+"]",t=u,d}if(c&&"object"==typeof c)for(s=c.length,i=0;i<s;i+=1)"string"==typeof(o=c[i])&&(d=e(o,l))&&b.push(f(o)+(t?": ":":")+d);else for(o in l)Object.prototype.hasOwnProperty.call(l,o)&&(d=e(o,l))&&b.push(f(o)+(t?": ":":")+d);return d=0===b.length?"{}":t?"{\n"+t+b.join(",\n"+t)+"\n"+u+"}":"{"+b.join(",")+"}",t=u,d}}("",{"":e})}},function(e,a){var t,r,c,n,i={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},f=function(e){throw{name:"SyntaxError",message:e,at:t,text:c}},o=function(e){return e&&e!==r&&f("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(t),t+=1,r},d=function(){var e,a="";for("-"===r&&(a="-",o("-"));r>="0"&&r<="9";)a+=r,o();if("."===r)for(a+=".";o()&&r>="0"&&r<="9";)a+=r;if("e"===r||"E"===r)for(a+=r,o(),"-"!==r&&"+"!==r||(a+=r,o());r>="0"&&r<="9";)a+=r,o();if(e=+a,isFinite(e))return e;f("Bad number")},s=function(){var e,a,t,c="";if('"'===r)for(;o();){if('"'===r)return o(),c;if("\\"===r)if(o(),"u"===r){for(t=0,a=0;a<4&&(e=parseInt(o(),16),isFinite(e));a+=1)t=16*t+e;c+=String.fromCharCode(t)}else{if("string"!=typeof i[r])break;c+=i[r]}else c+=r}f("Bad string")},b=function(){for(;r&&r<=" ";)o()};n=function(){switch(b(),r){case"{":return function(){var e,a={};if("{"===r){if(o("{"),b(),"}"===r)return o("}"),a;for(;r;){if(e=s(),b(),o(":"),Object.hasOwnProperty.call(a,e)&&f('Duplicate key "'+e+'"'),a[e]=n(),b(),"}"===r)return o("}"),a;o(","),b()}}f("Bad object")}();case"[":return function(){var e=[];if("["===r){if(o("["),b(),"]"===r)return o("]"),e;for(;r;){if(e.push(n()),b(),"]"===r)return o("]"),e;o(","),b()}}f("Bad array")}();case'"':return s();case"-":return d();default:return r>="0"&&r<="9"?d():function(){switch(r){case"t":return o("t"),o("r"),o("u"),o("e"),!0;case"f":return o("f"),o("a"),o("l"),o("s"),o("e"),!1;case"n":return o("n"),o("u"),o("l"),o("l"),null}f("Unexpected '"+r+"'")}()}},e.exports=function(e,a){var i;return c=e,t=0,r=" ",i=n(),b(),r&&f("Syntax error"),"function"==typeof a?function e(t,r){var c,n,i=t[r];if(i&&"object"==typeof i)for(c in i)Object.prototype.hasOwnProperty.call(i,c)&&(void 0!==(n=e(i,c))?i[c]=n:delete i[c]);return a.call(t,r,i)}({"":i},""):i}},function(e,a,t){a.parse=t(948),a.stringify=t(947)},function(e,a,t){var r="undefined"!=typeof JSON?JSON:t(949);e.exports=function(e,a){a||(a={}),"function"==typeof a&&(a={cmp:a});var t=a.space||"";"number"==typeof t&&(t=Array(t+1).join(" "));var i="boolean"==typeof a.cycles&&a.cycles,f=a.replacer||function(e,a){return a},o=a.cmp&&function(e){return function(a){return function(t,r){var c={key:t,value:a[t]},n={key:r,value:a[r]};return e(c,n)}}}(a.cmp),d=[];return function e(a,s,b,u){var l=t?"\n"+new Array(u+1).join(t):"",p=t?": ":":";if(b&&b.toJSON&&"function"==typeof b.toJSON&&(b=b.toJSON()),void 0!==(b=f.call(a,s,b))){if("object"!=typeof b||null===b)return r.stringify(b);if(c(b)){for(var h=[],m=0;m<b.length;m++){var g=e(b,m,b[m],u+1)||r.stringify(null);h.push(l+t+g)}return"["+h.join(",")+l+"]"}if(-1!==d.indexOf(b)){if(i)return r.stringify("__cycle__");throw new TypeError("Converting circular structure to JSON")}d.push(b);var v=n(b).sort(o&&o(b));for(h=[],m=0;m<v.length;m++){var y=e(b,s=v[m],b[s],u+1);if(y){var _=r.stringify(s)+p+y;h.push(l+t+_)}}return d.splice(d.indexOf(b),1),"{"+h.join(",")+l+"}"}}({"":e},"",e,0)};var c=Array.isArray||function(e){return"[object Array]"==={}.toString.call(e)},n=Object.keys||function(e){var a=Object.prototype.hasOwnProperty||function(){return!0},t=[];for(var r in e)a.call(e,r)&&t.push(r);return t}},function(e,a,t){const r=t(950);function c(e){return"never"!==f(e)}function n(e){var a=i(e);return a>=e.params.length?e.params:"eth_getBlockByNumber"===e.method?e.params.slice(1):e.params.slice(0,a)}function i(e){switch(e.method){case"eth_getStorageAt":return 2;case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":return 1;case"eth_getBlockByNumber":return 0;default:return}}function f(e){switch(e.method){case"web3_clientVersion":case"web3_sha3":case"eth_protocolVersion":case"eth_getBlockTransactionCountByHash":case"eth_getUncleCountByBlockHash":case"eth_getCode":case"eth_getBlockByHash":case"eth_getTransactionByHash":case"eth_getTransactionByBlockHashAndIndex":case"eth_getTransactionReceipt":case"eth_getUncleByBlockHashAndIndex":case"eth_getCompilers":case"eth_compileLLL":case"eth_compileSolidity":case"eth_compileSerpent":case"shh_version":return"perma";case"eth_getBlockByNumber":case"eth_getBlockTransactionCountByNumber":case"eth_getUncleCountByBlockNumber":case"eth_getTransactionByBlockNumberAndIndex":case"eth_getUncleByBlockNumberAndIndex":return"fork";case"eth_gasPrice":case"eth_blockNumber":case"eth_getBalance":case"eth_getStorageAt":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":case"eth_getFilterLogs":case"eth_getLogs":case"net_peerCount":return"block";case"net_version":case"net_peerCount":case"net_listening":case"eth_syncing":case"eth_sign":case"eth_coinbase":case"eth_mining":case"eth_hashrate":case"eth_accounts":case"eth_sendTransaction":case"eth_sendRawTransaction":case"eth_newFilter":case"eth_newBlockFilter":case"eth_newPendingTransactionFilter":case"eth_uninstallFilter":case"eth_getFilterChanges":case"eth_getWork":case"eth_submitWork":case"eth_submitHashrate":case"db_putString":case"db_getString":case"db_putHex":case"db_getHex":case"shh_post":case"shh_newIdentity":case"shh_hasIdentity":case"shh_newGroup":case"shh_addToGroup":case"shh_newFilter":case"shh_uninstallFilter":case"shh_getFilterChanges":case"shh_getMessages":return"never"}}e.exports={cacheIdentifierForPayload:function(e,a={}){if(!c(e))return null;const{includeBlockRef:t}=a,i=t?e.params:n(e);return e.method+":"+r(i)},canCache:c,blockTagForPayload:function(e){var a=i(e);if(a>=e.params.length)return null;return e.params[a]},paramsWithoutBlockTag:n,blockTagParamIndex:i,cacheTypeForPayload:f}},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(a,t,r){return e(a,r)}},e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a,t,i){(0,r.default)(a)(e,(0,c.default)((0,n.default)(t)),i)};var r=i(t(370)),c=i(t(952)),n=i(t(89));function i(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a,t,n){n=n||r.default,a=a||[];var i=[],f=0,o=(0,c.default)(t);e(a,function(e,a,t){var r=f++;o(e,function(e,a){i[r]=a,t(e)})},function(e){n(e,i)})};var r=n(t(182)),c=n(t(89));function n(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.hasNextTick=a.hasSetImmediate=void 0,a.fallback=f,a.wrap=o;var r=function(e){return e&&e.__esModule?e:{default:e}}(t(367));var c,n=a.hasSetImmediate="function"==typeof setImmediate&&setImmediate,i=a.hasNextTick="object"==typeof process&&"function"==typeof process.nextTick;function f(e){setTimeout(e,0)}function o(e){return function(a){var t=(0,r.default)(arguments,1);e(function(){a.apply(null,t)})}}c=n?setImmediate:i?process.nextTick:f,a.default=o(c)},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(){var a=(0,r.default)(arguments),t=a.pop();e.call(this,a,t)}};var r=function(e){return e&&e.__esModule?e:{default:e}}(t(367));e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return(0,c.default)(function(a,t){var c;try{c=e.apply(this,a)}catch(e){return t(e)}(0,r.default)(c)&&"function"==typeof c.then?c.then(function(e){f(t,null,e)},function(e){f(t,e.message?e:new Error(e))}):t(null,c)})};var r=i(t(373)),c=i(t(956)),n=i(t(955));function i(e){return e&&e.__esModule?e:{default:e}}function f(e,a,t){try{e(a,t)}catch(e){(0,n.default)(o,e)}}function o(e){throw e}e.exports=a.default},function(e,a){e.exports=function(e,a){return function(t){return e(a(t))}}},function(e,a,t){var r=t(958)(Object.keys,Object);e.exports=r},function(e,a){var t=Object.prototype;e.exports=function(e){var a=e&&e.constructor;return e===("function"==typeof a&&a.prototype||t)}},function(e,a,t){var r=t(960),c=t(959),n=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return c(e);var a=[];for(var t in Object(e))n.call(e,t)&&"constructor"!=t&&a.push(t);return a}},function(e,a,t){(function(e){var r=t(374),c="object"==typeof a&&a&&!a.nodeType&&a,n=c&&"object"==typeof e&&e&&!e.nodeType&&e,i=n&&n.exports===c&&r.process,f=function(){try{var e=n&&n.require&&n.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=f}).call(this,t(25)(e))},function(e,a){e.exports=function(e){return function(a){return e(a)}}},function(e,a,t){var r=t(183),c=t(372),n=t(181),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return n(e)&&c(e.length)&&!!i[r(e)]}},function(e,a,t){var r=t(964),c=t(963),n=t(962),i=n&&n.isTypedArray,f=i?c(i):r;e.exports=f},function(e,a){var t=9007199254740991,r=/^(?:0|[1-9]\d*)$/;e.exports=function(e,a){var c=typeof e;return!!(a=null==a?t:a)&&("number"==c||"symbol"!=c&&r.test(e))&&e>-1&&e%1==0&&e<a}},function(e,a){e.exports=function(){return!1}},function(e,a,t){(function(e){var r=t(375),c=t(967),n="object"==typeof a&&a&&!a.nodeType&&a,i=n&&"object"==typeof e&&e&&!e.nodeType&&e,f=i&&i.exports===n?r.Buffer:void 0,o=(f?f.isBuffer:void 0)||c;e.exports=o}).call(this,t(25)(e))},function(e,a){var t=Array.isArray;e.exports=t},function(e,a,t){var r=t(183),c=t(181),n="[object Arguments]";e.exports=function(e){return c(e)&&r(e)==n}},function(e,a,t){var r=t(970),c=t(181),n=Object.prototype,i=n.hasOwnProperty,f=n.propertyIsEnumerable,o=r(function(){return arguments}())?r:function(e){return c(e)&&i.call(e,"callee")&&!f.call(e,"callee")};e.exports=o},function(e,a){e.exports=function(e,a){for(var t=-1,r=Array(e);++t<e;)r[t]=a(t);return r}},function(e,a,t){var r=t(972),c=t(971),n=t(969),i=t(968),f=t(966),o=t(965),d=Object.prototype.hasOwnProperty;e.exports=function(e,a){var t=n(e),s=!t&&c(e),b=!t&&!s&&i(e),u=!t&&!s&&!b&&o(e),l=t||s||b||u,p=l?r(e.length,String):[],h=p.length;for(var m in e)!a&&!d.call(e,m)||l&&("length"==m||b&&("offset"==m||"parent"==m)||u&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||f(m,h))||p.push(m);return p}},function(e,a,t){var r=t(973),c=t(961),n=t(184);e.exports=function(e){return n(e)?r(e):c(e)}},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return r&&e[r]&&e[r]()};var r="function"==typeof Symbol&&Symbol.iterator;e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){if((0,r.default)(e))return function(e){var a=-1,t=e.length;return function(){return++a<t?{value:e[a],key:a}:null}}(e);var a=(0,c.default)(e);return a?function(e){var a=-1;return function(){var t=e.next();return t.done?null:(a++,{value:t.value,key:a})}}(a):function(e){var a=(0,n.default)(e),t=-1,r=a.length;return function(){var c=a[++t];return t<r?{value:e[c],key:c}:null}}(e)};var r=i(t(184)),c=i(t(975)),n=i(t(974));function i(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a,t,n){(0,r.default)(a)(e,(0,c.default)(t),n)};var r=n(t(370)),c=n(t(89));function n(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},function(e,a,t){var r=t(376),c=Object.prototype,n=c.hasOwnProperty,i=c.toString,f=r?r.toStringTag:void 0;e.exports=function(e){var a=n.call(e,f),t=e[f];try{e[f]=void 0;var r=!0}catch(e){}var c=i.call(e);return r&&(a?e[f]=t:delete e[f]),c}},function(e,a,t){var r=t(183),c=t(373),n="[object AsyncFunction]",i="[object Function]",f="[object GeneratorFunction]",o="[object Proxy]";e.exports=function(e){if(!c(e))return!1;var a=r(e);return a==i||a==f||a==n||a==o}},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e,a,t){((0,r.default)(e)?u:l)(e,(0,s.default)(a),t)};var r=b(t(184)),c=b(t(371)),n=b(t(977)),i=b(t(366)),f=b(t(182)),o=b(t(369)),d=b(t(368)),s=b(t(89));function b(e){return e&&e.__esModule?e:{default:e}}function u(e,a,t){t=(0,o.default)(t||f.default);var r=0,n=0,i=e.length;function s(e,a){e?t(e):++n!==i&&a!==c.default||t(null)}for(0===i&&t(null);r<i;r++)a(e[r],r,(0,d.default)(s))}var l=(0,i.default)(n.default,1/0);e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return function(a,t,n){return e(r.default,a,(0,c.default)(t),n)}};var r=n(t(981)),c=n(t(89));function n(e){return e&&e.__esModule?e:{default:e}}e.exports=a.default},function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r=n(t(982)),c=n(t(954));function n(e){return e&&e.__esModule?e:{default:e}}a.default=(0,r.default)(c.default),e.exports=a.default},function(e,a,t){"use strict";const r=t(379);function c(e){let a=r.stripHexPrefix(e);for(;"0"===a[0];)a=a.substr(1);return`0x${a}`}e.exports={incrementHexNumber:function(e){return c(r.intToHex(parseInt(e,16)+1))},formatHex:c}},function(e,a,t){"use strict";var r=function(e,a,t){return function(){for(var r=this,c=new Array(arguments.length),n=0;n<arguments.length;n++)c[n]=arguments[n];return new a(function(a,n){c.push(function(e,r){if(e)n(e);else if(t.multiArgs){for(var c=new Array(arguments.length-1),i=1;i<arguments.length;i++)c[i-1]=arguments[i];a(c)}else a(r)}),e.apply(r,c)})}},c=e.exports=function(e,a,t){"function"!=typeof a&&(t=a,a=Promise),(t=t||{}).exclude=t.exclude||[/.+Sync$/];var c="function"==typeof e?function(){return t.excludeMain?e.apply(this,arguments):r(e,a,t).apply(this,arguments)}:{};return Object.keys(e).reduce(function(c,n){var i=e[n];return c[n]="function"==typeof i&&function(e){var a=function(a){return"string"==typeof a?e===a:a.test(e)};return t.include?t.include.some(a):!t.exclude.some(a)}(n)?r(i,a,t):i,c},c)};c.all=c},function(e,a){e.exports=function(e){var a=(e=e||{}).max||Number.MAX_SAFE_INTEGER,t=void 0!==e.start?e.start:Math.floor(Math.random()*a);return function(){return t%=a,t++}}},function(e,a,t){const r=t(39),c=t(986)();function n(e){this.currentProvider=e}function i(e){return function(){var a=[].slice.call(arguments),t=a.pop();this.sendAsync({method:e,params:a},t)}}function f(e,a){return function(){var t=[].slice.call(arguments),r=t.pop();t.length<e&&t.push("latest"),this.sendAsync({method:a,params:t},r)}}e.exports=n,n.prototype.getBalance=f(2,"eth_getBalance"),n.prototype.getCode=f(2,"eth_getCode"),n.prototype.getTransactionCount=f(2,"eth_getTransactionCount"),n.prototype.getStorageAt=f(3,"eth_getStorageAt"),n.prototype.call=f(2,"eth_call"),n.prototype.protocolVersion=i("eth_protocolVersion"),n.prototype.syncing=i("eth_syncing"),n.prototype.coinbase=i("eth_coinbase"),n.prototype.mining=i("eth_mining"),n.prototype.hashrate=i("eth_hashrate"),n.prototype.gasPrice=i("eth_gasPrice"),n.prototype.accounts=i("eth_accounts"),n.prototype.blockNumber=i("eth_blockNumber"),n.prototype.getBlockTransactionCountByHash=i("eth_getBlockTransactionCountByHash"),n.prototype.getBlockTransactionCountByNumber=i("eth_getBlockTransactionCountByNumber"),n.prototype.getUncleCountByBlockHash=i("eth_getUncleCountByBlockHash"),n.prototype.getUncleCountByBlockNumber=i("eth_getUncleCountByBlockNumber"),n.prototype.sign=i("eth_sign"),n.prototype.sendTransaction=i("eth_sendTransaction"),n.prototype.sendRawTransaction=i("eth_sendRawTransaction"),n.prototype.estimateGas=i("eth_estimateGas"),n.prototype.getBlockByHash=i("eth_getBlockByHash"),n.prototype.getBlockByNumber=i("eth_getBlockByNumber"),n.prototype.getTransactionByHash=i("eth_getTransactionByHash"),n.prototype.getTransactionByBlockHashAndIndex=i("eth_getTransactionByBlockHashAndIndex"),n.prototype.getTransactionByBlockNumberAndIndex=i("eth_getTransactionByBlockNumberAndIndex"),n.prototype.getTransactionReceipt=i("eth_getTransactionReceipt"),n.prototype.getUncleByBlockHashAndIndex=i("eth_getUncleByBlockHashAndIndex"),n.prototype.getUncleByBlockNumberAndIndex=i("eth_getUncleByBlockNumberAndIndex"),n.prototype.getCompilers=i("eth_getCompilers"),n.prototype.compileLLL=i("eth_compileLLL"),n.prototype.compileSolidity=i("eth_compileSolidity"),n.prototype.compileSerpent=i("eth_compileSerpent"),n.prototype.newFilter=i("eth_newFilter"),n.prototype.newBlockFilter=i("eth_newBlockFilter"),n.prototype.newPendingTransactionFilter=i("eth_newPendingTransactionFilter"),n.prototype.uninstallFilter=i("eth_uninstallFilter"),n.prototype.getFilterChanges=i("eth_getFilterChanges"),n.prototype.getFilterLogs=i("eth_getFilterLogs"),n.prototype.getLogs=i("eth_getLogs"),n.prototype.getWork=i("eth_getWork"),n.prototype.submitWork=i("eth_submitWork"),n.prototype.submitHashrate=i("eth_submitHashrate"),n.prototype.sendAsync=function(e,a){this.currentProvider.sendAsync(function(e){return r({id:c(),jsonrpc:"2.0",params:[]},e)}(e),function(e,t){if(!e&&t.error&&(e=new Error("EthQuery - RPC Error - "+t.error.message)),e)return a(e);a(null,t.result)})}},function(e,a,t){"use strict";function r(e){return function(){var a=e.apply(this,arguments);return new Promise(function(e,t){return function r(c,n){try{var i=a[c](n),f=i.value}catch(e){return void t(e)}if(!i.done)return Promise.resolve(f).then(function(e){r("next",e)},function(e){r("throw",e)});e(f)}("next")})}}const c=t(987),n=t(5),i=t(985),f=t(984),o=f.incrementHexNumber,d=1e3,s=60*d;e.exports=class extends n{constructor(e={}){if(super(),!e.provider)throw new Error("RpcBlockTracker - no provider specified.");this._provider=e.provider,this._query=new c(e.provider),this._pollingInterval=e.pollingInterval||4*d,this._syncingTimeout=e.syncingTimeout||1*s,this._trackingBlock=null,this._trackingBlockTimestamp=null,this._currentBlock=null,this._isRunning=!1,this._performSync=this._performSync.bind(this),this._handleNewBlockNotification=this._handleNewBlockNotification.bind(this)}getTrackingBlock(){return this._trackingBlock}getCurrentBlock(){return this._currentBlock}awaitCurrentBlock(){var e=this;return r(function*(){return e._currentBlock?e._currentBlock:(yield new Promise(function(a){return e.once("latest",a)}),e._currentBlock)})()}start(e={}){var a=this;return r(function*(){a._isRunning||(a._isRunning=!0,e.fromBlock?yield a._setTrackingBlock(yield a._fetchBlockByNumber(e.fromBlock)):yield a._setTrackingBlock(yield a._fetchLatestBlock()),a._provider.on?yield a._initSubscription():a._performSync().catch(function(e){e&&console.error(e)}))})()}stop(){var e=this;return r(function*(){e._isRunning=!1,e._provider.on&&(yield e._removeSubscription())})()}_setTrackingBlock(e){var a=this;return r(function*(){if(a._trackingBlock&&a._trackingBlock.hash===e.hash)return;const t=a._trackingBlockTimestamp,r=Date.now();t&&r-t>a._syncingTimeout?(a._trackingBlockTimestamp=null,yield a._warpToLatest()):(a._trackingBlock=e,a._trackingBlockTimestamp=r,a.emit("block",e))})()}_setCurrentBlock(e){var a=this;return r(function*(){if(a._currentBlock&&a._currentBlock.hash===e.hash)return;const t=a._currentBlock;a._currentBlock=e,a.emit("latest",e),a.emit("sync",{newBlock:e,oldBlock:t})})()}_warpToLatest(){var e=this;return r(function*(){yield e._setTrackingBlock(yield e._fetchLatestBlock())})()}_pollForNextBlock(){var e=this;return r(function*(){setTimeout(function(){return e._performSync()},e._pollingInterval)})()}_performSync(){var e=this;return r(function*(){if(!e._isRunning)return;const a=e.getTrackingBlock();if(!a)throw new Error("RpcBlockTracker - tracking block is missing");const t=o(a.number);try{const r=yield e._fetchBlockByNumber(t);r?(yield e._setTrackingBlock(r),e._performSync()):(yield e._setCurrentBlock(a),e._pollForNextBlock())}catch(t){t.message.includes("index out of range")||t.message.includes("Couldn't find block by reference")?(yield e._setCurrentBlock(a),e._pollForNextBlock()):(console.error(t),e._pollForNextBlock())}})()}_handleNewBlockNotification(e,a){var t=this;return r(function*(){a.id==t._subscriptionId&&(e&&(t.emit("error",e),yield t._removeSubscription()),yield t._setTrackingBlock(yield t._fetchBlockByNumber(a.result.number)))})()}_initSubscription(){var e=this;return r(function*(){e._provider.on("data",e._handleNewBlockNotification);let a=yield i(e._provider.sendAsync||e._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_subscribe",params:["newHeads"]});e._subscriptionId=a.result})()}_removeSubscription(){var e=this;return r(function*(){if(!e._subscriptionId)throw new Error("Not subscribed.");e._provider.removeListener("data",e._handleNewBlockNotification),yield i(e._provider.sendAsync||e._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_unsubscribe",params:[e._subscriptionId]}),delete e._subscriptionId})()}_fetchLatestBlock(){return i(this._query.getBlockByNumber).call(this._query,"latest",!0)}_fetchBlockByNumber(e){const a=f.formatHex(e);return i(this._query.getBlockByNumber).call(this._query,a,!0)}}},function(e,a,t){"use strict";var r=t(9),c=t(23).utils,n=c.assert,i=c.cachedProperty,f=c.parseBytes;function o(e,a){this.eddsa=e,"object"!=typeof a&&(a=f(a)),Array.isArray(a)&&(a={R:a.slice(0,e.encodingLength),S:a.slice(e.encodingLength)}),n(a.R&&a.S,"Signature without R or S"),e.isPoint(a.R)&&(this._R=a.R),a.S instanceof r&&(this._S=a.S),this._Rencoded=Array.isArray(a.R)?a.R:a.Rencoded,this._Sencoded=Array.isArray(a.S)?a.S:a.Sencoded}i(o,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),i(o,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),i(o,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),i(o,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),o.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},o.prototype.toHex=function(){return c.encode(this.toBytes(),"hex").toUpperCase()},e.exports=o},function(e,a,t){"use strict";var r=t(23).utils,c=r.assert,n=r.parseBytes,i=r.cachedProperty;function f(e,a){this.eddsa=e,this._secret=n(a.secret),e.isPoint(a.pub)?this._pub=a.pub:this._pubBytes=n(a.pub)}f.fromPublic=function(e,a){return a instanceof f?a:new f(e,{pub:a})},f.fromSecret=function(e,a){return a instanceof f?a:new f(e,{secret:a})},f.prototype.secret=function(){return this._secret},i(f,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),i(f,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),i(f,"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}),i(f,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),i(f,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),i(f,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),f.prototype.sign=function(e){return c(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},f.prototype.verify=function(e,a){return this.eddsa.verify(e,a,this)},f.prototype.getSecret=function(e){return c(this._secret,"KeyPair is public only"),r.encode(this.secret(),e)},f.prototype.getPublic=function(e){return r.encode(this.pubBytes(),e)},e.exports=f},function(e,a,t){"use strict";var r=t(185),c=t(23),n=c.utils,i=n.assert,f=n.parseBytes,o=t(990),d=t(989);function s(e){if(i("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof s))return new s(e);e=c.curves[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=r.sha512}e.exports=s,s.prototype.sign=function(e,a){e=f(e);var t=this.keyFromSecret(a),r=this.hashInt(t.messagePrefix(),e),c=this.g.mul(r),n=this.encodePoint(c),i=this.hashInt(n,t.pubBytes(),e).mul(t.priv()),o=r.add(i).umod(this.curve.n);return this.makeSignature({R:c,S:o,Rencoded:n})},s.prototype.verify=function(e,a,t){e=f(e),a=this.makeSignature(a);var r=this.keyFromPublic(t),c=this.hashInt(a.Rencoded(),r.pubBytes(),e),n=this.g.mul(a.S());return a.R().add(r.pub().mul(c)).eq(n)},s.prototype.hashInt=function(){for(var e=this.hash(),a=0;a<arguments.length;a++)e.update(arguments[a]);return n.intFromLE(e.digest()).umod(this.curve.n)},s.prototype.keyFromPublic=function(e){return o.fromPublic(this,e)},s.prototype.keyFromSecret=function(e){return o.fromSecret(this,e)},s.prototype.makeSignature=function(e){return e instanceof d?e:new d(this,e)},s.prototype.encodePoint=function(e){var a=e.getY().toArray("le",this.encodingLength);return a[this.encodingLength-1]|=e.getX().isOdd()?128:0,a},s.prototype.decodePoint=function(e){var a=(e=n.parseBytes(e)).length-1,t=e.slice(0,a).concat(-129&e[a]),r=0!=(128&e[a]),c=n.intFromLE(t);return this.curve.pointFromY(c,r)},s.prototype.encodeInt=function(e){return e.toArray("le",this.encodingLength)},s.prototype.decodeInt=function(e){return n.intFromLE(e)},s.prototype.isPoint=function(e){return e instanceof this.pointClass}},function(e,a,t){"use strict";var r=t(9),c=t(23).utils,n=c.assert;function i(e,a){if(e instanceof i)return e;this._importDER(e,a)||(n(e.r&&e.s,"Signature without r or s"),this.r=new r(e.r,16),this.s=new r(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function f(e,a){var t=e[a.place++];if(!(128&t))return t;for(var r=15&t,c=0,n=0,i=a.place;n<r;n++,i++)c<<=8,c|=e[i];return a.place=i,c}function o(e){for(var a=0,t=e.length-1;!e[a]&&!(128&e[a+1])&&a<t;)a++;return 0===a?e:e.slice(a)}function d(e,a){if(a<128)e.push(a);else{var t=1+(Math.log(a)/Math.LN2>>>3);for(e.push(128|t);--t;)e.push(a>>>(t<<3)&255);e.push(a)}}e.exports=i,i.prototype._importDER=function(e,a){e=c.toArray(e,a);var t=new function(){this.place=0};if(48!==e[t.place++])return!1;if(f(e,t)+t.place!==e.length)return!1;if(2!==e[t.place++])return!1;var n=f(e,t),i=e.slice(t.place,n+t.place);if(t.place+=n,2!==e[t.place++])return!1;var o=f(e,t);if(e.length!==o+t.place)return!1;var d=e.slice(t.place,o+t.place);return 0===i[0]&&128&i[1]&&(i=i.slice(1)),0===d[0]&&128&d[1]&&(d=d.slice(1)),this.r=new r(i),this.s=new r(d),this.recoveryParam=null,!0},i.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=o(a),t=o(t);!(t[0]||128&t[1]);)t=t.slice(1);var r=[2];d(r,a.length),(r=r.concat(a)).push(2),d(r,t.length);var n=r.concat(t),i=[48];return d(i,n.length),i=i.concat(n),c.encode(i,e)}},function(e,a,t){"use strict";var r=t(9),c=t(23).utils.assert;function n(e,a){this.ec=e,this.priv=null,this.pub=null,a.priv&&this._importPrivate(a.priv,a.privEnc),a.pub&&this._importPublic(a.pub,a.pubEnc)}e.exports=n,n.fromPublic=function(e,a,t){return a instanceof n?a:new n(e,{pub:a,pubEnc:t})},n.fromPrivate=function(e,a,t){return a instanceof n?a:new n(e,{priv:a,privEnc:t})},n.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(e,a){return"string"==typeof e&&(a=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),a?this.pub.encode(a,e):this.pub},n.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(e,a){this.priv=new r(e,a||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(e,a){if(e.x||e.y)return"mont"===this.ec.curve.type?c(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||c(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,a)},n.prototype.derive=function(e){return e.mul(this.priv).getX()},n.prototype.sign=function(e,a,t){return this.ec.sign(e,this,a,t)},n.prototype.verify=function(e,a){return this.ec.verify(e,a,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(e,a,t){"use strict";var r=t(185),c=t(383),n=t(46);function i(e){if(!(this instanceof i))return new i(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var a=c.toArray(e.entropy,e.entropyEnc||"hex"),t=c.toArray(e.nonce,e.nonceEnc||"hex"),r=c.toArray(e.pers,e.persEnc||"hex");n(a.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(a,t,r)}e.exports=i,i.prototype._init=function(e,a,t){var r=e.concat(a).concat(t);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var c=0;c<this.V.length;c++)this.K[c]=0,this.V[c]=1;this._update(r),this._reseed=1,this.reseedInterval=281474976710656},i.prototype._hmac=function(){return new r.hmac(this.hash,this.K)},i.prototype._update=function(e){var a=this._hmac().update(this.V).update([0]);e&&(a=a.update(e)),this.K=a.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},i.prototype.reseed=function(e,a,t,r){"string"!=typeof a&&(r=t,t=a,a=null),e=c.toArray(e,a),t=c.toArray(t,r),n(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(t||[])),this._reseed=1},i.prototype.generate=function(e,a,t,r){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof a&&(r=t,t=a,a=null),t&&(t=c.toArray(t,r||"hex"),this._update(t));for(var n=[];n.length<e;)this.V=this._hmac().update(this.V).digest(),n=n.concat(this.V);var i=n.slice(0,e);return this._update(t),this._reseed++,c.encode(i,a)}},function(e,a,t){"use strict";var r=t(9),c=t(994),n=t(23),i=n.utils.assert,f=t(993),o=t(992);function d(e){if(!(this instanceof d))return new d(e);"string"==typeof e&&(i(n.curves.hasOwnProperty(e),"Unknown curve "+e),e=n.curves[e]),e instanceof n.curves.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}e.exports=d,d.prototype.keyPair=function(e){return new f(this,e)},d.prototype.keyFromPrivate=function(e,a){return f.fromPrivate(this,e,a)},d.prototype.keyFromPublic=function(e,a){return f.fromPublic(this,e,a)},d.prototype.genKeyPair=function(e){e||(e={});for(var a=new c({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||n.rand(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),t=this.n.byteLength(),i=this.n.sub(new r(2));;){var f=new r(a.generate(t));if(!(f.cmp(i)>0))return f.iaddn(1),this.keyFromPrivate(f)}},d.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},d.prototype.sign=function(e,a,t,n){"object"==typeof t&&(n=t,t=null),n||(n={}),a=this.keyFromPrivate(a,t),e=this._truncateToN(new r(e,16));for(var i=this.n.byteLength(),f=a.getPrivate().toArray("be",i),d=e.toArray("be",i),s=new c({hash:this.hash,entropy:f,nonce:d,pers:n.pers,persEnc:n.persEnc||"utf8"}),b=this.n.sub(new r(1)),u=0;;u++){var l=n.k?n.k(u):new r(s.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(b)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var h=p.getX(),m=h.umod(this.n);if(0!==m.cmpn(0)){var g=l.invm(this.n).mul(m.mul(a.getPrivate()).iadd(e));if(0!==(g=g.umod(this.n)).cmpn(0)){var v=(p.getY().isOdd()?1:0)|(0!==h.cmp(m)?2:0);return n.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g),v^=1),new o({r:m,s:g,recoveryParam:v})}}}}}},d.prototype.verify=function(e,a,t,c){e=this._truncateToN(new r(e,16)),t=this.keyFromPublic(t,c);var n=(a=new o(a,"hex")).r,i=a.s;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;var f,d=i.invm(this.n),s=d.mul(e).umod(this.n),b=d.mul(n).umod(this.n);return this.curve._maxwellTrick?!(f=this.g.jmulAdd(s,t.getPublic(),b)).isInfinity()&&f.eqXToP(n):!(f=this.g.mulAdd(s,t.getPublic(),b)).isInfinity()&&0===f.getX().umod(this.n).cmp(n)},d.prototype.recoverPubKey=function(e,a,t,c){i((3&t)===t,"The recovery param is more than two bits"),a=new o(a,c);var n=this.n,f=new r(e),d=a.r,s=a.s,b=1&t,u=t>>1;if(d.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");d=u?this.curve.pointFromX(d.add(this.curve.n),b):this.curve.pointFromX(d,b);var l=a.r.invm(n),p=n.sub(f).mul(l).umod(n),h=s.mul(l).umod(n);return this.g.mulAdd(p,d,h)},d.prototype.getKeyRecoveryParam=function(e,a,t,r){if(null!==(a=new o(a,r)).recoveryParam)return a.recoveryParam;for(var c=0;c<4;c++){var n;try{n=this.recoverPubKey(e,a,c)}catch(e){continue}if(n.eq(t))return c}throw new Error("Unable to find valid recovery factor")}},function(e,a){e.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"]]}}},function(e,a,t){"use strict";var r=t(37),c=t(46);function n(e,a,t){if(!(this instanceof n))return new n(e,a,t);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(r.toArray(a,t))}e.exports=n,n.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),c(e.length<=this.blockSize);for(var a=e.length;a<this.blockSize;a++)e.push(0);for(a=0;a<e.length;a++)e[a]^=54;for(this.inner=(new this.Hash).update(e),a=0;a<e.length;a++)e[a]^=106;this.outer=(new this.Hash).update(e)},n.prototype.update=function(e,a){return this.inner.update(e,a),this},n.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},function(e,a,t){"use strict";var r=t(37),c=t(90),n=r.rotl32,i=r.sum32,f=r.sum32_3,o=r.sum32_4,d=c.BlockHash;function s(){if(!(this instanceof s))return new s;d.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function b(e,a,t,r){return e<=15?a^t^r:e<=31?a&t|~a&r:e<=47?(a|~t)^r:e<=63?a&r|t&~r:a^(t|~r)}function u(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function l(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}r.inherits(s,d),a.ripemd160=s,s.blockSize=512,s.outSize=160,s.hmacStrength=192,s.padLength=64,s.prototype._update=function(e,a){for(var t=this.h[0],r=this.h[1],c=this.h[2],d=this.h[3],s=this.h[4],v=t,y=r,_=c,w=d,A=s,k=0;k<80;k++){var x=i(n(o(t,b(k,r,c,d),e[p[k]+a],u(k)),m[k]),s);t=s,s=d,d=n(c,10),c=r,r=x,x=i(n(o(v,b(79-k,y,_,w),e[h[k]+a],l(k)),g[k]),A),v=A,A=w,w=n(_,10),_=y,y=x}x=f(this.h[1],c,w),this.h[1]=f(this.h[2],d,A),this.h[2]=f(this.h[3],s,v),this.h[3]=f(this.h[4],t,y),this.h[4]=f(this.h[0],r,_),this.h[0]=x},s.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h,"little"):r.split32(this.h,"little")};var p=[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],h=[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],m=[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],g=[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]},function(e,a,t){"use strict";var r=t(37),c=t(380);function n(){if(!(this instanceof n))return new n;c.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}r.inherits(n,c),e.exports=n,n.blockSize=1024,n.outSize=384,n.hmacStrength=192,n.padLength=128,n.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h.slice(0,12),"big"):r.split32(this.h.slice(0,12),"big")}},function(e,a,t){"use strict";var r=t(37),c=t(381);function n(){if(!(this instanceof n))return new n;c.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}r.inherits(n,c),e.exports=n,n.blockSize=512,n.outSize=224,n.hmacStrength=192,n.padLength=64,n.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h.slice(0,7),"big"):r.split32(this.h.slice(0,7),"big")}},function(e,a,t){"use strict";var r=t(37),c=t(90),n=t(382),i=r.rotl32,f=r.sum32,o=r.sum32_5,d=n.ft_1,s=c.BlockHash,b=[1518500249,1859775393,2400959708,3395469782];function u(){if(!(this instanceof u))return new u;s.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}r.inherits(u,s),e.exports=u,u.blockSize=512,u.outSize=160,u.hmacStrength=80,u.padLength=64,u.prototype._update=function(e,a){for(var t=this.W,r=0;r<16;r++)t[r]=e[a+r];for(;r<t.length;r++)t[r]=i(t[r-3]^t[r-8]^t[r-14]^t[r-16],1);var c=this.h[0],n=this.h[1],s=this.h[2],u=this.h[3],l=this.h[4];for(r=0;r<t.length;r++){var p=~~(r/20),h=o(i(c,5),d(p,n,s,u),l,t[r],b[p]);l=u,u=s,s=i(n,30),n=c,c=h}this.h[0]=f(this.h[0],c),this.h[1]=f(this.h[1],n),this.h[2]=f(this.h[2],s),this.h[3]=f(this.h[3],u),this.h[4]=f(this.h[4],l)},u.prototype._digest=function(e){return"hex"===e?r.toHex32(this.h,"big"):r.split32(this.h,"big")}},function(e,a,t){"use strict";a.sha1=t(1001),a.sha224=t(1e3),a.sha256=t(381),a.sha384=t(999),a.sha512=t(380)},function(e,a,t){"use strict";var r,c=a,n=t(185),i=t(23),f=i.utils.assert;function o(e){"short"===e.type?this.curve=new i.curve.short(e):"edwards"===e.type?this.curve=new i.curve.edwards(e):this.curve=new i.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,f(this.g.validate(),"Invalid curve"),f(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function d(e,a){Object.defineProperty(c,e,{configurable:!0,enumerable:!0,get:function(){var t=new o(a);return Object.defineProperty(c,e,{configurable:!0,enumerable:!0,value:t}),t}})}c.PresetCurve=o,d("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:n.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),d("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:n.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),d("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:n.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),d("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:n.sha384,gRed:!1,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"]}),d("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:n.sha512,gRed:!1,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"]}),d("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:n.sha256,gRed:!1,g:["9"]}),d("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:n.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{r=t(996)}catch(e){r=void 0}d("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:n.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",r]})},function(e,a,t){"use strict";var r=t(119),c=t(23),n=t(9),i=t(0),f=r.base,o=c.utils.assert;function d(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,f.call(this,"edwards",e),this.a=new n(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),o(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function s(e,a,t,r,c){f.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 n(a,16),this.y=new n(t,16),this.z=r?new n(r,16):this.curve.one,this.t=c&&new n(c,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()))))}i(d,f),e.exports=d,d.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},d.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},d.prototype.jpoint=function(e,a,t,r){return this.point(e,a,t,r)},d.prototype.pointFromX=function(e,a){(e=new n(e,16)).red||(e=e.toRed(this.red));var t=e.redSqr(),r=this.c2.redSub(this.a.redMul(t)),c=this.one.redSub(this.c2.redMul(this.d).redMul(t)),i=r.redMul(c.redInvm()),f=i.redSqrt();if(0!==f.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var o=f.fromRed().isOdd();return(a&&!o||!a&&o)&&(f=f.redNeg()),this.point(e,f)},d.prototype.pointFromY=function(e,a){(e=new n(e,16)).red||(e=e.toRed(this.red));var t=e.redSqr(),r=t.redSub(this.one),c=t.redMul(this.d).redAdd(this.one),i=r.redMul(c.redInvm());if(0===i.cmp(this.zero)){if(a)throw new Error("invalid point");return this.point(this.zero,e)}var f=i.redSqrt();if(0!==f.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");return f.isOdd()!==a&&(f=f.redNeg()),this.point(f,e)},d.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),c=this.c2.redMul(this.one.redAdd(this.d.redMul(a).redMul(t)));return 0===r.cmp(c)},i(s,f.BasePoint),d.prototype.pointFromJSON=function(e){return s.fromJSON(this,e)},d.prototype.point=function(e,a,t,r){return new s(this,e,a,t,r)},s.fromJSON=function(e,a){return new s(e,a[0],a[1],a[2])},s.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},s.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},s.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),c=this.x.redAdd(this.y).redSqr().redISub(e).redISub(a),n=r.redAdd(a),i=n.redSub(t),f=r.redSub(a),o=c.redMul(i),d=n.redMul(f),s=c.redMul(f),b=i.redMul(n);return this.curve.point(o,d,b,s)},s.prototype._projDbl=function(){var e,a,t,r=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),n=this.y.redSqr();if(this.curve.twisted){var i=(d=this.curve._mulA(c)).redAdd(n);if(this.zOne)e=r.redSub(c).redSub(n).redMul(i.redSub(this.curve.two)),a=i.redMul(d.redSub(n)),t=i.redSqr().redSub(i).redSub(i);else{var f=this.z.redSqr(),o=i.redSub(f).redISub(f);e=r.redSub(c).redISub(n).redMul(o),a=i.redMul(d.redSub(n)),t=i.redMul(o)}}else{var d=c.redAdd(n);f=this.curve._mulC(this.c.redMul(this.z)).redSqr(),o=d.redSub(f).redSub(f);e=this.curve._mulC(r.redISub(d)).redMul(o),a=this.curve._mulC(d).redMul(c.redISub(n)),t=d.redMul(o)}return this.curve.point(e,a,t)},s.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},s.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),c=this.z.redMul(e.z.redAdd(e.z)),n=t.redSub(a),i=c.redSub(r),f=c.redAdd(r),o=t.redAdd(a),d=n.redMul(i),s=f.redMul(o),b=n.redMul(o),u=i.redMul(f);return this.curve.point(d,s,u,b)},s.prototype._projAdd=function(e){var a,t,r=this.z.redMul(e.z),c=r.redSqr(),n=this.x.redMul(e.x),i=this.y.redMul(e.y),f=this.curve.d.redMul(n).redMul(i),o=c.redSub(f),d=c.redAdd(f),s=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(n).redISub(i),b=r.redMul(o).redMul(s);return this.curve.twisted?(a=r.redMul(d).redMul(i.redSub(this.curve._mulA(n))),t=o.redMul(d)):(a=r.redMul(d).redMul(i.redSub(n)),t=this.curve._mulC(o).redMul(d)),this.curve.point(b,a,t)},s.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},s.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},s.prototype.mulAdd=function(e,a,t){return this.curve._wnafMulAdd(1,[this,a],[e,t],2,!1)},s.prototype.jmulAdd=function(e,a,t){return this.curve._wnafMulAdd(1,[this,a],[e,t],2,!0)},s.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},s.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},s.prototype.getX=function(){return this.normalize(),this.x.fromRed()},s.prototype.getY=function(){return this.normalize(),this.y.fromRed()},s.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},s.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}return!1},s.prototype.toP=s.prototype.normalize,s.prototype.mixedAdd=s.prototype.add},function(e,a,t){"use strict";var r=t(119),c=t(9),n=t(0),i=r.base,f=t(23).utils;function o(e){i.call(this,"mont",e),this.a=new c(e.a,16).toRed(this.red),this.b=new c(e.b,16).toRed(this.red),this.i4=new c(4).toRed(this.red).redInvm(),this.two=new c(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function d(e,a,t){i.BasePoint.call(this,e,"projective"),null===a&&null===t?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new c(a,16),this.z=new c(t,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}n(o,i),e.exports=o,o.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)},n(d,i.BasePoint),o.prototype.decodePoint=function(e,a){return this.point(f.toArray(e,a),1)},o.prototype.point=function(e,a){return new d(this,e,a)},o.prototype.pointFromJSON=function(e){return d.fromJSON(this,e)},d.prototype.precompute=function(){},d.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},d.fromJSON=function(e,a){return new d(e,a[0],a[1]||e.one)},d.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},d.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},d.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),c=t.redMul(a.redAdd(this.curve.a24.redMul(t)));return this.curve.point(r,c)},d.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},d.prototype.diffAdd=function(e,a){var t=this.x.redAdd(this.z),r=this.x.redSub(this.z),c=e.x.redAdd(e.z),n=e.x.redSub(e.z).redMul(t),i=c.redMul(r),f=a.z.redMul(n.redAdd(i).redSqr()),o=a.x.redMul(n.redISub(i).redSqr());return this.curve.point(f,o)},d.prototype.mul=function(e){for(var a=e.clone(),t=this,r=this.curve.point(null,null),c=[];0!==a.cmpn(0);a.iushrn(1))c.push(a.andln(1));for(var n=c.length-1;n>=0;n--)0===c[n]?(t=t.diffAdd(r,this),r=r.dbl()):(r=t.diffAdd(r,this),t=t.dbl());return r},d.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},d.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},d.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},d.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},d.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,a,t){"use strict";var r=t(119),c=t(23),n=t(9),i=t(0),f=r.base,o=c.utils.assert;function d(e){f.call(this,"short",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function s(e,a,t,r){f.BasePoint.call(this,e,"affine"),null===a&&null===t?(this.x=null,this.y=null,this.inf=!0):(this.x=new n(a,16),this.y=new n(t,16),r&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function b(e,a,t,r){f.BasePoint.call(this,e,"jacobian"),null===a&&null===t&&null===r?(this.x=this.curve.one,this.y=this.curve.one,this.z=new n(0)):(this.x=new n(a,16),this.y=new n(t,16),this.z=new n(r,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.zOne=this.z===this.curve.one}i(d,f),e.exports=d,d.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var a,t;if(e.beta)a=new n(e.beta,16).toRed(this.red);else{var r=this._getEndoRoots(this.p);a=(a=r[0].cmp(r[1])<0?r[0]:r[1]).toRed(this.red)}if(e.lambda)t=new n(e.lambda,16);else{var c=this._getEndoRoots(this.n);0===this.g.mul(c[0]).x.cmp(this.g.x.redMul(a))?t=c[0]:(t=c[1],o(0===this.g.mul(t).x.cmp(this.g.x.redMul(a))))}return{beta:a,lambda:t,basis:e.basis?e.basis.map(function(e){return{a:new n(e.a,16),b:new n(e.b,16)}}):this._getEndoBasis(t)}}},d.prototype._getEndoRoots=function(e){var a=e===this.p?this.red:n.mont(e),t=new n(2).toRed(a).redInvm(),r=t.redNeg(),c=new n(3).toRed(a).redNeg().redSqrt().redMul(t);return[r.redAdd(c).fromRed(),r.redSub(c).fromRed()]},d.prototype._getEndoBasis=function(e){for(var a,t,r,c,i,f,o,d,s,b=this.n.ushrn(Math.floor(this.n.bitLength()/2)),u=e,l=this.n.clone(),p=new n(1),h=new n(0),m=new n(0),g=new n(1),v=0;0!==u.cmpn(0);){var y=l.div(u);d=l.sub(y.mul(u)),s=m.sub(y.mul(p));var _=g.sub(y.mul(h));if(!r&&d.cmp(b)<0)a=o.neg(),t=p,r=d.neg(),c=s;else if(r&&2==++v)break;o=d,l=u,u=d,m=p,p=s,g=h,h=_}i=d.neg(),f=s;var w=r.sqr().add(c.sqr());return i.sqr().add(f.sqr()).cmp(w)>=0&&(i=a,f=t),r.negative&&(r=r.neg(),c=c.neg()),i.negative&&(i=i.neg(),f=f.neg()),[{a:r,b:c},{a:i,b:f}]},d.prototype._endoSplit=function(e){var a=this.endo.basis,t=a[0],r=a[1],c=r.b.mul(e).divRound(this.n),n=t.b.neg().mul(e).divRound(this.n),i=c.mul(t.a),f=n.mul(r.a),o=c.mul(t.b),d=n.mul(r.b);return{k1:e.sub(i).sub(f),k2:o.add(d).neg()}},d.prototype.pointFromX=function(e,a){(e=new n(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 c=r.fromRed().isOdd();return(a&&!c||!a&&c)&&(r=r.redNeg()),this.point(e,r)},d.prototype.validate=function(e){if(e.inf)return!0;var a=e.x,t=e.y,r=this.a.redMul(a),c=a.redSqr().redMul(a).redIAdd(r).redIAdd(this.b);return 0===t.redSqr().redISub(c).cmpn(0)},d.prototype._endoWnafMulAdd=function(e,a,t){for(var r=this._endoWnafT1,c=this._endoWnafT2,n=0;n<e.length;n++){var i=this._endoSplit(a[n]),f=e[n],o=f._getBeta();i.k1.negative&&(i.k1.ineg(),f=f.neg(!0)),i.k2.negative&&(i.k2.ineg(),o=o.neg(!0)),r[2*n]=f,r[2*n+1]=o,c[2*n]=i.k1,c[2*n+1]=i.k2}for(var d=this._wnafMulAdd(1,r,c,2*n,t),s=0;s<2*n;s++)r[s]=null,c[s]=null;return d},i(s,f.BasePoint),d.prototype.point=function(e,a,t){return new s(this,e,a,t)},d.prototype.pointFromJSON=function(e,a){return s.fromJSON(this,e,a)},s.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var a=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var t=this.curve,r=function(e){return t.point(e.x.redMul(t.endo.beta),e.y)};e.beta=a,a.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(r)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(r)}}}return a}},s.prototype.toJSON=function(){return this.precomputed?[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)}}]:[this.x,this.y]},s.fromJSON=function(e,a,t){"string"==typeof a&&(a=JSON.parse(a));var r=e.point(a[0],a[1],t);if(!a[2])return r;function c(a){return e.point(a[0],a[1],t)}var n=a[2];return r.precomputed={beta:null,doubles:n.doubles&&{step:n.doubles.step,points:[r].concat(n.doubles.points.map(c))},naf:n.naf&&{wnd:n.naf.wnd,points:[r].concat(n.naf.points.map(c))}},r},s.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},s.prototype.isInfinity=function(){return this.inf},s.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)},s.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(),c=t.redAdd(t).redIAdd(t).redIAdd(a).redMul(r),n=c.redSqr().redISub(this.x.redAdd(this.x)),i=c.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,i)},s.prototype.getX=function(){return this.x.fromRed()},s.prototype.getY=function(){return this.y.fromRed()},s.prototype.mul=function(e){return e=new n(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},s.prototype.mulAdd=function(e,a,t){var r=[this,a],c=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(r,c):this.curve._wnafMulAdd(1,r,c,2)},s.prototype.jmulAdd=function(e,a,t){var r=[this,a],c=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(r,c,!0):this.curve._wnafMulAdd(1,r,c,2,!0)},s.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))},s.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},s.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},i(b,f.BasePoint),d.prototype.jpoint=function(e,a,t){return new b(this,e,a,t)},b.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)},b.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},b.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),c=e.x.redMul(t),n=this.y.redMul(a.redMul(e.z)),i=e.y.redMul(t.redMul(this.z)),f=r.redSub(c),o=n.redSub(i);if(0===f.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var d=f.redSqr(),s=d.redMul(f),b=r.redMul(d),u=o.redSqr().redIAdd(s).redISub(b).redISub(b),l=o.redMul(b.redISub(u)).redISub(n.redMul(s)),p=this.z.redMul(e.z).redMul(f);return this.curve.jpoint(u,l,p)},b.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),c=this.y,n=e.y.redMul(a).redMul(this.z),i=t.redSub(r),f=c.redSub(n);if(0===i.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var o=i.redSqr(),d=o.redMul(i),s=t.redMul(o),b=f.redSqr().redIAdd(d).redISub(s).redISub(s),u=f.redMul(s.redISub(b)).redISub(c.redMul(d)),l=this.z.redMul(i);return this.curve.jpoint(b,u,l)},b.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<e;t++)a=a.dbl();return a}var r=this.curve.a,c=this.curve.tinv,n=this.x,i=this.y,f=this.z,o=f.redSqr().redSqr(),d=i.redAdd(i);for(t=0;t<e;t++){var s=n.redSqr(),b=d.redSqr(),u=b.redSqr(),l=s.redAdd(s).redIAdd(s).redIAdd(r.redMul(o)),p=n.redMul(b),h=l.redSqr().redISub(p.redAdd(p)),m=p.redISub(h),g=l.redMul(m);g=g.redIAdd(g).redISub(u);var v=d.redMul(f);t+1<e&&(o=o.redMul(u)),n=h,f=v,d=g}return this.curve.jpoint(n,d.redMul(c),f)},b.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},b.prototype._zeroDbl=function(){var e,a,t;if(this.zOne){var r=this.x.redSqr(),c=this.y.redSqr(),n=c.redSqr(),i=this.x.redAdd(c).redSqr().redISub(r).redISub(n);i=i.redIAdd(i);var f=r.redAdd(r).redIAdd(r),o=f.redSqr().redISub(i).redISub(i),d=n.redIAdd(n);d=(d=d.redIAdd(d)).redIAdd(d),e=o,a=f.redMul(i.redISub(o)).redISub(d),t=this.y.redAdd(this.y)}else{var s=this.x.redSqr(),b=this.y.redSqr(),u=b.redSqr(),l=this.x.redAdd(b).redSqr().redISub(s).redISub(u);l=l.redIAdd(l);var p=s.redAdd(s).redIAdd(s),h=p.redSqr(),m=u.redIAdd(u);m=(m=m.redIAdd(m)).redIAdd(m),e=h.redISub(l).redISub(l),a=p.redMul(l.redISub(e)).redISub(m),t=(t=this.y.redMul(this.z)).redIAdd(t)}return this.curve.jpoint(e,a,t)},b.prototype._threeDbl=function(){var e,a,t;if(this.zOne){var r=this.x.redSqr(),c=this.y.redSqr(),n=c.redSqr(),i=this.x.redAdd(c).redSqr().redISub(r).redISub(n);i=i.redIAdd(i);var f=r.redAdd(r).redIAdd(r).redIAdd(this.curve.a),o=f.redSqr().redISub(i).redISub(i);e=o;var d=n.redIAdd(n);d=(d=d.redIAdd(d)).redIAdd(d),a=f.redMul(i.redISub(o)).redISub(d),t=this.y.redAdd(this.y)}else{var s=this.z.redSqr(),b=this.y.redSqr(),u=this.x.redMul(b),l=this.x.redSub(s).redMul(this.x.redAdd(s));l=l.redAdd(l).redIAdd(l);var p=u.redIAdd(u),h=(p=p.redIAdd(p)).redAdd(p);e=l.redSqr().redISub(h),t=this.y.redAdd(this.z).redSqr().redISub(b).redISub(s);var m=b.redSqr();m=(m=(m=m.redIAdd(m)).redIAdd(m)).redIAdd(m),a=l.redMul(p.redISub(e)).redISub(m)}return this.curve.jpoint(e,a,t)},b.prototype._dbl=function(){var e=this.curve.a,a=this.x,t=this.y,r=this.z,c=r.redSqr().redSqr(),n=a.redSqr(),i=t.redSqr(),f=n.redAdd(n).redIAdd(n).redIAdd(e.redMul(c)),o=a.redAdd(a),d=(o=o.redIAdd(o)).redMul(i),s=f.redSqr().redISub(d.redAdd(d)),b=d.redISub(s),u=i.redSqr();u=(u=(u=u.redIAdd(u)).redIAdd(u)).redIAdd(u);var l=f.redMul(b).redISub(u),p=t.redAdd(t).redMul(r);return this.curve.jpoint(s,l,p)},b.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr(),r=a.redSqr(),c=e.redAdd(e).redIAdd(e),n=c.redSqr(),i=this.x.redAdd(a).redSqr().redISub(e).redISub(r),f=(i=(i=(i=i.redIAdd(i)).redAdd(i).redIAdd(i)).redISub(n)).redSqr(),o=r.redIAdd(r);o=(o=(o=o.redIAdd(o)).redIAdd(o)).redIAdd(o);var d=c.redIAdd(i).redSqr().redISub(n).redISub(f).redISub(o),s=a.redMul(d);s=(s=s.redIAdd(s)).redIAdd(s);var b=this.x.redMul(f).redISub(s);b=(b=b.redIAdd(b)).redIAdd(b);var u=this.y.redMul(d.redMul(o.redISub(d)).redISub(i.redMul(f)));u=(u=(u=u.redIAdd(u)).redIAdd(u)).redIAdd(u);var l=this.z.redAdd(i).redSqr().redISub(t).redISub(f);return this.curve.jpoint(b,u,l)},b.prototype.mul=function(e,a){return e=new n(e,a),this.curve._wnafMul(this,e)},b.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var a=this.z.redSqr(),t=e.z.redSqr();if(0!==this.x.redMul(t).redISub(e.x.redMul(a)).cmpn(0))return!1;var r=a.redMul(this.z),c=t.redMul(e.z);return 0===this.y.redMul(c).redISub(e.y.redMul(r)).cmpn(0)},b.prototype.eqXToP=function(e){var a=this.z.redSqr(),t=e.toRed(this.curve.red).redMul(a);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),c=this.curve.redN.redMul(a);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(c),0===this.x.cmp(t))return!0}return!1},b.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},b.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,a,t){"use strict";var r=t(9),c=t(23).utils,n=c.getNAF,i=c.getJSF,f=c.assert;function o(e,a){this.type=e,this.p=new r(a.p,16),this.red=a.prime?r.red(a.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=a.n&&new r(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 d(e,a){this.curve=e,this.type=a,this.precomputed=null}e.exports=o,o.prototype.point=function(){throw new Error("Not implemented")},o.prototype.validate=function(){throw new Error("Not implemented")},o.prototype._fixedNafMul=function(e,a){f(e.precomputed);var t=e._getDoubles(),r=n(a,1),c=(1<<t.step+1)-(t.step%2==0?2:1);c/=3;for(var i=[],o=0;o<r.length;o+=t.step){var d=0;for(a=o+t.step-1;a>=o;a--)d=(d<<1)+r[a];i.push(d)}for(var s=this.jpoint(null,null,null),b=this.jpoint(null,null,null),u=c;u>0;u--){for(o=0;o<i.length;o++){(d=i[o])===u?b=b.mixedAdd(t.points[o]):d===-u&&(b=b.mixedAdd(t.points[o].neg()))}s=s.add(b)}return s.toP()},o.prototype._wnafMul=function(e,a){var t=4,r=e._getNAFPoints(t);t=r.wnd;for(var c=r.points,i=n(a,t),o=this.jpoint(null,null,null),d=i.length-1;d>=0;d--){for(a=0;d>=0&&0===i[d];d--)a++;if(d>=0&&a++,o=o.dblp(a),d<0)break;var s=i[d];f(0!==s),o="affine"===e.type?s>0?o.mixedAdd(c[s-1>>1]):o.mixedAdd(c[-s-1>>1].neg()):s>0?o.add(c[s-1>>1]):o.add(c[-s-1>>1].neg())}return"affine"===e.type?o.toP():o},o.prototype._wnafMulAdd=function(e,a,t,r,c){for(var f=this._wnafT1,o=this._wnafT2,d=this._wnafT3,s=0,b=0;b<r;b++){var u=(E=a[b])._getNAFPoints(e);f[b]=u.wnd,o[b]=u.points}for(b=r-1;b>=1;b-=2){var l=b-1,p=b;if(1===f[l]&&1===f[p]){var h=[a[l],null,null,a[p]];0===a[l].y.cmp(a[p].y)?(h[1]=a[l].add(a[p]),h[2]=a[l].toJ().mixedAdd(a[p].neg())):0===a[l].y.cmp(a[p].y.redNeg())?(h[1]=a[l].toJ().mixedAdd(a[p]),h[2]=a[l].add(a[p].neg())):(h[1]=a[l].toJ().mixedAdd(a[p]),h[2]=a[l].toJ().mixedAdd(a[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],g=i(t[l],t[p]);s=Math.max(g[0].length,s),d[l]=new Array(s),d[p]=new Array(s);for(var v=0;v<s;v++){var y=0|g[0][v],_=0|g[1][v];d[l][v]=m[3*(y+1)+(_+1)],d[p][v]=0,o[l]=h}}else d[l]=n(t[l],f[l]),d[p]=n(t[p],f[p]),s=Math.max(d[l].length,s),s=Math.max(d[p].length,s)}var w=this.jpoint(null,null,null),A=this._wnafT4;for(b=s;b>=0;b--){for(var k=0;b>=0;){var x=!0;for(v=0;v<r;v++)A[v]=0|d[v][b],0!==A[v]&&(x=!1);if(!x)break;k++,b--}if(b>=0&&k++,w=w.dblp(k),b<0)break;for(v=0;v<r;v++){var E,S=A[v];0!==S&&(S>0?E=o[v][S-1>>1]:S<0&&(E=o[v][-S-1>>1].neg()),w="affine"===E.type?w.mixedAdd(E):w.add(E))}}for(b=0;b<r;b++)o[b]=null;return c?w:w.toP()},o.BasePoint=d,d.prototype.eq=function(){throw new Error("Not implemented")},d.prototype.validate=function(){return this.curve.validate(this)},o.prototype.decodePoint=function(e,a){e=c.toArray(e,a);var t=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*t)return 6===e[0]?f(e[e.length-1]%2==0):7===e[0]&&f(e[e.length-1]%2==1),this.point(e.slice(1,1+t),e.slice(1+t,1+2*t));if((2===e[0]||3===e[0])&&e.length-1===t)return this.pointFromX(e.slice(1,1+t),3===e[0]);throw new Error("Unknown point format")},d.prototype.encodeCompressed=function(e){return this.encode(e,!0)},d.prototype._encode=function(e){var a=this.curve.p.byteLength(),t=this.getX().toArray("be",a);return e?[this.getY().isEven()?2:3].concat(t):[4].concat(t,this.getY().toArray("be",a))},d.prototype.encode=function(e,a){return c.encode(this._encode(a),e)},d.prototype.precompute=function(e){if(this.precomputed)return this;var a={doubles:null,naf:null,beta:null};return a.naf=this._getNAFPoints(8),a.doubles=this._getDoubles(4,e),a.beta=this._getBeta(),this.precomputed=a,this},d.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var a=this.precomputed.doubles;return!!a&&a.points.length>=Math.ceil((e.bitLength()+1)/a.step)},d.prototype._getDoubles=function(e,a){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],r=this,c=0;c<a;c+=e){for(var n=0;n<e;n++)r=r.dbl();t.push(r)}return{step:e,points:t}},d.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var a=[this],t=(1<<e)-1,r=1===t?null:this.dbl(),c=1;c<t;c++)a[c]=a[c-1].add(r);return{wnd:e,points:a}},d.prototype._getBeta=function(){return null},d.prototype.dblp=function(e){for(var a=this,t=0;t<e;t++)a=a.dbl();return a}},function(e,a,t){var r;function c(e){this.rand=e}if(e.exports=function(e){return r||(r=new c(null)),r.generate(e)},e.exports.Rand=c,c.prototype.generate=function(e){return this._rand(e)},c.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var a=new Uint8Array(e),t=0;t<a.length;t++)a[t]=this.rand.getByte();return a},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?c.prototype._rand=function(e){var a=new Uint8Array(e);return self.crypto.getRandomValues(a),a}:self.msCrypto&&self.msCrypto.getRandomValues?c.prototype._rand=function(e){var a=new Uint8Array(e);return self.msCrypto.getRandomValues(a),a}:"object"==typeof window&&(c.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=t(10);if("function"!=typeof n.randomBytes)throw new Error("Not supported");c.prototype._rand=function(e){return n.randomBytes(e)}}catch(e){}},function(e,a,t){"use strict";var r=a,c=t(9),n=t(46),i=t(383);r.assert=n,r.toArray=i.toArray,r.zero2=i.zero2,r.toHex=i.toHex,r.encode=i.encode,r.getNAF=function(e,a){for(var t=[],r=1<<a+1,c=e.clone();c.cmpn(1)>=0;){var n;if(c.isOdd()){var i=c.andln(r-1);n=i>(r>>1)-1?(r>>1)-i:i,c.isubn(n)}else n=0;t.push(n);for(var f=0!==c.cmpn(0)&&0===c.andln(r-1)?a+1:1,o=1;o<f;o++)t.push(0);c.iushrn(f)}return t},r.getJSF=function(e,a){var t=[[],[]];e=e.clone(),a=a.clone();for(var r=0,c=0;e.cmpn(-r)>0||a.cmpn(-c)>0;){var n,i,f,o=e.andln(3)+r&3,d=a.andln(3)+c&3;3===o&&(o=-1),3===d&&(d=-1),n=0==(1&o)?0:3!=(f=e.andln(7)+r&7)&&5!==f||2!==d?o:-o,t[0].push(n),i=0==(1&d)?0:3!=(f=a.andln(7)+c&7)&&5!==f||2!==o?d:-d,t[1].push(i),2*r===n+1&&(r=1-r),2*c===i+1&&(c=1-c),e.iushrn(1),a.iushrn(1)}return t},r.cachedProperty=function(e,a,t){var r="_"+a;e.prototype[a]=function(){return void 0!==this[r]?this[r]:this[r]=t.call(this)}},r.parseBytes=function(e){return"string"==typeof e?r.toArray(e,"hex"):e},r.intFromLE=function(e){return new c(e,"hex","le")}},function(e){e.exports={_args:[["elliptic@6.4.0","/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core"]],_from:"elliptic@6.4.0",_id:"elliptic@6.4.0",_inBundle:!1,_integrity:"sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",_location:"/ganache-core/elliptic",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"elliptic@6.4.0",name:"elliptic",escapedName:"elliptic",rawSpec:"6.4.0",saveSpec:null,fetchSpec:"6.4.0"},_requiredBy:["/ganache-core/browserify-sign","/ganache-core/create-ecdh","/ganache-core/eth-lib","/ganache-core/secp256k1","/ganache-core/web3-eth-accounts/eth-lib"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",_spec:"6.4.0",_where:"/home/benjamincburns/projects/consensys/ganache-cli/node_modules/ganache-core",author:{name:"Fedor Indutny",email:"fedor@indutny.com"},bugs:{url:"https://github.com/indutny/elliptic/issues"},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"},description:"EC cryptography",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","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":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},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.4.0"}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(30),n=t(9),i=t(23).ec,f=t(384),o=new i("secp256k1"),d=o.curve;function s(e){var a=e[0];switch(a){case 2:case 3:return 33!==e.length?null:function(e,a){var t=new n(a);if(t.cmp(d.p)>=0)return null;var r=(t=t.toRed(d.red)).redSqr().redIMul(t).redIAdd(d.b).redSqrt();return 3===e!==r.isOdd()&&(r=r.redNeg()),o.keyPair({pub:{x:t,y:r}})}(a,e.slice(1,33));case 4:case 6:case 7:return 65!==e.length?null:function(e,a,t){var r=new n(a),c=new n(t);if(r.cmp(d.p)>=0||c.cmp(d.p)>=0)return null;if(r=r.toRed(d.red),c=c.toRed(d.red),(6===e||7===e)&&c.isOdd()!==(7===e))return null;var i=r.redSqr().redIMul(r);return c.redSqr().redISub(i.redIAdd(d.b)).isZero()?o.keyPair({pub:{x:r,y:c}}):null}(a,e.slice(1,33),e.slice(33,65));default:return null}}a.privateKeyVerify=function(e){var a=new n(e);return a.cmp(d.n)<0&&!a.isZero()},a.privateKeyExport=function(e,a){var t=new n(e);if(t.cmp(d.n)>=0||t.isZero())throw new Error(f.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return r.from(o.keyFromPrivate(e).getPublic(a,!0))},a.privateKeyNegate=function(e){var a=new n(e);return a.isZero()?r.alloc(32):d.n.sub(a).umod(d.n).toArrayLike(r,"be",32)},a.privateKeyModInverse=function(e){var a=new n(e);if(a.cmp(d.n)>=0||a.isZero())throw new Error(f.EC_PRIVATE_KEY_RANGE_INVALID);return a.invm(d.n).toArrayLike(r,"be",32)},a.privateKeyTweakAdd=function(e,a){var t=new n(a);if(t.cmp(d.n)>=0)throw new Error(f.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(t.iadd(new n(e)),t.cmp(d.n)>=0&&t.isub(d.n),t.isZero())throw new Error(f.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return t.toArrayLike(r,"be",32)},a.privateKeyTweakMul=function(e,a){var t=new n(a);if(t.cmp(d.n)>=0||t.isZero())throw new Error(f.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return t.imul(new n(e)),t.cmp(d.n)&&(t=t.umod(d.n)),t.toArrayLike(r,"be",32)},a.publicKeyCreate=function(e,a){var t=new n(e);if(t.cmp(d.n)>=0||t.isZero())throw new Error(f.EC_PUBLIC_KEY_CREATE_FAIL);return r.from(o.keyFromPrivate(e).getPublic(a,!0))},a.publicKeyConvert=function(e,a){var t=s(e);if(null===t)throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);return r.from(t.getPublic(a,!0))},a.publicKeyVerify=function(e){return null!==s(e)},a.publicKeyTweakAdd=function(e,a,t){var c=s(e);if(null===c)throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);if((a=new n(a)).cmp(d.n)>=0)throw new Error(f.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return r.from(d.g.mul(a).add(c.pub).encode(!0,t))},a.publicKeyTweakMul=function(e,a,t){var c=s(e);if(null===c)throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);if((a=new n(a)).cmp(d.n)>=0||a.isZero())throw new Error(f.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return r.from(c.pub.mul(a).encode(!0,t))},a.publicKeyCombine=function(e,a){for(var t=new Array(e.length),c=0;c<e.length;++c)if(t[c]=s(e[c]),null===t[c])throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);for(var n=t[0].pub,i=1;i<t.length;++i)n=n.add(t[i].pub);if(n.isInfinity())throw new Error(f.EC_PUBLIC_KEY_COMBINE_FAIL);return r.from(n.encode(!0,a))},a.signatureNormalize=function(e){var a=new n(e.slice(0,32)),t=new n(e.slice(32,64));if(a.cmp(d.n)>=0||t.cmp(d.n)>=0)throw new Error(f.ECDSA_SIGNATURE_PARSE_FAIL);var c=r.from(e);return 1===t.cmp(o.nh)&&d.n.sub(t).toArrayLike(r,"be",32).copy(c,32),c},a.signatureExport=function(e){var a=e.slice(0,32),t=e.slice(32,64);if(new n(a).cmp(d.n)>=0||new n(t).cmp(d.n)>=0)throw new Error(f.ECDSA_SIGNATURE_PARSE_FAIL);return{r:a,s:t}},a.signatureImport=function(e){var a=new n(e.r);a.cmp(d.n)>=0&&(a=new n(0));var t=new n(e.s);return t.cmp(d.n)>=0&&(t=new n(0)),r.concat([a.toArrayLike(r,"be",32),t.toArrayLike(r,"be",32)])},a.sign=function(e,a,t,c){if("function"==typeof t){var i=t;t=function(t){var o=i(e,a,null,c,t);if(!r.isBuffer(o)||32!==o.length)throw new Error(f.ECDSA_SIGN_FAIL);return new n(o)}}var s=new n(a);if(s.cmp(d.n)>=0||s.isZero())throw new Error(f.ECDSA_SIGN_FAIL);var b=o.sign(e,a,{canonical:!0,k:t,pers:c});return{signature:r.concat([b.r.toArrayLike(r,"be",32),b.s.toArrayLike(r,"be",32)]),recovery:b.recoveryParam}},a.verify=function(e,a,t){var r={r:a.slice(0,32),s:a.slice(32,64)},c=new n(r.r),i=new n(r.s);if(c.cmp(d.n)>=0||i.cmp(d.n)>=0)throw new Error(f.ECDSA_SIGNATURE_PARSE_FAIL);if(1===i.cmp(o.nh)||c.isZero()||i.isZero())return!1;var b=s(t);if(null===b)throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);return o.verify(e,r,{x:b.pub.x,y:b.pub.y})},a.recover=function(e,a,t,c){var i={r:a.slice(0,32),s:a.slice(32,64)},s=new n(i.r),b=new n(i.s);if(s.cmp(d.n)>=0||b.cmp(d.n)>=0)throw new Error(f.ECDSA_SIGNATURE_PARSE_FAIL);try{if(s.isZero()||b.isZero())throw new Error;var u=o.recoverPubKey(e,i,t);return r.from(u.encode(!0,c))}catch(e){throw new Error(f.ECDSA_RECOVER_FAIL)}},a.ecdh=function(e,t){var r=a.ecdhUnsafe(e,t,!0);return c("sha256").update(r).digest()},a.ecdhUnsafe=function(e,a,t){var c=s(e);if(null===c)throw new Error(f.EC_PUBLIC_KEY_PARSE_FAIL);var i=new n(a);if(i.cmp(d.n)>=0||i.isZero())throw new Error(f.ECDH_FAIL);return r.from(c.pub.mul(i).encode(!0,t))}},function(e,a,t){var r=t(7).Buffer;e.exports={check:function(e){if(e.length<8)return!1;if(e.length>72)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-2)return!1;if(2!==e[2])return!1;var a=e[3];if(0===a)return!1;if(5+a>=e.length)return!1;if(2!==e[4+a])return!1;var t=e[5+a];return!(0===t||6+a+t!==e.length||128&e[4]||a>1&&0===e[4]&&!(128&e[5])||128&e[a+6]||t>1&&0===e[a+6]&&!(128&e[a+7]))},decode:function(e){if(e.length<8)throw new Error("DER sequence length is too short");if(e.length>72)throw new Error("DER sequence length is too long");if(48!==e[0])throw new Error("Expected DER sequence");if(e[1]!==e.length-2)throw new Error("DER sequence length is invalid");if(2!==e[2])throw new Error("Expected DER integer");var a=e[3];if(0===a)throw new Error("R length is zero");if(5+a>=e.length)throw new Error("R length is too long");if(2!==e[4+a])throw new Error("Expected DER integer (2)");var t=e[5+a];if(0===t)throw new Error("S length is zero");if(6+a+t!==e.length)throw new Error("S length is invalid");if(128&e[4])throw new Error("R value is negative");if(a>1&&0===e[4]&&!(128&e[5]))throw new Error("R value excessively padded");if(128&e[a+6])throw new Error("S value is negative");if(t>1&&0===e[a+6]&&!(128&e[a+7]))throw new Error("S value excessively padded");return{r:e.slice(4,4+a),s:e.slice(6+a)}},encode:function(e,a){var t=e.length,c=a.length;if(0===t)throw new Error("R length is zero");if(0===c)throw new Error("S length is zero");if(t>33)throw new Error("R length is too long");if(c>33)throw new Error("S length is too long");if(128&e[0])throw new Error("R value is negative");if(128&a[0])throw new Error("S value is negative");if(t>1&&0===e[0]&&!(128&e[1]))throw new Error("R value excessively padded");if(c>1&&0===a[0]&&!(128&a[1]))throw new Error("S value excessively padded");var n=r.allocUnsafe(6+t+c);return n[0]=48,n[1]=n.length-2,n[2]=2,n[3]=e.length,e.copy(n,4),n[4+t]=2,n[5+t]=a.length,a.copy(n,6+t),n}}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(1012),n=r.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),i=r.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);a.privateKeyExport=function(e,a,t){var c=r.from(t?n:i);return e.copy(c,t?8:9),a.copy(c,t?181:214),c},a.privateKeyImport=function(e){var a=e.length,t=0;if(!(a<t+1||48!==e[t])&&!(a<(t+=1)+1)&&128&e[t]){var r=127&e[t];if(t+=1,!(r<1||r>2||a<t+r)){var c=e[t+r-1]|(r>1?e[t+r-2]<<8:0);if(!(a<(t+=r)+c||a<t+3||2!==e[t]||1!==e[t+1]||1!==e[t+2]||a<(t+=3)+2||4!==e[t]||e[t+1]>32||a<t+2+e[t+1]))return e.slice(t+2,t+2+e[t+1])}}},a.signatureExport=function(e){for(var a=r.concat([r.from([0]),e.r]),t=33,n=0;t>1&&0===a[n]&&!(128&a[n+1]);--t,++n);for(var i=r.concat([r.from([0]),e.s]),f=33,o=0;f>1&&0===i[o]&&!(128&i[o+1]);--f,++o);return c.encode(a.slice(n),i.slice(o))},a.signatureImport=function(e){var a=r.alloc(32,0),t=r.alloc(32,0);try{var n=c.decode(e);if(33===n.r.length&&0===n.r[0]&&(n.r=n.r.slice(1)),n.r.length>32)throw new Error("R length is too long");if(33===n.s.length&&0===n.s[0]&&(n.s=n.s.slice(1)),n.s.length>32)throw new Error("S length is too long")}catch(e){return}return n.r.copy(a,32-n.r.length),n.s.copy(t,32-n.s.length),{r:a,s:t}},a.signatureImportLax=function(e){var a=r.alloc(32,0),t=r.alloc(32,0),c=e.length,n=0;if(48===e[n++]){var i=e[n++];if(!(128&i&&(n+=i-128)>c)&&2===e[n++]){var f=e[n++];if(128&f){if(n+(i=f-128)>c)return;for(;i>0&&0===e[n];n+=1,i-=1);for(f=0;i>0;n+=1,i-=1)f=(f<<8)+e[n]}if(!(f>c-n)){var o=n;if(n+=f,2===e[n++]){var d=e[n++];if(128&d){if(n+(i=d-128)>c)return;for(;i>0&&0===e[n];n+=1,i-=1);for(d=0;i>0;n+=1,i-=1)d=(d<<8)+e[n]}if(!(d>c-n)){var s=n;for(n+=d;f>0&&0===e[o];f-=1,o+=1);if(!(f>32)){var b=e.slice(o,o+f);for(b.copy(a,32-b.length);d>0&&0===e[s];d-=1,s+=1);if(!(d>32)){var u=e.slice(s,s+d);return u.copy(t,32-u.length),{r:a,s:t}}}}}}}}}},function(e,a,t){"use strict";var r=Object.prototype.toString;a.isArray=function(e,a){if(!Array.isArray(e))throw TypeError(a)},a.isBoolean=function(e,a){if("[object Boolean]"!==r.call(e))throw TypeError(a)},a.isBuffer=function(e,a){if(!Buffer.isBuffer(e))throw TypeError(a)},a.isFunction=function(e,a){if("[object Function]"!==r.call(e))throw TypeError(a)},a.isNumber=function(e,a){if("[object Number]"!==r.call(e))throw TypeError(a)},a.isObject=function(e,a){if("[object Object]"!==r.call(e))throw TypeError(a)},a.isBufferLength=function(e,a,t){if(e.length!==a)throw RangeError(t)},a.isBufferLength2=function(e,a,t,r){if(e.length!==a&&e.length!==t)throw RangeError(r)},a.isLengthGTZero=function(e,a){if(0===e.length)throw RangeError(a)},a.isNumberInInterval=function(e,a,t,r){if(e<=a||e>=t)throw RangeError(r)}},function(e,a,t){"use strict";var r=t(1014),c=t(1013),n=t(384);function i(e,a){return void 0===e?a:(r.isBoolean(e,n.COMPRESSED_TYPE_INVALID),e)}e.exports=function(e){return{privateKeyVerify:function(a){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),32===a.length&&e.privateKeyVerify(a)},privateKeyExport:function(a,t){r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),t=i(t,!0);var f=e.privateKeyExport(a,t);return c.privateKeyExport(a,f,t)},privateKeyImport:function(a){if(r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),(a=c.privateKeyImport(a))&&32===a.length&&e.privateKeyVerify(a))return a;throw new Error(n.EC_PRIVATE_KEY_IMPORT_DER_FAIL)},privateKeyNegate:function(a){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyNegate(a)},privateKeyModInverse:function(a){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyModInverse(a)},privateKeyTweakAdd:function(a,t){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),r.isBuffer(t,n.TWEAK_TYPE_INVALID),r.isBufferLength(t,32,n.TWEAK_LENGTH_INVALID),e.privateKeyTweakAdd(a,t)},privateKeyTweakMul:function(a,t){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),r.isBuffer(t,n.TWEAK_TYPE_INVALID),r.isBufferLength(t,32,n.TWEAK_LENGTH_INVALID),e.privateKeyTweakMul(a,t)},publicKeyCreate:function(a,t){return r.isBuffer(a,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),t=i(t,!0),e.publicKeyCreate(a,t)},publicKeyConvert:function(a,t){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),t=i(t,!0),e.publicKeyConvert(a,t)},publicKeyVerify:function(a){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),e.publicKeyVerify(a)},publicKeyTweakAdd:function(a,t,c){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),r.isBuffer(t,n.TWEAK_TYPE_INVALID),r.isBufferLength(t,32,n.TWEAK_LENGTH_INVALID),c=i(c,!0),e.publicKeyTweakAdd(a,t,c)},publicKeyTweakMul:function(a,t,c){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),r.isBuffer(t,n.TWEAK_TYPE_INVALID),r.isBufferLength(t,32,n.TWEAK_LENGTH_INVALID),c=i(c,!0),e.publicKeyTweakMul(a,t,c)},publicKeyCombine:function(a,t){r.isArray(a,n.EC_PUBLIC_KEYS_TYPE_INVALID),r.isLengthGTZero(a,n.EC_PUBLIC_KEYS_LENGTH_INVALID);for(var c=0;c<a.length;++c)r.isBuffer(a[c],n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a[c],33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID);return t=i(t,!0),e.publicKeyCombine(a,t)},signatureNormalize:function(a){return r.isBuffer(a,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(a,64,n.ECDSA_SIGNATURE_LENGTH_INVALID),e.signatureNormalize(a)},signatureExport:function(a){r.isBuffer(a,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(a,64,n.ECDSA_SIGNATURE_LENGTH_INVALID);var t=e.signatureExport(a);return c.signatureExport(t)},signatureImport:function(a){r.isBuffer(a,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isLengthGTZero(a,n.ECDSA_SIGNATURE_LENGTH_INVALID);var t=c.signatureImport(a);if(t)return e.signatureImport(t);throw new Error(n.ECDSA_SIGNATURE_PARSE_DER_FAIL)},signatureImportLax:function(a){r.isBuffer(a,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isLengthGTZero(a,n.ECDSA_SIGNATURE_LENGTH_INVALID);var t=c.signatureImportLax(a);if(t)return e.signatureImport(t);throw new Error(n.ECDSA_SIGNATURE_PARSE_DER_FAIL)},sign:function(a,t,c){r.isBuffer(a,n.MSG32_TYPE_INVALID),r.isBufferLength(a,32,n.MSG32_LENGTH_INVALID),r.isBuffer(t,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(t,32,n.EC_PRIVATE_KEY_LENGTH_INVALID);var i=null,f=null;return void 0!==c&&(r.isObject(c,n.OPTIONS_TYPE_INVALID),void 0!==c.data&&(r.isBuffer(c.data,n.OPTIONS_DATA_TYPE_INVALID),r.isBufferLength(c.data,32,n.OPTIONS_DATA_LENGTH_INVALID),i=c.data),void 0!==c.noncefn&&(r.isFunction(c.noncefn,n.OPTIONS_NONCEFN_TYPE_INVALID),f=c.noncefn)),e.sign(a,t,f,i)},verify:function(a,t,c){return r.isBuffer(a,n.MSG32_TYPE_INVALID),r.isBufferLength(a,32,n.MSG32_LENGTH_INVALID),r.isBuffer(t,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(t,64,n.ECDSA_SIGNATURE_LENGTH_INVALID),r.isBuffer(c,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(c,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),e.verify(a,t,c)},recover:function(a,t,c,f){return r.isBuffer(a,n.MSG32_TYPE_INVALID),r.isBufferLength(a,32,n.MSG32_LENGTH_INVALID),r.isBuffer(t,n.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(t,64,n.ECDSA_SIGNATURE_LENGTH_INVALID),r.isNumber(c,n.RECOVERY_ID_TYPE_INVALID),r.isNumberInInterval(c,-1,4,n.RECOVERY_ID_VALUE_INVALID),f=i(f,!0),e.recover(a,t,c,f)},ecdh:function(a,t){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),r.isBuffer(t,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(t,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),e.ecdh(a,t)},ecdhUnsafe:function(a,t,c){return r.isBuffer(a,n.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(a,33,65,n.EC_PUBLIC_KEY_LENGTH_INVALID),r.isBuffer(t,n.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(t,32,n.EC_PRIVATE_KEY_LENGTH_INVALID),c=i(c,!0),e.ecdhUnsafe(a,t,c)}}}},function(e,a,t){"use strict";var r=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];a.p1600=function(e){for(var a=0;a<24;++a){var t=e[0]^e[10]^e[20]^e[30]^e[40],c=e[1]^e[11]^e[21]^e[31]^e[41],n=e[2]^e[12]^e[22]^e[32]^e[42],i=e[3]^e[13]^e[23]^e[33]^e[43],f=e[4]^e[14]^e[24]^e[34]^e[44],o=e[5]^e[15]^e[25]^e[35]^e[45],d=e[6]^e[16]^e[26]^e[36]^e[46],s=e[7]^e[17]^e[27]^e[37]^e[47],b=e[8]^e[18]^e[28]^e[38]^e[48],u=e[9]^e[19]^e[29]^e[39]^e[49],l=b^(n<<1|i>>>31),p=u^(i<<1|n>>>31),h=e[0]^l,m=e[1]^p,g=e[10]^l,v=e[11]^p,y=e[20]^l,_=e[21]^p,w=e[30]^l,A=e[31]^p,k=e[40]^l,x=e[41]^p;l=t^(f<<1|o>>>31),p=c^(o<<1|f>>>31);var E=e[2]^l,S=e[3]^p,T=e[12]^l,j=e[13]^p,C=e[22]^l,R=e[23]^p,O=e[32]^l,B=e[33]^p,M=e[42]^l,N=e[43]^p;l=n^(d<<1|s>>>31),p=i^(s<<1|d>>>31);var I=e[4]^l,P=e[5]^p,F=e[14]^l,L=e[15]^p,D=e[24]^l,z=e[25]^p,q=e[34]^l,U=e[35]^p,H=e[44]^l,V=e[45]^p;l=f^(b<<1|u>>>31),p=o^(u<<1|b>>>31);var G=e[6]^l,W=e[7]^p,Y=e[16]^l,K=e[17]^p,Q=e[26]^l,Z=e[27]^p,J=e[36]^l,X=e[37]^p,$=e[46]^l,ee=e[47]^p;l=d^(t<<1|c>>>31),p=s^(c<<1|t>>>31);var ae=e[8]^l,te=e[9]^p,re=e[18]^l,ce=e[19]^p,ne=e[28]^l,ie=e[29]^p,fe=e[38]^l,oe=e[39]^p,de=e[48]^l,se=e[49]^p,be=h,ue=m,le=v<<4|g>>>28,pe=g<<4|v>>>28,he=y<<3|_>>>29,me=_<<3|y>>>29,ge=A<<9|w>>>23,ve=w<<9|A>>>23,ye=k<<18|x>>>14,_e=x<<18|k>>>14,we=E<<1|S>>>31,Ae=S<<1|E>>>31,ke=j<<12|T>>>20,xe=T<<12|j>>>20,Ee=C<<10|R>>>22,Se=R<<10|C>>>22,Te=B<<13|O>>>19,je=O<<13|B>>>19,Ce=M<<2|N>>>30,Re=N<<2|M>>>30,Oe=P<<30|I>>>2,Be=I<<30|P>>>2,Me=F<<6|L>>>26,Ne=L<<6|F>>>26,Ie=z<<11|D>>>21,Pe=D<<11|z>>>21,Fe=q<<15|U>>>17,Le=U<<15|q>>>17,De=V<<29|H>>>3,ze=H<<29|V>>>3,qe=G<<28|W>>>4,Ue=W<<28|G>>>4,He=K<<23|Y>>>9,Ve=Y<<23|K>>>9,Ge=Q<<25|Z>>>7,We=Z<<25|Q>>>7,Ye=J<<21|X>>>11,Ke=X<<21|J>>>11,Qe=ee<<24|$>>>8,Ze=$<<24|ee>>>8,Je=ae<<27|te>>>5,Xe=te<<27|ae>>>5,$e=re<<20|ce>>>12,ea=ce<<20|re>>>12,aa=ie<<7|ne>>>25,ta=ne<<7|ie>>>25,ra=fe<<8|oe>>>24,ca=oe<<8|fe>>>24,na=de<<14|se>>>18,ia=se<<14|de>>>18;e[0]=be^~ke&Ie,e[1]=ue^~xe&Pe,e[10]=qe^~$e&he,e[11]=Ue^~ea&me,e[20]=we^~Me&Ge,e[21]=Ae^~Ne&We,e[30]=Je^~le&Ee,e[31]=Xe^~pe&Se,e[40]=Oe^~He&aa,e[41]=Be^~Ve&ta,e[2]=ke^~Ie&Ye,e[3]=xe^~Pe&Ke,e[12]=$e^~he&Te,e[13]=ea^~me&je,e[22]=Me^~Ge&ra,e[23]=Ne^~We&ca,e[32]=le^~Ee&Fe,e[33]=pe^~Se&Le,e[42]=He^~aa&ge,e[43]=Ve^~ta&ve,e[4]=Ie^~Ye&na,e[5]=Pe^~Ke&ia,e[14]=he^~Te&De,e[15]=me^~je&ze,e[24]=Ge^~ra&ye,e[25]=We^~ca&_e,e[34]=Ee^~Fe&Qe,e[35]=Se^~Le&Ze,e[44]=aa^~ge&Ce,e[45]=ta^~ve&Re,e[6]=Ye^~na&be,e[7]=Ke^~ia&ue,e[16]=Te^~De&qe,e[17]=je^~ze&Ue,e[26]=ra^~ye&we,e[27]=ca^~_e&Ae,e[36]=Fe^~Qe&Je,e[37]=Le^~Ze&Xe,e[46]=ge^~Ce&Oe,e[47]=ve^~Re&Be,e[8]=na^~be&ke,e[9]=ia^~ue&xe,e[18]=De^~qe&$e,e[19]=ze^~Ue&ea,e[28]=ye^~we&Me,e[29]=_e^~Ae&Ne,e[38]=Qe^~Je&le,e[39]=Ze^~Xe&pe,e[48]=Ce^~Oe&He,e[49]=Re^~Be&Ve,e[0]^=r[2*a],e[1]^=r[2*a+1]}}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(1016);function n(){this.state=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.blockSize=null,this.count=0,this.squeezing=!1}n.prototype.initialize=function(e,a){for(var t=0;t<50;++t)this.state[t]=0;this.blockSize=e/8,this.count=0,this.squeezing=!1},n.prototype.absorb=function(e){for(var a=0;a<e.length;++a)this.state[~~(this.count/4)]^=e[a]<<this.count%4*8,this.count+=1,this.count===this.blockSize&&(c.p1600(this.state),this.count=0)},n.prototype.absorbLastFewBits=function(e){this.state[~~(this.count/4)]^=e<<this.count%4*8,0!=(128&e)&&this.count===this.blockSize-1&&c.p1600(this.state),this.state[~~((this.blockSize-1)/4)]^=128<<(this.blockSize-1)%4*8,c.p1600(this.state),this.count=0,this.squeezing=!0},n.prototype.squeeze=function(e){this.squeezing||this.absorbLastFewBits(1);for(var a=r.alloc(e),t=0;t<e;++t)a[t]=this.state[~~(this.count/4)]>>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(c.p1600(this.state),this.count=0);return a},n.prototype.copy=function(e){for(var a=0;a<50;++a)e.state[a]=this.state[a];e.blockSize=this.blockSize,e.count=this.count,e.squeezing=this.squeezing},e.exports=n},function(e,a,t){"use strict";e.exports=t(386)(t(1017))},function(e,a,t){(function(r){var c=t(15),n=t(2),i=n.join,f=n.dirname,o=c.accessSync&&function(e){try{c.accessSync(e)}catch(e){return!1}return!0}||c.existsSync||n.existsSync,d={arrow:process.env.NODE_BINDINGS_ARROW||" → ",compiled:process.env.NODE_BINDINGS_COMPILED_DIR||"compiled",platform:process.platform,arch:process.arch,version:process.versions.node,bindings:"bindings.node",try:[["module_root","build","bindings"],["module_root","build","Debug","bindings"],["module_root","build","Release","bindings"],["module_root","out","Debug","bindings"],["module_root","Debug","bindings"],["module_root","out","Release","bindings"],["module_root","Release","bindings"],["module_root","build","default","bindings"],["module_root","compiled","version","platform","arch","bindings"]]};e.exports=a=function(e){"string"==typeof e?e={bindings:e}:e||(e={}),Object.keys(d).map(function(a){a in e||(e[a]=d[a])}),e.module_root||(e.module_root=a.getRoot(a.getFileName())),".node"!=n.extname(e.bindings)&&(e.bindings+=".node");for(var r,c,f,o=[],s=0,b=e.try.length;s<b;s++){r=i.apply(null,e.try[s].map(function(a){return e[a]||a})),o.push(r);try{return c=e.path?t(385).resolve(r):t(385)(r),e.path||(c.path=r),c}catch(e){if(!/not find/i.test(e.message))throw e}}throw(f=new Error("Could not locate the bindings file. Tried:\n"+o.map(function(a){return e.arrow+a}).join("\n"))).tries=o,f},a.getFileName=function(e){var a,t=Error.prepareStackTrace,c=Error.stackTraceLimit,n={};return Error.stackTraceLimit=10,Error.prepareStackTrace=function(t,c){for(var n=0,i=c.length;n<i;n++)if((a=c[n].getFileName())!==r){if(!e)return;if(a!==e)return}},Error.captureStackTrace(n),Error.prepareStackTrace=t,Error.stackTraceLimit=c,a},a.getRoot=function(e){for(var a,t=f(e);;){if("."===t&&(t=process.cwd()),o(i(t,"package.json"))||o(i(t,"node_modules")))return t;if(a===t)throw new Error('Could not find module root given file: "'+e+'". Do you have a `package.json` file? ');a=t,t=i(t,"..")}}}).call(this,"/index.js")},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(6).Transform,n=t(0);e.exports=function(e){function a(a,t,r,n){c.call(this,n),this._rate=a,this._capacity=t,this._delimitedSuffix=r,this._options=n,this._state=new e,this._state.initialize(a,t),this._finalized=!1}return n(a,c),a.prototype._transform=function(e,a,t){var r=null;try{this.update(e,a)}catch(e){r=e}t(r)},a.prototype._flush=function(){},a.prototype._read=function(e){this.push(this.squeeze(e))},a.prototype.update=function(e,a){if(!r.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Squeeze already called");return r.isBuffer(e)||(e=r.from(e,a)),this._state.absorb(e),this},a.prototype.squeeze=function(e,a){this._finalized||(this._finalized=!0,this._state.absorbLastFewBits(this._delimitedSuffix));var t=this._state.squeeze(e);return void 0!==a&&(t=t.toString(a)),t},a.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},a.prototype._clone=function(){var e=new a(this._rate,this._capacity,this._delimitedSuffix,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},a}},function(e,a){"function"==typeof Object.create?e.exports=function(e,a){e.super_=a,e.prototype=Object.create(a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,a){e.super_=a;var t=function(){};t.prototype=a.prototype,e.prototype=new t,e.prototype.constructor=e}},function(e,a,t){"use strict";var r=t(7).Buffer,c=t(6).Transform,n=t(0);e.exports=function(e){function a(a,t,r,n,i){c.call(this,i),this._rate=a,this._capacity=t,this._delimitedSuffix=r,this._hashBitLength=n,this._options=i,this._state=new e,this._state.initialize(a,t),this._finalized=!1}return n(a,c),a.prototype._transform=function(e,a,t){var r=null;try{this.update(e,a)}catch(e){r=e}t(r)},a.prototype._flush=function(e){var a=null;try{this.push(this.digest())}catch(e){a=e}e(a)},a.prototype.update=function(e,a){if(!r.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Digest already called");return r.isBuffer(e)||(e=r.from(e,a)),this._state.absorb(e),this},a.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0,this._delimitedSuffix&&this._state.absorbLastFewBits(this._delimitedSuffix);var a=this._state.squeeze(this._hashBitLength/8);return void 0!==e&&(a=a.toString(e)),this._resetState(),a},a.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},a.prototype._clone=function(){var e=new a(this._rate,this._capacity,this._delimitedSuffix,this._hashBitLength,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},a}},function(e,a,t){"use strict";e.exports=t(386)(t(1019)("keccak"))},function(e,a,t){"use strict";try{e.exports=t(1023)}catch(a){process.env.DEBUG&&console.error("Keccak bindings are not compiled. Pure JS implementation will be used."),e.exports=t(1018)}},function(e,a,t){const r=t(5).EventEmitter,c=t(1).inherits,n=t(3),i=t(988),f=t(983),o=t(365),d=t(364);t(951),t(363);function s(e){const a=this;r.call(a),a.setMaxListeners(30),e=e||{};const t={sendAsync:a._handleAsync.bind(a)},c=e.blockTrackerProvider||t;a._blockTracker=e.blockTracker||new i({provider:c,pollingInterval:e.pollingInterval||4e3}),a._blockTracker.on("block",e=>{const t=function(e){return{number:n.toBuffer(e.number),hash:n.toBuffer(e.hash),parentHash:n.toBuffer(e.parentHash),nonce:n.toBuffer(e.nonce),sha3Uncles:n.toBuffer(e.sha3Uncles),logsBloom:n.toBuffer(e.logsBloom),transactionsRoot:n.toBuffer(e.transactionsRoot),stateRoot:n.toBuffer(e.stateRoot),receiptsRoot:n.toBuffer(e.receiptRoot||e.receiptsRoot),miner:n.toBuffer(e.miner),difficulty:n.toBuffer(e.difficulty),totalDifficulty:n.toBuffer(e.totalDifficulty),size:n.toBuffer(e.size),extraData:n.toBuffer(e.extraData),gasLimit:n.toBuffer(e.gasLimit),gasUsed:n.toBuffer(e.gasUsed),timestamp:n.toBuffer(e.timestamp),transactions:e.transactions}}(e);a._setCurrentBlock(t)}),a._blockTracker.on("block",a.emit.bind(a,"rawBlock")),a._blockTracker.on("sync",a.emit.bind(a,"sync")),a._blockTracker.on("latest",a.emit.bind(a,"latest")),a._ready=new d,a._blockTracker.once("block",()=>{a._ready.go()}),a.currentBlock=null,a._providers=[]}e.exports=s,c(s,r),s.prototype.start=function(e=function(){}){this._blockTracker.start().then(e).catch(e)},s.prototype.stop=function(){this._blockTracker.stop()},s.prototype.addProvider=function(e){this._providers.push(e),e.setEngine(this)},s.prototype.send=function(e){throw new Error("Web3ProviderEngine does not support synchronous requests.")},s.prototype.sendAsync=function(e,a){const t=this;t._ready.await(function(){Array.isArray(e)?f(e,t._handleAsync.bind(t),a):t._handleAsync(e,a)})},s.prototype._handleAsync=function(e,a){var t=this,r=-1,c=null,n=null,i=[];function f(t,r){n=t,c=r,o(i,function(e,a){e?e(n,c,a):a()},function(){var t={id:e.id,jsonrpc:e.jsonrpc,result:c};null!=n?(t.error={message:n.stack||n.message||n,code:-32e3},a(n,t)):a(null,t)})}!function a(c){r+=1;i.unshift(c);if(r>=t._providers.length)f(new Error('Request for method "'+e.method+'" not handled by any subprovider. Please check your subprovider configuration to ensure this method is handled.'));else try{var n=t._providers[r];n.handleRequest(e,a,f)}catch(e){f(e)}}()},s.prototype._setCurrentBlock=function(e){this.currentBlock=e,this.emit("block",e)}},function(e,a){e.exports=__webpack_require__(106)},function(e,a){var t=Object.prototype.toString,r="function"==typeof Buffer.alloc&&"function"==typeof Buffer.allocUnsafe&&"function"==typeof Buffer.from;e.exports=function(e,a,c){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return function(e){return"ArrayBuffer"===t.call(e).slice(8,-1)}(e)?function(e,a,t){a>>>=0;var c=e.byteLength-a;if(c<0)throw new RangeError("'offset' is out of bounds");if(void 0===t)t=c;else if((t>>>=0)>c)throw new RangeError("'length' is out of bounds");return r?Buffer.from(e.slice(a,a+t)):new Buffer(new Uint8Array(e.slice(a,a+t)))}(e,a,c):"string"==typeof e?function(e,a){if("string"==typeof a&&""!==a||(a="utf8"),!Buffer.isEncoding(a))throw new TypeError('"encoding" must be a valid string encoding');return r?Buffer.from(e,a):new Buffer(e,a)}(e,a):r?Buffer.from(e):new Buffer(e)}},function(e,a,t){var r=t(390).SourceMapGenerator,c=t(92),n=/(\r?\n)/,i="$$$isSourceNode$$$";function f(e,a,t,r,c){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==a?null:a,this.source=null==t?null:t,this.name=null==c?null:c,this[i]=!0,null!=r&&this.add(r)}f.fromStringWithSourceMap=function(e,a,t){var r=new f,i=e.split(n),o=0,d=function(){return e()+(e()||"");function e(){return o<i.length?i[o++]:void 0}},s=1,b=0,u=null;return a.eachMapping(function(e){if(null!==u){if(!(s<e.generatedLine)){var a=(t=i[o]||"").substr(0,e.generatedColumn-b);return i[o]=t.substr(e.generatedColumn-b),b=e.generatedColumn,l(u,a),void(u=e)}l(u,d()),s++,b=0}for(;s<e.generatedLine;)r.add(d()),s++;if(b<e.generatedColumn){var t=i[o]||"";r.add(t.substr(0,e.generatedColumn)),i[o]=t.substr(e.generatedColumn),b=e.generatedColumn}u=e},this),o<i.length&&(u&&l(u,d()),r.add(i.splice(o).join(""))),a.sources.forEach(function(e){var n=a.sourceContentFor(e);null!=n&&(null!=t&&(e=c.join(t,e)),r.setSourceContent(e,n))}),r;function l(e,a){if(null===e||void 0===e.source)r.add(a);else{var n=t?c.join(t,e.source):e.source;r.add(new f(e.originalLine,e.originalColumn,n,a,e.name))}}},f.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[i]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},f.prototype.prepend=function(e){if(Array.isArray(e))for(var a=e.length-1;a>=0;a--)this.prepend(e[a]);else{if(!e[i]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},f.prototype.walk=function(e){for(var a,t=0,r=this.children.length;t<r;t++)(a=this.children[t])[i]?a.walk(e):""!==a&&e(a,{source:this.source,line:this.line,column:this.column,name:this.name})},f.prototype.join=function(e){var a,t,r=this.children.length;if(r>0){for(a=[],t=0;t<r-1;t++)a.push(this.children[t]),a.push(e);a.push(this.children[t]),this.children=a}return this},f.prototype.replaceRight=function(e,a){var t=this.children[this.children.length-1];return t[i]?t.replaceRight(e,a):"string"==typeof t?this.children[this.children.length-1]=t.replace(e,a):this.children.push("".replace(e,a)),this},f.prototype.setSourceContent=function(e,a){this.sourceContents[c.toSetString(e)]=a},f.prototype.walkSourceContents=function(e){for(var a=0,t=this.children.length;a<t;a++)this.children[a][i]&&this.children[a].walkSourceContents(e);var r=Object.keys(this.sourceContents);for(a=0,t=r.length;a<t;a++)e(c.fromSetString(r[a]),this.sourceContents[r[a]])},f.prototype.toString=function(){var e="";return this.walk(function(a){e+=a}),e},f.prototype.toStringWithSourceMap=function(e){var a={code:"",line:1,column:0},t=new r(e),c=!1,n=null,i=null,f=null,o=null;return this.walk(function(e,r){a.code+=e,null!==r.source&&null!==r.line&&null!==r.column?(n===r.source&&i===r.line&&f===r.column&&o===r.name||t.addMapping({source:r.source,original:{line:r.line,column:r.column},generated:{line:a.line,column:a.column},name:r.name}),n=r.source,i=r.line,f=r.column,o=r.name,c=!0):c&&(t.addMapping({generated:{line:a.line,column:a.column}}),n=null,c=!1);for(var d=0,s=e.length;d<s;d++)10===e.charCodeAt(d)?(a.line++,a.column=0,d+1===s?(n=null,c=!1):c&&t.addMapping({source:r.source,original:{line:r.line,column:r.column},generated:{line:a.line,column:a.column},name:r.name})):a.column++}),this.walkSourceContents(function(e,a){t.setSourceContent(e,a)}),{code:a.code,map:t}},a.SourceNode=f},function(e,a){function t(e,a,t){var r=e[a];e[a]=e[t],e[t]=r}function r(e,a,c,n){if(c<n){var i=c-1;t(e,function(e,a){return Math.round(e+Math.random()*(a-e))}(c,n),n);for(var f=e[n],o=c;o<n;o++)a(e[o],f)<=0&&t(e,i+=1,o);t(e,i+1,o);var d=i+1;r(e,a,c,d-1),r(e,a,d+1,n)}}a.quickSort=function(e,a){r(e,a,0,e.length-1)}},function(e,a){a.GREATEST_LOWER_BOUND=1,a.LEAST_UPPER_BOUND=2,a.search=function(e,t,r,c){if(0===t.length)return-1;var n=function e(t,r,c,n,i,f){var o=Math.floor((r-t)/2)+t,d=i(c,n[o],!0);return 0===d?o:d>0?r-o>1?e(o,r,c,n,i,f):f==a.LEAST_UPPER_BOUND?r<n.length?r:-1:o:o-t>1?e(t,o,c,n,i,f):f==a.LEAST_UPPER_BOUND?o:t<0?-1:t}(-1,t.length,e,t,r,c||a.GREATEST_LOWER_BOUND);if(n<0)return-1;for(;n-1>=0&&0===r(t[n],t[n-1],!0);)--n;return n}},function(e,a,t){var r=t(92),c=t(1030),n=t(388).ArraySet,i=t(389),f=t(1029).quickSort;function o(e,a){var t=e;return"string"==typeof e&&(t=r.parseSourceMapInput(e)),null!=t.sections?new b(t,a):new d(t,a)}function d(e,a){var t=e;"string"==typeof e&&(t=r.parseSourceMapInput(e));var c=r.getArg(t,"version"),i=r.getArg(t,"sources"),f=r.getArg(t,"names",[]),o=r.getArg(t,"sourceRoot",null),d=r.getArg(t,"sourcesContent",null),s=r.getArg(t,"mappings"),b=r.getArg(t,"file",null);if(c!=this._version)throw new Error("Unsupported version: "+c);o&&(o=r.normalize(o)),i=i.map(String).map(r.normalize).map(function(e){return o&&r.isAbsolute(o)&&r.isAbsolute(e)?r.relative(o,e):e}),this._names=n.fromArray(f.map(String),!0),this._sources=n.fromArray(i,!0),this._absoluteSources=this._sources.toArray().map(function(e){return r.computeSourceURL(o,e,a)}),this.sourceRoot=o,this.sourcesContent=d,this._mappings=s,this._sourceMapURL=a,this.file=b}function s(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function b(e,a){var t=e;"string"==typeof e&&(t=r.parseSourceMapInput(e));var c=r.getArg(t,"version"),i=r.getArg(t,"sections");if(c!=this._version)throw new Error("Unsupported version: "+c);this._sources=new n,this._names=new n;var f={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=r.getArg(e,"offset"),c=r.getArg(t,"line"),n=r.getArg(t,"column");if(c<f.line||c===f.line&&n<f.column)throw new Error("Section offsets must be ordered and non-overlapping.");return f=t,{generatedOffset:{generatedLine:c+1,generatedColumn:n+1},consumer:new o(r.getArg(e,"map"),a)}})}o.fromSourceMap=function(e,a){return d.fromSourceMap(e,a)},o.prototype._version=3,o.prototype.__generatedMappings=null,Object.defineProperty(o.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),o.prototype.__originalMappings=null,Object.defineProperty(o.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),o.prototype._charIsMappingSeparator=function(e,a){var t=e.charAt(a);return";"===t||","===t},o.prototype._parseMappings=function(e,a){throw new Error("Subclasses must implement _parseMappings")},o.GENERATED_ORDER=1,o.ORIGINAL_ORDER=2,o.GREATEST_LOWER_BOUND=1,o.LEAST_UPPER_BOUND=2,o.prototype.eachMapping=function(e,a,t){var c,n=a||null;switch(t||o.GENERATED_ORDER){case o.GENERATED_ORDER:c=this._generatedMappings;break;case o.ORIGINAL_ORDER:c=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var i=this.sourceRoot;c.map(function(e){var a=null===e.source?null:this._sources.at(e.source);return{source:a=r.computeSourceURL(i,a,this._sourceMapURL),generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,n)},o.prototype.allGeneratedPositionsFor=function(e){var a=r.getArg(e,"line"),t={source:r.getArg(e,"source"),originalLine:a,originalColumn:r.getArg(e,"column",0)};if(t.source=this._findSourceIndex(t.source),t.source<0)return[];var n=[],i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",r.compareByOriginalPositions,c.LEAST_UPPER_BOUND);if(i>=0){var f=this._originalMappings[i];if(void 0===e.column)for(var o=f.originalLine;f&&f.originalLine===o;)n.push({line:r.getArg(f,"generatedLine",null),column:r.getArg(f,"generatedColumn",null),lastColumn:r.getArg(f,"lastGeneratedColumn",null)}),f=this._originalMappings[++i];else for(var d=f.originalColumn;f&&f.originalLine===a&&f.originalColumn==d;)n.push({line:r.getArg(f,"generatedLine",null),column:r.getArg(f,"generatedColumn",null),lastColumn:r.getArg(f,"lastGeneratedColumn",null)}),f=this._originalMappings[++i]}return n},a.SourceMapConsumer=o,d.prototype=Object.create(o.prototype),d.prototype.consumer=o,d.prototype._findSourceIndex=function(e){var a,t=e;if(null!=this.sourceRoot&&(t=r.relative(this.sourceRoot,t)),this._sources.has(t))return this._sources.indexOf(t);for(a=0;a<this._absoluteSources.length;++a)if(this._absoluteSources[a]==e)return a;return-1},d.fromSourceMap=function(e,a){var t=Object.create(d.prototype),c=t._names=n.fromArray(e._names.toArray(),!0),i=t._sources=n.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t._sourceMapURL=a,t._absoluteSources=t._sources.toArray().map(function(e){return r.computeSourceURL(t.sourceRoot,e,a)});for(var o=e._mappings.toArray().slice(),b=t.__generatedMappings=[],u=t.__originalMappings=[],l=0,p=o.length;l<p;l++){var h=o[l],m=new s;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=i.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=c.indexOf(h.name)),u.push(m)),b.push(m)}return f(t.__originalMappings,r.compareByOriginalPositions),t},d.prototype._version=3,Object.defineProperty(d.prototype,"sources",{get:function(){return this._absoluteSources.slice()}}),d.prototype._parseMappings=function(e,a){for(var t,c,n,o,d,b=1,u=0,l=0,p=0,h=0,m=0,g=e.length,v=0,y={},_={},w=[],A=[];v<g;)if(";"===e.charAt(v))b++,v++,u=0;else if(","===e.charAt(v))v++;else{for((t=new s).generatedLine=b,o=v;o<g&&!this._charIsMappingSeparator(e,o);o++);if(n=y[c=e.slice(v,o)])v+=c.length;else{for(n=[];v<o;)i.decode(e,v,_),d=_.value,v=_.rest,n.push(d);if(2===n.length)throw new Error("Found a source, but no line and column");if(3===n.length)throw new Error("Found a source and line, but no column");y[c]=n}t.generatedColumn=u+n[0],u=t.generatedColumn,n.length>1&&(t.source=h+n[1],h+=n[1],t.originalLine=l+n[2],l=t.originalLine,t.originalLine+=1,t.originalColumn=p+n[3],p=t.originalColumn,n.length>4&&(t.name=m+n[4],m+=n[4])),A.push(t),"number"==typeof t.originalLine&&w.push(t)}f(A,r.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,r.compareByOriginalPositions),this.__originalMappings=w},d.prototype._findMapping=function(e,a,t,r,n,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return c.search(e,a,n,i)},d.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var a=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var t=this._generatedMappings[e+1];if(a.generatedLine===t.generatedLine){a.lastGeneratedColumn=t.generatedColumn-1;continue}}a.lastGeneratedColumn=1/0}},d.prototype.originalPositionFor=function(e){var a={generatedLine:r.getArg(e,"line"),generatedColumn:r.getArg(e,"column")},t=this._findMapping(a,this._generatedMappings,"generatedLine","generatedColumn",r.compareByGeneratedPositionsDeflated,r.getArg(e,"bias",o.GREATEST_LOWER_BOUND));if(t>=0){var c=this._generatedMappings[t];if(c.generatedLine===a.generatedLine){var n=r.getArg(c,"source",null);null!==n&&(n=this._sources.at(n),n=r.computeSourceURL(this.sourceRoot,n,this._sourceMapURL));var i=r.getArg(c,"name",null);return null!==i&&(i=this._names.at(i)),{source:n,line:r.getArg(c,"originalLine",null),column:r.getArg(c,"originalColumn",null),name:i}}}return{source:null,line:null,column:null,name:null}},d.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},d.prototype.sourceContentFor=function(e,a){if(!this.sourcesContent)return null;var t=this._findSourceIndex(e);if(t>=0)return this.sourcesContent[t];var c,n=e;if(null!=this.sourceRoot&&(n=r.relative(this.sourceRoot,n)),null!=this.sourceRoot&&(c=r.urlParse(this.sourceRoot))){var i=n.replace(/^file:\/\//,"");if("file"==c.scheme&&this._sources.has(i))return this.sourcesContent[this._sources.indexOf(i)];if((!c.path||"/"==c.path)&&this._sources.has("/"+n))return this.sourcesContent[this._sources.indexOf("/"+n)]}if(a)return null;throw new Error('"'+n+'" is not in the SourceMap.')},d.prototype.generatedPositionFor=function(e){var a=r.getArg(e,"source");if((a=this._findSourceIndex(a))<0)return{line:null,column:null,lastColumn:null};var t={source:a,originalLine:r.getArg(e,"line"),originalColumn:r.getArg(e,"column")},c=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",r.compareByOriginalPositions,r.getArg(e,"bias",o.GREATEST_LOWER_BOUND));if(c>=0){var n=this._originalMappings[c];if(n.source===t.source)return{line:r.getArg(n,"generatedLine",null),column:r.getArg(n,"generatedColumn",null),lastColumn:r.getArg(n,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},a.BasicSourceMapConsumer=d,b.prototype=Object.create(o.prototype),b.prototype.constructor=o,b.prototype._version=3,Object.defineProperty(b.prototype,"sources",{get:function(){for(var e=[],a=0;a<this._sections.length;a++)for(var t=0;t<this._sections[a].consumer.sources.length;t++)e.push(this._sections[a].consumer.sources[t]);return e}}),b.prototype.originalPositionFor=function(e){var a={generatedLine:r.getArg(e,"line"),generatedColumn:r.getArg(e,"column")},t=c.search(a,this._sections,function(e,a){var t=e.generatedLine-a.generatedOffset.generatedLine;return t||e.generatedColumn-a.generatedOffset.generatedColumn}),n=this._sections[t];return n?n.consumer.originalPositionFor({line:a.generatedLine-(n.generatedOffset.generatedLine-1),column:a.generatedColumn-(n.generatedOffset.generatedLine===a.generatedLine?n.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},b.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},b.prototype.sourceContentFor=function(e,a){for(var t=0;t<this._sections.length;t++){var r=this._sections[t].consumer.sourceContentFor(e,!0);if(r)return r}if(a)return null;throw new Error('"'+e+'" is not in the SourceMap.')},b.prototype.generatedPositionFor=function(e){for(var a=0;a<this._sections.length;a++){var t=this._sections[a];if(-1!==t.consumer._findSourceIndex(r.getArg(e,"source"))){var c=t.consumer.generatedPositionFor(e);if(c)return{line:c.line+(t.generatedOffset.generatedLine-1),column:c.column+(t.generatedOffset.generatedLine===c.line?t.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},b.prototype._parseMappings=function(e,a){this.__generatedMappings=[],this.__originalMappings=[];for(var t=0;t<this._sections.length;t++)for(var c=this._sections[t],n=c.consumer._generatedMappings,i=0;i<n.length;i++){var o=n[i],d=c.consumer._sources.at(o.source);d=r.computeSourceURL(c.consumer.sourceRoot,d,this._sourceMapURL),this._sources.add(d),d=this._sources.indexOf(d);var s=null;o.name&&(s=c.consumer._names.at(o.name),this._names.add(s),s=this._names.indexOf(s));var b={source:d,generatedLine:o.generatedLine+(c.generatedOffset.generatedLine-1),generatedColumn:o.generatedColumn+(c.generatedOffset.generatedLine===o.generatedLine?c.generatedOffset.generatedColumn-1:0),originalLine:o.originalLine,originalColumn:o.originalColumn,name:s};this.__generatedMappings.push(b),"number"==typeof b.originalLine&&this.__originalMappings.push(b)}f(this.__generatedMappings,r.compareByGeneratedPositionsDeflated),f(this.__originalMappings,r.compareByOriginalPositions)},a.IndexedSourceMapConsumer=b},function(e,a,t){var r=t(92);function c(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}c.prototype.unsortedForEach=function(e,a){this._array.forEach(e,a)},c.prototype.add=function(e){!function(e,a){var t=e.generatedLine,c=a.generatedLine,n=e.generatedColumn,i=a.generatedColumn;return c>t||c==t&&i>=n||r.compareByGeneratedPositionsInflated(e,a)<=0}(this._last,e)?(this._sorted=!1,this._array.push(e)):(this._last=e,this._array.push(e))},c.prototype.toArray=function(){return this._sorted||(this._array.sort(r.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},a.MappingList=c},function(e,a){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");a.encode=function(e){if(0<=e&&e<t.length)return t[e];throw new TypeError("Must be between 0 and 63: "+e)},a.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1}},function(e,a,t){a.SourceMapGenerator=t(390).SourceMapGenerator,a.SourceMapConsumer=t(1031).SourceMapConsumer,a.SourceNode=t(1028).SourceNode},function(e,a,t){var r,c=t(1034).SourceMapConsumer,n=t(2);try{(r=t(15)).existsSync&&r.readFileSync||(r=null)}catch(e){}var i=t(1027),f=!1,o=!1,d=!1,s="auto",b={},u={},l=/^data:application\/json[^,]+base64,/,p=[],h=[];function m(){return"browser"===s||"node"!==s&&("undefined"!=typeof window&&"function"==typeof XMLHttpRequest&&!(window.require&&window.module&&window.process&&"renderer"===window.process.type))}function g(e){return function(a){for(var t=0;t<e.length;t++){var r=e[t](a);if(r)return r}return null}}var v=g(p);function y(e,a){if(!e)return a;var t=n.dirname(e),r=/^\w+:\/\/[^\/]*/.exec(t),c=r?r[0]:"",i=t.slice(c.length);return c&&/^\/\w\:/.test(i)?(c+="/")+n.resolve(t.slice(c.length),a).replace(/\\/g,"/"):c+n.resolve(t.slice(c.length),a)}p.push(function(e){if(e=e.trim(),/^file:/.test(e)&&(e=e.replace(/file:\/\/\/(\w:)?/,function(e,a){return a?"":"/"})),e in b)return b[e];var a=null;if(r){if(r.existsSync(e))try{a=r.readFileSync(e,"utf8")}catch(e){a=""}}else{var t=new XMLHttpRequest;t.open("GET",e,!1),t.send(null);a=null;4===t.readyState&&200===t.status&&(a=t.responseText)}return b[e]=a});var _=g(h);function w(e){var a=u[e.source];if(!a){var t=_(e.source);t?(a=u[e.source]={url:t.url,map:new c(t.map)}).map.sourcesContent&&a.map.sources.forEach(function(e,t){var r=a.map.sourcesContent[t];if(r){var c=y(a.url,e);b[c]=r}}):a=u[e.source]={url:null,map:null}}if(a&&a.map){var r=a.map.originalPositionFor(e);if(null!==r.source)return r.source=y(a.url,r.source),r}return e}function A(){var e,a="";if(this.isNative())a="native";else{!(e=this.getScriptNameOrSourceURL())&&this.isEval()&&(a=this.getEvalOrigin(),a+=", "),a+=e||"<anonymous>";var t=this.getLineNumber();if(null!=t){a+=":"+t;var r=this.getColumnNumber();r&&(a+=":"+r)}}var c="",n=this.getFunctionName(),i=!0,f=this.isConstructor();if(!(this.isToplevel()||f)){var o=this.getTypeName();"[object Object]"===o&&(o="null");var d=this.getMethodName();n?(o&&0!=n.indexOf(o)&&(c+=o+"."),c+=n,d&&n.indexOf("."+d)!=n.length-d.length-1&&(c+=" [as "+d+"]")):c+=o+"."+(d||"<anonymous>")}else f?c+="new "+(n||"<anonymous>"):n?c+=n:(c+=a,i=!1);return i&&(c+=" ("+a+")"),c}function k(e){var a={};return Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(function(t){a[t]=/^(?:is|get)/.test(t)?function(){return e[t].call(e)}:e[t]}),a.toString=A,a}function x(e){if(e.isNative())return e;var a=e.getFileName()||e.getScriptNameOrSourceURL();if(a){var t=e.getLineNumber(),r=e.getColumnNumber()-1;1===t&&r>62&&!m()&&!e.isEval()&&(r-=62);var c=w({source:a,line:t,column:r});return(e=k(e)).getFileName=function(){return c.source},e.getLineNumber=function(){return c.line},e.getColumnNumber=function(){return c.column+1},e.getScriptNameOrSourceURL=function(){return c.source},e}var n=e.isEval()&&e.getEvalOrigin();return n?(n=function e(a){var t=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(a);if(t){var r=w({source:t[2],line:+t[3],column:t[4]-1});return"eval at "+t[1]+" ("+r.source+":"+r.line+":"+(r.column+1)+")"}return(t=/^eval at ([^(]+) \((.+)\)$/.exec(a))?"eval at "+t[1]+" ("+e(t[2])+")":a}(n),(e=k(e)).getEvalOrigin=function(){return n},e):e}function E(e,a){return d&&(b={},u={}),e+a.map(function(e){return"\n    at "+x(e)}).join("")}function S(e){var a=/\n    at [^(]+ \((.*):(\d+):(\d+)\)/.exec(e.stack);if(a){var t=a[1],c=+a[2],n=+a[3],i=b[t];if(!i&&r&&r.existsSync(t))try{i=r.readFileSync(t,"utf8")}catch(e){i=""}if(i){var f=i.split(/(?:\r\n|\r|\n)/)[c-1];if(f)return t+":"+c+"\n"+f+"\n"+new Array(n).join(" ")+"^"}}return null}function T(){var e=process.emit;process.emit=function(a){if("uncaughtException"===a){var t=arguments[1]&&arguments[1].stack,c=this.listeners(a).length>0;if(t&&!c)return function(e){var a=S(e);a&&r.writeSync(2,"\n"+a+"\n"),r.writeSync(2,e.stack+"\n"),process.exit(1)}(arguments[1])}return e.apply(this,arguments)}}h.push(function(e){var a,t=function(e){var a;if(m())try{var t=new XMLHttpRequest;t.open("GET",e,!1),t.send(null),a=4===t.readyState?t.responseText:null;var r=t.getResponseHeader("SourceMap")||t.getResponseHeader("X-SourceMap");if(r)return r}catch(e){}a=v(e);for(var c,n,i=/(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/)[ \t]*$)/gm;n=i.exec(a);)c=n;return c?c[1]:null}(e);if(!t)return null;if(l.test(t)){var r=t.slice(t.indexOf(",")+1);a=i(r,"base64").toString(),t=e}else t=y(e,t),a=v(t);return a?{url:t,map:a}:null});var j=p.slice(0),C=h.slice(0);a.wrapCallSite=x,a.getErrorSource=S,a.mapSourcePosition=w,a.retrieveSourceMap=_,a.install=function(e){if((e=e||{}).environment&&(s=e.environment,-1===["node","browser","auto"].indexOf(s)))throw new Error("environment "+s+" was unknown. Available options are {auto, browser, node}");if(e.retrieveFile&&(e.overrideRetrieveFile&&(p.length=0),p.unshift(e.retrieveFile)),e.retrieveSourceMap&&(e.overrideRetrieveSourceMap&&(h.length=0),h.unshift(e.retrieveSourceMap)),e.hookRequire&&!m()){var a;try{a=t(1026)}catch(e){}var r=a.prototype._compile;r.__sourceMapSupport||(a.prototype._compile=function(e,a){return b[a]=e,u[a]=void 0,r.call(this,e,a)},a.prototype._compile.__sourceMapSupport=!0)}(d||(d="emptyCacheBetweenOperations"in e&&e.emptyCacheBetweenOperations),f||(f=!0,Error.prepareStackTrace=E),o)||(!("handleUncaughtExceptions"in e)||e.handleUncaughtExceptions)&&"object"==typeof process&&null!==process&&"function"==typeof process.on&&(o=!0,T())},a.resetRetrieveHandlers=function(){p.length=0,h.length=0,p=j.slice(0),h=C.slice(0)}},function(e,a,t){t(1035).install()},function(e,a,t){t(1036);var r=t(387),c=t(407);e.exports={server:function(e){return c.create(e)},provider:function(e){return new r(e)}}}])});
//# sourceMappingURL=lib.node.js.map

/***/ }),
/* 179 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const IPC = __webpack_require__(232);

class IPCModule extends IPC{
    constructor(){
        super();
        //include IPC to make extensible
        Object.defineProperty(
            this,
            'IPC',
            {
                enumerable:true,
                writable:false,
                value:IPC
            }
        )
    }
}

module.exports=new IPCModule;


/***/ }),
/* 180 */
/***/ (function(module, exports, __webpack_require__) {

var TaskError = __webpack_require__(260);
var yargs = __webpack_require__(1207);
var _ = __webpack_require__(24);

function Command(commands) {
  this.commands = commands;

  var args = yargs();

  Object.keys(this.commands).forEach(function(command) {
    args = args.command(commands[command]);
  });

  this.args = args;
};

Command.prototype.getCommand = function(str, noAliases) {
  var argv = this.args.parse(str);

  if (argv._.length == 0) {
    return null;
  }

  var input = argv._[0];
  var chosenCommand = null;

  // If the command wasn't specified directly, go through a process
  // for inferring the command.
  if (this.commands[input]) {
    chosenCommand = input;
  } else if (noAliases !== true) {
    var currentLength = 1;
    var availableCommandNames = Object.keys(this.commands);

    // Loop through each letter of the input until we find a command
    // that uniquely matches.
    while (currentLength <= input.length) {
      // Gather all possible commands that match with the current length
      var possibleCommands = availableCommandNames.filter(function(possibleCommand) {
        return possibleCommand.substring(0, currentLength) == input.substring(0, currentLength);
      });

      // Did we find only one command that matches? If so, use that one.
      if (possibleCommands.length == 1) {
        chosenCommand = possibleCommands[0];
        break;
      }

      currentLength += 1;
    }
  }

  if (chosenCommand == null) {
    return null;
  }

  var command = this.commands[chosenCommand];

  return {
    name: chosenCommand,
    argv: argv,
    command: command
  };
};

Command.prototype.run = function(command, options, callback) {
  if (typeof options == "function") {
    callback = options;
    options = {};
  }

  var result = this.getCommand(command, options.noAliases);

  if (result == null) {
    return callback(new TaskError("Cannot find command: " + command));
  }

  var argv = result.argv;

  // Remove the task name itself.
  if (argv._) {
    argv._.shift();
  }

  // We don't need this.
  delete argv["$0"];

  // Some options might throw if options is a Config object. If so, let's ignore those options.
  var clone = {};
  Object.keys(options).forEach(function(key) {
    try {
      clone[key] = options[key];
    } catch (e) {
      // Do nothing with values that throw.
    }
  });

  options = _.extend(clone, argv);

  try {
    result.command.run(options, callback);
  } catch (err) {
    callback(err);
  }
};

module.exports = Command;


/***/ }),
/* 181 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  init: __webpack_require__(1162),
  compile: __webpack_require__(1156),
  migrate: __webpack_require__(447),
  deploy: __webpack_require__(1160),
  build: __webpack_require__(1155),
  test: __webpack_require__(1168),
  debug: __webpack_require__(1159),
  opcode: __webpack_require__(1165),
  console: __webpack_require__(1157),
  develop: __webpack_require__(446),
  create: __webpack_require__(1158),
  install: __webpack_require__(1163),
  publish: __webpack_require__(1166),
  //digest: require("./digest"),
  networks: __webpack_require__(1164),
  watch: __webpack_require__(449),
  serve: __webpack_require__(1167),
  exec: __webpack_require__(1161),
  unbox: __webpack_require__(448),
  version: __webpack_require__(1169),
};


/***/ }),
/* 182 */
/***/ (function(module, exports, __webpack_require__) {

exports.require = function() {
  var fs = __webpack_require__(1);
  if (process.versions['electron']) {
	  try {
		  fs = __webpack_require__(468)
	  } catch (e) {}
  }
  return fs
};


/***/ }),
/* 183 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var resolve = __webpack_require__(184);

module.exports = {
  Validation: errorSubclass(ValidationError),
  MissingRef: errorSubclass(MissingRefError)
};


function ValidationError(errors) {
  this.message = 'validation failed';
  this.errors = errors;
  this.ajv = this.validation = true;
}


MissingRefError.message = function (baseId, ref) {
  return 'can\'t resolve reference ' + ref + ' from id ' + baseId;
};


function MissingRefError(baseId, ref, message) {
  this.message = message || MissingRefError.message(baseId, ref);
  this.missingRef = resolve.url(baseId, ref);
  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));
}


function errorSubclass(Subclass) {
  Subclass.prototype = Object.create(Error.prototype);
  Subclass.prototype.constructor = Subclass;
  return Subclass;
}


/***/ }),
/* 184 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var url = __webpack_require__(8)
  , equal = __webpack_require__(217)
  , util = __webpack_require__(88)
  , SchemaObject = __webpack_require__(267)
  , traverse = __webpack_require__(910);

module.exports = resolve;

resolve.normalizeId = normalizeId;
resolve.fullPath = getFullPath;
resolve.url = resolveUrl;
resolve.ids = resolveIds;
resolve.inlineRef = inlineRef;
resolve.schema = resolveSchema;

/**
 * [resolve and compile the references ($ref)]
 * @this   Ajv
 * @param  {Function} compile reference to schema compilation funciton (localCompile)
 * @param  {Object} root object with information about the root schema for the current schema
 * @param  {String} ref reference to resolve
 * @return {Object|Function} schema object (if the schema can be inlined) or validation function
 */
function resolve(compile, root, ref) {
  /* jshint validthis: true */
  var refVal = this._refs[ref];
  if (typeof refVal == 'string') {
    if (this._refs[refVal]) refVal = this._refs[refVal];
    else return resolve.call(this, compile, root, refVal);
  }

  refVal = refVal || this._schemas[ref];
  if (refVal instanceof SchemaObject) {
    return inlineRef(refVal.schema, this._opts.inlineRefs)
            ? refVal.schema
            : refVal.validate || this._compile(refVal);
  }

  var res = resolveSchema.call(this, root, ref);
  var schema, v, baseId;
  if (res) {
    schema = res.schema;
    root = res.root;
    baseId = res.baseId;
  }

  if (schema instanceof SchemaObject) {
    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);
  } else if (schema !== undefined) {
    v = inlineRef(schema, this._opts.inlineRefs)
        ? schema
        : compile.call(this, schema, root, undefined, baseId);
  }

  return v;
}


/**
 * Resolve schema, its root and baseId
 * @this Ajv
 * @param  {Object} root root object with properties schema, refVal, refs
 * @param  {String} ref  reference to resolve
 * @return {Object} object with properties schema, root, baseId
 */
function resolveSchema(root, ref) {
  /* jshint validthis: true */
  var p = url.parse(ref, false, true)
    , refPath = _getFullPath(p)
    , baseId = getFullPath(this._getId(root.schema));
  if (refPath !== baseId) {
    var id = normalizeId(refPath);
    var refVal = this._refs[id];
    if (typeof refVal == 'string') {
      return resolveRecursive.call(this, root, refVal, p);
    } else if (refVal instanceof SchemaObject) {
      if (!refVal.validate) this._compile(refVal);
      root = refVal;
    } else {
      refVal = this._schemas[id];
      if (refVal instanceof SchemaObject) {
        if (!refVal.validate) this._compile(refVal);
        if (id == normalizeId(ref))
          return { schema: refVal, root: root, baseId: baseId };
        root = refVal;
      } else {
        return;
      }
    }
    if (!root.schema) return;
    baseId = getFullPath(this._getId(root.schema));
  }
  return getJsonPointer.call(this, p, baseId, root.schema, root);
}


/* @this Ajv */
function resolveRecursive(root, ref, parsedRef) {
  /* jshint validthis: true */
  var res = resolveSchema.call(this, root, ref);
  if (res) {
    var schema = res.schema;
    var baseId = res.baseId;
    root = res.root;
    var id = this._getId(schema);
    if (id) baseId = resolveUrl(baseId, id);
    return getJsonPointer.call(this, parsedRef, baseId, schema, root);
  }
}


var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);
/* @this Ajv */
function getJsonPointer(parsedRef, baseId, schema, root) {
  /* jshint validthis: true */
  parsedRef.hash = parsedRef.hash || '';
  if (parsedRef.hash.slice(0,2) != '#/') return;
  var parts = parsedRef.hash.split('/');

  for (var i = 1; i < parts.length; i++) {
    var part = parts[i];
    if (part) {
      part = util.unescapeFragment(part);
      schema = schema[part];
      if (schema === undefined) break;
      var id;
      if (!PREVENT_SCOPE_CHANGE[part]) {
        id = this._getId(schema);
        if (id) baseId = resolveUrl(baseId, id);
        if (schema.$ref) {
          var $ref = resolveUrl(baseId, schema.$ref);
          var res = resolveSchema.call(this, root, $ref);
          if (res) {
            schema = res.schema;
            root = res.root;
            baseId = res.baseId;
          }
        }
      }
    }
  }
  if (schema !== undefined && schema !== root.schema)
    return { schema: schema, root: root, baseId: baseId };
}


var SIMPLE_INLINED = util.toHash([
  'type', 'format', 'pattern',
  'maxLength', 'minLength',
  'maxProperties', 'minProperties',
  'maxItems', 'minItems',
  'maximum', 'minimum',
  'uniqueItems', 'multipleOf',
  'required', 'enum'
]);
function inlineRef(schema, limit) {
  if (limit === false) return false;
  if (limit === undefined || limit === true) return checkNoRef(schema);
  else if (limit) return countKeys(schema) <= limit;
}


function checkNoRef(schema) {
  var item;
  if (Array.isArray(schema)) {
    for (var i=0; i<schema.length; i++) {
      item = schema[i];
      if (typeof item == 'object' && !checkNoRef(item)) return false;
    }
  } else {
    for (var key in schema) {
      if (key == '$ref') return false;
      item = schema[key];
      if (typeof item == 'object' && !checkNoRef(item)) return false;
    }
  }
  return true;
}


function countKeys(schema) {
  var count = 0, item;
  if (Array.isArray(schema)) {
    for (var i=0; i<schema.length; i++) {
      item = schema[i];
      if (typeof item == 'object') count += countKeys(item);
      if (count == Infinity) return Infinity;
    }
  } else {
    for (var key in schema) {
      if (key == '$ref') return Infinity;
      if (SIMPLE_INLINED[key]) {
        count++;
      } else {
        item = schema[key];
        if (typeof item == 'object') count += countKeys(item) + 1;
        if (count == Infinity) return Infinity;
      }
    }
  }
  return count;
}


function getFullPath(id, normalize) {
  if (normalize !== false) id = normalizeId(id);
  var p = url.parse(id, false, true);
  return _getFullPath(p);
}


function _getFullPath(p) {
  var protocolSeparator = p.protocol || p.href.slice(0,2) == '//' ? '//' : '';
  return (p.protocol||'') + protocolSeparator + (p.host||'') + (p.path||'')  + '#';
}


var TRAILING_SLASH_HASH = /#\/?$/;
function normalizeId(id) {
  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';
}


function resolveUrl(baseId, id) {
  id = normalizeId(id);
  return url.resolve(baseId, id);
}


/* @this Ajv */
function resolveIds(schema) {
  var schemaId = normalizeId(this._getId(schema));
  var baseIds = {'': schemaId};
  var fullPaths = {'': getFullPath(schemaId, false)};
  var localRefs = {};
  var self = this;

  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
    if (jsonPtr === '') return;
    var id = self._getId(sch);
    var baseId = baseIds[parentJsonPtr];
    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;
    if (keyIndex !== undefined)
      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));

    if (typeof id == 'string') {
      id = baseId = normalizeId(baseId ? url.resolve(baseId, id) : id);

      var refVal = self._refs[id];
      if (typeof refVal == 'string') refVal = self._refs[refVal];
      if (refVal && refVal.schema) {
        if (!equal(sch, refVal.schema))
          throw new Error('id "' + id + '" resolves to more than one schema');
      } else if (id != normalizeId(fullPath)) {
        if (id[0] == '#') {
          if (localRefs[id] && !equal(sch, localRefs[id]))
            throw new Error('id "' + id + '" resolves to more than one schema');
          localRefs[id] = sch;
        } else {
          self._refs[id] = fullPath;
        }
      }
    }
    baseIds[jsonPtr] = baseId;
    fullPaths[jsonPtr] = fullPath;
  });

  return localRefs;
}


/***/ }),
/* 185 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var win32 = process && process.platform === 'win32';
var path = __webpack_require__(0);
var fileRe = __webpack_require__(801);
var utils = module.exports;

/**
 * Module dependencies
 */

utils.diff = __webpack_require__(554);
utils.unique = __webpack_require__(555);
utils.braces = __webpack_require__(556);
utils.brackets = __webpack_require__(557);
utils.extglob = __webpack_require__(558);
utils.isExtglob = __webpack_require__(163);
utils.isGlob = __webpack_require__(96);
utils.typeOf = __webpack_require__(370);
utils.normalize = __webpack_require__(384);
utils.omit = __webpack_require__(977);
utils.parseGlob = __webpack_require__(983);
utils.cache = __webpack_require__(1028);

/**
 * Get the filename of a filepath
 *
 * @param {String} `string`
 * @return {String}
 */

utils.filename = function filename(fp) {
  var seg = fp.match(fileRe());
  return seg && seg[0];
};

/**
 * Returns a function that returns true if the given
 * pattern is the same as a given `filepath`
 *
 * @param {String} `pattern`
 * @return {Function}
 */

utils.isPath = function isPath(pattern, opts) {
  opts = opts || {};
  return function(fp) {
    var unixified = utils.unixify(fp, opts);
    if(opts.nocase){
      return pattern.toLowerCase() === unixified.toLowerCase();
    }
    return pattern === unixified;
  };
};

/**
 * Returns a function that returns true if the given
 * pattern contains a `filepath`
 *
 * @param {String} `pattern`
 * @return {Function}
 */

utils.hasPath = function hasPath(pattern, opts) {
  return function(fp) {
    return utils.unixify(pattern, opts).indexOf(fp) !== -1;
  };
};

/**
 * Returns a function that returns true if the given
 * pattern matches or contains a `filepath`
 *
 * @param {String} `pattern`
 * @return {Function}
 */

utils.matchPath = function matchPath(pattern, opts) {
  var fn = (opts && opts.contains)
    ? utils.hasPath(pattern, opts)
    : utils.isPath(pattern, opts);
  return fn;
};

/**
 * Returns a function that returns true if the given
 * regex matches the `filename` of a file path.
 *
 * @param {RegExp} `re`
 * @return {Boolean}
 */

utils.hasFilename = function hasFilename(re) {
  return function(fp) {
    var name = utils.filename(fp);
    return name && re.test(name);
  };
};

/**
 * Coerce `val` to an array
 *
 * @param  {*} val
 * @return {Array}
 */

utils.arrayify = function arrayify(val) {
  return !Array.isArray(val)
    ? [val]
    : val;
};

/**
 * Normalize all slashes in a file path or glob pattern to
 * forward slashes.
 */

utils.unixify = function unixify(fp, opts) {
  if (opts && opts.unixify === false) return fp;
  if (opts && opts.unixify === true || win32 || path.sep === '\\') {
    return utils.normalize(fp, false);
  }
  if (opts && opts.unescape === true) {
    return fp ? fp.toString().replace(/\\(\w)/g, '$1') : '';
  }
  return fp;
};

/**
 * Escape/unescape utils
 */

utils.escapePath = function escapePath(fp) {
  return fp.replace(/[\\.]/g, '\\$&');
};

utils.unescapeGlob = function unescapeGlob(fp) {
  return fp.replace(/[\\"']/g, '');
};

utils.escapeRe = function escapeRe(str) {
  return str.replace(/[-[\\$*+?.#^\s{}(|)\]]/g, '\\$&');
};

/**
 * Expose `utils`
 */

module.exports = utils;


/***/ }),
/* 186 */
/***/ (function(module, exports) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.


module.exports = {

  newInvalidAsn1Error: function(msg) {
    var e = new Error();
    e.name = 'InvalidAsn1Error';
    e.message = msg || '';
    return e;
  }

};


/***/ }),
/* 187 */
/***/ (function(module, exports) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.


module.exports = {
  EOC: 0,
  Boolean: 1,
  Integer: 2,
  BitString: 3,
  OctetString: 4,
  Null: 5,
  OID: 6,
  ObjectDescriptor: 7,
  External: 8,
  Real: 9, // float
  Enumeration: 10,
  PDV: 11,
  Utf8String: 12,
  RelativeOID: 13,
  Sequence: 16,
  Set: 17,
  NumericString: 18,
  PrintableString: 19,
  T61String: 20,
  VideotexString: 21,
  IA5String: 22,
  UTCTime: 23,
  GeneralizedTime: 24,
  GraphicString: 25,
  VisibleString: 26,
  GeneralString: 28,
  UniversalString: 29,
  CharacterString: 30,
  BMPString: 31,
  Constructor: 32,
  Context: 128
};


/***/ }),
/* 188 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
// A temporary value used to identify if the loop should be broken.
// See #1064, #1293
exports.default = {};
module.exports = exports["default"];

/***/ }),
/* 189 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = doLimit;
function doLimit(fn, limit) {
    return function (iterable, iteratee, callback) {
        return fn(iterable, limit, iteratee, callback);
    };
}
module.exports = exports["default"];

/***/ }),
/* 190 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = _eachOfLimit;

var _noop = __webpack_require__(126);

var _noop2 = _interopRequireDefault(_noop);

var _once = __webpack_require__(276);

var _once2 = _interopRequireDefault(_once);

var _iterator = __webpack_require__(585);

var _iterator2 = _interopRequireDefault(_iterator);

var _onlyOnce = __webpack_require__(191);

var _onlyOnce2 = _interopRequireDefault(_onlyOnce);

var _breakLoop = __webpack_require__(188);

var _breakLoop2 = _interopRequireDefault(_breakLoop);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _eachOfLimit(limit) {
    return function (obj, iteratee, callback) {
        callback = (0, _once2.default)(callback || _noop2.default);
        if (limit <= 0 || !obj) {
            return callback(null);
        }
        var nextElem = (0, _iterator2.default)(obj);
        var done = false;
        var running = 0;
        var looping = false;

        function iterateeCallback(err, value) {
            running -= 1;
            if (err) {
                done = true;
                callback(err);
            } else if (value === _breakLoop2.default || done && running <= 0) {
                done = true;
                return callback(null);
            } else if (!looping) {
                replenish();
            }
        }

        function replenish() {
            looping = true;
            while (running < limit && !done) {
                var elem = nextElem();
                if (elem === null) {
                    done = true;
                    if (running <= 0) {
                        callback(null);
                    }
                    return;
                }
                running += 1;
                iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));
            }
            looping = false;
        }

        replenish();
    };
}
module.exports = exports['default'];

/***/ }),
/* 191 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = onlyOnce;
function onlyOnce(fn) {
    return function () {
        if (fn === null) throw new Error("Callback was already called.");
        var callFn = fn;
        fn = null;
        callFn.apply(this, arguments);
    };
}
module.exports = exports["default"];

/***/ }),
/* 192 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = slice;
function slice(arrayLike, start) {
    start = start | 0;
    var newLen = Math.max(arrayLike.length - start, 0);
    var newArr = Array(newLen);
    for (var idx = 0; idx < newLen; idx++) {
        newArr[idx] = arrayLike[start + idx];
    }
    return newArr;
}
module.exports = exports["default"];

/***/ }),
/* 193 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(633), __esModule: true };

/***/ }),
/* 194 */
/***/ (function(module, exports) {

function Caseless (dict) {
  this.dict = dict || {}
}
Caseless.prototype.set = function (name, value, clobber) {
  if (typeof name === 'object') {
    for (var i in name) {
      this.set(i, name[i], value)
    }
  } else {
    if (typeof clobber === 'undefined') clobber = true
    var has = this.has(name)

    if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value
    else this.dict[has || name] = value
    return has
  }
}
Caseless.prototype.has = function (name) {
  var keys = Object.keys(this.dict)
    , name = name.toLowerCase()
    ;
  for (var i=0;i<keys.length;i++) {
    if (keys[i].toLowerCase() === name) return keys[i]
  }
  return false
}
Caseless.prototype.get = function (name) {
  name = name.toLowerCase()
  var result, _key
  var headers = this.dict
  Object.keys(headers).forEach(function (key) {
    _key = key.toLowerCase()
    if (name === _key) result = headers[key]
  })
  return result
}
Caseless.prototype.swap = function (name) {
  var has = this.has(name)
  if (has === name) return
  if (!has) throw new Error('There is no header than matches "'+name+'"')
  this.dict[name] = this.dict[has]
  delete this.dict[has]
}
Caseless.prototype.del = function (name) {
  var has = this.has(name)
  return delete this.dict[has || name]
}

module.exports = function (dict) {return new Caseless(dict)}
module.exports.httpify = function (resp, headers) {
  var c = new Caseless(headers)
  resp.setHeader = function (key, value, clobber) {
    if (typeof value === 'undefined') return
    return c.set(key, value, clobber)
  }
  resp.hasHeader = function (key) {
    return c.has(key)
  }
  resp.getHeader = function (key) {
    return c.get(key)
  }
  resp.removeHeader = function (key) {
    return c.del(key)
  }
  resp.headers = c.dict
  return c
}


/***/ }),
/* 195 */
/***/ (function(module, exports) {

module.exports = function (it, Constructor, name, forbiddenField) {
  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
    throw TypeError(name + ': incorrect invocation!');
  } return it;
};


/***/ }),
/* 196 */
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__(110);
var TAG = __webpack_require__(34)('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),
/* 197 */
/***/ (function(module, exports) {

// 7.2.1 RequireObjectCoercible(argument)
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on  " + it);
  return it;
};


/***/ }),
/* 198 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(48);
var document = __webpack_require__(30).document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),
/* 199 */
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(110);
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),
/* 200 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(201);
var $export = __webpack_require__(29);
var redefine = __webpack_require__(660);
var hide = __webpack_require__(77);
var Iterators = __webpack_require__(113);
var $iterCreate = __webpack_require__(652);
var setToStringTag = __webpack_require__(148);
var getPrototypeOf = __webpack_require__(657);
var ITERATOR = __webpack_require__(34)('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),
/* 201 */
/***/ (function(module, exports) {

module.exports = true;


/***/ }),
/* 202 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 25.4.1.5 NewPromiseCapability(C)
var aFunction = __webpack_require__(109);

function PromiseCapability(C) {
  var resolve, reject;
  this.promise = new C(function ($$resolve, $$reject) {
    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
    resolve = $$resolve;
    reject = $$reject;
  });
  this.resolve = aFunction(resolve);
  this.reject = aFunction(reject);
}

module.exports.f = function (C) {
  return new PromiseCapability(C);
};


/***/ }),
/* 203 */
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 204 */
/***/ (function(module, exports, __webpack_require__) {

var hide = __webpack_require__(77);
module.exports = function (target, src, safe) {
  for (var key in src) {
    if (safe && target[key]) target[key] = src[key];
    else hide(target, key, src[key]);
  } return target;
};


/***/ }),
/* 205 */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(308)('keys');
var uid = __webpack_require__(207);
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),
/* 206 */
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),
/* 207 */
/***/ (function(module, exports) {

var id = 0;
var px = Math.random();
module.exports = function (key) {
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};


/***/ }),
/* 208 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $at = __webpack_require__(663)(true);

// 21.1.3.27 String.prototype[@@iterator]()
__webpack_require__(200)(String, 'String', function (iterated) {
  this._t = String(iterated); // target
  this._i = 0;                // next index
// 21.1.5.2.1 %StringIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var index = this._i;
  var point;
  if (index >= O.length) return { value: undefined, done: true };
  point = $at(O, index);
  this._i += point.length;
  return { value: point, done: false };
});


/***/ }),
/* 209 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var C_enc = C.enc;
	    var Utf8 = C_enc.Utf8;
	    var C_algo = C.algo;

	    /**
	     * HMAC algorithm.
	     */
	    var HMAC = C_algo.HMAC = Base.extend({
	        /**
	         * Initializes a newly created HMAC.
	         *
	         * @param {Hasher} hasher The hash algorithm to use.
	         * @param {WordArray|string} key The secret key.
	         *
	         * @example
	         *
	         *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
	         */
	        init: function (hasher, key) {
	            // Init hasher
	            hasher = this._hasher = new hasher.init();

	            // Convert string to WordArray, else assume WordArray already
	            if (typeof key == 'string') {
	                key = Utf8.parse(key);
	            }

	            // Shortcuts
	            var hasherBlockSize = hasher.blockSize;
	            var hasherBlockSizeBytes = hasherBlockSize * 4;

	            // Allow arbitrary length keys
	            if (key.sigBytes > hasherBlockSizeBytes) {
	                key = hasher.finalize(key);
	            }

	            // Clamp excess bits
	            key.clamp();

	            // Clone key for inner and outer pads
	            var oKey = this._oKey = key.clone();
	            var iKey = this._iKey = key.clone();

	            // Shortcuts
	            var oKeyWords = oKey.words;
	            var iKeyWords = iKey.words;

	            // XOR keys with pad constants
	            for (var i = 0; i < hasherBlockSize; i++) {
	                oKeyWords[i] ^= 0x5c5c5c5c;
	                iKeyWords[i] ^= 0x36363636;
	            }
	            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;

	            // Set initial values
	            this.reset();
	        },

	        /**
	         * Resets this HMAC to its initial state.
	         *
	         * @example
	         *
	         *     hmacHasher.reset();
	         */
	        reset: function () {
	            // Shortcut
	            var hasher = this._hasher;

	            // Reset
	            hasher.reset();
	            hasher.update(this._iKey);
	        },

	        /**
	         * Updates this HMAC with a message.
	         *
	         * @param {WordArray|string} messageUpdate The message to append.
	         *
	         * @return {HMAC} This HMAC instance.
	         *
	         * @example
	         *
	         *     hmacHasher.update('message');
	         *     hmacHasher.update(wordArray);
	         */
	        update: function (messageUpdate) {
	            this._hasher.update(messageUpdate);

	            // Chainable
	            return this;
	        },

	        /**
	         * Finalizes the HMAC computation.
	         * Note that the finalize operation is effectively a destructive, read-once operation.
	         *
	         * @param {WordArray|string} messageUpdate (Optional) A final message update.
	         *
	         * @return {WordArray} The HMAC.
	         *
	         * @example
	         *
	         *     var hmac = hmacHasher.finalize();
	         *     var hmac = hmacHasher.finalize('message');
	         *     var hmac = hmacHasher.finalize(wordArray);
	         */
	        finalize: function (messageUpdate) {
	            // Shortcut
	            var hasher = this._hasher;

	            // Compute HMAC
	            var innerHash = hasher.finalize(messageUpdate);
	            hasher.reset();
	            var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));

	            return hmac;
	        }
	    });
	}());


}));

/***/ }),
/* 210 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(151), __webpack_require__(693), __webpack_require__(691), __webpack_require__(91), __webpack_require__(93), __webpack_require__(211), __webpack_require__(319), __webpack_require__(709), __webpack_require__(320), __webpack_require__(710), __webpack_require__(115), __webpack_require__(708), __webpack_require__(209), __webpack_require__(704), __webpack_require__(92), __webpack_require__(13), __webpack_require__(694), __webpack_require__(696), __webpack_require__(695), __webpack_require__(698), __webpack_require__(697), __webpack_require__(699), __webpack_require__(700), __webpack_require__(701), __webpack_require__(703), __webpack_require__(702), __webpack_require__(692), __webpack_require__(690), __webpack_require__(711), __webpack_require__(707), __webpack_require__(706), __webpack_require__(705));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory);
	}
	else {
		// Global (browser)
		root.CryptoJS = factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	return CryptoJS;

}));

/***/ }),
/* 211 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_algo = C.algo;

	    // Reusable object
	    var W = [];

	    /**
	     * SHA-1 hash algorithm.
	     */
	    var SHA1 = C_algo.SHA1 = Hasher.extend({
	        _doReset: function () {
	            this._hash = new WordArray.init([
	                0x67452301, 0xefcdab89,
	                0x98badcfe, 0x10325476,
	                0xc3d2e1f0
	            ]);
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcut
	            var H = this._hash.words;

	            // Working variables
	            var a = H[0];
	            var b = H[1];
	            var c = H[2];
	            var d = H[3];
	            var e = H[4];

	            // Computation
	            for (var i = 0; i < 80; i++) {
	                if (i < 16) {
	                    W[i] = M[offset + i] | 0;
	                } else {
	                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
	                    W[i] = (n << 1) | (n >>> 31);
	                }

	                var t = ((a << 5) | (a >>> 27)) + e + W[i];
	                if (i < 20) {
	                    t += ((b & c) | (~b & d)) + 0x5a827999;
	                } else if (i < 40) {
	                    t += (b ^ c ^ d) + 0x6ed9eba1;
	                } else if (i < 60) {
	                    t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
	                } else /* if (i < 80) */ {
	                    t += (b ^ c ^ d) - 0x359d3e2a;
	                }

	                e = d;
	                d = c;
	                c = (b << 30) | (b >>> 2);
	                b = a;
	                a = t;
	            }

	            // Intermediate hash value
	            H[0] = (H[0] + a) | 0;
	            H[1] = (H[1] + b) | 0;
	            H[2] = (H[2] + c) | 0;
	            H[3] = (H[3] + d) | 0;
	            H[4] = (H[4] + e) | 0;
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;

	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
	            data.sigBytes = dataWords.length * 4;

	            // Hash final blocks
	            this._process();

	            // Return final computed hash
	            return this._hash;
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);
	            clone._hash = this._hash.clone();

	            return clone;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA1('message');
	     *     var hash = CryptoJS.SHA1(wordArray);
	     */
	    C.SHA1 = Hasher._createHelper(SHA1);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA1(message, key);
	     */
	    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
	}());


	return CryptoJS.SHA1;

}));

/***/ }),
/* 212 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * escape-html
 * Copyright(c) 2012-2013 TJ Holowaychuk
 * Copyright(c) 2015 Andreas Lubbe
 * Copyright(c) 2015 Tiancheng "Timothy" Gu
 * MIT Licensed
 */



/**
 * Module variables.
 * @private
 */

var matchHtmlRegExp = /["'&<>]/;

/**
 * Module exports.
 * @public
 */

module.exports = escapeHtml;

/**
 * Escape special characters in the given string of html.
 *
 * @param  {string} string The string to escape for inserting into HTML
 * @return {string}
 * @public
 */

function escapeHtml(string) {
  var str = '' + string;
  var match = matchHtmlRegExp.exec(str);

  if (!match) {
    return str;
  }

  var escape;
  var html = '';
  var index = 0;
  var lastIndex = 0;

  for (index = match.index; index < str.length; index++) {
    switch (str.charCodeAt(index)) {
      case 34: // "
        escape = '&quot;';
        break;
      case 38: // &
        escape = '&amp;';
        break;
      case 39: // '
        escape = '&#39;';
        break;
      case 60: // <
        escape = '&lt;';
        break;
      case 62: // >
        escape = '&gt;';
        break;
      default:
        continue;
    }

    if (lastIndex !== index) {
      html += str.substring(lastIndex, index);
    }

    lastIndex = index + 1;
    html += escape;
  }

  return lastIndex !== index
    ? html + str.substring(lastIndex, index)
    : html;
}


/***/ }),
/* 213 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file coder.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var f = __webpack_require__(40);

var SolidityTypeAddress = __webpack_require__(734);
var SolidityTypeBool = __webpack_require__(735);
var SolidityTypeInt = __webpack_require__(738);
var SolidityTypeUInt = __webpack_require__(741);
var SolidityTypeDynamicBytes = __webpack_require__(737);
var SolidityTypeString = __webpack_require__(740);
var SolidityTypeReal = __webpack_require__(739);
var SolidityTypeUReal = __webpack_require__(742);
var SolidityTypeBytes = __webpack_require__(736);

/**
 * SolidityCoder prototype should be used to encode/decode solidity params of any type
 */
var SolidityCoder = function (types) {
    this._types = types;
};

/**
 * This method should be used to transform type to SolidityType
 *
 * @method _requireType
 * @param {String} type
 * @returns {SolidityType} 
 * @throws {Error} throws if no matching type is found
 */
SolidityCoder.prototype._requireType = function (type) {
    var solidityType = this._types.filter(function (t) {
        return t.isType(type);
    })[0];

    if (!solidityType) {
        throw Error('invalid solidity type!: ' + type);
    }

    return solidityType;
};

/**
 * Should be used to encode plain param
 *
 * @method encodeParam
 * @param {String} type
 * @param {Object} plain param
 * @return {String} encoded plain param
 */
SolidityCoder.prototype.encodeParam = function (type, param) {
    return this.encodeParams([type], [param]);
};

/**
 * Should be used to encode list of params
 *
 * @method encodeParams
 * @param {Array} types
 * @param {Array} params
 * @return {String} encoded list of params
 */
SolidityCoder.prototype.encodeParams = function (types, params) {
    var solidityTypes = this.getSolidityTypes(types);

    var encodeds = solidityTypes.map(function (solidityType, index) {
        return solidityType.encode(params[index], types[index]);
    });

    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
        var staticPartLength = solidityType.staticPartLength(types[index]);
        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;
        return acc + roundedStaticPartLength;
    }, 0);

    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); 

    return result;
};

SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
    var result = "";
    var self = this;

    var isDynamic = function (i) {
       return solidityTypes[i].isDynamicArray(types[i]) || solidityTypes[i].isDynamicType(types[i]);
    };

    types.forEach(function (type, i) {
        if (isDynamic(i)) {
            result += f.formatInputInt(dynamicOffset).encode();
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
        } else {
            // don't add length to dynamicOffset. it's already counted
            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        }

        // TODO: figure out nested arrays
    });
    
    types.forEach(function (type, i) {
        if (isDynamic(i)) {
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
            result += e;
        }
    });
    return result;
};

// TODO: refactor whole encoding!
SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
    var self = this;
    if (solidityType.isDynamicArray(type)) {
        return (function () {
            // offset was already set
            var nestedName = solidityType.nestedName(type);
            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
            var result = encoded[0];
            
            (function () {
                var previousLength = 2; // in int
                if (solidityType.isDynamicArray(nestedName)) {
                    for (var i = 1; i < encoded.length; i++) {
                        previousLength += +(encoded[i - 1])[0] || 0;
                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
                    }
                }
            })();
            
            // first element is length, skip it
            (function () {
                for (var i = 0; i < encoded.length - 1; i++) {
                    var additionalOffset = result / 2;
                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset +  additionalOffset);
                }
            })();

            return result;
        })();
       
    } else if (solidityType.isStaticArray(type)) {
        return (function () {
            var nestedName = solidityType.nestedName(type);
            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
            var result = "";


            if (solidityType.isDynamicArray(nestedName)) {
                (function () {
                    var previousLength = 0; // in int
                    for (var i = 0; i < encoded.length; i++) {
                        // calculate length of previous item
                        previousLength += +(encoded[i - 1] || [])[0] || 0; 
                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
                    }
                })();
            }

            (function () {
                for (var i = 0; i < encoded.length; i++) {
                    var additionalOffset = result / 2;
                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);
                }
            })();

            return result;
        })();
    }

    return encoded;
};

/**
 * Should be used to decode bytes to plain param
 *
 * @method decodeParam
 * @param {String} type
 * @param {String} bytes
 * @return {Object} plain param
 */
SolidityCoder.prototype.decodeParam = function (type, bytes) {
    return this.decodeParams([type], bytes)[0];
};

/**
 * Should be used to decode list of params
 *
 * @method decodeParam
 * @param {Array} types
 * @param {String} bytes
 * @return {Array} array of plain params
 */
SolidityCoder.prototype.decodeParams = function (types, bytes) {
    var solidityTypes = this.getSolidityTypes(types);
    var offsets = this.getOffsets(types, solidityTypes);
        
    return solidityTypes.map(function (solidityType, index) {
        return solidityType.decode(bytes, offsets[index],  types[index], index);
    });
};

SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
    var lengths =  solidityTypes.map(function (solidityType, index) {
        return solidityType.staticPartLength(types[index]);
    });
    
    for (var i = 1; i < lengths.length; i++) {
         // sum with length of previous element
        lengths[i] += lengths[i - 1]; 
    }

    return lengths.map(function (length, index) {
        // remove the current length, so the length is sum of previous elements
        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
        return length - staticPartLength; 
    });
};

SolidityCoder.prototype.getSolidityTypes = function (types) {
    var self = this;
    return types.map(function (type) {
        return self._requireType(type);
    });
};

var coder = new SolidityCoder([
    new SolidityTypeAddress(),
    new SolidityTypeBool(),
    new SolidityTypeInt(),
    new SolidityTypeUInt(),
    new SolidityTypeDynamicBytes(),
    new SolidityTypeBytes(),
    new SolidityTypeString(),
    new SolidityTypeReal(),
    new SolidityTypeUReal()
]);

module.exports = coder;



/***/ }),
/* 214 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file coder.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var f = __webpack_require__(41);

var SolidityTypeAddress = __webpack_require__(761);
var SolidityTypeBool = __webpack_require__(762);
var SolidityTypeInt = __webpack_require__(765);
var SolidityTypeUInt = __webpack_require__(768);
var SolidityTypeDynamicBytes = __webpack_require__(764);
var SolidityTypeString = __webpack_require__(767);
var SolidityTypeReal = __webpack_require__(766);
var SolidityTypeUReal = __webpack_require__(769);
var SolidityTypeBytes = __webpack_require__(763);

var isDynamic = function (solidityType, type) {
   return solidityType.isDynamicType(type) ||
          solidityType.isDynamicArray(type);
};

/**
 * SolidityCoder prototype should be used to encode/decode solidity params of any type
 */
var SolidityCoder = function (types) {
    this._types = types;
};

/**
 * This method should be used to transform type to SolidityType
 *
 * @method _requireType
 * @param {String} type
 * @returns {SolidityType}
 * @throws {Error} throws if no matching type is found
 */
SolidityCoder.prototype._requireType = function (type) {
    var solidityType = this._types.filter(function (t) {
        return t.isType(type);
    })[0];

    if (!solidityType) {
        throw Error('invalid solidity type!: ' + type);
    }

    return solidityType;
};

/**
 * Should be used to encode plain param
 *
 * @method encodeParam
 * @param {String} type
 * @param {Object} plain param
 * @return {String} encoded plain param
 */
SolidityCoder.prototype.encodeParam = function (type, param) {
    return this.encodeParams([type], [param]);
};

/**
 * Should be used to encode list of params
 *
 * @method encodeParams
 * @param {Array} types
 * @param {Array} params
 * @return {String} encoded list of params
 */
SolidityCoder.prototype.encodeParams = function (types, params) {
    var solidityTypes = this.getSolidityTypes(types);

    var encodeds = solidityTypes.map(function (solidityType, index) {
        return solidityType.encode(params[index], types[index]);
    });

    var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) {
        var staticPartLength = solidityType.staticPartLength(types[index]);
        var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32;

        return acc + (isDynamic(solidityTypes[index], types[index]) ?
            32 :
            roundedStaticPartLength);
    }, 0);

    var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset);

    return result;
};

SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) {
    var result = "";
    var self = this;

    types.forEach(function (type, i) {
        if (isDynamic(solidityTypes[i], types[i])) {
            result += f.formatInputInt(dynamicOffset).encode();
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
        } else {
            // don't add length to dynamicOffset. it's already counted
            result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
        }

        // TODO: figure out nested arrays
    });

    types.forEach(function (type, i) {
        if (isDynamic(solidityTypes[i], types[i])) {
            var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset);
            dynamicOffset += e.length / 2;
            result += e;
        }
    });
    return result;
};

// TODO: refactor whole encoding!
SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) {
    var self = this;
    if (solidityType.isDynamicArray(type)) {
        return (function () {
            // offset was already set
            var nestedName = solidityType.nestedName(type);
            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
            var result = encoded[0];

            (function () {
                var previousLength = 2; // in int
                if (solidityType.isDynamicArray(nestedName)) {
                    for (var i = 1; i < encoded.length; i++) {
                        previousLength += +(encoded[i - 1])[0] || 0;
                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
                    }
                }
            })();

            // first element is length, skip it
            (function () {
                for (var i = 0; i < encoded.length - 1; i++) {
                    var additionalOffset = result / 2;
                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset +  additionalOffset);
                }
            })();

            return result;
        })();

    } else if (solidityType.isStaticArray(type)) {
        return (function () {
            var nestedName = solidityType.nestedName(type);
            var nestedStaticPartLength = solidityType.staticPartLength(nestedName);
            var result = "";


            if (solidityType.isDynamicArray(nestedName)) {
                (function () {
                    var previousLength = 0; // in int
                    for (var i = 0; i < encoded.length; i++) {
                        // calculate length of previous item
                        previousLength += +(encoded[i - 1] || [])[0] || 0;
                        result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode();
                    }
                })();
            }

            (function () {
                for (var i = 0; i < encoded.length; i++) {
                    var additionalOffset = result / 2;
                    result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset);
                }
            })();

            return result;
        })();
    }

    return encoded;
};

/**
 * Should be used to decode bytes to plain param
 *
 * @method decodeParam
 * @param {String} type
 * @param {String} bytes
 * @return {Object} plain param
 */
SolidityCoder.prototype.decodeParam = function (type, bytes) {
    return this.decodeParams([type], bytes)[0];
};

/**
 * Should be used to decode list of params
 *
 * @method decodeParam
 * @param {Array} types
 * @param {String} bytes
 * @return {Array} array of plain params
 */
SolidityCoder.prototype.decodeParams = function (types, bytes) {
    var solidityTypes = this.getSolidityTypes(types);
    var offsets = this.getOffsets(types, solidityTypes);

    return solidityTypes.map(function (solidityType, index) {
        return solidityType.decode(bytes, offsets[index],  types[index], index);
    });
};

SolidityCoder.prototype.getOffsets = function (types, solidityTypes) {
    var lengths =  solidityTypes.map(function (solidityType, index) {
        return solidityType.staticPartLength(types[index]);
    });

    for (var i = 1; i < lengths.length; i++) {
         // sum with length of previous element
        lengths[i] += lengths[i - 1];
    }

    return lengths.map(function (length, index) {
        // remove the current length, so the length is sum of previous elements
        var staticPartLength = solidityTypes[index].staticPartLength(types[index]);
        return length - staticPartLength;
    });
};

SolidityCoder.prototype.getSolidityTypes = function (types) {
    var self = this;
    return types.map(function (type) {
        return self._requireType(type);
    });
};

var coder = new SolidityCoder([
    new SolidityTypeAddress(),
    new SolidityTypeBool(),
    new SolidityTypeInt(),
    new SolidityTypeUInt(),
    new SolidityTypeDynamicBytes(),
    new SolidityTypeBytes(),
    new SolidityTypeString(),
    new SolidityTypeReal(),
    new SolidityTypeUReal()
]);

module.exports = coder;


/***/ }),
/* 215 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


class EventPubSub {
    constructor( scope ) {
        this._events_ = {};
        this.publish = this.trigger = this.emit;
        this.subscribe = this.on;
        this.unSubscribe = this.off;
    }

    on( type, handler, once ) {
        if ( !handler ) {
            throw new ReferenceError( 'handler not defined.' );
        }

        if ( !this._events_[ type ] ) {
            this._events_[ type ] = [];
        }

         if(once){
            handler._once_ = once;
        }

        this._events_[ type ].push( handler );
        return this;
    }

    once( type, handler ) {
        return this.on( type, handler, true );
    }

    off( type, handler ) {
        if ( !this._events_[ type ] ) {
            return this;
        }

        if ( !handler ) {
            throw new ReferenceError( 'handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler' );
        }

        if ( handler == '*' ) {
            delete this._events_[ type ];
            return this;
        }

        const handlers = this._events_[ type ];

        while ( handlers.includes( handler ) ) {
            handlers.splice(
                handlers.indexOf( handler ),
                1
            );
        }

        if ( handlers.length < 1 ) {
            delete this._events_[ type ];
        }

        return this;
    }

    emit( type, ...args ) {
        if ( !this._events_[ type ] ) {
            return this.emit$( type, ...args );
        }

        const handlers = this._events_[ type ];
        const onceHandled=[];

        for ( let handler of handlers ) {
            handler.apply( this, args );
            if(handler._once_){
              onceHandled.push(handler);
            }
        }

        for(let handler of onceHandled){
          this.off(type,handler);
        }

        return this.emit$( type, ...args );
    }

    emit$( type, ...args ) {
        if ( !this._events_[ '*' ] ) {
            return this;
        }

        const catchAll = this._events_[ '*' ];

        for ( let handler of catchAll ) {
            handler.call( this, type, ...args );
        }

        return this;
    }
}

module.exports = EventPubSub;


/***/ }),
/* 216 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var hasOwn = Object.prototype.hasOwnProperty;
var toStr = Object.prototype.toString;

var isArray = function isArray(arr) {
	if (typeof Array.isArray === 'function') {
		return Array.isArray(arr);
	}

	return toStr.call(arr) === '[object Array]';
};

var isPlainObject = function isPlainObject(obj) {
	if (!obj || toStr.call(obj) !== '[object Object]') {
		return false;
	}

	var hasOwnConstructor = hasOwn.call(obj, 'constructor');
	var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
	// Not own constructor property must be Object
	if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
		return false;
	}

	// Own properties are enumerated firstly, so to speed up,
	// if last one is own, then all properties are own.
	var key;
	for (key in obj) { /**/ }

	return typeof key === 'undefined' || hasOwn.call(obj, key);
};

module.exports = function extend() {
	var options, name, src, copy, copyIsArray, clone;
	var target = arguments[0];
	var i = 1;
	var length = arguments.length;
	var deep = false;

	// Handle a deep copy situation
	if (typeof target === 'boolean') {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}
	if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
		target = {};
	}

	for (; i < length; ++i) {
		options = arguments[i];
		// Only deal with non-null/undefined values
		if (options != null) {
			// Extend the base object
			for (name in options) {
				src = target[name];
				copy = options[name];

				// Prevent never-ending loop
				if (target !== copy) {
					// Recurse if we're merging plain objects or arrays
					if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
						if (copyIsArray) {
							copyIsArray = false;
							clone = src && isArray(src) ? src : [];
						} else {
							clone = src && isPlainObject(src) ? src : {};
						}

						// Never move original objects, clone them
						target[name] = extend(deep, clone, copy);

					// Don't bring in undefined values
					} else if (typeof copy !== 'undefined') {
						target[name] = copy;
					}
				}
			}
		}
	}

	// Return the modified object
	return target;
};


/***/ }),
/* 217 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var isArray = Array.isArray;
var keyList = Object.keys;
var hasProp = Object.prototype.hasOwnProperty;

module.exports = function equal(a, b) {
  if (a === b) return true;

  var arrA = isArray(a)
    , arrB = isArray(b)
    , i
    , length
    , key;

  if (arrA && arrB) {
    length = a.length;
    if (length != b.length) return false;
    for (i = 0; i < length; i++)
      if (!equal(a[i], b[i])) return false;
    return true;
  }

  if (arrA != arrB) return false;

  var dateA = a instanceof Date
    , dateB = b instanceof Date;
  if (dateA != dateB) return false;
  if (dateA && dateB) return a.getTime() == b.getTime();

  var regexpA = a instanceof RegExp
    , regexpB = b instanceof RegExp;
  if (regexpA != regexpB) return false;
  if (regexpA && regexpB) return a.toString() == b.toString();

  if (a instanceof Object && b instanceof Object) {
    var keys = keyList(a);
    length = keys.length;

    if (length !== keyList(b).length)
      return false;

    for (i = 0; i < length; i++)
      if (!hasProp.call(b, keys[i])) return false;

    for (i = 0; i < length; i++) {
      key = keys[i];
      if (!equal(a[key], b[key])) return false;
    }

    return true;
  }

  return false;
};


/***/ }),
/* 218 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const jsonFile = __webpack_require__(831)

module.exports = {
  // jsonfile exports
  readJson: u(jsonFile.readFile),
  readJsonSync: jsonFile.readFileSync,
  writeJson: u(jsonFile.writeFile),
  writeJsonSync: jsonFile.writeFileSync
}


/***/ }),
/* 219 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)

var o777 = parseInt('0777', 8)

function mkdirsSync (p, opts, made) {
  if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  var mode = opts.mode
  var xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  p = path.resolve(p)

  try {
    xfs.mkdirSync(p, mode)
    made = made || p
  } catch (err0) {
    switch (err0.code) {
      case 'ENOENT' :
        made = mkdirsSync(path.dirname(p), opts, made)
        mkdirsSync(p, opts, made)
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        var stat
        try {
          stat = xfs.statSync(p)
        } catch (err1) {
          throw err0
        }
        if (!stat.isDirectory()) throw err0
        break
    }
  }

  return made
}

module.exports = mkdirsSync


/***/ }),
/* 220 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)

var o777 = parseInt('0777', 8)

function mkdirs (p, opts, callback, made) {
  if (typeof opts === 'function') {
    callback = opts
    opts = {}
  } else if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  var mode = opts.mode
  var xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  callback = callback || function () {}
  p = path.resolve(p)

  xfs.mkdir(p, mode, function (er) {
    if (!er) {
      made = made || p
      return callback(null, made)
    }
    switch (er.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) return callback(er)
        mkdirs(path.dirname(p), opts, function (er, made) {
          if (er) callback(er, made)
          else mkdirs(p, opts, callback, made)
        })
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        xfs.stat(p, function (er2, stat) {
          // if the stat fails, then that's super weird.
          // let the original error be the failure reason.
          if (er2 || !stat.isDirectory()) callback(er, made)
          else callback(null, made)
        })
        break
    }
  })
}

module.exports = mkdirs


/***/ }),
/* 221 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _ = __webpack_require__(37);

module.exports = Graph;

var DEFAULT_EDGE_NAME = "\x00",
    GRAPH_NODE = "\x00",
    EDGE_KEY_DELIM = "\x01";

// Implementation notes:
//
//  * Node id query functions should return string ids for the nodes
//  * Edge id query functions should return an "edgeObj", edge object, that is
//    composed of enough information to uniquely identify an edge: {v, w, name}.
//  * Internally we use an "edgeId", a stringified form of the edgeObj, to
//    reference edges. This is because we need a performant way to look these
//    edges up and, object properties, which have string keys, are the closest
//    we're going to get to a performant hashtable in JavaScript.

function Graph(opts) {
  this._isDirected = _.has(opts, "directed") ? opts.directed : true;
  this._isMultigraph = _.has(opts, "multigraph") ? opts.multigraph : false;
  this._isCompound = _.has(opts, "compound") ? opts.compound : false;

  // Label for the graph itself
  this._label = undefined;

  // Defaults to be set when creating a new node
  this._defaultNodeLabelFn = _.constant(undefined);

  // Defaults to be set when creating a new edge
  this._defaultEdgeLabelFn = _.constant(undefined);

  // v -> label
  this._nodes = {};

  if (this._isCompound) {
    // v -> parent
    this._parent = {};

    // v -> children
    this._children = {};
    this._children[GRAPH_NODE] = {};
  }

  // v -> edgeObj
  this._in = {};

  // u -> v -> Number
  this._preds = {};

  // v -> edgeObj
  this._out = {};

  // v -> w -> Number
  this._sucs = {};

  // e -> edgeObj
  this._edgeObjs = {};

  // e -> label
  this._edgeLabels = {};
}

/* Number of nodes in the graph. Should only be changed by the implementation. */
Graph.prototype._nodeCount = 0;

/* Number of edges in the graph. Should only be changed by the implementation. */
Graph.prototype._edgeCount = 0;


/* === Graph functions ========= */

Graph.prototype.isDirected = function() {
  return this._isDirected;
};

Graph.prototype.isMultigraph = function() {
  return this._isMultigraph;
};

Graph.prototype.isCompound = function() {
  return this._isCompound;
};

Graph.prototype.setGraph = function(label) {
  this._label = label;
  return this;
};

Graph.prototype.graph = function() {
  return this._label;
};


/* === Node functions ========== */

Graph.prototype.setDefaultNodeLabel = function(newDefault) {
  if (!_.isFunction(newDefault)) {
    newDefault = _.constant(newDefault);
  }
  this._defaultNodeLabelFn = newDefault;
  return this;
};

Graph.prototype.nodeCount = function() {
  return this._nodeCount;
};

Graph.prototype.nodes = function() {
  return _.keys(this._nodes);
};

Graph.prototype.sources = function() {
  var self = this;
  return _.filter(this.nodes(), function(v) {
    return _.isEmpty(self._in[v]);
  });
};

Graph.prototype.sinks = function() {
  var self = this;
  return _.filter(this.nodes(), function(v) {
    return _.isEmpty(self._out[v]);
  });
};

Graph.prototype.setNodes = function(vs, value) {
  var args = arguments;
  var self = this;
  _.each(vs, function(v) {
    if (args.length > 1) {
      self.setNode(v, value);
    } else {
      self.setNode(v);
    }
  });
  return this;
};

Graph.prototype.setNode = function(v, value) {
  if (_.has(this._nodes, v)) {
    if (arguments.length > 1) {
      this._nodes[v] = value;
    }
    return this;
  }

  this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
  if (this._isCompound) {
    this._parent[v] = GRAPH_NODE;
    this._children[v] = {};
    this._children[GRAPH_NODE][v] = true;
  }
  this._in[v] = {};
  this._preds[v] = {};
  this._out[v] = {};
  this._sucs[v] = {};
  ++this._nodeCount;
  return this;
};

Graph.prototype.node = function(v) {
  return this._nodes[v];
};

Graph.prototype.hasNode = function(v) {
  return _.has(this._nodes, v);
};

Graph.prototype.removeNode =  function(v) {
  var self = this;
  if (_.has(this._nodes, v)) {
    var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); };
    delete this._nodes[v];
    if (this._isCompound) {
      this._removeFromParentsChildList(v);
      delete this._parent[v];
      _.each(this.children(v), function(child) {
        self.setParent(child);
      });
      delete this._children[v];
    }
    _.each(_.keys(this._in[v]), removeEdge);
    delete this._in[v];
    delete this._preds[v];
    _.each(_.keys(this._out[v]), removeEdge);
    delete this._out[v];
    delete this._sucs[v];
    --this._nodeCount;
  }
  return this;
};

Graph.prototype.setParent = function(v, parent) {
  if (!this._isCompound) {
    throw new Error("Cannot set parent in a non-compound graph");
  }

  if (_.isUndefined(parent)) {
    parent = GRAPH_NODE;
  } else {
    // Coerce parent to string
    parent += "";
    for (var ancestor = parent;
         !_.isUndefined(ancestor);
         ancestor = this.parent(ancestor)) {
      if (ancestor === v) {
        throw new Error("Setting " + parent+ " as parent of " + v +
                        " would create a cycle");
      }
    }

    this.setNode(parent);
  }

  this.setNode(v);
  this._removeFromParentsChildList(v);
  this._parent[v] = parent;
  this._children[parent][v] = true;
  return this;
};

Graph.prototype._removeFromParentsChildList = function(v) {
  delete this._children[this._parent[v]][v];
};

Graph.prototype.parent = function(v) {
  if (this._isCompound) {
    var parent = this._parent[v];
    if (parent !== GRAPH_NODE) {
      return parent;
    }
  }
};

Graph.prototype.children = function(v) {
  if (_.isUndefined(v)) {
    v = GRAPH_NODE;
  }

  if (this._isCompound) {
    var children = this._children[v];
    if (children) {
      return _.keys(children);
    }
  } else if (v === GRAPH_NODE) {
    return this.nodes();
  } else if (this.hasNode(v)) {
    return [];
  }
};

Graph.prototype.predecessors = function(v) {
  var predsV = this._preds[v];
  if (predsV) {
    return _.keys(predsV);
  }
};

Graph.prototype.successors = function(v) {
  var sucsV = this._sucs[v];
  if (sucsV) {
    return _.keys(sucsV);
  }
};

Graph.prototype.neighbors = function(v) {
  var preds = this.predecessors(v);
  if (preds) {
    return _.union(preds, this.successors(v));
  }
};

Graph.prototype.isLeaf = function (v) {
  var neighbors;
  if (this.isDirected()) {
    neighbors = this.successors(v);
  } else {
    neighbors = this.neighbors(v);
  }
  return neighbors.length === 0;
};

Graph.prototype.filterNodes = function(filter) {
  var copy = new this.constructor({
    directed: this._isDirected,
    multigraph: this._isMultigraph,
    compound: this._isCompound
  });

  copy.setGraph(this.graph());

  var self = this;
  _.each(this._nodes, function(value, v) {
    if (filter(v)) {
      copy.setNode(v, value);
    }
  });

  _.each(this._edgeObjs, function(e) {
    if (copy.hasNode(e.v) && copy.hasNode(e.w)) {
      copy.setEdge(e, self.edge(e));
    }
  });

  var parents = {};
  function findParent(v) {
    var parent = self.parent(v);
    if (parent === undefined || copy.hasNode(parent)) {
      parents[v] = parent;
      return parent;
    } else if (parent in parents) {
      return parents[parent];
    } else {
      return findParent(parent);
    }
  }

  if (this._isCompound) {
    _.each(copy.nodes(), function(v) {
      copy.setParent(v, findParent(v));
    });
  }

  return copy;
};

/* === Edge functions ========== */

Graph.prototype.setDefaultEdgeLabel = function(newDefault) {
  if (!_.isFunction(newDefault)) {
    newDefault = _.constant(newDefault);
  }
  this._defaultEdgeLabelFn = newDefault;
  return this;
};

Graph.prototype.edgeCount = function() {
  return this._edgeCount;
};

Graph.prototype.edges = function() {
  return _.values(this._edgeObjs);
};

Graph.prototype.setPath = function(vs, value) {
  var self = this,
      args = arguments;
  _.reduce(vs, function(v, w) {
    if (args.length > 1) {
      self.setEdge(v, w, value);
    } else {
      self.setEdge(v, w);
    }
    return w;
  });
  return this;
};

/*
 * setEdge(v, w, [value, [name]])
 * setEdge({ v, w, [name] }, [value])
 */
Graph.prototype.setEdge = function() {
  var v, w, name, value,
      valueSpecified = false,
      arg0 = arguments[0];

  if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) {
    v = arg0.v;
    w = arg0.w;
    name = arg0.name;
    if (arguments.length === 2) {
      value = arguments[1];
      valueSpecified = true;
    }
  } else {
    v = arg0;
    w = arguments[1];
    name = arguments[3];
    if (arguments.length > 2) {
      value = arguments[2];
      valueSpecified = true;
    }
  }

  v = "" + v;
  w = "" + w;
  if (!_.isUndefined(name)) {
    name = "" + name;
  }

  var e = edgeArgsToId(this._isDirected, v, w, name);
  if (_.has(this._edgeLabels, e)) {
    if (valueSpecified) {
      this._edgeLabels[e] = value;
    }
    return this;
  }

  if (!_.isUndefined(name) && !this._isMultigraph) {
    throw new Error("Cannot set a named edge when isMultigraph = false");
  }

  // It didn't exist, so we need to create it.
  // First ensure the nodes exist.
  this.setNode(v);
  this.setNode(w);

  this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);

  var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
  // Ensure we add undirected edges in a consistent way.
  v = edgeObj.v;
  w = edgeObj.w;

  Object.freeze(edgeObj);
  this._edgeObjs[e] = edgeObj;
  incrementOrInitEntry(this._preds[w], v);
  incrementOrInitEntry(this._sucs[v], w);
  this._in[w][e] = edgeObj;
  this._out[v][e] = edgeObj;
  this._edgeCount++;
  return this;
};

Graph.prototype.edge = function(v, w, name) {
  var e = (arguments.length === 1
            ? edgeObjToId(this._isDirected, arguments[0])
            : edgeArgsToId(this._isDirected, v, w, name));
  return this._edgeLabels[e];
};

Graph.prototype.hasEdge = function(v, w, name) {
  var e = (arguments.length === 1
            ? edgeObjToId(this._isDirected, arguments[0])
            : edgeArgsToId(this._isDirected, v, w, name));
  return _.has(this._edgeLabels, e);
};

Graph.prototype.removeEdge = function(v, w, name) {
  var e = (arguments.length === 1
            ? edgeObjToId(this._isDirected, arguments[0])
            : edgeArgsToId(this._isDirected, v, w, name)),
      edge = this._edgeObjs[e];
  if (edge) {
    v = edge.v;
    w = edge.w;
    delete this._edgeLabels[e];
    delete this._edgeObjs[e];
    decrementOrRemoveEntry(this._preds[w], v);
    decrementOrRemoveEntry(this._sucs[v], w);
    delete this._in[w][e];
    delete this._out[v][e];
    this._edgeCount--;
  }
  return this;
};

Graph.prototype.inEdges = function(v, u) {
  var inV = this._in[v];
  if (inV) {
    var edges = _.values(inV);
    if (!u) {
      return edges;
    }
    return _.filter(edges, function(edge) { return edge.v === u; });
  }
};

Graph.prototype.outEdges = function(v, w) {
  var outV = this._out[v];
  if (outV) {
    var edges = _.values(outV);
    if (!w) {
      return edges;
    }
    return _.filter(edges, function(edge) { return edge.w === w; });
  }
};

Graph.prototype.nodeEdges = function(v, w) {
  var inEdges = this.inEdges(v, w);
  if (inEdges) {
    return inEdges.concat(this.outEdges(v, w));
  }
};

function incrementOrInitEntry(map, k) {
  if (map[k]) {
    map[k]++;
  } else {
    map[k] = 1;
  }
}

function decrementOrRemoveEntry(map, k) {
  if (!--map[k]) { delete map[k]; }
}

function edgeArgsToId(isDirected, v_, w_, name) {
  var v = "" + v_;
  var w = "" + w_;
  if (!isDirected && v > w) {
    var tmp = v;
    v = w;
    w = tmp;
  }
  return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +
             (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);
}

function edgeArgsToObj(isDirected, v_, w_, name) {
  var v = "" + v_;
  var w = "" + w_;
  if (!isDirected && v > w) {
    var tmp = v;
    v = w;
    w = tmp;
  }
  var edgeObj =  { v: v, w: w };
  if (name) {
    edgeObj.name = name;
  }
  return edgeObj;
}

function edgeObjToId(isDirected, edgeObj) {
  return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
}


/***/ }),
/* 222 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (flag, argv) {
	argv = argv || process.argv;

	var terminatorPos = argv.indexOf('--');
	var prefix = /^--/.test(flag) ? '' : '--';
	var pos = argv.indexOf(prefix + flag);

	return pos !== -1 && (terminatorPos !== -1 ? pos < terminatorPos : true);
};


/***/ }),
/* 223 */
/***/ (function(module, exports) {

function Queue(asStack){
    Object.defineProperties(
        this,
        {
            add:{
                enumerable:true,
                writable:false,
                value:addToQueue
            },
            next:{
                enumerable:true,
                writable:false,
                value:run
            },
            clear:{
                enumerable:true,
                writable:false,
                value:clearQueue
            },
            contents:{
                enumerable:false,
                get:getQueue,
                set:setQueue
            },
            autoRun:{
                enumerable:true,
                writable:true,
                value:true
            },
            stop:{
                enumerable:true,
                writable:true,
                value:false
            }
        }
    );

    var queue=[];
    var running=false;
    var stop=false;

    function clearQueue(){
        queue=[];
        return queue;
    }

    function getQueue(){
        return queue;
    }

    function setQueue(val){
        queue=val;
        return queue;
    }

    function addToQueue(){
        for(var i in arguments){
            queue.push(arguments[i]);
        }
        if(!running && !this.stop && this.autoRun){
            this.next();
        }
    }

    function run(){
        running=true;
        if(queue.length<1 || this.stop){
            running=false;
            return;
        }

        queue.shift().bind(this)();
    }
}

module.exports=Queue;


/***/ }),
/* 224 */
/***/ (function(module, exports, __webpack_require__) {

var _fs
try {
  _fs = __webpack_require__(3)
} catch (_) {
  _fs = __webpack_require__(1)
}

function readFile (file, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }

  if (typeof options === 'string') {
    options = {encoding: options}
  }

  options = options || {}
  var fs = options.fs || _fs

  var shouldThrow = true
  // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead
  if ('passParsingErrors' in options) {
    shouldThrow = options.passParsingErrors
  } else if ('throws' in options) {
    shouldThrow = options.throws
  }

  fs.readFile(file, options, function (err, data) {
    if (err) return callback(err)

    data = stripBom(data)

    var obj
    try {
      obj = JSON.parse(data, options ? options.reviver : null)
    } catch (err2) {
      if (shouldThrow) {
        err2.message = file + ': ' + err2.message
        return callback(err2)
      } else {
        return callback(null, null)
      }
    }

    callback(null, obj)
  })
}

function readFileSync (file, options) {
  options = options || {}
  if (typeof options === 'string') {
    options = {encoding: options}
  }

  var fs = options.fs || _fs

  var shouldThrow = true
  // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead
  if ('passParsingErrors' in options) {
    shouldThrow = options.passParsingErrors
  } else if ('throws' in options) {
    shouldThrow = options.throws
  }

  var content = fs.readFileSync(file, options)
  content = stripBom(content)

  try {
    return JSON.parse(content, options.reviver)
  } catch (err) {
    if (shouldThrow) {
      err.message = file + ': ' + err.message
      throw err
    } else {
      return null
    }
  }
}

function writeFile (file, obj, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }
  options = options || {}
  var fs = options.fs || _fs

  var spaces = typeof options === 'object' && options !== null
    ? 'spaces' in options
    ? options.spaces : this.spaces
    : this.spaces

  var str = ''
  try {
    str = JSON.stringify(obj, options ? options.replacer : null, spaces) + '\n'
  } catch (err) {
    if (callback) return callback(err, null)
  }

  fs.writeFile(file, str, options, callback)
}

function writeFileSync (file, obj, options) {
  options = options || {}
  var fs = options.fs || _fs

  var spaces = typeof options === 'object' && options !== null
    ? 'spaces' in options
    ? options.spaces : this.spaces
    : this.spaces

  var str = JSON.stringify(obj, options.replacer, spaces) + '\n'
  // not sure if fs.writeFileSync returns anything, but just in case
  return fs.writeFileSync(file, str, options)
}

function stripBom (content) {
  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
  if (Buffer.isBuffer(content)) content = content.toString('utf8')
  content = content.replace(/^\uFEFF/, '')
  return content
}

var jsonfile = {
  spaces: null,
  readFile: readFile,
  readFileSync: readFileSync,
  writeFile: writeFile,
  writeFileSync: writeFileSync
}

module.exports = jsonfile


/***/ }),
/* 225 */
/***/ (function(module, exports, __webpack_require__) {


var urilib = __webpack_require__(8);
var helpers = __webpack_require__(97);

module.exports.SchemaScanResult = SchemaScanResult;
function SchemaScanResult(found, ref){
  this.id = found;
  this.ref = ref;
}

/**
 * Adds a schema with a certain urn to the Validator instance.
 * @param string uri
 * @param object schema
 * @return {Object}
 */
module.exports.scan = function scan(base, schema){
  function scanSchema(baseuri, schema){
    if(!schema || typeof schema!='object') return;
    // Mark all referenced schemas so we can tell later which schemas are referred to, but never defined
    if(schema.$ref){
      var resolvedUri = urilib.resolve(baseuri, schema.$ref);
      ref[resolvedUri] = ref[resolvedUri] ? ref[resolvedUri]+1 : 0;
      return;
    }
    var ourBase = schema.id ? urilib.resolve(baseuri, schema.id) : baseuri;
    if (ourBase) {
      // If there's no fragment, append an empty one
      if(ourBase.indexOf('#')<0) ourBase += '#';
      if(found[ourBase]){
        if(!helpers.deepCompareStrict(found[ourBase], schema)){
          throw new Error('Schema <'+schema+'> already exists with different definition');
        }
        return found[ourBase];
      }
      found[ourBase] = schema;
      // strip trailing fragment
      if(ourBase[ourBase.length-1]=='#'){
        found[ourBase.substring(0, ourBase.length-1)] = schema;
      }
    }
    scanArray(ourBase+'/items', ((schema.items instanceof Array)?schema.items:[schema.items]));
    scanArray(ourBase+'/extends', ((schema.extends instanceof Array)?schema.extends:[schema.extends]));
    scanSchema(ourBase+'/additionalItems', schema.additionalItems);
    scanObject(ourBase+'/properties', schema.properties);
    scanSchema(ourBase+'/additionalProperties', schema.additionalProperties);
    scanObject(ourBase+'/definitions', schema.definitions);
    scanObject(ourBase+'/patternProperties', schema.patternProperties);
    scanObject(ourBase+'/dependencies', schema.dependencies);
    scanArray(ourBase+'/disallow', schema.disallow);
    scanArray(ourBase+'/allOf', schema.allOf);
    scanArray(ourBase+'/anyOf', schema.anyOf);
    scanArray(ourBase+'/oneOf', schema.oneOf);
    scanSchema(ourBase+'/not', schema.not);
  }
  function scanArray(baseuri, schemas){
    if(!(schemas instanceof Array)) return;
    for(var i=0; i<schemas.length; i++){
      scanSchema(baseuri+'/'+i, schemas[i]);
    }
  }
  function scanObject(baseuri, schemas){
    if(!schemas || typeof schemas!='object') return;
    for(var p in schemas){
      scanSchema(baseuri+'/'+p, schemas[p]);
    }
  }

  var found = {};
  var ref = {};
  var schemaUri = base;
  scanSchema(base, schema);
  return new SchemaScanResult(found, ref);
}


/***/ }),
/* 226 */
/***/ (function(module, exports, __webpack_require__) {

var Symbol = __webpack_require__(373),
    getRawTag = __webpack_require__(936),
    objectToString = __webpack_require__(941);

/** `Object#toString` result references. */
var nullTag = '[object Null]',
    undefinedTag = '[object Undefined]';

/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

/**
 * The base implementation of `getTag` without fallbacks for buggy environments.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
function baseGetTag(value) {
  if (value == null) {
    return value === undefined ? undefinedTag : nullTag;
  }
  return (symToStringTag && symToStringTag in Object(value))
    ? getRawTag(value)
    : objectToString(value);
}

module.exports = baseGetTag;


/***/ }),
/* 227 */
/***/ (function(module, exports) {

/**
 * Checks if `value` is object-like. A value is object-like if it's not `null`
 * and has a `typeof` result of "object".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
 * @example
 *
 * _.isObjectLike({});
 * // => true
 *
 * _.isObjectLike([1, 2, 3]);
 * // => true
 *
 * _.isObjectLike(_.noop);
 * // => false
 *
 * _.isObjectLike(null);
 * // => false
 */
function isObjectLike(value) {
  return value != null && typeof value == 'object';
}

module.exports = isObjectLike;


/***/ }),
/* 228 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var _0777 = parseInt('0777', 8);

module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;

function mkdirP (p, opts, f, made) {
    if (typeof opts === 'function') {
        f = opts;
        opts = {};
    }
    else if (!opts || typeof opts !== 'object') {
        opts = { mode: opts };
    }
    
    var mode = opts.mode;
    var xfs = opts.fs || fs;
    
    if (mode === undefined) {
        mode = _0777 & (~process.umask());
    }
    if (!made) made = null;
    
    var cb = f || function () {};
    p = path.resolve(p);
    
    xfs.mkdir(p, mode, function (er) {
        if (!er) {
            made = made || p;
            return cb(null, made);
        }
        switch (er.code) {
            case 'ENOENT':
                mkdirP(path.dirname(p), opts, function (er, made) {
                    if (er) cb(er, made);
                    else mkdirP(p, opts, cb, made);
                });
                break;

            // In the case of any other error, just see if there's a dir
            // there already.  If so, then hooray!  If not, then something
            // is borked.
            default:
                xfs.stat(p, function (er2, stat) {
                    // if the stat fails, then that's super weird.
                    // let the original error be the failure reason.
                    if (er2 || !stat.isDirectory()) cb(er, made)
                    else cb(null, made);
                });
                break;
        }
    });
}

mkdirP.sync = function sync (p, opts, made) {
    if (!opts || typeof opts !== 'object') {
        opts = { mode: opts };
    }
    
    var mode = opts.mode;
    var xfs = opts.fs || fs;
    
    if (mode === undefined) {
        mode = _0777 & (~process.umask());
    }
    if (!made) made = null;

    p = path.resolve(p);

    try {
        xfs.mkdirSync(p, mode);
        made = made || p;
    }
    catch (err0) {
        switch (err0.code) {
            case 'ENOENT' :
                made = sync(path.dirname(p), opts, made);
                sync(p, opts, made);
                break;

            // In the case of any other error, just see if there's a dir
            // there already.  If so, then hooray!  If not, then something
            // is borked.
            default:
                var stat;
                try {
                    stat = xfs.statSync(p);
                }
                catch (err1) {
                    throw err0;
                }
                if (!stat.isDirectory()) throw err0;
                break;
        }
    }

    return made;
};


/***/ }),
/* 229 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(960);
} else {
  module.exports = __webpack_require__(961);
}


/***/ }),
/* 230 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const net = __webpack_require__(32),
    tls = __webpack_require__(71),
    EventParser = __webpack_require__(128),
    Message = __webpack_require__(125),
    fs = __webpack_require__(1),
    Queue = __webpack_require__(223);

let Events = __webpack_require__(79);
if(process.version[1]>4){
    Events = __webpack_require__(123);
}

let eventParser = new EventParser();

class Client extends Events{
    constructor(config,log){
        super();
        Object.assign(
            this,
            {
                Client  : Client,
                config  : config,
                queue   : new Queue,
                socket  : false,
                connect : connect,
                emit    : emit,
                log     : log,
                retriesRemaining:config.maxRetries||0,
                explicitlyDisconnected: false
            }
        );

        eventParser=new EventParser(this.config);
    }
}

function emit(type,data){
    this.log('dispatching event to ', this.id, this.path, ' : ', type, ',', data);

    let message=new Message;
    message.type=type;
    message.data=data;

    if(this.config.rawBuffer){
        message=new Buffer(type,this.config.encoding);
    }else{
        message=eventParser.format(message);
    }

    if(!this.config.sync){
        this.socket.write(message);
        return;
    }

    this.queue.add(
        syncEmit.bind(this,message)
    );
}

function syncEmit(message){
    this.log('dispatching event to ', this.id, this.path, ' : ', message);
    this.socket.write(message);
}

function connect(){
    //init client object for scope persistance especially inside of socket events.
    let client=this;

    client.log('requested connection to ', client.id, client.path);
    if(!this.path){
        client.log('\n\n######\nerror: ', client.id ,' client has not specified socket path it wishes to connect to.');
        return;
    }

    const options={};

    if(!client.port){
        client.log('Connecting client on Unix Socket :', client.path);

        options.path=client.path;

        if (process.platform ==='win32' && !client.path.startsWith('\\\\.\\pipe\\')){
            options.path = options.path.replace(/^\//, '');
            options.path = options.path.replace(/\//g, '-');
            options.path= `\\\\.\\pipe\\${options.path}`;
        }

        client.socket = net.connect(options);
    }else{
        options.host=client.path;
        options.port=client.port;

        if(client.config.interface.localAddress){
          options.localAddress=client.config.interface.localAddress;
        }

        if(client.config.interface.localPort){
          options.localPort=client.config.interface.localPort;
        }

        if(client.config.interface.family){
          options.family=client.config.interface.family;
        }

        if(client.config.interface.hints){
          options.hints=client.config.interface.hints;
        }

        if(client.config.interface.lookup){
          options.lookup=client.config.interface.lookup;
        }

        if(!client.config.tls){
            client.log('Connecting client via TCP to', options);
            client.socket = net.connect(options);
        }else{
            client.log('Connecting client via TLS to', client.path ,client.port,client.config.tls);
            if(client.config.tls.private){
                client.config.tls.key=fs.readFileSync(client.config.tls.private);
            }
            if(client.config.tls.public){
                client.config.tls.cert=fs.readFileSync(client.config.tls.public);
            }
            if(client.config.tls.trustedConnections){
                if(typeof client.config.tls.trustedConnections === 'string'){
                    client.config.tls.trustedConnections=[client.config.tls.trustedConnections];
                }
                client.config.tls.ca=[];
                for(let i=0; i<client.config.tls.trustedConnections.length; i++){
                    client.config.tls.ca.push(
                        fs.readFileSync(client.config.tls.trustedConnections[i])
                    );
                }
            }

            Object.assign(client.config.tls,options);

            client.socket = tls.connect(
                client.config.tls
            );
        }
    }

    client.socket.setEncoding(this.config.encoding);

    client.socket.on(
        'error',
        function(err){
            client.log('\n\n######\nerror: ', err);
            client.publish('error', err);

        }
    );

    client.socket.on(
        'connect',
        function connectionMade(){
            client.publish('connect');
            client.retriesRemaining=client.config.maxRetries;
            client.log('retrying reset');
        }
    );

    client.socket.on(
        'close',
        function connectionClosed(){
            client.log('connection closed' ,client.id , client.path,
            client.retriesRemaining, 'tries remaining of', client.config.maxRetries
        );

            if(
                client.config.stopRetrying ||
                client.retriesRemaining<1 ||
                client.explicitlyDisconnected

            ){
                client.publish('disconnect');
                client.log(
                    (client.config.id),
                    'exceeded connection rety amount of',
                    ' or stopRetrying flag set.'
                );

                client.socket.destroy();
                client.publish('destroy');
                client=undefined;

                return;
            }

            setTimeout(
                function retryTimeout(){
                    client.retriesRemaining--;
                    client.connect();
                }.bind(null,client),
                client.config.retry
            );

            client.publish('disconnect');
        }
    );

    client.socket.on(
        'data',
        function(data) {
            client.log('## received events ##');
            if(client.config.rawBuffer){
                client.publish(
                   'data',
                   new Buffer(data,client.config.encoding)
                );
                if(!client.config.sync){
                    return;
                }

                client.queue.next();
                return;
            }

            if(!this.ipcBuffer){
                this.ipcBuffer='';
            }

            data=(this.ipcBuffer+=data);

            if(data.slice(-1)!=eventParser.delimiter || data.indexOf(eventParser.delimiter) == -1){
                client.log('Messages are large, You may want to consider smaller messages.');
                return;
            }

            this.ipcBuffer='';

            const events = eventParser.parse(data);
            const eCount = events.length;
            for(let i=0; i<eCount; i++){
                let message=new Message;
                message.load(events[i]);

                client.log('detected event', message.type, message.data);
                client.publish(
                   message.type,
                   message.data
                );
            }

            if(!client.config.sync){
                return;
            }

            client.queue.next();
        }
    );
}

module.exports=Client;


/***/ }),
/* 231 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const net = __webpack_require__(32),
    tls = __webpack_require__(71),
    fs = __webpack_require__(1),
    dgram = __webpack_require__(256),
    EventParser = __webpack_require__(128),
    Message = __webpack_require__(125);

let Events = __webpack_require__(79);
if(process.version[1]>4){
    Events = __webpack_require__(123);
}

let eventParser = new EventParser();

class Server extends Events{
    constructor(path,config,log,port){
        super();
        Object.assign(
            this,
            {
                config          : config,
                path            : path,
                port            : port,
                udp4            : false,
                udp6            : false,
                log             : log,
                server          : false,
                sockets         : [],
                emit            : emit,
                broadcast       : broadcast
            }
        );

        eventParser=new EventParser(this.config);

        this.on(
            'close',
            serverClosed.bind(this)
        );
    }

    onStart(socket){
        this.trigger(
            'start',
            socket
        );
    }

    stop(){
        this.server.close();
    }

    start(){
        if(!this.path){
            this.log('Socket Server Path not specified, refusing to start');
            return;
        }

        if(this.config.unlink){
            fs.unlink(
                this.path,
                startServer.bind(this)
            );
        }else{
            startServer.bind(this)();
        }
    }
}

function emit(socket, type, data){
    this.log('dispatching event to socket', ' : ', type, data);

    let message=new Message;
    message.type=type;
    message.data=data;

    if(this.config.rawBuffer){
        this.log(this.config.encoding)
        message=new Buffer(type,this.config.encoding);
    }else{
        message=eventParser.format(message);
    }

    if(this.udp4 || this.udp6){

        if(!socket.address || !socket.port){
            this.log('Attempting to emit to a single UDP socket without supplying socket address or port. Redispatching event as broadcast to all connected sockets');
            this.broadcast(type,data);
            return;
        }

        this.server.write(
            message,
            socket
        );
        return;
    }

    socket.write(message);
}

function broadcast(type,data){
    this.log('broadcasting event to all known sockets listening to ', this.path,' : ', ((this.port)?this.port:''), type, data);
    let message=new Message;
    message.type=type;
    message.data=data;

    if(this.config.rawBuffer){
        message=new Buffer(type,this.config.encoding);
    }else{
        message=eventParser.format(message);
    }

    if(this.udp4 || this.udp6){
        for(let i=1, count=this.sockets.length; i<count; i++){
            this.server.write(message,this.sockets[i]);
        }
    }else{
        for(let i=0, count=this.sockets.length; i<count; i++){
            this.sockets[i].write(message);
        }
    }
}

function serverClosed(){
    for(let i=0, count=this.sockets.length; i<count; i++){
        let socket=this.sockets[i];
        let destroyedSocketId=false;

        if(socket){
            if(socket.readable){
                continue;
            }
        }

        if(socket.id){
            destroyedSocketId=socket.id;
        }

        this.log('socket disconnected',destroyedSocketId.toString());

        if(socket && socket.destroy){
            socket.destroy();
        }

        this.sockets.splice(i,1);

        this.publish('socket.disconnected', socket, destroyedSocketId);

        return;
    }
}

function gotData(socket,data,UDPSocket){
    let sock=((this.udp4 || this.udp6)? UDPSocket : socket);
    if(this.config.rawBuffer){
        data=new Buffer(data,this.config.encoding);
        this.publish(
            'data',
            data,
            sock
        );
        return;
    }

    if(!this.ipcBuffer){
        this.ipcBuffer='';
    }

    data=(this.ipcBuffer+=data);

    if(data.slice(-1)!=eventParser.delimiter || data.indexOf(eventParser.delimiter) == -1){
        this.log('Messages are large, You may want to consider smaller messages.');
        return;
    }

    this.ipcBuffer='';

    data=eventParser.parse(data);

    while(data.length>0){
        let message=new Message;
        message.load(data.shift());

        // Only set the sock id if it is specified.
        if (message.data && message.data.id){
            sock.id=message.data.id;
        }

        this.log('received event of : ',message.type,message.data);

        this.publish(
            message.type,
            message.data,
            sock
        );
    }
}

function socketClosed(socket){
    this.publish(
        'close',
        socket
    );
}

function serverCreated(socket) {
    this.sockets.push(socket);

    if(socket.setEncoding){
        socket.setEncoding(this.config.encoding);
    }

    this.log('## socket connection to server detected ##');
    socket.on(
        'close',
        socketClosed.bind(this)
    );

    socket.on(
        'error',
        function(err){
            this.log('server socket error',err);

            this.publish('error',err);
        }.bind(this)
    );

    socket.on(
        'data',
        gotData.bind(this,socket)
    );

    socket.on(
        'message',
        function(msg,rinfo) {
            if (!rinfo){
                return;
            }

            this.log('Received UDP message from ', rinfo.address, rinfo.port);
            let data;

            if(this.config.rawSocket){
                data=new Buffer(msg,this.config.encoding);
            }else{
                data=msg.toString();
            }
            socket.emit('data',data,rinfo);
        }.bind(this)
    );

    this.publish(
        'connect',
        socket
    );

    if(this.config.rawBuffer){
        return;
    }
}

function startServer() {
    this.log(
        'starting server on ',this.path,
        ((this.port)?`:${this.port}`:'')
    );

    if(!this.udp4 && !this.udp6){
        this.log('starting TLS server',this.config.tls);
        if(!this.config.tls){
            this.server=net.createServer(
                serverCreated.bind(this)
            );
        }else{
            startTLSServer.bind(this)();
        }
    }else{
        this.server=dgram.createSocket(
            ((this.udp4)? 'udp4':'udp6')
        );
        this.server.write=UDPWrite.bind(this);
        this.server.on(
            'listening',
            function UDPServerStarted() {
                serverCreated.bind(this)(this.server);
            }.bind(this)
        );
    }

    this.server.on(
        'error',
        function(err){
            this.log('server error',err);

            this.publish(
                'error',
                err
            );
        }.bind(this)
    );

    this.server.maxConnections=this.config.maxConnections;

    if(!this.port){
        this.log('starting server as', 'Unix || Windows Socket');
        if (process.platform ==='win32'){
            this.path = this.path.replace(/^\//, '');
            this.path = this.path.replace(/\//g, '-');
            this.path= `\\\\.\\pipe\\${this.path}`;
        }

        this.server.listen(
            this.path,
            this.onStart.bind(this)
        );

        return;
    }

    if(!this.udp4 && !this.udp6){
        this.log('starting server as', (this.config.tls?'TLS':'TCP'));
        this.server.listen(
            this.port,
            this.path,
            this.onStart.bind(this)
        );
        return;
    }

    this.log('starting server as',((this.udp4)? 'udp4':'udp6'));

    this.server.bind(
        this.port,
        this.path
    );

    this.onStart(
        {
            address : this.path,
            port    : this.port
        }
    );
}

function startTLSServer(){
    this.log('starting TLS server',this.config.tls);
    if(this.config.tls.private){
        this.config.tls.key=fs.readFileSync(this.config.tls.private);
    }else{
        this.config.tls.key=fs.readFileSync(`${__dirname}/../local-node-ipc-certs/private/server.key`);
    }
    if(this.config.tls.public){
        this.config.tls.cert=fs.readFileSync(this.config.tls.public);
    }else{
        this.config.tls.cert=fs.readFileSync(`${__dirname}/../local-node-ipc-certs/server.pub`);
    }
    if(this.config.tls.dhparam){
        this.config.tls.dhparam=fs.readFileSync(this.config.tls.dhparam);
    }
    if(this.config.tls.trustedConnections){
        if(typeof this.config.tls.trustedConnections === 'string'){
            this.config.tls.trustedConnections=[this.config.tls.trustedConnections];
        }
        this.config.tls.ca=[];
        for(let i=0; i<this.config.tls.trustedConnections.length; i++){
            this.config.tls.ca.push(
                fs.readFileSync(this.config.tls.trustedConnections[i])
            );
        }
    }
    this.server=tls.createServer(
        this.config.tls,
        serverCreated.bind(this)
    );
}

function UDPWrite(message,socket){
    let data=new Buffer(message, this.config.encoding);
    this.server.send(
        data,
        0,
        data.length,
        socket.port,
        socket.address,
        function(err, bytes) {
            if(err){
                this.log('error writing data to socket',err);
                this.publish(
                    'error',
                    function(err){
                        this.publish('error',err);
                    }
                );
            }
        }
    );
}

module.exports=Server;


/***/ }),
/* 232 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const Defaults = __webpack_require__(127),
    Client = __webpack_require__(230),
    Server = __webpack_require__(231),
    util = __webpack_require__(2);

class IPC{
    constructor(){
        Object.defineProperties(
            this,
            {
                config      : {
                    enumerable:true,
                    writable:true,
                    value:new Defaults
                },
                connectTo   : {
                    enumerable:true,
                    writable:false,
                    value:connect
                },
                connectToNet: {
                    enumerable:true,
                    writable:false,
                    value:connectNet
                },
                disconnect  : {
                    enumerable:true,
                    writable:false,
                    value:disconnect
                },
                serve       : {
                    enumerable:true,
                    writable:false,
                    value:serve
                },
                serveNet    : {
                    enumerable:true,
                    writable:false,
                    value:serveNet
                },
                of          : {
                    enumerable:true,
                    writable:true,
                    value:{}
                },
                server      : {
                    enumerable:true,
                    writable:true,
                    configurable:true,
                    value:false
                },
                log         : {
                    enumerable:true,
                    writable:false,
                    value:log
                }
            }
        );
    }
}

function log(...args){
    if(this.config.silent){
        return;
    }

    for(let i=0, count=args.length; i<count; i++){
        if(typeof args[i] != 'object'){
            continue;
        }

        args[i]=util.inspect(
            args[i],
            {
                depth:this.config.logDepth,
                colors:this.config.logInColor
            }
        );
    }

    this.config.logger(
        args.join(' ')
    );
}

function disconnect(id){
    if(!this.of[id]){
        return;
    }

    this.of[id].explicitlyDisconnected=true;

    this.of[id].off('*','*');
    if(this.of[id].socket){
        if(this.of[id].socket.destroy){
            this.of[id].socket.destroy();
        }
    }

    delete this.of[id];
}

function serve(path,callback){
    if(typeof path=='function'){
        callback=path;
        path=false;
    }
    if(!path){
        this.log(
            'Server path not specified, so defaulting to',
            'ipc.config.socketRoot + ipc.config.appspace + ipc.config.id',
            this.config.socketRoot+this.config.appspace+this.config.id
        );
        path=this.config.socketRoot+this.config.appspace+this.config.id;
    }

    if(!callback){
        callback=emptyCallback;
    }

    this.server=new Server(
        path,
        this.config,
        log
    );

    this.server.on(
        'start',
        callback
    );
}

function emptyCallback(){
    //Do Nothing
}

function serveNet(host,port,UDPType,callback){
    if(typeof host=='number'){
        callback=UDPType;
        UDPType=port;
        port=host;
        host=false;
    }
    if(typeof host=='function'){
        callback=host;
        UDPType=false;
        host=false;
        port=false;
    }
    if(!host){
        this.log(
            'Server host not specified, so defaulting to',
            'ipc.config.networkHost',
            this.config.networkHost
        );
        host=this.config.networkHost;
    }
    if(host.toLowerCase()=='udp4' || host.toLowerCase()=='udp6'){
        callback=port;
        UDPType=host.toLowerCase();
        port=false;
        host=this.config.networkHost;
    }

    if(typeof port=='string'){
        callback=UDPType;
        UDPType=port;
        port=false;
    }
    if(typeof port=='function'){
        callback=port;
        UDPType=false;
        port=false;
    }
    if(!port){
        this.log(
            'Server port not specified, so defaulting to',
            'ipc.config.networkPort',
            this.config.networkPort
        );
        port=this.config.networkPort;
    }

    if(typeof UDPType=='function'){
        callback=UDPType;
        UDPType=false;
    }

    if(!callback){
        callback=emptyCallback;
    }

    this.server=new Server(
        host,
        this.config,
        log,
        port
    );

    if(UDPType){
        this.server[UDPType]=true;
        if(UDPType === "udp4" && host === "::1") {
            // bind udp4 socket to an ipv4 address
            this.server.path = "127.0.0.1";
        }
    }

    this.server.on(
        'start',
        callback
    );
}

function connect(id,path,callback){
    if(typeof path == 'function'){
        callback=path;
        path=false;
    }

    if(!callback){
        callback=emptyCallback;
    }

    if(!id){
        this.log(
            'Service id required',
            'Requested service connection without specifying service id. Aborting connection attempt'
        );
        return;
    }

    if(!path){
        this.log(
            'Service path not specified, so defaulting to',
            'ipc.config.socketRoot + ipc.config.appspace + id',
            (this.config.socketRoot+this.config.appspace+id).data
        );
        path=this.config.socketRoot+this.config.appspace+id;
    }

    if(this.of[id]){
        if(!this.of[id].socket.destroyed){
            this.log(
                'Already Connected to',
                id,
                '- So executing success without connection'
            );
            callback();
            return;
        }
        this.of[id].socket.destroy();
    }

    this.of[id] = new Client(this.config,this.log);
    this.of[id].id = id;
    this.of[id].path = path;

    this.of[id].connect();

    callback(this);
}

function connectNet(id,host,port,callback){
    if(!id){
        this.log(
            'Service id required',
            'Requested service connection without specifying service id. Aborting connection attempt'
        );
        return;
    }
    if(typeof host=='number'){
        callback=port;
        port=host;
        host=false;
    }
    if(typeof host=='function'){
        callback=host;
        host=false;
        port=false;
    }
    if(!host){
        this.log(
            'Server host not specified, so defaulting to',
            'ipc.config.networkHost',
            this.config.networkHost
        );
        host=this.config.networkHost;
    }

    if(typeof port=='function'){
        callback=port;
        port=false;
    }
    if(!port){
        this.log(
            'Server port not specified, so defaulting to',
            'ipc.config.networkPort',
            this.config.networkPort
        );
        port=this.config.networkPort;
    }

    if(typeof callback == 'string'){
        UDPType=callback;
        callback=false;
    }
    if(!callback){
        callback=emptyCallback;
    }

    if(this.of[id]){
        if(!this.of[id].socket.destroyed){

            this.log(
                'Already Connected to',
                id,
                '- So executing success without connection'
            );
            callback();
            return;
        }
        this.of[id].socket.destroy();
    }

    this.of[id] = new Client(this.config,this.log);
    this.of[id].id = id;
    this.of[id].path = host;
    this.of[id].port = port;

    this.of[id].connect();

    callback(this);
}

module.exports=IPC;


/***/ }),
/* 233 */
/***/ (function(module, exports, __webpack_require__) {

var wrappy = __webpack_require__(437)
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)

once.proto = once(function () {
  Object.defineProperty(Function.prototype, 'once', {
    value: function () {
      return once(this)
    },
    configurable: true
  })

  Object.defineProperty(Function.prototype, 'onceStrict', {
    value: function () {
      return onceStrict(this)
    },
    configurable: true
  })
})

function once (fn) {
  var f = function () {
    if (f.called) return f.value
    f.called = true
    return f.value = fn.apply(this, arguments)
  }
  f.called = false
  return f
}

function onceStrict (fn) {
  var f = function () {
    if (f.called)
      throw new Error(f.onceError)
    f.called = true
    return f.value = fn.apply(this, arguments)
  }
  var name = fn.name || 'Function wrapped with `once`'
  f.onceError = name + " shouldn't be called more than once"
  f.called = false
  return f
}


/***/ }),
/* 234 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return qEnd; });
/* harmony export (immutable) */ __webpack_exports__["c"] = safeName;
/* harmony export (immutable) */ __webpack_exports__["a"] = fsmIterator;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);


var done = { done: true, value: undefined };
var qEnd = {};

function safeName(patternOrChannel) {
  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].channel(patternOrChannel)) {
    return 'channel';
  } else if (Array.isArray(patternOrChannel)) {
    return String(patternOrChannel.map(function (entry) {
      return String(entry);
    }));
  } else {
    return String(patternOrChannel);
  }
}

function fsmIterator(fsm, q0) {
  var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'iterator';

  var updateState = void 0,
      qNext = q0;

  function next(arg, error) {
    if (qNext === qEnd) {
      return done;
    }

    if (error) {
      qNext = qEnd;
      throw error;
    } else {
      updateState && updateState(arg);

      var _fsm$qNext = fsm[qNext](),
          q = _fsm$qNext[0],
          output = _fsm$qNext[1],
          _updateState = _fsm$qNext[2];

      qNext = q;
      updateState = _updateState;
      return qNext === qEnd ? done : output;
    }
  }

  return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["m" /* makeIterator */])(next, function (error) {
    return next(null, error);
  }, name, true);
}

/***/ }),
/* 235 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var jsonSafeStringify = __webpack_require__(912)
var crypto = __webpack_require__(7)
var Buffer = __webpack_require__(55).Buffer

var defer = typeof setImmediate === 'undefined'
  ? process.nextTick
  : setImmediate

function paramsHaveRequestBody (params) {
  return (
    params.body ||
    params.requestBodyStream ||
    (params.json && typeof params.json !== 'boolean') ||
    params.multipart
  )
}

function safeStringify (obj, replacer) {
  var ret
  try {
    ret = JSON.stringify(obj, replacer)
  } catch (e) {
    ret = jsonSafeStringify(obj, replacer)
  }
  return ret
}

function md5 (str) {
  return crypto.createHash('md5').update(str).digest('hex')
}

function isReadStream (rs) {
  return rs.readable && rs.path && rs.mode
}

function toBase64 (str) {
  return Buffer.from(str || '', 'utf8').toString('base64')
}

function copy (obj) {
  var o = {}
  Object.keys(obj).forEach(function (i) {
    o[i] = obj[i]
  })
  return o
}

function version () {
  var numbers = process.version.replace('v', '').split('.')
  return {
    major: parseInt(numbers[0], 10),
    minor: parseInt(numbers[1], 10),
    patch: parseInt(numbers[2], 10)
  }
}

exports.paramsHaveRequestBody = paramsHaveRequestBody
exports.safeStringify = safeStringify
exports.md5 = md5
exports.isReadStream = isReadStream
exports.toBase64 = toBase64
exports.copy = copy
exports.version = version
exports.defer = defer


/***/ }),
/* 236 */
/***/ (function(module, exports, __webpack_require__) {

var v1 = __webpack_require__(1040);
var v4 = __webpack_require__(1041);

var uuid = v4;
uuid.v1 = v1;
uuid.v4 = v4;

module.exports = uuid;


/***/ }),
/* 237 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = rimraf
rimraf.sync = rimrafSync

var assert = __webpack_require__(11)
var path = __webpack_require__(0)
var fs = __webpack_require__(1)
var glob = __webpack_require__(124)
var _0666 = parseInt('666', 8)

var defaultGlobOpts = {
  nosort: true,
  silent: true
}

// for EMFILE handling
var timeout = 0

var isWindows = (process.platform === "win32")

function defaults (options) {
  var methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(function(m) {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
  options.emfileWait = options.emfileWait || 1000
  if (options.glob === false) {
    options.disableGlob = true
  }
  options.disableGlob = options.disableGlob || false
  options.glob = options.glob || defaultGlobOpts
}

function rimraf (p, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert.equal(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  var busyTries = 0
  var errState = null
  var n = 0

  if (options.disableGlob || !glob.hasMagic(p))
    return afterGlob(null, [p])

  options.lstat(p, function (er, stat) {
    if (!er)
      return afterGlob(null, [p])

    glob(p, options.glob, afterGlob)
  })

  function next (er) {
    errState = errState || er
    if (--n === 0)
      cb(errState)
  }

  function afterGlob (er, results) {
    if (er)
      return cb(er)

    n = results.length
    if (n === 0)
      return cb()

    results.forEach(function (p) {
      rimraf_(p, options, function CB (er) {
        if (er) {
          if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
              busyTries < options.maxBusyTries) {
            busyTries ++
            var time = busyTries * 100
            // try again, with the same exact callback as this one.
            return setTimeout(function () {
              rimraf_(p, options, CB)
            }, time)
          }

          // this one won't happen if graceful-fs is used.
          if (er.code === "EMFILE" && timeout < options.emfileWait) {
            return setTimeout(function () {
              rimraf_(p, options, CB)
            }, timeout ++)
          }

          // already gone
          if (er.code === "ENOENT") er = null
        }

        timeout = 0
        next(er)
      })
    })
  }
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, function (er, st) {
    if (er && er.code === "ENOENT")
      return cb(null)

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === "EPERM" && isWindows)
      fixWinEPERM(p, options, er, cb)

    if (st && st.isDirectory())
      return rmdir(p, options, er, cb)

    options.unlink(p, function (er) {
      if (er) {
        if (er.code === "ENOENT")
          return cb(null)
        if (er.code === "EPERM")
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        if (er.code === "EISDIR")
          return rmdir(p, options, er, cb)
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er)
    assert(er instanceof Error)

  options.chmod(p, _0666, function (er2) {
    if (er2)
      cb(er2.code === "ENOENT" ? null : er)
    else
      options.stat(p, function(er3, stats) {
        if (er3)
          cb(er3.code === "ENOENT" ? null : er)
        else if (stats.isDirectory())
          rmdir(p, options, er, cb)
        else
          options.unlink(p, cb)
      })
  })
}

function fixWinEPERMSync (p, options, er) {
  assert(p)
  assert(options)
  if (er)
    assert(er instanceof Error)

  try {
    options.chmodSync(p, _0666)
  } catch (er2) {
    if (er2.code === "ENOENT")
      return
    else
      throw er
  }

  try {
    var stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === "ENOENT")
      return
    else
      throw er
  }

  if (stats.isDirectory())
    rmdirSync(p, options, er)
  else
    options.unlinkSync(p)
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, function (er) {
    if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
      rmkids(p, options, cb)
    else if (er && er.code === "ENOTDIR")
      cb(originalEr)
    else
      cb(er)
  })
}

function rmkids(p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, function (er, files) {
    if (er)
      return cb(er)
    var n = files.length
    if (n === 0)
      return options.rmdir(p, cb)
    var errState
    files.forEach(function (f) {
      rimraf(path.join(p, f), options, function (er) {
        if (errState)
          return
        if (er)
          return cb(errState = er)
        if (--n === 0)
          options.rmdir(p, cb)
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  var results

  if (options.disableGlob || !glob.hasMagic(p)) {
    results = [p]
  } else {
    try {
      options.lstatSync(p)
      results = [p]
    } catch (er) {
      results = glob.sync(p, options.glob)
    }
  }

  if (!results.length)
    return

  for (var i = 0; i < results.length; i++) {
    var p = results[i]

    try {
      var st = options.lstatSync(p)
    } catch (er) {
      if (er.code === "ENOENT")
        return

      // Windows can EPERM on stat.  Life is suffering.
      if (er.code === "EPERM" && isWindows)
        fixWinEPERMSync(p, options, er)
    }

    try {
      // sunos lets the root user unlink directories, which is... weird.
      if (st && st.isDirectory())
        rmdirSync(p, options, null)
      else
        options.unlinkSync(p)
    } catch (er) {
      if (er.code === "ENOENT")
        return
      if (er.code === "EPERM")
        return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
      if (er.code !== "EISDIR")
        throw er

      rmdirSync(p, options, er)
    }
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === "ENOENT")
      return
    if (er.code === "ENOTDIR")
      throw originalEr
    if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
      rmkidsSync(p, options)
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(function (f) {
    rimrafSync(path.join(p, f), options)
  })

  // We only end up here once we got ENOTEMPTY at least once, and
  // at this point, we are guaranteed to have removed all the kids.
  // So, we know that it won't be ENOENT or ENOTDIR or anything else.
  // try really hard to delete stuff on windows, because it has a
  // PROFOUNDLY annoying habit of not closing handles promptly when
  // files are deleted, resulting in spurious ENOTEMPTY errors.
  var retries = isWindows ? 100 : 1
  var i = 0
  do {
    var threw = true
    try {
      var ret = options.rmdirSync(p, options)
      threw = false
      return ret
    } finally {
      if (++i < retries && threw)
        continue
    }
  } while (true)
}


/***/ }),
/* 238 */
/***/ (function(module, exports) {

exports = module.exports = SemVer;

// The debug function is excluded entirely from the minified version.
/* nomin */ var debug;
/* nomin */ if (typeof process === 'object' &&
    /* nomin */ process.env &&
    /* nomin */ process.env.NODE_DEBUG &&
    /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
  /* nomin */ debug = function() {
    /* nomin */ var args = Array.prototype.slice.call(arguments, 0);
    /* nomin */ args.unshift('SEMVER');
    /* nomin */ console.log.apply(console, args);
    /* nomin */ };
/* nomin */ else
  /* nomin */ debug = function() {};

// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports.SEMVER_SPEC_VERSION = '2.0.0';

var MAX_LENGTH = 256;
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;

// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16;

// The actual regexps go on exports.re
var re = exports.re = [];
var src = exports.src = [];
var R = 0;

// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.

// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.

var NUMERICIDENTIFIER = R++;
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
var NUMERICIDENTIFIERLOOSE = R++;
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';


// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.

var NONNUMERICIDENTIFIER = R++;
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';


// ## Main Version
// Three dot-separated numeric identifiers.

var MAINVERSION = R++;
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
                   '(' + src[NUMERICIDENTIFIER] + ')\\.' +
                   '(' + src[NUMERICIDENTIFIER] + ')';

var MAINVERSIONLOOSE = R++;
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')';

// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.

var PRERELEASEIDENTIFIER = R++;
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
                            '|' + src[NONNUMERICIDENTIFIER] + ')';

var PRERELEASEIDENTIFIERLOOSE = R++;
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
                                 '|' + src[NONNUMERICIDENTIFIER] + ')';


// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.

var PRERELEASE = R++;
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
                  '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';

var PRERELEASELOOSE = R++;
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
                       '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';

// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.

var BUILDIDENTIFIER = R++;
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';

// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.

var BUILD = R++;
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
             '(?:\\.' + src[BUILDIDENTIFIER] + ')*))';


// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.

// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups.  The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.

var FULL = R++;
var FULLPLAIN = 'v?' + src[MAINVERSION] +
                src[PRERELEASE] + '?' +
                src[BUILD] + '?';

src[FULL] = '^' + FULLPLAIN + '$';

// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
                 src[PRERELEASELOOSE] + '?' +
                 src[BUILD] + '?';

var LOOSE = R++;
src[LOOSE] = '^' + LOOSEPLAIN + '$';

var GTLT = R++;
src[GTLT] = '((?:<|>)?=?)';

// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R++;
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
var XRANGEIDENTIFIER = R++;
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';

var XRANGEPLAIN = R++;
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:' + src[PRERELEASE] + ')?' +
                   src[BUILD] + '?' +
                   ')?)?';

var XRANGEPLAINLOOSE = R++;
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:' + src[PRERELEASELOOSE] + ')?' +
                        src[BUILD] + '?' +
                        ')?)?';

var XRANGE = R++;
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
var XRANGELOOSE = R++;
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';

// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R++;
src[COERCE] = '(?:^|[^\\d])' +
              '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
              '(?:$|[^\\d])';

// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R++;
src[LONETILDE] = '(?:~>?)';

var TILDETRIM = R++;
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
var tildeTrimReplace = '$1~';

var TILDE = R++;
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
var TILDELOOSE = R++;
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';

// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R++;
src[LONECARET] = '(?:\\^)';

var CARETTRIM = R++;
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
var caretTrimReplace = '$1^';

var CARET = R++;
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
var CARETLOOSE = R++;
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';

// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++;
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
var COMPARATOR = R++;
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';


// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R++;
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
                      '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';

// this one has to use the /g flag
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
var comparatorTrimReplace = '$1$2$3';


// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R++;
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
                   '\\s+-\\s+' +
                   '(' + src[XRANGEPLAIN] + ')' +
                   '\\s*$';

var HYPHENRANGELOOSE = R++;
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
                        '\\s+-\\s+' +
                        '(' + src[XRANGEPLAINLOOSE] + ')' +
                        '\\s*$';

// Star ranges basically just allow anything at all.
var STAR = R++;
src[STAR] = '(<|>)?=?\\s*\\*';

// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for (var i = 0; i < R; i++) {
  debug(i, src[i]);
  if (!re[i])
    re[i] = new RegExp(src[i]);
}

exports.parse = parse;
function parse(version, loose) {
  if (version instanceof SemVer)
    return version;

  if (typeof version !== 'string')
    return null;

  if (version.length > MAX_LENGTH)
    return null;

  var r = loose ? re[LOOSE] : re[FULL];
  if (!r.test(version))
    return null;

  try {
    return new SemVer(version, loose);
  } catch (er) {
    return null;
  }
}

exports.valid = valid;
function valid(version, loose) {
  var v = parse(version, loose);
  return v ? v.version : null;
}


exports.clean = clean;
function clean(version, loose) {
  var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
  return s ? s.version : null;
}

exports.SemVer = SemVer;

function SemVer(version, loose) {
  if (version instanceof SemVer) {
    if (version.loose === loose)
      return version;
    else
      version = version.version;
  } else if (typeof version !== 'string') {
    throw new TypeError('Invalid Version: ' + version);
  }

  if (version.length > MAX_LENGTH)
    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')

  if (!(this instanceof SemVer))
    return new SemVer(version, loose);

  debug('SemVer', version, loose);
  this.loose = loose;
  var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);

  if (!m)
    throw new TypeError('Invalid Version: ' + version);

  this.raw = version;

  // these are actually numbers
  this.major = +m[1];
  this.minor = +m[2];
  this.patch = +m[3];

  if (this.major > MAX_SAFE_INTEGER || this.major < 0)
    throw new TypeError('Invalid major version')

  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
    throw new TypeError('Invalid minor version')

  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
    throw new TypeError('Invalid patch version')

  // numberify any prerelease numeric ids
  if (!m[4])
    this.prerelease = [];
  else
    this.prerelease = m[4].split('.').map(function(id) {
      if (/^[0-9]+$/.test(id)) {
        var num = +id;
        if (num >= 0 && num < MAX_SAFE_INTEGER)
          return num;
      }
      return id;
    });

  this.build = m[5] ? m[5].split('.') : [];
  this.format();
}

SemVer.prototype.format = function() {
  this.version = this.major + '.' + this.minor + '.' + this.patch;
  if (this.prerelease.length)
    this.version += '-' + this.prerelease.join('.');
  return this.version;
};

SemVer.prototype.toString = function() {
  return this.version;
};

SemVer.prototype.compare = function(other) {
  debug('SemVer.compare', this.version, this.loose, other);
  if (!(other instanceof SemVer))
    other = new SemVer(other, this.loose);

  return this.compareMain(other) || this.comparePre(other);
};

SemVer.prototype.compareMain = function(other) {
  if (!(other instanceof SemVer))
    other = new SemVer(other, this.loose);

  return compareIdentifiers(this.major, other.major) ||
         compareIdentifiers(this.minor, other.minor) ||
         compareIdentifiers(this.patch, other.patch);
};

SemVer.prototype.comparePre = function(other) {
  if (!(other instanceof SemVer))
    other = new SemVer(other, this.loose);

  // NOT having a prerelease is > having one
  if (this.prerelease.length && !other.prerelease.length)
    return -1;
  else if (!this.prerelease.length && other.prerelease.length)
    return 1;
  else if (!this.prerelease.length && !other.prerelease.length)
    return 0;

  var i = 0;
  do {
    var a = this.prerelease[i];
    var b = other.prerelease[i];
    debug('prerelease compare', i, a, b);
    if (a === undefined && b === undefined)
      return 0;
    else if (b === undefined)
      return 1;
    else if (a === undefined)
      return -1;
    else if (a === b)
      continue;
    else
      return compareIdentifiers(a, b);
  } while (++i);
};

// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function(release, identifier) {
  switch (release) {
    case 'premajor':
      this.prerelease.length = 0;
      this.patch = 0;
      this.minor = 0;
      this.major++;
      this.inc('pre', identifier);
      break;
    case 'preminor':
      this.prerelease.length = 0;
      this.patch = 0;
      this.minor++;
      this.inc('pre', identifier);
      break;
    case 'prepatch':
      // If this is already a prerelease, it will bump to the next version
      // drop any prereleases that might already exist, since they are not
      // relevant at this point.
      this.prerelease.length = 0;
      this.inc('patch', identifier);
      this.inc('pre', identifier);
      break;
    // If the input is a non-prerelease version, this acts the same as
    // prepatch.
    case 'prerelease':
      if (this.prerelease.length === 0)
        this.inc('patch', identifier);
      this.inc('pre', identifier);
      break;

    case 'major':
      // If this is a pre-major version, bump up to the same major version.
      // Otherwise increment major.
      // 1.0.0-5 bumps to 1.0.0
      // 1.1.0 bumps to 2.0.0
      if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
        this.major++;
      this.minor = 0;
      this.patch = 0;
      this.prerelease = [];
      break;
    case 'minor':
      // If this is a pre-minor version, bump up to the same minor version.
      // Otherwise increment minor.
      // 1.2.0-5 bumps to 1.2.0
      // 1.2.1 bumps to 1.3.0
      if (this.patch !== 0 || this.prerelease.length === 0)
        this.minor++;
      this.patch = 0;
      this.prerelease = [];
      break;
    case 'patch':
      // If this is not a pre-release version, it will increment the patch.
      // If it is a pre-release it will bump up to the same patch version.
      // 1.2.0-5 patches to 1.2.0
      // 1.2.0 patches to 1.2.1
      if (this.prerelease.length === 0)
        this.patch++;
      this.prerelease = [];
      break;
    // This probably shouldn't be used publicly.
    // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
    case 'pre':
      if (this.prerelease.length === 0)
        this.prerelease = [0];
      else {
        var i = this.prerelease.length;
        while (--i >= 0) {
          if (typeof this.prerelease[i] === 'number') {
            this.prerelease[i]++;
            i = -2;
          }
        }
        if (i === -1) // didn't increment anything
          this.prerelease.push(0);
      }
      if (identifier) {
        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
        if (this.prerelease[0] === identifier) {
          if (isNaN(this.prerelease[1]))
            this.prerelease = [identifier, 0];
        } else
          this.prerelease = [identifier, 0];
      }
      break;

    default:
      throw new Error('invalid increment argument: ' + release);
  }
  this.format();
  this.raw = this.version;
  return this;
};

exports.inc = inc;
function inc(version, release, loose, identifier) {
  if (typeof(loose) === 'string') {
    identifier = loose;
    loose = undefined;
  }

  try {
    return new SemVer(version, loose).inc(release, identifier).version;
  } catch (er) {
    return null;
  }
}

exports.diff = diff;
function diff(version1, version2) {
  if (eq(version1, version2)) {
    return null;
  } else {
    var v1 = parse(version1);
    var v2 = parse(version2);
    if (v1.prerelease.length || v2.prerelease.length) {
      for (var key in v1) {
        if (key === 'major' || key === 'minor' || key === 'patch') {
          if (v1[key] !== v2[key]) {
            return 'pre'+key;
          }
        }
      }
      return 'prerelease';
    }
    for (var key in v1) {
      if (key === 'major' || key === 'minor' || key === 'patch') {
        if (v1[key] !== v2[key]) {
          return key;
        }
      }
    }
  }
}

exports.compareIdentifiers = compareIdentifiers;

var numeric = /^[0-9]+$/;
function compareIdentifiers(a, b) {
  var anum = numeric.test(a);
  var bnum = numeric.test(b);

  if (anum && bnum) {
    a = +a;
    b = +b;
  }

  return (anum && !bnum) ? -1 :
         (bnum && !anum) ? 1 :
         a < b ? -1 :
         a > b ? 1 :
         0;
}

exports.rcompareIdentifiers = rcompareIdentifiers;
function rcompareIdentifiers(a, b) {
  return compareIdentifiers(b, a);
}

exports.major = major;
function major(a, loose) {
  return new SemVer(a, loose).major;
}

exports.minor = minor;
function minor(a, loose) {
  return new SemVer(a, loose).minor;
}

exports.patch = patch;
function patch(a, loose) {
  return new SemVer(a, loose).patch;
}

exports.compare = compare;
function compare(a, b, loose) {
  return new SemVer(a, loose).compare(new SemVer(b, loose));
}

exports.compareLoose = compareLoose;
function compareLoose(a, b) {
  return compare(a, b, true);
}

exports.rcompare = rcompare;
function rcompare(a, b, loose) {
  return compare(b, a, loose);
}

exports.sort = sort;
function sort(list, loose) {
  return list.sort(function(a, b) {
    return exports.compare(a, b, loose);
  });
}

exports.rsort = rsort;
function rsort(list, loose) {
  return list.sort(function(a, b) {
    return exports.rcompare(a, b, loose);
  });
}

exports.gt = gt;
function gt(a, b, loose) {
  return compare(a, b, loose) > 0;
}

exports.lt = lt;
function lt(a, b, loose) {
  return compare(a, b, loose) < 0;
}

exports.eq = eq;
function eq(a, b, loose) {
  return compare(a, b, loose) === 0;
}

exports.neq = neq;
function neq(a, b, loose) {
  return compare(a, b, loose) !== 0;
}

exports.gte = gte;
function gte(a, b, loose) {
  return compare(a, b, loose) >= 0;
}

exports.lte = lte;
function lte(a, b, loose) {
  return compare(a, b, loose) <= 0;
}

exports.cmp = cmp;
function cmp(a, op, b, loose) {
  var ret;
  switch (op) {
    case '===':
      if (typeof a === 'object') a = a.version;
      if (typeof b === 'object') b = b.version;
      ret = a === b;
      break;
    case '!==':
      if (typeof a === 'object') a = a.version;
      if (typeof b === 'object') b = b.version;
      ret = a !== b;
      break;
    case '': case '=': case '==': ret = eq(a, b, loose); break;
    case '!=': ret = neq(a, b, loose); break;
    case '>': ret = gt(a, b, loose); break;
    case '>=': ret = gte(a, b, loose); break;
    case '<': ret = lt(a, b, loose); break;
    case '<=': ret = lte(a, b, loose); break;
    default: throw new TypeError('Invalid operator: ' + op);
  }
  return ret;
}

exports.Comparator = Comparator;
function Comparator(comp, loose) {
  if (comp instanceof Comparator) {
    if (comp.loose === loose)
      return comp;
    else
      comp = comp.value;
  }

  if (!(this instanceof Comparator))
    return new Comparator(comp, loose);

  debug('comparator', comp, loose);
  this.loose = loose;
  this.parse(comp);

  if (this.semver === ANY)
    this.value = '';
  else
    this.value = this.operator + this.semver.version;

  debug('comp', this);
}

var ANY = {};
Comparator.prototype.parse = function(comp) {
  var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
  var m = comp.match(r);

  if (!m)
    throw new TypeError('Invalid comparator: ' + comp);

  this.operator = m[1];
  if (this.operator === '=')
    this.operator = '';

  // if it literally is just '>' or '' then allow anything.
  if (!m[2])
    this.semver = ANY;
  else
    this.semver = new SemVer(m[2], this.loose);
};

Comparator.prototype.toString = function() {
  return this.value;
};

Comparator.prototype.test = function(version) {
  debug('Comparator.test', version, this.loose);

  if (this.semver === ANY)
    return true;

  if (typeof version === 'string')
    version = new SemVer(version, this.loose);

  return cmp(version, this.operator, this.semver, this.loose);
};

Comparator.prototype.intersects = function(comp, loose) {
  if (!(comp instanceof Comparator)) {
    throw new TypeError('a Comparator is required');
  }

  var rangeTmp;

  if (this.operator === '') {
    rangeTmp = new Range(comp.value, loose);
    return satisfies(this.value, rangeTmp, loose);
  } else if (comp.operator === '') {
    rangeTmp = new Range(this.value, loose);
    return satisfies(comp.semver, rangeTmp, loose);
  }

  var sameDirectionIncreasing =
    (this.operator === '>=' || this.operator === '>') &&
    (comp.operator === '>=' || comp.operator === '>');
  var sameDirectionDecreasing =
    (this.operator === '<=' || this.operator === '<') &&
    (comp.operator === '<=' || comp.operator === '<');
  var sameSemVer = this.semver.version === comp.semver.version;
  var differentDirectionsInclusive =
    (this.operator === '>=' || this.operator === '<=') &&
    (comp.operator === '>=' || comp.operator === '<=');
  var oppositeDirectionsLessThan =
    cmp(this.semver, '<', comp.semver, loose) &&
    ((this.operator === '>=' || this.operator === '>') &&
    (comp.operator === '<=' || comp.operator === '<'));
  var oppositeDirectionsGreaterThan =
    cmp(this.semver, '>', comp.semver, loose) &&
    ((this.operator === '<=' || this.operator === '<') &&
    (comp.operator === '>=' || comp.operator === '>'));

  return sameDirectionIncreasing || sameDirectionDecreasing ||
    (sameSemVer && differentDirectionsInclusive) ||
    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
};


exports.Range = Range;
function Range(range, loose) {
  if (range instanceof Range) {
    if (range.loose === loose) {
      return range;
    } else {
      return new Range(range.raw, loose);
    }
  }

  if (range instanceof Comparator) {
    return new Range(range.value, loose);
  }

  if (!(this instanceof Range))
    return new Range(range, loose);

  this.loose = loose;

  // First, split based on boolean or ||
  this.raw = range;
  this.set = range.split(/\s*\|\|\s*/).map(function(range) {
    return this.parseRange(range.trim());
  }, this).filter(function(c) {
    // throw out any that are not relevant for whatever reason
    return c.length;
  });

  if (!this.set.length) {
    throw new TypeError('Invalid SemVer Range: ' + range);
  }

  this.format();
}

Range.prototype.format = function() {
  this.range = this.set.map(function(comps) {
    return comps.join(' ').trim();
  }).join('||').trim();
  return this.range;
};

Range.prototype.toString = function() {
  return this.range;
};

Range.prototype.parseRange = function(range) {
  var loose = this.loose;
  range = range.trim();
  debug('range', range, loose);
  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
  range = range.replace(hr, hyphenReplace);
  debug('hyphen replace', range);
  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
  debug('comparator trim', range, re[COMPARATORTRIM]);

  // `~ 1.2.3` => `~1.2.3`
  range = range.replace(re[TILDETRIM], tildeTrimReplace);

  // `^ 1.2.3` => `^1.2.3`
  range = range.replace(re[CARETTRIM], caretTrimReplace);

  // normalize spaces
  range = range.split(/\s+/).join(' ');

  // At this point, the range is completely trimmed and
  // ready to be split into comparators.

  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
  var set = range.split(' ').map(function(comp) {
    return parseComparator(comp, loose);
  }).join(' ').split(/\s+/);
  if (this.loose) {
    // in loose mode, throw out any that are not valid comparators
    set = set.filter(function(comp) {
      return !!comp.match(compRe);
    });
  }
  set = set.map(function(comp) {
    return new Comparator(comp, loose);
  });

  return set;
};

Range.prototype.intersects = function(range, loose) {
  if (!(range instanceof Range)) {
    throw new TypeError('a Range is required');
  }

  return this.set.some(function(thisComparators) {
    return thisComparators.every(function(thisComparator) {
      return range.set.some(function(rangeComparators) {
        return rangeComparators.every(function(rangeComparator) {
          return thisComparator.intersects(rangeComparator, loose);
        });
      });
    });
  });
};

// Mostly just for testing and legacy API reasons
exports.toComparators = toComparators;
function toComparators(range, loose) {
  return new Range(range, loose).set.map(function(comp) {
    return comp.map(function(c) {
      return c.value;
    }).join(' ').trim().split(' ');
  });
}

// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator(comp, loose) {
  debug('comp', comp);
  comp = replaceCarets(comp, loose);
  debug('caret', comp);
  comp = replaceTildes(comp, loose);
  debug('tildes', comp);
  comp = replaceXRanges(comp, loose);
  debug('xrange', comp);
  comp = replaceStars(comp, loose);
  debug('stars', comp);
  return comp;
}

function isX(id) {
  return !id || id.toLowerCase() === 'x' || id === '*';
}

// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes(comp, loose) {
  return comp.trim().split(/\s+/).map(function(comp) {
    return replaceTilde(comp, loose);
  }).join(' ');
}

function replaceTilde(comp, loose) {
  var r = loose ? re[TILDELOOSE] : re[TILDE];
  return comp.replace(r, function(_, M, m, p, pr) {
    debug('tilde', comp, _, M, m, p, pr);
    var ret;

    if (isX(M))
      ret = '';
    else if (isX(m))
      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
    else if (isX(p))
      // ~1.2 == >=1.2.0 <1.3.0
      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
    else if (pr) {
      debug('replaceTilde pr', pr);
      if (pr.charAt(0) !== '-')
        pr = '-' + pr;
      ret = '>=' + M + '.' + m + '.' + p + pr +
            ' <' + M + '.' + (+m + 1) + '.0';
    } else
      // ~1.2.3 == >=1.2.3 <1.3.0
      ret = '>=' + M + '.' + m + '.' + p +
            ' <' + M + '.' + (+m + 1) + '.0';

    debug('tilde return', ret);
    return ret;
  });
}

// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets(comp, loose) {
  return comp.trim().split(/\s+/).map(function(comp) {
    return replaceCaret(comp, loose);
  }).join(' ');
}

function replaceCaret(comp, loose) {
  debug('caret', comp, loose);
  var r = loose ? re[CARETLOOSE] : re[CARET];
  return comp.replace(r, function(_, M, m, p, pr) {
    debug('caret', comp, _, M, m, p, pr);
    var ret;

    if (isX(M))
      ret = '';
    else if (isX(m))
      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
    else if (isX(p)) {
      if (M === '0')
        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
      else
        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
    } else if (pr) {
      debug('replaceCaret pr', pr);
      if (pr.charAt(0) !== '-')
        pr = '-' + pr;
      if (M === '0') {
        if (m === '0')
          ret = '>=' + M + '.' + m + '.' + p + pr +
                ' <' + M + '.' + m + '.' + (+p + 1);
        else
          ret = '>=' + M + '.' + m + '.' + p + pr +
                ' <' + M + '.' + (+m + 1) + '.0';
      } else
        ret = '>=' + M + '.' + m + '.' + p + pr +
              ' <' + (+M + 1) + '.0.0';
    } else {
      debug('no pr');
      if (M === '0') {
        if (m === '0')
          ret = '>=' + M + '.' + m + '.' + p +
                ' <' + M + '.' + m + '.' + (+p + 1);
        else
          ret = '>=' + M + '.' + m + '.' + p +
                ' <' + M + '.' + (+m + 1) + '.0';
      } else
        ret = '>=' + M + '.' + m + '.' + p +
              ' <' + (+M + 1) + '.0.0';
    }

    debug('caret return', ret);
    return ret;
  });
}

function replaceXRanges(comp, loose) {
  debug('replaceXRanges', comp, loose);
  return comp.split(/\s+/).map(function(comp) {
    return replaceXRange(comp, loose);
  }).join(' ');
}

function replaceXRange(comp, loose) {
  comp = comp.trim();
  var r = loose ? re[XRANGELOOSE] : re[XRANGE];
  return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
    debug('xRange', comp, ret, gtlt, M, m, p, pr);
    var xM = isX(M);
    var xm = xM || isX(m);
    var xp = xm || isX(p);
    var anyX = xp;

    if (gtlt === '=' && anyX)
      gtlt = '';

    if (xM) {
      if (gtlt === '>' || gtlt === '<') {
        // nothing is allowed
        ret = '<0.0.0';
      } else {
        // nothing is forbidden
        ret = '*';
      }
    } else if (gtlt && anyX) {
      // replace X with 0
      if (xm)
        m = 0;
      if (xp)
        p = 0;

      if (gtlt === '>') {
        // >1 => >=2.0.0
        // >1.2 => >=1.3.0
        // >1.2.3 => >= 1.2.4
        gtlt = '>=';
        if (xm) {
          M = +M + 1;
          m = 0;
          p = 0;
        } else if (xp) {
          m = +m + 1;
          p = 0;
        }
      } else if (gtlt === '<=') {
        // <=0.7.x is actually <0.8.0, since any 0.7.x should
        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
        gtlt = '<';
        if (xm)
          M = +M + 1;
        else
          m = +m + 1;
      }

      ret = gtlt + M + '.' + m + '.' + p;
    } else if (xm) {
      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
    } else if (xp) {
      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
    }

    debug('xRange return', ret);

    return ret;
  });
}

// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars(comp, loose) {
  debug('replaceStars', comp, loose);
  // Looseness is ignored here.  star is always as loose as it gets!
  return comp.trim().replace(re[STAR], '');
}

// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace($0,
                       from, fM, fm, fp, fpr, fb,
                       to, tM, tm, tp, tpr, tb) {

  if (isX(fM))
    from = '';
  else if (isX(fm))
    from = '>=' + fM + '.0.0';
  else if (isX(fp))
    from = '>=' + fM + '.' + fm + '.0';
  else
    from = '>=' + from;

  if (isX(tM))
    to = '';
  else if (isX(tm))
    to = '<' + (+tM + 1) + '.0.0';
  else if (isX(tp))
    to = '<' + tM + '.' + (+tm + 1) + '.0';
  else if (tpr)
    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
  else
    to = '<=' + to;

  return (from + ' ' + to).trim();
}


// if ANY of the sets match ALL of its comparators, then pass
Range.prototype.test = function(version) {
  if (!version)
    return false;

  if (typeof version === 'string')
    version = new SemVer(version, this.loose);

  for (var i = 0; i < this.set.length; i++) {
    if (testSet(this.set[i], version))
      return true;
  }
  return false;
};

function testSet(set, version) {
  for (var i = 0; i < set.length; i++) {
    if (!set[i].test(version))
      return false;
  }

  if (version.prerelease.length) {
    // Find the set of versions that are allowed to have prereleases
    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
    // That should allow `1.2.3-pr.2` to pass.
    // However, `1.2.4-alpha.notready` should NOT be allowed,
    // even though it's within the range set by the comparators.
    for (var i = 0; i < set.length; i++) {
      debug(set[i].semver);
      if (set[i].semver === ANY)
        continue;

      if (set[i].semver.prerelease.length > 0) {
        var allowed = set[i].semver;
        if (allowed.major === version.major &&
            allowed.minor === version.minor &&
            allowed.patch === version.patch)
          return true;
      }
    }

    // Version has a -pre, but it's not one of the ones we like.
    return false;
  }

  return true;
}

exports.satisfies = satisfies;
function satisfies(version, range, loose) {
  try {
    range = new Range(range, loose);
  } catch (er) {
    return false;
  }
  return range.test(version);
}

exports.maxSatisfying = maxSatisfying;
function maxSatisfying(versions, range, loose) {
  var max = null;
  var maxSV = null;
  try {
    var rangeObj = new Range(range, loose);
  } catch (er) {
    return null;
  }
  versions.forEach(function (v) {
    if (rangeObj.test(v)) { // satisfies(v, range, loose)
      if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
        max = v;
        maxSV = new SemVer(max, loose);
      }
    }
  })
  return max;
}

exports.minSatisfying = minSatisfying;
function minSatisfying(versions, range, loose) {
  var min = null;
  var minSV = null;
  try {
    var rangeObj = new Range(range, loose);
  } catch (er) {
    return null;
  }
  versions.forEach(function (v) {
    if (rangeObj.test(v)) { // satisfies(v, range, loose)
      if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
        min = v;
        minSV = new SemVer(min, loose);
      }
    }
  })
  return min;
}

exports.validRange = validRange;
function validRange(range, loose) {
  try {
    // Return '*' instead of '' so that truthiness works.
    // This will throw if it's invalid anyway
    return new Range(range, loose).range || '*';
  } catch (er) {
    return null;
  }
}

// Determine if version is less than all the versions possible in the range
exports.ltr = ltr;
function ltr(version, range, loose) {
  return outside(version, range, '<', loose);
}

// Determine if version is greater than all the versions possible in the range.
exports.gtr = gtr;
function gtr(version, range, loose) {
  return outside(version, range, '>', loose);
}

exports.outside = outside;
function outside(version, range, hilo, loose) {
  version = new SemVer(version, loose);
  range = new Range(range, loose);

  var gtfn, ltefn, ltfn, comp, ecomp;
  switch (hilo) {
    case '>':
      gtfn = gt;
      ltefn = lte;
      ltfn = lt;
      comp = '>';
      ecomp = '>=';
      break;
    case '<':
      gtfn = lt;
      ltefn = gte;
      ltfn = gt;
      comp = '<';
      ecomp = '<=';
      break;
    default:
      throw new TypeError('Must provide a hilo val of "<" or ">"');
  }

  // If it satisifes the range it is not outside
  if (satisfies(version, range, loose)) {
    return false;
  }

  // From now on, variable terms are as if we're in "gtr" mode.
  // but note that everything is flipped for the "ltr" function.

  for (var i = 0; i < range.set.length; ++i) {
    var comparators = range.set[i];

    var high = null;
    var low = null;

    comparators.forEach(function(comparator) {
      if (comparator.semver === ANY) {
        comparator = new Comparator('>=0.0.0')
      }
      high = high || comparator;
      low = low || comparator;
      if (gtfn(comparator.semver, high.semver, loose)) {
        high = comparator;
      } else if (ltfn(comparator.semver, low.semver, loose)) {
        low = comparator;
      }
    });

    // If the edge version comparator has a operator then our version
    // isn't outside it
    if (high.operator === comp || high.operator === ecomp) {
      return false;
    }

    // If the lowest version comparator has an operator and our version
    // is less than it then it isn't higher than the range
    if ((!low.operator || low.operator === comp) &&
        ltefn(version, low.semver)) {
      return false;
    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
      return false;
    }
  }
  return true;
}

exports.prerelease = prerelease;
function prerelease(version, loose) {
  var parsed = parse(version, loose);
  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
}

exports.intersects = intersects;
function intersects(r1, r2, loose) {
  r1 = new Range(r1, loose)
  r2 = new Range(r2, loose)
  return r1.intersects(r2)
}

exports.coerce = coerce;
function coerce(version) {
  if (version instanceof SemVer)
    return version;

  if (typeof version !== 'string')
    return null;

  var match = version.match(re[COERCE]);

  if (match == null)
    return null;

  return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0')); 
}


/***/ }),
/* 239 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = {
	DiffieHellman: DiffieHellman,
	generateECDSA: generateECDSA,
	generateED25519: generateED25519
};

var assert = __webpack_require__(6);
var crypto = __webpack_require__(7);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var nacl;

var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);

var CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined);

var ecdh, ec, jsbn;

function DiffieHellman(key) {
	utils.assertCompatible(key, Key, [1, 4], 'key');
	this._isPriv = PrivateKey.isPrivateKey(key, [1, 3]);
	this._algo = key.type;
	this._curve = key.curve;
	this._key = key;
	if (key.type === 'dsa') {
		if (!CRYPTO_HAVE_ECDH) {
			throw (new Error('Due to bugs in the node 0.10 ' +
			    'crypto API, node 0.12.x or later is required ' +
			    'to use DH'));
		}
		this._dh = crypto.createDiffieHellman(
		    key.part.p.data, undefined,
		    key.part.g.data, undefined);
		this._p = key.part.p;
		this._g = key.part.g;
		if (this._isPriv)
			this._dh.setPrivateKey(key.part.x.data);
		this._dh.setPublicKey(key.part.y.data);

	} else if (key.type === 'ecdsa') {
		if (!CRYPTO_HAVE_ECDH) {
			if (ecdh === undefined)
				ecdh = __webpack_require__(324);
			if (ec === undefined)
				ec = __webpack_require__(116);
			if (jsbn === undefined)
				jsbn = __webpack_require__(63).BigInteger;

			this._ecParams = new X9ECParameters(this._curve);

			if (this._isPriv) {
				this._priv = new ECPrivate(
				    this._ecParams, key.part.d.data);
			}
			return;
		}

		var curve = {
			'nistp256': 'prime256v1',
			'nistp384': 'secp384r1',
			'nistp521': 'secp521r1'
		}[key.curve];
		this._dh = crypto.createECDH(curve);
		if (typeof (this._dh) !== 'object' ||
		    typeof (this._dh.setPrivateKey) !== 'function') {
			CRYPTO_HAVE_ECDH = false;
			DiffieHellman.call(this, key);
			return;
		}
		if (this._isPriv)
			this._dh.setPrivateKey(key.part.d.data);
		this._dh.setPublicKey(key.part.Q.data);

	} else if (key.type === 'curve25519') {
		if (nacl === undefined)
			nacl = __webpack_require__(58);

		if (this._isPriv) {
			utils.assertCompatible(key, PrivateKey, [1, 5], 'key');
			this._priv = key.part.k.data;
		}

	} else {
		throw (new Error('DH not supported for ' + key.type + ' keys'));
	}
}

DiffieHellman.prototype.getPublicKey = function () {
	if (this._isPriv)
		return (this._key.toPublic());
	return (this._key);
};

DiffieHellman.prototype.getPrivateKey = function () {
	if (this._isPriv)
		return (this._key);
	else
		return (undefined);
};
DiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey;

DiffieHellman.prototype._keyCheck = function (pk, isPub) {
	assert.object(pk, 'key');
	if (!isPub)
		utils.assertCompatible(pk, PrivateKey, [1, 3], 'key');
	utils.assertCompatible(pk, Key, [1, 4], 'key');

	if (pk.type !== this._algo) {
		throw (new Error('A ' + pk.type + ' key cannot be used in ' +
		    this._algo + ' Diffie-Hellman'));
	}

	if (pk.curve !== this._curve) {
		throw (new Error('A key from the ' + pk.curve + ' curve ' +
		    'cannot be used with a ' + this._curve +
		    ' Diffie-Hellman'));
	}

	if (pk.type === 'dsa') {
		assert.deepEqual(pk.part.p, this._p,
		    'DSA key prime does not match');
		assert.deepEqual(pk.part.g, this._g,
		    'DSA key generator does not match');
	}
};

DiffieHellman.prototype.setKey = function (pk) {
	this._keyCheck(pk);

	if (pk.type === 'dsa') {
		this._dh.setPrivateKey(pk.part.x.data);
		this._dh.setPublicKey(pk.part.y.data);

	} else if (pk.type === 'ecdsa') {
		if (CRYPTO_HAVE_ECDH) {
			this._dh.setPrivateKey(pk.part.d.data);
			this._dh.setPublicKey(pk.part.Q.data);
		} else {
			this._priv = new ECPrivate(
			    this._ecParams, pk.part.d.data);
		}

	} else if (pk.type === 'curve25519') {
		var k = pk.part.k;
		if (!pk.part.k)
			k = pk.part.r;
		this._priv = k.data;
		if (this._priv[0] === 0x00)
			this._priv = this._priv.slice(1);
		this._priv = this._priv.slice(0, 32);
	}
	this._key = pk;
	this._isPriv = true;
};
DiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey;

DiffieHellman.prototype.computeSecret = function (otherpk) {
	this._keyCheck(otherpk, true);
	if (!this._isPriv)
		throw (new Error('DH exchange has not been initialized with ' +
		    'a private key yet'));

	var pub;
	if (this._algo === 'dsa') {
		return (this._dh.computeSecret(
		    otherpk.part.y.data));

	} else if (this._algo === 'ecdsa') {
		if (CRYPTO_HAVE_ECDH) {
			return (this._dh.computeSecret(
			    otherpk.part.Q.data));
		} else {
			pub = new ECPublic(
			    this._ecParams, otherpk.part.Q.data);
			return (this._priv.deriveSharedSecret(pub));
		}

	} else if (this._algo === 'curve25519') {
		pub = otherpk.part.A.data;
		while (pub[0] === 0x00 && pub.length > 32)
			pub = pub.slice(1);
		var priv = this._priv;
		assert.strictEqual(pub.length, 32);
		assert.strictEqual(priv.length, 32);

		var secret = nacl.box.before(new Uint8Array(pub),
		    new Uint8Array(priv));

		return (Buffer.from(secret));
	}

	throw (new Error('Invalid algorithm: ' + this._algo));
};

DiffieHellman.prototype.generateKey = function () {
	var parts = [];
	var priv, pub;
	if (this._algo === 'dsa') {
		this._dh.generateKeys();

		parts.push({name: 'p', data: this._p.data});
		parts.push({name: 'q', data: this._key.part.q.data});
		parts.push({name: 'g', data: this._g.data});
		parts.push({name: 'y', data: this._dh.getPublicKey()});
		parts.push({name: 'x', data: this._dh.getPrivateKey()});
		this._key = new PrivateKey({
			type: 'dsa',
			parts: parts
		});
		this._isPriv = true;
		return (this._key);

	} else if (this._algo === 'ecdsa') {
		if (CRYPTO_HAVE_ECDH) {
			this._dh.generateKeys();

			parts.push({name: 'curve',
			    data: Buffer.from(this._curve)});
			parts.push({name: 'Q', data: this._dh.getPublicKey()});
			parts.push({name: 'd', data: this._dh.getPrivateKey()});
			this._key = new PrivateKey({
				type: 'ecdsa',
				curve: this._curve,
				parts: parts
			});
			this._isPriv = true;
			return (this._key);

		} else {
			var n = this._ecParams.getN();
			var r = new jsbn(crypto.randomBytes(n.bitLength()));
			var n1 = n.subtract(jsbn.ONE);
			priv = r.mod(n1).add(jsbn.ONE);
			pub = this._ecParams.getG().multiply(priv);

			priv = Buffer.from(priv.toByteArray());
			pub = Buffer.from(this._ecParams.getCurve().
			    encodePointHex(pub), 'hex');

			this._priv = new ECPrivate(this._ecParams, priv);

			parts.push({name: 'curve',
			    data: Buffer.from(this._curve)});
			parts.push({name: 'Q', data: pub});
			parts.push({name: 'd', data: priv});

			this._key = new PrivateKey({
				type: 'ecdsa',
				curve: this._curve,
				parts: parts
			});
			this._isPriv = true;
			return (this._key);
		}

	} else if (this._algo === 'curve25519') {
		var pair = nacl.box.keyPair();
		priv = Buffer.from(pair.secretKey);
		pub = Buffer.from(pair.publicKey);
		priv = Buffer.concat([priv, pub]);
		assert.strictEqual(priv.length, 64);
		assert.strictEqual(pub.length, 32);

		parts.push({name: 'A', data: pub});
		parts.push({name: 'k', data: priv});
		this._key = new PrivateKey({
			type: 'curve25519',
			parts: parts
		});
		this._isPriv = true;
		return (this._key);
	}

	throw (new Error('Invalid algorithm: ' + this._algo));
};
DiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey;

/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */

function X9ECParameters(name) {
	var params = algs.curves[name];
	assert.object(params);

	var p = new jsbn(params.p);
	var a = new jsbn(params.a);
	var b = new jsbn(params.b);
	var n = new jsbn(params.n);
	var h = jsbn.ONE;
	var curve = new ec.ECCurveFp(p, a, b);
	var G = curve.decodePointHex(params.G.toString('hex'));

	this.curve = curve;
	this.g = G;
	this.n = n;
	this.h = h;
}
X9ECParameters.prototype.getCurve = function () { return (this.curve); };
X9ECParameters.prototype.getG = function () { return (this.g); };
X9ECParameters.prototype.getN = function () { return (this.n); };
X9ECParameters.prototype.getH = function () { return (this.h); };

function ECPublic(params, buffer) {
	this._params = params;
	if (buffer[0] === 0x00)
		buffer = buffer.slice(1);
	this._pub = params.getCurve().decodePointHex(buffer.toString('hex'));
}

function ECPrivate(params, buffer) {
	this._params = params;
	this._priv = new jsbn(utils.mpNormalize(buffer));
}
ECPrivate.prototype.deriveSharedSecret = function (pubKey) {
	assert.ok(pubKey instanceof ECPublic);
	var S = pubKey._pub.multiply(this._priv);
	return (Buffer.from(S.getX().toBigInteger().toByteArray()));
};

function generateED25519() {
	if (nacl === undefined)
		nacl = __webpack_require__(58);

	var pair = nacl.sign.keyPair();
	var priv = Buffer.from(pair.secretKey);
	var pub = Buffer.from(pair.publicKey);
	assert.strictEqual(priv.length, 64);
	assert.strictEqual(pub.length, 32);

	var parts = [];
	parts.push({name: 'A', data: pub});
	parts.push({name: 'k', data: priv.slice(0, 32)});
	var key = new PrivateKey({
		type: 'ed25519',
		parts: parts
	});
	return (key);
}

/* Generates a new ECDSA private key on a given curve. */
function generateECDSA(curve) {
	var parts = [];
	var key;

	if (CRYPTO_HAVE_ECDH) {
		/*
		 * Node crypto doesn't expose key generation directly, but the
		 * ECDH instances can generate keys. It turns out this just
		 * calls into the OpenSSL generic key generator, and we can
		 * read its output happily without doing an actual DH. So we
		 * use that here.
		 */
		var osCurve = {
			'nistp256': 'prime256v1',
			'nistp384': 'secp384r1',
			'nistp521': 'secp521r1'
		}[curve];

		var dh = crypto.createECDH(osCurve);
		dh.generateKeys();

		parts.push({name: 'curve',
		    data: Buffer.from(curve)});
		parts.push({name: 'Q', data: dh.getPublicKey()});
		parts.push({name: 'd', data: dh.getPrivateKey()});

		key = new PrivateKey({
			type: 'ecdsa',
			curve: curve,
			parts: parts
		});
		return (key);
	} else {
		if (ecdh === undefined)
			ecdh = __webpack_require__(324);
		if (ec === undefined)
			ec = __webpack_require__(116);
		if (jsbn === undefined)
			jsbn = __webpack_require__(63).BigInteger;

		var ecParams = new X9ECParameters(curve);

		/* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */
		var n = ecParams.getN();
		/*
		 * The crypto.randomBytes() function can only give us whole
		 * bytes, so taking a nod from X9.62, we round up.
		 */
		var cByteLen = Math.ceil((n.bitLength() + 64) / 8);
		var c = new jsbn(crypto.randomBytes(cByteLen));

		var n1 = n.subtract(jsbn.ONE);
		var priv = c.mod(n1).add(jsbn.ONE);
		var pub = ecParams.getG().multiply(priv);

		priv = Buffer.from(priv.toByteArray());
		pub = Buffer.from(ecParams.getCurve().
		    encodePointHex(pub), 'hex');

		parts.push({name: 'curve', data: Buffer.from(curve)});
		parts.push({name: 'Q', data: pub});
		parts.push({name: 'd', data: priv});

		key = new PrivateKey({
			type: 'ecdsa',
			curve: curve,
			parts: parts
		});
		return (key);
	}
}


/***/ }),
/* 240 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = {
	read: read,
	write: write
};

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var utils = __webpack_require__(12);
var SSHBuffer = __webpack_require__(135);
var Dhe = __webpack_require__(239);

var supportedAlgos = {
	'rsa-sha1' : 5,
	'rsa-sha256' : 8,
	'rsa-sha512' : 10,
	'ecdsa-p256-sha256' : 13,
	'ecdsa-p384-sha384' : 14
	/*
	 * ed25519 is hypothetically supported with id 15
	 * but the common tools available don't appear to be
	 * capable of generating/using ed25519 keys
	 */
};

var supportedAlgosById = {};
Object.keys(supportedAlgos).forEach(function (k) {
	supportedAlgosById[supportedAlgos[k]] = k.toUpperCase();
});

function read(buf, options) {
	if (typeof (buf) !== 'string') {
		assert.buffer(buf, 'buf');
		buf = buf.toString('ascii');
	}
	var lines = buf.split('\n');
	if (lines[0].match(/^Private-key-format\: v1/)) {
		var algElems = lines[1].split(' ');
		var algoNum = parseInt(algElems[1], 10);
		var algoName = algElems[2];
		if (!supportedAlgosById[algoNum])
			throw (new Error('Unsupported algorithm: ' + algoName));
		return (readDNSSECPrivateKey(algoNum, lines.slice(2)));
	}

	// skip any comment-lines
	var line = 0;
	/* JSSTYLED */
	while (lines[line].match(/^\;/))
		line++;
	// we should now have *one single* line left with our KEY on it.
	if ((lines[line].match(/\. IN KEY /) ||
	    lines[line].match(/\. IN DNSKEY /)) && lines[line+1].length === 0) {
		return (readRFC3110(lines[line]));
	}
	throw (new Error('Cannot parse dnssec key'));
}

function readRFC3110(keyString) {
	var elems = keyString.split(' ');
	//unused var flags = parseInt(elems[3], 10);
	//unused var protocol = parseInt(elems[4], 10);
	var algorithm = parseInt(elems[5], 10);
	if (!supportedAlgosById[algorithm])
		throw (new Error('Unsupported algorithm: ' + algorithm));
	var base64key = elems.slice(6, elems.length).join();
	var keyBuffer = Buffer.from(base64key, 'base64');
	if (supportedAlgosById[algorithm].match(/^RSA-/)) {
		// join the rest of the body into a single base64-blob
		var publicExponentLen = keyBuffer.readUInt8(0);
		if (publicExponentLen != 3 && publicExponentLen != 1)
			throw (new Error('Cannot parse dnssec key: ' +
			    'unsupported exponent length'));

		var publicExponent = keyBuffer.slice(1, publicExponentLen+1);
		publicExponent = utils.mpNormalize(publicExponent);
		var modulus = keyBuffer.slice(1+publicExponentLen);
		modulus = utils.mpNormalize(modulus);
		// now, make the key
		var rsaKey = {
			type: 'rsa',
			parts: []
		};
		rsaKey.parts.push({ name: 'e', data: publicExponent});
		rsaKey.parts.push({ name: 'n', data: modulus});
		return (new Key(rsaKey));
	}
	if (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' ||
	    supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') {
		var curve = 'nistp384';
		var size = 384;
		if (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) {
			curve = 'nistp256';
			size = 256;
		}

		var ecdsaKey = {
			type: 'ecdsa',
			curve: curve,
			size: size,
			parts: [
				{name: 'curve', data: Buffer.from(curve) },
				{name: 'Q', data: utils.ecNormalize(keyBuffer) }
			]
		};
		return (new Key(ecdsaKey));
	}
	throw (new Error('Unsupported algorithm: ' +
	    supportedAlgosById[algorithm]));
}

function elementToBuf(e) {
	return (Buffer.from(e.split(' ')[1], 'base64'));
}

function readDNSSECRSAPrivateKey(elements) {
	var rsaParams = {};
	elements.forEach(function (element) {
		if (element.split(' ')[0] === 'Modulus:')
			rsaParams['n'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'PublicExponent:')
			rsaParams['e'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'PrivateExponent:')
			rsaParams['d'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'Prime1:')
			rsaParams['p'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'Prime2:')
			rsaParams['q'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'Exponent1:')
			rsaParams['dmodp'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'Exponent2:')
			rsaParams['dmodq'] = elementToBuf(element);
		else if (element.split(' ')[0] === 'Coefficient:')
			rsaParams['iqmp'] = elementToBuf(element);
	});
	// now, make the key
	var key = {
		type: 'rsa',
		parts: [
			{ name: 'e', data: utils.mpNormalize(rsaParams['e'])},
			{ name: 'n', data: utils.mpNormalize(rsaParams['n'])},
			{ name: 'd', data: utils.mpNormalize(rsaParams['d'])},
			{ name: 'p', data: utils.mpNormalize(rsaParams['p'])},
			{ name: 'q', data: utils.mpNormalize(rsaParams['q'])},
			{ name: 'dmodp',
			    data: utils.mpNormalize(rsaParams['dmodp'])},
			{ name: 'dmodq',
			    data: utils.mpNormalize(rsaParams['dmodq'])},
			{ name: 'iqmp',
			    data: utils.mpNormalize(rsaParams['iqmp'])}
		]
	};
	return (new PrivateKey(key));
}

function readDNSSECPrivateKey(alg, elements) {
	if (supportedAlgosById[alg].match(/^RSA-/)) {
		return (readDNSSECRSAPrivateKey(elements));
	}
	if (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' ||
	    supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
		var d = Buffer.from(elements[0].split(' ')[1], 'base64');
		var curve = 'nistp384';
		var size = 384;
		if (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
			curve = 'nistp256';
			size = 256;
		}
		// DNSSEC generates the public-key on the fly (go calculate it)
		var publicKey = utils.publicFromPrivateECDSA(curve, d);
		var Q = publicKey.part['Q'].data;
		var ecdsaKey = {
			type: 'ecdsa',
			curve: curve,
			size: size,
			parts: [
				{name: 'curve', data: Buffer.from(curve) },
				{name: 'd', data: d },
				{name: 'Q', data: Q }
			]
		};
		return (new PrivateKey(ecdsaKey));
	}
	throw (new Error('Unsupported algorithm: ' + supportedAlgosById[alg]));
}

function dnssecTimestamp(date) {
	var year = date.getFullYear() + ''; //stringify
	var month = (date.getMonth() + 1);
	var timestampStr = year + month + date.getUTCDate();
	timestampStr += '' + date.getUTCHours() + date.getUTCMinutes();
	timestampStr += date.getUTCSeconds();
	return (timestampStr);
}

function rsaAlgFromOptions(opts) {
	if (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1')
		return ('5 (RSASHA1)');
	else if (opts.hashAlgo === 'sha256')
		return ('8 (RSASHA256)');
	else if (opts.hashAlgo === 'sha512')
		return ('10 (RSASHA512)');
	else
		throw (new Error('Unknown or unsupported hash: ' +
		    opts.hashAlgo));
}

function writeRSA(key, options) {
	// if we're missing parts, add them.
	if (!key.part.dmodp || !key.part.dmodq) {
		utils.addRSAMissing(key);
	}

	var out = '';
	out += 'Private-key-format: v1.3\n';
	out += 'Algorithm: ' + rsaAlgFromOptions(options) + '\n';
	var n = utils.mpDenormalize(key.part['n'].data);
	out += 'Modulus: ' + n.toString('base64') + '\n';
	var e = utils.mpDenormalize(key.part['e'].data);
	out += 'PublicExponent: ' + e.toString('base64') + '\n';
	var d = utils.mpDenormalize(key.part['d'].data);
	out += 'PrivateExponent: ' + d.toString('base64') + '\n';
	var p = utils.mpDenormalize(key.part['p'].data);
	out += 'Prime1: ' + p.toString('base64') + '\n';
	var q = utils.mpDenormalize(key.part['q'].data);
	out += 'Prime2: ' + q.toString('base64') + '\n';
	var dmodp = utils.mpDenormalize(key.part['dmodp'].data);
	out += 'Exponent1: ' + dmodp.toString('base64') + '\n';
	var dmodq = utils.mpDenormalize(key.part['dmodq'].data);
	out += 'Exponent2: ' + dmodq.toString('base64') + '\n';
	var iqmp = utils.mpDenormalize(key.part['iqmp'].data);
	out += 'Coefficient: ' + iqmp.toString('base64') + '\n';
	// Assume that we're valid as-of now
	var timestamp = new Date();
	out += 'Created: ' + dnssecTimestamp(timestamp) + '\n';
	out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
	out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';
	return (Buffer.from(out, 'ascii'));
}

function writeECDSA(key, options) {
	var out = '';
	out += 'Private-key-format: v1.3\n';

	if (key.curve === 'nistp256') {
		out += 'Algorithm: 13 (ECDSAP256SHA256)\n';
	} else if (key.curve === 'nistp384') {
		out += 'Algorithm: 14 (ECDSAP384SHA384)\n';
	} else {
		throw (new Error('Unsupported curve'));
	}
	var base64Key = key.part['d'].data.toString('base64');
	out += 'PrivateKey: ' + base64Key + '\n';

	// Assume that we're valid as-of now
	var timestamp = new Date();
	out += 'Created: ' + dnssecTimestamp(timestamp) + '\n';
	out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
	out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';

	return (Buffer.from(out, 'ascii'));
}

function write(key, options) {
	if (PrivateKey.isPrivateKey(key)) {
		if (key.type === 'rsa') {
			return (writeRSA(key, options));
		} else if (key.type === 'ecdsa') {
			return (writeECDSA(key, options));
		} else {
			throw (new Error('Unsupported algorithm: ' + key.type));
		}
	} else if (Key.isKey(key)) {
		/*
		 * RFC3110 requires a keyname, and a keytype, which we
		 * don't really have a mechanism for specifying such
		 * additional metadata.
		 */
		throw (new Error('Format "dnssec" only supports ' +
		    'writing private keys'));
	} else {
		throw (new Error('key is not a Key or PrivateKey'));
	}
}


/***/ }),
/* 241 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	readPkcs1: readPkcs1,
	write: write,
	writePkcs1: writePkcs1
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);

var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var pem = __webpack_require__(66);

var pkcs8 = __webpack_require__(133);
var readECDSACurve = pkcs8.readECDSACurve;

function read(buf, options) {
	return (pem.read(buf, options, 'pkcs1'));
}

function write(key, options) {
	return (pem.write(key, options, 'pkcs1'));
}

/* Helper to read in a single mpint */
function readMPInt(der, nm) {
	assert.strictEqual(der.peek(), asn1.Ber.Integer,
	    nm + ' is not an Integer');
	return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
}

function readPkcs1(alg, type, der) {
	switch (alg) {
	case 'RSA':
		if (type === 'public')
			return (readPkcs1RSAPublic(der));
		else if (type === 'private')
			return (readPkcs1RSAPrivate(der));
		throw (new Error('Unknown key type: ' + type));
	case 'DSA':
		if (type === 'public')
			return (readPkcs1DSAPublic(der));
		else if (type === 'private')
			return (readPkcs1DSAPrivate(der));
		throw (new Error('Unknown key type: ' + type));
	case 'EC':
	case 'ECDSA':
		if (type === 'private')
			return (readPkcs1ECDSAPrivate(der));
		else if (type === 'public')
			return (readPkcs1ECDSAPublic(der));
		throw (new Error('Unknown key type: ' + type));
	case 'EDDSA':
	case 'EdDSA':
		if (type === 'private')
			return (readPkcs1EdDSAPrivate(der));
		throw (new Error(type + ' keys not supported with EdDSA'));
	default:
		throw (new Error('Unknown key algo: ' + alg));
	}
}

function readPkcs1RSAPublic(der) {
	// modulus and exponent
	var n = readMPInt(der, 'modulus');
	var e = readMPInt(der, 'exponent');

	// now, make the key
	var key = {
		type: 'rsa',
		parts: [
			{ name: 'e', data: e },
			{ name: 'n', data: n }
		]
	};

	return (new Key(key));
}

function readPkcs1RSAPrivate(der) {
	var version = readMPInt(der, 'version');
	assert.strictEqual(version[0], 0);

	// modulus then public exponent
	var n = readMPInt(der, 'modulus');
	var e = readMPInt(der, 'public exponent');
	var d = readMPInt(der, 'private exponent');
	var p = readMPInt(der, 'prime1');
	var q = readMPInt(der, 'prime2');
	var dmodp = readMPInt(der, 'exponent1');
	var dmodq = readMPInt(der, 'exponent2');
	var iqmp = readMPInt(der, 'iqmp');

	// now, make the key
	var key = {
		type: 'rsa',
		parts: [
			{ name: 'n', data: n },
			{ name: 'e', data: e },
			{ name: 'd', data: d },
			{ name: 'iqmp', data: iqmp },
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'dmodp', data: dmodp },
			{ name: 'dmodq', data: dmodq }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs1DSAPrivate(der) {
	var version = readMPInt(der, 'version');
	assert.strictEqual(version.readUInt8(0), 0);

	var p = readMPInt(der, 'p');
	var q = readMPInt(der, 'q');
	var g = readMPInt(der, 'g');
	var y = readMPInt(der, 'y');
	var x = readMPInt(der, 'x');

	// now, make the key
	var key = {
		type: 'dsa',
		parts: [
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'g', data: g },
			{ name: 'y', data: y },
			{ name: 'x', data: x }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs1EdDSAPrivate(der) {
	var version = readMPInt(der, 'version');
	assert.strictEqual(version.readUInt8(0), 1);

	// private key
	var k = der.readString(asn1.Ber.OctetString, true);

	der.readSequence(0xa0);
	var oid = der.readOID();
	assert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');

	der.readSequence(0xa1);
	var A = utils.readBitString(der);

	var key = {
		type: 'ed25519',
		parts: [
			{ name: 'A', data: utils.zeroPadToLength(A, 32) },
			{ name: 'k', data: k }
		]
	};

	return (new PrivateKey(key));
}

function readPkcs1DSAPublic(der) {
	var y = readMPInt(der, 'y');
	var p = readMPInt(der, 'p');
	var q = readMPInt(der, 'q');
	var g = readMPInt(der, 'g');

	var key = {
		type: 'dsa',
		parts: [
			{ name: 'y', data: y },
			{ name: 'p', data: p },
			{ name: 'q', data: q },
			{ name: 'g', data: g }
		]
	};

	return (new Key(key));
}

function readPkcs1ECDSAPublic(der) {
	der.readSequence();

	var oid = der.readOID();
	assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');

	var curveOid = der.readOID();

	var curve;
	var curves = Object.keys(algs.curves);
	for (var j = 0; j < curves.length; ++j) {
		var c = curves[j];
		var cd = algs.curves[c];
		if (cd.pkcs8oid === curveOid) {
			curve = c;
			break;
		}
	}
	assert.string(curve, 'a known ECDSA named curve');

	var Q = der.readString(asn1.Ber.BitString, true);
	Q = utils.ecNormalize(Q);

	var key = {
		type: 'ecdsa',
		parts: [
			{ name: 'curve', data: Buffer.from(curve) },
			{ name: 'Q', data: Q }
		]
	};

	return (new Key(key));
}

function readPkcs1ECDSAPrivate(der) {
	var version = readMPInt(der, 'version');
	assert.strictEqual(version.readUInt8(0), 1);

	// private key
	var d = der.readString(asn1.Ber.OctetString, true);

	der.readSequence(0xa0);
	var curve = readECDSACurve(der);
	assert.string(curve, 'a known elliptic curve');

	der.readSequence(0xa1);
	var Q = der.readString(asn1.Ber.BitString, true);
	Q = utils.ecNormalize(Q);

	var key = {
		type: 'ecdsa',
		parts: [
			{ name: 'curve', data: Buffer.from(curve) },
			{ name: 'Q', data: Q },
			{ name: 'd', data: d }
		]
	};

	return (new PrivateKey(key));
}

function writePkcs1(der, key) {
	der.startSequence();

	switch (key.type) {
	case 'rsa':
		if (PrivateKey.isPrivateKey(key))
			writePkcs1RSAPrivate(der, key);
		else
			writePkcs1RSAPublic(der, key);
		break;
	case 'dsa':
		if (PrivateKey.isPrivateKey(key))
			writePkcs1DSAPrivate(der, key);
		else
			writePkcs1DSAPublic(der, key);
		break;
	case 'ecdsa':
		if (PrivateKey.isPrivateKey(key))
			writePkcs1ECDSAPrivate(der, key);
		else
			writePkcs1ECDSAPublic(der, key);
		break;
	case 'ed25519':
		if (PrivateKey.isPrivateKey(key))
			writePkcs1EdDSAPrivate(der, key);
		else
			writePkcs1EdDSAPublic(der, key);
		break;
	default:
		throw (new Error('Unknown key algo: ' + key.type));
	}

	der.endSequence();
}

function writePkcs1RSAPublic(der, key) {
	der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
}

function writePkcs1RSAPrivate(der, key) {
	var ver = Buffer.from([0]);
	der.writeBuffer(ver, asn1.Ber.Integer);

	der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.e.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.d.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	if (!key.part.dmodp || !key.part.dmodq)
		utils.addRSAMissing(key);
	der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);
}

function writePkcs1DSAPrivate(der, key) {
	var ver = Buffer.from([0]);
	der.writeBuffer(ver, asn1.Ber.Integer);

	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.x.data, asn1.Ber.Integer);
}

function writePkcs1DSAPublic(der, key) {
	der.writeBuffer(key.part.y.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.q.data, asn1.Ber.Integer);
	der.writeBuffer(key.part.g.data, asn1.Ber.Integer);
}

function writePkcs1ECDSAPublic(der, key) {
	der.startSequence();

	der.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */
	var curve = key.part.curve.data.toString();
	var curveOid = algs.curves[curve].pkcs8oid;
	assert.string(curveOid, 'a known ECDSA named curve');
	der.writeOID(curveOid);

	der.endSequence();

	var Q = utils.ecNormalize(key.part.Q.data, true);
	der.writeBuffer(Q, asn1.Ber.BitString);
}

function writePkcs1ECDSAPrivate(der, key) {
	var ver = Buffer.from([1]);
	der.writeBuffer(ver, asn1.Ber.Integer);

	der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);

	der.startSequence(0xa0);
	var curve = key.part.curve.data.toString();
	var curveOid = algs.curves[curve].pkcs8oid;
	assert.string(curveOid, 'a known ECDSA named curve');
	der.writeOID(curveOid);
	der.endSequence();

	der.startSequence(0xa1);
	var Q = utils.ecNormalize(key.part.Q.data, true);
	der.writeBuffer(Q, asn1.Ber.BitString);
	der.endSequence();
}

function writePkcs1EdDSAPrivate(der, key) {
	var ver = Buffer.from([1]);
	der.writeBuffer(ver, asn1.Ber.Integer);

	der.writeBuffer(key.part.k.data, asn1.Ber.OctetString);

	der.startSequence(0xa0);
	der.writeOID('1.3.101.112');
	der.endSequence();

	der.startSequence(0xa1);
	utils.writeBitString(der, key.part.A.data);
	der.endSequence();
}

function writePkcs1EdDSAPublic(der, key) {
	throw (new Error('Public keys are not supported for EdDSA PKCS#1'));
}


/***/ }),
/* 242 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

var Key = __webpack_require__(16);
var Fingerprint = __webpack_require__(132);
var Signature = __webpack_require__(57);
var PrivateKey = __webpack_require__(20);
var Certificate = __webpack_require__(131);
var Identity = __webpack_require__(134);
var errs = __webpack_require__(56);

module.exports = {
	/* top-level classes */
	Key: Key,
	parseKey: Key.parse,
	Fingerprint: Fingerprint,
	parseFingerprint: Fingerprint.parse,
	Signature: Signature,
	parseSignature: Signature.parse,
	PrivateKey: PrivateKey,
	parsePrivateKey: PrivateKey.parse,
	generatePrivateKey: PrivateKey.generate,
	Certificate: Certificate,
	parseCertificate: Certificate.parse,
	createSelfSignedCertificate: Certificate.createSelfSigned,
	createCertificate: Certificate.create,
	Identity: Identity,
	identityFromDN: Identity.parseDN,
	identityForHost: Identity.forHost,
	identityForUser: Identity.forUser,
	identityForEmail: Identity.forEmail,

	/* errors */
	FingerprintFormatError: errs.FingerprintFormatError,
	InvalidAlgorithmError: errs.InvalidAlgorithmError,
	KeyParseError: errs.KeyParseError,
	SignatureParseError: errs.SignatureParseError,
	KeyEncryptedError: errs.KeyEncryptedError,
	CertificateParseError: errs.CertificateParseError
};


/***/ }),
/* 243 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var ansiRegex = __webpack_require__(552)();

module.exports = function (str) {
	return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
};


/***/ }),
/* 244 */
/***/ (function(module, exports, __webpack_require__) {

(function (global, factory) {
	 true ? module.exports = factory() :
	typeof define === 'function' && define.amd ? define(factory) :
	(global.typeDetect = factory());
}(this, (function () { 'use strict';

/* !
 * type-detect
 * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
 * MIT Licensed
 */
var promiseExists = typeof Promise === 'function';

/* eslint-disable no-undef */
var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist

var symbolExists = typeof Symbol !== 'undefined';
var mapExists = typeof Map !== 'undefined';
var setExists = typeof Set !== 'undefined';
var weakMapExists = typeof WeakMap !== 'undefined';
var weakSetExists = typeof WeakSet !== 'undefined';
var dataViewExists = typeof DataView !== 'undefined';
var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';
var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';
var setEntriesExists = setExists && typeof Set.prototype.entries === 'function';
var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';
var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());
var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());
var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';
var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());
var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';
var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());
var toStringLeftSliceLength = 8;
var toStringRightSliceLength = -1;
/**
 * ### typeOf (obj)
 *
 * Uses `Object.prototype.toString` to determine the type of an object,
 * normalising behaviour across engine versions & well optimised.
 *
 * @param {Mixed} object
 * @return {String} object type
 * @api public
 */
function typeDetect(obj) {
  /* ! Speed optimisation
   * Pre:
   *   string literal     x 3,039,035 ops/sec ±1.62% (78 runs sampled)
   *   boolean literal    x 1,424,138 ops/sec ±4.54% (75 runs sampled)
   *   number literal     x 1,653,153 ops/sec ±1.91% (82 runs sampled)
   *   undefined          x 9,978,660 ops/sec ±1.92% (75 runs sampled)
   *   function           x 2,556,769 ops/sec ±1.73% (77 runs sampled)
   * Post:
   *   string literal     x 38,564,796 ops/sec ±1.15% (79 runs sampled)
   *   boolean literal    x 31,148,940 ops/sec ±1.10% (79 runs sampled)
   *   number literal     x 32,679,330 ops/sec ±1.90% (78 runs sampled)
   *   undefined          x 32,363,368 ops/sec ±1.07% (82 runs sampled)
   *   function           x 31,296,870 ops/sec ±0.96% (83 runs sampled)
   */
  var typeofObj = typeof obj;
  if (typeofObj !== 'object') {
    return typeofObj;
  }

  /* ! Speed optimisation
   * Pre:
   *   null               x 28,645,765 ops/sec ±1.17% (82 runs sampled)
   * Post:
   *   null               x 36,428,962 ops/sec ±1.37% (84 runs sampled)
   */
  if (obj === null) {
    return 'null';
  }

  /* ! Spec Conformance
   * Test: `Object.prototype.toString.call(window)``
   *  - Node === "[object global]"
   *  - Chrome === "[object global]"
   *  - Firefox === "[object Window]"
   *  - PhantomJS === "[object Window]"
   *  - Safari === "[object Window]"
   *  - IE 11 === "[object Window]"
   *  - IE Edge === "[object Window]"
   * Test: `Object.prototype.toString.call(this)``
   *  - Chrome Worker === "[object global]"
   *  - Firefox Worker === "[object DedicatedWorkerGlobalScope]"
   *  - Safari Worker === "[object DedicatedWorkerGlobalScope]"
   *  - IE 11 Worker === "[object WorkerGlobalScope]"
   *  - IE Edge Worker === "[object WorkerGlobalScope]"
   */
  if (obj === globalObject) {
    return 'global';
  }

  /* ! Speed optimisation
   * Pre:
   *   array literal      x 2,888,352 ops/sec ±0.67% (82 runs sampled)
   * Post:
   *   array literal      x 22,479,650 ops/sec ±0.96% (81 runs sampled)
   */
  if (
    Array.isArray(obj) &&
    (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))
  ) {
    return 'Array';
  }

  // Not caching existence of `window` and related properties due to potential
  // for `window` to be unset before tests in quasi-browser environments.
  if (typeof window === 'object' && window !== null) {
    /* ! Spec Conformance
     * (https://html.spec.whatwg.org/multipage/browsers.html#location)
     * WhatWG HTML$7.7.3 - The `Location` interface
     * Test: `Object.prototype.toString.call(window.location)``
     *  - IE <=11 === "[object Object]"
     *  - IE Edge <=13 === "[object Object]"
     */
    if (typeof window.location === 'object' && obj === window.location) {
      return 'Location';
    }

    /* ! Spec Conformance
     * (https://html.spec.whatwg.org/#document)
     * WhatWG HTML$3.1.1 - The `Document` object
     * Note: Most browsers currently adher to the W3C DOM Level 2 spec
     *       (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)
     *       which suggests that browsers should use HTMLTableCellElement for
     *       both TD and TH elements. WhatWG separates these.
     *       WhatWG HTML states:
     *         > For historical reasons, Window objects must also have a
     *         > writable, configurable, non-enumerable property named
     *         > HTMLDocument whose value is the Document interface object.
     * Test: `Object.prototype.toString.call(document)``
     *  - Chrome === "[object HTMLDocument]"
     *  - Firefox === "[object HTMLDocument]"
     *  - Safari === "[object HTMLDocument]"
     *  - IE <=10 === "[object Document]"
     *  - IE 11 === "[object HTMLDocument]"
     *  - IE Edge <=13 === "[object HTMLDocument]"
     */
    if (typeof window.document === 'object' && obj === window.document) {
      return 'Document';
    }

    if (typeof window.navigator === 'object') {
      /* ! Spec Conformance
       * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)
       * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray
       * Test: `Object.prototype.toString.call(navigator.mimeTypes)``
       *  - IE <=10 === "[object MSMimeTypesCollection]"
       */
      if (typeof window.navigator.mimeTypes === 'object' &&
          obj === window.navigator.mimeTypes) {
        return 'MimeTypeArray';
      }

      /* ! Spec Conformance
       * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
       * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray
       * Test: `Object.prototype.toString.call(navigator.plugins)``
       *  - IE <=10 === "[object MSPluginsCollection]"
       */
      if (typeof window.navigator.plugins === 'object' &&
          obj === window.navigator.plugins) {
        return 'PluginArray';
      }
    }

    if ((typeof window.HTMLElement === 'function' ||
        typeof window.HTMLElement === 'object') &&
        obj instanceof window.HTMLElement) {
      /* ! Spec Conformance
      * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
      * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`
      * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``
      *  - IE <=10 === "[object HTMLBlockElement]"
      */
      if (obj.tagName === 'BLOCKQUOTE') {
        return 'HTMLQuoteElement';
      }

      /* ! Spec Conformance
       * (https://html.spec.whatwg.org/#htmltabledatacellelement)
       * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`
       * Note: Most browsers currently adher to the W3C DOM Level 2 spec
       *       (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
       *       which suggests that browsers should use HTMLTableCellElement for
       *       both TD and TH elements. WhatWG separates these.
       * Test: Object.prototype.toString.call(document.createElement('td'))
       *  - Chrome === "[object HTMLTableCellElement]"
       *  - Firefox === "[object HTMLTableCellElement]"
       *  - Safari === "[object HTMLTableCellElement]"
       */
      if (obj.tagName === 'TD') {
        return 'HTMLTableDataCellElement';
      }

      /* ! Spec Conformance
       * (https://html.spec.whatwg.org/#htmltableheadercellelement)
       * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`
       * Note: Most browsers currently adher to the W3C DOM Level 2 spec
       *       (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
       *       which suggests that browsers should use HTMLTableCellElement for
       *       both TD and TH elements. WhatWG separates these.
       * Test: Object.prototype.toString.call(document.createElement('th'))
       *  - Chrome === "[object HTMLTableCellElement]"
       *  - Firefox === "[object HTMLTableCellElement]"
       *  - Safari === "[object HTMLTableCellElement]"
       */
      if (obj.tagName === 'TH') {
        return 'HTMLTableHeaderCellElement';
      }
    }
  }

  /* ! Speed optimisation
  * Pre:
  *   Float64Array       x 625,644 ops/sec ±1.58% (80 runs sampled)
  *   Float32Array       x 1,279,852 ops/sec ±2.91% (77 runs sampled)
  *   Uint32Array        x 1,178,185 ops/sec ±1.95% (83 runs sampled)
  *   Uint16Array        x 1,008,380 ops/sec ±2.25% (80 runs sampled)
  *   Uint8Array         x 1,128,040 ops/sec ±2.11% (81 runs sampled)
  *   Int32Array         x 1,170,119 ops/sec ±2.88% (80 runs sampled)
  *   Int16Array         x 1,176,348 ops/sec ±5.79% (86 runs sampled)
  *   Int8Array          x 1,058,707 ops/sec ±4.94% (77 runs sampled)
  *   Uint8ClampedArray  x 1,110,633 ops/sec ±4.20% (80 runs sampled)
  * Post:
  *   Float64Array       x 7,105,671 ops/sec ±13.47% (64 runs sampled)
  *   Float32Array       x 5,887,912 ops/sec ±1.46% (82 runs sampled)
  *   Uint32Array        x 6,491,661 ops/sec ±1.76% (79 runs sampled)
  *   Uint16Array        x 6,559,795 ops/sec ±1.67% (82 runs sampled)
  *   Uint8Array         x 6,463,966 ops/sec ±1.43% (85 runs sampled)
  *   Int32Array         x 5,641,841 ops/sec ±3.49% (81 runs sampled)
  *   Int16Array         x 6,583,511 ops/sec ±1.98% (80 runs sampled)
  *   Int8Array          x 6,606,078 ops/sec ±1.74% (81 runs sampled)
  *   Uint8ClampedArray  x 6,602,224 ops/sec ±1.77% (83 runs sampled)
  */
  var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);
  if (typeof stringTag === 'string') {
    return stringTag;
  }

  var objPrototype = Object.getPrototypeOf(obj);
  /* ! Speed optimisation
  * Pre:
  *   regex literal      x 1,772,385 ops/sec ±1.85% (77 runs sampled)
  *   regex constructor  x 2,143,634 ops/sec ±2.46% (78 runs sampled)
  * Post:
  *   regex literal      x 3,928,009 ops/sec ±0.65% (78 runs sampled)
  *   regex constructor  x 3,931,108 ops/sec ±0.58% (84 runs sampled)
  */
  if (objPrototype === RegExp.prototype) {
    return 'RegExp';
  }

  /* ! Speed optimisation
  * Pre:
  *   date               x 2,130,074 ops/sec ±4.42% (68 runs sampled)
  * Post:
  *   date               x 3,953,779 ops/sec ±1.35% (77 runs sampled)
  */
  if (objPrototype === Date.prototype) {
    return 'Date';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)
   * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise":
   * Test: `Object.prototype.toString.call(Promise.resolve())``
   *  - Chrome <=47 === "[object Object]"
   *  - Edge <=20 === "[object Object]"
   *  - Firefox 29-Latest === "[object Promise]"
   *  - Safari 7.1-Latest === "[object Promise]"
   */
  if (promiseExists && objPrototype === Promise.prototype) {
    return 'Promise';
  }

  /* ! Speed optimisation
  * Pre:
  *   set                x 2,222,186 ops/sec ±1.31% (82 runs sampled)
  * Post:
  *   set                x 4,545,879 ops/sec ±1.13% (83 runs sampled)
  */
  if (setExists && objPrototype === Set.prototype) {
    return 'Set';
  }

  /* ! Speed optimisation
  * Pre:
  *   map                x 2,396,842 ops/sec ±1.59% (81 runs sampled)
  * Post:
  *   map                x 4,183,945 ops/sec ±6.59% (82 runs sampled)
  */
  if (mapExists && objPrototype === Map.prototype) {
    return 'Map';
  }

  /* ! Speed optimisation
  * Pre:
  *   weakset            x 1,323,220 ops/sec ±2.17% (76 runs sampled)
  * Post:
  *   weakset            x 4,237,510 ops/sec ±2.01% (77 runs sampled)
  */
  if (weakSetExists && objPrototype === WeakSet.prototype) {
    return 'WeakSet';
  }

  /* ! Speed optimisation
  * Pre:
  *   weakmap            x 1,500,260 ops/sec ±2.02% (78 runs sampled)
  * Post:
  *   weakmap            x 3,881,384 ops/sec ±1.45% (82 runs sampled)
  */
  if (weakMapExists && objPrototype === WeakMap.prototype) {
    return 'WeakMap';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)
   * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView":
   * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``
   *  - Edge <=13 === "[object Object]"
   */
  if (dataViewExists && objPrototype === DataView.prototype) {
    return 'DataView';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)
   * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator":
   * Test: `Object.prototype.toString.call(new Map().entries())``
   *  - Edge <=13 === "[object Object]"
   */
  if (mapExists && objPrototype === mapIteratorPrototype) {
    return 'Map Iterator';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)
   * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator":
   * Test: `Object.prototype.toString.call(new Set().entries())``
   *  - Edge <=13 === "[object Object]"
   */
  if (setExists && objPrototype === setIteratorPrototype) {
    return 'Set Iterator';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)
   * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator":
   * Test: `Object.prototype.toString.call([][Symbol.iterator]())``
   *  - Edge <=13 === "[object Object]"
   */
  if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {
    return 'Array Iterator';
  }

  /* ! Spec Conformance
   * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)
   * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator":
   * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``
   *  - Edge <=13 === "[object Object]"
   */
  if (stringIteratorExists && objPrototype === stringIteratorPrototype) {
    return 'String Iterator';
  }

  /* ! Speed optimisation
  * Pre:
  *   object from null   x 2,424,320 ops/sec ±1.67% (76 runs sampled)
  * Post:
  *   object from null   x 5,838,000 ops/sec ±0.99% (84 runs sampled)
  */
  if (objPrototype === null) {
    return 'Object';
  }

  return Object
    .prototype
    .toString
    .call(obj)
    .slice(toStringLeftSliceLength, toStringRightSliceLength);
}

return typeDetect;

})));


/***/ }),
/* 245 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/utf8js v2.1.2 by @mathias */
;(function(root) {

	// Detect free variables `exports`
	var freeExports = typeof exports == 'object' && exports;

	// Detect free variable `module`
	var freeModule = typeof module == 'object' && module &&
		module.exports == freeExports && module;

	// Detect free variable `global`, from Node.js or Browserified code,
	// and use it as `root`
	var freeGlobal = typeof global == 'object' && global;
	if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
		root = freeGlobal;
	}

	/*--------------------------------------------------------------------------*/

	var stringFromCharCode = String.fromCharCode;

	// Taken from https://mths.be/punycode
	function ucs2decode(string) {
		var output = [];
		var counter = 0;
		var length = string.length;
		var value;
		var extra;
		while (counter < length) {
			value = string.charCodeAt(counter++);
			if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
				// high surrogate, and there is a next character
				extra = string.charCodeAt(counter++);
				if ((extra & 0xFC00) == 0xDC00) { // low surrogate
					output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
				} else {
					// unmatched surrogate; only append this code unit, in case the next
					// code unit is the high surrogate of a surrogate pair
					output.push(value);
					counter--;
				}
			} else {
				output.push(value);
			}
		}
		return output;
	}

	// Taken from https://mths.be/punycode
	function ucs2encode(array) {
		var length = array.length;
		var index = -1;
		var value;
		var output = '';
		while (++index < length) {
			value = array[index];
			if (value > 0xFFFF) {
				value -= 0x10000;
				output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
				value = 0xDC00 | value & 0x3FF;
			}
			output += stringFromCharCode(value);
		}
		return output;
	}

	function checkScalarValue(codePoint) {
		if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
			throw Error(
				'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
				' is not a scalar value'
			);
		}
	}
	/*--------------------------------------------------------------------------*/

	function createByte(codePoint, shift) {
		return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
	}

	function encodeCodePoint(codePoint) {
		if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
			return stringFromCharCode(codePoint);
		}
		var symbol = '';
		if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
			symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
		}
		else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
			checkScalarValue(codePoint);
			symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
			symbol += createByte(codePoint, 6);
		}
		else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
			symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
			symbol += createByte(codePoint, 12);
			symbol += createByte(codePoint, 6);
		}
		symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
		return symbol;
	}

	function utf8encode(string) {
		var codePoints = ucs2decode(string);
		var length = codePoints.length;
		var index = -1;
		var codePoint;
		var byteString = '';
		while (++index < length) {
			codePoint = codePoints[index];
			byteString += encodeCodePoint(codePoint);
		}
		return byteString;
	}

	/*--------------------------------------------------------------------------*/

	function readContinuationByte() {
		if (byteIndex >= byteCount) {
			throw Error('Invalid byte index');
		}

		var continuationByte = byteArray[byteIndex] & 0xFF;
		byteIndex++;

		if ((continuationByte & 0xC0) == 0x80) {
			return continuationByte & 0x3F;
		}

		// If we end up here, it’s not a continuation byte
		throw Error('Invalid continuation byte');
	}

	function decodeSymbol() {
		var byte1;
		var byte2;
		var byte3;
		var byte4;
		var codePoint;

		if (byteIndex > byteCount) {
			throw Error('Invalid byte index');
		}

		if (byteIndex == byteCount) {
			return false;
		}

		// Read first byte
		byte1 = byteArray[byteIndex] & 0xFF;
		byteIndex++;

		// 1-byte sequence (no continuation bytes)
		if ((byte1 & 0x80) == 0) {
			return byte1;
		}

		// 2-byte sequence
		if ((byte1 & 0xE0) == 0xC0) {
			byte2 = readContinuationByte();
			codePoint = ((byte1 & 0x1F) << 6) | byte2;
			if (codePoint >= 0x80) {
				return codePoint;
			} else {
				throw Error('Invalid continuation byte');
			}
		}

		// 3-byte sequence (may include unpaired surrogates)
		if ((byte1 & 0xF0) == 0xE0) {
			byte2 = readContinuationByte();
			byte3 = readContinuationByte();
			codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
			if (codePoint >= 0x0800) {
				checkScalarValue(codePoint);
				return codePoint;
			} else {
				throw Error('Invalid continuation byte');
			}
		}

		// 4-byte sequence
		if ((byte1 & 0xF8) == 0xF0) {
			byte2 = readContinuationByte();
			byte3 = readContinuationByte();
			byte4 = readContinuationByte();
			codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
				(byte3 << 0x06) | byte4;
			if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
				return codePoint;
			}
		}

		throw Error('Invalid UTF-8 detected');
	}

	var byteArray;
	var byteCount;
	var byteIndex;
	function utf8decode(byteString) {
		byteArray = ucs2decode(byteString);
		byteCount = byteArray.length;
		byteIndex = 0;
		var codePoints = [];
		var tmp;
		while ((tmp = decodeSymbol()) !== false) {
			codePoints.push(tmp);
		}
		return ucs2encode(codePoints);
	}

	/*--------------------------------------------------------------------------*/

	var utf8 = {
		'version': '2.1.2',
		'encode': utf8encode,
		'decode': utf8decode
	};

	// Some AMD build optimizers, like r.js, check for specific condition patterns
	// like the following:
	if (
		true
	) {
		!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
			return utf8;
		}.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}	else if (freeExports && !freeExports.nodeType) {
		if (freeModule) { // in Node.js or RingoJS v0.8.0+
			freeModule.exports = utf8;
		} else { // in Narwhal or RingoJS v0.7.0-
			var object = {};
			var hasOwnProperty = object.hasOwnProperty;
			for (var key in utf8) {
				hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);
			}
		}
	} else { // in Rhino or a web browser
		root.utf8 = utf8;
	}

}(this));

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 246 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(1139);
var TruffleError = __webpack_require__(23);
var inherits = __webpack_require__(2).inherits;

inherits(CompileError, TruffleError);

function CompileError(message) {
  // Note we trim() because solc likes to add extra whitespace.
  var fancy_message = message.trim() + "\n" + colors.red("Compilation failed. See above.");
  var normal_message = message.trim();

  CompileError.super_.call(this, normal_message);
  this.message = fancy_message;
};

module.exports = CompileError;


/***/ }),
/* 247 */
/***/ (function(module, exports, __webpack_require__) {

var Profiler = __webpack_require__(175);
var OS = __webpack_require__(5);

var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var async = __webpack_require__(28);
var Profiler = __webpack_require__(175);
var CompileError = __webpack_require__(246);
var expect = __webpack_require__(21);
var find_contracts = __webpack_require__(139);
var Config = __webpack_require__(9);
var debug = __webpack_require__(443)("compile");

// Most basic of the compile commands. Takes a hash of sources, where
// the keys are file or module paths and the values are the bodies of
// the contracts. Does not evaulate dependencies that aren't already given.
//
// Default options:
// {
//   strict: false,
//   quiet: false,
//   logger: console
// }
var compile = function(sources, options, callback) {
  if (typeof options == "function") {
    callback = options;
    options = {};
  }

  if (options.logger == null) {
    options.logger = console;
  }

  expect.options(options, [
    "contracts_directory",
    "solc"
  ]);

  // Load solc module only when compilation is actually required.
  var solc = __webpack_require__(473);
  // Clean up after solc.
  var listeners = process.listeners("uncaughtException");
  var solc_listener = listeners[listeners.length - 1];

  if (solc_listener) {
    process.removeListener("uncaughtException", solc_listener);
  }


  // Ensure sources have operating system independent paths
  // i.e., convert backslashes to forward slashes; things like C: are left intact.
  var operatingSystemIndependentSources = {};
  var originalPathMappings = {};

  Object.keys(sources).forEach(function(source) {
    // Turn all backslashes into forward slashes
    var replacement = source.replace(/\\/g, "/");

    // Turn G:/.../ into /G/.../ for Windows
    if (replacement.length >= 2 && replacement[1] == ":") {
      replacement = "/" + replacement;
      replacement = replacement.replace(":", "");
    }

    // Save the result
    operatingSystemIndependentSources[replacement] = sources[source];

    // Map the replacement back to the original source path.
    originalPathMappings[replacement] = source;
  });

  var solcStandardInput = {
    language: "Solidity",
    sources: {},
    settings: {
      evmVersion: options.solc.evmVersion,
      optimizer: options.solc.optimizer,
      outputSelection: {
        "*": {
          "": [
            "legacyAST",
            "ast"
          ],
          "*": [
            "abi",
            "evm.bytecode.object",
            "evm.bytecode.sourceMap",
            "evm.deployedBytecode.object",
            "evm.deployedBytecode.sourceMap"
          ]
        },
      }
    }
  };

  // Nothing to compile? Bail.
  if (Object.keys(sources).length == 0) {
    return callback(null, [], []);
  }

  Object.keys(operatingSystemIndependentSources).forEach(function(file_path) {
    solcStandardInput.sources[file_path] = {
      content: operatingSystemIndependentSources[file_path]
    }
  });

  var result = solc.compileStandard(JSON.stringify(solcStandardInput));

  var standardOutput = JSON.parse(result);

  var errors = standardOutput.errors || [];
  var warnings = [];

  if (options.strict !== true) {
    warnings = errors.filter(function(error) {
      return error.severity == "warning";
    });

    errors = errors.filter(function(error) {
      return error.severity != "warning";
    });

    if (options.quiet !== true && warnings.length > 0) {
      options.logger.log(OS.EOL + "Compilation warnings encountered:" + OS.EOL);
      options.logger.log(warnings.map(function(warning) {
        return warning.formattedMessage;
      }).join());
    }
  }

  if (errors.length > 0) {
    options.logger.log("");
    return callback(new CompileError(standardOutput.errors.map(function(error) {
      return error.formattedMessage;
    }).join()));
  }

  var contracts = standardOutput.contracts;

  var files = [];
  Object.keys(standardOutput.sources).forEach(function(filename) {
    var source = standardOutput.sources[filename];
    files[source.id] = originalPathMappings[filename];
  });

  var returnVal = {};

  // This block has comments in it as it's being prepared for solc > 0.4.10
  Object.keys(contracts).forEach(function(source_path) {
    var files_contracts = contracts[source_path];

    Object.keys(files_contracts).forEach(function(contract_name) {
      var contract = files_contracts[contract_name];

      var contract_definition = {
        contract_name: contract_name,
        sourcePath: originalPathMappings[source_path], // Save original source path, not modified ones
        source: operatingSystemIndependentSources[source_path],
        sourceMap: contract.evm.bytecode.sourceMap,
        deployedSourceMap: contract.evm.deployedBytecode.sourceMap,
        legacyAST: standardOutput.sources[source_path].legacyAST,
        ast: standardOutput.sources[source_path].ast,
        abi: contract.abi,
        bytecode: "0x" + contract.evm.bytecode.object,
        deployedBytecode: "0x" + contract.evm.deployedBytecode.object,
        unlinked_binary: "0x" + contract.evm.bytecode.object, // deprecated
        compiler: {
          "name": "solc",
          "version": solc.version()
        }
      }

      // Reorder ABI so functions are listed in the order they appear
      // in the source file. Solidity tests need to execute in their expected sequence.
      contract_definition.abi = orderABI(contract_definition);

      // Go through the link references and replace them with older-style
      // identifiers. We'll do this until we're ready to making a breaking
      // change to this code.
      Object.keys(contract.evm.bytecode.linkReferences).forEach(function(file_name) {
        var fileLinks = contract.evm.bytecode.linkReferences[file_name];

        Object.keys(fileLinks).forEach(function(library_name) {
          var linkReferences = fileLinks[library_name] || [];

          contract_definition.bytecode = replaceLinkReferences(contract_definition.bytecode, linkReferences, library_name);
          contract_definition.unlinked_binary = replaceLinkReferences(contract_definition.unlinked_binary, linkReferences, library_name);
        });
      });

      // Now for the deployed bytecode
      Object.keys(contract.evm.deployedBytecode.linkReferences).forEach(function(file_name) {
        var fileLinks = contract.evm.deployedBytecode.linkReferences[file_name];

        Object.keys(fileLinks).forEach(function(library_name) {
          var linkReferences = fileLinks[library_name] || [];

          contract_definition.deployedBytecode = replaceLinkReferences(contract_definition.deployedBytecode, linkReferences, library_name);
        });
      });

      returnVal[contract_name] = contract_definition;
    });
  });

  callback(null, returnVal, files);
};

function replaceLinkReferences(bytecode, linkReferences, libraryName) {
  var linkId = "__" + libraryName;

  while (linkId.length < 40) {
    linkId += "_";
  }

  linkReferences.forEach(function(ref) {
    // ref.start is a byte offset. Convert it to character offset.
    var start = (ref.start * 2) + 2;

    bytecode = bytecode.substring(0, start) + linkId + bytecode.substring(start + 40);
  });

  return bytecode;
};

function orderABI(contract){
  var contract_definition;
  var ordered_function_names = [];
  var ordered_functions = [];

  for (var i = 0; i < contract.legacyAST.children.length; i++) {
    var definition = contract.legacyAST.children[i];

    // AST can have multiple contract definitions, make sure we have the
    // one that matches our contract
    if (definition.name !== "ContractDefinition" ||
        definition.attributes.name !== contract.contract_name){
      continue;
    }

    contract_definition = definition;
    break;
  }

  if (!contract_definition) return contract.abi;
  if (!contract_definition.children) return contract.abi;

  contract_definition.children.forEach(function(child) {
    if (child.name == "FunctionDefinition") {
      ordered_function_names.push(child.attributes.name);
    }
  });

  // Put function names in a hash with their order, lowest first, for speed.
  var functions_to_remove = ordered_function_names.reduce(function(obj, value, index) {
    obj[value] = index;
    return obj;
  }, {});

  // Filter out functions from the abi
  var function_definitions = contract.abi.filter(function(item) {
    return functions_to_remove[item.name] != null;
  });

  // Sort removed function defintions
  function_definitions = function_definitions.sort(function(item_a, item_b) {
    var a = functions_to_remove[item_a.name];
    var b = functions_to_remove[item_b.name];

    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
  });

  // Create a new ABI, placing ordered functions at the end.
  var newABI = [];
  contract.abi.forEach(function(item) {
    if (functions_to_remove[item.name] != null) return;
    newABI.push(item);
  });

  // Now pop the ordered functions definitions on to the end of the abi..
  Array.prototype.push.apply(newABI, function_definitions);

  return newABI;
}


// contracts_directory: String. Directory where .sol files can be found.
// quiet: Boolean. Suppress output. Defaults to false.
// strict: Boolean. Return compiler warnings as errors. Defaults to false.
compile.all = function(options, callback) {
  var self = this;
  find_contracts(options.contracts_directory, function(err, files) {
    options.paths = files;
    compile.with_dependencies(options, callback);
  });
};

// contracts_directory: String. Directory where .sol files can be found.
// build_directory: String. Optional. Directory where .sol.js files can be found. Only required if `all` is false.
// all: Boolean. Compile all sources found. Defaults to true. If false, will compare sources against built files
//      in the build directory to see what needs to be compiled.
// quiet: Boolean. Suppress output. Defaults to false.
// strict: Boolean. Return compiler warnings as errors. Defaults to false.
compile.necessary = function(options, callback) {
  var self = this;
  options.logger = options.logger || console;

  Profiler.updated(options, function(err, updated) {
    if (err) return callback(err);

    if (updated.length == 0 && options.quiet != true) {
      return callback(null, [], {});
    }

    options.paths = updated;
    compile.with_dependencies(options, callback);
  });
};

compile.with_dependencies = function(options, callback) {
  options.logger = options.logger || console;
  options.contracts_directory = options.contracts_directory || process.cwd();

  expect.options(options, [
    "paths",
    "working_directory",
    "contracts_directory",
    "resolver"
  ]);

  var config = Config.default().merge(options);

  var self = this;
  Profiler.required_sources(config.with({
    paths: options.paths,
    base_path: options.contracts_directory,
    resolver: options.resolver
  }), function(err, result) {
    if (err) return callback(err);

    if (options.quiet != true) {
      Object.keys(result).sort().forEach(function(import_path) {
        var display_path = import_path;
        if (path.isAbsolute(import_path)) {
          display_path = "." + path.sep + path.relative(options.working_directory, import_path);
        }
        options.logger.log("Compiling " + display_path + "...");
      });
    }

    compile(result, options, callback);
  });
};

module.exports = compile;


/***/ }),
/* 248 */
/***/ (function(module, exports, __webpack_require__) {

var cpr = __webpack_require__(680);
var fs = __webpack_require__(1);
var _ = __webpack_require__(24);

var cpr_options = {
  deleteFirst: false,
  overwrite: false,
  confirm: true
};

// This module will copy a file or directory, and by default
// won't override individual files. If a file exists, it will
// simply move onto the next file.

var copy = function(from, to, extra_options, callback) {
  if (typeof extra_options == "function") {
    callback = extra_options;
    extra_options = {};
  }

  var options = _.merge(_.clone(cpr_options), extra_options);

  cpr(from, to, options, function(err, files) {
    var new_files = [];

    // Remove placeholders. Placeholders allow us to copy "empty" directories,
    // but lets NPM and git not ignore them.
    files = files || [];
    for (var file of files) {
      if (file.match(/.*PLACEHOLDER.*/) != null) {
        fs.unlinkSync(file);
        continue;
      }
      new_files.push(file);
    }

    callback(err, new_files);
  });
}

copy.file = function(from, to, callback) {
  var readStream = fs.createReadStream(from, "utf8");
  var writeStream = fs.createWriteStream(to, "utf8");

  readStream.on("error", function(err) {
    callback(err);
    callback = function() {};
  });

  writeStream.on("error", function(err) {
    callback(err);
    callback = function() {};
  });

  writeStream.on("finish", function() {
    callback();
  });

  readStream.pipe(writeStream);
};

module.exports = copy;


/***/ }),
/* 249 */
/***/ (function(module, exports, __webpack_require__) {

var IPC = __webpack_require__(179).IPC;
var path = __webpack_require__(0);
var spawn = __webpack_require__(39).spawn;
var debug = __webpack_require__(142);

var Develop = {
  start: function(ipcNetwork, options, callback) {
    options = options || {};

    var chainPath;

    // The path to the dev env process depends on whether or not
    // we're running in the bundled version. If not, use chain.js
    // directly, otherwise let the bundle point at the bundled version.
    if (true) {
      // Remember: In the bundled version, __dirname refers to the
      // build directory where cli.bundled.js and cli.chain.js live.
      chainPath = path.join(__dirname, "chain.bundled.js");
    } else {
      chainPath = path.join(__dirname, "../", "chain.js");
    }

    var cmd = spawn("node", [chainPath, ipcNetwork, JSON.stringify(options)], {
      detached: true,
      stdio: 'ignore'
    });

    callback();
  },

  connect: function(options, callback) {
    var debugServer = debug('develop:ipc:server');
    var debugClient = debug('develop:ipc:client');
    var debugRPC = debug('develop:testrpc');

    if (typeof options === 'function') {
      callback = options;
      options = {};
    }

    options.retry = options.retry || false;
    options.log = options.log || false;
    options.network = options.network || "develop";
    var ipcNetwork = options.network;

    var ipc = new IPC();
    ipc.config.appspace = "truffle.";

    // set connectPath explicitly
    var dirname = ipc.config.socketRoot;
    var basename = `${ipc.config.appspace}${ipcNetwork}`;
    var connectPath = path.join(dirname, basename);

    ipc.config.silent = !debugClient.enabled;
    ipc.config.logger = debugClient;

    var loggers = {};

    if (debugServer.enabled) {
      loggers.ipc = debugServer;
    }

    if (options.log) {
      debugRPC.enabled = true;

      loggers.testrpc = function() {
        // HACK-y: replace `{}` that is getting logged instead of ""
        var args = Array.prototype.slice.call(arguments);
        if (args.length === 1 &&
              typeof args[0] === "object" &&
              Object.keys(args[0]).length === 0)
        {
          args[0] = "";
        }

        debugRPC.apply(undefined, args);
      }
    }

    if (!options.retry) {
      ipc.config.maxRetries = 0;
    }

    var disconnect = function() {
      ipc.disconnect(ipcNetwork);
    }

    ipc.connectTo(ipcNetwork, connectPath, function() {
      ipc.of[ipcNetwork].on('destroy', function() {
        callback(new Error("IPC connection destroyed"));
      });

      ipc.of[ipcNetwork].on('truffle.ready', function() {
        callback(null, disconnect);
      });

      Object.keys(loggers).forEach(function(key) {
        var log = loggers[key];
        if (log) {
          var message = `truffle.${key}.log`;
          ipc.of[ipcNetwork].on(message, log);
        }
      });
    });
  },

  connectOrStart: function(options, testrpcOptions, callback) {
    var self = this;

    options.retry = false;

    var ipcNetwork = options.network || "develop";

    var connectedAlready = false;

    this.connect(options, function(error, disconnect) {
      if (error) {
        self.start(ipcNetwork, testrpcOptions, function() {
          options.retry = true;
          self.connect(options, function(error, disconnect) {
            if (connectedAlready) return;

            connectedAlready = true;
            callback(true, disconnect);
          });
        });
      } else {
        connectedAlready = true;
        callback(false, disconnect);
      }
    });
  }
};

module.exports = Develop;


/***/ }),
/* 250 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(140);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 251 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(140);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 252 */
/***/ (function(module, exports) {

module.exports = function (original, filter) {
  const obj = {}
  filter = filter || function (k, v) { return true }
  Object.keys(original || {}).forEach(function (key) {
    if (filter(key, original[key])) {
      obj[key] = original[key]
    }
  })
  return obj
}


/***/ }),
/* 253 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);
var dir = __webpack_require__(98);
var path = __webpack_require__(0);
var ResolverIntercept = __webpack_require__(1221);
var Require = __webpack_require__(466);
var async = __webpack_require__(28);
var Web3 = __webpack_require__(25);
var expect = __webpack_require__(21);
var Deployer = __webpack_require__(464);

function Migration(file) {
  this.file = path.resolve(file);
  this.number = parseInt(path.basename(file));
};

Migration.prototype.run = function(options, callback) {
  var self = this;
  var logger = options.logger;

  var web3 = new Web3();
  web3.setProvider(options.provider);

  logger.log("Running migration: " + path.relative(options.migrations_directory, this.file));

  var resolver = new ResolverIntercept(options.resolver);

  // Initial context.
  var context = {
    web3: web3
  };

  var deployer = new Deployer({
    logger: {
      log: function(msg) {
        logger.log("  " + msg);
      }
    },
    network: options.network,
    network_id: options.network_id,
    provider: options.provider,
    basePath: path.dirname(this.file)
  });

  var finish = function(err) {
    if (err) return callback(err);
    deployer.start().then(function() {
      if (options.save === false) return;

      var Migrations = resolver.require("./Migrations.sol");

      if (Migrations && Migrations.isDeployed()) {
        logger.log("Saving successful migration to network...");
        return Migrations.deployed().then(function(migrations) {
          return migrations.setCompleted(self.number);
        });
      }
    }).then(function() {
      if (options.save === false) return;
      logger.log("Saving artifacts...");
      return options.artifactor.saveAll(resolver.contracts());
    }).then(function() {
      // Use process.nextTicK() to prevent errors thrown in the callback from triggering the below catch()
      process.nextTick(callback);
    }).catch(function(e) {
      logger.log("Error encountered, bailing. Network state unknown. Review successful transactions manually.");
      callback(e);
    });
  };

  web3.eth.getAccounts(function(err, accounts) {
    if (err) return callback(err);

    Require.file({
      file: self.file,
      context: context,
      resolver: resolver,
      args: [deployer],
    }, function(err, fn) {
      if (!fn || !fn.length || fn.length == 0) {
        return callback(new Error("Migration " + self.file + " invalid or does not take any parameters"));
      }
      fn(deployer, options.network, accounts);
      finish();
    });
  });
};

var Migrate = {
  Migration: Migration,

  assemble: function(options, callback) {
    dir.files(options.migrations_directory, function(err, files) {
      if (err) return callback(err);

      options.allowed_extensions = options.allowed_extensions || /^\.(js|es6?)$/;

      var migrations = files.filter(function(file) {
        return isNaN(parseInt(path.basename(file))) == false;
      }).filter(function(file) {
        return path.extname(file).match(options.allowed_extensions) != null;
      }).map(function(file) {
        return new Migration(file, options.network);
      });

      // Make sure to sort the prefixes as numbers and not strings.
      migrations = migrations.sort(function(a, b) {
        if (a.number > b.number) {
          return 1;
        } else if (a.number < b.number) {
          return -1;
        }
        return 0;
      });

      callback(null, migrations);
    });
  },

  run: function(options, callback) {
    var self = this;

    expect.options(options, [
      "working_directory",
      "migrations_directory",
      "contracts_build_directory",
      "provider",
      "artifactor",
      "resolver",
      "network",
      "network_id",
      "logger",
      "from", // address doing deployment
    ]);

    if (options.reset == true) {
      return this.runAll(options, callback);
    }

    self.lastCompletedMigration(options, function(err, last_migration) {
      if (err) return callback(err);

      // Don't rerun the last completed migration.
      self.runFrom(last_migration + 1, options, callback);
    });
  },

  runFrom: function(number, options, callback) {
    var self = this;

    this.assemble(options, function(err, migrations) {
      if (err) return callback(err);

      while (migrations.length > 0) {
        if (migrations[0].number >= number) {
          break;
        }

        migrations.shift();
      }

      if (options.to) {
        migrations = migrations.filter(function(migration) {
          return migration.number <= options.to;
        });
      }

      self.runMigrations(migrations, options, callback);
    });
  },

  runAll: function(options, callback) {
    this.runFrom(0, options, callback);
  },

  runMigrations: function(migrations, options, callback) {
    // Perform a shallow clone of the options object
    // so that we can override the provider option without
    // changing the original options object passed in.
    var clone = {};

    Object.keys(options).forEach(function(key) {
      clone[key] = options[key];
    });

    if (options.quiet) {
      clone.logger = {
        log: function() {}
      }
    };

    clone.provider = this.wrapProvider(options.provider, clone.logger);
    clone.resolver = this.wrapResolver(options.resolver, clone.provider);

    async.eachSeries(migrations, function(migration, finished) {
      migration.run(clone, function(err) {
        if (err) return finished(err);
        finished();
      });
    }, callback);
  },

  wrapProvider: function(provider, logger) {
    var printTransaction = function(tx_hash) {
      logger.log("  ... " + tx_hash);
    };

    return {
      send: function(payload) {
        var result = provider.send(payload);

        if (payload.method == "eth_sendTransaction") {
          printTransaction(result.result);
        }

        return result;
      },
      sendAsync: function(payload, callback) {
        provider.sendAsync(payload, function(err, result) {
          if (err) return callback(err);

          if (payload.method == "eth_sendTransaction") {
            printTransaction(result.result);
          }

          callback(err, result);
        });
      }
    };
  },

  wrapResolver: function(resolver, provider) {
    return {
      require: function(import_path, search_path) {
        var abstraction = resolver.require(import_path, search_path);

        abstraction.setProvider(provider);

        return abstraction;
      },
      resolve: resolver.resolve
    }
  },

  lastCompletedMigration: function(options, callback) {
    var Migrations;

    try {
      Migrations = options.resolver.require("Migrations");
    } catch (e) {
      return callback(new Error("Could not find built Migrations contract: " + e.message));
    }

    if (Migrations.isDeployed() == false) {
      return callback(null, 0);
    }

    var migrations = Migrations.deployed();

    Migrations.deployed().then(function(migrations) {
      // Two possible Migrations.sol's (lintable/unlintable)
      return (migrations.last_completed_migration)
        ? migrations.last_completed_migration.call()
        : migrations.lastCompletedMigration.call();

    }).then(function(completed_migration) {
      callback(null, completed_migration.toNumber());
    }).catch(callback);
  },

  needsMigrating: function(options, callback) {
    var self = this;

    if (options.reset == true) {
      return callback(null, true);
    }

    this.lastCompletedMigration(options, function(err, number) {
      if (err) return callback(err);

      self.assemble(options, function(err, migrations) {
        if (err) return callback(err);

        while (migrations.length > 0) {
          if (migrations[0].number >= number) {
            break;
          }

          migrations.shift();
        }

        callback(null, migrations.length > 1);
      });
    });
  }
};

module.exports = Migrate;


/***/ }),
/* 254 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(25);

var wrapper = __webpack_require__(1223);

module.exports = {
  wrap: function(provider, options) {
    return wrapper.wrap(provider, options);
  },

  create: function(options) {
    var provider;

    if (options.provider && typeof options.provider == "function") {
      provider = options.provider();
    } else if (options.provider) {
      provider = options.provider;
    } else {
      provider = new Web3.providers.HttpProvider("http://" + options.host + ":" + options.port);
    }

    return this.wrap(provider, options);
  },

  test_connection: function(provider, callback) {
    var web3 = new Web3();
    web3.setProvider(provider);
    web3.eth.getCoinbase(function(error, coinbase) {
      if (error != null) {
        error = new Error("Could not connect to your RPC client. Please check your RPC configuration.");
      }

      callback(error, coinbase)
    });
  }
};


/***/ }),
/* 255 */
/***/ (function(module, exports) {

var provision = function(abstraction, options) {
  var self = this;

  if (options.provider) {
    abstraction.setProvider(options.provider);
  }

  if (options.network_id) {
    abstraction.setNetwork(options.network_id);
  }

  ["from", "gas", "gasPrice"].forEach(function(key) {
    if (options[key]) {
      var obj = {};
      obj[key] = options[key];
      abstraction.defaults(obj);
    }
  });

  return abstraction;
};

module.exports = provision;


/***/ }),
/* 256 */
/***/ (function(module, exports) {

module.exports = require("dgram");

/***/ }),
/* 257 */
/***/ (function(module, exports) {

module.exports = require("original-require");

/***/ }),
/* 258 */
/***/ (function(module, exports) {

module.exports = require("timers");

/***/ }),
/* 259 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1066).install();


/***/ }),
/* 260 */
/***/ (function(module, exports, __webpack_require__) {

var TruffleError = __webpack_require__(23);
var inherits = __webpack_require__(2).inherits;

inherits(TaskError, TruffleError);

function TaskError(message) {
  TaskError.super_.call(this, message);
};

module.exports = TaskError;


/***/ }),
/* 261 */
/***/ (function(module, exports, __webpack_require__) {

var pkg = __webpack_require__(1243);
var solcpkg = __webpack_require__(1228);

var bundle_version = null;

// NOTE: Webpack will replace BUNDLE_VERSION with a string.
if (true) {
  bundle_version = "4.1.15";
}

module.exports = {
  core: pkg.version,
  bundle: bundle_version,
  solc: solcpkg.version
};


/***/ }),
/* 262 */
/***/ (function(module, exports, __webpack_require__) {

exports.EntryHeader = __webpack_require__(516);
exports.MainHeader = __webpack_require__(517);


/***/ }),
/* 263 */
/***/ (function(module, exports) {

module.exports = {
    /* The local file header */
    LOCHDR           : 30, // LOC header size
    LOCSIG           : 0x04034b50, // "PK\003\004"
    LOCVER           : 4,	// version needed to extract
    LOCFLG           : 6, // general purpose bit flag
    LOCHOW           : 8, // compression method
    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)
    LOCCRC           : 14, // uncompressed file crc-32 value
    LOCSIZ           : 18, // compressed size
    LOCLEN           : 22, // uncompressed size
    LOCNAM           : 26, // filename length
    LOCEXT           : 28, // extra field length

    /* The Data descriptor */
    EXTSIG           : 0x08074b50, // "PK\007\008"
    EXTHDR           : 16, // EXT header size
    EXTCRC           : 4, // uncompressed file crc-32 value
    EXTSIZ           : 8, // compressed size
    EXTLEN           : 12, // uncompressed size

    /* The central directory file header */
    CENHDR           : 46, // CEN header size
    CENSIG           : 0x02014b50, // "PK\001\002"
    CENVEM           : 4, // version made by
    CENVER           : 6, // version needed to extract
    CENFLG           : 8, // encrypt, decrypt flags
    CENHOW           : 10, // compression method
    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)
    CENCRC           : 16, // uncompressed file crc-32 value
    CENSIZ           : 20, // compressed size
    CENLEN           : 24, // uncompressed size
    CENNAM           : 28, // filename length
    CENEXT           : 30, // extra field length
    CENCOM           : 32, // file comment length
    CENDSK           : 34, // volume number start
    CENATT           : 36, // internal file attributes
    CENATX           : 38, // external file attributes (host system dependent)
    CENOFF           : 42, // LOC header offset

    /* The entries in the end of central directory */
    ENDHDR           : 22, // END header size
    ENDSIG           : 0x06054b50, // "PK\005\006"
    ENDSUB           : 8, // number of entries on this disk
    ENDTOT           : 10, // total number of entries
    ENDSIZ           : 12, // central directory size in bytes
    ENDOFF           : 16, // offset of first CEN header
    ENDCOM           : 20, // zip file comment length

    /* Compression methods */
    STORED           : 0, // no compression
    SHRUNK           : 1, // shrunk
    REDUCED1         : 2, // reduced with compression factor 1
    REDUCED2         : 3, // reduced with compression factor 2
    REDUCED3         : 4, // reduced with compression factor 3
    REDUCED4         : 5, // reduced with compression factor 4
    IMPLODED         : 6, // imploded
    // 7 reserved
    DEFLATED         : 8, // deflated
    ENHANCED_DEFLATED: 9, // enhanced deflated
    PKWARE           : 10,// PKWare DCL imploded
    // 11 reserved
    BZIP2            : 12, //  compressed using BZIP2
    // 13 reserved
    LZMA             : 14, // LZMA
    // 15-17 reserved
    IBM_TERSE        : 18, // compressed using IBM TERSE
    IBM_LZ77         : 19, //IBM LZ77 z

    /* General purpose bit flag */
    FLG_ENC          : 0,  // encripted file
    FLG_COMP1        : 1,  // compression option
    FLG_COMP2        : 2,  // compression option
    FLG_DESC         : 4,  // data descriptor
    FLG_ENH          : 8,  // enhanced deflation
    FLG_STR          : 16, // strong encryption
    FLG_LNG          : 1024, // language encoding
    FLG_MSK          : 4096, // mask header values

    /* Load type */
    FILE             : 0,
    BUFFER           : 1,
    NONE             : 2,

    /* 4.5 Extensible data fields */
    EF_ID            : 0,
    EF_SIZE          : 2,

    /* Header IDs */
    ID_ZIP64         : 0x0001,
    ID_AVINFO        : 0x0007,
    ID_PFS           : 0x0008,
    ID_OS2           : 0x0009,
    ID_NTFS          : 0x000a,
    ID_OPENVMS       : 0x000c,
    ID_UNIX          : 0x000d,
    ID_FORK          : 0x000e,
    ID_PATCH         : 0x000f,
    ID_X509_PKCS7    : 0x0014,
    ID_X509_CERTID_F : 0x0015,
    ID_X509_CERTID_C : 0x0016,
    ID_STRONGENC     : 0x0017,
    ID_RECORD_MGT    : 0x0018,
    ID_X509_PKCS7_RL : 0x0019,
    ID_IBM1          : 0x0065,
    ID_IBM2          : 0x0066,
    ID_POSZIP        : 0x4690,

    EF_ZIP64_OR_32   : 0xffffffff,
    EF_ZIP64_OR_16   : 0xffff,
    EF_ZIP64_SUNCOMP : 0,
    EF_ZIP64_SCOMP   : 8,
    EF_ZIP64_RHO     : 16,
    EF_ZIP64_DSN     : 24
};


/***/ }),
/* 264 */
/***/ (function(module, exports) {

module.exports = {
    /* Header error messages */
    "INVALID_LOC" : "Invalid LOC header (bad signature)",
    "INVALID_CEN" : "Invalid CEN header (bad signature)",
    "INVALID_END" : "Invalid END header (bad signature)",

    /* ZipEntry error messages*/
    "NO_DATA" : "Nothing to decompress",
    "BAD_CRC" : "CRC32 checksum failed",
    "FILE_IN_THE_WAY" : "There is a file in the way: %s",
    "UNKNOWN_METHOD" : "Invalid/unsupported compression method",

    /* Inflater error messages */
    "AVAIL_DATA" : "inflate::Available inflate data did not terminate",
    "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block",
    "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes",
    "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths",
    "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length",
    "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete",
    "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths",
    "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths",
    "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement",
    "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)",

    /* ADM-ZIP error messages */
    "CANT_EXTRACT_FILE" : "Could not extract the file",
    "CANT_OVERRIDE" : "Target file already exists",
    "NO_ZIP" : "No zip file was loaded",
    "NO_ENTRY" : "Entry doesn't exist",
    "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content",
    "FILE_NOT_FOUND" : "File not found: %s",
    "NOT_IMPLEMENTED" : "Not implemented",
    "INVALID_FILENAME" : "Invalid filename",
    "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found"
};

/***/ }),
/* 265 */
/***/ (function(module, exports, __webpack_require__) {

var Utils = __webpack_require__(107),
    Headers = __webpack_require__(262),
    Constants = Utils.Constants,
    Methods = __webpack_require__(519);

module.exports = function (/*Buffer*/input) {

    var _entryHeader = new Headers.EntryHeader(),
        _entryName = Buffer.alloc(0),
        _comment = Buffer.alloc(0),
        _isDirectory = false,
        uncompressedData = null,
        _extra = Buffer.alloc(0);

    function getCompressedDataFromZip() {
        if (!input || !Buffer.isBuffer(input)) {
            return Buffer.alloc(0);
        }
        _entryHeader.loadDataHeaderFromBinary(input);
        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize)
    }

    function crc32OK(data) {
        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
        if ((_entryHeader.flags & 0x8) !== 0x8) {
           if (Utils.crc32(data) !== _entryHeader.crc) {
               return false;
           }
        } else {
            // @TODO: load and check data descriptor header
            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
            // (optionally preceded by a 4-byte signature) immediately after the compressed data:
        }
        return true;
    }

    function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {
        if(typeof callback === 'undefined' && typeof async === 'string') {
            pass=async;
            async=void 0;
        }
        if (_isDirectory) {
            if (async && callback) {
                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
            }
            return Buffer.alloc(0);
        }

        var compressedData = getCompressedDataFromZip();
       
        if (compressedData.length === 0) {
            if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.
            return compressedData;
        }

        var data = Buffer.alloc(_entryHeader.size);

        switch (_entryHeader.method) {
            case Utils.Constants.STORED:
                compressedData.copy(data);
                if (!crc32OK(data)) {
                    if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error
                    return Utils.Errors.BAD_CRC;
                } else {//si added otherwise did not seem to return data.
                    if (async && callback) callback(data);
                    return data;
                }
            case Utils.Constants.DEFLATED:
                var inflater = new Methods.Inflater(compressedData);
                if (!async) {
                    inflater.inflate(data);
                    if (!crc32OK(data)) {
                        console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString())
                    }
                    return data;
                } else {
                    inflater.inflateAsync(function(result) {
                        result.copy(data, 0);
                        if (!crc32OK(data)) {
                            if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error
                        } else { //si added otherwise did not seem to return data.
                            if (callback) callback(data);
                        }
                    })
                }
                break;
            default:
                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
                return Utils.Errors.UNKNOWN_METHOD;
        }
    }

    function compress(/*Boolean*/async, /*Function*/callback) {
        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
            // no data set or the data wasn't changed to require recompression
            if (async && callback) callback(getCompressedDataFromZip());
            return getCompressedDataFromZip();
        }

        if (uncompressedData.length && !_isDirectory) {
            var compressedData;
            // Local file header
            switch (_entryHeader.method) {
                case Utils.Constants.STORED:
                    _entryHeader.compressedSize = _entryHeader.size;

                    compressedData = Buffer.alloc(uncompressedData.length);
                    uncompressedData.copy(compressedData);

                    if (async && callback) callback(compressedData);
                    return compressedData;
                default:
                case Utils.Constants.DEFLATED:

                    var deflater = new Methods.Deflater(uncompressedData);
                    if (!async) {
                        var deflated = deflater.deflate();
                        _entryHeader.compressedSize = deflated.length;
                        return deflated;
                    } else {
                        deflater.deflateAsync(function(data) {
                            compressedData = Buffer.alloc(data.length);
                            _entryHeader.compressedSize = data.length;
                            data.copy(compressedData);
                            callback && callback(compressedData);
                        })
                    }
                    deflater = null;
                    break;
            }
        } else {
            if (async && callback) {
                callback(Buffer.alloc(0));
            } else {
                return Buffer.alloc(0);
            }
        }
    }

    function readUInt64LE(buffer, offset) {
        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
    }

    function parseExtra(data) {
        var offset = 0;
        var signature, size, part;
        while(offset<data.length) {
            signature = data.readUInt16LE(offset);
            offset += 2;
            size = data.readUInt16LE(offset);
            offset += 2;
            part = data.slice(offset, offset+size);
            offset += size;
            if(Constants.ID_ZIP64 === signature) {
                parseZip64ExtendedInformation(part);
            }
        }
    }

    //Override header field values with values from the ZIP64 extra field
    function parseZip64ExtendedInformation(data) {
        var size, compressedSize, offset, diskNumStart;

        if(data.length >= Constants.EF_ZIP64_SCOMP) {
            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
            if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {
                _entryHeader.size = size;
            }
        }
        if(data.length >= Constants.EF_ZIP64_RHO) {
            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
            if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
                _entryHeader.compressedSize = compressedSize;
            }
        }
        if(data.length >= Constants.EF_ZIP64_DSN) {
            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
            if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
                _entryHeader.offset = offset;
            }
        }
        if(data.length >= Constants.EF_ZIP64_DSN+4) {
            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
            if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
                _entryHeader.diskNumStart = diskNumStart;
            }
        }
    }


    return {
        get entryName () { return _entryName.toString(); },
        get rawEntryName() { return _entryName; },
        set entryName (val) {
            _entryName = Utils.toBuffer(val);
            var lastChar = _entryName[_entryName.length - 1];
            _isDirectory = (lastChar === 47) || (lastChar === 92);
            _entryHeader.fileNameLength = _entryName.length;
        },

        get extra () { return _extra; },
        set extra (val) {
            _extra = val;
            _entryHeader.extraLength = val.length;
            parseExtra(val);
        },

        get comment () { return _comment.toString(); },
        set comment (val) {
            _comment = Utils.toBuffer(val);
            _entryHeader.commentLength = _comment.length;
        },

        get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); },
        get isDirectory () { return _isDirectory },

        getCompressedData : function() {
            return compress(false, null)
        },

        getCompressedDataAsync : function(/*Function*/callback) {
            compress(true, callback)
        },

        setData : function(value) {
            uncompressedData = Utils.toBuffer(value);
            if (!_isDirectory && uncompressedData.length) {
                _entryHeader.size = uncompressedData.length;
                _entryHeader.method = Utils.Constants.STORED;
                _entryHeader.crc = Utils.crc32(value);
                _entryHeader.changed = true;
            } else { // folders and blank files should be stored
                _entryHeader.method = Utils.Constants.STORED;
            }
        },

        getData : function(pass) {
            if (_entryHeader.changed) {
				return uncompressedData;
			} else {
				return decompress(false, null, pass);
            }
        },

        getDataAsync : function(/*Function*/callback, pass) {
			if (_entryHeader.changed) {
				callback(uncompressedData)
			} else {
				decompress(true, callback, pass)
            }
        },

        set attr(attr) { _entryHeader.attr = attr; },
        get attr() { return _entryHeader.attr; },

        set header(/*Buffer*/data) {
            _entryHeader.loadFromBinary(data);
        },

        get header() {
            return _entryHeader;
        },

        packHeader : function() {
            var header = _entryHeader.entryHeaderToBinary();
            // add
            _entryName.copy(header, Utils.Constants.CENHDR);
            if (_entryHeader.extraLength) {
                _extra.copy(header, Utils.Constants.CENHDR + _entryName.length)
            }
            if (_entryHeader.commentLength) {
                _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);
            }
            return header;
        },

        toString : function() {
            return '{\n' +
                '\t"entryName" : "' + _entryName.toString() + "\",\n" +
                '\t"name" : "' + (_isDirectory ? _entryName.toString().replace(/\/$/, '').split("/").pop() : _entryName.toString().split("/").pop()) + "\",\n" +
                '\t"comment" : "' + _comment.toString() + "\",\n" +
                '\t"isDirectory" : ' + _isDirectory + ",\n" +
                '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t").replace(/}/mg, "\t}")  + ",\n" +
                '\t"compressedData" : <' + (input && input.length  + " bytes buffer" || "null") + ">\n" +
                '\t"data" : <' + (uncompressedData && uncompressedData.length  + " bytes buffer" || "null") + ">\n" +
                '}';
        }
    }
};


/***/ }),
/* 266 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var compileSchema = __webpack_require__(529)
  , resolve = __webpack_require__(184)
  , Cache = __webpack_require__(525)
  , SchemaObject = __webpack_require__(267)
  , stableStringify = __webpack_require__(342)
  , formats = __webpack_require__(528)
  , rules = __webpack_require__(530)
  , $dataMetaSchema = __webpack_require__(524)
  , patternGroups = __webpack_require__(551)
  , util = __webpack_require__(88)
  , co = __webpack_require__(293);

module.exports = Ajv;

Ajv.prototype.validate = validate;
Ajv.prototype.compile = compile;
Ajv.prototype.addSchema = addSchema;
Ajv.prototype.addMetaSchema = addMetaSchema;
Ajv.prototype.validateSchema = validateSchema;
Ajv.prototype.getSchema = getSchema;
Ajv.prototype.removeSchema = removeSchema;
Ajv.prototype.addFormat = addFormat;
Ajv.prototype.errorsText = errorsText;

Ajv.prototype._addSchema = _addSchema;
Ajv.prototype._compile = _compile;

Ajv.prototype.compileAsync = __webpack_require__(527);
var customKeyword = __webpack_require__(550);
Ajv.prototype.addKeyword = customKeyword.add;
Ajv.prototype.getKeyword = customKeyword.get;
Ajv.prototype.removeKeyword = customKeyword.remove;

var errorClasses = __webpack_require__(183);
Ajv.ValidationError = errorClasses.Validation;
Ajv.MissingRefError = errorClasses.MissingRef;
Ajv.$dataMetaSchema = $dataMetaSchema;

var META_SCHEMA_ID = 'http://json-schema.org/draft-06/schema';

var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ];
var META_SUPPORT_DATA = ['/properties'];

/**
 * Creates validator instance.
 * Usage: `Ajv(opts)`
 * @param {Object} opts optional options
 * @return {Object} ajv instance
 */
function Ajv(opts) {
  if (!(this instanceof Ajv)) return new Ajv(opts);
  opts = this._opts = util.copy(opts) || {};
  setLogger(this);
  this._schemas = {};
  this._refs = {};
  this._fragments = {};
  this._formats = formats(opts.format);
  var schemaUriFormat = this._schemaUriFormat = this._formats['uri-reference'];
  this._schemaUriFormatFunc = function (str) { return schemaUriFormat.test(str); };

  this._cache = opts.cache || new Cache;
  this._loadingSchemas = {};
  this._compilations = [];
  this.RULES = rules();
  this._getId = chooseGetId(opts);

  opts.loopRequired = opts.loopRequired || Infinity;
  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;
  if (opts.serialize === undefined) opts.serialize = stableStringify;
  this._metaOpts = getMetaSchemaOptions(this);

  if (opts.formats) addInitialFormats(this);
  addDraft6MetaSchema(this);
  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);
  addInitialSchemas(this);
  if (opts.patternGroups) patternGroups(this);
}



/**
 * Validate data using schema
 * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.
 * @this   Ajv
 * @param  {String|Object} schemaKeyRef key, ref or schema object
 * @param  {Any} data to be validated
 * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).
 */
function validate(schemaKeyRef, data) {
  var v;
  if (typeof schemaKeyRef == 'string') {
    v = this.getSchema(schemaKeyRef);
    if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"');
  } else {
    var schemaObj = this._addSchema(schemaKeyRef);
    v = schemaObj.validate || this._compile(schemaObj);
  }

  var valid = v(data);
  if (v.$async === true)
    return this._opts.async == '*' ? co(valid) : valid;
  this.errors = v.errors;
  return valid;
}


/**
 * Create validating function for passed schema.
 * @this   Ajv
 * @param  {Object} schema schema object
 * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.
 * @return {Function} validating function
 */
function compile(schema, _meta) {
  var schemaObj = this._addSchema(schema, undefined, _meta);
  return schemaObj.validate || this._compile(schemaObj);
}


/**
 * Adds schema to the instance.
 * @this   Ajv
 * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
 * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
 * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.
 * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
 * @return {Ajv} this for method chaining
 */
function addSchema(schema, key, _skipValidation, _meta) {
  if (Array.isArray(schema)){
    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);
    return this;
  }
  var id = this._getId(schema);
  if (id !== undefined && typeof id != 'string')
    throw new Error('schema id must be string');
  key = resolve.normalizeId(key || id);
  checkUnique(this, key);
  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);
  return this;
}


/**
 * Add schema that will be used to validate other schemas
 * options in META_IGNORE_OPTIONS are alway set to false
 * @this   Ajv
 * @param {Object} schema schema object
 * @param {String} key optional schema key
 * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema
 * @return {Ajv} this for method chaining
 */
function addMetaSchema(schema, key, skipValidation) {
  this.addSchema(schema, key, skipValidation, true);
  return this;
}


/**
 * Validate schema
 * @this   Ajv
 * @param {Object} schema schema to validate
 * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid
 * @return {Boolean} true if schema is valid
 */
function validateSchema(schema, throwOrLogError) {
  var $schema = schema.$schema;
  if ($schema !== undefined && typeof $schema != 'string')
    throw new Error('$schema must be a string');
  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);
  if (!$schema) {
    this.logger.warn('meta-schema not available');
    this.errors = null;
    return true;
  }
  var currentUriFormat = this._formats.uri;
  this._formats.uri = typeof currentUriFormat == 'function'
                      ? this._schemaUriFormatFunc
                      : this._schemaUriFormat;
  var valid;
  try { valid = this.validate($schema, schema); }
  finally { this._formats.uri = currentUriFormat; }
  if (!valid && throwOrLogError) {
    var message = 'schema is invalid: ' + this.errorsText();
    if (this._opts.validateSchema == 'log') this.logger.error(message);
    else throw new Error(message);
  }
  return valid;
}


function defaultMeta(self) {
  var meta = self._opts.meta;
  self._opts.defaultMeta = typeof meta == 'object'
                            ? self._getId(meta) || meta
                            : self.getSchema(META_SCHEMA_ID)
                              ? META_SCHEMA_ID
                              : undefined;
  return self._opts.defaultMeta;
}


/**
 * Get compiled schema from the instance by `key` or `ref`.
 * @this   Ajv
 * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).
 * @return {Function} schema validating function (with property `schema`).
 */
function getSchema(keyRef) {
  var schemaObj = _getSchemaObj(this, keyRef);
  switch (typeof schemaObj) {
    case 'object': return schemaObj.validate || this._compile(schemaObj);
    case 'string': return this.getSchema(schemaObj);
    case 'undefined': return _getSchemaFragment(this, keyRef);
  }
}


function _getSchemaFragment(self, ref) {
  var res = resolve.schema.call(self, { schema: {} }, ref);
  if (res) {
    var schema = res.schema
      , root = res.root
      , baseId = res.baseId;
    var v = compileSchema.call(self, schema, root, undefined, baseId);
    self._fragments[ref] = new SchemaObject({
      ref: ref,
      fragment: true,
      schema: schema,
      root: root,
      baseId: baseId,
      validate: v
    });
    return v;
  }
}


function _getSchemaObj(self, keyRef) {
  keyRef = resolve.normalizeId(keyRef);
  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];
}


/**
 * Remove cached schema(s).
 * If no parameter is passed all schemas but meta-schemas are removed.
 * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
 * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
 * @this   Ajv
 * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object
 * @return {Ajv} this for method chaining
 */
function removeSchema(schemaKeyRef) {
  if (schemaKeyRef instanceof RegExp) {
    _removeAllSchemas(this, this._schemas, schemaKeyRef);
    _removeAllSchemas(this, this._refs, schemaKeyRef);
    return this;
  }
  switch (typeof schemaKeyRef) {
    case 'undefined':
      _removeAllSchemas(this, this._schemas);
      _removeAllSchemas(this, this._refs);
      this._cache.clear();
      return this;
    case 'string':
      var schemaObj = _getSchemaObj(this, schemaKeyRef);
      if (schemaObj) this._cache.del(schemaObj.cacheKey);
      delete this._schemas[schemaKeyRef];
      delete this._refs[schemaKeyRef];
      return this;
    case 'object':
      var serialize = this._opts.serialize;
      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;
      this._cache.del(cacheKey);
      var id = this._getId(schemaKeyRef);
      if (id) {
        id = resolve.normalizeId(id);
        delete this._schemas[id];
        delete this._refs[id];
      }
  }
  return this;
}


function _removeAllSchemas(self, schemas, regex) {
  for (var keyRef in schemas) {
    var schemaObj = schemas[keyRef];
    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {
      self._cache.del(schemaObj.cacheKey);
      delete schemas[keyRef];
    }
  }
}


/* @this   Ajv */
function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
  if (typeof schema != 'object' && typeof schema != 'boolean')
    throw new Error('schema should be object or boolean');
  var serialize = this._opts.serialize;
  var cacheKey = serialize ? serialize(schema) : schema;
  var cached = this._cache.get(cacheKey);
  if (cached) return cached;

  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;

  var id = resolve.normalizeId(this._getId(schema));
  if (id && shouldAddSchema) checkUnique(this, id);

  var willValidate = this._opts.validateSchema !== false && !skipValidation;
  var recursiveMeta;
  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))
    this.validateSchema(schema, true);

  var localRefs = resolve.ids.call(this, schema);

  var schemaObj = new SchemaObject({
    id: id,
    schema: schema,
    localRefs: localRefs,
    cacheKey: cacheKey,
    meta: meta
  });

  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;
  this._cache.put(cacheKey, schemaObj);

  if (willValidate && recursiveMeta) this.validateSchema(schema, true);

  return schemaObj;
}


/* @this   Ajv */
function _compile(schemaObj, root) {
  if (schemaObj.compiling) {
    schemaObj.validate = callValidate;
    callValidate.schema = schemaObj.schema;
    callValidate.errors = null;
    callValidate.root = root ? root : callValidate;
    if (schemaObj.schema.$async === true)
      callValidate.$async = true;
    return callValidate;
  }
  schemaObj.compiling = true;

  var currentOpts;
  if (schemaObj.meta) {
    currentOpts = this._opts;
    this._opts = this._metaOpts;
  }

  var v;
  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }
  finally {
    schemaObj.compiling = false;
    if (schemaObj.meta) this._opts = currentOpts;
  }

  schemaObj.validate = v;
  schemaObj.refs = v.refs;
  schemaObj.refVal = v.refVal;
  schemaObj.root = v.root;
  return v;


  function callValidate() {
    var _validate = schemaObj.validate;
    var result = _validate.apply(null, arguments);
    callValidate.errors = _validate.errors;
    return result;
  }
}


function chooseGetId(opts) {
  switch (opts.schemaId) {
    case '$id': return _get$Id;
    case 'id': return _getId;
    default: return _get$IdOrId;
  }
}

/* @this   Ajv */
function _getId(schema) {
  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);
  return schema.id;
}

/* @this   Ajv */
function _get$Id(schema) {
  if (schema.id) this.logger.warn('schema id ignored', schema.id);
  return schema.$id;
}


function _get$IdOrId(schema) {
  if (schema.$id && schema.id && schema.$id != schema.id)
    throw new Error('schema $id is different from id');
  return schema.$id || schema.id;
}


/**
 * Convert array of error message objects to string
 * @this   Ajv
 * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.
 * @param  {Object} options optional options with properties `separator` and `dataVar`.
 * @return {String} human readable string with all errors descriptions
 */
function errorsText(errors, options) {
  errors = errors || this.errors;
  if (!errors) return 'No errors';
  options = options || {};
  var separator = options.separator === undefined ? ', ' : options.separator;
  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;

  var text = '';
  for (var i=0; i<errors.length; i++) {
    var e = errors[i];
    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;
  }
  return text.slice(0, -separator.length);
}


/**
 * Add custom format
 * @this   Ajv
 * @param {String} name format name
 * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)
 * @return {Ajv} this for method chaining
 */
function addFormat(name, format) {
  if (typeof format == 'string') format = new RegExp(format);
  this._formats[name] = format;
  return this;
}


function addDraft6MetaSchema(self) {
  var $dataSchema;
  if (self._opts.$data) {
    $dataSchema = __webpack_require__(474);
    self.addMetaSchema($dataSchema, $dataSchema.$id, true);
  }
  if (self._opts.meta === false) return;
  var metaSchema = __webpack_require__(475);
  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);
  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);
  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;
}


function addInitialSchemas(self) {
  var optsSchemas = self._opts.schemas;
  if (!optsSchemas) return;
  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);
  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);
}


function addInitialFormats(self) {
  for (var name in self._opts.formats) {
    var format = self._opts.formats[name];
    self.addFormat(name, format);
  }
}


function checkUnique(self, id) {
  if (self._schemas[id] || self._refs[id])
    throw new Error('schema with key or id "' + id + '" already exists');
}


function getMetaSchemaOptions(self) {
  var metaOpts = util.copy(self._opts);
  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)
    delete metaOpts[META_IGNORE_OPTIONS[i]];
  return metaOpts;
}


function setLogger(self) {
  var logger = self._opts.logger;
  if (logger === false) {
    self.logger = {log: noop, warn: noop, error: noop};
  } else {
    if (logger === undefined) logger = console;
    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))
      throw new Error('logger must implement log, warn and error methods');
    self.logger = logger;
  }
}


function noop() {}


/***/ }),
/* 267 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var util = __webpack_require__(88);

module.exports = SchemaObject;

function SchemaObject(obj) {
  util.copy(obj, this);
}


/***/ }),
/* 268 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate__limit(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $isMax = $keyword == 'maximum',
    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',
    $schemaExcl = it.schema[$exclusiveKeyword],
    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,
    $op = $isMax ? '<' : '>',
    $notOp = $isMax ? '>' : '<',
    $errorKeyword = undefined;
  if ($isDataExcl) {
    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),
      $exclusive = 'exclusive' + $lvl,
      $exclType = 'exclType' + $lvl,
      $exclIsNumber = 'exclIsNumber' + $lvl,
      $opExpr = 'op' + $lvl,
      $opStr = '\' + ' + $opExpr + ' + \'';
    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';
    $schemaValueExcl = 'schemaExcl' + $lvl;
    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { ';
    var $errorKeyword = $exclusiveKeyword;
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } else if ( ';
    if ($isData) {
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
    }
    out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';';
  } else {
    var $exclIsNumber = typeof $schemaExcl == 'number',
      $opStr = $op;
    if ($exclIsNumber && $isData) {
      var $opExpr = '\'' + $opStr + '\'';
      out += ' if ( ';
      if ($isData) {
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
      }
      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';
    } else {
      if ($exclIsNumber && $schema === undefined) {
        $exclusive = true;
        $errorKeyword = $exclusiveKeyword;
        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
        $schemaValue = $schemaExcl;
        $notOp += '=';
      } else {
        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);
        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {
          $exclusive = true;
          $errorKeyword = $exclusiveKeyword;
          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
          $notOp += '=';
        } else {
          $exclusive = false;
          $opStr += '=';
        }
      }
      var $opExpr = '\'' + $opStr + '\'';
      out += ' if ( ';
      if ($isData) {
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
      }
      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';
    }
  }
  $errorKeyword = $errorKeyword || $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be ' + ($opStr) + ' ';
      if ($isData) {
        out += '\' + ' + ($schemaValue);
      } else {
        out += '' + ($schemaValue) + '\'';
      }
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 269 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate__limitItems(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $op = $keyword == 'maxItems' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT have ';
      if ($keyword == 'maxItems') {
        out += 'more';
      } else {
        out += 'less';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' items\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 270 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate__limitLength(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $op = $keyword == 'maxLength' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  if (it.opts.unicode === false) {
    out += ' ' + ($data) + '.length ';
  } else {
    out += ' ucs2length(' + ($data) + ') ';
  }
  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT be ';
      if ($keyword == 'maxLength') {
        out += 'longer';
      } else {
        out += 'shorter';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' characters\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 271 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate__limitProperties(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $op = $keyword == 'maxProperties' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT have ';
      if ($keyword == 'maxProperties') {
        out += 'more';
      } else {
        out += 'less';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' properties\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 272 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_validate(it, $keyword, $ruleType) {
  var out = '';
  var $async = it.schema.$async === true,
    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),
    $id = it.self._getId(it.schema);
  if (it.isTop) {
    if ($async) {
      it.async = true;
      var $es7 = it.opts.async == 'es7';
      it.yieldAwait = $es7 ? 'await' : 'yield';
    }
    out += ' var validate = ';
    if ($async) {
      if ($es7) {
        out += ' (async function ';
      } else {
        if (it.opts.async != '*') {
          out += 'co.wrap';
        }
        out += '(function* ';
      }
    } else {
      out += ' (function ';
    }
    out += ' (data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; ';
    if ($id && (it.opts.sourceCode || it.opts.processCode)) {
      out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' ';
    }
  }
  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {
    var $keyword = 'false schema';
    var $lvl = it.level;
    var $dataLvl = it.dataLevel;
    var $schema = it.schema[$keyword];
    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
    var $breakOnError = !it.opts.allErrors;
    var $errorKeyword;
    var $data = 'data' + ($dataLvl || '');
    var $valid = 'valid' + $lvl;
    if (it.schema === false) {
      if (it.isTop) {
        $breakOnError = true;
      } else {
        out += ' var ' + ($valid) + ' = false; ';
      }
      var $$outStack = $$outStack || [];
      $$outStack.push(out);
      out = ''; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
        if (it.opts.messages !== false) {
          out += ' , message: \'boolean schema is false\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      var __err = out;
      out = $$outStack.pop();
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError([' + (__err) + ']); ';
        } else {
          out += ' validate.errors = [' + (__err) + ']; return false; ';
        }
      } else {
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      }
    } else {
      if (it.isTop) {
        if ($async) {
          out += ' return data; ';
        } else {
          out += ' validate.errors = null; return true; ';
        }
      } else {
        out += ' var ' + ($valid) + ' = true; ';
      }
    }
    if (it.isTop) {
      out += ' }); return validate; ';
    }
    return out;
  }
  if (it.isTop) {
    var $top = it.isTop,
      $lvl = it.level = 0,
      $dataLvl = it.dataLevel = 0,
      $data = 'data';
    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));
    it.baseId = it.baseId || it.rootId;
    delete it.isTop;
    it.dataPathArr = [undefined];
    out += ' var vErrors = null; ';
    out += ' var errors = 0;     ';
    out += ' if (rootData === undefined) rootData = data; ';
  } else {
    var $lvl = it.level,
      $dataLvl = it.dataLevel,
      $data = 'data' + ($dataLvl || '');
    if ($id) it.baseId = it.resolve.url(it.baseId, $id);
    if ($async && !it.async) throw new Error('async schema in sync schema');
    out += ' var errs_' + ($lvl) + ' = errors;';
  }
  var $valid = 'valid' + $lvl,
    $breakOnError = !it.opts.allErrors,
    $closingBraces1 = '',
    $closingBraces2 = '';
  var $errorKeyword;
  var $typeSchema = it.schema.type,
    $typeIsArray = Array.isArray($typeSchema);
  if ($typeIsArray && $typeSchema.length == 1) {
    $typeSchema = $typeSchema[0];
    $typeIsArray = false;
  }
  if (it.schema.$ref && $refKeywords) {
    if (it.opts.extendRefs == 'fail') {
      throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)');
    } else if (it.opts.extendRefs !== true) {
      $refKeywords = false;
      it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"');
    }
  }
  if ($typeSchema) {
    if (it.opts.coerceTypes) {
      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);
    }
    var $rulesGroup = it.RULES.types[$typeSchema];
    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {
      var $schemaPath = it.schemaPath + '.type',
        $errSchemaPath = it.errSchemaPath + '/type';
      var $schemaPath = it.schemaPath + '.type',
        $errSchemaPath = it.errSchemaPath + '/type',
        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';
      out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { ';
      if ($coerceToTypes) {
        var $dataType = 'dataType' + $lvl,
          $coerced = 'coerced' + $lvl;
        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; ';
        if (it.opts.coerceTypes == 'array') {
          out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; ';
        }
        out += ' var ' + ($coerced) + ' = undefined; ';
        var $bracesCoercion = '';
        var arr1 = $coerceToTypes;
        if (arr1) {
          var $type, $i = -1,
            l1 = arr1.length - 1;
          while ($i < l1) {
            $type = arr1[$i += 1];
            if ($i) {
              out += ' if (' + ($coerced) + ' === undefined) { ';
              $bracesCoercion += '}';
            }
            if (it.opts.coerceTypes == 'array' && $type != 'array') {
              out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + ';  } ';
            }
            if ($type == 'string') {
              out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; ';
            } else if ($type == 'number' || $type == 'integer') {
              out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';
              if ($type == 'integer') {
                out += ' && !(' + ($data) + ' % 1)';
              }
              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';
            } else if ($type == 'boolean') {
              out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';
            } else if ($type == 'null') {
              out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';
            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {
              out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';
            }
          }
        }
        out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) {   ';
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
          if ($typeIsArray) {
            out += '' + ($typeSchema.join(","));
          } else {
            out += '' + ($typeSchema);
          }
          out += '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should be ';
            if ($typeIsArray) {
              out += '' + ($typeSchema.join(","));
            } else {
              out += '' + ($typeSchema);
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else {  ';
        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';
        if (!$dataLvl) {
          out += 'if (' + ($parentData) + ' !== undefined)';
        }
        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';
      } else {
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
          if ($typeIsArray) {
            out += '' + ($typeSchema.join(","));
          } else {
            out += '' + ($typeSchema);
          }
          out += '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should be ';
            if ($typeIsArray) {
              out += '' + ($typeSchema.join(","));
            } else {
              out += '' + ($typeSchema);
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
      }
      out += ' } ';
    }
  }
  if (it.schema.$ref && !$refKeywords) {
    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';
    if ($breakOnError) {
      out += ' } if (errors === ';
      if ($top) {
        out += '0';
      } else {
        out += 'errs_' + ($lvl);
      }
      out += ') { ';
      $closingBraces2 += '}';
    }
  } else {
    if (it.opts.v5 && it.schema.patternGroups) {
      it.logger.warn('keyword "patternGroups" is deprecated and disabled. Use option patternGroups: true to enable.');
    }
    var arr2 = it.RULES;
    if (arr2) {
      var $rulesGroup, i2 = -1,
        l2 = arr2.length - 1;
      while (i2 < l2) {
        $rulesGroup = arr2[i2 += 1];
        if ($shouldUseGroup($rulesGroup)) {
          if ($rulesGroup.type) {
            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { ';
          }
          if (it.opts.useDefaults && !it.compositeRule) {
            if ($rulesGroup.type == 'object' && it.schema.properties) {
              var $schema = it.schema.properties,
                $schemaKeys = Object.keys($schema);
              var arr3 = $schemaKeys;
              if (arr3) {
                var $propertyKey, i3 = -1,
                  l3 = arr3.length - 1;
                while (i3 < l3) {
                  $propertyKey = arr3[i3 += 1];
                  var $sch = $schema[$propertyKey];
                  if ($sch.default !== undefined) {
                    var $passData = $data + it.util.getProperty($propertyKey);
                    out += '  if (' + ($passData) + ' === undefined) ' + ($passData) + ' = ';
                    if (it.opts.useDefaults == 'shared') {
                      out += ' ' + (it.useDefault($sch.default)) + ' ';
                    } else {
                      out += ' ' + (JSON.stringify($sch.default)) + ' ';
                    }
                    out += '; ';
                  }
                }
              }
            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {
              var arr4 = it.schema.items;
              if (arr4) {
                var $sch, $i = -1,
                  l4 = arr4.length - 1;
                while ($i < l4) {
                  $sch = arr4[$i += 1];
                  if ($sch.default !== undefined) {
                    var $passData = $data + '[' + $i + ']';
                    out += '  if (' + ($passData) + ' === undefined) ' + ($passData) + ' = ';
                    if (it.opts.useDefaults == 'shared') {
                      out += ' ' + (it.useDefault($sch.default)) + ' ';
                    } else {
                      out += ' ' + (JSON.stringify($sch.default)) + ' ';
                    }
                    out += '; ';
                  }
                }
              }
            }
          }
          var arr5 = $rulesGroup.rules;
          if (arr5) {
            var $rule, i5 = -1,
              l5 = arr5.length - 1;
            while (i5 < l5) {
              $rule = arr5[i5 += 1];
              if ($shouldUseRule($rule)) {
                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);
                if ($code) {
                  out += ' ' + ($code) + ' ';
                  if ($breakOnError) {
                    $closingBraces1 += '}';
                  }
                }
              }
            }
          }
          if ($breakOnError) {
            out += ' ' + ($closingBraces1) + ' ';
            $closingBraces1 = '';
          }
          if ($rulesGroup.type) {
            out += ' } ';
            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {
              out += ' else { ';
              var $schemaPath = it.schemaPath + '.type',
                $errSchemaPath = it.errSchemaPath + '/type';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
                if ($typeIsArray) {
                  out += '' + ($typeSchema.join(","));
                } else {
                  out += '' + ($typeSchema);
                }
                out += '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'should be ';
                  if ($typeIsArray) {
                    out += '' + ($typeSchema.join(","));
                  } else {
                    out += '' + ($typeSchema);
                  }
                  out += '\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              out += ' } ';
            }
          }
          if ($breakOnError) {
            out += ' if (errors === ';
            if ($top) {
              out += '0';
            } else {
              out += 'errs_' + ($lvl);
            }
            out += ') { ';
            $closingBraces2 += '}';
          }
        }
      }
    }
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces2) + ' ';
  }
  if ($top) {
    if ($async) {
      out += ' if (errors === 0) return data;           ';
      out += ' else throw new ValidationError(vErrors); ';
    } else {
      out += ' validate.errors = vErrors; ';
      out += ' return errors === 0;       ';
    }
    out += ' }); return validate;';
  } else {
    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';
  }
  out = it.util.cleanUpCode(out);
  if ($top) {
    out = it.util.finalCleanUpCode(out, $async);
  }

  function $shouldUseGroup($rulesGroup) {
    var rules = $rulesGroup.rules;
    for (var i = 0; i < rules.length; i++)
      if ($shouldUseRule(rules[i])) return true;
  }

  function $shouldUseRule($rule) {
    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));
  }

  function $ruleImplementsSomeKeyword($rule) {
    var impl = $rule.implements;
    for (var i = 0; i < impl.length; i++)
      if (it.schema[impl[i]] !== undefined) return true;
  }
  return out;
}


/***/ }),
/* 273 */
/***/ (function(module, exports) {

/*!
 * assertion-error
 * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>
 * MIT Licensed
 */

/*!
 * Return a function that will copy properties from
 * one object to another excluding any originally
 * listed. Returned function will create a new `{}`.
 *
 * @param {String} excluded properties ...
 * @return {Function}
 */

function exclude () {
  var excludes = [].slice.call(arguments);

  function excludeProps (res, obj) {
    Object.keys(obj).forEach(function (key) {
      if (!~excludes.indexOf(key)) res[key] = obj[key];
    });
  }

  return function extendExclude () {
    var args = [].slice.call(arguments)
      , i = 0
      , res = {};

    for (; i < args.length; i++) {
      excludeProps(res, args[i]);
    }

    return res;
  };
};

/*!
 * Primary Exports
 */

module.exports = AssertionError;

/**
 * ### AssertionError
 *
 * An extension of the JavaScript `Error` constructor for
 * assertion and validation scenarios.
 *
 * @param {String} message
 * @param {Object} properties to include (optional)
 * @param {callee} start stack function (optional)
 */

function AssertionError (message, _props, ssf) {
  var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')
    , props = extend(_props || {});

  // default values
  this.message = message || 'Unspecified AssertionError';
  this.showDiff = false;

  // copy from properties
  for (var key in props) {
    this[key] = props[key];
  }

  // capture stack trace
  ssf = ssf || AssertionError;
  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, ssf);
  } else {
    try {
      throw new Error();
    } catch(e) {
      this.stack = e.stack;
    }
  }
}

/*!
 * Inherit from Error.prototype
 */

AssertionError.prototype = Object.create(Error.prototype);

/*!
 * Statically set name
 */

AssertionError.prototype.name = 'AssertionError';

/*!
 * Ensure correct constructor
 */

AssertionError.prototype.constructor = AssertionError;

/**
 * Allow errors to be converted to JSON for static transfer.
 *
 * @param {Boolean} include stack (default: `true`)
 * @return {Object} object that can be `JSON.stringify`
 */

AssertionError.prototype.toJSON = function (stack) {
  var extend = exclude('constructor', 'toJSON', 'stack')
    , props = extend({ name: this.name }, this);

  // include stack if exists and not turned off
  if (false !== stack && this.stack) {
    props.stack = this.stack;
  }

  return props;
};


/***/ }),
/* 274 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (coll, iteratee, callback) {
    var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric;
    eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback);
};

var _isArrayLike = __webpack_require__(164);

var _isArrayLike2 = _interopRequireDefault(_isArrayLike);

var _breakLoop = __webpack_require__(188);

var _breakLoop2 = _interopRequireDefault(_breakLoop);

var _eachOfLimit = __webpack_require__(576);

var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);

var _doLimit = __webpack_require__(189);

var _doLimit2 = _interopRequireDefault(_doLimit);

var _noop = __webpack_require__(126);

var _noop2 = _interopRequireDefault(_noop);

var _once = __webpack_require__(276);

var _once2 = _interopRequireDefault(_once);

var _onlyOnce = __webpack_require__(191);

var _onlyOnce2 = _interopRequireDefault(_onlyOnce);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

// eachOf implementation optimized for array-likes
function eachOfArrayLike(coll, iteratee, callback) {
    callback = (0, _once2.default)(callback || _noop2.default);
    var index = 0,
        completed = 0,
        length = coll.length;
    if (length === 0) {
        callback(null);
    }

    function iteratorCallback(err, value) {
        if (err) {
            callback(err);
        } else if (++completed === length || value === _breakLoop2.default) {
            callback(null);
        }
    }

    for (; index < length; index++) {
        iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback));
    }
}

// a generic version of eachOf which can handle array, object, and iterator cases.
var eachOfGeneric = (0, _doLimit2.default)(_eachOfLimit2.default, Infinity);

/**
 * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument
 * to the iteratee.
 *
 * @name eachOf
 * @static
 * @memberOf module:Collections
 * @method
 * @alias forEachOf
 * @category Collection
 * @see [async.each]{@link module:Collections.each}
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A function to apply to each
 * item in `coll`.
 * The `key` is the item's key, or index in the case of an array.
 * Invoked with (item, key, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 * @example
 *
 * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
 * var configs = {};
 *
 * async.forEachOf(obj, function (value, key, callback) {
 *     fs.readFile(__dirname + value, "utf8", function (err, data) {
 *         if (err) return callback(err);
 *         try {
 *             configs[key] = JSON.parse(data);
 *         } catch (e) {
 *             return callback(e);
 *         }
 *         callback();
 *     });
 * }, function (err) {
 *     if (err) console.error(err.message);
 *     // configs is now a map of JSON data
 *     doSomethingWith(configs);
 * });
 */
module.exports = exports['default'];

/***/ }),
/* 275 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _eachLimit = __webpack_require__(575);

var _eachLimit2 = _interopRequireDefault(_eachLimit);

var _doLimit = __webpack_require__(189);

var _doLimit2 = _interopRequireDefault(_doLimit);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.
 *
 * @name eachSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.each]{@link module:Collections.each}
 * @alias forEachSeries
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to each
 * item in `coll`.
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOfSeries`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1);
module.exports = exports['default'];

/***/ }),
/* 276 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = once;
function once(fn) {
    return function () {
        if (fn === null) return;
        var callFn = fn;
        fn = null;
        callFn.apply(this, arguments);
    };
}
module.exports = exports["default"];

/***/ }),
/* 277 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = _withoutIndex;
function _withoutIndex(iteratee) {
    return function (value, index, callback) {
        return iteratee(value, callback);
    };
}
module.exports = exports["default"];

/***/ }),
/* 278 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = whilst;

var _noop = __webpack_require__(126);

var _noop2 = _interopRequireDefault(_noop);

var _slice = __webpack_require__(192);

var _slice2 = _interopRequireDefault(_slice);

var _onlyOnce = __webpack_require__(191);

var _onlyOnce2 = _interopRequireDefault(_onlyOnce);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when
 * stopped, or an error occurs.
 *
 * @name whilst
 * @static
 * @memberOf module:ControlFlow
 * @method
 * @category Control Flow
 * @param {Function} test - synchronous truth test to perform before each
 * execution of `iteratee`. Invoked with ().
 * @param {AsyncFunction} iteratee - An async function which is called each time
 * `test` passes. Invoked with (callback).
 * @param {Function} [callback] - A callback which is called after the test
 * function has failed and repeated execution of `iteratee` has stopped. `callback`
 * will be passed an error and any arguments passed to the final `iteratee`'s
 * callback. Invoked with (err, [results]);
 * @returns undefined
 * @example
 *
 * var count = 0;
 * async.whilst(
 *     function() { return count < 5; },
 *     function(callback) {
 *         count++;
 *         setTimeout(function() {
 *             callback(null, count);
 *         }, 1000);
 *     },
 *     function (err, n) {
 *         // 5 seconds have passed, n = 5
 *     }
 * );
 */
function whilst(test, iteratee, callback) {
    callback = (0, _onlyOnce2.default)(callback || _noop2.default);
    var _iteratee = (0, _wrapAsync2.default)(iteratee);
    if (!test()) return callback(null);
    var next = function (err /*, ...args*/) {
        if (err) return callback(err);
        if (test()) return _iteratee(next);
        var args = (0, _slice2.default)(arguments, 1);
        callback.apply(null, [null].concat(args));
    };
    _iteratee(next);
}
module.exports = exports['default'];

/***/ }),
/* 279 */
/***/ (function(module, exports) {

// API
module.exports = abort;

/**
 * Aborts leftover active jobs
 *
 * @param {object} state - current state object
 */
function abort(state)
{
  Object.keys(state.jobs).forEach(clean.bind(state));

  // reset leftover jobs
  state.jobs = {};
}

/**
 * Cleans up leftover job by invoking abort function for the provided job id
 *
 * @this  state
 * @param {string|number} key - job id to abort
 */
function clean(key)
{
  if (typeof this.jobs[key] == 'function')
  {
    this.jobs[key]();
  }
}


/***/ }),
/* 280 */
/***/ (function(module, exports, __webpack_require__) {

var defer = __webpack_require__(588);

// API
module.exports = async;

/**
 * Runs provided callback asynchronously
 * even if callback itself is not
 *
 * @param   {function} callback - callback to invoke
 * @returns {function} - augmented callback
 */
function async(callback)
{
  var isAsync = false;

  // check if async happened
  defer(function() { isAsync = true; });

  return function async_callback(err, result)
  {
    if (isAsync)
    {
      callback(err, result);
    }
    else
    {
      defer(function nextTick_callback()
      {
        callback(err, result);
      });
    }
  };
}


/***/ }),
/* 281 */
/***/ (function(module, exports, __webpack_require__) {

var async = __webpack_require__(280)
  , abort = __webpack_require__(279)
  ;

// API
module.exports = iterate;

/**
 * Iterates over each job object
 *
 * @param {array|object} list - array or object (named list) to iterate over
 * @param {function} iterator - iterator to run
 * @param {object} state - current job status
 * @param {function} callback - invoked when all elements processed
 */
function iterate(list, iterator, state, callback)
{
  // store current index
  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;

  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
  {
    // don't repeat yourself
    // skip secondary callbacks
    if (!(key in state.jobs))
    {
      return;
    }

    // clean up jobs
    delete state.jobs[key];

    if (error)
    {
      // don't process rest of the results
      // stop still active jobs
      // and reset the list
      abort(state);
    }
    else
    {
      state.results[key] = output;
    }

    // return salvaged results
    callback(error, state.results);
  });
}

/**
 * Runs iterator over provided job element
 *
 * @param   {function} iterator - iterator to invoke
 * @param   {string|number} key - key/index of the element in the list of jobs
 * @param   {mixed} item - job description
 * @param   {function} callback - invoked after iterator is done with the job
 * @returns {function|mixed} - job abort function or something else
 */
function runJob(iterator, key, item, callback)
{
  var aborter;

  // allow shortcut if iterator expects only two arguments
  if (iterator.length == 2)
  {
    aborter = iterator(item, async(callback));
  }
  // otherwise go with full three arguments
  else
  {
    aborter = iterator(item, key, async(callback));
  }

  return aborter;
}


/***/ }),
/* 282 */
/***/ (function(module, exports) {

// API
module.exports = state;

/**
 * Creates initial state object
 * for iteration over list
 *
 * @param   {array|object} list - list to iterate over
 * @param   {function|null} sortMethod - function to use for keys sort,
 *                                     or `null` to keep them as is
 * @returns {object} - initial state object
 */
function state(list, sortMethod)
{
  var isNamedList = !Array.isArray(list)
    , initState =
    {
      index    : 0,
      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
      jobs     : {},
      results  : isNamedList ? {} : [],
      size     : isNamedList ? Object.keys(list).length : list.length
    }
    ;

  if (sortMethod)
  {
    // sort array keys based on it's values
    // sort object's keys just on own merit
    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
    {
      return sortMethod(list[a], list[b]);
    });
  }

  return initState;
}


/***/ }),
/* 283 */
/***/ (function(module, exports, __webpack_require__) {

var abort = __webpack_require__(279)
  , async = __webpack_require__(280)
  ;

// API
module.exports = terminator;

/**
 * Terminates jobs in the attached state context
 *
 * @this  AsyncKitState#
 * @param {function} callback - final callback to invoke after termination
 */
function terminator(callback)
{
  if (!Object.keys(this.jobs).length)
  {
    return;
  }

  // fast forward iteration index
  this.index = this.size;

  // abort jobs
  abort(this);

  // send back results we have so far
  async(callback)(null, this.results);
}


/***/ }),
/* 284 */
/***/ (function(module, exports, __webpack_require__) {

var iterate    = __webpack_require__(281)
  , initState  = __webpack_require__(282)
  , terminator = __webpack_require__(283)
  ;

// Public API
module.exports = serialOrdered;
// sorting helpers
module.exports.ascending  = ascending;
module.exports.descending = descending;

/**
 * Runs iterator over provided sorted array elements in series
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} sortMethod - custom sort function
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function serialOrdered(list, iterator, sortMethod, callback)
{
  var state = initState(list, sortMethod);

  iterate(list, iterator, state, function iteratorHandler(error, result)
  {
    if (error)
    {
      callback(error, result);
      return;
    }

    state.index++;

    // are we there yet?
    if (state.index < (state['keyedList'] || list).length)
    {
      iterate(list, iterator, state, iteratorHandler);
      return;
    }

    // done here
    callback(null, state.results);
  });

  return terminator.bind(state, callback);
}

/*
 * -- Sort methods
 */

/**
 * sort helper to sort array elements in ascending order
 *
 * @param   {mixed} a - an item to compare
 * @param   {mixed} b - an item to compare
 * @returns {number} - comparison result
 */
function ascending(a, b)
{
  return a < b ? -1 : a > b ? 1 : 0;
}

/**
 * sort helper to sort array elements in descending order
 *
 * @param   {mixed} a - an item to compare
 * @param   {mixed} b - an item to compare
 * @returns {number} - comparison result
 */
function descending(a, b)
{
  return -1 * ascending(a, b);
}


/***/ }),
/* 285 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(634), __esModule: true };

/***/ }),
/* 286 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(635), __esModule: true };

/***/ }),
/* 287 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(637), __esModule: true };

/***/ }),
/* 288 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var crypto_hash_sha512 = __webpack_require__(58).lowlevel.crypto_hash;

/*
 * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a
 * result, it retains the original copyright and license. The two files are
 * under slightly different (but compatible) licenses, and are here combined in
 * one file.
 *
 * Credit for the actual porting work goes to:
 *  Devi Mandiri <me@devi.web.id>
 */

/*
 * The Blowfish portions are under the following license:
 *
 * Blowfish block cipher for OpenBSD
 * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
 * All rights reserved.
 *
 * Implementation advice by David Mazieres <dm@lcs.mit.edu>.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * The bcrypt_pbkdf portions are under the following license:
 *
 * Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>
 *
 * Permission to use, copy, modify, and 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.
 */

/*
 * Performance improvements (Javascript-specific):
 *
 * Copyright 2016, Joyent Inc
 * Author: Alex Wilson <alex.wilson@joyent.com>
 *
 * Permission to use, copy, modify, and 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.
 */

// Ported from OpenBSD bcrypt_pbkdf.c v1.9

var BLF_J = 0;

var Blowfish = function() {
  this.S = [
    new Uint32Array([
      0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
      0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
      0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
      0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
      0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
      0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
      0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
      0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
      0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
      0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
      0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
      0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
      0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
      0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
      0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
      0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
      0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
      0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
      0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
      0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
      0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
      0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
      0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
      0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
      0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
      0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
      0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
      0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
      0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
      0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
      0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
      0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
      0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
      0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
      0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
      0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
      0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
      0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
      0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
      0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
      0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
      0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
      0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
      0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
      0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
      0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
      0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
      0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
      0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
      0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
      0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
      0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
      0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
      0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
      0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
      0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
      0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
      0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
      0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
      0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
      0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
      0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
      0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
      0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]),
    new Uint32Array([
      0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
      0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
      0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
      0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
      0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
      0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
      0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
      0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
      0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
      0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
      0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
      0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
      0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
      0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
      0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
      0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
      0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
      0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
      0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
      0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
      0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
      0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
      0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
      0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
      0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
      0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
      0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
      0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
      0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
      0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
      0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
      0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
      0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
      0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
      0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
      0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
      0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
      0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
      0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
      0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
      0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
      0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
      0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
      0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
      0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
      0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
      0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
      0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
      0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
      0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
      0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
      0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
      0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
      0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
      0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
      0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
      0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
      0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
      0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
      0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
      0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
      0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
      0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
      0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]),
    new Uint32Array([
      0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
      0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
      0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
      0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
      0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
      0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
      0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
      0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
      0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
      0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
      0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
      0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
      0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
      0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
      0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
      0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
      0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
      0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
      0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
      0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
      0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
      0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
      0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
      0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
      0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
      0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
      0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
      0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
      0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
      0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
      0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
      0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
      0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
      0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
      0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
      0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
      0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
      0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
      0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
      0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
      0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
      0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
      0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
      0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
      0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
      0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
      0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
      0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
      0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
      0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
      0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
      0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
      0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
      0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
      0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
      0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
      0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
      0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
      0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
      0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
      0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
      0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
      0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
      0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]),
    new Uint32Array([
      0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
      0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
      0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
      0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
      0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
      0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
      0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
      0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
      0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
      0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
      0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
      0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
      0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
      0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
      0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
      0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
      0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
      0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
      0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
      0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
      0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
      0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
      0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
      0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
      0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
      0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
      0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
      0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
      0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
      0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
      0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
      0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
      0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
      0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
      0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
      0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
      0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
      0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
      0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
      0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
      0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
      0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
      0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
      0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
      0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
      0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
      0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
      0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
      0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
      0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
      0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
      0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
      0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
      0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
      0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
      0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
      0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
      0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
      0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
      0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
      0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
      0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
      0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
      0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6])
    ];
  this.P = new Uint32Array([
    0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
    0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
    0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
    0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
    0x9216d5d9, 0x8979fb1b]);
};

function F(S, x8, i) {
  return (((S[0][x8[i+3]] +
            S[1][x8[i+2]]) ^
            S[2][x8[i+1]]) +
            S[3][x8[i]]);
};

Blowfish.prototype.encipher = function(x, x8) {
  if (x8 === undefined) {
    x8 = new Uint8Array(x.buffer);
    if (x.byteOffset !== 0)
      x8 = x8.subarray(x.byteOffset);
  }
  x[0] ^= this.P[0];
  for (var i = 1; i < 16; i += 2) {
    x[1] ^= F(this.S, x8, 0) ^ this.P[i];
    x[0] ^= F(this.S, x8, 4) ^ this.P[i+1];
  }
  var t = x[0];
  x[0] = x[1] ^ this.P[17];
  x[1] = t;
};

Blowfish.prototype.decipher = function(x) {
  var x8 = new Uint8Array(x.buffer);
  if (x.byteOffset !== 0)
    x8 = x8.subarray(x.byteOffset);
  x[0] ^= this.P[17];
  for (var i = 16; i > 0; i -= 2) {
    x[1] ^= F(this.S, x8, 0) ^ this.P[i];
    x[0] ^= F(this.S, x8, 4) ^ this.P[i-1];
  }
  var t = x[0];
  x[0] = x[1] ^ this.P[0];
  x[1] = t;
};

function stream2word(data, databytes){
  var i, temp = 0;
  for (i = 0; i < 4; i++, BLF_J++) {
    if (BLF_J >= databytes) BLF_J = 0;
    temp = (temp << 8) | data[BLF_J];
  }
  return temp;
};

Blowfish.prototype.expand0state = function(key, keybytes) {
  var d = new Uint32Array(2), i, k;
  var d8 = new Uint8Array(d.buffer);

  for (i = 0, BLF_J = 0; i < 18; i++) {
    this.P[i] ^= stream2word(key, keybytes);
  }
  BLF_J = 0;

  for (i = 0; i < 18; i += 2) {
    this.encipher(d, d8);
    this.P[i]   = d[0];
    this.P[i+1] = d[1];
  }

  for (i = 0; i < 4; i++) {
    for (k = 0; k < 256; k += 2) {
      this.encipher(d, d8);
      this.S[i][k]   = d[0];
      this.S[i][k+1] = d[1];
    }
  }
};

Blowfish.prototype.expandstate = function(data, databytes, key, keybytes) {
  var d = new Uint32Array(2), i, k;

  for (i = 0, BLF_J = 0; i < 18; i++) {
    this.P[i] ^= stream2word(key, keybytes);
  }

  for (i = 0, BLF_J = 0; i < 18; i += 2) {
    d[0] ^= stream2word(data, databytes);
    d[1] ^= stream2word(data, databytes);
    this.encipher(d);
    this.P[i]   = d[0];
    this.P[i+1] = d[1];
  }

  for (i = 0; i < 4; i++) {
    for (k = 0; k < 256; k += 2) {
      d[0] ^= stream2word(data, databytes);
      d[1] ^= stream2word(data, databytes);
      this.encipher(d);
      this.S[i][k]   = d[0];
      this.S[i][k+1] = d[1];
    }
  }
  BLF_J = 0;
};

Blowfish.prototype.enc = function(data, blocks) {
  for (var i = 0; i < blocks; i++) {
    this.encipher(data.subarray(i*2));
  }
};

Blowfish.prototype.dec = function(data, blocks) {
  for (var i = 0; i < blocks; i++) {
    this.decipher(data.subarray(i*2));
  }
};

var BCRYPT_BLOCKS = 8,
    BCRYPT_HASHSIZE = 32;

function bcrypt_hash(sha2pass, sha2salt, out) {
  var state = new Blowfish(),
      cdata = new Uint32Array(BCRYPT_BLOCKS), i,
      ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105,
            99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109,
            105,116,101]); //"OxychromaticBlowfishSwatDynamite"

  state.expandstate(sha2salt, 64, sha2pass, 64);
  for (i = 0; i < 64; i++) {
    state.expand0state(sha2salt, 64);
    state.expand0state(sha2pass, 64);
  }

  for (i = 0; i < BCRYPT_BLOCKS; i++)
    cdata[i] = stream2word(ciphertext, ciphertext.byteLength);
  for (i = 0; i < 64; i++)
    state.enc(cdata, cdata.byteLength / 8);

  for (i = 0; i < BCRYPT_BLOCKS; i++) {
    out[4*i+3] = cdata[i] >>> 24;
    out[4*i+2] = cdata[i] >>> 16;
    out[4*i+1] = cdata[i] >>> 8;
    out[4*i+0] = cdata[i];
  }
};

function bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) {
  var sha2pass = new Uint8Array(64),
      sha2salt = new Uint8Array(64),
      out = new Uint8Array(BCRYPT_HASHSIZE),
      tmpout = new Uint8Array(BCRYPT_HASHSIZE),
      countsalt = new Uint8Array(saltlen+4),
      i, j, amt, stride, dest, count,
      origkeylen = keylen;

  if (rounds < 1)
    return -1;
  if (passlen === 0 || saltlen === 0 || keylen === 0 ||
      keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20))
    return -1;

  stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength);
  amt = Math.floor((keylen + stride - 1) / stride);

  for (i = 0; i < saltlen; i++)
    countsalt[i] = salt[i];

  crypto_hash_sha512(sha2pass, pass, passlen);

  for (count = 1; keylen > 0; count++) {
    countsalt[saltlen+0] = count >>> 24;
    countsalt[saltlen+1] = count >>> 16;
    countsalt[saltlen+2] = count >>>  8;
    countsalt[saltlen+3] = count;

    crypto_hash_sha512(sha2salt, countsalt, saltlen + 4);
    bcrypt_hash(sha2pass, sha2salt, tmpout);
    for (i = out.byteLength; i--;)
      out[i] = tmpout[i];

    for (i = 1; i < rounds; i++) {
      crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength);
      bcrypt_hash(sha2pass, sha2salt, tmpout);
      for (j = 0; j < out.byteLength; j++)
        out[j] ^= tmpout[j];
    }

    amt = Math.min(amt, keylen);
    for (i = 0; i < amt; i++) {
      dest = i * stride + (count - 1);
      if (dest >= origkeylen)
        break;
      key[dest] = out[i];
    }
    keylen -= i;
  }

  return 0;
};

module.exports = {
      BLOCKS: BCRYPT_BLOCKS,
      HASHSIZE: BCRYPT_HASHSIZE,
      hash: bcrypt_hash,
      pbkdf: bcrypt_pbkdf
};


/***/ }),
/* 289 */
/***/ (function(module, exports) {

/*!
 * Chai - getActual utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .getActual(object, [actual])
 *
 * Returns the `actual` value for an Assertion.
 *
 * @param {Object} object (constructed Assertion)
 * @param {Arguments} chai.Assertion.prototype.assert arguments
 * @namespace Utils
 * @name getActual
 */

module.exports = function getActual(obj, args) {
  return args.length > 4 ? args[4] : obj._obj;
};


/***/ }),
/* 290 */
/***/ (function(module, exports) {

/*!
 * Chai - getOwnEnumerablePropertySymbols utility
 * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .getOwnEnumerablePropertySymbols(object)
 *
 * This allows the retrieval of directly-owned enumerable property symbols of an
 * object. This function is necessary because Object.getOwnPropertySymbols
 * returns both enumerable and non-enumerable property symbols.
 *
 * @param {Object} object
 * @returns {Array}
 * @namespace Utils
 * @name getOwnEnumerablePropertySymbols
 * @api public
 */

module.exports = function getOwnEnumerablePropertySymbols(obj) {
  if (typeof Object.getOwnPropertySymbols !== 'function') return [];

  return Object.getOwnPropertySymbols(obj).filter(function (sym) {
    return Object.getOwnPropertyDescriptor(obj, sym).enumerable;
  });
};


/***/ }),
/* 291 */
/***/ (function(module, exports) {

/*!
 * Chai - getProperties utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .getProperties(object)
 *
 * This allows the retrieval of property names of an object, enumerable or not,
 * inherited or not.
 *
 * @param {Object} object
 * @returns {Array}
 * @namespace Utils
 * @name getProperties
 * @api public
 */

module.exports = function getProperties(object) {
  var result = Object.getOwnPropertyNames(object);

  function addProperty(property) {
    if (result.indexOf(property) === -1) {
      result.push(property);
    }
  }

  var proto = Object.getPrototypeOf(object);
  while (proto !== null) {
    Object.getOwnPropertyNames(proto).forEach(addProperty);
    proto = Object.getPrototypeOf(proto);
  }

  return result;
};


/***/ }),
/* 292 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - flag utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependancies
 */

var inspect = __webpack_require__(144);
var config = __webpack_require__(73);

/**
 * ### .objDisplay(object)
 *
 * Determines if an object or an array matches
 * criteria to be inspected in-line for error
 * messages or should be truncated.
 *
 * @param {Mixed} javascript object to inspect
 * @name objDisplay
 * @namespace Utils
 * @api public
 */

module.exports = function objDisplay(obj) {
  var str = inspect(obj)
    , type = Object.prototype.toString.call(obj);

  if (config.truncateThreshold && str.length >= config.truncateThreshold) {
    if (type === '[object Function]') {
      return !obj.name || obj.name === ''
        ? '[Function]'
        : '[Function: ' + obj.name + ']';
    } else if (type === '[object Array]') {
      return '[ Array(' + obj.length + ') ]';
    } else if (type === '[object Object]') {
      var keys = Object.keys(obj)
        , kstr = keys.length > 2
          ? keys.splice(0, 2).join(', ') + ', ...'
          : keys.join(', ');
      return '{ Object (' + kstr + ') }';
    } else {
      return str;
    }
  } else {
    return str;
  }
};


/***/ }),
/* 293 */
/***/ (function(module, exports) {


/**
 * slice() reference.
 */

var slice = Array.prototype.slice;

/**
 * Expose `co`.
 */

module.exports = co['default'] = co.co = co;

/**
 * Wrap the given generator `fn` into a
 * function that returns a promise.
 * This is a separate function so that
 * every `co()` call doesn't create a new,
 * unnecessary closure.
 *
 * @param {GeneratorFunction} fn
 * @return {Function}
 * @api public
 */

co.wrap = function (fn) {
  createPromise.__generatorFunction__ = fn;
  return createPromise;
  function createPromise() {
    return co.call(this, fn.apply(this, arguments));
  }
};

/**
 * Execute the generator function or a generator
 * and return a promise.
 *
 * @param {Function} fn
 * @return {Promise}
 * @api public
 */

function co(gen) {
  var ctx = this;
  var args = slice.call(arguments, 1)

  // we wrap everything in a promise to avoid promise chaining,
  // which leads to memory leak errors.
  // see https://github.com/tj/co/issues/180
  return new Promise(function(resolve, reject) {
    if (typeof gen === 'function') gen = gen.apply(ctx, args);
    if (!gen || typeof gen.next !== 'function') return resolve(gen);

    onFulfilled();

    /**
     * @param {Mixed} res
     * @return {Promise}
     * @api private
     */

    function onFulfilled(res) {
      var ret;
      try {
        ret = gen.next(res);
      } catch (e) {
        return reject(e);
      }
      next(ret);
    }

    /**
     * @param {Error} err
     * @return {Promise}
     * @api private
     */

    function onRejected(err) {
      var ret;
      try {
        ret = gen.throw(err);
      } catch (e) {
        return reject(e);
      }
      next(ret);
    }

    /**
     * Get the next value in the generator,
     * return a promise.
     *
     * @param {Object} ret
     * @return {Promise}
     * @api private
     */

    function next(ret) {
      if (ret.done) return resolve(ret.value);
      var value = toPromise.call(ctx, ret.value);
      if (value && isPromise(value)) return value.then(onFulfilled, onRejected);
      return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, '
        + 'but the following object was passed: "' + String(ret.value) + '"'));
    }
  });
}

/**
 * Convert a `yield`ed value into a promise.
 *
 * @param {Mixed} obj
 * @return {Promise}
 * @api private
 */

function toPromise(obj) {
  if (!obj) return obj;
  if (isPromise(obj)) return obj;
  if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);
  if ('function' == typeof obj) return thunkToPromise.call(this, obj);
  if (Array.isArray(obj)) return arrayToPromise.call(this, obj);
  if (isObject(obj)) return objectToPromise.call(this, obj);
  return obj;
}

/**
 * Convert a thunk to a promise.
 *
 * @param {Function}
 * @return {Promise}
 * @api private
 */

function thunkToPromise(fn) {
  var ctx = this;
  return new Promise(function (resolve, reject) {
    fn.call(ctx, function (err, res) {
      if (err) return reject(err);
      if (arguments.length > 2) res = slice.call(arguments, 1);
      resolve(res);
    });
  });
}

/**
 * Convert an array of "yieldables" to a promise.
 * Uses `Promise.all()` internally.
 *
 * @param {Array} obj
 * @return {Promise}
 * @api private
 */

function arrayToPromise(obj) {
  return Promise.all(obj.map(toPromise, this));
}

/**
 * Convert an object of "yieldables" to a promise.
 * Uses `Promise.all()` internally.
 *
 * @param {Object} obj
 * @return {Promise}
 * @api private
 */

function objectToPromise(obj){
  var results = new obj.constructor();
  var keys = Object.keys(obj);
  var promises = [];
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var promise = toPromise.call(this, obj[key]);
    if (promise && isPromise(promise)) defer(promise, key);
    else results[key] = obj[key];
  }
  return Promise.all(promises).then(function () {
    return results;
  });

  function defer(promise, key) {
    // predefine the key in the result
    results[key] = undefined;
    promises.push(promise.then(function (res) {
      results[key] = res;
    }));
  }
}

/**
 * Check if `obj` is a promise.
 *
 * @param {Object} obj
 * @return {Boolean}
 * @api private
 */

function isPromise(obj) {
  return 'function' == typeof obj.then;
}

/**
 * Check if `obj` is a generator.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */

function isGenerator(obj) {
  return 'function' == typeof obj.next && 'function' == typeof obj.throw;
}

/**
 * Check if `obj` is a generator function.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */
function isGeneratorFunction(obj) {
  var constructor = obj.constructor;
  if (!constructor) return false;
  if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;
  return isGenerator(constructor.prototype);
}

/**
 * Check for plain object.
 *
 * @param {Mixed} val
 * @return {Boolean}
 * @api private
 */

function isObject(val) {
  return Object == val.constructor;
}


/***/ }),
/* 294 */
/***/ (function(module, exports, __webpack_require__) {

var util = __webpack_require__(2);
var Stream = __webpack_require__(22).Stream;
var DelayedStream = __webpack_require__(719);
var defer = __webpack_require__(630);

module.exports = CombinedStream;
function CombinedStream() {
  this.writable = false;
  this.readable = true;
  this.dataSize = 0;
  this.maxDataSize = 2 * 1024 * 1024;
  this.pauseStreams = true;

  this._released = false;
  this._streams = [];
  this._currentStream = null;
}
util.inherits(CombinedStream, Stream);

CombinedStream.create = function(options) {
  var combinedStream = new this();

  options = options || {};
  for (var option in options) {
    combinedStream[option] = options[option];
  }

  return combinedStream;
};

CombinedStream.isStreamLike = function(stream) {
  return (typeof stream !== 'function')
    && (typeof stream !== 'string')
    && (typeof stream !== 'boolean')
    && (typeof stream !== 'number')
    && (!Buffer.isBuffer(stream));
};

CombinedStream.prototype.append = function(stream) {
  var isStreamLike = CombinedStream.isStreamLike(stream);

  if (isStreamLike) {
    if (!(stream instanceof DelayedStream)) {
      var newStream = DelayedStream.create(stream, {
        maxDataSize: Infinity,
        pauseStream: this.pauseStreams,
      });
      stream.on('data', this._checkDataSize.bind(this));
      stream = newStream;
    }

    this._handleErrors(stream);

    if (this.pauseStreams) {
      stream.pause();
    }
  }

  this._streams.push(stream);
  return this;
};

CombinedStream.prototype.pipe = function(dest, options) {
  Stream.prototype.pipe.call(this, dest, options);
  this.resume();
  return dest;
};

CombinedStream.prototype._getNext = function() {
  this._currentStream = null;
  var stream = this._streams.shift();


  if (typeof stream == 'undefined') {
    this.end();
    return;
  }

  if (typeof stream !== 'function') {
    this._pipeNext(stream);
    return;
  }

  var getStream = stream;
  getStream(function(stream) {
    var isStreamLike = CombinedStream.isStreamLike(stream);
    if (isStreamLike) {
      stream.on('data', this._checkDataSize.bind(this));
      this._handleErrors(stream);
    }

    defer(this._pipeNext.bind(this, stream));
  }.bind(this));
};

CombinedStream.prototype._pipeNext = function(stream) {
  this._currentStream = stream;

  var isStreamLike = CombinedStream.isStreamLike(stream);
  if (isStreamLike) {
    stream.on('end', this._getNext.bind(this));
    stream.pipe(this, {end: false});
    return;
  }

  var value = stream;
  this.write(value);
  this._getNext();
};

CombinedStream.prototype._handleErrors = function(stream) {
  var self = this;
  stream.on('error', function(err) {
    self._emitError(err);
  });
};

CombinedStream.prototype.write = function(data) {
  this.emit('data', data);
};

CombinedStream.prototype.pause = function() {
  if (!this.pauseStreams) {
    return;
  }

  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
  this.emit('pause');
};

CombinedStream.prototype.resume = function() {
  if (!this._released) {
    this._released = true;
    this.writable = true;
    this._getNext();
  }

  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
  this.emit('resume');
};

CombinedStream.prototype.end = function() {
  this._reset();
  this.emit('end');
};

CombinedStream.prototype.destroy = function() {
  this._reset();
  this.emit('close');
};

CombinedStream.prototype._reset = function() {
  this.writable = false;
  this._streams = [];
  this._currentStream = null;
};

CombinedStream.prototype._checkDataSize = function() {
  this._updateDataSize();
  if (this.dataSize <= this.maxDataSize) {
    return;
  }

  var message =
    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
  this._emitError(new Error(message));
};

CombinedStream.prototype._updateDataSize = function() {
  this.dataSize = 0;

  var self = this;
  this._streams.forEach(function(stream) {
    if (!stream.dataSize) {
      return;
    }

    self.dataSize += stream.dataSize;
  });

  if (this._currentStream && this._currentStream.dataSize) {
    this.dataSize += this._currentStream.dataSize;
  }
};

CombinedStream.prototype._emitError = function(err) {
  this._reset();
  this.emit('error', err);
};


/***/ }),
/* 295 */
/***/ (function(module, exports) {

// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');


/***/ }),
/* 296 */
/***/ (function(module, exports, __webpack_require__) {

var document = __webpack_require__(30).document;
module.exports = document && document.documentElement;


/***/ }),
/* 297 */
/***/ (function(module, exports, __webpack_require__) {

// check on default Array iterator
var Iterators = __webpack_require__(113);
var ITERATOR = __webpack_require__(34)('iterator');
var ArrayProto = Array.prototype;

module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};


/***/ }),
/* 298 */
/***/ (function(module, exports, __webpack_require__) {

// call something on iterator step with safe closing on error
var anObject = __webpack_require__(75);
module.exports = function (iterator, fn, value, entries) {
  try {
    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
  // 7.4.6 IteratorClose(iterator, completion)
  } catch (e) {
    var ret = iterator['return'];
    if (ret !== undefined) anObject(ret.call(iterator));
    throw e;
  }
};


/***/ }),
/* 299 */
/***/ (function(module, exports, __webpack_require__) {

var ITERATOR = __webpack_require__(34)('iterator');
var SAFE_CLOSING = false;

try {
  var riter = [7][ITERATOR]();
  riter['return'] = function () { SAFE_CLOSING = true; };
  // eslint-disable-next-line no-throw-literal
  Array.from(riter, function () { throw 2; });
} catch (e) { /* empty */ }

module.exports = function (exec, skipClosing) {
  if (!skipClosing && !SAFE_CLOSING) return false;
  var safe = false;
  try {
    var arr = [7];
    var iter = arr[ITERATOR]();
    iter.next = function () { return { done: safe = true }; };
    arr[ITERATOR] = function () { return iter; };
    exec(arr);
  } catch (e) { /* empty */ }
  return safe;
};


/***/ }),
/* 300 */
/***/ (function(module, exports) {

module.exports = function (done, value) {
  return { value: value, done: !!done };
};


/***/ }),
/* 301 */
/***/ (function(module, exports, __webpack_require__) {

var META = __webpack_require__(207)('meta');
var isObject = __webpack_require__(48);
var has = __webpack_require__(112);
var setDesc = __webpack_require__(62).f;
var id = 0;
var isExtensible = Object.isExtensible || function () {
  return true;
};
var FREEZE = !__webpack_require__(89)(function () {
  return isExtensible(Object.preventExtensions({}));
});
var setMeta = function (it) {
  setDesc(it, META, { value: {
    i: 'O' + ++id, // object ID
    w: {}          // weak collections IDs
  } });
};
var fastKey = function (it, create) {
  // return primitive with prefix
  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  if (!has(it, META)) {
    // can't set metadata to uncaught frozen object
    if (!isExtensible(it)) return 'F';
    // not necessary to add metadata
    if (!create) return 'E';
    // add missing metadata
    setMeta(it);
  // return object ID
  } return it[META].i;
};
var getWeak = function (it, create) {
  if (!has(it, META)) {
    // can't set metadata to uncaught frozen object
    if (!isExtensible(it)) return true;
    // not necessary to add metadata
    if (!create) return false;
    // add missing metadata
    setMeta(it);
  // return hash weak collections IDs
  } return it[META].w;
};
// add metadata on freeze-family methods calling
var onFreeze = function (it) {
  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
  return it;
};
var meta = module.exports = {
  KEY: META,
  NEED: false,
  fastKey: fastKey,
  getWeak: getWeak,
  onFreeze: onFreeze
};


/***/ }),
/* 302 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__(75);
var dPs = __webpack_require__(655);
var enumBugKeys = __webpack_require__(295);
var IE_PROTO = __webpack_require__(205)('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__(198)('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__(296).appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),
/* 303 */
/***/ (function(module, exports) {

exports.f = {}.propertyIsEnumerable;


/***/ }),
/* 304 */
/***/ (function(module, exports, __webpack_require__) {

var getKeys = __webpack_require__(147);
var toIObject = __webpack_require__(149);
var isEnum = __webpack_require__(303).f;
module.exports = function (isEntries) {
  return function (it) {
    var O = toIObject(it);
    var keys = getKeys(O);
    var length = keys.length;
    var i = 0;
    var result = [];
    var key;
    while (length > i) if (isEnum.call(O, key = keys[i++])) {
      result.push(isEntries ? [key, O[key]] : O[key]);
    } return result;
  };
};


/***/ }),
/* 305 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return { e: false, v: exec() };
  } catch (e) {
    return { e: true, v: e };
  }
};


/***/ }),
/* 306 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(75);
var isObject = __webpack_require__(48);
var newPromiseCapability = __webpack_require__(202);

module.exports = function (C, x) {
  anObject(C);
  if (isObject(x) && x.constructor === C) return x;
  var promiseCapability = newPromiseCapability.f(C);
  var resolve = promiseCapability.resolve;
  resolve(x);
  return promiseCapability.promise;
};


/***/ }),
/* 307 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(30);
var core = __webpack_require__(26);
var dP = __webpack_require__(62);
var DESCRIPTORS = __webpack_require__(76);
var SPECIES = __webpack_require__(34)('species');

module.exports = function (KEY) {
  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
    configurable: true,
    get: function () { return this; }
  });
};


/***/ }),
/* 308 */
/***/ (function(module, exports, __webpack_require__) {

var core = __webpack_require__(26);
var global = __webpack_require__(30);
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: core.version,
  mode: __webpack_require__(201) ? 'pure' : 'global',
  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
});


/***/ }),
/* 309 */
/***/ (function(module, exports, __webpack_require__) {

// 7.3.20 SpeciesConstructor(O, defaultConstructor)
var anObject = __webpack_require__(75);
var aFunction = __webpack_require__(109);
var SPECIES = __webpack_require__(34)('species');
module.exports = function (O, D) {
  var C = anObject(O).constructor;
  var S;
  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
};


/***/ }),
/* 310 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(61);
var invoke = __webpack_require__(650);
var html = __webpack_require__(296);
var cel = __webpack_require__(198);
var global = __webpack_require__(30);
var process = global.process;
var setTask = global.setImmediate;
var clearTask = global.clearImmediate;
var MessageChannel = global.MessageChannel;
var Dispatch = global.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
var defer, channel, port;
var run = function () {
  var id = +this;
  // eslint-disable-next-line no-prototype-builtins
  if (queue.hasOwnProperty(id)) {
    var fn = queue[id];
    delete queue[id];
    fn();
  }
};
var listener = function (event) {
  run.call(event.data);
};
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
if (!setTask || !clearTask) {
  setTask = function setImmediate(fn) {
    var args = [];
    var i = 1;
    while (arguments.length > i) args.push(arguments[i++]);
    queue[++counter] = function () {
      // eslint-disable-next-line no-new-func
      invoke(typeof fn == 'function' ? fn : Function(fn), args);
    };
    defer(counter);
    return counter;
  };
  clearTask = function clearImmediate(id) {
    delete queue[id];
  };
  // Node.js 0.8-
  if (__webpack_require__(110)(process) == 'process') {
    defer = function (id) {
      process.nextTick(ctx(run, id, 1));
    };
  // Sphere (JS game engine) Dispatch API
  } else if (Dispatch && Dispatch.now) {
    defer = function (id) {
      Dispatch.now(ctx(run, id, 1));
    };
  // Browsers with MessageChannel, includes WebWorkers
  } else if (MessageChannel) {
    channel = new MessageChannel();
    port = channel.port2;
    channel.port1.onmessage = listener;
    defer = ctx(port.postMessage, port, 1);
  // Browsers with postMessage, skip WebWorkers
  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
    defer = function (id) {
      global.postMessage(id + '', '*');
    };
    global.addEventListener('message', listener, false);
  // IE8-
  } else if (ONREADYSTATECHANGE in cel('script')) {
    defer = function (id) {
      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
        html.removeChild(this);
        run.call(id);
      };
    };
  // Rest old browsers
  } else {
    defer = function (id) {
      setTimeout(ctx(run, id, 1), 0);
    };
  }
}
module.exports = {
  set: setTask,
  clear: clearTask
};


/***/ }),
/* 311 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(48);
module.exports = function (it, TYPE) {
  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
  return it;
};


/***/ }),
/* 312 */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(196);
var ITERATOR = __webpack_require__(34)('iterator');
var Iterators = __webpack_require__(113);
module.exports = __webpack_require__(26).getIteratorMethod = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};


/***/ }),
/* 313 */
/***/ (function(module, exports) {



/***/ }),
/* 314 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(668);
var global = __webpack_require__(30);
var hide = __webpack_require__(77);
var Iterators = __webpack_require__(113);
var TO_STRING_TAG = __webpack_require__(34)('toStringTag');

var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
  'TextTrackList,TouchList').split(',');

for (var i = 0; i < DOMIterables.length; i++) {
  var NAME = DOMIterables[i];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
  Iterators[NAME] = Iterators.Array;
}


/***/ }),
/* 315 */
/***/ (function(module, exports, __webpack_require__) {

exports.alphasort = alphasort
exports.alphasorti = alphasorti
exports.setopts = setopts
exports.ownProp = ownProp
exports.makeAbs = makeAbs
exports.finish = finish
exports.mark = mark
exports.isIgnored = isIgnored
exports.childrenIgnored = childrenIgnored

function ownProp (obj, field) {
  return Object.prototype.hasOwnProperty.call(obj, field)
}

var path = __webpack_require__(0)
var minimatch = __webpack_require__(64)
var isAbsolute = __webpack_require__(65)
var Minimatch = minimatch.Minimatch

function alphasorti (a, b) {
  return a.toLowerCase().localeCompare(b.toLowerCase())
}

function alphasort (a, b) {
  return a.localeCompare(b)
}

function setupIgnores (self, options) {
  self.ignore = options.ignore || []

  if (!Array.isArray(self.ignore))
    self.ignore = [self.ignore]

  if (self.ignore.length) {
    self.ignore = self.ignore.map(ignoreMap)
  }
}

// ignore patterns are always in dot:true mode.
function ignoreMap (pattern) {
  var gmatcher = null
  if (pattern.slice(-3) === '/**') {
    var gpattern = pattern.replace(/(\/\*\*)+$/, '')
    gmatcher = new Minimatch(gpattern, { dot: true })
  }

  return {
    matcher: new Minimatch(pattern, { dot: true }),
    gmatcher: gmatcher
  }
}

function setopts (self, pattern, options) {
  if (!options)
    options = {}

  // base-matching: just use globstar for that.
  if (options.matchBase && -1 === pattern.indexOf("/")) {
    if (options.noglobstar) {
      throw new Error("base matching requires globstar")
    }
    pattern = "**/" + pattern
  }

  self.silent = !!options.silent
  self.pattern = pattern
  self.strict = options.strict !== false
  self.realpath = !!options.realpath
  self.realpathCache = options.realpathCache || Object.create(null)
  self.follow = !!options.follow
  self.dot = !!options.dot
  self.mark = !!options.mark
  self.nodir = !!options.nodir
  if (self.nodir)
    self.mark = true
  self.sync = !!options.sync
  self.nounique = !!options.nounique
  self.nonull = !!options.nonull
  self.nosort = !!options.nosort
  self.nocase = !!options.nocase
  self.stat = !!options.stat
  self.noprocess = !!options.noprocess

  self.maxLength = options.maxLength || Infinity
  self.cache = options.cache || Object.create(null)
  self.statCache = options.statCache || Object.create(null)
  self.symlinks = options.symlinks || Object.create(null)

  setupIgnores(self, options)

  self.changedCwd = false
  var cwd = process.cwd()
  if (!ownProp(options, "cwd"))
    self.cwd = cwd
  else {
    self.cwd = options.cwd
    self.changedCwd = path.resolve(options.cwd) !== cwd
  }

  self.root = options.root || path.resolve(self.cwd, "/")
  self.root = path.resolve(self.root)
  if (process.platform === "win32")
    self.root = self.root.replace(/\\/g, "/")

  self.nomount = !!options.nomount

  // disable comments and negation in Minimatch.
  // Note that they are not supported in Glob itself anyway.
  options.nonegate = true
  options.nocomment = true

  self.minimatch = new Minimatch(pattern, options)
  self.options = self.minimatch.options
}

function finish (self) {
  var nou = self.nounique
  var all = nou ? [] : Object.create(null)

  for (var i = 0, l = self.matches.length; i < l; i ++) {
    var matches = self.matches[i]
    if (!matches || Object.keys(matches).length === 0) {
      if (self.nonull) {
        // do like the shell, and spit out the literal glob
        var literal = self.minimatch.globSet[i]
        if (nou)
          all.push(literal)
        else
          all[literal] = true
      }
    } else {
      // had matches
      var m = Object.keys(matches)
      if (nou)
        all.push.apply(all, m)
      else
        m.forEach(function (m) {
          all[m] = true
        })
    }
  }

  if (!nou)
    all = Object.keys(all)

  if (!self.nosort)
    all = all.sort(self.nocase ? alphasorti : alphasort)

  // at *some* point we statted all of these
  if (self.mark) {
    for (var i = 0; i < all.length; i++) {
      all[i] = self._mark(all[i])
    }
    if (self.nodir) {
      all = all.filter(function (e) {
        return !(/\/$/.test(e))
      })
    }
  }

  if (self.ignore.length)
    all = all.filter(function(m) {
      return !isIgnored(self, m)
    })

  self.found = all
}

function mark (self, p) {
  var abs = makeAbs(self, p)
  var c = self.cache[abs]
  var m = p
  if (c) {
    var isDir = c === 'DIR' || Array.isArray(c)
    var slash = p.slice(-1) === '/'

    if (isDir && !slash)
      m += '/'
    else if (!isDir && slash)
      m = m.slice(0, -1)

    if (m !== p) {
      var mabs = makeAbs(self, m)
      self.statCache[mabs] = self.statCache[abs]
      self.cache[mabs] = self.cache[abs]
    }
  }

  return m
}

// lotta situps...
function makeAbs (self, f) {
  var abs = f
  if (f.charAt(0) === '/') {
    abs = path.join(self.root, f)
  } else if (isAbsolute(f) || f === '') {
    abs = f
  } else if (self.changedCwd) {
    abs = path.resolve(self.cwd, f)
  } else {
    abs = path.resolve(f)
  }
  return abs
}


// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
function isIgnored (self, path) {
  if (!self.ignore.length)
    return false

  return self.ignore.some(function(item) {
    return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
  })
}

function childrenIgnored (self, path) {
  if (!self.ignore.length)
    return false

  return self.ignore.some(function(item) {
    return !!(item.gmatcher && item.gmatcher.match(path))
  })
}


/***/ }),
/* 316 */
/***/ (function(module, exports, __webpack_require__) {

// Approach:
//
// 1. Get the minimatch set
// 2. For each pattern in the set, PROCESS(pattern, false)
// 3. Store matches per-set, then uniq them
//
// PROCESS(pattern, inGlobStar)
// Get the first [n] items from pattern that are all strings
// Join these together.  This is PREFIX.
//   If there is no more remaining, then stat(PREFIX) and
//   add to matches if it succeeds.  END.
//
// If inGlobStar and PREFIX is symlink and points to dir
//   set ENTRIES = []
// else readdir(PREFIX) as ENTRIES
//   If fail, END
//
// with ENTRIES
//   If pattern[n] is GLOBSTAR
//     // handle the case where the globstar match is empty
//     // by pruning it out, and testing the resulting pattern
//     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
//     // handle other cases.
//     for ENTRY in ENTRIES (not dotfiles)
//       // attach globstar + tail onto the entry
//       // Mark that this entry is a globstar match
//       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
//
//   else // not globstar
//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
//       Test ENTRY against pattern[n]
//       If fails, continue
//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
//
// Caveat:
//   Cache all stats and readdirs results to minimize syscall.  Since all
//   we ever care about is existence and directory-ness, we can just keep
//   `true` for files, and [children,...] for directories, or `false` for
//   things that don't exist.

module.exports = glob

var fs = __webpack_require__(1)
var minimatch = __webpack_require__(64)
var Minimatch = minimatch.Minimatch
var inherits = __webpack_require__(54)
var EE = __webpack_require__(18).EventEmitter
var path = __webpack_require__(0)
var assert = __webpack_require__(11)
var isAbsolute = __webpack_require__(65)
var globSync = __webpack_require__(682)
var common = __webpack_require__(315)
var alphasort = common.alphasort
var alphasorti = common.alphasorti
var setopts = common.setopts
var ownProp = common.ownProp
var inflight = __webpack_require__(366)
var util = __webpack_require__(2)
var childrenIgnored = common.childrenIgnored
var isIgnored = common.isIgnored

var once = __webpack_require__(233)

function glob (pattern, options, cb) {
  if (typeof options === 'function') cb = options, options = {}
  if (!options) options = {}

  if (options.sync) {
    if (cb)
      throw new TypeError('callback provided to sync glob')
    return globSync(pattern, options)
  }

  return new Glob(pattern, options, cb)
}

glob.sync = globSync
var GlobSync = glob.GlobSync = globSync.GlobSync

// old api surface
glob.glob = glob

function extend (origin, add) {
  if (add === null || typeof add !== 'object') {
    return origin
  }

  var keys = Object.keys(add)
  var i = keys.length
  while (i--) {
    origin[keys[i]] = add[keys[i]]
  }
  return origin
}

glob.hasMagic = function (pattern, options_) {
  var options = extend({}, options_)
  options.noprocess = true

  var g = new Glob(pattern, options)
  var set = g.minimatch.set
  if (set.length > 1)
    return true

  for (var j = 0; j < set[0].length; j++) {
    if (typeof set[0][j] !== 'string')
      return true
  }

  return false
}

glob.Glob = Glob
inherits(Glob, EE)
function Glob (pattern, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = null
  }

  if (options && options.sync) {
    if (cb)
      throw new TypeError('callback provided to sync glob')
    return new GlobSync(pattern, options)
  }

  if (!(this instanceof Glob))
    return new Glob(pattern, options, cb)

  setopts(this, pattern, options)
  this._didRealPath = false

  // process each pattern in the minimatch set
  var n = this.minimatch.set.length

  // The matches are stored as {<filename>: true,...} so that
  // duplicates are automagically pruned.
  // Later, we do an Object.keys() on these.
  // Keep them as a list so we can fill in when nonull is set.
  this.matches = new Array(n)

  if (typeof cb === 'function') {
    cb = once(cb)
    this.on('error', cb)
    this.on('end', function (matches) {
      cb(null, matches)
    })
  }

  var self = this
  var n = this.minimatch.set.length
  this._processing = 0
  this.matches = new Array(n)

  this._emitQueue = []
  this._processQueue = []
  this.paused = false

  if (this.noprocess)
    return this

  if (n === 0)
    return done()

  for (var i = 0; i < n; i ++) {
    this._process(this.minimatch.set[i], i, false, done)
  }

  function done () {
    --self._processing
    if (self._processing <= 0)
      self._finish()
  }
}

Glob.prototype._finish = function () {
  assert(this instanceof Glob)
  if (this.aborted)
    return

  if (this.realpath && !this._didRealpath)
    return this._realpath()

  common.finish(this)
  this.emit('end', this.found)
}

Glob.prototype._realpath = function () {
  if (this._didRealpath)
    return

  this._didRealpath = true

  var n = this.matches.length
  if (n === 0)
    return this._finish()

  var self = this
  for (var i = 0; i < this.matches.length; i++)
    this._realpathSet(i, next)

  function next () {
    if (--n === 0)
      self._finish()
  }
}

Glob.prototype._realpathSet = function (index, cb) {
  var matchset = this.matches[index]
  if (!matchset)
    return cb()

  var found = Object.keys(matchset)
  var self = this
  var n = found.length

  if (n === 0)
    return cb()

  var set = this.matches[index] = Object.create(null)
  found.forEach(function (p, i) {
    // If there's a problem with the stat, then it means that
    // one or more of the links in the realpath couldn't be
    // resolved.  just return the abs value in that case.
    p = self._makeAbs(p)
    fs.realpath(p, self.realpathCache, function (er, real) {
      if (!er)
        set[real] = true
      else if (er.syscall === 'stat')
        set[p] = true
      else
        self.emit('error', er) // srsly wtf right here

      if (--n === 0) {
        self.matches[index] = set
        cb()
      }
    })
  })
}

Glob.prototype._mark = function (p) {
  return common.mark(this, p)
}

Glob.prototype._makeAbs = function (f) {
  return common.makeAbs(this, f)
}

Glob.prototype.abort = function () {
  this.aborted = true
  this.emit('abort')
}

Glob.prototype.pause = function () {
  if (!this.paused) {
    this.paused = true
    this.emit('pause')
  }
}

Glob.prototype.resume = function () {
  if (this.paused) {
    this.emit('resume')
    this.paused = false
    if (this._emitQueue.length) {
      var eq = this._emitQueue.slice(0)
      this._emitQueue.length = 0
      for (var i = 0; i < eq.length; i ++) {
        var e = eq[i]
        this._emitMatch(e[0], e[1])
      }
    }
    if (this._processQueue.length) {
      var pq = this._processQueue.slice(0)
      this._processQueue.length = 0
      for (var i = 0; i < pq.length; i ++) {
        var p = pq[i]
        this._processing--
        this._process(p[0], p[1], p[2], p[3])
      }
    }
  }
}

Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
  assert(this instanceof Glob)
  assert(typeof cb === 'function')

  if (this.aborted)
    return

  this._processing++
  if (this.paused) {
    this._processQueue.push([pattern, index, inGlobStar, cb])
    return
  }

  //console.error('PROCESS %d', this._processing, pattern)

  // Get the first [n] parts of pattern that are all strings.
  var n = 0
  while (typeof pattern[n] === 'string') {
    n ++
  }
  // now n is the index of the first one that is *not* a string.

  // see if there's anything else
  var prefix
  switch (n) {
    // if not, then this is rather simple
    case pattern.length:
      this._processSimple(pattern.join('/'), index, cb)
      return

    case 0:
      // pattern *starts* with some non-trivial item.
      // going to readdir(cwd), but not include the prefix in matches.
      prefix = null
      break

    default:
      // pattern has some string bits in the front.
      // whatever it starts with, whether that's 'absolute' like /foo/bar,
      // or 'relative' like '../baz'
      prefix = pattern.slice(0, n).join('/')
      break
  }

  var remain = pattern.slice(n)

  // get the list of entries.
  var read
  if (prefix === null)
    read = '.'
  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
    if (!prefix || !isAbsolute(prefix))
      prefix = '/' + prefix
    read = prefix
  } else
    read = prefix

  var abs = this._makeAbs(read)

  //if ignored, skip _processing
  if (childrenIgnored(this, read))
    return cb()

  var isGlobStar = remain[0] === minimatch.GLOBSTAR
  if (isGlobStar)
    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
  else
    this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
}

Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
  var self = this
  this._readdir(abs, inGlobStar, function (er, entries) {
    return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
  })
}

Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {

  // if the abs isn't a dir, then nothing can match!
  if (!entries)
    return cb()

  // It will only match dot entries if it starts with a dot, or if
  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
  var pn = remain[0]
  var negate = !!this.minimatch.negate
  var rawGlob = pn._glob
  var dotOk = this.dot || rawGlob.charAt(0) === '.'

  var matchedEntries = []
  for (var i = 0; i < entries.length; i++) {
    var e = entries[i]
    if (e.charAt(0) !== '.' || dotOk) {
      var m
      if (negate && !prefix) {
        m = !e.match(pn)
      } else {
        m = e.match(pn)
      }
      if (m)
        matchedEntries.push(e)
    }
  }

  //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)

  var len = matchedEntries.length
  // If there are no matched entries, then nothing matches.
  if (len === 0)
    return cb()

  // if this is the last remaining pattern bit, then no need for
  // an additional stat *unless* the user has specified mark or
  // stat explicitly.  We know they exist, since readdir returned
  // them.

  if (remain.length === 1 && !this.mark && !this.stat) {
    if (!this.matches[index])
      this.matches[index] = Object.create(null)

    for (var i = 0; i < len; i ++) {
      var e = matchedEntries[i]
      if (prefix) {
        if (prefix !== '/')
          e = prefix + '/' + e
        else
          e = prefix + e
      }

      if (e.charAt(0) === '/' && !this.nomount) {
        e = path.join(this.root, e)
      }
      this._emitMatch(index, e)
    }
    // This was the last one, and no stats were needed
    return cb()
  }

  // now test all matched entries as stand-ins for that part
  // of the pattern.
  remain.shift()
  for (var i = 0; i < len; i ++) {
    var e = matchedEntries[i]
    var newPattern
    if (prefix) {
      if (prefix !== '/')
        e = prefix + '/' + e
      else
        e = prefix + e
    }
    this._process([e].concat(remain), index, inGlobStar, cb)
  }
  cb()
}

Glob.prototype._emitMatch = function (index, e) {
  if (this.aborted)
    return

  if (this.matches[index][e])
    return

  if (isIgnored(this, e))
    return

  if (this.paused) {
    this._emitQueue.push([index, e])
    return
  }

  var abs = this._makeAbs(e)

  if (this.nodir) {
    var c = this.cache[abs]
    if (c === 'DIR' || Array.isArray(c))
      return
  }

  if (this.mark)
    e = this._mark(e)

  this.matches[index][e] = true

  var st = this.statCache[abs]
  if (st)
    this.emit('stat', e, st)

  this.emit('match', e)
}

Glob.prototype._readdirInGlobStar = function (abs, cb) {
  if (this.aborted)
    return

  // follow all symlinked directories forever
  // just proceed as if this is a non-globstar situation
  if (this.follow)
    return this._readdir(abs, false, cb)

  var lstatkey = 'lstat\0' + abs
  var self = this
  var lstatcb = inflight(lstatkey, lstatcb_)

  if (lstatcb)
    fs.lstat(abs, lstatcb)

  function lstatcb_ (er, lstat) {
    if (er)
      return cb()

    var isSym = lstat.isSymbolicLink()
    self.symlinks[abs] = isSym

    // If it's not a symlink or a dir, then it's definitely a regular file.
    // don't bother doing a readdir in that case.
    if (!isSym && !lstat.isDirectory()) {
      self.cache[abs] = 'FILE'
      cb()
    } else
      self._readdir(abs, false, cb)
  }
}

Glob.prototype._readdir = function (abs, inGlobStar, cb) {
  if (this.aborted)
    return

  cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
  if (!cb)
    return

  //console.error('RD %j %j', +inGlobStar, abs)
  if (inGlobStar && !ownProp(this.symlinks, abs))
    return this._readdirInGlobStar(abs, cb)

  if (ownProp(this.cache, abs)) {
    var c = this.cache[abs]
    if (!c || c === 'FILE')
      return cb()

    if (Array.isArray(c))
      return cb(null, c)
  }

  var self = this
  fs.readdir(abs, readdirCb(this, abs, cb))
}

function readdirCb (self, abs, cb) {
  return function (er, entries) {
    if (er)
      self._readdirError(abs, er, cb)
    else
      self._readdirEntries(abs, entries, cb)
  }
}

Glob.prototype._readdirEntries = function (abs, entries, cb) {
  if (this.aborted)
    return

  // if we haven't asked to stat everything, then just
  // assume that everything in there exists, so we can avoid
  // having to stat it a second time.
  if (!this.mark && !this.stat) {
    for (var i = 0; i < entries.length; i ++) {
      var e = entries[i]
      if (abs === '/')
        e = abs + e
      else
        e = abs + '/' + e
      this.cache[e] = true
    }
  }

  this.cache[abs] = entries
  return cb(null, entries)
}

Glob.prototype._readdirError = function (f, er, cb) {
  if (this.aborted)
    return

  // handle errors, and cache the information
  switch (er.code) {
    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
    case 'ENOTDIR': // totally normal. means it *does* exist.
      this.cache[this._makeAbs(f)] = 'FILE'
      break

    case 'ENOENT': // not terribly unusual
    case 'ELOOP':
    case 'ENAMETOOLONG':
    case 'UNKNOWN':
      this.cache[this._makeAbs(f)] = false
      break

    default: // some unusual error.  Treat as failure.
      this.cache[this._makeAbs(f)] = false
      if (this.strict) {
        this.emit('error', er)
        // If the error is handled, then we abort
        // if not, we threw out of here
        this.abort()
      }
      if (!this.silent)
        console.error('glob error', er)
      break
  }

  return cb()
}

Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
  var self = this
  this._readdir(abs, inGlobStar, function (er, entries) {
    self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
  })
}


Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
  //console.error('pgs2', prefix, remain[0], entries)

  // no entries means not a dir, so it can never have matches
  // foo.txt/** doesn't match foo.txt
  if (!entries)
    return cb()

  // test without the globstar, and with every child both below
  // and replacing the globstar.
  var remainWithoutGlobStar = remain.slice(1)
  var gspref = prefix ? [ prefix ] : []
  var noGlobStar = gspref.concat(remainWithoutGlobStar)

  // the noGlobStar pattern exits the inGlobStar state
  this._process(noGlobStar, index, false, cb)

  var isSym = this.symlinks[abs]
  var len = entries.length

  // If it's a symlink, and we're in a globstar, then stop
  if (isSym && inGlobStar)
    return cb()

  for (var i = 0; i < len; i++) {
    var e = entries[i]
    if (e.charAt(0) === '.' && !this.dot)
      continue

    // these two cases enter the inGlobStar state
    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
    this._process(instead, index, true, cb)

    var below = gspref.concat(entries[i], remain)
    this._process(below, index, true, cb)
  }

  cb()
}

Glob.prototype._processSimple = function (prefix, index, cb) {
  // XXX review this.  Shouldn't it be doing the mounting etc
  // before doing stat?  kinda weird?
  var self = this
  this._stat(prefix, function (er, exists) {
    self._processSimple2(prefix, index, er, exists, cb)
  })
}
Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {

  //console.error('ps2', prefix, exists)

  if (!this.matches[index])
    this.matches[index] = Object.create(null)

  // If it doesn't exist, then just mark the lack of results
  if (!exists)
    return cb()

  if (prefix && isAbsolute(prefix) && !this.nomount) {
    var trail = /[\/\\]$/.test(prefix)
    if (prefix.charAt(0) === '/') {
      prefix = path.join(this.root, prefix)
    } else {
      prefix = path.resolve(this.root, prefix)
      if (trail)
        prefix += '/'
    }
  }

  if (process.platform === 'win32')
    prefix = prefix.replace(/\\/g, '/')

  // Mark this as a match
  this._emitMatch(index, prefix)
  cb()
}

// Returns either 'DIR', 'FILE', or false
Glob.prototype._stat = function (f, cb) {
  var abs = this._makeAbs(f)
  var needDir = f.slice(-1) === '/'

  if (f.length > this.maxLength)
    return cb()

  if (!this.stat && ownProp(this.cache, abs)) {
    var c = this.cache[abs]

    if (Array.isArray(c))
      c = 'DIR'

    // It exists, but maybe not how we need it
    if (!needDir || c === 'DIR')
      return cb(null, c)

    if (needDir && c === 'FILE')
      return cb()

    // otherwise we have to stat, because maybe c=true
    // if we know it exists, but not what it is.
  }

  var exists
  var stat = this.statCache[abs]
  if (stat !== undefined) {
    if (stat === false)
      return cb(null, stat)
    else {
      var type = stat.isDirectory() ? 'DIR' : 'FILE'
      if (needDir && type === 'FILE')
        return cb()
      else
        return cb(null, type, stat)
    }
  }

  var self = this
  var statcb = inflight('stat\0' + abs, lstatcb_)
  if (statcb)
    fs.lstat(abs, statcb)

  function lstatcb_ (er, lstat) {
    if (lstat && lstat.isSymbolicLink()) {
      // If it's a symlink, then treat it as the target, unless
      // the target does not exist, then treat it as a file.
      return fs.stat(abs, function (er, stat) {
        if (er)
          self._stat2(f, abs, null, lstat, cb)
        else
          self._stat2(f, abs, er, stat, cb)
      })
    } else {
      self._stat2(f, abs, er, lstat, cb)
    }
  }
}

Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
  if (er) {
    this.statCache[abs] = false
    return cb()
  }

  var needDir = f.slice(-1) === '/'
  this.statCache[abs] = stat

  if (abs.slice(-1) === '/' && !stat.isDirectory())
    return cb(null, false, stat)

  var c = stat.isDirectory() ? 'DIR' : 'FILE'
  this.cache[abs] = this.cache[abs] || c

  if (needDir && c !== 'DIR')
    return cb()

  return cb(null, c, stat)
}


/***/ }),
/* 317 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function escapeArgument(arg, quote) {
    // Convert to string
    arg = '' + arg;

    // If we are not going to quote the argument,
    // escape shell metacharacters, including double and single quotes:
    if (!quote) {
        arg = arg.replace(/([()%!^<>&|;,"'\s])/g, '^$1');
    } else {
        // Sequence of backslashes followed by a double quote:
        // double up all the backslashes and escape the double quote
        arg = arg.replace(/(\\*)"/g, '$1$1\\"');

        // Sequence of backslashes followed by the end of the string
        // (which will become a double quote later):
        // double up all the backslashes
        arg = arg.replace(/(\\*)$/, '$1$1');

        // All other backslashes occur literally

        // Quote the whole thing:
        arg = '"' + arg + '"';
    }

    return arg;
}

module.exports = escapeArgument;


/***/ }),
/* 318 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var path = __webpack_require__(0);
var which = __webpack_require__(1125);
var LRU = __webpack_require__(378);

var commandCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec

function resolveCommand(command, noExtension) {
    var resolved;

    noExtension = !!noExtension;
    resolved = commandCache.get(command + '!' + noExtension);

    // Check if its resolved in the cache
    if (commandCache.has(command)) {
        return commandCache.get(command);
    }

    try {
        resolved = !noExtension ?
            which.sync(command) :
            which.sync(command, { pathExt: path.delimiter + (process.env.PATHEXT || '') });
    } catch (e) { /* empty */ }

    commandCache.set(command + '!' + noExtension, resolved);

    return resolved;
}

module.exports = resolveCommand;


/***/ }),
/* 319 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (Math) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_algo = C.algo;

	    // Initialization and round constants tables
	    var H = [];
	    var K = [];

	    // Compute constants
	    (function () {
	        function isPrime(n) {
	            var sqrtN = Math.sqrt(n);
	            for (var factor = 2; factor <= sqrtN; factor++) {
	                if (!(n % factor)) {
	                    return false;
	                }
	            }

	            return true;
	        }

	        function getFractionalBits(n) {
	            return ((n - (n | 0)) * 0x100000000) | 0;
	        }

	        var n = 2;
	        var nPrime = 0;
	        while (nPrime < 64) {
	            if (isPrime(n)) {
	                if (nPrime < 8) {
	                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
	                }
	                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));

	                nPrime++;
	            }

	            n++;
	        }
	    }());

	    // Reusable object
	    var W = [];

	    /**
	     * SHA-256 hash algorithm.
	     */
	    var SHA256 = C_algo.SHA256 = Hasher.extend({
	        _doReset: function () {
	            this._hash = new WordArray.init(H.slice(0));
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcut
	            var H = this._hash.words;

	            // Working variables
	            var a = H[0];
	            var b = H[1];
	            var c = H[2];
	            var d = H[3];
	            var e = H[4];
	            var f = H[5];
	            var g = H[6];
	            var h = H[7];

	            // Computation
	            for (var i = 0; i < 64; i++) {
	                if (i < 16) {
	                    W[i] = M[offset + i] | 0;
	                } else {
	                    var gamma0x = W[i - 15];
	                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^
	                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^
	                                   (gamma0x >>> 3);

	                    var gamma1x = W[i - 2];
	                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^
	                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^
	                                   (gamma1x >>> 10);

	                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
	                }

	                var ch  = (e & f) ^ (~e & g);
	                var maj = (a & b) ^ (a & c) ^ (b & c);

	                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
	                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));

	                var t1 = h + sigma1 + ch + K[i] + W[i];
	                var t2 = sigma0 + maj;

	                h = g;
	                g = f;
	                f = e;
	                e = (d + t1) | 0;
	                d = c;
	                c = b;
	                b = a;
	                a = (t1 + t2) | 0;
	            }

	            // Intermediate hash value
	            H[0] = (H[0] + a) | 0;
	            H[1] = (H[1] + b) | 0;
	            H[2] = (H[2] + c) | 0;
	            H[3] = (H[3] + d) | 0;
	            H[4] = (H[4] + e) | 0;
	            H[5] = (H[5] + f) | 0;
	            H[6] = (H[6] + g) | 0;
	            H[7] = (H[7] + h) | 0;
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;

	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
	            data.sigBytes = dataWords.length * 4;

	            // Hash final blocks
	            this._process();

	            // Return final computed hash
	            return this._hash;
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);
	            clone._hash = this._hash.clone();

	            return clone;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA256('message');
	     *     var hash = CryptoJS.SHA256(wordArray);
	     */
	    C.SHA256 = Hasher._createHelper(SHA256);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA256(message, key);
	     */
	    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
	}(Math));


	return CryptoJS.SHA256;

}));

/***/ }),
/* 320 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(151));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./x64-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Hasher = C_lib.Hasher;
	    var C_x64 = C.x64;
	    var X64Word = C_x64.Word;
	    var X64WordArray = C_x64.WordArray;
	    var C_algo = C.algo;

	    function X64Word_create() {
	        return X64Word.create.apply(X64Word, arguments);
	    }

	    // Constants
	    var K = [
	        X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
	        X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
	        X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
	        X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
	        X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
	        X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
	        X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
	        X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
	        X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
	        X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
	        X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
	        X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
	        X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
	        X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
	        X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
	        X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
	        X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
	        X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
	        X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
	        X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
	        X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
	        X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
	        X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
	        X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
	        X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
	        X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
	        X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
	        X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
	        X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
	        X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
	        X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
	        X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
	        X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
	        X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
	        X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
	        X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
	        X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
	        X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
	        X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
	        X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
	    ];

	    // Reusable objects
	    var W = [];
	    (function () {
	        for (var i = 0; i < 80; i++) {
	            W[i] = X64Word_create();
	        }
	    }());

	    /**
	     * SHA-512 hash algorithm.
	     */
	    var SHA512 = C_algo.SHA512 = Hasher.extend({
	        _doReset: function () {
	            this._hash = new X64WordArray.init([
	                new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
	                new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
	                new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
	                new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
	            ]);
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcuts
	            var H = this._hash.words;

	            var H0 = H[0];
	            var H1 = H[1];
	            var H2 = H[2];
	            var H3 = H[3];
	            var H4 = H[4];
	            var H5 = H[5];
	            var H6 = H[6];
	            var H7 = H[7];

	            var H0h = H0.high;
	            var H0l = H0.low;
	            var H1h = H1.high;
	            var H1l = H1.low;
	            var H2h = H2.high;
	            var H2l = H2.low;
	            var H3h = H3.high;
	            var H3l = H3.low;
	            var H4h = H4.high;
	            var H4l = H4.low;
	            var H5h = H5.high;
	            var H5l = H5.low;
	            var H6h = H6.high;
	            var H6l = H6.low;
	            var H7h = H7.high;
	            var H7l = H7.low;

	            // Working variables
	            var ah = H0h;
	            var al = H0l;
	            var bh = H1h;
	            var bl = H1l;
	            var ch = H2h;
	            var cl = H2l;
	            var dh = H3h;
	            var dl = H3l;
	            var eh = H4h;
	            var el = H4l;
	            var fh = H5h;
	            var fl = H5l;
	            var gh = H6h;
	            var gl = H6l;
	            var hh = H7h;
	            var hl = H7l;

	            // Rounds
	            for (var i = 0; i < 80; i++) {
	                // Shortcut
	                var Wi = W[i];

	                // Extend message
	                if (i < 16) {
	                    var Wih = Wi.high = M[offset + i * 2]     | 0;
	                    var Wil = Wi.low  = M[offset + i * 2 + 1] | 0;
	                } else {
	                    // Gamma0
	                    var gamma0x  = W[i - 15];
	                    var gamma0xh = gamma0x.high;
	                    var gamma0xl = gamma0x.low;
	                    var gamma0h  = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
	                    var gamma0l  = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));

	                    // Gamma1
	                    var gamma1x  = W[i - 2];
	                    var gamma1xh = gamma1x.high;
	                    var gamma1xl = gamma1x.low;
	                    var gamma1h  = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
	                    var gamma1l  = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));

	                    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
	                    var Wi7  = W[i - 7];
	                    var Wi7h = Wi7.high;
	                    var Wi7l = Wi7.low;

	                    var Wi16  = W[i - 16];
	                    var Wi16h = Wi16.high;
	                    var Wi16l = Wi16.low;

	                    var Wil = gamma0l + Wi7l;
	                    var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
	                    var Wil = Wil + gamma1l;
	                    var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
	                    var Wil = Wil + Wi16l;
	                    var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);

	                    Wi.high = Wih;
	                    Wi.low  = Wil;
	                }

	                var chh  = (eh & fh) ^ (~eh & gh);
	                var chl  = (el & fl) ^ (~el & gl);
	                var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
	                var majl = (al & bl) ^ (al & cl) ^ (bl & cl);

	                var sigma0h = ((ah >>> 28) | (al << 4))  ^ ((ah << 30)  | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
	                var sigma0l = ((al >>> 28) | (ah << 4))  ^ ((al << 30)  | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
	                var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
	                var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));

	                // t1 = h + sigma1 + ch + K[i] + W[i]
	                var Ki  = K[i];
	                var Kih = Ki.high;
	                var Kil = Ki.low;

	                var t1l = hl + sigma1l;
	                var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
	                var t1l = t1l + chl;
	                var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
	                var t1l = t1l + Kil;
	                var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
	                var t1l = t1l + Wil;
	                var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);

	                // t2 = sigma0 + maj
	                var t2l = sigma0l + majl;
	                var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);

	                // Update working variables
	                hh = gh;
	                hl = gl;
	                gh = fh;
	                gl = fl;
	                fh = eh;
	                fl = el;
	                el = (dl + t1l) | 0;
	                eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
	                dh = ch;
	                dl = cl;
	                ch = bh;
	                cl = bl;
	                bh = ah;
	                bl = al;
	                al = (t1l + t2l) | 0;
	                ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
	            }

	            // Intermediate hash value
	            H0l = H0.low  = (H0l + al);
	            H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
	            H1l = H1.low  = (H1l + bl);
	            H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
	            H2l = H2.low  = (H2l + cl);
	            H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
	            H3l = H3.low  = (H3l + dl);
	            H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
	            H4l = H4.low  = (H4l + el);
	            H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
	            H5l = H5.low  = (H5l + fl);
	            H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
	            H6l = H6.low  = (H6l + gl);
	            H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
	            H7l = H7.low  = (H7l + hl);
	            H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;

	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
	            dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
	            dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
	            data.sigBytes = dataWords.length * 4;

	            // Hash final blocks
	            this._process();

	            // Convert hash to 32-bit word array before returning
	            var hash = this._hash.toX32();

	            // Return final computed hash
	            return hash;
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);
	            clone._hash = this._hash.clone();

	            return clone;
	        },

	        blockSize: 1024/32
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA512('message');
	     *     var hash = CryptoJS.SHA512(wordArray);
	     */
	    C.SHA512 = Hasher._createHelper(SHA512);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA512(message, key);
	     */
	    C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
	}());


	return CryptoJS.SHA512;

}));

/***/ }),
/* 321 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Previous log timestamp.
 */

var prevTime;

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  return debug;
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (var i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 322 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * depd
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var callSiteToString = __webpack_require__(323).callSiteToString
var eventListenerCount = __webpack_require__(323).eventListenerCount
var relative = __webpack_require__(0).relative

/**
 * Module exports.
 */

module.exports = depd

/**
 * Get the path to base files on.
 */

var basePath = process.cwd()

/**
 * Determine if namespace is contained in the string.
 */

function containsNamespace (str, namespace) {
  var vals = str.split(/[ ,]+/)
  var ns = String(namespace).toLowerCase()

  for (var i = 0; i < vals.length; i++) {
    var val = vals[i]

    // namespace contained
    if (val && (val === '*' || val.toLowerCase() === ns)) {
      return true
    }
  }

  return false
}

/**
 * Convert a data descriptor to accessor descriptor.
 */

function convertDataDescriptorToAccessor (obj, prop, message) {
  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
  var value = descriptor.value

  descriptor.get = function getter () { return value }

  if (descriptor.writable) {
    descriptor.set = function setter (val) { return (value = val) }
  }

  delete descriptor.value
  delete descriptor.writable

  Object.defineProperty(obj, prop, descriptor)

  return descriptor
}

/**
 * Create arguments string to keep arity.
 */

function createArgumentsString (arity) {
  var str = ''

  for (var i = 0; i < arity; i++) {
    str += ', arg' + i
  }

  return str.substr(2)
}

/**
 * Create stack string from stack.
 */

function createStackString (stack) {
  var str = this.name + ': ' + this.namespace

  if (this.message) {
    str += ' deprecated ' + this.message
  }

  for (var i = 0; i < stack.length; i++) {
    str += '\n    at ' + callSiteToString(stack[i])
  }

  return str
}

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  var stack = getStack()
  var site = callSiteLocation(stack[1])
  var file = site[0]

  function deprecate (message) {
    // call to self as log
    log.call(deprecate, message)
  }

  deprecate._file = file
  deprecate._ignored = isignored(namespace)
  deprecate._namespace = namespace
  deprecate._traced = istraced(namespace)
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Determine if namespace is ignored.
 */

function isignored (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.noDeprecation) {
    // --no-deprecation support
    return true
  }

  var str = process.env.NO_DEPRECATION || ''

  // namespace ignored
  return containsNamespace(str, namespace)
}

/**
 * Determine if namespace is traced.
 */

function istraced (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.traceDeprecation) {
    // --trace-deprecation support
    return true
  }

  var str = process.env.TRACE_DEPRECATION || ''

  // namespace traced
  return containsNamespace(str, namespace)
}

/**
 * Display deprecation message.
 */

function log (message, site) {
  var haslisteners = eventListenerCount(process, 'deprecation') !== 0

  // abort early if no destination
  if (!haslisteners && this._ignored) {
    return
  }

  var caller
  var callFile
  var callSite
  var depSite
  var i = 0
  var seen = false
  var stack = getStack()
  var file = this._file

  if (site) {
    // provided site
    depSite = site
    callSite = callSiteLocation(stack[1])
    callSite.name = depSite.name
    file = callSite[0]
  } else {
    // get call site
    i = 2
    depSite = callSiteLocation(stack[i])
    callSite = depSite
  }

  // get caller of deprecated thing in relation to file
  for (; i < stack.length; i++) {
    caller = callSiteLocation(stack[i])
    callFile = caller[0]

    if (callFile === file) {
      seen = true
    } else if (callFile === this._file) {
      file = this._file
    } else if (seen) {
      break
    }
  }

  var key = caller
    ? depSite.join(':') + '__' + caller.join(':')
    : undefined

  if (key !== undefined && key in this._warned) {
    // already warned
    return
  }

  this._warned[key] = true

  // generate automatic message from call site
  var msg = message
  if (!msg) {
    msg = callSite === depSite || !callSite.name
      ? defaultMessage(depSite)
      : defaultMessage(callSite)
  }

  // emit deprecation if listeners exist
  if (haslisteners) {
    var err = DeprecationError(this._namespace, msg, stack.slice(i))
    process.emit('deprecation', err)
    return
  }

  // format and write message
  var format = process.stderr.isTTY
    ? formatColor
    : formatPlain
  var output = format.call(this, msg, caller, stack.slice(i))
  process.stderr.write(output + '\n', 'utf8')
}

/**
 * Get call site location as array.
 */

function callSiteLocation (callSite) {
  var file = callSite.getFileName() || '<anonymous>'
  var line = callSite.getLineNumber()
  var colm = callSite.getColumnNumber()

  if (callSite.isEval()) {
    file = callSite.getEvalOrigin() + ', ' + file
  }

  var site = [file, line, colm]

  site.callSite = callSite
  site.name = callSite.getFunctionName()

  return site
}

/**
 * Generate a default message from the site.
 */

function defaultMessage (site) {
  var callSite = site.callSite
  var funcName = site.name

  // make useful anonymous name
  if (!funcName) {
    funcName = '<anonymous@' + formatLocation(site) + '>'
  }

  var context = callSite.getThis()
  var typeName = context && callSite.getTypeName()

  // ignore useless type name
  if (typeName === 'Object') {
    typeName = undefined
  }

  // make useful type name
  if (typeName === 'Function') {
    typeName = context.name || typeName
  }

  return typeName && callSite.getMethodName()
    ? typeName + '.' + funcName
    : funcName
}

/**
 * Format deprecation message without color.
 */

function formatPlain (msg, caller, stack) {
  var timestamp = new Date().toUTCString()

  var formatted = timestamp +
    ' ' + this._namespace +
    ' deprecated ' + msg

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    at ' + callSiteToString(stack[i])
    }

    return formatted
  }

  if (caller) {
    formatted += ' at ' + formatLocation(caller)
  }

  return formatted
}

/**
 * Format deprecation message with color.
 */

function formatColor (msg, caller, stack) {
  var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan
    ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow
    ' \x1b[0m' + msg + '\x1b[39m' // reset

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan
    }

    return formatted
  }

  if (caller) {
    formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan
  }

  return formatted
}

/**
 * Format call site location.
 */

function formatLocation (callSite) {
  return relative(basePath, callSite[0]) +
    ':' + callSite[1] +
    ':' + callSite[2]
}

/**
 * Get the stack as array of call sites.
 */

function getStack () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = Math.max(10, limit)

  // capture the stack
  Error.captureStackTrace(obj)

  // slice this function off the top
  var stack = obj.stack.slice(1)

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack
}

/**
 * Capture call site stack from v8.
 */

function prepareObjectStackTrace (obj, stack) {
  return stack
}

/**
 * Return a wrapped function in a deprecation message.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  var args = createArgumentsString(fn.length)
  var deprecate = this // eslint-disable-line no-unused-vars
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  site.name = fn.name

   // eslint-disable-next-line no-eval
  var deprecatedfn = eval('(function (' + args + ') {\n' +
    '"use strict"\n' +
    'log.call(deprecate, message, site)\n' +
    'return fn.apply(this, arguments)\n' +
    '})')

  return deprecatedfn
}

/**
 * Wrap property in a deprecation message.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }

  var deprecate = this
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  // set site name
  site.name = prop

  // convert data descriptor
  if ('value' in descriptor) {
    descriptor = convertDataDescriptorToAccessor(obj, prop, message)
  }

  var get = descriptor.get
  var set = descriptor.set

  // wrap getter
  if (typeof get === 'function') {
    descriptor.get = function getter () {
      log.call(deprecate, message, site)
      return get.apply(this, arguments)
    }
  }

  // wrap setter
  if (typeof set === 'function') {
    descriptor.set = function setter () {
      log.call(deprecate, message, site)
      return set.apply(this, arguments)
    }
  }

  Object.defineProperty(obj, prop, descriptor)
}

/**
 * Create DeprecationError for deprecation
 */

function DeprecationError (namespace, message, stack) {
  var error = new Error()
  var stackString

  Object.defineProperty(error, 'constructor', {
    value: DeprecationError
  })

  Object.defineProperty(error, 'message', {
    configurable: true,
    enumerable: false,
    value: message,
    writable: true
  })

  Object.defineProperty(error, 'name', {
    enumerable: false,
    configurable: true,
    value: 'DeprecationError',
    writable: true
  })

  Object.defineProperty(error, 'namespace', {
    configurable: true,
    enumerable: false,
    value: namespace,
    writable: true
  })

  Object.defineProperty(error, 'stack', {
    configurable: true,
    enumerable: false,
    get: function () {
      if (stackString !== undefined) {
        return stackString
      }

      // prepare stack trace
      return (stackString = createStackString.call(this, stack))
    },
    set: function setter (val) {
      stackString = val
    }
  })

  return error
}


/***/ }),
/* 323 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * depd
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var EventEmitter = __webpack_require__(18).EventEmitter

/**
 * Module exports.
 * @public
 */

lazyProperty(module.exports, 'callSiteToString', function callSiteToString () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  function prepareObjectStackTrace (obj, stack) {
    return stack
  }

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = 2

  // capture the stack
  Error.captureStackTrace(obj)

  // slice the stack
  var stack = obj.stack.slice()

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack[0].toString ? toString : __webpack_require__(720)
})

lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () {
  return EventEmitter.listenerCount || __webpack_require__(721)
})

/**
 * Define a lazy property.
 */

function lazyProperty (obj, prop, getter) {
  function get () {
    var val = getter()

    Object.defineProperty(obj, prop, {
      configurable: true,
      enumerable: true,
      value: val
    })

    return val
  }

  Object.defineProperty(obj, prop, {
    configurable: true,
    enumerable: true,
    get: get
  })
}

/**
 * Call toString() on the obj
 */

function toString (obj) {
  return obj.toString()
}


/***/ }),
/* 324 */
/***/ (function(module, exports, __webpack_require__) {

var crypto = __webpack_require__(7);
var BigInteger = __webpack_require__(63).BigInteger;
var ECPointFp = __webpack_require__(116).ECPointFp;
exports.ECCurves = __webpack_require__(723);

// zero prepad
function unstupid(hex,len)
{
	return (hex.length >= len) ? hex : unstupid("0"+hex,len);
}

exports.ECKey = function(curve, key, isPublic)
{
  var priv;
	var c = curve();
	var n = c.getN();
  var bytes = Math.floor(n.bitLength()/8);

  if(key)
  {
    if(isPublic)
    {
      var curve = c.getCurve();
//      var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format
//      var y = key.slice(bytes+1);
//      this.P = new ECPointFp(curve,
//        curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)),
//        curve.fromBigInteger(new BigInteger(y.toString("hex"), 16)));      
      this.P = curve.decodePointHex(key.toString("hex"));
    }else{
      if(key.length != bytes) return false;
      priv = new BigInteger(key.toString("hex"), 16);      
    }
  }else{
    var n1 = n.subtract(BigInteger.ONE);
    var r = new BigInteger(crypto.randomBytes(n.bitLength()));
    priv = r.mod(n1).add(BigInteger.ONE);
    this.P = c.getG().multiply(priv);
  }
  if(this.P)
  {
//  var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2);
//  this.PublicKey = new Buffer("04"+pubhex,"hex");
    this.PublicKey = new Buffer(c.getCurve().encodeCompressedPointHex(this.P),"hex");
  }
  if(priv)
  {
    this.PrivateKey = new Buffer(unstupid(priv.toString(16),bytes*2),"hex");
    this.deriveSharedSecret = function(key)
    {
      if(!key || !key.P) return false;
      var S = key.P.multiply(priv);
      return new Buffer(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex");
   }     
  }
}



/***/ }),
/* 325 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * encodeurl
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = encodeUrl

/**
 * RegExp to match non-URL code points, *after* encoding (i.e. not including "%")
 * and including invalid escape sequences.
 * @private
 */

var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g

/**
 * RegExp to match unmatched surrogate pair.
 * @private
 */

var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g

/**
 * String to replace unmatched surrogate pair with.
 * @private
 */

var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2'

/**
 * Encode a URL to a percent-encoded form, excluding already-encoded sequences.
 *
 * This function will take an already-encoded URL and encode all the non-URL
 * code points. This function will not encode the "%" character unless it is
 * not part of a valid sequence (`%20` will be left as-is, but `%foo` will
 * be encoded as `%25foo`).
 *
 * This encode is meant to be "safe" and does not throw errors. It will try as
 * hard as it can to properly encode the given URL, including replacing any raw,
 * unpaired surrogate pairs with the Unicode replacement character prior to
 * encoding.
 *
 * @param {string} url
 * @return {string}
 * @public
 */

function encodeUrl (url) {
  return String(url)
    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)
    .replace(ENCODE_CHARS_REGEXP, encodeURI)
}


/***/ }),
/* 326 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/* eslint-disable */

var utils = __webpack_require__(727);
var uint256Coder = utils.uint256Coder;
var coderBoolean = utils.coderBoolean;
var coderFixedBytes = utils.coderFixedBytes;
var coderAddress = utils.coderAddress;
var coderDynamicBytes = utils.coderDynamicBytes;
var coderString = utils.coderString;
var coderArray = utils.coderArray;
var paramTypePart = utils.paramTypePart;
var getParamCoder = utils.getParamCoder;

function Result() {}

function encodeParams(types, values) {
  if (types.length !== values.length) {
    throw new Error('[ethjs-abi] while encoding params, types/values mismatch, types length ' + types.length + ' should be ' + values.length);
  }

  var parts = [];

  types.forEach(function (type, index) {
    var coder = getParamCoder(type);
    parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });
  });

  function alignSize(size) {
    return parseInt(32 * Math.ceil(size / 32));
  }

  var staticSize = 0,
      dynamicSize = 0;
  parts.forEach(function (part) {
    if (part.dynamic) {
      staticSize += 32;
      dynamicSize += alignSize(part.value.length);
    } else {
      staticSize += alignSize(part.value.length);
    }
  });

  var offset = 0,
      dynamicOffset = staticSize;
  var data = new Buffer(staticSize + dynamicSize);

  parts.forEach(function (part, index) {
    if (part.dynamic) {
      uint256Coder.encode(dynamicOffset).copy(data, offset);
      offset += 32;

      part.value.copy(data, dynamicOffset);
      dynamicOffset += alignSize(part.value.length);
    } else {
      part.value.copy(data, offset);
      offset += alignSize(part.value.length);
    }
  });

  return '0x' + data.toString('hex');
}

// decode bytecode data from output names and types
function decodeParams(names, types, data) {
  // Names is optional, so shift over all the parameters if not provided
  if (arguments.length < 3) {
    data = types;
    types = names;
    names = [];
  }

  data = utils.hexOrBuffer(data);
  var values = new Result();

  var offset = 0;
  types.forEach(function (type, index) {
    var coder = getParamCoder(type);
    if (coder.dynamic) {
      var dynamicOffset = uint256Coder.decode(data, offset);
      var result = coder.decode(data, dynamicOffset.value.toNumber());
      offset += dynamicOffset.consumed;
    } else {
      var result = coder.decode(data, offset);
      offset += result.consumed;
    }
    values[index] = result.value;
    if (names[index]) {
      values[names[index]] = result.value;
    }
  });
  return values;
}

// encode method ABI object with values in an array, output bytecode
function encodeMethod(method, values) {
  var signature = method.name + '(' + utils.getKeys(method.inputs, 'type').join(',') + ')';
  var signatureEncoded = '0x' + new Buffer(utils.keccak256(signature), 'hex').slice(0, 4).toString('hex');
  var paramsEncoded = encodeParams(utils.getKeys(method.inputs, 'type'), values).substring(2);

  return '' + signatureEncoded + paramsEncoded;
}

// decode method data bytecode, from method ABI object
function decodeMethod(method, data) {
  var outputNames = utils.getKeys(method.outputs, 'name', true);
  var outputTypes = utils.getKeys(method.outputs, 'type');

  return decodeParams(outputNames, outputTypes, utils.hexOrBuffer(data));
}

// decode method data bytecode, from method ABI object
function encodeEvent(eventObject, values) {
  return encodeMethod(eventObject, values);
}

// decode method data bytecode, from method ABI object
function decodeEvent(eventObject, data) {
  var inputNames = utils.getKeys(eventObject.inputs, 'name', true);
  var inputTypes = utils.getKeys(eventObject.inputs, 'type');

  return decodeParams(inputNames, inputTypes, utils.hexOrBuffer(data));
}

module.exports = {
  encodeParams: encodeParams,
  decodeParams: decodeParams,
  encodeMethod: encodeMethod,
  decodeMethod: decodeMethod,
  encodeEvent: encodeEvent,
  decodeEvent: decodeEvent
};

/***/ }),
/* 327 */
/***/ (function(module, exports, __webpack_require__) {

var Schema = __webpack_require__(1086);
var Contract = __webpack_require__(732);

var contract = function(options) {
  options = Schema.normalizeOptions(options);
  var binary = Schema.generateBinary(options, {}, {dirty: false});

  // Note we don't use `new` here at all. This will cause the class to
  // "mutate" instead of instantiate an instance.
  return Contract.clone(binary);
};

// To be used to upgrade old .sol.js abstractions
contract.fromSolJS = function(soljs_abstraction, ignore_default_network) {
  if (ignore_default_network == null) {
    ignore_default_network = false;
  }

  // Find the latest binary
  var latest_network = null;
  var latest_network_updated_at = 0;

  var networks = {};

  Object.keys(soljs_abstraction.all_networks).forEach(function(network_name) {

    if (network_name == "default") {
      if (ignore_default_network == true ) {
        return;
      } else {
        throw new Error(soljs_abstraction.contract_name + " has legacy 'default' network artifacts stored within it. Generally these artifacts were a result of running Truffle on a development environment -- in order to store contracts with truffle-contract, all networks must have an identified id. If you're sure this default network represents your development environment, you can ignore processing of the default network by passing `true` as the second argument to this function. However, if you think this network represents artifacts you'd like to keep (i.e., addresses deployed to the main network), you'll need to edit your .sol.js file yourself and change the default network id to be the id of your desired network. For most people, ignoring the default network is the correct option.");
      }
    }

    if (soljs_abstraction.all_networks[network_name].updated_at > latest_network_updated_at) {
      latest_network = network_name;
      latest_network_updated_at = soljs_abstraction.all_networks[network_name].updated_at;
    }

    networks[network_name] = {};

    ["address", "events", "links", "updated_at"].forEach(function(key) {
      networks[network_name][key] = soljs_abstraction.all_networks[network_name][key];
    })
  });

  latest_network = soljs_abstraction.all_networks[latest_network] || {};

  var json = {
    contract_name: soljs_abstraction.contract_name,
    unlinked_binary: latest_network.unlinked_binary,
    abi: latest_network.abi,
    networks: networks,
    updated_at: latest_network_updated_at == 0 ? undefined : latest_network_updated_at
  };

  return contract(json);
};

module.exports = contract;

if (typeof window !== "undefined") {
  window.TruffleContract = contract;
}


/***/ }),
/* 328 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file param.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(14);

/**
 * SolidityParam object prototype.
 * Should be used when encoding, decoding solidity bytes
 */
var SolidityParam = function (value, offset) {
    this.value = value || '';
    this.offset = offset; // offset in bytes
};

/**
 * This method should be used to get length of params's dynamic part
 * 
 * @method dynamicPartLength
 * @returns {Number} length of dynamic part (in bytes)
 */
SolidityParam.prototype.dynamicPartLength = function () {
    return this.dynamicPart().length / 2;
};

/**
 * This method should be used to create copy of solidity param with different offset
 *
 * @method withOffset
 * @param {Number} offset length in bytes
 * @returns {SolidityParam} new solidity param with applied offset
 */
SolidityParam.prototype.withOffset = function (offset) {
    return new SolidityParam(this.value, offset);
};

/**
 * This method should be used to combine solidity params together
 * eg. when appending an array
 *
 * @method combine
 * @param {SolidityParam} param with which we should combine
 * @param {SolidityParam} result of combination
 */
SolidityParam.prototype.combine = function (param) {
    return new SolidityParam(this.value + param.value); 
};

/**
 * This method should be called to check if param has dynamic size.
 * If it has, it returns true, otherwise false
 *
 * @method isDynamic
 * @returns {Boolean}
 */
SolidityParam.prototype.isDynamic = function () {
    return this.offset !== undefined;
};

/**
 * This method should be called to transform offset to bytes
 *
 * @method offsetAsBytes
 * @returns {String} bytes representation of offset
 */
SolidityParam.prototype.offsetAsBytes = function () {
    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
};

/**
 * This method should be called to get static part of param
 *
 * @method staticPart
 * @returns {String} offset if it is a dynamic param, otherwise value
 */
SolidityParam.prototype.staticPart = function () {
    if (!this.isDynamic()) {
        return this.value; 
    } 
    return this.offsetAsBytes();
};

/**
 * This method should be called to get dynamic part of param
 *
 * @method dynamicPart
 * @returns {String} returns a value if it is a dynamic param, otherwise empty string
 */
SolidityParam.prototype.dynamicPart = function () {
    return this.isDynamic() ? this.value : '';
};

/**
 * This method should be called to encode param
 *
 * @method encode
 * @returns {String}
 */
SolidityParam.prototype.encode = function () {
    return this.staticPart() + this.dynamicPart();
};

/**
 * This method should be called to encode array of params
 *
 * @method encodeList
 * @param {Array[SolidityParam]} params
 * @returns {String}
 */
SolidityParam.encodeList = function (params) {
    
    // updating offsets
    var totalOffset = params.length * 32;
    var offsetParams = params.map(function (param) {
        if (!param.isDynamic()) {
            return param;
        }
        var offset = totalOffset;
        totalOffset += param.dynamicPartLength();
        return param.withOffset(offset);
    });

    // encode everything!
    return offsetParams.reduce(function (result, param) {
        return result + param.dynamicPart();
    }, offsetParams.reduce(function (result, param) {
        return result + param.staticPart();
    }, ''));
};



module.exports = SolidityParam;



/***/ }),
/* 329 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file event.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(14);
var coder = __webpack_require__(213);
var formatters = __webpack_require__(50);
var sha3 = __webpack_require__(118);
var Filter = __webpack_require__(154);
var watches = __webpack_require__(156);

/**
 * This prototype should be used to create event filters
 */
var SolidityEvent = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._params = json.inputs;
    this._name = utils.transformToFullName(json);
    this._address = address;
    this._anonymous = json.anonymous;
};

/**
 * Should be used to get filtered param types
 *
 * @method types
 * @param {Bool} decide if returned typed should be indexed
 * @return {Array} array of types
 */
SolidityEvent.prototype.types = function (indexed) {
    return this._params.filter(function (i) {
        return i.indexed === indexed;
    }).map(function (i) {
        return i.type;
    });
};

/**
 * Should be used to get event display name
 *
 * @method displayName
 * @return {String} event display name
 */
SolidityEvent.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get event type name
 *
 * @method typeName
 * @return {String} event type name
 */
SolidityEvent.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be used to get event signature
 *
 * @method signature
 * @return {String} event signature
 */
SolidityEvent.prototype.signature = function () {
    return sha3(this._name);
};

/**
 * Should be used to encode indexed params and options to one final object
 * 
 * @method encode
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} everything combined together and encoded
 */
SolidityEvent.prototype.encode = function (indexed, options) {
    indexed = indexed || {};
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.topics = [];

    result.address = this._address;
    if (!this._anonymous) {
        result.topics.push('0x' + this.signature());
    }

    var indexedTopics = this._params.filter(function (i) {
        return i.indexed === true;
    }).map(function (i) {
        var value = indexed[i.name];
        if (value === undefined || value === null) {
            return null;
        }
        
        if (utils.isArray(value)) {
            return value.map(function (v) {
                return '0x' + coder.encodeParam(i.type, v);
            });
        }
        return '0x' + coder.encodeParam(i.type, value);
    });

    result.topics = result.topics.concat(indexedTopics);

    return result;
};

/**
 * Should be used to decode indexed params and options
 *
 * @method decode
 * @param {Object} data
 * @return {Object} result object with decoded indexed && not indexed params
 */
SolidityEvent.prototype.decode = function (data) {
 
    data.data = data.data || '';
    data.topics = data.topics || [];

    var argTopics = this._anonymous ? data.topics : data.topics.slice(1);
    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
    var indexedParams = coder.decodeParams(this.types(true), indexedData); 

    var notIndexedData = data.data.slice(2);
    var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);
    
    var result = formatters.outputLogFormatter(data);
    result.event = this.displayName();
    result.address = data.address;

    result.args = this._params.reduce(function (acc, current) {
        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
        return acc;
    }, {});

    delete result.data;
    delete result.topics;

    return result;
};

/**
 * Should be used to create new filter object from event
 *
 * @method execute
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} filter object
 */
SolidityEvent.prototype.execute = function (indexed, options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 2)
            options = null;
        if(arguments.length === 1) {
            options = null;
            indexed = {};
        }
    }
    
    var o = this.encode(indexed, options);
    var formatter = this.decode.bind(this);
    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
};

/**
 * Should be used to attach event to contract object
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityEvent.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = this.execute.bind(this, contract);
};

module.exports = SolidityEvent;



/***/ }),
/* 330 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file jsonrpc.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Jsonrpc = function () {
    // singleton pattern
    if (arguments.callee._singletonInstance) {
        return arguments.callee._singletonInstance;
    }
    arguments.callee._singletonInstance = this;

    this.messageId = 1;
};

/**
 * @return {Jsonrpc} singleton
 */
Jsonrpc.getInstance = function () {
    var instance = new Jsonrpc();
    return instance;
};

/**
 * Should be called to valid json create payload object
 *
 * @method toPayload
 * @param {Function} method of jsonrpc call, required
 * @param {Array} params, an array of method params, optional
 * @returns {Object} valid jsonrpc payload object
 */
Jsonrpc.prototype.toPayload = function (method, params) {
    if (!method)
        console.error('jsonrpc method should be specified!');

    return {
        jsonrpc: '2.0',
        method: method,
        params: params || [],
        id: this.messageId++
    };
};

/**
 * Should be called to check if jsonrpc response is valid
 *
 * @method isValidResponse
 * @param {Object}
 * @returns {Boolean} true if response is valid, otherwise false
 */
Jsonrpc.prototype.isValidResponse = function (response) {
    return !!response &&
        !response.error &&
        response.jsonrpc === '2.0' &&
        typeof response.id === 'number' &&
        response.result !== undefined; // only undefined is not valid json object
};

/**
 * Should be called to create batch payload object
 *
 * @method toBatchPayload
 * @param {Array} messages, an array of objects with method (required) and params (optional) fields
 * @returns {Array} batch payload
 */
Jsonrpc.prototype.toBatchPayload = function (messages) {
    var self = this;
    return messages.map(function (message) {
        return self.toPayload(message.method, message.params);
    });
};

module.exports = Jsonrpc;



/***/ }),
/* 331 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(770);

// dont override global variable
if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
    window.Web3 = Web3;
}

module.exports = Web3;


/***/ }),
/* 332 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file param.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(15);

/**
 * SolidityParam object prototype.
 * Should be used when encoding, decoding solidity bytes
 */
var SolidityParam = function (value, offset) {
    this.value = value || '';
    this.offset = offset; // offset in bytes
};

/**
 * This method should be used to get length of params's dynamic part
 * 
 * @method dynamicPartLength
 * @returns {Number} length of dynamic part (in bytes)
 */
SolidityParam.prototype.dynamicPartLength = function () {
    return this.dynamicPart().length / 2;
};

/**
 * This method should be used to create copy of solidity param with different offset
 *
 * @method withOffset
 * @param {Number} offset length in bytes
 * @returns {SolidityParam} new solidity param with applied offset
 */
SolidityParam.prototype.withOffset = function (offset) {
    return new SolidityParam(this.value, offset);
};

/**
 * This method should be used to combine solidity params together
 * eg. when appending an array
 *
 * @method combine
 * @param {SolidityParam} param with which we should combine
 * @param {SolidityParam} result of combination
 */
SolidityParam.prototype.combine = function (param) {
    return new SolidityParam(this.value + param.value); 
};

/**
 * This method should be called to check if param has dynamic size.
 * If it has, it returns true, otherwise false
 *
 * @method isDynamic
 * @returns {Boolean}
 */
SolidityParam.prototype.isDynamic = function () {
    return this.offset !== undefined;
};

/**
 * This method should be called to transform offset to bytes
 *
 * @method offsetAsBytes
 * @returns {String} bytes representation of offset
 */
SolidityParam.prototype.offsetAsBytes = function () {
    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
};

/**
 * This method should be called to get static part of param
 *
 * @method staticPart
 * @returns {String} offset if it is a dynamic param, otherwise value
 */
SolidityParam.prototype.staticPart = function () {
    if (!this.isDynamic()) {
        return this.value; 
    } 
    return this.offsetAsBytes();
};

/**
 * This method should be called to get dynamic part of param
 *
 * @method dynamicPart
 * @returns {String} returns a value if it is a dynamic param, otherwise empty string
 */
SolidityParam.prototype.dynamicPart = function () {
    return this.isDynamic() ? this.value : '';
};

/**
 * This method should be called to encode param
 *
 * @method encode
 * @returns {String}
 */
SolidityParam.prototype.encode = function () {
    return this.staticPart() + this.dynamicPart();
};

/**
 * This method should be called to encode array of params
 *
 * @method encodeList
 * @param {Array[SolidityParam]} params
 * @returns {String}
 */
SolidityParam.encodeList = function (params) {
    
    // updating offsets
    var totalOffset = params.length * 32;
    var offsetParams = params.map(function (param) {
        if (!param.isDynamic()) {
            return param;
        }
        var offset = totalOffset;
        totalOffset += param.dynamicPartLength();
        return param.withOffset(offset);
    });

    // encode everything!
    return offsetParams.reduce(function (result, param) {
        return result + param.dynamicPart();
    }, offsetParams.reduce(function (result, param) {
        return result + param.staticPart();
    }, ''));
};



module.exports = SolidityParam;



/***/ }),
/* 333 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file event.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(15);
var coder = __webpack_require__(214);
var formatters = __webpack_require__(52);
var sha3 = __webpack_require__(121);
var Filter = __webpack_require__(158);
var watches = __webpack_require__(160);

/**
 * This prototype should be used to create event filters
 */
var SolidityEvent = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._params = json.inputs;
    this._name = utils.transformToFullName(json);
    this._address = address;
    this._anonymous = json.anonymous;
};

/**
 * Should be used to get filtered param types
 *
 * @method types
 * @param {Bool} decide if returned typed should be indexed
 * @return {Array} array of types
 */
SolidityEvent.prototype.types = function (indexed) {
    return this._params.filter(function (i) {
        return i.indexed === indexed;
    }).map(function (i) {
        return i.type;
    });
};

/**
 * Should be used to get event display name
 *
 * @method displayName
 * @return {String} event display name
 */
SolidityEvent.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get event type name
 *
 * @method typeName
 * @return {String} event type name
 */
SolidityEvent.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be used to get event signature
 *
 * @method signature
 * @return {String} event signature
 */
SolidityEvent.prototype.signature = function () {
    return sha3(this._name);
};

/**
 * Should be used to encode indexed params and options to one final object
 * 
 * @method encode
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} everything combined together and encoded
 */
SolidityEvent.prototype.encode = function (indexed, options) {
    indexed = indexed || {};
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.topics = [];

    result.address = this._address;
    if (!this._anonymous) {
        result.topics.push('0x' + this.signature());
    }

    var indexedTopics = this._params.filter(function (i) {
        return i.indexed === true;
    }).map(function (i) {
        var value = indexed[i.name];
        if (value === undefined || value === null) {
            return null;
        }
        
        if (utils.isArray(value)) {
            return value.map(function (v) {
                return '0x' + coder.encodeParam(i.type, v);
            });
        }
        return '0x' + coder.encodeParam(i.type, value);
    });

    result.topics = result.topics.concat(indexedTopics);

    return result;
};

/**
 * Should be used to decode indexed params and options
 *
 * @method decode
 * @param {Object} data
 * @return {Object} result object with decoded indexed && not indexed params
 */
SolidityEvent.prototype.decode = function (data) {
 
    data.data = data.data || '';
    data.topics = data.topics || [];

    var argTopics = this._anonymous ? data.topics : data.topics.slice(1);
    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
    var indexedParams = coder.decodeParams(this.types(true), indexedData); 

    var notIndexedData = data.data.slice(2);
    var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);
    
    var result = formatters.outputLogFormatter(data);
    result.event = this.displayName();
    result.address = data.address;

    result.args = this._params.reduce(function (acc, current) {
        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
        return acc;
    }, {});

    delete result.data;
    delete result.topics;

    return result;
};

/**
 * Should be used to create new filter object from event
 *
 * @method execute
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} filter object
 */
SolidityEvent.prototype.execute = function (indexed, options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 2)
            options = null;
        if(arguments.length === 1) {
            options = null;
            indexed = {};
        }
    }
    
    var o = this.encode(indexed, options);
    var formatter = this.decode.bind(this);
    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
};

/**
 * Should be used to attach event to contract object
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityEvent.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = this.execute.bind(this, contract);
};

module.exports = SolidityEvent;



/***/ }),
/* 334 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file jsonrpc.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 *   Aaron Kumavis <aaron@kumavis.me>
 * @date 2015
 */

// Initialize Jsonrpc as a simple object with utility functions.
var Jsonrpc = {
    messageId: 0
};

/**
 * Should be called to valid json create payload object
 *
 * @method toPayload
 * @param {Function} method of jsonrpc call, required
 * @param {Array} params, an array of method params, optional
 * @returns {Object} valid jsonrpc payload object
 */
Jsonrpc.toPayload = function (method, params) {
    if (!method)
        console.error('jsonrpc method should be specified!');

    // advance message ID
    Jsonrpc.messageId++;

    return {
        jsonrpc: '2.0',
        id: Jsonrpc.messageId,
        method: method,
        params: params || []
    };
};

/**
 * Should be called to check if jsonrpc response is valid
 *
 * @method isValidResponse
 * @param {Object}
 * @returns {Boolean} true if response is valid, otherwise false
 */
Jsonrpc.isValidResponse = function (response) {
    return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);

    function validateSingleMessage(message){
      return !!message &&
        !message.error &&
        message.jsonrpc === '2.0' &&
        typeof message.id === 'number' &&
        message.result !== undefined; // only undefined is not valid json object
    }
};

/**
 * Should be called to create batch payload object
 *
 * @method toBatchPayload
 * @param {Array} messages, an array of objects with method (required) and params (optional) fields
 * @returns {Array} batch payload
 */
Jsonrpc.toBatchPayload = function (messages) {
    return messages.map(function (message) {
        return Jsonrpc.toPayload(message.method, message.params);
    });
};

module.exports = Jsonrpc;



/***/ }),
/* 335 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);
var _ = __webpack_require__(24);
var path = __webpack_require__(0);

function Config(working_directory, manifest_file) {
  var self = this;

  this._values = {};

  var props = {
    working_directory: function() {
      return working_directory || process.cwd();
    },

    source_directory: function() {
      return path.join(self.working_directory, "contracts");
    },

    contracts_directory: function() {
      return path.resolve(path.join(self.working_directory, "contracts"));
    },

    manifest_file: function() {
      return manifest_file || path.resolve(path.join(self.working_directory, self.default_manifest_filename))
    },

    base_path: function() {
      return path.dirname(self.manifest_file);
    },

    // Configuration options that rely on other options.
    installed_packages_directory: function() {
      return path.join(self.working_directory, "installed_contracts");
    },

    default_manifest_filename: function() {
      return "ethpm.json";
    },

    default_lockfile_filename: function() {
      return "lock.json";
    },

    default_lockfile_uri_filename: function() {
      return "lock.uri";
    }
  };

  Object.keys(props).forEach(function(prop) {
    self.addProp(prop, props[prop]);
  });
};

Config.prototype.addProp = function(key, obj) {
  Object.defineProperty(this, key, {
    get: obj.get || function() {
      return this._values[key] || obj();
    },
    set: obj.set || function(val) {
      this._values[key] = val;
    },
    configurable: true,
    enumerable: true
  });
};

Config.prototype.with = function(obj) {
  return _.extend(Config.default(), this, obj);
};

Config.prototype.merge = function(obj) {
  return _.extend(this, obj);
};

Config.default = function() {
  return new Config();
};

module.exports = Config;


/***/ }),
/* 336 */
/***/ (function(module, exports, __webpack_require__) {

var IPFS = __webpack_require__(888);
var wget = __webpack_require__(435);
var Readable = __webpack_require__(22).Readable;
var URL = __webpack_require__(8);
var fs = __webpack_require__(1);

function IPFSHost(host, port, protocol) {
  this.host = host || "localhost";
  this.port = port || 5001;
  this.protocol = protocol || "http";

  this.ipfs = new IPFS({
    host: this.host,
    port: this.port,
    protocol: this.protocol
  });
}

IPFSHost.prototype.putContents = function(contents) {
  var self = this;

  return new Promise(function(accept, reject) {
    self.ipfs.add(contents, (err, result) => {
      if (err) return reject(err);
      accept("ipfs://" + result);
    });
  });
}

IPFSHost.prototype.putFile = function(file) {
  var self = this;

  return new Promise(function(accept, reject) {
    fs.readFile(file, "utf8", function(err, data) {
      if (err) return reject(err);

      self.putContents(data).then(accept).catch(reject);
    });
  });
};

IPFSHost.prototype.get = function(uri) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (uri.indexOf("ipfs://") != 0) {
      return reject(new Error("Don't know how to resolve URI " + uri));
    }

    var hash = uri.replace("ipfs://", "");
    var multihash = hash;

    var options = {
      protocol: self.protocol,
      host: self.host,
      port: self.port,
      path: '/api/v0/cat/' + hash,
      method: 'GET'
    };

    var req = wget.request(options, function(res) {
      var content = '';
      if (res.statusCode === 200) {
        res.on('error', reject);
        res.on('data', function(chunk) {
          content += chunk;
        });
        res.on('end', function() {
          accept(content);
        });
      } else {
        reject(new Error("Unknown server response " + res.statusCode + " when downloading hash " + hash));
      }
    });

    req.end();
    req.on('error', reject);
  });
};

module.exports = IPFSHost;


/***/ }),
/* 337 */
/***/ (function(module, exports, __webpack_require__) {

var V1 = __webpack_require__(792);
var fs = __webpack_require__(1);

var Lockfile = {
  getInterpreter: function(lockfile_version) {
    var interpreter = V1;

    if (lockfile_version == null) return interpreter;

    // This could be slightly more clever by tacking on a "V" onto the version and
    // requiring that file (and catching the error if the require fails). Will do that
    // if this gets too unruly.
    switch (parseInt(lockfile_version)) {
      case 1:
        interpreter = V1;
        break;
      default:
        if (lockfile_version == null) {
          // do nothing; use default
        } else {
          throw new Error("Unknown lockfile version " + lockfile_version);
        }
        break;
    }

    return interpreter;
  },
  read: function(file) {
    var json = fs.readFileSync(file);
    json = JSON.parse(json);

    var interpreter = this.getInterpreter(json.lockfile_version);

    interpreter.validate(json);

    return interpreter.normalize(json);
  },
  validate: function(json) {
    var interpreter = this.getInterpreter(json.lockfile_version);
    return interpreter.validate(json);
  }
};

module.exports = Lockfile;


/***/ }),
/* 338 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);
var V1 = __webpack_require__(793);

var Manifest = {
  getInterpreter: function(manifest_version) {
    var interpreter = V1;

    if (manifest_version == null) return interpreter;

    // This could be slightly more clever by tacking on a "V" onto the version and
    // requiring that file (and catching the error if the require fails). Will do that
    // if this gets too unruly.
    switch (manifest_version) {
      case 1:
        interpreter = V1;
        break;
      default:
        if (manifest_version == null) {
          // do nothing; use default
        } else {
          throw new Error("Unknown manifest version " + manifest_version);
        }
        break;
    }

    return interpreter;
  },
  read: function(file) {
    var json = fs.readFileSync(file);
    json = JSON.parse(json);

    var interpreter = this.getInterpreter(json.manifest_version);

    interpreter.validate(json);

    return interpreter.normalize(json);
  },
  fromLockfile: function(lockfile) {
    // TODO: Match up lockfile versions with manifest versions somehow.
    var interpreter = this.getInterpreter();
    var manifest = interpreter.fromLockfile(lockfile);

    interpreter.validate(manifest);

    manifest = interpreter.normalize(manifest);

    return manifest;
  }
};

module.exports = Manifest;


/***/ }),
/* 339 */
/***/ (function(module, exports, __webpack_require__) {

var Util = __webpack_require__(341);
var whilst = __webpack_require__(278);
var fs = __webpack_require__(80);
var path = __webpack_require__(0);

var Preflight = {
  // Given a list of manifest dependencies, find all dependencies (even
  // dependencies of dependencies) and list their lockfiles here.
  resolve_dependencies: function(dependencies, registry, host) {
    // Turn object into a stack
    var stack = [];
    var promises = [];

    var promises = Object.keys(dependencies).map(function(package_name) {
      var version_range = dependencies[package_name];

      // Support dependencies that are URIs.
      if (Util.isURI(version_range)) {
        // Make a promise out of the URI.
        return Promise.resolve(version_range);
      }

      return registry.getLockfileURI(package_name, version_range);
    });

    return Promise.all(promises).then(function(uris) {

      stack = uris.map(function(uri) {
        return [uri, [""]];
      });

      return new Promise(function(accept, reject) {
        var resolved = {};

        whilst(function() {
          return stack.length > 0;
        }, function(finished) {
          var current = stack.shift();
          var lockfileURI = current[0];
          var dependency_chain = current[1];
          var version;

          return host.get(lockfileURI).then(function(data) {
            var lockfile = JSON.parse(data);

            var package_name = lockfile.package_name;
            var version = lockfile.version;

            if (resolved[package_name] == null) {
              resolved[package_name] = {};
            }

            if (resolved[package_name][version] == null) {
              resolved[package_name][version] = {
                lockfile: lockfile,
                used_by: []
              };
            }

            resolved[package_name][version].used_by.push(dependency_chain);

            Object.keys(lockfile.build_dependencies || {}).forEach(function(key) {
              var uri = lockfile.build_dependencies[key];
              stack.push([uri, dependency_chain.concat([package_name])]);
            });

            finished();

          }).catch(finished);

        }, function(err) {
          if (err) return reject(err);
          accept(resolved);
        });
      });
    });
  },

  // Go through installed packages looking for all artifacts (contract_types and deployments).
  // Note that at this point, we don't allow multiple versions to be installed, which means that
  // we don't need to filter the results based on the semver version ranges within the containing
  // package's ethpm.json. We will when we do allower multiple versions later on.
  find_artifacts: function(installed_packages_directory, filter) {
    return new Promise(function(accept, reject) {
      fs.readdir(installed_packages_directory, function(err, directories) {
        if (err) {
          return accept([]);
        }

        accept(directories);
      });
    }).then(function(directories) {
      var lockfile_paths = directories.map(function(directory) {
        var expected_lockfile_path = path.resolve(path.join(installed_packages_directory, directory, "lock.json")); // Use constant somewhere (config?)

        return new Promise(function(accept, reject) {
          fs.readFile(expected_lockfile_path, "utf8", function(err, body) {
            if (err) return reject(err);
            accept(body);
          });
        });
      });

      return Promise.all(lockfile_paths);
    }).then(function(raw_lockfiles) {
      return raw_lockfiles.map(function(data) {
        return JSON.parse(data);
      });
    }).then(function(lockfiles) {
      var results = {};

      // Filter out lockfiles that aren't direct dependencies of this package.
      if (filter != null) {
        lockfiles = lockfiles.filter(function(lockfile) {
          return filter[lockfile.package_name] != null;
        });
      }

      // Return artifacts for direct dependencies.
      lockfiles.forEach(function(lockfile) {
        var package_name = lockfile.package_name;
        var version = lockfile.version;

        var deployments = lockfile.deployments || {};
        var contract_types = lockfile.deployments || {};

        var has_deployments = Object.keys(deployments).length > 0;
        var has_contract_types = Object.keys(contract_types).length > 0;

        if (!has_deployments && !has_contract_types) {
          return;
        }

        if (results[package_name] == null) {
          results[package_name] = {
            version: version
          };
        }

        if (has_deployments) {
          results[package_name].deployments = lockfile.deployments;
        }

        if (has_contract_types) {
          results[package_name].contract_types = lockfile.contract_types;
        }
      });

      return results;
    });
  }
};

module.exports = Preflight;


/***/ }),
/* 340 */
/***/ (function(module, exports, __webpack_require__) {

var dir = __webpack_require__(98);
var glob = __webpack_require__(124);
var fs = __webpack_require__(1);
var each = __webpack_require__(574);
var path = __webpack_require__(0);

var Sources = {

  expand: function(list, basePath) {
    var self = this;
    var paths = [];

    return new Promise(function(accept, reject) {
      each(list, function(source_path, finished) {
        var matches = [];

        // If we have a glob...
        if (glob.hasMagic(source_path)) {
          self.expandGlob(source_path, basePath).then(function(result) {
            paths = paths.concat(result);
          }).then(finished).catch(finished);
          return;
        }

        fs.stat(source_path, function(err, stats) {
          if (err) return finished(err);

          // If it's a directory, recursively get all children and grandchildren
          // and add them to the list.
          if (stats.isDirectory()) {
            self.expandDirectory(source_path, basePath).then(function(result) {
              paths = paths.concat(result);
            }).then(finished).catch(finished);
            return;
          }

          if (stats.isFile()) {
            // If it's a file, just add it to the list.
            paths.push(source_path);
            return finished();
          }

          // In the rare case it's neither a file nor directory, error.
          return finished(new Error("Unknown file type at path " + source_path));
        });
      }, function(err) {
        if (err) return reject(err);
        accept(paths);
      });
    });
  },

  expandGlob: function(source_path, basePath) {
    var self = this;
    return new Promise(function(accept, reject) {
      glob(source_path, {
        cwd: basePath
      }, function(err, matches) {
        if (err) return reject(err);
        accept(matches);
      });
    }).then(function(matches) {
      return matches.map(function(match) {
        return path.resolve(path.join(basePath, match));
      });
    }).then(function(matches) {
      return self.expand(matches, basePath);
    });
  },

  expandDirectory: function(source_path, basePath) {
    source_path = path.resolve(path.join(basePath, source_path));
    return new Promise(function(accept, reject) {
      dir.files(source_path, function(err, files) {
        if (err) return reject(err);
        accept(files);
      });
    });
  },

  findDirectories: function(basePath) {
    return new Promise(function(accept, reject) {
      glob("./*", {
        cwd: basePath
      }, function(err, matches) {
        if (err) return reject(err);
        matches = matches.map(function(match) {
          return path.join(basePath, match);
        });
        accept(matches);
      });
    });
  }

};

module.exports = Sources;


/***/ }),
/* 341 */
/***/ (function(module, exports, __webpack_require__) {

var URL = __webpack_require__(8);

var Util = {
  isURI: function(url) {
    return URL.parse(url).protocol != null;
  }
};

module.exports = Util;


/***/ }),
/* 342 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function (data, opts) {
    if (!opts) opts = {};
    if (typeof opts === 'function') opts = { cmp: opts };
    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;

    var cmp = opts.cmp && (function (f) {
        return function (node) {
            return function (a, b) {
                var aobj = { key: a, value: node[a] };
                var bobj = { key: b, value: node[b] };
                return f(aobj, bobj);
            };
        };
    })(opts.cmp);

    var seen = [];
    return (function stringify (node) {
        if (node && node.toJSON && typeof node.toJSON === 'function') {
            node = node.toJSON();
        }

        if (node === undefined) return;
        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
        if (typeof node !== 'object') return JSON.stringify(node);

        var i, out;
        if (Array.isArray(node)) {
            out = '[';
            for (i = 0; i < node.length; i++) {
                if (i) out += ',';
                out += stringify(node[i]) || 'null';
            }
            return out + ']';
        }

        if (node === null) return 'null';

        if (seen.indexOf(node) !== -1) {
            if (cycles) return JSON.stringify('__cycle__');
            throw new TypeError('Converting circular structure to JSON');
        }

        var seenIndex = seen.push(node) - 1;
        var keys = Object.keys(node).sort(cmp && cmp(node));
        out = '';
        for (i = 0; i < keys.length; i++) {
            var key = keys[i];
            var value = stringify(node[key]);

            if (!value) continue;
            if (out) out += ',';
            out += JSON.stringify(key) + ':' + value;
        }
        seen.splice(seenIndex, 1);
        return '{' + out + '}';
    })(data);
};


/***/ }),
/* 343 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const path = __webpack_require__(0);
const locatePath = __webpack_require__(918);

module.exports = (filename, opts) => {
	opts = opts || {};

	const startDir = path.resolve(opts.cwd || '');
	const root = path.parse(startDir).root;

	const filenames = [].concat(filename);

	return new Promise(resolve => {
		(function find(dir) {
			locatePath(filenames, {cwd: dir}).then(file => {
				if (file) {
					resolve(path.join(dir, file));
				} else if (dir === root) {
					resolve(null);
				} else {
					find(path.dirname(dir));
				}
			});
		})(startDir);
	});
};

module.exports.sync = (filename, opts) => {
	opts = opts || {};

	let dir = path.resolve(opts.cwd || '');
	const root = path.parse(dir).root;

	const filenames = [].concat(filename);

	// eslint-disable-next-line no-constant-condition
	while (true) {
		const file = locatePath.sync(filenames, {cwd: dir});

		if (file) {
			return path.join(dir, file);
		} else if (dir === root) {
			return null;
		}

		dir = path.dirname(dir);
	}
};


/***/ }),
/* 344 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = {
  copySync: __webpack_require__(813)
}


/***/ }),
/* 345 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
module.exports = {
  copy: u(__webpack_require__(814))
}


/***/ }),
/* 346 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
const u = __webpack_require__(31).fromCallback
const fs = __webpack_require__(3)

const api = [
  'access',
  'appendFile',
  'chmod',
  'chown',
  'close',
  'copyFile',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'mkdtemp',
  'open',
  'readFile',
  'readdir',
  'readlink',
  'realpath',
  'rename',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'writeFile'
].filter(key => {
  // Some commands are not available on some systems. Ex:
  // fs.copyFile was added in Node.js v8.5.0
  // fs.mkdtemp was added in Node.js v5.10.0
  // fs.lchown is not available on at least some Linux
  return typeof fs[key] === 'function'
})

// Export all keys:
Object.keys(fs).forEach(key => {
  if (key === 'promises') {
    // fs.promises is a getter property that triggers ExperimentalWarning
    // Don't re-export it here, the getter is defined in "lib/index.js"
    return
  }
  exports[key] = fs[key]
})

// Universalify async methods:
api.forEach(method => {
  exports[method] = u(fs[method])
})

// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
  if (typeof callback === 'function') {
    return fs.exists(filename, callback)
  }
  return new Promise(resolve => {
    return fs.exists(filename, resolve)
  })
}

// fs.read() & fs.write need special treatment due to multiple callback args

exports.read = function (fd, buffer, offset, length, position, callback) {
  if (typeof callback === 'function') {
    return fs.read(fd, buffer, offset, length, position, callback)
  }
  return new Promise((resolve, reject) => {
    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
      if (err) return reject(err)
      resolve({ bytesRead, buffer })
    })
  })
}

// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// We need to handle both cases, so we use ...args
exports.write = function (fd, buffer, ...args) {
  if (typeof args[args.length - 1] === 'function') {
    return fs.write(fd, buffer, ...args)
  }

  return new Promise((resolve, reject) => {
    fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
      if (err) return reject(err)
      resolve({ bytesWritten, buffer })
    })
  })
}


/***/ }),
/* 347 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const path = __webpack_require__(0)

// get drive on windows
function getRootPath (p) {
  p = path.normalize(path.resolve(p)).split(path.sep)
  if (p.length > 0) return p[0]
  return null
}

// http://stackoverflow.com/a/62888/10333 contains more accurate
// TODO: expand to include the rest
const INVALID_PATH_CHARS = /[<>:"|?*]/

function invalidWin32Path (p) {
  const rp = getRootPath(p)
  p = p.replace(rp, '')
  return INVALID_PATH_CHARS.test(p)
}

module.exports = {
  getRootPath,
  invalidWin32Path
}


/***/ }),
/* 348 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* eslint-disable node/no-deprecated-api */
module.exports = function (size) {
  if (typeof Buffer.allocUnsafe === 'function') {
    try {
      return Buffer.allocUnsafe(size)
    } catch (e) {
      return new Buffer(size)
    }
  }
  return new Buffer(size)
}


/***/ }),
/* 349 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const os = __webpack_require__(5)
const path = __webpack_require__(0)

// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisResSync () {
  let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
  const fd = fs.openSync(tmpfile, 'r+')
  fs.futimesSync(fd, d, d)
  fs.closeSync(fd)
  return fs.statSync(tmpfile).mtime > 1435410243000
}

function hasMillisRes (callback) {
  let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => {
    if (err) return callback(err)
    fs.open(tmpfile, 'r+', (err, fd) => {
      if (err) return callback(err)
      fs.futimes(fd, d, d, err => {
        if (err) return callback(err)
        fs.close(fd, err => {
          if (err) return callback(err)
          fs.stat(tmpfile, (err, stats) => {
            if (err) return callback(err)
            callback(null, stats.mtime > 1435410243000)
          })
        })
      })
    })
  })
}

function timeRemoveMillis (timestamp) {
  if (typeof timestamp === 'number') {
    return Math.floor(timestamp / 1000) * 1000
  } else if (timestamp instanceof Date) {
    return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
  } else {
    throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
  }
}

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', (err, fd) => {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, futimesErr => {
      fs.close(fd, closeErr => {
        if (callback) callback(futimesErr || closeErr)
      })
    })
  })
}

function utimesMillisSync (path, atime, mtime) {
  const fd = fs.openSync(path, 'r+')
  fs.futimesSync(fd, atime, mtime)
  return fs.closeSync(fd)
}

module.exports = {
  hasMillisRes,
  hasMillisResSync,
  timeRemoveMillis,
  utimesMillis,
  utimesMillisSync
}


/***/ }),
/* 350 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = realpath
realpath.realpath = realpath
realpath.sync = realpathSync
realpath.realpathSync = realpathSync
realpath.monkeypatch = monkeypatch
realpath.unmonkeypatch = unmonkeypatch

var fs = __webpack_require__(1)
var origRealpath = fs.realpath
var origRealpathSync = fs.realpathSync

var version = process.version
var ok = /^v[0-5]\./.test(version)
var old = __webpack_require__(832)

function newError (er) {
  return er && er.syscall === 'realpath' && (
    er.code === 'ELOOP' ||
    er.code === 'ENOMEM' ||
    er.code === 'ENAMETOOLONG'
  )
}

function realpath (p, cache, cb) {
  if (ok) {
    return origRealpath(p, cache, cb)
  }

  if (typeof cache === 'function') {
    cb = cache
    cache = null
  }
  origRealpath(p, cache, function (er, result) {
    if (newError(er)) {
      old.realpath(p, cache, cb)
    } else {
      cb(er, result)
    }
  })
}

function realpathSync (p, cache) {
  if (ok) {
    return origRealpathSync(p, cache)
  }

  try {
    return origRealpathSync(p, cache)
  } catch (er) {
    if (newError(er)) {
      return old.realpathSync(p, cache)
    } else {
      throw er
    }
  }
}

function monkeypatch () {
  fs.realpath = realpath
  fs.realpathSync = realpathSync
}

function unmonkeypatch () {
  fs.realpath = origRealpath
  fs.realpathSync = origRealpathSync
}


/***/ }),
/* 351 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/* !
 * Chai - getFuncName utility
 * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .getFuncName(constructorFn)
 *
 * Returns the name of a function.
 * When a non-function instance is passed, returns `null`.
 * This also includes a polyfill function if `aFunc.name` is not defined.
 *
 * @name getFuncName
 * @param {Function} funct
 * @namespace Utils
 * @api public
 */

var toString = Function.prototype.toString;
var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\s\(\/]+)/;
function getFuncName(aFunc) {
  if (typeof aFunc !== 'function') {
    return null;
  }

  var name = '';
  if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {
    // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined
    var match = toString.call(aFunc).match(functionNameMatch);
    if (match) {
      name = match[1];
    }
  } else {
    // If we've got a `name` property we just use it
    name = aFunc.name;
  }

  return name;
}

module.exports = getFuncName;


/***/ }),
/* 352 */
/***/ (function(module, exports, __webpack_require__) {

// imported from ncp (this is temporary, will rewrite)

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var utimes = __webpack_require__(856)

function ncp (source, dest, options, callback) {
  if (!callback) {
    callback = options
    options = {}
  }

  var basePath = process.cwd()
  var currentPath = path.resolve(basePath, source)
  var targetPath = path.resolve(basePath, dest)

  var filter = options.filter
  var transform = options.transform
  var clobber = options.clobber !== false
  var dereference = options.dereference
  var preserveTimestamps = options.preserveTimestamps === true

  var errs = null

  var started = 0
  var finished = 0
  var running = 0
  // this is pretty useless now that we're using graceful-fs
  // consider removing
  var limit = options.limit || 512

  startCopy(currentPath)

  function startCopy (source) {
    started++
    if (filter) {
      if (filter instanceof RegExp) {
        if (!filter.test(source)) {
          return doneOne(true)
        }
      } else if (typeof filter === 'function') {
        if (!filter(source)) {
          return doneOne(true)
        }
      }
    }
    return getStats(source)
  }

  function getStats (source) {
    var stat = dereference ? fs.stat : fs.lstat
    if (running >= limit) {
      return setImmediate(function () {
        getStats(source)
      })
    }
    running++
    stat(source, function (err, stats) {
      if (err) return onError(err)

      // We need to get the mode from the stats object and preserve it.
      var item = {
        name: source,
        mode: stats.mode,
        mtime: stats.mtime, // modified time
        atime: stats.atime, // access time
        stats: stats // temporary
      }

      if (stats.isDirectory()) {
        return onDir(item)
      } else if (stats.isFile()) {
        return onFile(item)
      } else if (stats.isSymbolicLink()) {
        // Symlinks don't really need to know about the mode.
        return onLink(source)
      }
    })
  }

  function onFile (file) {
    var target = file.name.replace(currentPath, targetPath)
    isWritable(target, function (writable) {
      if (writable) {
        copyFile(file, target)
      } else {
        if (clobber) {
          rmFile(target, function () {
            copyFile(file, target)
          })
        } else {
          doneOne()
        }
      }
    })
  }

  function copyFile (file, target) {
    var readStream = fs.createReadStream(file.name)
    var writeStream = fs.createWriteStream(target, { mode: file.mode })

    readStream.on('error', onError)
    writeStream.on('error', onError)

    if (transform) {
      transform(readStream, writeStream, file)
    } else {
      writeStream.on('open', function () {
        readStream.pipe(writeStream)
      })
    }

    writeStream.once('finish', function () {
      fs.chmod(target, file.mode, function (err) {
        if (err) return onError(err)
        if (preserveTimestamps) {
          utimes.utimesMillis(target, file.atime, file.mtime, function (err) {
            if (err) return onError(err)
            return doneOne()
          })
        } else {
          doneOne()
        }
      })
    })
  }

  function rmFile (file, done) {
    fs.unlink(file, function (err) {
      if (err) return onError(err)
      return done()
    })
  }

  function onDir (dir) {
    var target = dir.name.replace(currentPath, targetPath)
    isWritable(target, function (writable) {
      if (writable) {
        return mkDir(dir, target)
      }
      copyDir(dir.name)
    })
  }

  function mkDir (dir, target) {
    fs.mkdir(target, dir.mode, function (err) {
      if (err) return onError(err)
      // despite setting mode in fs.mkdir, doesn't seem to work
      // so we set it here.
      fs.chmod(target, dir.mode, function (err) {
        if (err) return onError(err)
        copyDir(dir.name)
      })
    })
  }

  function copyDir (dir) {
    fs.readdir(dir, function (err, items) {
      if (err) return onError(err)
      items.forEach(function (item) {
        startCopy(path.join(dir, item))
      })
      return doneOne()
    })
  }

  function onLink (link) {
    var target = link.replace(currentPath, targetPath)
    fs.readlink(link, function (err, resolvedPath) {
      if (err) return onError(err)
      checkLink(resolvedPath, target)
    })
  }

  function checkLink (resolvedPath, target) {
    if (dereference) {
      resolvedPath = path.resolve(basePath, resolvedPath)
    }
    isWritable(target, function (writable) {
      if (writable) {
        return makeLink(resolvedPath, target)
      }
      fs.readlink(target, function (err, targetDest) {
        if (err) return onError(err)

        if (dereference) {
          targetDest = path.resolve(basePath, targetDest)
        }
        if (targetDest === resolvedPath) {
          return doneOne()
        }
        return rmFile(target, function () {
          makeLink(resolvedPath, target)
        })
      })
    })
  }

  function makeLink (linkPath, target) {
    fs.symlink(linkPath, target, function (err) {
      if (err) return onError(err)
      return doneOne()
    })
  }

  function isWritable (path, done) {
    fs.lstat(path, function (err) {
      if (err) {
        if (err.code === 'ENOENT') return done(true)
        return done(false)
      }
      return done(false)
    })
  }

  function onError (err) {
    if (options.stopOnError) {
      return callback(err)
    } else if (!errs && options.errs) {
      errs = fs.createWriteStream(options.errs)
    } else if (!errs) {
      errs = []
    }
    if (typeof errs.write === 'undefined') {
      errs.push(err)
    } else {
      errs.write(err.stack + '\n\n')
    }
    return doneOne()
  }

  function doneOne (skipped) {
    if (!skipped) running--
    finished++
    if ((started === finished) && (running === 0)) {
      if (callback !== undefined) {
        return errs ? callback(errs) : callback(null)
      }
    }
  }
}

module.exports = ncp


/***/ }),
/* 353 */
/***/ (function(module, exports, __webpack_require__) {

var assign = __webpack_require__(855)

var fse = {}
var gfs = __webpack_require__(3)

// attach fs methods to fse
Object.keys(gfs).forEach(function (key) {
  fse[key] = gfs[key]
})

var fs = fse

assign(fs, __webpack_require__(842))
assign(fs, __webpack_require__(840))
assign(fs, __webpack_require__(36))
assign(fs, __webpack_require__(356))
assign(fs, __webpack_require__(850))
assign(fs, __webpack_require__(851))
assign(fs, __webpack_require__(854))
assign(fs, __webpack_require__(843))
assign(fs, __webpack_require__(845))
assign(fs, __webpack_require__(852))

module.exports = fs

// maintain backwards compatibility for awhile
var jsonfile = {}
Object.defineProperty(jsonfile, 'spaces', {
  get: function () {
    return fs.spaces // found in ./json
  },
  set: function (val) {
    fs.spaces = val
  }
})

module.exports.jsonfile = jsonfile // so users of fs-extra can modify jsonFile.spaces


/***/ }),
/* 354 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var jsonFile = __webpack_require__(224)
var mkdir = __webpack_require__(36)

function outputJsonSync (file, data, options) {
  var dir = path.dirname(file)

  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  jsonFile.writeFileSync(file, data, options)
}

module.exports = outputJsonSync


/***/ }),
/* 355 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var jsonFile = __webpack_require__(224)
var mkdir = __webpack_require__(36)

function outputJson (file, data, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  var dir = path.dirname(file)

  fs.exists(dir, function (itDoes) {
    if (itDoes) return jsonFile.writeFile(file, data, options, callback)

    mkdir.mkdirs(dir, function (err) {
      if (err) return callback(err)
      jsonFile.writeFile(file, data, options, callback)
    })
  })
}

module.exports = outputJson


/***/ }),
/* 356 */
/***/ (function(module, exports, __webpack_require__) {

var rimraf = __webpack_require__(237)

function removeSync (dir) {
  return rimraf.sync(dir)
}

function remove (dir, callback) {
  return callback ? rimraf(dir, callback) : rimraf(dir, function () {})
}

module.exports = {
  remove: remove,
  removeSync: removeSync
}


/***/ }),
/* 357 */
/***/ (function(module, exports, __webpack_require__) {

exports.alphasort = alphasort
exports.alphasorti = alphasorti
exports.setopts = setopts
exports.ownProp = ownProp
exports.makeAbs = makeAbs
exports.finish = finish
exports.mark = mark
exports.isIgnored = isIgnored
exports.childrenIgnored = childrenIgnored

function ownProp (obj, field) {
  return Object.prototype.hasOwnProperty.call(obj, field)
}

var path = __webpack_require__(0)
var minimatch = __webpack_require__(64)
var isAbsolute = __webpack_require__(65)
var Minimatch = minimatch.Minimatch

function alphasorti (a, b) {
  return a.toLowerCase().localeCompare(b.toLowerCase())
}

function alphasort (a, b) {
  return a.localeCompare(b)
}

function setupIgnores (self, options) {
  self.ignore = options.ignore || []

  if (!Array.isArray(self.ignore))
    self.ignore = [self.ignore]

  if (self.ignore.length) {
    self.ignore = self.ignore.map(ignoreMap)
  }
}

// ignore patterns are always in dot:true mode.
function ignoreMap (pattern) {
  var gmatcher = null
  if (pattern.slice(-3) === '/**') {
    var gpattern = pattern.replace(/(\/\*\*)+$/, '')
    gmatcher = new Minimatch(gpattern, { dot: true })
  }

  return {
    matcher: new Minimatch(pattern, { dot: true }),
    gmatcher: gmatcher
  }
}

function setopts (self, pattern, options) {
  if (!options)
    options = {}

  // base-matching: just use globstar for that.
  if (options.matchBase && -1 === pattern.indexOf("/")) {
    if (options.noglobstar) {
      throw new Error("base matching requires globstar")
    }
    pattern = "**/" + pattern
  }

  self.silent = !!options.silent
  self.pattern = pattern
  self.strict = options.strict !== false
  self.realpath = !!options.realpath
  self.realpathCache = options.realpathCache || Object.create(null)
  self.follow = !!options.follow
  self.dot = !!options.dot
  self.mark = !!options.mark
  self.nodir = !!options.nodir
  if (self.nodir)
    self.mark = true
  self.sync = !!options.sync
  self.nounique = !!options.nounique
  self.nonull = !!options.nonull
  self.nosort = !!options.nosort
  self.nocase = !!options.nocase
  self.stat = !!options.stat
  self.noprocess = !!options.noprocess
  self.absolute = !!options.absolute

  self.maxLength = options.maxLength || Infinity
  self.cache = options.cache || Object.create(null)
  self.statCache = options.statCache || Object.create(null)
  self.symlinks = options.symlinks || Object.create(null)

  setupIgnores(self, options)

  self.changedCwd = false
  var cwd = process.cwd()
  if (!ownProp(options, "cwd"))
    self.cwd = cwd
  else {
    self.cwd = path.resolve(options.cwd)
    self.changedCwd = self.cwd !== cwd
  }

  self.root = options.root || path.resolve(self.cwd, "/")
  self.root = path.resolve(self.root)
  if (process.platform === "win32")
    self.root = self.root.replace(/\\/g, "/")

  // TODO: is an absolute `cwd` supposed to be resolved against `root`?
  // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')
  self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)
  if (process.platform === "win32")
    self.cwdAbs = self.cwdAbs.replace(/\\/g, "/")
  self.nomount = !!options.nomount

  // disable comments and negation in Minimatch.
  // Note that they are not supported in Glob itself anyway.
  options.nonegate = true
  options.nocomment = true

  self.minimatch = new Minimatch(pattern, options)
  self.options = self.minimatch.options
}

function finish (self) {
  var nou = self.nounique
  var all = nou ? [] : Object.create(null)

  for (var i = 0, l = self.matches.length; i < l; i ++) {
    var matches = self.matches[i]
    if (!matches || Object.keys(matches).length === 0) {
      if (self.nonull) {
        // do like the shell, and spit out the literal glob
        var literal = self.minimatch.globSet[i]
        if (nou)
          all.push(literal)
        else
          all[literal] = true
      }
    } else {
      // had matches
      var m = Object.keys(matches)
      if (nou)
        all.push.apply(all, m)
      else
        m.forEach(function (m) {
          all[m] = true
        })
    }
  }

  if (!nou)
    all = Object.keys(all)

  if (!self.nosort)
    all = all.sort(self.nocase ? alphasorti : alphasort)

  // at *some* point we statted all of these
  if (self.mark) {
    for (var i = 0; i < all.length; i++) {
      all[i] = self._mark(all[i])
    }
    if (self.nodir) {
      all = all.filter(function (e) {
        var notDir = !(/\/$/.test(e))
        var c = self.cache[e] || self.cache[makeAbs(self, e)]
        if (notDir && c)
          notDir = c !== 'DIR' && !Array.isArray(c)
        return notDir
      })
    }
  }

  if (self.ignore.length)
    all = all.filter(function(m) {
      return !isIgnored(self, m)
    })

  self.found = all
}

function mark (self, p) {
  var abs = makeAbs(self, p)
  var c = self.cache[abs]
  var m = p
  if (c) {
    var isDir = c === 'DIR' || Array.isArray(c)
    var slash = p.slice(-1) === '/'

    if (isDir && !slash)
      m += '/'
    else if (!isDir && slash)
      m = m.slice(0, -1)

    if (m !== p) {
      var mabs = makeAbs(self, m)
      self.statCache[mabs] = self.statCache[abs]
      self.cache[mabs] = self.cache[abs]
    }
  }

  return m
}

// lotta situps...
function makeAbs (self, f) {
  var abs = f
  if (f.charAt(0) === '/') {
    abs = path.join(self.root, f)
  } else if (isAbsolute(f) || f === '') {
    abs = f
  } else if (self.changedCwd) {
    abs = path.resolve(self.cwd, f)
  } else {
    abs = path.resolve(f)
  }

  if (process.platform === 'win32')
    abs = abs.replace(/\\/g, '/')

  return abs
}


// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
function isIgnored (self, path) {
  if (!self.ignore.length)
    return false

  return self.ignore.some(function(item) {
    return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
  })
}

function childrenIgnored (self, path) {
  if (!self.ignore.length)
    return false

  return self.ignore.some(function(item) {
    return !!(item.gmatcher && item.gmatcher.match(path))
  })
}


/***/ }),
/* 358 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1)

module.exports = clone(fs)

function clone (obj) {
  if (obj === null || typeof obj !== 'object')
    return obj

  if (obj instanceof Object)
    var copy = { __proto__: obj.__proto__ }
  else
    var copy = Object.create(null)

  Object.getOwnPropertyNames(obj).forEach(function (key) {
    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
  })

  return copy
}


/***/ }),
/* 359 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = dfs;

/*
 * A helper that preforms a pre- or post-order traversal on the input graph
 * and returns the nodes in the order they were visited. If the graph is
 * undirected then this algorithm will navigate using neighbors. If the graph
 * is directed then this algorithm will navigate using successors.
 *
 * Order must be one of "pre" or "post".
 */
function dfs(g, vs, order) {
  if (!_.isArray(vs)) {
    vs = [vs];
  }

  var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);

  var acc = [],
      visited = {};
  _.each(vs, function(v) {
    if (!g.hasNode(v)) {
      throw new Error("Graph does not have node: " + v);
    }

    doDfs(g, v, order === "post", visited, navigation, acc);
  });
  return acc;
}

function doDfs(g, v, postorder, visited, navigation, acc) {
  if (!_.has(visited, v)) {
    visited[v] = true;

    if (!postorder) { acc.push(v); }
    _.each(navigation(v), function(w) {
      doDfs(g, w, postorder, visited, navigation, acc);
    });
    if (postorder) { acc.push(v); }
  }
}


/***/ }),
/* 360 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37),
    PriorityQueue = __webpack_require__(364);

module.exports = dijkstra;

var DEFAULT_WEIGHT_FUNC = _.constant(1);

function dijkstra(g, source, weightFn, edgeFn) {
  return runDijkstra(g, String(source),
                     weightFn || DEFAULT_WEIGHT_FUNC,
                     edgeFn || function(v) { return g.outEdges(v); });
}

function runDijkstra(g, source, weightFn, edgeFn) {
  var results = {},
      pq = new PriorityQueue(),
      v, vEntry;

  var updateNeighbors = function(edge) {
    var w = edge.v !== v ? edge.v : edge.w,
        wEntry = results[w],
        weight = weightFn(edge),
        distance = vEntry.distance + weight;

    if (weight < 0) {
      throw new Error("dijkstra does not allow negative edge weights. " +
                      "Bad edge: " + edge + " Weight: " + weight);
    }

    if (distance < wEntry.distance) {
      wEntry.distance = distance;
      wEntry.predecessor = v;
      pq.decrease(w, distance);
    }
  };

  g.nodes().forEach(function(v) {
    var distance = v === source ? 0 : Number.POSITIVE_INFINITY;
    results[v] = { distance: distance };
    pq.add(v, distance);
  });

  while (pq.size() > 0) {
    v = pq.removeMin();
    vEntry = results[v];
    if (vEntry.distance === Number.POSITIVE_INFINITY) {
      break;
    }

    edgeFn(v).forEach(updateNeighbors);
  }

  return results;
}


/***/ }),
/* 361 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  components: __webpack_require__(863),
  dijkstra: __webpack_require__(360),
  dijkstraAll: __webpack_require__(864),
  findCycles: __webpack_require__(865),
  floydWarshall: __webpack_require__(866),
  isAcyclic: __webpack_require__(867),
  postorder: __webpack_require__(868),
  preorder: __webpack_require__(869),
  prim: __webpack_require__(870),
  tarjan: __webpack_require__(362),
  topsort: __webpack_require__(363)
};


/***/ }),
/* 362 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = tarjan;

function tarjan(g) {
  var index = 0,
      stack = [],
      visited = {}, // node id -> { onStack, lowlink, index }
      results = [];

  function dfs(v) {
    var entry = visited[v] = {
      onStack: true,
      lowlink: index,
      index: index++
    };
    stack.push(v);

    g.successors(v).forEach(function(w) {
      if (!_.has(visited, w)) {
        dfs(w);
        entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);
      } else if (visited[w].onStack) {
        entry.lowlink = Math.min(entry.lowlink, visited[w].index);
      }
    });

    if (entry.lowlink === entry.index) {
      var cmpt = [],
          w;
      do {
        w = stack.pop();
        visited[w].onStack = false;
        cmpt.push(w);
      } while (v !== w);
      results.push(cmpt);
    }
  }

  g.nodes().forEach(function(v) {
    if (!_.has(visited, v)) {
      dfs(v);
    }
  });

  return results;
}


/***/ }),
/* 363 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = topsort;
topsort.CycleException = CycleException;

function topsort(g) {
  var visited = {},
      stack = {},
      results = [];

  function visit(node) {
    if (_.has(stack, node)) {
      throw new CycleException();
    }

    if (!_.has(visited, node)) {
      stack[node] = true;
      visited[node] = true;
      _.each(g.predecessors(node), visit);
      delete stack[node];
      results.push(node);
    }
  }

  _.each(g.sinks(), visit);

  if (_.size(visited) !== g.nodeCount()) {
    throw new CycleException();
  }

  return results;
}

function CycleException() {}


/***/ }),
/* 364 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = PriorityQueue;

/**
 * A min-priority queue data structure. This algorithm is derived from Cormen,
 * et al., "Introduction to Algorithms". The basic idea of a min-priority
 * queue is that you can efficiently (in O(1) time) get the smallest key in
 * the queue. Adding and removing elements takes O(log n) time. A key can
 * have its priority decreased in O(log n) time.
 */
function PriorityQueue() {
  this._arr = [];
  this._keyIndices = {};
}

/**
 * Returns the number of elements in the queue. Takes `O(1)` time.
 */
PriorityQueue.prototype.size = function() {
  return this._arr.length;
};

/**
 * Returns the keys that are in the queue. Takes `O(n)` time.
 */
PriorityQueue.prototype.keys = function() {
  return this._arr.map(function(x) { return x.key; });
};

/**
 * Returns `true` if **key** is in the queue and `false` if not.
 */
PriorityQueue.prototype.has = function(key) {
  return _.has(this._keyIndices, key);
};

/**
 * Returns the priority for **key**. If **key** is not present in the queue
 * then this function returns `undefined`. Takes `O(1)` time.
 *
 * @param {Object} key
 */
PriorityQueue.prototype.priority = function(key) {
  var index = this._keyIndices[key];
  if (index !== undefined) {
    return this._arr[index].priority;
  }
};

/**
 * Returns the key for the minimum element in this queue. If the queue is
 * empty this function throws an Error. Takes `O(1)` time.
 */
PriorityQueue.prototype.min = function() {
  if (this.size() === 0) {
    throw new Error("Queue underflow");
  }
  return this._arr[0].key;
};

/**
 * Inserts a new key into the priority queue. If the key already exists in
 * the queue this function returns `false`; otherwise it will return `true`.
 * Takes `O(n)` time.
 *
 * @param {Object} key the key to add
 * @param {Number} priority the initial priority for the key
 */
PriorityQueue.prototype.add = function(key, priority) {
  var keyIndices = this._keyIndices;
  key = String(key);
  if (!_.has(keyIndices, key)) {
    var arr = this._arr;
    var index = arr.length;
    keyIndices[key] = index;
    arr.push({key: key, priority: priority});
    this._decrease(index);
    return true;
  }
  return false;
};

/**
 * Removes and returns the smallest key in the queue. Takes `O(log n)` time.
 */
PriorityQueue.prototype.removeMin = function() {
  this._swap(0, this._arr.length - 1);
  var min = this._arr.pop();
  delete this._keyIndices[min.key];
  this._heapify(0);
  return min.key;
};

/**
 * Decreases the priority for **key** to **priority**. If the new priority is
 * greater than the previous priority, this function will throw an Error.
 *
 * @param {Object} key the key for which to raise priority
 * @param {Number} priority the new priority for the key
 */
PriorityQueue.prototype.decrease = function(key, priority) {
  var index = this._keyIndices[key];
  if (priority > this._arr[index].priority) {
    throw new Error("New priority is greater than current priority. " +
        "Key: " + key + " Old: " + this._arr[index].priority + " New: " + priority);
  }
  this._arr[index].priority = priority;
  this._decrease(index);
};

PriorityQueue.prototype._heapify = function(i) {
  var arr = this._arr;
  var l = 2 * i,
      r = l + 1,
      largest = i;
  if (l < arr.length) {
    largest = arr[l].priority < arr[largest].priority ? l : largest;
    if (r < arr.length) {
      largest = arr[r].priority < arr[largest].priority ? r : largest;
    }
    if (largest !== i) {
      this._swap(i, largest);
      this._heapify(largest);
    }
  }
};

PriorityQueue.prototype._decrease = function(index) {
  var arr = this._arr;
  var priority = arr[index].priority;
  var parent;
  while (index !== 0) {
    parent = index >> 1;
    if (arr[parent].priority < priority) {
      break;
    }
    this._swap(index, parent);
    index = parent;
  }
};

PriorityQueue.prototype._swap = function(i, j) {
  var arr = this._arr;
  var keyIndices = this._keyIndices;
  var origArrI = arr[i];
  var origArrJ = arr[j];
  arr[i] = origArrJ;
  arr[j] = origArrI;
  keyIndices[origArrJ.key] = i;
  keyIndices[origArrI.key] = j;
};


/***/ }),
/* 365 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var gitHosts = module.exports = {
  github: {
    // First two are insecure and generally shouldn't be used any more, but
    // they are still supported.
    'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ],
    'domain': 'github.com',
    'treepath': 'tree',
    'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}',
    'bugstemplate': 'https://{domain}/{user}/{project}/issues',
    'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}',
    'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz'
  },
  bitbucket: {
    'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
    'domain': 'bitbucket.org',
    'treepath': 'src',
    'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz'
  },
  gitlab: {
    'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
    'domain': 'gitlab.com',
    'treepath': 'tree',
    'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#README',
    'bugstemplate': 'https://{domain}/{user}/{project}/issues',
    'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}'
  },
  gist: {
    'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
    'domain': 'gist.github.com',
    'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]+)(?:[.]git)?$/,
    'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}',
    'bugstemplate': 'https://{domain}/{project}',
    'gittemplate': 'git://{domain}/{project}.git{#committish}',
    'sshtemplate': 'git@{domain}:/{project}.git{#committish}',
    'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}',
    'browsetemplate': 'https://{domain}/{project}{/committish}',
    'browsefiletemplate': 'https://{domain}/{project}{/committish}{#path}',
    'docstemplate': 'https://{domain}/{project}{/committish}',
    'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
    'shortcuttemplate': '{type}:{project}{#committish}',
    'pathtemplate': '{project}{#committish}',
    'tarballtemplate': 'https://{domain}/{user}/{project}/archive/{committish}.tar.gz',
    'hashformat': function (fragment) {
      return 'file-' + formatHashFragment(fragment)
    }
  }
}

var gitHostDefaults = {
  'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}',
  'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}',
  'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}',
  'browsefiletemplate': 'https://{domain}/{user}/{project}/{treepath}/{committish}/{path}{#fragment}',
  'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme',
  'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}',
  'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}',
  'shortcuttemplate': '{type}:{user}/{project}{#committish}',
  'pathtemplate': '{user}/{project}{#committish}',
  'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/,
  'hashformat': formatHashFragment
}

Object.keys(gitHosts).forEach(function (name) {
  Object.keys(gitHostDefaults).forEach(function (key) {
    if (gitHosts[name][key]) return
    gitHosts[name][key] = gitHostDefaults[key]
  })
  gitHosts[name].protocols_re = RegExp('^(' +
    gitHosts[name].protocols.map(function (protocol) {
      return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1')
    }).join('|') + '):$')
})

function formatHashFragment (fragment) {
  return fragment.toLowerCase().replace(/^\W+|\/|\W+$/g, '').replace(/\W+/g, '-')
}


/***/ }),
/* 366 */
/***/ (function(module, exports, __webpack_require__) {

var wrappy = __webpack_require__(437)
var reqs = Object.create(null)
var once = __webpack_require__(233)

module.exports = wrappy(inflight)

function inflight (key, cb) {
  if (reqs[key]) {
    reqs[key].push(cb)
    return null
  } else {
    reqs[key] = [cb]
    return makeres(key)
  }
}

function makeres (key) {
  return once(function RES () {
    var cbs = reqs[key]
    var len = cbs.length
    var args = slice(arguments)

    // XXX It's somewhat ambiguous whether a new callback added in this
    // pass should be queued for later execution if something in the
    // list of callbacks throws, or if it should just be discarded.
    // However, it's such an edge case that it hardly matters, and either
    // choice is likely as surprising as the other.
    // As it happens, we do go ahead and schedule it for later execution.
    try {
      for (var i = 0; i < len; i++) {
        cbs[i].apply(null, args)
      }
    } finally {
      if (cbs.length > len) {
        // added more in the interim.
        // de-zalgo, just in case, but don't call again.
        cbs.splice(0, len)
        process.nextTick(function () {
          RES.apply(null, args)
        })
      } else {
        delete reqs[key]
      }
    }
  })
}

function slice (args) {
  var length = args.length
  var array = []

  for (var i = 0; i < length; i++) array[i] = args[i]
  return array
}


/***/ }),
/* 367 */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = Array.isArray || function (arr) {
  return toString.call(arr) == '[object Array]';
};


/***/ }),
/* 368 */
/***/ (function(module, exports, __webpack_require__) {

var stream = __webpack_require__(22)


function isStream (obj) {
  return obj instanceof stream.Stream
}


function isReadable (obj) {
  return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object'
}


function isWritable (obj) {
  return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object'
}


function isDuplex (obj) {
  return isReadable(obj) && isWritable(obj)
}


module.exports            = isStream
module.exports.isReadable = isReadable
module.exports.isWritable = isWritable
module.exports.isDuplex   = isDuplex


/***/ }),
/* 369 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var each = __webpack_require__(808);
module.exports = api;


/**
 * Convenience wrapper around the api.
 * Calls `.get` when called with an `object` and a `pointer`.
 * Calls `.set` when also called with `value`.
 * If only supplied `object`, returns a partially applied function, mapped to the object.
 *
 * @param {Object} obj
 * @param {String|Array} pointer
 * @param value
 * @returns {*}
 */

function api (obj, pointer, value) {
    // .set()
    if (arguments.length === 3) {
        return api.set(obj, pointer, value);
    }
    // .get()
    if (arguments.length === 2) {
        return api.get(obj, pointer);
    }
    // Return a partially applied function on `obj`.
    var wrapped = api.bind(api, obj);

    // Support for oo style
    for (var name in api) {
        if (api.hasOwnProperty(name)) {
            wrapped[name] = api[name].bind(wrapped, obj);
        }
    }
    return wrapped;
}


/**
 * Lookup a json pointer in an object
 *
 * @param {Object} obj
 * @param {String|Array} pointer
 * @returns {*}
 */
api.get = function get (obj, pointer) {
    var refTokens = Array.isArray(pointer) ? pointer : api.parse(pointer);

    for (var i = 0; i < refTokens.length; ++i) {
        var tok = refTokens[i];
        if (!(typeof obj == 'object' && tok in obj)) {
            throw new Error('Invalid reference token: ' + tok);
        }
        obj = obj[tok];
    }
    return obj;
};

/**
 * Sets a value on an object
 *
 * @param {Object} obj
 * @param {String|Array} pointer
 * @param value
 */
api.set = function set (obj, pointer, value) {
    var refTokens = Array.isArray(pointer) ? pointer : api.parse(pointer),
      nextTok = refTokens[0];

    for (var i = 0; i < refTokens.length - 1; ++i) {
        var tok = refTokens[i];
        if (tok === '-' && Array.isArray(obj)) {
          tok = obj.length;
        }
        nextTok = refTokens[i + 1];

        if (!(tok in obj)) {
            if (nextTok.match(/^(\d+|-)$/)) {
                obj[tok] = [];
            } else {
                obj[tok] = {};
            }
        }
        obj = obj[tok];
    }
    if (nextTok === '-' && Array.isArray(obj)) {
      nextTok = obj.length;
    }
    obj[nextTok] = value;
    return this;
};

/**
 * Removes an attribute
 *
 * @param {Object} obj
 * @param {String|Array} pointer
 */
api.remove = function (obj, pointer) {
    var refTokens = Array.isArray(pointer) ? pointer : api.parse(pointer);
    var finalToken = refTokens[refTokens.length -1];
    if (finalToken === undefined) {
        throw new Error('Invalid JSON pointer for remove: "' + pointer + '"');
    }

    var parent = api.get(obj, refTokens.slice(0, -1));
    if (Array.isArray(parent)) {
      var index = +finalToken;
      if (finalToken === '' && isNaN(index)) {
        throw new Error('Invalid array index: "' + finalToken + '"');
      }

      Array.prototype.splice.call(parent, index, 1);
    } else {
      delete parent[finalToken];
    }
};

/**
 * Returns a (pointer -> value) dictionary for an object
 *
 * @param obj
 * @param {function} descend
 * @returns {}
 */
api.dict = function dict (obj, descend) {
    var results = {};
    api.walk(obj, function (value, pointer) {
        results[pointer] = value;
    }, descend);
    return results;
};

/**
 * Iterates over an object
 * Iterator: function (value, pointer) {}
 *
 * @param obj
 * @param {function} iterator
 * @param {function} descend
 */
api.walk = function walk (obj, iterator, descend) {
    var refTokens = [];

    descend = descend || function (value) {
        var type = Object.prototype.toString.call(value);
        return type === '[object Object]' || type === '[object Array]';
    };

    (function next (cur) {
        each(cur, function (value, key) {
            refTokens.push(String(key));
            if (descend(value)) {
                next(value);
            } else {
                iterator(value, api.compile(refTokens));
            }
            refTokens.pop();
        });
    }(obj));
};

/**
 * Tests if an object has a value for a json pointer
 *
 * @param obj
 * @param pointer
 * @returns {boolean}
 */
api.has = function has (obj, pointer) {
    try {
        api.get(obj, pointer);
    } catch (e) {
        return false;
    }
    return true;
};

/**
 * Escapes a reference token
 *
 * @param str
 * @returns {string}
 */
api.escape = function escape (str) {
    return str.toString().replace(/~/g, '~0').replace(/\//g, '~1');
};

/**
 * Unescapes a reference token
 *
 * @param str
 * @returns {string}
 */
api.unescape = function unescape (str) {
    return str.replace(/~1/g, '/').replace(/~0/g, '~');
};

/**
 * Converts a json pointer into a array of reference tokens
 *
 * @param pointer
 * @returns {Array}
 */
api.parse = function parse (pointer) {
    if (pointer === '') { return []; }
    if (pointer.charAt(0) !== '/') { throw new Error('Invalid JSON pointer: ' + pointer); }
    return pointer.substring(1).split(/\//).map(api.unescape);
};

/**
 * Builds a json pointer from a array of reference tokens
 *
 * @param refTokens
 * @returns {string}
 */
api.compile = function compile (refTokens) {
    if (refTokens.length === 0) { return ''; }
    return '/' + refTokens.map(api.escape).join('/');
};


/***/ }),
/* 370 */
/***/ (function(module, exports, __webpack_require__) {

var isBuffer = __webpack_require__(892);
var toString = Object.prototype.toString;

/**
 * Get the native `typeof` a value.
 *
 * @param  {*} `val`
 * @return {*} Native javascript type
 */

module.exports = function kindOf(val) {
  // primitivies
  if (typeof val === 'undefined') {
    return 'undefined';
  }
  if (val === null) {
    return 'null';
  }
  if (val === true || val === false || val instanceof Boolean) {
    return 'boolean';
  }
  if (typeof val === 'string' || val instanceof String) {
    return 'string';
  }
  if (typeof val === 'number' || val instanceof Number) {
    return 'number';
  }

  // functions
  if (typeof val === 'function' || val instanceof Function) {
    return 'function';
  }

  // array
  if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
    return 'array';
  }

  // check for instances of RegExp and Date before calling `toString`
  if (val instanceof RegExp) {
    return 'regexp';
  }
  if (val instanceof Date) {
    return 'date';
  }

  // other objects
  var type = toString.call(val);

  if (type === '[object RegExp]') {
    return 'regexp';
  }
  if (type === '[object Date]') {
    return 'date';
  }
  if (type === '[object Arguments]') {
    return 'arguments';
  }
  if (type === '[object Error]') {
    return 'error';
  }

  // buffer
  if (isBuffer(val)) {
    return 'buffer';
  }

  // es6: Map, WeakMap, Set, WeakSet
  if (type === '[object Set]') {
    return 'set';
  }
  if (type === '[object WeakSet]') {
    return 'weakset';
  }
  if (type === '[object Map]') {
    return 'map';
  }
  if (type === '[object WeakMap]') {
    return 'weakmap';
  }
  if (type === '[object Symbol]') {
    return 'symbol';
  }

  // typed arrays
  if (type === '[object Int8Array]') {
    return 'int8array';
  }
  if (type === '[object Uint8Array]') {
    return 'uint8array';
  }
  if (type === '[object Uint8ClampedArray]') {
    return 'uint8clampedarray';
  }
  if (type === '[object Int16Array]') {
    return 'int16array';
  }
  if (type === '[object Uint16Array]') {
    return 'uint16array';
  }
  if (type === '[object Int32Array]') {
    return 'int32array';
  }
  if (type === '[object Uint32Array]') {
    return 'uint32array';
  }
  if (type === '[object Float32Array]') {
    return 'float32array';
  }
  if (type === '[object Float64Array]') {
    return 'float64array';
  }

  // must be a plain object
  return 'object';
};


/***/ }),
/* 371 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(925);


/** Built-in value references. */
var Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__["a" /* default */].Symbol;

/* harmony default export */ __webpack_exports__["a"] = (Symbol);


/***/ }),
/* 372 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(919);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(921);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(926);




/** `Object#toString` result references. */
var objectTag = '[object Object]';

/** Used for built-in method references. */
var funcProto = Function.prototype,
    objectProto = Object.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Used to infer the `Object` constructor. */
var objectCtorString = funcToString.call(Object);

/**
 * Checks if `value` is a plain object, that is, an object created by the
 * `Object` constructor or one with a `[[Prototype]]` of `null`.
 *
 * @static
 * @memberOf _
 * @since 0.8.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 * }
 *
 * _.isPlainObject(new Foo);
 * // => false
 *
 * _.isPlainObject([1, 2, 3]);
 * // => false
 *
 * _.isPlainObject({ 'x': 0, 'y': 0 });
 * // => true
 *
 * _.isPlainObject(Object.create(null));
 * // => true
 */
function isPlainObject(value) {
  if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__["a" /* default */])(value) || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__["a" /* default */])(value) != objectTag) {
    return false;
  }
  var proto = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__getPrototype_js__["a" /* default */])(value);
  if (proto === null) {
    return true;
  }
  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
    funcToString.call(Ctor) == objectCtorString;
}

/* harmony default export */ __webpack_exports__["a"] = (isPlainObject);


/***/ }),
/* 373 */
/***/ (function(module, exports, __webpack_require__) {

var root = __webpack_require__(375);

/** Built-in value references. */
var Symbol = root.Symbol;

module.exports = Symbol;


/***/ }),
/* 374 */
/***/ (function(module, exports) {

/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

module.exports = freeGlobal;


/***/ }),
/* 375 */
/***/ (function(module, exports, __webpack_require__) {

var freeGlobal = __webpack_require__(374);

/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();

module.exports = root;


/***/ }),
/* 376 */
/***/ (function(module, exports) {

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/**
 * Checks if `value` is a valid array-like length.
 *
 * **Note:** This method is loosely based on
 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
 * @example
 *
 * _.isLength(3);
 * // => true
 *
 * _.isLength(Number.MIN_VALUE);
 * // => false
 *
 * _.isLength(Infinity);
 * // => false
 *
 * _.isLength('3');
 * // => false
 */
function isLength(value) {
  return typeof value == 'number' &&
    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}

module.exports = isLength;


/***/ }),
/* 377 */
/***/ (function(module, exports) {

/**
 * Checks if `value` is the
 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(_.noop);
 * // => true
 *
 * _.isObject(null);
 * // => false
 */
function isObject(value) {
  var type = typeof value;
  return value != null && (type == 'object' || type == 'function');
}

module.exports = isObject;


/***/ }),
/* 378 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = LRUCache

// This will be a proper iterable 'Map' in engines that support it,
// or a fakey-fake PseudoMap in older versions.
var Map = __webpack_require__(995)
var util = __webpack_require__(2)

// A linked list to keep track of recently-used-ness
var Yallist = __webpack_require__(951)

// use symbols if possible, otherwise just _props
var hasSymbol = typeof Symbol === 'function'
var makeSymbol
if (hasSymbol) {
  makeSymbol = function (key) {
    return Symbol(key)
  }
} else {
  makeSymbol = function (key) {
    return '_' + key
  }
}

var MAX = makeSymbol('max')
var LENGTH = makeSymbol('length')
var LENGTH_CALCULATOR = makeSymbol('lengthCalculator')
var ALLOW_STALE = makeSymbol('allowStale')
var MAX_AGE = makeSymbol('maxAge')
var DISPOSE = makeSymbol('dispose')
var NO_DISPOSE_ON_SET = makeSymbol('noDisposeOnSet')
var LRU_LIST = makeSymbol('lruList')
var CACHE = makeSymbol('cache')

function naiveLength () { return 1 }

// lruList is a yallist where the head is the youngest
// item, and the tail is the oldest.  the list contains the Hit
// objects as the entries.
// Each Hit object has a reference to its Yallist.Node.  This
// never changes.
//
// cache is a Map (or PseudoMap) that matches the keys to
// the Yallist.Node object.
function LRUCache (options) {
  if (!(this instanceof LRUCache)) {
    return new LRUCache(options)
  }

  if (typeof options === 'number') {
    options = { max: options }
  }

  if (!options) {
    options = {}
  }

  var max = this[MAX] = options.max
  // Kind of weird to have a default max of Infinity, but oh well.
  if (!max ||
      !(typeof max === 'number') ||
      max <= 0) {
    this[MAX] = Infinity
  }

  var lc = options.length || naiveLength
  if (typeof lc !== 'function') {
    lc = naiveLength
  }
  this[LENGTH_CALCULATOR] = lc

  this[ALLOW_STALE] = options.stale || false
  this[MAX_AGE] = options.maxAge || 0
  this[DISPOSE] = options.dispose
  this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
  this.reset()
}

// resize the cache when the max changes.
Object.defineProperty(LRUCache.prototype, 'max', {
  set: function (mL) {
    if (!mL || !(typeof mL === 'number') || mL <= 0) {
      mL = Infinity
    }
    this[MAX] = mL
    trim(this)
  },
  get: function () {
    return this[MAX]
  },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'allowStale', {
  set: function (allowStale) {
    this[ALLOW_STALE] = !!allowStale
  },
  get: function () {
    return this[ALLOW_STALE]
  },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'maxAge', {
  set: function (mA) {
    if (!mA || !(typeof mA === 'number') || mA < 0) {
      mA = 0
    }
    this[MAX_AGE] = mA
    trim(this)
  },
  get: function () {
    return this[MAX_AGE]
  },
  enumerable: true
})

// resize the cache when the lengthCalculator changes.
Object.defineProperty(LRUCache.prototype, 'lengthCalculator', {
  set: function (lC) {
    if (typeof lC !== 'function') {
      lC = naiveLength
    }
    if (lC !== this[LENGTH_CALCULATOR]) {
      this[LENGTH_CALCULATOR] = lC
      this[LENGTH] = 0
      this[LRU_LIST].forEach(function (hit) {
        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
        this[LENGTH] += hit.length
      }, this)
    }
    trim(this)
  },
  get: function () { return this[LENGTH_CALCULATOR] },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'length', {
  get: function () { return this[LENGTH] },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'itemCount', {
  get: function () { return this[LRU_LIST].length },
  enumerable: true
})

LRUCache.prototype.rforEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this[LRU_LIST].tail; walker !== null;) {
    var prev = walker.prev
    forEachStep(this, fn, walker, thisp)
    walker = prev
  }
}

function forEachStep (self, fn, node, thisp) {
  var hit = node.value
  if (isStale(self, hit)) {
    del(self, node)
    if (!self[ALLOW_STALE]) {
      hit = undefined
    }
  }
  if (hit) {
    fn.call(thisp, hit.value, hit.key, self)
  }
}

LRUCache.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this[LRU_LIST].head; walker !== null;) {
    var next = walker.next
    forEachStep(this, fn, walker, thisp)
    walker = next
  }
}

LRUCache.prototype.keys = function () {
  return this[LRU_LIST].toArray().map(function (k) {
    return k.key
  }, this)
}

LRUCache.prototype.values = function () {
  return this[LRU_LIST].toArray().map(function (k) {
    return k.value
  }, this)
}

LRUCache.prototype.reset = function () {
  if (this[DISPOSE] &&
      this[LRU_LIST] &&
      this[LRU_LIST].length) {
    this[LRU_LIST].forEach(function (hit) {
      this[DISPOSE](hit.key, hit.value)
    }, this)
  }

  this[CACHE] = new Map() // hash of items by key
  this[LRU_LIST] = new Yallist() // list of items in order of use recency
  this[LENGTH] = 0 // length of items in the list
}

LRUCache.prototype.dump = function () {
  return this[LRU_LIST].map(function (hit) {
    if (!isStale(this, hit)) {
      return {
        k: hit.key,
        v: hit.value,
        e: hit.now + (hit.maxAge || 0)
      }
    }
  }, this).toArray().filter(function (h) {
    return h
  })
}

LRUCache.prototype.dumpLru = function () {
  return this[LRU_LIST]
}

LRUCache.prototype.inspect = function (n, opts) {
  var str = 'LRUCache {'
  var extras = false

  var as = this[ALLOW_STALE]
  if (as) {
    str += '\n  allowStale: true'
    extras = true
  }

  var max = this[MAX]
  if (max && max !== Infinity) {
    if (extras) {
      str += ','
    }
    str += '\n  max: ' + util.inspect(max, opts)
    extras = true
  }

  var maxAge = this[MAX_AGE]
  if (maxAge) {
    if (extras) {
      str += ','
    }
    str += '\n  maxAge: ' + util.inspect(maxAge, opts)
    extras = true
  }

  var lc = this[LENGTH_CALCULATOR]
  if (lc && lc !== naiveLength) {
    if (extras) {
      str += ','
    }
    str += '\n  length: ' + util.inspect(this[LENGTH], opts)
    extras = true
  }

  var didFirst = false
  this[LRU_LIST].forEach(function (item) {
    if (didFirst) {
      str += ',\n  '
    } else {
      if (extras) {
        str += ',\n'
      }
      didFirst = true
      str += '\n  '
    }
    var key = util.inspect(item.key).split('\n').join('\n  ')
    var val = { value: item.value }
    if (item.maxAge !== maxAge) {
      val.maxAge = item.maxAge
    }
    if (lc !== naiveLength) {
      val.length = item.length
    }
    if (isStale(this, item)) {
      val.stale = true
    }

    val = util.inspect(val, opts).split('\n').join('\n  ')
    str += key + ' => ' + val
  })

  if (didFirst || extras) {
    str += '\n'
  }
  str += '}'

  return str
}

LRUCache.prototype.set = function (key, value, maxAge) {
  maxAge = maxAge || this[MAX_AGE]

  var now = maxAge ? Date.now() : 0
  var len = this[LENGTH_CALCULATOR](value, key)

  if (this[CACHE].has(key)) {
    if (len > this[MAX]) {
      del(this, this[CACHE].get(key))
      return false
    }

    var node = this[CACHE].get(key)
    var item = node.value

    // dispose of the old one before overwriting
    // split out into 2 ifs for better coverage tracking
    if (this[DISPOSE]) {
      if (!this[NO_DISPOSE_ON_SET]) {
        this[DISPOSE](key, item.value)
      }
    }

    item.now = now
    item.maxAge = maxAge
    item.value = value
    this[LENGTH] += len - item.length
    item.length = len
    this.get(key)
    trim(this)
    return true
  }

  var hit = new Entry(key, value, len, now, maxAge)

  // oversized objects fall out of cache automatically.
  if (hit.length > this[MAX]) {
    if (this[DISPOSE]) {
      this[DISPOSE](key, value)
    }
    return false
  }

  this[LENGTH] += hit.length
  this[LRU_LIST].unshift(hit)
  this[CACHE].set(key, this[LRU_LIST].head)
  trim(this)
  return true
}

LRUCache.prototype.has = function (key) {
  if (!this[CACHE].has(key)) return false
  var hit = this[CACHE].get(key).value
  if (isStale(this, hit)) {
    return false
  }
  return true
}

LRUCache.prototype.get = function (key) {
  return get(this, key, true)
}

LRUCache.prototype.peek = function (key) {
  return get(this, key, false)
}

LRUCache.prototype.pop = function () {
  var node = this[LRU_LIST].tail
  if (!node) return null
  del(this, node)
  return node.value
}

LRUCache.prototype.del = function (key) {
  del(this, this[CACHE].get(key))
}

LRUCache.prototype.load = function (arr) {
  // reset the cache
  this.reset()

  var now = Date.now()
  // A previous serialized cache has the most recent items first
  for (var l = arr.length - 1; l >= 0; l--) {
    var hit = arr[l]
    var expiresAt = hit.e || 0
    if (expiresAt === 0) {
      // the item was created without expiration in a non aged cache
      this.set(hit.k, hit.v)
    } else {
      var maxAge = expiresAt - now
      // dont add already expired items
      if (maxAge > 0) {
        this.set(hit.k, hit.v, maxAge)
      }
    }
  }
}

LRUCache.prototype.prune = function () {
  var self = this
  this[CACHE].forEach(function (value, key) {
    get(self, key, false)
  })
}

function get (self, key, doUse) {
  var node = self[CACHE].get(key)
  if (node) {
    var hit = node.value
    if (isStale(self, hit)) {
      del(self, node)
      if (!self[ALLOW_STALE]) hit = undefined
    } else {
      if (doUse) {
        self[LRU_LIST].unshiftNode(node)
      }
    }
    if (hit) hit = hit.value
  }
  return hit
}

function isStale (self, hit) {
  if (!hit || (!hit.maxAge && !self[MAX_AGE])) {
    return false
  }
  var stale = false
  var diff = Date.now() - hit.now
  if (hit.maxAge) {
    stale = diff > hit.maxAge
  } else {
    stale = self[MAX_AGE] && (diff > self[MAX_AGE])
  }
  return stale
}

function trim (self) {
  if (self[LENGTH] > self[MAX]) {
    for (var walker = self[LRU_LIST].tail;
         self[LENGTH] > self[MAX] && walker !== null;) {
      // We know that we're about to delete this one, and also
      // what the next least recently used key will be, so just
      // go ahead and set it now.
      var prev = walker.prev
      del(self, walker)
      walker = prev
    }
  }
}

function del (self, node) {
  if (node) {
    var hit = node.value
    if (self[DISPOSE]) {
      self[DISPOSE](hit.key, hit.value)
    }
    self[LENGTH] -= hit.length
    self[CACHE].delete(hit.key)
    self[LRU_LIST].removeNode(node)
  }
}

// classy, since V8 prefers predictable objects.
function Entry (key, value, length, now, maxAge) {
  this.key = key
  this.value = value
  this.length = length
  this.now = now
  this.maxAge = maxAge || 0
}


/***/ }),
/* 379 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * mime-types
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var db = __webpack_require__(954)
var extname = __webpack_require__(0).extname

/**
 * Module variables.
 * @private
 */

var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
var TEXT_TYPE_REGEXP = /^text\//i

/**
 * Module exports.
 * @public
 */

exports.charset = charset
exports.charsets = { lookup: charset }
exports.contentType = contentType
exports.extension = extension
exports.extensions = Object.create(null)
exports.lookup = lookup
exports.types = Object.create(null)

// Populate the extensions/types maps
populateMaps(exports.extensions, exports.types)

/**
 * Get the default charset for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function charset (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)
  var mime = match && db[match[1].toLowerCase()]

  if (mime && mime.charset) {
    return mime.charset
  }

  // default text/* to utf-8
  if (match && TEXT_TYPE_REGEXP.test(match[1])) {
    return 'UTF-8'
  }

  return false
}

/**
 * Create a full Content-Type header given a MIME type or extension.
 *
 * @param {string} str
 * @return {boolean|string}
 */

function contentType (str) {
  // TODO: should this even be in this module?
  if (!str || typeof str !== 'string') {
    return false
  }

  var mime = str.indexOf('/') === -1
    ? exports.lookup(str)
    : str

  if (!mime) {
    return false
  }

  // TODO: use content-type or other module
  if (mime.indexOf('charset') === -1) {
    var charset = exports.charset(mime)
    if (charset) mime += '; charset=' + charset.toLowerCase()
  }

  return mime
}

/**
 * Get the default extension for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function extension (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)

  // get extensions
  var exts = match && exports.extensions[match[1].toLowerCase()]

  if (!exts || !exts.length) {
    return false
  }

  return exts[0]
}

/**
 * Lookup the MIME type for a file path/extension.
 *
 * @param {string} path
 * @return {boolean|string}
 */

function lookup (path) {
  if (!path || typeof path !== 'string') {
    return false
  }

  // get the extension ("ext" or ".ext" or full path)
  var extension = extname('x.' + path)
    .toLowerCase()
    .substr(1)

  if (!extension) {
    return false
  }

  return exports.types[extension] || false
}

/**
 * Populate the extensions and types maps.
 * @private
 */

function populateMaps (extensions, types) {
  // source preference (least -> most)
  var preference = ['nginx', 'apache', undefined, 'iana']

  Object.keys(db).forEach(function forEachMimeType (type) {
    var mime = db[type]
    var exts = mime.extensions

    if (!exts || !exts.length) {
      return
    }

    // mime -> extensions
    extensions[type] = exts

    // extension -> mime
    for (var i = 0; i < exts.length; i++) {
      var extension = exts[i]

      if (types[extension]) {
        var from = preference.indexOf(db[types[extension]].source)
        var to = preference.indexOf(mime.source)

        if (types[extension] !== 'application/octet-stream' &&
          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
          // skip the remapping
          continue
        }
      }

      // set the extension -> mime
      types[extension] = type
    }
  })
}


/***/ }),
/* 380 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/**
 * @module milliseconds
 */
/**
 * Helpers.
 */

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;

/**
 * Parse or format the given `val`.
 *
 * @memberof Mocha
 * @public
 * @api public
 * @param {string|number} val
 * @return {string|number}
 */
module.exports = function(val) {
  if (typeof val === 'string') {
    return parse(val);
  }
  return format(val);
};

/**
 * Parse the given `str` and return milliseconds.
 *
 * @api private
 * @param {string} str
 * @return {number}
 */
function parse(str) {
  var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(
    str
  );
  if (!match) {
    return;
  }
  var n = parseFloat(match[1]);
  var type = (match[2] || 'ms').toLowerCase();
  switch (type) {
    case 'years':
    case 'year':
    case 'y':
      return n * y;
    case 'days':
    case 'day':
    case 'd':
      return n * d;
    case 'hours':
    case 'hour':
    case 'h':
      return n * h;
    case 'minutes':
    case 'minute':
    case 'm':
      return n * m;
    case 'seconds':
    case 'second':
    case 's':
      return n * s;
    case 'ms':
      return n;
    default:
    // No default case
  }
}

/**
 * Format for `ms`.
 *
 * @api private
 * @param {number} ms
 * @return {string}
 */
function format(ms) {
  if (ms >= d) {
    return Math.round(ms / d) + 'd';
  }
  if (ms >= h) {
    return Math.round(ms / h) + 'h';
  }
  if (ms >= m) {
    return Math.round(ms / m) + 'm';
  }
  if (ms >= s) {
    return Math.round(ms / s) + 's';
  }
  return ms + 'ms';
}


/***/ }),
/* 381 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var EventEmitter = __webpack_require__(18).EventEmitter;
var Pending = __webpack_require__(957);
var debug = __webpack_require__(229)('mocha:runnable');
var milliseconds = __webpack_require__(380);
var utils = __webpack_require__(165);

/**
 * Save timer references to avoid Sinon interfering (see GH-237).
 */

/* eslint-disable no-unused-vars, no-native-reassign */
var Date = global.Date;
var setTimeout = global.setTimeout;
var setInterval = global.setInterval;
var clearTimeout = global.clearTimeout;
var clearInterval = global.clearInterval;
/* eslint-enable no-unused-vars, no-native-reassign */

var toString = Object.prototype.toString;

module.exports = Runnable;

/**
 * Initialize a new `Runnable` with the given `title` and callback `fn`.  Derived from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)
 *
 * @class
 * @extends EventEmitter
 * @param {String} title
 * @param {Function} fn
 */
function Runnable(title, fn) {
  this.title = title;
  this.fn = fn;
  this.body = (fn || '').toString();
  this.async = fn && fn.length;
  this.sync = !this.async;
  this._timeout = 2000;
  this._slow = 75;
  this._enableTimeouts = true;
  this.timedOut = false;
  this._retries = -1;
  this._currentRetry = 0;
  this.pending = false;
}

/**
 * Inherit from `EventEmitter.prototype`.
 */
utils.inherits(Runnable, EventEmitter);

/**
 * Set & get timeout `ms`.
 *
 * @api private
 * @param {number|string} ms
 * @return {Runnable|number} ms or Runnable instance.
 */
Runnable.prototype.timeout = function(ms) {
  if (!arguments.length) {
    return this._timeout;
  }
  // see #1652 for reasoning
  if (ms === 0 || ms > Math.pow(2, 31)) {
    this._enableTimeouts = false;
  }
  if (typeof ms === 'string') {
    ms = milliseconds(ms);
  }
  debug('timeout %d', ms);
  this._timeout = ms;
  if (this.timer) {
    this.resetTimeout();
  }
  return this;
};

/**
 * Set or get slow `ms`.
 *
 * @api private
 * @param {number|string} ms
 * @return {Runnable|number} ms or Runnable instance.
 */
Runnable.prototype.slow = function(ms) {
  if (!arguments.length || typeof ms === 'undefined') {
    return this._slow;
  }
  if (typeof ms === 'string') {
    ms = milliseconds(ms);
  }
  debug('slow %d', ms);
  this._slow = ms;
  return this;
};

/**
 * Set and get whether timeout is `enabled`.
 *
 * @api private
 * @param {boolean} enabled
 * @return {Runnable|boolean} enabled or Runnable instance.
 */
Runnable.prototype.enableTimeouts = function(enabled) {
  if (!arguments.length) {
    return this._enableTimeouts;
  }
  debug('enableTimeouts %s', enabled);
  this._enableTimeouts = enabled;
  return this;
};

/**
 * Halt and mark as pending.
 *
 * @memberof Mocha.Runnable
 * @public
 * @api public
 */
Runnable.prototype.skip = function() {
  throw new Pending('sync skip');
};

/**
 * Check if this runnable or its parent suite is marked as pending.
 *
 * @api private
 */
Runnable.prototype.isPending = function() {
  return this.pending || (this.parent && this.parent.isPending());
};

/**
 * Return `true` if this Runnable has failed.
 * @return {boolean}
 * @private
 */
Runnable.prototype.isFailed = function() {
  return !this.isPending() && this.state === 'failed';
};

/**
 * Return `true` if this Runnable has passed.
 * @return {boolean}
 * @private
 */
Runnable.prototype.isPassed = function() {
  return !this.isPending() && this.state === 'passed';
};

/**
 * Set or get number of retries.
 *
 * @api private
 */
Runnable.prototype.retries = function(n) {
  if (!arguments.length) {
    return this._retries;
  }
  this._retries = n;
};

/**
 * Set or get current retry
 *
 * @api private
 */
Runnable.prototype.currentRetry = function(n) {
  if (!arguments.length) {
    return this._currentRetry;
  }
  this._currentRetry = n;
};

/**
 * Return the full title generated by recursively concatenating the parent's
 * full title.
 *
 * @memberof Mocha.Runnable
 * @public
 * @api public
 * @return {string}
 */
Runnable.prototype.fullTitle = function() {
  return this.titlePath().join(' ');
};

/**
 * Return the title path generated by concatenating the parent's title path with the title.
 *
 * @memberof Mocha.Runnable
 * @public
 * @api public
 * @return {string}
 */
Runnable.prototype.titlePath = function() {
  return this.parent.titlePath().concat([this.title]);
};

/**
 * Clear the timeout.
 *
 * @api private
 */
Runnable.prototype.clearTimeout = function() {
  clearTimeout(this.timer);
};

/**
 * Inspect the runnable void of private properties.
 *
 * @api private
 * @return {string}
 */
Runnable.prototype.inspect = function() {
  return JSON.stringify(
    this,
    function(key, val) {
      if (key[0] === '_') {
        return;
      }
      if (key === 'parent') {
        return '#<Suite>';
      }
      if (key === 'ctx') {
        return '#<Context>';
      }
      return val;
    },
    2
  );
};

/**
 * Reset the timeout.
 *
 * @api private
 */
Runnable.prototype.resetTimeout = function() {
  var self = this;
  var ms = this.timeout() || 1e9;

  if (!this._enableTimeouts) {
    return;
  }
  this.clearTimeout();
  this.timer = setTimeout(function() {
    if (!self._enableTimeouts) {
      return;
    }
    self.callback(self._timeoutError(ms));
    self.timedOut = true;
  }, ms);
};

/**
 * Set or get a list of whitelisted globals for this test run.
 *
 * @api private
 * @param {string[]} globals
 */
Runnable.prototype.globals = function(globals) {
  if (!arguments.length) {
    return this._allowedGlobals;
  }
  this._allowedGlobals = globals;
};

/**
 * Run the test and invoke `fn(err)`.
 *
 * @param {Function} fn
 * @api private
 */
Runnable.prototype.run = function(fn) {
  var self = this;
  var start = new Date();
  var ctx = this.ctx;
  var finished;
  var emitted;

  // Sometimes the ctx exists, but it is not runnable
  if (ctx && ctx.runnable) {
    ctx.runnable(this);
  }

  // called multiple times
  function multiple(err) {
    if (emitted) {
      return;
    }
    emitted = true;
    var msg = 'done() called multiple times';
    if (err && err.message) {
      err.message += " (and Mocha's " + msg + ')';
      self.emit('error', err);
    } else {
      self.emit('error', new Error(msg));
    }
  }

  // finished
  function done(err) {
    var ms = self.timeout();
    if (self.timedOut) {
      return;
    }

    if (finished) {
      return multiple(err);
    }

    self.clearTimeout();
    self.duration = new Date() - start;
    finished = true;
    if (!err && self.duration > ms && self._enableTimeouts) {
      err = self._timeoutError(ms);
    }
    fn(err);
  }

  // for .resetTimeout()
  this.callback = done;

  // explicit async with `done` argument
  if (this.async) {
    this.resetTimeout();

    // allows skip() to be used in an explicit async context
    this.skip = function asyncSkip() {
      done(new Pending('async skip call'));
      // halt execution.  the Runnable will be marked pending
      // by the previous call, and the uncaught handler will ignore
      // the failure.
      throw new Pending('async skip; aborting execution');
    };

    if (this.allowUncaught) {
      return callFnAsync(this.fn);
    }
    try {
      callFnAsync(this.fn);
    } catch (err) {
      emitted = true;
      done(utils.getError(err));
    }
    return;
  }

  if (this.allowUncaught) {
    if (this.isPending()) {
      done();
    } else {
      callFn(this.fn);
    }
    return;
  }

  // sync or promise-returning
  try {
    if (this.isPending()) {
      done();
    } else {
      callFn(this.fn);
    }
  } catch (err) {
    emitted = true;
    done(utils.getError(err));
  }

  function callFn(fn) {
    var result = fn.call(ctx);
    if (result && typeof result.then === 'function') {
      self.resetTimeout();
      result.then(
        function() {
          done();
          // Return null so libraries like bluebird do not warn about
          // subsequently constructed Promises.
          return null;
        },
        function(reason) {
          done(reason || new Error('Promise rejected with no or falsy reason'));
        }
      );
    } else {
      if (self.asyncOnly) {
        return done(
          new Error(
            '--async-only option in use without declaring `done()` or returning a promise'
          )
        );
      }

      done();
    }
  }

  function callFnAsync(fn) {
    var result = fn.call(ctx, function(err) {
      if (err instanceof Error || toString.call(err) === '[object Error]') {
        return done(err);
      }
      if (err) {
        if (Object.prototype.toString.call(err) === '[object Object]') {
          return done(
            new Error('done() invoked with non-Error: ' + JSON.stringify(err))
          );
        }
        return done(new Error('done() invoked with non-Error: ' + err));
      }
      if (result && utils.isPromise(result)) {
        return done(
          new Error(
            'Resolution method is overspecified. Specify a callback *or* return a Promise; not both.'
          )
        );
      }

      done();
    });
  }
};

/**
 * Instantiates a "timeout" error
 *
 * @param {number} ms - Timeout (in milliseconds)
 * @returns {Error} a "timeout" error
 * @private
 */
Runnable.prototype._timeoutError = function(ms) {
  var msg =
    'Timeout of ' +
    ms +
    'ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.';
  if (this.file) {
    msg += ' (' + this.file + ')';
  }
  return new Error(msg);
};


/***/ }),
/* 382 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 383 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = normalize

var fixer = __webpack_require__(970)
normalize.fixer = fixer

var makeWarning = __webpack_require__(971)

var fieldsToFix = ['name','version','description','repository','modules','scripts'
                  ,'files','bin','man','bugs','keywords','readme','homepage','license']
var otherThingsToFix = ['dependencies','people', 'typos']

var thingsToFix = fieldsToFix.map(function(fieldName) {
  return ucFirst(fieldName) + "Field"
})
// two ways to do this in CoffeeScript on only one line, sub-70 chars:
// thingsToFix = fieldsToFix.map (name) -> ucFirst(name) + "Field"
// thingsToFix = (ucFirst(name) + "Field" for name in fieldsToFix)
thingsToFix = thingsToFix.concat(otherThingsToFix)

function normalize (data, warn, strict) {
  if(warn === true) warn = null, strict = true
  if(!strict) strict = false
  if(!warn || data.private) warn = function(msg) { /* noop */ }

  if (data.scripts &&
      data.scripts.install === "node-gyp rebuild" &&
      !data.scripts.preinstall) {
    data.gypfile = true
  }
  fixer.warn = function() { warn(makeWarning.apply(null, arguments)) }
  thingsToFix.forEach(function(thingName) {
    fixer["fix" + ucFirst(thingName)](data, strict)
  })
  data._id = data.name + "@" + data.version
}

function ucFirst (string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}


/***/ }),
/* 384 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * normalize-path <https://github.com/jonschlinkert/normalize-path>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */

var removeTrailingSeparator = __webpack_require__(1029);

module.exports = function normalizePath(str, stripTrailing) {
  if (typeof str !== 'string') {
    throw new TypeError('expected a string');
  }
  str = str.replace(/[\\\/]+/g, '/');
  if (stripTrailing !== false) {
    str = removeTrailingSeparator(str);
  }
  return str;
};


/***/ }),
/* 385 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/


/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;

function toObject(val) {
	if (val === null || val === undefined) {
		throw new TypeError('Object.assign cannot be called with null or undefined');
	}

	return Object(val);
}

function shouldUseNative() {
	try {
		if (!Object.assign) {
			return false;
		}

		// Detect buggy property enumeration order in older V8 versions.

		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
		test1[5] = 'de';
		if (Object.getOwnPropertyNames(test1)[0] === '5') {
			return false;
		}

		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
		var test2 = {};
		for (var i = 0; i < 10; i++) {
			test2['_' + String.fromCharCode(i)] = i;
		}
		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
			return test2[n];
		});
		if (order2.join('') !== '0123456789') {
			return false;
		}

		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
		var test3 = {};
		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
			test3[letter] = letter;
		});
		if (Object.keys(Object.assign({}, test3)).join('') !==
				'abcdefghijklmnopqrst') {
			return false;
		}

		return true;
	} catch (err) {
		// We don't expect any of the above to throw, but better to be safe.
		return false;
	}
}

module.exports = shouldUseNative() ? Object.assign : function (target, source) {
	var from;
	var to = toObject(target);
	var symbols;

	for (var s = 1; s < arguments.length; s++) {
		from = Object(arguments[s]);

		for (var key in from) {
			if (hasOwnProperty.call(from, key)) {
				to[key] = from[key];
			}
		}

		if (getOwnPropertySymbols) {
			symbols = getOwnPropertySymbols(from);
			for (var i = 0; i < symbols.length; i++) {
				if (propIsEnumerable.call(from, symbols[i])) {
					to[symbols[i]] = from[symbols[i]];
				}
			}
		}
	}

	return to;
};


/***/ }),
/* 386 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * on-finished
 * Copyright(c) 2013 Jonathan Ong
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = onFinished
module.exports.isFinished = isFinished

/**
 * Module dependencies.
 * @private
 */

var first = __webpack_require__(724)

/**
 * Variables.
 * @private
 */

/* istanbul ignore next */
var defer = typeof setImmediate === 'function'
  ? setImmediate
  : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }

/**
 * Invoke callback when the response has finished, useful for
 * cleaning up resources afterwards.
 *
 * @param {object} msg
 * @param {function} listener
 * @return {object}
 * @public
 */

function onFinished(msg, listener) {
  if (isFinished(msg) !== false) {
    defer(listener, null, msg)
    return msg
  }

  // attach the listener to the message
  attachListener(msg, listener)

  return msg
}

/**
 * Determine if message is already finished.
 *
 * @param {object} msg
 * @return {boolean}
 * @public
 */

function isFinished(msg) {
  var socket = msg.socket

  if (typeof msg.finished === 'boolean') {
    // OutgoingMessage
    return Boolean(msg.finished || (socket && !socket.writable))
  }

  if (typeof msg.complete === 'boolean') {
    // IncomingMessage
    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))
  }

  // don't know
  return undefined
}

/**
 * Attach a finished listener to the message.
 *
 * @param {object} msg
 * @param {function} callback
 * @private
 */

function attachFinishedListener(msg, callback) {
  var eeMsg
  var eeSocket
  var finished = false

  function onFinish(error) {
    eeMsg.cancel()
    eeSocket.cancel()

    finished = true
    callback(error)
  }

  // finished on first message event
  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)

  function onSocket(socket) {
    // remove listener
    msg.removeListener('socket', onSocket)

    if (finished) return
    if (eeMsg !== eeSocket) return

    // finished on first socket event
    eeSocket = first([[socket, 'error', 'close']], onFinish)
  }

  if (msg.socket) {
    // socket already assigned
    onSocket(msg.socket)
    return
  }

  // wait for socket to be assigned
  msg.on('socket', onSocket)

  if (msg.socket === undefined) {
    // node.js 0.8 patch
    patchAssignSocket(msg, onSocket)
  }
}

/**
 * Attach the listener to the message.
 *
 * @param {object} msg
 * @return {function}
 * @private
 */

function attachListener(msg, listener) {
  var attached = msg.__onFinished

  // create a private single listener with queue
  if (!attached || !attached.queue) {
    attached = msg.__onFinished = createListener(msg)
    attachFinishedListener(msg, attached)
  }

  attached.queue.push(listener)
}

/**
 * Create listener on message.
 *
 * @param {object} msg
 * @return {function}
 * @private
 */

function createListener(msg) {
  function listener(err) {
    if (msg.__onFinished === listener) msg.__onFinished = null
    if (!listener.queue) return

    var queue = listener.queue
    listener.queue = null

    for (var i = 0; i < queue.length; i++) {
      queue[i](err, msg)
    }
  }

  listener.queue = []

  return listener
}

/**
 * Patch ServerResponse.prototype.assignSocket for node.js 0.8.
 *
 * @param {ServerResponse} res
 * @param {function} callback
 * @private
 */

function patchAssignSocket(res, callback) {
  var assignSocket = res.assignSocket

  if (typeof assignSocket !== 'function') return

  // res.on('socket', callback) is broken in 0.8
  res.assignSocket = function _assignSocket(socket) {
    assignSocket.call(this, socket)
    callback(socket)
  }
}


/***/ }),
/* 387 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isWindows = process.platform === 'win32';
var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/;

// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43
module.exports = function () {
	var path;

	if (isWindows) {
		path = process.env.TEMP ||
			process.env.TMP ||
			(process.env.SystemRoot || process.env.windir) + '\\temp';
	} else {
		path = process.env.TMPDIR ||
			process.env.TMP ||
			process.env.TEMP ||
			'/tmp';
	}

	if (trailingSlashRe.test(path)) {
		path = path.slice(0, -1);
	}

	return path;
};


/***/ }),
/* 388 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = typeof Promise === 'function' ? Promise : __webpack_require__(993);


/***/ }),
/* 389 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var replace = String.prototype.replace;
var percentTwenties = /%20/g;

module.exports = {
    'default': 'RFC3986',
    formatters: {
        RFC1738: function (value) {
            return replace.call(value, percentTwenties, '+');
        },
        RFC3986: function (value) {
            return value;
        }
    },
    RFC1738: 'RFC1738',
    RFC3986: 'RFC3986'
};


/***/ }),
/* 390 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var stringify = __webpack_require__(998);
var parse = __webpack_require__(997);
var formats = __webpack_require__(389);

module.exports = {
    formats: formats,
    parse: parse,
    stringify: stringify
};


/***/ }),
/* 391 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var has = Object.prototype.hasOwnProperty;

var hexTable = (function () {
    var array = [];
    for (var i = 0; i < 256; ++i) {
        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());
    }

    return array;
}());

var compactQueue = function compactQueue(queue) {
    var obj;

    while (queue.length) {
        var item = queue.pop();
        obj = item.obj[item.prop];

        if (Array.isArray(obj)) {
            var compacted = [];

            for (var j = 0; j < obj.length; ++j) {
                if (typeof obj[j] !== 'undefined') {
                    compacted.push(obj[j]);
                }
            }

            item.obj[item.prop] = compacted;
        }
    }

    return obj;
};

var arrayToObject = function arrayToObject(source, options) {
    var obj = options && options.plainObjects ? Object.create(null) : {};
    for (var i = 0; i < source.length; ++i) {
        if (typeof source[i] !== 'undefined') {
            obj[i] = source[i];
        }
    }

    return obj;
};

var merge = function merge(target, source, options) {
    if (!source) {
        return target;
    }

    if (typeof source !== 'object') {
        if (Array.isArray(target)) {
            target.push(source);
        } else if (typeof target === 'object') {
            if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) {
                target[source] = true;
            }
        } else {
            return [target, source];
        }

        return target;
    }

    if (typeof target !== 'object') {
        return [target].concat(source);
    }

    var mergeTarget = target;
    if (Array.isArray(target) && !Array.isArray(source)) {
        mergeTarget = arrayToObject(target, options);
    }

    if (Array.isArray(target) && Array.isArray(source)) {
        source.forEach(function (item, i) {
            if (has.call(target, i)) {
                if (target[i] && typeof target[i] === 'object') {
                    target[i] = merge(target[i], item, options);
                } else {
                    target.push(item);
                }
            } else {
                target[i] = item;
            }
        });
        return target;
    }

    return Object.keys(source).reduce(function (acc, key) {
        var value = source[key];

        if (has.call(acc, key)) {
            acc[key] = merge(acc[key], value, options);
        } else {
            acc[key] = value;
        }
        return acc;
    }, mergeTarget);
};

var assign = function assignSingleSource(target, source) {
    return Object.keys(source).reduce(function (acc, key) {
        acc[key] = source[key];
        return acc;
    }, target);
};

var decode = function (str) {
    try {
        return decodeURIComponent(str.replace(/\+/g, ' '));
    } catch (e) {
        return str;
    }
};

var encode = function encode(str) {
    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
    // It has been adapted here for stricter adherence to RFC 3986
    if (str.length === 0) {
        return str;
    }

    var string = typeof str === 'string' ? str : String(str);

    var out = '';
    for (var i = 0; i < string.length; ++i) {
        var c = string.charCodeAt(i);

        if (
            c === 0x2D // -
            || c === 0x2E // .
            || c === 0x5F // _
            || c === 0x7E // ~
            || (c >= 0x30 && c <= 0x39) // 0-9
            || (c >= 0x41 && c <= 0x5A) // a-z
            || (c >= 0x61 && c <= 0x7A) // A-Z
        ) {
            out += string.charAt(i);
            continue;
        }

        if (c < 0x80) {
            out = out + hexTable[c];
            continue;
        }

        if (c < 0x800) {
            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
            continue;
        }

        if (c < 0xD800 || c >= 0xE000) {
            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
            continue;
        }

        i += 1;
        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
        out += hexTable[0xF0 | (c >> 18)]
            + hexTable[0x80 | ((c >> 12) & 0x3F)]
            + hexTable[0x80 | ((c >> 6) & 0x3F)]
            + hexTable[0x80 | (c & 0x3F)];
    }

    return out;
};

var compact = function compact(value) {
    var queue = [{ obj: { o: value }, prop: 'o' }];
    var refs = [];

    for (var i = 0; i < queue.length; ++i) {
        var item = queue[i];
        var obj = item.obj[item.prop];

        var keys = Object.keys(obj);
        for (var j = 0; j < keys.length; ++j) {
            var key = keys[j];
            var val = obj[key];
            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {
                queue.push({ obj: obj, prop: key });
                refs.push(val);
            }
        }
    }

    return compactQueue(queue);
};

var isRegExp = function isRegExp(obj) {
    return Object.prototype.toString.call(obj) === '[object RegExp]';
};

var isBuffer = function isBuffer(obj) {
    if (obj === null || typeof obj === 'undefined') {
        return false;
    }

    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
};

module.exports = {
    arrayToObject: arrayToObject,
    assign: assign,
    compact: compact,
    decode: decode,
    encode: encode,
    isBuffer: isBuffer,
    isRegExp: isRegExp,
    merge: merge
};


/***/ }),
/* 392 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



/*<replacement>*/

var pna = __webpack_require__(167);
/*</replacement>*/

module.exports = Readable;

/*<replacement>*/
var isArray = __webpack_require__(367);
/*</replacement>*/

/*<replacement>*/
var Duplex;
/*</replacement>*/

Readable.ReadableState = ReadableState;

/*<replacement>*/
var EE = __webpack_require__(18).EventEmitter;

var EElistenerCount = function (emitter, type) {
  return emitter.listeners(type).length;
};
/*</replacement>*/

/*<replacement>*/
var Stream = __webpack_require__(396);
/*</replacement>*/

/*<replacement>*/

var Buffer = __webpack_require__(55).Buffer;
var OurUint8Array = global.Uint8Array || function () {};
function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}
function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}

/*</replacement>*/

/*<replacement>*/
var util = __webpack_require__(90);
util.inherits = __webpack_require__(54);
/*</replacement>*/

/*<replacement>*/
var debugUtil = __webpack_require__(2);
var debug = void 0;
if (debugUtil && debugUtil.debuglog) {
  debug = debugUtil.debuglog('stream');
} else {
  debug = function () {};
}
/*</replacement>*/

var BufferList = __webpack_require__(1004);
var destroyImpl = __webpack_require__(395);
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 || __webpack_require__(99);

  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 = __webpack_require__(397).StringDecoder;
    this.decoder = new StringDecoder(options.encoding);
    this.encoding = options.encoding;
  }
}

function Readable(options) {
  Duplex = Duplex || __webpack_require__(99);

  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 = __webpack_require__(397).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;
}

/***/ }),
/* 393 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



module.exports = Transform;

var Duplex = __webpack_require__(99);

/*<replacement>*/
var util = __webpack_require__(90);
util.inherits = __webpack_require__(54);
/*</replacement>*/

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);
}

/***/ }),
/* 394 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



/*<replacement>*/

var pna = __webpack_require__(167);
/*</replacement>*/

module.exports = Writable;

/* <replacement> */
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);
  };
}
/* </replacement> */

/*<replacement>*/
var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
/*</replacement>*/

/*<replacement>*/
var Duplex;
/*</replacement>*/

Writable.WritableState = WritableState;

/*<replacement>*/
var util = __webpack_require__(90);
util.inherits = __webpack_require__(54);
/*</replacement>*/

/*<replacement>*/
var internalUtil = {
  deprecate: __webpack_require__(1093)
};
/*</replacement>*/

/*<replacement>*/
var Stream = __webpack_require__(396);
/*</replacement>*/

/*<replacement>*/

var Buffer = __webpack_require__(55).Buffer;
var OurUint8Array = global.Uint8Array || function () {};
function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}
function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}

/*</replacement>*/

var destroyImpl = __webpack_require__(395);

util.inherits(Writable, Stream);

function nop() {}

function WritableState(options, stream) {
  Duplex = Duplex || __webpack_require__(99);

  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 || __webpack_require__(99);

  // 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) {
      /*<replacement>*/
      asyncWrite(afterWrite, stream, state, finished, cb);
      /*</replacement>*/
    } 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);
};

/***/ }),
/* 395 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/*<replacement>*/

var pna = __webpack_require__(167);
/*</replacement>*/

// 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
};

/***/ }),
/* 396 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(22);


/***/ }),
/* 397 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



/*<replacement>*/

var Buffer = __webpack_require__(55).Buffer;
/*</replacement>*/

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) : '';
}

/***/ }),
/* 398 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs        =  __webpack_require__(3)
  , path      =  __webpack_require__(0)
  , minimatch =  __webpack_require__(64)
  , toString  =  Object.prototype.toString
  , si        =  __webpack_require__(414)
  ;


// Standard helpers
function isFunction (obj) {
  return toString.call(obj) === '[object Function]';
}

function isString (obj) {
  return toString.call(obj) === '[object String]';
}

function isRegExp (obj) {
  return toString.call(obj) === '[object RegExp]';
}

function isUndefined (obj) {
  return obj === void 0;
}

/** 
 * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.
 * @param { Object }   opts     Options to specify root (start directory), filters and recursion depth
 * @param { function } callback1  When callback2 is given calls back for each processed file - function (fileInfo) { ... },
 *                                when callback2 is not given, it behaves like explained in callback2
 * @param { function } callback2  Calls back once all files have been processed with an array of errors and file infos
 *                                function (err, fileInfos) { ... }
 */
function readdir(opts, callback1, callback2) {
  var stream
    , handleError
    , handleFatalError
    , pending = 0
    , errors = []
    , readdirResult = {
        directories: []
      , files: []
    }
    , fileProcessed
    , allProcessed
    , realRoot
    , aborted = false
    , paused = false
    ;

  // If no callbacks were given we will use a streaming interface
  if (isUndefined(callback1)) {
    var api          =  __webpack_require__(1006)();
    stream           =  api.stream;
    callback1        =  api.processEntry;
    callback2        =  api.done;
    handleError      =  api.handleError;
    handleFatalError =  api.handleFatalError;

    stream.on('close', function () { aborted = true; });
    stream.on('pause', function () { paused = true; });
    stream.on('resume', function () { paused = false; });
  } else {
    handleError      =  function (err) { errors.push(err); };
    handleFatalError =  function (err) {
      handleError(err);
      allProcessed(errors, null);
    };
  }

  if (isUndefined(opts)){
    handleFatalError(new Error (
      'Need to pass at least one argument: opts! \n' +
      'https://github.com/thlorenz/readdirp#options'
      )
    );
    return stream;
  }

  opts.root            =  opts.root            || '.';
  opts.fileFilter      =  opts.fileFilter      || function() { return true; };
  opts.directoryFilter =  opts.directoryFilter || function() { return true; };
  opts.depth           =  typeof opts.depth === 'undefined' ? 999999999 : opts.depth;
  opts.entryType       =  opts.entryType       || 'files';

  var statfn = opts.lstat === true ? fs.lstat.bind(fs) : fs.stat.bind(fs);

  if (isUndefined(callback2)) {
    fileProcessed = function() { };
    allProcessed = callback1;
  } else {
    fileProcessed = callback1;
    allProcessed = callback2;
  }

  function normalizeFilter (filter) {

    if (isUndefined(filter)) return undefined;

    function isNegated (filters) {

      function negated(f) { 
        return f.indexOf('!') === 0; 
      }

      var some = filters.some(negated);
      if (!some) {
        return false;
      } else {
        if (filters.every(negated)) {
          return true;
        } else {
          // if we detect illegal filters, bail out immediately
          throw new Error(
            'Cannot mix negated with non negated glob filters: ' + filters + '\n' +
            'https://github.com/thlorenz/readdirp#filters'
          );
        }
      }
    }

    // Turn all filters into a function
    if (isFunction(filter)) {

      return filter;

    } else if (isString(filter)) {

      return function (entryInfo) {
        return minimatch(entryInfo.name, filter.trim());
      };

    } else if (filter && Array.isArray(filter)) {

      if (filter) filter = filter.map(function (f) {
        return f.trim();
      });

      return isNegated(filter) ?
        // use AND to concat multiple negated filters
        function (entryInfo) {
          return filter.every(function (f) {
            return minimatch(entryInfo.name, f);
          });
        }
        :
        // use OR to concat multiple inclusive filters
        function (entryInfo) {
          return filter.some(function (f) {
            return minimatch(entryInfo.name, f);
          });
        };
    }
  }

  function processDir(currentDir, entries, callProcessed) {
    if (aborted) return;
    var total = entries.length
      , processed = 0
      , entryInfos = []
      ;

    fs.realpath(currentDir, function(err, realCurrentDir) {
      if (aborted) return;
      if (err) {
        handleError(err);
        callProcessed(entryInfos);
        return;
      }

      var relDir = path.relative(realRoot, realCurrentDir);

      if (entries.length === 0) {
        callProcessed([]);
      } else {
        entries.forEach(function (entry) { 

          var fullPath = path.join(realCurrentDir, entry)
            , relPath  = path.join(relDir, entry);

          statfn(fullPath, function (err, stat) {
            if (err) {
              handleError(err);
            } else {
              entryInfos.push({
                  name          :  entry
                , path          :  relPath   // relative to root
                , fullPath      :  fullPath

                , parentDir     :  relDir    // relative to root
                , fullParentDir :  realCurrentDir

                , stat          :  stat
              });
            }
            processed++;
            if (processed === total) callProcessed(entryInfos);
          });
        });
      }
    });
  }

  function readdirRec(currentDir, depth, callCurrentDirProcessed) {
    var args = arguments;
    if (aborted) return;
    if (paused) {
      si(function () {
        readdirRec.apply(null, args);
      })
      return;
    } 

    fs.readdir(currentDir, function (err, entries) {
      if (err) {
        handleError(err);
        callCurrentDirProcessed();
        return;
      }

      processDir(currentDir, entries, function(entryInfos) {

        var subdirs = entryInfos
          .filter(function (ei) { return ei.stat.isDirectory() && opts.directoryFilter(ei); });

        subdirs.forEach(function (di) {
          if(opts.entryType === 'directories' || opts.entryType === 'both' || opts.entryType === 'all') {
            fileProcessed(di);
          }
          readdirResult.directories.push(di); 
        });

        entryInfos
          .filter(function(ei) {
            var isCorrectType = opts.entryType === 'all' ?
              !ei.stat.isDirectory() : ei.stat.isFile() || ei.stat.isSymbolicLink();
            return isCorrectType && opts.fileFilter(ei);
          })
          .forEach(function (fi) {
            if(opts.entryType === 'files' || opts.entryType === 'both' || opts.entryType === 'all') {
              fileProcessed(fi);
            }
            readdirResult.files.push(fi); 
          });

        var pendingSubdirs = subdirs.length;

        // Be done if no more subfolders exist or we reached the maximum desired depth
        if(pendingSubdirs === 0 || depth === opts.depth) {
          callCurrentDirProcessed();
        } else {
          // recurse into subdirs, keeping track of which ones are done 
          // and call back once all are processed
          subdirs.forEach(function (subdir) {
            readdirRec(subdir.fullPath, depth + 1, function () {
              pendingSubdirs = pendingSubdirs - 1;
              if(pendingSubdirs === 0) { 
                callCurrentDirProcessed();
              }
            });
          });
        }
      });
    });
  }

  // Validate and normalize filters
  try {
    opts.fileFilter = normalizeFilter(opts.fileFilter);
    opts.directoryFilter = normalizeFilter(opts.directoryFilter);
  } catch (err) {
    // if we detect illegal filters, bail out immediately
    handleFatalError(err);
    return stream;
  }

  // If filters were valid get on with the show
  fs.realpath(opts.root, function(err, res) {
    if (err) {
      handleFatalError(err);
      return stream;
    }

    realRoot = res;
    readdirRec(opts.root, 0, function () { 
      // All errors are collected into the errors array
      if (errors.length > 0) {
        allProcessed(errors, readdirResult); 
      } else {
        allProcessed(null, readdirResult);
      }
    });
  });

  return stream;
}

module.exports = readdir;


/***/ }),
/* 399 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_io__ = __webpack_require__(81);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "take", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["d"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "takem", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["h"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "put", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["i"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "all", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["j"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["k"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "call", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["f"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "apply", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["l"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cps", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["m"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "fork", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["e"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "spawn", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["n"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "join", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["o"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cancel", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["g"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "select", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["p"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "actionChannel", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["c"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cancelled", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["q"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "flush", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["r"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getContext", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["s"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "setContext", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["t"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "takeEvery", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["u"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "takeLatest", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["v"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__["w"]; });


/***/ }),
/* 400 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export NOT_ITERATOR_ERROR */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CHANNEL_END; });
/* unused harmony export TASK_CANCEL */
/* harmony export (immutable) */ __webpack_exports__["b"] = proc;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__scheduler__ = __webpack_require__(403);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__io__ = __webpack_require__(81);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__channel__ = __webpack_require__(100);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__buffers__ = __webpack_require__(168);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

function _defineEnumerableProperties(obj, descs) { for (var key in descs) { var desc = descs[key]; desc.configurable = desc.enumerable = true; if ("value" in desc) desc.writable = true; Object.defineProperty(obj, key, desc); } return obj; }







var NOT_ITERATOR_ERROR = 'proc first argument (Saga function result) must be an iterator';

var CHANNEL_END = {
  toString: function toString() {
    return '@@redux-saga/CHANNEL_END';
  }
};
var TASK_CANCEL = {
  toString: function toString() {
    return '@@redux-saga/TASK_CANCEL';
  }
};

var matchers = {
  wildcard: function wildcard() {
    return __WEBPACK_IMPORTED_MODULE_0__utils__["k" /* kTrue */];
  },
  default: function _default(pattern) {
    return (typeof pattern === 'undefined' ? 'undefined' : _typeof(pattern)) === 'symbol' ? function (input) {
      return input.type === pattern;
    } : function (input) {
      return input.type === String(pattern);
    };
  },
  array: function array(patterns) {
    return function (input) {
      return patterns.some(function (p) {
        return matcher(p)(input);
      });
    };
  },
  predicate: function predicate(_predicate) {
    return function (input) {
      return _predicate(input);
    };
  }
};

function matcher(pattern) {
  // prettier-ignore
  return (pattern === '*' ? matchers.wildcard : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(pattern) ? matchers.array : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].stringableFunc(pattern) ? matchers.default : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(pattern) ? matchers.predicate : matchers.default)(pattern);
}

/**
  Used to track a parent task and its forks
  In the new fork model, forked tasks are attached by default to their parent
  We model this using the concept of Parent task && main Task
  main task is the main flow of the current Generator, the parent tasks is the
  aggregation of the main tasks + all its forked tasks.
  Thus the whole model represents an execution tree with multiple branches (vs the
  linear execution tree in sequential (non parallel) programming)

  A parent tasks has the following semantics
  - It completes if all its forks either complete or all cancelled
  - If it's cancelled, all forks are cancelled as well
  - It aborts if any uncaught error bubbles up from forks
  - If it completes, the return value is the one returned by the main task
**/
function forkQueue(name, mainTask, cb) {
  var tasks = [],
      result = void 0,
      completed = false;
  addTask(mainTask);

  function abort(err) {
    cancelAll();
    cb(err, true);
  }

  function addTask(task) {
    tasks.push(task);
    task.cont = function (res, isErr) {
      if (completed) {
        return;
      }

      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["l" /* remove */])(tasks, task);
      task.cont = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
      if (isErr) {
        abort(res);
      } else {
        if (task === mainTask) {
          result = res;
        }
        if (!tasks.length) {
          completed = true;
          cb(result);
        }
      }
    };
    // task.cont.cancel = task.cancel
  }

  function cancelAll() {
    if (completed) {
      return;
    }
    completed = true;
    tasks.forEach(function (t) {
      t.cont = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
      t.cancel();
    });
    tasks = [];
  }

  return {
    addTask: addTask,
    cancelAll: cancelAll,
    abort: abort,
    getTasks: function getTasks() {
      return tasks;
    },
    taskNames: function taskNames() {
      return tasks.map(function (t) {
        return t.name;
      });
    }
  };
}

function createTaskIterator(_ref) {
  var context = _ref.context,
      fn = _ref.fn,
      args = _ref.args;

  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator(fn)) {
    return fn;
  }

  // catch synchronous failures; see #152 and #441
  var result = void 0,
      error = void 0;
  try {
    result = fn.apply(context, args);
  } catch (err) {
    error = err;
  }

  // i.e. a generator function returns an iterator
  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator(result)) {
    return result;
  }

  // do not bubble up synchronous failures for detached forks
  // instead create a failed task. See #152 and #441
  return error ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["m" /* makeIterator */])(function () {
    throw error;
  }) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["m" /* makeIterator */])(function () {
    var pc = void 0;
    var eff = { done: false, value: result };
    var ret = function ret(value) {
      return { done: true, value: value };
    };
    return function (arg) {
      if (!pc) {
        pc = true;
        return eff;
      } else {
        return ret(arg);
      }
    };
  }());
}

var wrapHelper = function wrapHelper(helper) {
  return { fn: helper };
};

function proc(iterator) {
  var subscribe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
    return __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
  };
  var dispatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
  var getState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
  var parentContext = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
  var parentEffectId = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
  var name = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'anonymous';
  var cont = arguments[8];

  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(iterator, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator, NOT_ITERATOR_ERROR);

  var effectsString = '[...effects]';
  var runParallelEffect = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["o" /* deprecate */])(runAllEffect, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["p" /* updateIncentive */])(effectsString, 'all(' + effectsString + ')'));

  var sagaMonitor = options.sagaMonitor,
      logger = options.logger,
      onError = options.onError;

  var log = logger || __WEBPACK_IMPORTED_MODULE_0__utils__["q" /* log */];
  var logError = function logError(err) {
    var message = err.sagaStack;

    if (!message && err.stack) {
      message = err.stack.split('\n')[0].indexOf(err.message) !== -1 ? err.stack : 'Error: ' + err.message + '\n' + err.stack;
    }

    log('error', 'uncaught at ' + name, message || err.message || err);
  };
  var stdChannel = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__channel__["d" /* stdChannel */])(subscribe);
  var taskContext = Object.create(parentContext);
  /**
    Tracks the current effect cancellation
    Each time the generator progresses. calling runEffect will set a new value
    on it. It allows propagating cancellation to child effects
  **/
  next.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];

  /**
    Creates a new task descriptor for this generator, We'll also create a main task
    to track the main flow (besides other forked tasks)
  **/
  var task = newTask(parentEffectId, name, iterator, cont);
  var mainTask = { name: name, cancel: cancelMain, isRunning: true };
  var taskQueue = forkQueue(name, mainTask, end);

  /**
    cancellation of the main task. We'll simply resume the Generator with a Cancel
  **/
  function cancelMain() {
    if (mainTask.isRunning && !mainTask.isCancelled) {
      mainTask.isCancelled = true;
      next(TASK_CANCEL);
    }
  }

  /**
    This may be called by a parent generator to trigger/propagate cancellation
    cancel all pending tasks (including the main task), then end the current task.
     Cancellation propagates down to the whole execution tree holded by this Parent task
    It's also propagated to all joiners of this task and their execution tree/joiners
     Cancellation is noop for terminated/Cancelled tasks tasks
  **/
  function cancel() {
    /**
      We need to check both Running and Cancelled status
      Tasks can be Cancelled but still Running
    **/
    if (iterator._isRunning && !iterator._isCancelled) {
      iterator._isCancelled = true;
      taskQueue.cancelAll();
      /**
        Ending with a Never result will propagate the Cancellation to all joiners
      **/
      end(TASK_CANCEL);
    }
  }
  /**
    attaches cancellation logic to this task's continuation
    this will permit cancellation to propagate down the call chain
  **/
  cont && (cont.cancel = cancel);

  // tracks the running status
  iterator._isRunning = true;

  // kicks up the generator
  next();

  // then return the task descriptor to the caller
  return task;

  /**
    This is the generator driver
    It's a recursive async/continuation function which calls itself
    until the generator terminates or throws
  **/
  function next(arg, isErr) {
    // Preventive measure. If we end up here, then there is really something wrong
    if (!mainTask.isRunning) {
      throw new Error('Trying to resume an already finished generator');
    }

    try {
      var result = void 0;
      if (isErr) {
        result = iterator.throw(arg);
      } else if (arg === TASK_CANCEL) {
        /**
          getting TASK_CANCEL automatically cancels the main task
          We can get this value here
           - By cancelling the parent task manually
          - By joining a Cancelled task
        **/
        mainTask.isCancelled = true;
        /**
          Cancels the current effect; this will propagate the cancellation down to any called tasks
        **/
        next.cancel();
        /**
          If this Generator has a `return` method then invokes it
          This will jump to the finally block
        **/
        result = __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(iterator.return) ? iterator.return(TASK_CANCEL) : { done: true, value: TASK_CANCEL };
      } else if (arg === CHANNEL_END) {
        // We get CHANNEL_END by taking from a channel that ended using `take` (and not `takem` used to trap End of channels)
        result = __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(iterator.return) ? iterator.return() : { done: true };
      } else {
        result = iterator.next(arg);
      }

      if (!result.done) {
        runEffect(result.value, parentEffectId, '', next);
      } else {
        /**
          This Generator has ended, terminate the main task and notify the fork queue
        **/
        mainTask.isMainRunning = false;
        mainTask.cont && mainTask.cont(result.value);
      }
    } catch (error) {
      if (mainTask.isCancelled) {
        logError(error);
      }
      mainTask.isMainRunning = false;
      mainTask.cont(error, true);
    }
  }

  function end(result, isErr) {
    iterator._isRunning = false;
    stdChannel.close();
    if (!isErr) {
      iterator._result = result;
      iterator._deferredEnd && iterator._deferredEnd.resolve(result);
    } else {
      if (result instanceof Error) {
        Object.defineProperty(result, 'sagaStack', {
          value: 'at ' + name + ' \n ' + (result.sagaStack || result.stack),
          configurable: true
        });
      }
      if (!task.cont) {
        if (result instanceof Error && onError) {
          onError(result);
        } else {
          logError(result);
        }
      }
      iterator._error = result;
      iterator._isAborted = true;
      iterator._deferredEnd && iterator._deferredEnd.reject(result);
    }
    task.cont && task.cont(result, isErr);
    task.joiners.forEach(function (j) {
      return j.cb(result, isErr);
    });
    task.joiners = null;
  }

  function runEffect(effect, parentEffectId) {
    var label = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
    var cb = arguments[3];

    var effectId = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["r" /* uid */])();
    sagaMonitor && sagaMonitor.effectTriggered({ effectId: effectId, parentEffectId: parentEffectId, label: label, effect: effect });

    /**
      completion callback and cancel callback are mutually exclusive
      We can't cancel an already completed effect
      And We can't complete an already cancelled effectId
    **/
    var effectSettled = void 0;

    // Completion callback passed to the appropriate effect runner
    function currCb(res, isErr) {
      if (effectSettled) {
        return;
      }

      effectSettled = true;
      cb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */]; // defensive measure
      if (sagaMonitor) {
        isErr ? sagaMonitor.effectRejected(effectId, res) : sagaMonitor.effectResolved(effectId, res);
      }
      cb(res, isErr);
    }
    // tracks down the current cancel
    currCb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];

    // setup cancellation logic on the parent cb
    cb.cancel = function () {
      // prevents cancelling an already completed effect
      if (effectSettled) {
        return;
      }

      effectSettled = true;
      /**
        propagates cancel downward
        catch uncaught cancellations errors; since we can no longer call the completion
        callback, log errors raised during cancellations into the console
      **/
      try {
        currCb.cancel();
      } catch (err) {
        logError(err);
      }
      currCb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */]; // defensive measure

      sagaMonitor && sagaMonitor.effectCancelled(effectId);
    };

    /**
      each effect runner must attach its own logic of cancellation to the provided callback
      it allows this generator to propagate cancellation downward.
       ATTENTION! effect runners must setup the cancel logic by setting cb.cancel = [cancelMethod]
      And the setup must occur before calling the callback
       This is a sort of inversion of control: called async functions are responsible
      for completing the flow by calling the provided continuation; while caller functions
      are responsible for aborting the current flow by calling the attached cancel function
       Library users can attach their own cancellation logic to promises by defining a
      promise[CANCEL] method in their returned promises
      ATTENTION! calling cancel must have no effect on an already completed or cancelled effect
    **/
    var data = void 0;
    // prettier-ignore
    return (
      // Non declarative effect
      __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].promise(effect) ? resolvePromise(effect, currCb) : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].helper(effect) ? runForkEffect(wrapHelper(effect), effectId, currCb) : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator(effect) ? resolveIterator(effect, effectId, name, currCb)

      // declarative effects
      : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(effect) ? runParallelEffect(effect, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].take(effect)) ? runTakeEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].put(effect)) ? runPutEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].all(effect)) ? runAllEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].race(effect)) ? runRaceEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].call(effect)) ? runCallEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].cps(effect)) ? runCPSEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].fork(effect)) ? runForkEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].join(effect)) ? runJoinEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].cancel(effect)) ? runCancelEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].select(effect)) ? runSelectEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].actionChannel(effect)) ? runChannelEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].flush(effect)) ? runFlushEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].cancelled(effect)) ? runCancelledEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].getContext(effect)) ? runGetContextEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__["b" /* asEffect */].setContext(effect)) ? runSetContextEffect(data, currCb) : /* anything else returned as is */currCb(effect)
    );
  }

  function resolvePromise(promise, cb) {
    var cancelPromise = promise[__WEBPACK_IMPORTED_MODULE_0__utils__["b" /* CANCEL */]];
    if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(cancelPromise)) {
      cb.cancel = cancelPromise;
    } else if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(promise.abort)) {
      cb.cancel = function () {
        return promise.abort();
      };
      // TODO: add support for the fetch API, whenever they get around to
      // adding cancel support
    }
    promise.then(cb, function (error) {
      return cb(error, true);
    });
  }

  function resolveIterator(iterator, effectId, name, cb) {
    proc(iterator, subscribe, dispatch, getState, taskContext, options, effectId, name, cb);
  }

  function runTakeEffect(_ref2, cb) {
    var channel = _ref2.channel,
        pattern = _ref2.pattern,
        maybe = _ref2.maybe;

    channel = channel || stdChannel;
    var takeCb = function takeCb(inp) {
      return inp instanceof Error ? cb(inp, true) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__channel__["e" /* isEnd */])(inp) && !maybe ? cb(CHANNEL_END) : cb(inp);
    };
    try {
      channel.take(takeCb, matcher(pattern));
    } catch (err) {
      return cb(err, true);
    }
    cb.cancel = takeCb.cancel;
  }

  function runPutEffect(_ref3, cb) {
    var channel = _ref3.channel,
        action = _ref3.action,
        resolve = _ref3.resolve;

    /**
      Schedule the put in case another saga is holding a lock.
      The put will be executed atomically. ie nested puts will execute after
      this put has terminated.
    **/
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__scheduler__["a" /* asap */])(function () {
      var result = void 0;
      try {
        result = (channel ? channel.put : dispatch)(action);
      } catch (error) {
        // If we have a channel or `put.resolve` was used then bubble up the error.
        if (channel || resolve) return cb(error, true);
        logError(error);
      }

      if (resolve && __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].promise(result)) {
        resolvePromise(result, cb);
      } else {
        return cb(result);
      }
    });
    // Put effects are non cancellables
  }

  function runCallEffect(_ref4, effectId, cb) {
    var context = _ref4.context,
        fn = _ref4.fn,
        args = _ref4.args;

    var result = void 0;
    // catch synchronous failures; see #152
    try {
      result = fn.apply(context, args);
    } catch (error) {
      return cb(error, true);
    }
    return __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].promise(result) ? resolvePromise(result, cb) : __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator(result) ? resolveIterator(result, effectId, fn.name, cb) : cb(result);
  }

  function runCPSEffect(_ref5, cb) {
    var context = _ref5.context,
        fn = _ref5.fn,
        args = _ref5.args;

    // CPS (ie node style functions) can define their own cancellation logic
    // by setting cancel field on the cb

    // catch synchronous failures; see #152
    try {
      var cpsCb = function cpsCb(err, res) {
        return __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].undef(err) ? cb(res) : cb(err, true);
      };
      fn.apply(context, args.concat(cpsCb));
      if (cpsCb.cancel) {
        cb.cancel = function () {
          return cpsCb.cancel();
        };
      }
    } catch (error) {
      return cb(error, true);
    }
  }

  function runForkEffect(_ref6, effectId, cb) {
    var context = _ref6.context,
        fn = _ref6.fn,
        args = _ref6.args,
        detached = _ref6.detached;

    var taskIterator = createTaskIterator({ context: context, fn: fn, args: args });

    try {
      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__scheduler__["b" /* suspend */])();
      var _task = proc(taskIterator, subscribe, dispatch, getState, taskContext, options, effectId, fn.name, detached ? null : __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */]);

      if (detached) {
        cb(_task);
      } else {
        if (taskIterator._isRunning) {
          taskQueue.addTask(_task);
          cb(_task);
        } else if (taskIterator._error) {
          taskQueue.abort(taskIterator._error);
        } else {
          cb(_task);
        }
      }
    } finally {
      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__scheduler__["c" /* flush */])();
    }
    // Fork effects are non cancellables
  }

  function runJoinEffect(t, cb) {
    if (t.isRunning()) {
      var joiner = { task: task, cb: cb };
      cb.cancel = function () {
        return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["l" /* remove */])(t.joiners, joiner);
      };
      t.joiners.push(joiner);
    } else {
      t.isAborted() ? cb(t.error(), true) : cb(t.result());
    }
  }

  function runCancelEffect(taskToCancel, cb) {
    if (taskToCancel === __WEBPACK_IMPORTED_MODULE_0__utils__["s" /* SELF_CANCELLATION */]) {
      taskToCancel = task;
    }
    if (taskToCancel.isRunning()) {
      taskToCancel.cancel();
    }
    cb();
    // cancel effects are non cancellables
  }

  function runAllEffect(effects, effectId, cb) {
    var keys = Object.keys(effects);

    if (!keys.length) {
      return cb(__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(effects) ? [] : {});
    }

    var completedCount = 0;
    var completed = void 0;
    var results = {};
    var childCbs = {};

    function checkEffectEnd() {
      if (completedCount === keys.length) {
        completed = true;
        cb(__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(effects) ? __WEBPACK_IMPORTED_MODULE_0__utils__["t" /* array */].from(_extends({}, results, { length: keys.length })) : results);
      }
    }

    keys.forEach(function (key) {
      var chCbAtKey = function chCbAtKey(res, isErr) {
        if (completed) {
          return;
        }
        if (isErr || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__channel__["e" /* isEnd */])(res) || res === CHANNEL_END || res === TASK_CANCEL) {
          cb.cancel();
          cb(res, isErr);
        } else {
          results[key] = res;
          completedCount++;
          checkEffectEnd();
        }
      };
      chCbAtKey.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
      childCbs[key] = chCbAtKey;
    });

    cb.cancel = function () {
      if (!completed) {
        completed = true;
        keys.forEach(function (key) {
          return childCbs[key].cancel();
        });
      }
    };

    keys.forEach(function (key) {
      return runEffect(effects[key], effectId, key, childCbs[key]);
    });
  }

  function runRaceEffect(effects, effectId, cb) {
    var completed = void 0;
    var keys = Object.keys(effects);
    var childCbs = {};

    keys.forEach(function (key) {
      var chCbAtKey = function chCbAtKey(res, isErr) {
        if (completed) {
          return;
        }

        if (isErr) {
          // Race Auto cancellation
          cb.cancel();
          cb(res, true);
        } else if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__channel__["e" /* isEnd */])(res) && res !== CHANNEL_END && res !== TASK_CANCEL) {
          var _response;

          cb.cancel();
          completed = true;
          var response = (_response = {}, _response[key] = res, _response);
          cb(__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].array(effects) ? [].slice.call(_extends({}, response, { length: keys.length })) : response);
        }
      };
      chCbAtKey.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
      childCbs[key] = chCbAtKey;
    });

    cb.cancel = function () {
      // prevents unnecessary cancellation
      if (!completed) {
        completed = true;
        keys.forEach(function (key) {
          return childCbs[key].cancel();
        });
      }
    };
    keys.forEach(function (key) {
      if (completed) {
        return;
      }
      runEffect(effects[key], effectId, key, childCbs[key]);
    });
  }

  function runSelectEffect(_ref7, cb) {
    var selector = _ref7.selector,
        args = _ref7.args;

    try {
      var state = selector.apply(undefined, [getState()].concat(args));
      cb(state);
    } catch (error) {
      cb(error, true);
    }
  }

  function runChannelEffect(_ref8, cb) {
    var pattern = _ref8.pattern,
        buffer = _ref8.buffer;

    var match = matcher(pattern);
    match.pattern = pattern;
    cb(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__channel__["b" /* eventChannel */])(subscribe, buffer || __WEBPACK_IMPORTED_MODULE_4__buffers__["a" /* buffers */].fixed(), match));
  }

  function runCancelledEffect(data, cb) {
    cb(!!mainTask.isCancelled);
  }

  function runFlushEffect(channel, cb) {
    channel.flush(cb);
  }

  function runGetContextEffect(prop, cb) {
    cb(taskContext[prop]);
  }

  function runSetContextEffect(props, cb) {
    __WEBPACK_IMPORTED_MODULE_0__utils__["u" /* object */].assign(taskContext, props);
    cb();
  }

  function newTask(id, name, iterator, cont) {
    var _done, _ref9, _mutatorMap;

    iterator._deferredEnd = null;
    return _ref9 = {}, _ref9[__WEBPACK_IMPORTED_MODULE_0__utils__["c" /* TASK */]] = true, _ref9.id = id, _ref9.name = name, _done = 'done', _mutatorMap = {}, _mutatorMap[_done] = _mutatorMap[_done] || {}, _mutatorMap[_done].get = function () {
      if (iterator._deferredEnd) {
        return iterator._deferredEnd.promise;
      } else {
        var def = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["g" /* deferred */])();
        iterator._deferredEnd = def;
        if (!iterator._isRunning) {
          iterator._error ? def.reject(iterator._error) : def.resolve(iterator._result);
        }
        return def.promise;
      }
    }, _ref9.cont = cont, _ref9.joiners = [], _ref9.cancel = cancel, _ref9.isRunning = function isRunning() {
      return iterator._isRunning;
    }, _ref9.isCancelled = function isCancelled() {
      return iterator._isCancelled;
    }, _ref9.isAborted = function isAborted() {
      return iterator._isAborted;
    }, _ref9.result = function result() {
      return iterator._result;
    }, _ref9.error = function error() {
      return iterator._error;
    }, _ref9.setContext = function setContext(props) {
      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].object, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["v" /* createSetContextWarning */])('task', props));
      __WEBPACK_IMPORTED_MODULE_0__utils__["u" /* object */].assign(taskContext, props);
    }, _defineEnumerableProperties(_ref9, _mutatorMap), _ref9;
  }
}

/***/ }),
/* 401 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = runSaga;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__proc__ = __webpack_require__(400);



var RUN_SAGA_SIGNATURE = 'runSaga(storeInterface, saga, ...args)';
var NON_GENERATOR_ERR = RUN_SAGA_SIGNATURE + ': saga argument must be a Generator function!';

function runSaga(storeInterface, saga) {
  for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
    args[_key - 2] = arguments[_key];
  }

  var iterator = void 0;

  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator(storeInterface)) {
    if (process.env.NODE_ENV === 'development') {
      __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["q" /* log */])('warn', 'runSaga(iterator, storeInterface) has been deprecated in favor of ' + RUN_SAGA_SIGNATURE);
    }
    iterator = storeInterface;
    storeInterface = saga;
  } else {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(saga, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func, NON_GENERATOR_ERR);
    iterator = saga.apply(undefined, args);
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(iterator, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].iterator, NON_GENERATOR_ERR);
  }

  var _storeInterface = storeInterface,
      subscribe = _storeInterface.subscribe,
      dispatch = _storeInterface.dispatch,
      getState = _storeInterface.getState,
      context = _storeInterface.context,
      sagaMonitor = _storeInterface.sagaMonitor,
      logger = _storeInterface.logger,
      onError = _storeInterface.onError;


  var effectId = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["r" /* uid */])();

  if (sagaMonitor) {
    // monitors are expected to have a certain interface, let's fill-in any missing ones
    sagaMonitor.effectTriggered = sagaMonitor.effectTriggered || __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
    sagaMonitor.effectResolved = sagaMonitor.effectResolved || __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
    sagaMonitor.effectRejected = sagaMonitor.effectRejected || __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
    sagaMonitor.effectCancelled = sagaMonitor.effectCancelled || __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];
    sagaMonitor.actionDispatched = sagaMonitor.actionDispatched || __WEBPACK_IMPORTED_MODULE_0__utils__["e" /* noop */];

    sagaMonitor.effectTriggered({ effectId: effectId, root: true, parentEffectId: 0, effect: { root: true, saga: saga, args: args } });
  }

  var task = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__proc__["b" /* default */])(iterator, subscribe, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["A" /* wrapSagaDispatch */])(dispatch), getState, context, { sagaMonitor: sagaMonitor, logger: logger, onError: onError }, effectId, saga.name);

  if (sagaMonitor) {
    sagaMonitor.effectResolved(effectId, task);
  }

  return task;
}

/***/ }),
/* 402 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return takeEvery; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return takeLatest; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return throttle; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__takeEvery__ = __webpack_require__(1020);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__takeLatest__ = __webpack_require__(1021);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__throttle__ = __webpack_require__(1022);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(38);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__takeEvery__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__takeLatest__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_2__throttle__["a"]; });






var deprecationWarning = function deprecationWarning(helperName) {
  return 'import { ' + helperName + ' } from \'redux-saga\' has been deprecated in favor of import { ' + helperName + ' } from \'redux-saga/effects\'.\nThe latter will not work with yield*, as helper effects are wrapped automatically for you in fork effect.\nTherefore yield ' + helperName + ' will return task descriptor to your saga and execute next lines of code.';
};

var takeEvery = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["o" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_0__takeEvery__["a" /* default */], /*#__PURE__*/deprecationWarning('takeEvery'));
var takeLatest = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["o" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_1__takeLatest__["a" /* default */], /*#__PURE__*/deprecationWarning('takeLatest'));
var throttle = /*#__PURE__*/__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["o" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_2__throttle__["a" /* default */], /*#__PURE__*/deprecationWarning('throttle'));



/***/ }),
/* 403 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = asap;
/* harmony export (immutable) */ __webpack_exports__["b"] = suspend;
/* harmony export (immutable) */ __webpack_exports__["c"] = flush;
var queue = [];
/**
  Variable to hold a counting semaphore
  - Incrementing adds a lock and puts the scheduler in a `suspended` state (if it's not
    already suspended)
  - Decrementing releases a lock. Zero locks puts the scheduler in a `released` state. This
    triggers flushing the queued tasks.
**/
var semaphore = 0;

/**
  Executes a task 'atomically'. Tasks scheduled during this execution will be queued
  and flushed after this task has finished (assuming the scheduler endup in a released
  state).
**/
function exec(task) {
  try {
    suspend();
    task();
  } finally {
    release();
  }
}

/**
  Executes or queues a task depending on the state of the scheduler (`suspended` or `released`)
**/
function asap(task) {
  queue.push(task);

  if (!semaphore) {
    suspend();
    flush();
  }
}

/**
  Puts the scheduler in a `suspended` state. Scheduled tasks will be queued until the
  scheduler is released.
**/
function suspend() {
  semaphore++;
}

/**
  Puts the scheduler in a `released` state.
**/
function release() {
  semaphore--;
}

/**
  Releases the current lock. Executes all queued tasks if the scheduler is in the released state.
**/
function flush() {
  release();

  var task = void 0;
  while (!semaphore && (task = queue.shift()) !== undefined) {
    exec(task);
  }
}

/***/ }),
/* 404 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = compose;
/**
 * Composes single-argument functions from right to left. The rightmost
 * function can take multiple arguments as it provides the signature for
 * the resulting composite function.
 *
 * @param {...Function} funcs The functions to compose.
 * @returns {Function} A function obtained by composing the argument functions
 * from right to left. For example, compose(f, g, h) is identical to doing
 * (...args) => f(g(h(...args))).
 */

function compose() {
  for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
    funcs[_key] = arguments[_key];
  }

  if (funcs.length === 0) {
    return function (arg) {
      return arg;
    };
  }

  if (funcs.length === 1) {
    return funcs[0];
  }

  return funcs.reduce(function (a, b) {
    return function () {
      return a(b.apply(undefined, arguments));
    };
  });
}

/***/ }),
/* 405 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ActionTypes; });
/* harmony export (immutable) */ __webpack_exports__["a"] = createStore;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(372);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(1081);



/**
 * These are private action types reserved by Redux.
 * For any unknown actions, you must return the current state.
 * If the current state is undefined, you must return the initial state.
 * Do not reference these action types directly in your code.
 */
var ActionTypes = {
  INIT: '@@redux/INIT'

  /**
   * Creates a Redux store that holds the state tree.
   * The only way to change the data in the store is to call `dispatch()` on it.
   *
   * There should only be a single store in your app. To specify how different
   * parts of the state tree respond to actions, you may combine several reducers
   * into a single reducer function by using `combineReducers`.
   *
   * @param {Function} reducer A function that returns the next state tree, given
   * the current state tree and the action to handle.
   *
   * @param {any} [preloadedState] The initial state. You may optionally specify it
   * to hydrate the state from the server in universal apps, or to restore a
   * previously serialized user session.
   * If you use `combineReducers` to produce the root reducer function, this must be
   * an object with the same shape as `combineReducers` keys.
   *
   * @param {Function} [enhancer] The store enhancer. You may optionally specify it
   * to enhance the store with third-party capabilities such as middleware,
   * time travel, persistence, etc. The only store enhancer that ships with Redux
   * is `applyMiddleware()`.
   *
   * @returns {Store} A Redux store that lets you read the state, dispatch actions
   * and subscribe to changes.
   */
};function createStore(reducer, preloadedState, enhancer) {
  var _ref2;

  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
    enhancer = preloadedState;
    preloadedState = undefined;
  }

  if (typeof enhancer !== 'undefined') {
    if (typeof enhancer !== 'function') {
      throw new Error('Expected the enhancer to be a function.');
    }

    return enhancer(createStore)(reducer, preloadedState);
  }

  if (typeof reducer !== 'function') {
    throw new Error('Expected the reducer to be a function.');
  }

  var currentReducer = reducer;
  var currentState = preloadedState;
  var currentListeners = [];
  var nextListeners = currentListeners;
  var isDispatching = false;

  function ensureCanMutateNextListeners() {
    if (nextListeners === currentListeners) {
      nextListeners = currentListeners.slice();
    }
  }

  /**
   * Reads the state tree managed by the store.
   *
   * @returns {any} The current state tree of your application.
   */
  function getState() {
    return currentState;
  }

  /**
   * Adds a change listener. It will be called any time an action is dispatched,
   * and some part of the state tree may potentially have changed. You may then
   * call `getState()` to read the current state tree inside the callback.
   *
   * You may call `dispatch()` from a change listener, with the following
   * caveats:
   *
   * 1. The subscriptions are snapshotted just before every `dispatch()` call.
   * If you subscribe or unsubscribe while the listeners are being invoked, this
   * will not have any effect on the `dispatch()` that is currently in progress.
   * However, the next `dispatch()` call, whether nested or not, will use a more
   * recent snapshot of the subscription list.
   *
   * 2. The listener should not expect to see all state changes, as the state
   * might have been updated multiple times during a nested `dispatch()` before
   * the listener is called. It is, however, guaranteed that all subscribers
   * registered before the `dispatch()` started will be called with the latest
   * state by the time it exits.
   *
   * @param {Function} listener A callback to be invoked on every dispatch.
   * @returns {Function} A function to remove this change listener.
   */
  function subscribe(listener) {
    if (typeof listener !== 'function') {
      throw new Error('Expected listener to be a function.');
    }

    var isSubscribed = true;

    ensureCanMutateNextListeners();
    nextListeners.push(listener);

    return function unsubscribe() {
      if (!isSubscribed) {
        return;
      }

      isSubscribed = false;

      ensureCanMutateNextListeners();
      var index = nextListeners.indexOf(listener);
      nextListeners.splice(index, 1);
    };
  }

  /**
   * Dispatches an action. It is the only way to trigger a state change.
   *
   * The `reducer` function, used to create the store, will be called with the
   * current state tree and the given `action`. Its return value will
   * be considered the **next** state of the tree, and the change listeners
   * will be notified.
   *
   * The base implementation only supports plain object actions. If you want to
   * dispatch a Promise, an Observable, a thunk, or something else, you need to
   * wrap your store creating function into the corresponding middleware. For
   * example, see the documentation for the `redux-thunk` package. Even the
   * middleware will eventually dispatch plain object actions using this method.
   *
   * @param {Object} action A plain object representing “what changed”. It is
   * a good idea to keep actions serializable so you can record and replay user
   * sessions, or use the time travelling `redux-devtools`. An action must have
   * a `type` property which may not be `undefined`. It is a good idea to use
   * string constants for action types.
   *
   * @returns {Object} For convenience, the same action object you dispatched.
   *
   * Note that, if you use a custom middleware, it may wrap `dispatch()` to
   * return something else (for example, a Promise you can await).
   */
  function dispatch(action) {
    if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__["a" /* default */])(action)) {
      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
    }

    if (typeof action.type === 'undefined') {
      throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
    }

    if (isDispatching) {
      throw new Error('Reducers may not dispatch actions.');
    }

    try {
      isDispatching = true;
      currentState = currentReducer(currentState, action);
    } finally {
      isDispatching = false;
    }

    var listeners = currentListeners = nextListeners;
    for (var i = 0; i < listeners.length; i++) {
      var listener = listeners[i];
      listener();
    }

    return action;
  }

  /**
   * Replaces the reducer currently used by the store to calculate the state.
   *
   * You might need this if your app implements code splitting and you want to
   * load some of the reducers dynamically. You might also need this if you
   * implement a hot reloading mechanism for Redux.
   *
   * @param {Function} nextReducer The reducer for the store to use instead.
   * @returns {void}
   */
  function replaceReducer(nextReducer) {
    if (typeof nextReducer !== 'function') {
      throw new Error('Expected the nextReducer to be a function.');
    }

    currentReducer = nextReducer;
    dispatch({ type: ActionTypes.INIT });
  }

  /**
   * Interoperability point for observable/reactive libraries.
   * @returns {observable} A minimal observable of state changes.
   * For more information, see the observable proposal:
   * https://github.com/tc39/proposal-observable
   */
  function observable() {
    var _ref;

    var outerSubscribe = subscribe;
    return _ref = {
      /**
       * The minimal observable subscription method.
       * @param {Object} observer Any object that can be used as an observer.
       * The observer object should have a `next` method.
       * @returns {subscription} An object with an `unsubscribe` method that can
       * be used to unsubscribe the observable from the store, and prevent further
       * emission of values from the observable.
       */
      subscribe: function subscribe(observer) {
        if (typeof observer !== 'object') {
          throw new TypeError('Expected the observer to be an object.');
        }

        function observeState() {
          if (observer.next) {
            observer.next(getState());
          }
        }

        observeState();
        var unsubscribe = outerSubscribe(observeState);
        return { unsubscribe: unsubscribe };
      }
    }, _ref[__WEBPACK_IMPORTED_MODULE_1_symbol_observable__["a" /* default */]] = function () {
      return this;
    }, _ref;
  }

  // When a store is created, an "INIT" action is dispatched so that every
  // reducer returns their initial state. This effectively populates
  // the initial state tree.
  dispatch({ type: ActionTypes.INIT });

  return _ref2 = {
    dispatch: dispatch,
    subscribe: subscribe,
    getState: getState,
    replaceReducer: replaceReducer
  }, _ref2[__WEBPACK_IMPORTED_MODULE_1_symbol_observable__["a" /* default */]] = observable, _ref2;
}

/***/ }),
/* 406 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = warning;
/**
 * Prints a warning in the console if it exists.
 *
 * @param {String} message The warning message.
 * @returns {void}
 */
function warning(message) {
  /* eslint-disable no-console */
  if (typeof console !== 'undefined' && typeof console.error === 'function') {
    console.error(message);
  }
  /* eslint-enable no-console */
  try {
    // This error was thrown as a convenience so that if you enable
    // "break on all exceptions" in your console,
    // it would pause the execution at this line.
    throw new Error(message);
    /* eslint-disable no-empty */
  } catch (e) {}
  /* eslint-enable no-empty */
}

/***/ }),
/* 407 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * repeat-element <https://github.com/jonschlinkert/repeat-element>
 *
 * Copyright (c) 2015 Jon Schlinkert.
 * Licensed under the MIT license.
 */



module.exports = function repeat(ele, num) {
  var arr = new Array(num);

  for (var i = 0; i < num; i++) {
    arr[i] = ele;
  }

  return arr;
};


/***/ }),
/* 408 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// Copyright 2010-2012 Mikeal Rogers
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//        http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.



var extend = __webpack_require__(216)
var cookies = __webpack_require__(409)
var helpers = __webpack_require__(235)

var paramsHaveRequestBody = helpers.paramsHaveRequestBody

// organize params for patch, post, put, head, del
function initParams (uri, options, callback) {
  if (typeof options === 'function') {
    callback = options
  }

  var params = {}
  if (typeof options === 'object') {
    extend(params, options, {uri: uri})
  } else if (typeof uri === 'string') {
    extend(params, {uri: uri})
  } else {
    extend(params, uri)
  }

  params.callback = callback || params.callback
  return params
}

function request (uri, options, callback) {
  if (typeof uri === 'undefined') {
    throw new Error('undefined is not a valid uri or options object.')
  }

  var params = initParams(uri, options, callback)

  if (params.method === 'HEAD' && paramsHaveRequestBody(params)) {
    throw new Error('HTTP HEAD requests MUST NOT include a request body.')
  }

  return new request.Request(params)
}

function verbFunc (verb) {
  var method = verb.toUpperCase()
  return function (uri, options, callback) {
    var params = initParams(uri, options, callback)
    params.method = method
    return request(params, params.callback)
  }
}

// define like this to please codeintel/intellisense IDEs
request.get = verbFunc('get')
request.head = verbFunc('head')
request.options = verbFunc('options')
request.post = verbFunc('post')
request.put = verbFunc('put')
request.patch = verbFunc('patch')
request.del = verbFunc('delete')
request['delete'] = verbFunc('delete')

request.jar = function (store) {
  return cookies.jar(store)
}

request.cookie = function (str) {
  return cookies.parse(str)
}

function wrapRequestMethod (method, options, requester, verb) {
  return function (uri, opts, callback) {
    var params = initParams(uri, opts, callback)

    var target = {}
    extend(true, target, options, params)

    target.pool = params.pool || options.pool

    if (verb) {
      target.method = verb.toUpperCase()
    }

    if (typeof requester === 'function') {
      method = requester
    }

    return method(target, target.callback)
  }
}

request.defaults = function (options, requester) {
  var self = this

  options = options || {}

  if (typeof options === 'function') {
    requester = options
    options = {}
  }

  var defaults = wrapRequestMethod(self, options, requester)

  var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete']
  verbs.forEach(function (verb) {
    defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb)
  })

  defaults.cookie = wrapRequestMethod(self.cookie, options, requester)
  defaults.jar = self.jar
  defaults.defaults = self.defaults
  return defaults
}

request.forever = function (agentOptions, optionsArg) {
  var options = {}
  if (optionsArg) {
    extend(options, optionsArg)
  }
  if (agentOptions) {
    options.agentOptions = agentOptions
  }

  options.forever = true
  return request.defaults(options)
}

// Exports

module.exports = request
request.Request = __webpack_require__(1042)
request.initParams = initParams

// Backwards compatibility for request.debug
Object.defineProperty(request, 'debug', {
  enumerable: true,
  get: function () {
    return request.Request.debug
  },
  set: function (debug) {
    request.Request.debug = debug
  }
})


/***/ }),
/* 409 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var tough = __webpack_require__(1084)

var Cookie = tough.Cookie
var CookieJar = tough.CookieJar

exports.parse = function (str) {
  if (str && str.uri) {
    str = str.uri
  }
  if (typeof str !== 'string') {
    throw new Error('The cookie function only accepts STRING as param')
  }
  return Cookie.parse(str, {loose: true})
}

// Adapt the sometimes-Async api of tough.CookieJar to our requirements
function RequestJar (store) {
  var self = this
  self._jar = new CookieJar(store, {looseMode: true})
}
RequestJar.prototype.setCookie = function (cookieOrStr, uri, options) {
  var self = this
  return self._jar.setCookieSync(cookieOrStr, uri, options || {})
}
RequestJar.prototype.getCookieString = function (uri) {
  var self = this
  return self._jar.getCookieStringSync(uri)
}
RequestJar.prototype.getCookies = function (uri) {
  var self = this
  return self._jar.getCookiesSync(uri)
}

exports.jar = function (store) {
  return new RequestJar(store)
}


/***/ }),
/* 410 */
/***/ (function(module, exports) {

/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */
var byteToHex = [];
for (var i = 0; i < 256; ++i) {
  byteToHex[i] = (i + 0x100).toString(16).substr(1);
}

function bytesToUuid(buf, offset) {
  var i = offset || 0;
  var bth = byteToHex;
  return bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]];
}

module.exports = bytesToUuid;


/***/ }),
/* 411 */
/***/ (function(module, exports, __webpack_require__) {

// Unique ID creation requires a high quality random # generator.  In node.js
// this is pretty straight-forward - we use the crypto API.

var crypto = __webpack_require__(7);

module.exports = function nodeRNG() {
  return crypto.randomBytes(16);
};


/***/ }),
/* 412 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 413 */
/***/ (function(module, exports) {

module.exports = function (blocking) {
  [process.stdout, process.stderr].forEach(function (stream) {
    if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') {
      stream._handle.setBlocking(blocking)
    }
  })
}


/***/ }),
/* 414 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = typeof setImmediate === 'function' ? setImmediate :
	function setImmediate() {
		var args = [].slice.apply(arguments);
		args.splice(1, 0, 0);
		setTimeout.apply(null, args);
	};


/***/ }),
/* 415 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = __webpack_require__(130);
var has = Object.prototype.hasOwnProperty;
var hasNativeMap = typeof Map !== "undefined";

/**
 * A data structure which is a combination of an array and a set. Adding a new
 * member is O(1), testing for membership is O(1), and finding the index of an
 * element is O(1). Removing elements from the set is not supported. Only
 * strings are supported for membership.
 */
function ArraySet() {
  this._array = [];
  this._set = hasNativeMap ? new Map() : Object.create(null);
}

/**
 * Static method for creating ArraySet instances from an existing array.
 */
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  var set = new ArraySet();
  for (var i = 0, len = aArray.length; i < len; i++) {
    set.add(aArray[i], aAllowDuplicates);
  }
  return set;
};

/**
 * Return how many unique items are in this ArraySet. If duplicates have been
 * added, than those do not count towards the size.
 *
 * @returns Number
 */
ArraySet.prototype.size = function ArraySet_size() {
  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
};

/**
 * Add the given string to this set.
 *
 * @param String aStr
 */
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
  var idx = this._array.length;
  if (!isDuplicate || aAllowDuplicates) {
    this._array.push(aStr);
  }
  if (!isDuplicate) {
    if (hasNativeMap) {
      this._set.set(aStr, idx);
    } else {
      this._set[sStr] = idx;
    }
  }
};

/**
 * Is the given string a member of this set?
 *
 * @param String aStr
 */
ArraySet.prototype.has = function ArraySet_has(aStr) {
  if (hasNativeMap) {
    return this._set.has(aStr);
  } else {
    var sStr = util.toSetString(aStr);
    return has.call(this._set, sStr);
  }
};

/**
 * What is the index of the given string in the array?
 *
 * @param String aStr
 */
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  if (hasNativeMap) {
    var idx = this._set.get(aStr);
    if (idx >= 0) {
        return idx;
    }
  } else {
    var sStr = util.toSetString(aStr);
    if (has.call(this._set, sStr)) {
      return this._set[sStr];
    }
  }

  throw new Error('"' + aStr + '" is not in the set.');
};

/**
 * What is the element at the given index?
 *
 * @param Number aIdx
 */
ArraySet.prototype.at = function ArraySet_at(aIdx) {
  if (aIdx >= 0 && aIdx < this._array.length) {
    return this._array[aIdx];
  }
  throw new Error('No element indexed by ' + aIdx);
};

/**
 * Returns the array representation of this set (which has the proper indices
 * indicated by indexOf). Note that this is a copy of the internal array used
 * for storing the members so that no one can mess with internal state.
 */
ArraySet.prototype.toArray = function ArraySet_toArray() {
  return this._array.slice();
};

exports.ArraySet = ArraySet;


/***/ }),
/* 416 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 *
 * Based on the Base 64 VLQ implementation in Closure Compiler:
 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
 *
 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials provided
 *    with the distribution.
 *  * Neither the name of Google Inc. nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

var base64 = __webpack_require__(1059);

// A single base 64 digit can contain 6 bits of data. For the base 64 variable
// length quantities we use in the source map spec, the first bit is the sign,
// the next four bits are the actual value, and the 6th bit is the
// continuation bit. The continuation bit tells us whether there are more
// digits in this value following this digit.
//
//   Continuation
//   |    Sign
//   |    |
//   V    V
//   101011

var VLQ_BASE_SHIFT = 5;

// binary: 100000
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;

// binary: 011111
var VLQ_BASE_MASK = VLQ_BASE - 1;

// binary: 100000
var VLQ_CONTINUATION_BIT = VLQ_BASE;

/**
 * Converts from a two-complement value to a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
 */
function toVLQSigned(aValue) {
  return aValue < 0
    ? ((-aValue) << 1) + 1
    : (aValue << 1) + 0;
}

/**
 * Converts to a two-complement value from a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
 */
function fromVLQSigned(aValue) {
  var isNegative = (aValue & 1) === 1;
  var shifted = aValue >> 1;
  return isNegative
    ? -shifted
    : shifted;
}

/**
 * Returns the base 64 VLQ encoded value.
 */
exports.encode = function base64VLQ_encode(aValue) {
  var encoded = "";
  var digit;

  var vlq = toVLQSigned(aValue);

  do {
    digit = vlq & VLQ_BASE_MASK;
    vlq >>>= VLQ_BASE_SHIFT;
    if (vlq > 0) {
      // There are still more digits in this value, so we must make sure the
      // continuation bit is marked.
      digit |= VLQ_CONTINUATION_BIT;
    }
    encoded += base64.encode(digit);
  } while (vlq > 0);

  return encoded;
};

/**
 * Decodes the next base 64 VLQ value from the given string and returns the
 * value and the rest of the string via the out parameter.
 */
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  var strLen = aStr.length;
  var result = 0;
  var shift = 0;
  var continuation, digit;

  do {
    if (aIndex >= strLen) {
      throw new Error("Expected more digits in base 64 VLQ value.");
    }

    digit = base64.decode(aStr.charCodeAt(aIndex++));
    if (digit === -1) {
      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
    }

    continuation = !!(digit & VLQ_CONTINUATION_BIT);
    digit &= VLQ_BASE_MASK;
    result = result + (digit << shift);
    shift += VLQ_BASE_SHIFT;
  } while (continuation);

  aOutParam.value = fromVLQSigned(result);
  aOutParam.rest = aIndex;
};


/***/ }),
/* 417 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var base64VLQ = __webpack_require__(416);
var util = __webpack_require__(130);
var ArraySet = __webpack_require__(415).ArraySet;
var MappingList = __webpack_require__(1061).MappingList;

/**
 * An instance of the SourceMapGenerator represents a source map which is
 * being built incrementally. You may pass an object with the following
 * properties:
 *
 *   - file: The filename of the generated source.
 *   - sourceRoot: A root for all relative URLs in this source map.
 */
function SourceMapGenerator(aArgs) {
  if (!aArgs) {
    aArgs = {};
  }
  this._file = util.getArg(aArgs, 'file', null);
  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  this._sources = new ArraySet();
  this._names = new ArraySet();
  this._mappings = new MappingList();
  this._sourcesContents = null;
}

SourceMapGenerator.prototype._version = 3;

/**
 * Creates a new SourceMapGenerator based on a SourceMapConsumer
 *
 * @param aSourceMapConsumer The SourceMap.
 */
SourceMapGenerator.fromSourceMap =
  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
    var sourceRoot = aSourceMapConsumer.sourceRoot;
    var generator = new SourceMapGenerator({
      file: aSourceMapConsumer.file,
      sourceRoot: sourceRoot
    });
    aSourceMapConsumer.eachMapping(function (mapping) {
      var newMapping = {
        generated: {
          line: mapping.generatedLine,
          column: mapping.generatedColumn
        }
      };

      if (mapping.source != null) {
        newMapping.source = mapping.source;
        if (sourceRoot != null) {
          newMapping.source = util.relative(sourceRoot, newMapping.source);
        }

        newMapping.original = {
          line: mapping.originalLine,
          column: mapping.originalColumn
        };

        if (mapping.name != null) {
          newMapping.name = mapping.name;
        }
      }

      generator.addMapping(newMapping);
    });
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var sourceRelative = sourceFile;
      if (sourceRoot !== null) {
        sourceRelative = util.relative(sourceRoot, sourceFile);
      }

      if (!generator._sources.has(sourceRelative)) {
        generator._sources.add(sourceRelative);
      }

      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        generator.setSourceContent(sourceFile, content);
      }
    });
    return generator;
  };

/**
 * Add a single mapping from original source line and column to the generated
 * source's line and column for this source map being created. The mapping
 * object should have the following properties:
 *
 *   - generated: An object with the generated line and column positions.
 *   - original: An object with the original line and column positions.
 *   - source: The original source file (relative to the sourceRoot).
 *   - name: An optional original token name for this mapping.
 */
SourceMapGenerator.prototype.addMapping =
  function SourceMapGenerator_addMapping(aArgs) {
    var generated = util.getArg(aArgs, 'generated');
    var original = util.getArg(aArgs, 'original', null);
    var source = util.getArg(aArgs, 'source', null);
    var name = util.getArg(aArgs, 'name', null);

    if (!this._skipValidation) {
      this._validateMapping(generated, original, source, name);
    }

    if (source != null) {
      source = String(source);
      if (!this._sources.has(source)) {
        this._sources.add(source);
      }
    }

    if (name != null) {
      name = String(name);
      if (!this._names.has(name)) {
        this._names.add(name);
      }
    }

    this._mappings.add({
      generatedLine: generated.line,
      generatedColumn: generated.column,
      originalLine: original != null && original.line,
      originalColumn: original != null && original.column,
      source: source,
      name: name
    });
  };

/**
 * Set the source content for a source file.
 */
SourceMapGenerator.prototype.setSourceContent =
  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
    var source = aSourceFile;
    if (this._sourceRoot != null) {
      source = util.relative(this._sourceRoot, source);
    }

    if (aSourceContent != null) {
      // Add the source content to the _sourcesContents map.
      // Create a new _sourcesContents map if the property is null.
      if (!this._sourcesContents) {
        this._sourcesContents = Object.create(null);
      }
      this._sourcesContents[util.toSetString(source)] = aSourceContent;
    } else if (this._sourcesContents) {
      // Remove the source file from the _sourcesContents map.
      // If the _sourcesContents map is empty, set the property to null.
      delete this._sourcesContents[util.toSetString(source)];
      if (Object.keys(this._sourcesContents).length === 0) {
        this._sourcesContents = null;
      }
    }
  };

/**
 * Applies the mappings of a sub-source-map for a specific source file to the
 * source map being generated. Each mapping to the supplied source file is
 * rewritten using the supplied source map. Note: The resolution for the
 * resulting mappings is the minimium of this map and the supplied map.
 *
 * @param aSourceMapConsumer The source map to be applied.
 * @param aSourceFile Optional. The filename of the source file.
 *        If omitted, SourceMapConsumer's file property will be used.
 * @param aSourceMapPath Optional. The dirname of the path to the source map
 *        to be applied. If relative, it is relative to the SourceMapConsumer.
 *        This parameter is needed when the two source maps aren't in the same
 *        directory, and the source map to be applied contains relative source
 *        paths. If so, those relative source paths need to be rewritten
 *        relative to the SourceMapGenerator.
 */
SourceMapGenerator.prototype.applySourceMap =
  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
    var sourceFile = aSourceFile;
    // If aSourceFile is omitted, we will use the file property of the SourceMap
    if (aSourceFile == null) {
      if (aSourceMapConsumer.file == null) {
        throw new Error(
          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
          'or the source map\'s "file" property. Both were omitted.'
        );
      }
      sourceFile = aSourceMapConsumer.file;
    }
    var sourceRoot = this._sourceRoot;
    // Make "sourceFile" relative if an absolute Url is passed.
    if (sourceRoot != null) {
      sourceFile = util.relative(sourceRoot, sourceFile);
    }
    // Applying the SourceMap can add and remove items from the sources and
    // the names array.
    var newSources = new ArraySet();
    var newNames = new ArraySet();

    // Find mappings for the "sourceFile"
    this._mappings.unsortedForEach(function (mapping) {
      if (mapping.source === sourceFile && mapping.originalLine != null) {
        // Check if it can be mapped by the source map, then update the mapping.
        var original = aSourceMapConsumer.originalPositionFor({
          line: mapping.originalLine,
          column: mapping.originalColumn
        });
        if (original.source != null) {
          // Copy mapping
          mapping.source = original.source;
          if (aSourceMapPath != null) {
            mapping.source = util.join(aSourceMapPath, mapping.source)
          }
          if (sourceRoot != null) {
            mapping.source = util.relative(sourceRoot, mapping.source);
          }
          mapping.originalLine = original.line;
          mapping.originalColumn = original.column;
          if (original.name != null) {
            mapping.name = original.name;
          }
        }
      }

      var source = mapping.source;
      if (source != null && !newSources.has(source)) {
        newSources.add(source);
      }

      var name = mapping.name;
      if (name != null && !newNames.has(name)) {
        newNames.add(name);
      }

    }, this);
    this._sources = newSources;
    this._names = newNames;

    // Copy sourcesContents of applied map.
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aSourceMapPath != null) {
          sourceFile = util.join(aSourceMapPath, sourceFile);
        }
        if (sourceRoot != null) {
          sourceFile = util.relative(sourceRoot, sourceFile);
        }
        this.setSourceContent(sourceFile, content);
      }
    }, this);
  };

/**
 * A mapping can have one of the three levels of data:
 *
 *   1. Just the generated position.
 *   2. The Generated position, original position, and original source.
 *   3. Generated and original position, original source, as well as a name
 *      token.
 *
 * To maintain consistency, we validate that any new mapping being added falls
 * in to one of these categories.
 */
SourceMapGenerator.prototype._validateMapping =
  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
                                              aName) {
    // When aOriginal is truthy but has empty values for .line and .column,
    // it is most likely a programmer error. In this case we throw a very
    // specific error message to try to guide them the right way.
    // For example: https://github.com/Polymer/polymer-bundler/pull/519
    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
        throw new Error(
            'original.line and original.column are not numbers -- you probably meant to omit ' +
            'the original mapping entirely and only map the generated position. If so, pass ' +
            'null for the original mapping instead of an object with empty or null values.'
        );
    }

    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
        && aGenerated.line > 0 && aGenerated.column >= 0
        && !aOriginal && !aSource && !aName) {
      // Case 1.
      return;
    }
    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
             && aGenerated.line > 0 && aGenerated.column >= 0
             && aOriginal.line > 0 && aOriginal.column >= 0
             && aSource) {
      // Cases 2 and 3.
      return;
    }
    else {
      throw new Error('Invalid mapping: ' + JSON.stringify({
        generated: aGenerated,
        source: aSource,
        original: aOriginal,
        name: aName
      }));
    }
  };

/**
 * Serialize the accumulated mappings in to the stream of base 64 VLQs
 * specified by the source map format.
 */
SourceMapGenerator.prototype._serializeMappings =
  function SourceMapGenerator_serializeMappings() {
    var previousGeneratedColumn = 0;
    var previousGeneratedLine = 1;
    var previousOriginalColumn = 0;
    var previousOriginalLine = 0;
    var previousName = 0;
    var previousSource = 0;
    var result = '';
    var next;
    var mapping;
    var nameIdx;
    var sourceIdx;

    var mappings = this._mappings.toArray();
    for (var i = 0, len = mappings.length; i < len; i++) {
      mapping = mappings[i];
      next = ''

      if (mapping.generatedLine !== previousGeneratedLine) {
        previousGeneratedColumn = 0;
        while (mapping.generatedLine !== previousGeneratedLine) {
          next += ';';
          previousGeneratedLine++;
        }
      }
      else {
        if (i > 0) {
          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
            continue;
          }
          next += ',';
        }
      }

      next += base64VLQ.encode(mapping.generatedColumn
                                 - previousGeneratedColumn);
      previousGeneratedColumn = mapping.generatedColumn;

      if (mapping.source != null) {
        sourceIdx = this._sources.indexOf(mapping.source);
        next += base64VLQ.encode(sourceIdx - previousSource);
        previousSource = sourceIdx;

        // lines are stored 0-based in SourceMap spec version 3
        next += base64VLQ.encode(mapping.originalLine - 1
                                   - previousOriginalLine);
        previousOriginalLine = mapping.originalLine - 1;

        next += base64VLQ.encode(mapping.originalColumn
                                   - previousOriginalColumn);
        previousOriginalColumn = mapping.originalColumn;

        if (mapping.name != null) {
          nameIdx = this._names.indexOf(mapping.name);
          next += base64VLQ.encode(nameIdx - previousName);
          previousName = nameIdx;
        }
      }

      result += next;
    }

    return result;
  };

SourceMapGenerator.prototype._generateSourcesContent =
  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
    return aSources.map(function (source) {
      if (!this._sourcesContents) {
        return null;
      }
      if (aSourceRoot != null) {
        source = util.relative(aSourceRoot, source);
      }
      var key = util.toSetString(source);
      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
        ? this._sourcesContents[key]
        : null;
    }, this);
  };

/**
 * Externalize the source map.
 */
SourceMapGenerator.prototype.toJSON =
  function SourceMapGenerator_toJSON() {
    var map = {
      version: this._version,
      sources: this._sources.toArray(),
      names: this._names.toArray(),
      mappings: this._serializeMappings()
    };
    if (this._file != null) {
      map.file = this._file;
    }
    if (this._sourceRoot != null) {
      map.sourceRoot = this._sourceRoot;
    }
    if (this._sourcesContents) {
      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
    }

    return map;
  };

/**
 * Render the source map being generated to a string.
 */
SourceMapGenerator.prototype.toString =
  function SourceMapGenerator_toString() {
    return JSON.stringify(this.toJSON());
  };

exports.SourceMapGenerator = SourceMapGenerator;


/***/ }),
/* 418 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var scan = __webpack_require__(1073)
var parse = __webpack_require__(1072)

module.exports = function (source) {
  return parse(scan(source))
}


/***/ }),
/* 419 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	Verifier: Verifier,
	Signer: Signer
};

var nacl;
var stream = __webpack_require__(22);
var util = __webpack_require__(2);
var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var Signature = __webpack_require__(57);

function Verifier(key, hashAlgo) {
	if (nacl === undefined)
		nacl = __webpack_require__(58);

	if (hashAlgo.toLowerCase() !== 'sha512')
		throw (new Error('ED25519 only supports the use of ' +
		    'SHA-512 hashes'));

	this.key = key;
	this.chunks = [];

	stream.Writable.call(this, {});
}
util.inherits(Verifier, stream.Writable);

Verifier.prototype._write = function (chunk, enc, cb) {
	this.chunks.push(chunk);
	cb();
};

Verifier.prototype.update = function (chunk) {
	if (typeof (chunk) === 'string')
		chunk = Buffer.from(chunk, 'binary');
	this.chunks.push(chunk);
};

Verifier.prototype.verify = function (signature, fmt) {
	var sig;
	if (Signature.isSignature(signature, [2, 0])) {
		if (signature.type !== 'ed25519')
			return (false);
		sig = signature.toBuffer('raw');

	} else if (typeof (signature) === 'string') {
		sig = Buffer.from(signature, 'base64');

	} else if (Signature.isSignature(signature, [1, 0])) {
		throw (new Error('signature was created by too old ' +
		    'a version of sshpk and cannot be verified'));
	}

	assert.buffer(sig);
	return (nacl.sign.detached.verify(
	    new Uint8Array(Buffer.concat(this.chunks)),
	    new Uint8Array(sig),
	    new Uint8Array(this.key.part.A.data)));
};

function Signer(key, hashAlgo) {
	if (nacl === undefined)
		nacl = __webpack_require__(58);

	if (hashAlgo.toLowerCase() !== 'sha512')
		throw (new Error('ED25519 only supports the use of ' +
		    'SHA-512 hashes'));

	this.key = key;
	this.chunks = [];

	stream.Writable.call(this, {});
}
util.inherits(Signer, stream.Writable);

Signer.prototype._write = function (chunk, enc, cb) {
	this.chunks.push(chunk);
	cb();
};

Signer.prototype.update = function (chunk) {
	if (typeof (chunk) === 'string')
		chunk = Buffer.from(chunk, 'binary');
	this.chunks.push(chunk);
};

Signer.prototype.sign = function () {
	var sig = nacl.sign.detached(
	    new Uint8Array(Buffer.concat(this.chunks)),
	    new Uint8Array(Buffer.concat([
		this.key.part.k.data, this.key.part.A.data])));
	var sigBuf = Buffer.from(sig);
	var sigObj = Signature.parse(sigBuf, 'ed25519', 'raw');
	sigObj.hashAlgorithm = 'sha512';
	return (sigObj);
};


/***/ }),
/* 420 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	write: write
};

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);

var pem = __webpack_require__(66);
var ssh = __webpack_require__(421);
var rfc4253 = __webpack_require__(82);
var dnssec = __webpack_require__(240);

var DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1';

function read(buf, options) {
	if (typeof (buf) === 'string') {
		if (buf.trim().match(/^[-]+[ ]*BEGIN/))
			return (pem.read(buf, options));
		if (buf.match(/^\s*ssh-[a-z]/))
			return (ssh.read(buf, options));
		if (buf.match(/^\s*ecdsa-/))
			return (ssh.read(buf, options));
		if (findDNSSECHeader(buf))
			return (dnssec.read(buf, options));
		buf = Buffer.from(buf, 'binary');
	} else {
		assert.buffer(buf);
		if (findPEMHeader(buf))
			return (pem.read(buf, options));
		if (findSSHHeader(buf))
			return (ssh.read(buf, options));
		if (findDNSSECHeader(buf))
			return (dnssec.read(buf, options));
	}
	if (buf.readUInt32BE(0) < buf.length)
		return (rfc4253.read(buf, options));
	throw (new Error('Failed to auto-detect format of key'));
}

function findSSHHeader(buf) {
	var offset = 0;
	while (offset < buf.length &&
	    (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))
		++offset;
	if (offset + 4 <= buf.length &&
	    buf.slice(offset, offset + 4).toString('ascii') === 'ssh-')
		return (true);
	if (offset + 6 <= buf.length &&
	    buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-')
		return (true);
	return (false);
}

function findPEMHeader(buf) {
	var offset = 0;
	while (offset < buf.length &&
	    (buf[offset] === 32 || buf[offset] === 10))
		++offset;
	if (buf[offset] !== 45)
		return (false);
	while (offset < buf.length &&
	    (buf[offset] === 45))
		++offset;
	while (offset < buf.length &&
	    (buf[offset] === 32))
		++offset;
	if (offset + 5 > buf.length ||
	    buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN')
		return (false);
	return (true);
}

function findDNSSECHeader(buf) {
	// private case first
	if (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length)
		return (false);
	var headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length);
	if (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX)
		return (true);

	// public-key RFC3110 ?
	// 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...'
	// skip any comment-lines
	if (typeof (buf) !== 'string') {
		buf = buf.toString('ascii');
	}
	var lines = buf.split('\n');
	var line = 0;
	/* JSSTYLED */
	while (lines[line].match(/^\;/))
		line++;
	if (lines[line].toString('ascii').match(/\. IN KEY /))
		return (true);
	if (lines[line].toString('ascii').match(/\. IN DNSKEY /))
		return (true);
	return (false);
}

function write(key, options) {
	throw (new Error('"auto" format cannot be used for writing'));
}


/***/ }),
/* 421 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

module.exports = {
	read: read,
	write: write
};

var assert = __webpack_require__(6);
var Buffer = __webpack_require__(10).Buffer;
var rfc4253 = __webpack_require__(82);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);

var sshpriv = __webpack_require__(169);

/*JSSTYLED*/
var SSHKEY_RE = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([ \t]+([^ \t][^\n]*[\n]*)?)?$/;
/*JSSTYLED*/
var SSHKEY_RE2 = /^([a-z0-9-]+)[ \t\n]+([a-zA-Z0-9+\/][a-zA-Z0-9+\/ \t\n=]*)([^a-zA-Z0-9+\/ \t\n=].*)?$/;

function read(buf, options) {
	if (typeof (buf) !== 'string') {
		assert.buffer(buf, 'buf');
		buf = buf.toString('ascii');
	}

	var trimmed = buf.trim().replace(/[\\\r]/g, '');
	var m = trimmed.match(SSHKEY_RE);
	if (!m)
		m = trimmed.match(SSHKEY_RE2);
	assert.ok(m, 'key must match regex');

	var type = rfc4253.algToKeyType(m[1]);
	var kbuf = Buffer.from(m[2], 'base64');

	/*
	 * This is a bit tricky. If we managed to parse the key and locate the
	 * key comment with the regex, then do a non-partial read and assert
	 * that we have consumed all bytes. If we couldn't locate the key
	 * comment, though, there may be whitespace shenanigans going on that
	 * have conjoined the comment to the rest of the key. We do a partial
	 * read in this case to try to make the best out of a sorry situation.
	 */
	var key;
	var ret = {};
	if (m[4]) {
		try {
			key = rfc4253.read(kbuf);

		} catch (e) {
			m = trimmed.match(SSHKEY_RE2);
			assert.ok(m, 'key must match regex');
			kbuf = Buffer.from(m[2], 'base64');
			key = rfc4253.readInternal(ret, 'public', kbuf);
		}
	} else {
		key = rfc4253.readInternal(ret, 'public', kbuf);
	}

	assert.strictEqual(type, key.type);

	if (m[4] && m[4].length > 0) {
		key.comment = m[4];

	} else if (ret.consumed) {
		/*
		 * Now the magic: trying to recover the key comment when it's
		 * gotten conjoined to the key or otherwise shenanigan'd.
		 *
		 * Work out how much base64 we used, then drop all non-base64
		 * chars from the beginning up to this point in the the string.
		 * Then offset in this and try to make up for missing = chars.
		 */
		var data = m[2] + (m[3] ? m[3] : '');
		var realOffset = Math.ceil(ret.consumed / 3) * 4;
		data = data.slice(0, realOffset - 2). /*JSSTYLED*/
		    replace(/[^a-zA-Z0-9+\/=]/g, '') +
		    data.slice(realOffset - 2);

		var padding = ret.consumed % 3;
		if (padding > 0 &&
		    data.slice(realOffset - 1, realOffset) !== '=')
			realOffset--;
		while (data.slice(realOffset, realOffset + 1) === '=')
			realOffset++;

		/* Finally, grab what we think is the comment & clean it up. */
		var trailer = data.slice(realOffset);
		trailer = trailer.replace(/[\r\n]/g, ' ').
		    replace(/^\s+/, '');
		if (trailer.match(/^[a-zA-Z0-9]/))
			key.comment = trailer;
	}

	return (key);
}

function write(key, options) {
	assert.object(key);
	if (!Key.isKey(key))
		throw (new Error('Must be a public key'));

	var parts = [];
	var alg = rfc4253.keyTypeToAlg(key);
	parts.push(alg);

	var buf = rfc4253.write(key);
	parts.push(buf.toString('base64'));

	if (key.comment)
		parts.push(key.comment);

	return (Buffer.from(parts.join(' ')));
}


/***/ }),
/* 422 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = {
	read: read,
	verify: verify,
	sign: sign,
	signAsync: signAsync,
	write: write
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var pem = __webpack_require__(66);
var Identity = __webpack_require__(134);
var Signature = __webpack_require__(57);
var Certificate = __webpack_require__(131);
var pkcs8 = __webpack_require__(133);

/*
 * This file is based on RFC5280 (X.509).
 */

/* Helper to read in a single mpint */
function readMPInt(der, nm) {
	assert.strictEqual(der.peek(), asn1.Ber.Integer,
	    nm + ' is not an Integer');
	return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));
}

function verify(cert, key) {
	var sig = cert.signatures.x509;
	assert.object(sig, 'x509 signature');

	var algParts = sig.algo.split('-');
	if (algParts[0] !== key.type)
		return (false);

	var blob = sig.cache;
	if (blob === undefined) {
		var der = new asn1.BerWriter();
		writeTBSCert(cert, der);
		blob = der.buffer;
	}

	var verifier = key.createVerify(algParts[1]);
	verifier.write(blob);
	return (verifier.verify(sig.signature));
}

function Local(i) {
	return (asn1.Ber.Context | asn1.Ber.Constructor | i);
}

function Context(i) {
	return (asn1.Ber.Context | i);
}

var SIGN_ALGS = {
	'rsa-md5': '1.2.840.113549.1.1.4',
	'rsa-sha1': '1.2.840.113549.1.1.5',
	'rsa-sha256': '1.2.840.113549.1.1.11',
	'rsa-sha384': '1.2.840.113549.1.1.12',
	'rsa-sha512': '1.2.840.113549.1.1.13',
	'dsa-sha1': '1.2.840.10040.4.3',
	'dsa-sha256': '2.16.840.1.101.3.4.3.2',
	'ecdsa-sha1': '1.2.840.10045.4.1',
	'ecdsa-sha256': '1.2.840.10045.4.3.2',
	'ecdsa-sha384': '1.2.840.10045.4.3.3',
	'ecdsa-sha512': '1.2.840.10045.4.3.4',
	'ed25519-sha512': '1.3.101.112'
};
Object.keys(SIGN_ALGS).forEach(function (k) {
	SIGN_ALGS[SIGN_ALGS[k]] = k;
});
SIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5';
SIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1';

var EXTS = {
	'issuerKeyId': '2.5.29.35',
	'altName': '2.5.29.17',
	'basicConstraints': '2.5.29.19',
	'keyUsage': '2.5.29.15',
	'extKeyUsage': '2.5.29.37'
};

function read(buf, options) {
	if (typeof (buf) === 'string') {
		buf = Buffer.from(buf, 'binary');
	}
	assert.buffer(buf, 'buf');

	var der = new asn1.BerReader(buf);

	der.readSequence();
	if (Math.abs(der.length - der.remain) > 1) {
		throw (new Error('DER sequence does not contain whole byte ' +
		    'stream'));
	}

	var tbsStart = der.offset;
	der.readSequence();
	var sigOffset = der.offset + der.length;
	var tbsEnd = sigOffset;

	if (der.peek() === Local(0)) {
		der.readSequence(Local(0));
		var version = der.readInt();
		assert.ok(version <= 3,
		    'only x.509 versions up to v3 supported');
	}

	var cert = {};
	cert.signatures = {};
	var sig = (cert.signatures.x509 = {});
	sig.extras = {};

	cert.serial = readMPInt(der, 'serial');

	der.readSequence();
	var after = der.offset + der.length;
	var certAlgOid = der.readOID();
	var certAlg = SIGN_ALGS[certAlgOid];
	if (certAlg === undefined)
		throw (new Error('unknown signature algorithm ' + certAlgOid));

	der._offset = after;
	cert.issuer = Identity.parseAsn1(der);

	der.readSequence();
	cert.validFrom = readDate(der);
	cert.validUntil = readDate(der);

	cert.subjects = [Identity.parseAsn1(der)];

	der.readSequence();
	after = der.offset + der.length;
	cert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der);
	der._offset = after;

	/* issuerUniqueID */
	if (der.peek() === Local(1)) {
		der.readSequence(Local(1));
		sig.extras.issuerUniqueID =
		    buf.slice(der.offset, der.offset + der.length);
		der._offset += der.length;
	}

	/* subjectUniqueID */
	if (der.peek() === Local(2)) {
		der.readSequence(Local(2));
		sig.extras.subjectUniqueID =
		    buf.slice(der.offset, der.offset + der.length);
		der._offset += der.length;
	}

	/* extensions */
	if (der.peek() === Local(3)) {
		der.readSequence(Local(3));
		var extEnd = der.offset + der.length;
		der.readSequence();

		while (der.offset < extEnd)
			readExtension(cert, buf, der);

		assert.strictEqual(der.offset, extEnd);
	}

	assert.strictEqual(der.offset, sigOffset);

	der.readSequence();
	after = der.offset + der.length;
	var sigAlgOid = der.readOID();
	var sigAlg = SIGN_ALGS[sigAlgOid];
	if (sigAlg === undefined)
		throw (new Error('unknown signature algorithm ' + sigAlgOid));
	der._offset = after;

	var sigData = der.readString(asn1.Ber.BitString, true);
	if (sigData[0] === 0)
		sigData = sigData.slice(1);
	var algParts = sigAlg.split('-');

	sig.signature = Signature.parse(sigData, algParts[0], 'asn1');
	sig.signature.hashAlgorithm = algParts[1];
	sig.algo = sigAlg;
	sig.cache = buf.slice(tbsStart, tbsEnd);

	return (new Certificate(cert));
}

function readDate(der) {
	if (der.peek() === asn1.Ber.UTCTime) {
		return (utcTimeToDate(der.readString(asn1.Ber.UTCTime)));
	} else if (der.peek() === asn1.Ber.GeneralizedTime) {
		return (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime)));
	} else {
		throw (new Error('Unsupported date format'));
	}
}

/* RFC5280, section 4.2.1.6 (GeneralName type) */
var ALTNAME = {
	OtherName: Local(0),
	RFC822Name: Context(1),
	DNSName: Context(2),
	X400Address: Local(3),
	DirectoryName: Local(4),
	EDIPartyName: Local(5),
	URI: Context(6),
	IPAddress: Context(7),
	OID: Context(8)
};

/* RFC5280, section 4.2.1.12 (KeyPurposeId) */
var EXTPURPOSE = {
	'serverAuth': '1.3.6.1.5.5.7.3.1',
	'clientAuth': '1.3.6.1.5.5.7.3.2',
	'codeSigning': '1.3.6.1.5.5.7.3.3',

	/* See https://github.com/joyent/oid-docs/blob/master/root.md */
	'joyentDocker': '1.3.6.1.4.1.38678.1.4.1',
	'joyentCmon': '1.3.6.1.4.1.38678.1.4.2'
};
var EXTPURPOSE_REV = {};
Object.keys(EXTPURPOSE).forEach(function (k) {
	EXTPURPOSE_REV[EXTPURPOSE[k]] = k;
});

var KEYUSEBITS = [
	'signature', 'identity', 'keyEncryption',
	'encryption', 'keyAgreement', 'ca', 'crl'
];

function readExtension(cert, buf, der) {
	der.readSequence();
	var after = der.offset + der.length;
	var extId = der.readOID();
	var id;
	var sig = cert.signatures.x509;
	sig.extras.exts = [];

	var critical;
	if (der.peek() === asn1.Ber.Boolean)
		critical = der.readBoolean();

	switch (extId) {
	case (EXTS.basicConstraints):
		der.readSequence(asn1.Ber.OctetString);
		der.readSequence();
		var bcEnd = der.offset + der.length;
		var ca = false;
		if (der.peek() === asn1.Ber.Boolean)
			ca = der.readBoolean();
		if (cert.purposes === undefined)
			cert.purposes = [];
		if (ca === true)
			cert.purposes.push('ca');
		var bc = { oid: extId, critical: critical };
		if (der.offset < bcEnd && der.peek() === asn1.Ber.Integer)
			bc.pathLen = der.readInt();
		sig.extras.exts.push(bc);
		break;
	case (EXTS.extKeyUsage):
		der.readSequence(asn1.Ber.OctetString);
		der.readSequence();
		if (cert.purposes === undefined)
			cert.purposes = [];
		var ekEnd = der.offset + der.length;
		while (der.offset < ekEnd) {
			var oid = der.readOID();
			cert.purposes.push(EXTPURPOSE_REV[oid] || oid);
		}
		/*
		 * This is a bit of a hack: in the case where we have a cert
		 * that's only allowed to do serverAuth or clientAuth (and not
		 * the other), we want to make sure all our Subjects are of
		 * the right type. But we already parsed our Subjects and
		 * decided if they were hosts or users earlier (since it appears
		 * first in the cert).
		 *
		 * So we go through and mutate them into the right kind here if
		 * it doesn't match. This might not be hugely beneficial, as it
		 * seems that single-purpose certs are not often seen in the
		 * wild.
		 */
		if (cert.purposes.indexOf('serverAuth') !== -1 &&
		    cert.purposes.indexOf('clientAuth') === -1) {
			cert.subjects.forEach(function (ide) {
				if (ide.type !== 'host') {
					ide.type = 'host';
					ide.hostname = ide.uid ||
					    ide.email ||
					    ide.components[0].value;
				}
			});
		} else if (cert.purposes.indexOf('clientAuth') !== -1 &&
		    cert.purposes.indexOf('serverAuth') === -1) {
			cert.subjects.forEach(function (ide) {
				if (ide.type !== 'user') {
					ide.type = 'user';
					ide.uid = ide.hostname ||
					    ide.email ||
					    ide.components[0].value;
				}
			});
		}
		sig.extras.exts.push({ oid: extId, critical: critical });
		break;
	case (EXTS.keyUsage):
		der.readSequence(asn1.Ber.OctetString);
		var bits = der.readString(asn1.Ber.BitString, true);
		var setBits = readBitField(bits, KEYUSEBITS);
		setBits.forEach(function (bit) {
			if (cert.purposes === undefined)
				cert.purposes = [];
			if (cert.purposes.indexOf(bit) === -1)
				cert.purposes.push(bit);
		});
		sig.extras.exts.push({ oid: extId, critical: critical,
		    bits: bits });
		break;
	case (EXTS.altName):
		der.readSequence(asn1.Ber.OctetString);
		der.readSequence();
		var aeEnd = der.offset + der.length;
		while (der.offset < aeEnd) {
			switch (der.peek()) {
			case ALTNAME.OtherName:
			case ALTNAME.EDIPartyName:
				der.readSequence();
				der._offset += der.length;
				break;
			case ALTNAME.OID:
				der.readOID(ALTNAME.OID);
				break;
			case ALTNAME.RFC822Name:
				/* RFC822 specifies email addresses */
				var email = der.readString(ALTNAME.RFC822Name);
				id = Identity.forEmail(email);
				if (!cert.subjects[0].equals(id))
					cert.subjects.push(id);
				break;
			case ALTNAME.DirectoryName:
				der.readSequence(ALTNAME.DirectoryName);
				id = Identity.parseAsn1(der);
				if (!cert.subjects[0].equals(id))
					cert.subjects.push(id);
				break;
			case ALTNAME.DNSName:
				var host = der.readString(
				    ALTNAME.DNSName);
				id = Identity.forHost(host);
				if (!cert.subjects[0].equals(id))
					cert.subjects.push(id);
				break;
			default:
				der.readString(der.peek());
				break;
			}
		}
		sig.extras.exts.push({ oid: extId, critical: critical });
		break;
	default:
		sig.extras.exts.push({
			oid: extId,
			critical: critical,
			data: der.readString(asn1.Ber.OctetString, true)
		});
		break;
	}

	der._offset = after;
}

var UTCTIME_RE =
    /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;
function utcTimeToDate(t) {
	var m = t.match(UTCTIME_RE);
	assert.ok(m, 'timestamps must be in UTC');
	var d = new Date();

	var thisYear = d.getUTCFullYear();
	var century = Math.floor(thisYear / 100) * 100;

	var year = parseInt(m[1], 10);
	if (thisYear % 100 < 50 && year >= 60)
		year += (century - 1);
	else
		year += century;
	d.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10));
	d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));
	if (m[6] && m[6].length > 0)
		d.setUTCSeconds(parseInt(m[6], 10));
	return (d);
}

var GTIME_RE =
    /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;
function gTimeToDate(t) {
	var m = t.match(GTIME_RE);
	assert.ok(m);
	var d = new Date();

	d.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1,
	    parseInt(m[3], 10));
	d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));
	if (m[6] && m[6].length > 0)
		d.setUTCSeconds(parseInt(m[6], 10));
	return (d);
}

function zeroPad(n) {
	var s = '' + n;
	while (s.length < 2)
		s = '0' + s;
	return (s);
}

function dateToUTCTime(d) {
	var s = '';
	s += zeroPad(d.getUTCFullYear() % 100);
	s += zeroPad(d.getUTCMonth() + 1);
	s += zeroPad(d.getUTCDate());
	s += zeroPad(d.getUTCHours());
	s += zeroPad(d.getUTCMinutes());
	s += zeroPad(d.getUTCSeconds());
	s += 'Z';
	return (s);
}

function sign(cert, key) {
	if (cert.signatures.x509 === undefined)
		cert.signatures.x509 = {};
	var sig = cert.signatures.x509;

	sig.algo = key.type + '-' + key.defaultHashAlgorithm();
	if (SIGN_ALGS[sig.algo] === undefined)
		return (false);

	var der = new asn1.BerWriter();
	writeTBSCert(cert, der);
	var blob = der.buffer;
	sig.cache = blob;

	var signer = key.createSign();
	signer.write(blob);
	cert.signatures.x509.signature = signer.sign();

	return (true);
}

function signAsync(cert, signer, done) {
	if (cert.signatures.x509 === undefined)
		cert.signatures.x509 = {};
	var sig = cert.signatures.x509;

	var der = new asn1.BerWriter();
	writeTBSCert(cert, der);
	var blob = der.buffer;
	sig.cache = blob;

	signer(blob, function (err, signature) {
		if (err) {
			done(err);
			return;
		}
		sig.algo = signature.type + '-' + signature.hashAlgorithm;
		if (SIGN_ALGS[sig.algo] === undefined) {
			done(new Error('Invalid signing algorithm "' +
			    sig.algo + '"'));
			return;
		}
		sig.signature = signature;
		done();
	});
}

function write(cert, options) {
	var sig = cert.signatures.x509;
	assert.object(sig, 'x509 signature');

	var der = new asn1.BerWriter();
	der.startSequence();
	if (sig.cache) {
		der._ensure(sig.cache.length);
		sig.cache.copy(der._buf, der._offset);
		der._offset += sig.cache.length;
	} else {
		writeTBSCert(cert, der);
	}

	der.startSequence();
	der.writeOID(SIGN_ALGS[sig.algo]);
	if (sig.algo.match(/^rsa-/))
		der.writeNull();
	der.endSequence();

	var sigData = sig.signature.toBuffer('asn1');
	var data = Buffer.alloc(sigData.length + 1);
	data[0] = 0;
	sigData.copy(data, 1);
	der.writeBuffer(data, asn1.Ber.BitString);
	der.endSequence();

	return (der.buffer);
}

function writeTBSCert(cert, der) {
	var sig = cert.signatures.x509;
	assert.object(sig, 'x509 signature');

	der.startSequence();

	der.startSequence(Local(0));
	der.writeInt(2);
	der.endSequence();

	der.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer);

	der.startSequence();
	der.writeOID(SIGN_ALGS[sig.algo]);
	if (sig.algo.match(/^rsa-/))
		der.writeNull();
	der.endSequence();

	cert.issuer.toAsn1(der);

	der.startSequence();
	der.writeString(dateToUTCTime(cert.validFrom), asn1.Ber.UTCTime);
	der.writeString(dateToUTCTime(cert.validUntil), asn1.Ber.UTCTime);
	der.endSequence();

	var subject = cert.subjects[0];
	var altNames = cert.subjects.slice(1);
	subject.toAsn1(der);

	pkcs8.writePkcs8(der, cert.subjectKey);

	if (sig.extras && sig.extras.issuerUniqueID) {
		der.writeBuffer(sig.extras.issuerUniqueID, Local(1));
	}

	if (sig.extras && sig.extras.subjectUniqueID) {
		der.writeBuffer(sig.extras.subjectUniqueID, Local(2));
	}

	if (altNames.length > 0 || subject.type === 'host' ||
	    (cert.purposes !== undefined && cert.purposes.length > 0) ||
	    (sig.extras && sig.extras.exts)) {
		der.startSequence(Local(3));
		der.startSequence();

		var exts = [];
		if (cert.purposes !== undefined && cert.purposes.length > 0) {
			exts.push({
				oid: EXTS.basicConstraints,
				critical: true
			});
			exts.push({
				oid: EXTS.keyUsage,
				critical: true
			});
			exts.push({
				oid: EXTS.extKeyUsage,
				critical: true
			});
		}
		exts.push({ oid: EXTS.altName });
		if (sig.extras && sig.extras.exts)
			exts = sig.extras.exts;

		for (var i = 0; i < exts.length; ++i) {
			der.startSequence();
			der.writeOID(exts[i].oid);

			if (exts[i].critical !== undefined)
				der.writeBoolean(exts[i].critical);

			if (exts[i].oid === EXTS.altName) {
				der.startSequence(asn1.Ber.OctetString);
				der.startSequence();
				if (subject.type === 'host') {
					der.writeString(subject.hostname,
					    Context(2));
				}
				for (var j = 0; j < altNames.length; ++j) {
					if (altNames[j].type === 'host') {
						der.writeString(
						    altNames[j].hostname,
						    ALTNAME.DNSName);
					} else if (altNames[j].type ===
					    'email') {
						der.writeString(
						    altNames[j].email,
						    ALTNAME.RFC822Name);
					} else {
						/*
						 * Encode anything else as a
						 * DN style name for now.
						 */
						der.startSequence(
						    ALTNAME.DirectoryName);
						altNames[j].toAsn1(der);
						der.endSequence();
					}
				}
				der.endSequence();
				der.endSequence();
			} else if (exts[i].oid === EXTS.basicConstraints) {
				der.startSequence(asn1.Ber.OctetString);
				der.startSequence();
				var ca = (cert.purposes.indexOf('ca') !== -1);
				var pathLen = exts[i].pathLen;
				der.writeBoolean(ca);
				if (pathLen !== undefined)
					der.writeInt(pathLen);
				der.endSequence();
				der.endSequence();
			} else if (exts[i].oid === EXTS.extKeyUsage) {
				der.startSequence(asn1.Ber.OctetString);
				der.startSequence();
				cert.purposes.forEach(function (purpose) {
					if (purpose === 'ca')
						return;
					if (KEYUSEBITS.indexOf(purpose) !== -1)
						return;
					var oid = purpose;
					if (EXTPURPOSE[purpose] !== undefined)
						oid = EXTPURPOSE[purpose];
					der.writeOID(oid);
				});
				der.endSequence();
				der.endSequence();
			} else if (exts[i].oid === EXTS.keyUsage) {
				der.startSequence(asn1.Ber.OctetString);
				/*
				 * If we parsed this certificate from a byte
				 * stream (i.e. we didn't generate it in sshpk)
				 * then we'll have a ".bits" property on the
				 * ext with the original raw byte contents.
				 *
				 * If we have this, use it here instead of
				 * regenerating it. This guarantees we output
				 * the same data we parsed, so signatures still
				 * validate.
				 */
				if (exts[i].bits !== undefined) {
					der.writeBuffer(exts[i].bits,
					    asn1.Ber.BitString);
				} else {
					var bits = writeBitField(cert.purposes,
					    KEYUSEBITS);
					der.writeBuffer(bits,
					    asn1.Ber.BitString);
				}
				der.endSequence();
			} else {
				der.writeBuffer(exts[i].data,
				    asn1.Ber.OctetString);
			}

			der.endSequence();
		}

		der.endSequence();
		der.endSequence();
	}

	der.endSequence();
}

/*
 * Reads an ASN.1 BER bitfield out of the Buffer produced by doing
 * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw
 * contents of the BitString tag, which is a count of unused bits followed by
 * the bits as a right-padded byte string.
 *
 * `bits` is the Buffer, `bitIndex` should contain an array of string names
 * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec.
 *
 * Returns an array of Strings, the names of the bits that were set to 1.
 */
function readBitField(bits, bitIndex) {
	var bitLen = 8 * (bits.length - 1) - bits[0];
	var setBits = {};
	for (var i = 0; i < bitLen; ++i) {
		var byteN = 1 + Math.floor(i / 8);
		var bit = 7 - (i % 8);
		var mask = 1 << bit;
		var bitVal = ((bits[byteN] & mask) !== 0);
		var name = bitIndex[i];
		if (bitVal && typeof (name) === 'string') {
			setBits[name] = true;
		}
	}
	return (Object.keys(setBits));
}

/*
 * `setBits` is an array of strings, containing the names for each bit that
 * sould be set to 1. `bitIndex` is same as in `readBitField()`.
 *
 * Returns a Buffer, ready to be written out with `BerWriter#writeString()`.
 */
function writeBitField(setBits, bitIndex) {
	var bitLen = bitIndex.length;
	var blen = Math.ceil(bitLen / 8);
	var unused = blen * 8 - bitLen;
	var bits = Buffer.alloc(1 + blen); // zero-filled
	bits[0] = unused;
	for (var i = 0; i < bitLen; ++i) {
		var byteN = 1 + Math.floor(i / 8);
		var bit = 7 - (i % 8);
		var mask = 1 << bit;
		var name = bitIndex[i];
		if (name === undefined)
			continue;
		var bitVal = (setBits.indexOf(name) !== -1);
		if (bitVal) {
			bits[byteN] |= mask;
		}
	}
	return (bits);
}


/***/ }),
/* 423 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var stripAnsi = __webpack_require__(243);
var codePointAt = __webpack_require__(629);
var isFullwidthCodePoint = __webpack_require__(1077);

// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345
module.exports = function (str) {
	if (typeof str !== 'string' || str.length === 0) {
		return 0;
	}

	var width = 0;

	str = stripAnsi(str);

	for (var i = 0; i < str.length; i++) {
		var code = codePointAt(str, i);

		// ignore control characters
		if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {
			continue;
		}

		// surrogates
		if (code >= 0x10000) {
			i++;
		}

		if (isFullwidthCodePoint(code)) {
			width += 2;
		} else {
			width++;
		}
	}

	return width;
};


/***/ }),
/* 424 */
/***/ (function(module, exports, __webpack_require__) {

var fs   = __webpack_require__(1),
    path = __webpack_require__(0),
    cnst = __webpack_require__(141);

var rimraf     = __webpack_require__(1083),
    osTmpdir   = __webpack_require__(387),
    rimrafSync = rimraf.sync;

/* HELPERS */

var RDWR_EXCL = cnst.O_CREAT | cnst.O_TRUNC | cnst.O_RDWR | cnst.O_EXCL;

var generateName = function(rawAffixes, defaultPrefix) {
  var affixes = parseAffixes(rawAffixes, defaultPrefix);
  var now = new Date();
  var name = [affixes.prefix,
              now.getYear(), now.getMonth(), now.getDate(),
              '-',
              process.pid,
              '-',
              (Math.random() * 0x100000000 + 1).toString(36),
              affixes.suffix].join('');
  return path.join(affixes.dir || exports.dir, name);
};

var parseAffixes = function(rawAffixes, defaultPrefix) {
  var affixes = {prefix: null, suffix: null};
  if(rawAffixes) {
    switch (typeof(rawAffixes)) {
    case 'string':
      affixes.prefix = rawAffixes;
      break;
    case 'object':
      affixes = rawAffixes;
      break;
    default:
      throw new Error("Unknown affix declaration: " + affixes);
    }
  } else {
    affixes.prefix = defaultPrefix;
  }
  return affixes;
};

/* -------------------------------------------------------------------------
 * Don't forget to call track() if you want file tracking and exit handlers!
 * -------------------------------------------------------------------------
 * When any temp file or directory is created, it is added to filesToDelete
 * or dirsToDelete. The first time any temp file is created, a listener is
 * added to remove all temp files and directories at exit.
 */
var tracking = false;
var track = function(value) {
  tracking = (value !== false);
  return module.exports; // chainable
};
var exitListenerAttached = false;
var filesToDelete = [];
var dirsToDelete = [];

function deleteFileOnExit(filePath) {
  if (!tracking) return false;
  attachExitListener();
  filesToDelete.push(filePath);
}

function deleteDirOnExit(dirPath) {
  if (!tracking) return false;
  attachExitListener();
  dirsToDelete.push(dirPath);
}

function attachExitListener() {
  if (!tracking) return false;
  if (!exitListenerAttached) {
    process.addListener('exit', cleanupSync);
    exitListenerAttached = true;
  }
}

function cleanupFilesSync() {
  if (!tracking) {
    return false;
  }
  var count = 0;
  var toDelete;
  while ((toDelete = filesToDelete.shift()) !== undefined) {
    rimrafSync(toDelete);
    count++;
  }
  return count;
}

function cleanupFiles(callback) {
  if (!tracking) {
    if (callback) {
      callback(new Error("not tracking"));
    }
    return;
  }
  var count = 0;
  var left = filesToDelete.length;
  if (!left) {
    if (callback) {
      callback(null, count);
    }
    return;
  }
  var toDelete;
  var rimrafCallback = function(err) {
    if (!left) {
      // Prevent processing if aborted
      return;
    }
    if (err) {
      // This shouldn't happen; pass error to callback and abort
      // processing
      if (callback) {
        callback(err);
      }
      left = 0;
      return;
    } else {
      count++;
    }
    left--;
    if (!left && callback) {
      callback(null, count);
    }
  };
  while ((toDelete = filesToDelete.shift()) !== undefined) {
    rimraf(toDelete, rimrafCallback);
  }
}

function cleanupDirsSync() {
  if (!tracking) {
    return false;
  }
  var count = 0;
  var toDelete;
  while ((toDelete = dirsToDelete.shift()) !== undefined) {
    rimrafSync(toDelete);
    count++;
  }
  return count;
}

function cleanupDirs(callback) {
  if (!tracking) {
    if (callback) {
      callback(new Error("not tracking"));
    }
    return;
  }
  var count = 0;
  var left = dirsToDelete.length;
  if (!left) {
    if (callback) {
      callback(null, count);
    }
    return;
  }
  var toDelete;
  var rimrafCallback = function (err) {
    if (!left) {
      // Prevent processing if aborted
      return;
    }
    if (err) {
      // rimraf handles most "normal" errors; pass the error to the
      // callback and abort processing
      if (callback) {
        callback(err, count);
      }
      left = 0;
      return;
    } else {
      count;
    }
    left--;
    if (!left && callback) {
      callback(null, count);
    }
  };
  while ((toDelete = dirsToDelete.shift()) !== undefined) {
    rimraf(toDelete, rimrafCallback);
  }
}

function cleanupSync() {
  if (!tracking) {
    return false;
  }
  var fileCount = cleanupFilesSync();
  var dirCount  = cleanupDirsSync();
  return {files: fileCount, dirs: dirCount};
}

function cleanup(callback) {
  if (!tracking) {
    if (callback) {
      callback(new Error("not tracking"));
    }
    return;
  }
  cleanupFiles(function(fileErr, fileCount) {
    if (fileErr) {
      if (callback) {
        callback(fileErr, {files: fileCount})
      }
    } else {
      cleanupDirs(function(dirErr, dirCount) {
        if (callback) {
          callback(dirErr, {files: fileCount, dirs: dirCount});
        }
      });
    }
  });
}

/* DIRECTORIES */

function mkdir(affixes, callback) {
  var dirPath = generateName(affixes, 'd-');
  fs.mkdir(dirPath, 0700, function(err) {
    if (!err) {
      deleteDirOnExit(dirPath);
    }
    if (callback) {
      callback(err, dirPath);
    }
  });
}

function mkdirSync(affixes) {
  var dirPath = generateName(affixes, 'd-');
  fs.mkdirSync(dirPath, 0700);
  deleteDirOnExit(dirPath);
  return dirPath;
}

/* FILES */

function open(affixes, callback) {
  var filePath = generateName(affixes, 'f-');
  fs.open(filePath, RDWR_EXCL, 0600, function(err, fd) {
    if (!err) {
      deleteFileOnExit(filePath);
    }
    if (callback) {
      callback(err, {path: filePath, fd: fd});
    }
  });
}

function openSync(affixes) {
  var filePath = generateName(affixes, 'f-');
  var fd = fs.openSync(filePath, RDWR_EXCL, 0600);
  deleteFileOnExit(filePath);
  return {path: filePath, fd: fd};
}

function createWriteStream(affixes) {
  var filePath = generateName(affixes, 's-');
  var stream = fs.createWriteStream(filePath, {flags: RDWR_EXCL, mode: 0600});
  deleteFileOnExit(filePath);
  return stream;
}

/* EXPORTS */
// Settings
exports.dir               = path.resolve(osTmpdir());
exports.track             = track;
// Functions
exports.mkdir             = mkdir;
exports.mkdirSync         = mkdirSync;
exports.open              = open;
exports.openSync          = openSync;
exports.path              = generateName;
exports.cleanup           = cleanup;
exports.cleanupSync       = cleanupSync;
exports.createWriteStream = createWriteStream;


/***/ }),
/* 425 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Tmp
 *
 * Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu>
 *
 * MIT Licensed
 */

/*
 * Module dependencies.
 */
const fs = __webpack_require__(1);
const path = __webpack_require__(0);
const crypto = __webpack_require__(7);
const osTmpDir = __webpack_require__(387);
const _c = process.binding('constants');

/*
 * The working inner variables.
 */
const
  /**
   * The temporary directory.
   * @type {string}
   */
  tmpDir = osTmpDir(),

  // the random characters to choose from
  RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',

  TEMPLATE_PATTERN = /XXXXXX/,

  DEFAULT_TRIES = 3,

  CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR),

  EBADF = _c.EBADF || _c.os.errno.EBADF,
  ENOENT = _c.ENOENT || _c.os.errno.ENOENT,

  DIR_MODE = 448 /* 0o700 */,
  FILE_MODE = 384 /* 0o600 */,

  // this will hold the objects need to be removed on exit
  _removeObjects = [];

var
  _gracefulCleanup = false,
  _uncaughtException = false;

/**
 * Random name generator based on crypto.
 * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript
 *
 * @param {number} howMany
 * @returns {string} the generated random name
 * @private
 */
function _randomChars(howMany) {
  var
    value = [],
    rnd = null;

  // make sure that we do not fail because we ran out of entropy
  try {
    rnd = crypto.randomBytes(howMany);
  } catch (e) {
    rnd = crypto.pseudoRandomBytes(howMany);
  }

  for (var i = 0; i < howMany; i++) {
    value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]);
  }

  return value.join('');
}

/**
 * Checks whether the `obj` parameter is defined or not.
 *
 * @param {Object} obj
 * @returns {boolean} true if the object is undefined
 * @private
 */
function _isUndefined(obj) {
  return typeof obj === 'undefined';
}

/**
 * Parses the function arguments.
 *
 * This function helps to have optional arguments.
 *
 * @param {(Options|Function)} options
 * @param {Function} callback
 * @returns {Array} parsed arguments
 * @private
 */
function _parseArguments(options, callback) {
  if (typeof options == 'function') {
    return [callback || {}, options];
  }

  if (_isUndefined(options)) {
    return [{}, callback];
  }

  return [options, callback];
}

/**
 * Generates a new temporary name.
 *
 * @param {Object} opts
 * @returns {string} the new random name according to opts
 * @private
 */
function _generateTmpName(opts) {
  if (opts.name) {
    return path.join(opts.dir || tmpDir, opts.name);
  }

  // mkstemps like template
  if (opts.template) {
    return opts.template.replace(TEMPLATE_PATTERN, _randomChars(6));
  }

  // prefix and postfix
  const name = [
    opts.prefix || 'tmp-',
    process.pid,
    _randomChars(12),
    opts.postfix || ''
  ].join('');

  return path.join(opts.dir || tmpDir, name);
}

/**
 * Gets a temporary file name.
 *
 * @param {(Options|tmpNameCallback)} options options or callback
 * @param {?tmpNameCallback} callback the callback function
 */
function tmpName(options, callback) {
  var
    args = _parseArguments(options, callback),
    opts = args[0],
    cb = args[1],
    tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES;

  if (isNaN(tries) || tries < 0)
    return cb(new Error('Invalid tries'));

  if (opts.template && !opts.template.match(TEMPLATE_PATTERN))
    return cb(new Error('Invalid template provided'));

  (function _getUniqueName() {
    const name = _generateTmpName(opts);

    // check whether the path exists then retry if needed
    fs.stat(name, function (err) {
      if (!err) {
        if (tries-- > 0) return _getUniqueName();

        return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));
      }

      cb(null, name);
    });
  }());
}

/**
 * Synchronous version of tmpName.
 *
 * @param {Object} options
 * @returns {string} the generated random name
 * @throws {Error} if the options are invalid or could not generate a filename
 */
function tmpNameSync(options) {
  var
    args = _parseArguments(options),
    opts = args[0],
    tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES;

  if (isNaN(tries) || tries < 0)
    throw new Error('Invalid tries');

  if (opts.template && !opts.template.match(TEMPLATE_PATTERN))
    throw new Error('Invalid template provided');

  do {
    const name = _generateTmpName(opts);
    try {
      fs.statSync(name);
    } catch (e) {
      return name;
    }
  } while (tries-- > 0);

  throw new Error('Could not get a unique tmp filename, max tries reached');
}

/**
 * Creates and opens a temporary file.
 *
 * @param {(Options|fileCallback)} options the config options or the callback function
 * @param {?fileCallback} callback
 */
function file(options, callback) {
  var
    args = _parseArguments(options, callback),
    opts = args[0],
    cb = args[1];

  opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix;

  // gets a temporary filename
  tmpName(opts, function _tmpNameCreated(err, name) {
    if (err) return cb(err);

    // create and open the file
    fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) {
      if (err) return cb(err);

      if (opts.discardDescriptor) {
        return fs.close(fd, function _discardCallback(err) {
          if (err) {
            // Low probability, and the file exists, so this could be
            // ignored.  If it isn't we certainly need to unlink the
            // file, and if that fails too its error is more
            // important.
            try {
              fs.unlinkSync(name);
            } catch (e) {
              if (!isENOENT(e)) {
                err = e;
              }
            }
            return cb(err);
          }
          cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts));
        });
      }
      if (opts.detachDescriptor) {
        return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts));
      }
      cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts));
    });
  });
}

/**
 * Synchronous version of file.
 *
 * @param {Options} options
 * @returns {FileSyncObject} object consists of name, fd and removeCallback
 * @throws {Error} if cannot create a file
 */
function fileSync(options) {
  var
    args = _parseArguments(options),
    opts = args[0];

  opts.postfix = opts.postfix || '.tmp';

  const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;
  const name = tmpNameSync(opts);
  var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
  if (opts.discardDescriptor) {
    fs.closeSync(fd); 
    fd = undefined;
  }

  return {
    name: name,
    fd: fd,
    removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts)
  };
}

/**
 * Removes files and folders in a directory recursively.
 *
 * @param {string} root
 * @private
 */
function _rmdirRecursiveSync(root) {
  const dirs = [root];

  do {
    var
      dir = dirs.pop(),
      deferred = false,
      files = fs.readdirSync(dir);

    for (var i = 0, length = files.length; i < length; i++) {
      var
        file = path.join(dir, files[i]),
        stat = fs.lstatSync(file); // lstat so we don't recurse into symlinked directories

      if (stat.isDirectory()) {
        if (!deferred) {
          deferred = true;
          dirs.push(dir);
        }
        dirs.push(file);
      } else {
        fs.unlinkSync(file);
      }
    }

    if (!deferred) {
      fs.rmdirSync(dir);
    }
  } while (dirs.length !== 0);
}

/**
 * Creates a temporary directory.
 *
 * @param {(Options|dirCallback)} options the options or the callback function
 * @param {?dirCallback} callback
 */
function dir(options, callback) {
  var
    args = _parseArguments(options, callback),
    opts = args[0],
    cb = args[1];

  // gets a temporary filename
  tmpName(opts, function _tmpNameCreated(err, name) {
    if (err) return cb(err);

    // create the directory
    fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) {
      if (err) return cb(err);

      cb(null, name, _prepareTmpDirRemoveCallback(name, opts));
    });
  });
}

/**
 * Synchronous version of dir.
 *
 * @param {Options} options
 * @returns {DirSyncObject} object consists of name and removeCallback
 * @throws {Error} if it cannot create a directory
 */
function dirSync(options) {
  var
    args = _parseArguments(options),
    opts = args[0];

  const name = tmpNameSync(opts);
  fs.mkdirSync(name, opts.mode || DIR_MODE);

  return {
    name: name,
    removeCallback: _prepareTmpDirRemoveCallback(name, opts)
  };
}

/**
 * Prepares the callback for removal of the temporary file.
 *
 * @param {string} name the path of the file
 * @param {number} fd file descriptor
 * @param {Object} opts
 * @returns {fileCallback}
 * @private
 */
function _prepareTmpFileRemoveCallback(name, fd, opts) {
  const removeCallback = _prepareRemoveCallback(function _removeCallback(fdPath) {
    try {
      if (0 <= fdPath[0]) {
        fs.closeSync(fdPath[0]);
      }
    }
    catch (e) {
      // under some node/windows related circumstances, a temporary file
      // may have not be created as expected or the file was already closed
      // by the user, in which case we will simply ignore the error
      if (!isEBADF(e) && !isENOENT(e)) {
        // reraise any unanticipated error
        throw e;
      }
    }
    try {
      fs.unlinkSync(fdPath[1]);
    }
    catch (e) {
      if (!isENOENT(e)) {
        // reraise any unanticipated error
        throw e;
      }
    }
  }, [fd, name]);

  if (!opts.keep) {
    _removeObjects.unshift(removeCallback);
  }

  return removeCallback;
}

/**
 * Prepares the callback for removal of the temporary directory.
 *
 * @param {string} name
 * @param {Object} opts
 * @returns {Function} the callback
 * @private
 */
function _prepareTmpDirRemoveCallback(name, opts) {
  const removeFunction = opts.unsafeCleanup ? _rmdirRecursiveSync : fs.rmdirSync.bind(fs);
  const removeCallback = _prepareRemoveCallback(removeFunction, name);

  if (!opts.keep) {
    _removeObjects.unshift(removeCallback);
  }

  return removeCallback;
}

/**
 * Creates a guarded function wrapping the removeFunction call.
 *
 * @param {Function} removeFunction
 * @param {Object} arg
 * @returns {Function}
 * @private
 */
function _prepareRemoveCallback(removeFunction, arg) {
  var called = false;

  return function _cleanupCallback(next) {
    if (!called) {
      const index = _removeObjects.indexOf(_cleanupCallback);
      if (index >= 0) {
        _removeObjects.splice(index, 1);
      }

      called = true;
      removeFunction(arg);
    }

    if (next) next(null);
  };
}

/**
 * The garbage collector.
 *
 * @private
 */
function _garbageCollector() {
  if (_uncaughtException && !_gracefulCleanup) {
    return;
  }

  // the function being called removes itself from _removeObjects,
  // loop until _removeObjects is empty
  while (_removeObjects.length) {
    try {
      _removeObjects[0].call(null);
    } catch (e) {
      // already removed?
    }
  }
}

/**
 * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows.
 */
function isEBADF(error) {
  return isExpectedError(error, -EBADF, 'EBADF');
}

/**
 * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows.
 */
function isENOENT(error) {
  return isExpectedError(error, -ENOENT, 'ENOENT');
}

/**
 * Helper to determine whether the expected error code matches the actual code and errno,
 * which will differ between the supported node versions.
 *
 * - Node >= 7.0:
 *   error.code {String}
 *   error.errno {String|Number} any numerical value will be negated
 *
 * - Node >= 6.0 < 7.0:
 *   error.code {String}
 *   error.errno {Number} negated
 *
 * - Node >= 4.0 < 6.0: introduces SystemError
 *   error.code {String}
 *   error.errno {Number} negated
 *
 * - Node >= 0.10 < 4.0:
 *   error.code {Number} negated
 *   error.errno n/a
 */
function isExpectedError(error, code, errno) {
  return error.code == code || error.code == errno;
}

/**
 * Sets the graceful cleanup.
 *
 * Also removes the created files and directories when an uncaught exception occurs.
 */
function setGracefulCleanup() {
  _gracefulCleanup = true;
}

const version = process.versions.node.split('.').map(function (value) {
  return parseInt(value, 10);
});

if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) {
  process.addListener('uncaughtException', function _uncaughtExceptionThrown(err) {
    _uncaughtException = true;
    _garbageCollector();

    throw err;
  });
}

process.addListener('exit', function _exit(code) {
  if (code) _uncaughtException = true;
  _garbageCollector();
});

/**
 * Configuration options.
 *
 * @typedef {Object} Options
 * @property {?number} tries the number of tries before give up the name generation
 * @property {?string} template the "mkstemp" like filename template
 * @property {?string} name fix name
 * @property {?string} dir the tmp directory to use
 * @property {?string} prefix prefix for the generated name
 * @property {?string} postfix postfix for the generated name
 */

/**
 * @typedef {Object} FileSyncObject
 * @property {string} name the name of the file
 * @property {string} fd the file descriptor
 * @property {fileCallback} removeCallback the callback function to remove the file
 */

/**
 * @typedef {Object} DirSyncObject
 * @property {string} name the name of the directory
 * @property {fileCallback} removeCallback the callback function to remove the directory
 */

/**
 * @callback tmpNameCallback
 * @param {?Error} err the error object if anything goes wrong
 * @param {string} name the temporary file name
 */

/**
 * @callback fileCallback
 * @param {?Error} err the error object if anything goes wrong
 * @param {string} name the temporary file name
 * @param {number} fd the file descriptor
 * @param {cleanupCallback} fn the cleanup callback function
 */

/**
 * @callback dirCallback
 * @param {?Error} err the error object if anything goes wrong
 * @param {string} name the temporary file name
 * @param {cleanupCallback} fn the cleanup callback function
 */

/**
 * Removes the temporary created file or directory.
 *
 * @callback cleanupCallback
 * @param {simpleCallback} [next] function to call after entry was removed
 */

/**
 * Callback function for function composition.
 * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57}
 *
 * @callback simpleCallback
 */

// exporting all the needed methods
module.exports.tmpdir = tmpDir;

module.exports.dir = dir;
module.exports.dirSync = dirSync;

module.exports.file = file;
module.exports.fileSync = fileSync;

module.exports.tmpName = tmpName;
module.exports.tmpNameSync = tmpNameSync;

module.exports.setGracefulCleanup = setGracefulCleanup;


/***/ }),
/* 426 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * Copyright (c) 2015, Salesforce.com, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Salesforce.com nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * "A request-path path-matches a given cookie-path if at least one of the
 * following conditions holds:"
 */
function pathMatch (reqPath, cookiePath) {
  // "o  The cookie-path and the request-path are identical."
  if (cookiePath === reqPath) {
    return true;
  }

  var idx = reqPath.indexOf(cookiePath);
  if (idx === 0) {
    // "o  The cookie-path is a prefix of the request-path, and the last
    // character of the cookie-path is %x2F ("/")."
    if (cookiePath.substr(-1) === "/") {
      return true;
    }

    // " o  The cookie-path is a prefix of the request-path, and the first
    // character of the request-path that is not included in the cookie- path
    // is a %x2F ("/") character."
    if (reqPath.substr(cookiePath.length, 1) === "/") {
      return true;
    }
  }

  return false;
}

exports.pathMatch = pathMatch;


/***/ }),
/* 427 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * Copyright (c) 2015, Salesforce.com, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Salesforce.com nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

var pubsuffix = __webpack_require__(428);

// Gives the permutation of all possible domainMatch()es of a given domain. The
// array is in shortest-to-longest order.  Handy for indexing.
function permuteDomain (domain) {
  var pubSuf = pubsuffix.getPublicSuffix(domain);
  if (!pubSuf) {
    return null;
  }
  if (pubSuf == domain) {
    return [domain];
  }

  var prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
  var parts = prefix.split('.').reverse();
  var cur = pubSuf;
  var permutations = [cur];
  while (parts.length) {
    cur = parts.shift() + '.' + cur;
    permutations.push(cur);
  }
  return permutations;
}

exports.permuteDomain = permuteDomain;


/***/ }),
/* 428 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/****************************************************
 * AUTOMATICALLY GENERATED by generate-pubsuffix.js *
 *                  DO NOT EDIT!                    *
 ****************************************************/



var punycode = __webpack_require__(472);

module.exports.getPublicSuffix = function getPublicSuffix(domain) {
  /*!
   * Copyright (c) 2015, Salesforce.com, Inc.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of source code must retain the above copyright notice,
   * this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   * this list of conditions and the following disclaimer in the documentation
   * and/or other materials provided with the distribution.
   *
   * 3. Neither the name of Salesforce.com nor the names of its contributors may
   * be used to endorse or promote products derived from this software without
   * specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   */
  if (!domain) {
    return null;
  }
  if (domain.match(/^\./)) {
    return null;
  }
  var asciiDomain = punycode.toASCII(domain);
  var converted = false;
  if (asciiDomain !== domain) {
    domain = asciiDomain;
    converted = true;
  }
  if (index[domain]) {
    return null;
  }

  domain = domain.toLowerCase();
  var parts = domain.split('.').reverse();

  var suffix = '';
  var suffixLen = 0;
  for (var i=0; i<parts.length; i++) {
    var part = parts[i];
    var starstr = '*'+suffix;
    var partstr = part+suffix;

    if (index[starstr]) { // star rule matches
      suffixLen = i+1;
      if (index[partstr] === false) { // exception rule matches (NB: false, not undefined)
        suffixLen--;
      }
    } else if (index[partstr]) { // exact match, not exception
      suffixLen = i+1;
    }

    suffix = '.'+partstr;
  }

  if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp');
    return null;
  }

  suffixLen = suffixLen || 1;
  if (parts.length > suffixLen) {
    var publicSuffix = parts.slice(0,suffixLen+1).reverse().join('.');
    return converted ? punycode.toUnicode(publicSuffix) : publicSuffix;
  }

  return null;
};

// The following generated structure is used under the MPL version 2.0
// See public-suffix.txt for more information

var index = module.exports.index = Object.freeze(
{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"ar":true,"com.ar":true,"edu.ar":true,"gob.ar":true,"gov.ar":true,"int.ar":true,"mil.ar":true,"musica.ar":true,"net.ar":true,"org.ar":true,"tur.ar":true,"arpa":true,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"au":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"com.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"net.ba":true,"org.ba":true,"bb":true,"biz.bb":true,"co.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"tv.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"web.bo":true,"academia.bo":true,"agro.bo":true,"arte.bo":true,"blog.bo":true,"bolivia.bo":true,"ciencia.bo":true,"cooperativa.bo":true,"democracia.bo":true,"deporte.bo":true,"ecologia.bo":true,"economia.bo":true,"empresa.bo":true,"indigena.bo":true,"industria.bo":true,"info.bo":true,"medicina.bo":true,"movimiento.bo":true,"musica.bo":true,"natural.bo":true,"nombre.bo":true,"noticias.bo":true,"patria.bo":true,"politica.bo":true,"profesional.bo":true,"plurinacional.bo":true,"pueblo.bo":true,"revista.bo":true,"salud.bo":true,"tecnologia.bo":true,"tksat.bo":true,"transporte.bo":true,"wiki.bo":true,"br":true,"9guacu.br":true,"abc.br":true,"adm.br":true,"adv.br":true,"agr.br":true,"aju.br":true,"am.br":true,"anani.br":true,"aparecida.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"belem.br":true,"bhz.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"boavista.br":true,"bsb.br":true,"campinagrande.br":true,"campinas.br":true,"caxias.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"contagem.br":true,"coop.br":true,"cri.br":true,"cuiaba.br":true,"curitiba.br":true,"def.br":true,"ecn.br":true,"eco.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"feira.br":true,"flog.br":true,"floripa.br":true,"fm.br":true,"fnd.br":true,"fortal.br":true,"fot.br":true,"foz.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"goiania.br":true,"gov.br":true,"ac.gov.br":true,"al.gov.br":true,"am.gov.br":true,"ap.gov.br":true,"ba.gov.br":true,"ce.gov.br":true,"df.gov.br":true,"es.gov.br":true,"go.gov.br":true,"ma.gov.br":true,"mg.gov.br":true,"ms.gov.br":true,"mt.gov.br":true,"pa.gov.br":true,"pb.gov.br":true,"pe.gov.br":true,"pi.gov.br":true,"pr.gov.br":true,"rj.gov.br":true,"rn.gov.br":true,"ro.gov.br":true,"rr.gov.br":true,"rs.gov.br":true,"sc.gov.br":true,"se.gov.br":true,"sp.gov.br":true,"to.gov.br":true,"gru.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jab.br":true,"jampa.br":true,"jdf.br":true,"joinville.br":true,"jor.br":true,"jus.br":true,"leg.br":true,"lel.br":true,"londrina.br":true,"macapa.br":true,"maceio.br":true,"manaus.br":true,"maringa.br":true,"mat.br":true,"med.br":true,"mil.br":true,"morena.br":true,"mp.br":true,"mus.br":true,"natal.br":true,"net.br":true,"niteroi.br":true,"*.nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"osasco.br":true,"palmas.br":true,"poa.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"pvh.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"recife.br":true,"ribeirao.br":true,"rio.br":true,"riobranco.br":true,"riopreto.br":true,"salvador.br":true,"sampa.br":true,"santamaria.br":true,"santoandre.br":true,"saobernardo.br":true,"saogonca.br":true,"sjc.br":true,"slg.br":true,"slz.br":true,"sorocaba.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"the.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"udi.br":true,"vet.br":true,"vix.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bv":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"co.cm":true,"com.cm":true,"gov.cm":true,"net.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cw":true,"com.cw":true,"edu.cw":true,"net.cw":true,"org.cw":true,"cx":true,"gov.cx":true,"cy":true,"ac.cy":true,"biz.cy":true,"com.cy":true,"ekloges.cy":true,"gov.cy":true,"ltd.cy":true,"name.cy":true,"net.cy":true,"org.cy":true,"parliament.cy":true,"press.cy":true,"pro.cy":true,"tm.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"et":true,"com.et":true,"gov.et":true,"org.et":true,"edu.et":true,"biz.et":true,"name.et":true,"info.et":true,"net.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gb":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"net.gg":true,"org.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"co.gl":true,"com.gl":true,"edu.gl":true,"net.gl":true,"org.gl":true,"gm":true,"gn":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"gt":true,"com.gt":true,"edu.gt":true,"gob.gt":true,"ind.gt":true,"mil.gt":true,"net.gt":true,"org.gt":true,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"edu.gy":true,"gov.gy":true,"net.gy":true,"org.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"biz.id":true,"co.id":true,"desa.id":true,"go.id":true,"mil.id":true,"my.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"il":true,"ac.il":true,"co.il":true,"gov.il":true,"idf.il":true,"k12.il":true,"muni.il":true,"net.il":true,"org.il":true,"im":true,"ac.im":true,"co.im":true,"com.im":true,"ltd.co.im":true,"net.im":true,"org.im":true,"plc.co.im":true,"tt.im":true,"tv.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"abr.it":true,"abruzzo.it":true,"aosta-valley.it":true,"aostavalley.it":true,"bas.it":true,"basilicata.it":true,"cal.it":true,"calabria.it":true,"cam.it":true,"campania.it":true,"emilia-romagna.it":true,"emiliaromagna.it":true,"emr.it":true,"friuli-v-giulia.it":true,"friuli-ve-giulia.it":true,"friuli-vegiulia.it":true,"friuli-venezia-giulia.it":true,"friuli-veneziagiulia.it":true,"friuli-vgiulia.it":true,"friuliv-giulia.it":true,"friulive-giulia.it":true,"friulivegiulia.it":true,"friulivenezia-giulia.it":true,"friuliveneziagiulia.it":true,"friulivgiulia.it":true,"fvg.it":true,"laz.it":true,"lazio.it":true,"lig.it":true,"liguria.it":true,"lom.it":true,"lombardia.it":true,"lombardy.it":true,"lucania.it":true,"mar.it":true,"marche.it":true,"mol.it":true,"molise.it":true,"piedmont.it":true,"piemonte.it":true,"pmn.it":true,"pug.it":true,"puglia.it":true,"sar.it":true,"sardegna.it":true,"sardinia.it":true,"sic.it":true,"sicilia.it":true,"sicily.it":true,"taa.it":true,"tos.it":true,"toscana.it":true,"trentino-a-adige.it":true,"trentino-aadige.it":true,"trentino-alto-adige.it":true,"trentino-altoadige.it":true,"trentino-s-tirol.it":true,"trentino-stirol.it":true,"trentino-sud-tirol.it":true,"trentino-sudtirol.it":true,"trentino-sued-tirol.it":true,"trentino-suedtirol.it":true,"trentinoa-adige.it":true,"trentinoaadige.it":true,"trentinoalto-adige.it":true,"trentinoaltoadige.it":true,"trentinos-tirol.it":true,"trentinostirol.it":true,"trentinosud-tirol.it":true,"trentinosudtirol.it":true,"trentinosued-tirol.it":true,"trentinosuedtirol.it":true,"tuscany.it":true,"umb.it":true,"umbria.it":true,"val-d-aosta.it":true,"val-daosta.it":true,"vald-aosta.it":true,"valdaosta.it":true,"valle-aosta.it":true,"valle-d-aosta.it":true,"valle-daosta.it":true,"valleaosta.it":true,"valled-aosta.it":true,"valledaosta.it":true,"vallee-aoste.it":true,"valleeaoste.it":true,"vao.it":true,"vda.it":true,"ven.it":true,"veneto.it":true,"ag.it":true,"agrigento.it":true,"al.it":true,"alessandria.it":true,"alto-adige.it":true,"altoadige.it":true,"an.it":true,"ancona.it":true,"andria-barletta-trani.it":true,"andria-trani-barletta.it":true,"andriabarlettatrani.it":true,"andriatranibarletta.it":true,"ao.it":true,"aosta.it":true,"aoste.it":true,"ap.it":true,"aq.it":true,"aquila.it":true,"ar.it":true,"arezzo.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"asti.it":true,"at.it":true,"av.it":true,"avellino.it":true,"ba.it":true,"balsan.it":true,"bari.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"belluno.it":true,"benevento.it":true,"bergamo.it":true,"bg.it":true,"bi.it":true,"biella.it":true,"bl.it":true,"bn.it":true,"bo.it":true,"bologna.it":true,"bolzano.it":true,"bozen.it":true,"br.it":true,"brescia.it":true,"brindisi.it":true,"bs.it":true,"bt.it":true,"bz.it":true,"ca.it":true,"cagliari.it":true,"caltanissetta.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"campobasso.it":true,"carbonia-iglesias.it":true,"carboniaiglesias.it":true,"carrara-massa.it":true,"carraramassa.it":true,"caserta.it":true,"catania.it":true,"catanzaro.it":true,"cb.it":true,"ce.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"ch.it":true,"chieti.it":true,"ci.it":true,"cl.it":true,"cn.it":true,"co.it":true,"como.it":true,"cosenza.it":true,"cr.it":true,"cremona.it":true,"crotone.it":true,"cs.it":true,"ct.it":true,"cuneo.it":true,"cz.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"en.it":true,"enna.it":true,"fc.it":true,"fe.it":true,"fermo.it":true,"ferrara.it":true,"fg.it":true,"fi.it":true,"firenze.it":true,"florence.it":true,"fm.it":true,"foggia.it":true,"forli-cesena.it":true,"forlicesena.it":true,"fr.it":true,"frosinone.it":true,"ge.it":true,"genoa.it":true,"genova.it":true,"go.it":true,"gorizia.it":true,"gr.it":true,"grosseto.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"im.it":true,"imperia.it":true,"is.it":true,"isernia.it":true,"kr.it":true,"la-spezia.it":true,"laquila.it":true,"laspezia.it":true,"latina.it":true,"lc.it":true,"le.it":true,"lecce.it":true,"lecco.it":true,"li.it":true,"livorno.it":true,"lo.it":true,"lodi.it":true,"lt.it":true,"lu.it":true,"lucca.it":true,"macerata.it":true,"mantova.it":true,"massa-carrara.it":true,"massacarrara.it":true,"matera.it":true,"mb.it":true,"mc.it":true,"me.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"messina.it":true,"mi.it":true,"milan.it":true,"milano.it":true,"mn.it":true,"mo.it":true,"modena.it":true,"monza-brianza.it":true,"monza-e-della-brianza.it":true,"monza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"ms.it":true,"mt.it":true,"na.it":true,"naples.it":true,"napoli.it":true,"no.it":true,"novara.it":true,"nu.it":true,"nuoro.it":true,"og.it":true,"ogliastra.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"or.it":true,"oristano.it":true,"ot.it":true,"pa.it":true,"padova.it":true,"padua.it":true,"palermo.it":true,"parma.it":true,"pavia.it":true,"pc.it":true,"pd.it":true,"pe.it":true,"perugia.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"pescara.it":true,"pg.it":true,"pi.it":true,"piacenza.it":true,"pisa.it":true,"pistoia.it":true,"pn.it":true,"po.it":true,"pordenone.it":true,"potenza.it":true,"pr.it":true,"prato.it":true,"pt.it":true,"pu.it":true,"pv.it":true,"pz.it":true,"ra.it":true,"ragusa.it":true,"ravenna.it":true,"rc.it":true,"re.it":true,"reggio-calabria.it":true,"reggio-emilia.it":true,"reggiocalabria.it":true,"reggioemilia.it":true,"rg.it":true,"ri.it":true,"rieti.it":true,"rimini.it":true,"rm.it":true,"rn.it":true,"ro.it":true,"roma.it":true,"rome.it":true,"rovigo.it":true,"sa.it":true,"salerno.it":true,"sassari.it":true,"savona.it":true,"si.it":true,"siena.it":true,"siracusa.it":true,"so.it":true,"sondrio.it":true,"sp.it":true,"sr.it":true,"ss.it":true,"suedtirol.it":true,"sv.it":true,"ta.it":true,"taranto.it":true,"te.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"teramo.it":true,"terni.it":true,"tn.it":true,"to.it":true,"torino.it":true,"tp.it":true,"tr.it":true,"trani-andria-barletta.it":true,"trani-barletta-andria.it":true,"traniandriabarletta.it":true,"tranibarlettaandria.it":true,"trapani.it":true,"trentino.it":true,"trento.it":true,"treviso.it":true,"trieste.it":true,"ts.it":true,"turin.it":true,"tv.it":true,"ud.it":true,"udine.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"va.it":true,"varese.it":true,"vb.it":true,"vc.it":true,"ve.it":true,"venezia.it":true,"venice.it":true,"verbania.it":true,"vercelli.it":true,"verona.it":true,"vi.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vicenza.it":true,"viterbo.it":true,"vr.it":true,"vs.it":true,"vt.it":true,"vv.it":true,"je":true,"co.je":true,"net.je":true,"org.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"aichi.jp":true,"akita.jp":true,"aomori.jp":true,"chiba.jp":true,"ehime.jp":true,"fukui.jp":true,"fukuoka.jp":true,"fukushima.jp":true,"gifu.jp":true,"gunma.jp":true,"hiroshima.jp":true,"hokkaido.jp":true,"hyogo.jp":true,"ibaraki.jp":true,"ishikawa.jp":true,"iwate.jp":true,"kagawa.jp":true,"kagoshima.jp":true,"kanagawa.jp":true,"kochi.jp":true,"kumamoto.jp":true,"kyoto.jp":true,"mie.jp":true,"miyagi.jp":true,"miyazaki.jp":true,"nagano.jp":true,"nagasaki.jp":true,"nara.jp":true,"niigata.jp":true,"oita.jp":true,"okayama.jp":true,"okinawa.jp":true,"osaka.jp":true,"saga.jp":true,"saitama.jp":true,"shiga.jp":true,"shimane.jp":true,"shizuoka.jp":true,"tochigi.jp":true,"tokushima.jp":true,"tokyo.jp":true,"tottori.jp":true,"toyama.jp":true,"wakayama.jp":true,"yamagata.jp":true,"yamaguchi.jp":true,"yamanashi.jp":true,"xn--4pvxs.jp":true,"xn--vgu402c.jp":true,"xn--c3s14m.jp":true,"xn--f6qx53a.jp":true,"xn--8pvr4u.jp":true,"xn--uist22h.jp":true,"xn--djrs72d6uy.jp":true,"xn--mkru45i.jp":true,"xn--0trq7p7nn.jp":true,"xn--8ltr62k.jp":true,"xn--2m4a15e.jp":true,"xn--efvn9s.jp":true,"xn--32vp30h.jp":true,"xn--4it797k.jp":true,"xn--1lqs71d.jp":true,"xn--5rtp49c.jp":true,"xn--5js045d.jp":true,"xn--ehqz56n.jp":true,"xn--1lqs03n.jp":true,"xn--qqqt11m.jp":true,"xn--kbrq7o.jp":true,"xn--pssu33l.jp":true,"xn--ntsq17g.jp":true,"xn--uisz3g.jp":true,"xn--6btw5a.jp":true,"xn--1ctwo.jp":true,"xn--6orx2r.jp":true,"xn--rht61e.jp":true,"xn--rht27z.jp":true,"xn--djty4k.jp":true,"xn--nit225k.jp":true,"xn--rht3d.jp":true,"xn--klty5x.jp":true,"xn--kltx9a.jp":true,"xn--kltp7d.jp":true,"xn--uuwu58a.jp":true,"xn--zbx025d.jp":true,"xn--ntso0iqx3a.jp":true,"xn--elqq16h.jp":true,"xn--4it168d.jp":true,"xn--klt787d.jp":true,"xn--rny31h.jp":true,"xn--7t0a264c.jp":true,"xn--5rtq34k.jp":true,"xn--k7yn95e.jp":true,"xn--tor131o.jp":true,"xn--d5qv7z876c.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.nagoya.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.yokohama.jp":true,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.nagoya.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.yokohama.jp":false,"aisai.aichi.jp":true,"ama.aichi.jp":true,"anjo.aichi.jp":true,"asuke.aichi.jp":true,"chiryu.aichi.jp":true,"chita.aichi.jp":true,"fuso.aichi.jp":true,"gamagori.aichi.jp":true,"handa.aichi.jp":true,"hazu.aichi.jp":true,"hekinan.aichi.jp":true,"higashiura.aichi.jp":true,"ichinomiya.aichi.jp":true,"inazawa.aichi.jp":true,"inuyama.aichi.jp":true,"isshiki.aichi.jp":true,"iwakura.aichi.jp":true,"kanie.aichi.jp":true,"kariya.aichi.jp":true,"kasugai.aichi.jp":true,"kira.aichi.jp":true,"kiyosu.aichi.jp":true,"komaki.aichi.jp":true,"konan.aichi.jp":true,"kota.aichi.jp":true,"mihama.aichi.jp":true,"miyoshi.aichi.jp":true,"nishio.aichi.jp":true,"nisshin.aichi.jp":true,"obu.aichi.jp":true,"oguchi.aichi.jp":true,"oharu.aichi.jp":true,"okazaki.aichi.jp":true,"owariasahi.aichi.jp":true,"seto.aichi.jp":true,"shikatsu.aichi.jp":true,"shinshiro.aichi.jp":true,"shitara.aichi.jp":true,"tahara.aichi.jp":true,"takahama.aichi.jp":true,"tobishima.aichi.jp":true,"toei.aichi.jp":true,"togo.aichi.jp":true,"tokai.aichi.jp":true,"tokoname.aichi.jp":true,"toyoake.aichi.jp":true,"toyohashi.aichi.jp":true,"toyokawa.aichi.jp":true,"toyone.aichi.jp":true,"toyota.aichi.jp":true,"tsushima.aichi.jp":true,"yatomi.aichi.jp":true,"akita.akita.jp":true,"daisen.akita.jp":true,"fujisato.akita.jp":true,"gojome.akita.jp":true,"hachirogata.akita.jp":true,"happou.akita.jp":true,"higashinaruse.akita.jp":true,"honjo.akita.jp":true,"honjyo.akita.jp":true,"ikawa.akita.jp":true,"kamikoani.akita.jp":true,"kamioka.akita.jp":true,"katagami.akita.jp":true,"kazuno.akita.jp":true,"kitaakita.akita.jp":true,"kosaka.akita.jp":true,"kyowa.akita.jp":true,"misato.akita.jp":true,"mitane.akita.jp":true,"moriyoshi.akita.jp":true,"nikaho.akita.jp":true,"noshiro.akita.jp":true,"odate.akita.jp":true,"oga.akita.jp":true,"ogata.akita.jp":true,"semboku.akita.jp":true,"yokote.akita.jp":true,"yurihonjo.akita.jp":true,"aomori.aomori.jp":true,"gonohe.aomori.jp":true,"hachinohe.aomori.jp":true,"hashikami.aomori.jp":true,"hiranai.aomori.jp":true,"hirosaki.aomori.jp":true,"itayanagi.aomori.jp":true,"kuroishi.aomori.jp":true,"misawa.aomori.jp":true,"mutsu.aomori.jp":true,"nakadomari.aomori.jp":true,"noheji.aomori.jp":true,"oirase.aomori.jp":true,"owani.aomori.jp":true,"rokunohe.aomori.jp":true,"sannohe.aomori.jp":true,"shichinohe.aomori.jp":true,"shingo.aomori.jp":true,"takko.aomori.jp":true,"towada.aomori.jp":true,"tsugaru.aomori.jp":true,"tsuruta.aomori.jp":true,"abiko.chiba.jp":true,"asahi.chiba.jp":true,"chonan.chiba.jp":true,"chosei.chiba.jp":true,"choshi.chiba.jp":true,"chuo.chiba.jp":true,"funabashi.chiba.jp":true,"futtsu.chiba.jp":true,"hanamigawa.chiba.jp":true,"ichihara.chiba.jp":true,"ichikawa.chiba.jp":true,"ichinomiya.chiba.jp":true,"inzai.chiba.jp":true,"isumi.chiba.jp":true,"kamagaya.chiba.jp":true,"kamogawa.chiba.jp":true,"kashiwa.chiba.jp":true,"katori.chiba.jp":true,"katsuura.chiba.jp":true,"kimitsu.chiba.jp":true,"kisarazu.chiba.jp":true,"kozaki.chiba.jp":true,"kujukuri.chiba.jp":true,"kyonan.chiba.jp":true,"matsudo.chiba.jp":true,"midori.chiba.jp":true,"mihama.chiba.jp":true,"minamiboso.chiba.jp":true,"mobara.chiba.jp":true,"mutsuzawa.chiba.jp":true,"nagara.chiba.jp":true,"nagareyama.chiba.jp":true,"narashino.chiba.jp":true,"narita.chiba.jp":true,"noda.chiba.jp":true,"oamishirasato.chiba.jp":true,"omigawa.chiba.jp":true,"onjuku.chiba.jp":true,"otaki.chiba.jp":true,"sakae.chiba.jp":true,"sakura.chiba.jp":true,"shimofusa.chiba.jp":true,"shirako.chiba.jp":true,"shiroi.chiba.jp":true,"shisui.chiba.jp":true,"sodegaura.chiba.jp":true,"sosa.chiba.jp":true,"tako.chiba.jp":true,"tateyama.chiba.jp":true,"togane.chiba.jp":true,"tohnosho.chiba.jp":true,"tomisato.chiba.jp":true,"urayasu.chiba.jp":true,"yachimata.chiba.jp":true,"yachiyo.chiba.jp":true,"yokaichiba.chiba.jp":true,"yokoshibahikari.chiba.jp":true,"yotsukaido.chiba.jp":true,"ainan.ehime.jp":true,"honai.ehime.jp":true,"ikata.ehime.jp":true,"imabari.ehime.jp":true,"iyo.ehime.jp":true,"kamijima.ehime.jp":true,"kihoku.ehime.jp":true,"kumakogen.ehime.jp":true,"masaki.ehime.jp":true,"matsuno.ehime.jp":true,"matsuyama.ehime.jp":true,"namikata.ehime.jp":true,"niihama.ehime.jp":true,"ozu.ehime.jp":true,"saijo.ehime.jp":true,"seiyo.ehime.jp":true,"shikokuchuo.ehime.jp":true,"tobe.ehime.jp":true,"toon.ehime.jp":true,"uchiko.ehime.jp":true,"uwajima.ehime.jp":true,"yawatahama.ehime.jp":true,"echizen.fukui.jp":true,"eiheiji.fukui.jp":true,"fukui.fukui.jp":true,"ikeda.fukui.jp":true,"katsuyama.fukui.jp":true,"mihama.fukui.jp":true,"minamiechizen.fukui.jp":true,"obama.fukui.jp":true,"ohi.fukui.jp":true,"ono.fukui.jp":true,"sabae.fukui.jp":true,"sakai.fukui.jp":true,"takahama.fukui.jp":true,"tsuruga.fukui.jp":true,"wakasa.fukui.jp":true,"ashiya.fukuoka.jp":true,"buzen.fukuoka.jp":true,"chikugo.fukuoka.jp":true,"chikuho.fukuoka.jp":true,"chikujo.fukuoka.jp":true,"chikushino.fukuoka.jp":true,"chikuzen.fukuoka.jp":true,"chuo.fukuoka.jp":true,"dazaifu.fukuoka.jp":true,"fukuchi.fukuoka.jp":true,"hakata.fukuoka.jp":true,"higashi.fukuoka.jp":true,"hirokawa.fukuoka.jp":true,"hisayama.fukuoka.jp":true,"iizuka.fukuoka.jp":true,"inatsuki.fukuoka.jp":true,"kaho.fukuoka.jp":true,"kasuga.fukuoka.jp":true,"kasuya.fukuoka.jp":true,"kawara.fukuoka.jp":true,"keisen.fukuoka.jp":true,"koga.fukuoka.jp":true,"kurate.fukuoka.jp":true,"kurogi.fukuoka.jp":true,"kurume.fukuoka.jp":true,"minami.fukuoka.jp":true,"miyako.fukuoka.jp":true,"miyama.fukuoka.jp":true,"miyawaka.fukuoka.jp":true,"mizumaki.fukuoka.jp":true,"munakata.fukuoka.jp":true,"nakagawa.fukuoka.jp":true,"nakama.fukuoka.jp":true,"nishi.fukuoka.jp":true,"nogata.fukuoka.jp":true,"ogori.fukuoka.jp":true,"okagaki.fukuoka.jp":true,"okawa.fukuoka.jp":true,"oki.fukuoka.jp":true,"omuta.fukuoka.jp":true,"onga.fukuoka.jp":true,"onojo.fukuoka.jp":true,"oto.fukuoka.jp":true,"saigawa.fukuoka.jp":true,"sasaguri.fukuoka.jp":true,"shingu.fukuoka.jp":true,"shinyoshitomi.fukuoka.jp":true,"shonai.fukuoka.jp":true,"soeda.fukuoka.jp":true,"sue.fukuoka.jp":true,"tachiarai.fukuoka.jp":true,"tagawa.fukuoka.jp":true,"takata.fukuoka.jp":true,"toho.fukuoka.jp":true,"toyotsu.fukuoka.jp":true,"tsuiki.fukuoka.jp":true,"ukiha.fukuoka.jp":true,"umi.fukuoka.jp":true,"usui.fukuoka.jp":true,"yamada.fukuoka.jp":true,"yame.fukuoka.jp":true,"yanagawa.fukuoka.jp":true,"yukuhashi.fukuoka.jp":true,"aizubange.fukushima.jp":true,"aizumisato.fukushima.jp":true,"aizuwakamatsu.fukushima.jp":true,"asakawa.fukushima.jp":true,"bandai.fukushima.jp":true,"date.fukushima.jp":true,"fukushima.fukushima.jp":true,"furudono.fukushima.jp":true,"futaba.fukushima.jp":true,"hanawa.fukushima.jp":true,"higashi.fukushima.jp":true,"hirata.fukushima.jp":true,"hirono.fukushima.jp":true,"iitate.fukushima.jp":true,"inawashiro.fukushima.jp":true,"ishikawa.fukushima.jp":true,"iwaki.fukushima.jp":true,"izumizaki.fukushima.jp":true,"kagamiishi.fukushima.jp":true,"kaneyama.fukushima.jp":true,"kawamata.fukushima.jp":true,"kitakata.fukushima.jp":true,"kitashiobara.fukushima.jp":true,"koori.fukushima.jp":true,"koriyama.fukushima.jp":true,"kunimi.fukushima.jp":true,"miharu.fukushima.jp":true,"mishima.fukushima.jp":true,"namie.fukushima.jp":true,"nango.fukushima.jp":true,"nishiaizu.fukushima.jp":true,"nishigo.fukushima.jp":true,"okuma.fukushima.jp":true,"omotego.fukushima.jp":true,"ono.fukushima.jp":true,"otama.fukushima.jp":true,"samegawa.fukushima.jp":true,"shimogo.fukushima.jp":true,"shirakawa.fukushima.jp":true,"showa.fukushima.jp":true,"soma.fukushima.jp":true,"sukagawa.fukushima.jp":true,"taishin.fukushima.jp":true,"tamakawa.fukushima.jp":true,"tanagura.fukushima.jp":true,"tenei.fukushima.jp":true,"yabuki.fukushima.jp":true,"yamato.fukushima.jp":true,"yamatsuri.fukushima.jp":true,"yanaizu.fukushima.jp":true,"yugawa.fukushima.jp":true,"anpachi.gifu.jp":true,"ena.gifu.jp":true,"gifu.gifu.jp":true,"ginan.gifu.jp":true,"godo.gifu.jp":true,"gujo.gifu.jp":true,"hashima.gifu.jp":true,"hichiso.gifu.jp":true,"hida.gifu.jp":true,"higashishirakawa.gifu.jp":true,"ibigawa.gifu.jp":true,"ikeda.gifu.jp":true,"kakamigahara.gifu.jp":true,"kani.gifu.jp":true,"kasahara.gifu.jp":true,"kasamatsu.gifu.jp":true,"kawaue.gifu.jp":true,"kitagata.gifu.jp":true,"mino.gifu.jp":true,"minokamo.gifu.jp":true,"mitake.gifu.jp":true,"mizunami.gifu.jp":true,"motosu.gifu.jp":true,"nakatsugawa.gifu.jp":true,"ogaki.gifu.jp":true,"sakahogi.gifu.jp":true,"seki.gifu.jp":true,"sekigahara.gifu.jp":true,"shirakawa.gifu.jp":true,"tajimi.gifu.jp":true,"takayama.gifu.jp":true,"tarui.gifu.jp":true,"toki.gifu.jp":true,"tomika.gifu.jp":true,"wanouchi.gifu.jp":true,"yamagata.gifu.jp":true,"yaotsu.gifu.jp":true,"yoro.gifu.jp":true,"annaka.gunma.jp":true,"chiyoda.gunma.jp":true,"fujioka.gunma.jp":true,"higashiagatsuma.gunma.jp":true,"isesaki.gunma.jp":true,"itakura.gunma.jp":true,"kanna.gunma.jp":true,"kanra.gunma.jp":true,"katashina.gunma.jp":true,"kawaba.gunma.jp":true,"kiryu.gunma.jp":true,"kusatsu.gunma.jp":true,"maebashi.gunma.jp":true,"meiwa.gunma.jp":true,"midori.gunma.jp":true,"minakami.gunma.jp":true,"naganohara.gunma.jp":true,"nakanojo.gunma.jp":true,"nanmoku.gunma.jp":true,"numata.gunma.jp":true,"oizumi.gunma.jp":true,"ora.gunma.jp":true,"ota.gunma.jp":true,"shibukawa.gunma.jp":true,"shimonita.gunma.jp":true,"shinto.gunma.jp":true,"showa.gunma.jp":true,"takasaki.gunma.jp":true,"takayama.gunma.jp":true,"tamamura.gunma.jp":true,"tatebayashi.gunma.jp":true,"tomioka.gunma.jp":true,"tsukiyono.gunma.jp":true,"tsumagoi.gunma.jp":true,"ueno.gunma.jp":true,"yoshioka.gunma.jp":true,"asaminami.hiroshima.jp":true,"daiwa.hiroshima.jp":true,"etajima.hiroshima.jp":true,"fuchu.hiroshima.jp":true,"fukuyama.hiroshima.jp":true,"hatsukaichi.hiroshima.jp":true,"higashihiroshima.hiroshima.jp":true,"hongo.hiroshima.jp":true,"jinsekikogen.hiroshima.jp":true,"kaita.hiroshima.jp":true,"kui.hiroshima.jp":true,"kumano.hiroshima.jp":true,"kure.hiroshima.jp":true,"mihara.hiroshima.jp":true,"miyoshi.hiroshima.jp":true,"naka.hiroshima.jp":true,"onomichi.hiroshima.jp":true,"osakikamijima.hiroshima.jp":true,"otake.hiroshima.jp":true,"saka.hiroshima.jp":true,"sera.hiroshima.jp":true,"seranishi.hiroshima.jp":true,"shinichi.hiroshima.jp":true,"shobara.hiroshima.jp":true,"takehara.hiroshima.jp":true,"abashiri.hokkaido.jp":true,"abira.hokkaido.jp":true,"aibetsu.hokkaido.jp":true,"akabira.hokkaido.jp":true,"akkeshi.hokkaido.jp":true,"asahikawa.hokkaido.jp":true,"ashibetsu.hokkaido.jp":true,"ashoro.hokkaido.jp":true,"assabu.hokkaido.jp":true,"atsuma.hokkaido.jp":true,"bibai.hokkaido.jp":true,"biei.hokkaido.jp":true,"bifuka.hokkaido.jp":true,"bihoro.hokkaido.jp":true,"biratori.hokkaido.jp":true,"chippubetsu.hokkaido.jp":true,"chitose.hokkaido.jp":true,"date.hokkaido.jp":true,"ebetsu.hokkaido.jp":true,"embetsu.hokkaido.jp":true,"eniwa.hokkaido.jp":true,"erimo.hokkaido.jp":true,"esan.hokkaido.jp":true,"esashi.hokkaido.jp":true,"fukagawa.hokkaido.jp":true,"fukushima.hokkaido.jp":true,"furano.hokkaido.jp":true,"furubira.hokkaido.jp":true,"haboro.hokkaido.jp":true,"hakodate.hokkaido.jp":true,"hamatonbetsu.hokkaido.jp":true,"hidaka.hokkaido.jp":true,"higashikagura.hokkaido.jp":true,"higashikawa.hokkaido.jp":true,"hiroo.hokkaido.jp":true,"hokuryu.hokkaido.jp":true,"hokuto.hokkaido.jp":true,"honbetsu.hokkaido.jp":true,"horokanai.hokkaido.jp":true,"horonobe.hokkaido.jp":true,"ikeda.hokkaido.jp":true,"imakane.hokkaido.jp":true,"ishikari.hokkaido.jp":true,"iwamizawa.hokkaido.jp":true,"iwanai.hokkaido.jp":true,"kamifurano.hokkaido.jp":true,"kamikawa.hokkaido.jp":true,"kamishihoro.hokkaido.jp":true,"kamisunagawa.hokkaido.jp":true,"kamoenai.hokkaido.jp":true,"kayabe.hokkaido.jp":true,"kembuchi.hokkaido.jp":true,"kikonai.hokkaido.jp":true,"kimobetsu.hokkaido.jp":true,"kitahiroshima.hokkaido.jp":true,"kitami.hokkaido.jp":true,"kiyosato.hokkaido.jp":true,"koshimizu.hokkaido.jp":true,"kunneppu.hokkaido.jp":true,"kuriyama.hokkaido.jp":true,"kuromatsunai.hokkaido.jp":true,"kushiro.hokkaido.jp":true,"kutchan.hokkaido.jp":true,"kyowa.hokkaido.jp":true,"mashike.hokkaido.jp":true,"matsumae.hokkaido.jp":true,"mikasa.hokkaido.jp":true,"minamifurano.hokkaido.jp":true,"mombetsu.hokkaido.jp":true,"moseushi.hokkaido.jp":true,"mukawa.hokkaido.jp":true,"muroran.hokkaido.jp":true,"naie.hokkaido.jp":true,"nakagawa.hokkaido.jp":true,"nakasatsunai.hokkaido.jp":true,"nakatombetsu.hokkaido.jp":true,"nanae.hokkaido.jp":true,"nanporo.hokkaido.jp":true,"nayoro.hokkaido.jp":true,"nemuro.hokkaido.jp":true,"niikappu.hokkaido.jp":true,"niki.hokkaido.jp":true,"nishiokoppe.hokkaido.jp":true,"noboribetsu.hokkaido.jp":true,"numata.hokkaido.jp":true,"obihiro.hokkaido.jp":true,"obira.hokkaido.jp":true,"oketo.hokkaido.jp":true,"okoppe.hokkaido.jp":true,"otaru.hokkaido.jp":true,"otobe.hokkaido.jp":true,"otofuke.hokkaido.jp":true,"otoineppu.hokkaido.jp":true,"oumu.hokkaido.jp":true,"ozora.hokkaido.jp":true,"pippu.hokkaido.jp":true,"rankoshi.hokkaido.jp":true,"rebun.hokkaido.jp":true,"rikubetsu.hokkaido.jp":true,"rishiri.hokkaido.jp":true,"rishirifuji.hokkaido.jp":true,"saroma.hokkaido.jp":true,"sarufutsu.hokkaido.jp":true,"shakotan.hokkaido.jp":true,"shari.hokkaido.jp":true,"shibecha.hokkaido.jp":true,"shibetsu.hokkaido.jp":true,"shikabe.hokkaido.jp":true,"shikaoi.hokkaido.jp":true,"shimamaki.hokkaido.jp":true,"shimizu.hokkaido.jp":true,"shimokawa.hokkaido.jp":true,"shinshinotsu.hokkaido.jp":true,"shintoku.hokkaido.jp":true,"shiranuka.hokkaido.jp":true,"shiraoi.hokkaido.jp":true,"shiriuchi.hokkaido.jp":true,"sobetsu.hokkaido.jp":true,"sunagawa.hokkaido.jp":true,"taiki.hokkaido.jp":true,"takasu.hokkaido.jp":true,"takikawa.hokkaido.jp":true,"takinoue.hokkaido.jp":true,"teshikaga.hokkaido.jp":true,"tobetsu.hokkaido.jp":true,"tohma.hokkaido.jp":true,"tomakomai.hokkaido.jp":true,"tomari.hokkaido.jp":true,"toya.hokkaido.jp":true,"toyako.hokkaido.jp":true,"toyotomi.hokkaido.jp":true,"toyoura.hokkaido.jp":true,"tsubetsu.hokkaido.jp":true,"tsukigata.hokkaido.jp":true,"urakawa.hokkaido.jp":true,"urausu.hokkaido.jp":true,"uryu.hokkaido.jp":true,"utashinai.hokkaido.jp":true,"wakkanai.hokkaido.jp":true,"wassamu.hokkaido.jp":true,"yakumo.hokkaido.jp":true,"yoichi.hokkaido.jp":true,"aioi.hyogo.jp":true,"akashi.hyogo.jp":true,"ako.hyogo.jp":true,"amagasaki.hyogo.jp":true,"aogaki.hyogo.jp":true,"asago.hyogo.jp":true,"ashiya.hyogo.jp":true,"awaji.hyogo.jp":true,"fukusaki.hyogo.jp":true,"goshiki.hyogo.jp":true,"harima.hyogo.jp":true,"himeji.hyogo.jp":true,"ichikawa.hyogo.jp":true,"inagawa.hyogo.jp":true,"itami.hyogo.jp":true,"kakogawa.hyogo.jp":true,"kamigori.hyogo.jp":true,"kamikawa.hyogo.jp":true,"kasai.hyogo.jp":true,"kasuga.hyogo.jp":true,"kawanishi.hyogo.jp":true,"miki.hyogo.jp":true,"minamiawaji.hyogo.jp":true,"nishinomiya.hyogo.jp":true,"nishiwaki.hyogo.jp":true,"ono.hyogo.jp":true,"sanda.hyogo.jp":true,"sannan.hyogo.jp":true,"sasayama.hyogo.jp":true,"sayo.hyogo.jp":true,"shingu.hyogo.jp":true,"shinonsen.hyogo.jp":true,"shiso.hyogo.jp":true,"sumoto.hyogo.jp":true,"taishi.hyogo.jp":true,"taka.hyogo.jp":true,"takarazuka.hyogo.jp":true,"takasago.hyogo.jp":true,"takino.hyogo.jp":true,"tamba.hyogo.jp":true,"tatsuno.hyogo.jp":true,"toyooka.hyogo.jp":true,"yabu.hyogo.jp":true,"yashiro.hyogo.jp":true,"yoka.hyogo.jp":true,"yokawa.hyogo.jp":true,"ami.ibaraki.jp":true,"asahi.ibaraki.jp":true,"bando.ibaraki.jp":true,"chikusei.ibaraki.jp":true,"daigo.ibaraki.jp":true,"fujishiro.ibaraki.jp":true,"hitachi.ibaraki.jp":true,"hitachinaka.ibaraki.jp":true,"hitachiomiya.ibaraki.jp":true,"hitachiota.ibaraki.jp":true,"ibaraki.ibaraki.jp":true,"ina.ibaraki.jp":true,"inashiki.ibaraki.jp":true,"itako.ibaraki.jp":true,"iwama.ibaraki.jp":true,"joso.ibaraki.jp":true,"kamisu.ibaraki.jp":true,"kasama.ibaraki.jp":true,"kashima.ibaraki.jp":true,"kasumigaura.ibaraki.jp":true,"koga.ibaraki.jp":true,"miho.ibaraki.jp":true,"mito.ibaraki.jp":true,"moriya.ibaraki.jp":true,"naka.ibaraki.jp":true,"namegata.ibaraki.jp":true,"oarai.ibaraki.jp":true,"ogawa.ibaraki.jp":true,"omitama.ibaraki.jp":true,"ryugasaki.ibaraki.jp":true,"sakai.ibaraki.jp":true,"sakuragawa.ibaraki.jp":true,"shimodate.ibaraki.jp":true,"shimotsuma.ibaraki.jp":true,"shirosato.ibaraki.jp":true,"sowa.ibaraki.jp":true,"suifu.ibaraki.jp":true,"takahagi.ibaraki.jp":true,"tamatsukuri.ibaraki.jp":true,"tokai.ibaraki.jp":true,"tomobe.ibaraki.jp":true,"tone.ibaraki.jp":true,"toride.ibaraki.jp":true,"tsuchiura.ibaraki.jp":true,"tsukuba.ibaraki.jp":true,"uchihara.ibaraki.jp":true,"ushiku.ibaraki.jp":true,"yachiyo.ibaraki.jp":true,"yamagata.ibaraki.jp":true,"yawara.ibaraki.jp":true,"yuki.ibaraki.jp":true,"anamizu.ishikawa.jp":true,"hakui.ishikawa.jp":true,"hakusan.ishikawa.jp":true,"kaga.ishikawa.jp":true,"kahoku.ishikawa.jp":true,"kanazawa.ishikawa.jp":true,"kawakita.ishikawa.jp":true,"komatsu.ishikawa.jp":true,"nakanoto.ishikawa.jp":true,"nanao.ishikawa.jp":true,"nomi.ishikawa.jp":true,"nonoichi.ishikawa.jp":true,"noto.ishikawa.jp":true,"shika.ishikawa.jp":true,"suzu.ishikawa.jp":true,"tsubata.ishikawa.jp":true,"tsurugi.ishikawa.jp":true,"uchinada.ishikawa.jp":true,"wajima.ishikawa.jp":true,"fudai.iwate.jp":true,"fujisawa.iwate.jp":true,"hanamaki.iwate.jp":true,"hiraizumi.iwate.jp":true,"hirono.iwate.jp":true,"ichinohe.iwate.jp":true,"ichinoseki.iwate.jp":true,"iwaizumi.iwate.jp":true,"iwate.iwate.jp":true,"joboji.iwate.jp":true,"kamaishi.iwate.jp":true,"kanegasaki.iwate.jp":true,"karumai.iwate.jp":true,"kawai.iwate.jp":true,"kitakami.iwate.jp":true,"kuji.iwate.jp":true,"kunohe.iwate.jp":true,"kuzumaki.iwate.jp":true,"miyako.iwate.jp":true,"mizusawa.iwate.jp":true,"morioka.iwate.jp":true,"ninohe.iwate.jp":true,"noda.iwate.jp":true,"ofunato.iwate.jp":true,"oshu.iwate.jp":true,"otsuchi.iwate.jp":true,"rikuzentakata.iwate.jp":true,"shiwa.iwate.jp":true,"shizukuishi.iwate.jp":true,"sumita.iwate.jp":true,"tanohata.iwate.jp":true,"tono.iwate.jp":true,"yahaba.iwate.jp":true,"yamada.iwate.jp":true,"ayagawa.kagawa.jp":true,"higashikagawa.kagawa.jp":true,"kanonji.kagawa.jp":true,"kotohira.kagawa.jp":true,"manno.kagawa.jp":true,"marugame.kagawa.jp":true,"mitoyo.kagawa.jp":true,"naoshima.kagawa.jp":true,"sanuki.kagawa.jp":true,"tadotsu.kagawa.jp":true,"takamatsu.kagawa.jp":true,"tonosho.kagawa.jp":true,"uchinomi.kagawa.jp":true,"utazu.kagawa.jp":true,"zentsuji.kagawa.jp":true,"akune.kagoshima.jp":true,"amami.kagoshima.jp":true,"hioki.kagoshima.jp":true,"isa.kagoshima.jp":true,"isen.kagoshima.jp":true,"izumi.kagoshima.jp":true,"kagoshima.kagoshima.jp":true,"kanoya.kagoshima.jp":true,"kawanabe.kagoshima.jp":true,"kinko.kagoshima.jp":true,"kouyama.kagoshima.jp":true,"makurazaki.kagoshima.jp":true,"matsumoto.kagoshima.jp":true,"minamitane.kagoshima.jp":true,"nakatane.kagoshima.jp":true,"nishinoomote.kagoshima.jp":true,"satsumasendai.kagoshima.jp":true,"soo.kagoshima.jp":true,"tarumizu.kagoshima.jp":true,"yusui.kagoshima.jp":true,"aikawa.kanagawa.jp":true,"atsugi.kanagawa.jp":true,"ayase.kanagawa.jp":true,"chigasaki.kanagawa.jp":true,"ebina.kanagawa.jp":true,"fujisawa.kanagawa.jp":true,"hadano.kanagawa.jp":true,"hakone.kanagawa.jp":true,"hiratsuka.kanagawa.jp":true,"isehara.kanagawa.jp":true,"kaisei.kanagawa.jp":true,"kamakura.kanagawa.jp":true,"kiyokawa.kanagawa.jp":true,"matsuda.kanagawa.jp":true,"minamiashigara.kanagawa.jp":true,"miura.kanagawa.jp":true,"nakai.kanagawa.jp":true,"ninomiya.kanagawa.jp":true,"odawara.kanagawa.jp":true,"oi.kanagawa.jp":true,"oiso.kanagawa.jp":true,"sagamihara.kanagawa.jp":true,"samukawa.kanagawa.jp":true,"tsukui.kanagawa.jp":true,"yamakita.kanagawa.jp":true,"yamato.kanagawa.jp":true,"yokosuka.kanagawa.jp":true,"yugawara.kanagawa.jp":true,"zama.kanagawa.jp":true,"zushi.kanagawa.jp":true,"aki.kochi.jp":true,"geisei.kochi.jp":true,"hidaka.kochi.jp":true,"higashitsuno.kochi.jp":true,"ino.kochi.jp":true,"kagami.kochi.jp":true,"kami.kochi.jp":true,"kitagawa.kochi.jp":true,"kochi.kochi.jp":true,"mihara.kochi.jp":true,"motoyama.kochi.jp":true,"muroto.kochi.jp":true,"nahari.kochi.jp":true,"nakamura.kochi.jp":true,"nankoku.kochi.jp":true,"nishitosa.kochi.jp":true,"niyodogawa.kochi.jp":true,"ochi.kochi.jp":true,"okawa.kochi.jp":true,"otoyo.kochi.jp":true,"otsuki.kochi.jp":true,"sakawa.kochi.jp":true,"sukumo.kochi.jp":true,"susaki.kochi.jp":true,"tosa.kochi.jp":true,"tosashimizu.kochi.jp":true,"toyo.kochi.jp":true,"tsuno.kochi.jp":true,"umaji.kochi.jp":true,"yasuda.kochi.jp":true,"yusuhara.kochi.jp":true,"amakusa.kumamoto.jp":true,"arao.kumamoto.jp":true,"aso.kumamoto.jp":true,"choyo.kumamoto.jp":true,"gyokuto.kumamoto.jp":true,"kamiamakusa.kumamoto.jp":true,"kikuchi.kumamoto.jp":true,"kumamoto.kumamoto.jp":true,"mashiki.kumamoto.jp":true,"mifune.kumamoto.jp":true,"minamata.kumamoto.jp":true,"minamioguni.kumamoto.jp":true,"nagasu.kumamoto.jp":true,"nishihara.kumamoto.jp":true,"oguni.kumamoto.jp":true,"ozu.kumamoto.jp":true,"sumoto.kumamoto.jp":true,"takamori.kumamoto.jp":true,"uki.kumamoto.jp":true,"uto.kumamoto.jp":true,"yamaga.kumamoto.jp":true,"yamato.kumamoto.jp":true,"yatsushiro.kumamoto.jp":true,"ayabe.kyoto.jp":true,"fukuchiyama.kyoto.jp":true,"higashiyama.kyoto.jp":true,"ide.kyoto.jp":true,"ine.kyoto.jp":true,"joyo.kyoto.jp":true,"kameoka.kyoto.jp":true,"kamo.kyoto.jp":true,"kita.kyoto.jp":true,"kizu.kyoto.jp":true,"kumiyama.kyoto.jp":true,"kyotamba.kyoto.jp":true,"kyotanabe.kyoto.jp":true,"kyotango.kyoto.jp":true,"maizuru.kyoto.jp":true,"minami.kyoto.jp":true,"minamiyamashiro.kyoto.jp":true,"miyazu.kyoto.jp":true,"muko.kyoto.jp":true,"nagaokakyo.kyoto.jp":true,"nakagyo.kyoto.jp":true,"nantan.kyoto.jp":true,"oyamazaki.kyoto.jp":true,"sakyo.kyoto.jp":true,"seika.kyoto.jp":true,"tanabe.kyoto.jp":true,"uji.kyoto.jp":true,"ujitawara.kyoto.jp":true,"wazuka.kyoto.jp":true,"yamashina.kyoto.jp":true,"yawata.kyoto.jp":true,"asahi.mie.jp":true,"inabe.mie.jp":true,"ise.mie.jp":true,"kameyama.mie.jp":true,"kawagoe.mie.jp":true,"kiho.mie.jp":true,"kisosaki.mie.jp":true,"kiwa.mie.jp":true,"komono.mie.jp":true,"kumano.mie.jp":true,"kuwana.mie.jp":true,"matsusaka.mie.jp":true,"meiwa.mie.jp":true,"mihama.mie.jp":true,"minamiise.mie.jp":true,"misugi.mie.jp":true,"miyama.mie.jp":true,"nabari.mie.jp":true,"shima.mie.jp":true,"suzuka.mie.jp":true,"tado.mie.jp":true,"taiki.mie.jp":true,"taki.mie.jp":true,"tamaki.mie.jp":true,"toba.mie.jp":true,"tsu.mie.jp":true,"udono.mie.jp":true,"ureshino.mie.jp":true,"watarai.mie.jp":true,"yokkaichi.mie.jp":true,"furukawa.miyagi.jp":true,"higashimatsushima.miyagi.jp":true,"ishinomaki.miyagi.jp":true,"iwanuma.miyagi.jp":true,"kakuda.miyagi.jp":true,"kami.miyagi.jp":true,"kawasaki.miyagi.jp":true,"marumori.miyagi.jp":true,"matsushima.miyagi.jp":true,"minamisanriku.miyagi.jp":true,"misato.miyagi.jp":true,"murata.miyagi.jp":true,"natori.miyagi.jp":true,"ogawara.miyagi.jp":true,"ohira.miyagi.jp":true,"onagawa.miyagi.jp":true,"osaki.miyagi.jp":true,"rifu.miyagi.jp":true,"semine.miyagi.jp":true,"shibata.miyagi.jp":true,"shichikashuku.miyagi.jp":true,"shikama.miyagi.jp":true,"shiogama.miyagi.jp":true,"shiroishi.miyagi.jp":true,"tagajo.miyagi.jp":true,"taiwa.miyagi.jp":true,"tome.miyagi.jp":true,"tomiya.miyagi.jp":true,"wakuya.miyagi.jp":true,"watari.miyagi.jp":true,"yamamoto.miyagi.jp":true,"zao.miyagi.jp":true,"aya.miyazaki.jp":true,"ebino.miyazaki.jp":true,"gokase.miyazaki.jp":true,"hyuga.miyazaki.jp":true,"kadogawa.miyazaki.jp":true,"kawaminami.miyazaki.jp":true,"kijo.miyazaki.jp":true,"kitagawa.miyazaki.jp":true,"kitakata.miyazaki.jp":true,"kitaura.miyazaki.jp":true,"kobayashi.miyazaki.jp":true,"kunitomi.miyazaki.jp":true,"kushima.miyazaki.jp":true,"mimata.miyazaki.jp":true,"miyakonojo.miyazaki.jp":true,"miyazaki.miyazaki.jp":true,"morotsuka.miyazaki.jp":true,"nichinan.miyazaki.jp":true,"nishimera.miyazaki.jp":true,"nobeoka.miyazaki.jp":true,"saito.miyazaki.jp":true,"shiiba.miyazaki.jp":true,"shintomi.miyazaki.jp":true,"takaharu.miyazaki.jp":true,"takanabe.miyazaki.jp":true,"takazaki.miyazaki.jp":true,"tsuno.miyazaki.jp":true,"achi.nagano.jp":true,"agematsu.nagano.jp":true,"anan.nagano.jp":true,"aoki.nagano.jp":true,"asahi.nagano.jp":true,"azumino.nagano.jp":true,"chikuhoku.nagano.jp":true,"chikuma.nagano.jp":true,"chino.nagano.jp":true,"fujimi.nagano.jp":true,"hakuba.nagano.jp":true,"hara.nagano.jp":true,"hiraya.nagano.jp":true,"iida.nagano.jp":true,"iijima.nagano.jp":true,"iiyama.nagano.jp":true,"iizuna.nagano.jp":true,"ikeda.nagano.jp":true,"ikusaka.nagano.jp":true,"ina.nagano.jp":true,"karuizawa.nagano.jp":true,"kawakami.nagano.jp":true,"kiso.nagano.jp":true,"kisofukushima.nagano.jp":true,"kitaaiki.nagano.jp":true,"komagane.nagano.jp":true,"komoro.nagano.jp":true,"matsukawa.nagano.jp":true,"matsumoto.nagano.jp":true,"miasa.nagano.jp":true,"minamiaiki.nagano.jp":true,"minamimaki.nagano.jp":true,"minamiminowa.nagano.jp":true,"minowa.nagano.jp":true,"miyada.nagano.jp":true,"miyota.nagano.jp":true,"mochizuki.nagano.jp":true,"nagano.nagano.jp":true,"nagawa.nagano.jp":true,"nagiso.nagano.jp":true,"nakagawa.nagano.jp":true,"nakano.nagano.jp":true,"nozawaonsen.nagano.jp":true,"obuse.nagano.jp":true,"ogawa.nagano.jp":true,"okaya.nagano.jp":true,"omachi.nagano.jp":true,"omi.nagano.jp":true,"ookuwa.nagano.jp":true,"ooshika.nagano.jp":true,"otaki.nagano.jp":true,"otari.nagano.jp":true,"sakae.nagano.jp":true,"sakaki.nagano.jp":true,"saku.nagano.jp":true,"sakuho.nagano.jp":true,"shimosuwa.nagano.jp":true,"shinanomachi.nagano.jp":true,"shiojiri.nagano.jp":true,"suwa.nagano.jp":true,"suzaka.nagano.jp":true,"takagi.nagano.jp":true,"takamori.nagano.jp":true,"takayama.nagano.jp":true,"tateshina.nagano.jp":true,"tatsuno.nagano.jp":true,"togakushi.nagano.jp":true,"togura.nagano.jp":true,"tomi.nagano.jp":true,"ueda.nagano.jp":true,"wada.nagano.jp":true,"yamagata.nagano.jp":true,"yamanouchi.nagano.jp":true,"yasaka.nagano.jp":true,"yasuoka.nagano.jp":true,"chijiwa.nagasaki.jp":true,"futsu.nagasaki.jp":true,"goto.nagasaki.jp":true,"hasami.nagasaki.jp":true,"hirado.nagasaki.jp":true,"iki.nagasaki.jp":true,"isahaya.nagasaki.jp":true,"kawatana.nagasaki.jp":true,"kuchinotsu.nagasaki.jp":true,"matsuura.nagasaki.jp":true,"nagasaki.nagasaki.jp":true,"obama.nagasaki.jp":true,"omura.nagasaki.jp":true,"oseto.nagasaki.jp":true,"saikai.nagasaki.jp":true,"sasebo.nagasaki.jp":true,"seihi.nagasaki.jp":true,"shimabara.nagasaki.jp":true,"shinkamigoto.nagasaki.jp":true,"togitsu.nagasaki.jp":true,"tsushima.nagasaki.jp":true,"unzen.nagasaki.jp":true,"ando.nara.jp":true,"gose.nara.jp":true,"heguri.nara.jp":true,"higashiyoshino.nara.jp":true,"ikaruga.nara.jp":true,"ikoma.nara.jp":true,"kamikitayama.nara.jp":true,"kanmaki.nara.jp":true,"kashiba.nara.jp":true,"kashihara.nara.jp":true,"katsuragi.nara.jp":true,"kawai.nara.jp":true,"kawakami.nara.jp":true,"kawanishi.nara.jp":true,"koryo.nara.jp":true,"kurotaki.nara.jp":true,"mitsue.nara.jp":true,"miyake.nara.jp":true,"nara.nara.jp":true,"nosegawa.nara.jp":true,"oji.nara.jp":true,"ouda.nara.jp":true,"oyodo.nara.jp":true,"sakurai.nara.jp":true,"sango.nara.jp":true,"shimoichi.nara.jp":true,"shimokitayama.nara.jp":true,"shinjo.nara.jp":true,"soni.nara.jp":true,"takatori.nara.jp":true,"tawaramoto.nara.jp":true,"tenkawa.nara.jp":true,"tenri.nara.jp":true,"uda.nara.jp":true,"yamatokoriyama.nara.jp":true,"yamatotakada.nara.jp":true,"yamazoe.nara.jp":true,"yoshino.nara.jp":true,"aga.niigata.jp":true,"agano.niigata.jp":true,"gosen.niigata.jp":true,"itoigawa.niigata.jp":true,"izumozaki.niigata.jp":true,"joetsu.niigata.jp":true,"kamo.niigata.jp":true,"kariwa.niigata.jp":true,"kashiwazaki.niigata.jp":true,"minamiuonuma.niigata.jp":true,"mitsuke.niigata.jp":true,"muika.niigata.jp":true,"murakami.niigata.jp":true,"myoko.niigata.jp":true,"nagaoka.niigata.jp":true,"niigata.niigata.jp":true,"ojiya.niigata.jp":true,"omi.niigata.jp":true,"sado.niigata.jp":true,"sanjo.niigata.jp":true,"seiro.niigata.jp":true,"seirou.niigata.jp":true,"sekikawa.niigata.jp":true,"shibata.niigata.jp":true,"tagami.niigata.jp":true,"tainai.niigata.jp":true,"tochio.niigata.jp":true,"tokamachi.niigata.jp":true,"tsubame.niigata.jp":true,"tsunan.niigata.jp":true,"uonuma.niigata.jp":true,"yahiko.niigata.jp":true,"yoita.niigata.jp":true,"yuzawa.niigata.jp":true,"beppu.oita.jp":true,"bungoono.oita.jp":true,"bungotakada.oita.jp":true,"hasama.oita.jp":true,"hiji.oita.jp":true,"himeshima.oita.jp":true,"hita.oita.jp":true,"kamitsue.oita.jp":true,"kokonoe.oita.jp":true,"kuju.oita.jp":true,"kunisaki.oita.jp":true,"kusu.oita.jp":true,"oita.oita.jp":true,"saiki.oita.jp":true,"taketa.oita.jp":true,"tsukumi.oita.jp":true,"usa.oita.jp":true,"usuki.oita.jp":true,"yufu.oita.jp":true,"akaiwa.okayama.jp":true,"asakuchi.okayama.jp":true,"bizen.okayama.jp":true,"hayashima.okayama.jp":true,"ibara.okayama.jp":true,"kagamino.okayama.jp":true,"kasaoka.okayama.jp":true,"kibichuo.okayama.jp":true,"kumenan.okayama.jp":true,"kurashiki.okayama.jp":true,"maniwa.okayama.jp":true,"misaki.okayama.jp":true,"nagi.okayama.jp":true,"niimi.okayama.jp":true,"nishiawakura.okayama.jp":true,"okayama.okayama.jp":true,"satosho.okayama.jp":true,"setouchi.okayama.jp":true,"shinjo.okayama.jp":true,"shoo.okayama.jp":true,"soja.okayama.jp":true,"takahashi.okayama.jp":true,"tamano.okayama.jp":true,"tsuyama.okayama.jp":true,"wake.okayama.jp":true,"yakage.okayama.jp":true,"aguni.okinawa.jp":true,"ginowan.okinawa.jp":true,"ginoza.okinawa.jp":true,"gushikami.okinawa.jp":true,"haebaru.okinawa.jp":true,"higashi.okinawa.jp":true,"hirara.okinawa.jp":true,"iheya.okinawa.jp":true,"ishigaki.okinawa.jp":true,"ishikawa.okinawa.jp":true,"itoman.okinawa.jp":true,"izena.okinawa.jp":true,"kadena.okinawa.jp":true,"kin.okinawa.jp":true,"kitadaito.okinawa.jp":true,"kitanakagusuku.okinawa.jp":true,"kumejima.okinawa.jp":true,"kunigami.okinawa.jp":true,"minamidaito.okinawa.jp":true,"motobu.okinawa.jp":true,"nago.okinawa.jp":true,"naha.okinawa.jp":true,"nakagusuku.okinawa.jp":true,"nakijin.okinawa.jp":true,"nanjo.okinawa.jp":true,"nishihara.okinawa.jp":true,"ogimi.okinawa.jp":true,"okinawa.okinawa.jp":true,"onna.okinawa.jp":true,"shimoji.okinawa.jp":true,"taketomi.okinawa.jp":true,"tarama.okinawa.jp":true,"tokashiki.okinawa.jp":true,"tomigusuku.okinawa.jp":true,"tonaki.okinawa.jp":true,"urasoe.okinawa.jp":true,"uruma.okinawa.jp":true,"yaese.okinawa.jp":true,"yomitan.okinawa.jp":true,"yonabaru.okinawa.jp":true,"yonaguni.okinawa.jp":true,"zamami.okinawa.jp":true,"abeno.osaka.jp":true,"chihayaakasaka.osaka.jp":true,"chuo.osaka.jp":true,"daito.osaka.jp":true,"fujiidera.osaka.jp":true,"habikino.osaka.jp":true,"hannan.osaka.jp":true,"higashiosaka.osaka.jp":true,"higashisumiyoshi.osaka.jp":true,"higashiyodogawa.osaka.jp":true,"hirakata.osaka.jp":true,"ibaraki.osaka.jp":true,"ikeda.osaka.jp":true,"izumi.osaka.jp":true,"izumiotsu.osaka.jp":true,"izumisano.osaka.jp":true,"kadoma.osaka.jp":true,"kaizuka.osaka.jp":true,"kanan.osaka.jp":true,"kashiwara.osaka.jp":true,"katano.osaka.jp":true,"kawachinagano.osaka.jp":true,"kishiwada.osaka.jp":true,"kita.osaka.jp":true,"kumatori.osaka.jp":true,"matsubara.osaka.jp":true,"minato.osaka.jp":true,"minoh.osaka.jp":true,"misaki.osaka.jp":true,"moriguchi.osaka.jp":true,"neyagawa.osaka.jp":true,"nishi.osaka.jp":true,"nose.osaka.jp":true,"osakasayama.osaka.jp":true,"sakai.osaka.jp":true,"sayama.osaka.jp":true,"sennan.osaka.jp":true,"settsu.osaka.jp":true,"shijonawate.osaka.jp":true,"shimamoto.osaka.jp":true,"suita.osaka.jp":true,"tadaoka.osaka.jp":true,"taishi.osaka.jp":true,"tajiri.osaka.jp":true,"takaishi.osaka.jp":true,"takatsuki.osaka.jp":true,"tondabayashi.osaka.jp":true,"toyonaka.osaka.jp":true,"toyono.osaka.jp":true,"yao.osaka.jp":true,"ariake.saga.jp":true,"arita.saga.jp":true,"fukudomi.saga.jp":true,"genkai.saga.jp":true,"hamatama.saga.jp":true,"hizen.saga.jp":true,"imari.saga.jp":true,"kamimine.saga.jp":true,"kanzaki.saga.jp":true,"karatsu.saga.jp":true,"kashima.saga.jp":true,"kitagata.saga.jp":true,"kitahata.saga.jp":true,"kiyama.saga.jp":true,"kouhoku.saga.jp":true,"kyuragi.saga.jp":true,"nishiarita.saga.jp":true,"ogi.saga.jp":true,"omachi.saga.jp":true,"ouchi.saga.jp":true,"saga.saga.jp":true,"shiroishi.saga.jp":true,"taku.saga.jp":true,"tara.saga.jp":true,"tosu.saga.jp":true,"yoshinogari.saga.jp":true,"arakawa.saitama.jp":true,"asaka.saitama.jp":true,"chichibu.saitama.jp":true,"fujimi.saitama.jp":true,"fujimino.saitama.jp":true,"fukaya.saitama.jp":true,"hanno.saitama.jp":true,"hanyu.saitama.jp":true,"hasuda.saitama.jp":true,"hatogaya.saitama.jp":true,"hatoyama.saitama.jp":true,"hidaka.saitama.jp":true,"higashichichibu.saitama.jp":true,"higashimatsuyama.saitama.jp":true,"honjo.saitama.jp":true,"ina.saitama.jp":true,"iruma.saitama.jp":true,"iwatsuki.saitama.jp":true,"kamiizumi.saitama.jp":true,"kamikawa.saitama.jp":true,"kamisato.saitama.jp":true,"kasukabe.saitama.jp":true,"kawagoe.saitama.jp":true,"kawaguchi.saitama.jp":true,"kawajima.saitama.jp":true,"kazo.saitama.jp":true,"kitamoto.saitama.jp":true,"koshigaya.saitama.jp":true,"kounosu.saitama.jp":true,"kuki.saitama.jp":true,"kumagaya.saitama.jp":true,"matsubushi.saitama.jp":true,"minano.saitama.jp":true,"misato.saitama.jp":true,"miyashiro.saitama.jp":true,"miyoshi.saitama.jp":true,"moroyama.saitama.jp":true,"nagatoro.saitama.jp":true,"namegawa.saitama.jp":true,"niiza.saitama.jp":true,"ogano.saitama.jp":true,"ogawa.saitama.jp":true,"ogose.saitama.jp":true,"okegawa.saitama.jp":true,"omiya.saitama.jp":true,"otaki.saitama.jp":true,"ranzan.saitama.jp":true,"ryokami.saitama.jp":true,"saitama.saitama.jp":true,"sakado.saitama.jp":true,"satte.saitama.jp":true,"sayama.saitama.jp":true,"shiki.saitama.jp":true,"shiraoka.saitama.jp":true,"soka.saitama.jp":true,"sugito.saitama.jp":true,"toda.saitama.jp":true,"tokigawa.saitama.jp":true,"tokorozawa.saitama.jp":true,"tsurugashima.saitama.jp":true,"urawa.saitama.jp":true,"warabi.saitama.jp":true,"yashio.saitama.jp":true,"yokoze.saitama.jp":true,"yono.saitama.jp":true,"yorii.saitama.jp":true,"yoshida.saitama.jp":true,"yoshikawa.saitama.jp":true,"yoshimi.saitama.jp":true,"aisho.shiga.jp":true,"gamo.shiga.jp":true,"higashiomi.shiga.jp":true,"hikone.shiga.jp":true,"koka.shiga.jp":true,"konan.shiga.jp":true,"kosei.shiga.jp":true,"koto.shiga.jp":true,"kusatsu.shiga.jp":true,"maibara.shiga.jp":true,"moriyama.shiga.jp":true,"nagahama.shiga.jp":true,"nishiazai.shiga.jp":true,"notogawa.shiga.jp":true,"omihachiman.shiga.jp":true,"otsu.shiga.jp":true,"ritto.shiga.jp":true,"ryuoh.shiga.jp":true,"takashima.shiga.jp":true,"takatsuki.shiga.jp":true,"torahime.shiga.jp":true,"toyosato.shiga.jp":true,"yasu.shiga.jp":true,"akagi.shimane.jp":true,"ama.shimane.jp":true,"gotsu.shimane.jp":true,"hamada.shimane.jp":true,"higashiizumo.shimane.jp":true,"hikawa.shimane.jp":true,"hikimi.shimane.jp":true,"izumo.shimane.jp":true,"kakinoki.shimane.jp":true,"masuda.shimane.jp":true,"matsue.shimane.jp":true,"misato.shimane.jp":true,"nishinoshima.shimane.jp":true,"ohda.shimane.jp":true,"okinoshima.shimane.jp":true,"okuizumo.shimane.jp":true,"shimane.shimane.jp":true,"tamayu.shimane.jp":true,"tsuwano.shimane.jp":true,"unnan.shimane.jp":true,"yakumo.shimane.jp":true,"yasugi.shimane.jp":true,"yatsuka.shimane.jp":true,"arai.shizuoka.jp":true,"atami.shizuoka.jp":true,"fuji.shizuoka.jp":true,"fujieda.shizuoka.jp":true,"fujikawa.shizuoka.jp":true,"fujinomiya.shizuoka.jp":true,"fukuroi.shizuoka.jp":true,"gotemba.shizuoka.jp":true,"haibara.shizuoka.jp":true,"hamamatsu.shizuoka.jp":true,"higashiizu.shizuoka.jp":true,"ito.shizuoka.jp":true,"iwata.shizuoka.jp":true,"izu.shizuoka.jp":true,"izunokuni.shizuoka.jp":true,"kakegawa.shizuoka.jp":true,"kannami.shizuoka.jp":true,"kawanehon.shizuoka.jp":true,"kawazu.shizuoka.jp":true,"kikugawa.shizuoka.jp":true,"kosai.shizuoka.jp":true,"makinohara.shizuoka.jp":true,"matsuzaki.shizuoka.jp":true,"minamiizu.shizuoka.jp":true,"mishima.shizuoka.jp":true,"morimachi.shizuoka.jp":true,"nishiizu.shizuoka.jp":true,"numazu.shizuoka.jp":true,"omaezaki.shizuoka.jp":true,"shimada.shizuoka.jp":true,"shimizu.shizuoka.jp":true,"shimoda.shizuoka.jp":true,"shizuoka.shizuoka.jp":true,"susono.shizuoka.jp":true,"yaizu.shizuoka.jp":true,"yoshida.shizuoka.jp":true,"ashikaga.tochigi.jp":true,"bato.tochigi.jp":true,"haga.tochigi.jp":true,"ichikai.tochigi.jp":true,"iwafune.tochigi.jp":true,"kaminokawa.tochigi.jp":true,"kanuma.tochigi.jp":true,"karasuyama.tochigi.jp":true,"kuroiso.tochigi.jp":true,"mashiko.tochigi.jp":true,"mibu.tochigi.jp":true,"moka.tochigi.jp":true,"motegi.tochigi.jp":true,"nasu.tochigi.jp":true,"nasushiobara.tochigi.jp":true,"nikko.tochigi.jp":true,"nishikata.tochigi.jp":true,"nogi.tochigi.jp":true,"ohira.tochigi.jp":true,"ohtawara.tochigi.jp":true,"oyama.tochigi.jp":true,"sakura.tochigi.jp":true,"sano.tochigi.jp":true,"shimotsuke.tochigi.jp":true,"shioya.tochigi.jp":true,"takanezawa.tochigi.jp":true,"tochigi.tochigi.jp":true,"tsuga.tochigi.jp":true,"ujiie.tochigi.jp":true,"utsunomiya.tochigi.jp":true,"yaita.tochigi.jp":true,"aizumi.tokushima.jp":true,"anan.tokushima.jp":true,"ichiba.tokushima.jp":true,"itano.tokushima.jp":true,"kainan.tokushima.jp":true,"komatsushima.tokushima.jp":true,"matsushige.tokushima.jp":true,"mima.tokushima.jp":true,"minami.tokushima.jp":true,"miyoshi.tokushima.jp":true,"mugi.tokushima.jp":true,"nakagawa.tokushima.jp":true,"naruto.tokushima.jp":true,"sanagochi.tokushima.jp":true,"shishikui.tokushima.jp":true,"tokushima.tokushima.jp":true,"wajiki.tokushima.jp":true,"adachi.tokyo.jp":true,"akiruno.tokyo.jp":true,"akishima.tokyo.jp":true,"aogashima.tokyo.jp":true,"arakawa.tokyo.jp":true,"bunkyo.tokyo.jp":true,"chiyoda.tokyo.jp":true,"chofu.tokyo.jp":true,"chuo.tokyo.jp":true,"edogawa.tokyo.jp":true,"fuchu.tokyo.jp":true,"fussa.tokyo.jp":true,"hachijo.tokyo.jp":true,"hachioji.tokyo.jp":true,"hamura.tokyo.jp":true,"higashikurume.tokyo.jp":true,"higashimurayama.tokyo.jp":true,"higashiyamato.tokyo.jp":true,"hino.tokyo.jp":true,"hinode.tokyo.jp":true,"hinohara.tokyo.jp":true,"inagi.tokyo.jp":true,"itabashi.tokyo.jp":true,"katsushika.tokyo.jp":true,"kita.tokyo.jp":true,"kiyose.tokyo.jp":true,"kodaira.tokyo.jp":true,"koganei.tokyo.jp":true,"kokubunji.tokyo.jp":true,"komae.tokyo.jp":true,"koto.tokyo.jp":true,"kouzushima.tokyo.jp":true,"kunitachi.tokyo.jp":true,"machida.tokyo.jp":true,"meguro.tokyo.jp":true,"minato.tokyo.jp":true,"mitaka.tokyo.jp":true,"mizuho.tokyo.jp":true,"musashimurayama.tokyo.jp":true,"musashino.tokyo.jp":true,"nakano.tokyo.jp":true,"nerima.tokyo.jp":true,"ogasawara.tokyo.jp":true,"okutama.tokyo.jp":true,"ome.tokyo.jp":true,"oshima.tokyo.jp":true,"ota.tokyo.jp":true,"setagaya.tokyo.jp":true,"shibuya.tokyo.jp":true,"shinagawa.tokyo.jp":true,"shinjuku.tokyo.jp":true,"suginami.tokyo.jp":true,"sumida.tokyo.jp":true,"tachikawa.tokyo.jp":true,"taito.tokyo.jp":true,"tama.tokyo.jp":true,"toshima.tokyo.jp":true,"chizu.tottori.jp":true,"hino.tottori.jp":true,"kawahara.tottori.jp":true,"koge.tottori.jp":true,"kotoura.tottori.jp":true,"misasa.tottori.jp":true,"nanbu.tottori.jp":true,"nichinan.tottori.jp":true,"sakaiminato.tottori.jp":true,"tottori.tottori.jp":true,"wakasa.tottori.jp":true,"yazu.tottori.jp":true,"yonago.tottori.jp":true,"asahi.toyama.jp":true,"fuchu.toyama.jp":true,"fukumitsu.toyama.jp":true,"funahashi.toyama.jp":true,"himi.toyama.jp":true,"imizu.toyama.jp":true,"inami.toyama.jp":true,"johana.toyama.jp":true,"kamiichi.toyama.jp":true,"kurobe.toyama.jp":true,"nakaniikawa.toyama.jp":true,"namerikawa.toyama.jp":true,"nanto.toyama.jp":true,"nyuzen.toyama.jp":true,"oyabe.toyama.jp":true,"taira.toyama.jp":true,"takaoka.toyama.jp":true,"tateyama.toyama.jp":true,"toga.toyama.jp":true,"tonami.toyama.jp":true,"toyama.toyama.jp":true,"unazuki.toyama.jp":true,"uozu.toyama.jp":true,"yamada.toyama.jp":true,"arida.wakayama.jp":true,"aridagawa.wakayama.jp":true,"gobo.wakayama.jp":true,"hashimoto.wakayama.jp":true,"hidaka.wakayama.jp":true,"hirogawa.wakayama.jp":true,"inami.wakayama.jp":true,"iwade.wakayama.jp":true,"kainan.wakayama.jp":true,"kamitonda.wakayama.jp":true,"katsuragi.wakayama.jp":true,"kimino.wakayama.jp":true,"kinokawa.wakayama.jp":true,"kitayama.wakayama.jp":true,"koya.wakayama.jp":true,"koza.wakayama.jp":true,"kozagawa.wakayama.jp":true,"kudoyama.wakayama.jp":true,"kushimoto.wakayama.jp":true,"mihama.wakayama.jp":true,"misato.wakayama.jp":true,"nachikatsuura.wakayama.jp":true,"shingu.wakayama.jp":true,"shirahama.wakayama.jp":true,"taiji.wakayama.jp":true,"tanabe.wakayama.jp":true,"wakayama.wakayama.jp":true,"yuasa.wakayama.jp":true,"yura.wakayama.jp":true,"asahi.yamagata.jp":true,"funagata.yamagata.jp":true,"higashine.yamagata.jp":true,"iide.yamagata.jp":true,"kahoku.yamagata.jp":true,"kaminoyama.yamagata.jp":true,"kaneyama.yamagata.jp":true,"kawanishi.yamagata.jp":true,"mamurogawa.yamagata.jp":true,"mikawa.yamagata.jp":true,"murayama.yamagata.jp":true,"nagai.yamagata.jp":true,"nakayama.yamagata.jp":true,"nanyo.yamagata.jp":true,"nishikawa.yamagata.jp":true,"obanazawa.yamagata.jp":true,"oe.yamagata.jp":true,"oguni.yamagata.jp":true,"ohkura.yamagata.jp":true,"oishida.yamagata.jp":true,"sagae.yamagata.jp":true,"sakata.yamagata.jp":true,"sakegawa.yamagata.jp":true,"shinjo.yamagata.jp":true,"shirataka.yamagata.jp":true,"shonai.yamagata.jp":true,"takahata.yamagata.jp":true,"tendo.yamagata.jp":true,"tozawa.yamagata.jp":true,"tsuruoka.yamagata.jp":true,"yamagata.yamagata.jp":true,"yamanobe.yamagata.jp":true,"yonezawa.yamagata.jp":true,"yuza.yamagata.jp":true,"abu.yamaguchi.jp":true,"hagi.yamaguchi.jp":true,"hikari.yamaguchi.jp":true,"hofu.yamaguchi.jp":true,"iwakuni.yamaguchi.jp":true,"kudamatsu.yamaguchi.jp":true,"mitou.yamaguchi.jp":true,"nagato.yamaguchi.jp":true,"oshima.yamaguchi.jp":true,"shimonoseki.yamaguchi.jp":true,"shunan.yamaguchi.jp":true,"tabuse.yamaguchi.jp":true,"tokuyama.yamaguchi.jp":true,"toyota.yamaguchi.jp":true,"ube.yamaguchi.jp":true,"yuu.yamaguchi.jp":true,"chuo.yamanashi.jp":true,"doshi.yamanashi.jp":true,"fuefuki.yamanashi.jp":true,"fujikawa.yamanashi.jp":true,"fujikawaguchiko.yamanashi.jp":true,"fujiyoshida.yamanashi.jp":true,"hayakawa.yamanashi.jp":true,"hokuto.yamanashi.jp":true,"ichikawamisato.yamanashi.jp":true,"kai.yamanashi.jp":true,"kofu.yamanashi.jp":true,"koshu.yamanashi.jp":true,"kosuge.yamanashi.jp":true,"minami-alps.yamanashi.jp":true,"minobu.yamanashi.jp":true,"nakamichi.yamanashi.jp":true,"nanbu.yamanashi.jp":true,"narusawa.yamanashi.jp":true,"nirasaki.yamanashi.jp":true,"nishikatsura.yamanashi.jp":true,"oshino.yamanashi.jp":true,"otsuki.yamanashi.jp":true,"showa.yamanashi.jp":true,"tabayama.yamanashi.jp":true,"tsuru.yamanashi.jp":true,"uenohara.yamanashi.jp":true,"yamanakako.yamanashi.jp":true,"yamanashi.yamanashi.jp":true,"ke":true,"ac.ke":true,"co.ke":true,"go.ke":true,"info.ke":true,"me.ke":true,"mobi.ke":true,"ne.ke":true,"or.ke":true,"sc.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"kp":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"lb":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"ac.lk":true,"lr":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"co.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"com.ms":true,"edu.ms":true,"gov.ms":true,"net.ms":true,"org.ms":true,"mt":true,"com.mt":true,"edu.mt":true,"net.mt":true,"org.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"mz":true,"ac.mz":true,"adv.mz":true,"co.mz":true,"edu.mz":true,"gov.mz":true,"mil.mz":true,"net.mz":true,"org.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"nom.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"i.ng":true,"mil.ng":true,"mobi.ng":true,"name.ng":true,"net.ng":true,"org.ng":true,"sch.ng":true,"ni":true,"ac.ni":true,"biz.ni":true,"co.ni":true,"com.ni":true,"edu.ni":true,"gob.ni":true,"in.ni":true,"info.ni":true,"int.ni":true,"mil.ni":true,"net.ni":true,"nom.ni":true,"org.ni":true,"web.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"nz":true,"ac.nz":true,"co.nz":true,"cri.nz":true,"geek.nz":true,"gen.nz":true,"govt.nz":true,"health.nz":true,"iwi.nz":true,"kiwi.nz":true,"maori.nz":true,"mil.nz":true,"xn--mori-qsa.nz":true,"net.nz":true,"org.nz":true,"parliament.nz":true,"school.nz":true,"om":true,"co.om":true,"com.om":true,"edu.om":true,"gov.om":true,"med.om":true,"museum.om":true,"net.om":true,"org.om":true,"pro.om":true,"onion":true,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"com.pl":true,"net.pl":true,"org.pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"gov.pl":true,"ap.gov.pl":true,"ic.gov.pl":true,"is.gov.pl":true,"us.gov.pl":true,"kmpsp.gov.pl":true,"kppsp.gov.pl":true,"kwpsp.gov.pl":true,"psp.gov.pl":true,"wskr.gov.pl":true,"kwp.gov.pl":true,"mw.gov.pl":true,"ug.gov.pl":true,"um.gov.pl":true,"umig.gov.pl":true,"ugim.gov.pl":true,"upow.gov.pl":true,"uw.gov.pl":true,"starostwo.gov.pl":true,"pa.gov.pl":true,"po.gov.pl":true,"psse.gov.pl":true,"pup.gov.pl":true,"rzgw.gov.pl":true,"sa.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"wsa.gov.pl":true,"sko.gov.pl":true,"uzs.gov.pl":true,"wiih.gov.pl":true,"winb.gov.pl":true,"pinb.gov.pl":true,"wios.gov.pl":true,"witd.gov.pl":true,"wzmiuw.gov.pl":true,"piw.gov.pl":true,"wiw.gov.pl":true,"griw.gov.pl":true,"wif.gov.pl":true,"oum.gov.pl":true,"sdn.gov.pl":true,"zp.gov.pl":true,"uppo.gov.pl":true,"mup.gov.pl":true,"wuoz.gov.pl":true,"konsulat.gov.pl":true,"oirm.gov.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"post":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aaa.pro":true,"aca.pro":true,"acct.pro":true,"avocat.pro":true,"bar.pro":true,"cpa.pro":true,"eng.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"recht.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"py":true,"com.py":true,"coop.py":true,"edu.py":true,"gov.py":true,"mil.py":true,"net.py":true,"org.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"asso.re":true,"com.re":true,"nom.re":true,"ro":true,"arts.ro":true,"com.ro":true,"firm.ro":true,"info.ro":true,"nom.ro":true,"nt.ro":true,"org.ro":true,"rec.ro":true,"store.ro":true,"tm.ro":true,"www.ro":true,"rs":true,"ac.rs":true,"co.rs":true,"edu.rs":true,"gov.rs":true,"in.rs":true,"org.rs":true,"ru":true,"ac.ru":true,"edu.ru":true,"gov.ru":true,"int.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"tv.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"com.sh":true,"net.sh":true,"gov.sh":true,"org.sh":true,"mil.sh":true,"si":true,"sj":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"sv":true,"com.sv":true,"edu.sv":true,"gob.sv":true,"org.sv":true,"red.sv":true,"sx":true,"gov.sx":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"com.tm":true,"co.tm":true,"org.tm":true,"net.tm":true,"nom.tm":true,"gov.tm":true,"mil.tm":true,"edu.tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"tr":true,"com.tr":true,"info.tr":true,"biz.tr":true,"net.tr":true,"org.tr":true,"web.tr":true,"gen.tr":true,"tv.tr":true,"av.tr":true,"dr.tr":true,"bbs.tr":true,"name.tr":true,"tel.tr":true,"gov.tr":true,"bel.tr":true,"pol.tr":true,"mil.tr":true,"k12.tr":true,"edu.tr":true,"kep.tr":true,"nc.tr":true,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"tz":true,"ac.tz":true,"co.tz":true,"go.tz":true,"hotel.tz":true,"info.tz":true,"me.tz":true,"mil.tz":true,"mobi.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"tv.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"cherkasy.ua":true,"chernigov.ua":true,"chernihiv.ua":true,"chernivtsi.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"cr.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"dnipropetrovsk.ua":true,"dominic.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkiv.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"khmelnytskyi.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"krym.ua":true,"ks.ua":true,"kv.ua":true,"kyiv.ua":true,"lg.ua":true,"lt.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lv.ua":true,"lviv.ua":true,"mk.ua":true,"mykolaiv.ua":true,"nikolaev.ua":true,"od.ua":true,"odesa.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rivne.ua":true,"rovno.ua":true,"rv.ua":true,"sb.ua":true,"sebastopol.ua":true,"sevastopol.ua":true,"sm.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uz.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vinnytsia.ua":true,"vn.ua":true,"volyn.ua":true,"yalta.ua":true,"zaporizhzhe.ua":true,"zaporizhzhia.ua":true,"zhitomir.ua":true,"zhytomyr.ua":true,"zp.ua":true,"zt.ua":true,"ug":true,"co.ug":true,"or.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"com.ug":true,"org.ug":true,"uk":true,"ac.uk":true,"co.uk":true,"gov.uk":true,"ltd.uk":true,"me.uk":true,"net.uk":true,"nhs.uk":true,"org.uk":true,"plc.uk":true,"police.uk":true,"*.sch.uk":true,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"ann-arbor.mi.us":true,"cog.mi.us":true,"dst.mi.us":true,"eaton.mi.us":true,"gen.mi.us":true,"mus.mi.us":true,"tec.mi.us":true,"washtenaw.mi.us":true,"uy":true,"com.uy":true,"edu.uy":true,"gub.uy":true,"mil.uy":true,"net.uy":true,"org.uy":true,"uz":true,"co.uz":true,"com.uz":true,"net.uz":true,"org.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"ve":true,"arts.ve":true,"co.ve":true,"com.ve":true,"e12.ve":true,"edu.ve":true,"firm.ve":true,"gob.ve":true,"gov.ve":true,"info.ve":true,"int.ve":true,"mil.ve":true,"net.ve":true,"org.ve":true,"rec.ve":true,"store.ve":true,"tec.ve":true,"web.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"com.vu":true,"edu.vu":true,"net.vu":true,"org.vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--y9a3aq":true,"xn--54b7fta0cc":true,"xn--90ae":true,"xn--90ais":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--e1a4c":true,"xn--node":true,"xn--qxam":true,"xn--j6w193g":true,"xn--2scrj9c":true,"xn--3hcrj9c":true,"xn--45br5cyl":true,"xn--h2breg3eve":true,"xn--h2brj9c8c":true,"xn--mgbgu82a":true,"xn--rvc1e0am3e":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbtx2b":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--80ao21a":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--d1alf":true,"xn--l1acc":true,"xn--mix891f":true,"xn--mix082f":true,"xn--mgbx4cd0ab":true,"xn--mgb9awbf":true,"xn--mgbai9azgqp6j":true,"xn--mgbai9a5eva00b":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--o1ac.xn--90a3ac":true,"xn--c1avg.xn--90a3ac":true,"xn--90azh.xn--90a3ac":true,"xn--d1at.xn--90a3ac":true,"xn--o1ach.xn--90a3ac":true,"xn--80au.xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--mgbpl2fh":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--o3cw4h":true,"xn--12c1fe0br.xn--o3cw4h":true,"xn--12co0c3b4eva.xn--o3cw4h":true,"xn--h3cuzk1di.xn--o3cw4h":true,"xn--o3cyx2a.xn--o3cw4h":true,"xn--m3ch0j3a.xn--o3cw4h":true,"xn--12cfi8ixb8l.xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"ac.za":true,"agric.za":true,"alt.za":true,"co.za":true,"edu.za":true,"gov.za":true,"grondar.za":true,"law.za":true,"mil.za":true,"net.za":true,"ngo.za":true,"nis.za":true,"nom.za":true,"org.za":true,"school.za":true,"tm.za":true,"web.za":true,"zm":true,"ac.zm":true,"biz.zm":true,"co.zm":true,"com.zm":true,"edu.zm":true,"gov.zm":true,"info.zm":true,"mil.zm":true,"net.zm":true,"org.zm":true,"sch.zm":true,"zw":true,"ac.zw":true,"co.zw":true,"gov.zw":true,"mil.zw":true,"org.zw":true,"aaa":true,"aarp":true,"abarth":true,"abb":true,"abbott":true,"abbvie":true,"abc":true,"able":true,"abogado":true,"abudhabi":true,"academy":true,"accenture":true,"accountant":true,"accountants":true,"aco":true,"active":true,"actor":true,"adac":true,"ads":true,"adult":true,"aeg":true,"aetna":true,"afamilycompany":true,"afl":true,"africa":true,"agakhan":true,"agency":true,"aig":true,"aigo":true,"airbus":true,"airforce":true,"airtel":true,"akdn":true,"alfaromeo":true,"alibaba":true,"alipay":true,"allfinanz":true,"allstate":true,"ally":true,"alsace":true,"alstom":true,"americanexpress":true,"americanfamily":true,"amex":true,"amfam":true,"amica":true,"amsterdam":true,"analytics":true,"android":true,"anquan":true,"anz":true,"aol":true,"apartments":true,"app":true,"apple":true,"aquarelle":true,"arab":true,"aramco":true,"archi":true,"army":true,"art":true,"arte":true,"asda":true,"associates":true,"athleta":true,"attorney":true,"auction":true,"audi":true,"audible":true,"audio":true,"auspost":true,"author":true,"auto":true,"autos":true,"avianca":true,"aws":true,"axa":true,"azure":true,"baby":true,"baidu":true,"banamex":true,"bananarepublic":true,"band":true,"bank":true,"bar":true,"barcelona":true,"barclaycard":true,"barclays":true,"barefoot":true,"bargains":true,"baseball":true,"basketball":true,"bauhaus":true,"bayern":true,"bbc":true,"bbt":true,"bbva":true,"bcg":true,"bcn":true,"beats":true,"beauty":true,"beer":true,"bentley":true,"berlin":true,"best":true,"bestbuy":true,"bet":true,"bharti":true,"bible":true,"bid":true,"bike":true,"bing":true,"bingo":true,"bio":true,"black":true,"blackfriday":true,"blanco":true,"blockbuster":true,"blog":true,"bloomberg":true,"blue":true,"bms":true,"bmw":true,"bnl":true,"bnpparibas":true,"boats":true,"boehringer":true,"bofa":true,"bom":true,"bond":true,"boo":true,"book":true,"booking":true,"boots":true,"bosch":true,"bostik":true,"boston":true,"bot":true,"boutique":true,"box":true,"bradesco":true,"bridgestone":true,"broadway":true,"broker":true,"brother":true,"brussels":true,"budapest":true,"bugatti":true,"build":true,"builders":true,"business":true,"buy":true,"buzz":true,"bzh":true,"cab":true,"cafe":true,"cal":true,"call":true,"calvinklein":true,"cam":true,"camera":true,"camp":true,"cancerresearch":true,"canon":true,"capetown":true,"capital":true,"capitalone":true,"car":true,"caravan":true,"cards":true,"care":true,"career":true,"careers":true,"cars":true,"cartier":true,"casa":true,"case":true,"caseih":true,"cash":true,"casino":true,"catering":true,"catholic":true,"cba":true,"cbn":true,"cbre":true,"cbs":true,"ceb":true,"center":true,"ceo":true,"cern":true,"cfa":true,"cfd":true,"chanel":true,"channel":true,"chase":true,"chat":true,"cheap":true,"chintai":true,"christmas":true,"chrome":true,"chrysler":true,"church":true,"cipriani":true,"circle":true,"cisco":true,"citadel":true,"citi":true,"citic":true,"city":true,"cityeats":true,"claims":true,"cleaning":true,"click":true,"clinic":true,"clinique":true,"clothing":true,"cloud":true,"club":true,"clubmed":true,"coach":true,"codes":true,"coffee":true,"college":true,"cologne":true,"comcast":true,"commbank":true,"community":true,"company":true,"compare":true,"computer":true,"comsec":true,"condos":true,"construction":true,"consulting":true,"contact":true,"contractors":true,"cooking":true,"cookingchannel":true,"cool":true,"corsica":true,"country":true,"coupon":true,"coupons":true,"courses":true,"credit":true,"creditcard":true,"creditunion":true,"cricket":true,"crown":true,"crs":true,"cruise":true,"cruises":true,"csc":true,"cuisinella":true,"cymru":true,"cyou":true,"dabur":true,"dad":true,"dance":true,"data":true,"date":true,"dating":true,"datsun":true,"day":true,"dclk":true,"dds":true,"deal":true,"dealer":true,"deals":true,"degree":true,"delivery":true,"dell":true,"deloitte":true,"delta":true,"democrat":true,"dental":true,"dentist":true,"desi":true,"design":true,"dev":true,"dhl":true,"diamonds":true,"diet":true,"digital":true,"direct":true,"directory":true,"discount":true,"discover":true,"dish":true,"diy":true,"dnp":true,"docs":true,"doctor":true,"dodge":true,"dog":true,"doha":true,"domains":true,"dot":true,"download":true,"drive":true,"dtv":true,"dubai":true,"duck":true,"dunlop":true,"duns":true,"dupont":true,"durban":true,"dvag":true,"dvr":true,"earth":true,"eat":true,"eco":true,"edeka":true,"education":true,"email":true,"emerck":true,"energy":true,"engineer":true,"engineering":true,"enterprises":true,"epost":true,"epson":true,"equipment":true,"ericsson":true,"erni":true,"esq":true,"estate":true,"esurance":true,"etisalat":true,"eurovision":true,"eus":true,"events":true,"everbank":true,"exchange":true,"expert":true,"exposed":true,"express":true,"extraspace":true,"fage":true,"fail":true,"fairwinds":true,"faith":true,"family":true,"fan":true,"fans":true,"farm":true,"farmers":true,"fashion":true,"fast":true,"fedex":true,"feedback":true,"ferrari":true,"ferrero":true,"fiat":true,"fidelity":true,"fido":true,"film":true,"final":true,"finance":true,"financial":true,"fire":true,"firestone":true,"firmdale":true,"fish":true,"fishing":true,"fit":true,"fitness":true,"flickr":true,"flights":true,"flir":true,"florist":true,"flowers":true,"fly":true,"foo":true,"food":true,"foodnetwork":true,"football":true,"ford":true,"forex":true,"forsale":true,"forum":true,"foundation":true,"fox":true,"free":true,"fresenius":true,"frl":true,"frogans":true,"frontdoor":true,"frontier":true,"ftr":true,"fujitsu":true,"fujixerox":true,"fun":true,"fund":true,"furniture":true,"futbol":true,"fyi":true,"gal":true,"gallery":true,"gallo":true,"gallup":true,"game":true,"games":true,"gap":true,"garden":true,"gbiz":true,"gdn":true,"gea":true,"gent":true,"genting":true,"george":true,"ggee":true,"gift":true,"gifts":true,"gives":true,"giving":true,"glade":true,"glass":true,"gle":true,"global":true,"globo":true,"gmail":true,"gmbh":true,"gmo":true,"gmx":true,"godaddy":true,"gold":true,"goldpoint":true,"golf":true,"goo":true,"goodhands":true,"goodyear":true,"goog":true,"google":true,"gop":true,"got":true,"grainger":true,"graphics":true,"gratis":true,"green":true,"gripe":true,"grocery":true,"group":true,"guardian":true,"gucci":true,"guge":true,"guide":true,"guitars":true,"guru":true,"hair":true,"hamburg":true,"hangout":true,"haus":true,"hbo":true,"hdfc":true,"hdfcbank":true,"health":true,"healthcare":true,"help":true,"helsinki":true,"here":true,"hermes":true,"hgtv":true,"hiphop":true,"hisamitsu":true,"hitachi":true,"hiv":true,"hkt":true,"hockey":true,"holdings":true,"holiday":true,"homedepot":true,"homegoods":true,"homes":true,"homesense":true,"honda":true,"honeywell":true,"horse":true,"hospital":true,"host":true,"hosting":true,"hot":true,"hoteles":true,"hotels":true,"hotmail":true,"house":true,"how":true,"hsbc":true,"hughes":true,"hyatt":true,"hyundai":true,"ibm":true,"icbc":true,"ice":true,"icu":true,"ieee":true,"ifm":true,"ikano":true,"imamat":true,"imdb":true,"immo":true,"immobilien":true,"industries":true,"infiniti":true,"ing":true,"ink":true,"institute":true,"insurance":true,"insure":true,"intel":true,"international":true,"intuit":true,"investments":true,"ipiranga":true,"irish":true,"iselect":true,"ismaili":true,"ist":true,"istanbul":true,"itau":true,"itv":true,"iveco":true,"iwc":true,"jaguar":true,"java":true,"jcb":true,"jcp":true,"jeep":true,"jetzt":true,"jewelry":true,"jio":true,"jlc":true,"jll":true,"jmp":true,"jnj":true,"joburg":true,"jot":true,"joy":true,"jpmorgan":true,"jprs":true,"juegos":true,"juniper":true,"kaufen":true,"kddi":true,"kerryhotels":true,"kerrylogistics":true,"kerryproperties":true,"kfh":true,"kia":true,"kim":true,"kinder":true,"kindle":true,"kitchen":true,"kiwi":true,"koeln":true,"komatsu":true,"kosher":true,"kpmg":true,"kpn":true,"krd":true,"kred":true,"kuokgroup":true,"kyoto":true,"lacaixa":true,"ladbrokes":true,"lamborghini":true,"lamer":true,"lancaster":true,"lancia":true,"lancome":true,"land":true,"landrover":true,"lanxess":true,"lasalle":true,"lat":true,"latino":true,"latrobe":true,"law":true,"lawyer":true,"lds":true,"lease":true,"leclerc":true,"lefrak":true,"legal":true,"lego":true,"lexus":true,"lgbt":true,"liaison":true,"lidl":true,"life":true,"lifeinsurance":true,"lifestyle":true,"lighting":true,"like":true,"lilly":true,"limited":true,"limo":true,"lincoln":true,"linde":true,"link":true,"lipsy":true,"live":true,"living":true,"lixil":true,"loan":true,"loans":true,"locker":true,"locus":true,"loft":true,"lol":true,"london":true,"lotte":true,"lotto":true,"love":true,"lpl":true,"lplfinancial":true,"ltd":true,"ltda":true,"lundbeck":true,"lupin":true,"luxe":true,"luxury":true,"macys":true,"madrid":true,"maif":true,"maison":true,"makeup":true,"man":true,"management":true,"mango":true,"map":true,"market":true,"marketing":true,"markets":true,"marriott":true,"marshalls":true,"maserati":true,"mattel":true,"mba":true,"mckinsey":true,"med":true,"media":true,"meet":true,"melbourne":true,"meme":true,"memorial":true,"men":true,"menu":true,"meo":true,"merckmsd":true,"metlife":true,"miami":true,"microsoft":true,"mini":true,"mint":true,"mit":true,"mitsubishi":true,"mlb":true,"mls":true,"mma":true,"mobile":true,"mobily":true,"moda":true,"moe":true,"moi":true,"mom":true,"monash":true,"money":true,"monster":true,"mopar":true,"mormon":true,"mortgage":true,"moscow":true,"moto":true,"motorcycles":true,"mov":true,"movie":true,"movistar":true,"msd":true,"mtn":true,"mtpc":true,"mtr":true,"mutual":true,"nab":true,"nadex":true,"nagoya":true,"nationwide":true,"natura":true,"navy":true,"nba":true,"nec":true,"netbank":true,"netflix":true,"network":true,"neustar":true,"new":true,"newholland":true,"news":true,"next":true,"nextdirect":true,"nexus":true,"nfl":true,"ngo":true,"nhk":true,"nico":true,"nike":true,"nikon":true,"ninja":true,"nissan":true,"nissay":true,"nokia":true,"northwesternmutual":true,"norton":true,"now":true,"nowruz":true,"nowtv":true,"nra":true,"nrw":true,"ntt":true,"nyc":true,"obi":true,"observer":true,"off":true,"office":true,"okinawa":true,"olayan":true,"olayangroup":true,"oldnavy":true,"ollo":true,"omega":true,"one":true,"ong":true,"onl":true,"online":true,"onyourside":true,"ooo":true,"open":true,"oracle":true,"orange":true,"organic":true,"origins":true,"osaka":true,"otsuka":true,"ott":true,"ovh":true,"page":true,"panasonic":true,"panerai":true,"paris":true,"pars":true,"partners":true,"parts":true,"party":true,"passagens":true,"pay":true,"pccw":true,"pet":true,"pfizer":true,"pharmacy":true,"phd":true,"philips":true,"phone":true,"photo":true,"photography":true,"photos":true,"physio":true,"piaget":true,"pics":true,"pictet":true,"pictures":true,"pid":true,"pin":true,"ping":true,"pink":true,"pioneer":true,"pizza":true,"place":true,"play":true,"playstation":true,"plumbing":true,"plus":true,"pnc":true,"pohl":true,"poker":true,"politie":true,"porn":true,"pramerica":true,"praxi":true,"press":true,"prime":true,"prod":true,"productions":true,"prof":true,"progressive":true,"promo":true,"properties":true,"property":true,"protection":true,"pru":true,"prudential":true,"pub":true,"pwc":true,"qpon":true,"quebec":true,"quest":true,"qvc":true,"racing":true,"radio":true,"raid":true,"read":true,"realestate":true,"realtor":true,"realty":true,"recipes":true,"red":true,"redstone":true,"redumbrella":true,"rehab":true,"reise":true,"reisen":true,"reit":true,"reliance":true,"ren":true,"rent":true,"rentals":true,"repair":true,"report":true,"republican":true,"rest":true,"restaurant":true,"review":true,"reviews":true,"rexroth":true,"rich":true,"richardli":true,"ricoh":true,"rightathome":true,"ril":true,"rio":true,"rip":true,"rmit":true,"rocher":true,"rocks":true,"rodeo":true,"rogers":true,"room":true,"rsvp":true,"rugby":true,"ruhr":true,"run":true,"rwe":true,"ryukyu":true,"saarland":true,"safe":true,"safety":true,"sakura":true,"sale":true,"salon":true,"samsclub":true,"samsung":true,"sandvik":true,"sandvikcoromant":true,"sanofi":true,"sap":true,"sapo":true,"sarl":true,"sas":true,"save":true,"saxo":true,"sbi":true,"sbs":true,"sca":true,"scb":true,"schaeffler":true,"schmidt":true,"scholarships":true,"school":true,"schule":true,"schwarz":true,"science":true,"scjohnson":true,"scor":true,"scot":true,"search":true,"seat":true,"secure":true,"security":true,"seek":true,"select":true,"sener":true,"services":true,"ses":true,"seven":true,"sew":true,"sex":true,"sexy":true,"sfr":true,"shangrila":true,"sharp":true,"shaw":true,"shell":true,"shia":true,"shiksha":true,"shoes":true,"shop":true,"shopping":true,"shouji":true,"show":true,"showtime":true,"shriram":true,"silk":true,"sina":true,"singles":true,"site":true,"ski":true,"skin":true,"sky":true,"skype":true,"sling":true,"smart":true,"smile":true,"sncf":true,"soccer":true,"social":true,"softbank":true,"software":true,"sohu":true,"solar":true,"solutions":true,"song":true,"sony":true,"soy":true,"space":true,"spiegel":true,"spot":true,"spreadbetting":true,"srl":true,"srt":true,"stada":true,"staples":true,"star":true,"starhub":true,"statebank":true,"statefarm":true,"statoil":true,"stc":true,"stcgroup":true,"stockholm":true,"storage":true,"store":true,"stream":true,"studio":true,"study":true,"style":true,"sucks":true,"supplies":true,"supply":true,"support":true,"surf":true,"surgery":true,"suzuki":true,"swatch":true,"swiftcover":true,"swiss":true,"sydney":true,"symantec":true,"systems":true,"tab":true,"taipei":true,"talk":true,"taobao":true,"target":true,"tatamotors":true,"tatar":true,"tattoo":true,"tax":true,"taxi":true,"tci":true,"tdk":true,"team":true,"tech":true,"technology":true,"telecity":true,"telefonica":true,"temasek":true,"tennis":true,"teva":true,"thd":true,"theater":true,"theatre":true,"tiaa":true,"tickets":true,"tienda":true,"tiffany":true,"tips":true,"tires":true,"tirol":true,"tjmaxx":true,"tjx":true,"tkmaxx":true,"tmall":true,"today":true,"tokyo":true,"tools":true,"top":true,"toray":true,"toshiba":true,"total":true,"tours":true,"town":true,"toyota":true,"toys":true,"trade":true,"trading":true,"training":true,"travelchannel":true,"travelers":true,"travelersinsurance":true,"trust":true,"trv":true,"tube":true,"tui":true,"tunes":true,"tushu":true,"tvs":true,"ubank":true,"ubs":true,"uconnect":true,"unicom":true,"university":true,"uno":true,"uol":true,"ups":true,"vacations":true,"vana":true,"vanguard":true,"vegas":true,"ventures":true,"verisign":true,"versicherung":true,"vet":true,"viajes":true,"video":true,"vig":true,"viking":true,"villas":true,"vin":true,"vip":true,"virgin":true,"visa":true,"vision":true,"vista":true,"vistaprint":true,"viva":true,"vivo":true,"vlaanderen":true,"vodka":true,"volkswagen":true,"volvo":true,"vote":true,"voting":true,"voto":true,"voyage":true,"vuelos":true,"wales":true,"walmart":true,"walter":true,"wang":true,"wanggou":true,"warman":true,"watch":true,"watches":true,"weather":true,"weatherchannel":true,"webcam":true,"weber":true,"website":true,"wed":true,"wedding":true,"weibo":true,"weir":true,"whoswho":true,"wien":true,"wiki":true,"williamhill":true,"win":true,"windows":true,"wine":true,"winners":true,"wme":true,"wolterskluwer":true,"woodside":true,"work":true,"works":true,"world":true,"wow":true,"wtc":true,"wtf":true,"xbox":true,"xerox":true,"xfinity":true,"xihuan":true,"xin":true,"xn--11b4c3d":true,"xn--1ck2e1b":true,"xn--1qqw23a":true,"xn--30rr7y":true,"xn--3bst00m":true,"xn--3ds443g":true,"xn--3oq18vl8pn36a":true,"xn--3pxu8k":true,"xn--42c2d9a":true,"xn--45q11c":true,"xn--4gbrim":true,"xn--55qw42g":true,"xn--55qx5d":true,"xn--5su34j936bgsg":true,"xn--5tzm5g":true,"xn--6frz82g":true,"xn--6qq986b3xl":true,"xn--80adxhks":true,"xn--80aqecdr1a":true,"xn--80asehdb":true,"xn--80aswg":true,"xn--8y0a063a":true,"xn--9dbq2a":true,"xn--9et52u":true,"xn--9krt00a":true,"xn--b4w605ferd":true,"xn--bck1b9a5dre4c":true,"xn--c1avg":true,"xn--c2br7g":true,"xn--cck2b3b":true,"xn--cg4bki":true,"xn--czr694b":true,"xn--czrs0t":true,"xn--czru2d":true,"xn--d1acj3b":true,"xn--eckvdtc9d":true,"xn--efvy88h":true,"xn--estv75g":true,"xn--fct429k":true,"xn--fhbei":true,"xn--fiq228c5hs":true,"xn--fiq64b":true,"xn--fjq720a":true,"xn--flw351e":true,"xn--fzys8d69uvgm":true,"xn--g2xx48c":true,"xn--gckr3f0f":true,"xn--gk3at1e":true,"xn--hxt814e":true,"xn--i1b6b1a6a2e":true,"xn--imr513n":true,"xn--io0a7i":true,"xn--j1aef":true,"xn--jlq61u9w7b":true,"xn--jvr189m":true,"xn--kcrx77d1x4a":true,"xn--kpu716f":true,"xn--kput3i":true,"xn--mgba3a3ejt":true,"xn--mgba7c0bbn0a":true,"xn--mgbaakc7dvf":true,"xn--mgbab2bd":true,"xn--mgbb9fbpob":true,"xn--mgbca7dzdo":true,"xn--mgbi4ecexp":true,"xn--mgbt3dhd":true,"xn--mk1bu44c":true,"xn--mxtq1m":true,"xn--ngbc5azd":true,"xn--ngbe9e0a":true,"xn--ngbrx":true,"xn--nqv7f":true,"xn--nqv7fs00ema":true,"xn--nyqy26a":true,"xn--p1acf":true,"xn--pbt977c":true,"xn--pssy2u":true,"xn--q9jyb4c":true,"xn--qcka1pmc":true,"xn--rhqv96g":true,"xn--rovu88b":true,"xn--ses554g":true,"xn--t60b56a":true,"xn--tckwe":true,"xn--tiq49xqyj":true,"xn--unup4y":true,"xn--vermgensberater-ctb":true,"xn--vermgensberatung-pwb":true,"xn--vhquv":true,"xn--vuq861b":true,"xn--w4r85el8fhu5dnra":true,"xn--w4rs40l":true,"xn--xhq521b":true,"xn--zfr164b":true,"xperia":true,"xyz":true,"yachts":true,"yahoo":true,"yamaxun":true,"yandex":true,"yodobashi":true,"yoga":true,"yokohama":true,"you":true,"youtube":true,"yun":true,"zappos":true,"zara":true,"zero":true,"zip":true,"zippo":true,"zone":true,"zuerich":true,"cc.ua":true,"inf.ua":true,"ltd.ua":true,"1password.ca":true,"1password.com":true,"1password.eu":true,"beep.pl":true,"*.compute.estate":true,"*.alces.network":true,"alwaysdata.net":true,"cloudfront.net":true,"*.compute.amazonaws.com":true,"*.compute-1.amazonaws.com":true,"*.compute.amazonaws.com.cn":true,"us-east-1.amazonaws.com":true,"cn-north-1.eb.amazonaws.com.cn":true,"elasticbeanstalk.com":true,"ap-northeast-1.elasticbeanstalk.com":true,"ap-northeast-2.elasticbeanstalk.com":true,"ap-south-1.elasticbeanstalk.com":true,"ap-southeast-1.elasticbeanstalk.com":true,"ap-southeast-2.elasticbeanstalk.com":true,"ca-central-1.elasticbeanstalk.com":true,"eu-central-1.elasticbeanstalk.com":true,"eu-west-1.elasticbeanstalk.com":true,"eu-west-2.elasticbeanstalk.com":true,"eu-west-3.elasticbeanstalk.com":true,"sa-east-1.elasticbeanstalk.com":true,"us-east-1.elasticbeanstalk.com":true,"us-east-2.elasticbeanstalk.com":true,"us-gov-west-1.elasticbeanstalk.com":true,"us-west-1.elasticbeanstalk.com":true,"us-west-2.elasticbeanstalk.com":true,"*.elb.amazonaws.com":true,"*.elb.amazonaws.com.cn":true,"s3.amazonaws.com":true,"s3-ap-northeast-1.amazonaws.com":true,"s3-ap-northeast-2.amazonaws.com":true,"s3-ap-south-1.amazonaws.com":true,"s3-ap-southeast-1.amazonaws.com":true,"s3-ap-southeast-2.amazonaws.com":true,"s3-ca-central-1.amazonaws.com":true,"s3-eu-central-1.amazonaws.com":true,"s3-eu-west-1.amazonaws.com":true,"s3-eu-west-2.amazonaws.com":true,"s3-eu-west-3.amazonaws.com":true,"s3-external-1.amazonaws.com":true,"s3-fips-us-gov-west-1.amazonaws.com":true,"s3-sa-east-1.amazonaws.com":true,"s3-us-gov-west-1.amazonaws.com":true,"s3-us-east-2.amazonaws.com":true,"s3-us-west-1.amazonaws.com":true,"s3-us-west-2.amazonaws.com":true,"s3.ap-northeast-2.amazonaws.com":true,"s3.ap-south-1.amazonaws.com":true,"s3.cn-north-1.amazonaws.com.cn":true,"s3.ca-central-1.amazonaws.com":true,"s3.eu-central-1.amazonaws.com":true,"s3.eu-west-2.amazonaws.com":true,"s3.eu-west-3.amazonaws.com":true,"s3.us-east-2.amazonaws.com":true,"s3.dualstack.ap-northeast-1.amazonaws.com":true,"s3.dualstack.ap-northeast-2.amazonaws.com":true,"s3.dualstack.ap-south-1.amazonaws.com":true,"s3.dualstack.ap-southeast-1.amazonaws.com":true,"s3.dualstack.ap-southeast-2.amazonaws.com":true,"s3.dualstack.ca-central-1.amazonaws.com":true,"s3.dualstack.eu-central-1.amazonaws.com":true,"s3.dualstack.eu-west-1.amazonaws.com":true,"s3.dualstack.eu-west-2.amazonaws.com":true,"s3.dualstack.eu-west-3.amazonaws.com":true,"s3.dualstack.sa-east-1.amazonaws.com":true,"s3.dualstack.us-east-1.amazonaws.com":true,"s3.dualstack.us-east-2.amazonaws.com":true,"s3-website-us-east-1.amazonaws.com":true,"s3-website-us-west-1.amazonaws.com":true,"s3-website-us-west-2.amazonaws.com":true,"s3-website-ap-northeast-1.amazonaws.com":true,"s3-website-ap-southeast-1.amazonaws.com":true,"s3-website-ap-southeast-2.amazonaws.com":true,"s3-website-eu-west-1.amazonaws.com":true,"s3-website-sa-east-1.amazonaws.com":true,"s3-website.ap-northeast-2.amazonaws.com":true,"s3-website.ap-south-1.amazonaws.com":true,"s3-website.ca-central-1.amazonaws.com":true,"s3-website.eu-central-1.amazonaws.com":true,"s3-website.eu-west-2.amazonaws.com":true,"s3-website.eu-west-3.amazonaws.com":true,"s3-website.us-east-2.amazonaws.com":true,"t3l3p0rt.net":true,"tele.amune.org":true,"on-aptible.com":true,"user.party.eus":true,"pimienta.org":true,"poivron.org":true,"potager.org":true,"sweetpepper.org":true,"myasustor.com":true,"myfritz.net":true,"*.awdev.ca":true,"*.advisor.ws":true,"backplaneapp.io":true,"betainabox.com":true,"bnr.la":true,"boomla.net":true,"boxfuse.io":true,"square7.ch":true,"bplaced.com":true,"bplaced.de":true,"square7.de":true,"bplaced.net":true,"square7.net":true,"browsersafetymark.io":true,"mycd.eu":true,"ae.org":true,"ar.com":true,"br.com":true,"cn.com":true,"com.de":true,"com.se":true,"de.com":true,"eu.com":true,"gb.com":true,"gb.net":true,"hu.com":true,"hu.net":true,"jp.net":true,"jpn.com":true,"kr.com":true,"mex.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"se.net":true,"uk.com":true,"uk.net":true,"us.com":true,"uy.com":true,"za.bz":true,"za.com":true,"africa.com":true,"gr.com":true,"in.net":true,"us.org":true,"co.com":true,"c.la":true,"certmgr.org":true,"xenapponazure.com":true,"virtueeldomein.nl":true,"c66.me":true,"cloud66.ws":true,"jdevcloud.com":true,"wpdevcloud.com":true,"cloudaccess.host":true,"freesite.host":true,"cloudaccess.net":true,"cloudcontrolled.com":true,"cloudcontrolapp.com":true,"co.ca":true,"co.cz":true,"c.cdn77.org":true,"cdn77-ssl.net":true,"r.cdn77.net":true,"rsc.cdn77.org":true,"ssl.origin.cdn77-secure.org":true,"cloudns.asia":true,"cloudns.biz":true,"cloudns.club":true,"cloudns.cc":true,"cloudns.eu":true,"cloudns.in":true,"cloudns.info":true,"cloudns.org":true,"cloudns.pro":true,"cloudns.pw":true,"cloudns.us":true,"co.nl":true,"co.no":true,"webhosting.be":true,"hosting-cluster.nl":true,"dyn.cosidns.de":true,"dynamisches-dns.de":true,"dnsupdater.de":true,"internet-dns.de":true,"l-o-g-i-n.de":true,"dynamic-dns.info":true,"feste-ip.net":true,"knx-server.net":true,"static-access.net":true,"realm.cz":true,"*.cryptonomic.net":true,"cupcake.is":true,"cyon.link":true,"cyon.site":true,"daplie.me":true,"localhost.daplie.me":true,"biz.dk":true,"co.dk":true,"firm.dk":true,"reg.dk":true,"store.dk":true,"debian.net":true,"dedyn.io":true,"dnshome.de":true,"drayddns.com":true,"dreamhosters.com":true,"mydrobo.com":true,"drud.io":true,"drud.us":true,"duckdns.org":true,"dy.fi":true,"tunk.org":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true,"ddnss.de":true,"dyn.ddnss.de":true,"dyndns.ddnss.de":true,"dyndns1.de":true,"dyn-ip24.de":true,"home-webserver.de":true,"dyn.home-webserver.de":true,"myhome-server.de":true,"ddnss.org":true,"definima.net":true,"definima.io":true,"ddnsfree.com":true,"ddnsgeek.com":true,"giize.com":true,"gleeze.com":true,"kozow.com":true,"loseyourip.com":true,"ooguy.com":true,"theworkpc.com":true,"casacam.net":true,"dynu.net":true,"accesscam.org":true,"camdvr.org":true,"freeddns.org":true,"mywire.org":true,"webredirect.org":true,"myddns.rocks":true,"blogsite.xyz":true,"dynv6.net":true,"e4.cz":true,"mytuleap.com":true,"enonic.io":true,"customer.enonic.io":true,"eu.org":true,"al.eu.org":true,"asso.eu.org":true,"at.eu.org":true,"au.eu.org":true,"be.eu.org":true,"bg.eu.org":true,"ca.eu.org":true,"cd.eu.org":true,"ch.eu.org":true,"cn.eu.org":true,"cy.eu.org":true,"cz.eu.org":true,"de.eu.org":true,"dk.eu.org":true,"edu.eu.org":true,"ee.eu.org":true,"es.eu.org":true,"fi.eu.org":true,"fr.eu.org":true,"gr.eu.org":true,"hr.eu.org":true,"hu.eu.org":true,"ie.eu.org":true,"il.eu.org":true,"in.eu.org":true,"int.eu.org":true,"is.eu.org":true,"it.eu.org":true,"jp.eu.org":true,"kr.eu.org":true,"lt.eu.org":true,"lu.eu.org":true,"lv.eu.org":true,"mc.eu.org":true,"me.eu.org":true,"mk.eu.org":true,"mt.eu.org":true,"my.eu.org":true,"net.eu.org":true,"ng.eu.org":true,"nl.eu.org":true,"no.eu.org":true,"nz.eu.org":true,"paris.eu.org":true,"pl.eu.org":true,"pt.eu.org":true,"q-a.eu.org":true,"ro.eu.org":true,"ru.eu.org":true,"se.eu.org":true,"si.eu.org":true,"sk.eu.org":true,"tr.eu.org":true,"uk.eu.org":true,"us.eu.org":true,"eu-1.evennode.com":true,"eu-2.evennode.com":true,"eu-3.evennode.com":true,"eu-4.evennode.com":true,"us-1.evennode.com":true,"us-2.evennode.com":true,"us-3.evennode.com":true,"us-4.evennode.com":true,"twmail.cc":true,"twmail.net":true,"twmail.org":true,"mymailer.com.tw":true,"url.tw":true,"apps.fbsbx.com":true,"ru.net":true,"adygeya.ru":true,"bashkiria.ru":true,"bir.ru":true,"cbg.ru":true,"com.ru":true,"dagestan.ru":true,"grozny.ru":true,"kalmykia.ru":true,"kustanai.ru":true,"marine.ru":true,"mordovia.ru":true,"msk.ru":true,"mytis.ru":true,"nalchik.ru":true,"nov.ru":true,"pyatigorsk.ru":true,"spb.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"abkhazia.su":true,"adygeya.su":true,"aktyubinsk.su":true,"arkhangelsk.su":true,"armenia.su":true,"ashgabad.su":true,"azerbaijan.su":true,"balashov.su":true,"bashkiria.su":true,"bryansk.su":true,"bukhara.su":true,"chimkent.su":true,"dagestan.su":true,"east-kazakhstan.su":true,"exnet.su":true,"georgia.su":true,"grozny.su":true,"ivanovo.su":true,"jambyl.su":true,"kalmykia.su":true,"kaluga.su":true,"karacol.su":true,"karaganda.su":true,"karelia.su":true,"khakassia.su":true,"krasnodar.su":true,"kurgan.su":true,"kustanai.su":true,"lenug.su":true,"mangyshlak.su":true,"mordovia.su":true,"msk.su":true,"murmansk.su":true,"nalchik.su":true,"navoi.su":true,"north-kazakhstan.su":true,"nov.su":true,"obninsk.su":true,"penza.su":true,"pokrovsk.su":true,"sochi.su":true,"spb.su":true,"tashkent.su":true,"termez.su":true,"togliatti.su":true,"troitsk.su":true,"tselinograd.su":true,"tula.su":true,"tuva.su":true,"vladikavkaz.su":true,"vladimir.su":true,"vologda.su":true,"channelsdvr.net":true,"fastlylb.net":true,"map.fastlylb.net":true,"freetls.fastly.net":true,"map.fastly.net":true,"a.prod.fastly.net":true,"global.prod.fastly.net":true,"a.ssl.fastly.net":true,"b.ssl.fastly.net":true,"global.ssl.fastly.net":true,"fhapp.xyz":true,"fedorainfracloud.org":true,"fedorapeople.org":true,"cloud.fedoraproject.org":true,"app.os.fedoraproject.org":true,"app.os.stg.fedoraproject.org":true,"filegear.me":true,"firebaseapp.com":true,"flynnhub.com":true,"flynnhosting.net":true,"freebox-os.com":true,"freeboxos.com":true,"fbx-os.fr":true,"fbxos.fr":true,"freebox-os.fr":true,"freeboxos.fr":true,"*.futurecms.at":true,"futurehosting.at":true,"futuremailing.at":true,"*.ex.ortsinfo.at":true,"*.kunden.ortsinfo.at":true,"*.statics.cloud":true,"service.gov.uk":true,"github.io":true,"githubusercontent.com":true,"gitlab.io":true,"homeoffice.gov.uk":true,"ro.im":true,"shop.ro":true,"goip.de":true,"*.0emm.com":true,"appspot.com":true,"blogspot.ae":true,"blogspot.al":true,"blogspot.am":true,"blogspot.ba":true,"blogspot.be":true,"blogspot.bg":true,"blogspot.bj":true,"blogspot.ca":true,"blogspot.cf":true,"blogspot.ch":true,"blogspot.cl":true,"blogspot.co.at":true,"blogspot.co.id":true,"blogspot.co.il":true,"blogspot.co.ke":true,"blogspot.co.nz":true,"blogspot.co.uk":true,"blogspot.co.za":true,"blogspot.com":true,"blogspot.com.ar":true,"blogspot.com.au":true,"blogspot.com.br":true,"blogspot.com.by":true,"blogspot.com.co":true,"blogspot.com.cy":true,"blogspot.com.ee":true,"blogspot.com.eg":true,"blogspot.com.es":true,"blogspot.com.mt":true,"blogspot.com.ng":true,"blogspot.com.tr":true,"blogspot.com.uy":true,"blogspot.cv":true,"blogspot.cz":true,"blogspot.de":true,"blogspot.dk":true,"blogspot.fi":true,"blogspot.fr":true,"blogspot.gr":true,"blogspot.hk":true,"blogspot.hr":true,"blogspot.hu":true,"blogspot.ie":true,"blogspot.in":true,"blogspot.is":true,"blogspot.it":true,"blogspot.jp":true,"blogspot.kr":true,"blogspot.li":true,"blogspot.lt":true,"blogspot.lu":true,"blogspot.md":true,"blogspot.mk":true,"blogspot.mr":true,"blogspot.mx":true,"blogspot.my":true,"blogspot.nl":true,"blogspot.no":true,"blogspot.pe":true,"blogspot.pt":true,"blogspot.qa":true,"blogspot.re":true,"blogspot.ro":true,"blogspot.rs":true,"blogspot.ru":true,"blogspot.se":true,"blogspot.sg":true,"blogspot.si":true,"blogspot.sk":true,"blogspot.sn":true,"blogspot.td":true,"blogspot.tw":true,"blogspot.ug":true,"blogspot.vn":true,"cloudfunctions.net":true,"cloud.goog":true,"codespot.com":true,"googleapis.com":true,"googlecode.com":true,"pagespeedmobilizer.com":true,"publishproxy.com":true,"withgoogle.com":true,"withyoutube.com":true,"hashbang.sh":true,"hasura-app.io":true,"hepforge.org":true,"herokuapp.com":true,"herokussl.com":true,"moonscale.net":true,"iki.fi":true,"biz.at":true,"info.at":true,"info.cx":true,"ac.leg.br":true,"al.leg.br":true,"am.leg.br":true,"ap.leg.br":true,"ba.leg.br":true,"ce.leg.br":true,"df.leg.br":true,"es.leg.br":true,"go.leg.br":true,"ma.leg.br":true,"mg.leg.br":true,"ms.leg.br":true,"mt.leg.br":true,"pa.leg.br":true,"pb.leg.br":true,"pe.leg.br":true,"pi.leg.br":true,"pr.leg.br":true,"rj.leg.br":true,"rn.leg.br":true,"ro.leg.br":true,"rr.leg.br":true,"rs.leg.br":true,"sc.leg.br":true,"se.leg.br":true,"sp.leg.br":true,"to.leg.br":true,"pixolino.com":true,"ipifony.net":true,"*.triton.zone":true,"*.cns.joyent.com":true,"js.org":true,"keymachine.de":true,"knightpoint.systems":true,"co.krd":true,"edu.krd":true,"git-repos.de":true,"lcube-server.de":true,"svn-repos.de":true,"linkyard.cloud":true,"linkyard-cloud.ch":true,"we.bs":true,"barsy.bg":true,"barsyonline.com":true,"barsy.de":true,"barsy.eu":true,"barsy.in":true,"barsy.net":true,"barsy.online":true,"barsy.support":true,"*.magentosite.cloud":true,"hb.cldmail.ru":true,"cloud.metacentrum.cz":true,"custom.metacentrum.cz":true,"meteorapp.com":true,"eu.meteorapp.com":true,"co.pl":true,"azurewebsites.net":true,"azure-mobile.net":true,"cloudapp.net":true,"mozilla-iot.org":true,"bmoattachments.org":true,"net.ru":true,"org.ru":true,"pp.ru":true,"bitballoon.com":true,"netlify.com":true,"4u.com":true,"ngrok.io":true,"nh-serv.co.uk":true,"nfshost.com":true,"nsupdate.info":true,"nerdpol.ovh":true,"blogsyte.com":true,"brasilia.me":true,"cable-modem.org":true,"ciscofreak.com":true,"collegefan.org":true,"couchpotatofries.org":true,"damnserver.com":true,"ddns.me":true,"ditchyourip.com":true,"dnsfor.me":true,"dnsiskinky.com":true,"dvrcam.info":true,"dynns.com":true,"eating-organic.net":true,"fantasyleague.cc":true,"geekgalaxy.com":true,"golffan.us":true,"health-carereform.com":true,"homesecuritymac.com":true,"homesecuritypc.com":true,"hopto.me":true,"ilovecollege.info":true,"loginto.me":true,"mlbfan.org":true,"mmafan.biz":true,"myactivedirectory.com":true,"mydissent.net":true,"myeffect.net":true,"mymediapc.net":true,"mypsx.net":true,"mysecuritycamera.com":true,"mysecuritycamera.net":true,"mysecuritycamera.org":true,"net-freaks.com":true,"nflfan.org":true,"nhlfan.net":true,"no-ip.ca":true,"no-ip.co.uk":true,"no-ip.net":true,"noip.us":true,"onthewifi.com":true,"pgafan.net":true,"point2this.com":true,"pointto.us":true,"privatizehealthinsurance.net":true,"quicksytes.com":true,"read-books.org":true,"securitytactics.com":true,"serveexchange.com":true,"servehumour.com":true,"servep2p.com":true,"servesarcasm.com":true,"stufftoread.com":true,"ufcfan.org":true,"unusualperson.com":true,"workisboring.com":true,"3utilities.com":true,"bounceme.net":true,"ddns.net":true,"ddnsking.com":true,"gotdns.ch":true,"hopto.org":true,"myftp.biz":true,"myftp.org":true,"myvnc.com":true,"no-ip.biz":true,"no-ip.info":true,"no-ip.org":true,"noip.me":true,"redirectme.net":true,"servebeer.com":true,"serveblog.net":true,"servecounterstrike.com":true,"serveftp.com":true,"servegame.com":true,"servehalflife.com":true,"servehttp.com":true,"serveirc.com":true,"serveminecraft.net":true,"servemp3.com":true,"servepics.com":true,"servequake.com":true,"sytes.net":true,"webhop.me":true,"zapto.org":true,"stage.nodeart.io":true,"nodum.co":true,"nodum.io":true,"nyc.mn":true,"nom.ae":true,"nom.ai":true,"nom.al":true,"nym.by":true,"nym.bz":true,"nom.cl":true,"nom.gd":true,"nom.gl":true,"nym.gr":true,"nom.gt":true,"nom.hn":true,"nom.im":true,"nym.kz":true,"nym.la":true,"nom.li":true,"nym.li":true,"nym.lt":true,"nym.lu":true,"nym.me":true,"nom.mk":true,"nym.mx":true,"nom.nu":true,"nym.nz":true,"nym.pe":true,"nym.pt":true,"nom.pw":true,"nom.qa":true,"nom.rs":true,"nom.si":true,"nym.sk":true,"nym.su":true,"nym.sx":true,"nym.tw":true,"nom.ug":true,"nom.uy":true,"nom.vc":true,"nom.vg":true,"cya.gg":true,"nid.io":true,"opencraft.hosting":true,"operaunite.com":true,"outsystemscloud.com":true,"ownprovider.com":true,"oy.lc":true,"pgfog.com":true,"pagefrontapp.com":true,"art.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pantheonsite.io":true,"gotpantheon.com":true,"mypep.link":true,"on-web.fr":true,"*.platform.sh":true,"*.platformsh.site":true,"xen.prgmr.com":true,"priv.at":true,"protonet.io":true,"chirurgiens-dentistes-en-france.fr":true,"byen.site":true,"qa2.com":true,"dev-myqnapcloud.com":true,"alpha-myqnapcloud.com":true,"myqnapcloud.com":true,"*.quipelements.com":true,"vapor.cloud":true,"vaporcloud.io":true,"rackmaze.com":true,"rackmaze.net":true,"rhcloud.com":true,"resindevice.io":true,"devices.resinstaging.io":true,"hzc.io":true,"wellbeingzone.eu":true,"ptplus.fit":true,"wellbeingzone.co.uk":true,"sandcats.io":true,"logoip.de":true,"logoip.com":true,"schokokeks.net":true,"scrysec.com":true,"firewall-gateway.com":true,"firewall-gateway.de":true,"my-gateway.de":true,"my-router.de":true,"spdns.de":true,"spdns.eu":true,"firewall-gateway.net":true,"my-firewall.org":true,"myfirewall.org":true,"spdns.org":true,"*.s5y.io":true,"*.sensiosite.cloud":true,"biz.ua":true,"co.ua":true,"pp.ua":true,"shiftedit.io":true,"myshopblocks.com":true,"1kapp.com":true,"appchizi.com":true,"applinzi.com":true,"sinaapp.com":true,"vipsinaapp.com":true,"bounty-full.com":true,"alpha.bounty-full.com":true,"beta.bounty-full.com":true,"static.land":true,"dev.static.land":true,"sites.static.land":true,"apps.lair.io":true,"*.stolos.io":true,"spacekit.io":true,"stackspace.space":true,"storj.farm":true,"temp-dns.com":true,"diskstation.me":true,"dscloud.biz":true,"dscloud.me":true,"dscloud.mobi":true,"dsmynas.com":true,"dsmynas.net":true,"dsmynas.org":true,"familyds.com":true,"familyds.net":true,"familyds.org":true,"i234.me":true,"myds.me":true,"synology.me":true,"vpnplus.to":true,"taifun-dns.de":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"cust.dev.thingdust.io":true,"cust.disrec.thingdust.io":true,"cust.prod.thingdust.io":true,"cust.testing.thingdust.io":true,"bloxcms.com":true,"townnews-staging.com":true,"12hp.at":true,"2ix.at":true,"4lima.at":true,"lima-city.at":true,"12hp.ch":true,"2ix.ch":true,"4lima.ch":true,"lima-city.ch":true,"trafficplex.cloud":true,"de.cool":true,"12hp.de":true,"2ix.de":true,"4lima.de":true,"lima-city.de":true,"1337.pictures":true,"clan.rip":true,"lima-city.rocks":true,"webspace.rocks":true,"lima.zone":true,"*.transurl.be":true,"*.transurl.eu":true,"*.transurl.nl":true,"tuxfamily.org":true,"dd-dns.de":true,"diskstation.eu":true,"diskstation.org":true,"dray-dns.de":true,"draydns.de":true,"dyn-vpn.de":true,"dynvpn.de":true,"mein-vigor.de":true,"my-vigor.de":true,"my-wan.de":true,"syno-ds.de":true,"synology-diskstation.de":true,"synology-ds.de":true,"uber.space":true,"hk.com":true,"hk.org":true,"ltd.hk":true,"inc.hk":true,"lib.de.us":true,"2038.io":true,"router.management":true,"v-info.info":true,"wedeploy.io":true,"wedeploy.me":true,"wedeploy.sh":true,"remotewd.com":true,"wmflabs.org":true,"cistron.nl":true,"demon.nl":true,"xs4all.space":true,"official.academy":true,"yolasite.com":true,"ybo.faith":true,"yombo.me":true,"homelink.one":true,"ybo.party":true,"ybo.review":true,"ybo.science":true,"ybo.trade":true,"za.net":true,"za.org":true,"now.sh":true});

// END of automatically generated file


/***/ }),
/* 429 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * Copyright (c) 2015, Salesforce.com, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Salesforce.com nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*jshint unused:false */

function Store() {
}
exports.Store = Store;

// Stores may be synchronous, but are still required to use a
// Continuation-Passing Style API.  The CookieJar itself will expose a "*Sync"
// API that converts from synchronous-callbacks to imperative style.
Store.prototype.synchronous = false;

Store.prototype.findCookie = function(domain, path, key, cb) {
  throw new Error('findCookie is not implemented');
};

Store.prototype.findCookies = function(domain, path, cb) {
  throw new Error('findCookies is not implemented');
};

Store.prototype.putCookie = function(cookie, cb) {
  throw new Error('putCookie is not implemented');
};

Store.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  // recommended default implementation:
  // return this.putCookie(newCookie, cb);
  throw new Error('updateCookie is not implemented');
};

Store.prototype.removeCookie = function(domain, path, key, cb) {
  throw new Error('removeCookie is not implemented');
};

Store.prototype.removeCookies = function(domain, path, cb) {
  throw new Error('removeCookies is not implemented');
};

Store.prototype.getAllCookies = function(cb) {
  throw new Error('getAllCookies is not implemented (therefore jar cannot be serialized)');
};


/***/ }),
/* 430 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory();
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define([], factory);
	}
	else {
		// Global (browser)
		root.CryptoJS = factory();
	}
}(this, function () {

	/**
	 * CryptoJS core components.
	 */
	var CryptoJS = CryptoJS || (function (Math, undefined) {
	    /*
	     * Local polyfil of Object.create
	     */
	    var create = Object.create || (function () {
	        function F() {};

	        return function (obj) {
	            var subtype;

	            F.prototype = obj;

	            subtype = new F();

	            F.prototype = null;

	            return subtype;
	        };
	    }())

	    /**
	     * CryptoJS namespace.
	     */
	    var C = {};

	    /**
	     * Library namespace.
	     */
	    var C_lib = C.lib = {};

	    /**
	     * Base object for prototypal inheritance.
	     */
	    var Base = C_lib.Base = (function () {


	        return {
	            /**
	             * Creates a new object that inherits from this object.
	             *
	             * @param {Object} overrides Properties to copy into the new object.
	             *
	             * @return {Object} The new object.
	             *
	             * @static
	             *
	             * @example
	             *
	             *     var MyType = CryptoJS.lib.Base.extend({
	             *         field: 'value',
	             *
	             *         method: function () {
	             *         }
	             *     });
	             */
	            extend: function (overrides) {
	                // Spawn
	                var subtype = create(this);

	                // Augment
	                if (overrides) {
	                    subtype.mixIn(overrides);
	                }

	                // Create default initializer
	                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
	                    subtype.init = function () {
	                        subtype.$super.init.apply(this, arguments);
	                    };
	                }

	                // Initializer's prototype is the subtype object
	                subtype.init.prototype = subtype;

	                // Reference supertype
	                subtype.$super = this;

	                return subtype;
	            },

	            /**
	             * Extends this object and runs the init method.
	             * Arguments to create() will be passed to init().
	             *
	             * @return {Object} The new object.
	             *
	             * @static
	             *
	             * @example
	             *
	             *     var instance = MyType.create();
	             */
	            create: function () {
	                var instance = this.extend();
	                instance.init.apply(instance, arguments);

	                return instance;
	            },

	            /**
	             * Initializes a newly created object.
	             * Override this method to add some logic when your objects are created.
	             *
	             * @example
	             *
	             *     var MyType = CryptoJS.lib.Base.extend({
	             *         init: function () {
	             *             // ...
	             *         }
	             *     });
	             */
	            init: function () {
	            },

	            /**
	             * Copies properties into this object.
	             *
	             * @param {Object} properties The properties to mix in.
	             *
	             * @example
	             *
	             *     MyType.mixIn({
	             *         field: 'value'
	             *     });
	             */
	            mixIn: function (properties) {
	                for (var propertyName in properties) {
	                    if (properties.hasOwnProperty(propertyName)) {
	                        this[propertyName] = properties[propertyName];
	                    }
	                }

	                // IE won't copy toString using the loop above
	                if (properties.hasOwnProperty('toString')) {
	                    this.toString = properties.toString;
	                }
	            },

	            /**
	             * Creates a copy of this object.
	             *
	             * @return {Object} The clone.
	             *
	             * @example
	             *
	             *     var clone = instance.clone();
	             */
	            clone: function () {
	                return this.init.prototype.extend(this);
	            }
	        };
	    }());

	    /**
	     * An array of 32-bit words.
	     *
	     * @property {Array} words The array of 32-bit words.
	     * @property {number} sigBytes The number of significant bytes in this word array.
	     */
	    var WordArray = C_lib.WordArray = Base.extend({
	        /**
	         * Initializes a newly created word array.
	         *
	         * @param {Array} words (Optional) An array of 32-bit words.
	         * @param {number} sigBytes (Optional) The number of significant bytes in the words.
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.lib.WordArray.create();
	         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
	         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
	         */
	        init: function (words, sigBytes) {
	            words = this.words = words || [];

	            if (sigBytes != undefined) {
	                this.sigBytes = sigBytes;
	            } else {
	                this.sigBytes = words.length * 4;
	            }
	        },

	        /**
	         * Converts this word array to a string.
	         *
	         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
	         *
	         * @return {string} The stringified word array.
	         *
	         * @example
	         *
	         *     var string = wordArray + '';
	         *     var string = wordArray.toString();
	         *     var string = wordArray.toString(CryptoJS.enc.Utf8);
	         */
	        toString: function (encoder) {
	            return (encoder || Hex).stringify(this);
	        },

	        /**
	         * Concatenates a word array to this word array.
	         *
	         * @param {WordArray} wordArray The word array to append.
	         *
	         * @return {WordArray} This word array.
	         *
	         * @example
	         *
	         *     wordArray1.concat(wordArray2);
	         */
	        concat: function (wordArray) {
	            // Shortcuts
	            var thisWords = this.words;
	            var thatWords = wordArray.words;
	            var thisSigBytes = this.sigBytes;
	            var thatSigBytes = wordArray.sigBytes;

	            // Clamp excess bits
	            this.clamp();

	            // Concat
	            if (thisSigBytes % 4) {
	                // Copy one byte at a time
	                for (var i = 0; i < thatSigBytes; i++) {
	                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
	                }
	            } else {
	                // Copy one word at a time
	                for (var i = 0; i < thatSigBytes; i += 4) {
	                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];
	                }
	            }
	            this.sigBytes += thatSigBytes;

	            // Chainable
	            return this;
	        },

	        /**
	         * Removes insignificant bits.
	         *
	         * @example
	         *
	         *     wordArray.clamp();
	         */
	        clamp: function () {
	            // Shortcuts
	            var words = this.words;
	            var sigBytes = this.sigBytes;

	            // Clamp
	            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
	            words.length = Math.ceil(sigBytes / 4);
	        },

	        /**
	         * Creates a copy of this word array.
	         *
	         * @return {WordArray} The clone.
	         *
	         * @example
	         *
	         *     var clone = wordArray.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);
	            clone.words = this.words.slice(0);

	            return clone;
	        },

	        /**
	         * Creates a word array filled with random bytes.
	         *
	         * @param {number} nBytes The number of random bytes to generate.
	         *
	         * @return {WordArray} The random word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.lib.WordArray.random(16);
	         */
	        random: function (nBytes) {
	            var words = [];

	            var r = (function (m_w) {
	                var m_w = m_w;
	                var m_z = 0x3ade68b1;
	                var mask = 0xffffffff;

	                return function () {
	                    m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;
	                    m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;
	                    var result = ((m_z << 0x10) + m_w) & mask;
	                    result /= 0x100000000;
	                    result += 0.5;
	                    return result * (Math.random() > .5 ? 1 : -1);
	                }
	            });

	            for (var i = 0, rcache; i < nBytes; i += 4) {
	                var _r = r((rcache || Math.random()) * 0x100000000);

	                rcache = _r() * 0x3ade67b7;
	                words.push((_r() * 0x100000000) | 0);
	            }

	            return new WordArray.init(words, nBytes);
	        }
	    });

	    /**
	     * Encoder namespace.
	     */
	    var C_enc = C.enc = {};

	    /**
	     * Hex encoding strategy.
	     */
	    var Hex = C_enc.Hex = {
	        /**
	         * Converts a word array to a hex string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The hex string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var hexChars = [];
	            for (var i = 0; i < sigBytes; i++) {
	                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                hexChars.push((bite >>> 4).toString(16));
	                hexChars.push((bite & 0x0f).toString(16));
	            }

	            return hexChars.join('');
	        },

	        /**
	         * Converts a hex string to a word array.
	         *
	         * @param {string} hexStr The hex string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);
	         */
	        parse: function (hexStr) {
	            // Shortcut
	            var hexStrLength = hexStr.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < hexStrLength; i += 2) {
	                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
	            }

	            return new WordArray.init(words, hexStrLength / 2);
	        }
	    };

	    /**
	     * Latin1 encoding strategy.
	     */
	    var Latin1 = C_enc.Latin1 = {
	        /**
	         * Converts a word array to a Latin1 string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The Latin1 string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var latin1Chars = [];
	            for (var i = 0; i < sigBytes; i++) {
	                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
	                latin1Chars.push(String.fromCharCode(bite));
	            }

	            return latin1Chars.join('');
	        },

	        /**
	         * Converts a Latin1 string to a word array.
	         *
	         * @param {string} latin1Str The Latin1 string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
	         */
	        parse: function (latin1Str) {
	            // Shortcut
	            var latin1StrLength = latin1Str.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < latin1StrLength; i++) {
	                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
	            }

	            return new WordArray.init(words, latin1StrLength);
	        }
	    };

	    /**
	     * UTF-8 encoding strategy.
	     */
	    var Utf8 = C_enc.Utf8 = {
	        /**
	         * Converts a word array to a UTF-8 string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The UTF-8 string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            try {
	                return decodeURIComponent(escape(Latin1.stringify(wordArray)));
	            } catch (e) {
	                throw new Error('Malformed UTF-8 data');
	            }
	        },

	        /**
	         * Converts a UTF-8 string to a word array.
	         *
	         * @param {string} utf8Str The UTF-8 string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
	         */
	        parse: function (utf8Str) {
	            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
	        }
	    };

	    /**
	     * Abstract buffered block algorithm template.
	     *
	     * The property blockSize must be implemented in a concrete subtype.
	     *
	     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
	     */
	    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
	        /**
	         * Resets this block algorithm's data buffer to its initial state.
	         *
	         * @example
	         *
	         *     bufferedBlockAlgorithm.reset();
	         */
	        reset: function () {
	            // Initial values
	            this._data = new WordArray.init();
	            this._nDataBytes = 0;
	        },

	        /**
	         * Adds new data to this block algorithm's buffer.
	         *
	         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
	         *
	         * @example
	         *
	         *     bufferedBlockAlgorithm._append('data');
	         *     bufferedBlockAlgorithm._append(wordArray);
	         */
	        _append: function (data) {
	            // Convert string to WordArray, else assume WordArray already
	            if (typeof data == 'string') {
	                data = Utf8.parse(data);
	            }

	            // Append
	            this._data.concat(data);
	            this._nDataBytes += data.sigBytes;
	        },

	        /**
	         * Processes available data blocks.
	         *
	         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
	         *
	         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
	         *
	         * @return {WordArray} The processed data.
	         *
	         * @example
	         *
	         *     var processedData = bufferedBlockAlgorithm._process();
	         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');
	         */
	        _process: function (doFlush) {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;
	            var dataSigBytes = data.sigBytes;
	            var blockSize = this.blockSize;
	            var blockSizeBytes = blockSize * 4;

	            // Count blocks ready
	            var nBlocksReady = dataSigBytes / blockSizeBytes;
	            if (doFlush) {
	                // Round up to include partial blocks
	                nBlocksReady = Math.ceil(nBlocksReady);
	            } else {
	                // Round down to include only full blocks,
	                // less the number of blocks that must remain in the buffer
	                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
	            }

	            // Count words ready
	            var nWordsReady = nBlocksReady * blockSize;

	            // Count bytes ready
	            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);

	            // Process blocks
	            if (nWordsReady) {
	                for (var offset = 0; offset < nWordsReady; offset += blockSize) {
	                    // Perform concrete-algorithm logic
	                    this._doProcessBlock(dataWords, offset);
	                }

	                // Remove processed words
	                var processedWords = dataWords.splice(0, nWordsReady);
	                data.sigBytes -= nBytesReady;
	            }

	            // Return processed words
	            return new WordArray.init(processedWords, nBytesReady);
	        },

	        /**
	         * Creates a copy of this object.
	         *
	         * @return {Object} The clone.
	         *
	         * @example
	         *
	         *     var clone = bufferedBlockAlgorithm.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);
	            clone._data = this._data.clone();

	            return clone;
	        },

	        _minBufferSize: 0
	    });

	    /**
	     * Abstract hasher template.
	     *
	     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
	     */
	    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
	        /**
	         * Configuration options.
	         */
	        cfg: Base.extend(),

	        /**
	         * Initializes a newly created hasher.
	         *
	         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
	         *
	         * @example
	         *
	         *     var hasher = CryptoJS.algo.SHA256.create();
	         */
	        init: function (cfg) {
	            // Apply config defaults
	            this.cfg = this.cfg.extend(cfg);

	            // Set initial values
	            this.reset();
	        },

	        /**
	         * Resets this hasher to its initial state.
	         *
	         * @example
	         *
	         *     hasher.reset();
	         */
	        reset: function () {
	            // Reset data buffer
	            BufferedBlockAlgorithm.reset.call(this);

	            // Perform concrete-hasher logic
	            this._doReset();
	        },

	        /**
	         * Updates this hasher with a message.
	         *
	         * @param {WordArray|string} messageUpdate The message to append.
	         *
	         * @return {Hasher} This hasher.
	         *
	         * @example
	         *
	         *     hasher.update('message');
	         *     hasher.update(wordArray);
	         */
	        update: function (messageUpdate) {
	            // Append
	            this._append(messageUpdate);

	            // Update the hash
	            this._process();

	            // Chainable
	            return this;
	        },

	        /**
	         * Finalizes the hash computation.
	         * Note that the finalize operation is effectively a destructive, read-once operation.
	         *
	         * @param {WordArray|string} messageUpdate (Optional) A final message update.
	         *
	         * @return {WordArray} The hash.
	         *
	         * @example
	         *
	         *     var hash = hasher.finalize();
	         *     var hash = hasher.finalize('message');
	         *     var hash = hasher.finalize(wordArray);
	         */
	        finalize: function (messageUpdate) {
	            // Final message update
	            if (messageUpdate) {
	                this._append(messageUpdate);
	            }

	            // Perform concrete-hasher logic
	            var hash = this._doFinalize();

	            return hash;
	        },

	        blockSize: 512/32,

	        /**
	         * Creates a shortcut function to a hasher's object interface.
	         *
	         * @param {Hasher} hasher The hasher to create a helper for.
	         *
	         * @return {Function} The shortcut function.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
	         */
	        _createHelper: function (hasher) {
	            return function (message, cfg) {
	                return new hasher.init(cfg).finalize(message);
	            };
	        },

	        /**
	         * Creates a shortcut function to the HMAC's object interface.
	         *
	         * @param {Hasher} hasher The hasher to use in this HMAC helper.
	         *
	         * @return {Function} The shortcut function.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
	         */
	        _createHmacHelper: function (hasher) {
	            return function (message, key) {
	                return new C_algo.HMAC.init(hasher, key).finalize(message);
	            };
	        }
	    });

	    /**
	     * Algorithm namespace.
	     */
	    var C_algo = C.algo = {};

	    return C;
	}(Math));


	return CryptoJS;

}));

/***/ }),
/* 431 */
/***/ (function(module, exports) {



module.exports = function vcsurl (url) {
  if (url.indexOf('github.com') >= 0) 
    return parseUrl(url, 'github.com')
  else if (url.indexOf('bitbucket.org') >= 0) 
    return parseUrl(url, 'bitbucket.org') 
} 

function parseUrl(url, site) {
  var pos = url.indexOf(site) + site.length + 1; //+1 => chop either ':' or '/'
  var repo = url.substring(pos);

  repo = repo.replace('.git', '')

  var data = repo.split('/')

  return 'https://' + site.toString() + '/' + data[0] + '/' + data[1];
}

/***/ }),
/* 432 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file param.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(17);

/**
 * SolidityParam object prototype.
 * Should be used when encoding, decoding solidity bytes
 */
var SolidityParam = function (value, offset) {
    this.value = value || '';
    this.offset = offset; // offset in bytes
};

/**
 * This method should be used to get length of params's dynamic part
 * 
 * @method dynamicPartLength
 * @returns {Number} length of dynamic part (in bytes)
 */
SolidityParam.prototype.dynamicPartLength = function () {
    return this.dynamicPart().length / 2;
};

/**
 * This method should be used to create copy of solidity param with different offset
 *
 * @method withOffset
 * @param {Number} offset length in bytes
 * @returns {SolidityParam} new solidity param with applied offset
 */
SolidityParam.prototype.withOffset = function (offset) {
    return new SolidityParam(this.value, offset);
};

/**
 * This method should be used to combine solidity params together
 * eg. when appending an array
 *
 * @method combine
 * @param {SolidityParam} param with which we should combine
 * @param {SolidityParam} result of combination
 */
SolidityParam.prototype.combine = function (param) {
    return new SolidityParam(this.value + param.value); 
};

/**
 * This method should be called to check if param has dynamic size.
 * If it has, it returns true, otherwise false
 *
 * @method isDynamic
 * @returns {Boolean}
 */
SolidityParam.prototype.isDynamic = function () {
    return this.offset !== undefined;
};

/**
 * This method should be called to transform offset to bytes
 *
 * @method offsetAsBytes
 * @returns {String} bytes representation of offset
 */
SolidityParam.prototype.offsetAsBytes = function () {
    return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
};

/**
 * This method should be called to get static part of param
 *
 * @method staticPart
 * @returns {String} offset if it is a dynamic param, otherwise value
 */
SolidityParam.prototype.staticPart = function () {
    if (!this.isDynamic()) {
        return this.value; 
    } 
    return this.offsetAsBytes();
};

/**
 * This method should be called to get dynamic part of param
 *
 * @method dynamicPart
 * @returns {String} returns a value if it is a dynamic param, otherwise empty string
 */
SolidityParam.prototype.dynamicPart = function () {
    return this.isDynamic() ? this.value : '';
};

/**
 * This method should be called to encode param
 *
 * @method encode
 * @returns {String}
 */
SolidityParam.prototype.encode = function () {
    return this.staticPart() + this.dynamicPart();
};

/**
 * This method should be called to encode array of params
 *
 * @method encodeList
 * @param {Array[SolidityParam]} params
 * @returns {String}
 */
SolidityParam.encodeList = function (params) {
    
    // updating offsets
    var totalOffset = params.length * 32;
    var offsetParams = params.map(function (param) {
        if (!param.isDynamic()) {
            return param;
        }
        var offset = totalOffset;
        totalOffset += param.dynamicPartLength();
        return param.withOffset(offset);
    });

    // encode everything!
    return offsetParams.reduce(function (result, param) {
        return result + param.dynamicPart();
    }, offsetParams.reduce(function (result, param) {
        return result + param.staticPart();
    }, ''));
};



module.exports = SolidityParam;



/***/ }),
/* 433 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file event.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(17);
var coder = __webpack_require__(136);
var formatters = __webpack_require__(68);
var sha3 = __webpack_require__(137);
var Filter = __webpack_require__(171);
var watches = __webpack_require__(173);

/**
 * This prototype should be used to create event filters
 */
var SolidityEvent = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._params = json.inputs;
    this._name = utils.transformToFullName(json);
    this._address = address;
    this._anonymous = json.anonymous;
};

/**
 * Should be used to get filtered param types
 *
 * @method types
 * @param {Bool} decide if returned typed should be indexed
 * @return {Array} array of types
 */
SolidityEvent.prototype.types = function (indexed) {
    return this._params.filter(function (i) {
        return i.indexed === indexed;
    }).map(function (i) {
        return i.type;
    });
};

/**
 * Should be used to get event display name
 *
 * @method displayName
 * @return {String} event display name
 */
SolidityEvent.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get event type name
 *
 * @method typeName
 * @return {String} event type name
 */
SolidityEvent.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be used to get event signature
 *
 * @method signature
 * @return {String} event signature
 */
SolidityEvent.prototype.signature = function () {
    return sha3(this._name);
};

/**
 * Should be used to encode indexed params and options to one final object
 *
 * @method encode
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} everything combined together and encoded
 */
SolidityEvent.prototype.encode = function (indexed, options) {
    indexed = indexed || {};
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.topics = [];

    result.address = this._address;
    if (!this._anonymous) {
        result.topics.push('0x' + this.signature());
    }

    var indexedTopics = this._params.filter(function (i) {
        return i.indexed === true;
    }).map(function (i) {
        var value = indexed[i.name];
        if (value === undefined || value === null) {
            return null;
        }

        if (utils.isArray(value)) {
            return value.map(function (v) {
                return '0x' + coder.encodeParam(i.type, v);
            });
        }
        return '0x' + coder.encodeParam(i.type, value);
    });

    result.topics = result.topics.concat(indexedTopics);

    return result;
};

/**
 * Should be used to decode indexed params and options
 *
 * @method decode
 * @param {Object} data
 * @return {Object} result object with decoded indexed && not indexed params
 */
SolidityEvent.prototype.decode = function (data) {

    data.data = data.data || '';
    data.topics = data.topics || [];


    var argTopics = this._anonymous ? data.topics : data.topics.slice(1);
    var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
    var indexedParams = coder.decodeParams(this.types(true), indexedData);

    var notIndexedData = data.data.slice(2);
    var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);

    var result = formatters.outputLogFormatter(data);
    result.event = this.displayName();
    result.address = data.address;

    result.args = this._params.reduce(function (acc, current) {
        acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift();
        return acc;
    }, {});

    delete result.data;
    delete result.topics;

    return result;
};

/**
 * Should be used to create new filter object from event
 *
 * @method execute
 * @param {Object} indexed
 * @param {Object} options
 * @return {Object} filter object
 */
SolidityEvent.prototype.execute = function (indexed, options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 2)
            options = null;
        if(arguments.length === 1) {
            options = null;
            indexed = {};
        }
    }

    var o = this.encode(indexed, options);
    var formatter = this.decode.bind(this);
    return new Filter(o, 'eth', this._requestManager, watches.eth(), formatter, callback);
};

/**
 * Should be used to attach event to contract object
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityEvent.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = this.execute.bind(this, contract);
};

module.exports = SolidityEvent;



/***/ }),
/* 434 */
/***/ (function(module, exports) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file jsonrpc.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 *   Aaron Kumavis <aaron@kumavis.me>
 * @date 2015
 */

// Initialize Jsonrpc as a simple object with utility functions.
var Jsonrpc = {
    messageId: 0
};

/**
 * Should be called to valid json create payload object
 *
 * @method toPayload
 * @param {Function} method of jsonrpc call, required
 * @param {Array} params, an array of method params, optional
 * @returns {Object} valid jsonrpc payload object
 */
Jsonrpc.toPayload = function (method, params) {
    if (!method)
        console.error('jsonrpc method should be specified!');

    // advance message ID
    Jsonrpc.messageId++;

    return {
        jsonrpc: '2.0',
        id: Jsonrpc.messageId,
        method: method,
        params: params || []
    };
};

/**
 * Should be called to check if jsonrpc response is valid
 *
 * @method isValidResponse
 * @param {Object}
 * @returns {Boolean} true if response is valid, otherwise false
 */
Jsonrpc.isValidResponse = function (response) {
    return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);

    function validateSingleMessage(message){
      return !!message &&
        !message.error &&
        message.jsonrpc === '2.0' &&
        typeof message.id === 'number' &&
        message.result !== undefined; // only undefined is not valid json object
    }
};

/**
 * Should be called to create batch payload object
 *
 * @method toBatchPayload
 * @param {Array} messages, an array of objects with method (required) and params (optional) fields
 * @returns {Array} batch payload
 */
Jsonrpc.toBatchPayload = function (messages) {
    return messages.map(function (message) {
        return Jsonrpc.toPayload(message.method, message.params);
    });
};

module.exports = Jsonrpc;



/***/ }),
/* 435 */
/***/ (function(module, exports, __webpack_require__) {

exports.download = __webpack_require__(436).download;
exports.request = __webpack_require__(436).request;

/***/ }),
/* 436 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var http = __webpack_require__(27);
var https = __webpack_require__(45);
var tunnel = __webpack_require__(1090);
var url = __webpack_require__(8);
var zlib = __webpack_require__(87);
var fs = __webpack_require__(1);
var EventEmitter = __webpack_require__(18).EventEmitter;

/**
 * Downloads a file using http get and request
 * @param {string} src - The http URL to download from
 * @param {string} output - The filepath to save to
 * @param {object} options - Options object
 * @param {object} _parentEvent - Used for when their is a 302 redirect and need to maintain state to a new request
 * @param {number} redirects - The number of redirects, used to prevent infinite loops
 * @returns {*|EventEmitter}
 */
function download(src, output, options, _parentEvent, redirects) {
    if(typeof redirects === "undefined") {
        redirects = 0;
    }
    var downloader = _parentEvent || new EventEmitter(),
        srcUrl,
        tunnelAgent,
        req;

    if (options) {
        options = parseOptions('download', options);
    } else {
        options = {
            gunzip: false
        };
    }
    srcUrl = url.parse(src);
    srcUrl.protocol = cleanProtocol(srcUrl.protocol);

    req = request({
        protocol: srcUrl.protocol,
        host: srcUrl.hostname,
        port: srcUrl.port,
        path: srcUrl.pathname + (srcUrl.search || ""),
        proxy: options?options.proxy:undefined,
        auth: options.auth?options.auth:undefined,
        method: 'GET'
    }, function(res) {
        var fileSize, writeStream, downloadedSize;
        var gunzip = zlib.createGunzip();

        // Handle 302 redirects
        if(res.statusCode === 301 || res.statusCode === 302 || res.statusCode === 307) {
            redirects++;
            if(redirects >= 10) {
                downloader.emit('error', 'Infinite redirect loop detected');
            }
            download(res.headers.location, output, options, downloader, redirects);
        }

        if (res.statusCode === 200) {
            downloadedSize = 0;
            fileSize = res.headers['content-length'];
            writeStream = fs.createWriteStream(output, {
                flags: 'w+',
                encoding: 'binary'
            });

            res.on('error', function(err) {
                writeStream.end();
                downloader.emit('error', err);
            });

            var encoding = "";
            if(typeof res.headers['content-encoding'] === "string") {
                encoding = res.headers['content-encoding'];
            }

            // If the user has specified to unzip, and the file is gzip encoded, pipe to gunzip
            if(options.gunzip === true && encoding === "gzip") {
                res.pipe(gunzip);
            } else {
                res.pipe(writeStream);
            }

            //emit a start event so the user knows the file-size he's gonna receive
            downloader.emit('start', fileSize);

            // Data handlers
            res.on('data', function(chunk) {
                downloadedSize += chunk.length;
                downloader.emit('progress', downloadedSize/fileSize);
            });
            gunzip.on('data', function(chunk) {
                writeStream.write(chunk);
            });

            writeStream.on('finish', function() {
                writeStream.end();
                downloader.emit('end', "Finished writing to disk");
                req.end('finished');
            });
        } else if(res.statusCode !== 200 && res.statusCode !== 301 && res.statusCode !== 302) {
            downloader.emit('error', 'Server responded with unhandled status: ' + res.statusCode);
        }
    });

    req.end('done');
    req.on('error', function(err) {
        downloader.emit('error', err);
    });
    // Attach request to our EventEmitter for backwards compatibility, enables actions such as
    // req.abort();
    downloader.req = req;

    return downloader;
}

function request(options, callback) {
    var newOptions = {}, newProxy = {}, key;
    options = parseOptions('request', options);
    if (options.protocol === 'http') {
        if (options.proxy) {
            for (key in options.proxy) {
                if (key !== 'protocol') {
                    newProxy[key] = options.proxy[key];
                }
            }
            if (options.proxy.protocol === 'http') {
                options.agent = tunnel.httpOverHttp({proxy: newProxy});
            } else if (options.proxy.protocol === 'https') {
                options.agent = tunnel.httpOverHttps({proxy: newProxy});
            } else {
                throw options.proxy.protocol + ' proxy is not supported!';
            }
        }
        for (key in options) {
            if (key !== 'protocol' && key !== 'proxy') {
                newOptions[key] = options[key];
            }
        }
        return http.request(newOptions, callback);
    }
    if (options.protocol === 'https') {
        if (options.proxy) {
            for (key in options.proxy) {
                if (key !== 'protocol') {
                    newProxy[key] = options.proxy[key];
                }
            }
            if (options.proxy.protocol === 'http') {
                options.agent = tunnel.httpsOverHttp({proxy: newProxy});
            } else if (options.proxy.protocol === 'https') {
                options.agent = tunnel.httpsOverHttps({proxy: newProxy});
            } else {
                throw options.proxy.protocol + ' proxy is not supported!';
            }
        }
        for (key in options) {
            if (key !== 'protocol' && key !== 'proxy') {
                newOptions[key] = options[key];
            }
        }
        return https.request(newOptions, callback);
    }
    throw 'only allow http or https request!';
}

function parseOptions(type, options) {
    var proxy;
    if (type === 'download') {
        if (options.proxy) {
            if (typeof options.proxy === 'string') {
                proxy = url.parse(options.proxy);
                options.proxy = {};
                options.proxy.protocol = cleanProtocol(proxy.protocol);
                options.proxy.host = proxy.hostname;
                options.proxy.port = proxy.port;
                options.proxy.proxyAuth = proxy.auth;
                options.proxy.headers = {'User-Agent': 'Node'};
            }
        }
        return options;
    }
    if (type === 'request') {
        if (!options.protocol) {
            options.protocol = 'http';
        }
        options.protocol = cleanProtocol(options.protocol);

        if (options.proxy) {
            if (typeof options.proxy === 'string') {
                proxy = url.parse(options.proxy);
                options.proxy = {};
                options.proxy.protocol = cleanProtocol(proxy.protocol);
                options.proxy.host = proxy.hostname;
                options.proxy.port = proxy.port;
                options.proxy.proxyAuth = proxy.auth;
                options.proxy.headers = {'User-Agent': 'Node'};
            }
        }

        options.gunzip = options.gunzip || false;
        return options;
    }
}

function cleanProtocol(str) {
    return str.trim().toLowerCase().replace(/:$/, '');
}

exports.download = download;
exports.request = request;


/***/ }),
/* 437 */
/***/ (function(module, exports) {

// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
  if (fn && cb) return wrappy(fn)(cb)

  if (typeof fn !== 'function')
    throw new TypeError('need wrapper function')

  Object.keys(fn).forEach(function (k) {
    wrapper[k] = fn[k]
  })

  return wrapper

  function wrapper() {
    var args = new Array(arguments.length)
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i]
    }
    var ret = fn.apply(this, args)
    var cb = args[args.length-1]
    if (typeof ret === 'function' && ret !== cb) {
      Object.keys(cb).forEach(function (k) {
        ret[k] = cb[k]
      })
    }
    return ret
  }
}


/***/ }),
/* 438 */
/***/ (function(module, exports, __webpack_require__) {

// Generated by CoffeeScript 1.12.2
(function() {
  var InvalidStateError, NetworkError, ProgressEvent, SecurityError, SyntaxError, XMLHttpRequest, XMLHttpRequestEventTarget, XMLHttpRequestUpload, http, https, os, url,
    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    hasProp = {}.hasOwnProperty;

  XMLHttpRequestEventTarget = (function() {
    function XMLHttpRequestEventTarget() {
      this.onloadstart = null;
      this.onprogress = null;
      this.onabort = null;
      this.onerror = null;
      this.onload = null;
      this.ontimeout = null;
      this.onloadend = null;
      this._listeners = {};
    }

    XMLHttpRequestEventTarget.prototype.onloadstart = null;

    XMLHttpRequestEventTarget.prototype.onprogress = null;

    XMLHttpRequestEventTarget.prototype.onabort = null;

    XMLHttpRequestEventTarget.prototype.onerror = null;

    XMLHttpRequestEventTarget.prototype.onload = null;

    XMLHttpRequestEventTarget.prototype.ontimeout = null;

    XMLHttpRequestEventTarget.prototype.onloadend = null;

    XMLHttpRequestEventTarget.prototype.addEventListener = function(eventType, listener) {
      var base;
      eventType = eventType.toLowerCase();
      (base = this._listeners)[eventType] || (base[eventType] = []);
      this._listeners[eventType].push(listener);
      return void 0;
    };

    XMLHttpRequestEventTarget.prototype.removeEventListener = function(eventType, listener) {
      var index;
      eventType = eventType.toLowerCase();
      if (this._listeners[eventType]) {
        index = this._listeners[eventType].indexOf(listener);
        if (index !== -1) {
          this._listeners[eventType].splice(index, 1);
        }
      }
      return void 0;
    };

    XMLHttpRequestEventTarget.prototype.dispatchEvent = function(event) {
      var eventType, j, len, listener, listeners;
      event.currentTarget = event.target = this;
      eventType = event.type;
      if (listeners = this._listeners[eventType]) {
        for (j = 0, len = listeners.length; j < len; j++) {
          listener = listeners[j];
          listener.call(this, event);
        }
      }
      if (listener = this["on" + eventType]) {
        listener.call(this, event);
      }
      return void 0;
    };

    return XMLHttpRequestEventTarget;

  })();

  http = __webpack_require__(27);

  https = __webpack_require__(45);

  os = __webpack_require__(5);

  url = __webpack_require__(8);

  XMLHttpRequest = (function(superClass) {
    extend(XMLHttpRequest, superClass);

    function XMLHttpRequest(options) {
      XMLHttpRequest.__super__.constructor.call(this);
      this.onreadystatechange = null;
      this._anonymous = options && options.anon;
      this.readyState = XMLHttpRequest.UNSENT;
      this.response = null;
      this.responseText = '';
      this.responseType = '';
      this.responseURL = '';
      this.status = 0;
      this.statusText = '';
      this.timeout = 0;
      this.upload = new XMLHttpRequestUpload(this);
      this._method = null;
      this._url = null;
      this._sync = false;
      this._headers = null;
      this._loweredHeaders = null;
      this._mimeOverride = null;
      this._request = null;
      this._response = null;
      this._responseParts = null;
      this._responseHeaders = null;
      this._aborting = null;
      this._error = null;
      this._loadedBytes = 0;
      this._totalBytes = 0;
      this._lengthComputable = false;
    }

    XMLHttpRequest.prototype.onreadystatechange = null;

    XMLHttpRequest.prototype.readyState = null;

    XMLHttpRequest.prototype.response = null;

    XMLHttpRequest.prototype.responseText = null;

    XMLHttpRequest.prototype.responseType = null;

    XMLHttpRequest.prototype.status = null;

    XMLHttpRequest.prototype.timeout = null;

    XMLHttpRequest.prototype.upload = null;

    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
      var xhrUrl;
      method = method.toUpperCase();
      if (method in this._restrictedMethods) {
        throw new SecurityError("HTTP method " + method + " is not allowed in XHR");
      }
      xhrUrl = this._parseUrl(url);
      if (async === void 0) {
        async = true;
      }
      switch (this.readyState) {
        case XMLHttpRequest.UNSENT:
        case XMLHttpRequest.OPENED:
        case XMLHttpRequest.DONE:
          null;
          break;
        case XMLHttpRequest.HEADERS_RECEIVED:
        case XMLHttpRequest.LOADING:
          null;
      }
      this._method = method;
      this._url = xhrUrl;
      this._sync = !async;
      this._headers = {};
      this._loweredHeaders = {};
      this._mimeOverride = null;
      this._setReadyState(XMLHttpRequest.OPENED);
      this._request = null;
      this._response = null;
      this.status = 0;
      this.statusText = '';
      this._responseParts = [];
      this._responseHeaders = null;
      this._loadedBytes = 0;
      this._totalBytes = 0;
      this._lengthComputable = false;
      return void 0;
    };

    XMLHttpRequest.prototype.setRequestHeader = function(name, value) {
      var loweredName;
      if (this.readyState !== XMLHttpRequest.OPENED) {
        throw new InvalidStateError("XHR readyState must be OPENED");
      }
      loweredName = name.toLowerCase();
      if (this._restrictedHeaders[loweredName] || /^sec\-/.test(loweredName) || /^proxy-/.test(loweredName)) {
        console.warn("Refused to set unsafe header \"" + name + "\"");
        return void 0;
      }
      value = value.toString();
      if (loweredName in this._loweredHeaders) {
        name = this._loweredHeaders[loweredName];
        this._headers[name] = this._headers[name] + ', ' + value;
      } else {
        this._loweredHeaders[loweredName] = name;
        this._headers[name] = value;
      }
      return void 0;
    };

    XMLHttpRequest.prototype.send = function(data) {
      if (this.readyState !== XMLHttpRequest.OPENED) {
        throw new InvalidStateError("XHR readyState must be OPENED");
      }
      if (this._request) {
        throw new InvalidStateError("send() already called");
      }
      switch (this._url.protocol) {
        case 'file:':
          this._sendFile(data);
          break;
        case 'http:':
        case 'https:':
          this._sendHttp(data);
          break;
        default:
          throw new NetworkError("Unsupported protocol " + this._url.protocol);
      }
      return void 0;
    };

    XMLHttpRequest.prototype.abort = function() {
      if (!this._request) {
        return;
      }
      this._request.abort();
      this._setError();
      this._dispatchProgress('abort');
      this._dispatchProgress('loadend');
      return void 0;
    };

    XMLHttpRequest.prototype.getResponseHeader = function(name) {
      var loweredName;
      if (!this._responseHeaders) {
        return null;
      }
      loweredName = name.toLowerCase();
      if (loweredName in this._responseHeaders) {
        return this._responseHeaders[loweredName];
      } else {
        return null;
      }
    };

    XMLHttpRequest.prototype.getAllResponseHeaders = function() {
      var lines, name, value;
      if (!this._responseHeaders) {
        return '';
      }
      lines = (function() {
        var ref, results;
        ref = this._responseHeaders;
        results = [];
        for (name in ref) {
          value = ref[name];
          results.push(name + ": " + value);
        }
        return results;
      }).call(this);
      return lines.join("\r\n");
    };

    XMLHttpRequest.prototype.overrideMimeType = function(newMimeType) {
      if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) {
        throw new InvalidStateError("overrideMimeType() not allowed in LOADING or DONE");
      }
      this._mimeOverride = newMimeType.toLowerCase();
      return void 0;
    };

    XMLHttpRequest.prototype.nodejsSet = function(options) {
      var baseUrl, parsedUrl;
      if ('httpAgent' in options) {
        this.nodejsHttpAgent = options.httpAgent;
      }
      if ('httpsAgent' in options) {
        this.nodejsHttpsAgent = options.httpsAgent;
      }
      if ('baseUrl' in options) {
        baseUrl = options.baseUrl;
        if (baseUrl !== null) {
          parsedUrl = url.parse(baseUrl, false, true);
          if (!parsedUrl.protocol) {
            throw new SyntaxError("baseUrl must be an absolute URL");
          }
        }
        this.nodejsBaseUrl = baseUrl;
      }
      return void 0;
    };

    XMLHttpRequest.nodejsSet = function(options) {
      XMLHttpRequest.prototype.nodejsSet(options);
      return void 0;
    };

    XMLHttpRequest.prototype.UNSENT = 0;

    XMLHttpRequest.UNSENT = 0;

    XMLHttpRequest.prototype.OPENED = 1;

    XMLHttpRequest.OPENED = 1;

    XMLHttpRequest.prototype.HEADERS_RECEIVED = 2;

    XMLHttpRequest.HEADERS_RECEIVED = 2;

    XMLHttpRequest.prototype.LOADING = 3;

    XMLHttpRequest.LOADING = 3;

    XMLHttpRequest.prototype.DONE = 4;

    XMLHttpRequest.DONE = 4;

    XMLHttpRequest.prototype.nodejsHttpAgent = http.globalAgent;

    XMLHttpRequest.prototype.nodejsHttpsAgent = https.globalAgent;

    XMLHttpRequest.prototype.nodejsBaseUrl = null;

    XMLHttpRequest.prototype._restrictedMethods = {
      CONNECT: true,
      TRACE: true,
      TRACK: true
    };

    XMLHttpRequest.prototype._restrictedHeaders = {
      'accept-charset': true,
      'accept-encoding': true,
      'access-control-request-headers': true,
      'access-control-request-method': true,
      connection: true,
      'content-length': true,
      cookie: true,
      cookie2: true,
      date: true,
      dnt: true,
      expect: true,
      host: true,
      'keep-alive': true,
      origin: true,
      referer: true,
      te: true,
      trailer: true,
      'transfer-encoding': true,
      upgrade: true,
      'user-agent': true,
      via: true
    };

    XMLHttpRequest.prototype._privateHeaders = {
      'set-cookie': true,
      'set-cookie2': true
    };

    XMLHttpRequest.prototype._userAgent = ("Mozilla/5.0 (" + (os.type()) + " " + (os.arch()) + ") ") + ("node.js/" + process.versions.node + " v8/" + process.versions.v8);

    XMLHttpRequest.prototype._setReadyState = function(newReadyState) {
      var event;
      this.readyState = newReadyState;
      event = new ProgressEvent('readystatechange');
      this.dispatchEvent(event);
      return void 0;
    };

    XMLHttpRequest.prototype._sendFile = function() {
      if (this._url.method !== 'GET') {
        throw new NetworkError('The file protocol only supports GET');
      }
      throw new Error("Protocol file: not implemented");
    };

    XMLHttpRequest.prototype._sendHttp = function(data) {
      if (this._sync) {
        throw new Error("Synchronous XHR processing not implemented");
      }
      if ((data != null) && (this._method === 'GET' || this._method === 'HEAD')) {
        console.warn("Discarding entity body for " + this._method + " requests");
        data = null;
      } else {
        data || (data = '');
      }
      this.upload._setData(data);
      this._finalizeHeaders();
      this._sendHxxpRequest();
      return void 0;
    };

    XMLHttpRequest.prototype._sendHxxpRequest = function() {
      var agent, hxxp, request;
      if (this._url.protocol === 'http:') {
        hxxp = http;
        agent = this.nodejsHttpAgent;
      } else {
        hxxp = https;
        agent = this.nodejsHttpsAgent;
      }
      request = hxxp.request({
        hostname: this._url.hostname,
        port: this._url.port,
        path: this._url.path,
        auth: this._url.auth,
        method: this._method,
        headers: this._headers,
        agent: agent
      });
      this._request = request;
      if (this.timeout) {
        request.setTimeout(this.timeout, (function(_this) {
          return function() {
            return _this._onHttpTimeout(request);
          };
        })(this));
      }
      request.on('response', (function(_this) {
        return function(response) {
          return _this._onHttpResponse(request, response);
        };
      })(this));
      request.on('error', (function(_this) {
        return function(error) {
          return _this._onHttpRequestError(request, error);
        };
      })(this));
      this.upload._startUpload(request);
      if (this._request === request) {
        this._dispatchProgress('loadstart');
      }
      return void 0;
    };

    XMLHttpRequest.prototype._finalizeHeaders = function() {
      this._headers['Connection'] = 'keep-alive';
      this._headers['Host'] = this._url.host;
      if (this._anonymous) {
        this._headers['Referer'] = 'about:blank';
      }
      this._headers['User-Agent'] = this._userAgent;
      this.upload._finalizeHeaders(this._headers, this._loweredHeaders);
      return void 0;
    };

    XMLHttpRequest.prototype._onHttpResponse = function(request, response) {
      var lengthString;
      if (this._request !== request) {
        return;
      }
      switch (response.statusCode) {
        case 301:
        case 302:
        case 303:
        case 307:
        case 308:
          this._url = this._parseUrl(response.headers['location']);
          this._method = 'GET';
          if ('content-type' in this._loweredHeaders) {
            delete this._headers[this._loweredHeaders['content-type']];
            delete this._loweredHeaders['content-type'];
          }
          if ('Content-Type' in this._headers) {
            delete this._headers['Content-Type'];
          }
          delete this._headers['Content-Length'];
          this.upload._reset();
          this._finalizeHeaders();
          this._sendHxxpRequest();
          return;
      }
      this._response = response;
      this._response.on('data', (function(_this) {
        return function(data) {
          return _this._onHttpResponseData(response, data);
        };
      })(this));
      this._response.on('end', (function(_this) {
        return function() {
          return _this._onHttpResponseEnd(response);
        };
      })(this));
      this._response.on('close', (function(_this) {
        return function() {
          return _this._onHttpResponseClose(response);
        };
      })(this));
      this.responseURL = this._url.href.split('#')[0];
      this.status = this._response.statusCode;
      this.statusText = http.STATUS_CODES[this.status];
      this._parseResponseHeaders(response);
      if (lengthString = this._responseHeaders['content-length']) {
        this._totalBytes = parseInt(lengthString);
        this._lengthComputable = true;
      } else {
        this._lengthComputable = false;
      }
      return this._setReadyState(XMLHttpRequest.HEADERS_RECEIVED);
    };

    XMLHttpRequest.prototype._onHttpResponseData = function(response, data) {
      if (this._response !== response) {
        return;
      }
      this._responseParts.push(data);
      this._loadedBytes += data.length;
      if (this.readyState !== XMLHttpRequest.LOADING) {
        this._setReadyState(XMLHttpRequest.LOADING);
      }
      return this._dispatchProgress('progress');
    };

    XMLHttpRequest.prototype._onHttpResponseEnd = function(response) {
      if (this._response !== response) {
        return;
      }
      this._parseResponse();
      this._request = null;
      this._response = null;
      this._setReadyState(XMLHttpRequest.DONE);
      this._dispatchProgress('load');
      return this._dispatchProgress('loadend');
    };

    XMLHttpRequest.prototype._onHttpResponseClose = function(response) {
      var request;
      if (this._response !== response) {
        return;
      }
      request = this._request;
      this._setError();
      request.abort();
      this._setReadyState(XMLHttpRequest.DONE);
      this._dispatchProgress('error');
      return this._dispatchProgress('loadend');
    };

    XMLHttpRequest.prototype._onHttpTimeout = function(request) {
      if (this._request !== request) {
        return;
      }
      this._setError();
      request.abort();
      this._setReadyState(XMLHttpRequest.DONE);
      this._dispatchProgress('timeout');
      return this._dispatchProgress('loadend');
    };

    XMLHttpRequest.prototype._onHttpRequestError = function(request, error) {
      if (this._request !== request) {
        return;
      }
      this._setError();
      request.abort();
      this._setReadyState(XMLHttpRequest.DONE);
      this._dispatchProgress('error');
      return this._dispatchProgress('loadend');
    };

    XMLHttpRequest.prototype._dispatchProgress = function(eventType) {
      var event;
      event = new ProgressEvent(eventType);
      event.lengthComputable = this._lengthComputable;
      event.loaded = this._loadedBytes;
      event.total = this._totalBytes;
      this.dispatchEvent(event);
      return void 0;
    };

    XMLHttpRequest.prototype._setError = function() {
      this._request = null;
      this._response = null;
      this._responseHeaders = null;
      this._responseParts = null;
      return void 0;
    };

    XMLHttpRequest.prototype._parseUrl = function(urlString) {
      var absoluteUrlString, index, password, user, xhrUrl;
      if (this.nodejsBaseUrl === null) {
        absoluteUrlString = urlString;
      } else {
        absoluteUrlString = url.resolve(this.nodejsBaseUrl, urlString);
      }
      xhrUrl = url.parse(absoluteUrlString, false, true);
      xhrUrl.hash = null;
      if (xhrUrl.auth && ((typeof user !== "undefined" && user !== null) || (typeof password !== "undefined" && password !== null))) {
        index = xhrUrl.auth.indexOf(':');
        if (index === -1) {
          if (!user) {
            user = xhrUrl.auth;
          }
        } else {
          if (!user) {
            user = xhrUrl.substring(0, index);
          }
          if (!password) {
            password = xhrUrl.substring(index + 1);
          }
        }
      }
      if (user || password) {
        xhrUrl.auth = user + ":" + password;
      }
      return xhrUrl;
    };

    XMLHttpRequest.prototype._parseResponseHeaders = function(response) {
      var loweredName, name, ref, value;
      this._responseHeaders = {};
      ref = response.headers;
      for (name in ref) {
        value = ref[name];
        loweredName = name.toLowerCase();
        if (this._privateHeaders[loweredName]) {
          continue;
        }
        if (this._mimeOverride !== null && loweredName === 'content-type') {
          value = this._mimeOverride;
        }
        this._responseHeaders[loweredName] = value;
      }
      if (this._mimeOverride !== null && !('content-type' in this._responseHeaders)) {
        this._responseHeaders['content-type'] = this._mimeOverride;
      }
      return void 0;
    };

    XMLHttpRequest.prototype._parseResponse = function() {
      var arrayBuffer, buffer, i, j, jsonError, ref, view;
      if (Buffer.concat) {
        buffer = Buffer.concat(this._responseParts);
      } else {
        buffer = this._concatBuffers(this._responseParts);
      }
      this._responseParts = null;
      switch (this.responseType) {
        case 'text':
          this._parseTextResponse(buffer);
          break;
        case 'json':
          this.responseText = null;
          try {
            this.response = JSON.parse(buffer.toString('utf-8'));
          } catch (error1) {
            jsonError = error1;
            this.response = null;
          }
          break;
        case 'buffer':
          this.responseText = null;
          this.response = buffer;
          break;
        case 'arraybuffer':
          this.responseText = null;
          arrayBuffer = new ArrayBuffer(buffer.length);
          view = new Uint8Array(arrayBuffer);
          for (i = j = 0, ref = buffer.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
            view[i] = buffer[i];
          }
          this.response = arrayBuffer;
          break;
        default:
          this._parseTextResponse(buffer);
      }
      return void 0;
    };

    XMLHttpRequest.prototype._parseTextResponse = function(buffer) {
      var e;
      try {
        this.responseText = buffer.toString(this._parseResponseEncoding());
      } catch (error1) {
        e = error1;
        this.responseText = buffer.toString('binary');
      }
      this.response = this.responseText;
      return void 0;
    };

    XMLHttpRequest.prototype._parseResponseEncoding = function() {
      var contentType, encoding, match;
      encoding = null;
      if (contentType = this._responseHeaders['content-type']) {
        if (match = /\;\s*charset\=(.*)$/.exec(contentType)) {
          return match[1];
        }
      }
      return 'utf-8';
    };

    XMLHttpRequest.prototype._concatBuffers = function(buffers) {
      var buffer, j, k, len, len1, length, target;
      if (buffers.length === 0) {
        return new Buffer(0);
      }
      if (buffers.length === 1) {
        return buffers[0];
      }
      length = 0;
      for (j = 0, len = buffers.length; j < len; j++) {
        buffer = buffers[j];
        length += buffer.length;
      }
      target = new Buffer(length);
      length = 0;
      for (k = 0, len1 = buffers.length; k < len1; k++) {
        buffer = buffers[k];
        buffer.copy(target, length);
        length += buffer.length;
      }
      return target;
    };

    return XMLHttpRequest;

  })(XMLHttpRequestEventTarget);

  module.exports = XMLHttpRequest;

  XMLHttpRequest.XMLHttpRequest = XMLHttpRequest;

  SecurityError = (function(superClass) {
    extend(SecurityError, superClass);

    function SecurityError() {
      SecurityError.__super__.constructor.apply(this, arguments);
    }

    return SecurityError;

  })(Error);

  XMLHttpRequest.SecurityError = SecurityError;

  InvalidStateError = (function(superClass) {
    extend(InvalidStateError, superClass);

    function InvalidStateError() {
      InvalidStateError.__super__.constructor.apply(this, arguments);
    }

    return InvalidStateError;

  })(Error);

  InvalidStateError = (function(superClass) {
    extend(InvalidStateError, superClass);

    function InvalidStateError() {
      return InvalidStateError.__super__.constructor.apply(this, arguments);
    }

    return InvalidStateError;

  })(Error);

  XMLHttpRequest.InvalidStateError = InvalidStateError;

  NetworkError = (function(superClass) {
    extend(NetworkError, superClass);

    function NetworkError() {
      NetworkError.__super__.constructor.apply(this, arguments);
    }

    return NetworkError;

  })(Error);

  XMLHttpRequest.SyntaxError = SyntaxError;

  SyntaxError = (function(superClass) {
    extend(SyntaxError, superClass);

    function SyntaxError() {
      SyntaxError.__super__.constructor.apply(this, arguments);
    }

    return SyntaxError;

  })(Error);

  ProgressEvent = (function() {
    function ProgressEvent(type) {
      this.type = type;
      this.target = null;
      this.currentTarget = null;
      this.lengthComputable = false;
      this.loaded = 0;
      this.total = 0;
    }

    ProgressEvent.prototype.bubbles = false;

    ProgressEvent.prototype.cancelable = false;

    ProgressEvent.prototype.target = null;

    ProgressEvent.prototype.loaded = null;

    ProgressEvent.prototype.lengthComputable = null;

    ProgressEvent.prototype.total = null;

    return ProgressEvent;

  })();

  XMLHttpRequest.ProgressEvent = ProgressEvent;

  XMLHttpRequestUpload = (function(superClass) {
    extend(XMLHttpRequestUpload, superClass);

    function XMLHttpRequestUpload(request) {
      XMLHttpRequestUpload.__super__.constructor.call(this);
      this._request = request;
      this._reset();
    }

    XMLHttpRequestUpload.prototype._reset = function() {
      this._contentType = null;
      this._body = null;
      return void 0;
    };

    XMLHttpRequestUpload.prototype._setData = function(data) {
      var body, i, j, k, offset, ref, ref1, view;
      if (typeof data === 'undefined' || data === null) {
        return;
      }
      if (typeof data === 'string') {
        if (data.length !== 0) {
          this._contentType = 'text/plain;charset=UTF-8';
        }
        this._body = new Buffer(data, 'utf8');
      } else if (Buffer.isBuffer(data)) {
        this._body = data;
      } else if (data instanceof ArrayBuffer) {
        body = new Buffer(data.byteLength);
        view = new Uint8Array(data);
        for (i = j = 0, ref = data.byteLength; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
          body[i] = view[i];
        }
        this._body = body;
      } else if (data.buffer && data.buffer instanceof ArrayBuffer) {
        body = new Buffer(data.byteLength);
        offset = data.byteOffset;
        view = new Uint8Array(data.buffer);
        for (i = k = 0, ref1 = data.byteLength; 0 <= ref1 ? k < ref1 : k > ref1; i = 0 <= ref1 ? ++k : --k) {
          body[i] = view[i + offset];
        }
        this._body = body;
      } else {
        throw new Error("Unsupported send() data " + data);
      }
      return void 0;
    };

    XMLHttpRequestUpload.prototype._finalizeHeaders = function(headers, loweredHeaders) {
      if (this._contentType) {
        if (!('content-type' in loweredHeaders)) {
          headers['Content-Type'] = this._contentType;
        }
      }
      if (this._body) {
        headers['Content-Length'] = this._body.length.toString();
      }
      return void 0;
    };

    XMLHttpRequestUpload.prototype._startUpload = function(request) {
      if (this._body) {
        request.write(this._body);
      }
      request.end();
      return void 0;
    };

    return XMLHttpRequestUpload;

  })(XMLHttpRequestEventTarget);

  XMLHttpRequest.XMLHttpRequestUpload = XMLHttpRequestUpload;

}).call(this);


/***/ }),
/* 439 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 440 */
/***/ (function(module, exports) {

var Blockchain = {

  getBlockByNumber: function(blockNumber, provider, callback){
    var params = [blockNumber, true];
    provider.sendAsync({
      jsonrpc: '2.0',
      method: 'eth_getBlockByNumber',
      params: params,
      id: Date.now(),
    }, callback)
  },

  getBlockByHash: function(blockHash, provider, callback){
    var params = [blockHash, true];
    provider.sendAsync({
      jsonrpc: '2.0',
      method: 'eth_getBlockByHash',
      params: params,
      id: Date.now(),
    }, callback)
  },

  parse: function(uri) {
    var parsed = {};
    if (uri.indexOf("blockchain://") != 0) return parsed;

    uri = uri.replace("blockchain://", "");

    var pieces = uri.split("/block/");

    parsed.genesis_hash = "0x" + pieces[0];
    parsed.block_hash = "0x" + pieces[1];

    return parsed;
  },

  asURI: function(provider, callback) {
    var self = this;
    var genesis;

    self.getBlockByNumber("0x0", provider, function(err, response) {
      if (err) return callback(err);
      genesis = response.result;

      self.getBlockByNumber("latest", provider, function(err, response) {
        if (err) return callback(err);
        latest = response.result;
        var url = "blockchain://" + genesis.hash.replace("0x", "") + "/block/" + latest.hash.replace("0x", "");
        callback(null, url);
      });
    });
  },

  matches: function(uri, provider, callback) {
    var self = this;
    uri = self.parse(uri);

    var expected_genesis = uri.genesis_hash;
    var expected_block = uri.block_hash;

    self.getBlockByNumber("0x0", provider, function(err, response) {
      if (err) return callback(err);
      var block = response.result;
      if (block.hash != expected_genesis) return callback(null, false);

      self.getBlockByHash(expected_block, provider, function(err, response) {
        // Treat an error as if the block didn't exist. This is because
        // some clients respond differently.
        var block = response.result;
        if (err || block == null) {
          return callback(null, false);
        }

        callback(null, true);
      });
    });
  }
};

module.exports = Blockchain;


/***/ }),
/* 441 */
/***/ (function(module, exports, __webpack_require__) {

var opcodes = __webpack_require__(1135);

module.exports = {
  /**
   * parseCode - return a list of instructions given a 0x-prefixed code string.
   *
   * Any contract metadata, if present, will be stripped.
   *
   * @param  {String} hex_string Hex string representing the code
   * @return Array               Array of instructions
   */
  parseCode: function (hex_string) {
    // Convert to an array of bytes (denoted by substrings)
    var code = hex_string.match(/(..?)/g);

    // Remove the last 43 bytes, which is the contract metadata
    // TODO: Make this conditional, as it's assumed the metadata exists.
    code.splice(-43);

    // Convert to Buffer
    code = Buffer.from(code.join("").replace("0x", ""), "hex");

    var instructions = []
    for (var pc = 0; pc < code.length; pc++) {
      var opcode = opcodes(code[pc], true)
      opcode.pc = pc;
      if (opcode.name.slice(0, 4) === 'PUSH') {
        var length = code[pc] - 0x5f
        opcode.pushData = code.slice(pc + 1, pc + length + 1)

        // convert pushData to hex
        opcode.pushData = "0x" + opcode.pushData.toString("hex");

        pc += length
      }
      instructions.push(opcode)
    }
    return instructions
  }
}


/***/ }),
/* 442 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 443 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(1147);
} else {
  module.exports = __webpack_require__(1148);
}


/***/ }),
/* 444 */
/***/ (function(module, exports, __webpack_require__) {

var sha3 = __webpack_require__(115);
var pkgVersion = __webpack_require__(1238).version;
var Ajv = __webpack_require__(266);

var contractObjectSchema = __webpack_require__(1240);
var networkObjectSchema = __webpack_require__(1241);
var abiSchema = __webpack_require__(1239);


/**
 * Property definitions for Contract Objects
 *
 * Describes canonical output properties as sourced from some "dirty" input
 * object. Describes normalization process to account for deprecated and/or
 * nonstandard keys and values.
 *
 * Maps (key -> property) where:
 *  - `key` is the top-level output key matching up with those in the schema
 *  - `property` is an object with optional values:
 *      - `sources`: list of sources (see below); default `key`
 *      - `transform`: function(value) -> transformed value; default x -> x
 *
 * Each source represents a means to select a value from dirty object.
 * Allows:
 *  - dot-separated (`.`) string, corresponding to path to value in dirty
 *    object
 *  - function(dirtyObj) -> (cleanValue | undefined)
 *
 * The optional `transform` parameter standardizes value regardless of source,
 * for purposes of ensuring data type and/or string schemas.
 */
var properties = {
  "contractName": {
    "sources": ["contractName", "contract_name"]
  },
  "abi": {
    "sources": ["abi", "interface"],
    "transform": function(value) {
      if (typeof value === "string") {
        try {
          value = JSON.parse(value)
        } catch (e) {
          value = undefined;
        }
      }
      return value;
    }
  },
  "bytecode": {
    "sources": [
      "bytecode", "binary", "unlinked_binary", "evm.bytecode.object"
    ],
    "transform": function(value) {
      if (value && value.indexOf("0x") != 0) {
        value = "0x" + value;
      }
      return value;
    }
  },
  "deployedBytecode": {
    "sources": [
      "deployedBytecode", "runtimeBytecode", "evm.deployedBytecode.object"
    ],
    "transform": function(value) {
      if (value && value.indexOf("0x") != 0) {
        value = "0x" + value;
      }
      return value;
    }
  },
  "sourceMap": {
    "sources": ["sourceMap", "srcmap", "evm.bytecode.sourceMap"]
  },
  "deployedSourceMap": {
    "sources": ["deployedSourceMap", "srcmapRuntime", "evm.deployedBytecode.sourceMap"]
  },
  "source": {},
  "sourcePath": {},
  "ast": {},
  "legacyAST": {
    "transform": function(value, obj) {
      var schemaVersion = obj.schemaVersion || "0.0.0";

      // legacyAST introduced in v2.0.0
      if (schemaVersion[0] < 2) {
        return obj.ast;
      } else {
        return value
      }
    }
  },
  "compiler": {},
  "networks": {
    "transform": function(value) {
      if (value === undefined) {
        value = {}
      }
      return value;
    }
  },
  "schemaVersion": {
    "sources": ["schemaVersion", "schema_version"]
  },
  "updatedAt": {
    "sources": ["updatedAt", "updated_at"],
    "transform": function(value) {
      if (typeof value === "number") {
        value = new Date(value).toISOString();
      }
      return value;
    }
  }
};


/**
 * Construct a getter for a given key, possibly applying some post-retrieve
 * transformation on the resulting value.
 *
 * @return {Function} Accepting dirty object and returning value || undefined
 */
function getter(key, transform) {
  if (transform === undefined) {
    transform = function(x) { return x };
  }

  return function(obj) {
    try {
      return transform(obj[key]);
    } catch (e) {
      return undefined;
    }
  }
}


/**
 * Chains together a series of function(obj) -> value, passing resulting
 * returned value to next function in chain.
 *
 * Accepts any number of functions passed as arguments
 * @return {Function} Accepting initial object, returning end-of-chain value
 *
 * Assumes all intermediary values to be objects, with well-formed sequence
 * of operations.
 */
function chain() {
  var getters = Array.prototype.slice.call(arguments);
  return function(obj) {
    return getters.reduce(function (cur, get) {
      return get(cur);
    }, obj);
  }
}


// Schema module
//

var TruffleContractSchema = {
  // Return a promise to validate a contract object
  // - Resolves as validated `contractObj`
  // - Rejects with list of errors from schema validator
  validate: function(contractObj) {
    var ajv = new Ajv({ useDefaults: true });
    ajv.addSchema(abiSchema);
    ajv.addSchema(networkObjectSchema);
    ajv.addSchema(contractObjectSchema);
    if (ajv.validate("contract-object.spec.json", contractObj)) {
      return contractObj;
    } else {
      throw ajv.errors;
    }
  },

  // accepts as argument anything that can be turned into a contract object
  // returns a contract object
  normalize: function(objDirty, options) {
    options = options || {};
    var normalized = {};

    // iterate over each property
    Object.keys(properties).forEach(function(key) {
      var property = properties[key];
      var value;  // normalized value || undefined

      // either used the defined sources or assume the key will only ever be
      // listed as its canonical name (itself)
      var sources = property.sources || [key];

      // iterate over sources until value is defined or end of list met
      for (var i = 0; value === undefined && i < sources.length; i++) {
        var source = sources[i];
        // string refers to path to value in objDirty, split and chain
        // getters
        if (typeof source === "string") {
          var traversals = source.split(".")
            .map(function(k) { return getter(k) });
          source = chain.apply(null, traversals);
        }

        // source should be a function that takes the objDirty and returns
        // value or undefined
        value = source(objDirty);
      }

      // run source-agnostic transform on value
      // (e.g. make sure bytecode begins 0x)
      if (property.transform) {
        value = property.transform(value, objDirty);
      }

      // add resulting (possibly undefined) to normalized obj
      normalized[key] = value;
    });

    // Copy x- options
    Object.keys(objDirty).forEach(function(key) {
      if (key.indexOf("x-") === 0) {
        normalized[key] = getter(key)(objDirty);
      }
    });

    // update schema version
    normalized.schemaVersion = pkgVersion;

    if (options.validate) {
      this.validate(normalized);
    }

    return normalized
  }
};

module.exports = TruffleContractSchema;


/***/ }),
/* 445 */
/***/ (function(module, exports, __webpack_require__) {

var async = __webpack_require__(28);
var mkdirp = __webpack_require__(228);
var del = __webpack_require__(717);
var fs = __webpack_require__(1);
var Contracts = __webpack_require__(84);
var BuildError = __webpack_require__(1171);
var child_process = __webpack_require__(39);
var spawnargs = __webpack_require__(1067);
var _ = __webpack_require__(24);
var expect = __webpack_require__(21);
var contract = __webpack_require__(69);

function CommandBuilder(command) {
  this.command = command;
};

CommandBuilder.prototype.build = function(options, callback) {
  console.log("Running `" + this.command + "`...")

  var args = spawnargs(this.command);
  var ps = args.shift();

  var cmd = child_process.spawn(ps, args, {
    detached: false,
    cwd: options.working_directory,
    env: _.merge(process.env, {
      WORKING_DIRECTORY: options.working_directory,
      BUILD_DESTINATION_DIRECTORY: options.destination_directory,
      BUILD_CONTRACTS_DIRECTORY: options.contracts_build_directory
    })
  });

  cmd.stdout.on('data', function(data) {
    console.log(data.toString());
  });

  cmd.stderr.on('data', function(data) {
    console.log("build error: " + data);
  });

  cmd.on('close', function(code) {
    var error = null;
    if (code !== 0) {
      error = "Command exited with code " + code;
    }
    callback(error);
  });
};

var Build = {
  clean: function(options, callback) {

    var destination = options.build_directory;
    var contracts_build_directory = options.contracts_build_directory;

    // Clean first.
    del([destination + '/*', "!" + contracts_build_directory]).then(function() {
      mkdirp(destination, callback);
    });
  },

  // Note: key is a legacy parameter that will eventually be removed.
  // It's specific to the default builder and we should phase it out.
  build: function(options, callback) {
    var self = this;

    expect.options(options, [
      "build_directory",
      "working_directory",
      "contracts_build_directory",
      "networks"
    ]);

    var key = "build";

    if (options.dist) {
      key = "dist";
    }

    var logger = options.logger || console;
    var builder = options.build;

    // Duplicate build directory for legacy purposes
    options.destination_directory = options.build_directory;

    // No builder specified. Ignore the build then.
    if (typeof builder == "undefined") {
      if (options.quiet != true) {
        return callback(new BuildError("No build configuration specified. Can't build."));
      }
      return callback();
    }

    if (typeof builder == "string") {
      builder = new CommandBuilder(builder);
    } else if (typeof builder !== "function") {
      if (builder.build == null) {
        return callback(new BuildError("Build configuration can no longer be specified as an object. Please see our documentation for an updated list of supported build configurations."));
      }
    } else {
      // If they've only provided a build function, use that.
      builder = {
        build: builder
      };
    }

    // Use our own clean method unless the builder supplies one.
    var clean = this.clean;
    if (builder.hasOwnProperty("clean")) {
      clean = builder.clean;
    }

    clean(options, function(err) {
      if (err) return callback(err);

      // If necessary. This prevents errors due to the .sol.js files not existing.
      Contracts.compile(options, function(err) {
        if (err) return callback(err);

        builder.build(options, function(err) {
          if (!err) return callback();

          if (typeof err == "string") {
            err = new BuildError(err);
          }

          callback(err);
        });
      });
    });
  },

  // Deprecated: Specific to default builder.
  dist: function(config, callback) {
    this.build(config.with({
      key: "dist"
    }), callback);
  }
}

module.exports = Build;


/***/ }),
/* 446 */
/***/ (function(module, exports, __webpack_require__) {

var emoji = __webpack_require__(967);

var command = {
  command: 'develop',
  description: 'Open a console with a local development blockchain',
  builder: {
    log: {
      type: "boolean",
      default: false
    }
  },
  runConsole: function(config, testrpcOptions, done) {
    var Console = __webpack_require__(450);
    var Environment = __webpack_require__(104);

    var commands = __webpack_require__(181)
    var excluded = [
      "console",
      "init",
      "watch",
      "serve",
      "develop"
    ];

    var available_commands = Object.keys(commands).filter(function(name) {
      return excluded.indexOf(name) == -1;
    });

    var console_commands = {};
    available_commands.forEach(function(name) {
      console_commands[name] = commands[name];
    });

    Environment.develop(config, testrpcOptions, function(err) {
      if (err) return done(err);

      var c = new Console(console_commands, config.with({
        noAliases: true
      }));

      c.start(done);
      c.on("exit", function() {
        process.exit();
      });
    });
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Develop = __webpack_require__(249);

    var config = Config.detect(options);

    // testrpc account info
    // HACK: accounts is hardcoded because it will not change for the mnemonic,
    // and not hardcoding it would require an HTTP request
    var mnemonic = "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat";
    var accounts = [
      '0x627306090abab3a6e1400e9345bc60c78a8bef57',
      '0xf17f52151ebef6c7334fad080c5704d77216b732',
      '0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef',
      '0x821aea9a577a9b44299b9c15c88cf3087f3b5544',
      '0x0d1d4e623d10f9fba5db95830f7d3839406c6af2',
      '0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e',
      '0x2191ef87e392377ec08e7c08eb105ef5448eced5',
      '0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5',
      '0x6330a553fc93768f612722bb8c2ec78ac90b3bbc',
      '0x5aeda56215b167893e80b4fe645ba6d5bab767de'
    ];

    var privateKeys = [
      'c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',
      'ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',
      '0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1',
      'c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c',
      '388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418',
      '659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63',
      '82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8',
      'aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7',
      '0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4',
      '8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5'
    ];

    var onMissing = function(name){ return "**"};

    var warning =
      ":warning:  Important :warning:  : " +
      "This mnemonic was created for you by Truffle. It is not secure.\n" +
      "Ensure you do not use it on production blockchains, or else you risk losing funds.";

    var ipcOptions = {
      log: options.log
    };

    var testrpcOptions = {
      host: "127.0.0.1",
      port: 9545,
      network_id: 4447,
      mnemonic: mnemonic,
      gasLimit: config.gas
    };

    Develop.connectOrStart(ipcOptions, testrpcOptions, function(started) {
      var url = `http://${testrpcOptions.host}:${testrpcOptions.port}/`;

      if (started) {
        config.logger.log(`Truffle Develop started at ${url}`);
        config.logger.log();

        config.logger.log(`Accounts:`);
        for (var i = 0; i < accounts.length; i++) {
          var account = accounts[i];
          config.logger.log(`(${i}) ${account}`);
        }
        config.logger.log();

        config.logger.log(`Private Keys:`);
        for (var i = 0; i < privateKeys.length; i++) {
          var privateKey = privateKeys[i];
          config.logger.log(`(${i}) ${privateKey}`);
        }
        config.logger.log();

        config.logger.log(`Mnemonic: ${mnemonic}`);
        config.logger.log();
        config.logger.log(emoji.emojify(warning, onMissing));
        config.logger.log();
      } else {
        config.logger.log(`Connected to existing Truffle Develop session at ${url}`);
        config.logger.log();
      }

      if (!options.log) {
        command.runConsole(config, testrpcOptions, done);
      }
    });
  }
}

module.exports = command;


/***/ }),
/* 447 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'migrate',
  description: 'Run migrations to deploy contracts',
  builder: {
    reset: {
      type: "boolean",
      default: false
    },
    "compile-all": {
      describe: "recompile all contracts",
      type: "boolean",
      default: false
    },
    "dry-run": {
      describe: "Run migrations against an in-memory fork, for testing",
      type: "boolean",
      default: false
    },
    f: {
      describe: "Specify a migration number to run from",
      type: "number"
    }
  },
  run: function (options, done) {
    var OS = __webpack_require__(5);
    var Config = __webpack_require__(9);
    var Contracts = __webpack_require__(84);
    var Resolver = __webpack_require__(177);
    var Artifactor = __webpack_require__(138);
    var Migrate = __webpack_require__(253);
    var Environment = __webpack_require__(104);
    var temp = __webpack_require__(424);
    var copy = __webpack_require__(248);

    var config = Config.detect(options);

    function setupDryRunEnvironmentThenRunMigrations(callback) {
      Environment.fork(config, function(err) {
        if (err) return callback(err);

        // Copy artifacts to a temporary directory
        temp.mkdir('migrate-dry-run-', function(err, temporaryDirectory) {
          if (err) return callback(err);

          function cleanup() {
            var args = arguments;
            // Ensure directory cleanup.
            temp.cleanup(function(err) {
              // Ignore cleanup errors.
              callback.apply(null, args);
            });
          };

          copy(config.contracts_build_directory, temporaryDirectory, function(err) {
            if (err) return callback(err);

            config.contracts_build_directory = temporaryDirectory;

            // Note: Create a new artifactor and resolver with the updated config.
            // This is because the contracts_build_directory changed.
            // Ideally we could architect them to be reactive of the config changes.
            config.artifactor = new Artifactor(temporaryDirectory);
            config.resolver = new Resolver(config);

            runMigrations(cleanup);
          });
        });
      });
    }

    function runMigrations(callback) {
      if (options.f) {
        Migrate.runFrom(options.f, config, done);
      } else {
        Migrate.needsMigrating(config, function(err, needsMigrating) {
          if (err) return callback(err);

          if (needsMigrating) {
            Migrate.run(config, done);
          } else {
            config.logger.log("Network up to date.")
            callback();
          }
        });
      }
    };

    Contracts.compile(config, function(err) {
      if (err) return done(err);

      Environment.detect(config, function(err) {
        if (err) return done(err);

        var dryRun = options.dryRun === true;

        var networkMessage = "Using network '" + config.network + "'";

        if (dryRun) {
          networkMessage += " (dry run)";
        }

        config.logger.log(networkMessage + "." + OS.EOL);

        if (dryRun) {
          setupDryRunEnvironmentThenRunMigrations(done);
        } else {
          runMigrations(done);
        }
      });
    });
  }
}

module.exports = command;


/***/ }),
/* 448 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * returns a VCS url string given:
 * - a VCS url string
 * - a github `org/repo` string
 * - a string containing a repo under the `truffle-box` org
 */
function normalizeURL(url) {
  url = url || "https://github.com/trufflesuite/truffle-init-default";

  // full URL already
  if (url.indexOf("://") != -1 || url.indexOf("git@") != -1) {
    return url;
  }

  if (url.split("/").length == 2) { // `org/repo`
    return "https://github.com/" + url;
  }

  if (url.indexOf("/") == -1) { // repo name only
    if (url.indexOf("-box") == -1) {
      url = url + "-box";
    }
    return "https://github.com/truffle-box/" + url;
  }

  throw new Error("Box specified in invalid format");
}

/*
 * returns a list of messages, one for each command, formatted
 * so that:
 *
 *    command key:   command string
 *
 * are aligned
 */
function formatCommands(commands) {
  var names = Object.keys(commands);

  var maxLength = Math.max.apply(
    null, names.map(function(name) { return name.length })
  );

  return names.map(function(name) {
    var spacing = Array(maxLength - name.length + 1).join(" ");
    return "  " + name + ": " + spacing + commands[name];
  });
}

var command = {
  command: 'unbox',
  description: 'Download a Truffle Box, a pre-built Truffle project',
  builder: {},
  run: function(options, done) {
    var Config = __webpack_require__(9);
    var Box = __webpack_require__(1131);
    var OS = __webpack_require__(5);

    var config = Config.default().with({
      logger: console
    });

    var url = normalizeURL(options._[0]);

    Box.unbox(url, config.working_directory, {logger: config.logger})
      .then(function(boxConfig) {
        config.logger.log("Unbox successful. Sweet!" + OS.EOL);

        var commandMessages = formatCommands(boxConfig.commands);
        if (commandMessages.length > 0) {
          config.logger.log("Commands:" + OS.EOL);
        }
        commandMessages.forEach(function(message) {
          config.logger.log(message);
        });

        if (boxConfig.epilogue) {
          config.logger.log(boxConfig.epilogue.replace("\n", OS.EOL));
        }

        done();
      })
      .catch(done);
  }
}

module.exports = command;


/***/ }),
/* 449 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'watch',
  description: 'Watch filesystem for changes and rebuild the project automatically',
  builder: {},
  run: function (options, done) {
    var Build = __webpack_require__(445);
    var Config = __webpack_require__(9);
    var chokidar = __webpack_require__(624);
    var path = __webpack_require__(0);
    var colors = __webpack_require__(458);
    var Contracts = __webpack_require__(84);
    var TruffleError = __webpack_require__(23);

    var config = Config.detect(options);

    var printSuccess = function() {
      config.logger.log(colors.green("Completed without errors on " + new Date().toString()));
    };

    var printFailure = function(err) {
      if (err instanceof TruffleError) {
        console.log(err.message);
      } else {
        // Bubble up all other unexpected errors.
        console.log(err.stack || err.toString());
      }
    };

    var working = false;
    var needs_rebuild = true;
    var needs_recompile = true;

    var watchPaths = [
      path.join(config.working_directory, "app/**/*"),
      path.join(config.contracts_build_directory, "/**/*"),
      path.join(config.contracts_directory, "/**/*"),
      path.join(config.working_directory, "truffle-config.js"),
      path.join(config.working_directory, "truffle.js")
    ];

    chokidar.watch(watchPaths, {
      ignored: /[\/\\]\./, // Ignore files prefixed with "."
      cwd: config.working_directory,
      ignoreInitial: true
    }).on('all', function(event, filePath) {
      // On changed/added/deleted
      var display_path = path.join("./", filePath.replace(config.working_directory, ""));
      config.logger.log(colors.cyan(">> File " + display_path + " changed."));

      needs_rebuild = true;

      if (path.join(config.working_directory, filePath).indexOf(config.contracts_directory) >= 0) {
        needs_recompile = true;
      }
    });

    var check_rebuild = function() {
      if (working) {
        setTimeout(check_rebuild, 200);
        return;
      }

      if (needs_rebuild == true) {
        needs_rebuild = false;

        if (config.build != null) {
          config.logger.log("Rebuilding...");
          working = true;

          Build.build(config, function(err) {
            if (err) {
              printFailure(err);
            } else {
              printSuccess();
            }
            working = false;
          });
        }
      } else if (needs_recompile == true) {
        needs_recompile = false;
        working = true;

        Contracts.compile(config, function(err) {
          if (err) {
            printFailure(err);
          }
          working = false;
        });
      }

      setTimeout(check_rebuild, 200);
    };

    check_rebuild();
  }
}

module.exports = command;


/***/ }),
/* 450 */
/***/ (function(module, exports, __webpack_require__) {

var ReplManager = __webpack_require__(454);
var Command = __webpack_require__(180);
var provision = __webpack_require__(255);
var contract = __webpack_require__(69);
var Web3 = __webpack_require__(25);
var vm = __webpack_require__(86);
var expect = __webpack_require__(21);
var _ = __webpack_require__(24);
var TruffleError = __webpack_require__(23);
var fs = __webpack_require__(1);
var os = __webpack_require__(5);
var path = __webpack_require__(0);
var EventEmitter = __webpack_require__(18);
var inherits = __webpack_require__(2).inherits;

inherits(Console, EventEmitter);

function Console(tasks, options) {
  EventEmitter.call(this);

  var self = this;

  expect.options(options, [
    "working_directory",
    "contracts_directory",
    "contracts_build_directory",
    "migrations_directory",
    "network",
    "network_id",
    "provider",
    "resolver",
    "build_directory"
  ]);

  this.options = options;

  this.repl = options.repl || new ReplManager(options);
  this.command = new Command(tasks);

  this.web3 = new Web3();
  this.web3.setProvider(options.provider);

  // Bubble the ReplManager's exit event
  this.repl.on("exit", function() {
    self.emit("exit");
  });
};

Console.prototype.start = function(callback) {
  var self = this;

  if (!this.repl) {
    this.repl = new Repl(this.options);
  }

  // TODO: This should probalby be elsewhere.
  // It's here to ensure the repl manager instance gets
  // passed down to commands.
  this.options.repl = this.repl;

  this.provision(function(err, abstractions) {
    if (err) {
      self.options.logger.log("Unexpected error: Cannot provision contracts while instantiating the console.");
      self.options.logger.log(err.stack || err.message || err);
    }

    self.repl.start({
      prompt: "truffle(" + self.options.network + ")> ",
      context: {
        web3: self.web3,
      },
      interpreter: self.interpret.bind(self),
      done: callback
    });

    self.resetContractsInConsoleContext(abstractions);
  });
};

Console.prototype.provision = function(callback) {
  var self = this;

  fs.readdir(this.options.contracts_build_directory, function(err, files) {
    if (err) {
      // Error reading the build directory? Must mean it doesn't exist or we don't have access to it.
      // Couldn't provision the contracts if we wanted. It's possible we're hiding very rare FS
      // errors, but that's better than showing the user error messages that will be "build folder
      // doesn't exist" 99.9% of the time.
    }

    var promises = [];
    files = files || [];

    files.forEach(function(file) {
      promises.push(new Promise(function(accept, reject) {
        fs.readFile(path.join(self.options.contracts_build_directory, file), "utf8", function(err, body) {
          if (err) return reject(err);
          try {
            body = JSON.parse(body);
          } catch (e) {
            return reject(new Error("Cannot parse " + file + ": " + e.message));
          }

          accept(body);
        })
      }))
    });

    Promise.all(promises).then(function(json_blobs) {
      var abstractions = json_blobs.map(function(json) {
        var abstraction = contract(json);
        provision(abstraction, self.options);
        return abstraction;
      });

      self.resetContractsInConsoleContext(abstractions);

      callback(null, abstractions);
    }).catch(callback);
  });
};

Console.prototype.resetContractsInConsoleContext = function(abstractions) {
  var self = this;

  abstractions = abstractions || []

  var contextVars = {};

  abstractions.forEach(function(abstraction) {
    contextVars[abstraction.contract_name] = abstraction;
  });

  self.repl.setContextVars(contextVars);
}

Console.prototype.interpret = function(cmd, context, filename, callback) {
  var self = this;

  if (this.command.getCommand(cmd.trim(), this.options.noAliases) != null) {
    return self.command.run(cmd.trim(), this.options, function(err) {
      if (err) {
        // Perform error handling ourselves.
        if (err instanceof TruffleError) {
          console.log(err.message);
        } else {
          // Bubble up all other unexpected errors.
          console.log(err.stack || err.toString());
        }
        return callback();
      }

      // Reprovision after each command as it may change contracts.
      self.provision(function(err, abstractions) {
        // Don't pass abstractions to the callback if they're there or else
        // they'll get printed in the repl.
        callback(err);
      });
    });
  }

  var result;
  try {
    result = vm.runInContext(cmd, context, {
      displayErrors: false
    });
  } catch (e) {
    return callback(e);
  }

  // Resolve all promises. This will leave non-promises alone.
  Promise.resolve(result).then(function(res) { callback(null, res) }).catch(callback);
}

module.exports = Console;


/***/ }),
/* 451 */
/***/ (function(module, exports, __webpack_require__) {

var TruffleError = __webpack_require__(23);
var inherits = __webpack_require__(2).inherits;

inherits(ConfigurationError, TruffleError);

function ConfigurationError(message) {
    ConfigurationError.super_.call(this, message);
}

module.exports = ConfigurationError;


/***/ }),
/* 452 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);
var path = __webpack_require__(0);
var OS = __webpack_require__(5);
var BlockchainUtils = __webpack_require__(440);
var Provider = __webpack_require__(254);
var async = __webpack_require__(28);
var Web3 = __webpack_require__(25);

var Networks = {
  deployed: function(options, callback) {
    fs.readdir(options.contracts_build_directory, function(err, files) {
      if (err) {
        // We can't read the directory. Act like we found nothing.
        files = [];
      }

      var promises = [];

      files.forEach(function(file) {
        promises.push(new Promise(function(accept, reject) {
          fs.readFile(path.join(options.contracts_build_directory, file), "utf8", function(err, body) {
            if (err) return reject(err);

            try {
              body = JSON.parse(body);
            } catch (e) {
              return reject(e);
            }

            accept(body);
          });
        }));
      });

      Promise.all(promises).then(function(binaries) {
        var ids_to_names = {};
        var networks = {};

        // binaries.map(function(b) {return b.contract_name + ": " + JSON.stringify(b.networks, null, 2)}).forEach(function(b) {
        //   console.log(b);
        // });

        Object.keys(options.networks).forEach(function(network_name) {
          var network = options.networks[network_name];
          var network_id = network.network_id;

          if (network_id == null) {
            return;
          }

          ids_to_names[network_id] = network_name;
          networks[network_name] = {};
        });

        binaries.forEach(function(json) {
          Object.keys(json.networks).forEach(function(network_id) {
            var network_name = ids_to_names[network_id] || network_id;

            if (networks[network_name] == null) {
              networks[network_name] = {};
            }

            var address = json.networks[network_id].address;

            if (address == null) return;

            networks[network_name][json.contractName] = address;
          });
        });

        callback(null, networks);
      }).catch(callback);
    });
  },

  display: function(config, callback) {
    this.deployed(config, function(err, networks) {
      if (err) return callback(err);

      var network_names = Object.keys(networks).sort();

      var star_networks = network_names.filter(function(network_name) {
        return config.networks[network_name] != null && config.networks[network_name].network_id == "*";
      });

      // Remove * networks from network names.
      network_names = network_names.filter(function(network_name) {
        return star_networks.indexOf(network_name) < 0;
      });

      var unknown_networks = network_names.filter(function(network_name) {
        var configured_networks = Object.keys(config.networks);
        var found = false;
        for (var i = 0; i < configured_networks.length; i++) {
          var configured_network_name = configured_networks[i];
          if (network_name == configured_network_name) {
            found = true;
            break;
          }
        }

        return !found;
      });

      // Only display this warning if:
      //
      //   At least one network is configured with the wildcard ('*') network id
      //   There's a least one network deployed to
      //   And one of those networks deployed to is unknown (i.e., unconfigured).
      if (star_networks.length > 0 && network_names.length > 0 && unknown_networks.length > 0) {
        config.logger.log(OS.EOL + "The following networks are configured to match any network id ('*'):" + OS.EOL)

        star_networks.forEach(function(network_name) {
          config.logger.log("    " + network_name);
        });

        config.logger.log(OS.EOL + "Closely inspect the deployed networks below, and use `truffle networks --clean` to remove any networks that don't match your configuration. You should not use the wildcard configuration ('*') for staging and production networks for which you intend to deploy your application.")
      }

      network_names.forEach(function(network_name) {
        config.logger.log("")

        var output = Object.keys(networks[network_name]).sort().map(function(contract_name) {
          var address = networks[network_name][contract_name];
          return contract_name + ": " + address;
        });

        if (output.length == 0) {
          output = ["No contracts deployed."];
        }

        var message = "Network: ";

        var is_id = config.networks[network_name] == null;

        if (is_id) {
          message += "UNKNOWN (id: " + network_name + ")";
        } else {
          message += network_name + " (id: " + config.networks[network_name].network_id + ")";
        }

        config.logger.log(message);
        config.logger.log("  " + output.join("\n  "))
      });

      if (network_names.length == 0) {
        config.logger.log(OS.EOL + "Contracts have not been deployed to any network.");
      }

      config.logger.log("");

      callback();
    });
  },

  clean: function(config, callback) {
    fs.readdir(config.contracts_build_directory, function(err, files) {
      if (err) return callback(err);

      var configured_networks = Object.keys(config.networks);
      var promises = [];

      files.forEach(function(file) {
        promises.push(new Promise(function(accept, reject) {
          var file_path = path.join(config.contracts_build_directory, file);
          fs.readFile(file_path, "utf8", function(err, body) {
            if (err) return reject(err);

            try {
              body = JSON.parse(body);
            } catch (e) {
              return reject(e);
            }

            Object.keys(body.networks).forEach(function(installed_network_id) {
              var found = false;
              for (var i = 0; i < configured_networks.length; i++) {
                var configured_network = configured_networks[i];

                // If an installed network id matches a configured id, then we can ignore this one.
                if (installed_network_id == config.networks[configured_network].network_id) {
                  found = true;
                  break;
                }
              }

              // If we didn't find a suitable configuration, delete this network.
              if (found == false) {
                delete body.networks[installed_network_id];
              }
            });

            // Our work is done here. Save the file.
            fs.writeFile(file_path, JSON.stringify(body, null, 2), "utf8", function(err) {
              if (err) return reject(err);
              accept(body);
            });
          });
        }));
      });

      // TODO: Display what's removed?
      Promise.all(promises).then(function() {
        callback();
      }).catch(callback);
    });
  },

  // Try to connect to every named network except for "test" and "development"
  asURIs: function(options, networks, callback) {
    if (typeof networks == "function") {
      callback = networks;
      networks = Object.keys(options.networks);
    }

    var result = {
      uris: {},
      failed: []
    };

    async.each(networks, function(network_name, finished) {
      var provider = Provider.create(options.networks[network_name]);
      BlockchainUtils.asURI(provider, function(err, uri) {
        if (err) {
          result.failed.push(network_name);
        } else {
          result.uris[network_name] = uri;
        }
        finished();
      });
    }, function(err) {
      if (err) return callback(err);
      callback(null, result);
    });
  },

  matchesNetwork: function(network_id, network_options, callback) {
    var provider = Provider.create(network_options);

    var first = network_id + "";
    var second = network_options.network_id + "";

    if (first == second) {
      return callback(null, true);
    }

    var isFirstANumber = isNaN(parseInt(network_id)) === false;
    var isSecondANumber = isNaN(parseInt(network_options.network_id)) === false;

    // If both network ids are numbers, then they don't match, and we should quit.
    if (isFirstANumber && isSecondANumber) {
      return callback(null, false);
    }

    var web3 = new Web3(provider);
    web3.version.getNetwork(function(err, current_network_id) {
      if (err) return callback(err);

      if (first == current_network_id) {
        return callback(null, true);
      }

      if (isFirstANumber == false) {
        BlockchainUtils.matches(first, provider, callback);
      } else {
        // Nothing else to compare.
        return callback(null, false);
      }
    });
  }
};

module.exports = Networks;


/***/ }),
/* 453 */
/***/ (function(module, exports, __webpack_require__) {

var expect = __webpack_require__(21);
var TruffleError = __webpack_require__(23);
var Provider = __webpack_require__(254);
var Profiler = __webpack_require__(175);
var Networks = __webpack_require__(452);
var EthPM = __webpack_require__(789);
var EthPMRegistry = __webpack_require__(729);
var Web3 = __webpack_require__(25);
var async = __webpack_require__(28);
var dir = __webpack_require__(98);
var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var OS = __webpack_require__(5);

var Package = {
  install: function(options, callback) {
    expect.options(options, [
      "working_directory",
      "ethpm"
    ]);

    expect.options(options.ethpm, [
      "registry",
      "ipfs_host"
    ]);

    expect.one(options.ethpm, [
      "provider",
      "install_provider_uri"
    ]);

    // ipfs_port and ipfs_protocol are optinal.

    var provider = options.ethpm.provider || new Web3.providers.HttpProvider(options.ethpm.install_provider_uri);
    var web3 = new Web3(provider);
    var host = options.ethpm.ipfs_host;

    if ((host instanceof EthPM.hosts.IPFS) == false) {
      host = new EthPM.hosts.IPFSWithLocalReader(options.ethpm.ipfs_host, options.ethpm.ipfs_port, options.ethpm.ipfs_protocol);
    }

    // When installing, we use infura to make a bunch of eth_call's.
    // We don't make any transactions. To satisfy APIs we'll put a from address,
    // but it doesn't really matter in this case.
    var fakeAddress = "0x1234567890123456789012345678901234567890";

    var registry = options.ethpm.registry;

    if (typeof registry == "string") {
      registry = EthPMRegistry.use(options.ethpm.registry, fakeAddress, provider);
    }

    var pkg = new EthPM(options.working_directory, host, registry);

    if (options.packages) {
      var promises = options.packages.map(function(package_name) {
        var pieces = package_name.split("@");
        package_name = pieces[0];

        var version = "*";

        if (pieces.length > 1) {
          version = pieces[1];
        }

        return pkg.installDependency(package_name, version);
      });

      Promise.all(promises).then(function() {
        callback();
      }).catch(callback);
    } else {
      fs.access(path.join(options.working_directory, "ethpm.json"), fs.constants.R_OK, function(err) {
        var manifest;

        // If the ethpm.json file doesn't exist, use the config as the manifest.
        if (err) {
          manifest = options;
        }

        pkg.install(manifest).then(function() {
          callback();
        }).catch(callback);
      });
    }
  },

  publish: function(options, callback) {
    var self = this;

    expect.options(options, [
      "ethpm",
      "working_directory",
      "contracts_directory",
      "networks"
    ]);

    expect.options(options.ethpm, [
      "registry",
      "ipfs_host"
    ]);

    // ipfs_port and ipfs_protocol are optinal.

    // When publishing, you need a ropsten network configured.
    var ropsten = options.networks.ropsten;

    if (!ropsten) {
      return callback(new TruffleError("You need to have a `ropsten` network configured in order to publish to the Ethereum Package Registry. See the following link for an example configuration:" + OS.EOL + OS.EOL + "    http://truffleframework.com/tutorials/using-infura-custom-provider" + OS.EOL));
    }

    options.network = "ropsten";

    var provider = options.provider;
    var web3 = new Web3(provider);
    var host = options.ethpm.ipfs_host;

    if ((host instanceof EthPM.hosts.IPFS) == false) {
      host = new EthPM.hosts.IPFS(options.ethpm.ipfs_host, options.ethpm.ipfs_port, options.ethpm.ipfs_protocol);
    }

    options.logger.log("Finding publishable artifacts...");

    self.publishable_artifacts(options, function(err, artifacts) {
      if (err) return callback(err);

      web3.eth.getAccounts(function(err, accs) {
        if (err) return callback(err);

        var registry = EthPMRegistry.use(options.ethpm.registry, accs[0], provider);
        var pkg = new EthPM(options.working_directory, host, registry);

        fs.access(path.join(options.working_directory, "ethpm.json"), fs.constants.R_OK, function(err) {
          var manifest;

          // If the ethpm.json file doesn't exist, use the config as the manifest.
          if (err) {
            manifest = options;
          }

          options.logger.log("Uploading sources and publishing to registry...");

          // TODO: Gather contract_types and deployments
          pkg.publish(artifacts.contract_types, artifacts.deployments, manifest).then(function(lockfile) {
            // If we get here, publishing was a success.
            options.logger.log("+ " + lockfile.package_name + "@" + lockfile.version);
            callback();
          }).catch(callback);
        });
      });
    });
  },

  digest: function(options, callback) {
    // async.parallel({
    //   contracts: provision.bind(provision, options, false),
    //   files: dir.files.bind(dir, options.contracts_directory)
    // }, function(err, results) {
    //   if (err) return callback(err);
    //
    //   results.contracts = results.contracts.map(function(contract) {
    //     return contract.contract_name;
    //   });
    //
    //   callback(null, results);
    // });
    callback(new Error("Not yet implemented"));
  },

  // Return a list of publishable artifacts
  publishable_artifacts: function(options, callback) {
    // Filter out "test" and "development" networks.
    var deployed_networks = Object.keys(options.networks).filter(function(network_name) {
      return network_name != "test" && network_name != "development";
    });

    // Now get the URIs of each network that's been deployed to.
    Networks.asURIs(options, deployed_networks, function(err, result) {
      if (err) return callback(err);

      var uris = result.uris;

      if (result.failed.length > 0) {
        return callback(new Error("Could not connect to the following networks: " + result.failed.join(", ") + ". These networks have deployed artifacts that can't be published as a package without an active and accessible connection. Please ensure clients for each network are up and running prior to publishing, or use the -n option to specify specific networks you'd like published."));
      }

      var files = fs.readdirSync(options.contracts_build_directory)
      files = files.filter(file => file.includes('.json'));

      if(!files.length){
        var msg = "Could not locate any publishable artifacts in " +
                  options.contracts_build_directory + ". " +
                  "Run `truffle compile` before publishing.";

        return callback(new Error(msg));
      }

      var promises = files.map(function(file) {
        return new Promise(function(accept, reject) {
          fs.readFile(path.join(options.contracts_build_directory, file), "utf8", function(err, body) {
            if (err) return reject(err);

            try {
              body = JSON.parse(body);
            } catch (e) {
              return reject(e);
            }

            accept(body);
          });
        });
      });

      var contract_types = {};
      var deployments = {};

      Promise.all(promises).then(function(contracts) {
        // contract_types first.
        contracts.forEach(function(data) {
          contract_types[data.contractName] = {
            contract_name: data.contractName,
            bytecode: data.bytecode,
            abi: data.abi
          };
        });

        //var network_cache = {};
        var matching_promises = [];

        contracts.forEach(function(data) {
          Object.keys(data.networks).forEach(function(network_id) {

            matching_promises.push(new Promise(function(accept, reject) {
              // Go through each deployed network and see if this network matches.
              // Bail early if we foun done.
              async.each(deployed_networks, function(deployed_network, finished) {
                Networks.matchesNetwork(network_id, options.networks[deployed_network], function(err, matches) {
                  if (err) return finished(err);
                  if (matches) {
                    var uri = uris[deployed_network];

                    if (!deployments[uri]) {
                      deployments[uri] = {};
                    }

                    deployments[uri][data.contractName] = {
                      contract_type: data.contractName, // TODO: Handle conflict resolution
                      address: data.networks[network_id].address
                    };

                    return finished("bail early");
                  }
                  finished();
                });
              }, function(err) {
                if (err && err != "bail early") {
                  return reject(err);
                }

                accept();
              });

            }));
          });
        });

        return Promise.all(matching_promises);
      }).then(function() {
        var to_return = {
          contract_types: contract_types,
          deployments: deployments
        };

        callback(null, to_return);
      }).catch(callback);
    });
  }
};

module.exports = Package;


/***/ }),
/* 454 */
/***/ (function(module, exports, __webpack_require__) {

var repl = __webpack_require__(1247);
var Command = __webpack_require__(180);
var provision = __webpack_require__(255);
var contract = __webpack_require__(69);
var Web3 = __webpack_require__(25);
var vm = __webpack_require__(86);
var expect = __webpack_require__(21);
var _ = __webpack_require__(24);
var TruffleError = __webpack_require__(23);
var fs = __webpack_require__(1);
var os = __webpack_require__(5);
var path = __webpack_require__(0);
var async = __webpack_require__(28);
var EventEmitter = __webpack_require__(18);
var inherits = __webpack_require__(2).inherits;

inherits(ReplManager, EventEmitter);

function ReplManager(options) {
  EventEmitter.call(this);

  expect.options(options, [
    "working_directory",
    "contracts_directory",
    "contracts_build_directory",
    "migrations_directory",
    "network",
    "network_id",
    "provider",
    "resolver",
    "build_directory"
  ]);

  this.options = options;
  this.repl = options.repl;

  this.contexts = [];
};

ReplManager.prototype.start = function(options) {
  var self = this;

  this.contexts.push({
    prompt: options.prompt,
    interpreter: options.interpreter,
    done: options.done
  });

  var currentContext = this.contexts[this.contexts.length - 1];

  if (!this.repl) {
    this.repl = repl.start({
      prompt: currentContext.prompt,
      eval: this.interpret.bind(this),
    });

    this.repl.on("exit", function() {
      // If we exit for some reason, call done functions for good measure
      // then ensure the process is completely killed. Once the repl exits,
      // the process is in a bad state and can't be recovered (e.g., stdin is closed).
      var doneFunctions = self.contexts.map(function(context) {
        return context.done ?
          function() { context.done(); } :
          function() {};
      });
      async.series(doneFunctions, function(err) {
        process.exit();
      });
    });
  }

  // Bubble the internal repl's exit event
  this.repl.on("exit", function() {
    self.emit("exit");
  });

  this.repl.setPrompt(options.prompt);
  this.setContextVars(options.context || {});
};

ReplManager.prototype.setContextVars = function(obj) {
  var self = this;
  if (this.repl) {
    Object.keys(obj).forEach(function(key) {
      self.repl.context[key] = obj[key];
    });
  }
};

ReplManager.prototype.stop = function(callback) {
  var oldContext = this.contexts.pop();

  if (oldContext.done) {
    oldContext.done();
  }

  var currentContext = this.contexts[this.contexts.length - 1];

  if (currentContext) {
    this.repl.setPrompt(currentContext.prompt);
  } else {
    // If there's no new context, stop the process altogether.
    // Though this might seem like an out of place process.exit(),
    // once the Node repl closes, the state of the process is not
    // recoverable; e.g., stdin is closed and can't be reopened.
    // Since we can't recover to a state before the repl was opened,
    // we should just exit. He're, we'll exit after we've popped
    // off the stack of all repl contexts.
    process.exit();
  }

  if (callback) {
    callback();
  }
};

ReplManager.prototype.interpret = function(cmd, context, filename, callback) {
  var currentContext = this.contexts[this.contexts.length - 1];
  currentContext.interpreter(cmd, context, filename, callback);
}

module.exports = ReplManager;


/***/ }),
/* 455 */
/***/ (function(module, exports) {

function TestResolver(resolver, source, search_path) {
  this.resolver = resolver;
  this.source = source;
  this.search_path = search_path;

  this.seen = [];
  this.require_cache = {};
  this.cache_on = true;
}

TestResolver.prototype.require = function(import_path) {
  if (this.cache_on && this.require_cache[import_path]) {
    return this.require_cache[import_path];
  }

  // Remember: This throws if not found.
  var result = this.resolver.require(import_path, this.search_path);

  this.require_cache[import_path] = result;

  return result;
};

TestResolver.prototype.resolve = function(import_path, imported_from, callback) {
  var self = this;
  this.source.resolve(import_path, function(err, result, resolved_path) {
    if (err) return callback(err);
    if (result) return callback(null, result, resolved_path);

    self.resolver.resolve(import_path, imported_from, callback);
  });
};

module.exports = TestResolver;


/***/ }),
/* 456 */
/***/ (function(module, exports, __webpack_require__) {

var Deployed = __webpack_require__(1174);
var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var contract = __webpack_require__(69);
var find_contracts = __webpack_require__(139);

function TestSource(config) {
  this.config = config;
};

TestSource.prototype.require = function(import_path) {
  return null; // FSSource will get it.
};

TestSource.prototype.resolve = function(import_path, callback) {
  var self = this;

  if (import_path == "truffle/DeployedAddresses.sol") {
    return find_contracts(this.config.contracts_directory, function(err, source_files) {
      // Ignore this error. Continue on.

      fs.readdir(self.config.contracts_build_directory, function(err, abstraction_files) {
        if (err) return callback(err);

        var mapping = {};

        var blacklist = ["Assert", "DeployedAddresses"];

        // Ensure we have a mapping for source files and abstraction files
        // to prevent any compile errors in tests.
        source_files.forEach(function(file) {
          var name = path.basename(file, ".sol");
          if (blacklist.indexOf(name) >= 0) return;
          mapping[name] = false;
        });

        abstraction_files.forEach(function(file) {
          var name = path.basename(file, ".json");
          if (blacklist.indexOf(name) >= 0) return;
          mapping[name] = false;
        });

        var promises = abstraction_files.map(function(file) {
          return new Promise(function(accept, reject) {
            fs.readFile(path.join(self.config.contracts_build_directory, file), "utf8", function(err, body) {
              if (err) return reject(err);
              accept(body);
            });
          });
        });

        Promise.all(promises).then(function(files_data) {
          var addresses = files_data.map(function(data) {
            return JSON.parse(data);
          }).map(function(json) {
            return contract(json);
          }).map(function(c) {
            c.setNetwork(self.config.network_id);
            if (c.isDeployed()) {
              return c.address;
            }
            return null;
          });

          addresses.forEach(function(address, i) {
            var name = path.basename(abstraction_files[i], ".json");

            if (blacklist.indexOf(name) >= 0) return;

            mapping[name] = address;
          });

          return Deployed.makeSolidityDeployedAddressesLibrary(mapping);
        }).then(function(addressSource) {
          callback(null, addressSource, import_path);
        }).catch(callback);
      });
    });
  }

  if (import_path == "truffle/Assert.sol") {
    return fs.readFile(path.resolve(path.join(__dirname, "Assert.sol")), {encoding: "utf8"}, function(err, body) {
      callback(err, body, import_path);
    });
  }

  return callback();
};

TestSource.prototype.resolve_dependency_path = function(import_path, dependency_path) {
  return dependency_path;
}

module.exports = TestSource;


/***/ }),
/* 457 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function preserveCamelCase(str) {
	let isLastCharLower = false;
	let isLastCharUpper = false;
	let isLastLastCharUpper = false;

	for (let i = 0; i < str.length; i++) {
		const c = str[i];

		if (isLastCharLower && /[a-zA-Z]/.test(c) && c.toUpperCase() === c) {
			str = str.substr(0, i) + '-' + str.substr(i);
			isLastCharLower = false;
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = true;
			i++;
		} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(c) && c.toLowerCase() === c) {
			str = str.substr(0, i - 1) + '-' + str.substr(i - 1);
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = false;
			isLastCharLower = true;
		} else {
			isLastCharLower = c.toLowerCase() === c;
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = c.toUpperCase() === c;
		}
	}

	return str;
}

module.exports = function (str) {
	if (arguments.length > 1) {
		str = Array.from(arguments)
			.map(x => x.trim())
			.filter(x => x.length)
			.join('-');
	} else {
		str = str.trim();
	}

	if (str.length === 0) {
		return '';
	}

	if (str.length === 1) {
		return str.toLowerCase();
	}

	if (/^[a-z0-9]+$/.test(str)) {
		return str;
	}

	const hasUpperCase = str !== str.toLowerCase();

	if (hasUpperCase) {
		str = preserveCamelCase(str);
	}

	return str
		.replace(/^[_.\- ]+/, '')
		.toLowerCase()
		.replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase());
};


/***/ }),
/* 458 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);
module['exports'] = colors;

// Remark: By default, colors will add style properties to String.prototype.
//
// If you don't wish to extend String.prototype, you can do this instead and
// native String will not be touched:
//
//   var colors = require('colors/safe);
//   colors.red("foo")
//
//
__webpack_require__(1180)();


/***/ }),
/* 459 */
/***/ (function(module, exports) {

// lazy Object.assign logic that only works for merging
// two objects; eventually we should replace this with Object.assign.
module.exports = function assign (defaults, configuration) {
  var o = {}
  configuration = configuration || {}

  Object.keys(defaults).forEach(function (k) {
    o[k] = defaults[k]
  })
  Object.keys(configuration).forEach(function (k) {
    o[k] = configuration[k]
  })

  return o
}


/***/ }),
/* 460 */
/***/ (function(module, exports, __webpack_require__) {

const path = __webpack_require__(0)
const inspect = __webpack_require__(2).inspect
const camelCase = __webpack_require__(457)

const DEFAULT_MARKER = '*'

// handles parsing positional arguments,
// and populating argv with said positional
// arguments.
module.exports = function (yargs, usage, validation) {
  const self = {}

  var handlers = {}
  var aliasMap = {}
  var defaultCommand
  self.addHandler = function (cmd, description, builder, handler) {
    var aliases = []
    handler = handler || function () {}

    if (Array.isArray(cmd)) {
      aliases = cmd.slice(1)
      cmd = cmd[0]
    } else if (typeof cmd === 'object') {
      var command = (Array.isArray(cmd.command) || typeof cmd.command === 'string') ? cmd.command : moduleName(cmd)
      if (cmd.aliases) command = [].concat(command).concat(cmd.aliases)
      self.addHandler(command, extractDesc(cmd), cmd.builder, cmd.handler)
      return
    }

    // allow a module to be provided instead of separate builder and handler
    if (typeof builder === 'object' && builder.builder && typeof builder.handler === 'function') {
      self.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler)
      return
    }

    // parse positionals out of cmd string
    var parsedCommand = self.parseCommand(cmd)

    // remove positional args from aliases only
    aliases = aliases.map(function (alias) {
      return self.parseCommand(alias).cmd
    })

    // check for default and filter out '*''
    var isDefault = false
    var parsedAliases = [parsedCommand.cmd].concat(aliases).filter(function (c) {
      if (c === DEFAULT_MARKER) {
        isDefault = true
        return false
      }
      return true
    })

    // short-circuit if default with no aliases
    if (isDefault && parsedAliases.length === 0) {
      defaultCommand = {
        original: cmd.replace(DEFAULT_MARKER, '').trim(),
        handler: handler,
        builder: builder || {},
        demanded: parsedCommand.demanded,
        optional: parsedCommand.optional
      }
      return
    }

    // shift cmd and aliases after filtering out '*'
    if (isDefault) {
      parsedCommand.cmd = parsedAliases[0]
      aliases = parsedAliases.slice(1)
      cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd)
    }

    // populate aliasMap
    aliases.forEach(function (alias) {
      aliasMap[alias] = parsedCommand.cmd
    })

    if (description !== false) {
      usage.command(cmd, description, isDefault, aliases)
    }

    handlers[parsedCommand.cmd] = {
      original: cmd,
      handler: handler,
      builder: builder || {},
      demanded: parsedCommand.demanded,
      optional: parsedCommand.optional
    }

    if (isDefault) defaultCommand = handlers[parsedCommand.cmd]
  }

  self.addDirectory = function (dir, context, req, callerFile, opts) {
    opts = opts || {}
    // disable recursion to support nested directories of subcommands
    if (typeof opts.recurse !== 'boolean') opts.recurse = false
    // exclude 'json', 'coffee' from require-directory defaults
    if (!Array.isArray(opts.extensions)) opts.extensions = ['js']
    // allow consumer to define their own visitor function
    const parentVisit = typeof opts.visit === 'function' ? opts.visit : function (o) { return o }
    // call addHandler via visitor function
    opts.visit = function (obj, joined, filename) {
      const visited = parentVisit(obj, joined, filename)
      // allow consumer to skip modules with their own visitor
      if (visited) {
        // check for cyclic reference
        // each command file path should only be seen once per execution
        if (~context.files.indexOf(joined)) return visited
        // keep track of visited files in context.files
        context.files.push(joined)
        self.addHandler(visited)
      }
      return visited
    }
    __webpack_require__(1043)({ require: req, filename: callerFile }, dir, opts)
  }

  // lookup module object from require()d command and derive name
  // if module was not require()d and no name given, throw error
  function moduleName (obj) {
    const mod = __webpack_require__(1198)(obj)
    if (!mod) throw new Error('No command name given for module: ' + inspect(obj))
    return commandFromFilename(mod.filename)
  }

  // derive command name from filename
  function commandFromFilename (filename) {
    return path.basename(filename, path.extname(filename))
  }

  function extractDesc (obj) {
    for (var keys = ['describe', 'description', 'desc'], i = 0, l = keys.length, test; i < l; i++) {
      test = obj[keys[i]]
      if (typeof test === 'string' || typeof test === 'boolean') return test
    }
    return false
  }

  self.parseCommand = function (cmd) {
    var extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' ')
    var splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/)
    var bregex = /\.*[\][<>]/g
    var parsedCommand = {
      cmd: (splitCommand.shift()).replace(bregex, ''),
      demanded: [],
      optional: []
    }
    splitCommand.forEach(function (cmd, i) {
      var variadic = false
      cmd = cmd.replace(/\s/g, '')
      if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) variadic = true
      if (/^\[/.test(cmd)) {
        parsedCommand.optional.push({
          cmd: cmd.replace(bregex, '').split('|'),
          variadic: variadic
        })
      } else {
        parsedCommand.demanded.push({
          cmd: cmd.replace(bregex, '').split('|'),
          variadic: variadic
        })
      }
    })
    return parsedCommand
  }

  self.getCommands = function () {
    return Object.keys(handlers).concat(Object.keys(aliasMap))
  }

  self.getCommandHandlers = function () {
    return handlers
  }

  self.hasDefaultCommand = function () {
    return !!defaultCommand
  }

  self.runCommand = function (command, yargs, parsed, commandIndex) {
    var aliases = parsed.aliases
    var commandHandler = handlers[command] || handlers[aliasMap[command]] || defaultCommand
    var currentContext = yargs.getContext()
    var numFiles = currentContext.files.length
    var parentCommands = currentContext.commands.slice()

    // what does yargs look like after the buidler is run?
    var innerArgv = parsed.argv
    var innerYargs = null
    var positionalMap = {}

    if (command) currentContext.commands.push(command)
    if (typeof commandHandler.builder === 'function') {
      // a function can be provided, which builds
      // up a yargs chain and possibly returns it.
      innerYargs = commandHandler.builder(yargs.reset(parsed.aliases))
      // if the builder function did not yet parse argv with reset yargs
      // and did not explicitly set a usage() string, then apply the
      // original command string as usage() for consistent behavior with
      // options object below.
      if (yargs.parsed === false) {
        if (typeof yargs.getUsageInstance().getUsage() === 'undefined') {
          yargs.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original)
        }
        innerArgv = innerYargs ? innerYargs._parseArgs(null, null, true, commandIndex) : yargs._parseArgs(null, null, true, commandIndex)
      } else {
        innerArgv = yargs.parsed.argv
      }

      if (innerYargs && yargs.parsed === false) aliases = innerYargs.parsed.aliases
      else aliases = yargs.parsed.aliases
    } else if (typeof commandHandler.builder === 'object') {
      // as a short hand, an object can instead be provided, specifying
      // the options that a command takes.
      innerYargs = yargs.reset(parsed.aliases)
      innerYargs.usage('$0 ' + (parentCommands.length ? parentCommands.join(' ') + ' ' : '') + commandHandler.original)
      Object.keys(commandHandler.builder).forEach(function (key) {
        innerYargs.option(key, commandHandler.builder[key])
      })
      innerArgv = innerYargs._parseArgs(null, null, true, commandIndex)
      aliases = innerYargs.parsed.aliases
    }

    if (!yargs._hasOutput()) {
      positionalMap = populatePositionals(commandHandler, innerArgv, currentContext, yargs)
    }

    // we apply validation post-hoc, so that custom
    // checks get passed populated positional arguments.
    if (!yargs._hasOutput()) yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error)

    if (commandHandler.handler && !yargs._hasOutput()) {
      yargs._setHasOutput()
      commandHandler.handler(innerArgv)
    }

    if (command) currentContext.commands.pop()
    numFiles = currentContext.files.length - numFiles
    if (numFiles > 0) currentContext.files.splice(numFiles * -1, numFiles)

    return innerArgv
  }

  // transcribe all positional arguments "command <foo> <bar> [apple]"
  // onto argv.
  function populatePositionals (commandHandler, argv, context, yargs) {
    argv._ = argv._.slice(context.commands.length) // nuke the current commands
    var demanded = commandHandler.demanded.slice(0)
    var optional = commandHandler.optional.slice(0)
    var positionalMap = {}

    validation.positionalCount(demanded.length, argv._.length)

    while (demanded.length) {
      var demand = demanded.shift()
      populatePositional(demand, argv, yargs, positionalMap)
    }

    while (optional.length) {
      var maybe = optional.shift()
      populatePositional(maybe, argv, yargs, positionalMap)
    }

    argv._ = context.commands.concat(argv._)
    return positionalMap
  }

  // populate a single positional argument and its
  // aliases onto argv.
  function populatePositional (positional, argv, yargs, positionalMap) {
    // "positional" consists of the positional.cmd, an array representing
    // the positional's name and aliases, and positional.variadic
    // indicating whether or not it is a variadic array.
    var variadics = null
    var value = null
    for (var i = 0, cmd; (cmd = positional.cmd[i]) !== undefined; i++) {
      if (positional.variadic) {
        if (variadics) argv[cmd] = variadics.slice(0)
        else argv[cmd] = variadics = argv._.splice(0)
      } else {
        if (!value && !argv._.length) continue
        if (value) argv[cmd] = value
        else argv[cmd] = value = argv._.shift()
      }
      positionalMap[cmd] = true
      postProcessPositional(yargs, argv, cmd)
      addCamelCaseExpansions(argv, cmd)
    }
  }

  // TODO move positional arg logic to yargs-parser and remove this duplication
  function postProcessPositional (yargs, argv, key) {
    var coerce = yargs.getOptions().coerce[key]
    if (typeof coerce === 'function') {
      try {
        argv[key] = coerce(argv[key])
      } catch (err) {
        yargs.getUsageInstance().fail(err.message, err)
      }
    }
  }

  function addCamelCaseExpansions (argv, option) {
    if (/-/.test(option)) {
      const cc = camelCase(option)
      if (typeof argv[option] === 'object') argv[cc] = argv[option].slice(0)
      else argv[cc] = argv[option]
    }
  }

  self.reset = function () {
    handlers = {}
    aliasMap = {}
    defaultCommand = undefined
    return self
  }

  // used by yargs.parse() to freeze
  // the state of commands such that
  // we can apply .parse() multiple times
  // with the same yargs instance.
  var frozen
  self.freeze = function () {
    frozen = {}
    frozen.handlers = handlers
    frozen.aliasMap = aliasMap
    frozen.defaultCommand = defaultCommand
  }
  self.unfreeze = function () {
    handlers = frozen.handlers
    aliasMap = frozen.aliasMap
    defaultCommand = frozen.defaultCommand
    frozen = undefined
  }

  return self
}


/***/ }),
/* 461 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 462 */
/***/ (function(module, exports, __webpack_require__) {

(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define("Debugger", [], factory);
	else if(typeof exports === 'object')
		exports["Debugger"] = factory();
	else
		root["Debugger"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 29);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1213);

/***/ }),
/* 1 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(285);

/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.prefixName = prefixName;
exports.keccak256 = keccak256;

var _utils = __webpack_require__(10);

function prefixName(prefix, fn) {
  Object.defineProperty(fn, 'name', {
    value: `${prefix}.${fn.name}`,
    configurable: true
  });

  return fn;
}

/**
 * @return 0x-prefix string of keccak256 hash
 */
function keccak256(...args) {
  return (0, _utils.toHexString)((0, _utils.keccak256)(...args));
}

/***/ }),
/* 3 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(193);

/***/ }),
/* 4 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1045);

/***/ }),
/* 5 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(598);

/***/ }),
/* 6 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(399);

/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _selectors = __webpack_require__(13);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:evm:selectors");

const WORD_SIZE = 0x20;

/**
 * create EVM-level selectors for a given trace step selector
 * may specify additional selectors to include
 */
function createStepSelectors(step, state = null) {
  let base = {
    /**
     * .trace
     *
     * trace step info related to operation
     */
    trace: (0, _reselectTree.createLeaf)([step], ({ gasCost, op, pc }) => ({ gasCost, op, pc })),

    /**
     * .programCounter
     */
    programCounter: (0, _reselectTree.createLeaf)(["./trace"], step => step.pc),

    /**
     * .isJump
     */
    isJump: (0, _reselectTree.createLeaf)(["./trace"], step => step.op != "JUMPDEST" && step.op.indexOf("JUMP") == 0),

    /**
     * .isCall
     *
     * whether the opcode will switch to another calling context
     */
    isCall: (0, _reselectTree.createLeaf)(["./trace"], step => step.op == "CALL" || step.op == "DELEGATECALL"),

    /**
     * .isCreate
     */
    isCreate: (0, _reselectTree.createLeaf)(["./trace"], step => step.op == "CREATE"),

    /**
     * .isHalting
     *
     * whether the instruction halts or returns from a calling context
     */
    isHalting: (0, _reselectTree.createLeaf)(["./trace"], step => step.op == "STOP" || step.op == "RETURN")
  };

  if (state) {
    const isRelative = path => typeof path == "string" && (path.startsWith("./") || path.startsWith("../"));

    if (isRelative(state)) {
      state = `../${state}`;
    }

    (0, _assign2.default)(base, {
      /**
       * .callAddress
       *
       * address transferred to by call operation
       */
      callAddress: (0, _reselectTree.createLeaf)(["./isCall", "./trace", state], (matches, step, { stack }) => {
        if (!matches) return null;

        let address = stack[stack.length - 2];
        address = "0x" + address.substring(24);
        return address;
      }),

      /**
       * .createBinary
       *
       * binary code to execute via create operation
       */
      createBinary: (0, _reselectTree.createLeaf)(["./isCreate", "./trace", state], (matches, step, { stack, memory }) => {
        if (!matches) return null;

        // Get the code that's going to be created from memory.
        // Note we multiply by 2 because these offsets are in bytes.
        const offset = parseInt(stack[stack.length - 2], 16) * 2;
        const length = parseInt(stack[stack.length - 3], 16) * 2;

        return "0x" + memory.join("").substring(offset, offset + length);
      })
    });
  }

  return base;
}

const evm = (0, _reselectTree.createSelectorTree)({
  /**
   * evm.state
   */
  state: state => state.evm,

  /**
   * evm.info
   */
  info: {
    /**
     * evm.info.contexts
     */
    contexts: (0, _reselectTree.createLeaf)(['/state'], state => state.info.contexts.byContext),

    /**
     * evm.info.instances
     */
    instances: (0, _reselectTree.createLeaf)(['/state'], state => state.info.instances.byAddress),

    /**
     * evm.info.binaries
     */
    binaries: {
      _: (0, _reselectTree.createLeaf)(['/state'], state => state.info.contexts.byBinary),

      /**
       * evm.info.binaries.search
       *
       * returns function (binary) => context
       */
      search: (0, _reselectTree.createLeaf)(['./_'], binaries => {
        // HACK ignore link references for search
        // link references come in two forms: with underscores or all zeroes
        // the underscore format is used by Truffle to reference links by name
        // zeroes are used by solc directly, as libraries inject their own
        // address at CREATE-time
        const toRegExp = binary => new RegExp(`^${binary.replace(/__.{38}|0{40}/g, ".{40}")}`);

        let matchers = (0, _entries2.default)(binaries).map(([binary, { context }]) => ({
          context,
          regex: toRegExp(binary)
        }));

        return binary => matchers.filter(({ context, regex }) => binary.match(regex)).map(({ context }) => ({ context }))[0] || null;
      })
    }
  },

  /**
   * evm.current
   */
  current: {

    /**
     * evm.current.callstack
     */
    callstack: state => state.evm.proc.callstack,

    /**
     * evm.current.call
     */
    call: (0, _reselectTree.createLeaf)(["./callstack"], stack => stack.length ? stack[stack.length - 1] : {}),

    /**
     * evm.current.context
     */
    context: (0, _reselectTree.createLeaf)(["./call", "/info/instances", "/info/binaries/search", "/info/contexts"], ({ address, binary }, instances, search, contexts) => {
      let record;
      if (address) {
        record = instances[address];
        if (!record) {
          return { address };
        }
        binary = record.binary;
      } else {
        record = search(binary);
      }

      let context = contexts[(record || {}).context];

      return (0, _extends3.default)({}, context, {
        binary
      });
    }),

    /**
     * evm.current.state
     *
     * evm state info: as of last operation, before op defined in step
     */
    state: (0, _assign2.default)({}, ...["depth", "error", "gas", "memory", "stack", "storage"].map(param => ({
      [param]: (0, _reselectTree.createLeaf)([_selectors2.default.step], step => step[param])
    }))),

    /**
     * evm.current.step
     */
    step: createStepSelectors(_selectors2.default.step, "./state")
  },

  /**
   * evm.next
   */
  next: {

    /**
     * evm.next.state
     *
     * evm state as a result of next step operation
     */
    state: (0, _assign2.default)({}, ...["depth", "error", "gas", "memory", "stack", "storage"].map(param => ({
      [param]: (0, _reselectTree.createLeaf)([_selectors2.default.next], step => step[param])
    }))),

    step: createStepSelectors(_selectors2.default.next, "./state")
  }
});

exports.default = evm;

/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _truffleSolidityUtils = __webpack_require__(34);

var _truffleSolidityUtils2 = _interopRequireDefault(_truffleSolidityUtils);

var _truffleCodeUtils = __webpack_require__(35);

var _truffleCodeUtils2 = _interopRequireDefault(_truffleCodeUtils);

var _selectors = __webpack_require__(7);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:solidity:selectors");

function getSourceRange(instruction = {}) {
  return {
    start: instruction.start || 0,
    length: instruction.length || 0,
    lines: instruction.range || {
      start: {
        line: 0, column: 0
      },
      end: {
        line: 0, column: 0
      }
    }
  };
}

let solidity = (0, _reselectTree.createSelectorTree)({
  /**
   * solidity.state
   */
  state: state => state.solidity,

  /**
   * solidity.info
   */
  info: {
    /**
     * solidity.info.sources
     */
    sources: (0, _reselectTree.createLeaf)(['/state'], state => state.info.sources.byId),

    /**
     * solidity.info.sourceMaps
     */
    sourceMaps: (0, _reselectTree.createLeaf)(['/state'], state => state.info.sourceMaps.byContext)
  },

  /**
   * solidity.current
   */
  current: {

    /**
     * solidity.current.sourceMap
     */
    sourceMap: (0, _reselectTree.createLeaf)([_selectors2.default.current.context, "/info/sourceMaps"], ({ context }, sourceMaps) => sourceMaps[context] || {}),

    /**
     * solidity.current.functionDepth
     */
    functionDepth: state => state.solidity.proc.functionDepth,

    /**
     * solidity.current.instructions
     */
    instructions: (0, _reselectTree.createLeaf)(["/info/sources", _selectors2.default.current.context, "./sourceMap"], (sources, { binary }, { sourceMap }) => {
      if (!binary) {
        return [];
      }

      let instructions = _truffleCodeUtils2.default.parseCode(binary);

      if (!sourceMap) {
        // Let's create a source map to use since none exists. This source map
        // maps just as many ranges as there are instructions, and ensures every
        // instruction is marked as "jumping out". This will ensure all
        // available debugger commands step one instruction at a time.
        //
        // This is kindof a hack; perhaps this should be broken out into separate
        // context types. TODO
        sourceMap = "";
        for (var i = 0; i < instructions.length; i++) {
          sourceMap += i + ":" + i + ":1:-1;";
        }
      }

      var lineAndColumnMappings = (0, _assign2.default)({}, ...(0, _entries2.default)(sources).map(([id, { source }]) => ({
        [id]: _truffleSolidityUtils2.default.getCharacterOffsetToLineAndColumnMapping(source || "")
      })));
      var humanReadableSourceMap = _truffleSolidityUtils2.default.getHumanReadableSourceMap(sourceMap);

      let primaryFile = humanReadableSourceMap[0].file;
      debug("primaryFile %o", primaryFile);

      return instructions.map((instruction, index) => {
        // lookup source map by index and add `index` property to
        // instruction
        //

        const sourceMap = humanReadableSourceMap[index] || {};

        return {
          instruction: (0, _extends3.default)({}, instruction, { index }),
          sourceMap
        };
      }).map(({ instruction, sourceMap }) => {
        // add source map information to instruction, or defaults
        //

        const { jump, start = 0, length = 0, file = primaryFile } = sourceMap;
        const lineAndColumnMapping = lineAndColumnMappings[file] || {};
        const range = {
          start: lineAndColumnMapping[start] || { line: null, column: null },
          end: lineAndColumnMapping[start + length] || { line: null, column: null }
        };

        if (range.start.line === null) {
          debug("sourceMap %o", sourceMap);
        }

        return (0, _extends3.default)({}, instruction, {

          jump,
          start,
          length,
          file,
          range
        });
      });
    }),

    /**
     * solidity.current.instructionAtProgramCounter
     */
    instructionAtProgramCounter: (0, _reselectTree.createLeaf)(["./instructions"], instructions => {
      let map = [];
      instructions.forEach(function (instruction) {
        map[instruction.pc] = instruction;
      });

      // fill in gaps in map by defaulting to the last known instruction
      let lastSeen = null;
      for (let [pc, instruction] of map.entries()) {
        if (instruction) {
          lastSeen = instruction;
        } else {
          map[pc] = lastSeen;
        }
      }
      return map;
    }),

    /**
     * solidity.current.instruction
     */
    instruction: (0, _reselectTree.createLeaf)(["./instructionAtProgramCounter", _selectors2.default.current.step.programCounter], (map, pc) => map[pc] || {}),

    /**
     * solidity.current.source
     */
    source: (0, _reselectTree.createLeaf)(["/info/sources", "./instruction"], (sources, { file: id }) => sources[id] || {}),

    /**
     * solidity.current.sourceRange
     */
    sourceRange: (0, _reselectTree.createLeaf)(["./instruction"], getSourceRange),

    /**
     * solidity.current.isSourceRangeFinal
     */
    isSourceRangeFinal: (0, _reselectTree.createLeaf)(["./instructionAtProgramCounter", _selectors2.default.current.step.programCounter, _selectors2.default.next.step.programCounter], (map, current, next) => {
      if (!map[next]) {
        return true;
      }

      current = map[current];
      next = map[next];

      return current.start != next.start || current.length != next.length || current.file != next.file;
    }),

    /**
     * solidity.current.isMultiline
     */
    isMultiline: (0, _reselectTree.createLeaf)(["./sourceRange"], ({ lines }) => lines.start.line != lines.end.line),

    /**
     * solidity.current.willJump
     */
    willJump: (0, _reselectTree.createLeaf)([_selectors2.default.current.step.isJump], isJump => isJump),

    /**
     * solidity.current.jumpDirection
     */
    jumpDirection: (0, _reselectTree.createLeaf)(["./instruction"], (i = {}) => i.jump || "-")
  }
});

exports.default = solidity;

/***/ }),
/* 9 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1027);

/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.MAX_WORD = exports.WORD_SIZE = undefined;

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

exports.cleanBigNumbers = cleanBigNumbers;
exports.typeIdentifier = typeIdentifier;
exports.typeClass = typeClass;
exports.allocateDeclarations = allocateDeclarations;
exports.specifiedSize = specifiedSize;
exports.storageSize = storageSize;
exports.isReference = isReference;
exports.referenceType = referenceType;
exports.baseDefinition = baseDefinition;
exports.toBigNumber = toBigNumber;
exports.toSignedBigNumber = toSignedBigNumber;
exports.toHexString = toHexString;
exports.toBytes = toBytes;
exports.keccak256 = keccak256;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _bignumber = __webpack_require__(14);

var _web = __webpack_require__(22);

var _web2 = _interopRequireDefault(_web);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:decode:utils");

const WORD_SIZE = exports.WORD_SIZE = 0x20;
const MAX_WORD = exports.MAX_WORD = new _bignumber.BigNumber(2).pow(256).minus(1);

/**
 * recursively converts big numbers into something nicer to look at
 */
function cleanBigNumbers(value) {
  if (_bignumber.BigNumber.isBigNumber(value)) {
    return value.toNumber();
  } else if (value && value.map != undefined) {
    return value.map(inner => cleanBigNumbers(inner));
  } else if (value && typeof value == "object") {
    return (0, _assign2.default)({}, ...(0, _entries2.default)(value).map(([key, inner]) => ({ [key]: cleanBigNumbers(inner) })));
  } else {
    return value;
  }
}

function typeIdentifier(definition) {
  return definition.typeDescriptions.typeIdentifier;
}

/**
 * returns basic type class for a variable definition node
 * e.g.:
 *  `t_uint256` becomes `uint`
 *  `t_struct$_Thing_$20_memory_ptr` becomes `struct`
 */
function typeClass(definition) {
  return typeIdentifier(definition).match(/t_([^$_0-9]+)/)[1];
}

/**
 * Allocate storage for given variable declarations
 *
 * Postcondition: starts a new slot and occupies whole slots
 */
function allocateDeclarations(declarations, refs, slot = 0, index = WORD_SIZE - 1, path = []) {
  if (index < WORD_SIZE - 1) {
    // starts a new slot
    slot++;
    index = WORD_SIZE - 1;
  }

  let parentFrom = { slot, index: 0 };
  var parentTo = { slot, index: WORD_SIZE - 1 };
  let mapping = {};

  for (let declaration of declarations) {
    let { from, to, next, children } = allocateDeclaration(declaration, refs, slot, index);

    mapping[declaration.id] = { from, to, name: declaration.name };
    if (children !== undefined) {
      mapping[declaration.id].children = children;
    }

    slot = next.slot;
    index = next.index;

    parentTo = { slot: to.slot, index: WORD_SIZE - 1 };
  }

  if (index < WORD_SIZE - 1) {
    slot++;
    index = WORD_SIZE - 1;
  }

  return {
    from: parentFrom,
    to: parentTo,
    next: { slot, index },
    children: mapping
  };
}

function allocateValue(slot, index, bytes) {
  let from = index - bytes + 1 >= 0 ? { slot, index: index - bytes + 1 } : { slot: slot + 1, index: WORD_SIZE - bytes };

  let to = { slot: from.slot, index: from.index + bytes - 1 };

  let next = from.index == 0 ? { slot: from.slot + 1, index: WORD_SIZE - 1 } : { slot: from.slot, index: from.index - 1 };

  return { from, to, next };
}

function allocateDeclaration(declaration, refs, slot, index) {
  let definition = refs[declaration.id].definition;
  var byteSize = storageSize(definition); // yum

  if (typeClass(definition) != "struct") {
    return allocateValue(slot, index, byteSize);
  }

  let struct = refs[definition.typeName.referencedDeclaration];
  debug("struct: %O", struct);

  let result = allocateDeclarations(struct.variables || [], refs, slot, index);
  debug("struct result %o", result);
  return result;
}

/**
 * e.g. uint48 -> 6
 * @return size in bytes for explicit type size, or `null` if not stated
 */
function specifiedSize(definition) {
  let specified = typeIdentifier(definition).match(/t_[a-z]+([0-9]+)/);

  if (!specified) {
    return null;
  }

  let num = specified[1];

  switch (typeClass(definition)) {
    case "int":
    case "uint":
      return num / 8;

    case "bytes":
      return num;

    default:
      debug("Unknown type for size specification: %s", typeIdentifier(definition));
  }
}

function storageSize(definition) {
  switch (typeClass(definition)) {
    case "bool":
      return 1;

    case "address":
      return 20;

    case "int":
    case "uint":
      // is this a HACK? ("256" / 8)
      return typeIdentifier(definition).match(/t_[a-z]+([0-9]+)/)[1] / 8;

    case "string":
    case "bytes":
    case "array":
      return WORD_SIZE;
  }
}

function isReference(definition) {
  return typeIdentifier(definition).match(/_(memory|storage)(_ptr)?$/) != null;
}

function referenceType(definition) {
  return typeIdentifier(definition).match(/_([^_]+)(_ptr)?$/)[1];
}

function baseDefinition(definition) {
  let baseIdentifier = typeIdentifier(definition)
  // first dollar sign     last dollar sign
  //   `---------.       ,---'
  .match(/^[^$]+\$_(.+)_\$[^$]+$/)[1];
  //              `----' greedy match

  // HACK - internal types for memory or storage also seem to be pointers
  if (baseIdentifier.match(/_(memory|storage)$/) != null) {
    baseIdentifier = `${baseIdentifier}_ptr`;
  }

  // another HACK - we get away with it becausewe're only using that one property
  return {
    typeDescriptions: {
      typeIdentifier: baseIdentifier
    }
  };
}

function toBigNumber(bytes) {
  if (bytes == undefined) {
    return undefined;
  } else if (typeof bytes == "string") {
    return new _bignumber.BigNumber(bytes, 16);
  } else if (typeof bytes == "number" || _bignumber.BigNumber.isBigNumber(bytes)) {
    return new _bignumber.BigNumber(bytes);
  } else if (bytes.reduce) {
    return bytes.reduce((num, byte) => num.times(0x100).plus(byte), new _bignumber.BigNumber(0));
  }
}

function toSignedBigNumber(bytes) {
  if (bytes[0] < 0b10000000) {
    // first bit is 0
    return toBigNumber(bytes);
  } else {
    return toBigNumber(bytes.map(b => 0xff - b)).plus(1).negated();
  }
}

/**
 * @param bytes - Uint8Array
 * @param length - desired byte length (pad with zeroes)
 * @param trim - omit leading zeroes
 */
function toHexString(bytes, length = 0, trim = false) {
  if (typeof length == "boolean") {
    trim = length;
    length = 0;
  }

  if (_bignumber.BigNumber.isBigNumber(bytes)) {
    bytes = toBytes(bytes);
  }

  const pad = s => `${"00".slice(0, 2 - s.length)}${s}`;

  //                                          0  1  2  3  4
  //                                 0  1  2  3  4  5  6  7
  // bytes.length:        5  -  0x(          e5 c2 aa 09 11 )
  // length (preferred):  8  -  0x( 00 00 00 e5 c2 aa 09 11 )
  //                                `--.---'
  //                                     offset 3
  if (bytes.length < length) {
    let prior = bytes;
    bytes = new Uint8Array(length);

    bytes.set(prior, length - prior.length);
  }

  debug("bytes: %o", bytes);

  let string = bytes.reduce((str, byte) => `${str}${pad(byte.toString(16))}`, "");

  if (trim) {
    string = string.replace(/^(00)+/, "");
  }

  if (string.length == 0) {
    string = "00";
  }

  return `0x${string}`;
}

function toBytes(number, length = 0) {
  if (number < 0) {
    return [];
  }

  let hex = number.toString(16);
  if (hex.length % 2 == 1) {
    hex = `0${hex}`;
  }

  let bytes = new Uint8Array(hex.match(/.{2}/g).map(byte => parseInt(byte, 16)));

  if (bytes.length < length) {
    let prior = bytes;
    bytes = new Uint8Array(length);
    bytes.set(prior, length - prior.length);
  }

  return bytes;
}

function keccak256(...args) {
  let web3 = new _web2.default();

  args = args.map(arg => {
    if (typeof arg == "number" || _bignumber.BigNumber.isBigNumber(arg)) {
      return toHexString(toBytes(arg, WORD_SIZE)).slice(2);
    } else if (typeof arg == "string") {
      return web3.toHex(arg).slice(2);
    } else {
      return "";
    }
  });

  let sha = web3.sha3(args.join(''), { encoding: 'hex' });
  debug("sha %o", sha);
  return toBigNumber(sha);
}

/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _jsonPointer = __webpack_require__(15);

var _jsonPointer2 = _interopRequireDefault(_jsonPointer);

var _selectors = __webpack_require__(8);

var _selectors2 = _interopRequireDefault(_selectors);

var _map = __webpack_require__(36);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:ast:selectors");

/**
 * ast
 */
const ast = (0, _reselectTree.createSelectorTree)({
  /**
   * ast.views
   */
  views: {
    /**
     * ast.views.sources
     */
    sources: (0, _reselectTree.createLeaf)([_selectors2.default.info.sources], sources => sources)
  },

  /**
   * ast.current
   */
  current: {

    /**
     * ast.current.tree
     *
     * ast for current source
     */
    tree: (0, _reselectTree.createLeaf)([_selectors2.default.current.source], ({ ast }) => ast),

    /**
     * ast.current.index
     *
     * source ID
     */
    index: (0, _reselectTree.createLeaf)([_selectors2.default.current.source], ({ id }) => id),

    /**
     * ast.current.pointer
     *
     * jsonpointer for current ast node
     */
    pointer: (0, _reselectTree.createLeaf)(["./tree", _selectors2.default.current.sourceRange], (ast, range) => (0, _map.findRange)(ast, range.start, range.length)),

    /**
     * ast.current.node
     *
     * current ast node to execute
     */
    node: (0, _reselectTree.createLeaf)(["./tree", "./pointer"], (ast, pointer) => pointer ? _jsonPointer2.default.get(ast, pointer) : _jsonPointer2.default.get(ast, ""))

  }
});

exports.default = ast;

/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.saveSteps = saveSteps;
exports.receiveAddresses = receiveAddresses;
exports.next = next;
exports.tick = tick;
exports.tock = tock;
exports.endTrace = endTrace;
const SAVE_STEPS = exports.SAVE_STEPS = "SAVE_STEPS";
function saveSteps(steps) {
  return {
    type: SAVE_STEPS,
    steps
  };
}

const RECEIVE_ADDRESSES = exports.RECEIVE_ADDRESSES = "RECEIVE_ADDRESSES";
function receiveAddresses(addresses) {
  return {
    type: RECEIVE_ADDRESSES,
    addresses
  };
}

const NEXT = exports.NEXT = "NEXT";
function next() {
  return { type: NEXT };
}

const TICK = exports.TICK = "TICK";
function tick() {
  return { type: TICK };
}

const TOCK = exports.TOCK = "TOCK";
function tock() {
  return { type: TOCK };
}

const END_OF_TRACE = exports.END_OF_TRACE = "EOT";
function endTrace() {
  return { type: END_OF_TRACE };
}

/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _reselectTree = __webpack_require__(4);

let trace = (0, _reselectTree.createSelectorTree)({
  /**
   * trace.index
   *
   * current step index
   */
  index: state => state.trace.proc.index,

  /**
   * trace.steps
   *
   * all trace steps
   */
  steps: state => state.trace.info.steps,

  /**
   * trace.stepsRemaining
   *
   * number of steps remaining in trace
   */
  stepsRemaining: (0, _reselectTree.createLeaf)(["./steps", "./index"], (steps, index) => steps.length - index),

  /**
   * trace.step
   *
   * current trace step
   */
  step: (0, _reselectTree.createLeaf)(["./steps", "./index"], (steps, index) => steps[index]),

  /**
   * trace.next
   *
   * next trace step or {}
   */
  next: (0, _reselectTree.createLeaf)(["./steps", "./index"], (steps, index) => index < steps.length - 1 ? steps[index + 1] : {})
});

exports.default = trace;

/***/ }),
/* 14 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1244);

/***/ }),
/* 15 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(369);

/***/ }),
/* 16 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(286);

/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.start = start;
exports.ready = ready;
exports.error = error;
exports.finish = finish;
exports.recordContracts = recordContracts;
const START = exports.START = "SESSION_START";
function start(txHash, provider) {
  return {
    type: START,
    txHash, provider
  };
}

const READY = exports.READY = "SESSION_READY";
function ready() {
  return {
    type: READY
  };
}

const ERROR = exports.ERROR = "SESSION_ERROR";
function error(error) {
  return {
    type: ERROR,
    error
  };
}

const FINISH = exports.FINISH = "SESSION_FINISH";
function finish() {
  return {
    type: FINISH
  };
}

const RECORD_CONTRACTS = exports.RECORD_CONTRACTS = "RECORD_CONTRACTS";
function recordContracts(contexts, sources) {
  return {
    type: RECORD_CONTRACTS,
    contexts, sources
  };
}

/***/ }),
/* 18 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(596);

/***/ }),
/* 19 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(597);

/***/ }),
/* 20 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(287);

/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.beginStep = beginStep;
exports.advance = advance;
exports.stepNext = stepNext;
exports.stepOver = stepOver;
exports.stepInto = stepInto;
exports.stepOut = stepOut;
exports.interrupt = interrupt;
exports.continueUntil = continueUntil;
const BEGIN_STEP = exports.BEGIN_STEP = "BEGIN_STEP";
function beginStep(type) {
  return {
    type: BEGIN_STEP,
    stepType: type
  };
}

const ADVANCE = exports.ADVANCE = "ADVANCE";
function advance() {
  return { type: ADVANCE };
}

const STEP_NEXT = exports.STEP_NEXT = "STEP_NEXT";
function stepNext() {
  return { type: STEP_NEXT };
}

const STEP_OVER = exports.STEP_OVER = "STEP_OVER";
function stepOver() {
  return { type: STEP_OVER };
}

const STEP_INTO = exports.STEP_INTO = "STEP_INTO";
function stepInto() {
  return { type: STEP_INTO };
}

const STEP_OUT = exports.STEP_OUT = "STEP_OUT";
function stepOut() {
  return { type: STEP_OUT };
}

const INTERRUPT = exports.INTERRUPT = "INTERRUPT";
function interrupt() {
  return { type: INTERRUPT };
}

const CONTINUE_UNTIL = exports.CONTINUE_UNTIL = "CONTINUE_UNTIL";
function continueUntil(...breakpoints) {
  return {
    type: CONTINUE_UNTIL,
    breakpoints
  };
}

/***/ }),
/* 22 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(25);

/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

exports.scope = scope;
exports.declare = declare;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _jsonPointer = __webpack_require__(15);

var _jsonPointer2 = _interopRequireDefault(_jsonPointer);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(12);

var _actions2 = __webpack_require__(24);

var actions = _interopRequireWildcard(_actions2);

var _selectors = __webpack_require__(25);

var _selectors2 = _interopRequireDefault(_selectors);

var _utils = __webpack_require__(10);

var utils = _interopRequireWildcard(_utils);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:sagas");

function* scope(nodeId, pointer, parentId, sourceId) {
  yield (0, _effects.put)(actions.scope(nodeId, pointer, parentId, sourceId));
}

function* declare(node) {
  yield (0, _effects.put)(actions.declare(node));
}

function* tickSaga() {
  let {
    tree,
    id: treeId,
    node,
    pointer
  } = yield (0, _effects.select)(_selectors2.default.views.ast);

  let scopes = yield (0, _effects.select)(_selectors2.default.info.scopes);
  let definitions = yield (0, _effects.select)(_selectors2.default.views.scopes.inlined);

  let stack = yield (0, _effects.select)(_selectors2.default.next.state.stack);
  if (!stack) {
    return;
  }

  let top = stack.length - 1;
  var parameters, returnParameters, assignments, storageVars;

  if (!node) {
    return;
  }

  switch (node.nodeType) {

    case "FunctionDefinition":
      // stack is only ready for interpretation after the last step of each
      // source range
      //
      // the data module always looks at the result of a particular opcode
      // (i.e., the following trace step's stack/memory/storage), so this
      // asserts that the _current_ operation is the final one before
      // proceeding
      if (!(yield (0, _effects.select)(_selectors2.default.views.atLastInstructionForSourceRange))) {
        break;
      }

      parameters = node.parameters.parameters.map((p, i) => `${pointer}/parameters/parameters/${i}`);

      returnParameters = node.returnParameters.parameters.map((p, i) => `${pointer}/returnParameters/parameters/${i}`);

      assignments = returnParameters.concat(parameters).reverse().map(pointer => _jsonPointer2.default.get(tree, pointer).id).map((id, i) => ({ [id]: { "stack": top - i } })).reduce((acc, assignment) => (0, _assign2.default)(acc, assignment), {});

      yield (0, _effects.put)(actions.assign(treeId, assignments));
      break;

    case "ContractDefinition":
      let storageVars = scopes[node.id].variables || [];
      let slot = 0;
      let index = _utils.WORD_SIZE - 1; // cause lower-order
      debug("storage vars %o", storageVars);

      let allocation = utils.allocateDeclarations(storageVars, definitions);
      assignments = (0, _assign2.default)({}, ...(0, _entries2.default)(allocation.children).map(([id, storage]) => ({ [id]: { storage } })));
      debug("assignments %O", assignments);

      yield (0, _effects.put)(actions.assign(treeId, assignments));
      break;

    case "VariableDeclaration":
      yield (0, _effects.put)(actions.assign(treeId, {
        [_jsonPointer2.default.get(tree, pointer).id]: { "stack": top }
      }));

    default:
      break;
  }
}

function* saga() {
  yield (0, _effects.takeEvery)(_actions.TICK, function* () {
    try {
      yield* tickSaga();
    } catch (e) {
      debug(e);
    }
  });
}

exports.default = (0, _helpers.prefixName)("data", saga);

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.scope = scope;
exports.declare = declare;
exports.assign = assign;
const SCOPE = exports.SCOPE = "SCOPE";
function scope(id, pointer, parentId, sourceId) {
  return {
    type: SCOPE,
    id, pointer, parentId, sourceId
  };
}

const DECLARE = exports.DECLARE = "DECLARE_VARIABLE";
function declare(node) {
  return {
    type: DECLARE,
    node
  };
}

const ASSIGN = exports.ASSIGN = "ASSIGN";
function assign(context, assignments) {
  return {
    type: ASSIGN,
    context, assignments
  };
}

/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _jsonPointer = __webpack_require__(15);

var _jsonPointer2 = _interopRequireDefault(_jsonPointer);

var _selectors = __webpack_require__(11);

var _selectors2 = _interopRequireDefault(_selectors);

var _selectors3 = __webpack_require__(7);

var _selectors4 = _interopRequireDefault(_selectors3);

var _selectors5 = __webpack_require__(8);

var _selectors6 = _interopRequireDefault(_selectors5);

var _decode = __webpack_require__(46);

var _decode2 = _interopRequireDefault(_decode);

var _utils = __webpack_require__(10);

var decodeUtils = _interopRequireWildcard(_utils);

var _bignumber = __webpack_require__(14);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:selectors");

function createStateSelectors({ stack, memory, storage }) {
  return {
    /**
     * .stack
     */
    stack: (0, _reselectTree.createLeaf)([stack], words => (words || []).map(word => decodeUtils.toBytes(decodeUtils.toBigNumber(word, decodeUtils.WORD_SIZE)))),

    /**
     * .memory
     */
    memory: (0, _reselectTree.createLeaf)([memory], words => new Uint8Array((words.join("").match(/.{1,2}/g) || []).map(byte => parseInt(byte, 16)))),

    /**
     * .storage
     */
    storage: (0, _reselectTree.createLeaf)([storage], mapping => (0, _assign2.default)({}, ...(0, _entries2.default)(mapping).map(([address, word]) => ({
      [`0x${address}`]: new Uint8Array((word.match(/.{1,2}/g) || []).map(byte => parseInt(byte, 16)))
    }))))
  };
}

const data = (0, _reselectTree.createSelectorTree)({
  state: state => state.data,

  /**
   * data.views
   */
  views: {
    ast: (0, _reselectTree.createLeaf)([_selectors2.default.current], tree => tree),

    atLastInstructionForSourceRange: (0, _reselectTree.createLeaf)([_selectors6.default.current.isSourceRangeFinal], final => final),

    /**
     * data.views.scopes
     */
    scopes: {

      /**
       * data.views.scopes.inlined
       */
      inlined: (0, _reselectTree.createLeaf)(["/info/scopes", _selectors6.default.info.sources], (scopes, sources) => (0, _assign2.default)({}, ...(0, _entries2.default)(scopes).map(([id, entry]) => ({
        [id]: (0, _extends3.default)({}, entry, {

          definition: _jsonPointer2.default.get(sources[entry.sourceId].ast, entry.pointer)
        })
      }))))
    },

    /**
     * data.views.decoder
     *
     * selector returns (ast node definition, data reference) => value
     */
    decoder: (0, _reselectTree.createLeaf)(["/views/scopes/inlined", "/current/state"], (scopes, state) => {
      return (definition, ref) => (0, _decode2.default)(definition, ref, state, scopes);
    })
  },

  /**
   * data.info
   */
  info: {

    /**
     * data.info.scopes
     */
    scopes: (0, _reselectTree.createLeaf)(["/state"], state => state.info.scopes.byId)
  },

  /**
   * data.proc
   */
  proc: {

    /**
     * data.proc.assignments
     */
    assignments: (0, _reselectTree.createLeaf)(["/state"], state => state.proc.assignments.byId)
  },

  /**
   * data.current
   */
  current: {
    /**
     *
     * data.current.scope
     */
    scope: {

      /**
       * data.current.scope.id
       */
      id: (0, _reselectTree.createLeaf)([_selectors2.default.current.node], node => node.id)
    },

    /**
     * data.current.state
     */
    state: createStateSelectors(_selectors4.default.current.state),

    /**
     * data.current.identifiers (namespace)
     */
    identifiers: {

      /**
       * data.current.identifiers (selector)
       *
       * returns identifers and corresponding definition node ID
       */
      _: (0, _reselectTree.createLeaf)(["/views/scopes/inlined", "/current/scope"], (scopes, scope) => {
        let cur = scope.id;
        let variables = {};

        do {
          variables = (0, _assign2.default)(variables, ...(scopes[cur].variables || []).filter(v => variables[v.name] == undefined).map(v => ({ [v.name]: v.id })));

          cur = scopes[cur].parentId;
        } while (cur != null);

        return variables;
      }),

      /**
       * data.current.identifiers.definitions
       *
       * current variable definitions
       */
      definitions: (0, _reselectTree.createLeaf)(["/views/scopes/inlined", "./_"], (scopes, identifiers) => (0, _assign2.default)({}, ...(0, _entries2.default)(identifiers).map(([identifier, id]) => {
        let { definition } = scopes[id];

        return { [identifier]: definition };
      }))),

      /**
       * data.current.identifiers.refs
       *
       * current variables' value refs
       */
      refs: (0, _reselectTree.createLeaf)(["/proc/assignments", "./_"], (assignments, identifiers) => (0, _assign2.default)({}, ...(0, _entries2.default)(identifiers).map(([identifier, id]) => {
        let { ref } = assignments[id] || {};
        if (!ref) {
          return undefined;
        };

        return {
          [identifier]: ref
        };
      }))),

      decoded: (0, _reselectTree.createLeaf)(["/views/decoder", "./definitions", "./refs"], (decode, definitions, refs) => (0, _assign2.default)({}, ...(0, _entries2.default)(refs).map(([identifier, ref]) => ({
        [identifier]: decode(definitions[identifier], ref)
      })))),

      native: (0, _reselectTree.createLeaf)(['./decoded'], decodeUtils.cleanBigNumbers)
    }
  },

  /**
   * data.next
   */
  next: {

    /**
     * data.next.state
     */
    state: createStateSelectors(_selectors4.default.next.state)
  }
});

exports.default = data;

/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _set = __webpack_require__(18);

var _set2 = _interopRequireDefault(_set);

exports.advance = advance;
exports.wait = wait;
exports.processTrace = processTrace;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(12);

var actions = _interopRequireWildcard(_actions);

var _selectors = __webpack_require__(13);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:trace:sagas");

function* waitForTrace() {
  let { steps } = yield (0, _effects.take)(actions.SAVE_STEPS);

  let addresses = [...new _set2.default(steps.filter(({ op }) => op == "CALL" || op == "DELEGATECALL").map(({ stack }) => "0x" + stack[stack.length - 2].substring(24)))];

  yield (0, _effects.put)(actions.receiveAddresses(addresses));
}

function* advance() {
  yield (0, _effects.put)(actions.next());

  yield (0, _effects.take)(actions.TOCK);
}

function* next() {
  let remaining = yield (0, _effects.select)(_selectors2.default.stepsRemaining);
  debug("remaining: %o", remaining);
  let steps = yield (0, _effects.select)(_selectors2.default.steps);
  debug("total steps: %o", steps.length);

  if (remaining > 0) {
    debug("putting TICK");
    // updates state for current step
    yield (0, _effects.put)(actions.tick());
    debug("put TICK");

    remaining--; // local update, just for convenience
  }

  if (remaining) {
    debug("putting TOCK");
    // updates step to next step in trace
    yield (0, _effects.put)(actions.tock());
    debug("put TOCK");
  } else {

    yield (0, _effects.put)(actions.endTrace());
  }
}

function* wait() {
  yield (0, _effects.take)(actions.END_OF_TRACE);
}

function* processTrace(trace) {
  yield (0, _effects.put)(actions.saveSteps(trace));

  let { addresses } = yield (0, _effects.take)(actions.RECEIVE_ADDRESSES);
  debug("received addresses");

  return addresses;
}

function* saga() {
  // wait for trace to be defined
  yield* waitForTrace();

  yield (0, _effects.takeEvery)(actions.NEXT, next);
}

exports.default = (0, _helpers.prefixName)("trace", saga);

/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.addSource = addSource;
exports.addSourceMap = addSourceMap;
exports.jump = jump;
const ADD_SOURCE = exports.ADD_SOURCE = "SOLIDITY_ADD_SOURCE";
function addSource(source, sourcePath, ast) {
  return {
    type: ADD_SOURCE,
    source, sourcePath, ast
  };
}

const ADD_SOURCEMAP = exports.ADD_SOURCEMAP = "SOLIDITY_ADD_SOURCEMAP";
function addSourceMap(binary, sourceMap) {
  return {
    type: ADD_SOURCEMAP,
    binary, sourceMap
  };
}

const JUMP = exports.JUMP = "JUMP";
function jump(jumpDirection) {
  return {
    type: JUMP,
    jumpDirection
  };
}

/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.addContext = addContext;
exports.addInstance = addInstance;
exports.call = call;
exports.create = create;
exports.returnCall = returnCall;
const ADD_CONTEXT = exports.ADD_CONTEXT = "EVM_ADD_CONTEXT";
function addContext(contractName, binary) {
  return {
    type: ADD_CONTEXT,
    contractName, binary
  };
}

const ADD_INSTANCE = exports.ADD_INSTANCE = "EVM_ADD_INSTANCE";
function addInstance(address, context, binary) {
  return {
    type: ADD_INSTANCE,
    address, context, binary
  };
}

const CALL = exports.CALL = "CALL";
function call(address) {
  return {
    type: CALL,
    address
  };
}

const CREATE = exports.CREATE = "CREATE";
function create(binary) {
  return {
    type: CREATE,
    binary
  };
}

const RETURN = exports.RETURN = "RETURN";
function returnCall() {
  return {
    type: RETURN
  };
}

/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

var Debugger = __webpack_require__(30).default;

module.exports = Debugger;



/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _asyncToGenerator2 = __webpack_require__(19);

var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _truffleExpect = __webpack_require__(31);

var _truffleExpect2 = _interopRequireDefault(_truffleExpect);

var _session = __webpack_require__(32);

var _session2 = _interopRequireDefault(_session);

var _reselectTree = __webpack_require__(4);

var _selectors = __webpack_require__(25);

var _selectors2 = _interopRequireDefault(_selectors);

var _selectors3 = __webpack_require__(11);

var _selectors4 = _interopRequireDefault(_selectors3);

var _selectors5 = __webpack_require__(13);

var _selectors6 = _interopRequireDefault(_selectors5);

var _selectors7 = __webpack_require__(7);

var _selectors8 = _interopRequireDefault(_selectors7);

var _selectors9 = __webpack_require__(8);

var _selectors10 = _interopRequireDefault(_selectors9);

var _selectors11 = __webpack_require__(63);

var _selectors12 = _interopRequireDefault(_selectors11);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger");

/**
 * @example
 * let session = Debugger
 *   .forTx(<txHash>, {
 *     contracts: [<contract obj>, ...],
 *     provider: <provider instance>
 *   })
 *   .connect();
 */
class Debugger {
  /**
   * @param {Session} session - debugger session
   * @private
   */
  constructor(session) {
    /**
     * @private
     */
    this._session = session;
  }

  /**
   * Instantiates a Debugger for a given transaction hash.
   *
   * @param {String} txHash - transaction hash with leading "0x"
   * @param {{contracts: Array<Contract>, files: Array<String>, provider: Web3Provider}} options -
   * @return {Debugger} instance
   */
  static forTx(txHash, options = {}) {
    var _this = this;

    return (0, _asyncToGenerator3.default)(function* () {
      _truffleExpect2.default.options(options, ["contracts", "provider"]);

      let session = new _session2.default(options.contracts, options.files, txHash, options.provider);

      try {
        yield session.ready();
      } catch (e) {
        throw e;
      }

      return new _this(session);
    })();
  }

  /**
   * Connects to the instantiated Debugger.
   *
   * @return {Session} session instance
   */
  connect() {
    return this._session;
  }

  /**
   * Exported selectors
   *
   * See individual selector docs for full listing
   *
   * @example
   * Debugger.selectors.ast.current.tree
   *
   * @example
   * Debugger.selectors.solidity.current.instruction
   *
   * @example
   * Debugger.selectors.trace.steps
   */
  static get selectors() {
    return (0, _reselectTree.createNestedSelector)({
      ast: _selectors4.default,
      data: _selectors2.default,
      trace: _selectors6.default,
      evm: _selectors8.default,
      solidity: _selectors10.default,
      session: _selectors12.default
    });
  }
}

exports.default = Debugger; /**
                             * @typedef {Object} Contract
                             * @property {string} contractName contract name
                             * @property {string} source solidity source code
                             * @property {string} sourcePath path to source file
                             * @property {string} binary 0x-prefixed hex string with create bytecode
                             * @property {string} sourceMap solidity source map for create bytecode
                             * @property {Object} ast Abstract Syntax Tree from Solidity
                             * @property {string} deployedBinary 0x-prefixed compiled binary (on chain)
                             * @property {string} deployedSourceMap solidity source map for on-chain bytecode
                             */

/***/ }),
/* 31 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(21);

/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _values = __webpack_require__(33);

var _values2 = _interopRequireDefault(_values);

var _promise = __webpack_require__(20);

var _promise2 = _interopRequireDefault(_promise);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _selectors = __webpack_require__(13);

var _selectors2 = _interopRequireDefault(_selectors);

var _selectors3 = __webpack_require__(7);

var _selectors4 = _interopRequireDefault(_selectors3);

var _selectors5 = __webpack_require__(11);

var _selectors6 = _interopRequireDefault(_selectors5);

var _selectors7 = __webpack_require__(8);

var _selectors8 = _interopRequireDefault(_selectors7);

var _store = __webpack_require__(39);

var _store2 = _interopRequireDefault(_store);

var _actions = __webpack_require__(21);

var controller = _interopRequireWildcard(_actions);

var _actions2 = __webpack_require__(17);

var actions = _interopRequireWildcard(_actions2);

var _sagas = __webpack_require__(44);

var _sagas2 = _interopRequireDefault(_sagas);

var _reducers = __webpack_require__(57);

var _reducers2 = _interopRequireDefault(_reducers);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:session");

/**
 * Debugger Session
 */
class Session {
  /**
   * @param {Array<Contract>} contracts - contract definitions
   * @param {Array<String>} files - array of filenames for sourceMap indexes
   * @param {string} txHash - transaction hash
   * @param {Web3Provider} provider - web3 provider
   * @private
   */
  constructor(contracts, files, txHash, provider) {
    /**
     * @private
     */
    this._store = (0, _store2.default)(_reducers2.default, _sagas2.default);

    let { contexts, sources } = Session.normalize(contracts, files);

    // record contracts
    this._store.dispatch(actions.recordContracts(contexts, sources));

    this._store.dispatch(actions.start(txHash, provider));
  }

  ready() {
    return new _promise2.default((accept, reject) => {
      this._store.subscribe(() => {
        if (this.state.session == "ACTIVE") {
          accept();
        } else if (typeof this.state.session == "object") {
          reject(this.state.session.error);
        }
      });
    });
  }

  /**
   * Split up artifacts into "contexts" and "sources", dividing artifact
   * data into appropriate buckets.
   *
   * Multiple contracts can be defined in the same source file, but have
   * different bytecodes.
   *
   * This iterates over the contracts and collects binaries separately
   * from sources, using the optional `files` argument to force
   * source ordering.
   * @private
   */
  static normalize(contracts, files = null) {
    let sourcesByPath = {};
    let contexts = [];
    let sources;

    for (let contract of contracts) {
      let {
        contractName,
        binary,
        sourceMap,
        deployedBinary,
        deployedSourceMap,
        sourcePath,
        source,
        ast
      } = contract;

      sourcesByPath[sourcePath] = { sourcePath, source, ast };

      if (binary && binary != "0x") {
        contexts.push({
          contractName,
          binary,
          sourceMap
        });
      }

      if (deployedBinary && deployedBinary != "0x") {
        contexts.push({
          contractName,
          binary: deployedBinary,
          sourceMap: deployedSourceMap
        });
      }
    }

    if (!files) {
      sources = (0, _values2.default)(sourcesByPath);
    } else {
      sources = files.map(file => sourcesByPath[file]);
    }

    return { contexts, sources };
  }

  get state() {
    return this._store.getState();
  }

  view(selector) {
    return selector(this.state);
  }

  get finished() {
    return this.state.session == "FINISHED";
  }

  get failed() {
    return this.finished && this.view(_selectors4.default.current.callstack).length;
  }

  dispatch(action) {
    if (this.finished) {
      debug("finished: intercepting action %o", action);

      return false;
    }

    this._store.dispatch(action);

    return true;
  }

  interrupt() {
    return this.dispatch(controller.interrupt());
  }

  advance() {
    return this.dispatch(controller.advance());
  }

  stepNext() {
    return this.dispatch(controller.stepNext());
  }

  stepOver() {
    return this.dispatch(controller.stepOver());
  }

  stepInto() {
    return this.dispatch(controller.stepInto());
  }

  stepOut() {
    return this.dispatch(controller.stepOut());
  }

  continueUntil(...breakpoints) {
    return this.dispatch(controller.continueUntil(...breakpoints));
  }
}
exports.default = Session;

/***/ }),
/* 33 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(595);

/***/ }),
/* 34 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1226);

/***/ }),
/* 35 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(441);

/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _keys = __webpack_require__(16);

var _keys2 = _interopRequireDefault(_keys);

exports.getRange = getRange;
exports.rangeNodes = rangeNodes;
exports.findRange = findRange;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _nodeIntervalTree = __webpack_require__(37);

var _nodeIntervalTree2 = _interopRequireDefault(_nodeIntervalTree);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:ast:map");

/**
 * @private
 */
function getRange(node) {
  // src: "<start>:<length>:<_>"
  // returns [start, end]
  let [start, length] = node.src.split(":").slice(0, 2).map(i => parseInt(i));

  return [start, start + length];
}

/**
 * @private
 */
function rangeNodes(node, pointer = "") {
  if (node instanceof Array) {
    return [].concat(...node.map((sub, i) => rangeNodes(sub, `${pointer}/${i}`)));
  } else if (node instanceof Object) {
    let results = [];

    if (node.src) {
      results.push({ pointer, range: getRange(node) });
    }

    return results.concat(...(0, _keys2.default)(node).map(key => rangeNodes(node[key], `${pointer}/${key}`)));
  } else {
    return [];
  }
}

/**
 * @private
 */
function findRange(node, sourceStart, sourceLength) {
  let ranges = rangeNodes(node);
  let tree = new _nodeIntervalTree2.default();

  ranges.forEach(({ range, pointer }) => {
    let [start, end] = range;

    tree.insert(start, end, { range, pointer });
  });

  let sourceEnd = sourceStart + sourceLength;

  let overlapping = tree.search(sourceStart, sourceEnd);

  // find nodes that fully contain requested range,
  // return longest pointer
  return overlapping.filter(({ range }) => sourceStart >= range[0] && sourceEnd <= range[1]).map(({ pointer }) => pointer).reduce((a, b) => a.length > b.length ? a : b, "");
}

/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// An augmented AVL Tree where each node maintains a list of records and their search intervals.
// Record is composed of an interval and its underlying data, sent by a client. This allows the
// interval tree to have the same interval inserted multiple times, as long its data is different.
// Both insertion and deletion require O(log n) time. Searching requires O(k*logn) time, where `k`
// is the number of intervals in the output list.
Object.defineProperty(exports, "__esModule", { value: true });
var isSame = __webpack_require__(38);
function height(node) {
    if (node === undefined) {
        return -1;
    }
    else {
        return node.height;
    }
}
var Node = /** @class */ (function () {
    function Node(intervalTree, record) {
        this.intervalTree = intervalTree;
        this.records = [];
        this.height = 0;
        this.key = record.low;
        this.max = record.high;
        // Save the array of all records with the same key for this node
        this.records.push(record);
    }
    // Gets the highest record.high value for this node
    Node.prototype.getNodeHigh = function () {
        var high = this.records[0].high;
        for (var i = 1; i < this.records.length; i++) {
            if (this.records[i].high > high) {
                high = this.records[i].high;
            }
        }
        return high;
    };
    // Updates height value of the node. Called during insertion, rebalance, removal
    Node.prototype.updateHeight = function () {
        this.height = Math.max(height(this.left), height(this.right)) + 1;
    };
    // Updates the max value of all the parents after inserting into already existing node, as well as
    // removing the node completely or removing the record of an already existing node. Starts with
    // the parent of an affected node and bubbles up to root
    Node.prototype.updateMaxOfParents = function () {
        if (this === undefined) {
            return;
        }
        var thisHigh = this.getNodeHigh();
        if (this.left !== undefined && this.right !== undefined) {
            this.max = Math.max(Math.max(this.left.max, this.right.max), thisHigh);
        }
        else if (this.left !== undefined && this.right === undefined) {
            this.max = Math.max(this.left.max, thisHigh);
        }
        else if (this.left === undefined && this.right !== undefined) {
            this.max = Math.max(this.right.max, thisHigh);
        }
        else {
            this.max = thisHigh;
        }
        if (this.parent) {
            this.parent.updateMaxOfParents();
        }
    };
    /*
    Left-Left case:
  
           z                                      y
          / \                                   /   \
         y   T4      Right Rotate (z)          x     z
        / \          - - - - - - - - ->       / \   / \
       x   T3                                T1 T2 T3 T4
      / \
    T1   T2
  
    Left-Right case:
  
         z                               z                           x
        / \                             / \                        /   \
       y   T4  Left Rotate (y)         x  T4  Right Rotate(z)     y     z
      / \      - - - - - - - - ->     / \      - - - - - - - ->  / \   / \
    T1   x                           y  T3                      T1 T2 T3 T4
        / \                         / \
      T2   T3                      T1 T2
    */
    // Handles Left-Left case and Left-Right case after rebalancing AVL tree
    Node.prototype._updateMaxAfterRightRotate = function () {
        var parent = this.parent;
        var left = parent.left;
        // Update max of left sibling (x in first case, y in second)
        var thisParentLeftHigh = left.getNodeHigh();
        if (left.left === undefined && left.right !== undefined) {
            left.max = Math.max(thisParentLeftHigh, left.right.max);
        }
        else if (left.left !== undefined && left.right === undefined) {
            left.max = Math.max(thisParentLeftHigh, left.left.max);
        }
        else if (left.left === undefined && left.right === undefined) {
            left.max = thisParentLeftHigh;
        }
        else {
            left.max = Math.max(Math.max(left.left.max, left.right.max), thisParentLeftHigh);
        }
        // Update max of itself (z)
        var thisHigh = this.getNodeHigh();
        if (this.left === undefined && this.right !== undefined) {
            this.max = Math.max(thisHigh, this.right.max);
        }
        else if (this.left !== undefined && this.right === undefined) {
            this.max = Math.max(thisHigh, this.left.max);
        }
        else if (this.left === undefined && this.right === undefined) {
            this.max = thisHigh;
        }
        else {
            this.max = Math.max(Math.max(this.left.max, this.right.max), thisHigh);
        }
        // Update max of parent (y in first case, x in second)
        parent.max = Math.max(Math.max(parent.left.max, parent.right.max), parent.getNodeHigh());
    };
    /*
    Right-Right case:
  
      z                               y
     / \                            /   \
    T1  y     Left Rotate(z)       z     x
       / \   - - - - - - - ->     / \   / \
      T2  x                      T1 T2 T3 T4
         / \
        T3 T4
  
    Right-Left case:
  
       z                            z                            x
      / \                          / \                         /   \
     T1  y   Right Rotate (y)     T1  x      Left Rotate(z)   z     y
        / \  - - - - - - - - ->      / \   - - - - - - - ->  / \   / \
       x  T4                        T2  y                   T1 T2 T3 T4
      / \                              / \
    T2   T3                           T3 T4
    */
    // Handles Right-Right case and Right-Left case in rebalancing AVL tree
    Node.prototype._updateMaxAfterLeftRotate = function () {
        var parent = this.parent;
        var right = parent.right;
        // Update max of right sibling (x in first case, y in second)
        var thisParentRightHigh = right.getNodeHigh();
        if (right.left === undefined && right.right !== undefined) {
            right.max = Math.max(thisParentRightHigh, right.right.max);
        }
        else if (right.left !== undefined && right.right === undefined) {
            right.max = Math.max(thisParentRightHigh, right.left.max);
        }
        else if (right.left === undefined && right.right === undefined) {
            right.max = thisParentRightHigh;
        }
        else {
            right.max = Math.max(Math.max(right.left.max, right.right.max), thisParentRightHigh);
        }
        // Update max of itself (z)
        var thisHigh = this.getNodeHigh();
        if (this.left === undefined && this.right !== undefined) {
            this.max = Math.max(thisHigh, this.right.max);
        }
        else if (this.left !== undefined && this.right === undefined) {
            this.max = Math.max(thisHigh, this.left.max);
        }
        else if (this.left === undefined && this.right === undefined) {
            this.max = thisHigh;
        }
        else {
            this.max = Math.max(Math.max(this.left.max, this.right.max), thisHigh);
        }
        // Update max of parent (y in first case, x in second)
        parent.max = Math.max(Math.max(parent.left.max, right.max), parent.getNodeHigh());
    };
    Node.prototype._leftRotate = function () {
        var rightChild = this.right;
        rightChild.parent = this.parent;
        if (rightChild.parent === undefined) {
            this.intervalTree.root = rightChild;
        }
        else {
            if (rightChild.parent.left === this) {
                rightChild.parent.left = rightChild;
            }
            else if (rightChild.parent.right === this) {
                rightChild.parent.right = rightChild;
            }
        }
        this.right = rightChild.left;
        if (this.right !== undefined) {
            this.right.parent = this;
        }
        rightChild.left = this;
        this.parent = rightChild;
        this.updateHeight();
        rightChild.updateHeight();
    };
    Node.prototype._rightRotate = function () {
        var leftChild = this.left;
        leftChild.parent = this.parent;
        if (leftChild.parent === undefined) {
            this.intervalTree.root = leftChild;
        }
        else {
            if (leftChild.parent.left === this) {
                leftChild.parent.left = leftChild;
            }
            else if (leftChild.parent.right === this) {
                leftChild.parent.right = leftChild;
            }
        }
        this.left = leftChild.right;
        if (this.left !== undefined) {
            this.left.parent = this;
        }
        leftChild.right = this;
        this.parent = leftChild;
        this.updateHeight();
        leftChild.updateHeight();
    };
    // Rebalances the tree if the height value between two nodes of the same parent is greater than
    // two. There are 4 cases that can happen which are outlined in the graphics above
    Node.prototype._rebalance = function () {
        if (height(this.left) >= 2 + height(this.right)) {
            var left = this.left;
            if (height(left.left) >= height(left.right)) {
                // Left-Left case
                this._rightRotate();
                this._updateMaxAfterRightRotate();
            }
            else {
                // Left-Right case
                left._leftRotate();
                this._rightRotate();
                this._updateMaxAfterRightRotate();
            }
        }
        else if (height(this.right) >= 2 + height(this.left)) {
            var right = this.right;
            if (height(right.right) >= height(right.left)) {
                // Right-Right case
                this._leftRotate();
                this._updateMaxAfterLeftRotate();
            }
            else {
                // Right-Left case
                right._rightRotate();
                this._leftRotate();
                this._updateMaxAfterLeftRotate();
            }
        }
    };
    Node.prototype.insert = function (record) {
        if (record.low < this.key) {
            // Insert into left subtree
            if (this.left === undefined) {
                this.left = new Node(this.intervalTree, record);
                this.left.parent = this;
            }
            else {
                this.left.insert(record);
            }
        }
        else {
            // Insert into right subtree
            if (this.right === undefined) {
                this.right = new Node(this.intervalTree, record);
                this.right.parent = this;
            }
            else {
                this.right.insert(record);
            }
        }
        // Update the max value of this ancestor if needed
        if (this.max < record.high) {
            this.max = record.high;
        }
        // Update height of each node
        this.updateHeight();
        // Rebalance the tree to ensure all operations are executed in O(logn) time. This is especially
        // important in searching, as the tree has a high chance of degenerating without the rebalancing
        this._rebalance();
    };
    Node.prototype._getOverlappingRecords = function (currentNode, low, high) {
        if (currentNode.key <= high && low <= currentNode.getNodeHigh()) {
            // Nodes are overlapping, check if individual records in the node are overlapping
            var tempResults = [];
            for (var i = 0; i < currentNode.records.length; i++) {
                if (currentNode.records[i].high >= low) {
                    tempResults.push(currentNode.records[i]);
                }
            }
            return tempResults;
        }
        return [];
    };
    Node.prototype.search = function (low, high) {
        // Don't search nodes that don't exist
        if (this === undefined) {
            return [];
        }
        var leftSearch = [];
        var ownSearch = [];
        var rightSearch = [];
        // If interval is to the right of the rightmost point of any interval in this node and all its
        // children, there won't be any matches
        if (low > this.max) {
            return [];
        }
        // Search left children
        if (this.left !== undefined && this.left.max >= low) {
            leftSearch = this.left.search(low, high);
        }
        // Check this node
        ownSearch = this._getOverlappingRecords(this, low, high);
        // If interval is to the left of the start of this interval, then it can't be in any child to
        // the right
        if (high < this.key) {
            return leftSearch.concat(ownSearch);
        }
        // Otherwise, search right children
        if (this.right !== undefined) {
            rightSearch = this.right.search(low, high);
        }
        // Return accumulated results, if any
        return leftSearch.concat(ownSearch, rightSearch);
    };
    // Searches for a node by a `key` value
    Node.prototype.searchExisting = function (low) {
        if (this === undefined) {
            return undefined;
        }
        if (this.key === low) {
            return this;
        }
        else if (low < this.key) {
            if (this.left !== undefined) {
                return this.left.searchExisting(low);
            }
        }
        else {
            if (this.right !== undefined) {
                return this.right.searchExisting(low);
            }
        }
        return undefined;
    };
    // Returns the smallest node of the subtree
    Node.prototype._minValue = function () {
        if (this.left === undefined) {
            return this;
        }
        else {
            return this.left._minValue();
        }
    };
    Node.prototype.remove = function (node) {
        var parent = this.parent;
        if (node.key < this.key) {
            // Node to be removed is on the left side
            if (this.left !== undefined) {
                return this.left.remove(node);
            }
            else {
                return undefined;
            }
        }
        else if (node.key > this.key) {
            // Node to be removed is on the right side
            if (this.right !== undefined) {
                return this.right.remove(node);
            }
            else {
                return undefined;
            }
        }
        else {
            if (this.left !== undefined && this.right !== undefined) {
                // Node has two children
                var minValue = this.right._minValue();
                this.key = minValue.key;
                this.records = minValue.records;
                return this.right.remove(this);
            }
            else if (parent.left === this) {
                // One child or no child case on left side
                if (this.right !== undefined) {
                    parent.left = this.right;
                    this.right.parent = parent;
                }
                else {
                    parent.left = this.left;
                    if (this.left !== undefined) {
                        this.left.parent = parent;
                    }
                }
                parent.updateMaxOfParents();
                parent.updateHeight();
                parent._rebalance();
                return this;
            }
            else if (parent.right === this) {
                // One child or no child case on right side
                if (this.right !== undefined) {
                    parent.right = this.right;
                    this.right.parent = parent;
                }
                else {
                    parent.right = this.left;
                    if (this.left !== undefined) {
                        this.left.parent = parent;
                    }
                }
                parent.updateMaxOfParents();
                parent.updateHeight();
                parent._rebalance();
                return this;
            }
        }
    };
    return Node;
}());
exports.Node = Node;
var IntervalTree = /** @class */ (function () {
    function IntervalTree() {
        this.count = 0;
    }
    IntervalTree.prototype.insert = function (record) {
        if (record.low > record.high) {
            throw new Error('`low` value must be lower or equal to `high` value');
        }
        if (this.root === undefined) {
            // Base case: Tree is empty, new node becomes root
            this.root = new Node(this, record);
            this.count++;
            return true;
        }
        else {
            // Otherwise, check if node already exists with the same key
            var node = this.root.searchExisting(record.low);
            if (node !== undefined) {
                // Check the records in this node if there already is the one with same low, high, data
                for (var i = 0; i < node.records.length; i++) {
                    if (isSame(node.records[i], record)) {
                        // This record is same as the one we're trying to insert; return false to indicate
                        // nothing has been inserted
                        return false;
                    }
                }
                // Add the record to the node
                node.records.push(record);
                // Update max of the node and its parents if necessary
                if (record.high > node.max) {
                    node.max = record.high;
                    if (node.parent) {
                        node.parent.updateMaxOfParents();
                    }
                }
                this.count++;
                return true;
            }
            else {
                // Node with this key doesn't already exist. Call insert function on root's node
                this.root.insert(record);
                this.count++;
                return true;
            }
        }
    };
    IntervalTree.prototype.search = function (low, high) {
        if (this.root === undefined) {
            // Tree is empty; return empty array
            return [];
        }
        else {
            return this.root.search(low, high);
        }
    };
    IntervalTree.prototype.remove = function (record) {
        if (this.root === undefined) {
            // Tree is empty; nothing to remove
            return false;
        }
        else {
            var node = this.root.searchExisting(record.low);
            if (node === undefined) {
                return false;
            }
            else if (node.records.length > 1) {
                var removedRecord = void 0;
                // Node with this key has 2 or more records. Find the one we need and remove it
                for (var i = 0; i < node.records.length; i++) {
                    if (isSame(node.records[i], record)) {
                        removedRecord = node.records[i];
                        node.records.splice(i, 1);
                        break;
                    }
                }
                if (removedRecord) {
                    removedRecord = undefined;
                    // Update max of that node and its parents if necessary
                    if (record.high === node.max) {
                        var nodeHigh = node.getNodeHigh();
                        if (node.left !== undefined && node.right !== undefined) {
                            node.max = Math.max(Math.max(node.left.max, node.right.max), nodeHigh);
                        }
                        else if (node.left !== undefined && node.right === undefined) {
                            node.max = Math.max(node.left.max, nodeHigh);
                        }
                        else if (node.left === undefined && node.right !== undefined) {
                            node.max = Math.max(node.right.max, nodeHigh);
                        }
                        else {
                            node.max = nodeHigh;
                        }
                        if (node.parent) {
                            node.parent.updateMaxOfParents();
                        }
                    }
                    this.count--;
                    return true;
                }
                else {
                    return false;
                }
            }
            else if (node.records.length === 1) {
                // Node with this key has only 1 record. Check if the remaining record in this node is
                // actually the one we want to remove
                if (isSame(node.records[0], record)) {
                    // The remaining record is the one we want to remove. Remove the whole node from the tree
                    if (this.root.key === node.key) {
                        // We're removing the root element. Create a dummy node that will temporarily take
                        // root's parent role
                        var rootParent = new Node(this, { low: record.low, high: record.low });
                        rootParent.left = this.root;
                        this.root.parent = rootParent;
                        var removedNode = this.root.remove(node);
                        this.root = rootParent.left;
                        if (this.root !== undefined) {
                            this.root.parent = undefined;
                        }
                        if (removedNode) {
                            removedNode = undefined;
                            this.count--;
                            return true;
                        }
                        else {
                            return false;
                        }
                    }
                    else {
                        var removedNode = this.root.remove(node);
                        if (removedNode) {
                            removedNode = undefined;
                            this.count--;
                            return true;
                        }
                        else {
                            return false;
                        }
                    }
                }
                else {
                    // The remaining record is not the one we want to remove
                    return false;
                }
            }
            else {
                // No records at all in this node?! Shouldn't happen
                return false;
            }
        }
    };
    IntervalTree.prototype.inOrder = function () {
        return new InOrder(this.root);
    };
    IntervalTree.prototype.preOrder = function () {
        return new PreOrder(this.root);
    };
    return IntervalTree;
}());
exports.IntervalTree = IntervalTree;
var DataIntervalTree = /** @class */ (function () {
    function DataIntervalTree() {
        this.tree = new IntervalTree();
    }
    DataIntervalTree.prototype.insert = function (low, high, data) {
        return this.tree.insert({ low: low, high: high, data: data });
    };
    DataIntervalTree.prototype.remove = function (low, high, data) {
        return this.tree.remove({ low: low, high: high, data: data });
    };
    DataIntervalTree.prototype.search = function (low, high) {
        return this.tree.search(low, high).map(function (v) { return v.data; });
    };
    DataIntervalTree.prototype.inOrder = function () {
        return this.tree.inOrder();
    };
    DataIntervalTree.prototype.preOrder = function () {
        return this.tree.preOrder();
    };
    Object.defineProperty(DataIntervalTree.prototype, "count", {
        get: function () {
            return this.tree.count;
        },
        enumerable: true,
        configurable: true
    });
    return DataIntervalTree;
}());
exports.default = DataIntervalTree;
var InOrder = /** @class */ (function () {
    function InOrder(startNode) {
        this.stack = [];
        if (startNode !== undefined) {
            this.push(startNode);
        }
    }
    InOrder.prototype.next = function () {
        // Will only happen if stack is empty and pop is called
        if (this.currentNode === undefined) {
            return {
                done: true,
                value: undefined,
            };
        }
        // Process this node
        if (this.i < this.currentNode.records.length) {
            return {
                done: false,
                value: this.currentNode.records[this.i++],
            };
        }
        if (this.currentNode.right !== undefined) {
            this.push(this.currentNode.right);
        }
        else {
            // Might pop the last and set this.currentNode = undefined
            this.pop();
        }
        return this.next();
    };
    InOrder.prototype.push = function (node) {
        this.currentNode = node;
        this.i = 0;
        while (this.currentNode.left !== undefined) {
            this.stack.push(this.currentNode);
            this.currentNode = this.currentNode.left;
        }
    };
    InOrder.prototype.pop = function () {
        this.currentNode = this.stack.pop();
        this.i = 0;
    };
    return InOrder;
}());
exports.InOrder = InOrder;
if (typeof Symbol === 'function') {
    InOrder.prototype[Symbol.iterator] = function () { return this; };
}
var PreOrder = /** @class */ (function () {
    function PreOrder(startNode) {
        this.stack = [];
        this.i = 0;
        this.currentNode = startNode;
    }
    PreOrder.prototype.next = function () {
        // Will only happen if stack is empty and pop is called,
        // which only happens if there is no right node (i.e we are done)
        if (this.currentNode === undefined) {
            return {
                done: true,
                value: undefined,
            };
        }
        // Process this node
        if (this.i < this.currentNode.records.length) {
            return {
                done: false,
                value: this.currentNode.records[this.i++],
            };
        }
        if (this.currentNode.right !== undefined) {
            this.push(this.currentNode.right);
        }
        if (this.currentNode.left !== undefined) {
            this.push(this.currentNode.left);
        }
        this.pop();
        return this.next();
    };
    PreOrder.prototype.push = function (node) {
        this.stack.push(node);
    };
    PreOrder.prototype.pop = function () {
        this.currentNode = this.stack.pop();
        this.i = 0;
    };
    return PreOrder;
}());
exports.PreOrder = PreOrder;
if (typeof Symbol === 'function') {
    PreOrder.prototype[Symbol.iterator] = function () { return this; };
}
//# sourceMappingURL=index.js.map

/***/ }),
/* 38 */
/***/ (function(module, exports) {

module.exports = function shallowEqual(objA, objB, compare, compareContext) {

    var ret = compare ? compare.call(compareContext, objA, objB) : void 0;

    if(ret !== void 0) {
        return !!ret;
    }

    if(objA === objB) {
        return true;
    }

    if(typeof objA !== 'object' || !objA ||
       typeof objB !== 'object' || !objB) {
        return false;
    }

    var keysA = Object.keys(objA);
    var keysB = Object.keys(objB);

    if(keysA.length !== keysB.length) {
        return false;
    }

    var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);

    // Test for A's keys different from B.
    for(var idx = 0; idx < keysA.length; idx++) {

        var key = keysA[idx];

        if(!bHasOwnProperty(key)) {
            return false;
        }

        var valueA = objA[key];
        var valueB = objB[key];

        ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;

        if(ret === false ||
           ret === void 0 && valueA !== valueB) {
            return false;
        }

    }

    return true;

};


/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


if (true) {
  module.exports = __webpack_require__(40);
} else if (process.env.NODE_ENV == "test") {
  module.exports = require("./test");
} else {
  module.exports = require("./development");
}

/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _common = __webpack_require__(41);

var _common2 = _interopRequireDefault(_common);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = _common2.default;

/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

exports.abbreviateValues = abbreviateValues;
exports.default = configureStore;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _redux = __webpack_require__(9);

var _reduxSaga = __webpack_require__(42);

var _reduxSaga2 = _interopRequireDefault(_reduxSaga);

var _reduxCliLogger = __webpack_require__(43);

var _reduxCliLogger2 = _interopRequireDefault(_reduxCliLogger);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:store:common");
const reduxDebug = (0, _debug2.default)("debugger:redux");

function abbreviateValues(value, options = {}, depth = 0) {
  options.stringLimit = options.stringLimit || 66;
  options.arrayLimit = options.arrayLimit || 8;
  options.recurseLimit = options.recurseLimit || 4;

  if (depth > options.recurseLimit) {
    return "...";
  }

  const recurse = child => abbreviateValues(child, options, depth + 1);

  if (value instanceof Array) {
    if (value.length > options.arrayLimit) {
      value = [...value.slice(0, options.arrayLimit / 2), "...", ...value.slice(value.length - options.arrayLimit / 2 + 1)];
    }

    return value.map(recurse);
  } else if (value instanceof Object) {
    return (0, _assign2.default)({}, ...(0, _entries2.default)(value).map(([k, v]) => ({ [recurse(k)]: recurse(v) })));
  } else if (typeof value === "string" && value.length > options.stringLimit) {
    let inner = "...";
    let extractAmount = (options.stringLimit - inner.length) / 2;
    let leading = value.slice(0, Math.ceil(extractAmount));
    let trailing = value.slice(value.length - Math.floor(extractAmount));
    return `${leading}${inner}${trailing}`;
  } else {
    return value;
  }
}

function configureStore(reducer, saga, initialState, composeEnhancers) {
  const sagaMiddleware = (0, _reduxSaga2.default)();

  if (!composeEnhancers) {
    composeEnhancers = _redux.compose;
  }

  const loggerMiddleware = (0, _reduxCliLogger2.default)({
    log: reduxDebug,
    stateTransformer: state => abbreviateValues(state, {
      arrayLimit: 4,
      recurseLimit: 3
    }),
    actionTransformer: abbreviateValues
  });

  let store = (0, _redux.createStore)(reducer, initialState, composeEnhancers((0, _redux.applyMiddleware)(sagaMiddleware, loggerMiddleware)));

  sagaMiddleware.run(saga);

  return store;
}

/***/ }),
/* 42 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1018);

/***/ }),
/* 43 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1007);

/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _sagas = __webpack_require__(45);

var ast = _interopRequireWildcard(_sagas);

var _sagas2 = __webpack_require__(50);

var controller = _interopRequireWildcard(_sagas2);

var _sagas3 = __webpack_require__(52);

var solidity = _interopRequireWildcard(_sagas3);

var _sagas4 = __webpack_require__(53);

var evm = _interopRequireWildcard(_sagas4);

var _sagas5 = __webpack_require__(26);

var trace = _interopRequireWildcard(_sagas5);

var _sagas6 = __webpack_require__(23);

var data = _interopRequireWildcard(_sagas6);

var _sagas7 = __webpack_require__(54);

var web3 = _interopRequireWildcard(_sagas7);

var _actions = __webpack_require__(17);

var actions = _interopRequireWildcard(_actions);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:session:sagas");

function* saga() {
  debug("starting listeners");
  let listeners = yield* forkListeners();

  // receiving & saving contracts into state
  debug("waiting for contract information");
  let { contexts, sources } = yield (0, _effects.take)(actions.RECORD_CONTRACTS);

  debug("recording contract binaries");
  yield* recordContexts(...contexts);

  debug("recording contract sources");
  yield* recordSources(...sources);

  debug("waiting for start");
  // wait for start signal
  let { txHash, provider } = yield (0, _effects.take)(actions.START);
  debug("starting");

  // process transaction
  debug("fetching transaction info");
  let err = yield* fetchTx(txHash, provider);
  if (err) {
    debug("error %o", err);
    yield* error(err);
  } else {
    debug("visiting ASTs");
    // visit asts
    yield* ast.visitAll();

    debug("readying");
    // signal that stepping can begin
    yield* ready();

    debug("waiting for trace EOT");
    // wait until trace hits EOT
    yield* trace.wait();

    debug("finishing");
    // finish
    yield (0, _effects.put)(actions.finish());
  }

  debug("stopping listeners");
  yield (0, _effects.all)(listeners.map(task => (0, _effects.cancel)(task)));
}

exports.default = (0, _helpers.prefixName)("session", saga);


function* forkListeners() {
  return yield (0, _effects.all)([ast, controller, data, evm, solidity, trace, web3].map(app => (0, _effects.fork)(app.saga)));
}

function* fetchTx(txHash, provider) {
  let result = yield* web3.inspectTransaction(txHash, provider);

  if (result.error) {
    return result.error;
  }

  yield* evm.begin(result);

  let addresses = yield* trace.processTrace(result.trace);
  if (result.address && addresses.indexOf(result.address) == -1) {
    addresses.push(result.address);
  }

  let binaries = yield* web3.obtainBinaries(addresses);

  yield (0, _effects.all)(addresses.map((address, i) => (0, _effects.call)(recordInstance, address, binaries[i])));
}

function* recordContexts(...contexts) {
  for (let _ref of contexts) {
    let { contractName, binary, sourceMap } = _ref;

    yield* evm.addContext(contractName, binary);

    if (sourceMap) {
      yield* solidity.addSourceMap(binary, sourceMap);
    }
  }
}

function* recordSources(...sources) {
  for (let _ref2 of sources) {
    let { sourcePath, source, ast } = _ref2;

    yield* solidity.addSource(source, sourcePath, ast);
  }
}

function* recordInstance(address, binary) {
  yield* evm.addInstance(address, binary);
}

function* ready() {
  yield (0, _effects.put)(actions.ready());
}

function* error(err) {
  yield (0, _effects.put)(actions.error(err));
}

/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

exports.visitAll = visitAll;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _sagas = __webpack_require__(23);

var data = _interopRequireWildcard(_sagas);

var _actions = __webpack_require__(49);

var actions = _interopRequireWildcard(_actions);

var _selectors = __webpack_require__(11);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:ast:sagas");

function* walk(sourceId, node, pointer = "", parentId = null) {
  debug("walking %o %o", pointer, node);

  yield* handleEnter(sourceId, node, pointer, parentId);

  if (node instanceof Array) {
    for (let [i, child] of node.entries()) {
      yield (0, _effects.call)(walk, sourceId, child, `${pointer}/${i}`, parentId);
    }
  } else if (node instanceof Object) {
    for (let [key, child] of (0, _entries2.default)(node)) {
      yield (0, _effects.call)(walk, sourceId, child, `${pointer}/${key}`, node.id);
    }
  }

  yield* handleExit(sourceId, node, pointer);
}

function* handleEnter(sourceId, node, pointer, parentId) {
  if (!(node instanceof Object)) {
    return;
  }

  debug("entering %s", pointer);

  if (node.id !== undefined) {
    debug("%s recording scope %s", pointer, node.id);
    yield* data.scope(node.id, pointer, parentId, sourceId);
  }

  switch (node.nodeType) {
    case "VariableDeclaration":
      debug("%s recording variable %o", pointer, node);
      yield* data.declare(node);
      break;
  }
}

function* handleExit(sourceId, node, pointer) {
  debug("exiting %s", pointer);

  // no-op right now
}

function* walkSaga({ sourceId, ast }) {
  yield walk(sourceId, ast);
}

function* visitAll(idx) {
  let sources = yield (0, _effects.select)(_selectors2.default.views.sources);

  let tasks = yield (0, _effects.all)((0, _entries2.default)(sources).filter(([id, { ast }]) => !!ast).map(([id, { ast }]) => (0, _effects.fork)(() => (0, _effects.put)(actions.visit(id, ast)))));

  if (tasks.length > 0) {
    yield (0, _effects.join)(...tasks);
  }

  yield (0, _effects.put)(actions.doneVisiting());
}

function* saga() {
  yield (0, _effects.race)({
    visitor: (0, _effects.takeEvery)(actions.VISIT, walkSaga),
    done: (0, _effects.take)(actions.DONE_VISITING)
  });
}

exports.default = (0, _helpers.prefixName)("ast", saga);

/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

exports.read = read;
exports.decodeValue = decodeValue;
exports.decodeMemoryReference = decodeMemoryReference;
exports.decodeStorageReference = decodeStorageReference;
exports.default = decode;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _bignumber = __webpack_require__(14);

var _memory = __webpack_require__(47);

var memory = _interopRequireWildcard(_memory);

var _storage = __webpack_require__(48);

var storage = _interopRequireWildcard(_storage);

var _utils = __webpack_require__(10);

var utils = _interopRequireWildcard(_utils);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:decode");

function read(pointer, state) {
  if (pointer.stack != undefined && state.stack && pointer.stack < state.stack.length) {
    return state.stack[pointer.stack];
  } else if (pointer.storage != undefined && state.storage) {
    return storage.readRange(state.storage, pointer.storage);
  } else if (pointer.memory != undefined && state.memory) {
    return memory.readBytes(state.memory, pointer.memory.start, pointer.memory.length);
  } else if (pointer.literal) {
    return pointer.literal;
  }
}

function decodeValue(definition, pointer, state, ...args) {
  let bytes = read(pointer, state);
  if (!bytes) {
    return undefined;
  }

  switch (utils.typeClass(definition)) {
    case "bool":
      return !utils.toBigNumber(bytes).isZero();

    case "uint":
      return utils.toBigNumber(bytes);

    case "int":
      return utils.toSignedBigNumber(bytes);

    case "address":
      return utils.toHexString(bytes, true);

    case "bytes":
      debug("typeIdentifier %s %o", utils.typeIdentifier(definition), bytes);
      let length = utils.specifiedSize(definition);
      return utils.toHexString(bytes, length);

    case "string":
      debug("typeIdentifier %s %o", utils.typeIdentifier(definition), bytes);
      return String.fromCharCode.apply(null, bytes);

    default:
      debug("Unknown value type: %s", utils.typeIdentifier(definition));
      return null;
  }
}

function decodeMemoryReference(definition, pointer, state, ...args) {
  let rawValue = utils.toBigNumber(read(pointer, state)).toNumber();

  var bytes;
  switch (utils.typeClass(definition)) {

    case "bytes":
    case "string":
      bytes = read({
        memory: { start: rawValue, length: _utils.WORD_SIZE }
      }, state); // bytes contain length

      return decodeValue(definition, {
        memory: { start: rawValue + _utils.WORD_SIZE, length: bytes }
      }, state, ...args);

    case "array":
      bytes = utils.toBigNumber(read({
        memory: { start: rawValue, length: _utils.WORD_SIZE }
      }, state)).toNumber(); // bytes contain array length

      bytes = read({ memory: {
          start: rawValue + _utils.WORD_SIZE, length: bytes * _utils.WORD_SIZE
        } }, state); // now bytes contain items

      return memory.chunk(bytes, _utils.WORD_SIZE).map(chunk => decode(utils.baseDefinition(definition), {
        literal: chunk
      }, state, ...args));

    case "struct":
      let [refs] = args;
      let structDefinition = refs[definition.typeName.referencedDeclaration];
      let structVariables = structDefinition.variables || [];

      return (0, _assign2.default)({}, ...structVariables.map(({ name, id }, i) => {
        let memberDefinition = refs[id].definition;
        let memberPointer = {
          memory: { start: rawValue + i * _utils.WORD_SIZE, length: _utils.WORD_SIZE }
        };
        // let memberPointer = memory.read(state.memory, pointer + i * WORD_SIZE);

        // HACK
        memberDefinition = (0, _extends3.default)({}, memberDefinition, {

          typeDescriptions: (0, _extends3.default)({}, memberDefinition.typeDescriptions, {

            typeIdentifier: memberDefinition.typeDescriptions.typeIdentifier.replace(/_storage_/g, "_memory_")
          })
        });

        return {
          [name]: decode(memberDefinition, memberPointer, state, ...args)
        };
      }));

    default:
      debug("Unknown memory reference type: %s", utils.typeIdentifier(definition));
      return null;

  }
}

function decodeStorageReference(definition, pointer, state, ...args) {
  var data;
  var bytes;
  var length;
  var slot;

  switch (utils.typeClass(definition)) {
    case "array":
      debug("storage array! %o", pointer);
      data = read(pointer, state);
      if (!data) {
        return null;
      }

      length = utils.toBigNumber(data).toNumber();
      debug("length %o", length);

      const baseSize = utils.storageSize(utils.baseDefinition(definition));
      const perWord = Math.floor(_utils.WORD_SIZE / baseSize);
      debug("baseSize %o", baseSize);
      debug("perWord %d", perWord);

      const offset = i => {
        if (perWord == 1) {
          return i;
        }

        return Math.floor(i * baseSize / _utils.WORD_SIZE);
      };

      const index = i => {
        if (perWord == 1) {
          return _utils.WORD_SIZE - baseSize;
        }

        const position = perWord - i % perWord - 1;
        return position * baseSize;
      };

      debug("pointer: %o", pointer);
      return [...Array(length).keys()].map(i => {
        let childFrom = pointer.storage.from.offset != undefined ? {
          slot: ["0x" + utils.toBigNumber(utils.keccak256(...pointer.storage.from.slot)).plus(pointer.storage.from.offset).toString(16)],
          offset: offset(i),
          index: index(i)
        } : {
          slot: [pointer.storage.from.slot],
          offset: offset(i),
          index: index(i)
        };
        return childFrom;
      }).map((childFrom, idx) => {
        debug("childFrom %d, %o", idx, childFrom);
        return decode(utils.baseDefinition(definition), { storage: {
            from: childFrom,
            length: baseSize
          } }, state, ...args);
      });

    case "bytes":
    case "string":
      data = read(pointer, state);
      if (!data) {
        return null;
      }

      if (data[_utils.WORD_SIZE - 1] % 2 == 0) {
        // string lives in word, length is last byte / 2
        length = data[_utils.WORD_SIZE - 1] / 2;
        debug("in-word; length %o", length);
        if (length == 0) {
          return "";
        }

        return decodeValue(definition, { storage: {
            from: { slot: pointer.storage.from.slot, index: 0 },
            to: { slot: pointer.storage.from.slot, index: length - 1 }
          } }, state, ...args);
      } else {
        length = utils.toBigNumber(data).minus(1).div(2).toNumber();
        debug("new-word, length %o", length);

        return decodeValue(definition, { storage: {
            from: { slot: [pointer.storage.from.slot], index: 0 },
            length
          } }, state, ...args);
      }

    case "struct":
      let [refs] = args;

      return (0, _assign2.default)({}, ...(0, _entries2.default)(pointer.storage.children).map(([id, childPointer]) => ({
        [childPointer.name]: decode(refs[id].definition, { storage: childPointer }, state, ...args)
      })));

    default:
      debug("Unknown storage reference type: %s", utils.typeIdentifier(definition));
      return undefined;
  }
}

function decode(definition, ...args) {
  if (!utils.isReference(definition)) {
    return decodeValue(definition, ...args);
  }

  switch (utils.referenceType(definition)) {
    case "memory":
      return decodeMemoryReference(definition, ...args);
    case "storage":
      return decodeStorageReference(definition, ...args);
    default:
      debug("Unknown reference category: %s", utils.typeIdentifier(definition));
      return undefined;
  }
}

/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.read = read;
exports.readBytes = readBytes;
exports.chunk = chunk;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _bignumber = __webpack_require__(14);

var _utils = __webpack_require__(10);

var utils = _interopRequireWildcard(_utils);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:decode:memory");

/**
 * read word from memory
 *
 * requires `byte` to be a multiple of WORD_SIZE (32)
 *
 * @param memory - Uint8Array
 * @return {BigNumber}
 */
function read(memory, byte) {
  return readBytes(memory, byte, _utils.WORD_SIZE);
}

/**
 * read <bytes> amount of bytes from memory, starting at byte <start>
 *
 * @param memory - Uint8Array
 */
function readBytes(memory, byte, length) {
  byte = utils.toBigNumber(byte);
  length = utils.toBigNumber(length);

  if (byte.toNumber() >= memory.length) {
    return new Uint8Array(length ? length.toNumber() : 0);
  }

  if (length == undefined) {
    return new Uint8Array(memory.buffer, byte.toNumber());
  }

  // grab `length` bytes no matter what, here fill this array
  var bytes = new Uint8Array(length.toNumber());

  // if we're reading past the end of memory, truncate the length to read
  let excess = byte.plus(length).minus(memory.length).toNumber();
  if (excess > 0) {
    length = new _bignumber.BigNumber(memory.length).minus(byte);
  }

  let existing = new Uint8Array(memory.buffer, byte.toNumber(), length.toNumber());

  bytes.set(existing);

  return bytes;
}

/**
 * Split memory into chunks
 */
function chunk(memory, size = _utils.WORD_SIZE) {
  let chunks = [];

  for (let i = 0; i < memory.length; i += size) {
    let chunk = readBytes(memory, i, size);
    chunks.push(chunk);
  }

  return chunks;
}

/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

exports.read = read;
exports.readRange = readRange;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _utils = __webpack_require__(10);

var utils = _interopRequireWildcard(_utils);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:decode:storage");

/**
 * read slot from storage
 *
 * @param slot - big number or array of regular numbers
 * @param offset - for array, offset from the keccak determined location
 */
function read(storage, slot, offset = 0) {
  if (slot instanceof Array) {
    slot = utils.keccak256(...slot.map(utils.toBigNumber));
  }

  slot = utils.toBigNumber(slot).plus(offset);

  debug("reading slot: %o", utils.toHexString(slot));

  let word = storage[utils.toHexString(slot, _utils.WORD_SIZE)] || new Uint8Array(_utils.WORD_SIZE);

  debug("word %o", word);
  return word;
}

/**
 * read all bytes in some range.
 *
 * parameters `from` and `to` are objects with the following properties:
 *
 *   slot - (required) either a bignumber or a "path" array of integer offsets
 *
 *     path array values get converted into keccak256 hash as per solidity
 *     storage allocation method
 *
 *     ref: https://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#layout-of-state-variables-in-storage
 *     (search "concatenation")
 *
 *  offset - (default: 0) slot offset
 *
 *  index - (default: 0) byte index in word
 *
 * @param from - location (see ^)
 * @param to - location (see ^). inclusive.
 * @param length - instead of `to`, number of bytes after `from`
 */
function readRange(storage, { from, to, length }) {
  if (!length && !to || length && to) {
    throw new Error("must specify exactly one `to`|`length`");
  }

  from = (0, _extends3.default)({}, from, {
    offset: from.offset || 0
  });

  if (length) {
    to = {
      slot: from.slot,
      offset: from.offset + Math.floor((from.index + length - 1) / _utils.WORD_SIZE),
      index: (from.index + length - 1) % _utils.WORD_SIZE
    };
  } else {
    to = (0, _extends3.default)({}, to, {
      offset: to.offset || 0
    });
  }

  debug("readRange %o", { from, to });

  const totalWords = to.offset - from.offset + 1;
  debug("totalWords %o", totalWords);

  let data = new Uint8Array(totalWords * _utils.WORD_SIZE);

  for (let i = 0; i < totalWords; i++) {
    let offset = i + from.offset;
    data.set(read(storage, from.slot, offset), i * _utils.WORD_SIZE);
  }
  debug("words %o", data);

  data = data.slice(from.index, (totalWords - 1) * _utils.WORD_SIZE + to.index + 1);

  debug("data: %o", data);

  return data;
}

/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.visit = visit;
exports.doneVisiting = doneVisiting;
const VISIT = exports.VISIT = "VISIT";
function visit(sourceId, ast) {
  return {
    type: VISIT,
    sourceId, ast
  };
}

const DONE_VISITING = exports.DONE_VISITING = "DONE_VISITING";
function doneVisiting() {
  return {
    type: DONE_VISITING
  };
}

/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _keys = __webpack_require__(16);

var _keys2 = _interopRequireDefault(_keys);

var _set = __webpack_require__(18);

var _set2 = _interopRequireDefault(_set);

exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _sagas = __webpack_require__(26);

var trace = _interopRequireWildcard(_sagas);

var _actions = __webpack_require__(21);

var actions = _interopRequireWildcard(_actions);

var _selectors = __webpack_require__(51);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:controller:sagas");

const CONTROL_SAGAS = {
  [actions.ADVANCE]: advance,
  [actions.STEP_NEXT]: stepNext,
  [actions.STEP_OVER]: stepOver,
  [actions.STEP_INTO]: stepInto,
  [actions.STEP_OUT]: stepOut,
  [actions.CONTINUE_UNTIL]: continueUntil
};

/** AST node types that are skipped to filter out some noise */
const SKIPPED_TYPES = new _set2.default(["ContractDefinition", "VariableDeclaration"]);

function* saga() {
  while (true) {
    debug("waiting for control action");
    let action = yield (0, _effects.take)((0, _keys2.default)(CONTROL_SAGAS));
    debug("got control action");
    let saga = CONTROL_SAGAS[action.type];

    yield (0, _effects.put)(actions.beginStep(action.type));

    yield (0, _effects.race)({
      exec: (0, _effects.call)(saga, action),
      interrupt: (0, _effects.take)(actions.INTERRUPT)
    });
  }
}

exports.default = (0, _helpers.prefixName)("controller", saga);

/**
 * Advance the state by one instruction
 */

function* advance() {
  // send action to advance trace
  yield* trace.advance();
}

/**
 * stepNext - step to the next logical code segment
 *
 * Note: It might take multiple instructions to express the same section of code.
 * "Stepping", then, is stepping to the next logical item, not stepping to the next
 * instruction. See advance() if you'd like to advance by one instruction.
 */
function* stepNext() {
  const startingRange = yield (0, _effects.select)(_selectors2.default.current.location.sourceRange);

  var upcoming;

  do {
    // advance at least once step
    yield* advance();

    // and check the next source range
    try {
      upcoming = yield (0, _effects.select)(_selectors2.default.current.location);
    } catch (e) {
      upcoming = null;
    }

    // if the next step's source range is still the same, keep going
  } while (!upcoming || !upcoming.node || SKIPPED_TYPES.has(upcoming.node.nodeType) || upcoming.sourceRange.start == startingRange.start && upcoming.sourceRange.length == startingRange.length);
}

/**
 * stepInto - step into the current function
 *
 * Conceptually this is easy, but from a programming standpoint it's hard.
 * Code like `getBalance(msg.sender)` might be highlighted, but there could
 * be a number of different intermediate steps (like evaluating `msg.sender`)
 * before `getBalance` is stepped into. This function will step into the first
 * function available (where instruction.jump == "i"), ignoring any intermediate
 * steps that fall within the same code range. If there's a step encountered
 * that exists outside of the range, then stepInto will only execute until that
 * step.
 */
function* stepInto() {
  if (yield (0, _effects.select)(_selectors2.default.current.willJump)) {
    yield* stepNext();

    return;
  }

  if (yield (0, _effects.select)(_selectors2.default.current.location.isMultiline)) {
    yield* stepOver();

    return;
  }

  const startingDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
  const startingRange = yield (0, _effects.select)(_selectors2.default.current.location.sourceRange);
  var currentDepth;
  var currentRange;

  do {
    yield* stepNext();

    currentDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
    currentRange = yield (0, _effects.select)(_selectors2.default.current.location.sourceRange);
  } while (
  // the function stack has not increased,
  currentDepth <= startingDepth &&

  // the current source range begins on or after the starting range
  currentRange.start >= startingRange.start &&

  // and the current range ends on or before the starting range ends
  currentRange.start + currentRange.length <= startingRange.start + startingRange.length);
}

/**
 * Step out of the current function
 *
 * This will run until the debugger encounters a decrease in function depth.
 */
function* stepOut() {
  if (yield (0, _effects.select)(_selectors2.default.current.location.isMultiline)) {
    yield* stepOver();

    return;
  }

  const startingDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
  var currentDepth;

  do {
    yield* stepNext();

    currentDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
  } while (currentDepth >= startingDepth);
}

/**
 * stepOver - step over the current line
 *
 * Step over the current line. This will step to the next instruction that
 * exists on a different line of code within the same function depth.
 */
function* stepOver() {
  const startingDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
  const startingRange = yield (0, _effects.select)(_selectors2.default.current.location.sourceRange);
  var currentDepth;
  var currentRange;

  do {
    yield* stepNext();

    currentDepth = yield (0, _effects.select)(_selectors2.default.current.functionDepth);
    currentRange = yield (0, _effects.select)(_selectors2.default.current.location.sourceRange);
  } while (
  // keep stepping provided:
  //
  // we haven't jumped out
  !(currentDepth < startingDepth) && (

  // either: function depth is greater than starting (ignore function calls)
  // or, if we're at the same depth, keep stepping until we're on a new
  // line.
  currentDepth > startingDepth || currentRange.lines.start.line == startingRange.lines.start.line));
}

/**
 * continueUntil - step through execution until a breakpoint
 *
 * @param breakpoints - array of breakpoints ({ ...call, line })
 */
function* continueUntil({ breakpoints }) {
  var currentCall;
  var currentLocation;

  let breakpointHit = false;

  do {
    yield* stepNext();

    currentCall = yield (0, _effects.select)(_selectors2.default.current.executionContext);
    currentLocation = yield (0, _effects.select)(_selectors2.default.current.location);

    breakpointHit = breakpoints.filter(({ address, binary, line, node }) => (address == currentCall.address || binary == currentCall.binary) && (line == currentLocation.sourceRange.lines.start.line || node == currentLocation.node.id)).length > 0;
  } while (!breakpointHit);
}

/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _selectors = __webpack_require__(7);

var _selectors2 = _interopRequireDefault(_selectors);

var _selectors3 = __webpack_require__(8);

var _selectors4 = _interopRequireDefault(_selectors3);

var _selectors5 = __webpack_require__(11);

var _selectors6 = _interopRequireDefault(_selectors5);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:controller:sagas");

/**
 * @private
 */
const identity = x => x;

/**
 * controller
 */
const controller = (0, _reselectTree.createSelectorTree)({

  /**
   * controller.current
   */
  current: {
    /**
     * controller.current.functionDepth
     */
    functionDepth: (0, _reselectTree.createLeaf)([_selectors4.default.current.functionDepth], identity),

    /**
     * controller.current.executionContext
     */
    executionContext: (0, _reselectTree.createLeaf)([_selectors2.default.current.call], identity),

    /**
     * controller.current.willJump
     */
    willJump: (0, _reselectTree.createLeaf)([_selectors2.default.current.step.isJump], identity),

    /**
     * controller.current.location
     */
    location: {
      /**
       * controller.current.location.sourceRange
       */
      sourceRange: (0, _reselectTree.createLeaf)([_selectors4.default.current.sourceRange], identity),

      /**
       * controller.current.location.node
       */
      node: (0, _reselectTree.createLeaf)([_selectors6.default.current.node], identity),

      /**
       * controller.current.location.isMultiline
       */
      isMultiline: (0, _reselectTree.createLeaf)([_selectors4.default.current.isMultiline], identity)
    }
  }
});

exports.default = controller;

/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.addSource = addSource;
exports.addSourceMap = addSourceMap;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(27);

var actions = _interopRequireWildcard(_actions);

var _actions2 = __webpack_require__(12);

var _selectors = __webpack_require__(8);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:solidity:sagas");

function* addSource(source, sourcePath, ast) {
  yield (0, _effects.put)(actions.addSource(source, sourcePath, ast));
}

function* addSourceMap(binary, sourceMap) {
  yield (0, _effects.put)(actions.addSourceMap(binary, sourceMap));
}

function* tickSaga() {
  while (true) {
    yield (0, _effects.take)(_actions2.TICK);
    debug("got TICK");

    yield* functionDepthSaga();
  }
}

function* functionDepthSaga() {
  if (yield (0, _effects.select)(_selectors2.default.current.willJump)) {
    let jumpDirection = yield (0, _effects.select)(_selectors2.default.current.jumpDirection);

    yield (0, _effects.put)(actions.jump(jumpDirection));
  }
}

function* saga() {
  yield (0, _effects.call)(tickSaga);
}

exports.default = (0, _helpers.prefixName)("solidity", saga);

/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.addContext = addContext;
exports.addInstance = addInstance;
exports.begin = begin;
exports.callstackSaga = callstackSaga;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(12);

var _actions2 = __webpack_require__(28);

var actions = _interopRequireWildcard(_actions2);

var _selectors = __webpack_require__(7);

var _selectors2 = _interopRequireDefault(_selectors);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:evm:sagas");

/**
 * Adds EVM bytecode context
 *
 * @return {string} ID (0x-prefixed keccak of binary)
 */
function* addContext(contractName, binary) {
  yield (0, _effects.put)(actions.addContext(contractName, binary));

  return (0, _helpers.keccak256)(binary);
}

/**
 * Adds known deployed instance of binary at address
 *
 * @return {string} ID (0x-prefixed keccak of binary)
 */
function* addInstance(address, binary) {
  let search = yield (0, _effects.select)(_selectors2.default.info.binaries.search);
  if (binary != "0x0") {
    let { context } = search(binary);

    yield (0, _effects.put)(actions.addInstance(address, context, binary));

    return context;
  }
}

function* begin({ address, binary }) {
  if (address) {
    yield (0, _effects.put)(actions.call(address));
  } else {
    yield (0, _effects.put)(actions.create(binary));
  }
}

function* callstackSaga() {
  while (true) {
    yield (0, _effects.take)(_actions.TICK);
    debug("got TICK");

    if (yield (0, _effects.select)(_selectors2.default.current.step.isCall)) {
      debug("got call");
      let address = yield (0, _effects.select)(_selectors2.default.current.step.callAddress);

      yield (0, _effects.put)(actions.call(address));
    } else if (yield (0, _effects.select)(_selectors2.default.current.step.isCreate)) {
      debug("got create");
      let binary = yield (0, _effects.select)(_selectors2.default.current.step.createBinary);

      yield (0, _effects.put)(actions.create(binary));
    } else if (yield (0, _effects.select)(_selectors2.default.current.step.isHalting)) {
      debug("got return");
      yield (0, _effects.put)(actions.returnCall());
    }
  }
}

function* saga() {
  yield (0, _effects.call)(callstackSaga);
}

exports.default = (0, _helpers.prefixName)("evm", saga);

/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.inspectTransaction = inspectTransaction;
exports.obtainBinaries = obtainBinaries;
exports.saga = saga;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _effects = __webpack_require__(6);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(55);

var actions = _interopRequireWildcard(_actions);

var _adapter = __webpack_require__(56);

var _adapter2 = _interopRequireDefault(_adapter);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:web3:sagas");

function* fetchTransactionInfo(adapter, { txHash }) {
  debug("inspecting transaction");
  var trace;
  try {
    trace = yield (0, _effects.apply)(adapter, adapter.getTrace, [txHash]);
  } catch (e) {
    debug("putting error");
    yield (0, _effects.put)(actions.error(e));
    return;
  }

  debug("got trace");
  yield (0, _effects.put)(actions.receiveTrace(trace));

  let tx = yield (0, _effects.apply)(adapter, adapter.getTransaction, [txHash]);
  if (tx.to && tx.to != "0x0") {
    yield (0, _effects.put)(actions.receiveCall({ address: tx.to }));
    return;
  }

  let receipt = yield (0, _effects.apply)(adapter, adapter.getReceipt, [txHash]);
  if (receipt.contractAddress) {
    yield (0, _effects.put)(actions.receiveCall({ binary: tx.input }));
    return;
  }

  throw new Error("Could not find contract associated with transaction. " + "Please make sure you're debugging a transaction that executes a " + "contract function or creates a new contract.");
}

function* fetchBinary(adapter, { address }) {
  debug("fetching binary for %s", address);
  let binary = yield (0, _effects.apply)(adapter, adapter.getDeployedCode, [address]);

  debug("received binary for %s", address);
  yield (0, _effects.put)(actions.receiveBinary(address, binary));
}

function* inspectTransaction(txHash, provider) {
  yield (0, _effects.put)(actions.init(provider));
  yield (0, _effects.put)(actions.inspect(txHash));

  let action = yield (0, _effects.take)(({ type }) => type == actions.RECEIVE_TRACE || type == actions.ERROR_WEB3);
  debug("action %o", action);

  var trace;
  if (action.type == actions.RECEIVE_TRACE) {
    trace = action.trace;
    debug("received trace");
  } else {
    return { error: action.error };
  }

  let { address, binary } = yield (0, _effects.take)(actions.RECEIVE_CALL);
  debug("received call");

  return { trace, address, binary };
}

function* obtainBinaries(addresses) {
  let tasks = yield (0, _effects.all)(addresses.map(address => (0, _effects.fork)(receiveBinary, address)));

  debug("requesting binaries");
  yield (0, _effects.all)(addresses.map(address => (0, _effects.put)(actions.fetchBinary(address))));

  let binaries = [];
  binaries = yield (0, _effects.all)(tasks.map(task => (0, _effects.join)(task)));

  debug("binaries %o", binaries);

  return binaries;
}

function* receiveBinary(address) {
  let { binary } = yield (0, _effects.take)(action => action.type == actions.RECEIVE_BINARY && action.address == address);
  debug("got binary for %s", address);

  return binary;
}

function* saga() {
  // wait for web3 init signal
  let { provider } = yield (0, _effects.take)(actions.INIT_WEB3);
  let adapter = new _adapter2.default(provider);

  yield (0, _effects.takeEvery)(actions.INSPECT, fetchTransactionInfo, adapter);
  yield (0, _effects.takeEvery)(actions.FETCH_BINARY, fetchBinary, adapter);
}

exports.default = (0, _helpers.prefixName)("web3", saga);

/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.init = init;
exports.inspect = inspect;
exports.fetchBinary = fetchBinary;
exports.receiveBinary = receiveBinary;
exports.receiveTrace = receiveTrace;
exports.receiveCall = receiveCall;
exports.error = error;
const INIT_WEB3 = exports.INIT_WEB3 = "INIT_WEB3";
function init(provider) {
  return {
    type: INIT_WEB3,
    provider
  };
}

const INSPECT = exports.INSPECT = "INSPECT_TRANSACTION";
function inspect(txHash) {
  return {
    type: INSPECT,
    txHash
  };
}

const FETCH_BINARY = exports.FETCH_BINARY = "FETCH_BINARY";
function fetchBinary(address) {
  return {
    type: FETCH_BINARY,
    address
  };
}

const RECEIVE_BINARY = exports.RECEIVE_BINARY = "RECEIVE_BINARY";
function receiveBinary(address, binary) {
  return {
    type: RECEIVE_BINARY,
    address, binary
  };
}

const RECEIVE_TRACE = exports.RECEIVE_TRACE = "RECEIVE_TRACE";
function receiveTrace(trace) {
  return {
    type: RECEIVE_TRACE,
    trace
  };
}

const RECEIVE_CALL = exports.RECEIVE_CALL = "RECEIVE_CALL";
function receiveCall({ address, binary }) {
  return {
    type: RECEIVE_CALL,
    address, binary
  };
}

const ERROR_WEB3 = exports.ERROR_WEB3 = "ERROR_WEB3";
function error(error) {
  return {
    type: ERROR_WEB3,
    error
  };
}

/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _promise = __webpack_require__(20);

var _promise2 = _interopRequireDefault(_promise);

var _asyncToGenerator2 = __webpack_require__(19);

var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _web = __webpack_require__(22);

var _web2 = _interopRequireDefault(_web);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:web3:adapter");

class Web3Adapter {
  constructor(provider) {
    this.web3 = new _web2.default(provider);
  }

  getTrace(txHash) {
    var _this = this;

    return (0, _asyncToGenerator3.default)(function* () {
      return new _promise2.default(function (accept, reject) {
        _this.web3.currentProvider.sendAsync({
          jsonrpc: "2.0",
          method: "debug_traceTransaction",
          params: [txHash, {}],
          id: new Date().getTime()
        }, function (err, result) {
          if (err) return reject(err);
          if (result.error) return reject(new Error(result.error.message));
          debug("result: %o", result);
          accept(result.result.structLogs);
        });
      });
    })();
  }

  getTransaction(txHash) {
    var _this2 = this;

    return (0, _asyncToGenerator3.default)(function* () {
      return new _promise2.default(function (accept, reject) {
        _this2.web3.eth.getTransaction(txHash, function (err, tx) {
          if (err) return reject(err);

          return accept(tx);
        });
      });
    })();
  }

  getReceipt(txHash) {
    var _this3 = this;

    return (0, _asyncToGenerator3.default)(function* () {
      return new _promise2.default(function (accept, reject) {
        _this3.web3.eth.getTransactionReceipt(txHash, function (err, receipt) {
          if (err) return reject(err);

          return accept(receipt);
        });
      });
    })();
  }

  /**
   * getDeployedCode - get the deployed code for an address from the client
   * @param  {String} address
   * @return {String}         deployedBinary
   */
  getDeployedCode(address) {
    var _this4 = this;

    return (0, _asyncToGenerator3.default)(function* () {
      debug("getting deployed code for %s", address);
      return new _promise2.default(function (accept, reject) {
        _this4.web3.eth.getCode(address, function (err, deployedBinary) {
          if (err) debug("error: %o", err);
          if (err) return reject(err);
          debug("got deployed code for %s", address);
          accept(deployedBinary);
        });
      });
    })();
  }
}
exports.default = Web3Adapter;

/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.FINISHED = exports.ERROR = exports.ACTIVE = exports.WAITING = undefined;
exports.session = session;

var _redux = __webpack_require__(9);

var _reducers = __webpack_require__(58);

var _reducers2 = _interopRequireDefault(_reducers);

var _reducers3 = __webpack_require__(59);

var _reducers4 = _interopRequireDefault(_reducers3);

var _reducers5 = __webpack_require__(61);

var _reducers6 = _interopRequireDefault(_reducers5);

var _reducers7 = __webpack_require__(62);

var _reducers8 = _interopRequireDefault(_reducers7);

var _actions = __webpack_require__(17);

var actions = _interopRequireWildcard(_actions);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const WAITING = exports.WAITING = "WAITING";
const ACTIVE = exports.ACTIVE = "ACTIVE";
const ERROR = exports.ERROR = "ERROR";
const FINISHED = exports.FINISHED = "FINISHED";

function session(state = WAITING, action) {
  switch (action.type) {
    case actions.READY:
      return ACTIVE;

    case actions.ERROR:
      return { error: action.error };

    case actions.FINISH:
      return FINISHED;

    default:
      return state;
  }
}

const reduceState = (0, _redux.combineReducers)({
  session,
  data: _reducers2.default,
  evm: _reducers4.default,
  solidity: _reducers6.default,
  trace: _reducers8.default
});

exports.default = reduceState;

/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _redux = __webpack_require__(9);

var _actions = __webpack_require__(24);

var actions = _interopRequireWildcard(_actions);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:data:reducers");

const DEFAULT_SCOPES = {
  byId: {}
};

function scopes(state = DEFAULT_SCOPES, action) {
  var context;
  var scope;
  var variables;

  switch (action.type) {
    case actions.SCOPE:
      scope = state.byId[action.id] || {};

      return {
        byId: (0, _extends3.default)({}, state.byId, {

          [action.id]: (0, _extends3.default)({}, scope, {

            id: action.id,
            sourceId: action.sourceId,
            parentId: action.parentId,
            pointer: action.pointer
          })
        })
      };

    case actions.DECLARE:
      scope = state.byId[action.node.scope] || {};
      variables = scope.variables || [];

      return {
        byId: (0, _extends3.default)({}, state.byId, {

          [action.node.scope]: (0, _extends3.default)({}, scope, {

            variables: [...variables, { name: action.node.name, id: action.node.id }]
          })
        })
      };

    default:
      return state;
  }
}

const info = (0, _redux.combineReducers)({
  scopes
});

const DEFAULT_ASSIGNMENTS = {
  byId: {}
};

function assignments(state = DEFAULT_ASSIGNMENTS, action) {
  switch (action.type) {
    case actions.ASSIGN:
      return {
        byId: (0, _extends3.default)({}, state.byId, (0, _assign2.default)({}, ...(0, _entries2.default)(action.assignments).map(([id, ref]) => ({
          [id]: (0, _extends3.default)({}, state.byId[id], {
            ref
          })
        }))))
      };

    default:
      return state;
  }
};

const proc = (0, _redux.combineReducers)({
  assignments
});

const reducer = (0, _redux.combineReducers)({
  info,
  proc
});

exports.default = reducer;

/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _set = __webpack_require__(18);

var _set2 = _interopRequireDefault(_set);

var _from = __webpack_require__(60);

var _from2 = _interopRequireDefault(_from);

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

exports.callstack = callstack;

var _redux = __webpack_require__(9);

var _actions = __webpack_require__(28);

var actions = _interopRequireWildcard(_actions);

var _helpers = __webpack_require__(2);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const DEFAULT_CONTEXTS = {
  byContext: {},
  byBinary: {}
};

function contexts(state = DEFAULT_CONTEXTS, action) {
  switch (action.type) {
    /*
     * Adding a new context
     */
    case actions.ADD_CONTEXT:
      let { contractName, binary } = action;

      if (state.byBinary[binary]) {
        return state;
      }

      let context = (0, _helpers.keccak256)(binary);

      return {
        byContext: (0, _extends3.default)({}, state.byContext, {

          [context]: { context, binary, contractName }
        }),

        byBinary: (0, _extends3.default)({}, state.byBinary, {

          [binary]: { context: context }
        })
      };

    /*
     * Default case
     */
    default:
      return state;
  }
}

const DEFAULT_INSTANCES = {
  byAddress: {},
  byContext: {}
};

function instances(state = DEFAULT_INSTANCES, action) {
  switch (action.type) {
    /*
     * Adding a new address for context
     */
    case actions.ADD_INSTANCE:
      let { address, context, binary } = action;

      // get known addresses for this context
      let otherInstances = state.byContext[context] || [];
      let otherAddresses = otherInstances.map(({ address }) => address);

      return {
        byAddress: (0, _extends3.default)({}, state.byAddress, {

          [address]: { context, binary }
        }),

        byContext: (0, _extends3.default)({}, state.byContext, {

          // reconstruct context instances to include new address
          [context]: (0, _from2.default)(new _set2.default(otherAddresses).add(address)).map(address => ({ address }))
        })
      };

    /*
     * Default case
     */
    default:
      return state;
  }
}

const info = (0, _redux.combineReducers)({
  contexts,
  instances
});

function callstack(state = [], action) {
  switch (action.type) {
    case actions.CALL:
      let address = action.address;
      return state.concat([{ address }]);

    case actions.CREATE:
      const binary = action.binary;
      return state.concat([{ binary }]);

    case actions.RETURN:
      return state.slice(0, -1); // pop

    default:
      return state;
  };
}

const proc = (0, _redux.combineReducers)({
  callstack
});

const reducer = (0, _redux.combineReducers)({
  info,
  proc
});

exports.default = reducer;

/***/ }),
/* 60 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(594);

/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends2 = __webpack_require__(5);

var _extends3 = _interopRequireDefault(_extends2);

var _keys = __webpack_require__(16);

var _keys2 = _interopRequireDefault(_keys);

exports.functionDepth = functionDepth;

var _redux = __webpack_require__(9);

var _helpers = __webpack_require__(2);

var _actions = __webpack_require__(27);

var actions = _interopRequireWildcard(_actions);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const DEFAULT_SOURCES = {
  byId: {}
};

function sources(state = DEFAULT_SOURCES, action) {
  switch (action.type) {
    /*
     * Adding a new source
     */
    case actions.ADD_SOURCE:
      let { ast, source, sourcePath } = action;

      let id = (0, _keys2.default)(state.byId).length;

      return {
        byId: (0, _extends3.default)({}, state.byId, {

          [id]: {
            id,
            ast,
            source,
            sourcePath
          }
        })

        /*
         * Default case
         */
      };default:
      return state;
  }
}

const DEFAULT_SOURCEMAPS = {
  byContext: {}
};

function sourceMaps(state = DEFAULT_SOURCEMAPS, action) {
  switch (action.type) {
    /*
     * Adding a new sourceMap
     */
    case actions.ADD_SOURCEMAP:
      let { binary, sourceMap } = action;
      let context = (0, _helpers.keccak256)(binary);

      return {
        byContext: (0, _extends3.default)({}, state.byContext, {

          [context]: {
            context,
            sourceMap
          }
        })
      };

    /*
     * Default Case
     */
    default:
      return state;
  }
}

const info = (0, _redux.combineReducers)({
  sources,
  sourceMaps
});

function functionDepth(state = 1, action) {
  if (action.type === actions.JUMP) {
    const delta = spelunk(action.jumpDirection);
    return state + delta;
  } else {
    return state;
  }
}

function spelunk(jump) {
  if (jump == "i") {
    return 1;
  } else if (jump == "o") {
    return -1;
  } else {
    return 0;
  }
}

const proc = (0, _redux.combineReducers)({
  functionDepth
});

const reducer = (0, _redux.combineReducers)({
  info,
  proc
});

exports.default = reducer;

/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.index = index;
exports.steps = steps;

var _redux = __webpack_require__(9);

var _actions = __webpack_require__(12);

var actions = _interopRequireWildcard(_actions);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function index(state = 0, action) {
  if (action.type == actions.TOCK || action.type == actions.END_OF_TRACE) {
    return state + 1;
  } else {
    return state;
  }
}

function steps(state = null, action) {
  if (action.type == actions.SAVE_STEPS) {
    return action.steps;
  } else {
    return state;
  }
}

const info = (0, _redux.combineReducers)({
  steps
});

const proc = (0, _redux.combineReducers)({
  index
});

const reducer = (0, _redux.combineReducers)({
  info,
  proc
});

exports.default = reducer;

/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(1);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(3);

var _assign2 = _interopRequireDefault(_assign);

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

var _reselectTree = __webpack_require__(4);

var _selectors = __webpack_require__(7);

var _selectors2 = _interopRequireDefault(_selectors);

var _selectors3 = __webpack_require__(8);

var _selectors4 = _interopRequireDefault(_selectors3);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("debugger:session:selectors");

const session = (0, _reselectTree.createSelectorTree)({
  /**
   * session.info
   */
  info: {

    /**
     * session.info.affectedInstances
     */
    affectedInstances: (0, _reselectTree.createLeaf)([_selectors2.default.info.instances, _selectors2.default.info.contexts, _selectors4.default.info.sources, _selectors4.default.info.sourceMaps], (instances, contexts, sources, sourceMaps) => (0, _assign2.default)({}, ...(0, _entries2.default)(instances).map(([address, { context }]) => {
      let { contractName, binary } = contexts[context];
      let { sourceMap } = sourceMaps[context];

      let { source } = sourceMap ?
      // look for source ID between second and third colons (HACK)
      sources[sourceMap.match(/^[^:]+:[^:]+:([^:]+):/)[1]] : {};

      return {
        [address]: {
          contractName, source, binary
        }
      };
    })))
  }
});

exports.default = session;

/***/ })
/******/ ]);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64, 

/***/ }),
/* 463 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(42);

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 464 */
/***/ (function(module, exports, __webpack_require__) {

var expect = __webpack_require__(21);
var DeferredChain = __webpack_require__(1218);
var deploy = __webpack_require__(465);
var deployMany = __webpack_require__(1215);
var link = __webpack_require__(1216);
var create = __webpack_require__(1217);

function Deployer(options) {
  var self = this;
  options = options || {};

  expect.options(options, [
    "provider",
    "network",
    "network_id"
  ]);

  this.chain = new DeferredChain();
  this.logger = options.logger || {log: function() {}};
  this.known_contracts = {};
  (options.contracts || []).forEach(function(contract) {
    self.known_contracts[contract.contract_name] = contract;
  });
  this.network = options.network;
  this.network_id = options.network_id;
  this.provider = options.provider;
  this.basePath = options.basePath || process.cwd();
};

// Note: In all code below we overwrite this.chain every time .then() is used
// in order to ensure proper error processing.

Deployer.prototype.start = function() {
  return this.chain.start();
};

Deployer.prototype.link = function(library, destinations) {
  return this.queueOrExec(link(library, destinations, this));
};

Deployer.prototype.deploy = function() {
  var args = Array.prototype.slice.call(arguments);
  var contract = args.shift();

  if (Array.isArray(contract)) {
    return this.queueOrExec(deployMany(contract, this));
  } else {
    return this.queueOrExec(deploy(contract, args, this));
  }
};

Deployer.prototype.new = function() {
  var args = Array.prototype.slice.call(arguments);
  var contract = args.shift();

  return this.queueOrExec(create(contract, args, this));
};

Deployer.prototype.exec = function(file) {
  throw new Error("deployer.exec() has been deprecated; please seen the truffle-require package for integration.")
};

Deployer.prototype.then = function(fn) {
  var self = this;

  return this.queueOrExec(function() {
    self.logger.log("Running step...");
    return fn(this);
  });
};

Deployer.prototype.queueOrExec = function(fn) {
  var self = this;

  if (this.chain.started == true) {
    return new Promise(function(accept, reject) {
      accept();
    }).then(fn);
  } else {
    return this.chain.then(fn);
  }
};

module.exports = Deployer;


/***/ }),
/* 465 */
/***/ (function(module, exports) {

module.exports = function(contract, args, deployer) {
  return function() {
    var should_deploy = true;

    // First detect the network to see if it's deployed.
    return contract.detectNetwork().then(function() {
      // Evaluate any arguments if they're promises (we need to do this in all cases to maintain consistency)
      return Promise.all(args)
    }).then(function(new_args) {
      // Check the last argument. If it's an object that tells us not to overwrite, then lets not.
      if (new_args.length > 0) {
        var last_arg = new_args[new_args.length - 1];
        if (typeof last_arg == "object" && last_arg.overwrite === false && contract.isDeployed()) {
          should_deploy = false;
        }
        delete last_arg.overwrite;
      }

      if (should_deploy == true) {
        var prefix = "Deploying ";
        if (contract.isDeployed()) {
          prefix = "Replacing ";
        }
        deployer.logger.log(prefix + contract.contract_name + "...");
        return contract.new.apply(contract, new_args);
      } else {
        return contract.deployed();
      }
    }).then(function(instance) {
      if (should_deploy == true) {
        deployer.logger.log(contract.contract_name + ": " + instance.address);
      } else {
        deployer.logger.log("Didn't deploy " + contract.contract_name + "; using " + instance.address);
      }

      // Ensure the address and tx-hash are set on the contract.
      contract.address = instance.address;
      contract.transactionHash = instance.transactionHash;
      return instance;
    });
  };
};


/***/ }),
/* 466 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);
var path = __webpack_require__(0);
var Module = __webpack_require__(106);
var vm = __webpack_require__(86);
var originalrequire = __webpack_require__(257);
var expect = __webpack_require__(21);
var Config = __webpack_require__(9);
var Web3 = __webpack_require__(25);

// options.file: path to file to execute. Must be a module that exports a function.
// options.args: arguments passed to the exported function within file. If a callback
//   is not included in args, exported function is treated as synchronous.
// options.context: Object containing any global variables you'd like set when this
//   function is run.
var Require = {
  file: function(options, done) {
    var self = this;
    var file = options.file;

    expect.options(options, [
      "file"
    ]);

    options = Config.default().with(options);

    fs.readFile(options.file, {encoding: "utf8"}, function(err, source) {
      if (err) return done(err);

      // Modified from here: https://gist.github.com/anatoliychakkaev/1599423
      var m = new Module(file);

      // Provide all the globals listed here: https://nodejs.org/api/globals.html
      var context = {
        Buffer: Buffer,
        __dirname: path.dirname(file),
        __filename: file,
        clearImmediate: clearImmediate,
        clearInterval: clearInterval,
        clearTimeout: clearTimeout,
        console: console,
        exports: exports,
        global: global,
        module: m,
        process: process,
        require: function(pkgPath) {
          // Ugh. Simulate a full require function for the file.
          pkgPath = pkgPath.trim();

          // If absolute, just require.
          if (path.isAbsolute(pkgPath)) {
            return originalrequire(pkgPath);
          }

          // If relative, it's relative to the file.
          if (pkgPath[0] == ".") {
            return originalrequire(path.join(path.dirname(file), pkgPath));
          } else {
            // Not absolute, not relative, must be a globally or locally installed module.

            // Try local first.
            // Here we have to require from the node_modules directory directly.

            var moduleDir = path.dirname(file);
            while (true) {
              try {
                return originalrequire(path.join(moduleDir, 'node_modules', pkgPath));
              } catch (e) {

              }
              var oldModuleDir = moduleDir;
              moduleDir = path.join(moduleDir, '..');
              if (moduleDir === oldModuleDir) {
                break;
              }
            }

            // Try global, and let the error throw.
            return originalrequire(pkgPath);
          }
        },
        artifacts: options.resolver,
        setImmediate: setImmediate,
        setInterval: setInterval,
        setTimeout: setTimeout,
      };

      // Now add contract names.
      Object.keys(options.context || {}).forEach(function(key) {
        context[key] = options.context[key];
      });

      var old_cwd = process.cwd();

      process.chdir(path.dirname(file));

      var script = vm.createScript(source, file);
      script.runInNewContext(context);

      process.chdir(old_cwd);

      done(null, m.exports);
    });
  },

  exec: function(options, done) {
    var self = this;

    expect.options(options, [
      "contracts_build_directory",
      "file",
      "resolver",
      "provider",
      "network",
      "network_id"
    ]);

    var web3 = new Web3();
    web3.setProvider(options.provider);

    self.file({
      file: options.file,
      context: {
        web3: web3
      },
      resolver: options.resolver
    }, function(err, fn) {
      if (err) return done(err);
      fn(done);
    });
  }
};

module.exports = Require;


/***/ }),
/* 467 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var eachSeries = __webpack_require__(275);

function FS(working_directory, contracts_build_directory) {
  this.working_directory = working_directory;
  this.contracts_build_directory = contracts_build_directory;
}

FS.prototype.require = function(import_path, search_path) {
  search_path = search_path || this.contracts_build_directory;

  // For Windows: Allow import paths to be either path separator ('\' or '/')
  // by converting all '/' to the default (path.sep);
  import_path = import_path.replace(/\//g, path.sep);

  var contract_name = this.getContractName(import_path, search_path);

  // If we have an absoulte path, only check the file if it's a child of the working_directory.
  if (path.isAbsolute(import_path)) {
    if (import_path.indexOf(this.working_directory) != 0) {
      return null;
    }
    import_path = "./" + import_path.replace(this.working_directory);
  }

  try {
    var result = fs.readFileSync(path.join(search_path, contract_name + ".json"), "utf8");
    return JSON.parse(result);
  } catch (e) {
    return null;
  }
};

FS.prototype.getContractName = function(sourcePath, searchPath) {
  searchPath = searchPath || this.contracts_build_directory;

  var filenames = fs.readdirSync(searchPath);
  for(var i = 0; i < filenames.length; i++) {
    var filename = filenames[i];

    var artifact = JSON.parse(
      fs.readFileSync(path.resolve(searchPath, filename))
    );

    if (artifact.sourcePath == sourcePath) {
      return artifact.contractName;
    }
  };

  // fallback
  return path.basename(sourcePath, ".sol");
}

FS.prototype.resolve = function(import_path, imported_from, callback) {
  imported_from = imported_from || "";

  var possible_paths = [
    import_path,
    path.join(path.dirname(imported_from), import_path)
  ];

  var resolved_body = null;
  var resolved_path = null;

  eachSeries(possible_paths, function(possible_path, finished) {
    if (resolved_body != null) {
      return finished();
    }

    // Check the expected path.
    fs.readFile(possible_path, {encoding: "utf8"}, function(err, body) {
      // If there's an error, that means we can't read the source even if
      // it exists. Treat it as if it doesn't by ignoring any errors.
      // body will be undefined if error.
      if (body) {
        resolved_body = body;
        resolved_path = possible_path;
      }

      return finished();
    });
  }, function(err) {
    if (err) return callback(err);
    callback(null, resolved_body, resolved_path);
  });
};

// Here we're resolving from local files to local files, all absolute.
FS.prototype.resolve_dependency_path = function(import_path, dependency_path) {
  var dirname = path.dirname(import_path);
  return path.resolve(path.join(dirname, dependency_path));
};


module.exports = FS;


/***/ }),
/* 468 */
/***/ (function(module, exports) {

module.exports = {}


/***/ }),
/* 469 */
/***/ (function(module, exports) {

module.exports = ["0BSD","AAL","Abstyles","Adobe-2006","Adobe-Glyph","ADSL","AFL-1.1","AFL-1.2","AFL-2.0","AFL-2.1","AFL-3.0","Afmparse","AGPL-1.0","AGPL-3.0-only","AGPL-3.0-or-later","Aladdin","AMDPLPA","AML","AMPAS","ANTLR-PD","Apache-1.0","Apache-1.1","Apache-2.0","APAFML","APL-1.0","APSL-1.0","APSL-1.1","APSL-1.2","APSL-2.0","Artistic-1.0-cl8","Artistic-1.0-Perl","Artistic-1.0","Artistic-2.0","Bahyph","Barr","Beerware","BitTorrent-1.0","BitTorrent-1.1","Borceux","BSD-1-Clause","BSD-2-Clause-FreeBSD","BSD-2-Clause-NetBSD","BSD-2-Clause-Patent","BSD-2-Clause","BSD-3-Clause-Attribution","BSD-3-Clause-Clear","BSD-3-Clause-LBNL","BSD-3-Clause-No-Nuclear-License-2014","BSD-3-Clause-No-Nuclear-License","BSD-3-Clause-No-Nuclear-Warranty","BSD-3-Clause","BSD-4-Clause-UC","BSD-4-Clause","BSD-Protection","BSD-Source-Code","BSL-1.0","bzip2-1.0.5","bzip2-1.0.6","Caldera","CATOSL-1.1","CC-BY-1.0","CC-BY-2.0","CC-BY-2.5","CC-BY-3.0","CC-BY-4.0","CC-BY-NC-1.0","CC-BY-NC-2.0","CC-BY-NC-2.5","CC-BY-NC-3.0","CC-BY-NC-4.0","CC-BY-NC-ND-1.0","CC-BY-NC-ND-2.0","CC-BY-NC-ND-2.5","CC-BY-NC-ND-3.0","CC-BY-NC-ND-4.0","CC-BY-NC-SA-1.0","CC-BY-NC-SA-2.0","CC-BY-NC-SA-2.5","CC-BY-NC-SA-3.0","CC-BY-NC-SA-4.0","CC-BY-ND-1.0","CC-BY-ND-2.0","CC-BY-ND-2.5","CC-BY-ND-3.0","CC-BY-ND-4.0","CC-BY-SA-1.0","CC-BY-SA-2.0","CC-BY-SA-2.5","CC-BY-SA-3.0","CC-BY-SA-4.0","CC0-1.0","CDDL-1.0","CDDL-1.1","CDLA-Permissive-1.0","CDLA-Sharing-1.0","CECILL-1.0","CECILL-1.1","CECILL-2.0","CECILL-2.1","CECILL-B","CECILL-C","ClArtistic","CNRI-Jython","CNRI-Python-GPL-Compatible","CNRI-Python","Condor-1.1","CPAL-1.0","CPL-1.0","CPOL-1.02","Crossword","CrystalStacker","CUA-OPL-1.0","Cube","curl","D-FSL-1.0","diffmark","DOC","Dotseqn","DSDP","dvipdfm","ECL-1.0","ECL-2.0","EFL-1.0","EFL-2.0","eGenix","Entessa","EPL-1.0","EPL-2.0","ErlPL-1.1","EUDatagrid","EUPL-1.0","EUPL-1.1","EUPL-1.2","Eurosym","Fair","Frameworx-1.0","FreeImage","FSFAP","FSFUL","FSFULLR","FTL","GFDL-1.1-only","GFDL-1.1-or-later","GFDL-1.2-only","GFDL-1.2-or-later","GFDL-1.3-only","GFDL-1.3-or-later","Giftware","GL2PS","Glide","Glulxe","gnuplot","GPL-1.0-only","GPL-1.0-or-later","GPL-2.0-only","GPL-2.0-or-later","GPL-3.0-only","GPL-3.0-or-later","gSOAP-1.3b","HaskellReport","HPND","IBM-pibs","ICU","IJG","ImageMagick","iMatix","Imlib2","Info-ZIP","Intel-ACPI","Intel","Interbase-1.0","IPA","IPL-1.0","ISC","JasPer-2.0","JSON","LAL-1.2","LAL-1.3","Latex2e","Leptonica","LGPL-2.0-only","LGPL-2.0-or-later","LGPL-2.1-only","LGPL-2.1-or-later","LGPL-3.0-only","LGPL-3.0-or-later","LGPLLR","Libpng","libtiff","LiLiQ-P-1.1","LiLiQ-R-1.1","LiLiQ-Rplus-1.1","LPL-1.0","LPL-1.02","LPPL-1.0","LPPL-1.1","LPPL-1.2","LPPL-1.3a","LPPL-1.3c","MakeIndex","MirOS","MIT-advertising","MIT-CMU","MIT-enna","MIT-feh","MIT","MITNFA","Motosoto","mpich2","MPL-1.0","MPL-1.1","MPL-2.0-no-copyleft-exception","MPL-2.0","MS-PL","MS-RL","MTLL","Multics","Mup","NASA-1.3","Naumen","NBPL-1.0","NCSA","Net-SNMP","NetCDF","Newsletr","NGPL","NLOD-1.0","NLPL","Nokia","NOSL","Noweb","NPL-1.0","NPL-1.1","NPOSL-3.0","NRL","NTP","OCCT-PL","OCLC-2.0","ODbL-1.0","OFL-1.0","OFL-1.1","OGTSL","OLDAP-1.1","OLDAP-1.2","OLDAP-1.3","OLDAP-1.4","OLDAP-2.0.1","OLDAP-2.0","OLDAP-2.1","OLDAP-2.2.1","OLDAP-2.2.2","OLDAP-2.2","OLDAP-2.3","OLDAP-2.4","OLDAP-2.5","OLDAP-2.6","OLDAP-2.7","OLDAP-2.8","OML","OpenSSL","OPL-1.0","OSET-PL-2.1","OSL-1.0","OSL-1.1","OSL-2.0","OSL-2.1","OSL-3.0","PDDL-1.0","PHP-3.0","PHP-3.01","Plexus","PostgreSQL","psfrag","psutils","Python-2.0","Qhull","QPL-1.0","Rdisc","RHeCos-1.1","RPL-1.1","RPL-1.5","RPSL-1.0","RSA-MD","RSCPL","Ruby","SAX-PD","Saxpath","SCEA","Sendmail","SGI-B-1.0","SGI-B-1.1","SGI-B-2.0","SimPL-2.0","SISSL-1.2","SISSL","Sleepycat","SMLNJ","SMPPL","SNIA","Spencer-86","Spencer-94","Spencer-99","SPL-1.0","SugarCRM-1.1.3","SWL","TCL","TCP-wrappers","TMate","TORQUE-1.1","TOSL","Unicode-DFS-2015","Unicode-DFS-2016","Unicode-TOU","Unlicense","UPL-1.0","Vim","VOSTROM","VSL-1.0","W3C-19980720","W3C-20150513","W3C","Watcom-1.0","Wsuipa","WTFPL","X11","Xerox","XFree86-1.1","xinetd","Xnet","xpp","XSkat","YPL-1.0","YPL-1.1","Zed","Zend-2.0","Zimbra-1.3","Zimbra-1.4","zlib-acknowledgement","Zlib","ZPL-1.1","ZPL-2.0","ZPL-2.1"]

/***/ }),
/* 470 */
/***/ (function(module, exports) {

function webpackEmptyContext(req) {
	throw new Error("Cannot find module '" + req + "'.");
}
webpackEmptyContext.keys = function() { return []; };
webpackEmptyContext.resolve = webpackEmptyContext;
module.exports = webpackEmptyContext;
webpackEmptyContext.id = 470;

/***/ }),
/* 471 */
/***/ (function(module, exports) {

function webpackEmptyContext(req) {
	throw new Error("Cannot find module '" + req + "'.");
}
webpackEmptyContext.keys = function() { return []; };
webpackEmptyContext.resolve = webpackEmptyContext;
module.exports = webpackEmptyContext;
webpackEmptyContext.id = 471;

/***/ }),
/* 472 */
/***/ (function(module, exports) {

module.exports = require("punycode");

/***/ }),
/* 473 */
/***/ (function(module, exports) {

module.exports = require("solc");

/***/ }),
/* 474 */
/***/ (function(module, exports) {

module.exports = {"$schema":"http://json-schema.org/draft-06/schema#","$id":"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#","description":"Meta-schema for $data reference (JSON-schema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}

/***/ }),
/* 475 */
/***/ (function(module, exports) {

module.exports = {"$schema":"http://json-schema.org/draft-06/schema#","$id":"http://json-schema.org/draft-06/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"title":{"type":"string"},"description":{"type":"string"},"default":{},"examples":{"type":"array","items":{}},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":{}},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":{},"enum":{"type":"array","minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":{}}

/***/ }),
/* 476 */
/***/ (function(module, exports) {

module.exports = ["3ds","3g2","3gp","7z","a","aac","adp","ai","aif","aiff","alz","ape","apk","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","csv","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","fli","flv","fpx","fst","fvt","g3","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","o","oga","ogg","ogv","otf","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rtf","rz","s3m","s7z","scpt","sgi","shar","sil","sketch","slk","smv","so","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]

/***/ }),
/* 477 */
/***/ (function(module, exports) {

function webpackEmptyContext(req) {
	throw new Error("Cannot find module '" + req + "'.");
}
webpackEmptyContext.keys = function() { return []; };
webpackEmptyContext.resolve = webpackEmptyContext;
module.exports = webpackEmptyContext;
webpackEmptyContext.id = 477;

/***/ }),
/* 478 */
/***/ (function(module, exports) {

module.exports = {"contract_name":"PackageIndex","abi":[{"constant":true,"inputs":[],"name":"getNumReleases","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newReleaseValidator","type":"address"}],"name":"setReleaseValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"offset","type":"uint256"},{"name":"numReleases","type":"uint256"}],"name":"getPackageReleaseHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"}],"name":"getReleaseLockfileURI","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPackageDb","type":"address"}],"name":"setPackageDb","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"},{"name":"releaseLockfileURI","type":"string"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getAllReleaseHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"newPackageOwner","type":"address"}],"name":"transferPackageOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getReleaseHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"},{"name":"releaseLockfileURI","type":"string"}],"name":"release","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getNumPackages","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"numReleases","type":"uint256"}],"name":"getReleaseHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"packageExists","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"releaseDb","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"packageDb","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"releaseValidator","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"getPackageData","outputs":[{"name":"packageOwner","type":"address"},{"name":"createdAt","type":"uint256"},{"name":"numReleases","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"}],"name":"getAllPackageReleaseHashes","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"name","type":"string"},{"name":"releaseIdx","type":"uint256"}],"name":"getReleaseHashForPackage","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getPackageName","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newReleaseDb","type":"address"}],"name":"setReleaseDb","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nameHash","type":"bytes32"},{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"PackageRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"PackageTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"unlinked_binary":" ","networks":{},"schema_version":"0.0.4","updated_at":1485371857576}

/***/ }),
/* 479 */
/***/ (function(module, exports) {

module.exports = {"contract_name":"ReleaseDB","abi":[{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"isLatestPreReleaseTree","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"idx","type":"uint256"}],"name":"getReleaseHashForNameHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"getMajorMinorPatch","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getNumReleases","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"}],"name":"hashVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getNumReleasesForNameHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"releaseHash","type":"bytes32"},{"name":"reason","type":"string"}],"name":"removeRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"getReleaseLockfileURI","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"}],"name":"getLatestMajorTree","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"releaseExists","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"getReleaseData","outputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"createdAt","type":"uint256"},{"name":"updatedAt","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"}],"name":"getLatestPatchTree","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getReleaseHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"updateLatestTree","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"},{"name":"releaseLockfileURI","type":"string"}],"name":"setRelease","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"getBuild","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"hashRelease","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"},{"name":"preRelease","type":"string"},{"name":"build","type":"string"}],"name":"setVersion","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"versionHash","type":"bytes32"}],"name":"versionExists","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"isLatestPatchTree","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"isLatestMinorTree","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"versionHash","type":"bytes32"}],"name":"isLatestMajorTree","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"major","type":"uint32"},{"name":"minor","type":"uint32"},{"name":"patch","type":"uint32"}],"name":"getLatestPreReleaseTree","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"nameHash","type":"bytes32"},{"name":"major","type":"uint32"}],"name":"getLatestMinorTree","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"releaseHash","type":"bytes32"}],"name":"getPreRelease","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"ReleaseCreate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseHash","type":"bytes32"}],"name":"ReleaseUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"releaseHash","type":"bytes32"},{"indexed":false,"name":"reason","type":"string"}],"name":"ReleaseDelete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAuthority","type":"address"},{"indexed":true,"name":"newAuthority","type":"address"}],"name":"AuthorityUpdate","type":"event"}],"unlinked_binary":" ","networks":{},"schema_version":"0.0.4","updated_at":1485371857577}

/***/ }),
/* 480 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"name","outputs":[{"name":"o_name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"subRegistrar","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_registrar","type":"address"}],"name":"setSubRegistrar","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"Registrar","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"},{"name":"_primary","type":"bool"}],"name":"setAddress","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_content","type":"bytes32"}],"name":"setContent","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"disown","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_winner","type":"address"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_bidder","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"addr","type":"address"}],"name":"PrimaryChanged","type":"event"}]

/***/ }),
/* 481 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_refund","type":"address"}],"name":"disown","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"}],"name":"setAddr","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"}]

/***/ }),
/* 482 */
/***/ (function(module, exports) {

module.exports = [{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"indirectId","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"icapTransfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"bytes32"}],"name":"deposit","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AnonymousDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"indirectId","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"IcapTransfer","type":"event"}]

/***/ }),
/* 483 */
/***/ (function(module, exports) {

module.exports = {"version":"0.16.0"}

/***/ }),
/* 484 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"name","outputs":[{"name":"o_name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"subRegistrar","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_registrar","type":"address"}],"name":"setSubRegistrar","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"Registrar","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"},{"name":"_primary","type":"bool"}],"name":"setAddress","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_content","type":"bytes32"}],"name":"setContent","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"disown","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_winner","type":"address"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_bidder","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"addr","type":"address"}],"name":"PrimaryChanged","type":"event"}]

/***/ }),
/* 485 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_refund","type":"address"}],"name":"disown","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"}],"name":"setAddr","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"}]

/***/ }),
/* 486 */
/***/ (function(module, exports) {

module.exports = [{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"indirectId","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"icapTransfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"bytes32"}],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AnonymousDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"indirectId","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"IcapTransfer","type":"event"}]

/***/ }),
/* 487 */
/***/ (function(module, exports) {

module.exports = {"version":"0.18.4"}

/***/ }),
/* 488 */
/***/ (function(module, exports) {

module.exports = {"title":"Release Lock File Specification","type":"object","required":["lockfile_version","package_name","version"],"version":"1","properties":{"lockfile_version":{"type":"string","title":"Lock File Version","default":"1","enum":["1"]},"package_name":{"title":"The name of the package that this release is for","type":"string","pattern":"^[a-z][-a-z0-9]{0,213}$"},"meta":{"$ref":"#/definitions/PackageMeta"},"version":{"title":"Version","type":"string"},"sources":{"title":"Sources","type":"object","patternProperties":{"\\.\\/.*":{"anyOf":[{"title":"Source code","type":"string"},{"$ref":"IPFS-URI"}]}}},"contract_types":{"title":"The contract types included in this release","type":"object","patternProperties":{"[a-zA-Z][-a-zA-Z0-9_]*(?:\\[[-a-zA-Z0-9]{1,256}\\])$":{"$ref":"#/definitions/ContractType"}}},"deployments":{"title":"The deployed contract instances in this release","type":"object","patternProperties":{"^blockchain\\://[0-9a-zA-Z]{64}/block/[0-9a-zA-Z]{64}$":{"type":"object","patternProperties":{"^[a-zA-Z][a-zA-Z0-9_]*$":{"$ref":"#/definitions/ContractInstance"}}}}},"build_dependencies":{"title":"Build Dependencies","type":"object","patternProperties":{"^[a-z][-a-z0-9]{0,213}$":{"$ref":"#/definitions/IPFS-URI"}}}},"definitions":{"PackageMeta":{"title":"Metadata about the package","type":"object","properties":{"authors":{"title":"Package authors","type":"array","items":{"type":"string"}},"license":{"title":"The license that this package and it's source are released under","type":"string"},"description":{"title":"Description of this package","type":"string"},"keywords":{"title":"Keywords that apply to this package","type":"array","items":{"type":"string"}},"links":{"title":"URIs for resources related to this package","type":"object","additionalProperties":{"type":"string","format":"URI"}}}},"ContractType":{"title":"Data for a contract type included in this package","type":"object","properties":{"contract_name":{"title":"The name for this contract type as found in the project source code.","type":"string","pattern":"[a-zA-Z][a-zA-Z0-9_]*"},"bytecode":{"title":"The unlinked '0x' prefixed bytecode for this contract type","type":"string"},"runtime_bytecode":{"title":"The unlinked '0x' prefixed runtime portion of the bytecode for this contract type","type":"string"},"abi":{"title":"The ABI for this contract type","type":"array"},"natspec":{"title":"The combined user-doc and dev-doc for this contract","type":"object"},"compiler":{"$ref":"#/definitions/CompilerInformation"}}},"ContractInstance":{"title":"Data for a deployed instance of a contract","type":"object","required":["contract_type"],"properties":{"contract_type":{"title":"The contract type of this contract instance","type":"string","pattern":"^(?:[a-z][-a-z0-9]{0,213}\\:)?[a-zA-Z][-a-zA-Z0-9_]*(?:\\[[-a-zA-Z0-9]{1,256}\\])?$"},"address":{"$ref":"#/definitions/Address"},"transaction":{"$ref":"#/definitions/TransactionHash"},"block":{"$ref":"#/definitions/BlockHash"},"runtime_bytecode":{"title":"The on-chain bytecode for this contract instance.","type":"string"},"compiler":{"$ref":"#/definitions/CompilerInformation"},"link_dependencies":{"title":"The values for the link references found within this contract instances runtime bytecode","type":"array","items":{"$ref":"#/definitions/LinkValue"}}}},"LinkValue":{"title":"A value for an individual link reference in a contract's bytecode","type":"object","required":["offset","value"],"properties":{"offset":{"type":"integer","minimum":0},"value":{"title":"The value for the link reference","type":"string","anyOf":[{"$ref":"#/definitions/Address"},{"$ref":"#/definitions/ContractInstanceName"},{"$ref":"#/definitions/PackageContractInstanceName"}]}}},"ContractInstanceName":{"title":"The name of the deployed contract instance","type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]*$"},"PackageContractInstanceName":{"title":"The name of the deployed contract instance in a package","type":"string","pattern":"^[a-z][-a-z0-9]{0,213}\\:[a-zA-Z][a-zA-Z0-9_]*$"},"CompilerInformation":{"title":"Information about the software that was used to compile a contract type or instance","type":"object","required":["type","version"],"properties":{"type":{"title":"The name of the compiler","enum":["solc","solcjs"]},"version":{"title":"The version string for the compiler","type":"string"},"settings":{"title":"The settings used for compilation","anyOf":[{"$ref":"solc_Settings"}]}}},"solc_Settings":{"title":"Settings for use with the solc or solcjs compiler","type":"object","properties":{"optimize":{"type":"boolean"},"optimize_runs":{"type":"integer","minimum":1}}},"Address":{"title":"An Ethereum address","type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"TransactionHash":{"title":"An Ethereum transaction hash","type":"string","pattern":"^0x[0-9a-zA-Z]{64}$"},"BlockHash":{"title":"An Ethereum block hash","type":"string","pattern":"^0x[0-9a-zA-Z]{64}$"},"IPFS-URI":{"title":"An IPFS URI","type":"string","format":"uri","pattern":"^ipfs:/?/?.*$"}}}

/***/ }),
/* 489 */
/***/ (function(module, exports) {

module.exports = {"$id":"afterRequest.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","optional":true,"required":["lastAccess","eTag","hitCount"],"properties":{"expires":{"type":"string","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?"},"lastAccess":{"type":"string","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?"},"eTag":{"type":"string"},"hitCount":{"type":"integer"},"comment":{"type":"string"}}}

/***/ }),
/* 490 */
/***/ (function(module, exports) {

module.exports = {"$id":"beforeRequest.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","optional":true,"required":["lastAccess","eTag","hitCount"],"properties":{"expires":{"type":"string","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?"},"lastAccess":{"type":"string","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?"},"eTag":{"type":"string"},"hitCount":{"type":"integer"},"comment":{"type":"string"}}}

/***/ }),
/* 491 */
/***/ (function(module, exports) {

module.exports = {"$id":"browser.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["name","version"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 492 */
/***/ (function(module, exports) {

module.exports = {"$id":"cache.json#","$schema":"http://json-schema.org/draft-06/schema#","properties":{"beforeRequest":{"oneOf":[{"type":"null"},{"$ref":"beforeRequest.json#"}]},"afterRequest":{"oneOf":[{"type":"null"},{"$ref":"afterRequest.json#"}]},"comment":{"type":"string"}}}

/***/ }),
/* 493 */
/***/ (function(module, exports) {

module.exports = {"$id":"content.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["size","mimeType"],"properties":{"size":{"type":"integer"},"compression":{"type":"integer"},"mimeType":{"type":"string"},"text":{"type":"string"},"encoding":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 494 */
/***/ (function(module, exports) {

module.exports = {"$id":"cookie.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"path":{"type":"string"},"domain":{"type":"string"},"expires":{"type":["string","null"],"format":"date-time"},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"comment":{"type":"string"}}}

/***/ }),
/* 495 */
/***/ (function(module, exports) {

module.exports = {"$id":"creator.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["name","version"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 496 */
/***/ (function(module, exports) {

module.exports = {"$id":"entry.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","optional":true,"required":["startedDateTime","time","request","response","cache","timings"],"properties":{"pageref":{"type":"string"},"startedDateTime":{"type":"string","format":"date-time","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))"},"time":{"type":"number","min":0},"request":{"$ref":"request.json#"},"response":{"$ref":"response.json#"},"cache":{"$ref":"cache.json#"},"timings":{"$ref":"timings.json#"},"serverIPAddress":{"type":"string","oneOf":[{"format":"ipv4"},{"format":"ipv6"}]},"connection":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 497 */
/***/ (function(module, exports) {

module.exports = {"$id":"har.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["log"],"properties":{"log":{"$ref":"log.json#"}}}

/***/ }),
/* 498 */
/***/ (function(module, exports) {

module.exports = {"$id":"header.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 499 */
/***/ (function(module, exports) {

module.exports = {"$id":"log.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["version","creator","entries"],"properties":{"version":{"type":"string"},"creator":{"$ref":"creator.json#"},"browser":{"$ref":"browser.json#"},"pages":{"type":"array","items":{"$ref":"page.json#"}},"entries":{"type":"array","items":{"$ref":"entry.json#"}},"comment":{"type":"string"}}}

/***/ }),
/* 500 */
/***/ (function(module, exports) {

module.exports = {"$id":"page.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","optional":true,"required":["startedDateTime","id","title","pageTimings"],"properties":{"startedDateTime":{"type":"string","format":"date-time","pattern":"^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))"},"id":{"type":"string","unique":true},"title":{"type":"string"},"pageTimings":{"$ref":"pageTimings.json#"},"comment":{"type":"string"}}}

/***/ }),
/* 501 */
/***/ (function(module, exports) {

module.exports = {"$id":"pageTimings.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","properties":{"onContentLoad":{"type":"number","min":-1},"onLoad":{"type":"number","min":-1},"comment":{"type":"string"}}}

/***/ }),
/* 502 */
/***/ (function(module, exports) {

module.exports = {"$id":"postData.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","optional":true,"required":["mimeType"],"properties":{"mimeType":{"type":"string"},"text":{"type":"string"},"params":{"type":"array","required":["name"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"fileName":{"type":"string"},"contentType":{"type":"string"},"comment":{"type":"string"}}},"comment":{"type":"string"}}}

/***/ }),
/* 503 */
/***/ (function(module, exports) {

module.exports = {"$id":"query.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"comment":{"type":"string"}}}

/***/ }),
/* 504 */
/***/ (function(module, exports) {

module.exports = {"$id":"request.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["method","url","httpVersion","cookies","headers","queryString","headersSize","bodySize"],"properties":{"method":{"type":"string"},"url":{"type":"string","format":"uri"},"httpVersion":{"type":"string"},"cookies":{"type":"array","items":{"$ref":"cookie.json#"}},"headers":{"type":"array","items":{"$ref":"header.json#"}},"queryString":{"type":"array","items":{"$ref":"query.json#"}},"postData":{"$ref":"postData.json#"},"headersSize":{"type":"integer"},"bodySize":{"type":"integer"},"comment":{"type":"string"}}}

/***/ }),
/* 505 */
/***/ (function(module, exports) {

module.exports = {"$id":"response.json#","$schema":"http://json-schema.org/draft-06/schema#","type":"object","required":["status","statusText","httpVersion","cookies","headers","content","redirectURL","headersSize","bodySize"],"properties":{"status":{"type":"integer"},"statusText":{"type":"string"},"httpVersion":{"type":"string"},"cookies":{"type":"array","items":{"$ref":"cookie.json#"}},"headers":{"type":"array","items":{"$ref":"header.json#"}},"content":{"$ref":"content.json#"},"redirectURL":{"type":"string"},"headersSize":{"type":"integer"},"bodySize":{"type":"integer"},"comment":{"type":"string"}}}

/***/ }),
/* 506 */
/***/ (function(module, exports) {

module.exports = {"$id":"timings.json#","$schema":"http://json-schema.org/draft-06/schema#","required":["send","wait","receive"],"properties":{"dns":{"type":"number","min":-1},"connect":{"type":"number","min":-1},"blocked":{"type":"number","min":-1},"send":{"type":"number","min":-1},"wait":{"type":"number","min":-1},"receive":{"type":"number","min":-1},"ssl":{"type":"number","min":-1},"comment":{"type":"string"}}}

/***/ }),
/* 507 */
/***/ (function(module, exports) {

module.exports = {"100":"Continue","101":"Switching Protocols","102":"Processing","103":"Early Hints","200":"OK","201":"Created","202":"Accepted","203":"Non-Authoritative Information","204":"No Content","205":"Reset Content","206":"Partial Content","207":"Multi-Status","208":"Already Reported","226":"IM Used","300":"Multiple Choices","301":"Moved Permanently","302":"Found","303":"See Other","304":"Not Modified","305":"Use Proxy","306":"(Unused)","307":"Temporary Redirect","308":"Permanent Redirect","400":"Bad Request","401":"Unauthorized","402":"Payment Required","403":"Forbidden","404":"Not Found","405":"Method Not Allowed","406":"Not Acceptable","407":"Proxy Authentication Required","408":"Request Timeout","409":"Conflict","410":"Gone","411":"Length Required","412":"Precondition Failed","413":"Payload Too Large","414":"URI Too Long","415":"Unsupported Media Type","416":"Range Not Satisfiable","417":"Expectation Failed","418":"I'm a teapot","421":"Misdirected Request","422":"Unprocessable Entity","423":"Locked","424":"Failed Dependency","425":"Unordered Collection","426":"Upgrade Required","428":"Precondition Required","429":"Too Many Requests","431":"Request Header Fields Too Large","451":"Unavailable For Legal Reasons","500":"Internal Server Error","501":"Not Implemented","502":"Bad Gateway","503":"Service Unavailable","504":"Gateway Timeout","505":"HTTP Version Not Supported","506":"Variant Also Negotiates","507":"Insufficient Storage","508":"Loop Detected","509":"Bandwidth Limit Exceeded","510":"Not Extended","511":"Network Authentication Required"}

/***/ }),
/* 508 */
/***/ (function(module, exports) {

module.exports = {"af_ZA":1078,"am_ET":1118,"ar_AE":14337,"ar_BH":15361,"ar_DZ":5121,"ar_EG":3073,"ar_IQ":2049,"ar_JO":11265,"ar_KW":13313,"ar_LB":12289,"ar_LY":4097,"ar_MA":6145,"ar_OM":8193,"ar_QA":16385,"ar_SA":1025,"ar_SY":10241,"ar_TN":7169,"ar_YE":9217,"arn_CL":1146,"as_IN":1101,"az_AZ":2092,"ba_RU":1133,"be_BY":1059,"bg_BG":1026,"bn_IN":1093,"bo_BT":2129,"bo_CN":1105,"br_FR":1150,"bs_BA":8218,"ca_ES":1027,"co_FR":1155,"cs_CZ":1029,"cy_GB":1106,"da_DK":1030,"de_AT":3079,"de_CH":2055,"de_DE":1031,"de_LI":5127,"de_LU":4103,"div_MV":1125,"dsb_DE":2094,"el_GR":1032,"en_AU":3081,"en_BZ":10249,"en_CA":4105,"en_CB":9225,"en_GB":2057,"en_IE":6153,"en_IN":18441,"en_JA":8201,"en_MY":17417,"en_NZ":5129,"en_PH":13321,"en_TT":11273,"en_US":1033,"en_ZA":7177,"en_ZW":12297,"es_AR":11274,"es_BO":16394,"es_CL":13322,"es_CO":9226,"es_CR":5130,"es_DO":7178,"es_EC":12298,"es_ES":3082,"es_GT":4106,"es_HN":18442,"es_MX":2058,"es_NI":19466,"es_PA":6154,"es_PE":10250,"es_PR":20490,"es_PY":15370,"es_SV":17418,"es_UR":14346,"es_US":21514,"es_VE":8202,"et_EE":1061,"eu_ES":1069,"fa_IR":1065,"fi_FI":1035,"fil_PH":1124,"fo_FO":1080,"fr_BE":2060,"fr_CA":3084,"fr_CH":4108,"fr_FR":1036,"fr_LU":5132,"fr_MC":6156,"fy_NL":1122,"ga_IE":2108,"gbz_AF":1164,"gl_ES":1110,"gsw_FR":1156,"gu_IN":1095,"ha_NG":1128,"he_IL":1037,"hi_IN":1081,"hr_BA":4122,"hr_HR":1050,"hu_HU":1038,"hy_AM":1067,"id_ID":1057,"ii_CN":1144,"is_IS":1039,"it_CH":2064,"it_IT":1040,"iu_CA":2141,"ja_JP":1041,"ka_GE":1079,"kh_KH":1107,"kk_KZ":1087,"kl_GL":1135,"kn_IN":1099,"ko_KR":1042,"kok_IN":1111,"ky_KG":1088,"lb_LU":1134,"lo_LA":1108,"lt_LT":1063,"lv_LV":1062,"mi_NZ":1153,"mk_MK":1071,"ml_IN":1100,"mn_CN":2128,"mn_MN":1104,"moh_CA":1148,"mr_IN":1102,"ms_BN":2110,"ms_MY":1086,"mt_MT":1082,"my_MM":1109,"nb_NO":1044,"ne_NP":1121,"nl_BE":2067,"nl_NL":1043,"nn_NO":2068,"ns_ZA":1132,"oc_FR":1154,"or_IN":1096,"pa_IN":1094,"pl_PL":1045,"ps_AF":1123,"pt_BR":1046,"pt_PT":2070,"qut_GT":1158,"quz_BO":1131,"quz_EC":2155,"quz_PE":3179,"rm_CH":1047,"ro_RO":1048,"ru_RU":1049,"rw_RW":1159,"sa_IN":1103,"sah_RU":1157,"se_FI":3131,"se_NO":1083,"se_SE":2107,"si_LK":1115,"sk_SK":1051,"sl_SI":1060,"sma_NO":6203,"sma_SE":7227,"smj_NO":4155,"smj_SE":5179,"smn_FI":9275,"sms_FI":8251,"sq_AL":1052,"sr_BA":7194,"sr_SP":3098,"sv_FI":2077,"sv_SE":1053,"sw_KE":1089,"syr_SY":1114,"ta_IN":1097,"te_IN":1098,"tg_TJ":1064,"th_TH":1054,"tk_TM":1090,"tmz_DZ":2143,"tn_ZA":1074,"tr_TR":1055,"tt_RU":1092,"ug_CN":1152,"uk_UA":1058,"ur_IN":2080,"ur_PK":1056,"uz_UZ":2115,"vi_VN":1066,"wen_DE":1070,"wo_SN":1160,"xh_ZA":1076,"yo_NG":1130,"zh_CHS":4,"zh_CHT":31748,"zh_CN":2052,"zh_HK":3076,"zh_MO":5124,"zh_SG":4100,"zh_TW":1028,"zu_ZA":1077}

/***/ }),
/* 509 */
/***/ (function(module, exports) {

module.exports = {"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana"},"application/3gpp-ims+xml":{"source":"iana"},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana"},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","extensions":["atomsvc"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana"},"application/bacnet-xdd+zip":{"source":"iana"},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana"},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana"},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana"},"application/ccxml+xml":{"source":"iana","extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana"},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana"},"application/cellml+xml":{"source":"iana"},"application/cfw":{"source":"iana"},"application/clue_info+xml":{"source":"iana"},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana"},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana"},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana"},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana"},"application/cstadata+xml":{"source":"iana"},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana"},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana"},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/docbook+xml":{"source":"apache","extensions":["dbk"]},"application/dskpp+xml":{"source":"iana"},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana"},"application/emergencycalldata.control+xml":{"source":"iana"},"application/emergencycalldata.deviceinfo+xml":{"source":"iana"},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana"},"application/emergencycalldata.serviceinfo+xml":{"source":"iana"},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana"},"application/emergencycalldata.veds+xml":{"source":"iana"},"application/emma+xml":{"source":"iana","extensions":["emma"]},"application/emotionml+xml":{"source":"iana"},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana"},"application/epub+zip":{"source":"iana","extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana"},"application/fhir+xml":{"source":"iana"},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false,"extensions":["woff"]},"application/framework-attributes+xml":{"source":"iana"},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geoxacml+xml":{"source":"iana"},"application/gml+xml":{"source":"iana","extensions":["gml"]},"application/gpx+xml":{"source":"apache","extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana"},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana"},"application/ibe-pkg-reply+xml":{"source":"iana"},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana"},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana"},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana"},"application/kpml-response+xml":{"source":"iana"},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana"},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana"},"application/lost+xml":{"source":"iana","extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana"},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana"},"application/mathml-presentation+xml":{"source":"iana"},"application/mbms-associated-procedure-description+xml":{"source":"iana"},"application/mbms-deregister+xml":{"source":"iana"},"application/mbms-envelope+xml":{"source":"iana"},"application/mbms-msk+xml":{"source":"iana"},"application/mbms-msk-response+xml":{"source":"iana"},"application/mbms-protection-description+xml":{"source":"iana"},"application/mbms-reception-report+xml":{"source":"iana"},"application/mbms-register+xml":{"source":"iana"},"application/mbms-register-response+xml":{"source":"iana"},"application/mbms-schedule+xml":{"source":"iana"},"application/mbms-user-service-description+xml":{"source":"iana"},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana"},"application/media_control+xml":{"source":"iana"},"application/mediaservercontrol+xml":{"source":"iana","extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","extensions":["meta4"]},"application/mets+xml":{"source":"iana","extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mmt-usd+xml":{"source":"iana"},"application/mods+xml":{"source":"iana","extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana"},"application/mrb-publish+xml":{"source":"iana"},"application/msc-ivr+xml":{"source":"iana"},"application/msc-mixer+xml":{"source":"iana"},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana"},"application/n-triples":{"source":"iana"},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana"},"application/node":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana"},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana"},"application/pidf-diff+xml":{"source":"iana"},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","extensions":["pls"]},"application/poc-settings+xml":{"source":"iana"},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana"},"application/provenance+xml":{"source":"iana"},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana"},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana"},"application/pskc+xml":{"source":"iana","extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf"]},"application/reginfo+xml":{"source":"iana","extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","extensions":["rld"]},"application/rfc+xml":{"source":"iana"},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana"},"application/rls-services+xml":{"source":"iana","extensions":["rs"]},"application/route-apd+xml":{"source":"iana"},"application/route-s-tsid+xml":{"source":"iana"},"application/route-usd+xml":{"source":"iana"},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana"},"application/samlmetadata+xml":{"source":"iana"},"application/sbml+xml":{"source":"iana","extensions":["sbml"]},"application/scaip+xml":{"source":"iana"},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/sep+xml":{"source":"iana"},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","extensions":["shf"]},"application/sieve":{"source":"iana"},"application/simple-filter+xml":{"source":"iana"},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","extensions":["srx"]},"application/spirits-event+xml":{"source":"iana"},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","extensions":["grxml"]},"application/sru+xml":{"source":"iana","extensions":["sru"]},"application/ssdl+xml":{"source":"apache","extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","extensions":["ssml"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/tei+xml":{"source":"iana","extensions":["tei","teicorpus"]},"application/thraud+xml":{"source":"iana","extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tnauthlist":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana"},"application/tve-trigger":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana"},"application/urc-ressheet+xml":{"source":"iana"},"application/urc-targetdesc+xml":{"source":"iana"},"application/urc-uisocketdesc+xml":{"source":"iana"},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana"},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana"},"application/vnd.3gpp-prose+xml":{"source":"iana"},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana"},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana"},"application/vnd.3gpp.bsf+xml":{"source":"iana"},"application/vnd.3gpp.gmop+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana"},"application/vnd.3gpp.mid-call+xml":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana"},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana"},"application/vnd.3gpp.ussd+xml":{"source":"iana"},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana"},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","extensions":["mpkg"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana"},"application/vnd.balsamiq.bmml+xml":{"source":"iana"},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana"},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana"},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana"},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","extensions":["wbs"]},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana"},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana"},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume-movie":{"source":"iana"},"application/vnd.desmume.movie":{"source":"apache"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana"},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana"},"application/vnd.dvb.notif-container+xml":{"source":"iana"},"application/vnd.dvb.notif-generic+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana"},"application/vnd.dvb.notif-init+xml":{"source":"iana"},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana"},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana"},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana"},"application/vnd.eszigno3+xml":{"source":"iana","extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana"},"application/vnd.etsi.asic-e+zip":{"source":"iana"},"application/vnd.etsi.asic-s+zip":{"source":"iana"},"application/vnd.etsi.cug+xml":{"source":"iana"},"application/vnd.etsi.iptvcommand+xml":{"source":"iana"},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana"},"application/vnd.etsi.iptvprofile+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana"},"application/vnd.etsi.iptvservice+xml":{"source":"iana"},"application/vnd.etsi.iptvsync+xml":{"source":"iana"},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana"},"application/vnd.etsi.mcid+xml":{"source":"iana"},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana"},"application/vnd.etsi.pstn+xml":{"source":"iana"},"application/vnd.etsi.sci+xml":{"source":"iana"},"application/vnd.etsi.simservs+xml":{"source":"iana"},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana"},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana"},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana"},"application/vnd.gov.sk.e-form+zip":{"source":"iana"},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana"},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana"},"application/vnd.imagemeter.image+zip":{"source":"iana"},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana"},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana"},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana"},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana"},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana"},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana"},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana"},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","extensions":["lasxml"]},"application/vnd.liberty-request+xml":{"source":"iana"},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","extensions":["lbe"]},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana"},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana"},"application/vnd.marlin.drm.license+xml":{"source":"iana"},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana"},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana"},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana"},"application/vnd.ms-printing.printticket+xml":{"source":"apache"},"application/vnd.ms-printschematicket+xml":{"source":"iana"},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana"},"application/vnd.nokia.iptv.config+xml":{"source":"iana"},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana"},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana"},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana"},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana"},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana"},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana"},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana"},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana"},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana"},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana"},"application/vnd.oipf.spdlist+xml":{"source":"iana"},"application/vnd.oipf.ueprofile+xml":{"source":"iana"},"application/vnd.oipf.userprofile+xml":{"source":"iana"},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana"},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.imd+xml":{"source":"iana"},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana"},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana"},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.sprov+xml":{"source":"iana"},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana"},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana"},"application/vnd.oma.cab-pcc+xml":{"source":"iana"},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana"},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana"},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana"},"application/vnd.oma.group-usage-list+xml":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana"},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana"},"application/vnd.oma.poc.final-report+xml":{"source":"iana"},"application/vnd.oma.poc.groups+xml":{"source":"iana"},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana"},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana"},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana"},"application/vnd.oma.xcap-directory+xml":{"source":"iana"},"application/vnd.omads-email+xml":{"source":"iana"},"application/vnd.omads-file+xml":{"source":"iana"},"application/vnd.omads-folder+xml":{"source":"iana"},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana"},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana"},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana"},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana"},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana"},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos+xml":{"source":"iana"},"application/vnd.paos.xml":{"source":"apache"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana"},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana"},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana"},"application/vnd.radisys.msml+xml":{"source":"iana"},"application/vnd.radisys.msml-audit+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana"},"application/vnd.radisys.msml-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana"},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana"},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana"},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana"},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana"},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana"},"application/vnd.wv.ssp+xml":{"source":"iana"},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana"},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana"},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana"},"application/xaml+xml":{"source":"apache","extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana"},"application/xcap-caps+xml":{"source":"iana"},"application/xcap-diff+xml":{"source":"iana","extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana"},"application/xcap-error+xml":{"source":"iana"},"application/xcap-ns+xml":{"source":"iana"},"application/xcon-conference-info+xml":{"source":"iana"},"application/xcon-conference-info-diff+xml":{"source":"iana"},"application/xenc+xml":{"source":"iana","extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache"},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana"},"application/xmpp+xml":{"source":"iana"},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","extensions":["xpl"]},"application/xslt+xml":{"source":"iana","extensions":["xslt"]},"application/xspf+xml":{"source":"apache","extensions":["xspf"]},"application/xv+xml":{"source":"iana","extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana"},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana"},"application/yin+xml":{"source":"iana","extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana"},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana"},"image/apng":{"compressible":false,"extensions":["apng"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana"},"image/emf":{"source":"iana"},"image/fits":{"source":"iana"},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana"},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana"},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana"},"image/tiff":{"source":"iana","compressible":false,"extensions":["tiff","tif"]},"image/tiff-fx":{"source":"iana"},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana"},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana"},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana"},"image/vnd.valve.source.texture":{"source":"iana"},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana"},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana"},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/vnd.collada+xml":{"source":"iana","extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana"},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana"},"model/vnd.parasolid.transmit.binary":{"source":"iana"},"model/vnd.parasolid.transmit.text":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.valve.source.compiled-map":{"source":"iana"},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana"},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana"},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana","compressible":false},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}

/***/ }),
/* 510 */
/***/ (function(module, exports) {

module.exports = {"100":"💯","1234":"🔢","interrobang":"⁉️","tm":"™️","information_source":"ℹ️","left_right_arrow":"↔️","arrow_up_down":"↕️","arrow_upper_left":"↖️","arrow_upper_right":"↗️","arrow_lower_right":"↘️","arrow_lower_left":"↙️","keyboard":"⌨","sunny":"☀️","cloud":"☁️","umbrella":"☔️","showman":"☃","comet":"☄","ballot_box_with_check":"☑️","coffee":"☕️","shamrock":"☘","skull_and_crossbones":"☠","radioactive_sign":"☢","biohazard_sign":"☣","orthodox_cross":"☦","wheel_of_dharma":"☸","white_frowning_face":"☹","aries":"♈️","taurus":"♉️","sagittarius":"♐️","capricorn":"♑️","aquarius":"♒️","pisces":"♓️","spades":"♠️","clubs":"♣️","hearts":"♥️","diamonds":"♦️","hotsprings":"♨️","hammer_and_pick":"⚒","anchor":"⚓️","crossed_swords":"⚔","scales":"⚖","alembic":"⚗","gear":"⚙","scissors":"✂️","white_check_mark":"✅","airplane":"✈️","email":"✉️","envelope":"✉️","black_nib":"✒️","heavy_check_mark":"✔️","heavy_multiplication_x":"✖️","star_of_david":"✡","sparkles":"✨","eight_spoked_asterisk":"✳️","eight_pointed_black_star":"✴️","snowflake":"❄️","sparkle":"❇️","question":"❓","grey_question":"❔","grey_exclamation":"❕","exclamation":"❗️","heavy_exclamation_mark":"❗️","heavy_heart_exclamation_mark_ornament":"❣","heart":"❤️","heavy_plus_sign":"➕","heavy_minus_sign":"➖","heavy_division_sign":"➗","arrow_heading_up":"⤴️","arrow_heading_down":"⤵️","wavy_dash":"〰️","congratulations":"㊗️","secret":"㊙️","copyright":"©️","registered":"®️","bangbang":"‼️","leftwards_arrow_with_hook":"↩️","arrow_right_hook":"↪️","watch":"⌚️","hourglass":"⌛️","fast_forward":"⏩","rewind":"⏪","arrow_double_up":"⏫","arrow_double_down":"⏬","black_right_pointing_double_triangle_with_vertical_bar":"⏭","black_left_pointing_double_triangle_with_vertical_bar":"⏮","black_right_pointing_triangle_with_double_vertical_bar":"⏯","alarm_clock":"⏰","stopwatch":"⏱","timer_clock":"⏲","hourglass_flowing_sand":"⏳","double_vertical_bar":"⏸","black_square_for_stop":"⏹","black_circle_for_record":"⏺","m":"Ⓜ️","black_small_square":"▪️","white_small_square":"▫️","arrow_forward":"▶️","arrow_backward":"◀️","white_medium_square":"◻️","black_medium_square":"◼️","white_medium_small_square":"◽️","black_medium_small_square":"◾️","phone":"☎️","telephone":"☎️","point_up":"☝️","star_and_crescent":"☪","peace_symbol":"☮","yin_yang":"☯","relaxed":"☺️","gemini":"♊️","cancer":"♋️","leo":"♌️","virgo":"♍️","libra":"♎️","scorpius":"♏️","recycle":"♻️","wheelchair":"♿️","atom_symbol":"⚛","fleur_de_lis":"⚜","warning":"⚠️","zap":"⚡️","white_circle":"⚪️","black_circle":"⚫️","coffin":"⚰","funeral_urn":"⚱","soccer":"⚽️","baseball":"⚾️","snowman":"⛄️","partly_sunny":"⛅️","thunder_cloud_and_rain":"⛈","ophiuchus":"⛎","pick":"⛏","helmet_with_white_cross":"⛑","chains":"⛓","no_entry":"⛔️","shinto_shrine":"⛩","church":"⛪️","mountain":"⛰","umbrella_on_ground":"⛱","fountain":"⛲️","golf":"⛳️","ferry":"⛴","boat":"⛵️","sailboat":"⛵️","skier":"⛷","ice_skate":"⛸","person_with_ball":"⛹","tent":"⛺️","fuelpump":"⛽️","fist":"✊","hand":"✋","raised_hand":"✋","v":"✌️","writing_hand":"✍","pencil2":"✏️","latin_cross":"✝","x":"❌","negative_squared_cross_mark":"❎","arrow_right":"➡️","curly_loop":"➰","loop":"➿","arrow_left":"⬅️","arrow_up":"⬆️","arrow_down":"⬇️","black_large_square":"⬛️","white_large_square":"⬜️","star":"⭐️","o":"⭕️","part_alternation_mark":"〽️","mahjong":"🀄️","black_joker":"🃏","a":"🅰️","b":"🅱️","o2":"🅾️","parking":"🅿️","ab":"🆎","cl":"🆑","cool":"🆒","free":"🆓","id":"🆔","new":"🆕","ng":"🆖","ok":"🆗","sos":"🆘","up":"🆙","vs":"🆚","koko":"🈁","sa":"🈂️","u7121":"🈚️","u6307":"🈯️","u7981":"🈲","u7a7a":"🈳","u5408":"🈴","u6e80":"🈵","u6709":"🈶","u6708":"🈷️","u7533":"🈸","u5272":"🈹","u55b6":"🈺","ideograph_advantage":"🉐","accept":"🉑","cyclone":"🌀","foggy":"🌁","closed_umbrella":"🌂","night_with_stars":"🌃","sunrise_over_mountains":"🌄","sunrise":"🌅","city_sunset":"🌆","city_sunrise":"🌇","rainbow":"🌈","bridge_at_night":"🌉","ocean":"🌊","volcano":"🌋","milky_way":"🌌","earth_africa":"🌍","earth_americas":"🌎","earth_asia":"🌏","globe_with_meridians":"🌐","new_moon":"🌑","waxing_crescent_moon":"🌒","first_quarter_moon":"🌓","moon":"🌔","waxing_gibbous_moon":"🌔","full_moon":"🌕","waning_gibbous_moon":"🌖","last_quarter_moon":"🌗","waning_crescent_moon":"🌘","crescent_moon":"🌙","new_moon_with_face":"🌚","first_quarter_moon_with_face":"🌛","last_quarter_moon_with_face":"🌜","full_moon_with_face":"🌝","sun_with_face":"🌞","star2":"🌟","stars":"🌠","thermometer":"🌡","mostly_sunny":"🌤","sun_small_cloud":"🌤","barely_sunny":"🌥","sun_behind_cloud":"🌥","partly_sunny_rain":"🌦","sun_behind_rain_cloud":"🌦","rain_cloud":"🌧","snow_cloud":"🌨","lightning":"🌩","lightning_cloud":"🌩","tornado":"🌪","tornado_cloud":"🌪","fog":"🌫","wind_blowing_face":"🌬","hotdog":"🌭","taco":"🌮","burrito":"🌯","chestnut":"🌰","seedling":"🌱","evergreen_tree":"🌲","deciduous_tree":"🌳","palm_tree":"🌴","cactus":"🌵","hot_pepper":"🌶","tulip":"🌷","cherry_blossom":"🌸","rose":"🌹","hibiscus":"🌺","sunflower":"🌻","blossom":"🌼","corn":"🌽","ear_of_rice":"🌾","herb":"🌿","four_leaf_clover":"🍀","maple_leaf":"🍁","fallen_leaf":"🍂","leaves":"🍃","mushroom":"🍄","tomato":"🍅","eggplant":"🍆","grapes":"🍇","melon":"🍈","watermelon":"🍉","tangerine":"🍊","lemon":"🍋","banana":"🍌","pineapple":"🍍","apple":"🍎","green_apple":"🍏","pear":"🍐","peach":"🍑","cherries":"🍒","strawberry":"🍓","hamburger":"🍔","pizza":"🍕","meat_on_bone":"🍖","poultry_leg":"🍗","rice_cracker":"🍘","rice_ball":"🍙","rice":"🍚","curry":"🍛","ramen":"🍜","spaghetti":"🍝","bread":"🍞","fries":"🍟","sweet_potato":"🍠","dango":"🍡","oden":"🍢","sushi":"🍣","fried_shrimp":"🍤","fish_cake":"🍥","icecream":"🍦","shaved_ice":"🍧","ice_cream":"🍨","doughnut":"🍩","cookie":"🍪","chocolate_bar":"🍫","candy":"🍬","lollipop":"🍭","custard":"🍮","honey_pot":"🍯","cake":"🍰","bento":"🍱","stew":"🍲","egg":"🍳","fork_and_knife":"🍴","tea":"🍵","sake":"🍶","wine_glass":"🍷","cocktail":"🍸","tropical_drink":"🍹","beer":"🍺","beers":"🍻","baby_bottle":"🍼","knife_fork_plate":"🍽","champagne":"🍾","popcorn":"🍿","ribbon":"🎀","gift":"🎁","birthday":"🎂","jack_o_lantern":"🎃","christmas_tree":"🎄","santa":"🎅","fireworks":"🎆","sparkler":"🎇","balloon":"🎈","tada":"🎉","confetti_ball":"🎊","tanabata_tree":"🎋","crossed_flags":"🎌","bamboo":"🎍","dolls":"🎎","flags":"🎏","wind_chime":"🎐","rice_scene":"🎑","school_satchel":"🎒","mortar_board":"🎓","medal":"🎖","reminder_ribbon":"🎗","studio_microphone":"🎙","level_slider":"🎚","control_knobs":"🎛","film_frames":"🎞","admission_tickets":"🎟","carousel_horse":"🎠","ferris_wheel":"🎡","roller_coaster":"🎢","fishing_pole_and_fish":"🎣","microphone":"🎤","movie_camera":"🎥","cinema":"🎦","headphones":"🎧","art":"🎨","tophat":"🎩","circus_tent":"🎪","ticket":"🎫","clapper":"🎬","performing_arts":"🎭","video_game":"🎮","dart":"🎯","slot_machine":"🎰","8ball":"🎱","game_die":"🎲","bowling":"🎳","flower_playing_cards":"🎴","musical_note":"🎵","notes":"🎶","saxophone":"🎷","guitar":"🎸","musical_keyboard":"🎹","trumpet":"🎺","violin":"🎻","musical_score":"🎼","running_shirt_with_sash":"🎽","tennis":"🎾","ski":"🎿","basketball":"🏀","checkered_flag":"🏁","snowboarder":"🏂","runner":"🏃","running":"🏃","surfer":"🏄","sports_medal":"🏅","trophy":"🏆","horse_racing":"🏇","football":"🏈","rugby_football":"🏉","swimmer":"🏊","weight_lifter":"🏋","golfer":"🏌","racing_motorcycle":"🏍","racing_car":"🏎","cricket_bat_and_ball":"🏏","volleyball":"🏐","field_hockey_stick_and_ball":"🏑","ice_hockey_stick_and_puck":"🏒","table_tennis_paddle_and_ball":"🏓","snow_capped_mountain":"🏔","camping":"🏕","beach_with_umbrella":"🏖","building_construction":"🏗","house_buildings":"🏘","cityscape":"🏙","derelict_house_building":"🏚","classical_building":"🏛","desert":"🏜","desert_island":"🏝","national_park":"🏞","stadium":"🏟","house":"🏠","house_with_garden":"🏡","office":"🏢","post_office":"🏣","european_post_office":"🏤","hospital":"🏥","bank":"🏦","atm":"🏧","hotel":"🏨","love_hotel":"🏩","convenience_store":"🏪","school":"🏫","department_store":"🏬","factory":"🏭","izakaya_lantern":"🏮","lantern":"🏮","japanese_castle":"🏯","european_castle":"🏰","waving_white_flag":"🏳","waving_black_flag":"🏴","rosette":"🏵","label":"🏷","badminton_racquet_and_shuttlecock":"🏸","bow_and_arrow":"🏹","amphora":"🏺","skin-tone-2":"🏻","skin-tone-3":"🏼","skin-tone-4":"🏽","skin-tone-5":"🏾","skin-tone-6":"🏿","rat":"🐀","mouse2":"🐁","ox":"🐂","water_buffalo":"🐃","cow2":"🐄","tiger2":"🐅","leopard":"🐆","rabbit2":"🐇","cat2":"🐈","dragon":"🐉","crocodile":"🐊","whale2":"🐋","snail":"🐌","snake":"🐍","racehorse":"🐎","ram":"🐏","goat":"🐐","sheep":"🐑","monkey":"🐒","rooster":"🐓","chicken":"🐔","dog2":"🐕","pig2":"🐖","boar":"🐗","elephant":"🐘","octopus":"🐙","shell":"🐚","bug":"🐛","ant":"🐜","bee":"🐝","honeybee":"🐝","beetle":"🐞","fish":"🐟","tropical_fish":"🐠","blowfish":"🐡","turtle":"🐢","hatching_chick":"🐣","baby_chick":"🐤","hatched_chick":"🐥","bird":"🐦","penguin":"🐧","koala":"🐨","poodle":"🐩","dromedary_camel":"🐪","camel":"🐫","dolphin":"🐬","flipper":"🐬","mouse":"🐭","cow":"🐮","tiger":"🐯","rabbit":"🐰","cat":"🐱","dragon_face":"🐲","whale":"🐳","horse":"🐴","monkey_face":"🐵","dog":"🐶","pig":"🐷","frog":"🐸","hamster":"🐹","wolf":"🐺","bear":"🐻","panda_face":"🐼","pig_nose":"🐽","feet":"🐾","paw_prints":"🐾","chipmunk":"🐿","eyes":"👀","eye":"👁","ear":"👂","nose":"👃","lips":"👄","tongue":"👅","point_up_2":"👆","point_down":"👇","point_left":"👈","point_right":"👉","facepunch":"👊","punch":"👊","wave":"👋","ok_hand":"👌","+1":"👍","thumbsup":"👍","-1":"👎","thumbsdown":"👎","clap":"👏","open_hands":"👐","crown":"👑","womans_hat":"👒","eyeglasses":"👓","necktie":"👔","shirt":"👕","tshirt":"👕","jeans":"👖","dress":"👗","kimono":"👘","bikini":"👙","womans_clothes":"👚","purse":"👛","handbag":"👜","pouch":"👝","mans_shoe":"👞","shoe":"👞","athletic_shoe":"👟","high_heel":"👠","sandal":"👡","boot":"👢","footprints":"👣","bust_in_silhouette":"👤","busts_in_silhouette":"👥","boy":"👦","girl":"👧","man":"👨","woman":"👩","family":"👨‍👩‍👦","man-woman-boy":"👨‍👩‍👦","couple":"👫","man_and_woman_holding_hands":"👫","two_men_holding_hands":"👬","two_women_holding_hands":"👭","cop":"👮","dancers":"👯","bride_with_veil":"👰","person_with_blond_hair":"👱","man_with_gua_pi_mao":"👲","man_with_turban":"👳","older_man":"👴","older_woman":"👵","baby":"👶","construction_worker":"👷","princess":"👸","japanese_ogre":"👹","japanese_goblin":"👺","ghost":"👻","angel":"👼","alien":"👽","space_invader":"👾","imp":"👿","skull":"💀","information_desk_person":"💁","guardsman":"💂","dancer":"💃","lipstick":"💄","nail_care":"💅","massage":"💆","haircut":"💇","barber":"💈","syringe":"💉","pill":"💊","kiss":"💋","love_letter":"💌","ring":"💍","gem":"💎","couplekiss":"💏","bouquet":"💐","couple_with_heart":"💑","wedding":"💒","heartbeat":"💓","broken_heart":"💔","two_hearts":"💕","sparkling_heart":"💖","heartpulse":"💗","cupid":"💘","blue_heart":"💙","green_heart":"💚","yellow_heart":"💛","purple_heart":"💜","gift_heart":"💝","revolving_hearts":"💞","heart_decoration":"💟","diamond_shape_with_a_dot_inside":"💠","bulb":"💡","anger":"💢","bomb":"💣","zzz":"💤","boom":"💥","collision":"💥","sweat_drops":"💦","droplet":"💧","dash":"💨","hankey":"💩","poop":"💩","shit":"💩","muscle":"💪","dizzy":"💫","speech_balloon":"💬","thought_balloon":"💭","white_flower":"💮","moneybag":"💰","currency_exchange":"💱","heavy_dollar_sign":"💲","credit_card":"💳","yen":"💴","dollar":"💵","euro":"💶","pound":"💷","money_with_wings":"💸","chart":"💹","seat":"💺","computer":"💻","briefcase":"💼","minidisc":"💽","floppy_disk":"💾","cd":"💿","dvd":"📀","file_folder":"📁","open_file_folder":"📂","page_with_curl":"📃","page_facing_up":"📄","date":"📅","calendar":"📆","card_index":"📇","chart_with_upwards_trend":"📈","chart_with_downwards_trend":"📉","bar_chart":"📊","clipboard":"📋","pushpin":"📌","round_pushpin":"📍","paperclip":"📎","straight_ruler":"📏","triangular_ruler":"📐","bookmark_tabs":"📑","ledger":"📒","notebook":"📓","notebook_with_decorative_cover":"📔","closed_book":"📕","book":"📖","open_book":"📖","green_book":"📗","blue_book":"📘","orange_book":"📙","books":"📚","name_badge":"📛","scroll":"📜","memo":"📝","pencil":"📝","telephone_receiver":"📞","pager":"📟","fax":"📠","satellite":"🛰","loudspeaker":"📢","mega":"📣","outbox_tray":"📤","inbox_tray":"📥","package":"📦","e-mail":"📧","incoming_envelope":"📨","envelope_with_arrow":"📩","mailbox_closed":"📪","mailbox":"📫","mailbox_with_mail":"📬","mailbox_with_no_mail":"📭","postbox":"📮","postal_horn":"📯","newspaper":"📰","iphone":"📱","calling":"📲","vibration_mode":"📳","mobile_phone_off":"📴","no_mobile_phones":"📵","signal_strength":"📶","camera":"📷","camera_with_flash":"📸","video_camera":"📹","tv":"📺","radio":"📻","vhs":"📼","film_projector":"📽","prayer_beads":"📿","twisted_rightwards_arrows":"🔀","repeat":"🔁","repeat_one":"🔂","arrows_clockwise":"🔃","arrows_counterclockwise":"🔄","low_brightness":"🔅","high_brightness":"🔆","mute":"🔇","speaker":"🔈","sound":"🔉","loud_sound":"🔊","battery":"🔋","electric_plug":"🔌","mag":"🔍","mag_right":"🔎","lock_with_ink_pen":"🔏","closed_lock_with_key":"🔐","key":"🔑","lock":"🔒","unlock":"🔓","bell":"🔔","no_bell":"🔕","bookmark":"🔖","link":"🔗","radio_button":"🔘","back":"🔙","end":"🔚","on":"🔛","soon":"🔜","top":"🔝","underage":"🔞","keycap_ten":"🔟","capital_abcd":"🔠","abcd":"🔡","symbols":"🔣","abc":"🔤","fire":"🔥","flashlight":"🔦","wrench":"🔧","hammer":"🔨","nut_and_bolt":"🔩","hocho":"🔪","knife":"🔪","gun":"🔫","microscope":"🔬","telescope":"🔭","crystal_ball":"🔮","six_pointed_star":"🔯","beginner":"🔰","trident":"🔱","black_square_button":"🔲","white_square_button":"🔳","red_circle":"🔴","large_blue_circle":"🔵","large_orange_diamond":"🔶","large_blue_diamond":"🔷","small_orange_diamond":"🔸","small_blue_diamond":"🔹","small_red_triangle":"🔺","small_red_triangle_down":"🔻","arrow_up_small":"🔼","arrow_down_small":"🔽","om_symbol":"🕉","dove_of_peace":"🕊","kaaba":"🕋","mosque":"🕌","synagogue":"🕍","menorah_with_nine_branches":"🕎","clock1":"🕐","clock2":"🕑","clock3":"🕒","clock4":"🕓","clock5":"🕔","clock6":"🕕","clock7":"🕖","clock8":"🕗","clock9":"🕘","clock10":"🕙","clock11":"🕚","clock12":"🕛","clock130":"🕜","clock230":"🕝","clock330":"🕞","clock430":"🕟","clock530":"🕠","clock630":"🕡","clock730":"🕢","clock830":"🕣","clock930":"🕤","clock1030":"🕥","clock1130":"🕦","clock1230":"🕧","candle":"🕯","mantelpiece_clock":"🕰","hole":"🕳","man_in_business_suit_levitating":"🕴","sleuth_or_spy":"🕵","dark_sunglasses":"🕶","spider":"🕷","spider_web":"🕸","joystick":"🕹","linked_paperclips":"🖇","lower_left_ballpoint_pen":"🖊","lower_left_fountain_pen":"🖋","lower_left_paintbrush":"🖌","lower_left_crayon":"🖍","raised_hand_with_fingers_splayed":"🖐","middle_finger":"🖕","reversed_hand_with_middle_finger_extended":"🖕","spock-hand":"🖖","desktop_computer":"🖥","printer":"🖨","three_button_mouse":"🖱","trackball":"🖲","frame_with_picture":"🖼","card_index_dividers":"🗂","card_file_box":"🗃","file_cabinet":"🗄","wastebasket":"🗑","spiral_note_pad":"🗒","spiral_calendar_pad":"🗓","compression":"🗜","old_key":"🗝","rolled_up_newspaper":"🗞","dagger_knife":"🗡","speaking_head_in_silhouette":"🗣","left_speech_bubble":"🗨","right_anger_bubble":"🗯","ballot_box_with_ballot":"🗳","world_map":"🗺","mount_fuji":"🗻","tokyo_tower":"🗼","statue_of_liberty":"🗽","japan":"🗾","moyai":"🗿","grinning":"😀","grin":"😁","joy":"😂","smiley":"😃","smile":"😄","sweat_smile":"😅","laughing":"😆","satisfied":"😆","innocent":"😇","smiling_imp":"😈","wink":"😉","blush":"😊","yum":"😋","relieved":"😌","heart_eyes":"😍","sunglasses":"😎","smirk":"😏","neutral_face":"😐","expressionless":"😑","unamused":"😒","sweat":"😓","pensive":"😔","confused":"😕","confounded":"😖","kissing":"😗","kissing_heart":"😘","kissing_smiling_eyes":"😙","kissing_closed_eyes":"😚","stuck_out_tongue":"😛","stuck_out_tongue_winking_eye":"😜","stuck_out_tongue_closed_eyes":"😝","disappointed":"😞","worried":"😟","angry":"😠","rage":"😡","cry":"😢","persevere":"😣","triumph":"😤","disappointed_relieved":"😥","frowning":"😦","anguished":"😧","fearful":"😨","weary":"😩","sleepy":"😪","tired_face":"😫","grimacing":"😬","sob":"😭","open_mouth":"😮","hushed":"😯","cold_sweat":"😰","scream":"😱","astonished":"😲","flushed":"😳","sleeping":"😴","dizzy_face":"😵","no_mouth":"😶","mask":"😷","smile_cat":"😸","joy_cat":"😹","smiley_cat":"😺","heart_eyes_cat":"😻","smirk_cat":"😼","kissing_cat":"😽","pouting_cat":"😾","crying_cat_face":"😿","scream_cat":"🙀","slightly_frowning_face":"🙁","slightly_smiling_face":"🙂","upside_down_face":"🙃","face_with_rolling_eyes":"🙄","no_good":"🙅","ok_woman":"🙆","bow":"🙇","see_no_evil":"🙈","hear_no_evil":"🙉","speak_no_evil":"🙊","raising_hand":"🙋","raised_hands":"🙌","person_frowning":"🙍","person_with_pouting_face":"🙎","pray":"🙏","rocket":"🚀","helicopter":"🚁","steam_locomotive":"🚂","railway_car":"🚃","bullettrain_side":"🚄","bullettrain_front":"🚅","train2":"🚆","metro":"🚇","light_rail":"🚈","station":"🚉","tram":"🚊","train":"🚋","bus":"🚌","oncoming_bus":"🚍","trolleybus":"🚎","busstop":"🚏","minibus":"🚐","ambulance":"🚑","fire_engine":"🚒","police_car":"🚓","oncoming_police_car":"🚔","taxi":"🚕","oncoming_taxi":"🚖","car":"🚗","red_car":"🚗","oncoming_automobile":"🚘","blue_car":"🚙","truck":"🚚","articulated_lorry":"🚛","tractor":"🚜","monorail":"🚝","mountain_railway":"🚞","suspension_railway":"🚟","mountain_cableway":"🚠","aerial_tramway":"🚡","ship":"🚢","rowboat":"🚣","speedboat":"🚤","traffic_light":"🚥","vertical_traffic_light":"🚦","construction":"🚧","rotating_light":"🚨","triangular_flag_on_post":"🚩","door":"🚪","no_entry_sign":"🚫","smoking":"🚬","no_smoking":"🚭","put_litter_in_its_place":"🚮","do_not_litter":"🚯","potable_water":"🚰","non-potable_water":"🚱","bike":"🚲","no_bicycles":"🚳","bicyclist":"🚴","mountain_bicyclist":"🚵","walking":"🚶","no_pedestrians":"🚷","children_crossing":"🚸","mens":"🚹","womens":"🚺","restroom":"🚻","baby_symbol":"🚼","toilet":"🚽","wc":"🚾","shower":"🚿","bath":"🛀","bathtub":"🛁","passport_control":"🛂","customs":"🛃","baggage_claim":"🛄","left_luggage":"🛅","couch_and_lamp":"🛋","sleeping_accommodation":"🛌","shopping_bags":"🛍","bellhop_bell":"🛎","bed":"🛏","place_of_worship":"🛐","hammer_and_wrench":"🛠","shield":"🛡","oil_drum":"🛢","motorway":"🛣","railway_track":"🛤","motor_boat":"🛥","small_airplane":"🛩","airplane_departure":"🛫","airplane_arriving":"🛬","passenger_ship":"🛳","zipper_mouth_face":"🤐","money_mouth_face":"🤑","face_with_thermometer":"🤒","nerd_face":"🤓","thinking_face":"🤔","face_with_head_bandage":"🤕","robot_face":"🤖","hugging_face":"🤗","the_horns":"🤘","sign_of_the_horns":"🤘","crab":"🦀","lion_face":"🦁","scorpion":"🦂","turkey":"🦃","unicorn_face":"🦄","cheese_wedge":"🧀","hash":"#️⃣","keycap_star":"*⃣","zero":"0️⃣","one":"1️⃣","two":"2️⃣","three":"3️⃣","four":"4️⃣","five":"5️⃣","six":"6️⃣","seven":"7️⃣","eight":"8️⃣","nine":"9️⃣","flag-ac":"🇦🇨","flag-ad":"🇦🇩","flag-ae":"🇦🇪","flag-af":"🇦🇫","flag-ag":"🇦🇬","flag-ai":"🇦🇮","flag-al":"🇦🇱","flag-am":"🇦🇲","flag-ao":"🇦🇴","flag-aq":"🇦🇶","flag-ar":"🇦🇷","flag-as":"🇦🇸","flag-at":"🇦🇹","flag-au":"🇦🇺","flag-aw":"🇦🇼","flag-ax":"🇦🇽","flag-az":"🇦🇿","flag-ba":"🇧🇦","flag-bb":"🇧🇧","flag-bd":"🇧🇩","flag-be":"🇧🇪","flag-bf":"🇧🇫","flag-bg":"🇧🇬","flag-bh":"🇧🇭","flag-bi":"🇧🇮","flag-bj":"🇧🇯","flag-bl":"🇧🇱","flag-bm":"🇧🇲","flag-bn":"🇧🇳","flag-bo":"🇧🇴","flag-bq":"🇧🇶","flag-br":"🇧🇷","flag-bs":"🇧🇸","flag-bt":"🇧🇹","flag-bv":"🇧🇻","flag-bw":"🇧🇼","flag-by":"🇧🇾","flag-bz":"🇧🇿","flag-ca":"🇨🇦","flag-cc":"🇨🇨","flag-cd":"🇨🇩","flag-cf":"🇨🇫","flag-cg":"🇨🇬","flag-ch":"🇨🇭","flag-ci":"🇨🇮","flag-ck":"🇨🇰","flag-cl":"🇨🇱","flag-cm":"🇨🇲","flag-cn":"🇨🇳","cn":"🇨🇳","flag-co":"🇨🇴","flag-cp":"🇨🇵","flag-cr":"🇨🇷","flag-cu":"🇨🇺","flag-cv":"🇨🇻","flag-cw":"🇨🇼","flag-cx":"🇨🇽","flag-cy":"🇨🇾","flag-cz":"🇨🇿","flag-de":"🇩🇪","de":"🇩🇪","flag-dg":"🇩🇬","flag-dj":"🇩🇯","flag-dk":"🇩🇰","flag-dm":"🇩🇲","flag-do":"🇩🇴","flag-dz":"🇩🇿","flag-ea":"🇪🇦","flag-ec":"🇪🇨","flag-ee":"🇪🇪","flag-eg":"🇪🇬","flag-eh":"🇪🇭","flag-er":"🇪🇷","flag-es":"🇪🇸","es":"🇪🇸","flag-et":"🇪🇹","flag-eu":"🇪🇺","flag-fi":"🇫🇮","flag-fj":"🇫🇯","flag-fk":"🇫🇰","flag-fm":"🇫🇲","flag-fo":"🇫🇴","flag-fr":"🇫🇷","fr":"🇫🇷","flag-ga":"🇬🇦","flag-gb":"🇬🇧","gb":"🇬🇧","uk":"🇬🇧","flag-gd":"🇬🇩","flag-ge":"🇬🇪","flag-gf":"🇬🇫","flag-gg":"🇬🇬","flag-gh":"🇬🇭","flag-gi":"🇬🇮","flag-gl":"🇬🇱","flag-gm":"🇬🇲","flag-gn":"🇬🇳","flag-gp":"🇬🇵","flag-gq":"🇬🇶","flag-gr":"🇬🇷","flag-gs":"🇬🇸","flag-gt":"🇬🇹","flag-gu":"🇬🇺","flag-gw":"🇬🇼","flag-gy":"🇬🇾","flag-hk":"🇭🇰","flag-hm":"🇭🇲","flag-hn":"🇭🇳","flag-hr":"🇭🇷","flag-ht":"🇭🇹","flag-hu":"🇭🇺","flag-ic":"🇮🇨","flag-id":"🇮🇩","flag-ie":"🇮🇪","flag-il":"🇮🇱","flag-im":"🇮🇲","flag-in":"🇮🇳","flag-io":"🇮🇴","flag-iq":"🇮🇶","flag-ir":"🇮🇷","flag-is":"🇮🇸","flag-it":"🇮🇹","it":"🇮🇹","flag-je":"🇯🇪","flag-jm":"🇯🇲","flag-jo":"🇯🇴","flag-jp":"🇯🇵","jp":"🇯🇵","flag-ke":"🇰🇪","flag-kg":"🇰🇬","flag-kh":"🇰🇭","flag-ki":"🇰🇮","flag-km":"🇰🇲","flag-kn":"🇰🇳","flag-kp":"🇰🇵","flag-kr":"🇰🇷","kr":"🇰🇷","flag-kw":"🇰🇼","flag-ky":"🇰🇾","flag-kz":"🇰🇿","flag-la":"🇱🇦","flag-lb":"🇱🇧","flag-lc":"🇱🇨","flag-li":"🇱🇮","flag-lk":"🇱🇰","flag-lr":"🇱🇷","flag-ls":"🇱🇸","flag-lt":"🇱🇹","flag-lu":"🇱🇺","flag-lv":"🇱🇻","flag-ly":"🇱🇾","flag-ma":"🇲🇦","flag-mc":"🇲🇨","flag-md":"🇲🇩","flag-me":"🇲🇪","flag-mf":"🇲🇫","flag-mg":"🇲🇬","flag-mh":"🇲🇭","flag-mk":"🇲🇰","flag-ml":"🇲🇱","flag-mm":"🇲🇲","flag-mn":"🇲🇳","flag-mo":"🇲🇴","flag-mp":"🇲🇵","flag-mq":"🇲🇶","flag-mr":"🇲🇷","flag-ms":"🇲🇸","flag-mt":"🇲🇹","flag-mu":"🇲🇺","flag-mv":"🇲🇻","flag-mw":"🇲🇼","flag-mx":"🇲🇽","flag-my":"🇲🇾","flag-mz":"🇲🇿","flag-na":"🇳🇦","flag-nc":"🇳🇨","flag-ne":"🇳🇪","flag-nf":"🇳🇫","flag-ng":"🇳🇬","flag-ni":"🇳🇮","flag-nl":"🇳🇱","flag-no":"🇳🇴","flag-np":"🇳🇵","flag-nr":"🇳🇷","flag-nu":"🇳🇺","flag-nz":"🇳🇿","flag-om":"🇴🇲","flag-pa":"🇵🇦","flag-pe":"🇵🇪","flag-pf":"🇵🇫","flag-pg":"🇵🇬","flag-ph":"🇵🇭","flag-pk":"🇵🇰","flag-pl":"🇵🇱","flag-pm":"🇵🇲","flag-pn":"🇵🇳","flag-pr":"🇵🇷","flag-ps":"🇵🇸","flag-pt":"🇵🇹","flag-pw":"🇵🇼","flag-py":"🇵🇾","flag-qa":"🇶🇦","flag-re":"🇷🇪","flag-ro":"🇷🇴","flag-rs":"🇷🇸","flag-ru":"🇷🇺","ru":"🇷🇺","flag-rw":"🇷🇼","flag-sa":"🇸🇦","flag-sb":"🇸🇧","flag-sc":"🇸🇨","flag-sd":"🇸🇩","flag-se":"🇸🇪","flag-sg":"🇸🇬","flag-sh":"🇸🇭","flag-si":"🇸🇮","flag-sj":"🇸🇯","flag-sk":"🇸🇰","flag-sl":"🇸🇱","flag-sm":"🇸🇲","flag-sn":"🇸🇳","flag-so":"🇸🇴","flag-sr":"🇸🇷","flag-ss":"🇸🇸","flag-st":"🇸🇹","flag-sv":"🇸🇻","flag-sx":"🇸🇽","flag-sy":"🇸🇾","flag-sz":"🇸🇿","flag-ta":"🇹🇦","flag-tc":"🇹🇨","flag-td":"🇹🇩","flag-tf":"🇹🇫","flag-tg":"🇹🇬","flag-th":"🇹🇭","flag-tj":"🇹🇯","flag-tk":"🇹🇰","flag-tl":"🇹🇱","flag-tm":"🇹🇲","flag-tn":"🇹🇳","flag-to":"🇹🇴","flag-tr":"🇹🇷","flag-tt":"🇹🇹","flag-tv":"🇹🇻","flag-tw":"🇹🇼","flag-tz":"🇹🇿","flag-ua":"🇺🇦","flag-ug":"🇺🇬","flag-um":"🇺🇲","flag-us":"🇺🇸","us":"🇺🇸","flag-uy":"🇺🇾","flag-uz":"🇺🇿","flag-va":"🇻🇦","flag-vc":"🇻🇨","flag-ve":"🇻🇪","flag-vg":"🇻🇬","flag-vi":"🇻🇮","flag-vn":"🇻🇳","flag-vu":"🇻🇺","flag-wf":"🇼🇫","flag-ws":"🇼🇸","flag-xk":"🇽🇰","flag-ye":"🇾🇪","flag-yt":"🇾🇹","flag-za":"🇿🇦","flag-zm":"🇿🇲","flag-zw":"🇿🇼","man-man-boy":"👨‍👨‍👦","man-man-boy-boy":"👨‍👨‍👦‍👦","man-man-girl":"👨‍👨‍👧","man-man-girl-boy":"👨‍👨‍👧‍👦","man-man-girl-girl":"👨‍👨‍👧‍👧","man-woman-boy-boy":"👨‍👩‍👦‍👦","man-woman-girl":"👨‍👩‍👧","man-woman-girl-boy":"👨‍👩‍👧‍👦","man-woman-girl-girl":"👨‍👩‍👧‍👧","man-heart-man":"👨‍❤️‍👨","man-kiss-man":"👨‍❤️‍💋‍👨","woman-woman-boy":"👩‍👩‍👦","woman-woman-boy-boy":"👩‍👩‍👦‍👦","woman-woman-girl":"👩‍👩‍👧","woman-woman-girl-boy":"👩‍👩‍👧‍👦","woman-woman-girl-girl":"👩‍👩‍👧‍👧","woman-heart-woman":"👩‍❤️‍👩","woman-kiss-woman":"👩‍❤️‍💋‍👩"}

/***/ }),
/* 511 */
/***/ (function(module, exports) {

module.exports = {"topLevel":{"dependancies":"dependencies","dependecies":"dependencies","depdenencies":"dependencies","devEependencies":"devDependencies","depends":"dependencies","dev-dependencies":"devDependencies","devDependences":"devDependencies","devDepenencies":"devDependencies","devdependencies":"devDependencies","repostitory":"repository","repo":"repository","prefereGlobal":"preferGlobal","hompage":"homepage","hampage":"homepage","autohr":"author","autor":"author","contributers":"contributors","publicationConfig":"publishConfig","script":"scripts"},"bugs":{"web":"url","name":"url"},"script":{"server":"start","tests":"test"}}

/***/ }),
/* 512 */
/***/ (function(module, exports) {

module.exports = {"repositories":"'repositories' (plural) Not supported. Please pick one as the 'repository' field","missingRepository":"No repository field.","brokenGitUrl":"Probably broken git url: %s","nonObjectScripts":"scripts must be an object","nonStringScript":"script values must be string commands","nonArrayFiles":"Invalid 'files' member","invalidFilename":"Invalid filename in 'files' list: %s","nonArrayBundleDependencies":"Invalid 'bundleDependencies' list. Must be array of package names","nonStringBundleDependency":"Invalid bundleDependencies member: %s","nonDependencyBundleDependency":"Non-dependency in bundleDependencies: %s","nonObjectDependencies":"%s field must be an object","nonStringDependency":"Invalid dependency: %s %s","deprecatedArrayDependencies":"specifying %s as array is deprecated","deprecatedModules":"modules field is deprecated","nonArrayKeywords":"keywords should be an array of strings","nonStringKeyword":"keywords should be an array of strings","conflictingName":"%s is also the name of a node core module.","nonStringDescription":"'description' field should be a string","missingDescription":"No description","missingReadme":"No README data","missingLicense":"No license field.","nonEmailUrlBugsString":"Bug string field must be url, email, or {email,url}","nonUrlBugsUrlField":"bugs.url field must be a string url. Deleted.","nonEmailBugsEmailField":"bugs.email field must be a string email. Deleted.","emptyNormalizedBugs":"Normalized value of bugs field is an empty object. Deleted.","nonUrlHomepage":"homepage field must be a string url. Deleted.","invalidLicense":"license should be a valid SPDX license expression","typo":"%s should probably be %s."}

/***/ }),
/* 513 */
/***/ (function(module, exports) {

function webpackEmptyContext(req) {
	throw new Error("Cannot find module '" + req + "'.");
}
webpackEmptyContext.keys = function() { return []; };
webpackEmptyContext.resolve = webpackEmptyContext;
module.exports = webpackEmptyContext;
webpackEmptyContext.id = 513;

/***/ }),
/* 514 */
/***/ (function(module, exports) {

module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["exe"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["prc","pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["3gpp"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":["mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":["wav"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["ra"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/otf":["otf"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["bmp"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":["rtf"],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":["xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}

/***/ }),
/* 515 */
/***/ (function(module, exports, __webpack_require__) {

var Utils = __webpack_require__(107);
var fs = Utils.FileSystem.require(),
	pth = __webpack_require__(0);

fs.existsSync = fs.existsSync || pth.existsSync;

var ZipEntry = __webpack_require__(265),
	ZipFile = __webpack_require__(523);

var isWin = /^win/.test(process.platform);


module.exports = function (/*String*/input) {
	var _zip = undefined,
		_filename = "";

	if (input && typeof input === "string") { // load zip file
		if (fs.existsSync(input)) {
			_filename = input;
			_zip = new ZipFile(input, Utils.Constants.FILE);
		} else {
			throw Utils.Errors.INVALID_FILENAME;
		}
	} else if (input && Buffer.isBuffer(input)) { // load buffer
		_zip = new ZipFile(input, Utils.Constants.BUFFER);
	} else { // create new zip file
		_zip = new ZipFile(null, Utils.Constants.NONE);
	}

	function sanitize(prefix, name) {
		prefix = pth.resolve(pth.normalize(prefix));
		var parts = name.split('/');
		for (var i = 0, l = parts.length; i < l; i++) {
			var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
			if (path.indexOf(prefix) === 0) {
				return path;
			}
		}
		return pth.normalize(pth.join(prefix, pth.basename(name)));
	}

	function getEntry(/*Object*/entry) {
		if (entry && _zip) {
			var item;
			// If entry was given as a file name
			if (typeof entry === "string")
				item = _zip.getEntry(entry);
			// if entry was given as a ZipEntry object
			if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined")
				item = _zip.getEntry(entry.entryName);

			if (item) {
				return item;
			}
		}
		return null;
	}

	return {
		/**
		 * Extracts the given entry from the archive and returns the content as a Buffer object
		 * @param entry ZipEntry object or String with the full path of the entry
		 *
		 * @return Buffer or Null in case of error
		 */
		readFile: function (/*Object*/entry) {
			var item = getEntry(entry);
			return item && item.getData() || null;
		},

		/**
		 * Asynchronous readFile
		 * @param entry ZipEntry object or String with the full path of the entry
		 * @param callback
		 *
		 * @return Buffer or Null in case of error
		 */
		readFileAsync: function (/*Object*/entry, /*Function*/callback) {
			var item = getEntry(entry);
			if (item) {
				item.getDataAsync(callback);
			} else {
				callback(null, "getEntry failed for:" + entry)
			}
		},

		/**
		 * Extracts the given entry from the archive and returns the content as plain text in the given encoding
		 * @param entry ZipEntry object or String with the full path of the entry
		 * @param encoding Optional. If no encoding is specified utf8 is used
		 *
		 * @return String
		 */
		readAsText: function (/*Object*/entry, /*String - Optional*/encoding) {
			var item = getEntry(entry);
			if (item) {
				var data = item.getData();
				if (data && data.length) {
					return data.toString(encoding || "utf8");
				}
			}
			return "";
		},

		/**
		 * Asynchronous readAsText
		 * @param entry ZipEntry object or String with the full path of the entry
		 * @param callback
		 * @param encoding Optional. If no encoding is specified utf8 is used
		 *
		 * @return String
		 */
		readAsTextAsync: function (/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) {
			var item = getEntry(entry);
			if (item) {
				item.getDataAsync(function (data) {
					if (data && data.length) {
						callback(data.toString(encoding || "utf8"));
					} else {
						callback("");
					}
				})
			} else {
				callback("");
			}
		},

		/**
		 * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
		 *
		 * @param entry
		 */
		deleteFile: function (/*Object*/entry) { // @TODO: test deleteFile
			var item = getEntry(entry);
			if (item) {
				_zip.deleteEntry(item.entryName);
			}
		},

		/**
		 * Adds a comment to the zip. The zip must be rewritten after adding the comment.
		 *
		 * @param comment
		 */
		addZipComment: function (/*String*/comment) { // @TODO: test addZipComment
			_zip.comment = comment;
		},

		/**
		 * Returns the zip comment
		 *
		 * @return String
		 */
		getZipComment: function () {
			return _zip.comment || '';
		},

		/**
		 * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
		 * The comment cannot exceed 65535 characters in length
		 *
		 * @param entry
		 * @param comment
		 */
		addZipEntryComment: function (/*Object*/entry, /*String*/comment) {
			var item = getEntry(entry);
			if (item) {
				item.comment = comment;
			}
		},

		/**
		 * Returns the comment of the specified entry
		 *
		 * @param entry
		 * @return String
		 */
		getZipEntryComment: function (/*Object*/entry) {
			var item = getEntry(entry);
			if (item) {
				return item.comment || '';
			}
			return ''
		},

		/**
		 * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
		 *
		 * @param entry
		 * @param content
		 */
		updateFile: function (/*Object*/entry, /*Buffer*/content) {
			var item = getEntry(entry);
			if (item) {
				item.setData(content);
			}
		},

		/**
		 * Adds a file from the disk to the archive
		 *
		 * @param localPath File to add to zip
		 * @param zipPath Optional path inside the zip
		 * @param zipName Optional name for the file
		 */
		addLocalFile: function (/*String*/localPath, /*String*/zipPath, /*String*/zipName) {
			if (fs.existsSync(localPath)) {
				if (zipPath) {
					zipPath = zipPath.split("\\").join("/");
					if (zipPath.charAt(zipPath.length - 1) !== "/") {
						zipPath += "/";
					}
				} else {
					zipPath = "";
				}
				var p = localPath.split("\\").join("/").split("/").pop();

				if (zipName) {
					this.addFile(zipPath + zipName, fs.readFileSync(localPath), "", 0)
				} else {
					this.addFile(zipPath + p, fs.readFileSync(localPath), "", 0)
				}
			} else {
				throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
			}
		},

		/**
		 * Adds a local directory and all its nested files and directories to the archive
		 *
		 * @param localPath
		 * @param zipPath optional path inside zip
		 * @param filter optional RegExp or Function if files match will
		 *               be included.
		 */
		addLocalFolder: function (/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) {
			if (filter === undefined) {
				filter = function () {
					return true;
				};
			} else if (filter instanceof RegExp) {
				filter = function (filter) {
					return function (filename) {
						return filter.test(filename);
					}
				}(filter);
			}

			if (zipPath) {
				zipPath = zipPath.split("\\").join("/");
				if (zipPath.charAt(zipPath.length - 1) !== "/") {
					zipPath += "/";
				}
			} else {
				zipPath = "";
			}
			// normalize the path first
			localPath = pth.normalize(localPath);
			localPath = localPath.split("\\").join("/"); //windows fix
			if (localPath.charAt(localPath.length - 1) !== "/")
				localPath += "/";

			if (fs.existsSync(localPath)) {

				var items = Utils.findFiles(localPath),
					self = this;

				if (items.length) {
					items.forEach(function (path) {
						var p = path.split("\\").join("/").replace(new RegExp(localPath.replace(/(\(|\))/g, '\\$1'), 'i'), ""); //windows fix
						if (filter(p)) {
							if (p.charAt(p.length - 1) !== "/") {
								self.addFile(zipPath + p, fs.readFileSync(path), "", 0)
							} else {
								self.addFile(zipPath + p, Buffer.alloc(0), "", 0)
							}
						}
					});
				}
			} else {
				throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
			}
		},

		/**
		 * Allows you to create a entry (file or directory) in the zip file.
		 * If you want to create a directory the entryName must end in / and a null buffer should be provided.
		 * Comment and attributes are optional
		 *
		 * @param entryName
		 * @param content
		 * @param comment
		 * @param attr
		 */
		addFile: function (/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) {
			var entry = new ZipEntry();
			entry.entryName = entryName;
			entry.comment = comment || "";

			if (!attr) {
				if (entry.isDirectory) {
					attr = (0o40755 << 16) | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)
				} else {
					attr = 0o644 << 16; // permissions -r-wr--r--
				}
			}

			entry.attr = attr;

			entry.setData(content);
			_zip.setEntry(entry);
		},

		/**
		 * Returns an array of ZipEntry objects representing the files and folders inside the archive
		 *
		 * @return Array
		 */
		getEntries: function () {
			if (_zip) {
				return _zip.entries;
			} else {
				return [];
			}
		},

		/**
		 * Returns a ZipEntry object representing the file or folder specified by ``name``.
		 *
		 * @param name
		 * @return ZipEntry
		 */
		getEntry: function (/*String*/name) {
			return getEntry(name);
		},

		/**
		 * Extracts the given entry to the given targetPath
		 * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
		 *
		 * @param entry ZipEntry object or String with the full path of the entry
		 * @param targetPath Target folder where to write the file
		 * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
		 *                          will be created in targetPath as well. Default is TRUE
		 * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
		 *                  Default is FALSE
		 *
		 * @return Boolean
		 */
		extractEntryTo: function (/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) {
			overwrite = overwrite || false;
			maintainEntryPath = typeof maintainEntryPath === "undefined" ? true : maintainEntryPath;

			var item = getEntry(entry);
			if (!item) {
				throw Utils.Errors.NO_ENTRY;
			}

			var entryName = item.entryName;

			var target = sanitize(targetPath, pth.resolve(targetPath, maintainEntryPath ? entryName : pth.basename(entryName)));

			if (item.isDirectory) {
				target = pth.resolve(target, "..");
				var children = _zip.getEntryChildren(item);
				children.forEach(function (child) {
					if (child.isDirectory) return;
					var content = child.getData();
					if (!content) {
						throw Utils.Errors.CANT_EXTRACT_FILE;
					}
					var childName = sanitize(targetPath, child.entryName);

					Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? childName : childName.substr(entryName.length)), content, overwrite);
				});
				return true;
			}

			var content = item.getData();
			if (!content) throw Utils.Errors.CANT_EXTRACT_FILE;

			if (fs.existsSync(target) && !overwrite) {
				throw Utils.Errors.CANT_OVERRIDE;
			}
			Utils.writeFileTo(target, content, overwrite);

			return true;
		},

		/**
		 * Test the archive
		 *
		 */
		test: function () {
			if (!_zip) {
				return false;
			}

			for (var entry in _zip.entries) {
				try {
					if (entry.isDirectory) {
						continue;
					}
					var content = _zip.entries[entry].getData();
					if (!content) {
						return false;
					}
				} catch (err) {
					return false;
				}
			}
			return true;
		},

		/**
		 * Extracts the entire archive to the given location
		 *
		 * @param targetPath Target location
		 * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
		 *                  Default is FALSE
		 */
		extractAllTo: function (/*String*/targetPath, /*Boolean*/overwrite) {
			overwrite = overwrite || false;
			if (!_zip) {
				throw Utils.Errors.NO_ZIP;
			}
			_zip.entries.forEach(function (entry) {
				var entryName = sanitize(targetPath, entry.entryName.toString());
				if (entry.isDirectory) {
					Utils.makeDir(entryName);
					return;
				}
				var content = entry.getData();
				if (!content) {
					throw Utils.Errors.CANT_EXTRACT_FILE;
				}
				Utils.writeFileTo(entryName, content, overwrite);
				fs.utimesSync(entryName, entry.header.time, entry.header.time)
			})
		},

		/**
		 * Asynchronous extractAllTo
		 *
		 * @param targetPath Target location
		 * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
		 *                  Default is FALSE
		 * @param callback
		 */
		extractAllToAsync: function (/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) {
			if (!callback) {
				callback = function() {}
			}
			overwrite = overwrite || false;
			if (!_zip) {
				callback(new Error(Utils.Errors.NO_ZIP));
				return;
			}

			var entries = _zip.entries;
			var i = entries.length;
			entries.forEach(function (entry) {
				if (i <= 0) return; // Had an error already

				var entryName = pth.normalize(entry.entryName.toString());

				if (entry.isDirectory) {
					Utils.makeDir(sanitize(targetPath, entryName));
					if (--i === 0)
						callback(undefined);
					return;
				}
				entry.getDataAsync(function (content) {
					if (i <= 0) return;
					if (!content) {
						i = 0;
						callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
						return;
					}

					Utils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {
						fs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);
						if (i <= 0) return;
						if (!succ) {
							i = 0;
							callback(new Error('Unable to write'));
							return;
						}
						if (--i === 0)
							callback(undefined);
					});
				});
			})
		},

		/**
		 * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
		 *
		 * @param targetFileName
		 * @param callback
		 */
		writeZip: function (/*String*/targetFileName, /*Function*/callback) {
			if (arguments.length === 1) {
				if (typeof targetFileName === "function") {
					callback = targetFileName;
					targetFileName = "";
				}
			}

			if (!targetFileName && _filename) {
				targetFileName = _filename;
			}
			if (!targetFileName) return;

			var zipData = _zip.compressToBuffer();
			if (zipData) {
				var ok = Utils.writeFileTo(targetFileName, zipData, true);
				if (typeof callback === 'function') callback(!ok ? new Error("failed") : null, "");
			}
		},

		/**
		 * Returns the content of the entire zip file as a Buffer object
		 *
		 * @return Buffer
		 */
		toBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {
			this.valueOf = 2;
			if (typeof onSuccess === "function") {
				_zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
				return null;
			}
			return _zip.compressToBuffer()
		}
	}
};


/***/ }),
/* 516 */
/***/ (function(module, exports, __webpack_require__) {

var Utils = __webpack_require__(107),
    Constants = Utils.Constants;

/* The central directory file header */
module.exports = function () {
    var _verMade = 0x0A,
        _version = 0x0A,
        _flags = 0,
        _method = 0,
        _time = 0,
        _crc = 0,
        _compressedSize = 0,
        _size = 0,
        _fnameLen = 0,
        _extraLen = 0,

        _comLen = 0,
        _diskStart = 0,
        _inattr = 0,
        _attr = 0,
        _offset = 0;

    var _dataHeader = {};

    function setTime(val) {
        val = new Date(val);
        _time = (val.getFullYear() - 1980 & 0x7f) << 25  // b09-16 years from 1980
            | (val.getMonth() + 1) << 21                 // b05-08 month
            | val.getDate() << 16                        // b00-04 hour

            // 2 bytes time
            | val.getHours() << 11    // b11-15 hour
            | val.getMinutes() << 5   // b05-10 minute
            | val.getSeconds() >> 1;  // b00-04 seconds divided by 2
    }

    setTime(+new Date());

    return {
        get made () { return _verMade; },
        set made (val) { _verMade = val; },

        get version () { return _version; },
        set version (val) { _version = val },

        get flags () { return _flags },
        set flags (val) { _flags = val; },

        get method () { return _method; },
        set method (val) { _method = val; },

        get time () { return new Date(
            ((_time >> 25) & 0x7f) + 1980,
            ((_time >> 21) & 0x0f) - 1,
            (_time >> 16) & 0x1f,
            (_time >> 11) & 0x1f,
            (_time >> 5) & 0x3f,
            (_time & 0x1f) << 1
        );
        },
        set time (val) {
            setTime(val);
        },

        get crc () { return _crc; },
        set crc (val) { _crc = val; },

        get compressedSize () { return _compressedSize; },
        set compressedSize (val) { _compressedSize = val; },

        get size () { return _size; },
        set size (val) { _size = val; },

        get fileNameLength () { return _fnameLen; },
        set fileNameLength (val) { _fnameLen = val; },

        get extraLength () { return _extraLen },
        set extraLength (val) { _extraLen = val; },

        get commentLength () { return _comLen },
        set commentLength (val) { _comLen = val },

        get diskNumStart () { return _diskStart },
        set diskNumStart (val) { _diskStart = val },

        get inAttr () { return _inattr },
        set inAttr (val) { _inattr = val },

        get attr () { return _attr },
        set attr (val) { _attr = val },

        get offset () { return _offset },
        set offset (val) { _offset = val },

        get encripted () { return (_flags & 1) === 1 },

        get entryHeaderSize () {
            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
        },

        get realDataOffset () {
            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
        },

        get dataHeader () {
            return _dataHeader;
        },

        loadDataHeaderFromBinary : function(/*Buffer*/input) {
            var data = input.slice(_offset, _offset + Constants.LOCHDR);
            // 30 bytes and should start with "PK\003\004"
            if (data.readUInt32LE(0) !== Constants.LOCSIG) {
                throw Utils.Errors.INVALID_LOC;
            }
            _dataHeader = {
                // version needed to extract
                version : data.readUInt16LE(Constants.LOCVER),
                // general purpose bit flag
                flags : data.readUInt16LE(Constants.LOCFLG),
                // compression method
                method : data.readUInt16LE(Constants.LOCHOW),
                // modification time (2 bytes time, 2 bytes date)
                time : data.readUInt32LE(Constants.LOCTIM),
                // uncompressed file crc-32 value
                crc : data.readUInt32LE(Constants.LOCCRC),
                // compressed size
                compressedSize : data.readUInt32LE(Constants.LOCSIZ),
                // uncompressed size
                size : data.readUInt32LE(Constants.LOCLEN),
                // filename length
                fnameLen : data.readUInt16LE(Constants.LOCNAM),
                // extra field length
                extraLen : data.readUInt16LE(Constants.LOCEXT)
            }
        },

        loadFromBinary : function(/*Buffer*/data) {
            // data should be 46 bytes and start with "PK 01 02"
            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
                throw Utils.Errors.INVALID_CEN;
            }
            // version made by
            _verMade = data.readUInt16LE(Constants.CENVEM);
            // version needed to extract
            _version = data.readUInt16LE(Constants.CENVER);
            // encrypt, decrypt flags
            _flags = data.readUInt16LE(Constants.CENFLG);
            // compression method
            _method = data.readUInt16LE(Constants.CENHOW);
            // modification time (2 bytes time, 2 bytes date)
            _time = data.readUInt32LE(Constants.CENTIM);
            // uncompressed file crc-32 value
            _crc = data.readUInt32LE(Constants.CENCRC);
            // compressed size
            _compressedSize = data.readUInt32LE(Constants.CENSIZ);
            // uncompressed size
            _size = data.readUInt32LE(Constants.CENLEN);
            // filename length
            _fnameLen = data.readUInt16LE(Constants.CENNAM);
            // extra field length
            _extraLen = data.readUInt16LE(Constants.CENEXT);
            // file comment length
            _comLen = data.readUInt16LE(Constants.CENCOM);
            // volume number start
            _diskStart = data.readUInt16LE(Constants.CENDSK);
            // internal file attributes
            _inattr = data.readUInt16LE(Constants.CENATT);
            // external file attributes
            _attr = data.readUInt32LE(Constants.CENATX);
            // LOC header offset
            _offset = data.readUInt32LE(Constants.CENOFF);
        },

        dataHeaderToBinary : function() {
            // LOC header size (30 bytes)
            var data = Buffer.alloc(Constants.LOCHDR);
            // "PK\003\004"
            data.writeUInt32LE(Constants.LOCSIG, 0);
            // version needed to extract
            data.writeUInt16LE(_version, Constants.LOCVER);
            // general purpose bit flag
            data.writeUInt16LE(_flags, Constants.LOCFLG);
            // compression method
            data.writeUInt16LE(_method, Constants.LOCHOW);
            // modification time (2 bytes time, 2 bytes date)
            data.writeUInt32LE(_time, Constants.LOCTIM);
            // uncompressed file crc-32 value
            data.writeUInt32LE(_crc, Constants.LOCCRC);
            // compressed size
            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
            // uncompressed size
            data.writeUInt32LE(_size, Constants.LOCLEN);
            // filename length
            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
            // extra field length
            data.writeUInt16LE(_extraLen, Constants.LOCEXT);
            return data;
        },

        entryHeaderToBinary : function() {
            // CEN header size (46 bytes)
            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);
            // "PK\001\002"
            data.writeUInt32LE(Constants.CENSIG, 0);
            // version made by
            data.writeUInt16LE(_verMade, Constants.CENVEM);
            // version needed to extract
            data.writeUInt16LE(_version, Constants.CENVER);
            // encrypt, decrypt flags
            data.writeUInt16LE(_flags, Constants.CENFLG);
            // compression method
            data.writeUInt16LE(_method, Constants.CENHOW);
            // modification time (2 bytes time, 2 bytes date)
            data.writeUInt32LE(_time, Constants.CENTIM);
            // uncompressed file crc-32 value
            data.writeUInt32LE(_crc, Constants.CENCRC);
            // compressed size
            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);
            // uncompressed size
            data.writeUInt32LE(_size, Constants.CENLEN);
            // filename length
            data.writeUInt16LE(_fnameLen, Constants.CENNAM);
            // extra field length
            data.writeUInt16LE(_extraLen, Constants.CENEXT);
            // file comment length
            data.writeUInt16LE(_comLen, Constants.CENCOM);
            // volume number start
            data.writeUInt16LE(_diskStart, Constants.CENDSK);
            // internal file attributes
            data.writeUInt16LE(_inattr, Constants.CENATT);
            // external file attributes
            data.writeUInt32LE(_attr, Constants.CENATX);
            // LOC header offset
            data.writeUInt32LE(_offset, Constants.CENOFF);
            // fill all with
            data.fill(0x00, Constants.CENHDR);
            return data;
        },

        toString : function() {
            return '{\n' +
                '\t"made" : ' + _verMade + ",\n" +
                '\t"version" : ' + _version + ",\n" +
                '\t"flags" : ' + _flags + ",\n" +
                '\t"method" : ' + Utils.methodToString(_method) + ",\n" +
                '\t"time" : ' + this.time + ",\n" +
                '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" +
                '\t"compressedSize" : ' + _compressedSize + " bytes,\n" +
                '\t"size" : ' + _size + " bytes,\n" +
                '\t"fileNameLength" : ' + _fnameLen + ",\n" +
                '\t"extraLength" : ' + _extraLen + " bytes,\n" +
                '\t"commentLength" : ' + _comLen + " bytes,\n" +
                '\t"diskNumStart" : ' + _diskStart + ",\n" +
                '\t"inAttr" : ' + _inattr + ",\n" +
                '\t"attr" : ' + _attr + ",\n" +
                '\t"offset" : ' + _offset + ",\n" +
                '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" +
                '}';
        }
    }
};


/***/ }),
/* 517 */
/***/ (function(module, exports, __webpack_require__) {

var Utils = __webpack_require__(107),
    Constants = Utils.Constants;

/* The entries in the end of central directory */
module.exports = function () {
    var _volumeEntries = 0,
        _totalEntries = 0,
        _size = 0,
        _offset = 0,
        _commentLength = 0;

    return {
        get diskEntries () { return _volumeEntries },
        set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; },

        get totalEntries () { return _totalEntries },
        set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; },

        get size () { return _size },
        set size (/*Number*/val) { _size = val; },

        get offset () { return _offset },
        set offset (/*Number*/val) { _offset = val; },

        get commentLength () { return _commentLength },
        set commentLength (/*Number*/val) { _commentLength = val; },

        get mainHeaderSize () {
            return Constants.ENDHDR + _commentLength;
        },

        loadFromBinary : function(/*Buffer*/data) {
            // data should be 22 bytes and start with "PK 05 06"
            if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG)
                throw Utils.Errors.INVALID_END;

            // number of entries on this volume
            _volumeEntries = data.readUInt16LE(Constants.ENDSUB);
            // total number of entries
            _totalEntries = data.readUInt16LE(Constants.ENDTOT);
            // central directory size in bytes
            _size = data.readUInt32LE(Constants.ENDSIZ);
            // offset of first CEN header
            _offset = data.readUInt32LE(Constants.ENDOFF);
            // zip file comment length
            _commentLength = data.readUInt16LE(Constants.ENDCOM);
        },

        toBinary : function() {
           var b = Buffer.alloc(Constants.ENDHDR + _commentLength);
            // "PK 05 06" signature
            b.writeUInt32LE(Constants.ENDSIG, 0);
            b.writeUInt32LE(0, 4);
            // number of entries on this volume
            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
            // total number of entries
            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
            // central directory size in bytes
            b.writeUInt32LE(_size, Constants.ENDSIZ);
            // offset of first CEN header
            b.writeUInt32LE(_offset, Constants.ENDOFF);
            // zip file comment length
            b.writeUInt16LE(_commentLength, Constants.ENDCOM);
            // fill comment memory with spaces so no garbage is left there
            b.fill(" ", Constants.ENDHDR);

            return b;
        },

        toString : function() {
            return '{\n' +
                '\t"diskEntries" : ' + _volumeEntries + ",\n" +
                '\t"totalEntries" : ' + _totalEntries + ",\n" +
                '\t"size" : ' + _size + " bytes,\n" +
                '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" +
                '\t"commentLength" : 0x' + _commentLength + "\n" +
            '}';
        }
    }
};

/***/ }),
/* 518 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $
 *
 * GNU General Public License, version 2 (GPL-2.0)
 *   http://opensource.org/licenses/GPL-2.0
 * Original:
 *  http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt
 */
function JSDeflater(/*inbuff*/inbuf) {

	/* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
	 * Version: 1.0.1
	 * LastModified: Dec 25 1999
	 */

	var WSIZE = 32768,		// Sliding Window size
		zip_STORED_BLOCK = 0,
		zip_STATIC_TREES = 1,
		zip_DYN_TREES = 2,
		zip_DEFAULT_LEVEL = 6,
		zip_FULL_SEARCH = true,
		zip_INBUFSIZ = 32768,	// Input buffer size
		zip_INBUF_EXTRA = 64,	// Extra buffer
		zip_OUTBUFSIZ = 1024 * 8,
		zip_window_size = 2 * WSIZE,
		MIN_MATCH = 3,
		MAX_MATCH = 258,
		zip_BITS = 16,
		LIT_BUFSIZE = 0x2000,
		zip_HASH_BITS = 13,
		zip_DIST_BUFSIZE = LIT_BUFSIZE,
		zip_HASH_SIZE = 1 << zip_HASH_BITS,
		zip_HASH_MASK = zip_HASH_SIZE - 1,
		zip_WMASK = WSIZE - 1,
		zip_NIL = 0, // Tail of hash chains
		zip_TOO_FAR = 4096,
		zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1,
		zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD,
		zip_SMALLEST = 1,
		zip_MAX_BITS = 15,
		zip_MAX_BL_BITS = 7,
		zip_LENGTH_CODES = 29,
		zip_LITERALS = 256,
		zip_END_BLOCK = 256,
		zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES,
		zip_D_CODES = 30,
		zip_BL_CODES = 19,
		zip_REP_3_6 = 16,
		zip_REPZ_3_10 = 17,
		zip_REPZ_11_138 = 18,
		zip_HEAP_SIZE = 2 * zip_L_CODES + 1,
		zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH);

	var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete,
		zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head,
		zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start,
		zip_eofile,
		zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match,
		zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc,
		zip_bl_desc,
		zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length,
		zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len,
		zip_static_len, zip_deflate_data, zip_deflate_pos;

	var zip_DeflateCT = function () {
		this.fc = 0; // frequency count or bit string
		this.dl = 0; // father node in Huffman tree or length of bit string
	};

	var zip_DeflateTreeDesc = function () {
		this.dyn_tree = null;	// the dynamic tree
		this.static_tree = null;	// corresponding static tree or NULL
		this.extra_bits = null;	// extra bits for each code or NULL
		this.extra_base = 0;	// base index for extra_bits
		this.elems = 0;		// max number of elements in the tree
		this.max_length = 0;	// max bit length for the codes
		this.max_code = 0;		// largest code with non zero frequency
	};

	/* Values for max_lazy_match, good_match and max_chain_length, depending on
	 * the desired pack level (0..9). The values given below have been tuned to
	 * exclude worst case performance for pathological files. Better values may be
	 * found for specific files.
	 */
	var zip_DeflateConfiguration = function (a, b, c, d) {
		this.good_length = a; // reduce lazy search above this match length
		this.max_lazy = b;    // do not perform lazy search above this match length
		this.nice_length = c; // quit search above this match length
		this.max_chain = d;
	};

	var zip_DeflateBuffer = function () {
		this.next = null;
		this.len = 0;
		this.ptr = new Array(zip_OUTBUFSIZ);
		this.off = 0;
	};

	/* constant tables */
	var zip_extra_lbits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
	var zip_extra_dbits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
	var zip_extra_blbits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
	var zip_bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
	var zip_configuration_table = [new zip_DeflateConfiguration(0, 0, 0, 0),
		new zip_DeflateConfiguration(4, 4, 8, 4),
		new zip_DeflateConfiguration(4, 5, 16, 8),
		new zip_DeflateConfiguration(4, 6, 32, 32),
		new zip_DeflateConfiguration(4, 4, 16, 16),
		new zip_DeflateConfiguration(8, 16, 32, 32),
		new zip_DeflateConfiguration(8, 16, 128, 128),
		new zip_DeflateConfiguration(8, 32, 128, 256),
		new zip_DeflateConfiguration(32, 128, 258, 1024),
		new zip_DeflateConfiguration(32, 258, 258, 4096)];


	/* routines (deflate) */

	var zip_deflate_start = function (level) {
		var i;

		if (!level)
			level = zip_DEFAULT_LEVEL;
		else if (level < 1)
			level = 1;
		else if (level > 9)
			level = 9;

		zip_compr_level = level;
		zip_initflag = false;
		zip_eofile = false;
		if (zip_outbuf != null)
			return;

		zip_free_queue = zip_qhead = zip_qtail = null;
		zip_outbuf = new Array(zip_OUTBUFSIZ);
		zip_window = new Array(zip_window_size);
		zip_d_buf = new Array(zip_DIST_BUFSIZE);
		zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA);
		zip_prev = new Array(1 << zip_BITS);
		zip_dyn_ltree = new Array(zip_HEAP_SIZE);
		for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT();
		zip_dyn_dtree = new Array(2 * zip_D_CODES + 1);
		for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT();
		zip_static_ltree = new Array(zip_L_CODES + 2);
		for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT();
		zip_static_dtree = new Array(zip_D_CODES);
		for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT();
		zip_bl_tree = new Array(2 * zip_BL_CODES + 1);
		for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT();
		zip_l_desc = new zip_DeflateTreeDesc();
		zip_d_desc = new zip_DeflateTreeDesc();
		zip_bl_desc = new zip_DeflateTreeDesc();
		zip_bl_count = new Array(zip_MAX_BITS + 1);
		zip_heap = new Array(2 * zip_L_CODES + 1);
		zip_depth = new Array(2 * zip_L_CODES + 1);
		zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
		zip_dist_code = new Array(512);
		zip_base_length = new Array(zip_LENGTH_CODES);
		zip_base_dist = new Array(zip_D_CODES);
		zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8));
	};

	var zip_deflate_end = function () {
		zip_free_queue = zip_qhead = zip_qtail = null;
		zip_outbuf = null;
		zip_window = null;
		zip_d_buf = null;
		zip_l_buf = null;
		zip_prev = null;
		zip_dyn_ltree = null;
		zip_dyn_dtree = null;
		zip_static_ltree = null;
		zip_static_dtree = null;
		zip_bl_tree = null;
		zip_l_desc = null;
		zip_d_desc = null;
		zip_bl_desc = null;
		zip_bl_count = null;
		zip_heap = null;
		zip_depth = null;
		zip_length_code = null;
		zip_dist_code = null;
		zip_base_length = null;
		zip_base_dist = null;
		zip_flag_buf = null;
	};

	var zip_reuse_queue = function (p) {
		p.next = zip_free_queue;
		zip_free_queue = p;
	};

	var zip_new_queue = function () {
		var p;

		if (zip_free_queue != null) {
			p = zip_free_queue;
			zip_free_queue = zip_free_queue.next;
		}
		else
			p = new zip_DeflateBuffer();
		p.next = null;
		p.len = p.off = 0;

		return p;
	};

	var zip_head1 = function (i) {
		return zip_prev[WSIZE + i];
	};

	var zip_head2 = function (i, val) {
		return zip_prev[WSIZE + i] = val;
	};

	/* put_byte is used for the compressed output, put_ubyte for the
	 * uncompressed output. However unlzw() uses window for its
	 * suffix table instead of its output buffer, so it does not use put_ubyte
	 * (to be cleaned up).
	 */
	var zip_put_byte = function (c) {
		zip_outbuf[zip_outoff + zip_outcnt++] = c;
		if (zip_outoff + zip_outcnt === zip_OUTBUFSIZ)
			zip_qoutbuf();
	};

	/* Output a 16 bit value, lsb first */
	var zip_put_short = function (w) {
		w &= 0xffff;
		if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) {
			zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff);
			zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8);
		} else {
			zip_put_byte(w & 0xff);
			zip_put_byte(w >>> 8);
		}
	};

	/* ==========================================================================
	 * Insert string s in the dictionary and set match_head to the previous head
	 * of the hash chain (the most recent string with same hash key). Return
	 * the previous length of the hash chain.
	 * IN  assertion: all calls to to INSERT_STRING are made with consecutive
	 *    input characters and the first MIN_MATCH bytes of s are valid
	 *    (except for the last MIN_MATCH-1 bytes of the input file).
	 */
	var zip_INSERT_STRING = function () {
		zip_ins_h = ((zip_ins_h << zip_H_SHIFT)
			^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff))
			& zip_HASH_MASK;
		zip_hash_head = zip_head1(zip_ins_h);
		zip_prev[zip_strstart & zip_WMASK] = zip_hash_head;
		zip_head2(zip_ins_h, zip_strstart);
	};

	/* Send a code of the given tree. c and tree must not have side effects */
	var zip_SEND_CODE = function (c, tree) {
		zip_send_bits(tree[c].fc, tree[c].dl);
	};

	/* Mapping from a distance to a distance code. dist is the distance - 1 and
	 * must not have side effects. dist_code[256] and dist_code[257] are never
	 * used.
	 */
	var zip_D_CODE = function (dist) {
		return (dist < 256 ? zip_dist_code[dist]
			: zip_dist_code[256 + (dist >> 7)]) & 0xff;
	};

	/* ==========================================================================
	 * Compares to subtrees, using the tree depth as tie breaker when
	 * the subtrees have equal frequency. This minimizes the worst case length.
	 */
	var zip_SMALLER = function (tree, n, m) {
		return tree[n].fc < tree[m].fc ||
			(tree[n].fc === tree[m].fc && zip_depth[n] <= zip_depth[m]);
	};

	/* ==========================================================================
	 * read string data
	 */
	var zip_read_buff = function (buff, offset, n) {
		var i;
		for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++)
			buff[offset + i] =
				zip_deflate_data[zip_deflate_pos++] & 0xff;
		return i;
	};

	/* ==========================================================================
	 * Initialize the "longest match" routines for a new file
	 */
	var zip_lm_init = function () {
		var j;

		/* Initialize the hash table. */
		for (j = 0; j < zip_HASH_SIZE; j++)
			zip_prev[WSIZE + j] = 0;
		zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy;
		zip_good_match = zip_configuration_table[zip_compr_level].good_length;
		if (!zip_FULL_SEARCH)
			zip_nice_match = zip_configuration_table[zip_compr_level].nice_length;
		zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain;

		zip_strstart = 0;
		zip_block_start = 0;

		zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE);
		if (zip_lookahead <= 0) {
			zip_eofile = true;
			zip_lookahead = 0;
			return;
		}
		zip_eofile = false;
		/* Make sure that we always have enough lookahead. This is important
		 * if input comes from a device such as a tty.
		 */
		while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
			zip_fill_window();

		/* If lookahead < MIN_MATCH, ins_h is garbage, but this is
		 * not important since only literal bytes will be emitted.
		 */
		zip_ins_h = 0;
		for (j = 0; j < MIN_MATCH - 1; j++) {
			zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK;
		}
	};

	/* ==========================================================================
	 * Set match_start to the longest match starting at the given string and
	 * return its length. Matches shorter or equal to prev_length are discarded,
	 * in which case the result is equal to prev_length and match_start is
	 * garbage.
	 * IN assertions: cur_match is the head of the hash chain for the current
	 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
	 */
	var zip_longest_match = function (cur_match) {
		var chain_length = zip_max_chain_length; // max hash chain length
		var scanp = zip_strstart; // current string
		var matchp;		// matched string
		var len;		// length of current match
		var best_len = zip_prev_length;	// best match length so far

		/* Stop when cur_match becomes <= limit. To simplify the code,
		 * we prevent matches with the string of window index 0.
		 */
		var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL);

		var strendp = zip_strstart + MAX_MATCH;
		var scan_end1 = zip_window[scanp + best_len - 1];
		var scan_end = zip_window[scanp + best_len];

		/* Do not waste too much time if we already have a good match: */
		if (zip_prev_length >= zip_good_match)
			chain_length >>= 2;

		do {
			matchp = cur_match;

			/* Skip to next match if the match length cannot increase
			 * or if the match length is less than 2:
			 */
			if (zip_window[matchp + best_len] !== scan_end ||
				zip_window[matchp + best_len - 1] !== scan_end1 ||
				zip_window[matchp] !== zip_window[scanp] ||
				zip_window[++matchp] !== zip_window[scanp + 1]) {
				continue;
			}

			/* The check at best_len-1 can be removed because it will be made
			 * again later. (This heuristic is not always a win.)
			 * It is not necessary to compare scan[2] and match[2] since they
			 * are always equal when the other bytes match, given that
			 * the hash keys are equal and that HASH_BITS >= 8.
			 */
			scanp += 2;
			matchp++;

			/* We check for insufficient lookahead only every 8th comparison;
			 * the 256th check will be made at strstart+258.
			 */
			do {
			} while (zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			zip_window[++scanp] === zip_window[++matchp] &&
			scanp < strendp);

			len = MAX_MATCH - (strendp - scanp);
			scanp = strendp - MAX_MATCH;

			if (len > best_len) {
				zip_match_start = cur_match;
				best_len = len;
				if (zip_FULL_SEARCH) {
					if (len >= MAX_MATCH) break;
				} else {
					if (len >= zip_nice_match) break;
				}

				scan_end1 = zip_window[scanp + best_len - 1];
				scan_end = zip_window[scanp + best_len];
			}
		} while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit
		&& --chain_length !== 0);

		return best_len;
	};

	/* ==========================================================================
	 * Fill the window when the lookahead becomes insufficient.
	 * Updates strstart and lookahead, and sets eofile if end of input file.
	 * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
	 * OUT assertions: at least one byte has been read, or eofile is set;
	 *    file reads are performed for at least two bytes (required for the
	 *    translate_eol option).
	 */
	var zip_fill_window = function () {
		var n, m;

		// Amount of free space at the end of the window.
		var more = zip_window_size - zip_lookahead - zip_strstart;

		/* If the window is almost full and there is insufficient lookahead,
		 * move the upper half to the lower one to make room in the upper half.
		 */
		if (more === -1) {
			/* Very unlikely, but possible on 16 bit machine if strstart == 0
			 * and lookahead == 1 (input done one byte at time)
			 */
			more--;
		} else if (zip_strstart >= WSIZE + zip_MAX_DIST) {
			/* By the IN assertion, the window is not empty so we can't confuse
			 * more == 0 with more == 64K on a 16 bit machine.
			 */
			for (n = 0; n < WSIZE; n++)
				zip_window[n] = zip_window[n + WSIZE];

			zip_match_start -= WSIZE;
			zip_strstart -= WSIZE;
			/* we now have strstart >= MAX_DIST: */
			zip_block_start -= WSIZE;

			for (n = 0; n < zip_HASH_SIZE; n++) {
				m = zip_head1(n);
				zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL);
			}
			for (n = 0; n < WSIZE; n++) {
				/* If n is not on any hash chain, prev[n] is garbage but
				 * its value will never be used.
				 */
				m = zip_prev[n];
				zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL);
			}
			more += WSIZE;
		}
		// At this point, more >= 2
		if (!zip_eofile) {
			n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more);
			if (n <= 0)
				zip_eofile = true;
			else
				zip_lookahead += n;
		}
	};

	/* ==========================================================================
	 * Processes a new input file and return its compressed length. This
	 * function does not perform lazy evaluationof matches and inserts
	 * new strings in the dictionary only for unmatched strings or for short
	 * matches. It is used only for the fast compression options.
	 */
	var zip_deflate_fast = function () {
		while (zip_lookahead !== 0 && zip_qhead == null) {
			var flush; // set if current block must be flushed

			/* Insert the string window[strstart .. strstart+2] in the
			 * dictionary, and set hash_head to the head of the hash chain:
			 */
			zip_INSERT_STRING();

			/* Find the longest match, discarding those <= prev_length.
			 * At this point we have always match_length < MIN_MATCH
			 */
			if (zip_hash_head !== zip_NIL &&
				zip_strstart - zip_hash_head <= zip_MAX_DIST) {
				/* To simplify the code, we prevent matches with the string
				 * of window index 0 (in particular we have to avoid a match
				 * of the string with itself at the start of the input file).
				 */
				zip_match_length = zip_longest_match(zip_hash_head);
				/* longest_match() sets match_start */
				if (zip_match_length > zip_lookahead)
					zip_match_length = zip_lookahead;
			}
			if (zip_match_length >= MIN_MATCH) {
				flush = zip_ct_tally(zip_strstart - zip_match_start,
					zip_match_length - MIN_MATCH);
				zip_lookahead -= zip_match_length;

				/* Insert new strings in the hash table only if the match length
				 * is not too large. This saves time but degrades compression.
				 */
				if (zip_match_length <= zip_max_lazy_match) {
					zip_match_length--; // string at strstart already in hash table
					do {
						zip_strstart++;
						zip_INSERT_STRING();
						/* strstart never exceeds WSIZE-MAX_MATCH, so there are
						 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
						 * these bytes are garbage, but it does not matter since
						 * the next lookahead bytes will be emitted as literals.
						 */
					} while (--zip_match_length !== 0);
					zip_strstart++;
				} else {
					zip_strstart += zip_match_length;
					zip_match_length = 0;
					zip_ins_h = zip_window[zip_strstart] & 0xff;
					zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK;
				}
			} else {
				/* No match, output a literal byte */
				flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff);
				zip_lookahead--;
				zip_strstart++;
			}
			if (flush) {
				zip_flush_block(0);
				zip_block_start = zip_strstart;
			}

			/* Make sure that we always have enough lookahead, except
			 * at the end of the input file. We need MAX_MATCH bytes
			 * for the next match, plus MIN_MATCH bytes to insert the
			 * string following the next match.
			 */
			while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
				zip_fill_window();
		}
	};

	var zip_deflate_better = function () {
		/* Process the input block. */
		while (zip_lookahead !== 0 && zip_qhead == null) {
			/* Insert the string window[strstart .. strstart+2] in the
			 * dictionary, and set hash_head to the head of the hash chain:
			 */
			zip_INSERT_STRING();

			/* Find the longest match, discarding those <= prev_length.
			 */
			zip_prev_length = zip_match_length;
			zip_prev_match = zip_match_start;
			zip_match_length = MIN_MATCH - 1;

			if (zip_hash_head !== zip_NIL &&
				zip_prev_length < zip_max_lazy_match &&
				zip_strstart - zip_hash_head <= zip_MAX_DIST) {
				/* To simplify the code, we prevent matches with the string
				 * of window index 0 (in particular we have to avoid a match
				 * of the string with itself at the start of the input file).
				 */
				zip_match_length = zip_longest_match(zip_hash_head);
				/* longest_match() sets match_start */
				if (zip_match_length > zip_lookahead)
					zip_match_length = zip_lookahead;

				/* Ignore a length 3 match if it is too distant: */
				if (zip_match_length === MIN_MATCH &&
					zip_strstart - zip_match_start > zip_TOO_FAR) {
					/* If prev_match is also MIN_MATCH, match_start is garbage
					 * but we will ignore the current match anyway.
					 */
					zip_match_length--;
				}
			}
			/* If there was a match at the previous step and the current
			 * match is not better, output the previous match:
			 */
			if (zip_prev_length >= MIN_MATCH &&
				zip_match_length <= zip_prev_length) {
				var flush; // set if current block must be flushed
				flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match,
					zip_prev_length - MIN_MATCH);

				/* Insert in hash table all strings up to the end of the match.
				 * strstart-1 and strstart are already inserted.
				 */
				zip_lookahead -= zip_prev_length - 1;
				zip_prev_length -= 2;
				do {
					zip_strstart++;
					zip_INSERT_STRING();
					/* strstart never exceeds WSIZE-MAX_MATCH, so there are
					 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
					 * these bytes are garbage, but it does not matter since the
					 * next lookahead bytes will always be emitted as literals.
					 */
				} while (--zip_prev_length !== 0);
				zip_match_available = 0;
				zip_match_length = MIN_MATCH - 1;
				zip_strstart++;
				if (flush) {
					zip_flush_block(0);
					zip_block_start = zip_strstart;
				}
			} else if (zip_match_available !== 0) {
				/* If there was no match at the previous position, output a
				 * single literal. If there was a match but the current match
				 * is longer, truncate the previous match to a single literal.
				 */
				if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) {
					zip_flush_block(0);
					zip_block_start = zip_strstart;
				}
				zip_strstart++;
				zip_lookahead--;
			} else {
				/* There is no previous match to compare with, wait for
				 * the next step to decide.
				 */
				zip_match_available = 1;
				zip_strstart++;
				zip_lookahead--;
			}

			/* Make sure that we always have enough lookahead, except
			 * at the end of the input file. We need MAX_MATCH bytes
			 * for the next match, plus MIN_MATCH bytes to insert the
			 * string following the next match.
			 */
			while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
				zip_fill_window();
		}
	};

	var zip_init_deflate = function () {
		if (zip_eofile)
			return;
		zip_bi_buf = 0;
		zip_bi_valid = 0;
		zip_ct_init();
		zip_lm_init();

		zip_qhead = null;
		zip_outcnt = 0;
		zip_outoff = 0;
		zip_match_available = 0;

		if (zip_compr_level <= 3) {
			zip_prev_length = MIN_MATCH - 1;
			zip_match_length = 0;
		}
		else {
			zip_match_length = MIN_MATCH - 1;
			zip_match_available = 0;
			zip_match_available = 0;
		}

		zip_complete = false;
	};

	/* ==========================================================================
	 * Same as above, but achieves better compression. We use a lazy
	 * evaluation for matches: a match is finally adopted only if there is
	 * no better match at the next window position.
	 */
	var zip_deflate_internal = function (buff, off, buff_size) {
		var n;

		if (!zip_initflag) {
			zip_init_deflate();
			zip_initflag = true;
			if (zip_lookahead === 0) { // empty
				zip_complete = true;
				return 0;
			}
		}

		if ((n = zip_qcopy(buff, off, buff_size)) === buff_size)
			return buff_size;

		if (zip_complete)
			return n;

		if (zip_compr_level <= 3) // optimized for speed
			zip_deflate_fast();
		else
			zip_deflate_better();
		if (zip_lookahead === 0) {
			if (zip_match_available !== 0)
				zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff);
			zip_flush_block(1);
			zip_complete = true;
		}
		return n + zip_qcopy(buff, n + off, buff_size - n);
	};

	var zip_qcopy = function (buff, off, buff_size) {
		var n, i, j;

		n = 0;
		while (zip_qhead != null && n < buff_size) {
			i = buff_size - n;
			if (i > zip_qhead.len)
				i = zip_qhead.len;
			for (j = 0; j < i; j++)
				buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j];

			zip_qhead.off += i;
			zip_qhead.len -= i;
			n += i;
			if (zip_qhead.len === 0) {
				var p;
				p = zip_qhead;
				zip_qhead = zip_qhead.next;
				zip_reuse_queue(p);
			}
		}

		if (n === buff_size)
			return n;

		if (zip_outoff < zip_outcnt) {
			i = buff_size - n;
			if (i > zip_outcnt - zip_outoff)
				i = zip_outcnt - zip_outoff;
			// System.arraycopy(outbuf, outoff, buff, off + n, i);
			for (j = 0; j < i; j++)
				buff[off + n + j] = zip_outbuf[zip_outoff + j];
			zip_outoff += i;
			n += i;
			if (zip_outcnt === zip_outoff)
				zip_outcnt = zip_outoff = 0;
		}
		return n;
	};

	/* ==========================================================================
	 * Allocate the match buffer, initialize the various tables and save the
	 * location of the internal file attribute (ascii/binary) and method
	 * (DEFLATE/STORE).
	 */
	var zip_ct_init = function () {
		var n;	// iterates over tree elements
		var bits;	// bit counter
		var length;	// length value
		var code;	// code value
		var dist;	// distance index

		if (zip_static_dtree[0].dl !== 0) return; // ct_init already called

		zip_l_desc.dyn_tree = zip_dyn_ltree;
		zip_l_desc.static_tree = zip_static_ltree;
		zip_l_desc.extra_bits = zip_extra_lbits;
		zip_l_desc.extra_base = zip_LITERALS + 1;
		zip_l_desc.elems = zip_L_CODES;
		zip_l_desc.max_length = zip_MAX_BITS;
		zip_l_desc.max_code = 0;

		zip_d_desc.dyn_tree = zip_dyn_dtree;
		zip_d_desc.static_tree = zip_static_dtree;
		zip_d_desc.extra_bits = zip_extra_dbits;
		zip_d_desc.extra_base = 0;
		zip_d_desc.elems = zip_D_CODES;
		zip_d_desc.max_length = zip_MAX_BITS;
		zip_d_desc.max_code = 0;

		zip_bl_desc.dyn_tree = zip_bl_tree;
		zip_bl_desc.static_tree = null;
		zip_bl_desc.extra_bits = zip_extra_blbits;
		zip_bl_desc.extra_base = 0;
		zip_bl_desc.elems = zip_BL_CODES;
		zip_bl_desc.max_length = zip_MAX_BL_BITS;
		zip_bl_desc.max_code = 0;

		// Initialize the mapping length (0..255) -> length code (0..28)
		length = 0;
		for (code = 0; code < zip_LENGTH_CODES - 1; code++) {
			zip_base_length[code] = length;
			for (n = 0; n < (1 << zip_extra_lbits[code]); n++)
				zip_length_code[length++] = code;
		}
		/* Note that the length 255 (match length 258) can be represented
		 * in two different ways: code 284 + 5 bits or code 285, so we
		 * overwrite length_code[255] to use the best encoding:
		 */
		zip_length_code[length - 1] = code;

		/* Initialize the mapping dist (0..32K) -> dist code (0..29) */
		dist = 0;
		for (code = 0; code < 16; code++) {
			zip_base_dist[code] = dist;
			for (n = 0; n < (1 << zip_extra_dbits[code]); n++) {
				zip_dist_code[dist++] = code;
			}
		}
		dist >>= 7; // from now on, all distances are divided by 128
		for (; code < zip_D_CODES; code++) {
			zip_base_dist[code] = dist << 7;
			for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++)
				zip_dist_code[256 + dist++] = code;
		}
		// Construct the codes of the static literal tree
		for (bits = 0; bits <= zip_MAX_BITS; bits++)
			zip_bl_count[bits] = 0;
		n = 0;
		while (n <= 143) {
			zip_static_ltree[n++].dl = 8;
			zip_bl_count[8]++;
		}
		while (n <= 255) {
			zip_static_ltree[n++].dl = 9;
			zip_bl_count[9]++;
		}
		while (n <= 279) {
			zip_static_ltree[n++].dl = 7;
			zip_bl_count[7]++;
		}
		while (n <= 287) {
			zip_static_ltree[n++].dl = 8;
			zip_bl_count[8]++;
		}
		/* Codes 286 and 287 do not exist, but we must include them in the
		 * tree construction to get a canonical Huffman tree (longest code
		 * all ones)
		 */
		zip_gen_codes(zip_static_ltree, zip_L_CODES + 1);

		/* The static distance tree is trivial: */
		for (n = 0; n < zip_D_CODES; n++) {
			zip_static_dtree[n].dl = 5;
			zip_static_dtree[n].fc = zip_bi_reverse(n, 5);
		}

		// Initialize the first block of the first file:
		zip_init_block();
	};

	/* ==========================================================================
	 * Initialize a new block.
	 */
	var zip_init_block = function () {
		var n; // iterates over tree elements

		// Initialize the trees.
		for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0;
		for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0;
		for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0;

		zip_dyn_ltree[zip_END_BLOCK].fc = 1;
		zip_opt_len = zip_static_len = 0;
		zip_last_lit = zip_last_dist = zip_last_flags = 0;
		zip_flags = 0;
		zip_flag_bit = 1;
	};

	/* ==========================================================================
	 * Restore the heap property by moving down the tree starting at node k,
	 * exchanging a node with the smallest of its two sons if necessary, stopping
	 * when the heap property is re-established (each father smaller than its
	 * two sons).
	 */
	var zip_pqdownheap = function (tree,	// the tree to restore
								   k) {	// node to move down
		var v = zip_heap[k];
		var j = k << 1;	// left son of k

		while (j <= zip_heap_len) {
			// Set j to the smallest of the two sons:
			if (j < zip_heap_len &&
				zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j]))
				j++;

			// Exit if v is smaller than both sons
			if (zip_SMALLER(tree, v, zip_heap[j]))
				break;

			// Exchange v with the smallest son
			zip_heap[k] = zip_heap[j];
			k = j;

			// And continue down the tree, setting j to the left son of k
			j <<= 1;
		}
		zip_heap[k] = v;
	};

	/* ==========================================================================
	 * Compute the optimal bit lengths for a tree and update the total bit length
	 * for the current block.
	 * IN assertion: the fields freq and dad are set, heap[heap_max] and
	 *    above are the tree nodes sorted by increasing frequency.
	 * OUT assertions: the field len is set to the optimal bit length, the
	 *     array bl_count contains the frequencies for each bit length.
	 *     The length opt_len is updated; static_len is also updated if stree is
	 *     not null.
	 */
	var zip_gen_bitlen = function (desc) { // the tree descriptor
		var tree = desc.dyn_tree;
		var extra = desc.extra_bits;
		var base = desc.extra_base;
		var max_code = desc.max_code;
		var max_length = desc.max_length;
		var stree = desc.static_tree;
		var h;		// heap index
		var n, m;		// iterate over the tree elements
		var bits;		// bit length
		var xbits;		// extra bits
		var f;		// frequency
		var overflow = 0;	// number of elements with bit length too large

		for (bits = 0; bits <= zip_MAX_BITS; bits++)
			zip_bl_count[bits] = 0;

		/* In a first pass, compute the optimal bit lengths (which may
		 * overflow in the case of the bit length tree).
		 */
		tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap

		for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) {
			n = zip_heap[h];
			bits = tree[tree[n].dl].dl + 1;
			if (bits > max_length) {
				bits = max_length;
				overflow++;
			}
			tree[n].dl = bits;
			// We overwrite tree[n].dl which is no longer needed

			if (n > max_code)
				continue; // not a leaf node

			zip_bl_count[bits]++;
			xbits = 0;
			if (n >= base)
				xbits = extra[n - base];
			f = tree[n].fc;
			zip_opt_len += f * (bits + xbits);
			if (stree != null)
				zip_static_len += f * (stree[n].dl + xbits);
		}
		if (overflow === 0)
			return;

		// This happens for example on obj2 and pic of the Calgary corpus

		// Find the first bit length which could increase:
		do {
			bits = max_length - 1;
			while (zip_bl_count[bits] === 0)
				bits--;
			zip_bl_count[bits]--;		// move one leaf down the tree
			zip_bl_count[bits + 1] += 2;	// move one overflow item as its brother
			zip_bl_count[max_length]--;
			/* The brother of the overflow item also moves one step up,
			 * but this does not affect bl_count[max_length]
			 */
			overflow -= 2;
		} while (overflow > 0);

		/* Now recompute all bit lengths, scanning in increasing frequency.
		 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
		 * lengths instead of fixing only the wrong ones. This idea is taken
		 * from 'ar' written by Haruhiko Okumura.)
		 */
		for (bits = max_length; bits !== 0; bits--) {
			n = zip_bl_count[bits];
			while (n !== 0) {
				m = zip_heap[--h];
				if (m > max_code)
					continue;
				if (tree[m].dl !== bits) {
					zip_opt_len += (bits - tree[m].dl) * tree[m].fc;
					tree[m].fc = bits;
				}
				n--;
			}
		}
	};

	/* ==========================================================================
	 * Generate the codes for a given tree and bit counts (which need not be
	 * optimal).
	 * IN assertion: the array bl_count contains the bit length statistics for
	 * the given tree and the field len is set for all tree elements.
	 * OUT assertion: the field code is set for all tree elements of non
	 *     zero code length.
	 */
	var zip_gen_codes = function (tree,	// the tree to decorate
								  max_code) {	// largest code with non zero frequency
		var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length
		var code = 0;		// running code value
		var bits;			// bit index
		var n;			// code index

		/* The distribution counts are first used to generate the code values
		 * without bit reversal.
		 */
		for (bits = 1; bits <= zip_MAX_BITS; bits++) {
			code = ((code + zip_bl_count[bits - 1]) << 1);
			next_code[bits] = code;
		}

		/* Check that the bit counts in bl_count are consistent. The last code
		 * must be all ones.
		 */
		for (n = 0; n <= max_code; n++) {
			var len = tree[n].dl;
			if (len === 0)
				continue;
			// Now reverse the bits
			tree[n].fc = zip_bi_reverse(next_code[len]++, len);
		}
	};

	/* ==========================================================================
	 * Construct one Huffman tree and assigns the code bit strings and lengths.
	 * Update the total bit length for the current block.
	 * IN assertion: the field freq is set for all tree elements.
	 * OUT assertions: the fields len and code are set to the optimal bit length
	 *     and corresponding code. The length opt_len is updated; static_len is
	 *     also updated if stree is not null. The field max_code is set.
	 */
	var zip_build_tree = function (desc) { // the tree descriptor
		var tree = desc.dyn_tree;
		var stree = desc.static_tree;
		var elems = desc.elems;
		var n, m;		// iterate over heap elements
		var max_code = -1;	// largest code with non zero frequency
		var node = elems;	// next internal node of the tree

		/* Construct the initial heap, with least frequent element in
		 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
		 * heap[0] is not used.
		 */
		zip_heap_len = 0;
		zip_heap_max = zip_HEAP_SIZE;

		for (n = 0; n < elems; n++) {
			if (tree[n].fc !== 0) {
				zip_heap[++zip_heap_len] = max_code = n;
				zip_depth[n] = 0;
			} else
				tree[n].dl = 0;
		}

		/* The pkzip format requires that at least one distance code exists,
		 * and that at least one bit should be sent even if there is only one
		 * possible code. So to avoid special checks later on we force at least
		 * two codes of non zero frequency.
		 */
		while (zip_heap_len < 2) {
			var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0);
			tree[xnew].fc = 1;
			zip_depth[xnew] = 0;
			zip_opt_len--;
			if (stree != null)
				zip_static_len -= stree[xnew].dl;
			// new is 0 or 1 so it does not have extra bits
		}
		desc.max_code = max_code;

		/* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
		 * establish sub-heaps of increasing lengths:
		 */
		for (n = zip_heap_len >> 1; n >= 1; n--)
			zip_pqdownheap(tree, n);

		/* Construct the Huffman tree by repeatedly combining the least two
		 * frequent nodes.
		 */
		do {
			n = zip_heap[zip_SMALLEST];
			zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--];
			zip_pqdownheap(tree, zip_SMALLEST);

			m = zip_heap[zip_SMALLEST];  // m = node of next least frequency

			// keep the nodes sorted by frequency
			zip_heap[--zip_heap_max] = n;
			zip_heap[--zip_heap_max] = m;

			// Create a new node father of n and m
			tree[node].fc = tree[n].fc + tree[m].fc;
			if (zip_depth[n] > zip_depth[m] + 1)
				zip_depth[node] = zip_depth[n];
			else
				zip_depth[node] = zip_depth[m] + 1;
			tree[n].dl = tree[m].dl = node;

			// and insert the new node in the heap
			zip_heap[zip_SMALLEST] = node++;
			zip_pqdownheap(tree, zip_SMALLEST);

		} while (zip_heap_len >= 2);

		zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST];

		/* At this point, the fields freq and dad are set. We can now
		 * generate the bit lengths.
		 */
		zip_gen_bitlen(desc);

		// The field len is now set, we can generate the bit codes
		zip_gen_codes(tree, max_code);
	};

	/* ==========================================================================
	 * Scan a literal or distance tree to determine the frequencies of the codes
	 * in the bit length tree. Updates opt_len to take into account the repeat
	 * counts. (The contribution of the bit length codes will be added later
	 * during the construction of bl_tree.)
	 */
	var zip_scan_tree = function (tree,// the tree to be scanned
								  max_code) {  // and its largest code of non zero frequency
		var n;			// iterates over all tree elements
		var prevlen = -1;		// last emitted length
		var curlen;			// length of current code
		var nextlen = tree[0].dl;	// length of next code
		var count = 0;		// repeat count of the current code
		var max_count = 7;		// max repeat count
		var min_count = 4;		// min repeat count

		if (nextlen === 0) {
			max_count = 138;
			min_count = 3;
		}
		tree[max_code + 1].dl = 0xffff; // guard

		for (n = 0; n <= max_code; n++) {
			curlen = nextlen;
			nextlen = tree[n + 1].dl;
			if (++count < max_count && curlen === nextlen)
				continue;
			else if (count < min_count)
				zip_bl_tree[curlen].fc += count;
			else if (curlen !== 0) {
				if (curlen !== prevlen)
					zip_bl_tree[curlen].fc++;
				zip_bl_tree[zip_REP_3_6].fc++;
			} else if (count <= 10)
				zip_bl_tree[zip_REPZ_3_10].fc++;
			else
				zip_bl_tree[zip_REPZ_11_138].fc++;
			count = 0;
			prevlen = curlen;
			if (nextlen === 0) {
				max_count = 138;
				min_count = 3;
			} else if (curlen === nextlen) {
				max_count = 6;
				min_count = 3;
			} else {
				max_count = 7;
				min_count = 4;
			}
		}
	};

	/* ==========================================================================
	 * Send a literal or distance tree in compressed form, using the codes in
	 * bl_tree.
	 */
	var zip_send_tree = function (tree, // the tree to be scanned
								  max_code) { // and its largest code of non zero frequency
		var n;			// iterates over all tree elements
		var prevlen = -1;		// last emitted length
		var curlen;			// length of current code
		var nextlen = tree[0].dl;	// length of next code
		var count = 0;		// repeat count of the current code
		var max_count = 7;		// max repeat count
		var min_count = 4;		// min repeat count

		/* tree[max_code+1].dl = -1; */
		/* guard already set */
		if (nextlen === 0) {
			max_count = 138;
			min_count = 3;
		}

		for (n = 0; n <= max_code; n++) {
			curlen = nextlen;
			nextlen = tree[n + 1].dl;
			if (++count < max_count && curlen === nextlen) {
				continue;
			} else if (count < min_count) {
				do {
					zip_SEND_CODE(curlen, zip_bl_tree);
				} while (--count !== 0);
			} else if (curlen !== 0) {
				if (curlen !== prevlen) {
					zip_SEND_CODE(curlen, zip_bl_tree);
					count--;
				}
				// Assert(count >= 3 && count <= 6, " 3_6?");
				zip_SEND_CODE(zip_REP_3_6, zip_bl_tree);
				zip_send_bits(count - 3, 2);
			} else if (count <= 10) {
				zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree);
				zip_send_bits(count - 3, 3);
			} else {
				zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree);
				zip_send_bits(count - 11, 7);
			}
			count = 0;
			prevlen = curlen;
			if (nextlen === 0) {
				max_count = 138;
				min_count = 3;
			} else if (curlen === nextlen) {
				max_count = 6;
				min_count = 3;
			} else {
				max_count = 7;
				min_count = 4;
			}
		}
	};

	/* ==========================================================================
	 * Construct the Huffman tree for the bit lengths and return the index in
	 * bl_order of the last bit length code to send.
	 */
	var zip_build_bl_tree = function () {
		var max_blindex;  // index of last bit length code of non zero freq

		// Determine the bit length frequencies for literal and distance trees
		zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code);
		zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code);

		// Build the bit length tree:
		zip_build_tree(zip_bl_desc);
		/* opt_len now includes the length of the tree representations, except
		 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
		 */

		/* Determine the number of bit length codes to send. The pkzip format
		 * requires that at least 4 bit length codes be sent. (appnote.txt says
		 * 3 but the actual value used is 4.)
		 */
		for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) {
			if (zip_bl_tree[zip_bl_order[max_blindex]].dl !== 0) break;
		}
		/* Update opt_len to include the bit length tree and counts */
		zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
		return max_blindex;
	};

	/* ==========================================================================
	 * Send the header for a block using dynamic Huffman trees: the counts, the
	 * lengths of the bit length codes, the literal tree and the distance tree.
	 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
	 */
	var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree
		var rank; // index in bl_order
		zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt
		zip_send_bits(dcodes - 1, 5);
		zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt
		for (rank = 0; rank < blcodes; rank++) {
			zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3);
		}

		// send the literal tree
		zip_send_tree(zip_dyn_ltree, lcodes - 1);

		// send the distance tree
		zip_send_tree(zip_dyn_dtree, dcodes - 1);
	};

	/* ==========================================================================
	 * Determine the best encoding for the current block: dynamic trees, static
	 * trees or store, and output the encoded block to the zip file.
	 */
	var zip_flush_block = function (eof) { // true if this is the last block for a file
		var opt_lenb, static_lenb; // opt_len and static_len in bytes
		var max_blindex;	// index of last bit length code of non zero freq
		var stored_len;	// length of input block

		stored_len = zip_strstart - zip_block_start;
		zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items

		// Construct the literal and distance trees
		zip_build_tree(zip_l_desc);
		zip_build_tree(zip_d_desc);
		/* At this point, opt_len and static_len are the total bit lengths of
		 * the compressed block data, excluding the tree representations.
		 */

		/* Build the bit length tree for the above two trees, and get the index
		 * in bl_order of the last bit length code to send.
		 */
		max_blindex = zip_build_bl_tree();

		// Determine the best encoding. Compute first the block length in bytes
		opt_lenb = (zip_opt_len + 3 + 7) >> 3;
		static_lenb = (zip_static_len + 3 + 7) >> 3;
		if (static_lenb <= opt_lenb)
			opt_lenb = static_lenb;
		if (stored_len + 4 <= opt_lenb // 4: two words for the lengths
			&& zip_block_start >= 0) {
			var i;

			/* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
			 * Otherwise we can't have processed more than WSIZE input bytes since
			 * the last block flush, because compression would have been
			 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
			 * transform a block into a stored block.
			 */
			zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3);
			/* send block type */
			zip_bi_windup();
			/* align on byte boundary */
			zip_put_short(stored_len);
			zip_put_short(~stored_len);

			// copy block
			for (i = 0; i < stored_len; i++)
				zip_put_byte(zip_window[zip_block_start + i]);

		} else if (static_lenb === opt_lenb) {
			zip_send_bits((zip_STATIC_TREES << 1) + eof, 3);
			zip_compress_block(zip_static_ltree, zip_static_dtree);
		} else {
			zip_send_bits((zip_DYN_TREES << 1) + eof, 3);
			zip_send_all_trees(zip_l_desc.max_code + 1,
				zip_d_desc.max_code + 1,
				max_blindex + 1);
			zip_compress_block(zip_dyn_ltree, zip_dyn_dtree);
		}

		zip_init_block();

		if (eof !== 0)
			zip_bi_windup();
	};

	/* ==========================================================================
	 * Save the match info and tally the frequency counts. Return true if
	 * the current block must be flushed.
	 */
	var zip_ct_tally = function (dist, // distance of matched string
								 lc) { // match length-MIN_MATCH or unmatched char (if dist==0)
		zip_l_buf[zip_last_lit++] = lc;
		if (dist === 0) {
			// lc is the unmatched char
			zip_dyn_ltree[lc].fc++;
		} else {
			// Here, lc is the match length - MIN_MATCH
			dist--;		    // dist = match distance - 1
			zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++;
			zip_dyn_dtree[zip_D_CODE(dist)].fc++;

			zip_d_buf[zip_last_dist++] = dist;
			zip_flags |= zip_flag_bit;
		}
		zip_flag_bit <<= 1;

		// Output the flags if they fill a byte
		if ((zip_last_lit & 7) === 0) {
			zip_flag_buf[zip_last_flags++] = zip_flags;
			zip_flags = 0;
			zip_flag_bit = 1;
		}
		// Try to guess if it is profitable to stop the current block here
		if (zip_compr_level > 2 && (zip_last_lit & 0xfff) === 0) {
			// Compute an upper bound for the compressed length
			var out_length = zip_last_lit * 8;
			var in_length = zip_strstart - zip_block_start;
			var dcode;

			for (dcode = 0; dcode < zip_D_CODES; dcode++) {
				out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]);
			}
			out_length >>= 3;
			if (zip_last_dist < parseInt(zip_last_lit / 2) &&
				out_length < parseInt(in_length / 2))
				return true;
		}
		return (zip_last_lit === LIT_BUFSIZE - 1 ||
			zip_last_dist === zip_DIST_BUFSIZE);
		/* We avoid equality with LIT_BUFSIZE because of wraparound at 64K
		 * on 16 bit machines and because stored blocks are restricted to
		 * 64K-1 bytes.
		 */
	};

	/* ==========================================================================
	 * Send the block data compressed using the given Huffman trees
	 */
	var zip_compress_block = function (ltree,	// literal tree
									   dtree) {	// distance tree
		var dist;		// distance of matched string
		var lc;		// match length or unmatched char (if dist == 0)
		var lx = 0;		// running index in l_buf
		var dx = 0;		// running index in d_buf
		var fx = 0;		// running index in flag_buf
		var flag = 0;	// current flags
		var code;		// the code to send
		var extra;		// number of extra bits to send

		if (zip_last_lit !== 0) do {
			if ((lx & 7) === 0)
				flag = zip_flag_buf[fx++];
			lc = zip_l_buf[lx++] & 0xff;
			if ((flag & 1) === 0) {
				zip_SEND_CODE(lc, ltree);
				/* send a literal byte */
			} else {
				// Here, lc is the match length - MIN_MATCH
				code = zip_length_code[lc];
				zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code
				extra = zip_extra_lbits[code];
				if (extra !== 0) {
					lc -= zip_base_length[code];
					zip_send_bits(lc, extra); // send the extra length bits
				}
				dist = zip_d_buf[dx++];
				// Here, dist is the match distance - 1
				code = zip_D_CODE(dist);
				zip_SEND_CODE(code, dtree);	  // send the distance code
				extra = zip_extra_dbits[code];
				if (extra !== 0) {
					dist -= zip_base_dist[code];
					zip_send_bits(dist, extra);   // send the extra distance bits
				}
			} // literal or match pair ?
			flag >>= 1;
		} while (lx < zip_last_lit);

		zip_SEND_CODE(zip_END_BLOCK, ltree);
	};

	/* ==========================================================================
	 * Send a value on a given number of bits.
	 * IN assertion: length <= 16 and value fits in length bits.
	 */
	var zip_Buf_size = 16; // bit size of bi_buf
	var zip_send_bits = function (value,	// value to send
								  length) {	// number of bits
		/* If not enough room in bi_buf, use (valid) bits from bi_buf and
		 * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
		 * unused bits in value.
		 */
		if (zip_bi_valid > zip_Buf_size - length) {
			zip_bi_buf |= (value << zip_bi_valid);
			zip_put_short(zip_bi_buf);
			zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid));
			zip_bi_valid += length - zip_Buf_size;
		} else {
			zip_bi_buf |= value << zip_bi_valid;
			zip_bi_valid += length;
		}
	};

	/* ==========================================================================
	 * Reverse the first len bits of a code, using straightforward code (a faster
	 * method would use a table)
	 * IN assertion: 1 <= len <= 15
	 */
	var zip_bi_reverse = function (code,	// the value to invert
								   len) {	// its bit length
		var res = 0;
		do {
			res |= code & 1;
			code >>= 1;
			res <<= 1;
		} while (--len > 0);
		return res >> 1;
	};

	/* ==========================================================================
	 * Write out any remaining bits in an incomplete byte.
	 */
	var zip_bi_windup = function () {
		if (zip_bi_valid > 8) {
			zip_put_short(zip_bi_buf);
		} else if (zip_bi_valid > 0) {
			zip_put_byte(zip_bi_buf);
		}
		zip_bi_buf = 0;
		zip_bi_valid = 0;
	};

	var zip_qoutbuf = function () {
		if (zip_outcnt !== 0) {
			var q, i;
			q = zip_new_queue();
			if (zip_qhead == null)
				zip_qhead = zip_qtail = q;
			else
				zip_qtail = zip_qtail.next = q;
			q.len = zip_outcnt - zip_outoff;
			for (i = 0; i < q.len; i++)
				q.ptr[i] = zip_outbuf[zip_outoff + i];
			zip_outcnt = zip_outoff = 0;
		}
	};

	function deflate(buffData, level) {
		zip_deflate_data = buffData;
		zip_deflate_pos = 0;
		zip_deflate_start(level);

		var buff = new Array(1024),
			pages = [],
			totalSize = 0,
			i;

		for (i = 0; i < 1024; i++) buff[i] = 0;
		while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) {
			var buf = Buffer.alloc(i, buff.slice(0, i));
			pages.push(buf);
			totalSize += buf.length;
		}

		if (pages.length === 1) {
			return pages[0];
		}

		var result = Buffer.alloc(totalSize),
			index = 0;

		for (i = 0; i < pages.length; i++) {
			pages[i].copy(result, index);
			index = index + pages[i].length
		}

		return result;
	}

	return {
		deflate: function () {
			return deflate(inbuf, 8);
		}
	}
}

module.exports = function (/*Buffer*/inbuf) {

	var zlib = __webpack_require__(87);

	return {
		deflate: function () {
			return new JSDeflater(inbuf).deflate();
		},

		deflateAsync: function (/*Function*/callback) {
			var tmp = zlib.createDeflateRaw({chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024}),
				parts = [], total = 0;
			tmp.on('data', function (data) {
				parts.push(data);
				total += data.length;
			});
			tmp.on('end', function () {
				var buf = Buffer.alloc(total), written = 0;
				buf.fill(0);

				for (var i = 0; i < parts.length; i++) {
					var part = parts[i];
					part.copy(buf, written);
					written += part.length;
				}
				callback && callback(buf);
			});
			tmp.end(inbuf);
		}
	}
};


/***/ }),
/* 519 */
/***/ (function(module, exports, __webpack_require__) {

exports.Deflater = __webpack_require__(518);
exports.Inflater = __webpack_require__(520);

/***/ }),
/* 520 */
/***/ (function(module, exports, __webpack_require__) {

var Buffer = __webpack_require__(70).Buffer;

function JSInflater(/*Buffer*/input) {

	var WSIZE = 0x8000,
		slide = Buffer.alloc(0x10000),
		windowPos = 0,
		fixedTableList = null,
		fixedTableDist,
		fixedLookup,
		bitBuf = 0,
		bitLen = 0,
		method = -1,
		eof = false,
		copyLen = 0,
		copyDist = 0,
		tblList, tblDist, bitList, bitdist,

		inputPosition = 0,

		MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff],
		LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0],
		LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99],
		DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577],
		DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13],
		BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];

	function HuffTable(clen, cnum, cval, blist, elist, lookupm) {

		this.status = 0;
		this.r = null;
		this.maxbit = 0;

		var el, f, tail,
			offsets = [],
			countTbl = [],
			sTbl = [],
			values = [],
			tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null};

		tail = this.r = null;
		for (var i = 0; i < 0x11; i++) {
			countTbl[i] = 0;
			sTbl[i] = 0;
			offsets[i] = 0;
		}
		for (i = 0; i < 0x120; i++) values[i] = 0;

		el = cnum > 256 ? clen[256] : 16;

		var pidx = -1;
		while (++pidx < cnum) countTbl[clen[pidx]]++;

		if (countTbl[0] === cnum) return;

		for (var j = 1; j <= 16; j++) if (countTbl[j] !== 0) break;
		var bitLen = j;
		for (i = 16; i !== 0; i--) if (countTbl[i] !== 0) break;
		var maxLen = i;

		lookupm < j && (lookupm = j);

		var dCodes = 1 << j;
		for (; j < i; j++, dCodes <<= 1)
			if ((dCodes -= countTbl[j]) < 0) {
				this.status = 2;
				this.maxbit = lookupm;
				return;
			}

		if ((dCodes -= countTbl[i]) < 0) {
			this.status = 2;
			this.maxbit = lookupm;
			return;
		}

		countTbl[i] += dCodes;
		offsets[1] = j = 0;
		pidx = 1;
		var xp = 2;
		while (--i > 0) offsets[xp++] = (j += countTbl[pidx++]);
		pidx = 0;
		i = 0;
		do {
			(j = clen[pidx++]) && (values[offsets[j]++] = i);
		} while (++i < cnum);
		cnum = offsets[maxLen];
		offsets[0] = i = 0;
		pidx = 0;

		var level = -1,
			w = sTbl[0] = 0,
			cnode = null,
			tblCnt = 0,
			tblStack = [];

		for (; bitLen <= maxLen; bitLen++) {
			var kccnt = countTbl[bitLen];
			while (kccnt-- > 0) {
				while (bitLen > w + sTbl[1 + level]) {
					w += sTbl[1 + level];
					level++;
					tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt;
					if ((f = 1 << (j = bitLen - w)) > kccnt + 1) {
						f -= kccnt + 1;
						xp = bitLen;
						while (++j < tblCnt) {
							if ((f <<= 1) <= countTbl[++xp]) break;
							f -= countTbl[xp];
						}
					}
					if (w + j > el && w < el) j = el - w;
					tblCnt = 1 << j;
					sTbl[1 + level] = j;
					cnode = [];
					while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null});
					if (tail == null) {
						tail = this.r = {next: null, list: null};
					} else {
						tail = tail.next = {next: null, list: null}
					}
					tail.next = null;
					tail.list = cnode;

					tblStack[level] = cnode;

					if (level > 0) {
						offsets[level] = i;
						tentry.bitcnt = sTbl[level];
						tentry.extra = 16 + j;
						tentry.next = cnode;
						j = (i & ((1 << w) - 1)) >> (w - sTbl[level]);

						tblStack[level - 1][j].extra = tentry.extra;
						tblStack[level - 1][j].bitcnt = tentry.bitcnt;
						tblStack[level - 1][j].lbase = tentry.lbase;
						tblStack[level - 1][j].next = tentry.next;
					}
				}
				tentry.bitcnt = bitLen - w;
				if (pidx >= cnum)
					tentry.extra = 99;
				else if (values[pidx] < cval) {
					tentry.extra = (values[pidx] < 256 ? 16 : 15);
					tentry.lbase = values[pidx++];
				} else {
					tentry.extra = elist[values[pidx] - cval];
					tentry.lbase = blist[values[pidx++] - cval];
				}

				f = 1 << (bitLen - w);
				for (j = i >> w; j < tblCnt; j += f) {
					cnode[j].extra = tentry.extra;
					cnode[j].bitcnt = tentry.bitcnt;
					cnode[j].lbase = tentry.lbase;
					cnode[j].next = tentry.next;
				}
				for (j = 1 << (bitLen - 1); (i & j) !== 0; j >>= 1)
					i ^= j;
				i ^= j;
				while ((i & ((1 << w) - 1)) !== offsets[level]) {
					w -= sTbl[level];
					level--;
				}
			}
		}

		this.maxbit = sTbl[1];
		this.status = ((dCodes !== 0 && maxLen !== 1) ? 1 : 0);
	}

	function addBits(n) {
		while (bitLen < n) {
			bitBuf |= input[inputPosition++] << bitLen;
			bitLen += 8;
		}
		return bitBuf;
	}

	function cutBits(n) {
		bitLen -= n;
		return bitBuf >>= n;
	}

	function maskBits(n) {
		while (bitLen < n) {
			bitBuf |= input[inputPosition++] << bitLen;
			bitLen += 8;
		}
		var res = bitBuf & MASK_BITS[n];
		bitBuf >>= n;
		bitLen -= n;
		return res;
	}

	function codes(buff, off, size) {
		var e, t;
		if (size === 0) return 0;

		var n = 0;
		for (; ;) {
			t = tblList.list[addBits(bitList) & MASK_BITS[bitList]];
			e = t.extra;
			while (e > 16) {
				if (e === 99) return -1;
				cutBits(t.bitcnt);
				e -= 16;
				t = t.next[addBits(e) & MASK_BITS[e]];
				e = t.extra;
			}
			cutBits(t.bitcnt);
			if (e === 16) {
				windowPos &= WSIZE - 1;
				buff[off + n++] = slide[windowPos++] = t.lbase;
				if (n === size) return size;
				continue;
			}
			if (e === 15) break;

			copyLen = t.lbase + maskBits(e);
			t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]];
			e = t.extra;

			while (e > 16) {
				if (e === 99) return -1;
				cutBits(t.bitcnt);
				e -= 16;
				t = t.next[addBits(e) & MASK_BITS[e]];
				e = t.extra
			}
			cutBits(t.bitcnt);
			copyDist = windowPos - t.lbase - maskBits(e);

			while (copyLen > 0 && n < size) {
				copyLen--;
				copyDist &= WSIZE - 1;
				windowPos &= WSIZE - 1;
				buff[off + n++] = slide[windowPos++] = slide[copyDist++];
			}

			if (n === size) return size;
		}

		method = -1; // done
		return n;
	}

	function stored(buff, off, size) {
		cutBits(bitLen & 7);
		var n = maskBits(0x10);
		if (n !== ((~maskBits(0x10)) & 0xffff)) return -1;
		copyLen = n;

		n = 0;
		while (copyLen > 0 && n < size) {
			copyLen--;
			windowPos &= WSIZE - 1;
			buff[off + n++] = slide[windowPos++] = maskBits(8);
		}

		if (copyLen === 0) method = -1;
		return n;
	}

	function fixed(buff, off, size) {
		var fixed_bd = 0;
		if (fixedTableList == null) {
			var lengths = [];

			for (var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8;
			for (; symbol < 256; symbol++) lengths[symbol] = 9;
			for (; symbol < 280; symbol++) lengths[symbol] = 7;
			for (; symbol < 288; symbol++) lengths[symbol] = 8;

			fixedLookup = 7;

			var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup);

			if (htbl.status !== 0) return -1;

			fixedTableList = htbl.r;
			fixedLookup = htbl.maxbit;

			for (symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5;
			fixed_bd = 5;

			htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd);
			if (htbl.status > 1) {
				fixedTableList = null;
				return -1;
			}
			fixedTableDist = htbl.r;
			fixed_bd = htbl.maxbit;
		}

		tblList = fixedTableList;
		tblDist = fixedTableDist;
		bitList = fixedLookup;
		bitdist = fixed_bd;
		return codes(buff, off, size);
	}

	function dynamic(buff, off, size) {
		var ll = new Array(0x023C);

		for (var m = 0; m < 0x023C; m++) ll[m] = 0;

		var llencnt = 257 + maskBits(5),
			dcodescnt = 1 + maskBits(5),
			bitlencnt = 4 + maskBits(4);

		if (llencnt > 286 || dcodescnt > 30) return -1;

		for (var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3);
		for (; j < 19; j++) ll[BITORDER[j]] = 0;

		// build decoding table for trees--single level, 7 bit lookup
		bitList = 7;
		var hufTable = new HuffTable(ll, 19, 19, null, null, bitList);
		if (hufTable.status !== 0)
			return -1;	// incomplete code set

		tblList = hufTable.r;
		bitList = hufTable.maxbit;
		var lencnt = llencnt + dcodescnt,
			i = 0,
			lastLen = 0;
		while (i < lencnt) {
			var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]];
			j = hufLcode.bitcnt;
			cutBits(j);
			j = hufLcode.lbase;
			if (j < 16)
				ll[i++] = lastLen = j;
			else if (j === 16) {
				j = 3 + maskBits(2);
				if (i + j > lencnt) return -1;
				while (j-- > 0) ll[i++] = lastLen;
			} else if (j === 17) {
				j = 3 + maskBits(3);
				if (i + j > lencnt) return -1;
				while (j-- > 0) ll[i++] = 0;
				lastLen = 0;
			} else {
				j = 11 + maskBits(7);
				if (i + j > lencnt) return -1;
				while (j-- > 0) ll[i++] = 0;
				lastLen = 0;
			}
		}
		bitList = 9;
		hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList);
		bitList === 0 && (hufTable.status = 1);

		if (hufTable.status !== 0) return -1;

		tblList = hufTable.r;
		bitList = hufTable.maxbit;

		for (i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt];
		bitdist = 6;
		hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist);
		tblDist = hufTable.r;
		bitdist = hufTable.maxbit;

		if ((bitdist === 0 && llencnt > 257) || hufTable.status !== 0) return -1;

		return codes(buff, off, size);
	}

	return {
		inflate: function (/*Buffer*/outputBuffer) {
			tblList = null;

			var size = outputBuffer.length,
				offset = 0, i;

			while (offset < size) {
				if (eof && method === -1) return;
				if (copyLen > 0) {
					if (method !== 0) {
						while (copyLen > 0 && offset < size) {
							copyLen--;
							copyDist &= WSIZE - 1;
							windowPos &= WSIZE - 1;
							outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]);
						}
					} else {
						while (copyLen > 0 && offset < size) {
							copyLen--;
							windowPos &= WSIZE - 1;
							outputBuffer[offset++] = (slide[windowPos++] = maskBits(8));
						}
						copyLen === 0 && (method = -1); // done
					}
					if (offset === size) return;
				}

				if (method === -1) {
					if (eof) break;
					eof = maskBits(1) !== 0;
					method = maskBits(2);
					tblList = null;
					copyLen = 0;
				}
				switch (method) {
					case 0:
						i = stored(outputBuffer, offset, size - offset);
						break;
					case 1:
						i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset);
						break;
					case 2:
						i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset);
						break;
					default:
						i = -1;
						break;
				}

				if (i === -1) return;
				offset += i;
			}
		}
	};
}

module.exports = function (/*Buffer*/inbuf) {
	var zlib = __webpack_require__(87);
	return {
		inflateAsync: function (/*Function*/callback) {
			var tmp = zlib.createInflateRaw(),
				parts = [], total = 0;
			tmp.on('data', function (data) {
				parts.push(data);
				total += data.length;
			});
			tmp.on('end', function () {
				var buf = Buffer.alloc(total), written = 0;
				buf.fill(0);

				for (var i = 0; i < parts.length; i++) {
					var part = parts[i];
					part.copy(buf, written);
					written += part.length;
				}
				callback && callback(buf);
			});
			tmp.end(inbuf)
		},

		inflate: function (/*Buffer*/outputBuffer) {
			var x = {
				x: new JSInflater(inbuf)
			};
			x.x.inflate(outputBuffer);
			delete(x.x);
		}
	}
};


/***/ }),
/* 521 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(182).require(),
    pth = __webpack_require__(0);
	
fs.existsSync = fs.existsSync || pth.existsSync;

module.exports = function(/*String*/path) {

    var _path = path || "",
        _permissions = 0,
        _obj = newAttr(),
        _stat = null;

    function newAttr() {
        return {
            directory : false,
            readonly : false,
            hidden : false,
            executable : false,
            mtime : 0,
            atime : 0
        }
    }

    if (_path && fs.existsSync(_path)) {
        _stat = fs.statSync(_path);
        _obj.directory = _stat.isDirectory();
        _obj.mtime = _stat.mtime;
        _obj.atime = _stat.atime;
        _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0]));
        _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0]));
        _obj.hidden = pth.basename(_path)[0] === ".";
    } else {
        console.warn("Invalid path: " + _path)
    }

    return {

        get directory () {
            return _obj.directory;
        },

        get readOnly () {
            return _obj.readonly;
        },

        get hidden () {
            return _obj.hidden;
        },

        get mtime () {
            return _obj.mtime;
        },

        get atime () {
           return _obj.atime;
        },


        get executable () {
            return _obj.executable;
        },

        decodeAttributes : function(val) {

        },

        encodeAttributes : function (val) {

        },

        toString : function() {
           return '{\n' +
               '\t"path" : "' + _path + ",\n" +
               '\t"isDirectory" : ' + _obj.directory + ",\n" +
               '\t"isReadOnly" : ' + _obj.readonly + ",\n" +
               '\t"isHidden" : ' + _obj.hidden + ",\n" +
               '\t"isExecutable" : ' + _obj.executable + ",\n" +
               '\t"mTime" : ' + _obj.mtime + "\n" +
               '\t"aTime" : ' + _obj.atime + "\n" +
           '}';
        }
    }

};


/***/ }),
/* 522 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(182).require(),
    pth = __webpack_require__(0);

fs.existsSync = fs.existsSync || pth.existsSync;

module.exports = (function() {

    var crcTable = [],
        Constants = __webpack_require__(263),
        Errors = __webpack_require__(264),

        PATH_SEPARATOR = pth.sep;


    function mkdirSync(/*String*/path) {
        var resolvedPath = path.split(PATH_SEPARATOR)[0];
        path.split(PATH_SEPARATOR).forEach(function(name) {
            if (!name || name.substr(-1,1) === ":") return;
            resolvedPath += PATH_SEPARATOR + name;
            var stat;
            try {
                stat = fs.statSync(resolvedPath);
            } catch (e) {
                fs.mkdirSync(resolvedPath);
            }
            if (stat && stat.isFile())
                throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
        });
    }

    function findSync(/*String*/dir, /*RegExp*/pattern, /*Boolean*/recoursive) {
        if (typeof pattern === 'boolean') {
            recoursive = pattern;
            pattern = undefined;
        }
        var files = [];
        fs.readdirSync(dir).forEach(function(file) {
            var path = pth.join(dir, file);

            if (fs.statSync(path).isDirectory() && recoursive)
                files = files.concat(findSync(path, pattern, recoursive));

            if (!pattern || pattern.test(path)) {
                files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : ""));
            }

        });
        return files;
    }

    return {
        makeDir : function(/*String*/path) {
            mkdirSync(path);
        },

        crc32 : function(buf) {
            if (typeof buf === 'string') {
                buf = Buffer.alloc(buf.length, buf);
            }
            var b = Buffer.alloc(4);
            if (!crcTable.length) {
                for (var n = 0; n < 256; n++) {
                    var c = n;
                    for (var k = 8; --k >= 0;)  //
                        if ((c & 1) !== 0)  { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; }
                    if (c < 0) {
                        b.writeInt32LE(c, 0);
                        c = b.readUInt32LE(0);
                    }
                    crcTable[n] = c;
                }
            }
            var crc = 0, off = 0, len = buf.length, c1 = ~crc;
            while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8);
            crc = ~c1;
            b.writeInt32LE(crc & 0xffffffff, 0);
            return b.readUInt32LE(0);
        },

        methodToString : function(/*Number*/method) {
            switch (method) {
                case Constants.STORED:
                    return 'STORED (' + method + ')';
                case Constants.DEFLATED:
                    return 'DEFLATED (' + method + ')';
                default:
                    return 'UNSUPPORTED (' + method + ')';
            }

        },

        writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) {
            if (fs.existsSync(path)) {
                if (!overwrite)
                    return false; // cannot overwrite

                var stat = fs.statSync(path);
                if (stat.isDirectory()) {
                    return false;
                }
            }
            var folder = pth.dirname(path);
            if (!fs.existsSync(folder)) {
                mkdirSync(folder);
            }

            var fd;
            try {
                fd = fs.openSync(path, 'w', 438); // 0666
            } catch(e) {
                fs.chmodSync(path, 438);
                fd = fs.openSync(path, 'w', 438);
            }
            if (fd) {
                try {
                    fs.writeSync(fd, content, 0, content.length, 0);
                }
                catch (e){
                    throw e;
                }
                finally {
                    fs.closeSync(fd);
                }
            }
            fs.chmodSync(path, attr || 438);
            return true;
        },

        writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) {
            if(typeof attr === 'function') {
                callback = attr;
                attr = undefined;
            }

            fs.exists(path, function(exists) {
                if(exists && !overwrite)
                    return callback(false);

                fs.stat(path, function(err, stat) {
                    if(exists &&stat.isDirectory()) {
                        return callback(false);
                    }

                    var folder = pth.dirname(path);
                    fs.exists(folder, function(exists) {
                        if(!exists)
                            mkdirSync(folder);

                        fs.open(path, 'w', 438, function(err, fd) {
                            if(err) {
                                fs.chmod(path, 438, function() {
                                    fs.open(path, 'w', 438, function(err, fd) {
                                        fs.write(fd, content, 0, content.length, 0, function() {
                                            fs.close(fd, function() {
                                                fs.chmod(path, attr || 438, function() {
                                                    callback(true);
                                                })
                                            });
                                        });
                                    });
                                })
                            } else {
                                if(fd) {
                                    fs.write(fd, content, 0, content.length, 0, function() {
                                        fs.close(fd, function() {
                                            fs.chmod(path, attr || 438, function() {
                                                callback(true);
                                            })
                                        });
                                    });
                                } else {
                                    fs.chmod(path, attr || 438, function() {
                                        callback(true);
                                    })
                                }
                            }
                        });
                    })
                })
            })
        },

        findFiles : function(/*String*/path) {
            return findSync(path, true);
        },

        getAttributes : function(/*String*/path) {

        },

        setAttributes : function(/*String*/path) {

        },

        toBuffer : function(input) {
            if (Buffer.isBuffer(input)) {
                return input;
            } else {
                if (input.length === 0) {
                    return Buffer.alloc(0)
                }
                return Buffer.alloc(input.length, input, 'utf8');
            }
        },

        Constants : Constants,
        Errors : Errors
    }
})();


/***/ }),
/* 523 */
/***/ (function(module, exports, __webpack_require__) {

var ZipEntry = __webpack_require__(265),
	Headers = __webpack_require__(262),
	Utils = __webpack_require__(107);

module.exports = function (/*String|Buffer*/input, /*Number*/inputType) {
	var entryList = [],
		entryTable = {},
		_comment = Buffer.alloc(0),
		filename = "",
		fs = Utils.FileSystem.require(),
		inBuffer = null,
		mainHeader = new Headers.MainHeader();

	if (inputType === Utils.Constants.FILE) {
		// is a filename
		filename = input;
		inBuffer = fs.readFileSync(filename);
		readMainHeader();
	} else if (inputType === Utils.Constants.BUFFER) {
		// is a memory buffer
		inBuffer = input;
		readMainHeader();
	} else {
		// none. is a new file
	}

	function readEntries() {
		entryTable = {};
		entryList = new Array(mainHeader.diskEntries);  // total number of entries
		var index = mainHeader.offset;  // offset of first CEN header
		for (var i = 0; i < entryList.length; i++) {

			var tmp = index,
				entry = new ZipEntry(inBuffer);
			entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);

			entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);

			if (entry.header.extraLength) {
				entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
			}

			if (entry.header.commentLength)
				entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);

			index += entry.header.entryHeaderSize;

			entryList[i] = entry;
			entryTable[entry.entryName] = entry;
		}
	}

	function readMainHeader() {
		var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size
			n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length
			endOffset = -1; // Start offset of the END header

		for (i; i >= n; i--) {
			if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
			if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { // "PK\005\006"
				endOffset = i;
				break;
			}
		}
		if (!~endOffset)
			throw Utils.Errors.INVALID_FORMAT;

		mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));
		if (mainHeader.commentLength) {
			_comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);
		}
		readEntries();
	}

	return {
		/**
		 * Returns an array of ZipEntry objects existent in the current opened archive
		 * @return Array
		 */
		get entries() {
			return entryList;
		},

		/**
		 * Archive comment
		 * @return {String}
		 */
		get comment() {
			return _comment.toString();
		},
		set comment(val) {
			mainHeader.commentLength = val.length;
			_comment = val;
		},

		/**
		 * Returns a reference to the entry with the given name or null if entry is inexistent
		 *
		 * @param entryName
		 * @return ZipEntry
		 */
		getEntry: function (/*String*/entryName) {
			return entryTable[entryName] || null;
		},

		/**
		 * Adds the given entry to the entry list
		 *
		 * @param entry
		 */
		setEntry: function (/*ZipEntry*/entry) {
			entryList.push(entry);
			entryTable[entry.entryName] = entry;
			mainHeader.totalEntries = entryList.length;
		},

		/**
		 * Removes the entry with the given name from the entry list.
		 *
		 * If the entry is a directory, then all nested files and directories will be removed
		 * @param entryName
		 */
		deleteEntry: function (/*String*/entryName) {
			var entry = entryTable[entryName];
			if (entry && entry.isDirectory) {
				var _self = this;
				this.getEntryChildren(entry).forEach(function (child) {
					if (child.entryName !== entryName) {
						_self.deleteEntry(child.entryName)
					}
				})
			}
			entryList.splice(entryList.indexOf(entry), 1);
			delete(entryTable[entryName]);
			mainHeader.totalEntries = entryList.length;
		},

		/**
		 *  Iterates and returns all nested files and directories of the given entry
		 *
		 * @param entry
		 * @return Array
		 */
		getEntryChildren: function (/*ZipEntry*/entry) {
			if (entry.isDirectory) {
				var list = [],
					name = entry.entryName,
					len = name.length;

				entryList.forEach(function (zipEntry) {
					if (zipEntry.entryName.substr(0, len) === name) {
						list.push(zipEntry);
					}
				});
				return list;
			}
			return []
		},

		/**
		 * Returns the zip file
		 *
		 * @return Buffer
		 */
		compressToBuffer: function () {
			if (entryList.length > 1) {
				entryList.sort(function (a, b) {
					var nameA = a.entryName.toLowerCase();
					var nameB = b.entryName.toLowerCase();
					if (nameA < nameB) {
						return -1
					}
					if (nameA > nameB) {
						return 1
					}
					return 0;
				});
			}

			var totalSize = 0,
				dataBlock = [],
				entryHeaders = [],
				dindex = 0;

			mainHeader.size = 0;
			mainHeader.offset = 0;

			entryList.forEach(function (entry) {
				// compress data and set local and entry header accordingly. Reason why is called first
				var compressedData = entry.getCompressedData();
				// data header
				entry.header.offset = dindex;
				var dataHeader = entry.header.dataHeaderToBinary();
				var c = entry.entryName + entry.extra.toString();
				var postHeader = Buffer.alloc(c.length, c);
				var dataLength = dataHeader.length + postHeader.length + compressedData.length;

				dindex += dataLength;

				dataBlock.push(dataHeader);
				dataBlock.push(postHeader);
				dataBlock.push(compressedData);

				var entryHeader = entry.packHeader();
				entryHeaders.push(entryHeader);
				mainHeader.size += entryHeader.length;
				totalSize += (dataLength + entryHeader.length);
			});

			totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
			// point to end of data and beginning of central directory first record
			mainHeader.offset = dindex;

			dindex = 0;
			var outBuffer = Buffer.alloc(totalSize);
			dataBlock.forEach(function (content) {
				content.copy(outBuffer, dindex); // write data blocks
				dindex += content.length;
			});
			entryHeaders.forEach(function (content) {
				content.copy(outBuffer, dindex); // write central directory entries
				dindex += content.length;
			});

			var mh = mainHeader.toBinary();
			if (_comment) {
				_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
			}

			mh.copy(outBuffer, dindex); // write main header

			return outBuffer
		},

		toAsyncBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {
			if (entryList.length > 1) {
				entryList.sort(function (a, b) {
					var nameA = a.entryName.toLowerCase();
					var nameB = b.entryName.toLowerCase();
					if (nameA > nameB) {
						return -1
					}
					if (nameA < nameB) {
						return 1
					}
					return 0;
				});
			}

			var totalSize = 0,
				dataBlock = [],
				entryHeaders = [],
				dindex = 0;

			mainHeader.size = 0;
			mainHeader.offset = 0;

			var compress = function (entryList) {
				var self = arguments.callee;
				if (entryList.length) {
					var entry = entryList.pop();
					var name = entry.entryName + entry.extra.toString();
					if (onItemStart) onItemStart(name);
					entry.getCompressedDataAsync(function (compressedData) {
						if (onItemEnd) onItemEnd(name);

						entry.header.offset = dindex;
						// data header
						var dataHeader = entry.header.dataHeaderToBinary();
						var postHeader = Buffer.alloc(name);
						var dataLength = dataHeader.length + postHeader.length + compressedData.length;

						dindex += dataLength;

						dataBlock.push(dataHeader);
						dataBlock.push(postHeader);
						dataBlock.push(compressedData);

						var entryHeader = entry.packHeader();
						entryHeaders.push(entryHeader);
						mainHeader.size += entryHeader.length;
						totalSize += (dataLength + entryHeader.length);

						if (entryList.length) {
							self(entryList);
						} else {


							totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
							// point to end of data and beginning of central directory first record
							mainHeader.offset = dindex;

							dindex = 0;
							var outBuffer = Buffer.alloc(totalSize);
							dataBlock.forEach(function (content) {
								content.copy(outBuffer, dindex); // write data blocks
								dindex += content.length;
							});
							entryHeaders.forEach(function (content) {
								content.copy(outBuffer, dindex); // write central directory entries
								dindex += content.length;
							});

							var mh = mainHeader.toBinary();
							if (_comment) {
								_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
							}

							mh.copy(outBuffer, dindex); // write main header

							onSuccess(outBuffer);
						}
					});
				}
			};

			compress(entryList);
		}
	}
};


/***/ }),
/* 524 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var KEYWORDS = [
  'multipleOf',
  'maximum',
  'exclusiveMaximum',
  'minimum',
  'exclusiveMinimum',
  'maxLength',
  'minLength',
  'pattern',
  'additionalItems',
  'maxItems',
  'minItems',
  'uniqueItems',
  'maxProperties',
  'minProperties',
  'required',
  'additionalProperties',
  'enum',
  'format',
  'const'
];

module.exports = function (metaSchema, keywordsJsonPointers) {
  for (var i=0; i<keywordsJsonPointers.length; i++) {
    metaSchema = JSON.parse(JSON.stringify(metaSchema));
    var segments = keywordsJsonPointers[i].split('/');
    var keywords = metaSchema;
    var j;
    for (j=1; j<segments.length; j++)
      keywords = keywords[segments[j]];

    for (j=0; j<KEYWORDS.length; j++) {
      var key = KEYWORDS[j];
      var schema = keywords[key];
      if (schema) {
        keywords[key] = {
          anyOf: [
            schema,
            { $ref: 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#' }
          ]
        };
      }
    }
  }

  return metaSchema;
};


/***/ }),
/* 525 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";



var Cache = module.exports = function Cache() {
  this._cache = {};
};


Cache.prototype.put = function Cache_put(key, value) {
  this._cache[key] = value;
};


Cache.prototype.get = function Cache_get(key) {
  return this._cache[key];
};


Cache.prototype.del = function Cache_del(key) {
  delete this._cache[key];
};


Cache.prototype.clear = function Cache_clear() {
  this._cache = {};
};


/***/ }),
/* 526 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


//all requires must be explicit because browserify won't work with dynamic requires
module.exports = {
  '$ref': __webpack_require__(547),
  allOf: __webpack_require__(532),
  anyOf: __webpack_require__(533),
  const: __webpack_require__(534),
  contains: __webpack_require__(535),
  dependencies: __webpack_require__(537),
  'enum': __webpack_require__(538),
  format: __webpack_require__(539),
  items: __webpack_require__(540),
  maximum: __webpack_require__(268),
  minimum: __webpack_require__(268),
  maxItems: __webpack_require__(269),
  minItems: __webpack_require__(269),
  maxLength: __webpack_require__(270),
  minLength: __webpack_require__(270),
  maxProperties: __webpack_require__(271),
  minProperties: __webpack_require__(271),
  multipleOf: __webpack_require__(541),
  not: __webpack_require__(542),
  oneOf: __webpack_require__(543),
  pattern: __webpack_require__(544),
  properties: __webpack_require__(545),
  propertyNames: __webpack_require__(546),
  required: __webpack_require__(548),
  uniqueItems: __webpack_require__(549),
  validate: __webpack_require__(272)
};


/***/ }),
/* 527 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var MissingRefError = __webpack_require__(183).MissingRef;

module.exports = compileAsync;


/**
 * Creates validating function for passed schema with asynchronous loading of missing schemas.
 * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.
 * @this  Ajv
 * @param {Object}   schema schema object
 * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped
 * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.
 * @return {Promise} promise that resolves with a validating function.
 */
function compileAsync(schema, meta, callback) {
  /* eslint no-shadow: 0 */
  /* global Promise */
  /* jshint validthis: true */
  var self = this;
  if (typeof this._opts.loadSchema != 'function')
    throw new Error('options.loadSchema should be a function');

  if (typeof meta == 'function') {
    callback = meta;
    meta = undefined;
  }

  var p = loadMetaSchemaOf(schema).then(function () {
    var schemaObj = self._addSchema(schema, undefined, meta);
    return schemaObj.validate || _compileAsync(schemaObj);
  });

  if (callback) {
    p.then(
      function(v) { callback(null, v); },
      callback
    );
  }

  return p;


  function loadMetaSchemaOf(sch) {
    var $schema = sch.$schema;
    return $schema && !self.getSchema($schema)
            ? compileAsync.call(self, { $ref: $schema }, true)
            : Promise.resolve();
  }


  function _compileAsync(schemaObj) {
    try { return self._compile(schemaObj); }
    catch(e) {
      if (e instanceof MissingRefError) return loadMissingSchema(e);
      throw e;
    }


    function loadMissingSchema(e) {
      var ref = e.missingSchema;
      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');

      var schemaPromise = self._loadingSchemas[ref];
      if (!schemaPromise) {
        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);
        schemaPromise.then(removePromise, removePromise);
      }

      return schemaPromise.then(function (sch) {
        if (!added(ref)) {
          return loadMetaSchemaOf(sch).then(function () {
            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);
          });
        }
      }).then(function() {
        return _compileAsync(schemaObj);
      });

      function removePromise() {
        delete self._loadingSchemas[ref];
      }

      function added(ref) {
        return self._refs[ref] || self._schemas[ref];
      }
    }
  }
}


/***/ }),
/* 528 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var util = __webpack_require__(88);

var DATE = /^\d\d\d\d-(\d\d)-(\d\d)$/;
var DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];
var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i;
var HOSTNAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i;
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
var URIREF = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
// uri-template: https://tools.ietf.org/html/rfc6570
var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
// For the source: https://gist.github.com/dperini/729294
// For test cases: https://mathiasbynens.be/demo/url-regex
// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.
// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;
var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$|^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;


module.exports = formats;

function formats(mode) {
  mode = mode == 'full' ? 'full' : 'fast';
  return util.copy(formats[mode]);
}


formats.fast = {
  // date: http://tools.ietf.org/html/rfc3339#section-5.6
  date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6
  time: /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
  'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,
  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
  uri: /^(?:[a-z][a-z0-9+-.]*)(?::|\/)\/?[^\s]*$/i,
  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i,
  'uri-template': URITEMPLATE,
  url: URL,
  // email (sources from jsen validator):
  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')
  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
  hostname: HOSTNAME,
  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
  regex: regex,
  // uuid: http://tools.ietf.org/html/rfc4122
  uuid: UUID,
  // JSON-pointer: https://tools.ietf.org/html/rfc6901
  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
  'json-pointer': JSON_POINTER,
  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
  'relative-json-pointer': RELATIVE_JSON_POINTER
};


formats.full = {
  date: date,
  time: time,
  'date-time': date_time,
  uri: uri,
  'uri-reference': URIREF,
  'uri-template': URITEMPLATE,
  url: URL,
  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
  hostname: hostname,
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
  regex: regex,
  uuid: UUID,
  'json-pointer': JSON_POINTER,
  'relative-json-pointer': RELATIVE_JSON_POINTER
};


function date(str) {
  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6
  var matches = str.match(DATE);
  if (!matches) return false;

  var month = +matches[1];
  var day = +matches[2];
  return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];
}


function time(str, full) {
  var matches = str.match(TIME);
  if (!matches) return false;

  var hour = matches[1];
  var minute = matches[2];
  var second = matches[3];
  var timeZone = matches[5];
  return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);
}


var DATE_TIME_SEPARATOR = /t|\s/i;
function date_time(str) {
  // http://tools.ietf.org/html/rfc3339#section-5.6
  var dateTime = str.split(DATE_TIME_SEPARATOR);
  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);
}


function hostname(str) {
  // https://tools.ietf.org/html/rfc1034#section-3.5
  // https://tools.ietf.org/html/rfc1123#section-2
  return str.length <= 255 && HOSTNAME.test(str);
}


var NOT_URI_FRAGMENT = /\/|:/;
function uri(str) {
  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."
  return NOT_URI_FRAGMENT.test(str) && URI.test(str);
}


var Z_ANCHOR = /[^\\]\\Z/;
function regex(str) {
  if (Z_ANCHOR.test(str)) return false;
  try {
    new RegExp(str);
    return true;
  } catch(e) {
    return false;
  }
}


/***/ }),
/* 529 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var resolve = __webpack_require__(184)
  , util = __webpack_require__(88)
  , errorClasses = __webpack_require__(183)
  , stableStringify = __webpack_require__(342);

var validateGenerator = __webpack_require__(272);

/**
 * Functions below are used inside compiled validations function
 */

var co = __webpack_require__(293);
var ucs2length = util.ucs2length;
var equal = __webpack_require__(217);

// this error is thrown by async schemas to return validation errors via exception
var ValidationError = errorClasses.Validation;

module.exports = compile;


/**
 * Compiles schema to validation function
 * @this   Ajv
 * @param  {Object} schema schema object
 * @param  {Object} root object with information about the root schema for this schema
 * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution
 * @param  {String} baseId base ID for IDs in the schema
 * @return {Function} validation function
 */
function compile(schema, root, localRefs, baseId) {
  /* jshint validthis: true, evil: true */
  /* eslint no-shadow: 0 */
  var self = this
    , opts = this._opts
    , refVal = [ undefined ]
    , refs = {}
    , patterns = []
    , patternsHash = {}
    , defaults = []
    , defaultsHash = {}
    , customRules = [];

  root = root || { schema: schema, refVal: refVal, refs: refs };

  var c = checkCompiling.call(this, schema, root, baseId);
  var compilation = this._compilations[c.index];
  if (c.compiling) return (compilation.callValidate = callValidate);

  var formats = this._formats;
  var RULES = this.RULES;

  try {
    var v = localCompile(schema, root, localRefs, baseId);
    compilation.validate = v;
    var cv = compilation.callValidate;
    if (cv) {
      cv.schema = v.schema;
      cv.errors = null;
      cv.refs = v.refs;
      cv.refVal = v.refVal;
      cv.root = v.root;
      cv.$async = v.$async;
      if (opts.sourceCode) cv.source = v.source;
    }
    return v;
  } finally {
    endCompiling.call(this, schema, root, baseId);
  }

  function callValidate() {
    var validate = compilation.validate;
    var result = validate.apply(null, arguments);
    callValidate.errors = validate.errors;
    return result;
  }

  function localCompile(_schema, _root, localRefs, baseId) {
    var isRoot = !_root || (_root && _root.schema == _schema);
    if (_root.schema != root.schema)
      return compile.call(self, _schema, _root, localRefs, baseId);

    var $async = _schema.$async === true;

    var sourceCode = validateGenerator({
      isTop: true,
      schema: _schema,
      isRoot: isRoot,
      baseId: baseId,
      root: _root,
      schemaPath: '',
      errSchemaPath: '#',
      errorPath: '""',
      MissingRefError: errorClasses.MissingRef,
      RULES: RULES,
      validate: validateGenerator,
      util: util,
      resolve: resolve,
      resolveRef: resolveRef,
      usePattern: usePattern,
      useDefault: useDefault,
      useCustomRule: useCustomRule,
      opts: opts,
      formats: formats,
      logger: self.logger,
      self: self
    });

    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)
                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)
                   + sourceCode;

    if (opts.processCode) sourceCode = opts.processCode(sourceCode);
    // console.log('\n\n\n *** \n', JSON.stringify(sourceCode));
    var validate;
    try {
      var makeValidate = new Function(
        'self',
        'RULES',
        'formats',
        'root',
        'refVal',
        'defaults',
        'customRules',
        'co',
        'equal',
        'ucs2length',
        'ValidationError',
        sourceCode
      );

      validate = makeValidate(
        self,
        RULES,
        formats,
        root,
        refVal,
        defaults,
        customRules,
        co,
        equal,
        ucs2length,
        ValidationError
      );

      refVal[0] = validate;
    } catch(e) {
      self.logger.error('Error compiling schema, function code:', sourceCode);
      throw e;
    }

    validate.schema = _schema;
    validate.errors = null;
    validate.refs = refs;
    validate.refVal = refVal;
    validate.root = isRoot ? validate : _root;
    if ($async) validate.$async = true;
    if (opts.sourceCode === true) {
      validate.source = {
        code: sourceCode,
        patterns: patterns,
        defaults: defaults
      };
    }

    return validate;
  }

  function resolveRef(baseId, ref, isRoot) {
    ref = resolve.url(baseId, ref);
    var refIndex = refs[ref];
    var _refVal, refCode;
    if (refIndex !== undefined) {
      _refVal = refVal[refIndex];
      refCode = 'refVal[' + refIndex + ']';
      return resolvedRef(_refVal, refCode);
    }
    if (!isRoot && root.refs) {
      var rootRefId = root.refs[ref];
      if (rootRefId !== undefined) {
        _refVal = root.refVal[rootRefId];
        refCode = addLocalRef(ref, _refVal);
        return resolvedRef(_refVal, refCode);
      }
    }

    refCode = addLocalRef(ref);
    var v = resolve.call(self, localCompile, root, ref);
    if (v === undefined) {
      var localSchema = localRefs && localRefs[ref];
      if (localSchema) {
        v = resolve.inlineRef(localSchema, opts.inlineRefs)
            ? localSchema
            : compile.call(self, localSchema, root, localRefs, baseId);
      }
    }

    if (v === undefined) {
      removeLocalRef(ref);
    } else {
      replaceLocalRef(ref, v);
      return resolvedRef(v, refCode);
    }
  }

  function addLocalRef(ref, v) {
    var refId = refVal.length;
    refVal[refId] = v;
    refs[ref] = refId;
    return 'refVal' + refId;
  }

  function removeLocalRef(ref) {
    delete refs[ref];
  }

  function replaceLocalRef(ref, v) {
    var refId = refs[ref];
    refVal[refId] = v;
  }

  function resolvedRef(refVal, code) {
    return typeof refVal == 'object' || typeof refVal == 'boolean'
            ? { code: code, schema: refVal, inline: true }
            : { code: code, $async: refVal && refVal.$async };
  }

  function usePattern(regexStr) {
    var index = patternsHash[regexStr];
    if (index === undefined) {
      index = patternsHash[regexStr] = patterns.length;
      patterns[index] = regexStr;
    }
    return 'pattern' + index;
  }

  function useDefault(value) {
    switch (typeof value) {
      case 'boolean':
      case 'number':
        return '' + value;
      case 'string':
        return util.toQuotedString(value);
      case 'object':
        if (value === null) return 'null';
        var valueStr = stableStringify(value);
        var index = defaultsHash[valueStr];
        if (index === undefined) {
          index = defaultsHash[valueStr] = defaults.length;
          defaults[index] = value;
        }
        return 'default' + index;
    }
  }

  function useCustomRule(rule, schema, parentSchema, it) {
    var validateSchema = rule.definition.validateSchema;
    if (validateSchema && self._opts.validateSchema !== false) {
      var valid = validateSchema(schema);
      if (!valid) {
        var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);
        if (self._opts.validateSchema == 'log') self.logger.error(message);
        else throw new Error(message);
      }
    }

    var compile = rule.definition.compile
      , inline = rule.definition.inline
      , macro = rule.definition.macro;

    var validate;
    if (compile) {
      validate = compile.call(self, schema, parentSchema, it);
    } else if (macro) {
      validate = macro.call(self, schema, parentSchema, it);
      if (opts.validateSchema !== false) self.validateSchema(validate, true);
    } else if (inline) {
      validate = inline.call(self, it, rule.keyword, schema, parentSchema);
    } else {
      validate = rule.definition.validate;
      if (!validate) return;
    }

    if (validate === undefined)
      throw new Error('custom keyword "' + rule.keyword + '"failed to compile');

    var index = customRules.length;
    customRules[index] = validate;

    return {
      code: 'customRule' + index,
      validate: validate
    };
  }
}


/**
 * Checks if the schema is currently compiled
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean)
 */
function checkCompiling(schema, root, baseId) {
  /* jshint validthis: true */
  var index = compIndex.call(this, schema, root, baseId);
  if (index >= 0) return { index: index, compiling: true };
  index = this._compilations.length;
  this._compilations[index] = {
    schema: schema,
    root: root,
    baseId: baseId
  };
  return { index: index, compiling: false };
}


/**
 * Removes the schema from the currently compiled list
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 */
function endCompiling(schema, root, baseId) {
  /* jshint validthis: true */
  var i = compIndex.call(this, schema, root, baseId);
  if (i >= 0) this._compilations.splice(i, 1);
}


/**
 * Index of schema compilation in the currently compiled list
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 * @return {Integer} compilation index
 */
function compIndex(schema, root, baseId) {
  /* jshint validthis: true */
  for (var i=0; i<this._compilations.length; i++) {
    var c = this._compilations[i];
    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;
  }
  return -1;
}


function patternCode(i, patterns) {
  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';
}


function defaultCode(i) {
  return 'var default' + i + ' = defaults[' + i + '];';
}


function refValCode(i, refVal) {
  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';
}


function customRuleCode(i) {
  return 'var customRule' + i + ' = customRules[' + i + '];';
}


function vars(arr, statement) {
  if (!arr.length) return '';
  var code = '';
  for (var i=0; i<arr.length; i++)
    code += statement(i, arr);
  return code;
}


/***/ }),
/* 530 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var ruleModules = __webpack_require__(526)
  , toHash = __webpack_require__(88).toHash;

module.exports = function rules() {
  var RULES = [
    { type: 'number',
      rules: [ { 'maximum': ['exclusiveMaximum'] },
               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },
    { type: 'string',
      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },
    { type: 'array',
      rules: [ 'maxItems', 'minItems', 'uniqueItems', 'contains', 'items' ] },
    { type: 'object',
      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',
               { 'properties': ['additionalProperties', 'patternProperties'] } ] },
    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }
  ];

  var ALL = [ 'type' ];
  var KEYWORDS = [
    'additionalItems', '$schema', '$id', 'id', 'title',
    'description', 'default', 'definitions'
  ];
  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];
  RULES.all = toHash(ALL);
  RULES.types = toHash(TYPES);

  RULES.forEach(function (group) {
    group.rules = group.rules.map(function (keyword) {
      var implKeywords;
      if (typeof keyword == 'object') {
        var key = Object.keys(keyword)[0];
        implKeywords = keyword[key];
        keyword = key;
        implKeywords.forEach(function (k) {
          ALL.push(k);
          RULES.all[k] = true;
        });
      }
      ALL.push(keyword);
      var rule = RULES.all[keyword] = {
        keyword: keyword,
        code: ruleModules[keyword],
        implements: implKeywords
      };
      return rule;
    });

    if (group.type) RULES.types[group.type] = group;
  });

  RULES.keywords = toHash(ALL.concat(KEYWORDS));
  RULES.custom = {};

  return RULES;
};


/***/ }),
/* 531 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// https://mathiasbynens.be/notes/javascript-encoding
// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode
module.exports = function ucs2length(str) {
  var length = 0
    , len = str.length
    , pos = 0
    , value;
  while (pos < len) {
    length++;
    value = str.charCodeAt(pos++);
    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {
      // high surrogate, and there is a next character
      value = str.charCodeAt(pos);
      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate
    }
  }
  return length;
};


/***/ }),
/* 532 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_allOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $currentBaseId = $it.baseId,
    $allSchemasEmpty = true;
  var arr1 = $schema;
  if (arr1) {
    var $sch, $i = -1,
      l1 = arr1.length - 1;
    while ($i < l1) {
      $sch = arr1[$i += 1];
      if (it.util.schemaHasRules($sch, it.RULES.all)) {
        $allSchemasEmpty = false;
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
        if ($breakOnError) {
          out += ' if (' + ($nextValid) + ') { ';
          $closingBraces += '}';
        }
      }
    }
  }
  if ($breakOnError) {
    if ($allSchemasEmpty) {
      out += ' if (true) { ';
    } else {
      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';
    }
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 533 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_anyOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $noEmptySchema = $schema.every(function($sch) {
    return it.util.schemaHasRules($sch, it.RULES.all);
  });
  if ($noEmptySchema) {
    var $currentBaseId = $it.baseId;
    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var arr1 = $schema;
    if (arr1) {
      var $sch, $i = -1,
        l1 = arr1.length - 1;
      while ($i < l1) {
        $sch = arr1[$i += 1];
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';
        $closingBraces += '}';
      }
    }
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should match some schema in anyOf\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError(vErrors); ';
      } else {
        out += ' validate.errors = vErrors; return false; ';
      }
    }
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
    if (it.opts.allErrors) {
      out += ' } ';
    }
    out = it.util.cleanUpCode(out);
  } else {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  }
  return out;
}


/***/ }),
/* 534 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_const(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!$isData) {
    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';
  }
  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be equal to constant\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' }';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 535 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_contains(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $idx = 'i' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $currentBaseId = it.baseId,
    $nonEmptySchema = it.util.schemaHasRules($schema, it.RULES.all);
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if ($nonEmptySchema) {
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
    var $passData = $data + '[' + $idx + ']';
    $it.dataPathArr[$dataNxt] = $idx;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    out += ' if (' + ($nextValid) + ') break; }  ';
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';
  } else {
    out += ' if (' + ($data) + '.length == 0) {';
  }
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should contain a valid item\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } else { ';
  if ($nonEmptySchema) {
    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
  }
  if (it.opts.allErrors) {
    out += ' } ';
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 536 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_custom(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $rule = this,
    $definition = 'definition' + $lvl,
    $rDef = $rule.definition,
    $closingBraces = '';
  var $compile, $inline, $macro, $ruleValidate, $validateCode;
  if ($isData && $rDef.$data) {
    $validateCode = 'keywordValidate' + $lvl;
    var $validateSchema = $rDef.validateSchema;
    out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';
  } else {
    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
    if (!$ruleValidate) return;
    $schemaValue = 'validate.schema' + $schemaPath;
    $validateCode = $ruleValidate.code;
    $compile = $rDef.compile;
    $inline = $rDef.inline;
    $macro = $rDef.macro;
  }
  var $ruleErrs = $validateCode + '.errors',
    $i = 'i' + $lvl,
    $ruleErr = 'ruleErr' + $lvl,
    $asyncKeyword = $rDef.async;
  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');
  if (!($inline || $macro)) {
    out += '' + ($ruleErrs) + ' = null;';
  }
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if ($isData && $rDef.$data) {
    $closingBraces += '}';
    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';
    if ($validateSchema) {
      $closingBraces += '}';
      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';
    }
  }
  if ($inline) {
    if ($rDef.statements) {
      out += ' ' + ($ruleValidate.validate) + ' ';
    } else {
      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';
    }
  } else if ($macro) {
    var $it = it.util.copy(it);
    var $closingBraces = '';
    $it.level++;
    var $nextValid = 'valid' + $it.level;
    $it.schema = $ruleValidate.validate;
    $it.schemaPath = '';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var $code = it.validate($it).replace(/validate\.schema/g, $validateCode);
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($code);
  } else {
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    out += '  ' + ($validateCode) + '.call( ';
    if (it.opts.passContext) {
      out += 'this';
    } else {
      out += 'self';
    }
    if ($compile || $rDef.schema === false) {
      out += ' , ' + ($data) + ' ';
    } else {
      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';
    }
    out += ' , (dataPath || \'\')';
    if (it.errorPath != '""') {
      out += ' + ' + (it.errorPath);
    }
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';
    var def_callRuleValidate = out;
    out = $$outStack.pop();
    if ($rDef.errors === false) {
      out += ' ' + ($valid) + ' = ';
      if ($asyncKeyword) {
        out += '' + (it.yieldAwait);
      }
      out += '' + (def_callRuleValidate) + '; ';
    } else {
      if ($asyncKeyword) {
        $ruleErrs = 'customErrors' + $lvl;
        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = ' + (it.yieldAwait) + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';
      } else {
        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';
      }
    }
  }
  if ($rDef.modifying) {
    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';
  }
  out += '' + ($closingBraces);
  if ($rDef.valid) {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  } else {
    out += ' if ( ';
    if ($rDef.valid === undefined) {
      out += ' !';
      if ($macro) {
        out += '' + ($nextValid);
      } else {
        out += '' + ($valid);
      }
    } else {
      out += ' ' + (!$rDef.valid) + ' ';
    }
    out += ') { ';
    $errorKeyword = $rule.keyword;
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    var def_customError = out;
    out = $$outStack.pop();
    if ($inline) {
      if ($rDef.errors) {
        if ($rDef.errors != 'full') {
          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
          if (it.opts.verbose) {
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
          }
          out += ' } ';
        }
      } else {
        if ($rDef.errors === false) {
          out += ' ' + (def_customError) + ' ';
        } else {
          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
          if (it.opts.verbose) {
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
          }
          out += ' } } ';
        }
      }
    } else if ($macro) {
      out += '   var err =   '; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
        if (it.opts.messages !== false) {
          out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError(vErrors); ';
        } else {
          out += ' validate.errors = vErrors; return false; ';
        }
      }
    } else {
      if ($rDef.errors === false) {
        out += ' ' + (def_customError) + ' ';
      } else {
        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '";  ';
        if (it.opts.verbose) {
          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
        }
        out += ' } } else { ' + (def_customError) + ' } ';
      }
    }
    out += ' } ';
    if ($breakOnError) {
      out += ' else { ';
    }
  }
  return out;
}


/***/ }),
/* 537 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_dependencies(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $schemaDeps = {},
    $propertyDeps = {},
    $ownProperties = it.opts.ownProperties;
  for ($property in $schema) {
    var $sch = $schema[$property];
    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;
    $deps[$property] = $sch;
  }
  out += 'var ' + ($errs) + ' = errors;';
  var $currentErrorPath = it.errorPath;
  out += 'var missing' + ($lvl) + ';';
  for (var $property in $propertyDeps) {
    $deps = $propertyDeps[$property];
    if ($deps.length) {
      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
      if ($ownProperties) {
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
      }
      if ($breakOnError) {
        out += ' && ( ';
        var arr1 = $deps;
        if (arr1) {
          var $propertyKey, $i = -1,
            l1 = arr1.length - 1;
          while ($i < l1) {
            $propertyKey = arr1[$i += 1];
            if ($i) {
              out += ' || ';
            }
            var $prop = it.util.getProperty($propertyKey),
              $useData = $data + $prop;
            out += ' ( ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
          }
        }
        out += ')) {  ';
        var $propertyPath = 'missing' + $lvl,
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
        }
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should have ';
            if ($deps.length == 1) {
              out += 'property ' + (it.util.escapeQuotes($deps[0]));
            } else {
              out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
            }
            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
      } else {
        out += ' ) { ';
        var arr2 = $deps;
        if (arr2) {
          var $propertyKey, i2 = -1,
            l2 = arr2.length - 1;
          while (i2 < l2) {
            $propertyKey = arr2[i2 += 1];
            var $prop = it.util.getProperty($propertyKey),
              $missingProperty = it.util.escapeQuotes($propertyKey),
              $useData = $data + $prop;
            if (it.opts._errorDataPathProperty) {
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
            }
            out += ' if ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') {  var err =   '; /* istanbul ignore else */
            if (it.createErrors !== false) {
              out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
              if (it.opts.messages !== false) {
                out += ' , message: \'should have ';
                if ($deps.length == 1) {
                  out += 'property ' + (it.util.escapeQuotes($deps[0]));
                } else {
                  out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
                }
                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
              }
              if (it.opts.verbose) {
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
              }
              out += ' } ';
            } else {
              out += ' {} ';
            }
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
          }
        }
      }
      out += ' }   ';
      if ($breakOnError) {
        $closingBraces += '}';
        out += ' else { ';
      }
    }
  }
  it.errorPath = $currentErrorPath;
  var $currentBaseId = $it.baseId;
  for (var $property in $schemaDeps) {
    var $sch = $schemaDeps[$property];
    if (it.util.schemaHasRules($sch, it.RULES.all)) {
      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
      if ($ownProperties) {
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
      }
      out += ') { ';
      $it.schema = $sch;
      $it.schemaPath = $schemaPath + it.util.getProperty($property);
      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);
      out += '  ' + (it.validate($it)) + ' ';
      $it.baseId = $currentBaseId;
      out += ' }  ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
        $closingBraces += '}';
      }
    }
  }
  if ($breakOnError) {
    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 538 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_enum(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $i = 'i' + $lvl,
    $vSchema = 'schema' + $lvl;
  if (!$isData) {
    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';
  }
  out += 'var ' + ($valid) + ';';
  if ($isData) {
    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
  }
  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';
  if ($isData) {
    out += '  }  ';
  }
  out += ' if (!' + ($valid) + ') {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be equal to one of the allowed values\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' }';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 539 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_format(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  if (it.opts.format === false) {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
    return out;
  }
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $unknownFormats = it.opts.unknownFormats,
    $allowUnknown = Array.isArray($unknownFormats);
  if ($isData) {
    var $format = 'format' + $lvl,
      $isObject = 'isObject' + $lvl,
      $formatType = 'formatType' + $lvl;
    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { ';
    if (it.async) {
      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';
    }
    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';
    if ($isData) {
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
    }
    out += ' (';
    if ($unknownFormats != 'ignore') {
      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';
      if ($allowUnknown) {
        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';
      }
      out += ') || ';
    }
    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? ';
    if (it.async) {
      out += ' (async' + ($lvl) + ' ? ' + (it.yieldAwait) + ' ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';
    } else {
      out += ' ' + ($format) + '(' + ($data) + ') ';
    }
    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';
  } else {
    var $format = it.formats[$schema];
    if (!$format) {
      if ($unknownFormats == 'ignore') {
        it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"');
        if ($breakOnError) {
          out += ' if (true) { ';
        }
        return out;
      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {
        if ($breakOnError) {
          out += ' if (true) { ';
        }
        return out;
      } else {
        throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"');
      }
    }
    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;
    var $formatType = $isObject && $format.type || 'string';
    if ($isObject) {
      var $async = $format.async === true;
      $format = $format.validate;
    }
    if ($formatType != $ruleType) {
      if ($breakOnError) {
        out += ' if (true) { ';
      }
      return out;
    }
    if ($async) {
      if (!it.async) throw new Error('async format in sync schema');
      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';
      out += ' if (!(' + (it.yieldAwait) + ' ' + ($formatRef) + '(' + ($data) + '))) { ';
    } else {
      out += ' if (! ';
      var $formatRef = 'formats' + it.util.getProperty($schema);
      if ($isObject) $formatRef += '.validate';
      if (typeof $format == 'function') {
        out += ' ' + ($formatRef) + '(' + ($data) + ') ';
      } else {
        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';
      }
      out += ') { ';
    }
  }
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';
    if ($isData) {
      out += '' + ($schemaValue);
    } else {
      out += '' + (it.util.toQuotedString($schema));
    }
    out += '  } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match format "';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + (it.util.escapeQuotes($schema));
      }
      out += '"\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + (it.util.toQuotedString($schema));
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 540 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_items(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $idx = 'i' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $currentBaseId = it.baseId;
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if (Array.isArray($schema)) {
    var $additionalItems = it.schema.additionalItems;
    if ($additionalItems === false) {
      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';
      var $currErrSchemaPath = $errSchemaPath;
      $errSchemaPath = it.errSchemaPath + '/additionalItems';
      out += '  if (!' + ($valid) + ') {   ';
      var $$outStack = $$outStack || [];
      $$outStack.push(out);
      out = ''; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';
        if (it.opts.messages !== false) {
          out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      var __err = out;
      out = $$outStack.pop();
      if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError([' + (__err) + ']); ';
        } else {
          out += ' validate.errors = [' + (__err) + ']; return false; ';
        }
      } else {
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      }
      out += ' } ';
      $errSchemaPath = $currErrSchemaPath;
      if ($breakOnError) {
        $closingBraces += '}';
        out += ' else { ';
      }
    }
    var arr1 = $schema;
    if (arr1) {
      var $sch, $i = -1,
        l1 = arr1.length - 1;
      while ($i < l1) {
        $sch = arr1[$i += 1];
        if (it.util.schemaHasRules($sch, it.RULES.all)) {
          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';
          var $passData = $data + '[' + $i + ']';
          $it.schema = $sch;
          $it.schemaPath = $schemaPath + '[' + $i + ']';
          $it.errSchemaPath = $errSchemaPath + '/' + $i;
          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);
          $it.dataPathArr[$dataNxt] = $i;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          out += ' }  ';
          if ($breakOnError) {
            out += ' if (' + ($nextValid) + ') { ';
            $closingBraces += '}';
          }
        }
      }
    }
    if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {
      $it.schema = $additionalItems;
      $it.schemaPath = it.schemaPath + '.additionalItems';
      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';
      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
      var $passData = $data + '[' + $idx + ']';
      $it.dataPathArr[$dataNxt] = $idx;
      var $code = it.validate($it);
      $it.baseId = $currentBaseId;
      if (it.util.varOccurences($code, $nextData) < 2) {
        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
      } else {
        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
      }
      if ($breakOnError) {
        out += ' if (!' + ($nextValid) + ') break; ';
      }
      out += ' } }  ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
        $closingBraces += '}';
      }
    }
  } else if (it.util.schemaHasRules($schema, it.RULES.all)) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
    var $passData = $data + '[' + $idx + ']';
    $it.dataPathArr[$dataNxt] = $idx;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    if ($breakOnError) {
      out += ' if (!' + ($nextValid) + ') break; ';
    }
    out += ' }';
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 541 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_multipleOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  out += 'var division' + ($lvl) + ';if (';
  if ($isData) {
    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || ';
  }
  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';
  if (it.opts.multipleOfPrecision) {
    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';
  } else {
    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';
  }
  out += ' ) ';
  if ($isData) {
    out += '  )  ';
  }
  out += ' ) {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be multiple of ';
      if ($isData) {
        out += '\' + ' + ($schemaValue);
      } else {
        out += '' + ($schemaValue) + '\'';
      }
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 542 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_not(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  if (it.util.schemaHasRules($schema, it.RULES.all)) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += ' var ' + ($errs) + ' = errors;  ';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    $it.createErrors = false;
    var $allErrorsOption;
    if ($it.opts.allErrors) {
      $allErrorsOption = $it.opts.allErrors;
      $it.opts.allErrors = false;
    }
    out += ' ' + (it.validate($it)) + ' ';
    $it.createErrors = true;
    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' if (' + ($nextValid) + ') {   ';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT be valid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
    if (it.opts.allErrors) {
      out += ' } ';
    }
  } else {
    out += '  var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT be valid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if ($breakOnError) {
      out += ' if (false) { ';
    }
  }
  return out;
}


/***/ }),
/* 543 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_oneOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false;';
  var $currentBaseId = $it.baseId;
  var $wasComposite = it.compositeRule;
  it.compositeRule = $it.compositeRule = true;
  var arr1 = $schema;
  if (arr1) {
    var $sch, $i = -1,
      l1 = arr1.length - 1;
    while ($i < l1) {
      $sch = arr1[$i += 1];
      if (it.util.schemaHasRules($sch, it.RULES.all)) {
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
      } else {
        out += ' var ' + ($nextValid) + ' = true; ';
      }
      if ($i) {
        out += ' if (' + ($nextValid) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { ';
        $closingBraces += '}';
      }
      out += ' if (' + ($nextValid) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;';
    }
  }
  it.compositeRule = $it.compositeRule = $wasComposite;
  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match exactly one schema in oneOf\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError(vErrors); ';
    } else {
      out += ' validate.errors = vErrors; return false; ';
    }
  }
  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';
  if (it.opts.allErrors) {
    out += ' } ';
  }
  return out;
}


/***/ }),
/* 544 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_pattern(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
  }
  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';
    if ($isData) {
      out += '' + ($schemaValue);
    } else {
      out += '' + (it.util.toQuotedString($schema));
    }
    out += '  } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match pattern "';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + (it.util.escapeQuotes($schema));
      }
      out += '"\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + (it.util.toQuotedString($schema));
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),
/* 545 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_properties(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $key = 'key' + $lvl,
    $idx = 'idx' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $dataProperties = 'dataProperties' + $lvl;
  var $schemaKeys = Object.keys($schema || {}),
    $pProperties = it.schema.patternProperties || {},
    $pPropertyKeys = Object.keys($pProperties),
    $aProperties = it.schema.additionalProperties,
    $someProperties = $schemaKeys.length || $pPropertyKeys.length,
    $noAdditional = $aProperties === false,
    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,
    $removeAdditional = it.opts.removeAdditional,
    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,
    $ownProperties = it.opts.ownProperties,
    $currentBaseId = it.baseId;
  var $required = it.schema.required;
  if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);
  if (it.opts.patternGroups) {
    var $pgProperties = it.schema.patternGroups || {},
      $pgPropertyKeys = Object.keys($pgProperties);
  }
  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';
  if ($ownProperties) {
    out += ' var ' + ($dataProperties) + ' = undefined;';
  }
  if ($checkAdditional) {
    if ($ownProperties) {
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
    } else {
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
    }
    if ($someProperties) {
      out += ' var isAdditional' + ($lvl) + ' = !(false ';
      if ($schemaKeys.length) {
        if ($schemaKeys.length > 5) {
          out += ' || validate.schema' + ($schemaPath) + '[' + ($key) + '] ';
        } else {
          var arr1 = $schemaKeys;
          if (arr1) {
            var $propertyKey, i1 = -1,
              l1 = arr1.length - 1;
            while (i1 < l1) {
              $propertyKey = arr1[i1 += 1];
              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';
            }
          }
        }
      }
      if ($pPropertyKeys.length) {
        var arr2 = $pPropertyKeys;
        if (arr2) {
          var $pProperty, $i = -1,
            l2 = arr2.length - 1;
          while ($i < l2) {
            $pProperty = arr2[$i += 1];
            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';
          }
        }
      }
      if (it.opts.patternGroups && $pgPropertyKeys.length) {
        var arr3 = $pgPropertyKeys;
        if (arr3) {
          var $pgProperty, $i = -1,
            l3 = arr3.length - 1;
          while ($i < l3) {
            $pgProperty = arr3[$i += 1];
            out += ' || ' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ') ';
          }
        }
      }
      out += ' ); if (isAdditional' + ($lvl) + ') { ';
    }
    if ($removeAdditional == 'all') {
      out += ' delete ' + ($data) + '[' + ($key) + ']; ';
    } else {
      var $currentErrorPath = it.errorPath;
      var $additionalProperty = '\' + ' + $key + ' + \'';
      if (it.opts._errorDataPathProperty) {
        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
      }
      if ($noAdditional) {
        if ($removeAdditional) {
          out += ' delete ' + ($data) + '[' + ($key) + ']; ';
        } else {
          out += ' ' + ($nextValid) + ' = false; ';
          var $currErrSchemaPath = $errSchemaPath;
          $errSchemaPath = it.errSchemaPath + '/additionalProperties';
          var $$outStack = $$outStack || [];
          $$outStack.push(out);
          out = ''; /* istanbul ignore else */
          if (it.createErrors !== false) {
            out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } ';
            if (it.opts.messages !== false) {
              out += ' , message: \'should NOT have additional properties\' ';
            }
            if (it.opts.verbose) {
              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
            }
            out += ' } ';
          } else {
            out += ' {} ';
          }
          var __err = out;
          out = $$outStack.pop();
          if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
            if (it.async) {
              out += ' throw new ValidationError([' + (__err) + ']); ';
            } else {
              out += ' validate.errors = [' + (__err) + ']; return false; ';
            }
          } else {
            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
          }
          $errSchemaPath = $currErrSchemaPath;
          if ($breakOnError) {
            out += ' break; ';
          }
        }
      } else if ($additionalIsSchema) {
        if ($removeAdditional == 'failing') {
          out += ' var ' + ($errs) + ' = errors;  ';
          var $wasComposite = it.compositeRule;
          it.compositeRule = $it.compositeRule = true;
          $it.schema = $aProperties;
          $it.schemaPath = it.schemaPath + '.additionalProperties';
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';
          it.compositeRule = $it.compositeRule = $wasComposite;
        } else {
          $it.schema = $aProperties;
          $it.schemaPath = it.schemaPath + '.additionalProperties';
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          if ($breakOnError) {
            out += ' if (!' + ($nextValid) + ') break; ';
          }
        }
      }
      it.errorPath = $currentErrorPath;
    }
    if ($someProperties) {
      out += ' } ';
    }
    out += ' }  ';
    if ($breakOnError) {
      out += ' if (' + ($nextValid) + ') { ';
      $closingBraces += '}';
    }
  }
  var $useDefaults = it.opts.useDefaults && !it.compositeRule;
  if ($schemaKeys.length) {
    var arr4 = $schemaKeys;
    if (arr4) {
      var $propertyKey, i4 = -1,
        l4 = arr4.length - 1;
      while (i4 < l4) {
        $propertyKey = arr4[i4 += 1];
        var $sch = $schema[$propertyKey];
        if (it.util.schemaHasRules($sch, it.RULES.all)) {
          var $prop = it.util.getProperty($propertyKey),
            $passData = $data + $prop,
            $hasDefault = $useDefaults && $sch.default !== undefined;
          $it.schema = $sch;
          $it.schemaPath = $schemaPath + $prop;
          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);
          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);
          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            $code = it.util.varReplace($code, $nextData, $passData);
            var $useData = $passData;
          } else {
            var $useData = $nextData;
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';
          }
          if ($hasDefault) {
            out += ' ' + ($code) + ' ';
          } else {
            if ($requiredHash && $requiredHash[$propertyKey]) {
              out += ' if ( ' + ($useData) + ' === undefined ';
              if ($ownProperties) {
                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
              }
              out += ') { ' + ($nextValid) + ' = false; ';
              var $currentErrorPath = it.errorPath,
                $currErrSchemaPath = $errSchemaPath,
                $missingProperty = it.util.escapeQuotes($propertyKey);
              if (it.opts._errorDataPathProperty) {
                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
              }
              $errSchemaPath = it.errSchemaPath + '/required';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'';
                  if (it.opts._errorDataPathProperty) {
                    out += 'is a required property';
                  } else {
                    out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
                  }
                  out += '\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              $errSchemaPath = $currErrSchemaPath;
              it.errorPath = $currentErrorPath;
              out += ' } else { ';
            } else {
              if ($breakOnError) {
                out += ' if ( ' + ($useData) + ' === undefined ';
                if ($ownProperties) {
                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
                }
                out += ') { ' + ($nextValid) + ' = true; } else { ';
              } else {
                out += ' if (' + ($useData) + ' !== undefined ';
                if ($ownProperties) {
                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
                }
                out += ' ) { ';
              }
            }
            out += ' ' + ($code) + ' } ';
          }
        }
        if ($breakOnError) {
          out += ' if (' + ($nextValid) + ') { ';
          $closingBraces += '}';
        }
      }
    }
  }
  if ($pPropertyKeys.length) {
    var arr5 = $pPropertyKeys;
    if (arr5) {
      var $pProperty, i5 = -1,
        l5 = arr5.length - 1;
      while (i5 < l5) {
        $pProperty = arr5[i5 += 1];
        var $sch = $pProperties[$pProperty];
        if (it.util.schemaHasRules($sch, it.RULES.all)) {
          $it.schema = $sch;
          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);
          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);
          if ($ownProperties) {
            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
          } else {
            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
          }
          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';
          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          if ($breakOnError) {
            out += ' if (!' + ($nextValid) + ') break; ';
          }
          out += ' } ';
          if ($breakOnError) {
            out += ' else ' + ($nextValid) + ' = true; ';
          }
          out += ' }  ';
          if ($breakOnError) {
            out += ' if (' + ($nextValid) + ') { ';
            $closingBraces += '}';
          }
        }
      }
    }
  }
  if (it.opts.patternGroups && $pgPropertyKeys.length) {
    var arr6 = $pgPropertyKeys;
    if (arr6) {
      var $pgProperty, i6 = -1,
        l6 = arr6.length - 1;
      while (i6 < l6) {
        $pgProperty = arr6[i6 += 1];
        var $pgSchema = $pgProperties[$pgProperty],
          $sch = $pgSchema.schema;
        if (it.util.schemaHasRules($sch, it.RULES.all)) {
          $it.schema = $sch;
          $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';
          $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema';
          out += ' var pgPropCount' + ($lvl) + ' = 0;  ';
          if ($ownProperties) {
            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
          } else {
            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
          }
          out += ' if (' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ')) { pgPropCount' + ($lvl) + '++; ';
          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          if ($breakOnError) {
            out += ' if (!' + ($nextValid) + ') break; ';
          }
          out += ' } ';
          if ($breakOnError) {
            out += ' else ' + ($nextValid) + ' = true; ';
          }
          out += ' }  ';
          if ($breakOnError) {
            out += ' if (' + ($nextValid) + ') { ';
            $closingBraces += '}';
          }
          var $pgMin = $pgSchema.minimum,
            $pgMax = $pgSchema.maximum;
          if ($pgMin !== undefined || $pgMax !== undefined) {
            out += ' var ' + ($valid) + ' = true; ';
            var $currErrSchemaPath = $errSchemaPath;
            if ($pgMin !== undefined) {
              var $limit = $pgMin,
                $reason = 'minimum',
                $moreOrLess = 'less';
              out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; ';
              $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum';
              out += '  if (!' + ($valid) + ') {   ';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              out += ' } ';
              if ($pgMax !== undefined) {
                out += ' else ';
              }
            }
            if ($pgMax !== undefined) {
              var $limit = $pgMax,
                $reason = 'maximum',
                $moreOrLess = 'more';
              out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; ';
              $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum';
              out += '  if (!' + ($valid) + ') {   ';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              out += ' } ';
            }
            $errSchemaPath = $currErrSchemaPath;
            if ($breakOnError) {
              out += ' if (' + ($valid) + ') { ';
              $closingBraces += '}';
            }
          }
        }
      }
    }
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 546 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_propertyNames(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  if (it.util.schemaHasRules($schema, it.RULES.all)) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    var $key = 'key' + $lvl,
      $idx = 'idx' + $lvl,
      $i = 'i' + $lvl,
      $invalidName = '\' + ' + $key + ' + \'',
      $dataNxt = $it.dataLevel = it.dataLevel + 1,
      $nextData = 'data' + $dataNxt,
      $dataProperties = 'dataProperties' + $lvl,
      $ownProperties = it.opts.ownProperties,
      $currentBaseId = it.baseId;
    out += ' var ' + ($errs) + ' = errors; ';
    if ($ownProperties) {
      out += ' var ' + ($dataProperties) + ' = undefined; ';
    }
    if ($ownProperties) {
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
    } else {
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
    }
    out += ' var startErrs' + ($lvl) + ' = errors; ';
    var $passData = $key;
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('propertyNames') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \'' + ($invalidName) + '\' } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'property name \\\'' + ($invalidName) + '\\\' is invalid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError(vErrors); ';
      } else {
        out += ' validate.errors = vErrors; return false; ';
      }
    }
    if ($breakOnError) {
      out += ' break; ';
    }
    out += ' } }';
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  out = it.util.cleanUpCode(out);
  return out;
}


/***/ }),
/* 547 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_ref(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $async, $refCode;
  if ($schema == '#' || $schema == '#/') {
    if (it.isRoot) {
      $async = it.async;
      $refCode = 'validate';
    } else {
      $async = it.root.schema.$async === true;
      $refCode = 'root.refVal[0]';
    }
  } else {
    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);
    if ($refVal === undefined) {
      var $message = it.MissingRefError.message(it.baseId, $schema);
      if (it.opts.missingRefs == 'fail') {
        it.logger.error($message);
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        if ($breakOnError) {
          out += ' if (false) { ';
        }
      } else if (it.opts.missingRefs == 'ignore') {
        it.logger.warn($message);
        if ($breakOnError) {
          out += ' if (true) { ';
        }
      } else {
        throw new it.MissingRefError(it.baseId, $schema, $message);
      }
    } else if ($refVal.inline) {
      var $it = it.util.copy(it);
      $it.level++;
      var $nextValid = 'valid' + $it.level;
      $it.schema = $refVal.schema;
      $it.schemaPath = '';
      $it.errSchemaPath = $schema;
      var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code);
      out += ' ' + ($code) + ' ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
      }
    } else {
      $async = $refVal.$async === true;
      $refCode = $refVal.code;
    }
  }
  if ($refCode) {
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    if (it.opts.passContext) {
      out += ' ' + ($refCode) + '.call(this, ';
    } else {
      out += ' ' + ($refCode) + '( ';
    }
    out += ' ' + ($data) + ', (dataPath || \'\')';
    if (it.errorPath != '""') {
      out += ' + ' + (it.errorPath);
    }
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';
    var __callValidate = out;
    out = $$outStack.pop();
    if ($async) {
      if (!it.async) throw new Error('async schema referenced by sync schema');
      if ($breakOnError) {
        out += ' var ' + ($valid) + '; ';
      }
      out += ' try { ' + (it.yieldAwait) + ' ' + (__callValidate) + '; ';
      if ($breakOnError) {
        out += ' ' + ($valid) + ' = true; ';
      }
      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';
      if ($breakOnError) {
        out += ' ' + ($valid) + ' = false; ';
      }
      out += ' } ';
      if ($breakOnError) {
        out += ' if (' + ($valid) + ') { ';
      }
    } else {
      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';
      if ($breakOnError) {
        out += ' else { ';
      }
    }
  }
  return out;
}


/***/ }),
/* 548 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_required(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $vSchema = 'schema' + $lvl;
  if (!$isData) {
    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {
      var $required = [];
      var arr1 = $schema;
      if (arr1) {
        var $property, i1 = -1,
          l1 = arr1.length - 1;
        while (i1 < l1) {
          $property = arr1[i1 += 1];
          var $propertySch = it.schema.properties[$property];
          if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {
            $required[$required.length] = $property;
          }
        }
      }
    } else {
      var $required = $schema;
    }
  }
  if ($isData || $required.length) {
    var $currentErrorPath = it.errorPath,
      $loopRequired = $isData || $required.length >= it.opts.loopRequired,
      $ownProperties = it.opts.ownProperties;
    if ($breakOnError) {
      out += ' var missing' + ($lvl) + '; ';
      if ($loopRequired) {
        if (!$isData) {
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
        }
        var $i = 'i' + $lvl,
          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
        }
        out += ' var ' + ($valid) + ' = true; ';
        if ($isData) {
          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
        }
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';
        if ($ownProperties) {
          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
        }
        out += '; if (!' + ($valid) + ') break; } ';
        if ($isData) {
          out += '  }  ';
        }
        out += '  if (!' + ($valid) + ') {   ';
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else { ';
      } else {
        out += ' if ( ';
        var arr2 = $required;
        if (arr2) {
          var $propertyKey, $i = -1,
            l2 = arr2.length - 1;
          while ($i < l2) {
            $propertyKey = arr2[$i += 1];
            if ($i) {
              out += ' || ';
            }
            var $prop = it.util.getProperty($propertyKey),
              $useData = $data + $prop;
            out += ' ( ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
          }
        }
        out += ') {  ';
        var $propertyPath = 'missing' + $lvl,
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
        }
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else { ';
      }
    } else {
      if ($loopRequired) {
        if (!$isData) {
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
        }
        var $i = 'i' + $lvl,
          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
        }
        if ($isData) {
          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */
          if (it.createErrors !== false) {
            out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
            if (it.opts.messages !== false) {
              out += ' , message: \'';
              if (it.opts._errorDataPathProperty) {
                out += 'is a required property';
              } else {
                out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
              }
              out += '\' ';
            }
            if (it.opts.verbose) {
              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
            }
            out += ' } ';
          } else {
            out += ' {} ';
          }
          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';
        }
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';
        if ($ownProperties) {
          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
        }
        out += ') {  var err =   '; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';
        if ($isData) {
          out += '  }  ';
        }
      } else {
        var arr3 = $required;
        if (arr3) {
          var $propertyKey, i3 = -1,
            l3 = arr3.length - 1;
          while (i3 < l3) {
            $propertyKey = arr3[i3 += 1];
            var $prop = it.util.getProperty($propertyKey),
              $missingProperty = it.util.escapeQuotes($propertyKey),
              $useData = $data + $prop;
            if (it.opts._errorDataPathProperty) {
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
            }
            out += ' if ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') {  var err =   '; /* istanbul ignore else */
            if (it.createErrors !== false) {
              out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
              if (it.opts.messages !== false) {
                out += ' , message: \'';
                if (it.opts._errorDataPathProperty) {
                  out += 'is a required property';
                } else {
                  out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
                }
                out += '\' ';
              }
              if (it.opts.verbose) {
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
              }
              out += ' } ';
            } else {
              out += ' {} ';
            }
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
          }
        }
      }
    }
    it.errorPath = $currentErrorPath;
  } else if ($breakOnError) {
    out += ' if (true) {';
  }
  return out;
}


/***/ }),
/* 549 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function generate_uniqueItems(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (($schema || $isData) && it.opts.uniqueItems !== false) {
    if ($isData) {
      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { ';
    }
    out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } ';
    if ($isData) {
      out += '  }  ';
    }
    out += ' if (!' + ($valid) + ') {   ';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema:  ';
        if ($isData) {
          out += 'validate.schema' + ($schemaPath);
        } else {
          out += '' + ($schema);
        }
        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } ';
    if ($breakOnError) {
      out += ' else { ';
    }
  } else {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  }
  return out;
}


/***/ }),
/* 550 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;
var customRuleCode = __webpack_require__(536);

module.exports = {
  add: addKeyword,
  get: getKeyword,
  remove: removeKeyword
};

/**
 * Define custom keyword
 * @this  Ajv
 * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).
 * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.
 * @return {Ajv} this for method chaining
 */
function addKeyword(keyword, definition) {
  /* jshint validthis: true */
  /* eslint no-shadow: 0 */
  var RULES = this.RULES;

  if (RULES.keywords[keyword])
    throw new Error('Keyword ' + keyword + ' is already defined');

  if (!IDENTIFIER.test(keyword))
    throw new Error('Keyword ' + keyword + ' is not a valid identifier');

  if (definition) {
    if (definition.macro && definition.valid !== undefined)
      throw new Error('"valid" option cannot be used with macro keywords');

    var dataType = definition.type;
    if (Array.isArray(dataType)) {
      var i, len = dataType.length;
      for (i=0; i<len; i++) checkDataType(dataType[i]);
      for (i=0; i<len; i++) _addRule(keyword, dataType[i], definition);
    } else {
      if (dataType) checkDataType(dataType);
      _addRule(keyword, dataType, definition);
    }

    var $data = definition.$data === true && this._opts.$data;
    if ($data && !definition.validate)
      throw new Error('$data support: "validate" function is not defined');

    var metaSchema = definition.metaSchema;
    if (metaSchema) {
      if ($data) {
        metaSchema = {
          anyOf: [
            metaSchema,
            { '$ref': 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#' }
          ]
        };
      }
      definition.validateSchema = this.compile(metaSchema, true);
    }
  }

  RULES.keywords[keyword] = RULES.all[keyword] = true;


  function _addRule(keyword, dataType, definition) {
    var ruleGroup;
    for (var i=0; i<RULES.length; i++) {
      var rg = RULES[i];
      if (rg.type == dataType) {
        ruleGroup = rg;
        break;
      }
    }

    if (!ruleGroup) {
      ruleGroup = { type: dataType, rules: [] };
      RULES.push(ruleGroup);
    }

    var rule = {
      keyword: keyword,
      definition: definition,
      custom: true,
      code: customRuleCode,
      implements: definition.implements
    };
    ruleGroup.rules.push(rule);
    RULES.custom[keyword] = rule;
  }


  function checkDataType(dataType) {
    if (!RULES.types[dataType]) throw new Error('Unknown type ' + dataType);
  }

  return this;
}


/**
 * Get keyword
 * @this  Ajv
 * @param {String} keyword pre-defined or custom keyword.
 * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.
 */
function getKeyword(keyword) {
  /* jshint validthis: true */
  var rule = this.RULES.custom[keyword];
  return rule ? rule.definition : this.RULES.keywords[keyword] || false;
}


/**
 * Remove keyword
 * @this  Ajv
 * @param {String} keyword pre-defined or custom keyword.
 * @return {Ajv} this for method chaining
 */
function removeKeyword(keyword) {
  /* jshint validthis: true */
  var RULES = this.RULES;
  delete RULES.keywords[keyword];
  delete RULES.all[keyword];
  delete RULES.custom[keyword];
  for (var i=0; i<RULES.length; i++) {
    var rules = RULES[i].rules;
    for (var j=0; j<rules.length; j++) {
      if (rules[j].keyword == keyword) {
        rules.splice(j, 1);
        break;
      }
    }
  }
  return this;
}


/***/ }),
/* 551 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var META_SCHEMA_ID = 'http://json-schema.org/draft-06/schema';

module.exports = function (ajv) {
  var defaultMeta = ajv._opts.defaultMeta;
  var metaSchemaRef = typeof defaultMeta == 'string'
                      ? { $ref: defaultMeta }
                      : ajv.getSchema(META_SCHEMA_ID)
                        ? { $ref: META_SCHEMA_ID }
                        : {};

  ajv.addKeyword('patternGroups', {
    // implemented in properties.jst
    metaSchema: {
      type: 'object',
      additionalProperties: {
        type: 'object',
        required: [ 'schema' ],
        properties: {
          maximum: {
            type: 'integer',
            minimum: 0
          },
          minimum: {
            type: 'integer',
            minimum: 0
          },
          schema: metaSchemaRef
        },
        additionalProperties: false
      }
    }
  });
  ajv.RULES.all.properties.implements.push('patternGroups');
};


/***/ }),
/* 552 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function () {
	return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
};


/***/ }),
/* 553 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var micromatch = __webpack_require__(559);
var normalize = __webpack_require__(384);
var path = __webpack_require__(0); // required for tests.
var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); };

var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) {
  criteria = arrify(criteria);
  value = arrify(value);
  if (arguments.length === 1) {
    return anymatch.bind(null, criteria.map(function(criterion) {
      return typeof criterion === 'string' && criterion[0] !== '!' ?
        micromatch.matcher(criterion) : criterion;
    }));
  }
  startIndex = startIndex || 0;
  var string = value[0];
  var altString, altValue;
  var matched = false;
  var matchIndex = -1;
  function testCriteria(criterion, index) {
    var result;
    switch (Object.prototype.toString.call(criterion)) {
    case '[object String]':
      result = string === criterion || altString && altString === criterion;
      result = result || micromatch.isMatch(string, criterion);
      break;
    case '[object RegExp]':
      result = criterion.test(string) || altString && criterion.test(altString);
      break;
    case '[object Function]':
      result = criterion.apply(null, value);
      result = result || altValue && criterion.apply(null, altValue);
      break;
    default:
      result = false;
    }
    if (result) {
      matchIndex = index + startIndex;
    }
    return result;
  }
  var crit = criteria;
  var negGlobs = crit.reduce(function(arr, criterion, index) {
    if (typeof criterion === 'string' && criterion[0] === '!') {
      if (crit === criteria) {
        // make a copy before modifying
        crit = crit.slice();
      }
      crit[index] = null;
      arr.push(criterion.substr(1));
    }
    return arr;
  }, []);
  if (!negGlobs.length || !micromatch.any(string, negGlobs)) {
    if (path.sep === '\\' && typeof string === 'string') {
      altString = normalize(string);
      altString = altString === string ? null : altString;
      if (altString) altValue = [altString].concat(value.slice(1));
    }
    matched = crit.slice(startIndex, endIndex).some(testCriteria);
  }
  return returnIndex === true ? matchIndex : matched;
};

module.exports = anymatch;


/***/ }),
/* 554 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * arr-diff <https://github.com/jonschlinkert/arr-diff>
 *
 * Copyright (c) 2014 Jon Schlinkert, contributors.
 * Licensed under the MIT License
 */



var flatten = __webpack_require__(563);
var slice = [].slice;

/**
 * Return the difference between the first array and
 * additional arrays.
 *
 * ```js
 * var diff = require('{%= name %}');
 *
 * var a = ['a', 'b', 'c', 'd'];
 * var b = ['b', 'c'];
 *
 * console.log(diff(a, b))
 * //=> ['a', 'd']
 * ```
 *
 * @param  {Array} `a`
 * @param  {Array} `b`
 * @return {Array}
 * @api public
 */

function diff(arr, arrays) {
  var argsLen = arguments.length;
  var len = arr.length, i = -1;
  var res = [], arrays;

  if (argsLen === 1) {
    return arr;
  }

  if (argsLen > 2) {
    arrays = flatten(slice.call(arguments, 1));
  }

  while (++i < len) {
    if (!~arrays.indexOf(arr[i])) {
      res.push(arr[i]);
    }
  }
  return res;
}

/**
 * Expose `diff`
 */

module.exports = diff;


/***/ }),
/* 555 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * array-unique <https://github.com/jonschlinkert/array-unique>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



module.exports = function unique(arr) {
  if (!Array.isArray(arr)) {
    throw new TypeError('array-unique expects an array.');
  }

  var len = arr.length;
  var i = -1;

  while (i++ < len) {
    var j = i + 1;

    for (; j < arr.length; ++j) {
      if (arr[i] === arr[j]) {
        arr.splice(j--, 1);
      }
    }
  }
  return arr;
};


/***/ }),
/* 556 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * braces <https://github.com/jonschlinkert/braces>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT license.
 */



/**
 * Module dependencies
 */

var expand = __webpack_require__(796);
var repeat = __webpack_require__(407);
var tokens = __webpack_require__(994);

/**
 * Expose `braces`
 */

module.exports = function(str, options) {
  if (typeof str !== 'string') {
    throw new Error('braces expects a string');
  }
  return braces(str, options);
};

/**
 * Expand `{foo,bar}` or `{1..5}` braces in the
 * given `string`.
 *
 * @param  {String} `str`
 * @param  {Array} `arr`
 * @param  {Object} `options`
 * @return {Array}
 */

function braces(str, arr, options) {
  if (str === '') {
    return [];
  }

  if (!Array.isArray(arr)) {
    options = arr;
    arr = [];
  }

  var opts = options || {};
  arr = arr || [];

  if (typeof opts.nodupes === 'undefined') {
    opts.nodupes = true;
  }

  var fn = opts.fn;
  var es6;

  if (typeof opts === 'function') {
    fn = opts;
    opts = {};
  }

  if (!(patternRe instanceof RegExp)) {
    patternRe = patternRegex();
  }

  var matches = str.match(patternRe) || [];
  var m = matches[0];

  switch(m) {
    case '\\,':
      return escapeCommas(str, arr, opts);
    case '\\.':
      return escapeDots(str, arr, opts);
    case '\/.':
      return escapePaths(str, arr, opts);
    case ' ':
      return splitWhitespace(str);
    case '{,}':
      return exponential(str, opts, braces);
    case '{}':
      return emptyBraces(str, arr, opts);
    case '\\{':
    case '\\}':
      return escapeBraces(str, arr, opts);
    case '${':
      if (!/\{[^{]+\{/.test(str)) {
        return arr.concat(str);
      } else {
        es6 = true;
        str = tokens.before(str, es6Regex());
      }
  }

  if (!(braceRe instanceof RegExp)) {
    braceRe = braceRegex();
  }

  var match = braceRe.exec(str);
  if (match == null) {
    return [str];
  }

  var outter = match[1];
  var inner = match[2];
  if (inner === '') { return [str]; }

  var segs, segsLength;

  if (inner.indexOf('..') !== -1) {
    segs = expand(inner, opts, fn) || inner.split(',');
    segsLength = segs.length;

  } else if (inner[0] === '"' || inner[0] === '\'') {
    return arr.concat(str.split(/['"]/).join(''));

  } else {
    segs = inner.split(',');
    if (opts.makeRe) {
      return braces(str.replace(outter, wrap(segs, '|')), opts);
    }

    segsLength = segs.length;
    if (segsLength === 1 && opts.bash) {
      segs[0] = wrap(segs[0], '\\');
    }
  }

  var len = segs.length;
  var i = 0, val;

  while (len--) {
    var path = segs[i++];

    if (/(\.[^.\/])/.test(path)) {
      if (segsLength > 1) {
        return segs;
      } else {
        return [str];
      }
    }

    val = splice(str, outter, path);

    if (/\{[^{}]+?\}/.test(val)) {
      arr = braces(val, arr, opts);
    } else if (val !== '') {
      if (opts.nodupes && arr.indexOf(val) !== -1) { continue; }
      arr.push(es6 ? tokens.after(val) : val);
    }
  }

  if (opts.strict) { return filter(arr, filterEmpty); }
  return arr;
}

/**
 * Expand exponential ranges
 *
 *   `a{,}{,}` => ['a', 'a', 'a', 'a']
 */

function exponential(str, options, fn) {
  if (typeof options === 'function') {
    fn = options;
    options = null;
  }

  var opts = options || {};
  var esc = '__ESC_EXP__';
  var exp = 0;
  var res;

  var parts = str.split('{,}');
  if (opts.nodupes) {
    return fn(parts.join(''), opts);
  }

  exp = parts.length - 1;
  res = fn(parts.join(esc), opts);
  var len = res.length;
  var arr = [];
  var i = 0;

  while (len--) {
    var ele = res[i++];
    var idx = ele.indexOf(esc);

    if (idx === -1) {
      arr.push(ele);

    } else {
      ele = ele.split('__ESC_EXP__').join('');
      if (!!ele && opts.nodupes !== false) {
        arr.push(ele);

      } else {
        var num = Math.pow(2, exp);
        arr.push.apply(arr, repeat(ele, num));
      }
    }
  }
  return arr;
}

/**
 * Wrap a value with parens, brackets or braces,
 * based on the given character/separator.
 *
 * @param  {String|Array} `val`
 * @param  {String} `ch`
 * @return {String}
 */

function wrap(val, ch) {
  if (ch === '|') {
    return '(' + val.join(ch) + ')';
  }
  if (ch === ',') {
    return '{' + val.join(ch) + '}';
  }
  if (ch === '-') {
    return '[' + val.join(ch) + ']';
  }
  if (ch === '\\') {
    return '\\{' + val + '\\}';
  }
}

/**
 * Handle empty braces: `{}`
 */

function emptyBraces(str, arr, opts) {
  return braces(str.split('{}').join('\\{\\}'), arr, opts);
}

/**
 * Filter out empty-ish values
 */

function filterEmpty(ele) {
  return !!ele && ele !== '\\';
}

/**
 * Handle patterns with whitespace
 */

function splitWhitespace(str) {
  var segs = str.split(' ');
  var len = segs.length;
  var res = [];
  var i = 0;

  while (len--) {
    res.push.apply(res, braces(segs[i++]));
  }
  return res;
}

/**
 * Handle escaped braces: `\\{foo,bar}`
 */

function escapeBraces(str, arr, opts) {
  if (!/\{[^{]+\{/.test(str)) {
    return arr.concat(str.split('\\').join(''));
  } else {
    str = str.split('\\{').join('__LT_BRACE__');
    str = str.split('\\}').join('__RT_BRACE__');
    return map(braces(str, arr, opts), function(ele) {
      ele = ele.split('__LT_BRACE__').join('{');
      return ele.split('__RT_BRACE__').join('}');
    });
  }
}

/**
 * Handle escaped dots: `{1\\.2}`
 */

function escapeDots(str, arr, opts) {
  if (!/[^\\]\..+\\\./.test(str)) {
    return arr.concat(str.split('\\').join(''));
  } else {
    str = str.split('\\.').join('__ESC_DOT__');
    return map(braces(str, arr, opts), function(ele) {
      return ele.split('__ESC_DOT__').join('.');
    });
  }
}

/**
 * Handle escaped dots: `{1\\.2}`
 */

function escapePaths(str, arr, opts) {
  str = str.split('\/.').join('__ESC_PATH__');
  return map(braces(str, arr, opts), function(ele) {
    return ele.split('__ESC_PATH__').join('\/.');
  });
}

/**
 * Handle escaped commas: `{a\\,b}`
 */

function escapeCommas(str, arr, opts) {
  if (!/\w,/.test(str)) {
    return arr.concat(str.split('\\').join(''));
  } else {
    str = str.split('\\,').join('__ESC_COMMA__');
    return map(braces(str, arr, opts), function(ele) {
      return ele.split('__ESC_COMMA__').join(',');
    });
  }
}

/**
 * Regex for common patterns
 */

function patternRegex() {
  return /\${|( (?=[{,}])|(?=[{,}]) )|{}|{,}|\\,(?=.*[{}])|\/\.(?=.*[{}])|\\\.(?={)|\\{|\\}/;
}

/**
 * Braces regex.
 */

function braceRegex() {
  return /.*(\\?\{([^}]+)\})/;
}

/**
 * es6 delimiter regex.
 */

function es6Regex() {
  return /\$\{([^}]+)\}/;
}

var braceRe;
var patternRe;

/**
 * Faster alternative to `String.replace()` when the
 * index of the token to be replaces can't be supplied
 */

function splice(str, token, replacement) {
  var i = str.indexOf(token);
  return str.substr(0, i) + replacement
    + str.substr(i + token.length);
}

/**
 * Fast array map
 */

function map(arr, fn) {
  if (arr == null) {
    return [];
  }

  var len = arr.length;
  var res = new Array(len);
  var i = -1;

  while (++i < len) {
    res[i] = fn(arr[i], i, arr);
  }

  return res;
}

/**
 * Fast array filter
 */

function filter(arr, cb) {
  if (arr == null) return [];
  if (typeof cb !== 'function') {
    throw new TypeError('braces: filter expects a callback function.');
  }

  var len = arr.length;
  var res = arr.slice();
  var i = 0;

  while (len--) {
    if (!cb(arr[len], i++)) {
      res.splice(len, 1);
    }
  }
  return res;
}


/***/ }),
/* 557 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * expand-brackets <https://github.com/jonschlinkert/expand-brackets>
 *
 * Copyright (c) 2015 Jon Schlinkert.
 * Licensed under the MIT license.
 */



var isPosixBracket = __webpack_require__(902);

/**
 * POSIX character classes
 */

var POSIX = {
  alnum: 'a-zA-Z0-9',
  alpha: 'a-zA-Z',
  blank: ' \\t',
  cntrl: '\\x00-\\x1F\\x7F',
  digit: '0-9',
  graph: '\\x21-\\x7E',
  lower: 'a-z',
  print: '\\x20-\\x7E',
  punct: '-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
  space: ' \\t\\r\\n\\v\\f',
  upper: 'A-Z',
  word:  'A-Za-z0-9_',
  xdigit: 'A-Fa-f0-9',
};

/**
 * Expose `brackets`
 */

module.exports = brackets;

function brackets(str) {
  if (!isPosixBracket(str)) {
    return str;
  }

  var negated = false;
  if (str.indexOf('[^') !== -1) {
    negated = true;
    str = str.split('[^').join('[');
  }
  if (str.indexOf('[!') !== -1) {
    negated = true;
    str = str.split('[!').join('[');
  }

  var a = str.split('[');
  var b = str.split(']');
  var imbalanced = a.length !== b.length;

  var parts = str.split(/(?::\]\[:|\[?\[:|:\]\]?)/);
  var len = parts.length, i = 0;
  var end = '', beg = '';
  var res = [];

  // start at the end (innermost) first
  while (len--) {
    var inner = parts[i++];
    if (inner === '^[!' || inner === '[!') {
      inner = '';
      negated = true;
    }

    var prefix = negated ? '^' : '';
    var ch = POSIX[inner];

    if (ch) {
      res.push('[' + prefix + ch + ']');
    } else if (inner) {
      if (/^\[?\w-\w\]?$/.test(inner)) {
        if (i === parts.length) {
          res.push('[' + prefix + inner);
        } else if (i === 1) {
          res.push(prefix + inner + ']');
        } else {
          res.push(prefix + inner);
        }
      } else {
        if (i === 1) {
          beg += inner;
        } else if (i === parts.length) {
          end += inner;
        } else {
          res.push('[' + prefix + inner + ']');
        }
      }
    }
  }

  var result = res.join('|');
  var rlen = res.length || 1;
  if (rlen > 1) {
    result = '(?:' + result + ')';
    rlen = 1;
  }
  if (beg) {
    rlen++;
    if (beg.charAt(0) === '[') {
      if (imbalanced) {
        beg = '\\[' + beg.slice(1);
      } else {
        beg += ']';
      }
    }
    result = beg + result;
  }
  if (end) {
    rlen++;
    if (end.slice(-1) === ']') {
      if (imbalanced) {
        end = end.slice(0, end.length - 1) + '\\]';
      } else {
        end = '[' + end;
      }
    }
    result += end;
  }

  if (rlen > 1) {
    result = result.split('][').join(']|[');
    if (result.indexOf('|') !== -1 && !/\(\?/.test(result)) {
      result = '(?:' + result + ')';
    }
  }

  result = result.replace(/\[+=|=\]+/g, '\\b');
  return result;
}

brackets.makeRe = function(pattern) {
  try {
    return new RegExp(brackets(pattern));
  } catch (err) {}
};

brackets.isMatch = function(str, pattern) {
  try {
    return brackets.makeRe(pattern).test(str);
  } catch (err) {
    return false;
  }
};

brackets.match = function(arr, pattern) {
  var len = arr.length, i = 0;
  var res = arr.slice();

  var re = brackets.makeRe(pattern);
  while (i < len) {
    var ele = arr[i++];
    if (!re.test(ele)) {
      continue;
    }
    res.splice(i, 1);
  }
  return res;
};


/***/ }),
/* 558 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * extglob <https://github.com/jonschlinkert/extglob>
 *
 * Copyright (c) 2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



/**
 * Module dependencies
 */

var isExtglob = __webpack_require__(163);
var re, cache = {};

/**
 * Expose `extglob`
 */

module.exports = extglob;

/**
 * Convert the given extglob `string` to a regex-compatible
 * string.
 *
 * ```js
 * var extglob = require('extglob');
 * extglob('!(a?(b))');
 * //=> '(?!a(?:b)?)[^/]*?'
 * ```
 *
 * @param {String} `str` The string to convert.
 * @param {Object} `options`
 *   @option {Boolean} [options] `esc` If `false` special characters will not be escaped. Defaults to `true`.
 *   @option {Boolean} [options] `regex` If `true` a regular expression is returned instead of a string.
 * @return {String}
 * @api public
 */


function extglob(str, opts) {
  opts = opts || {};
  var o = {}, i = 0;

  // fix common character reversals
  // '*!(.js)' => '*.!(js)'
  str = str.replace(/!\(([^\w*()])/g, '$1!(');

  // support file extension negation
  str = str.replace(/([*\/])\.!\([*]\)/g, function (m, ch) {
    if (ch === '/') {
      return escape('\\/[^.]+');
    }
    return escape('[^.]+');
  });

  // create a unique key for caching by
  // combining the string and options
  var key = str
    + String(!!opts.regex)
    + String(!!opts.contains)
    + String(!!opts.escape);

  if (cache.hasOwnProperty(key)) {
    return cache[key];
  }

  if (!(re instanceof RegExp)) {
    re = regex();
  }

  opts.negate = false;
  var m;

  while (m = re.exec(str)) {
    var prefix = m[1];
    var inner = m[3];
    if (prefix === '!') {
      opts.negate = true;
    }

    var id = '__EXTGLOB_' + (i++) + '__';
    // use the prefix of the _last_ (outtermost) pattern
    o[id] = wrap(inner, prefix, opts.escape);
    str = str.split(m[0]).join(id);
  }

  var keys = Object.keys(o);
  var len = keys.length;

  // we have to loop again to allow us to convert
  // patterns in reverse order (starting with the
  // innermost/last pattern first)
  while (len--) {
    var prop = keys[len];
    str = str.split(prop).join(o[prop]);
  }

  var result = opts.regex
    ? toRegex(str, opts.contains, opts.negate)
    : str;

  result = result.split('.').join('\\.');

  // cache the result and return it
  return (cache[key] = result);
}

/**
 * Convert `string` to a regex string.
 *
 * @param  {String} `str`
 * @param  {String} `prefix` Character that determines how to wrap the string.
 * @param  {Boolean} `esc` If `false` special characters will not be escaped. Defaults to `true`.
 * @return {String}
 */

function wrap(inner, prefix, esc) {
  if (esc) inner = escape(inner);

  switch (prefix) {
    case '!':
      return '(?!' + inner + ')[^/]' + (esc ? '%%%~' : '*?');
    case '@':
      return '(?:' + inner + ')';
    case '+':
      return '(?:' + inner + ')+';
    case '*':
      return '(?:' + inner + ')' + (esc ? '%%' : '*')
    case '?':
      return '(?:' + inner + '|)';
    default:
      return inner;
  }
}

function escape(str) {
  str = str.split('*').join('[^/]%%%~');
  str = str.split('.').join('\\.');
  return str;
}

/**
 * extglob regex.
 */

function regex() {
  return /(\\?[@?!+*$]\\?)(\(([^()]*?)\))/;
}

/**
 * Negation regex
 */

function negate(str) {
  return '(?!^' + str + ').*$';
}

/**
 * Create the regex to do the matching. If
 * the leading character in the `pattern` is `!`
 * a negation regex is returned.
 *
 * @param {String} `pattern`
 * @param {Boolean} `contains` Allow loose matching.
 * @param {Boolean} `isNegated` True if the pattern is a negation pattern.
 */

function toRegex(pattern, contains, isNegated) {
  var prefix = contains ? '^' : '';
  var after = contains ? '$' : '';
  pattern = ('(?:' + pattern + ')' + after);
  if (isNegated) {
    pattern = prefix + negate(pattern);
  }
  return new RegExp(prefix + pattern);
}


/***/ }),
/* 559 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * micromatch <https://github.com/jonschlinkert/micromatch>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var expand = __webpack_require__(561);
var utils = __webpack_require__(185);

/**
 * The main function. Pass an array of filepaths,
 * and a string or array of glob patterns
 *
 * @param  {Array|String} `files`
 * @param  {Array|String} `patterns`
 * @param  {Object} `opts`
 * @return {Array} Array of matches
 */

function micromatch(files, patterns, opts) {
  if (!files || !patterns) return [];
  opts = opts || {};

  if (typeof opts.cache === 'undefined') {
    opts.cache = true;
  }

  if (!Array.isArray(patterns)) {
    return match(files, patterns, opts);
  }

  var len = patterns.length, i = 0;
  var omit = [], keep = [];

  while (len--) {
    var glob = patterns[i++];
    if (typeof glob === 'string' && glob.charCodeAt(0) === 33 /* ! */) {
      omit.push.apply(omit, match(files, glob.slice(1), opts));
    } else {
      keep.push.apply(keep, match(files, glob, opts));
    }
  }
  return utils.diff(keep, omit);
}

/**
 * Return an array of files that match the given glob pattern.
 *
 * This function is called by the main `micromatch` function If you only
 * need to pass a single pattern you might get very minor speed improvements
 * using this function.
 *
 * @param  {Array} `files`
 * @param  {String} `pattern`
 * @param  {Object} `options`
 * @return {Array}
 */

function match(files, pattern, opts) {
  if (utils.typeOf(files) !== 'string' && !Array.isArray(files)) {
    throw new Error(msg('match', 'files', 'a string or array'));
  }

  files = utils.arrayify(files);
  opts = opts || {};

  var negate = opts.negate || false;
  var orig = pattern;

  if (typeof pattern === 'string') {
    negate = pattern.charAt(0) === '!';
    if (negate) {
      pattern = pattern.slice(1);
    }

    // we need to remove the character regardless,
    // so the above logic is still needed
    if (opts.nonegate === true) {
      negate = false;
    }
  }

  var _isMatch = matcher(pattern, opts);
  var len = files.length, i = 0;
  var res = [];

  while (i < len) {
    var file = files[i++];
    var fp = utils.unixify(file, opts);

    if (!_isMatch(fp)) { continue; }
    res.push(fp);
  }

  if (res.length === 0) {
    if (opts.failglob === true) {
      throw new Error('micromatch.match() found no matches for: "' + orig + '".');
    }

    if (opts.nonull || opts.nullglob) {
      res.push(utils.unescapeGlob(orig));
    }
  }

  // if `negate` was defined, diff negated files
  if (negate) { res = utils.diff(files, res); }

  // if `ignore` was defined, diff ignored filed
  if (opts.ignore && opts.ignore.length) {
    pattern = opts.ignore;
    opts = utils.omit(opts, ['ignore']);
    res = utils.diff(res, micromatch(res, pattern, opts));
  }

  if (opts.nodupes) {
    return utils.unique(res);
  }
  return res;
}

/**
 * Returns a function that takes a glob pattern or array of glob patterns
 * to be used with `Array#filter()`. (Internally this function generates
 * the matching function using the [matcher] method).
 *
 * ```js
 * var fn = mm.filter('[a-c]');
 * ['a', 'b', 'c', 'd', 'e'].filter(fn);
 * //=> ['a', 'b', 'c']
 * ```
 * @param  {String|Array} `patterns` Can be a glob or array of globs.
 * @param  {Options} `opts` Options to pass to the [matcher] method.
 * @return {Function} Filter function to be passed to `Array#filter()`.
 */

function filter(patterns, opts) {
  if (!Array.isArray(patterns) && typeof patterns !== 'string') {
    throw new TypeError(msg('filter', 'patterns', 'a string or array'));
  }

  patterns = utils.arrayify(patterns);
  var len = patterns.length, i = 0;
  var patternMatchers = Array(len);
  while (i < len) {
    patternMatchers[i] = matcher(patterns[i++], opts);
  }

  return function(fp) {
    if (fp == null) return [];
    var len = patternMatchers.length, i = 0;
    var res = true;

    fp = utils.unixify(fp, opts);
    while (i < len) {
      var fn = patternMatchers[i++];
      if (!fn(fp)) {
        res = false;
        break;
      }
    }
    return res;
  };
}

/**
 * Returns true if the filepath contains the given
 * pattern. Can also return a function for matching.
 *
 * ```js
 * isMatch('foo.md', '*.md', {});
 * //=> true
 *
 * isMatch('*.md', {})('foo.md')
 * //=> true
 * ```
 * @param  {String} `fp`
 * @param  {String} `pattern`
 * @param  {Object} `opts`
 * @return {Boolean}
 */

function isMatch(fp, pattern, opts) {
  if (typeof fp !== 'string') {
    throw new TypeError(msg('isMatch', 'filepath', 'a string'));
  }

  fp = utils.unixify(fp, opts);
  if (utils.typeOf(pattern) === 'object') {
    return matcher(fp, pattern);
  }
  return matcher(pattern, opts)(fp);
}

/**
 * Returns true if the filepath matches the
 * given pattern.
 */

function contains(fp, pattern, opts) {
  if (typeof fp !== 'string') {
    throw new TypeError(msg('contains', 'pattern', 'a string'));
  }

  opts = opts || {};
  opts.contains = (pattern !== '');
  fp = utils.unixify(fp, opts);

  if (opts.contains && !utils.isGlob(pattern)) {
    return fp.indexOf(pattern) !== -1;
  }
  return matcher(pattern, opts)(fp);
}

/**
 * Returns true if a file path matches any of the
 * given patterns.
 *
 * @param  {String} `fp` The filepath to test.
 * @param  {String|Array} `patterns` Glob patterns to use.
 * @param  {Object} `opts` Options to pass to the `matcher()` function.
 * @return {String}
 */

function any(fp, patterns, opts) {
  if (!Array.isArray(patterns) && typeof patterns !== 'string') {
    throw new TypeError(msg('any', 'patterns', 'a string or array'));
  }

  patterns = utils.arrayify(patterns);
  var len = patterns.length;

  fp = utils.unixify(fp, opts);
  while (len--) {
    var isMatch = matcher(patterns[len], opts);
    if (isMatch(fp)) {
      return true;
    }
  }
  return false;
}

/**
 * Filter the keys of an object with the given `glob` pattern
 * and `options`
 *
 * @param  {Object} `object`
 * @param  {Pattern} `object`
 * @return {Array}
 */

function matchKeys(obj, glob, options) {
  if (utils.typeOf(obj) !== 'object') {
    throw new TypeError(msg('matchKeys', 'first argument', 'an object'));
  }

  var fn = matcher(glob, options);
  var res = {};

  for (var key in obj) {
    if (obj.hasOwnProperty(key) && fn(key)) {
      res[key] = obj[key];
    }
  }
  return res;
}

/**
 * Return a function for matching based on the
 * given `pattern` and `options`.
 *
 * @param  {String} `pattern`
 * @param  {Object} `options`
 * @return {Function}
 */

function matcher(pattern, opts) {
  // pattern is a function
  if (typeof pattern === 'function') {
    return pattern;
  }
  // pattern is a regex
  if (pattern instanceof RegExp) {
    return function(fp) {
      return pattern.test(fp);
    };
  }

  if (typeof pattern !== 'string') {
    throw new TypeError(msg('matcher', 'pattern', 'a string, regex, or function'));
  }

  // strings, all the way down...
  pattern = utils.unixify(pattern, opts);

  // pattern is a non-glob string
  if (!utils.isGlob(pattern)) {
    return utils.matchPath(pattern, opts);
  }
  // pattern is a glob string
  var re = makeRe(pattern, opts);

  // `matchBase` is defined
  if (opts && opts.matchBase) {
    return utils.hasFilename(re, opts);
  }
  // `matchBase` is not defined
  return function(fp) {
    fp = utils.unixify(fp, opts);
    return re.test(fp);
  };
}

/**
 * Create and cache a regular expression for matching
 * file paths.
 *
 * If the leading character in the `glob` is `!`, a negation
 * regex is returned.
 *
 * @param  {String} `glob`
 * @param  {Object} `options`
 * @return {RegExp}
 */

function toRegex(glob, options) {
  // clone options to prevent  mutating the original object
  var opts = Object.create(options || {});
  var flags = opts.flags || '';
  if (opts.nocase && flags.indexOf('i') === -1) {
    flags += 'i';
  }

  var parsed = expand(glob, opts);

  // pass in tokens to avoid parsing more than once
  opts.negated = opts.negated || parsed.negated;
  opts.negate = opts.negated;
  glob = wrapGlob(parsed.pattern, opts);
  var re;

  try {
    re = new RegExp(glob, flags);
    return re;
  } catch (err) {
    err.reason = 'micromatch invalid regex: (' + re + ')';
    if (opts.strict) throw new SyntaxError(err);
  }

  // we're only here if a bad pattern was used and the user
  // passed `options.silent`, so match nothing
  return /$^/;
}

/**
 * Create the regex to do the matching. If the leading
 * character in the `glob` is `!` a negation regex is returned.
 *
 * @param {String} `glob`
 * @param {Boolean} `negate`
 */

function wrapGlob(glob, opts) {
  var prefix = (opts && !opts.contains) ? '^' : '';
  var after = (opts && !opts.contains) ? '$' : '';
  glob = ('(?:' + glob + ')' + after);
  if (opts && opts.negate) {
    return prefix + ('(?!^' + glob + ').*$');
  }
  return prefix + glob;
}

/**
 * Create and cache a regular expression for matching file paths.
 * If the leading character in the `glob` is `!`, a negation
 * regex is returned.
 *
 * @param  {String} `glob`
 * @param  {Object} `options`
 * @return {RegExp}
 */

function makeRe(glob, opts) {
  if (utils.typeOf(glob) !== 'string') {
    throw new Error(msg('makeRe', 'glob', 'a string'));
  }
  return utils.cache(toRegex, glob, opts);
}

/**
 * Make error messages consistent. Follows this format:
 *
 * ```js
 * msg(methodName, argNumber, nativeType);
 * // example:
 * msg('matchKeys', 'first', 'an object');
 * ```
 *
 * @param  {String} `method`
 * @param  {String} `num`
 * @param  {String} `type`
 * @return {String}
 */

function msg(method, what, type) {
  return 'micromatch.' + method + '(): ' + what + ' should be ' + type + '.';
}

/**
 * Public methods
 */

/* eslint no-multi-spaces: 0 */
micromatch.any       = any;
micromatch.braces    = micromatch.braceExpand = utils.braces;
micromatch.contains  = contains;
micromatch.expand    = expand;
micromatch.filter    = filter;
micromatch.isMatch   = isMatch;
micromatch.makeRe    = makeRe;
micromatch.match     = match;
micromatch.matcher   = matcher;
micromatch.matchKeys = matchKeys;

/**
 * Expose `micromatch`
 */

module.exports = micromatch;


/***/ }),
/* 560 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var chars = {}, unesc, temp;

function reverse(object, prepender) {
  return Object.keys(object).reduce(function(reversed, key) {
    var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key.
    reversed[object[key]] = newKey; // Swap key and value.
    return reversed; // Return the result.
  }, {});
}

/**
 * Regex for common characters
 */

chars.escapeRegex = {
  '?': /\?/g,
  '@': /\@/g,
  '!': /\!/g,
  '+': /\+/g,
  '*': /\*/g,
  '(': /\(/g,
  ')': /\)/g,
  '[': /\[/g,
  ']': /\]/g
};

/**
 * Escape characters
 */

chars.ESC = {
  '?': '__UNESC_QMRK__',
  '@': '__UNESC_AMPE__',
  '!': '__UNESC_EXCL__',
  '+': '__UNESC_PLUS__',
  '*': '__UNESC_STAR__',
  ',': '__UNESC_COMMA__',
  '(': '__UNESC_LTPAREN__',
  ')': '__UNESC_RTPAREN__',
  '[': '__UNESC_LTBRACK__',
  ']': '__UNESC_RTBRACK__'
};

/**
 * Unescape characters
 */

chars.UNESC = unesc || (unesc = reverse(chars.ESC, '\\'));

chars.ESC_TEMP = {
  '?': '__TEMP_QMRK__',
  '@': '__TEMP_AMPE__',
  '!': '__TEMP_EXCL__',
  '*': '__TEMP_STAR__',
  '+': '__TEMP_PLUS__',
  ',': '__TEMP_COMMA__',
  '(': '__TEMP_LTPAREN__',
  ')': '__TEMP_RTPAREN__',
  '[': '__TEMP_LTBRACK__',
  ']': '__TEMP_RTBRACK__'
};

chars.TEMP = temp || (temp = reverse(chars.ESC_TEMP));

module.exports = chars;


/***/ }),
/* 561 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * micromatch <https://github.com/jonschlinkert/micromatch>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var utils = __webpack_require__(185);
var Glob = __webpack_require__(562);

/**
 * Expose `expand`
 */

module.exports = expand;

/**
 * Expand a glob pattern to resolve braces and
 * similar patterns before converting to regex.
 *
 * @param  {String|Array} `pattern`
 * @param  {Array} `files`
 * @param  {Options} `opts`
 * @return {Array}
 */

function expand(pattern, options) {
  if (typeof pattern !== 'string') {
    throw new TypeError('micromatch.expand(): argument should be a string.');
  }

  var glob = new Glob(pattern, options || {});
  var opts = glob.options;

  if (!utils.isGlob(pattern)) {
    glob.pattern = glob.pattern.replace(/([\/.])/g, '\\$1');
    return glob;
  }

  glob.pattern = glob.pattern.replace(/(\+)(?!\()/g, '\\$1');
  glob.pattern = glob.pattern.split('$').join('\\$');

  if (typeof opts.braces !== 'boolean' && typeof opts.nobraces !== 'boolean') {
    opts.braces = true;
  }

  if (glob.pattern === '.*') {
    return {
      pattern: '\\.' + star,
      tokens: tok,
      options: opts
    };
  }

  if (glob.pattern === '*') {
    return {
      pattern: oneStar(opts.dot),
      tokens: tok,
      options: opts
    };
  }

  // parse the glob pattern into tokens
  glob.parse();
  var tok = glob.tokens;
  tok.is.negated = opts.negated;

  // dotfile handling
  if ((opts.dotfiles === true || tok.is.dotfile) && opts.dot !== false) {
    opts.dotfiles = true;
    opts.dot = true;
  }

  if ((opts.dotdirs === true || tok.is.dotdir) && opts.dot !== false) {
    opts.dotdirs = true;
    opts.dot = true;
  }

  // check for braces with a dotfile pattern
  if (/[{,]\./.test(glob.pattern)) {
    opts.makeRe = false;
    opts.dot = true;
  }

  if (opts.nonegate !== true) {
    opts.negated = glob.negated;
  }

  // if the leading character is a dot or a slash, escape it
  if (glob.pattern.charAt(0) === '.' && glob.pattern.charAt(1) !== '/') {
    glob.pattern = '\\' + glob.pattern;
  }

  /**
   * Extended globs
   */

  // expand braces, e.g `{1..5}`
  glob.track('before braces');
  if (tok.is.braces) {
    glob.braces();
  }
  glob.track('after braces');

  // expand extglobs, e.g `foo/!(a|b)`
  glob.track('before extglob');
  if (tok.is.extglob) {
    glob.extglob();
  }
  glob.track('after extglob');

  // expand brackets, e.g `[[:alpha:]]`
  glob.track('before brackets');
  if (tok.is.brackets) {
    glob.brackets();
  }
  glob.track('after brackets');

  // special patterns
  glob._replace('[!', '[^');
  glob._replace('(?', '(%~');
  glob._replace(/\[\]/, '\\[\\]');
  glob._replace('/[', '/' + (opts.dot ? dotfiles : nodot) + '[', true);
  glob._replace('/?', '/' + (opts.dot ? dotfiles : nodot) + '[^/]', true);
  glob._replace('/.', '/(?=.)\\.', true);

  // windows drives
  glob._replace(/^(\w):([\\\/]+?)/gi, '(?=.)$1:$2', true);

  // negate slashes in exclusion ranges
  if (glob.pattern.indexOf('[^') !== -1) {
    glob.pattern = negateSlash(glob.pattern);
  }

  if (opts.globstar !== false && glob.pattern === '**') {
    glob.pattern = globstar(opts.dot);

  } else {
    glob.pattern = balance(glob.pattern, '[', ']');
    glob.escape(glob.pattern);

    // if the pattern has `**`
    if (tok.is.globstar) {
      glob.pattern = collapse(glob.pattern, '/**');
      glob.pattern = collapse(glob.pattern, '**/');
      glob._replace('/**/', '(?:/' + globstar(opts.dot) + '/|/)', true);
      glob._replace(/\*{2,}/g, '**');

      // 'foo/*'
      glob._replace(/(\w+)\*(?!\/)/g, '$1[^/]*?', true);
      glob._replace(/\*\*\/\*(\w)/g, globstar(opts.dot) + '\\/' + (opts.dot ? dotfiles : nodot) + '[^/]*?$1', true);

      if (opts.dot !== true) {
        glob._replace(/\*\*\/(.)/g, '(?:**\\/|)$1');
      }

      // 'foo/**' or '{**,*}', but not 'foo**'
      if (tok.path.dirname !== '' || /,\*\*|\*\*,/.test(glob.orig)) {
        glob._replace('**', globstar(opts.dot), true);
      }
    }

    // ends with /*
    glob._replace(/\/\*$/, '\\/' + oneStar(opts.dot), true);
    // ends with *, no slashes
    glob._replace(/(?!\/)\*$/, star, true);
    // has 'n*.' (partial wildcard w/ file extension)
    glob._replace(/([^\/]+)\*/, '$1' + oneStar(true), true);
    // has '*'
    glob._replace('*', oneStar(opts.dot), true);
    glob._replace('?.', '?\\.', true);
    glob._replace('?:', '?:', true);

    glob._replace(/\?+/g, function(match) {
      var len = match.length;
      if (len === 1) {
        return qmark;
      }
      return qmark + '{' + len + '}';
    });

    // escape '.abc' => '\\.abc'
    glob._replace(/\.([*\w]+)/g, '\\.$1');
    // fix '[^\\\\/]'
    glob._replace(/\[\^[\\\/]+\]/g, qmark);
    // '///' => '\/'
    glob._replace(/\/+/g, '\\/');
    // '\\\\\\' => '\\'
    glob._replace(/\\{2,}/g, '\\');
  }

  // unescape previously escaped patterns
  glob.unescape(glob.pattern);
  glob._replace('__UNESC_STAR__', '*');

  // escape dots that follow qmarks
  glob._replace('?.', '?\\.');

  // remove unnecessary slashes in character classes
  glob._replace('[^\\/]', qmark);

  if (glob.pattern.length > 1) {
    if (/^[\[?*]/.test(glob.pattern)) {
      // only prepend the string if we don't want to match dotfiles
      glob.pattern = (opts.dot ? dotfiles : nodot) + glob.pattern;
    }
  }

  return glob;
}

/**
 * Collapse repeated character sequences.
 *
 * ```js
 * collapse('a/../../../b', '../');
 * //=> 'a/../b'
 * ```
 *
 * @param  {String} `str`
 * @param  {String} `ch` Character sequence to collapse
 * @return {String}
 */

function collapse(str, ch) {
  var res = str.split(ch);
  var isFirst = res[0] === '';
  var isLast = res[res.length - 1] === '';
  res = res.filter(Boolean);
  if (isFirst) res.unshift('');
  if (isLast) res.push('');
  return res.join(ch);
}

/**
 * Negate slashes in exclusion ranges, per glob spec:
 *
 * ```js
 * negateSlash('[^foo]');
 * //=> '[^\\/foo]'
 * ```
 *
 * @param  {String} `str` glob pattern
 * @return {String}
 */

function negateSlash(str) {
  return str.replace(/\[\^([^\]]*?)\]/g, function(match, inner) {
    if (inner.indexOf('/') === -1) {
      inner = '\\/' + inner;
    }
    return '[^' + inner + ']';
  });
}

/**
 * Escape imbalanced braces/bracket. This is a very
 * basic, naive implementation that only does enough
 * to serve the purpose.
 */

function balance(str, a, b) {
  var aarr = str.split(a);
  var alen = aarr.join('').length;
  var blen = str.split(b).join('').length;

  if (alen !== blen) {
    str = aarr.join('\\' + a);
    return str.split(b).join('\\' + b);
  }
  return str;
}

/**
 * Special patterns to be converted to regex.
 * Heuristics are used to simplify patterns
 * and speed up processing.
 */

/* eslint no-multi-spaces: 0 */
var qmark       = '[^/]';
var star        = qmark + '*?';
var nodot       = '(?!\\.)(?=.)';
var dotfileGlob = '(?:\\/|^)\\.{1,2}($|\\/)';
var dotfiles    = '(?!' + dotfileGlob + ')(?=.)';
var twoStarDot  = '(?:(?!' + dotfileGlob + ').)*?';

/**
 * Create a regex for `*`.
 *
 * If `dot` is true, or the pattern does not begin with
 * a leading star, then return the simpler regex.
 */

function oneStar(dotfile) {
  return dotfile ? '(?!' + dotfileGlob + ')(?=.)' + star : (nodot + star);
}

function globstar(dotfile) {
  if (dotfile) { return twoStarDot; }
  return '(?:(?!(?:\\/|^)\\.).)*?';
}


/***/ }),
/* 562 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var chars = __webpack_require__(560);
var utils = __webpack_require__(185);

/**
 * Expose `Glob`
 */

var Glob = module.exports = function Glob(pattern, options) {
  if (!(this instanceof Glob)) {
    return new Glob(pattern, options);
  }
  this.options = options || {};
  this.pattern = pattern;
  this.history = [];
  this.tokens = {};
  this.init(pattern);
};

/**
 * Initialize defaults
 */

Glob.prototype.init = function(pattern) {
  this.orig = pattern;
  this.negated = this.isNegated();
  this.options.track = this.options.track || false;
  this.options.makeRe = true;
};

/**
 * Push a change into `glob.history`. Useful
 * for debugging.
 */

Glob.prototype.track = function(msg) {
  if (this.options.track) {
    this.history.push({msg: msg, pattern: this.pattern});
  }
};

/**
 * Return true if `glob.pattern` was negated
 * with `!`, also remove the `!` from the pattern.
 *
 * @return {Boolean}
 */

Glob.prototype.isNegated = function() {
  if (this.pattern.charCodeAt(0) === 33 /* '!' */) {
    this.pattern = this.pattern.slice(1);
    return true;
  }
  return false;
};

/**
 * Expand braces in the given glob pattern.
 *
 * We only need to use the [braces] lib when
 * patterns are nested.
 */

Glob.prototype.braces = function() {
  if (this.options.nobraces !== true && this.options.nobrace !== true) {
    // naive/fast check for imbalanced characters
    var a = this.pattern.match(/[\{\(\[]/g);
    var b = this.pattern.match(/[\}\)\]]/g);

    // if imbalanced, don't optimize the pattern
    if (a && b && (a.length !== b.length)) {
      this.options.makeRe = false;
    }

    // expand brace patterns and join the resulting array
    var expanded = utils.braces(this.pattern, this.options);
    this.pattern = expanded.join('|');
  }
};

/**
 * Expand bracket expressions in `glob.pattern`
 */

Glob.prototype.brackets = function() {
  if (this.options.nobrackets !== true) {
    this.pattern = utils.brackets(this.pattern);
  }
};

/**
 * Expand bracket expressions in `glob.pattern`
 */

Glob.prototype.extglob = function() {
  if (this.options.noextglob === true) return;

  if (utils.isExtglob(this.pattern)) {
    this.pattern = utils.extglob(this.pattern, {escape: true});
  }
};

/**
 * Parse the given pattern
 */

Glob.prototype.parse = function(pattern) {
  this.tokens = utils.parseGlob(pattern || this.pattern, true);
  return this.tokens;
};

/**
 * Replace `a` with `b`. Also tracks the change before and
 * after each replacement. This is disabled by default, but
 * can be enabled by setting `options.track` to true.
 *
 * Also, when the pattern is a string, `.split()` is used,
 * because it's much faster than replace.
 *
 * @param  {RegExp|String} `a`
 * @param  {String} `b`
 * @param  {Boolean} `escape` When `true`, escapes `*` and `?` in the replacement.
 * @return {String}
 */

Glob.prototype._replace = function(a, b, escape) {
  this.track('before (find): "' + a + '" (replace with): "' + b + '"');
  if (escape) b = esc(b);
  if (a && b && typeof a === 'string') {
    this.pattern = this.pattern.split(a).join(b);
  } else {
    this.pattern = this.pattern.replace(a, b);
  }
  this.track('after');
};

/**
 * Escape special characters in the given string.
 *
 * @param  {String} `str` Glob pattern
 * @return {String}
 */

Glob.prototype.escape = function(str) {
  this.track('before escape: ');
  var re = /["\\](['"]?[^"'\\]['"]?)/g;

  this.pattern = str.replace(re, function($0, $1) {
    var o = chars.ESC;
    var ch = o && o[$1];
    if (ch) {
      return ch;
    }
    if (/[a-z]/i.test($0)) {
      return $0.split('\\').join('');
    }
    return $0;
  });

  this.track('after escape: ');
};

/**
 * Unescape special characters in the given string.
 *
 * @param  {String} `str`
 * @return {String}
 */

Glob.prototype.unescape = function(str) {
  var re = /__([A-Z]+)_([A-Z]+)__/g;
  this.pattern = str.replace(re, function($0, $1) {
    return chars[$1][$0];
  });
  this.pattern = unesc(this.pattern);
};

/**
 * Escape/unescape utils
 */

function esc(str) {
  str = str.split('?').join('%~');
  str = str.split('*').join('%%');
  return str;
}

function unesc(str) {
  str = str.split('%~').join('?');
  str = str.split('%%').join('*');
  return str;
}


/***/ }),
/* 563 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * arr-flatten <https://github.com/jonschlinkert/arr-flatten>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



module.exports = function (arr) {
  return flat(arr, []);
};

function flat(arr, res) {
  var i = 0, cur;
  var len = arr.length;
  for (; i < len; i++) {
    cur = arr[i];
    Array.isArray(cur) ? flat(cur, res) : res.push(cur);
  }
  return res;
}


/***/ }),
/* 564 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var arrayUniq = __webpack_require__(565);

module.exports = function () {
	return arrayUniq([].concat.apply([], arguments));
};


/***/ }),
/* 565 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// there's 3 implementations written in increasing order of efficiency

// 1 - no Set type is defined
function uniqNoSet(arr) {
	var ret = [];

	for (var i = 0; i < arr.length; i++) {
		if (ret.indexOf(arr[i]) === -1) {
			ret.push(arr[i]);
		}
	}

	return ret;
}

// 2 - a simple Set type is defined
function uniqSet(arr) {
	var seen = new Set();
	return arr.filter(function (el) {
		if (!seen.has(el)) {
			seen.add(el);
			return true;
		}

		return false;
	});
}

// 3 - a standard Set type is defined and it has a forEach method
function uniqSetWithForEach(arr) {
	var ret = [];

	(new Set(arr)).forEach(function (el) {
		ret.push(el);
	});

	return ret;
}

// V8 currently has a broken implementation
// https://github.com/joyent/node/issues/8449
function doesForEachActuallyWork() {
	var ret = false;

	(new Set([true])).forEach(function (el) {
		ret = el;
	});

	return ret === true;
}

if ('Set' in global) {
	if (typeof Set.prototype.forEach === 'function' && doesForEachActuallyWork()) {
		module.exports = uniqSetWithForEach;
	} else {
		module.exports = uniqSet;
	}
} else {
	module.exports = uniqNoSet;
}


/***/ }),
/* 566 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (val) {
	if (val === null || val === undefined) {
		return [];
	}

	return Array.isArray(val) ? val : [val];
};


/***/ }),
/* 567 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.

var errors = __webpack_require__(186);
var types = __webpack_require__(187);

var Reader = __webpack_require__(568);
var Writer = __webpack_require__(569);


///--- Exports

module.exports = {

  Reader: Reader,

  Writer: Writer

};

for (var t in types) {
  if (types.hasOwnProperty(t))
    module.exports[t] = types[t];
}
for (var e in errors) {
  if (errors.hasOwnProperty(e))
    module.exports[e] = errors[e];
}


/***/ }),
/* 568 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.

var assert = __webpack_require__(11);

var ASN1 = __webpack_require__(187);
var errors = __webpack_require__(186);


///--- Globals

var newInvalidAsn1Error = errors.newInvalidAsn1Error;



///--- API

function Reader(data) {
  if (!data || !Buffer.isBuffer(data))
    throw new TypeError('data must be a node Buffer');

  this._buf = data;
  this._size = data.length;

  // These hold the "current" state
  this._len = 0;
  this._offset = 0;
}

Object.defineProperty(Reader.prototype, 'length', {
  enumerable: true,
  get: function () { return (this._len); }
});

Object.defineProperty(Reader.prototype, 'offset', {
  enumerable: true,
  get: function () { return (this._offset); }
});

Object.defineProperty(Reader.prototype, 'remain', {
  get: function () { return (this._size - this._offset); }
});

Object.defineProperty(Reader.prototype, 'buffer', {
  get: function () { return (this._buf.slice(this._offset)); }
});


/**
 * Reads a single byte and advances offset; you can pass in `true` to make this
 * a "peek" operation (i.e., get the byte, but don't advance the offset).
 *
 * @param {Boolean} peek true means don't move offset.
 * @return {Number} the next byte, null if not enough data.
 */
Reader.prototype.readByte = function(peek) {
  if (this._size - this._offset < 1)
    return null;

  var b = this._buf[this._offset] & 0xff;

  if (!peek)
    this._offset += 1;

  return b;
};


Reader.prototype.peek = function() {
  return this.readByte(true);
};


/**
 * Reads a (potentially) variable length off the BER buffer.  This call is
 * not really meant to be called directly, as callers have to manipulate
 * the internal buffer afterwards.
 *
 * As a result of this call, you can call `Reader.length`, until the
 * next thing called that does a readLength.
 *
 * @return {Number} the amount of offset to advance the buffer.
 * @throws {InvalidAsn1Error} on bad ASN.1
 */
Reader.prototype.readLength = function(offset) {
  if (offset === undefined)
    offset = this._offset;

  if (offset >= this._size)
    return null;

  var lenB = this._buf[offset++] & 0xff;
  if (lenB === null)
    return null;

  if ((lenB & 0x80) == 0x80) {
    lenB &= 0x7f;

    if (lenB == 0)
      throw newInvalidAsn1Error('Indefinite length not supported');

    if (lenB > 4)
      throw newInvalidAsn1Error('encoding too long');

    if (this._size - offset < lenB)
      return null;

    this._len = 0;
    for (var i = 0; i < lenB; i++)
      this._len = (this._len << 8) + (this._buf[offset++] & 0xff);

  } else {
    // Wasn't a variable length
    this._len = lenB;
  }

  return offset;
};


/**
 * Parses the next sequence in this BER buffer.
 *
 * To get the length of the sequence, call `Reader.length`.
 *
 * @return {Number} the sequence's tag.
 */
Reader.prototype.readSequence = function(tag) {
  var seq = this.peek();
  if (seq === null)
    return null;
  if (tag !== undefined && tag !== seq)
    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +
                              ': got 0x' + seq.toString(16));

  var o = this.readLength(this._offset + 1); // stored in `length`
  if (o === null)
    return null;

  this._offset = o;
  return seq;
};


Reader.prototype.readInt = function() {
  return this._readTag(ASN1.Integer);
};


Reader.prototype.readBoolean = function() {
  return (this._readTag(ASN1.Boolean) === 0 ? false : true);
};


Reader.prototype.readEnumeration = function() {
  return this._readTag(ASN1.Enumeration);
};


Reader.prototype.readString = function(tag, retbuf) {
  if (!tag)
    tag = ASN1.OctetString;

  var b = this.peek();
  if (b === null)
    return null;

  if (b !== tag)
    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +
                              ': got 0x' + b.toString(16));

  var o = this.readLength(this._offset + 1); // stored in `length`

  if (o === null)
    return null;

  if (this.length > this._size - o)
    return null;

  this._offset = o;

  if (this.length === 0)
    return retbuf ? new Buffer(0) : '';

  var str = this._buf.slice(this._offset, this._offset + this.length);
  this._offset += this.length;

  return retbuf ? str : str.toString('utf8');
};

Reader.prototype.readOID = function(tag) {
  if (!tag)
    tag = ASN1.OID;

  var b = this.readString(tag, true);
  if (b === null)
    return null;

  var values = [];
  var value = 0;

  for (var i = 0; i < b.length; i++) {
    var byte = b[i] & 0xff;

    value <<= 7;
    value += byte & 0x7f;
    if ((byte & 0x80) == 0) {
      values.push(value);
      value = 0;
    }
  }

  value = values.shift();
  values.unshift(value % 40);
  values.unshift((value / 40) >> 0);

  return values.join('.');
};


Reader.prototype._readTag = function(tag) {
  assert.ok(tag !== undefined);

  var b = this.peek();

  if (b === null)
    return null;

  if (b !== tag)
    throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +
                              ': got 0x' + b.toString(16));

  var o = this.readLength(this._offset + 1); // stored in `length`
  if (o === null)
    return null;

  if (this.length > 4)
    throw newInvalidAsn1Error('Integer too long: ' + this.length);

  if (this.length > this._size - o)
    return null;
  this._offset = o;

  var fb = this._buf[this._offset];
  var value = 0;

  for (var i = 0; i < this.length; i++) {
    value <<= 8;
    value |= (this._buf[this._offset++] & 0xff);
  }

  if ((fb & 0x80) == 0x80 && i !== 4)
    value -= (1 << (i * 8));

  return value >> 0;
};



///--- Exported API

module.exports = Reader;


/***/ }),
/* 569 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.

var assert = __webpack_require__(11);
var ASN1 = __webpack_require__(187);
var errors = __webpack_require__(186);


///--- Globals

var newInvalidAsn1Error = errors.newInvalidAsn1Error;

var DEFAULT_OPTS = {
  size: 1024,
  growthFactor: 8
};


///--- Helpers

function merge(from, to) {
  assert.ok(from);
  assert.equal(typeof(from), 'object');
  assert.ok(to);
  assert.equal(typeof(to), 'object');

  var keys = Object.getOwnPropertyNames(from);
  keys.forEach(function(key) {
    if (to[key])
      return;

    var value = Object.getOwnPropertyDescriptor(from, key);
    Object.defineProperty(to, key, value);
  });

  return to;
}



///--- API

function Writer(options) {
  options = merge(DEFAULT_OPTS, options || {});

  this._buf = new Buffer(options.size || 1024);
  this._size = this._buf.length;
  this._offset = 0;
  this._options = options;

  // A list of offsets in the buffer where we need to insert
  // sequence tag/len pairs.
  this._seq = [];
}

Object.defineProperty(Writer.prototype, 'buffer', {
  get: function () {
    if (this._seq.length)
      throw new InvalidAsn1Error(this._seq.length + ' unended sequence(s)');

    return (this._buf.slice(0, this._offset));
  }
});

Writer.prototype.writeByte = function(b) {
  if (typeof(b) !== 'number')
    throw new TypeError('argument must be a Number');

  this._ensure(1);
  this._buf[this._offset++] = b;
};


Writer.prototype.writeInt = function(i, tag) {
  if (typeof(i) !== 'number')
    throw new TypeError('argument must be a Number');
  if (typeof(tag) !== 'number')
    tag = ASN1.Integer;

  var sz = 4;

  while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) &&
         (sz > 1)) {
    sz--;
    i <<= 8;
  }

  if (sz > 4)
    throw new InvalidAsn1Error('BER ints cannot be > 0xffffffff');

  this._ensure(2 + sz);
  this._buf[this._offset++] = tag;
  this._buf[this._offset++] = sz;

  while (sz-- > 0) {
    this._buf[this._offset++] = ((i & 0xff000000) >>> 24);
    i <<= 8;
  }

};


Writer.prototype.writeNull = function() {
  this.writeByte(ASN1.Null);
  this.writeByte(0x00);
};


Writer.prototype.writeEnumeration = function(i, tag) {
  if (typeof(i) !== 'number')
    throw new TypeError('argument must be a Number');
  if (typeof(tag) !== 'number')
    tag = ASN1.Enumeration;

  return this.writeInt(i, tag);
};


Writer.prototype.writeBoolean = function(b, tag) {
  if (typeof(b) !== 'boolean')
    throw new TypeError('argument must be a Boolean');
  if (typeof(tag) !== 'number')
    tag = ASN1.Boolean;

  this._ensure(3);
  this._buf[this._offset++] = tag;
  this._buf[this._offset++] = 0x01;
  this._buf[this._offset++] = b ? 0xff : 0x00;
};


Writer.prototype.writeString = function(s, tag) {
  if (typeof(s) !== 'string')
    throw new TypeError('argument must be a string (was: ' + typeof(s) + ')');
  if (typeof(tag) !== 'number')
    tag = ASN1.OctetString;

  var len = Buffer.byteLength(s);
  this.writeByte(tag);
  this.writeLength(len);
  if (len) {
    this._ensure(len);
    this._buf.write(s, this._offset);
    this._offset += len;
  }
};


Writer.prototype.writeBuffer = function(buf, tag) {
  if (typeof(tag) !== 'number')
    throw new TypeError('tag must be a number');
  if (!Buffer.isBuffer(buf))
    throw new TypeError('argument must be a buffer');

  this.writeByte(tag);
  this.writeLength(buf.length);
  this._ensure(buf.length);
  buf.copy(this._buf, this._offset, 0, buf.length);
  this._offset += buf.length;
};


Writer.prototype.writeStringArray = function(strings) {
  if ((!strings instanceof Array))
    throw new TypeError('argument must be an Array[String]');

  var self = this;
  strings.forEach(function(s) {
    self.writeString(s);
  });
};

// This is really to solve DER cases, but whatever for now
Writer.prototype.writeOID = function(s, tag) {
  if (typeof(s) !== 'string')
    throw new TypeError('argument must be a string');
  if (typeof(tag) !== 'number')
    tag = ASN1.OID;

  if (!/^([0-9]+\.){3,}[0-9]+$/.test(s))
    throw new Error('argument is not a valid OID string');

  function encodeOctet(bytes, octet) {
    if (octet < 128) {
        bytes.push(octet);
    } else if (octet < 16384) {
        bytes.push((octet >>> 7) | 0x80);
        bytes.push(octet & 0x7F);
    } else if (octet < 2097152) {
      bytes.push((octet >>> 14) | 0x80);
      bytes.push(((octet >>> 7) | 0x80) & 0xFF);
      bytes.push(octet & 0x7F);
    } else if (octet < 268435456) {
      bytes.push((octet >>> 21) | 0x80);
      bytes.push(((octet >>> 14) | 0x80) & 0xFF);
      bytes.push(((octet >>> 7) | 0x80) & 0xFF);
      bytes.push(octet & 0x7F);
    } else {
      bytes.push(((octet >>> 28) | 0x80) & 0xFF);
      bytes.push(((octet >>> 21) | 0x80) & 0xFF);
      bytes.push(((octet >>> 14) | 0x80) & 0xFF);
      bytes.push(((octet >>> 7) | 0x80) & 0xFF);
      bytes.push(octet & 0x7F);
    }
  }

  var tmp = s.split('.');
  var bytes = [];
  bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10));
  tmp.slice(2).forEach(function(b) {
    encodeOctet(bytes, parseInt(b, 10));
  });

  var self = this;
  this._ensure(2 + bytes.length);
  this.writeByte(tag);
  this.writeLength(bytes.length);
  bytes.forEach(function(b) {
    self.writeByte(b);
  });
};


Writer.prototype.writeLength = function(len) {
  if (typeof(len) !== 'number')
    throw new TypeError('argument must be a Number');

  this._ensure(4);

  if (len <= 0x7f) {
    this._buf[this._offset++] = len;
  } else if (len <= 0xff) {
    this._buf[this._offset++] = 0x81;
    this._buf[this._offset++] = len;
  } else if (len <= 0xffff) {
    this._buf[this._offset++] = 0x82;
    this._buf[this._offset++] = len >> 8;
    this._buf[this._offset++] = len;
  } else if (len <= 0xffffff) {
    this._buf[this._offset++] = 0x83;
    this._buf[this._offset++] = len >> 16;
    this._buf[this._offset++] = len >> 8;
    this._buf[this._offset++] = len;
  } else {
    throw new InvalidAsn1ERror('Length too long (> 4 bytes)');
  }
};

Writer.prototype.startSequence = function(tag) {
  if (typeof(tag) !== 'number')
    tag = ASN1.Sequence | ASN1.Constructor;

  this.writeByte(tag);
  this._seq.push(this._offset);
  this._ensure(3);
  this._offset += 3;
};


Writer.prototype.endSequence = function() {
  var seq = this._seq.pop();
  var start = seq + 3;
  var len = this._offset - start;

  if (len <= 0x7f) {
    this._shift(start, len, -2);
    this._buf[seq] = len;
  } else if (len <= 0xff) {
    this._shift(start, len, -1);
    this._buf[seq] = 0x81;
    this._buf[seq + 1] = len;
  } else if (len <= 0xffff) {
    this._buf[seq] = 0x82;
    this._buf[seq + 1] = len >> 8;
    this._buf[seq + 2] = len;
  } else if (len <= 0xffffff) {
    this._shift(start, len, 1);
    this._buf[seq] = 0x83;
    this._buf[seq + 1] = len >> 16;
    this._buf[seq + 2] = len >> 8;
    this._buf[seq + 3] = len;
  } else {
    throw new InvalidAsn1Error('Sequence too long');
  }
};


Writer.prototype._shift = function(start, len, shift) {
  assert.ok(start !== undefined);
  assert.ok(len !== undefined);
  assert.ok(shift);

  this._buf.copy(this._buf, start + shift, start, start + len);
  this._offset += shift;
};

Writer.prototype._ensure = function(len) {
  assert.ok(len);

  if (this._size - this._offset < len) {
    var sz = this._size * this._options.growthFactor;
    if (sz - this._offset < len)
      sz += len;

    var buf = new Buffer(sz);

    this._buf.copy(buf, 0, 0, this._offset);
    this._buf = buf;
    this._size = sz;
  }
};



///--- Exported API

module.exports = Writer;


/***/ }),
/* 570 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// async-each MIT license (by Paul Miller from http://paulmillr.com).
(function(globals) {
  'use strict';
  var each = function(items, next, callback) {
    if (!Array.isArray(items)) throw new TypeError('each() expects array as first argument');
    if (typeof next !== 'function') throw new TypeError('each() expects function as second argument');
    if (typeof callback !== 'function') callback = Function.prototype; // no-op

    if (items.length === 0) return callback(undefined, items);

    var transformed = new Array(items.length);
    var count = 0;
    var returned = false;

    items.forEach(function(item, index) {
      next(item, function(error, transformedItem) {
        if (returned) return;
        if (error) {
          returned = true;
          return callback(error);
        }
        transformed[index] = transformedItem;
        count += 1;
        if (count === items.length) return callback(undefined, transformed);
      });
    });
  };

  if (true) {
    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
      return each;
    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // RequireJS
  } else if (typeof module !== 'undefined' && module.exports) {
    module.exports = each; // CommonJS
  } else {
    globals.asyncEach = each; // <script>
  }
})(this);


/***/ }),
/* 571 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = asyncify;

var _isObject = __webpack_require__(377);

var _isObject2 = _interopRequireDefault(_isObject);

var _initialParams = __webpack_require__(584);

var _initialParams2 = _interopRequireDefault(_initialParams);

var _setImmediate = __webpack_require__(586);

var _setImmediate2 = _interopRequireDefault(_setImmediate);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Take a sync function and make it async, passing its return value to a
 * callback. This is useful for plugging sync functions into a waterfall,
 * series, or other async functions. Any arguments passed to the generated
 * function will be passed to the wrapped function (except for the final
 * callback argument). Errors thrown will be passed to the callback.
 *
 * If the function passed to `asyncify` returns a Promise, that promises's
 * resolved/rejected state will be used to call the callback, rather than simply
 * the synchronous return value.
 *
 * This also means you can asyncify ES2017 `async` functions.
 *
 * @name asyncify
 * @static
 * @memberOf module:Utils
 * @method
 * @alias wrapSync
 * @category Util
 * @param {Function} func - The synchronous function, or Promise-returning
 * function to convert to an {@link AsyncFunction}.
 * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be
 * invoked with `(args..., callback)`.
 * @example
 *
 * // passing a regular synchronous function
 * async.waterfall([
 *     async.apply(fs.readFile, filename, "utf8"),
 *     async.asyncify(JSON.parse),
 *     function (data, next) {
 *         // data is the result of parsing the text.
 *         // If there was a parsing error, it would have been caught.
 *     }
 * ], callback);
 *
 * // passing a function returning a promise
 * async.waterfall([
 *     async.apply(fs.readFile, filename, "utf8"),
 *     async.asyncify(function (contents) {
 *         return db.model.create(contents);
 *     }),
 *     function (model, next) {
 *         // `model` is the instantiated model object.
 *         // If there was an error, this function would be skipped.
 *     }
 * ], callback);
 *
 * // es2017 example, though `asyncify` is not needed if your JS environment
 * // supports async functions out of the box
 * var q = async.queue(async.asyncify(async function(file) {
 *     var intermediateStep = await processFile(file);
 *     return await somePromise(intermediateStep)
 * }));
 *
 * q.push(files);
 */
function asyncify(func) {
    return (0, _initialParams2.default)(function (args, callback) {
        var result;
        try {
            result = func.apply(this, args);
        } catch (e) {
            return callback(e);
        }
        // if result is Promise object
        if ((0, _isObject2.default)(result) && typeof result.then === 'function') {
            result.then(function (value) {
                invokeCallback(callback, null, value);
            }, function (err) {
                invokeCallback(callback, err.message ? err : new Error(err));
            });
        } else {
            callback(null, result);
        }
    });
}

function invokeCallback(callback, error, value) {
    try {
        callback(error, value);
    } catch (e) {
        (0, _setImmediate2.default)(rethrow, e);
    }
}

function rethrow(error) {
    throw error;
}
module.exports = exports['default'];

/***/ }),
/* 572 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _identity = __webpack_require__(943);

var _identity2 = _interopRequireDefault(_identity);

var _createTester = __webpack_require__(578);

var _createTester2 = _interopRequireDefault(_createTester);

var _doParallelLimit = __webpack_require__(580);

var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit);

var _findGetResult = __webpack_require__(582);

var _findGetResult2 = _interopRequireDefault(_findGetResult);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name detectLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.detect]{@link module:Collections.detect}
 * @alias findLimit
 * @category Collections
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
 * The iteratee must complete with a boolean value as its result.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the `iteratee` functions have finished.
 * Result will be the first item in the array that passes the truth test
 * (iteratee) or the value `undefined` if none passed. Invoked with
 * (err, result).
 */
exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(_identity2.default, _findGetResult2.default));
module.exports = exports['default'];

/***/ }),
/* 573 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _detectLimit = __webpack_require__(572);

var _detectLimit2 = _interopRequireDefault(_detectLimit);

var _doLimit = __webpack_require__(189);

var _doLimit2 = _interopRequireDefault(_doLimit);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.
 *
 * @name detectSeries
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.detect]{@link module:Collections.detect}
 * @alias findSeries
 * @category Collections
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.
 * The iteratee must complete with a boolean value as its result.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called as soon as any
 * iteratee returns `true`, or after all the `iteratee` functions have finished.
 * Result will be the first item in the array that passes the truth test
 * (iteratee) or the value `undefined` if none passed. Invoked with
 * (err, result).
 */
exports.default = (0, _doLimit2.default)(_detectLimit2.default, 1);
module.exports = exports['default'];

/***/ }),
/* 574 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = eachLimit;

var _eachOf = __webpack_require__(274);

var _eachOf2 = _interopRequireDefault(_eachOf);

var _withoutIndex = __webpack_require__(277);

var _withoutIndex2 = _interopRequireDefault(_withoutIndex);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Applies the function `iteratee` to each item in `coll`, in parallel.
 * The `iteratee` is called with an item from the list, and a callback for when
 * it has finished. If the `iteratee` passes an error to its `callback`, the
 * main `callback` (for the `each` function) is immediately called with the
 * error.
 *
 * Note, that since this function applies `iteratee` to each item in parallel,
 * there is no guarantee that the iteratee functions will complete in order.
 *
 * @name each
 * @static
 * @memberOf module:Collections
 * @method
 * @alias forEach
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {AsyncFunction} iteratee - An async function to apply to
 * each item in `coll`. Invoked with (item, callback).
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOf`.
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 * @example
 *
 * // assuming openFiles is an array of file names and saveFile is a function
 * // to save the modified contents of that file:
 *
 * async.each(openFiles, saveFile, function(err){
 *   // if any of the saves produced an error, err would equal that error
 * });
 *
 * // assuming openFiles is an array of file names
 * async.each(openFiles, function(file, callback) {
 *
 *     // Perform operation on file here.
 *     console.log('Processing file ' + file);
 *
 *     if( file.length > 32 ) {
 *       console.log('This file name is too long');
 *       callback('File name too long');
 *     } else {
 *       // Do work to process file here
 *       console.log('File processed');
 *       callback();
 *     }
 * }, function(err) {
 *     // if any of the file processing produced an error, err would equal that error
 *     if( err ) {
 *       // One of the iterations produced an error.
 *       // All processing will now stop.
 *       console.log('A file failed to process');
 *     } else {
 *       console.log('All files have been processed successfully');
 *     }
 * });
 */
function eachLimit(coll, iteratee, callback) {
  (0, _eachOf2.default)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback);
}
module.exports = exports['default'];

/***/ }),
/* 575 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = eachLimit;

var _eachOfLimit = __webpack_require__(190);

var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);

var _withoutIndex = __webpack_require__(277);

var _withoutIndex2 = _interopRequireDefault(_withoutIndex);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.
 *
 * @name eachLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.each]{@link module:Collections.each}
 * @alias forEachLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each item in
 * `coll`.
 * The array index is not passed to the iteratee.
 * If you need the index, use `eachOfLimit`.
 * Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
function eachLimit(coll, limit, iteratee, callback) {
  (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback);
}
module.exports = exports['default'];

/***/ }),
/* 576 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = eachOfLimit;

var _eachOfLimit2 = __webpack_require__(190);

var _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a
 * time.
 *
 * @name eachOfLimit
 * @static
 * @memberOf module:Collections
 * @method
 * @see [async.eachOf]{@link module:Collections.eachOf}
 * @alias forEachOfLimit
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {number} limit - The maximum number of async operations at a time.
 * @param {AsyncFunction} iteratee - An async function to apply to each
 * item in `coll`. The `key` is the item's key, or index in the case of an
 * array.
 * Invoked with (item, key, callback).
 * @param {Function} [callback] - A callback which is called when all
 * `iteratee` functions have finished, or an error occurs. Invoked with (err).
 */
function eachOfLimit(coll, limit, iteratee, callback) {
  (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback);
}
module.exports = exports['default'];

/***/ }),
/* 577 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _filter = __webpack_require__(581);

var _filter2 = _interopRequireDefault(_filter);

var _doParallel = __webpack_require__(579);

var _doParallel2 = _interopRequireDefault(_doParallel);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Returns a new array of all the values in `coll` which pass an async truth
 * test. This operation is performed in parallel, but the results array will be
 * in the same order as the original.
 *
 * @name filter
 * @static
 * @memberOf module:Collections
 * @method
 * @alias select
 * @category Collection
 * @param {Array|Iterable|Object} coll - A collection to iterate over.
 * @param {Function} iteratee - A truth test to apply to each item in `coll`.
 * The `iteratee` is passed a `callback(err, truthValue)`, which must be called
 * with a boolean argument once it has completed. Invoked with (item, callback).
 * @param {Function} [callback] - A callback which is called after all the
 * `iteratee` functions have finished. Invoked with (err, results).
 * @example
 *
 * async.filter(['file1','file2','file3'], function(filePath, callback) {
 *     fs.access(filePath, function(err) {
 *         callback(null, !err)
 *     });
 * }, function(err, results) {
 *     // results now equals an array of the existing files
 * });
 */
exports.default = (0, _doParallel2.default)(_filter2.default);
module.exports = exports['default'];

/***/ }),
/* 578 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = _createTester;

var _noop = __webpack_require__(126);

var _noop2 = _interopRequireDefault(_noop);

var _breakLoop = __webpack_require__(188);

var _breakLoop2 = _interopRequireDefault(_breakLoop);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _createTester(check, getResult) {
    return function (eachfn, arr, iteratee, cb) {
        cb = cb || _noop2.default;
        var testPassed = false;
        var testResult;
        eachfn(arr, function (value, _, callback) {
            iteratee(value, function (err, result) {
                if (err) {
                    callback(err);
                } else if (check(result) && !testResult) {
                    testPassed = true;
                    testResult = getResult(true, value);
                    callback(null, _breakLoop2.default);
                } else {
                    callback();
                }
            });
        }, function (err) {
            if (err) {
                cb(err);
            } else {
                cb(null, testPassed ? testResult : getResult(false));
            }
        });
    };
}
module.exports = exports['default'];

/***/ }),
/* 579 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = doParallel;

var _eachOf = __webpack_require__(274);

var _eachOf2 = _interopRequireDefault(_eachOf);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function doParallel(fn) {
    return function (obj, iteratee, callback) {
        return fn(_eachOf2.default, obj, (0, _wrapAsync2.default)(iteratee), callback);
    };
}
module.exports = exports['default'];

/***/ }),
/* 580 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = doParallelLimit;

var _eachOfLimit = __webpack_require__(190);

var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function doParallelLimit(fn) {
    return function (obj, limit, iteratee, callback) {
        return fn((0, _eachOfLimit2.default)(limit), obj, (0, _wrapAsync2.default)(iteratee), callback);
    };
}
module.exports = exports['default'];

/***/ }),
/* 581 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = _filter;

var _arrayMap = __webpack_require__(929);

var _arrayMap2 = _interopRequireDefault(_arrayMap);

var _isArrayLike = __webpack_require__(164);

var _isArrayLike2 = _interopRequireDefault(_isArrayLike);

var _baseProperty = __webpack_require__(933);

var _baseProperty2 = _interopRequireDefault(_baseProperty);

var _noop = __webpack_require__(126);

var _noop2 = _interopRequireDefault(_noop);

var _wrapAsync = __webpack_require__(60);

var _wrapAsync2 = _interopRequireDefault(_wrapAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function filterArray(eachfn, arr, iteratee, callback) {
    var truthValues = new Array(arr.length);
    eachfn(arr, function (x, index, callback) {
        iteratee(x, function (err, v) {
            truthValues[index] = !!v;
            callback(err);
        });
    }, function (err) {
        if (err) return callback(err);
        var results = [];
        for (var i = 0; i < arr.length; i++) {
            if (truthValues[i]) results.push(arr[i]);
        }
        callback(null, results);
    });
}

function filterGeneric(eachfn, coll, iteratee, callback) {
    var results = [];
    eachfn(coll, function (x, index, callback) {
        iteratee(x, function (err, v) {
            if (err) {
                callback(err);
            } else {
                if (v) {
                    results.push({ index: index, value: x });
                }
                callback();
            }
        });
    }, function (err) {
        if (err) {
            callback(err);
        } else {
            callback(null, (0, _arrayMap2.default)(results.sort(function (a, b) {
                return a.index - b.index;
            }), (0, _baseProperty2.default)('value')));
        }
    });
}

function _filter(eachfn, coll, iteratee, callback) {
    var filter = (0, _isArrayLike2.default)(coll) ? filterArray : filterGeneric;
    filter(eachfn, coll, (0, _wrapAsync2.default)(iteratee), callback || _noop2.default);
}
module.exports = exports['default'];

/***/ }),
/* 582 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = _findGetResult;
function _findGetResult(v, x) {
    return x;
}
module.exports = exports["default"];

/***/ }),
/* 583 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (coll) {
    return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol]();
};

var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator;

module.exports = exports['default'];

/***/ }),
/* 584 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (fn) {
    return function () /*...args, callback*/{
        var args = (0, _slice2.default)(arguments);
        var callback = args.pop();
        fn.call(this, args, callback);
    };
};

var _slice = __webpack_require__(192);

var _slice2 = _interopRequireDefault(_slice);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

module.exports = exports['default'];

/***/ }),
/* 585 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = iterator;

var _isArrayLike = __webpack_require__(164);

var _isArrayLike2 = _interopRequireDefault(_isArrayLike);

var _getIterator = __webpack_require__(583);

var _getIterator2 = _interopRequireDefault(_getIterator);

var _keys = __webpack_require__(949);

var _keys2 = _interopRequireDefault(_keys);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function createArrayIterator(coll) {
    var i = -1;
    var len = coll.length;
    return function next() {
        return ++i < len ? { value: coll[i], key: i } : null;
    };
}

function createES2015Iterator(iterator) {
    var i = -1;
    return function next() {
        var item = iterator.next();
        if (item.done) return null;
        i++;
        return { value: item.value, key: i };
    };
}

function createObjectIterator(obj) {
    var okeys = (0, _keys2.default)(obj);
    var i = -1;
    var len = okeys.length;
    return function next() {
        var key = okeys[++i];
        return i < len ? { value: obj[key], key: key } : null;
    };
}

function iterator(coll) {
    if ((0, _isArrayLike2.default)(coll)) {
        return createArrayIterator(coll);
    }

    var iterator = (0, _getIterator2.default)(coll);
    return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);
}
module.exports = exports['default'];

/***/ }),
/* 586 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.hasNextTick = exports.hasSetImmediate = undefined;
exports.fallback = fallback;
exports.wrap = wrap;

var _slice = __webpack_require__(192);

var _slice2 = _interopRequireDefault(_slice);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';

function fallback(fn) {
    setTimeout(fn, 0);
}

function wrap(defer) {
    return function (fn /*, ...args*/) {
        var args = (0, _slice2.default)(arguments, 1);
        defer(function () {
            fn.apply(null, args);
        });
    };
}

var _defer;

if (hasSetImmediate) {
    _defer = setImmediate;
} else if (hasNextTick) {
    _defer = process.nextTick;
} else {
    _defer = fallback;
}

exports.default = wrap(_defer);

/***/ }),
/* 587 */
/***/ (function(module, exports, __webpack_require__) {

module.exports =
{
  parallel      : __webpack_require__(589),
  serial        : __webpack_require__(590),
  serialOrdered : __webpack_require__(284)
};


/***/ }),
/* 588 */
/***/ (function(module, exports) {

module.exports = defer;

/**
 * Runs provided function on next iteration of the event loop
 *
 * @param {function} fn - function to run
 */
function defer(fn)
{
  var nextTick = typeof setImmediate == 'function'
    ? setImmediate
    : (
      typeof process == 'object' && typeof process.nextTick == 'function'
      ? process.nextTick
      : null
    );

  if (nextTick)
  {
    nextTick(fn);
  }
  else
  {
    setTimeout(fn, 0);
  }
}


/***/ }),
/* 589 */
/***/ (function(module, exports, __webpack_require__) {

var iterate    = __webpack_require__(281)
  , initState  = __webpack_require__(282)
  , terminator = __webpack_require__(283)
  ;

// Public API
module.exports = parallel;

/**
 * Runs iterator over provided array elements in parallel
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function parallel(list, iterator, callback)
{
  var state = initState(list);

  while (state.index < (state['keyedList'] || list).length)
  {
    iterate(list, iterator, state, function(error, result)
    {
      if (error)
      {
        callback(error, result);
        return;
      }

      // looks like it's the last one
      if (Object.keys(state.jobs).length === 0)
      {
        callback(null, state.results);
        return;
      }
    });

    state.index++;
  }

  return terminator.bind(state, callback);
}


/***/ }),
/* 590 */
/***/ (function(module, exports, __webpack_require__) {

var serialOrdered = __webpack_require__(284);

// Public API
module.exports = serial;

/**
 * Runs iterator over provided array elements in series
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function serial(list, iterator, callback)
{
  return serialOrdered(list, iterator, null, callback);
}


/***/ }),
/* 591 */
/***/ (function(module, exports, __webpack_require__) {


/*!
 *  Copyright 2010 LearnBoost <dev@learnboost.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Module dependencies.
 */

var crypto = __webpack_require__(7)
  , parse = __webpack_require__(8).parse
  ;

/**
 * Valid keys.
 */

var keys = 
  [ 'acl'
  , 'location'
  , 'logging'
  , 'notification'
  , 'partNumber'
  , 'policy'
  , 'requestPayment'
  , 'torrent'
  , 'uploadId'
  , 'uploads'
  , 'versionId'
  , 'versioning'
  , 'versions'
  , 'website'
  ]

/**
 * Return an "Authorization" header value with the given `options`
 * in the form of "AWS <key>:<signature>"
 *
 * @param {Object} options
 * @return {String}
 * @api private
 */

function authorization (options) {
  return 'AWS ' + options.key + ':' + sign(options)
}

module.exports = authorization
module.exports.authorization = authorization

/**
 * Simple HMAC-SHA1 Wrapper
 *
 * @param {Object} options
 * @return {String}
 * @api private
 */ 

function hmacSha1 (options) {
  return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64')
}

module.exports.hmacSha1 = hmacSha1

/**
 * Create a base64 sha1 HMAC for `options`. 
 * 
 * @param {Object} options
 * @return {String}
 * @api private
 */

function sign (options) {
  options.message = stringToSign(options)
  return hmacSha1(options)
}
module.exports.sign = sign

/**
 * Create a base64 sha1 HMAC for `options`. 
 *
 * Specifically to be used with S3 presigned URLs
 * 
 * @param {Object} options
 * @return {String}
 * @api private
 */

function signQuery (options) {
  options.message = queryStringToSign(options)
  return hmacSha1(options)
}
module.exports.signQuery= signQuery

/**
 * Return a string for sign() with the given `options`.
 *
 * Spec:
 * 
 *    <verb>\n
 *    <md5>\n
 *    <content-type>\n
 *    <date>\n
 *    [headers\n]
 *    <resource>
 *
 * @param {Object} options
 * @return {String}
 * @api private
 */

function stringToSign (options) {
  var headers = options.amazonHeaders || ''
  if (headers) headers += '\n'
  var r = 
    [ options.verb
    , options.md5
    , options.contentType
    , options.date ? options.date.toUTCString() : ''
    , headers + options.resource
    ]
  return r.join('\n')
}
module.exports.stringToSign = stringToSign

/**
 * Return a string for sign() with the given `options`, but is meant exclusively
 * for S3 presigned URLs
 *
 * Spec:
 * 
 *    <date>\n
 *    <resource>
 *
 * @param {Object} options
 * @return {String}
 * @api private
 */

function queryStringToSign (options){
  return 'GET\n\n\n' + options.date + '\n' + options.resource
}
module.exports.queryStringToSign = queryStringToSign

/**
 * Perform the following:
 *
 *  - ignore non-amazon headers
 *  - lowercase fields
 *  - sort lexicographically
 *  - trim whitespace between ":"
 *  - join with newline
 *
 * @param {Object} headers
 * @return {String}
 * @api private
 */

function canonicalizeHeaders (headers) {
  var buf = []
    , fields = Object.keys(headers)
    ;
  for (var i = 0, len = fields.length; i < len; ++i) {
    var field = fields[i]
      , val = headers[field]
      , field = field.toLowerCase()
      ;
    if (0 !== field.indexOf('x-amz')) continue
    buf.push(field + ':' + val)
  }
  return buf.sort().join('\n')
}
module.exports.canonicalizeHeaders = canonicalizeHeaders

/**
 * Perform the following:
 *
 *  - ignore non sub-resources
 *  - sort lexicographically
 *
 * @param {String} resource
 * @return {String}
 * @api private
 */

function canonicalizeResource (resource) {
  var url = parse(resource, true)
    , path = url.pathname
    , buf = []
    ;

  Object.keys(url.query).forEach(function(key){
    if (!~keys.indexOf(key)) return
    var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key])
    buf.push(key + val)
  })

  return path + (buf.length ? '?' + buf.sort().join('&') : '')
}
module.exports.canonicalizeResource = canonicalizeResource


/***/ }),
/* 592 */
/***/ (function(module, exports, __webpack_require__) {

var aws4 = exports,
    url = __webpack_require__(8),
    querystring = __webpack_require__(85),
    crypto = __webpack_require__(7),
    lru = __webpack_require__(593),
    credentialsCache = lru(1000)

// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html

function hmac(key, string, encoding) {
  return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)
}

function hash(string, encoding) {
  return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)
}

// This function assumes the string has already been percent encoded
function encodeRfc3986(urlEncodedString) {
  return urlEncodedString.replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

// request: { path | body, [host], [method], [headers], [service], [region] }
// credentials: { accessKeyId, secretAccessKey, [sessionToken] }
function RequestSigner(request, credentials) {

  if (typeof request === 'string') request = url.parse(request)

  var headers = request.headers = (request.headers || {}),
      hostParts = this.matchHost(request.hostname || request.host || headers.Host || headers.host)

  this.request = request
  this.credentials = credentials || this.defaultCredentials()

  this.service = request.service || hostParts[0] || ''
  this.region = request.region || hostParts[1] || 'us-east-1'

  // SES uses a different domain from the service name
  if (this.service === 'email') this.service = 'ses'

  if (!request.method && request.body)
    request.method = 'POST'

  if (!headers.Host && !headers.host) {
    headers.Host = request.hostname || request.host || this.createHost()

    // If a port is specified explicitly, use it as is
    if (request.port)
      headers.Host += ':' + request.port
  }
  if (!request.hostname && !request.host)
    request.hostname = headers.Host || headers.host

  this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'
}

RequestSigner.prototype.matchHost = function(host) {
  var match = (host || '').match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com$/)
  var hostParts = (match || []).slice(1, 3)

  // ES's hostParts are sometimes the other way round, if the value that is expected
  // to be region equals ‘es’ switch them back
  // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com
  if (hostParts[1] === 'es')
    hostParts = hostParts.reverse()

  return hostParts
}

// http://docs.aws.amazon.com/general/latest/gr/rande.html
RequestSigner.prototype.isSingleRegion = function() {
  // Special case for S3 and SimpleDB in us-east-1
  if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true

  return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']
    .indexOf(this.service) >= 0
}

RequestSigner.prototype.createHost = function() {
  var region = this.isSingleRegion() ? '' :
        (this.service === 's3' && this.region !== 'us-east-1' ? '-' : '.') + this.region,
      service = this.service === 'ses' ? 'email' : this.service
  return service + region + '.amazonaws.com'
}

RequestSigner.prototype.prepareRequest = function() {
  this.parsePath()

  var request = this.request, headers = request.headers, query

  if (request.signQuery) {

    this.parsedPath.query = query = this.parsedPath.query || {}

    if (this.credentials.sessionToken)
      query['X-Amz-Security-Token'] = this.credentials.sessionToken

    if (this.service === 's3' && !query['X-Amz-Expires'])
      query['X-Amz-Expires'] = 86400

    if (query['X-Amz-Date'])
      this.datetime = query['X-Amz-Date']
    else
      query['X-Amz-Date'] = this.getDateTime()

    query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'
    query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()
    query['X-Amz-SignedHeaders'] = this.signedHeaders()

  } else {

    if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {
      if (request.body && !headers['Content-Type'] && !headers['content-type'])
        headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'

      if (request.body && !headers['Content-Length'] && !headers['content-length'])
        headers['Content-Length'] = Buffer.byteLength(request.body)

      if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])
        headers['X-Amz-Security-Token'] = this.credentials.sessionToken

      if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])
        headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')

      if (headers['X-Amz-Date'] || headers['x-amz-date'])
        this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']
      else
        headers['X-Amz-Date'] = this.getDateTime()
    }

    delete headers.Authorization
    delete headers.authorization
  }
}

RequestSigner.prototype.sign = function() {
  if (!this.parsedPath) this.prepareRequest()

  if (this.request.signQuery) {
    this.parsedPath.query['X-Amz-Signature'] = this.signature()
  } else {
    this.request.headers.Authorization = this.authHeader()
  }

  this.request.path = this.formatPath()

  return this.request
}

RequestSigner.prototype.getDateTime = function() {
  if (!this.datetime) {
    var headers = this.request.headers,
      date = new Date(headers.Date || headers.date || new Date)

    this.datetime = date.toISOString().replace(/[:\-]|\.\d{3}/g, '')

    // Remove the trailing 'Z' on the timestamp string for CodeCommit git access
    if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)
  }
  return this.datetime
}

RequestSigner.prototype.getDate = function() {
  return this.getDateTime().substr(0, 8)
}

RequestSigner.prototype.authHeader = function() {
  return [
    'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),
    'SignedHeaders=' + this.signedHeaders(),
    'Signature=' + this.signature(),
  ].join(', ')
}

RequestSigner.prototype.signature = function() {
  var date = this.getDate(),
      cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),
      kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)
  if (!kCredentials) {
    kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)
    kRegion = hmac(kDate, this.region)
    kService = hmac(kRegion, this.service)
    kCredentials = hmac(kService, 'aws4_request')
    credentialsCache.set(cacheKey, kCredentials)
  }
  return hmac(kCredentials, this.stringToSign(), 'hex')
}

RequestSigner.prototype.stringToSign = function() {
  return [
    'AWS4-HMAC-SHA256',
    this.getDateTime(),
    this.credentialString(),
    hash(this.canonicalString(), 'hex'),
  ].join('\n')
}

RequestSigner.prototype.canonicalString = function() {
  if (!this.parsedPath) this.prepareRequest()

  var pathStr = this.parsedPath.path,
      query = this.parsedPath.query,
      headers = this.request.headers,
      queryStr = '',
      normalizePath = this.service !== 's3',
      decodePath = this.service === 's3' || this.request.doNotEncodePath,
      decodeSlashesInPath = this.service === 's3',
      firstValOnly = this.service === 's3',
      bodyHash

  if (this.service === 's3' && this.request.signQuery) {
    bodyHash = 'UNSIGNED-PAYLOAD'
  } else if (this.isCodeCommitGit) {
    bodyHash = ''
  } else {
    bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||
      hash(this.request.body || '', 'hex')
  }

  if (query) {
    queryStr = encodeRfc3986(querystring.stringify(Object.keys(query).sort().reduce(function(obj, key) {
      if (!key) return obj
      obj[key] = !Array.isArray(query[key]) ? query[key] :
        (firstValOnly ? query[key][0] : query[key].slice().sort())
      return obj
    }, {})))
  }
  if (pathStr !== '/') {
    if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/')
    pathStr = pathStr.split('/').reduce(function(path, piece) {
      if (normalizePath && piece === '..') {
        path.pop()
      } else if (!normalizePath || piece !== '.') {
        if (decodePath) piece = decodeURIComponent(piece)
        path.push(encodeRfc3986(encodeURIComponent(piece)))
      }
      return path
    }, []).join('/')
    if (pathStr[0] !== '/') pathStr = '/' + pathStr
    if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')
  }

  return [
    this.request.method || 'GET',
    pathStr,
    queryStr,
    this.canonicalHeaders() + '\n',
    this.signedHeaders(),
    bodyHash,
  ].join('\n')
}

RequestSigner.prototype.canonicalHeaders = function() {
  var headers = this.request.headers
  function trimAll(header) {
    return header.toString().trim().replace(/\s+/g, ' ')
  }
  return Object.keys(headers)
    .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 })
    .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) })
    .join('\n')
}

RequestSigner.prototype.signedHeaders = function() {
  return Object.keys(this.request.headers)
    .map(function(key) { return key.toLowerCase() })
    .sort()
    .join(';')
}

RequestSigner.prototype.credentialString = function() {
  return [
    this.getDate(),
    this.region,
    this.service,
    'aws4_request',
  ].join('/')
}

RequestSigner.prototype.defaultCredentials = function() {
  var env = process.env
  return {
    accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,
    secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,
    sessionToken: env.AWS_SESSION_TOKEN,
  }
}

RequestSigner.prototype.parsePath = function() {
  var path = this.request.path || '/',
      queryIx = path.indexOf('?'),
      query = null

  if (queryIx >= 0) {
    query = querystring.parse(path.slice(queryIx + 1))
    path = path.slice(0, queryIx)
  }

  // S3 doesn't always encode characters > 127 correctly and
  // all services don't encode characters > 255 correctly
  // So if there are non-reserved chars (and it's not already all % encoded), just encode them all
  if (/[^0-9A-Za-z!'()*\-._~%/]/.test(path)) {
    path = path.split('/').map(function(piece) {
      return encodeURIComponent(decodeURIComponent(piece))
    }).join('/')
  }

  this.parsedPath = {
    path: path,
    query: query,
  }
}

RequestSigner.prototype.formatPath = function() {
  var path = this.parsedPath.path,
      query = this.parsedPath.query

  if (!query) return path

  // Services don't support empty query string keys
  if (query[''] != null) delete query['']

  return path + '?' + encodeRfc3986(querystring.stringify(query))
}

aws4.RequestSigner = RequestSigner

aws4.sign = function(request, credentials) {
  return new RequestSigner(request, credentials).sign()
}


/***/ }),
/* 593 */
/***/ (function(module, exports) {

module.exports = function(size) {
  return new LruCache(size)
}

function LruCache(size) {
  this.capacity = size | 0
  this.map = Object.create(null)
  this.list = new DoublyLinkedList()
}

LruCache.prototype.get = function(key) {
  var node = this.map[key]
  if (node == null) return undefined
  this.used(node)
  return node.val
}

LruCache.prototype.set = function(key, val) {
  var node = this.map[key]
  if (node != null) {
    node.val = val
  } else {
    if (!this.capacity) this.prune()
    if (!this.capacity) return false
    node = new DoublyLinkedNode(key, val)
    this.map[key] = node
    this.capacity--
  }
  this.used(node)
  return true
}

LruCache.prototype.used = function(node) {
  this.list.moveToFront(node)
}

LruCache.prototype.prune = function() {
  var node = this.list.pop()
  if (node != null) {
    delete this.map[node.key]
    this.capacity++
  }
}


function DoublyLinkedList() {
  this.firstNode = null
  this.lastNode = null
}

DoublyLinkedList.prototype.moveToFront = function(node) {
  if (this.firstNode == node) return

  this.remove(node)

  if (this.firstNode == null) {
    this.firstNode = node
    this.lastNode = node
    node.prev = null
    node.next = null
  } else {
    node.prev = null
    node.next = this.firstNode
    node.next.prev = node
    this.firstNode = node
  }
}

DoublyLinkedList.prototype.pop = function() {
  var lastNode = this.lastNode
  if (lastNode != null) {
    this.remove(lastNode)
  }
  return lastNode
}

DoublyLinkedList.prototype.remove = function(node) {
  if (this.firstNode == node) {
    this.firstNode = node.next
  } else if (node.prev != null) {
    node.prev.next = node.next
  }
  if (this.lastNode == node) {
    this.lastNode = node.prev
  } else if (node.next != null) {
    node.next.prev = node.prev
  }
}


function DoublyLinkedNode(key, val) {
  this.key = key
  this.val = val
  this.prev = null
  this.next = null
}


/***/ }),
/* 594 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(632), __esModule: true };

/***/ }),
/* 595 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(636), __esModule: true };

/***/ }),
/* 596 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(638), __esModule: true };

/***/ }),
/* 597 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


exports.__esModule = true;

var _promise = __webpack_require__(287);

var _promise2 = _interopRequireDefault(_promise);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = function (fn) {
  return function () {
    var gen = fn.apply(this, arguments);
    return new _promise2.default(function (resolve, reject) {
      function step(key, arg) {
        try {
          var info = gen[key](arg);
          var value = info.value;
        } catch (error) {
          reject(error);
          return;
        }

        if (info.done) {
          resolve(value);
        } else {
          return _promise2.default.resolve(value).then(function (value) {
            step("next", value);
          }, function (err) {
            step("throw", err);
          });
        }
      }

      return step("next");
    });
  };
};

/***/ }),
/* 598 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


exports.__esModule = true;

var _assign = __webpack_require__(193);

var _assign2 = _interopRequireDefault(_assign);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = _assign2.default || function (target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i];

    for (var key in source) {
      if (Object.prototype.hasOwnProperty.call(source, key)) {
        target[key] = source[key];
      }
    }
  }

  return target;
};

/***/ }),
/* 599 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = balanced;
function balanced(a, b, str) {
  if (a instanceof RegExp) a = maybeMatch(a, str);
  if (b instanceof RegExp) b = maybeMatch(b, str);

  var r = range(a, b, str);

  return r && {
    start: r[0],
    end: r[1],
    pre: str.slice(0, r[0]),
    body: str.slice(r[0] + a.length, r[1]),
    post: str.slice(r[1] + b.length)
  };
}

function maybeMatch(reg, str) {
  var m = str.match(reg);
  return m ? m[0] : null;
}

balanced.range = range;
function range(a, b, str) {
  var begs, beg, left, right, result;
  var ai = str.indexOf(a);
  var bi = str.indexOf(b, ai + 1);
  var i = ai;

  if (ai >= 0 && bi > 0) {
    begs = [];
    left = str.length;

    while (i >= 0 && !result) {
      if (i == ai) {
        begs.push(i);
        ai = str.indexOf(a, i + 1);
      } else if (begs.length == 1) {
        result = [ begs.pop(), bi ];
      } else {
        beg = begs.pop();
        if (beg < left) {
          left = beg;
          right = bi;
        }

        bi = str.indexOf(b, i + 1);
      }

      i = ai < bi && ai >= 0 ? ai : bi;
    }

    if (begs.length) {
      result = [ left, right ];
    }
  }

  return result;
}


/***/ }),
/* 600 */
/***/ (function(module, exports, __webpack_require__) {

var concatMap = __webpack_require__(631);
var balanced = __webpack_require__(599);

module.exports = expandTop;

var escSlash = '\0SLASH'+Math.random()+'\0';
var escOpen = '\0OPEN'+Math.random()+'\0';
var escClose = '\0CLOSE'+Math.random()+'\0';
var escComma = '\0COMMA'+Math.random()+'\0';
var escPeriod = '\0PERIOD'+Math.random()+'\0';

function numeric(str) {
  return parseInt(str, 10) == str
    ? parseInt(str, 10)
    : str.charCodeAt(0);
}

function escapeBraces(str) {
  return str.split('\\\\').join(escSlash)
            .split('\\{').join(escOpen)
            .split('\\}').join(escClose)
            .split('\\,').join(escComma)
            .split('\\.').join(escPeriod);
}

function unescapeBraces(str) {
  return str.split(escSlash).join('\\')
            .split(escOpen).join('{')
            .split(escClose).join('}')
            .split(escComma).join(',')
            .split(escPeriod).join('.');
}


// Basically just str.split(","), but handling cases
// where we have nested braced sections, which should be
// treated as individual members, like {a,{b,c},d}
function parseCommaParts(str) {
  if (!str)
    return [''];

  var parts = [];
  var m = balanced('{', '}', str);

  if (!m)
    return str.split(',');

  var pre = m.pre;
  var body = m.body;
  var post = m.post;
  var p = pre.split(',');

  p[p.length-1] += '{' + body + '}';
  var postParts = parseCommaParts(post);
  if (post.length) {
    p[p.length-1] += postParts.shift();
    p.push.apply(p, postParts);
  }

  parts.push.apply(parts, p);

  return parts;
}

function expandTop(str) {
  if (!str)
    return [];

  // I don't know why Bash 4.3 does this, but it does.
  // Anything starting with {} will have the first two bytes preserved
  // but *only* at the top level, so {},a}b will not expand to anything,
  // but a{},b}c will be expanded to [a}c,abc].
  // One could argue that this is a bug in Bash, but since the goal of
  // this module is to match Bash's rules, we escape a leading {}
  if (str.substr(0, 2) === '{}') {
    str = '\\{\\}' + str.substr(2);
  }

  return expand(escapeBraces(str), true).map(unescapeBraces);
}

function identity(e) {
  return e;
}

function embrace(str) {
  return '{' + str + '}';
}
function isPadded(el) {
  return /^-?0\d/.test(el);
}

function lte(i, y) {
  return i <= y;
}
function gte(i, y) {
  return i >= y;
}

function expand(str, isTop) {
  var expansions = [];

  var m = balanced('{', '}', str);
  if (!m || /\$$/.test(m.pre)) return [str];

  var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
  var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
  var isSequence = isNumericSequence || isAlphaSequence;
  var isOptions = m.body.indexOf(',') >= 0;
  if (!isSequence && !isOptions) {
    // {a},b}
    if (m.post.match(/,.*\}/)) {
      str = m.pre + '{' + m.body + escClose + m.post;
      return expand(str);
    }
    return [str];
  }

  var n;
  if (isSequence) {
    n = m.body.split(/\.\./);
  } else {
    n = parseCommaParts(m.body);
    if (n.length === 1) {
      // x{{a,b}}y ==> x{a}y x{b}y
      n = expand(n[0], false).map(embrace);
      if (n.length === 1) {
        var post = m.post.length
          ? expand(m.post, false)
          : [''];
        return post.map(function(p) {
          return m.pre + n[0] + p;
        });
      }
    }
  }

  // at this point, n is the parts, and we know it's not a comma set
  // with a single entry.

  // no need to expand pre, since it is guaranteed to be free of brace-sets
  var pre = m.pre;
  var post = m.post.length
    ? expand(m.post, false)
    : [''];

  var N;

  if (isSequence) {
    var x = numeric(n[0]);
    var y = numeric(n[1]);
    var width = Math.max(n[0].length, n[1].length)
    var incr = n.length == 3
      ? Math.abs(numeric(n[2]))
      : 1;
    var test = lte;
    var reverse = y < x;
    if (reverse) {
      incr *= -1;
      test = gte;
    }
    var pad = n.some(isPadded);

    N = [];

    for (var i = x; test(i, y); i += incr) {
      var c;
      if (isAlphaSequence) {
        c = String.fromCharCode(i);
        if (c === '\\')
          c = '';
      } else {
        c = String(i);
        if (pad) {
          var need = width - c.length;
          if (need > 0) {
            var z = new Array(need + 1).join('0');
            if (i < 0)
              c = '-' + z + c.slice(1);
            else
              c = z + c;
          }
        }
      }
      N.push(c);
    }
  } else {
    N = concatMap(n, function(el) { return expand(el, false) });
  }

  for (var j = 0; j < N.length; j++) {
    for (var k = 0; k < post.length; k++) {
      var expansion = pre + N[j] + post[k];
      if (!isTop || isSequence || expansion)
        expansions.push(expansion);
    }
  }

  return expansions;
}



/***/ }),
/* 601 */
/***/ (function(module, exports) {

var toString = Object.prototype.toString

var isModern = (
  typeof Buffer.alloc === 'function' &&
  typeof Buffer.allocUnsafe === 'function' &&
  typeof Buffer.from === 'function'
)

function isArrayBuffer (input) {
  return toString.call(input).slice(8, -1) === 'ArrayBuffer'
}

function fromArrayBuffer (obj, byteOffset, length) {
  byteOffset >>>= 0

  var maxLength = obj.byteLength - byteOffset

  if (maxLength < 0) {
    throw new RangeError("'offset' is out of bounds")
  }

  if (length === undefined) {
    length = maxLength
  } else {
    length >>>= 0

    if (length > maxLength) {
      throw new RangeError("'length' is out of bounds")
    }
  }

  return isModern
    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))
    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('"encoding" must be a valid string encoding')
  }

  return isModern
    ? Buffer.from(string, encoding)
    : new Buffer(string, encoding)
}

function bufferFrom (value, encodingOrOffset, length) {
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number')
  }

  if (isArrayBuffer(value)) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  return isModern
    ? Buffer.from(value)
    : new Buffer(value)
}

module.exports = bufferFrom


/***/ }),
/* 602 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var blacklist = [
	'freelist',
	'sys'
];

module.exports = Object.keys(process.binding('natives')).filter(function (el) {
	return !/^_|^internal|\//.test(el) && blacklist.indexOf(el) === -1;
}).sort();


/***/ }),
/* 603 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(72);


/***/ }),
/* 604 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * chai
 * http://chaijs.com
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var config = __webpack_require__(73);

module.exports = function (_chai, util) {
  /*!
   * Module dependencies.
   */

  var AssertionError = _chai.AssertionError
    , flag = util.flag;

  /*!
   * Module export.
   */

  _chai.Assertion = Assertion;

  /*!
   * Assertion Constructor
   *
   * Creates object for chaining.
   *
   * `Assertion` objects contain metadata in the form of flags. Three flags can
   * be assigned during instantiation by passing arguments to this constructor:
   *
   * - `object`: This flag contains the target of the assertion. For example, in
   *   the assertion `expect(numKittens).to.equal(7);`, the `object` flag will
   *   contain `numKittens` so that the `equal` assertion can reference it when
   *   needed.
   *
   * - `message`: This flag contains an optional custom error message to be
   *   prepended to the error message that's generated by the assertion when it
   *   fails.
   *
   * - `ssfi`: This flag stands for "start stack function indicator". It
   *   contains a function reference that serves as the starting point for
   *   removing frames from the stack trace of the error that's created by the
   *   assertion when it fails. The goal is to provide a cleaner stack trace to
   *   end users by removing Chai's internal functions. Note that it only works
   *   in environments that support `Error.captureStackTrace`, and only when
   *   `Chai.config.includeStack` hasn't been set to `false`.
   *
   * - `lockSsfi`: This flag controls whether or not the given `ssfi` flag
   *   should retain its current value, even as assertions are chained off of
   *   this object. This is usually set to `true` when creating a new assertion
   *   from within another assertion. It's also temporarily set to `true` before
   *   an overwritten assertion gets called by the overwriting assertion.
   *
   * @param {Mixed} obj target of the assertion
   * @param {String} msg (optional) custom error message
   * @param {Function} ssfi (optional) starting point for removing stack frames
   * @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked
   * @api private
   */

  function Assertion (obj, msg, ssfi, lockSsfi) {
    flag(this, 'ssfi', ssfi || Assertion);
    flag(this, 'lockSsfi', lockSsfi);
    flag(this, 'object', obj);
    flag(this, 'message', msg);

    return util.proxify(this);
  }

  Object.defineProperty(Assertion, 'includeStack', {
    get: function() {
      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
      return config.includeStack;
    },
    set: function(value) {
      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
      config.includeStack = value;
    }
  });

  Object.defineProperty(Assertion, 'showDiff', {
    get: function() {
      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
      return config.showDiff;
    },
    set: function(value) {
      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
      config.showDiff = value;
    }
  });

  Assertion.addProperty = function (name, fn) {
    util.addProperty(this.prototype, name, fn);
  };

  Assertion.addMethod = function (name, fn) {
    util.addMethod(this.prototype, name, fn);
  };

  Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
    util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
  };

  Assertion.overwriteProperty = function (name, fn) {
    util.overwriteProperty(this.prototype, name, fn);
  };

  Assertion.overwriteMethod = function (name, fn) {
    util.overwriteMethod(this.prototype, name, fn);
  };

  Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
    util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
  };

  /**
   * ### .assert(expression, message, negateMessage, expected, actual, showDiff)
   *
   * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
   *
   * @name assert
   * @param {Philosophical} expression to be tested
   * @param {String|Function} message or function that returns message to display if expression fails
   * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails
   * @param {Mixed} expected value (remember to check for negation)
   * @param {Mixed} actual (optional) will default to `this.obj`
   * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails
   * @api private
   */

  Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
    var ok = util.test(this, arguments);
    if (false !== showDiff) showDiff = true;
    if (undefined === expected && undefined === _actual) showDiff = false;
    if (true !== config.showDiff) showDiff = false;

    if (!ok) {
      msg = util.getMessage(this, arguments);
      var actual = util.getActual(this, arguments);
      throw new AssertionError(msg, {
          actual: actual
        , expected: expected
        , showDiff: showDiff
      }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));
    }
  };

  /*!
   * ### ._obj
   *
   * Quick reference to stored `actual` value for plugin developers.
   *
   * @api private
   */

  Object.defineProperty(Assertion.prototype, '_obj',
    { get: function () {
        return flag(this, 'object');
      }
    , set: function (val) {
        flag(this, 'object', val);
      }
  });
};


/***/ }),
/* 605 */
/***/ (function(module, exports) {

/*!
 * chai
 * http://chaijs.com
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

module.exports = function (chai, _) {
  var Assertion = chai.Assertion
    , AssertionError = chai.AssertionError
    , flag = _.flag;

  /**
   * ### Language Chains
   *
   * The following are provided as chainable getters to improve the readability
   * of your assertions.
   *
   * **Chains**
   *
   * - to
   * - be
   * - been
   * - is
   * - that
   * - which
   * - and
   * - has
   * - have
   * - with
   * - at
   * - of
   * - same
   * - but
   * - does
   *
   * @name language chains
   * @namespace BDD
   * @api public
   */

  [ 'to', 'be', 'been'
  , 'is', 'and', 'has', 'have'
  , 'with', 'that', 'which', 'at'
  , 'of', 'same', 'but', 'does' ].forEach(function (chain) {
    Assertion.addProperty(chain);
  });

  /**
   * ### .not
   *
   * Negates all assertions that follow in the chain.
   *
   *     expect(function () {}).to.not.throw();
   *     expect({a: 1}).to.not.have.property('b');
   *     expect([1, 2]).to.be.an('array').that.does.not.include(3);
   *
   * Just because you can negate any assertion with `.not` doesn't mean you
   * should. With great power comes great responsibility. It's often best to
   * assert that the one expected output was produced, rather than asserting
   * that one of countless unexpected outputs wasn't produced. See individual
   * assertions for specific guidance.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.not.equal(1); // Not recommended
   *
   * @name not
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('not', function () {
    flag(this, 'negate', true);
  });

  /**
   * ### .deep
   *
   * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property`
   * assertions that follow in the chain to use deep equality instead of strict
   * (`===`) equality. See the `deep-eql` project page for info on the deep
   * equality algorithm: https://github.com/chaijs/deep-eql.
   *
   *     // Target object deeply (but not strictly) equals `{a: 1}`
   *     expect({a: 1}).to.deep.equal({a: 1});
   *     expect({a: 1}).to.not.equal({a: 1});
   *
   *     // Target array deeply (but not strictly) includes `{a: 1}`
   *     expect([{a: 1}]).to.deep.include({a: 1});
   *     expect([{a: 1}]).to.not.include({a: 1});
   *
   *     // Target object deeply (but not strictly) includes `x: {a: 1}`
   *     expect({x: {a: 1}}).to.deep.include({x: {a: 1}});
   *     expect({x: {a: 1}}).to.not.include({x: {a: 1}});
   *
   *     // Target array deeply (but not strictly) has member `{a: 1}`
   *     expect([{a: 1}]).to.have.deep.members([{a: 1}]);
   *     expect([{a: 1}]).to.not.have.members([{a: 1}]);
   *
   *     // Target set deeply (but not strictly) has key `{a: 1}`
   *     expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]);
   *     expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]);
   *
   *     // Target object deeply (but not strictly) has property `x: {a: 1}`
   *     expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});
   *     expect({x: {a: 1}}).to.not.have.property('x', {a: 1});
   *
   * @name deep
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('deep', function () {
    flag(this, 'deep', true);
  });

  /**
   * ### .nested
   *
   * Enables dot- and bracket-notation in all `.property` and `.include`
   * assertions that follow in the chain.
   *
   *     expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');
   *     expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});
   *
   * If `.` or `[]` are part of an actual property name, they can be escaped by
   * adding two backslashes before them.
   *
   *     expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]');
   *     expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\.a.\\[b\\]': 'x'});
   *
   * `.nested` cannot be combined with `.own`.
   *
   * @name nested
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('nested', function () {
    flag(this, 'nested', true);
  });

  /**
   * ### .own
   *
   * Causes all `.property` and `.include` assertions that follow in the chain
   * to ignore inherited properties.
   *
   *     Object.prototype.b = 2;
   *
   *     expect({a: 1}).to.have.own.property('a');
   *     expect({a: 1}).to.have.property('b').but.not.own.property('b'); 
   *
   *     expect({a: 1}).to.own.include({a: 1});
   *     expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});
   *
   * `.own` cannot be combined with `.nested`.
   *
   * @name own
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('own', function () {
    flag(this, 'own', true);
  });

  /**
   * ### .ordered
   *
   * Causes all `.members` assertions that follow in the chain to require that
   * members be in the same order.
   *
   *     expect([1, 2]).to.have.ordered.members([1, 2])
   *       .but.not.have.ordered.members([2, 1]);
   *
   * When `.include` and `.ordered` are combined, the ordering begins at the
   * start of both arrays.
   *
   *     expect([1, 2, 3]).to.include.ordered.members([1, 2])
   *       .but.not.include.ordered.members([2, 3]);
   *
   * @name ordered
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('ordered', function () {
    flag(this, 'ordered', true);
  });

  /**
   * ### .any
   *
   * Causes all `.keys` assertions that follow in the chain to only require that
   * the target have at least one of the given keys. This is the opposite of
   * `.all`, which requires that the target have all of the given keys.
   *
   *     expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');
   *
   * See the `.keys` doc for guidance on when to use `.any` or `.all`.
   *
   * @name any
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('any', function () {
    flag(this, 'any', true);
    flag(this, 'all', false);
  });


  /**
   * ### .all
   *
   * Causes all `.keys` assertions that follow in the chain to require that the
   * target have all of the given keys. This is the opposite of `.any`, which
   * only requires that the target have at least one of the given keys.
   *
   *     expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
   *
   * Note that `.all` is used by default when neither `.all` nor `.any` are
   * added earlier in the chain. However, it's often best to add `.all` anyway
   * because it improves readability.
   *
   * See the `.keys` doc for guidance on when to use `.any` or `.all`.
   *
   * @name all
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('all', function () {
    flag(this, 'all', true);
    flag(this, 'any', false);
  });

  /**
   * ### .a(type[, msg])
   *
   * Asserts that the target's type is equal to the given string `type`. Types
   * are case insensitive. See the `type-detect` project page for info on the
   * type detection algorithm: https://github.com/chaijs/type-detect.
   *
   *     expect('foo').to.be.a('string');
   *     expect({a: 1}).to.be.an('object');
   *     expect(null).to.be.a('null');
   *     expect(undefined).to.be.an('undefined');
   *     expect(new Error).to.be.an('error');
   *     expect(Promise.resolve()).to.be.a('promise');
   *     expect(new Float32Array).to.be.a('float32array');
   *     expect(Symbol()).to.be.a('symbol');
   *
   * `.a` supports objects that have a custom type set via `Symbol.toStringTag`.
   *
   *     var myObj = {
   *       [Symbol.toStringTag]: 'myCustomType'
   *     };
   *
   *     expect(myObj).to.be.a('myCustomType').but.not.an('object');
   *
   * It's often best to use `.a` to check a target's type before making more
   * assertions on the same target. That way, you avoid unexpected behavior from
   * any assertion that does different things based on the target's type.
   *
   *     expect([1, 2, 3]).to.be.an('array').that.includes(2);
   *     expect([]).to.be.an('array').that.is.empty;
   *
   * Add `.not` earlier in the chain to negate `.a`. However, it's often best to
   * assert that the target is the expected type, rather than asserting that it
   * isn't one of many unexpected types.
   *
   *     expect('foo').to.be.a('string'); // Recommended
   *     expect('foo').to.not.be.an('array'); // Not recommended
   *
   * `.a` accepts an optional `msg` argument which is a custom error message to
   * show when the assertion fails. The message can also be given as the second
   * argument to `expect`.
   *
   *     expect(1).to.be.a('string', 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.be.a('string');
   *
   * `.a` can also be used as a language chain to improve the readability of
   * your assertions. 
   *
   *     expect({b: 2}).to.have.a.property('b');
   *
   * The alias `.an` can be used interchangeably with `.a`.
   *
   * @name a
   * @alias an
   * @param {String} type
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function an (type, msg) {
    if (msg) flag(this, 'message', msg);
    type = type.toLowerCase();
    var obj = flag(this, 'object')
      , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';

    this.assert(
        type === _.type(obj).toLowerCase()
      , 'expected #{this} to be ' + article + type
      , 'expected #{this} not to be ' + article + type
    );
  }

  Assertion.addChainableMethod('an', an);
  Assertion.addChainableMethod('a', an);

  /**
   * ### .include(val[, msg])
   *
   * When the target is a string, `.include` asserts that the given string `val`
   * is a substring of the target.
   *
   *     expect('foobar').to.include('foo');
   *
   * When the target is an array, `.include` asserts that the given `val` is a
   * member of the target.
   *
   *     expect([1, 2, 3]).to.include(2);
   *
   * When the target is an object, `.include` asserts that the given object
   * `val`'s properties are a subset of the target's properties.
   *
   *     expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2});
   *
   * When the target is a Set or WeakSet, `.include` asserts that the given `val` is a
   * member of the target. SameValueZero equality algorithm is used.
   *
   *     expect(new Set([1, 2])).to.include(2);
   *
   * When the target is a Map, `.include` asserts that the given `val` is one of
   * the values of the target. SameValueZero equality algorithm is used.
   *
   *     expect(new Map([['a', 1], ['b', 2]])).to.include(2);
   *
   * Because `.include` does different things based on the target's type, it's
   * important to check the target's type before using `.include`. See the `.a`
   * doc for info on testing a target's type.
   *
   *     expect([1, 2, 3]).to.be.an('array').that.includes(2);
   *
   * By default, strict (`===`) equality is used to compare array members and
   * object properties. Add `.deep` earlier in the chain to use deep equality
   * instead (WeakSet targets are not supported). See the `deep-eql` project
   * page for info on the deep equality algorithm: https://github.com/chaijs/deep-eql.
   *
   *     // Target array deeply (but not strictly) includes `{a: 1}`
   *     expect([{a: 1}]).to.deep.include({a: 1});
   *     expect([{a: 1}]).to.not.include({a: 1});
   *
   *     // Target object deeply (but not strictly) includes `x: {a: 1}`
   *     expect({x: {a: 1}}).to.deep.include({x: {a: 1}});
   *     expect({x: {a: 1}}).to.not.include({x: {a: 1}});
   *
   * By default, all of the target's properties are searched when working with
   * objects. This includes properties that are inherited and/or non-enumerable.
   * Add `.own` earlier in the chain to exclude the target's inherited
   * properties from the search.
   *
   *     Object.prototype.b = 2;
   *
   *     expect({a: 1}).to.own.include({a: 1});
   *     expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});
   *
   * Note that a target object is always only searched for `val`'s own
   * enumerable properties.
   *
   * `.deep` and `.own` can be combined.
   *
   *     expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}});
   *
   * Add `.nested` earlier in the chain to enable dot- and bracket-notation when
   * referencing nested properties.
   *
   *     expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});
   *
   * If `.` or `[]` are part of an actual property name, they can be escaped by
   * adding two backslashes before them.
   *
   *     expect({'.a': {'[b]': 2}}).to.nested.include({'\\.a.\\[b\\]': 2});
   *
   * `.deep` and `.nested` can be combined.
   *
   *     expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}});
   *
   * `.own` and `.nested` cannot be combined.
   *
   * Add `.not` earlier in the chain to negate `.include`.
   *
   *     expect('foobar').to.not.include('taco');
   *     expect([1, 2, 3]).to.not.include(4);
   * 
   * However, it's dangerous to negate `.include` when the target is an object.
   * The problem is that it creates uncertain expectations by asserting that the
   * target object doesn't have all of `val`'s key/value pairs but may or may
   * not have some of them. It's often best to identify the exact output that's
   * expected, and then write an assertion that only accepts that exact output.
   *
   * When the target object isn't even expected to have `val`'s keys, it's
   * often best to assert exactly that.
   *
   *     expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended
   *     expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended
   *
   * When the target object is expected to have `val`'s keys, it's often best to
   * assert that each of the properties has its expected value, rather than
   * asserting that each property doesn't have one of many unexpected values.
   *
   *     expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended
   *     expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended
   *
   * `.include` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect([1, 2, 3]).to.include(4, 'nooo why fail??');
   *     expect([1, 2, 3], 'nooo why fail??').to.include(4);
   *
   * `.include` can also be used as a language chain, causing all `.members` and
   * `.keys` assertions that follow in the chain to require the target to be a
   * superset of the expected set, rather than an identical set. Note that
   * `.members` ignores duplicates in the subset when `.include` is added.
   *
   *     // Target object's keys are a superset of ['a', 'b'] but not identical
   *     expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');
   *     expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');
   *
   *     // Target array is a superset of [1, 2] but not identical
   *     expect([1, 2, 3]).to.include.members([1, 2]);
   *     expect([1, 2, 3]).to.not.have.members([1, 2]);
   *
   *     // Duplicates in the subset are ignored
   *     expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);
   *
   * Note that adding `.any` earlier in the chain causes the `.keys` assertion
   * to ignore `.include`.
   *
   *     // Both assertions are identical
   *     expect({a: 1}).to.include.any.keys('a', 'b');
   *     expect({a: 1}).to.have.any.keys('a', 'b');
   *
   * The aliases `.includes`, `.contain`, and `.contains` can be used
   * interchangeably with `.include`.
   *
   * @name include
   * @alias contain
   * @alias includes
   * @alias contains
   * @param {Mixed} val
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function SameValueZero(a, b) {
    return (_.isNaN(a) && _.isNaN(b)) || a === b;
  }

  function includeChainingBehavior () {
    flag(this, 'contains', true);
  }

  function include (val, msg) {
    if (msg) flag(this, 'message', msg);
    
    var obj = flag(this, 'object')
      , objType = _.type(obj).toLowerCase()
      , flagMsg = flag(this, 'message')
      , negate = flag(this, 'negate')
      , ssfi = flag(this, 'ssfi')
      , isDeep = flag(this, 'deep')
      , descriptor = isDeep ? 'deep ' : '';

    flagMsg = flagMsg ? flagMsg + ': ' : '';

    var included = false;

    switch (objType) {
      case 'string':
        included = obj.indexOf(val) !== -1;
        break;

      case 'weakset':
        if (isDeep) {
          throw new AssertionError(
            flagMsg + 'unable to use .deep.include with WeakSet',
            undefined,
            ssfi
          );
        }

        included = obj.has(val);
        break;

      case 'map':
        var isEql = isDeep ? _.eql : SameValueZero;
        obj.forEach(function (item) {
          included = included || isEql(item, val);
        });
        break;

      case 'set':
        if (isDeep) {
          obj.forEach(function (item) {
            included = included || _.eql(item, val);
          });
        } else {
          included = obj.has(val);
        }
        break;

      case 'array':
        if (isDeep) {
          included = obj.some(function (item) {
            return _.eql(item, val);
          })
        } else {
          included = obj.indexOf(val) !== -1;
        }
        break;

      default:
        // This block is for asserting a subset of properties in an object.
        // `_.expectTypes` isn't used here because `.include` should work with
        // objects with a custom `@@toStringTag`.
        if (val !== Object(val)) {
          throw new AssertionError(
            flagMsg + 'object tested must be an array, a map, an object,'
              + ' a set, a string, or a weakset, but ' + objType + ' given',
            undefined,
            ssfi
          );
        }

        var props = Object.keys(val)
          , firstErr = null
          , numErrs = 0;
  
        props.forEach(function (prop) {
          var propAssertion = new Assertion(obj);
          _.transferFlags(this, propAssertion, true);
          flag(propAssertion, 'lockSsfi', true);
  
          if (!negate || props.length === 1) {
            propAssertion.property(prop, val[prop]);
            return;
          }
  
          try {
            propAssertion.property(prop, val[prop]);
          } catch (err) {
            if (!_.checkError.compatibleConstructor(err, AssertionError)) {
              throw err;
            }
            if (firstErr === null) firstErr = err;
            numErrs++;
          }
        }, this);
  
        // When validating .not.include with multiple properties, we only want
        // to throw an assertion error if all of the properties are included,
        // in which case we throw the first property assertion error that we
        // encountered.
        if (negate && props.length > 1 && numErrs === props.length) {
          throw firstErr;
        }
        return;
    }

    // Assert inclusion in collection or substring in a string.
    this.assert(
      included
      , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val)
      , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val));
  }

  Assertion.addChainableMethod('include', include, includeChainingBehavior);
  Assertion.addChainableMethod('contain', include, includeChainingBehavior);
  Assertion.addChainableMethod('contains', include, includeChainingBehavior);
  Assertion.addChainableMethod('includes', include, includeChainingBehavior);

  /**
   * ### .ok
   *
   * Asserts that the target is loosely (`==`) equal to `true`. However, it's
   * often best to assert that the target is strictly (`===`) or deeply equal to
   * its expected value.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.be.ok; // Not recommended
   *
   *     expect(true).to.be.true; // Recommended
   *     expect(true).to.be.ok; // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.ok`.
   *
   *     expect(0).to.equal(0); // Recommended
   *     expect(0).to.not.be.ok; // Not recommended
   *
   *     expect(false).to.be.false; // Recommended
   *     expect(false).to.not.be.ok; // Not recommended
   *
   *     expect(null).to.be.null; // Recommended
   *     expect(null).to.not.be.ok; // Not recommended
   *
   *     expect(undefined).to.be.undefined; // Recommended
   *     expect(undefined).to.not.be.ok; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(false, 'nooo why fail??').to.be.ok;
   *
   * @name ok
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('ok', function () {
    this.assert(
        flag(this, 'object')
      , 'expected #{this} to be truthy'
      , 'expected #{this} to be falsy');
  });

  /**
   * ### .true
   *
   * Asserts that the target is strictly (`===`) equal to `true`.
   *
   *     expect(true).to.be.true;
   *
   * Add `.not` earlier in the chain to negate `.true`. However, it's often best
   * to assert that the target is equal to its expected value, rather than not
   * equal to `true`.
   *
   *     expect(false).to.be.false; // Recommended
   *     expect(false).to.not.be.true; // Not recommended
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.true; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(false, 'nooo why fail??').to.be.true;
   *
   * @name true
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('true', function () {
    this.assert(
        true === flag(this, 'object')
      , 'expected #{this} to be true'
      , 'expected #{this} to be false'
      , flag(this, 'negate') ? false : true
    );
  });

  /**
   * ### .false
   *
   * Asserts that the target is strictly (`===`) equal to `false`.
   *
   *     expect(false).to.be.false;
   *
   * Add `.not` earlier in the chain to negate `.false`. However, it's often
   * best to assert that the target is equal to its expected value, rather than
   * not equal to `false`.
   *
   *     expect(true).to.be.true; // Recommended
   *     expect(true).to.not.be.false; // Not recommended
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.false; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(true, 'nooo why fail??').to.be.false;
   *
   * @name false
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('false', function () {
    this.assert(
        false === flag(this, 'object')
      , 'expected #{this} to be false'
      , 'expected #{this} to be true'
      , flag(this, 'negate') ? true : false
    );
  });

  /**
   * ### .null
   *
   * Asserts that the target is strictly (`===`) equal to `null`.
   *
   *     expect(null).to.be.null;
   *
   * Add `.not` earlier in the chain to negate `.null`. However, it's often best
   * to assert that the target is equal to its expected value, rather than not
   * equal to `null`.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.null; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(42, 'nooo why fail??').to.be.null;
   *
   * @name null
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('null', function () {
    this.assert(
        null === flag(this, 'object')
      , 'expected #{this} to be null'
      , 'expected #{this} not to be null'
    );
  });

  /**
   * ### .undefined
   *
   * Asserts that the target is strictly (`===`) equal to `undefined`.
   *
   *     expect(undefined).to.be.undefined;
   *
   * Add `.not` earlier in the chain to negate `.undefined`. However, it's often
   * best to assert that the target is equal to its expected value, rather than
   * not equal to `undefined`.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.undefined; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(42, 'nooo why fail??').to.be.undefined;
   *
   * @name undefined
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('undefined', function () {
    this.assert(
        undefined === flag(this, 'object')
      , 'expected #{this} to be undefined'
      , 'expected #{this} not to be undefined'
    );
  });

  /**
   * ### .NaN
   *
   * Asserts that the target is exactly `NaN`.
   *
   *     expect(NaN).to.be.NaN;
   *
   * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best
   * to assert that the target is equal to its expected value, rather than not
   * equal to `NaN`.
   *
   *     expect('foo').to.equal('foo'); // Recommended
   *     expect('foo').to.not.be.NaN; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(42, 'nooo why fail??').to.be.NaN;
   *
   * @name NaN
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('NaN', function () {
    this.assert(
        _.isNaN(flag(this, 'object'))
        , 'expected #{this} to be NaN'
        , 'expected #{this} not to be NaN'
    );
  });

  /**
   * ### .exist
   *
   * Asserts that the target is not strictly (`===`) equal to either `null` or
   * `undefined`. However, it's often best to assert that the target is equal to
   * its expected value.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.exist; // Not recommended
   *
   *     expect(0).to.equal(0); // Recommended
   *     expect(0).to.exist; // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.exist`.
   *
   *     expect(null).to.be.null; // Recommended
   *     expect(null).to.not.exist; // Not recommended
   *
   *     expect(undefined).to.be.undefined; // Recommended
   *     expect(undefined).to.not.exist; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(null, 'nooo why fail??').to.exist;
   *
   * @name exist
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('exist', function () {
    var val = flag(this, 'object');
    this.assert(
        val !== null && val !== undefined
      , 'expected #{this} to exist'
      , 'expected #{this} to not exist'
    );
  });

  /**
   * ### .empty
   *
   * When the target is a string or array, `.empty` asserts that the target's
   * `length` property is strictly (`===`) equal to `0`.
   *
   *     expect([]).to.be.empty;
   *     expect('').to.be.empty;
   *
   * When the target is a map or set, `.empty` asserts that the target's `size`
   * property is strictly equal to `0`.
   *
   *     expect(new Set()).to.be.empty;
   *     expect(new Map()).to.be.empty;
   *
   * When the target is a non-function object, `.empty` asserts that the target
   * doesn't have any own enumerable properties. Properties with Symbol-based
   * keys are excluded from the count.
   *
   *     expect({}).to.be.empty;
   *
   * Because `.empty` does different things based on the target's type, it's
   * important to check the target's type before using `.empty`. See the `.a`
   * doc for info on testing a target's type.
   *
   *     expect([]).to.be.an('array').that.is.empty;
   *
   * Add `.not` earlier in the chain to negate `.empty`. However, it's often
   * best to assert that the target contains its expected number of values,
   * rather than asserting that it's not empty.
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
   *     expect([1, 2, 3]).to.not.be.empty; // Not recommended
   *
   *     expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended
   *     expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended
   *
   *     expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended
   *     expect({a: 1}).to.not.be.empty; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect([1, 2, 3], 'nooo why fail??').to.be.empty;
   *
   * @name empty
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('empty', function () {
    var val = flag(this, 'object')
      , ssfi = flag(this, 'ssfi')
      , flagMsg = flag(this, 'message')
      , itemsCount;

    flagMsg = flagMsg ? flagMsg + ': ' : '';

    switch (_.type(val).toLowerCase()) {
      case 'array':
      case 'string':
        itemsCount = val.length;
        break;
      case 'map':
      case 'set':
        itemsCount = val.size;
        break;
      case 'weakmap':
      case 'weakset':
        throw new AssertionError(
          flagMsg + '.empty was passed a weak collection',
          undefined,
          ssfi
        );
      case 'function':
        var msg = flagMsg + '.empty was passed a function ' + _.getName(val);
        throw new AssertionError(msg.trim(), undefined, ssfi);
      default:
        if (val !== Object(val)) {
          throw new AssertionError(
            flagMsg + '.empty was passed non-string primitive ' + _.inspect(val),
            undefined,
            ssfi
          );
        }
        itemsCount = Object.keys(val).length;
    }

    this.assert(
        0 === itemsCount
      , 'expected #{this} to be empty'
      , 'expected #{this} not to be empty'
    );
  });

  /**
   * ### .arguments
   *
   * Asserts that the target is an `arguments` object.
   *
   *     function test () {
   *       expect(arguments).to.be.arguments;
   *     }
   *
   *     test();
   *
   * Add `.not` earlier in the chain to negate `.arguments`. However, it's often
   * best to assert which type the target is expected to be, rather than
   * asserting that its not an `arguments` object.
   *
   *     expect('foo').to.be.a('string'); // Recommended
   *     expect('foo').to.not.be.arguments; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect({}, 'nooo why fail??').to.be.arguments;
   *
   * The alias `.Arguments` can be used interchangeably with `.arguments`.
   *
   * @name arguments
   * @alias Arguments
   * @namespace BDD
   * @api public
   */

  function checkArguments () {
    var obj = flag(this, 'object')
      , type = _.type(obj);
    this.assert(
        'Arguments' === type
      , 'expected #{this} to be arguments but got ' + type
      , 'expected #{this} to not be arguments'
    );
  }

  Assertion.addProperty('arguments', checkArguments);
  Assertion.addProperty('Arguments', checkArguments);

  /**
   * ### .equal(val[, msg])
   *
   * Asserts that the target is strictly (`===`) equal to the given `val`.
   *
   *     expect(1).to.equal(1);
   *     expect('foo').to.equal('foo');
   * 
   * Add `.deep` earlier in the chain to use deep equality instead. See the
   * `deep-eql` project page for info on the deep equality algorithm:
   * https://github.com/chaijs/deep-eql.
   *
   *     // Target object deeply (but not strictly) equals `{a: 1}`
   *     expect({a: 1}).to.deep.equal({a: 1});
   *     expect({a: 1}).to.not.equal({a: 1});
   *
   *     // Target array deeply (but not strictly) equals `[1, 2]`
   *     expect([1, 2]).to.deep.equal([1, 2]);
   *     expect([1, 2]).to.not.equal([1, 2]);
   *
   * Add `.not` earlier in the chain to negate `.equal`. However, it's often
   * best to assert that the target is equal to its expected value, rather than
   * not equal to one of countless unexpected values.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.equal(2); // Not recommended
   *
   * `.equal` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(1).to.equal(2, 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.equal(2);
   *
   * The aliases `.equals` and `eq` can be used interchangeably with `.equal`.
   *
   * @name equal
   * @alias equals
   * @alias eq
   * @param {Mixed} val
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertEqual (val, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object');
    if (flag(this, 'deep')) {
      return this.eql(val);
    } else {
      this.assert(
          val === obj
        , 'expected #{this} to equal #{exp}'
        , 'expected #{this} to not equal #{exp}'
        , val
        , this._obj
        , true
      );
    }
  }

  Assertion.addMethod('equal', assertEqual);
  Assertion.addMethod('equals', assertEqual);
  Assertion.addMethod('eq', assertEqual);

  /**
   * ### .eql(obj[, msg])
   *
   * Asserts that the target is deeply equal to the given `obj`. See the
   * `deep-eql` project page for info on the deep equality algorithm:
   * https://github.com/chaijs/deep-eql.
   *
   *     // Target object is deeply (but not strictly) equal to {a: 1}
   *     expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1});
   *
   *     // Target array is deeply (but not strictly) equal to [1, 2]
   *     expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);
   *
   * Add `.not` earlier in the chain to negate `.eql`. However, it's often best
   * to assert that the target is deeply equal to its expected value, rather
   * than not deeply equal to one of countless unexpected values.
   *
   *     expect({a: 1}).to.eql({a: 1}); // Recommended
   *     expect({a: 1}).to.not.eql({b: 2}); // Not recommended
   *
   * `.eql` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect({a: 1}).to.eql({b: 2}, 'nooo why fail??');
   *     expect({a: 1}, 'nooo why fail??').to.eql({b: 2});
   *
   * The alias `.eqls` can be used interchangeably with `.eql`.
   *
   * The `.deep.equal` assertion is almost identical to `.eql` but with one
   * difference: `.deep.equal` causes deep equality comparisons to also be used
   * for any other assertions that follow in the chain.
   *
   * @name eql
   * @alias eqls
   * @param {Mixed} obj
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertEql(obj, msg) {
    if (msg) flag(this, 'message', msg);
    this.assert(
        _.eql(obj, flag(this, 'object'))
      , 'expected #{this} to deeply equal #{exp}'
      , 'expected #{this} to not deeply equal #{exp}'
      , obj
      , this._obj
      , true
    );
  }

  Assertion.addMethod('eql', assertEql);
  Assertion.addMethod('eqls', assertEql);

  /**
   * ### .above(n[, msg])
   *
   * Asserts that the target is a number or a date greater than the given number or date `n` respectively.
   * However, it's often best to assert that the target is equal to its expected
   * value.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.be.above(1); // Not recommended
   *
   * Add `.lengthOf` earlier in the chain to assert that the value of the
   * target's `length` property is greater than the given number `n`.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.have.lengthOf.above(2); // Not recommended
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.above`.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(1).to.not.be.above(2); // Not recommended
   *
   * `.above` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(1).to.be.above(2, 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.be.above(2);
   *
   * The aliases `.gt` and `.greaterThan` can be used interchangeably with
   * `.above`.
   *
   * @name above
   * @alias gt
   * @alias greaterThan
   * @param {Number} n
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertAbove (n, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , doLength = flag(this, 'doLength')
      , flagMsg = flag(this, 'message')
      , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')
      , ssfi = flag(this, 'ssfi')
      , objType = _.type(obj).toLowerCase()
      , nType = _.type(n).toLowerCase()
      , shouldThrow = true;

    if (doLength) {
      new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    }
    
    if (!doLength && (objType === 'date' && nType !== 'date')) {
      errorMessage = msgPrefix + 'the argument to above must be a date';
    } else if (nType !== 'number' && (doLength || objType === 'number')) {
      errorMessage = msgPrefix + 'the argument to above must be a number';
    } else if (!doLength && (objType !== 'date' && objType !== 'number')) {
      var printObj = (objType === 'string') ? "'" + obj + "'" : obj;
      errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';
    } else {
      shouldThrow = false;
    }

    if (shouldThrow) {
      throw new AssertionError(errorMessage, undefined, ssfi);
    }

    if (doLength) {
      var len = obj.length;
      this.assert(
          len > n
        , 'expected #{this} to have a length above #{exp} but got #{act}'
        , 'expected #{this} to not have a length above #{exp}'
        , n
        , len
      );
    } else {
      this.assert(
          obj > n
        , 'expected #{this} to be above #{exp}'
        , 'expected #{this} to be at most #{exp}'
        , n
      );
    }
  }

  Assertion.addMethod('above', assertAbove);
  Assertion.addMethod('gt', assertAbove);
  Assertion.addMethod('greaterThan', assertAbove);

  /**
   * ### .least(n[, msg])
   *
   * Asserts that the target is a number or a date greater than or equal to the given
   * number or date `n` respectively. However, it's often best to assert that the target is equal to
   * its expected value.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.be.at.least(1); // Not recommended
   *     expect(2).to.be.at.least(2); // Not recommended
   *
   * Add `.lengthOf` earlier in the chain to assert that the value of the
   * target's `length` property is greater than or equal to the given number
   * `n`.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.have.lengthOf.at.least(2); // Not recommended
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.least`.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.at.least(2); // Not recommended
   *
   * `.least` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(1).to.be.at.least(2, 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.be.at.least(2);
   *
   * The alias `.gte` can be used interchangeably with `.least`.
   *
   * @name least
   * @alias gte
   * @param {Number} n
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertLeast (n, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , doLength = flag(this, 'doLength')
      , flagMsg = flag(this, 'message')
      , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')
      , ssfi = flag(this, 'ssfi')
      , objType = _.type(obj).toLowerCase()
      , nType = _.type(n).toLowerCase()
      , shouldThrow = true;

    if (doLength) {
      new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    }

    if (!doLength && (objType === 'date' && nType !== 'date')) {
      errorMessage = msgPrefix + 'the argument to least must be a date';
    } else if (nType !== 'number' && (doLength || objType === 'number')) {
      errorMessage = msgPrefix + 'the argument to least must be a number';
    } else if (!doLength && (objType !== 'date' && objType !== 'number')) {
      var printObj = (objType === 'string') ? "'" + obj + "'" : obj;
      errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';
    } else {
      shouldThrow = false;
    }

    if (shouldThrow) {
      throw new AssertionError(errorMessage, undefined, ssfi);
    }

    if (doLength) {
      var len = obj.length;
      this.assert(
          len >= n
        , 'expected #{this} to have a length at least #{exp} but got #{act}'
        , 'expected #{this} to have a length below #{exp}'
        , n
        , len
      );
    } else {
      this.assert(
          obj >= n
        , 'expected #{this} to be at least #{exp}'
        , 'expected #{this} to be below #{exp}'
        , n
      );
    }
  }

  Assertion.addMethod('least', assertLeast);
  Assertion.addMethod('gte', assertLeast);

  /**
   * ### .below(n[, msg])
   *
   * Asserts that the target is a number or a date less than the given number or date `n` respectively.
   * However, it's often best to assert that the target is equal to its expected
   * value.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.be.below(2); // Not recommended
   *
   * Add `.lengthOf` earlier in the chain to assert that the value of the
   * target's `length` property is less than the given number `n`.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.have.lengthOf.below(4); // Not recommended
   *
   *     expect([1, 2, 3]).to.have.length(3); // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.below`.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.not.be.below(1); // Not recommended
   *
   * `.below` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(2).to.be.below(1, 'nooo why fail??');
   *     expect(2, 'nooo why fail??').to.be.below(1);
   *
   * The aliases `.lt` and `.lessThan` can be used interchangeably with
   * `.below`.
   *
   * @name below
   * @alias lt
   * @alias lessThan
   * @param {Number} n
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertBelow (n, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , doLength = flag(this, 'doLength')
      , flagMsg = flag(this, 'message')
      , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')
      , ssfi = flag(this, 'ssfi')
      , objType = _.type(obj).toLowerCase()
      , nType = _.type(n).toLowerCase()
      , shouldThrow = true;

    if (doLength) {
      new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    }

    if (!doLength && (objType === 'date' && nType !== 'date')) {
      errorMessage = msgPrefix + 'the argument to below must be a date';
    } else if (nType !== 'number' && (doLength || objType === 'number')) {
      errorMessage = msgPrefix + 'the argument to below must be a number';
    } else if (!doLength && (objType !== 'date' && objType !== 'number')) {
      var printObj = (objType === 'string') ? "'" + obj + "'" : obj;
      errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';
    } else {
      shouldThrow = false;
    }

    if (shouldThrow) {
      throw new AssertionError(errorMessage, undefined, ssfi);
    }

    if (doLength) {
      var len = obj.length;
      this.assert(
          len < n
        , 'expected #{this} to have a length below #{exp} but got #{act}'
        , 'expected #{this} to not have a length below #{exp}'
        , n
        , len
      );
    } else {
      this.assert(
          obj < n
        , 'expected #{this} to be below #{exp}'
        , 'expected #{this} to be at least #{exp}'
        , n
      );
    }
  }

  Assertion.addMethod('below', assertBelow);
  Assertion.addMethod('lt', assertBelow);
  Assertion.addMethod('lessThan', assertBelow);

  /**
   * ### .most(n[, msg])
   *
   * Asserts that the target is a number or a date less than or equal to the given number
   * or date `n` respectively. However, it's often best to assert that the target is equal to its
   * expected value.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.be.at.most(2); // Not recommended
   *     expect(1).to.be.at.most(1); // Not recommended
   *
   * Add `.lengthOf` earlier in the chain to assert that the value of the
   * target's `length` property is less than or equal to the given number `n`.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.have.lengthOf.at.most(4); // Not recommended
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.most`.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.not.be.at.most(1); // Not recommended
   *
   * `.most` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(2).to.be.at.most(1, 'nooo why fail??');
   *     expect(2, 'nooo why fail??').to.be.at.most(1);
   *
   * The alias `.lte` can be used interchangeably with `.most`.
   *
   * @name most
   * @alias lte
   * @param {Number} n
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertMost (n, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , doLength = flag(this, 'doLength')
      , flagMsg = flag(this, 'message')
      , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')
      , ssfi = flag(this, 'ssfi')
      , objType = _.type(obj).toLowerCase()
      , nType = _.type(n).toLowerCase()
      , shouldThrow = true;

    if (doLength) {
      new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    }
    
    if (!doLength && (objType === 'date' && nType !== 'date')) {
      errorMessage = msgPrefix + 'the argument to most must be a date';
    } else if (nType !== 'number' && (doLength || objType === 'number')) {
      errorMessage = msgPrefix + 'the argument to most must be a number';
    } else if (!doLength && (objType !== 'date' && objType !== 'number')) {
      var printObj = (objType === 'string') ? "'" + obj + "'" : obj;
      errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';
    } else {
      shouldThrow = false;
    }

    if (shouldThrow) {
      throw new AssertionError(errorMessage, undefined, ssfi);
    }

    if (doLength) {
      var len = obj.length;
      this.assert(
          len <= n
        , 'expected #{this} to have a length at most #{exp} but got #{act}'
        , 'expected #{this} to have a length above #{exp}'
        , n
        , len
      );
    } else {
      this.assert(
          obj <= n
        , 'expected #{this} to be at most #{exp}'
        , 'expected #{this} to be above #{exp}'
        , n
      );
    }
  }

  Assertion.addMethod('most', assertMost);
  Assertion.addMethod('lte', assertMost);

  /**
   * ### .within(start, finish[, msg])
   *
   * Asserts that the target is a number or a date greater than or equal to the given
   * number or date `start`, and less than or equal to the given number or date `finish` respectively.
   * However, it's often best to assert that the target is equal to its expected
   * value.
   *
   *     expect(2).to.equal(2); // Recommended
   *     expect(2).to.be.within(1, 3); // Not recommended
   *     expect(2).to.be.within(2, 3); // Not recommended
   *     expect(2).to.be.within(1, 2); // Not recommended
   *
   * Add `.lengthOf` earlier in the chain to assert that the value of the
   * target's `length` property is greater than or equal to the given number
   * `start`, and less than or equal to the given number `finish`.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.have.lengthOf.within(2, 4); // Not recommended
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.within`.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.within(2, 4); // Not recommended
   *
   * `.within` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect(4).to.be.within(1, 3, 'nooo why fail??');
   *     expect(4, 'nooo why fail??').to.be.within(1, 3);
   *
   * @name within
   * @param {Number} start lower bound inclusive
   * @param {Number} finish upper bound inclusive
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  Assertion.addMethod('within', function (start, finish, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , doLength = flag(this, 'doLength')
      , flagMsg = flag(this, 'message')
      , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')
      , ssfi = flag(this, 'ssfi')
      , objType = _.type(obj).toLowerCase()
      , startType = _.type(start).toLowerCase()
      , finishType = _.type(finish).toLowerCase()
      , shouldThrow = true
      , range = (startType === 'date' && finishType === 'date')
          ? start.toUTCString() + '..' + finish.toUTCString()
          : start + '..' + finish;

    if (doLength) {
      new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    }

    if (!doLength && (objType === 'date' && (startType !== 'date' || finishType !== 'date'))) {
      errorMessage = msgPrefix + 'the arguments to within must be dates';
    } else if ((startType !== 'number' || finishType !== 'number') && (doLength || objType === 'number')) {
      errorMessage = msgPrefix + 'the arguments to within must be numbers';
    } else if (!doLength && (objType !== 'date' && objType !== 'number')) {
      var printObj = (objType === 'string') ? "'" + obj + "'" : obj;
      errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';
    } else {
      shouldThrow = false;
    }

    if (shouldThrow) {
      throw new AssertionError(errorMessage, undefined, ssfi);
    }

    if (doLength) {
      var len = obj.length;
      this.assert(
          len >= start && len <= finish
        , 'expected #{this} to have a length within ' + range
        , 'expected #{this} to not have a length within ' + range
      );
    } else {
      this.assert(
          obj >= start && obj <= finish
        , 'expected #{this} to be within ' + range
        , 'expected #{this} to not be within ' + range
      );
    }
  });

  /**
   * ### .instanceof(constructor[, msg])
   *
   * Asserts that the target is an instance of the given `constructor`.
   *
   *     function Cat () { }
   *
   *     expect(new Cat()).to.be.an.instanceof(Cat);
   *     expect([1, 2]).to.be.an.instanceof(Array);
   *
   * Add `.not` earlier in the chain to negate `.instanceof`.
   *
   *     expect({a: 1}).to.not.be.an.instanceof(Array);
   *
   * `.instanceof` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect(1).to.be.an.instanceof(Array, 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.be.an.instanceof(Array);
   *
   * Due to limitations in ES5, `.instanceof` may not always work as expected
   * when using a transpiler such as Babel or TypeScript. In particular, it may
   * produce unexpected results when subclassing built-in object such as
   * `Array`, `Error`, and `Map`. See your transpiler's docs for details:
   *
   * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))
   * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))
   *
   * The alias `.instanceOf` can be used interchangeably with `.instanceof`.
   *
   * @name instanceof
   * @param {Constructor} constructor
   * @param {String} msg _optional_
   * @alias instanceOf
   * @namespace BDD
   * @api public
   */

  function assertInstanceOf (constructor, msg) {
    if (msg) flag(this, 'message', msg);

    var target = flag(this, 'object')
    var ssfi = flag(this, 'ssfi');
    var flagMsg = flag(this, 'message');

    try {
      var isInstanceOf = target instanceof constructor;
    } catch (err) {
      if (err instanceof TypeError) {
        flagMsg = flagMsg ? flagMsg + ': ' : '';
        throw new AssertionError(
          flagMsg + 'The instanceof assertion needs a constructor but '
            + _.type(constructor) + ' was given.',
          undefined,
          ssfi
        );
      }
      throw err;
    }

    var name = _.getName(constructor);
    if (name === null) {
      name = 'an unnamed constructor';
    }

    this.assert(
        isInstanceOf
      , 'expected #{this} to be an instance of ' + name
      , 'expected #{this} to not be an instance of ' + name
    );
  };

  Assertion.addMethod('instanceof', assertInstanceOf);
  Assertion.addMethod('instanceOf', assertInstanceOf);

  /**
   * ### .property(name[, val[, msg]])
   *
   * Asserts that the target has a property with the given key `name`.
   *
   *     expect({a: 1}).to.have.property('a');
   *
   * When `val` is provided, `.property` also asserts that the property's value
   * is equal to the given `val`.
   *
   *     expect({a: 1}).to.have.property('a', 1);
   *
   * By default, strict (`===`) equality is used. Add `.deep` earlier in the
   * chain to use deep equality instead. See the `deep-eql` project page for
   * info on the deep equality algorithm: https://github.com/chaijs/deep-eql.
   *
   *     // Target object deeply (but not strictly) has property `x: {a: 1}`
   *     expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});
   *     expect({x: {a: 1}}).to.not.have.property('x', {a: 1});
   *
   * The target's enumerable and non-enumerable properties are always included
   * in the search. By default, both own and inherited properties are included.
   * Add `.own` earlier in the chain to exclude inherited properties from the
   * search.
   *
   *     Object.prototype.b = 2;
   *
   *     expect({a: 1}).to.have.own.property('a');
   *     expect({a: 1}).to.have.own.property('a', 1);
   *     expect({a: 1}).to.have.property('b').but.not.own.property('b'); 
   *
   * `.deep` and `.own` can be combined.
   *
   *     expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1});
   *
   * Add `.nested` earlier in the chain to enable dot- and bracket-notation when
   * referencing nested properties.
   *
   *     expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');
   *     expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y');
   *
   * If `.` or `[]` are part of an actual property name, they can be escaped by
   * adding two backslashes before them.
   *
   *     expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]');
   *
   * `.deep` and `.nested` can be combined.
   *
   *     expect({a: {b: [{c: 3}]}})
   *       .to.have.deep.nested.property('a.b[0]', {c: 3});
   *
   * `.own` and `.nested` cannot be combined.
   *
   * Add `.not` earlier in the chain to negate `.property`.
   *
   *     expect({a: 1}).to.not.have.property('b');
   * 
   * However, it's dangerous to negate `.property` when providing `val`. The
   * problem is that it creates uncertain expectations by asserting that the
   * target either doesn't have a property with the given key `name`, or that it
   * does have a property with the given key `name` but its value isn't equal to
   * the given `val`. It's often best to identify the exact output that's
   * expected, and then write an assertion that only accepts that exact output.
   *
   * When the target isn't expected to have a property with the given key
   * `name`, it's often best to assert exactly that.
   *
   *     expect({b: 2}).to.not.have.property('a'); // Recommended
   *     expect({b: 2}).to.not.have.property('a', 1); // Not recommended
   *
   * When the target is expected to have a property with the given key `name`,
   * it's often best to assert that the property has its expected value, rather
   * than asserting that it doesn't have one of many unexpected values.
   *
   *     expect({a: 3}).to.have.property('a', 3); // Recommended
   *     expect({a: 3}).to.not.have.property('a', 1); // Not recommended
   *
   * `.property` changes the target of any assertions that follow in the chain
   * to be the value of the property from the original target object.
   *
   *     expect({a: 1}).to.have.property('a').that.is.a('number');
   *
   * `.property` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`. When not providing `val`, only use the
   * second form.
   *
   *     // Recommended
   *     expect({a: 1}).to.have.property('a', 2, 'nooo why fail??');
   *     expect({a: 1}, 'nooo why fail??').to.have.property('a', 2);
   *     expect({a: 1}, 'nooo why fail??').to.have.property('b');
   *
   *     // Not recommended
   *     expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??');
   * 
   * The above assertion isn't the same thing as not providing `val`. Instead,
   * it's asserting that the target object has a `b` property that's equal to
   * `undefined`.
   *
   * The assertions `.ownProperty` and `.haveOwnProperty` can be used
   * interchangeably with `.own.property`.
   *
   * @name property
   * @param {String} name
   * @param {Mixed} val (optional)
   * @param {String} msg _optional_
   * @returns value of property for chaining
   * @namespace BDD
   * @api public
   */

  function assertProperty (name, val, msg) {
    if (msg) flag(this, 'message', msg);

    var isNested = flag(this, 'nested')
      , isOwn = flag(this, 'own')
      , flagMsg = flag(this, 'message')
      , obj = flag(this, 'object')
      , ssfi = flag(this, 'ssfi');

    if (isNested && isOwn) {
      flagMsg = flagMsg ? flagMsg + ': ' : '';
      throw new AssertionError(
        flagMsg + 'The "nested" and "own" flags cannot be combined.',
        undefined,
        ssfi
      );
    }

    if (obj === null || obj === undefined) {
      flagMsg = flagMsg ? flagMsg + ': ' : '';
      throw new AssertionError(
        flagMsg + 'Target cannot be null or undefined.',
        undefined,
        ssfi
      );
    }

    var isDeep = flag(this, 'deep')
      , negate = flag(this, 'negate')
      , pathInfo = isNested ? _.getPathInfo(obj, name) : null
      , value = isNested ? pathInfo.value : obj[name];

    var descriptor = '';
    if (isDeep) descriptor += 'deep ';
    if (isOwn) descriptor += 'own ';
    if (isNested) descriptor += 'nested ';
    descriptor += 'property ';

    var hasProperty;
    if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name);
    else if (isNested) hasProperty = pathInfo.exists;
    else hasProperty = _.hasProperty(obj, name);

    // When performing a negated assertion for both name and val, merely having
    // a property with the given name isn't enough to cause the assertion to
    // fail. It must both have a property with the given name, and the value of
    // that property must equal the given val. Therefore, skip this assertion in
    // favor of the next.
    if (!negate || arguments.length === 1) {
      this.assert(
          hasProperty
        , 'expected #{this} to have ' + descriptor + _.inspect(name)
        , 'expected #{this} to not have ' + descriptor + _.inspect(name));
    }

    if (arguments.length > 1) {
      this.assert(
          hasProperty && (isDeep ? _.eql(val, value) : val === value)
        , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'
        , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}'
        , val
        , value
      );
    }

    flag(this, 'object', value);
  }

  Assertion.addMethod('property', assertProperty);

  function assertOwnProperty (name, value, msg) {
    flag(this, 'own', true);
    assertProperty.apply(this, arguments);
  }

  Assertion.addMethod('ownProperty', assertOwnProperty);
  Assertion.addMethod('haveOwnProperty', assertOwnProperty);

  /**
   * ### .ownPropertyDescriptor(name[, descriptor[, msg]])
   *
   * Asserts that the target has its own property descriptor with the given key
   * `name`. Enumerable and non-enumerable properties are included in the
   * search.
   *
   *     expect({a: 1}).to.have.ownPropertyDescriptor('a');
   *
   * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that
   * the property's descriptor is deeply equal to the given `descriptor`. See
   * the `deep-eql` project page for info on the deep equality algorithm:
   * https://github.com/chaijs/deep-eql.
   *
   *     expect({a: 1}).to.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 1,
   *     });
   *
   * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`.
   *
   *     expect({a: 1}).to.not.have.ownPropertyDescriptor('b');
   * 
   * However, it's dangerous to negate `.ownPropertyDescriptor` when providing
   * a `descriptor`. The problem is that it creates uncertain expectations by
   * asserting that the target either doesn't have a property descriptor with
   * the given key `name`, or that it does have a property descriptor with the
   * given key `name` but its not deeply equal to the given `descriptor`. It's
   * often best to identify the exact output that's expected, and then write an
   * assertion that only accepts that exact output.
   *
   * When the target isn't expected to have a property descriptor with the given
   * key `name`, it's often best to assert exactly that.
   *
   *     // Recommended
   *     expect({b: 2}).to.not.have.ownPropertyDescriptor('a');
   *
   *     // Not recommended
   *     expect({b: 2}).to.not.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 1,
   *     });
   *
   * When the target is expected to have a property descriptor with the given
   * key `name`, it's often best to assert that the property has its expected
   * descriptor, rather than asserting that it doesn't have one of many
   * unexpected descriptors.
   *
   *     // Recommended
   *     expect({a: 3}).to.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 3,
   *     });
   *
   *     // Not recommended
   *     expect({a: 3}).to.not.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 1,
   *     });
   *
   * `.ownPropertyDescriptor` changes the target of any assertions that follow
   * in the chain to be the value of the property descriptor from the original
   * target object.
   *
   *     expect({a: 1}).to.have.ownPropertyDescriptor('a')
   *       .that.has.property('enumerable', true);
   *
   * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a
   * custom error message to show when the assertion fails. The message can also
   * be given as the second argument to `expect`. When not providing
   * `descriptor`, only use the second form.
   *
   *     // Recommended
   *     expect({a: 1}).to.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 2,
   *     }, 'nooo why fail??');
   *
   *     // Recommended
   *     expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', {
   *       configurable: true,
   *       enumerable: true,
   *       writable: true,
   *       value: 2,
   *     });
   * 
   *     // Recommended
   *     expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b');
   *
   *     // Not recommended
   *     expect({a: 1})
   *       .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??');
   *
   * The above assertion isn't the same thing as not providing `descriptor`.
   * Instead, it's asserting that the target object has a `b` property
   * descriptor that's deeply equal to `undefined`.
   *
   * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with
   * `.ownPropertyDescriptor`.
   *
   * @name ownPropertyDescriptor
   * @alias haveOwnPropertyDescriptor
   * @param {String} name
   * @param {Object} descriptor _optional_
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertOwnPropertyDescriptor (name, descriptor, msg) {
    if (typeof descriptor === 'string') {
      msg = descriptor;
      descriptor = null;
    }
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object');
    var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);
    if (actualDescriptor && descriptor) {
      this.assert(
          _.eql(descriptor, actualDescriptor)
        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)
        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)
        , descriptor
        , actualDescriptor
        , true
      );
    } else {
      this.assert(
          actualDescriptor
        , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)
        , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)
      );
    }
    flag(this, 'object', actualDescriptor);
  }

  Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);
  Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);

  /**
   * ### .lengthOf(n[, msg])
   *
   * Asserts that the target's `length` property is equal to the given number
   * `n`.
   *
   *     expect([1, 2, 3]).to.have.lengthOf(3);
   *     expect('foo').to.have.lengthOf(3);
   *
   * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often
   * best to assert that the target's `length` property is equal to its expected
   * value, rather than not equal to one of many unexpected values.
   *
   *     expect('foo').to.have.lengthOf(3); // Recommended
   *     expect('foo').to.not.have.lengthOf(4); // Not recommended
   *
   * `.lengthOf` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??');
   *     expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2);
   *
   * `.lengthOf` can also be used as a language chain, causing all `.above`,
   * `.below`, `.least`, `.most`, and `.within` assertions that follow in the
   * chain to use the target's `length` property as the target. However, it's
   * often best to assert that the target's `length` property is equal to its
   * expected length, rather than asserting that its `length` property falls
   * within some range of values.
   *
   *     // Recommended
   *     expect([1, 2, 3]).to.have.lengthOf(3);
   *
   *     // Not recommended
   *     expect([1, 2, 3]).to.have.lengthOf.above(2);
   *     expect([1, 2, 3]).to.have.lengthOf.below(4);
   *     expect([1, 2, 3]).to.have.lengthOf.at.least(3);
   *     expect([1, 2, 3]).to.have.lengthOf.at.most(3);
   *     expect([1, 2, 3]).to.have.lengthOf.within(2,4);
   *
   * Due to a compatibility issue, the alias `.length` can't be chained directly
   * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used
   * interchangeably with `.lengthOf` in every situation. It's recommended to
   * always use `.lengthOf` instead of `.length`.
   *
   *     expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error
   *     expect([1, 2, 3]).to.have.a.lengthOf(3);  // passes as expected
   *
   * @name lengthOf
   * @alias length
   * @param {Number} n
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertLengthChain () {
    flag(this, 'doLength', true);
  }

  function assertLength (n, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');
    var len = obj.length;

    this.assert(
        len == n
      , 'expected #{this} to have a length of #{exp} but got #{act}'
      , 'expected #{this} to not have a length of #{act}'
      , n
      , len
    );
  }

  Assertion.addChainableMethod('length', assertLength, assertLengthChain);
  Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain);

  /**
   * ### .match(re[, msg])
   *
   * Asserts that the target matches the given regular expression `re`.
   *
   *     expect('foobar').to.match(/^foo/);
   *
   * Add `.not` earlier in the chain to negate `.match`.
   *
   *     expect('foobar').to.not.match(/taco/);
   *
   * `.match` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect('foobar').to.match(/taco/, 'nooo why fail??');
   *     expect('foobar', 'nooo why fail??').to.match(/taco/);
   *
   * The alias `.matches` can be used interchangeably with `.match`.
   *
   * @name match
   * @alias matches
   * @param {RegExp} re
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */
  function assertMatch(re, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object');
    this.assert(
        re.exec(obj)
      , 'expected #{this} to match ' + re
      , 'expected #{this} not to match ' + re
    );
  }

  Assertion.addMethod('match', assertMatch);
  Assertion.addMethod('matches', assertMatch);

  /**
   * ### .string(str[, msg])
   *
   * Asserts that the target string contains the given substring `str`.
   *
   *     expect('foobar').to.have.string('bar');
   *
   * Add `.not` earlier in the chain to negate `.string`.
   *
   *     expect('foobar').to.not.have.string('taco');
   *
   * `.string` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect('foobar').to.have.string(/taco/, 'nooo why fail??');
   *     expect('foobar', 'nooo why fail??').to.have.string(/taco/);
   *
   * @name string
   * @param {String} str
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  Assertion.addMethod('string', function (str, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(obj, flagMsg, ssfi, true).is.a('string');

    this.assert(
        ~obj.indexOf(str)
      , 'expected #{this} to contain ' + _.inspect(str)
      , 'expected #{this} to not contain ' + _.inspect(str)
    );
  });

  /**
   * ### .keys(key1[, key2[, ...]])
   *
   * Asserts that the target object, array, map, or set has the given keys. Only
   * the target's own inherited properties are included in the search. 
   *
   * When the target is an object or array, keys can be provided as one or more
   * string arguments, a single array argument, or a single object argument. In
   * the latter case, only the keys in the given object matter; the values are
   * ignored.
   *
   *     expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
   *     expect(['x', 'y']).to.have.all.keys(0, 1);
   *
   *     expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']);
   *     expect(['x', 'y']).to.have.all.keys([0, 1]);
   *
   *     expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5
   *     expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5
   *
   * When the target is a map or set, each key must be provided as a separate
   * argument.
   *
   *     expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b');
   *     expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b');
   *
   * Because `.keys` does different things based on the target's type, it's
   * important to check the target's type before using `.keys`. See the `.a` doc
   * for info on testing a target's type.
   *
   *     expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b');
   *
   * By default, strict (`===`) equality is used to compare keys of maps and
   * sets. Add `.deep` earlier in the chain to use deep equality instead. See
   * the `deep-eql` project page for info on the deep equality algorithm:
   * https://github.com/chaijs/deep-eql.
   *
   *     // Target set deeply (but not strictly) has key `{a: 1}`
   *     expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]);
   *     expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]);
   *
   * By default, the target must have all of the given keys and no more. Add
   * `.any` earlier in the chain to only require that the target have at least
   * one of the given keys. Also, add `.not` earlier in the chain to negate
   * `.keys`. It's often best to add `.any` when negating `.keys`, and to use
   * `.all` when asserting `.keys` without negation.
   *
   * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts
   * exactly what's expected of the output, whereas `.not.all.keys` creates
   * uncertain expectations.
   *
   *     // Recommended; asserts that target doesn't have any of the given keys
   *     expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');
   *
   *     // Not recommended; asserts that target doesn't have all of the given
   *     // keys but may or may not have some of them
   *     expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd');
   *
   * When asserting `.keys` without negation, `.all` is preferred because
   * `.all.keys` asserts exactly what's expected of the output, whereas
   * `.any.keys` creates uncertain expectations.
   *
   *     // Recommended; asserts that target has all the given keys
   *     expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
   *
   *     // Not recommended; asserts that target has at least one of the given
   *     // keys but may or may not have more of them
   *     expect({a: 1, b: 2}).to.have.any.keys('a', 'b');
   *
   * Note that `.all` is used by default when neither `.all` nor `.any` appear
   * earlier in the chain. However, it's often best to add `.all` anyway because
   * it improves readability.
   *
   *     // Both assertions are identical
   *     expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended
   *     expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended
   *
   * Add `.include` earlier in the chain to require that the target's keys be a
   * superset of the expected keys, rather than identical sets.
   *
   *     // Target object's keys are a superset of ['a', 'b'] but not identical
   *     expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');
   *     expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');
   *
   * However, if `.any` and `.include` are combined, only the `.any` takes
   * effect. The `.include` is ignored in this case.
   *
   *     // Both assertions are identical
   *     expect({a: 1}).to.have.any.keys('a', 'b');
   *     expect({a: 1}).to.include.any.keys('a', 'b');
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect({a: 1}, 'nooo why fail??').to.have.key('b');
   *
   * The alias `.key` can be used interchangeably with `.keys`.
   *
   * @name keys
   * @alias key
   * @param {...String|Array|Object} keys
   * @namespace BDD
   * @api public
   */

  function assertKeys (keys) {
    var obj = flag(this, 'object')
      , objType = _.type(obj)
      , keysType = _.type(keys)
      , ssfi = flag(this, 'ssfi')
      , isDeep = flag(this, 'deep')
      , str
      , deepStr = ''
      , ok = true
      , flagMsg = flag(this, 'message');

    flagMsg = flagMsg ? flagMsg + ': ' : '';
    var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments';

    if (objType === 'Map' || objType === 'Set') {
      deepStr = isDeep ? 'deeply ' : '';
      actual = [];

      // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach.
      obj.forEach(function (val, key) { actual.push(key) });

      if (keysType !== 'Array') {
        keys = Array.prototype.slice.call(arguments);
      }

    } else {
      actual = _.getOwnEnumerableProperties(obj);

      switch (keysType) {
        case 'Array':
          if (arguments.length > 1) {
            throw new AssertionError(mixedArgsMsg, undefined, ssfi);
          }
          break;
        case 'Object':
          if (arguments.length > 1) {
            throw new AssertionError(mixedArgsMsg, undefined, ssfi);
          }
          keys = Object.keys(keys);
          break;
        default:
          keys = Array.prototype.slice.call(arguments);
      }

      // Only stringify non-Symbols because Symbols would become "Symbol()"
      keys = keys.map(function (val) {
        return typeof val === 'symbol' ? val : String(val);
      });
    }

    if (!keys.length) {
      throw new AssertionError(flagMsg + 'keys required', undefined, ssfi);
    }

    var len = keys.length
      , any = flag(this, 'any')
      , all = flag(this, 'all')
      , expected = keys
      , actual;

    if (!any && !all) {
      all = true;
    }

    // Has any
    if (any) {
      ok = expected.some(function(expectedKey) {
        return actual.some(function(actualKey) {
          if (isDeep) {
            return _.eql(expectedKey, actualKey);
          } else {
            return expectedKey === actualKey;
          }
        });
      });
    }

    // Has all
    if (all) {
      ok = expected.every(function(expectedKey) {
        return actual.some(function(actualKey) {
          if (isDeep) {
            return _.eql(expectedKey, actualKey);
          } else {
            return expectedKey === actualKey;
          }
        });
      });

      if (!flag(this, 'contains')) {
        ok = ok && keys.length == actual.length;
      }
    }

    // Key string
    if (len > 1) {
      keys = keys.map(function(key) {
        return _.inspect(key);
      });
      var last = keys.pop();
      if (all) {
        str = keys.join(', ') + ', and ' + last;
      }
      if (any) {
        str = keys.join(', ') + ', or ' + last;
      }
    } else {
      str = _.inspect(keys[0]);
    }

    // Form
    str = (len > 1 ? 'keys ' : 'key ') + str;

    // Have / include
    str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;

    // Assertion
    this.assert(
        ok
      , 'expected #{this} to ' + deepStr + str
      , 'expected #{this} to not ' + deepStr + str
      , expected.slice(0).sort(_.compareByInspect)
      , actual.sort(_.compareByInspect)
      , true
    );
  }

  Assertion.addMethod('keys', assertKeys);
  Assertion.addMethod('key', assertKeys);

  /**
   * ### .throw([errorLike], [errMsgMatcher], [msg])
   *
   * When no arguments are provided, `.throw` invokes the target function and
   * asserts that an error is thrown.
   * 
   *     var badFn = function () { throw new TypeError('Illegal salmon!'); };
   *
   *     expect(badFn).to.throw();
   *
   * When one argument is provided, and it's an error constructor, `.throw`
   * invokes the target function and asserts that an error is thrown that's an
   * instance of that error constructor.
   *
   *     var badFn = function () { throw new TypeError('Illegal salmon!'); };
   *
   *     expect(badFn).to.throw(TypeError);
   *
   * When one argument is provided, and it's an error instance, `.throw` invokes
   * the target function and asserts that an error is thrown that's strictly
   * (`===`) equal to that error instance.
   *
   *     var err = new TypeError('Illegal salmon!');
   *     var badFn = function () { throw err; };
   *
   *     expect(badFn).to.throw(err);
   *
   * When one argument is provided, and it's a string, `.throw` invokes the
   * target function and asserts that an error is thrown with a message that
   * contains that string.
   *
   *     var badFn = function () { throw new TypeError('Illegal salmon!'); };
   *
   *     expect(badFn).to.throw('salmon');
   *
   * When one argument is provided, and it's a regular expression, `.throw`
   * invokes the target function and asserts that an error is thrown with a
   * message that matches that regular expression.
   *
   *     var badFn = function () { throw new TypeError('Illegal salmon!'); };
   *
   *     expect(badFn).to.throw(/salmon/);
   *
   * When two arguments are provided, and the first is an error instance or
   * constructor, and the second is a string or regular expression, `.throw`
   * invokes the function and asserts that an error is thrown that fulfills both
   * conditions as described above.
   *
   *     var err = new TypeError('Illegal salmon!');
   *     var badFn = function () { throw err; };
   *
   *     expect(badFn).to.throw(TypeError, 'salmon');
   *     expect(badFn).to.throw(TypeError, /salmon/);
   *     expect(badFn).to.throw(err, 'salmon');
   *     expect(badFn).to.throw(err, /salmon/);
   *
   * Add `.not` earlier in the chain to negate `.throw`.
   *     
   *     var goodFn = function () {};
   *
   *     expect(goodFn).to.not.throw();
   * 
   * However, it's dangerous to negate `.throw` when providing any arguments.
   * The problem is that it creates uncertain expectations by asserting that the
   * target either doesn't throw an error, or that it throws an error but of a
   * different type than the given type, or that it throws an error of the given
   * type but with a message that doesn't include the given string. It's often
   * best to identify the exact output that's expected, and then write an
   * assertion that only accepts that exact output.
   *
   * When the target isn't expected to throw an error, it's often best to assert
   * exactly that.
   *
   *     var goodFn = function () {};
   *
   *     expect(goodFn).to.not.throw(); // Recommended
   *     expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended
   *
   * When the target is expected to throw an error, it's often best to assert
   * that the error is of its expected type, and has a message that includes an
   * expected string, rather than asserting that it doesn't have one of many
   * unexpected types, and doesn't have a message that includes some string.
   *
   *     var badFn = function () { throw new TypeError('Illegal salmon!'); };
   *
   *     expect(badFn).to.throw(TypeError, 'salmon'); // Recommended
   *     expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended
   *
   * `.throw` changes the target of any assertions that follow in the chain to
   * be the error object that's thrown.
   *
   *     var err = new TypeError('Illegal salmon!');
   *     err.code = 42;
   *     var badFn = function () { throw err; };
   *
   *     expect(badFn).to.throw(TypeError).with.property('code', 42);
   *
   * `.throw` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`. When not providing two arguments, always use
   * the second form.
   *
   *     var goodFn = function () {};
   *
   *     expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??');
   *     expect(goodFn, 'nooo why fail??').to.throw();
   *
   * Due to limitations in ES5, `.throw` may not always work as expected when
   * using a transpiler such as Babel or TypeScript. In particular, it may
   * produce unexpected results when subclassing the built-in `Error` object and
   * then passing the subclassed constructor to `.throw`. See your transpiler's
   * docs for details:
   *
   * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))
   * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))
   *
   * Beware of some common mistakes when using the `throw` assertion. One common
   * mistake is to accidentally invoke the function yourself instead of letting
   * the `throw` assertion invoke the function for you. For example, when
   * testing if a function named `fn` throws, provide `fn` instead of `fn()` as
   * the target for the assertion.
   *
   *     expect(fn).to.throw();     // Good! Tests `fn` as desired
   *     expect(fn()).to.throw();   // Bad! Tests result of `fn()`, not `fn`
   *
   * If you need to assert that your function `fn` throws when passed certain
   * arguments, then wrap a call to `fn` inside of another function.
   *
   *     expect(function () { fn(42); }).to.throw();  // Function expression
   *     expect(() => fn(42)).to.throw();             // ES6 arrow function
   *
   * Another common mistake is to provide an object method (or any stand-alone
   * function that relies on `this`) as the target of the assertion. Doing so is
   * problematic because the `this` context will be lost when the function is
   * invoked by `.throw`; there's no way for it to know what `this` is supposed
   * to be. There are two ways around this problem. One solution is to wrap the
   * method or function call inside of another function. Another solution is to
   * use `bind`.
   *
   *     expect(function () { cat.meow(); }).to.throw();  // Function expression
   *     expect(() => cat.meow()).to.throw();             // ES6 arrow function
   *     expect(cat.meow.bind(cat)).to.throw();           // Bind
   *
   * Finally, it's worth mentioning that it's a best practice in JavaScript to
   * only throw `Error` and derivatives of `Error` such as `ReferenceError`,
   * `TypeError`, and user-defined objects that extend `Error`. No other type of
   * value will generate a stack trace when initialized. With that said, the
   * `throw` assertion does technically support any type of value being thrown,
   * not just `Error` and its derivatives.
   *
   * The aliases `.throws` and `.Throw` can be used interchangeably with
   * `.throw`.
   *
   * @name throw
   * @alias throws
   * @alias Throw
   * @param {Error|ErrorConstructor} errorLike
   * @param {String|RegExp} errMsgMatcher error message
   * @param {String} msg _optional_
   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
   * @returns error for chaining (null if no error)
   * @namespace BDD
   * @api public
   */

  function assertThrows (errorLike, errMsgMatcher, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , ssfi = flag(this, 'ssfi')
      , flagMsg = flag(this, 'message')
      , negate = flag(this, 'negate') || false;
    new Assertion(obj, flagMsg, ssfi, true).is.a('function');

    if (errorLike instanceof RegExp || typeof errorLike === 'string') {
      errMsgMatcher = errorLike;
      errorLike = null;
    }

    var caughtErr;
    try {
      obj();
    } catch (err) {
      caughtErr = err;
    }

    // If we have the negate flag enabled and at least one valid argument it means we do expect an error
    // but we want it to match a given set of criteria
    var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined;

    // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible
    // See Issue #551 and PR #683@GitHub
    var everyArgIsDefined = Boolean(errorLike && errMsgMatcher);
    var errorLikeFail = false;
    var errMsgMatcherFail = false;

    // Checking if error was thrown
    if (everyArgIsUndefined || !everyArgIsUndefined && !negate) {
      // We need this to display results correctly according to their types
      var errorLikeString = 'an error';
      if (errorLike instanceof Error) {
        errorLikeString = '#{exp}';
      } else if (errorLike) {
        errorLikeString = _.checkError.getConstructorName(errorLike);
      }

      this.assert(
          caughtErr
        , 'expected #{this} to throw ' + errorLikeString
        , 'expected #{this} to not throw an error but #{act} was thrown'
        , errorLike && errorLike.toString()
        , (caughtErr instanceof Error ?
            caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr &&
                                    _.checkError.getConstructorName(caughtErr)))
      );
    }

    if (errorLike && caughtErr) {
      // We should compare instances only if `errorLike` is an instance of `Error`
      if (errorLike instanceof Error) {
        var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike);

        if (isCompatibleInstance === negate) {
          // These checks were created to ensure we won't fail too soon when we've got both args and a negate
          // See Issue #551 and PR #683@GitHub
          if (everyArgIsDefined && negate) {
            errorLikeFail = true;
          } else {
            this.assert(
                negate
              , 'expected #{this} to throw #{exp} but #{act} was thrown'
              , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '')
              , errorLike.toString()
              , caughtErr.toString()
            );
          }
        }
      }

      var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike);
      if (isCompatibleConstructor === negate) {
        if (everyArgIsDefined && negate) {
            errorLikeFail = true;
        } else {
          this.assert(
              negate
            , 'expected #{this} to throw #{exp} but #{act} was thrown'
            , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')
            , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))
            , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))
          );
        }
      }
    }

    if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) {
      // Here we check compatible messages
      var placeholder = 'including';
      if (errMsgMatcher instanceof RegExp) {
        placeholder = 'matching'
      }

      var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher);
      if (isCompatibleMessage === negate) {
        if (everyArgIsDefined && negate) {
            errMsgMatcherFail = true;
        } else {
          this.assert(
            negate
            , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}'
            , 'expected #{this} to throw error not ' + placeholder + ' #{exp}'
            ,  errMsgMatcher
            ,  _.checkError.getMessage(caughtErr)
          );
        }
      }
    }

    // If both assertions failed and both should've matched we throw an error
    if (errorLikeFail && errMsgMatcherFail) {
      this.assert(
        negate
        , 'expected #{this} to throw #{exp} but #{act} was thrown'
        , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')
        , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))
        , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))
      );
    }

    flag(this, 'object', caughtErr);
  };

  Assertion.addMethod('throw', assertThrows);
  Assertion.addMethod('throws', assertThrows);
  Assertion.addMethod('Throw', assertThrows);

  /**
   * ### .respondTo(method[, msg])
   *
   * When the target is a non-function object, `.respondTo` asserts that the
   * target has a method with the given name `method`. The method can be own or
   * inherited, and it can be enumerable or non-enumerable.
   *
   *     function Cat () {}
   *     Cat.prototype.meow = function () {};
   *
   *     expect(new Cat()).to.respondTo('meow');
   *
   * When the target is a function, `.respondTo` asserts that the target's
   * `prototype` property has a method with the given name `method`. Again, the
   * method can be own or inherited, and it can be enumerable or non-enumerable.
   *
   *     function Cat () {}
   *     Cat.prototype.meow = function () {};
   *
   *     expect(Cat).to.respondTo('meow');
   *
   * Add `.itself` earlier in the chain to force `.respondTo` to treat the
   * target as a non-function object, even if it's a function. Thus, it asserts
   * that the target has a method with the given name `method`, rather than
   * asserting that the target's `prototype` property has a method with the
   * given name `method`.
   *
   *     function Cat () {}
   *     Cat.prototype.meow = function () {};
   *     Cat.hiss = function () {};
   *
   *     expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');
   *
   * When not adding `.itself`, it's important to check the target's type before
   * using `.respondTo`. See the `.a` doc for info on checking a target's type.
   *
   *     function Cat () {}
   *     Cat.prototype.meow = function () {};
   *
   *     expect(new Cat()).to.be.an('object').that.respondsTo('meow');
   *
   * Add `.not` earlier in the chain to negate `.respondTo`.
   *
   *     function Dog () {}
   *     Dog.prototype.bark = function () {};
   *
   *     expect(new Dog()).to.not.respondTo('meow');
   *
   * `.respondTo` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect({}).to.respondTo('meow', 'nooo why fail??');
   *     expect({}, 'nooo why fail??').to.respondTo('meow');
   *
   * The alias `.respondsTo` can be used interchangeably with `.respondTo`.
   *
   * @name respondTo
   * @alias respondsTo
   * @param {String} method
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function respondTo (method, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , itself = flag(this, 'itself')
      , context = ('function' === typeof obj && !itself)
        ? obj.prototype[method]
        : obj[method];

    this.assert(
        'function' === typeof context
      , 'expected #{this} to respond to ' + _.inspect(method)
      , 'expected #{this} to not respond to ' + _.inspect(method)
    );
  }

  Assertion.addMethod('respondTo', respondTo);
  Assertion.addMethod('respondsTo', respondTo);

  /**
   * ### .itself
   *
   * Forces all `.respondTo` assertions that follow in the chain to behave as if
   * the target is a non-function object, even if it's a function. Thus, it
   * causes `.respondTo` to assert that the target has a method with the given
   * name, rather than asserting that the target's `prototype` property has a
   * method with the given name.
   *
   *     function Cat () {}
   *     Cat.prototype.meow = function () {};
   *     Cat.hiss = function () {};
   *
   *     expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');
   *
   * @name itself
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('itself', function () {
    flag(this, 'itself', true);
  });

  /**
   * ### .satisfy(matcher[, msg])
   *
   * Invokes the given `matcher` function with the target being passed as the
   * first argument, and asserts that the value returned is truthy.
   *
   *     expect(1).to.satisfy(function(num) {
   *       return num > 0; 
   *     });
   *
   * Add `.not` earlier in the chain to negate `.satisfy`.
   *
   *     expect(1).to.not.satisfy(function(num) {
   *       return num > 2;
   *     });
   *
   * `.satisfy` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect(1).to.satisfy(function(num) {
   *       return num > 2;
   *     }, 'nooo why fail??');
   *
   *     expect(1, 'nooo why fail??').to.satisfy(function(num) {
   *       return num > 2;
   *     });
   *
   * The alias `.satisfies` can be used interchangeably with `.satisfy`.
   *
   * @name satisfy
   * @alias satisfies
   * @param {Function} matcher
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function satisfy (matcher, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object');
    var result = matcher(obj);
    this.assert(
        result
      , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
      , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
      , flag(this, 'negate') ? false : true
      , result
    );
  }

  Assertion.addMethod('satisfy', satisfy);
  Assertion.addMethod('satisfies', satisfy);

  /**
   * ### .closeTo(expected, delta[, msg])
   *
   * Asserts that the target is a number that's within a given +/- `delta` range
   * of the given number `expected`. However, it's often best to assert that the
   * target is equal to its expected value.
   *
   *     // Recommended
   *     expect(1.5).to.equal(1.5);
   *
   *     // Not recommended
   *     expect(1.5).to.be.closeTo(1, 0.5);
   *     expect(1.5).to.be.closeTo(2, 0.5);
   *     expect(1.5).to.be.closeTo(1, 1);
   *
   * Add `.not` earlier in the chain to negate `.closeTo`.
   *
   *     expect(1.5).to.equal(1.5); // Recommended
   *     expect(1.5).to.not.be.closeTo(3, 1); // Not recommended
   *
   * `.closeTo` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??');
   *     expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1);
   *
   * The alias `.approximately` can be used interchangeably with `.closeTo`.
   *
   * @name closeTo
   * @alias approximately
   * @param {Number} expected
   * @param {Number} delta
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function closeTo(expected, delta, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');

    new Assertion(obj, flagMsg, ssfi, true).is.a('number');
    if (typeof expected !== 'number' || typeof delta !== 'number') {
      flagMsg = flagMsg ? flagMsg + ': ' : '';
      throw new AssertionError(
          flagMsg + 'the arguments to closeTo or approximately must be numbers',
          undefined,
          ssfi
      );
    }

    this.assert(
        Math.abs(obj - expected) <= delta
      , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
      , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta
    );
  }

  Assertion.addMethod('closeTo', closeTo);
  Assertion.addMethod('approximately', closeTo);

  // Note: Duplicates are ignored if testing for inclusion instead of sameness.
  function isSubsetOf(subset, superset, cmp, contains, ordered) {
    if (!contains) {
      if (subset.length !== superset.length) return false;
      superset = superset.slice();
    }

    return subset.every(function(elem, idx) {
      if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx];

      if (!cmp) {
        var matchIdx = superset.indexOf(elem);
        if (matchIdx === -1) return false;

        // Remove match from superset so not counted twice if duplicate in subset.
        if (!contains) superset.splice(matchIdx, 1);
        return true;
      }

      return superset.some(function(elem2, matchIdx) {
        if (!cmp(elem, elem2)) return false;

        // Remove match from superset so not counted twice if duplicate in subset.
        if (!contains) superset.splice(matchIdx, 1);
        return true;
      });
    });
  }

  /**
   * ### .members(set[, msg])
   *
   * Asserts that the target array has the same members as the given array
   * `set`.
   *
   *     expect([1, 2, 3]).to.have.members([2, 1, 3]);
   *     expect([1, 2, 2]).to.have.members([2, 1, 2]);
   *
   * By default, members are compared using strict (`===`) equality. Add `.deep`
   * earlier in the chain to use deep equality instead. See the `deep-eql`
   * project page for info on the deep equality algorithm:
   * https://github.com/chaijs/deep-eql.
   *
   *     // Target array deeply (but not strictly) has member `{a: 1}`
   *     expect([{a: 1}]).to.have.deep.members([{a: 1}]);
   *     expect([{a: 1}]).to.not.have.members([{a: 1}]);
   *
   * By default, order doesn't matter. Add `.ordered` earlier in the chain to
   * require that members appear in the same order.
   *
   *     expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]);
   *     expect([1, 2, 3]).to.have.members([2, 1, 3])
   *       .but.not.ordered.members([2, 1, 3]);
   *
   * By default, both arrays must be the same size. Add `.include` earlier in
   * the chain to require that the target's members be a superset of the
   * expected members. Note that duplicates are ignored in the subset when
   * `.include` is added.
   *
   *     // Target array is a superset of [1, 2] but not identical
   *     expect([1, 2, 3]).to.include.members([1, 2]);
   *     expect([1, 2, 3]).to.not.have.members([1, 2]);
   *
   *     // Duplicates in the subset are ignored
   *     expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);
   *
   * `.deep`, `.ordered`, and `.include` can all be combined. However, if
   * `.include` and `.ordered` are combined, the ordering begins at the start of
   * both arrays.
   *
   *     expect([{a: 1}, {b: 2}, {c: 3}])
   *       .to.include.deep.ordered.members([{a: 1}, {b: 2}])
   *       .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]);
   *
   * Add `.not` earlier in the chain to negate `.members`. However, it's
   * dangerous to do so. The problem is that it creates uncertain expectations
   * by asserting that the target array doesn't have all of the same members as
   * the given array `set` but may or may not have some of them. It's often best
   * to identify the exact output that's expected, and then write an assertion
   * that only accepts that exact output.
   *
   *     expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended
   *     expect([1, 2]).to.not.have.members([3, 4]); // Not recommended
   *
   * `.members` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`.
   *
   *     expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??');
   *     expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]);
   *
   * @name members
   * @param {Array} set
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  Assertion.addMethod('members', function (subset, msg) {
    if (msg) flag(this, 'message', msg);
    var obj = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');

    new Assertion(obj, flagMsg, ssfi, true).to.be.an('array');
    new Assertion(subset, flagMsg, ssfi, true).to.be.an('array');

    var contains = flag(this, 'contains');
    var ordered = flag(this, 'ordered');

    var subject, failMsg, failNegateMsg, lengthCheck;

    if (contains) {
      subject = ordered ? 'an ordered superset' : 'a superset';
      failMsg = 'expected #{this} to be ' + subject + ' of #{exp}';
      failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}';
    } else {
      subject = ordered ? 'ordered members' : 'members';
      failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}';
      failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}';
    }

    var cmp = flag(this, 'deep') ? _.eql : undefined;

    this.assert(
        isSubsetOf(subset, obj, cmp, contains, ordered)
      , failMsg
      , failNegateMsg
      , subset
      , obj
      , true
    );
  });

  /**
   * ### .oneOf(list[, msg])
   *
   * Asserts that the target is a member of the given array `list`. However,
   * it's often best to assert that the target is equal to its expected value.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.be.oneOf([1, 2, 3]); // Not recommended
   *
   * Comparisons are performed using strict (`===`) equality.
   *
   * Add `.not` earlier in the chain to negate `.oneOf`.
   *
   *     expect(1).to.equal(1); // Recommended
   *     expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended
   *
   * `.oneOf` accepts an optional `msg` argument which is a custom error message
   * to show when the assertion fails. The message can also be given as the
   * second argument to `expect`.
   *
   *     expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??');
   *     expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]);
   *
   * @name oneOf
   * @param {Array<*>} list
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function oneOf (list, msg) {
    if (msg) flag(this, 'message', msg);
    var expected = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(list, flagMsg, ssfi, true).to.be.an('array');

    this.assert(
        list.indexOf(expected) > -1
      , 'expected #{this} to be one of #{exp}'
      , 'expected #{this} to not be one of #{exp}'
      , list
      , expected
    );
  }

  Assertion.addMethod('oneOf', oneOf);


  /**
   * ### .change(subject[, prop[, msg]])
   *
   * When one argument is provided, `.change` asserts that the given function
   * `subject` returns a different value when it's invoked before the target
   * function compared to when it's invoked afterward. However, it's often best
   * to assert that `subject` is equal to its expected value.
   *
   *     var dots = ''
   *       , addDot = function () { dots += '.'; }
   *       , getDots = function () { return dots; };
   *
   *     // Recommended
   *     expect(getDots()).to.equal('');
   *     addDot();
   *     expect(getDots()).to.equal('.');
   *
   *     // Not recommended
   *     expect(addDot).to.change(getDots);
   *
   * When two arguments are provided, `.change` asserts that the value of the
   * given object `subject`'s `prop` property is different before invoking the
   * target function compared to afterward.
   *
   *     var myObj = {dots: ''}
   *       , addDot = function () { myObj.dots += '.'; };
   *
   *     // Recommended
   *     expect(myObj).to.have.property('dots', '');
   *     addDot();
   *     expect(myObj).to.have.property('dots', '.');
   *
   *     // Not recommended
   *     expect(addDot).to.change(myObj, 'dots');
   *
   * Strict (`===`) equality is used to compare before and after values.
   *
   * Add `.not` earlier in the chain to negate `.change`.
   *
   *     var dots = ''
   *       , noop = function () {}
   *       , getDots = function () { return dots; };
   *
   *     expect(noop).to.not.change(getDots);
   *
   *     var myObj = {dots: ''}
   *       , noop = function () {};
   *
   *     expect(noop).to.not.change(myObj, 'dots');
   *
   * `.change` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`. When not providing two arguments, always
   * use the second form.
   *
   *     var myObj = {dots: ''}
   *       , addDot = function () { myObj.dots += '.'; };
   *
   *     expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??');
   *
   *     var dots = ''
   *       , addDot = function () { dots += '.'; }
   *       , getDots = function () { return dots; };
   *
   *     expect(addDot, 'nooo why fail??').to.not.change(getDots);
   *
   * `.change` also causes all `.by` assertions that follow in the chain to
   * assert how much a numeric subject was increased or decreased by. However,
   * it's dangerous to use `.change.by`. The problem is that it creates
   * uncertain expectations by asserting that the subject either increases by
   * the given delta, or that it decreases by the given delta. It's often best
   * to identify the exact output that's expected, and then write an assertion
   * that only accepts that exact output.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; }
   *       , subtractTwo = function () { myObj.val -= 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended
   *     expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended
   *
   *     expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended
   *     expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended
   *
   * The alias `.changes` can be used interchangeably with `.change`.
   *
   * @name change
   * @alias changes
   * @param {String} subject
   * @param {String} prop name _optional_
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertChanges (subject, prop, msg) {
    if (msg) flag(this, 'message', msg);
    var fn = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(fn, flagMsg, ssfi, true).is.a('function');

    var initial;
    if (!prop) {
      new Assertion(subject, flagMsg, ssfi, true).is.a('function');
      initial = subject();
    } else {
      new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);
      initial = subject[prop];
    }

    fn();

    var final = prop === undefined || prop === null ? subject() : subject[prop];
    var msgObj = prop === undefined || prop === null ? initial : '.' + prop;

    // This gets flagged because of the .by(delta) assertion
    flag(this, 'deltaMsgObj', msgObj);
    flag(this, 'initialDeltaValue', initial);
    flag(this, 'finalDeltaValue', final);
    flag(this, 'deltaBehavior', 'change');
    flag(this, 'realDelta', final !== initial);

    this.assert(
      initial !== final
      , 'expected ' + msgObj + ' to change'
      , 'expected ' + msgObj + ' to not change'
    );
  }

  Assertion.addMethod('change', assertChanges);
  Assertion.addMethod('changes', assertChanges);

  /**
   * ### .increase(subject[, prop[, msg]])
   *
   * When one argument is provided, `.increase` asserts that the given function
   * `subject` returns a greater number when it's invoked after invoking the
   * target function compared to when it's invoked beforehand. `.increase` also
   * causes all `.by` assertions that follow in the chain to assert how much
   * greater of a number is returned. It's often best to assert that the return
   * value increased by the expected amount, rather than asserting it increased
   * by any amount.
   *
   *     var val = 1
   *       , addTwo = function () { val += 2; }
   *       , getVal = function () { return val; };
   *
   *     expect(addTwo).to.increase(getVal).by(2); // Recommended
   *     expect(addTwo).to.increase(getVal); // Not recommended
   *
   * When two arguments are provided, `.increase` asserts that the value of the
   * given object `subject`'s `prop` property is greater after invoking the
   * target function compared to beforehand.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended
   *     expect(addTwo).to.increase(myObj, 'val'); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.increase`. However, it's
   * dangerous to do so. The problem is that it creates uncertain expectations
   * by asserting that the subject either decreases, or that it stays the same.
   * It's often best to identify the exact output that's expected, and then
   * write an assertion that only accepts that exact output.
   *
   * When the subject is expected to decrease, it's often best to assert that it
   * decreased by the expected amount.
   *
   *     var myObj = {val: 1}
   *       , subtractTwo = function () { myObj.val -= 2; };
   *
   *     expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended
   *     expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended
   * 
   * When the subject is expected to stay the same, it's often best to assert
   * exactly that.
   *
   *     var myObj = {val: 1}
   *       , noop = function () {};
   *
   *     expect(noop).to.not.change(myObj, 'val'); // Recommended
   *     expect(noop).to.not.increase(myObj, 'val'); // Not recommended
   *
   * `.increase` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`. When not providing two arguments, always
   * use the second form.
   *
   *     var myObj = {val: 1}
   *       , noop = function () {};
   *
   *     expect(noop).to.increase(myObj, 'val', 'nooo why fail??');
   *
   *     var val = 1
   *       , noop = function () {}
   *       , getVal = function () { return val; };
   *
   *     expect(noop, 'nooo why fail??').to.increase(getVal);
   *
   * The alias `.increases` can be used interchangeably with `.increase`.
   *
   * @name increase
   * @alias increases
   * @param {String|Function} subject
   * @param {String} prop name _optional_
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertIncreases (subject, prop, msg) {
    if (msg) flag(this, 'message', msg);
    var fn = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(fn, flagMsg, ssfi, true).is.a('function');

    var initial;
    if (!prop) {
      new Assertion(subject, flagMsg, ssfi, true).is.a('function');
      initial = subject();
    } else {
      new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);
      initial = subject[prop];
    }

    // Make sure that the target is a number
    new Assertion(initial, flagMsg, ssfi, true).is.a('number');

    fn();

    var final = prop === undefined || prop === null ? subject() : subject[prop];
    var msgObj = prop === undefined || prop === null ? initial : '.' + prop;

    flag(this, 'deltaMsgObj', msgObj);
    flag(this, 'initialDeltaValue', initial);
    flag(this, 'finalDeltaValue', final);
    flag(this, 'deltaBehavior', 'increase');
    flag(this, 'realDelta', final - initial);

    this.assert(
      final - initial > 0
      , 'expected ' + msgObj + ' to increase'
      , 'expected ' + msgObj + ' to not increase'
    );
  }

  Assertion.addMethod('increase', assertIncreases);
  Assertion.addMethod('increases', assertIncreases);

  /**
   * ### .decrease(subject[, prop[, msg]])
   *
   * When one argument is provided, `.decrease` asserts that the given function
   * `subject` returns a lesser number when it's invoked after invoking the
   * target function compared to when it's invoked beforehand. `.decrease` also
   * causes all `.by` assertions that follow in the chain to assert how much
   * lesser of a number is returned. It's often best to assert that the return
   * value decreased by the expected amount, rather than asserting it decreased
   * by any amount.
   *
   *     var val = 1
   *       , subtractTwo = function () { val -= 2; }
   *       , getVal = function () { return val; };
   *
   *     expect(subtractTwo).to.decrease(getVal).by(2); // Recommended
   *     expect(subtractTwo).to.decrease(getVal); // Not recommended
   *
   * When two arguments are provided, `.decrease` asserts that the value of the
   * given object `subject`'s `prop` property is lesser after invoking the
   * target function compared to beforehand. 
   *
   *     var myObj = {val: 1}
   *       , subtractTwo = function () { myObj.val -= 2; };
   *
   *     expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended
   *     expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.decrease`. However, it's
   * dangerous to do so. The problem is that it creates uncertain expectations
   * by asserting that the subject either increases, or that it stays the same.
   * It's often best to identify the exact output that's expected, and then
   * write an assertion that only accepts that exact output.
   *
   * When the subject is expected to increase, it's often best to assert that it
   * increased by the expected amount.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended
   *     expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended
   * 
   * When the subject is expected to stay the same, it's often best to assert
   * exactly that.
   *
   *     var myObj = {val: 1}
   *       , noop = function () {};
   *
   *     expect(noop).to.not.change(myObj, 'val'); // Recommended
   *     expect(noop).to.not.decrease(myObj, 'val'); // Not recommended
   *
   * `.decrease` accepts an optional `msg` argument which is a custom error
   * message to show when the assertion fails. The message can also be given as
   * the second argument to `expect`. When not providing two arguments, always
   * use the second form.
   *
   *     var myObj = {val: 1}
   *       , noop = function () {};
   *
   *     expect(noop).to.decrease(myObj, 'val', 'nooo why fail??');
   *
   *     var val = 1
   *       , noop = function () {}
   *       , getVal = function () { return val; };
   *
   *     expect(noop, 'nooo why fail??').to.decrease(getVal);
   *
   * The alias `.decreases` can be used interchangeably with `.decrease`.
   *
   * @name decrease
   * @alias decreases
   * @param {String|Function} subject
   * @param {String} prop name _optional_
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertDecreases (subject, prop, msg) {
    if (msg) flag(this, 'message', msg);
    var fn = flag(this, 'object')
      , flagMsg = flag(this, 'message')
      , ssfi = flag(this, 'ssfi');
    new Assertion(fn, flagMsg, ssfi, true).is.a('function');

    var initial;
    if (!prop) {
      new Assertion(subject, flagMsg, ssfi, true).is.a('function');
      initial = subject();
    } else {
      new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);
      initial = subject[prop];
    }

    // Make sure that the target is a number
    new Assertion(initial, flagMsg, ssfi, true).is.a('number');

    fn();

    var final = prop === undefined || prop === null ? subject() : subject[prop];
    var msgObj = prop === undefined || prop === null ? initial : '.' + prop;

    flag(this, 'deltaMsgObj', msgObj);
    flag(this, 'initialDeltaValue', initial);
    flag(this, 'finalDeltaValue', final);
    flag(this, 'deltaBehavior', 'decrease');
    flag(this, 'realDelta', initial - final);

    this.assert(
      final - initial < 0
      , 'expected ' + msgObj + ' to decrease'
      , 'expected ' + msgObj + ' to not decrease'
    );
  }

  Assertion.addMethod('decrease', assertDecreases);
  Assertion.addMethod('decreases', assertDecreases);

  /**
   * ### .by(delta[, msg])
   *
   * When following an `.increase` assertion in the chain, `.by` asserts that
   * the subject of the `.increase` assertion increased by the given `delta`.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(2);
   *
   * When following a `.decrease` assertion in the chain, `.by` asserts that the
   * subject of the `.decrease` assertion decreased by the given `delta`.
   *
   *     var myObj = {val: 1}
   *       , subtractTwo = function () { myObj.val -= 2; };
   *
   *     expect(subtractTwo).to.decrease(myObj, 'val').by(2);
   *
   * When following a `.change` assertion in the chain, `.by` asserts that the
   * subject of the `.change` assertion either increased or decreased by the
   * given `delta`. However, it's dangerous to use `.change.by`. The problem is
   * that it creates uncertain expectations. It's often best to identify the
   * exact output that's expected, and then write an assertion that only accepts
   * that exact output.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; }
   *       , subtractTwo = function () { myObj.val -= 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended
   *     expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended
   *
   *     expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended
   *     expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended
   *
   * Add `.not` earlier in the chain to negate `.by`. However, it's often best
   * to assert that the subject changed by its expected delta, rather than
   * asserting that it didn't change by one of countless unexpected deltas.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; };
   *
   *     // Recommended
   *     expect(addTwo).to.increase(myObj, 'val').by(2);
   *
   *     // Not recommended
   *     expect(addTwo).to.increase(myObj, 'val').but.not.by(3);
   *
   * `.by` accepts an optional `msg` argument which is a custom error message to
   * show when the assertion fails. The message can also be given as the second
   * argument to `expect`.
   *
   *     var myObj = {val: 1}
   *       , addTwo = function () { myObj.val += 2; };
   *
   *     expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??');
   *     expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3);
   *
   * @name by
   * @param {Number} delta
   * @param {String} msg _optional_
   * @namespace BDD
   * @api public
   */

  function assertDelta(delta, msg) {
    if (msg) flag(this, 'message', msg);

    var msgObj = flag(this, 'deltaMsgObj');
    var initial = flag(this, 'initialDeltaValue');
    var final = flag(this, 'finalDeltaValue');
    var behavior = flag(this, 'deltaBehavior');
    var realDelta = flag(this, 'realDelta');

    var expression;
    if (behavior === 'change') {
      expression = Math.abs(final - initial) === Math.abs(delta);
    } else {
      expression = realDelta === Math.abs(delta);
    }

    this.assert(
      expression
      , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta
      , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta
    );
  }

  Assertion.addMethod('by', assertDelta);

  /**
   * ### .extensible
   *
   * Asserts that the target is extensible, which means that new properties can
   * be added to it. Primitives are never extensible.
   *
   *     expect({a: 1}).to.be.extensible;
   *
   * Add `.not` earlier in the chain to negate `.extensible`.
   *
   *     var nonExtensibleObject = Object.preventExtensions({})
   *       , sealedObject = Object.seal({})
   *       , frozenObject = Object.freeze({});
   *
   *     expect(nonExtensibleObject).to.not.be.extensible;
   *     expect(sealedObject).to.not.be.extensible;
   *     expect(frozenObject).to.not.be.extensible;
   *     expect(1).to.not.be.extensible;
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect(1, 'nooo why fail??').to.be.extensible;
   *
   * @name extensible
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('extensible', function() {
    var obj = flag(this, 'object');

    // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.
    // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible
    // The following provides ES6 behavior for ES5 environments.

    var isExtensible = obj === Object(obj) && Object.isExtensible(obj);

    this.assert(
      isExtensible
      , 'expected #{this} to be extensible'
      , 'expected #{this} to not be extensible'
    );
  });

  /**
   * ### .sealed
   *
   * Asserts that the target is sealed, which means that new properties can't be
   * added to it, and its existing properties can't be reconfigured or deleted.
   * However, it's possible that its existing properties can still be reassigned
   * to different values. Primitives are always sealed.
   *
   *     var sealedObject = Object.seal({});
   *     var frozenObject = Object.freeze({});
   *
   *     expect(sealedObject).to.be.sealed;
   *     expect(frozenObject).to.be.sealed;
   *     expect(1).to.be.sealed;
   *
   * Add `.not` earlier in the chain to negate `.sealed`.
   *
   *     expect({a: 1}).to.not.be.sealed;
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect({a: 1}, 'nooo why fail??').to.be.sealed;
   *
   * @name sealed
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('sealed', function() {
    var obj = flag(this, 'object');

    // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.
    // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.
    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed
    // The following provides ES6 behavior for ES5 environments.

    var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true;

    this.assert(
      isSealed
      , 'expected #{this} to be sealed'
      , 'expected #{this} to not be sealed'
    );
  });

  /**
   * ### .frozen
   *
   * Asserts that the target is frozen, which means that new properties can't be
   * added to it, and its existing properties can't be reassigned to different
   * values, reconfigured, or deleted. Primitives are always frozen.
   *
   *     var frozenObject = Object.freeze({});
   *
   *     expect(frozenObject).to.be.frozen;
   *     expect(1).to.be.frozen;
   *
   * Add `.not` earlier in the chain to negate `.frozen`.
   *
   *     expect({a: 1}).to.not.be.frozen;
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect({a: 1}, 'nooo why fail??').to.be.frozen;
   *
   * @name frozen
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('frozen', function() {
    var obj = flag(this, 'object');

    // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.
    // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.
    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen
    // The following provides ES6 behavior for ES5 environments.

    var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true;

    this.assert(
      isFrozen
      , 'expected #{this} to be frozen'
      , 'expected #{this} to not be frozen'
    );
  });

  /**
   * ### .finite
   *
   * Asserts that the target is a number, and isn't `NaN` or positive/negative
   * `Infinity`.
   *
   *     expect(1).to.be.finite;
   *
   * Add `.not` earlier in the chain to negate `.finite`. However, it's
   * dangerous to do so. The problem is that it creates uncertain expectations
   * by asserting that the subject either isn't a number, or that it's `NaN`, or
   * that it's positive `Infinity`, or that it's negative `Infinity`. It's often
   * best to identify the exact output that's expected, and then write an
   * assertion that only accepts that exact output.
   *
   * When the target isn't expected to be a number, it's often best to assert
   * that it's the expected type, rather than asserting that it isn't one of
   * many unexpected types.
   *
   *     expect('foo').to.be.a('string'); // Recommended
   *     expect('foo').to.not.be.finite; // Not recommended
   *
   * When the target is expected to be `NaN`, it's often best to assert exactly
   * that.
   *
   *     expect(NaN).to.be.NaN; // Recommended
   *     expect(NaN).to.not.be.finite; // Not recommended
   *
   * When the target is expected to be positive infinity, it's often best to
   * assert exactly that.
   *
   *     expect(Infinity).to.equal(Infinity); // Recommended
   *     expect(Infinity).to.not.be.finite; // Not recommended
   *
   * When the target is expected to be negative infinity, it's often best to
   * assert exactly that.
   *
   *     expect(-Infinity).to.equal(-Infinity); // Recommended
   *     expect(-Infinity).to.not.be.finite; // Not recommended
   *
   * A custom error message can be given as the second argument to `expect`.
   *
   *     expect('foo', 'nooo why fail??').to.be.finite;
   *
   * @name finite
   * @namespace BDD
   * @api public
   */

  Assertion.addProperty('finite', function(msg) {
    var obj = flag(this, 'object');

    this.assert(
        typeof obj === "number" && isFinite(obj)
      , 'expected #{this} to be a finite number'
      , 'expected #{this} to not be a finite number'
    );
  });
};


/***/ }),
/* 606 */
/***/ (function(module, exports) {

/*!
 * chai
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */


module.exports = function (chai, util) {

  /*!
   * Chai dependencies.
   */

  var Assertion = chai.Assertion
    , flag = util.flag;

  /*!
   * Module export.
   */

  /**
   * ### assert(expression, message)
   *
   * Write your own test expressions.
   *
   *     assert('foo' !== 'bar', 'foo is not bar');
   *     assert(Array.isArray([]), 'empty arrays are arrays');
   *
   * @param {Mixed} expression to test for truthiness
   * @param {String} message to display on error
   * @name assert
   * @namespace Assert
   * @api public
   */

  var assert = chai.assert = function (express, errmsg) {
    var test = new Assertion(null, null, chai.assert, true);
    test.assert(
        express
      , errmsg
      , '[ negation message unavailable ]'
    );
  };

  /**
   * ### .fail(actual, expected, [message], [operator])
   *
   * Throw a failure. Node.js `assert` module-compatible.
   *
   * @name fail
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @param {String} operator
   * @namespace Assert
   * @api public
   */

  assert.fail = function (actual, expected, message, operator) {
    message = message || 'assert.fail()';
    throw new chai.AssertionError(message, {
        actual: actual
      , expected: expected
      , operator: operator
    }, assert.fail);
  };

  /**
   * ### .isOk(object, [message])
   *
   * Asserts that `object` is truthy.
   *
   *     assert.isOk('everything', 'everything is ok');
   *     assert.isOk(false, 'this will fail');
   *
   * @name isOk
   * @alias ok
   * @param {Mixed} object to test
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isOk = function (val, msg) {
    new Assertion(val, msg, assert.isOk, true).is.ok;
  };

  /**
   * ### .isNotOk(object, [message])
   *
   * Asserts that `object` is falsy.
   *
   *     assert.isNotOk('everything', 'this will fail');
   *     assert.isNotOk(false, 'this will pass');
   *
   * @name isNotOk
   * @alias notOk
   * @param {Mixed} object to test
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotOk = function (val, msg) {
    new Assertion(val, msg, assert.isNotOk, true).is.not.ok;
  };

  /**
   * ### .equal(actual, expected, [message])
   *
   * Asserts non-strict equality (`==`) of `actual` and `expected`.
   *
   *     assert.equal(3, '3', '== coerces values to strings');
   *
   * @name equal
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.equal = function (act, exp, msg) {
    var test = new Assertion(act, msg, assert.equal, true);

    test.assert(
        exp == flag(test, 'object')
      , 'expected #{this} to equal #{exp}'
      , 'expected #{this} to not equal #{act}'
      , exp
      , act
      , true
    );
  };

  /**
   * ### .notEqual(actual, expected, [message])
   *
   * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
   *
   *     assert.notEqual(3, 4, 'these numbers are not equal');
   *
   * @name notEqual
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notEqual = function (act, exp, msg) {
    var test = new Assertion(act, msg, assert.notEqual, true);

    test.assert(
        exp != flag(test, 'object')
      , 'expected #{this} to not equal #{exp}'
      , 'expected #{this} to equal #{act}'
      , exp
      , act
      , true
    );
  };

  /**
   * ### .strictEqual(actual, expected, [message])
   *
   * Asserts strict equality (`===`) of `actual` and `expected`.
   *
   *     assert.strictEqual(true, true, 'these booleans are strictly equal');
   *
   * @name strictEqual
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.strictEqual = function (act, exp, msg) {
    new Assertion(act, msg, assert.strictEqual, true).to.equal(exp);
  };

  /**
   * ### .notStrictEqual(actual, expected, [message])
   *
   * Asserts strict inequality (`!==`) of `actual` and `expected`.
   *
   *     assert.notStrictEqual(3, '3', 'no coercion for strict equality');
   *
   * @name notStrictEqual
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notStrictEqual = function (act, exp, msg) {
    new Assertion(act, msg, assert.notStrictEqual, true).to.not.equal(exp);
  };

  /**
   * ### .deepEqual(actual, expected, [message])
   *
   * Asserts that `actual` is deeply equal to `expected`.
   *
   *     assert.deepEqual({ tea: 'green' }, { tea: 'green' });
   *
   * @name deepEqual
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @alias deepStrictEqual
   * @namespace Assert
   * @api public
   */

  assert.deepEqual = assert.deepStrictEqual = function (act, exp, msg) {
    new Assertion(act, msg, assert.deepEqual, true).to.eql(exp);
  };

  /**
   * ### .notDeepEqual(actual, expected, [message])
   *
   * Assert that `actual` is not deeply equal to `expected`.
   *
   *     assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
   *
   * @name notDeepEqual
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notDeepEqual = function (act, exp, msg) {
    new Assertion(act, msg, assert.notDeepEqual, true).to.not.eql(exp);
  };

   /**
   * ### .isAbove(valueToCheck, valueToBeAbove, [message])
   *
   * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`.
   *
   *     assert.isAbove(5, 2, '5 is strictly greater than 2');
   *
   * @name isAbove
   * @param {Mixed} valueToCheck
   * @param {Mixed} valueToBeAbove
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isAbove = function (val, abv, msg) {
    new Assertion(val, msg, assert.isAbove, true).to.be.above(abv);
  };

   /**
   * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])
   *
   * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`.
   *
   *     assert.isAtLeast(5, 2, '5 is greater or equal to 2');
   *     assert.isAtLeast(3, 3, '3 is greater or equal to 3');
   *
   * @name isAtLeast
   * @param {Mixed} valueToCheck
   * @param {Mixed} valueToBeAtLeast
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isAtLeast = function (val, atlst, msg) {
    new Assertion(val, msg, assert.isAtLeast, true).to.be.least(atlst);
  };

   /**
   * ### .isBelow(valueToCheck, valueToBeBelow, [message])
   *
   * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`.
   *
   *     assert.isBelow(3, 6, '3 is strictly less than 6');
   *
   * @name isBelow
   * @param {Mixed} valueToCheck
   * @param {Mixed} valueToBeBelow
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isBelow = function (val, blw, msg) {
    new Assertion(val, msg, assert.isBelow, true).to.be.below(blw);
  };

   /**
   * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])
   *
   * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`.
   *
   *     assert.isAtMost(3, 6, '3 is less than or equal to 6');
   *     assert.isAtMost(4, 4, '4 is less than or equal to 4');
   *
   * @name isAtMost
   * @param {Mixed} valueToCheck
   * @param {Mixed} valueToBeAtMost
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isAtMost = function (val, atmst, msg) {
    new Assertion(val, msg, assert.isAtMost, true).to.be.most(atmst);
  };

  /**
   * ### .isTrue(value, [message])
   *
   * Asserts that `value` is true.
   *
   *     var teaServed = true;
   *     assert.isTrue(teaServed, 'the tea has been served');
   *
   * @name isTrue
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isTrue = function (val, msg) {
    new Assertion(val, msg, assert.isTrue, true).is['true'];
  };

  /**
   * ### .isNotTrue(value, [message])
   *
   * Asserts that `value` is not true.
   *
   *     var tea = 'tasty chai';
   *     assert.isNotTrue(tea, 'great, time for tea!');
   *
   * @name isNotTrue
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotTrue = function (val, msg) {
    new Assertion(val, msg, assert.isNotTrue, true).to.not.equal(true);
  };

  /**
   * ### .isFalse(value, [message])
   *
   * Asserts that `value` is false.
   *
   *     var teaServed = false;
   *     assert.isFalse(teaServed, 'no tea yet? hmm...');
   *
   * @name isFalse
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isFalse = function (val, msg) {
    new Assertion(val, msg, assert.isFalse, true).is['false'];
  };

  /**
   * ### .isNotFalse(value, [message])
   *
   * Asserts that `value` is not false.
   *
   *     var tea = 'tasty chai';
   *     assert.isNotFalse(tea, 'great, time for tea!');
   *
   * @name isNotFalse
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotFalse = function (val, msg) {
    new Assertion(val, msg, assert.isNotFalse, true).to.not.equal(false);
  };

  /**
   * ### .isNull(value, [message])
   *
   * Asserts that `value` is null.
   *
   *     assert.isNull(err, 'there was no error');
   *
   * @name isNull
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNull = function (val, msg) {
    new Assertion(val, msg, assert.isNull, true).to.equal(null);
  };

  /**
   * ### .isNotNull(value, [message])
   *
   * Asserts that `value` is not null.
   *
   *     var tea = 'tasty chai';
   *     assert.isNotNull(tea, 'great, time for tea!');
   *
   * @name isNotNull
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotNull = function (val, msg) {
    new Assertion(val, msg, assert.isNotNull, true).to.not.equal(null);
  };

  /**
   * ### .isNaN
   *
   * Asserts that value is NaN.
   *
   *     assert.isNaN(NaN, 'NaN is NaN');
   *
   * @name isNaN
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNaN = function (val, msg) {
    new Assertion(val, msg, assert.isNaN, true).to.be.NaN;
  };

  /**
   * ### .isNotNaN
   *
   * Asserts that value is not NaN.
   *
   *     assert.isNotNaN(4, '4 is not NaN');
   *
   * @name isNotNaN
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */
  assert.isNotNaN = function (val, msg) {
    new Assertion(val, msg, assert.isNotNaN, true).not.to.be.NaN;
  };

  /**
   * ### .exists
   *
   * Asserts that the target is neither `null` nor `undefined`.
   *
   *     var foo = 'hi';
   *
   *     assert.exists(foo, 'foo is neither `null` nor `undefined`');
   *
   * @name exists
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.exists = function (val, msg) {
    new Assertion(val, msg, assert.exists, true).to.exist;
  };

  /**
   * ### .notExists
   *
   * Asserts that the target is either `null` or `undefined`.
   *
   *     var bar = null
   *       , baz;
   *
   *     assert.notExists(bar);
   *     assert.notExists(baz, 'baz is either null or undefined');
   *
   * @name notExists
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notExists = function (val, msg) {
    new Assertion(val, msg, assert.notExists, true).to.not.exist;
  };

  /**
   * ### .isUndefined(value, [message])
   *
   * Asserts that `value` is `undefined`.
   *
   *     var tea;
   *     assert.isUndefined(tea, 'no tea defined');
   *
   * @name isUndefined
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isUndefined = function (val, msg) {
    new Assertion(val, msg, assert.isUndefined, true).to.equal(undefined);
  };

  /**
   * ### .isDefined(value, [message])
   *
   * Asserts that `value` is not `undefined`.
   *
   *     var tea = 'cup of chai';
   *     assert.isDefined(tea, 'tea has been defined');
   *
   * @name isDefined
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isDefined = function (val, msg) {
    new Assertion(val, msg, assert.isDefined, true).to.not.equal(undefined);
  };

  /**
   * ### .isFunction(value, [message])
   *
   * Asserts that `value` is a function.
   *
   *     function serveTea() { return 'cup of tea'; };
   *     assert.isFunction(serveTea, 'great, we can have tea now');
   *
   * @name isFunction
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isFunction = function (val, msg) {
    new Assertion(val, msg, assert.isFunction, true).to.be.a('function');
  };

  /**
   * ### .isNotFunction(value, [message])
   *
   * Asserts that `value` is _not_ a function.
   *
   *     var serveTea = [ 'heat', 'pour', 'sip' ];
   *     assert.isNotFunction(serveTea, 'great, we have listed the steps');
   *
   * @name isNotFunction
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotFunction = function (val, msg) {
    new Assertion(val, msg, assert.isNotFunction, true).to.not.be.a('function');
  };

  /**
   * ### .isObject(value, [message])
   *
   * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).
   * _The assertion does not match subclassed objects._
   *
   *     var selection = { name: 'Chai', serve: 'with spices' };
   *     assert.isObject(selection, 'tea selection is an object');
   *
   * @name isObject
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isObject = function (val, msg) {
    new Assertion(val, msg, assert.isObject, true).to.be.a('object');
  };

  /**
   * ### .isNotObject(value, [message])
   *
   * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).
   *
   *     var selection = 'chai'
   *     assert.isNotObject(selection, 'tea selection is not an object');
   *     assert.isNotObject(null, 'null is not an object');
   *
   * @name isNotObject
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotObject = function (val, msg) {
    new Assertion(val, msg, assert.isNotObject, true).to.not.be.a('object');
  };

  /**
   * ### .isArray(value, [message])
   *
   * Asserts that `value` is an array.
   *
   *     var menu = [ 'green', 'chai', 'oolong' ];
   *     assert.isArray(menu, 'what kind of tea do we want?');
   *
   * @name isArray
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isArray = function (val, msg) {
    new Assertion(val, msg, assert.isArray, true).to.be.an('array');
  };

  /**
   * ### .isNotArray(value, [message])
   *
   * Asserts that `value` is _not_ an array.
   *
   *     var menu = 'green|chai|oolong';
   *     assert.isNotArray(menu, 'what kind of tea do we want?');
   *
   * @name isNotArray
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotArray = function (val, msg) {
    new Assertion(val, msg, assert.isNotArray, true).to.not.be.an('array');
  };

  /**
   * ### .isString(value, [message])
   *
   * Asserts that `value` is a string.
   *
   *     var teaOrder = 'chai';
   *     assert.isString(teaOrder, 'order placed');
   *
   * @name isString
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isString = function (val, msg) {
    new Assertion(val, msg, assert.isString, true).to.be.a('string');
  };

  /**
   * ### .isNotString(value, [message])
   *
   * Asserts that `value` is _not_ a string.
   *
   *     var teaOrder = 4;
   *     assert.isNotString(teaOrder, 'order placed');
   *
   * @name isNotString
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotString = function (val, msg) {
    new Assertion(val, msg, assert.isNotString, true).to.not.be.a('string');
  };

  /**
   * ### .isNumber(value, [message])
   *
   * Asserts that `value` is a number.
   *
   *     var cups = 2;
   *     assert.isNumber(cups, 'how many cups');
   *
   * @name isNumber
   * @param {Number} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNumber = function (val, msg) {
    new Assertion(val, msg, assert.isNumber, true).to.be.a('number');
  };

  /**
   * ### .isNotNumber(value, [message])
   *
   * Asserts that `value` is _not_ a number.
   *
   *     var cups = '2 cups please';
   *     assert.isNotNumber(cups, 'how many cups');
   *
   * @name isNotNumber
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotNumber = function (val, msg) {
    new Assertion(val, msg, assert.isNotNumber, true).to.not.be.a('number');
  };

   /**
   * ### .isFinite(value, [message])
   *
   * Asserts that `value` is a finite number. Unlike `.isNumber`, this will fail for `NaN` and `Infinity`.
   *
   *     var cups = 2;
   *     assert.isFinite(cups, 'how many cups');
   *
   *     assert.isFinite(NaN); // throws
   *
   * @name isFinite
   * @param {Number} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isFinite = function (val, msg) {
    new Assertion(val, msg, assert.isFinite, true).to.be.finite;
  };

  /**
   * ### .isBoolean(value, [message])
   *
   * Asserts that `value` is a boolean.
   *
   *     var teaReady = true
   *       , teaServed = false;
   *
   *     assert.isBoolean(teaReady, 'is the tea ready');
   *     assert.isBoolean(teaServed, 'has tea been served');
   *
   * @name isBoolean
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isBoolean = function (val, msg) {
    new Assertion(val, msg, assert.isBoolean, true).to.be.a('boolean');
  };

  /**
   * ### .isNotBoolean(value, [message])
   *
   * Asserts that `value` is _not_ a boolean.
   *
   *     var teaReady = 'yep'
   *       , teaServed = 'nope';
   *
   *     assert.isNotBoolean(teaReady, 'is the tea ready');
   *     assert.isNotBoolean(teaServed, 'has tea been served');
   *
   * @name isNotBoolean
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.isNotBoolean = function (val, msg) {
    new Assertion(val, msg, assert.isNotBoolean, true).to.not.be.a('boolean');
  };

  /**
   * ### .typeOf(value, name, [message])
   *
   * Asserts that `value`'s type is `name`, as determined by
   * `Object.prototype.toString`.
   *
   *     assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
   *     assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
   *     assert.typeOf('tea', 'string', 'we have a string');
   *     assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
   *     assert.typeOf(null, 'null', 'we have a null');
   *     assert.typeOf(undefined, 'undefined', 'we have an undefined');
   *
   * @name typeOf
   * @param {Mixed} value
   * @param {String} name
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.typeOf = function (val, type, msg) {
    new Assertion(val, msg, assert.typeOf, true).to.be.a(type);
  };

  /**
   * ### .notTypeOf(value, name, [message])
   *
   * Asserts that `value`'s type is _not_ `name`, as determined by
   * `Object.prototype.toString`.
   *
   *     assert.notTypeOf('tea', 'number', 'strings are not numbers');
   *
   * @name notTypeOf
   * @param {Mixed} value
   * @param {String} typeof name
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notTypeOf = function (val, type, msg) {
    new Assertion(val, msg, assert.notTypeOf, true).to.not.be.a(type);
  };

  /**
   * ### .instanceOf(object, constructor, [message])
   *
   * Asserts that `value` is an instance of `constructor`.
   *
   *     var Tea = function (name) { this.name = name; }
   *       , chai = new Tea('chai');
   *
   *     assert.instanceOf(chai, Tea, 'chai is an instance of tea');
   *
   * @name instanceOf
   * @param {Object} object
   * @param {Constructor} constructor
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.instanceOf = function (val, type, msg) {
    new Assertion(val, msg, assert.instanceOf, true).to.be.instanceOf(type);
  };

  /**
   * ### .notInstanceOf(object, constructor, [message])
   *
   * Asserts `value` is not an instance of `constructor`.
   *
   *     var Tea = function (name) { this.name = name; }
   *       , chai = new String('chai');
   *
   *     assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
   *
   * @name notInstanceOf
   * @param {Object} object
   * @param {Constructor} constructor
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notInstanceOf = function (val, type, msg) {
    new Assertion(val, msg, assert.notInstanceOf, true)
      .to.not.be.instanceOf(type);
  };

  /**
   * ### .include(haystack, needle, [message])
   *
   * Asserts that `haystack` includes `needle`. Can be used to assert the
   * inclusion of a value in an array, a substring in a string, or a subset of
   * properties in an object.
   *
   *     assert.include([1,2,3], 2, 'array contains value');
   *     assert.include('foobar', 'foo', 'string contains substring');
   *     assert.include({ foo: 'bar', hello: 'universe' }, { foo: 'bar' }, 'object contains property');
   *
   * Strict equality (===) is used. When asserting the inclusion of a value in
   * an array, the array is searched for an element that's strictly equal to the
   * given value. When asserting a subset of properties in an object, the object
   * is searched for the given property keys, checking that each one is present
   * and stricty equal to the given property value. For instance:
   *
   *     var obj1 = {a: 1}
   *       , obj2 = {b: 2};
   *     assert.include([obj1, obj2], obj1);
   *     assert.include({foo: obj1, bar: obj2}, {foo: obj1});
   *     assert.include({foo: obj1, bar: obj2}, {foo: obj1, bar: obj2});
   *
   * @name include
   * @param {Array|String} haystack
   * @param {Mixed} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.include = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.include, true).include(inc);
  };

  /**
   * ### .notInclude(haystack, needle, [message])
   *
   * Asserts that `haystack` does not include `needle`. Can be used to assert
   * the absence of a value in an array, a substring in a string, or a subset of
   * properties in an object.
   *
   *     assert.notInclude([1,2,3], 4, 'array doesn't contain value');
   *     assert.notInclude('foobar', 'baz', 'string doesn't contain substring');
   *     assert.notInclude({ foo: 'bar', hello: 'universe' }, { foo: 'baz' }, 'object doesn't contain property');
   *
   * Strict equality (===) is used. When asserting the absence of a value in an
   * array, the array is searched to confirm the absence of an element that's
   * strictly equal to the given value. When asserting a subset of properties in
   * an object, the object is searched to confirm that at least one of the given
   * property keys is either not present or not strictly equal to the given
   * property value. For instance:
   *
   *     var obj1 = {a: 1}
   *       , obj2 = {b: 2};
   *     assert.notInclude([obj1, obj2], {a: 1});
   *     assert.notInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});
   *     assert.notInclude({foo: obj1, bar: obj2}, {foo: obj1, bar: {b: 2}});
   *
   * @name notInclude
   * @param {Array|String} haystack
   * @param {Mixed} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notInclude = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.notInclude, true).not.include(inc);
  };

  /**
   * ### .deepInclude(haystack, needle, [message])
   *
   * Asserts that `haystack` includes `needle`. Can be used to assert the
   * inclusion of a value in an array or a subset of properties in an object.
   * Deep equality is used.
   *
   *     var obj1 = {a: 1}
   *       , obj2 = {b: 2};
   *     assert.deepInclude([obj1, obj2], {a: 1});
   *     assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});
   *     assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 2}});
   *
   * @name deepInclude
   * @param {Array|String} haystack
   * @param {Mixed} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.deepInclude = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.deepInclude, true).deep.include(inc);
  };

  /**
   * ### .notDeepInclude(haystack, needle, [message])
   *
   * Asserts that `haystack` does not include `needle`. Can be used to assert
   * the absence of a value in an array or a subset of properties in an object.
   * Deep equality is used.
   *
   *     var obj1 = {a: 1}
   *       , obj2 = {b: 2};
   *     assert.notDeepInclude([obj1, obj2], {a: 9});
   *     assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 9}});
   *     assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 9}});
   *
   * @name notDeepInclude
   * @param {Array|String} haystack
   * @param {Mixed} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notDeepInclude = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.notDeepInclude, true).not.deep.include(inc);
  };

  /**
   * ### .nestedInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'. 
   * Can be used to assert the inclusion of a subset of properties in an 
   * object.
   * Enables the use of dot- and bracket-notation for referencing nested 
   * properties.
   * '[]' and '.' in property names can be escaped using double backslashes.
   * 
   *     assert.nestedInclude({'.a': {'b': 'x'}}, {'\\.a.[b]': 'x'});
   *     assert.nestedInclude({'a': {'[b]': 'x'}}, {'a.\\[b\\]': 'x'});
   * 
   * @name nestedInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public 
   */ 

  assert.nestedInclude = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.nestedInclude, true).nested.include(inc);
  };

  /**
   * ### .notNestedInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' does not include 'needle'. 
   * Can be used to assert the absence of a subset of properties in an 
   * object.
   * Enables the use of dot- and bracket-notation for referencing nested 
   * properties. 
   * '[]' and '.' in property names can be escaped using double backslashes.
   * 
   *     assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\.a.b': 'y'});
   *     assert.notNestedInclude({'a': {'[b]': 'x'}}, {'a.\\[b\\]': 'y'});
   * 
   * @name notNestedInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public 
   */ 

  assert.notNestedInclude = function (exp, inc, msg) {
    new Assertion(exp, msg, assert.notNestedInclude, true)
      .not.nested.include(inc);
  };

  /**
   * ### .deepNestedInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'.
   * Can be used to assert the inclusion of a subset of properties in an 
   * object while checking for deep equality.
   * Enables the use of dot- and bracket-notation for referencing nested 
   * properties.
   * '[]' and '.' in property names can be escaped using double backslashes.
   * 
   *     assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}});
   *     assert.deepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\.a.\\[b\\]': {x: 1}});
   *    
   * @name deepNestedInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public 
   */

  assert.deepNestedInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.deepNestedInclude, true)
      .deep.nested.include(inc);
  };

  /**
   * ### .notDeepNestedInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' does not include 'needle'.
   * Can be used to assert the absence of a subset of properties in an 
   * object while checking for deep equality.
   * Enables the use of dot- and bracket-notation for referencing nested 
   * properties.
   * '[]' and '.' in property names can be escaped using double backslashes.
   * 
   *     assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}})
   *     assert.notDeepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\.a.\\[b\\]': {y: 2}});
   *    
   * @name notDeepNestedInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public 
   */

  assert.notDeepNestedInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.notDeepNestedInclude, true)
      .not.deep.nested.include(inc);
  };

  /**
   * ### .ownInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'.
   * Can be used to assert the inclusion of a subset of properties in an 
   * object while ignoring inherited properties.
   * 
   *     assert.ownInclude({ a: 1 }, { a: 1 });
   * 
   * @name ownInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.ownInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.ownInclude, true).own.include(inc);
  };

  /**
   * ### .notOwnInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'.
   * Can be used to assert the absence of a subset of properties in an 
   * object while ignoring inherited properties.
   * 
   *     Object.prototype.b = 2;
   * 
   *     assert.notOwnInclude({ a: 1 }, { b: 2 });
   * 
   * @name notOwnInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notOwnInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.notOwnInclude, true).not.own.include(inc);
  };

  /**
   * ### .deepOwnInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'.
   * Can be used to assert the inclusion of a subset of properties in an 
   * object while ignoring inherited properties and checking for deep equality.
   * 
   *      assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}});
   *      
   * @name deepOwnInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.deepOwnInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.deepOwnInclude, true)
      .deep.own.include(inc);
  };

   /**
   * ### .notDeepOwnInclude(haystack, needle, [message])
   * 
   * Asserts that 'haystack' includes 'needle'.
   * Can be used to assert the absence of a subset of properties in an 
   * object while ignoring inherited properties and checking for deep equality.
   * 
   *      assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}});
   *      
   * @name notDeepOwnInclude
   * @param {Object} haystack
   * @param {Object} needle
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notDeepOwnInclude = function(exp, inc, msg) {
    new Assertion(exp, msg, assert.notDeepOwnInclude, true)
      .not.deep.own.include(inc);
  };

  /**
   * ### .match(value, regexp, [message])
   *
   * Asserts that `value` matches the regular expression `regexp`.
   *
   *     assert.match('foobar', /^foo/, 'regexp matches');
   *
   * @name match
   * @param {Mixed} value
   * @param {RegExp} regexp
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.match = function (exp, re, msg) {
    new Assertion(exp, msg, assert.match, true).to.match(re);
  };

  /**
   * ### .notMatch(value, regexp, [message])
   *
   * Asserts that `value` does not match the regular expression `regexp`.
   *
   *     assert.notMatch('foobar', /^foo/, 'regexp does not match');
   *
   * @name notMatch
   * @param {Mixed} value
   * @param {RegExp} regexp
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notMatch = function (exp, re, msg) {
    new Assertion(exp, msg, assert.notMatch, true).to.not.match(re);
  };

  /**
   * ### .property(object, property, [message])
   *
   * Asserts that `object` has a direct or inherited property named by
   * `property`.
   *
   *     assert.property({ tea: { green: 'matcha' }}, 'tea');
   *     assert.property({ tea: { green: 'matcha' }}, 'toString');
   *
   * @name property
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.property = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.property, true).to.have.property(prop);
  };

  /**
   * ### .notProperty(object, property, [message])
   *
   * Asserts that `object` does _not_ have a direct or inherited property named
   * by `property`.
   *
   *     assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
   *
   * @name notProperty
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notProperty = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.notProperty, true)
      .to.not.have.property(prop);
  };

  /**
   * ### .propertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a direct or inherited property named by
   * `property` with a value given by `value`. Uses a strict equality check
   * (===).
   *
   *     assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
   *
   * @name propertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.propertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.propertyVal, true)
      .to.have.property(prop, val);
  };

  /**
   * ### .notPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a direct or inherited property named
   * by `property` with value given by `value`. Uses a strict equality check
   * (===).
   *
   *     assert.notPropertyVal({ tea: 'is good' }, 'tea', 'is bad');
   *     assert.notPropertyVal({ tea: 'is good' }, 'coffee', 'is good');
   *
   * @name notPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.notPropertyVal, true)
      .to.not.have.property(prop, val);
  };

  /**
   * ### .deepPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a direct or inherited property named by
   * `property` with a value given by `value`. Uses a deep equality check.
   *
   *     assert.deepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });
   *
   * @name deepPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.deepPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.deepPropertyVal, true)
      .to.have.deep.property(prop, val);
  };

  /**
   * ### .notDeepPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a direct or inherited property named
   * by `property` with value given by `value`. Uses a deep equality check.
   *
   *     assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });
   *     assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });
   *     assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });
   *
   * @name notDeepPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notDeepPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.notDeepPropertyVal, true)
      .to.not.have.deep.property(prop, val);
  };

  /**
   * ### .ownProperty(object, property, [message])
   *
   * Asserts that `object` has a direct property named by `property`. Inherited
   * properties aren't checked.
   *
   *     assert.ownProperty({ tea: { green: 'matcha' }}, 'tea');
   *
   * @name ownProperty
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @api public
   */

  assert.ownProperty = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.ownProperty, true)
      .to.have.own.property(prop);
  };

  /**
   * ### .notOwnProperty(object, property, [message])
   *
   * Asserts that `object` does _not_ have a direct property named by
   * `property`. Inherited properties aren't checked.
   *
   *     assert.notOwnProperty({ tea: { green: 'matcha' }}, 'coffee');
   *     assert.notOwnProperty({}, 'toString');
   *
   * @name notOwnProperty
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @api public
   */

  assert.notOwnProperty = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.notOwnProperty, true)
      .to.not.have.own.property(prop);
  };

  /**
   * ### .ownPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a direct property named by `property` and a value
   * equal to the provided `value`. Uses a strict equality check (===).
   * Inherited properties aren't checked.
   *
   *     assert.ownPropertyVal({ coffee: 'is good'}, 'coffee', 'is good');
   *
   * @name ownPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @api public
   */

  assert.ownPropertyVal = function (obj, prop, value, msg) {
    new Assertion(obj, msg, assert.ownPropertyVal, true)
      .to.have.own.property(prop, value);
  };

  /**
   * ### .notOwnPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a direct property named by `property`
   * with a value equal to the provided `value`. Uses a strict equality check
   * (===). Inherited properties aren't checked.
   *
   *     assert.notOwnPropertyVal({ tea: 'is better'}, 'tea', 'is worse');
   *     assert.notOwnPropertyVal({}, 'toString', Object.prototype.toString);
   *
   * @name notOwnPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @api public
   */

  assert.notOwnPropertyVal = function (obj, prop, value, msg) {
    new Assertion(obj, msg, assert.notOwnPropertyVal, true)
      .to.not.have.own.property(prop, value);
  };

  /**
   * ### .deepOwnPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a direct property named by `property` and a value
   * equal to the provided `value`. Uses a deep equality check. Inherited
   * properties aren't checked.
   *
   *     assert.deepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });
   *
   * @name deepOwnPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @api public
   */

  assert.deepOwnPropertyVal = function (obj, prop, value, msg) {
    new Assertion(obj, msg, assert.deepOwnPropertyVal, true)
      .to.have.deep.own.property(prop, value);
  };

  /**
   * ### .notDeepOwnPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a direct property named by `property`
   * with a value equal to the provided `value`. Uses a deep equality check.
   * Inherited properties aren't checked.
   *
   *     assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });
   *     assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });
   *     assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });
   *     assert.notDeepOwnPropertyVal({}, 'toString', Object.prototype.toString);
   *
   * @name notDeepOwnPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @api public
   */

  assert.notDeepOwnPropertyVal = function (obj, prop, value, msg) {
    new Assertion(obj, msg, assert.notDeepOwnPropertyVal, true)
      .to.not.have.deep.own.property(prop, value);
  };

  /**
   * ### .nestedProperty(object, property, [message])
   *
   * Asserts that `object` has a direct or inherited property named by
   * `property`, which can be a string using dot- and bracket-notation for
   * nested reference.
   *
   *     assert.nestedProperty({ tea: { green: 'matcha' }}, 'tea.green');
   *
   * @name nestedProperty
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.nestedProperty = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.nestedProperty, true)
      .to.have.nested.property(prop);
  };

  /**
   * ### .notNestedProperty(object, property, [message])
   *
   * Asserts that `object` does _not_ have a property named by `property`, which
   * can be a string using dot- and bracket-notation for nested reference. The
   * property cannot exist on the object nor anywhere in its prototype chain.
   *
   *     assert.notNestedProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
   *
   * @name notNestedProperty
   * @param {Object} object
   * @param {String} property
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notNestedProperty = function (obj, prop, msg) {
    new Assertion(obj, msg, assert.notNestedProperty, true)
      .to.not.have.nested.property(prop);
  };

  /**
   * ### .nestedPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a property named by `property` with value given
   * by `value`. `property` can use dot- and bracket-notation for nested
   * reference. Uses a strict equality check (===).
   *
   *     assert.nestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
   *
   * @name nestedPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.nestedPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.nestedPropertyVal, true)
      .to.have.nested.property(prop, val);
  };

  /**
   * ### .notNestedPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a property named by `property` with
   * value given by `value`. `property` can use dot- and bracket-notation for
   * nested reference. Uses a strict equality check (===).
   *
   *     assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
   *     assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'coffee.green', 'matcha');
   *
   * @name notNestedPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notNestedPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.notNestedPropertyVal, true)
      .to.not.have.nested.property(prop, val);
  };

  /**
   * ### .deepNestedPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` has a property named by `property` with a value given
   * by `value`. `property` can use dot- and bracket-notation for nested
   * reference. Uses a deep equality check.
   *
   *     assert.deepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yum' });
   *
   * @name deepNestedPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.deepNestedPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.deepNestedPropertyVal, true)
      .to.have.deep.nested.property(prop, val);
  };

  /**
   * ### .notDeepNestedPropertyVal(object, property, value, [message])
   *
   * Asserts that `object` does _not_ have a property named by `property` with
   * value given by `value`. `property` can use dot- and bracket-notation for
   * nested reference. Uses a deep equality check.
   *
   *     assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { oolong: 'yum' });
   *     assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yuck' });
   *     assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.black', { matcha: 'yum' });
   *
   * @name notDeepNestedPropertyVal
   * @param {Object} object
   * @param {String} property
   * @param {Mixed} value
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notDeepNestedPropertyVal = function (obj, prop, val, msg) {
    new Assertion(obj, msg, assert.notDeepNestedPropertyVal, true)
      .to.not.have.deep.nested.property(prop, val);
  }

  /**
   * ### .lengthOf(object, length, [message])
   *
   * Asserts that `object` has a `length` property with the expected value.
   *
   *     assert.lengthOf([1,2,3], 3, 'array has length of 3');
   *     assert.lengthOf('foobar', 6, 'string has length of 6');
   *
   * @name lengthOf
   * @param {Mixed} object
   * @param {Number} length
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.lengthOf = function (exp, len, msg) {
    new Assertion(exp, msg, assert.lengthOf, true).to.have.lengthOf(len);
  };

  /**
   * ### .hasAnyKeys(object, [keys], [message])
   *
   * Asserts that `object` has at least one of the `keys` provided.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'iDontExist', 'baz']);
   *     assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, iDontExist: 99, baz: 1337});
   *     assert.hasAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);
   *     assert.hasAnyKeys(new Set([{foo: 'bar'}, 'anotherKey']), [{foo: 'bar'}, 'anotherKey']);
   *
   * @name hasAnyKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.hasAnyKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.hasAnyKeys, true).to.have.any.keys(keys);
  }

  /**
   * ### .hasAllKeys(object, [keys], [message])
   *
   * Asserts that `object` has all and only all of the `keys` provided.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);
   *     assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337]);
   *     assert.hasAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);
   *     assert.hasAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);
   *
   * @name hasAllKeys
   * @param {Mixed} object
   * @param {String[]} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.hasAllKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.hasAllKeys, true).to.have.all.keys(keys);
  }

  /**
   * ### .containsAllKeys(object, [keys], [message])
   *
   * Asserts that `object` has all of the `keys` provided but may have more keys not listed.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'baz']);
   *     assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);
   *     assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, baz: 1337});
   *     assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337});
   *     assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}]);
   *     assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);
   *     assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}]);
   *     assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);
   *
   * @name containsAllKeys
   * @param {Mixed} object
   * @param {String[]} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.containsAllKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.containsAllKeys, true)
      .to.contain.all.keys(keys);
  }

  /**
   * ### .doesNotHaveAnyKeys(object, [keys], [message])
   *
   * Asserts that `object` has none of the `keys` provided.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);
   *     assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});
   *     assert.doesNotHaveAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);
   *     assert.doesNotHaveAnyKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);
   *
   * @name doesNotHaveAnyKeys
   * @param {Mixed} object
   * @param {String[]} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.doesNotHaveAnyKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.doesNotHaveAnyKeys, true)
      .to.not.have.any.keys(keys);
  }

  /**
   * ### .doesNotHaveAllKeys(object, [keys], [message])
   *
   * Asserts that `object` does not have at least one of the `keys` provided.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);
   *     assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});
   *     assert.doesNotHaveAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);
   *     assert.doesNotHaveAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);
   *
   * @name doesNotHaveAllKeys
   * @param {Mixed} object
   * @param {String[]} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.doesNotHaveAllKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.doesNotHaveAllKeys, true)
      .to.not.have.all.keys(keys);
  }

  /**
   * ### .hasAnyDeepKeys(object, [keys], [message])
   *
   * Asserts that `object` has at least one of the `keys` provided.
   * Since Sets and Maps can have objects as keys you can use this assertion to perform
   * a deep comparison.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});
   *     assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), [{one: 'one'}, {two: 'two'}]);
   *     assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);
   *     assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});
   *     assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {three: 'three'}]);
   *     assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);
   *
   * @name doesNotHaveAllKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.hasAnyDeepKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.hasAnyDeepKeys, true)
      .to.have.any.deep.keys(keys);
  }

 /**
   * ### .hasAllDeepKeys(object, [keys], [message])
   *
   * Asserts that `object` has all and only all of the `keys` provided.
   * Since Sets and Maps can have objects as keys you can use this assertion to perform
   * a deep comparison.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne']]), {one: 'one'});
   *     assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);
   *     assert.hasAllDeepKeys(new Set([{one: 'one'}]), {one: 'one'});
   *     assert.hasAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);
   *
   * @name hasAllDeepKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.hasAllDeepKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.hasAllDeepKeys, true)
      .to.have.all.deep.keys(keys);
  }

 /**
   * ### .containsAllDeepKeys(object, [keys], [message])
   *
   * Asserts that `object` contains all of the `keys` provided.
   * Since Sets and Maps can have objects as keys you can use this assertion to perform
   * a deep comparison.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});
   *     assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);
   *     assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});
   *     assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);
   *
   * @name containsAllDeepKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.containsAllDeepKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.containsAllDeepKeys, true)
      .to.contain.all.deep.keys(keys);
  }

 /**
   * ### .doesNotHaveAnyDeepKeys(object, [keys], [message])
   *
   * Asserts that `object` has none of the `keys` provided.
   * Since Sets and Maps can have objects as keys you can use this assertion to perform
   * a deep comparison.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});
   *     assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);
   *     assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});
   *     assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);
   *
   * @name doesNotHaveAnyDeepKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.doesNotHaveAnyDeepKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.doesNotHaveAnyDeepKeys, true)
      .to.not.have.any.deep.keys(keys);
  }

 /**
   * ### .doesNotHaveAllDeepKeys(object, [keys], [message])
   *
   * Asserts that `object` does not have at least one of the `keys` provided.
   * Since Sets and Maps can have objects as keys you can use this assertion to perform
   * a deep comparison.
   * You can also provide a single object instead of a `keys` array and its keys
   * will be used as the expected set of keys.
   *
   *     assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});
   *     assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {one: 'one'}]);
   *     assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});
   *     assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {fifty: 'fifty'}]);
   *
   * @name doesNotHaveAllDeepKeys
   * @param {Mixed} object
   * @param {Array|Object} keys
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.doesNotHaveAllDeepKeys = function (obj, keys, msg) {
    new Assertion(obj, msg, assert.doesNotHaveAllDeepKeys, true)
      .to.not.have.all.deep.keys(keys);
  }

 /**
   * ### .throws(fn, [errorLike/string/regexp], [string/regexp], [message])
   *
   * If `errorLike` is an `Error` constructor, asserts that `fn` will throw an error that is an
   * instance of `errorLike`.
   * If `errorLike` is an `Error` instance, asserts that the error thrown is the same
   * instance as `errorLike`.
   * If `errMsgMatcher` is provided, it also asserts that the error thrown will have a
   * message matching `errMsgMatcher`.
   *
   *     assert.throws(fn, 'function throws a reference error');
   *     assert.throws(fn, /function throws a reference error/);
   *     assert.throws(fn, ReferenceError);
   *     assert.throws(fn, errorInstance);
   *     assert.throws(fn, ReferenceError, 'Error thrown must be a ReferenceError and have this msg');
   *     assert.throws(fn, errorInstance, 'Error thrown must be the same errorInstance and have this msg');
   *     assert.throws(fn, ReferenceError, /Error thrown must be a ReferenceError and match this/);
   *     assert.throws(fn, errorInstance, /Error thrown must be the same errorInstance and match this/);
   *
   * @name throws
   * @alias throw
   * @alias Throw
   * @param {Function} fn
   * @param {ErrorConstructor|Error} errorLike
   * @param {RegExp|String} errMsgMatcher
   * @param {String} message
   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
   * @namespace Assert
   * @api public
   */

  assert.throws = function (fn, errorLike, errMsgMatcher, msg) {
    if ('string' === typeof errorLike || errorLike instanceof RegExp) {
      errMsgMatcher = errorLike;
      errorLike = null;
    }

    var assertErr = new Assertion(fn, msg, assert.throws, true)
      .to.throw(errorLike, errMsgMatcher);
    return flag(assertErr, 'object');
  };

  /**
   * ### .doesNotThrow(fn, [errorLike/string/regexp], [string/regexp], [message])
   *
   * If `errorLike` is an `Error` constructor, asserts that `fn` will _not_ throw an error that is an
   * instance of `errorLike`.
   * If `errorLike` is an `Error` instance, asserts that the error thrown is _not_ the same
   * instance as `errorLike`.
   * If `errMsgMatcher` is provided, it also asserts that the error thrown will _not_ have a
   * message matching `errMsgMatcher`.
   *
   *     assert.doesNotThrow(fn, 'Any Error thrown must not have this message');
   *     assert.doesNotThrow(fn, /Any Error thrown must not match this/);
   *     assert.doesNotThrow(fn, Error);
   *     assert.doesNotThrow(fn, errorInstance);
   *     assert.doesNotThrow(fn, Error, 'Error must not have this message');
   *     assert.doesNotThrow(fn, errorInstance, 'Error must not have this message');
   *     assert.doesNotThrow(fn, Error, /Error must not match this/);
   *     assert.doesNotThrow(fn, errorInstance, /Error must not match this/);
   *
   * @name doesNotThrow
   * @param {Function} fn
   * @param {ErrorConstructor} errorLike
   * @param {RegExp|String} errMsgMatcher
   * @param {String} message
   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
   * @namespace Assert
   * @api public
   */

  assert.doesNotThrow = function (fn, errorLike, errMsgMatcher, msg) {
    if ('string' === typeof errorLike || errorLike instanceof RegExp) {
      errMsgMatcher = errorLike;
      errorLike = null;
    }

    new Assertion(fn, msg, assert.doesNotThrow, true)
      .to.not.throw(errorLike, errMsgMatcher);
  };

  /**
   * ### .operator(val1, operator, val2, [message])
   *
   * Compares two values using `operator`.
   *
   *     assert.operator(1, '<', 2, 'everything is ok');
   *     assert.operator(1, '>', 2, 'this will fail');
   *
   * @name operator
   * @param {Mixed} val1
   * @param {String} operator
   * @param {Mixed} val2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.operator = function (val, operator, val2, msg) {
    var ok;
    switch(operator) {
      case '==':
        ok = val == val2;
        break;
      case '===':
        ok = val === val2;
        break;
      case '>':
        ok = val > val2;
        break;
      case '>=':
        ok = val >= val2;
        break;
      case '<':
        ok = val < val2;
        break;
      case '<=':
        ok = val <= val2;
        break;
      case '!=':
        ok = val != val2;
        break;
      case '!==':
        ok = val !== val2;
        break;
      default:
        msg = msg ? msg + ': ' : msg;
        throw new chai.AssertionError(
          msg + 'Invalid operator "' + operator + '"',
          undefined,
          assert.operator
        );
    }
    var test = new Assertion(ok, msg, assert.operator, true);
    test.assert(
        true === flag(test, 'object')
      , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
      , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
  };

  /**
   * ### .closeTo(actual, expected, delta, [message])
   *
   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
   *
   *     assert.closeTo(1.5, 1, 0.5, 'numbers are close');
   *
   * @name closeTo
   * @param {Number} actual
   * @param {Number} expected
   * @param {Number} delta
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.closeTo = function (act, exp, delta, msg) {
    new Assertion(act, msg, assert.closeTo, true).to.be.closeTo(exp, delta);
  };

  /**
   * ### .approximately(actual, expected, delta, [message])
   *
   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
   *
   *     assert.approximately(1.5, 1, 0.5, 'numbers are close');
   *
   * @name approximately
   * @param {Number} actual
   * @param {Number} expected
   * @param {Number} delta
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.approximately = function (act, exp, delta, msg) {
    new Assertion(act, msg, assert.approximately, true)
      .to.be.approximately(exp, delta);
  };

  /**
   * ### .sameMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` have the same members in any order. Uses a
   * strict equality check (===).
   *
   *     assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
   *
   * @name sameMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.sameMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.sameMembers, true)
      .to.have.same.members(set2);
  }

  /**
   * ### .notSameMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` don't have the same members in any order.
   * Uses a strict equality check (===).
   *
   *     assert.notSameMembers([ 1, 2, 3 ], [ 5, 1, 3 ], 'not same members');
   *
   * @name notSameMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notSameMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.notSameMembers, true)
      .to.not.have.same.members(set2);
  }

  /**
   * ### .sameDeepMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` have the same members in any order. Uses a
   * deep equality check.
   *
   *     assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');
   *
   * @name sameDeepMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.sameDeepMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.sameDeepMembers, true)
      .to.have.same.deep.members(set2);
  }

  /**
   * ### .notSameDeepMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` don't have the same members in any order.
   * Uses a deep equality check.
   *
   *     assert.notSameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { f: 5 }], 'not same deep members');
   *
   * @name notSameDeepMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notSameDeepMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.notSameDeepMembers, true)
      .to.not.have.same.deep.members(set2);
  }

  /**
   * ### .sameOrderedMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` have the same members in the same order.
   * Uses a strict equality check (===).
   *
   *     assert.sameOrderedMembers([ 1, 2, 3 ], [ 1, 2, 3 ], 'same ordered members');
   *
   * @name sameOrderedMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.sameOrderedMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.sameOrderedMembers, true)
      .to.have.same.ordered.members(set2);
  }

  /**
   * ### .notSameOrderedMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` don't have the same members in the same
   * order. Uses a strict equality check (===).
   *
   *     assert.notSameOrderedMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'not same ordered members');
   *
   * @name notSameOrderedMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notSameOrderedMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.notSameOrderedMembers, true)
      .to.not.have.same.ordered.members(set2);
  }

  /**
   * ### .sameDeepOrderedMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` have the same members in the same order.
   * Uses a deep equality check.
   *
   * assert.sameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { c: 3 } ], 'same deep ordered members');
   *
   * @name sameDeepOrderedMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.sameDeepOrderedMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.sameDeepOrderedMembers, true)
      .to.have.same.deep.ordered.members(set2);
  }

  /**
   * ### .notSameDeepOrderedMembers(set1, set2, [message])
   *
   * Asserts that `set1` and `set2` don't have the same members in the same
   * order. Uses a deep equality check.
   *
   * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { z: 5 } ], 'not same deep ordered members');
   * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { c: 3 } ], 'not same deep ordered members');
   *
   * @name notSameDeepOrderedMembers
   * @param {Array} set1
   * @param {Array} set2
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notSameDeepOrderedMembers = function (set1, set2, msg) {
    new Assertion(set1, msg, assert.notSameDeepOrderedMembers, true)
      .to.not.have.same.deep.ordered.members(set2);
  }

  /**
   * ### .includeMembers(superset, subset, [message])
   *
   * Asserts that `subset` is included in `superset` in any order. Uses a
   * strict equality check (===). Duplicates are ignored.
   *
   *     assert.includeMembers([ 1, 2, 3 ], [ 2, 1, 2 ], 'include members');
   *
   * @name includeMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.includeMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.includeMembers, true)
      .to.include.members(subset);
  }

  /**
   * ### .notIncludeMembers(superset, subset, [message])
   *
   * Asserts that `subset` isn't included in `superset` in any order. Uses a
   * strict equality check (===). Duplicates are ignored.
   *
   *     assert.notIncludeMembers([ 1, 2, 3 ], [ 5, 1 ], 'not include members');
   *
   * @name notIncludeMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notIncludeMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.notIncludeMembers, true)
      .to.not.include.members(subset);
  }

  /**
   * ### .includeDeepMembers(superset, subset, [message])
   *
   * Asserts that `subset` is included in `superset` in any order. Uses a deep
   * equality check. Duplicates are ignored.
   *
   *     assert.includeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { b: 2 } ], 'include deep members');
   *
   * @name includeDeepMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.includeDeepMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.includeDeepMembers, true)
      .to.include.deep.members(subset);
  }

  /**
   * ### .notIncludeDeepMembers(superset, subset, [message])
   *
   * Asserts that `subset` isn't included in `superset` in any order. Uses a
   * deep equality check. Duplicates are ignored.
   *
   *     assert.notIncludeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { f: 5 } ], 'not include deep members');
   *
   * @name notIncludeDeepMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notIncludeDeepMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.notIncludeDeepMembers, true)
      .to.not.include.deep.members(subset);
  }

  /**
   * ### .includeOrderedMembers(superset, subset, [message])
   *
   * Asserts that `subset` is included in `superset` in the same order
   * beginning with the first element in `superset`. Uses a strict equality
   * check (===).
   *
   *     assert.includeOrderedMembers([ 1, 2, 3 ], [ 1, 2 ], 'include ordered members');
   *
   * @name includeOrderedMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.includeOrderedMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.includeOrderedMembers, true)
      .to.include.ordered.members(subset);
  }

  /**
   * ### .notIncludeOrderedMembers(superset, subset, [message])
   *
   * Asserts that `subset` isn't included in `superset` in the same order
   * beginning with the first element in `superset`. Uses a strict equality
   * check (===).
   *
   *     assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 1 ], 'not include ordered members');
   *     assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 3 ], 'not include ordered members');
   *
   * @name notIncludeOrderedMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notIncludeOrderedMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.notIncludeOrderedMembers, true)
      .to.not.include.ordered.members(subset);
  }

  /**
   * ### .includeDeepOrderedMembers(superset, subset, [message])
   *
   * Asserts that `subset` is included in `superset` in the same order
   * beginning with the first element in `superset`. Uses a deep equality
   * check.
   *
   *     assert.includeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 } ], 'include deep ordered members');
   *
   * @name includeDeepOrderedMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.includeDeepOrderedMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.includeDeepOrderedMembers, true)
      .to.include.deep.ordered.members(subset);
  }

  /**
   * ### .notIncludeDeepOrderedMembers(superset, subset, [message])
   *
   * Asserts that `subset` isn't included in `superset` in the same order
   * beginning with the first element in `superset`. Uses a deep equality
   * check.
   *
   *     assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { f: 5 } ], 'not include deep ordered members');
   *     assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 } ], 'not include deep ordered members');
   *     assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { c: 3 } ], 'not include deep ordered members');
   *
   * @name notIncludeDeepOrderedMembers
   * @param {Array} superset
   * @param {Array} subset
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.notIncludeDeepOrderedMembers = function (superset, subset, msg) {
    new Assertion(superset, msg, assert.notIncludeDeepOrderedMembers, true)
      .to.not.include.deep.ordered.members(subset);
  }

  /**
   * ### .oneOf(inList, list, [message])
   *
   * Asserts that non-object, non-array value `inList` appears in the flat array `list`.
   *
   *     assert.oneOf(1, [ 2, 1 ], 'Not found in list');
   *
   * @name oneOf
   * @param {*} inList
   * @param {Array<*>} list
   * @param {String} message
   * @namespace Assert
   * @api public
   */

  assert.oneOf = function (inList, list, msg) {
    new Assertion(inList, msg, assert.oneOf, true).to.be.oneOf(list);
  }

  /**
   * ### .changes(function, object, property, [message])
   *
   * Asserts that a function changes the value of a property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 22 };
   *     assert.changes(fn, obj, 'val');
   *
   * @name changes
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.changes = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.changes, true).to.change(obj, prop);
  }

   /**
   * ### .changesBy(function, object, property, delta, [message])
   *
   * Asserts that a function changes the value of a property by an amount (delta).
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val += 2 };
   *     assert.changesBy(fn, obj, 'val', 2);
   *
   * @name changesBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.changesBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.changesBy, true)
      .to.change(obj, prop).by(delta);
  }

   /**
   * ### .doesNotChange(function, object, property, [message])
   *
   * Asserts that a function does not change the value of a property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { console.log('foo'); };
   *     assert.doesNotChange(fn, obj, 'val');
   *
   * @name doesNotChange
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.doesNotChange = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.doesNotChange, true)
      .to.not.change(obj, prop);
  }

  /**
   * ### .changesButNotBy(function, object, property, delta, [message])
   *
   * Asserts that a function does not change the value of a property or of a function's return value by an amount (delta)
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val += 10 };
   *     assert.changesButNotBy(fn, obj, 'val', 5);
   *
   * @name changesButNotBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.changesButNotBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.changesButNotBy, true)
      .to.change(obj, prop).but.not.by(delta);
  }

  /**
   * ### .increases(function, object, property, [message])
   *
   * Asserts that a function increases a numeric object property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 13 };
   *     assert.increases(fn, obj, 'val');
   *
   * @name increases
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.increases = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.increases, true)
      .to.increase(obj, prop);
  }

  /**
   * ### .increasesBy(function, object, property, delta, [message])
   *
   * Asserts that a function increases a numeric object property or a function's return value by an amount (delta).
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val += 10 };
   *     assert.increasesBy(fn, obj, 'val', 10);
   *
   * @name increasesBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.increasesBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.increasesBy, true)
      .to.increase(obj, prop).by(delta);
  }

  /**
   * ### .doesNotIncrease(function, object, property, [message])
   *
   * Asserts that a function does not increase a numeric object property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 8 };
   *     assert.doesNotIncrease(fn, obj, 'val');
   *
   * @name doesNotIncrease
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.doesNotIncrease = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.doesNotIncrease, true)
      .to.not.increase(obj, prop);
  }

  /**
   * ### .increasesButNotBy(function, object, property, [message])
   *
   * Asserts that a function does not increase a numeric object property or function's return value by an amount (delta).
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 15 };
   *     assert.increasesButNotBy(fn, obj, 'val', 10);
   *
   * @name increasesButNotBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.increasesButNotBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.increasesButNotBy, true)
      .to.increase(obj, prop).but.not.by(delta);
  }

  /**
   * ### .decreases(function, object, property, [message])
   *
   * Asserts that a function decreases a numeric object property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 5 };
   *     assert.decreases(fn, obj, 'val');
   *
   * @name decreases
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.decreases = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.decreases, true)
      .to.decrease(obj, prop);
  }

  /**
   * ### .decreasesBy(function, object, property, delta, [message])
   *
   * Asserts that a function decreases a numeric object property or a function's return value by an amount (delta)
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val -= 5 };
   *     assert.decreasesBy(fn, obj, 'val', 5);
   *
   * @name decreasesBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.decreasesBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.decreasesBy, true)
      .to.decrease(obj, prop).by(delta);
  }

  /**
   * ### .doesNotDecrease(function, object, property, [message])
   *
   * Asserts that a function does not decreases a numeric object property.
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 15 };
   *     assert.doesNotDecrease(fn, obj, 'val');
   *
   * @name doesNotDecrease
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.doesNotDecrease = function (fn, obj, prop, msg) {
    if (arguments.length === 3 && typeof obj === 'function') {
      msg = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.doesNotDecrease, true)
      .to.not.decrease(obj, prop);
  }

  /**
   * ### .doesNotDecreaseBy(function, object, property, delta, [message])
   *
   * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 5 };
   *     assert.doesNotDecreaseBy(fn, obj, 'val', 1);
   *
   * @name doesNotDecrease
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.doesNotDecreaseBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    return new Assertion(fn, msg, assert.doesNotDecreaseBy, true)
      .to.not.decrease(obj, prop).by(delta);
  }

  /**
   * ### .decreasesButNotBy(function, object, property, delta, [message])
   *
   * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)
   *
   *     var obj = { val: 10 };
   *     var fn = function() { obj.val = 5 };
   *     assert.decreasesButNotBy(fn, obj, 'val', 1);
   *
   * @name decreasesButNotBy
   * @param {Function} modifier function
   * @param {Object} object or getter function
   * @param {String} property name _optional_
   * @param {Number} change amount (delta)
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.decreasesButNotBy = function (fn, obj, prop, delta, msg) {
    if (arguments.length === 4 && typeof obj === 'function') {
      var tmpMsg = delta;
      delta = prop;
      msg = tmpMsg;
    } else if (arguments.length === 3) {
      delta = prop;
      prop = null;
    }

    new Assertion(fn, msg, assert.decreasesButNotBy, true)
      .to.decrease(obj, prop).but.not.by(delta);
  }

  /*!
   * ### .ifError(object)
   *
   * Asserts if value is not a false value, and throws if it is a true value.
   * This is added to allow for chai to be a drop-in replacement for Node's
   * assert class.
   *
   *     var err = new Error('I am a custom error');
   *     assert.ifError(err); // Rethrows err!
   *
   * @name ifError
   * @param {Object} object
   * @namespace Assert
   * @api public
   */

  assert.ifError = function (val) {
    if (val) {
      throw(val);
    }
  };

  /**
   * ### .isExtensible(object)
   *
   * Asserts that `object` is extensible (can have new properties added to it).
   *
   *     assert.isExtensible({});
   *
   * @name isExtensible
   * @alias extensible
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isExtensible = function (obj, msg) {
    new Assertion(obj, msg, assert.isExtensible, true).to.be.extensible;
  };

  /**
   * ### .isNotExtensible(object)
   *
   * Asserts that `object` is _not_ extensible.
   *
   *     var nonExtensibleObject = Object.preventExtensions({});
   *     var sealedObject = Object.seal({});
   *     var frozenObject = Object.freeze({});
   *
   *     assert.isNotExtensible(nonExtensibleObject);
   *     assert.isNotExtensible(sealedObject);
   *     assert.isNotExtensible(frozenObject);
   *
   * @name isNotExtensible
   * @alias notExtensible
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isNotExtensible = function (obj, msg) {
    new Assertion(obj, msg, assert.isNotExtensible, true).to.not.be.extensible;
  };

  /**
   * ### .isSealed(object)
   *
   * Asserts that `object` is sealed (cannot have new properties added to it
   * and its existing properties cannot be removed).
   *
   *     var sealedObject = Object.seal({});
   *     var frozenObject = Object.seal({});
   *
   *     assert.isSealed(sealedObject);
   *     assert.isSealed(frozenObject);
   *
   * @name isSealed
   * @alias sealed
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isSealed = function (obj, msg) {
    new Assertion(obj, msg, assert.isSealed, true).to.be.sealed;
  };

  /**
   * ### .isNotSealed(object)
   *
   * Asserts that `object` is _not_ sealed.
   *
   *     assert.isNotSealed({});
   *
   * @name isNotSealed
   * @alias notSealed
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isNotSealed = function (obj, msg) {
    new Assertion(obj, msg, assert.isNotSealed, true).to.not.be.sealed;
  };

  /**
   * ### .isFrozen(object)
   *
   * Asserts that `object` is frozen (cannot have new properties added to it
   * and its existing properties cannot be modified).
   *
   *     var frozenObject = Object.freeze({});
   *     assert.frozen(frozenObject);
   *
   * @name isFrozen
   * @alias frozen
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isFrozen = function (obj, msg) {
    new Assertion(obj, msg, assert.isFrozen, true).to.be.frozen;
  };

  /**
   * ### .isNotFrozen(object)
   *
   * Asserts that `object` is _not_ frozen.
   *
   *     assert.isNotFrozen({});
   *
   * @name isNotFrozen
   * @alias notFrozen
   * @param {Object} object
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isNotFrozen = function (obj, msg) {
    new Assertion(obj, msg, assert.isNotFrozen, true).to.not.be.frozen;
  };

  /**
   * ### .isEmpty(target)
   *
   * Asserts that the target does not contain any values.
   * For arrays and strings, it checks the `length` property.
   * For `Map` and `Set` instances, it checks the `size` property.
   * For non-function objects, it gets the count of own
   * enumerable string keys.
   *
   *     assert.isEmpty([]);
   *     assert.isEmpty('');
   *     assert.isEmpty(new Map);
   *     assert.isEmpty({});
   *
   * @name isEmpty
   * @alias empty
   * @param {Object|Array|String|Map|Set} target
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isEmpty = function(val, msg) {
    new Assertion(val, msg, assert.isEmpty, true).to.be.empty;
  };

  /**
   * ### .isNotEmpty(target)
   *
   * Asserts that the target contains values.
   * For arrays and strings, it checks the `length` property.
   * For `Map` and `Set` instances, it checks the `size` property.
   * For non-function objects, it gets the count of own
   * enumerable string keys.
   *
   *     assert.isNotEmpty([1, 2]);
   *     assert.isNotEmpty('34');
   *     assert.isNotEmpty(new Set([5, 6]));
   *     assert.isNotEmpty({ key: 7 });
   *
   * @name isNotEmpty
   * @alias notEmpty
   * @param {Object|Array|String|Map|Set} target
   * @param {String} message _optional_
   * @namespace Assert
   * @api public
   */

  assert.isNotEmpty = function(val, msg) {
    new Assertion(val, msg, assert.isNotEmpty, true).to.not.be.empty;
  };

  /*!
   * Aliases.
   */

  (function alias(name, as){
    assert[as] = assert[name];
    return alias;
  })
  ('isOk', 'ok')
  ('isNotOk', 'notOk')
  ('throws', 'throw')
  ('throws', 'Throw')
  ('isExtensible', 'extensible')
  ('isNotExtensible', 'notExtensible')
  ('isSealed', 'sealed')
  ('isNotSealed', 'notSealed')
  ('isFrozen', 'frozen')
  ('isNotFrozen', 'notFrozen')
  ('isEmpty', 'empty')
  ('isNotEmpty', 'notEmpty');
};


/***/ }),
/* 607 */
/***/ (function(module, exports) {

/*!
 * chai
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

module.exports = function (chai, util) {
  chai.expect = function (val, message) {
    return new chai.Assertion(val, message);
  };

  /**
   * ### .fail(actual, expected, [message], [operator])
   *
   * Throw a failure.
   *
   * @name fail
   * @param {Mixed} actual
   * @param {Mixed} expected
   * @param {String} message
   * @param {String} operator
   * @namespace BDD
   * @api public
   */

  chai.expect.fail = function (actual, expected, message, operator) {
    message = message || 'expect.fail()';
    throw new chai.AssertionError(message, {
        actual: actual
      , expected: expected
      , operator: operator
    }, chai.expect.fail);
  };
};


/***/ }),
/* 608 */
/***/ (function(module, exports) {

/*!
 * chai
 * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

module.exports = function (chai, util) {
  var Assertion = chai.Assertion;

  function loadShould () {
    // explicitly define this method as function as to have it's name to include as `ssfi`
    function shouldGetter() {
      if (this instanceof String
          || this instanceof Number
          || this instanceof Boolean
          || typeof Symbol === 'function' && this instanceof Symbol) {
        return new Assertion(this.valueOf(), null, shouldGetter);
      }
      return new Assertion(this, null, shouldGetter);
    }
    function shouldSetter(value) {
      // See https://github.com/chaijs/chai/issues/86: this makes
      // `whatever.should = someValue` actually set `someValue`, which is
      // especially useful for `global.should = require('chai').should()`.
      //
      // Note that we have to use [[DefineProperty]] instead of [[Put]]
      // since otherwise we would trigger this very setter!
      Object.defineProperty(this, 'should', {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    }
    // modify Object.prototype to have `should`
    Object.defineProperty(Object.prototype, 'should', {
      set: shouldSetter
      , get: shouldGetter
      , configurable: true
    });

    var should = {};

    /**
     * ### .fail(actual, expected, [message], [operator])
     *
     * Throw a failure.
     *
     * @name fail
     * @param {Mixed} actual
     * @param {Mixed} expected
     * @param {String} message
     * @param {String} operator
     * @namespace BDD
     * @api public
     */

    should.fail = function (actual, expected, message, operator) {
      message = message || 'should.fail()';
      throw new chai.AssertionError(message, {
          actual: actual
        , expected: expected
        , operator: operator
      }, should.fail);
    };

    /**
     * ### .equal(actual, expected, [message])
     *
     * Asserts non-strict equality (`==`) of `actual` and `expected`.
     *
     *     should.equal(3, '3', '== coerces values to strings');
     *
     * @name equal
     * @param {Mixed} actual
     * @param {Mixed} expected
     * @param {String} message
     * @namespace Should
     * @api public
     */

    should.equal = function (val1, val2, msg) {
      new Assertion(val1, msg).to.equal(val2);
    };

    /**
     * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])
     *
     * Asserts that `function` will throw an error that is an instance of
     * `constructor`, or alternately that it will throw an error with message
     * matching `regexp`.
     *
     *     should.throw(fn, 'function throws a reference error');
     *     should.throw(fn, /function throws a reference error/);
     *     should.throw(fn, ReferenceError);
     *     should.throw(fn, ReferenceError, 'function throws a reference error');
     *     should.throw(fn, ReferenceError, /function throws a reference error/);
     *
     * @name throw
     * @alias Throw
     * @param {Function} function
     * @param {ErrorConstructor} constructor
     * @param {RegExp} regexp
     * @param {String} message
     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
     * @namespace Should
     * @api public
     */

    should.Throw = function (fn, errt, errs, msg) {
      new Assertion(fn, msg).to.Throw(errt, errs);
    };

    /**
     * ### .exist
     *
     * Asserts that the target is neither `null` nor `undefined`.
     *
     *     var foo = 'hi';
     *
     *     should.exist(foo, 'foo exists');
     *
     * @name exist
     * @namespace Should
     * @api public
     */

    should.exist = function (val, msg) {
      new Assertion(val, msg).to.exist;
    }

    // negation
    should.not = {}

    /**
     * ### .not.equal(actual, expected, [message])
     *
     * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
     *
     *     should.not.equal(3, 4, 'these numbers are not equal');
     *
     * @name not.equal
     * @param {Mixed} actual
     * @param {Mixed} expected
     * @param {String} message
     * @namespace Should
     * @api public
     */

    should.not.equal = function (val1, val2, msg) {
      new Assertion(val1, msg).to.not.equal(val2);
    };

    /**
     * ### .throw(function, [constructor/regexp], [message])
     *
     * Asserts that `function` will _not_ throw an error that is an instance of
     * `constructor`, or alternately that it will not throw an error with message
     * matching `regexp`.
     *
     *     should.not.throw(fn, Error, 'function does not throw');
     *
     * @name not.throw
     * @alias not.Throw
     * @param {Function} function
     * @param {ErrorConstructor} constructor
     * @param {RegExp} regexp
     * @param {String} message
     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
     * @namespace Should
     * @api public
     */

    should.not.Throw = function (fn, errt, errs, msg) {
      new Assertion(fn, msg).to.not.Throw(errt, errs);
    };

    /**
     * ### .not.exist
     *
     * Asserts that the target is neither `null` nor `undefined`.
     *
     *     var bar = null;
     *
     *     should.not.exist(bar, 'bar does not exist');
     *
     * @name not.exist
     * @namespace Should
     * @api public
     */

    should.not.exist = function (val, msg) {
      new Assertion(val, msg).to.not.exist;
    }

    should['throw'] = should['Throw'];
    should.not['throw'] = should.not['Throw'];

    return should;
  };

  chai.should = loadShould;
  chai.Should = loadShould;
};


/***/ }),
/* 609 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - addChainingMethod utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependencies
 */

var addLengthGuard = __webpack_require__(143);
var chai = __webpack_require__(72);
var flag = __webpack_require__(46);
var proxify = __webpack_require__(146);
var transferFlags = __webpack_require__(74);

/*!
 * Module variables
 */

// Check whether `Object.setPrototypeOf` is supported
var canSetPrototype = typeof Object.setPrototypeOf === 'function';

// Without `Object.setPrototypeOf` support, this module will need to add properties to a function.
// However, some of functions' own props are not configurable and should be skipped.
var testFn = function() {};
var excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) {
  var propDesc = Object.getOwnPropertyDescriptor(testFn, name);

  // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties,
  // but then returns `undefined` as the property descriptor for `callee`. As a
  // workaround, we perform an otherwise unnecessary type-check for `propDesc`,
  // and then filter it out if it's not an object as it should be.
  if (typeof propDesc !== 'object')
    return true;

  return !propDesc.configurable;
});

// Cache `Function` properties
var call  = Function.prototype.call,
    apply = Function.prototype.apply;

/**
 * ### .addChainableMethod(ctx, name, method, chainingBehavior)
 *
 * Adds a method to an object, such that the method can also be chained.
 *
 *     utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
 *       var obj = utils.flag(this, 'object');
 *       new chai.Assertion(obj).to.be.equal(str);
 *     });
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
 *
 * The result can then be used as both a method assertion, executing both `method` and
 * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
 *
 *     expect(fooStr).to.be.foo('bar');
 *     expect(fooStr).to.be.foo.equal('foo');
 *
 * @param {Object} ctx object to which the method is added
 * @param {String} name of method to add
 * @param {Function} method function to be used for `name`, when called
 * @param {Function} chainingBehavior function to be called every time the property is accessed
 * @namespace Utils
 * @name addChainableMethod
 * @api public
 */

module.exports = function addChainableMethod(ctx, name, method, chainingBehavior) {
  if (typeof chainingBehavior !== 'function') {
    chainingBehavior = function () { };
  }

  var chainableBehavior = {
      method: method
    , chainingBehavior: chainingBehavior
  };

  // save the methods so we can overwrite them later, if we need to.
  if (!ctx.__methods) {
    ctx.__methods = {};
  }
  ctx.__methods[name] = chainableBehavior;

  Object.defineProperty(ctx, name,
    { get: function chainableMethodGetter() {
        chainableBehavior.chainingBehavior.call(this);

        var chainableMethodWrapper = function () {
          // Setting the `ssfi` flag to `chainableMethodWrapper` causes this
          // function to be the starting point for removing implementation
          // frames from the stack trace of a failed assertion.
          //
          // However, we only want to use this function as the starting point if
          // the `lockSsfi` flag isn't set.
          //
          // If the `lockSsfi` flag is set, then this assertion is being
          // invoked from inside of another assertion. In this case, the `ssfi`
          // flag has already been set by the outer assertion.
          //
          // Note that overwriting a chainable method merely replaces the saved
          // methods in `ctx.__methods` instead of completely replacing the
          // overwritten assertion. Therefore, an overwriting assertion won't
          // set the `ssfi` or `lockSsfi` flags.
          if (!flag(this, 'lockSsfi')) {
            flag(this, 'ssfi', chainableMethodWrapper);
          }

          var result = chainableBehavior.method.apply(this, arguments);
          if (result !== undefined) {
            return result;
          }

          var newAssertion = new chai.Assertion();
          transferFlags(this, newAssertion);
          return newAssertion;
        };

        addLengthGuard(chainableMethodWrapper, name, true);

        // Use `Object.setPrototypeOf` if available
        if (canSetPrototype) {
          // Inherit all properties from the object by replacing the `Function` prototype
          var prototype = Object.create(this);
          // Restore the `call` and `apply` methods from `Function`
          prototype.call = call;
          prototype.apply = apply;
          Object.setPrototypeOf(chainableMethodWrapper, prototype);
        }
        // Otherwise, redefine all properties (slow!)
        else {
          var asserterNames = Object.getOwnPropertyNames(ctx);
          asserterNames.forEach(function (asserterName) {
            if (excludeNames.indexOf(asserterName) !== -1) {
              return;
            }

            var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
            Object.defineProperty(chainableMethodWrapper, asserterName, pd);
          });
        }

        transferFlags(this, chainableMethodWrapper);
        return proxify(chainableMethodWrapper);
      }
    , configurable: true
  });
};


/***/ }),
/* 610 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - addMethod utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var addLengthGuard = __webpack_require__(143);
var chai = __webpack_require__(72);
var flag = __webpack_require__(46);
var proxify = __webpack_require__(146);
var transferFlags = __webpack_require__(74);

/**
 * ### .addMethod(ctx, name, method)
 *
 * Adds a method to the prototype of an object.
 *
 *     utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
 *       var obj = utils.flag(this, 'object');
 *       new chai.Assertion(obj).to.be.equal(str);
 *     });
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.addMethod('foo', fn);
 *
 * Then can be used as any other assertion.
 *
 *     expect(fooStr).to.be.foo('bar');
 *
 * @param {Object} ctx object to which the method is added
 * @param {String} name of method to add
 * @param {Function} method function to be used for name
 * @namespace Utils
 * @name addMethod
 * @api public
 */

module.exports = function addMethod(ctx, name, method) {
  var methodWrapper = function () {
    // Setting the `ssfi` flag to `methodWrapper` causes this function to be the
    // starting point for removing implementation frames from the stack trace of
    // a failed assertion.
    //
    // However, we only want to use this function as the starting point if the
    // `lockSsfi` flag isn't set.
    //
    // If the `lockSsfi` flag is set, then either this assertion has been
    // overwritten by another assertion, or this assertion is being invoked from
    // inside of another assertion. In the first case, the `ssfi` flag has
    // already been set by the overwriting assertion. In the second case, the
    // `ssfi` flag has already been set by the outer assertion.
    if (!flag(this, 'lockSsfi')) {
      flag(this, 'ssfi', methodWrapper);
    }

    var result = method.apply(this, arguments);
    if (result !== undefined)
      return result;

    var newAssertion = new chai.Assertion();
    transferFlags(this, newAssertion);
    return newAssertion;
  };

  addLengthGuard(methodWrapper, name, false);
  ctx[name] = proxify(methodWrapper, name);
};


/***/ }),
/* 611 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - addProperty utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var chai = __webpack_require__(72);
var flag = __webpack_require__(46);
var isProxyEnabled = __webpack_require__(145);
var transferFlags = __webpack_require__(74);

/**
 * ### .addProperty(ctx, name, getter)
 *
 * Adds a property to the prototype of an object.
 *
 *     utils.addProperty(chai.Assertion.prototype, 'foo', function () {
 *       var obj = utils.flag(this, 'object');
 *       new chai.Assertion(obj).to.be.instanceof(Foo);
 *     });
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.addProperty('foo', fn);
 *
 * Then can be used as any other assertion.
 *
 *     expect(myFoo).to.be.foo;
 *
 * @param {Object} ctx object to which the property is added
 * @param {String} name of property to add
 * @param {Function} getter function to be used for name
 * @namespace Utils
 * @name addProperty
 * @api public
 */

module.exports = function addProperty(ctx, name, getter) {
  getter = getter === undefined ? function () {} : getter;

  Object.defineProperty(ctx, name,
    { get: function propertyGetter() {
        // Setting the `ssfi` flag to `propertyGetter` causes this function to
        // be the starting point for removing implementation frames from the
        // stack trace of a failed assertion.
        //
        // However, we only want to use this function as the starting point if
        // the `lockSsfi` flag isn't set and proxy protection is disabled.
        //
        // If the `lockSsfi` flag is set, then either this assertion has been
        // overwritten by another assertion, or this assertion is being invoked
        // from inside of another assertion. In the first case, the `ssfi` flag
        // has already been set by the overwriting assertion. In the second
        // case, the `ssfi` flag has already been set by the outer assertion.
        //
        // If proxy protection is enabled, then the `ssfi` flag has already been
        // set by the proxy getter.
        if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {
          flag(this, 'ssfi', propertyGetter);
        }

        var result = getter.call(this);
        if (result !== undefined)
          return result;

        var newAssertion = new chai.Assertion();
        transferFlags(this, newAssertion);
        return newAssertion;
      }
    , configurable: true
  });
};


/***/ }),
/* 612 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - compareByInspect utility
 * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependancies
 */

var inspect = __webpack_require__(144);

/**
 * ### .compareByInspect(mixed, mixed)
 *
 * To be used as a compareFunction with Array.prototype.sort. Compares elements
 * using inspect instead of default behavior of using toString so that Symbols
 * and objects with irregular/missing toString can still be sorted without a
 * TypeError.
 *
 * @param {Mixed} first element to compare
 * @param {Mixed} second element to compare
 * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1 
 * @name compareByInspect
 * @namespace Utils
 * @api public
 */

module.exports = function compareByInspect(a, b) {
  return inspect(a) < inspect(b) ? -1 : 1;
};


/***/ }),
/* 613 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - expectTypes utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .expectTypes(obj, types)
 *
 * Ensures that the object being tested against is of a valid type.
 *
 *     utils.expectTypes(this, ['array', 'object', 'string']);
 *
 * @param {Mixed} obj constructed Assertion
 * @param {Array} type A list of allowed types for this assertion
 * @namespace Utils
 * @name expectTypes
 * @api public
 */

var AssertionError = __webpack_require__(273);
var flag = __webpack_require__(46);
var type = __webpack_require__(244);

module.exports = function expectTypes(obj, types) {
  var flagMsg = flag(obj, 'message');
  var ssfi = flag(obj, 'ssfi');

  flagMsg = flagMsg ? flagMsg + ': ' : '';

  obj = flag(obj, 'object');
  types = types.map(function (t) { return t.toLowerCase(); });
  types.sort();

  // Transforms ['lorem', 'ipsum'] into 'a lorem, or an ipsum'
  var str = types.map(function (t, index) {
    var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';
    var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';
    return or + art + ' ' + t;
  }).join(', ');

  var objType = type(obj).toLowerCase();

  if (!types.some(function (expected) { return objType === expected; })) {
    throw new AssertionError(
      flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given',
      undefined,
      ssfi
    );
  }
};


/***/ }),
/* 614 */
/***/ (function(module, exports) {

/*!
 * Chai - getEnumerableProperties utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .getEnumerableProperties(object)
 *
 * This allows the retrieval of enumerable property names of an object,
 * inherited or not.
 *
 * @param {Object} object
 * @returns {Array}
 * @namespace Utils
 * @name getEnumerableProperties
 * @api public
 */

module.exports = function getEnumerableProperties(object) {
  var result = [];
  for (var name in object) {
    result.push(name);
  }
  return result;
};


/***/ }),
/* 615 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - message composition utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependancies
 */

var flag = __webpack_require__(46)
  , getActual = __webpack_require__(289)
  , inspect = __webpack_require__(144)
  , objDisplay = __webpack_require__(292);

/**
 * ### .getMessage(object, message, negateMessage)
 *
 * Construct the error message based on flags
 * and template tags. Template tags will return
 * a stringified inspection of the object referenced.
 *
 * Message template tags:
 * - `#{this}` current asserted object
 * - `#{act}` actual value
 * - `#{exp}` expected value
 *
 * @param {Object} object (constructed Assertion)
 * @param {Arguments} chai.Assertion.prototype.assert arguments
 * @namespace Utils
 * @name getMessage
 * @api public
 */

module.exports = function getMessage(obj, args) {
  var negate = flag(obj, 'negate')
    , val = flag(obj, 'object')
    , expected = args[3]
    , actual = getActual(obj, args)
    , msg = negate ? args[2] : args[1]
    , flagMsg = flag(obj, 'message');

  if(typeof msg === "function") msg = msg();
  msg = msg || '';
  msg = msg
    .replace(/#\{this\}/g, function () { return objDisplay(val); })
    .replace(/#\{act\}/g, function () { return objDisplay(actual); })
    .replace(/#\{exp\}/g, function () { return objDisplay(expected); });

  return flagMsg ? flagMsg + ': ' + msg : msg;
};


/***/ }),
/* 616 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - getOwnEnumerableProperties utility
 * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependancies
 */

var getOwnEnumerablePropertySymbols = __webpack_require__(290);

/**
 * ### .getOwnEnumerableProperties(object)
 *
 * This allows the retrieval of directly-owned enumerable property names and
 * symbols of an object. This function is necessary because Object.keys only
 * returns enumerable property names, not enumerable property symbols.
 *
 * @param {Object} object
 * @returns {Array}
 * @namespace Utils
 * @name getOwnEnumerableProperties
 * @api public
 */

module.exports = function getOwnEnumerableProperties(obj) {
  return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));
};


/***/ }),
/* 617 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * chai
 * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Dependencies that are used for multiple exports are required here only once
 */

var pathval = __webpack_require__(991);

/*!
 * test utility
 */

exports.test = __webpack_require__(622);

/*!
 * type utility
 */

exports.type = __webpack_require__(244);

/*!
 * expectTypes utility
 */
exports.expectTypes = __webpack_require__(613);

/*!
 * message utility
 */

exports.getMessage = __webpack_require__(615);

/*!
 * actual utility
 */

exports.getActual = __webpack_require__(289);

/*!
 * Inspect util
 */

exports.inspect = __webpack_require__(144);

/*!
 * Object Display util
 */

exports.objDisplay = __webpack_require__(292);

/*!
 * Flag utility
 */

exports.flag = __webpack_require__(46);

/*!
 * Flag transferring utility
 */

exports.transferFlags = __webpack_require__(74);

/*!
 * Deep equal utility
 */

exports.eql = __webpack_require__(716);

/*!
 * Deep path info
 */

exports.getPathInfo = pathval.getPathInfo;

/*!
 * Check if a property exists
 */

exports.hasProperty = pathval.hasProperty;

/*!
 * Function name
 */

exports.getName = __webpack_require__(351);

/*!
 * add Property
 */

exports.addProperty = __webpack_require__(611);

/*!
 * add Method
 */

exports.addMethod = __webpack_require__(610);

/*!
 * overwrite Property
 */

exports.overwriteProperty = __webpack_require__(621);

/*!
 * overwrite Method
 */

exports.overwriteMethod = __webpack_require__(620);

/*!
 * Add a chainable method
 */

exports.addChainableMethod = __webpack_require__(609);

/*!
 * Overwrite chainable method
 */

exports.overwriteChainableMethod = __webpack_require__(619);

/*!
 * Compare by inspect method
 */

exports.compareByInspect = __webpack_require__(612);

/*!
 * Get own enumerable property symbols method
 */

exports.getOwnEnumerablePropertySymbols = __webpack_require__(290);

/*!
 * Get own enumerable properties method
 */

exports.getOwnEnumerableProperties = __webpack_require__(616);

/*!
 * Checks error against a given set of criteria
 */

exports.checkError = __webpack_require__(623);

/*!
 * Proxify util
 */

exports.proxify = __webpack_require__(146);

/*!
 * addLengthGuard util
 */

exports.addLengthGuard = __webpack_require__(143);

/*!
 * isProxyEnabled helper
 */

exports.isProxyEnabled = __webpack_require__(145);

/*!
 * isNaN method
 */

exports.isNaN = __webpack_require__(618);


/***/ }),
/* 618 */
/***/ (function(module, exports) {

/*!
 * Chai - isNaN utility
 * Copyright(c) 2012-2015 Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
 * MIT Licensed
 */

/**
 * ### .isNaN(value)
 *
 * Checks if the given value is NaN or not.
 *
 *     utils.isNaN(NaN); // true
 *
 * @param {Value} The value which has to be checked if it is NaN
 * @name isNaN
 * @api private
 */

function isNaN(value) {
  // Refer http://www.ecma-international.org/ecma-262/6.0/#sec-isnan-number
  // section's NOTE.
  return value !== value;
}

// If ECMAScript 6's Number.isNaN is present, prefer that.
module.exports = Number.isNaN || isNaN;


/***/ }),
/* 619 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - overwriteChainableMethod utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var chai = __webpack_require__(72);
var transferFlags = __webpack_require__(74);

/**
 * ### .overwriteChainableMethod(ctx, name, method, chainingBehavior)
 *
 * Overwites an already existing chainable method
 * and provides access to the previous function or
 * property.  Must return functions to be used for
 * name.
 *
 *     utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',
 *       function (_super) {
 *       }
 *     , function (_super) {
 *       }
 *     );
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.overwriteChainableMethod('foo', fn, fn);
 *
 * Then can be used as any other assertion.
 *
 *     expect(myFoo).to.have.lengthOf(3);
 *     expect(myFoo).to.have.lengthOf.above(3);
 *
 * @param {Object} ctx object whose method / property is to be overwritten
 * @param {String} name of method / property to overwrite
 * @param {Function} method function that returns a function to be used for name
 * @param {Function} chainingBehavior function that returns a function to be used for property
 * @namespace Utils
 * @name overwriteChainableMethod
 * @api public
 */

module.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) {
  var chainableBehavior = ctx.__methods[name];

  var _chainingBehavior = chainableBehavior.chainingBehavior;
  chainableBehavior.chainingBehavior = function overwritingChainableMethodGetter() {
    var result = chainingBehavior(_chainingBehavior).call(this);
    if (result !== undefined) {
      return result;
    }

    var newAssertion = new chai.Assertion();
    transferFlags(this, newAssertion);
    return newAssertion;
  };

  var _method = chainableBehavior.method;
  chainableBehavior.method = function overwritingChainableMethodWrapper() {
    var result = method(_method).apply(this, arguments);
    if (result !== undefined) {
      return result;
    }

    var newAssertion = new chai.Assertion();
    transferFlags(this, newAssertion);
    return newAssertion;
  };
};


/***/ }),
/* 620 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - overwriteMethod utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var addLengthGuard = __webpack_require__(143);
var chai = __webpack_require__(72);
var flag = __webpack_require__(46);
var proxify = __webpack_require__(146);
var transferFlags = __webpack_require__(74);

/**
 * ### .overwriteMethod(ctx, name, fn)
 *
 * Overwites an already existing method and provides
 * access to previous function. Must return function
 * to be used for name.
 *
 *     utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
 *       return function (str) {
 *         var obj = utils.flag(this, 'object');
 *         if (obj instanceof Foo) {
 *           new chai.Assertion(obj.value).to.equal(str);
 *         } else {
 *           _super.apply(this, arguments);
 *         }
 *       }
 *     });
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.overwriteMethod('foo', fn);
 *
 * Then can be used as any other assertion.
 *
 *     expect(myFoo).to.equal('bar');
 *
 * @param {Object} ctx object whose method is to be overwritten
 * @param {String} name of method to overwrite
 * @param {Function} method function that returns a function to be used for name
 * @namespace Utils
 * @name overwriteMethod
 * @api public
 */

module.exports = function overwriteMethod(ctx, name, method) {
  var _method = ctx[name]
    , _super = function () {
      throw new Error(name + ' is not a function');
    };

  if (_method && 'function' === typeof _method)
    _super = _method;

  var overwritingMethodWrapper = function () {
    // Setting the `ssfi` flag to `overwritingMethodWrapper` causes this
    // function to be the starting point for removing implementation frames from
    // the stack trace of a failed assertion.
    //
    // However, we only want to use this function as the starting point if the
    // `lockSsfi` flag isn't set.
    //
    // If the `lockSsfi` flag is set, then either this assertion has been
    // overwritten by another assertion, or this assertion is being invoked from
    // inside of another assertion. In the first case, the `ssfi` flag has
    // already been set by the overwriting assertion. In the second case, the
    // `ssfi` flag has already been set by the outer assertion.
    if (!flag(this, 'lockSsfi')) {
      flag(this, 'ssfi', overwritingMethodWrapper);
    }

    // Setting the `lockSsfi` flag to `true` prevents the overwritten assertion
    // from changing the `ssfi` flag. By this point, the `ssfi` flag is already
    // set to the correct starting point for this assertion.
    var origLockSsfi = flag(this, 'lockSsfi');
    flag(this, 'lockSsfi', true);
    var result = method(_super).apply(this, arguments);
    flag(this, 'lockSsfi', origLockSsfi);

    if (result !== undefined) {
      return result;
    }

    var newAssertion = new chai.Assertion();
    transferFlags(this, newAssertion);
    return newAssertion;
  }

  addLengthGuard(overwritingMethodWrapper, name, false);
  ctx[name] = proxify(overwritingMethodWrapper, name);
};


/***/ }),
/* 621 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - overwriteProperty utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var chai = __webpack_require__(72);
var flag = __webpack_require__(46);
var isProxyEnabled = __webpack_require__(145);
var transferFlags = __webpack_require__(74);

/**
 * ### .overwriteProperty(ctx, name, fn)
 *
 * Overwites an already existing property getter and provides
 * access to previous value. Must return function to use as getter.
 *
 *     utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
 *       return function () {
 *         var obj = utils.flag(this, 'object');
 *         if (obj instanceof Foo) {
 *           new chai.Assertion(obj.name).to.equal('bar');
 *         } else {
 *           _super.call(this);
 *         }
 *       }
 *     });
 *
 *
 * Can also be accessed directly from `chai.Assertion`.
 *
 *     chai.Assertion.overwriteProperty('foo', fn);
 *
 * Then can be used as any other assertion.
 *
 *     expect(myFoo).to.be.ok;
 *
 * @param {Object} ctx object whose property is to be overwritten
 * @param {String} name of property to overwrite
 * @param {Function} getter function that returns a getter function to be used for name
 * @namespace Utils
 * @name overwriteProperty
 * @api public
 */

module.exports = function overwriteProperty(ctx, name, getter) {
  var _get = Object.getOwnPropertyDescriptor(ctx, name)
    , _super = function () {};

  if (_get && 'function' === typeof _get.get)
    _super = _get.get

  Object.defineProperty(ctx, name,
    { get: function overwritingPropertyGetter() {
        // Setting the `ssfi` flag to `overwritingPropertyGetter` causes this
        // function to be the starting point for removing implementation frames
        // from the stack trace of a failed assertion.
        //
        // However, we only want to use this function as the starting point if
        // the `lockSsfi` flag isn't set and proxy protection is disabled.
        //
        // If the `lockSsfi` flag is set, then either this assertion has been
        // overwritten by another assertion, or this assertion is being invoked
        // from inside of another assertion. In the first case, the `ssfi` flag
        // has already been set by the overwriting assertion. In the second
        // case, the `ssfi` flag has already been set by the outer assertion.
        //
        // If proxy protection is enabled, then the `ssfi` flag has already been
        // set by the proxy getter.
        if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {
          flag(this, 'ssfi', overwritingPropertyGetter);
        }

        // Setting the `lockSsfi` flag to `true` prevents the overwritten
        // assertion from changing the `ssfi` flag. By this point, the `ssfi`
        // flag is already set to the correct starting point for this assertion.
        var origLockSsfi = flag(this, 'lockSsfi');
        flag(this, 'lockSsfi', true);
        var result = getter(_super).call(this);
        flag(this, 'lockSsfi', origLockSsfi);

        if (result !== undefined) {
          return result;
        }

        var newAssertion = new chai.Assertion();
        transferFlags(this, newAssertion);
        return newAssertion;
      }
    , configurable: true
  });
};


/***/ }),
/* 622 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Chai - test utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/*!
 * Module dependancies
 */

var flag = __webpack_require__(46);

/**
 * ### .test(object, expression)
 *
 * Test and object for expression.
 *
 * @param {Object} object (constructed Assertion)
 * @param {Arguments} chai.Assertion.prototype.assert arguments
 * @namespace Utils
 * @name test
 */

module.exports = function test(obj, args) {
  var negate = flag(obj, 'negate')
    , expr = args[0];
  return negate ? !expr : expr;
};


/***/ }),
/* 623 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/* !
 * Chai - checkError utility
 * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

/**
 * ### .checkError
 *
 * Checks that an error conforms to a given set of criteria and/or retrieves information about it.
 *
 * @api public
 */

/**
 * ### .compatibleInstance(thrown, errorLike)
 *
 * Checks if two instances are compatible (strict equal).
 * Returns false if errorLike is not an instance of Error, because instances
 * can only be compatible if they're both error instances.
 *
 * @name compatibleInstance
 * @param {Error} thrown error
 * @param {Error|ErrorConstructor} errorLike object to compare against
 * @namespace Utils
 * @api public
 */

function compatibleInstance(thrown, errorLike) {
  return errorLike instanceof Error && thrown === errorLike;
}

/**
 * ### .compatibleConstructor(thrown, errorLike)
 *
 * Checks if two constructors are compatible.
 * This function can receive either an error constructor or
 * an error instance as the `errorLike` argument.
 * Constructors are compatible if they're the same or if one is
 * an instance of another.
 *
 * @name compatibleConstructor
 * @param {Error} thrown error
 * @param {Error|ErrorConstructor} errorLike object to compare against
 * @namespace Utils
 * @api public
 */

function compatibleConstructor(thrown, errorLike) {
  if (errorLike instanceof Error) {
    // If `errorLike` is an instance of any error we compare their constructors
    return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor;
  } else if (errorLike.prototype instanceof Error || errorLike === Error) {
    // If `errorLike` is a constructor that inherits from Error, we compare `thrown` to `errorLike` directly
    return thrown.constructor === errorLike || thrown instanceof errorLike;
  }

  return false;
}

/**
 * ### .compatibleMessage(thrown, errMatcher)
 *
 * Checks if an error's message is compatible with a matcher (String or RegExp).
 * If the message contains the String or passes the RegExp test,
 * it is considered compatible.
 *
 * @name compatibleMessage
 * @param {Error} thrown error
 * @param {String|RegExp} errMatcher to look for into the message
 * @namespace Utils
 * @api public
 */

function compatibleMessage(thrown, errMatcher) {
  var comparisonString = typeof thrown === 'string' ? thrown : thrown.message;
  if (errMatcher instanceof RegExp) {
    return errMatcher.test(comparisonString);
  } else if (typeof errMatcher === 'string') {
    return comparisonString.indexOf(errMatcher) !== -1; // eslint-disable-line no-magic-numbers
  }

  return false;
}

/**
 * ### .getFunctionName(constructorFn)
 *
 * Returns the name of a function.
 * This also includes a polyfill function if `constructorFn.name` is not defined.
 *
 * @name getFunctionName
 * @param {Function} constructorFn
 * @namespace Utils
 * @api private
 */

var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\(\/]+)/;
function getFunctionName(constructorFn) {
  var name = '';
  if (typeof constructorFn.name === 'undefined') {
    // Here we run a polyfill if constructorFn.name is not defined
    var match = String(constructorFn).match(functionNameMatch);
    if (match) {
      name = match[1];
    }
  } else {
    name = constructorFn.name;
  }

  return name;
}

/**
 * ### .getConstructorName(errorLike)
 *
 * Gets the constructor name for an Error instance or constructor itself.
 *
 * @name getConstructorName
 * @param {Error|ErrorConstructor} errorLike
 * @namespace Utils
 * @api public
 */

function getConstructorName(errorLike) {
  var constructorName = errorLike;
  if (errorLike instanceof Error) {
    constructorName = getFunctionName(errorLike.constructor);
  } else if (typeof errorLike === 'function') {
    // If `err` is not an instance of Error it is an error constructor itself or another function.
    // If we've got a common function we get its name, otherwise we may need to create a new instance
    // of the error just in case it's a poorly-constructed error. Please see chaijs/chai/issues/45 to know more.
    constructorName = getFunctionName(errorLike).trim() ||
        getFunctionName(new errorLike()); // eslint-disable-line new-cap
  }

  return constructorName;
}

/**
 * ### .getMessage(errorLike)
 *
 * Gets the error message from an error.
 * If `err` is a String itself, we return it.
 * If the error has no message, we return an empty string.
 *
 * @name getMessage
 * @param {Error|String} errorLike
 * @namespace Utils
 * @api public
 */

function getMessage(errorLike) {
  var msg = '';
  if (errorLike && errorLike.message) {
    msg = errorLike.message;
  } else if (typeof errorLike === 'string') {
    msg = errorLike;
  }

  return msg;
}

module.exports = {
  compatibleInstance: compatibleInstance,
  compatibleConstructor: compatibleConstructor,
  compatibleMessage: compatibleMessage,
  getMessage: getMessage,
  getConstructorName: getConstructorName,
};


/***/ }),
/* 624 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var EventEmitter = __webpack_require__(18).EventEmitter;
var fs = __webpack_require__(1);
var sysPath = __webpack_require__(0);
var asyncEach = __webpack_require__(570);
var anymatch = __webpack_require__(553);
var globParent = __webpack_require__(627);
var isGlob = __webpack_require__(96);
var isAbsolute = __webpack_require__(65);
var inherits = __webpack_require__(54);

var NodeFsHandler = __webpack_require__(626);
var FsEventsHandler = __webpack_require__(625);

var arrify = function(value) {
  if (value == null) return [];
  return Array.isArray(value) ? value : [value];
};

var flatten = function(list, result) {
  if (result == null) result = [];
  list.forEach(function(item) {
    if (Array.isArray(item)) {
      flatten(item, result);
    } else {
      result.push(item);
    }
  });
  return result;
};

// Little isString util for use in Array#every.
var isString = function(thing) {
  return typeof thing === 'string';
};

// Public: Main class.
// Watches files & directories for changes.
//
// * _opts - object, chokidar options hash
//
// Emitted events:
// `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`
//
// Examples
//
//  var watcher = new FSWatcher()
//    .add(directories)
//    .on('add', path => console.log('File', path, 'was added'))
//    .on('change', path => console.log('File', path, 'was changed'))
//    .on('unlink', path => console.log('File', path, 'was removed'))
//    .on('all', (event, path) => console.log(path, ' emitted ', event))
//
function FSWatcher(_opts) {
  EventEmitter.call(this);
  var opts = {};
  // in case _opts that is passed in is a frozen object
  if (_opts) for (var opt in _opts) opts[opt] = _opts[opt];
  this._watched = Object.create(null);
  this._closers = Object.create(null);
  this._ignoredPaths = Object.create(null);
  Object.defineProperty(this, '_globIgnored', {
    get: function() { return Object.keys(this._ignoredPaths); }
  });
  this.closed = false;
  this._throttled = Object.create(null);
  this._symlinkPaths = Object.create(null);

  function undef(key) {
    return opts[key] === undefined;
  }

  // Set up default options.
  if (undef('persistent')) opts.persistent = true;
  if (undef('ignoreInitial')) opts.ignoreInitial = false;
  if (undef('ignorePermissionErrors')) opts.ignorePermissionErrors = false;
  if (undef('interval')) opts.interval = 100;
  if (undef('binaryInterval')) opts.binaryInterval = 300;
  if (undef('disableGlobbing')) opts.disableGlobbing = false;
  this.enableBinaryInterval = opts.binaryInterval !== opts.interval;

  // Enable fsevents on OS X when polling isn't explicitly enabled.
  if (undef('useFsEvents')) opts.useFsEvents = !opts.usePolling;

  // If we can't use fsevents, ensure the options reflect it's disabled.
  if (!FsEventsHandler.canUse()) opts.useFsEvents = false;

  // Use polling on Mac if not using fsevents.
  // Other platforms use non-polling fs.watch.
  if (undef('usePolling') && !opts.useFsEvents) {
    opts.usePolling = process.platform === 'darwin';
  }

  // Global override (useful for end-developers that need to force polling for all
  // instances of chokidar, regardless of usage/dependency depth)
  var envPoll = process.env.CHOKIDAR_USEPOLLING;
  if (envPoll !== undefined) {
    var envLower = envPoll.toLowerCase();

    if (envLower === 'false' || envLower === '0') {
      opts.usePolling = false;
    } else if (envLower === 'true' || envLower === '1') {
      opts.usePolling = true;
    } else {
      opts.usePolling = !!envLower
    }
  }
  var envInterval = process.env.CHOKIDAR_INTERVAL;
  if (envInterval) {
    opts.interval = parseInt(envInterval);
  }

  // Editor atomic write normalization enabled by default with fs.watch
  if (undef('atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;
  if (opts.atomic) this._pendingUnlinks = Object.create(null);

  if (undef('followSymlinks')) opts.followSymlinks = true;

  if (undef('awaitWriteFinish')) opts.awaitWriteFinish = false;
  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};
  var awf = opts.awaitWriteFinish;
  if (awf) {
    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;
    if (!awf.pollInterval) awf.pollInterval = 100;

    this._pendingWrites = Object.create(null);
  }
  if (opts.ignored) opts.ignored = arrify(opts.ignored);

  this._isntIgnored = function(path, stat) {
    return !this._isIgnored(path, stat);
  }.bind(this);

  var readyCalls = 0;
  this._emitReady = function() {
    if (++readyCalls >= this._readyCount) {
      this._emitReady = Function.prototype;
      this._readyEmitted = true;
      // use process.nextTick to allow time for listener to be bound
      process.nextTick(this.emit.bind(this, 'ready'));
    }
  }.bind(this);

  this.options = opts;

  // You’re frozen when your heart’s not open.
  Object.freeze(opts);
}

inherits(FSWatcher, EventEmitter);

// Common helpers
// --------------

// Private method: Normalize and emit events
//
// * event     - string, type of event
// * path      - string, file or directory path
// * val[1..3] - arguments to be passed with event
//
// Returns the error if defined, otherwise the value of the
// FSWatcher instance's `closed` flag
FSWatcher.prototype._emit = function(event, path, val1, val2, val3) {
  if (this.options.cwd) path = sysPath.relative(this.options.cwd, path);
  var args = [event, path];
  if (val3 !== undefined) args.push(val1, val2, val3);
  else if (val2 !== undefined) args.push(val1, val2);
  else if (val1 !== undefined) args.push(val1);

  var awf = this.options.awaitWriteFinish;
  if (awf && this._pendingWrites[path]) {
    this._pendingWrites[path].lastChange = new Date();
    return this;
  }

  if (this.options.atomic) {
    if (event === 'unlink') {
      this._pendingUnlinks[path] = args;
      setTimeout(function() {
        Object.keys(this._pendingUnlinks).forEach(function(path) {
          this.emit.apply(this, this._pendingUnlinks[path]);
          this.emit.apply(this, ['all'].concat(this._pendingUnlinks[path]));
          delete this._pendingUnlinks[path];
        }.bind(this));
      }.bind(this), typeof this.options.atomic === "number"
        ? this.options.atomic
        : 100);
      return this;
    } else if (event === 'add' && this._pendingUnlinks[path]) {
      event = args[0] = 'change';
      delete this._pendingUnlinks[path];
    }
  }

  var emitEvent = function() {
    this.emit.apply(this, args);
    if (event !== 'error') this.emit.apply(this, ['all'].concat(args));
  }.bind(this);

  if (awf && (event === 'add' || event === 'change') && this._readyEmitted) {
    var awfEmit = function(err, stats) {
      if (err) {
        event = args[0] = 'error';
        args[1] = err;
        emitEvent();
      } else if (stats) {
        // if stats doesn't exist the file must have been deleted
        if (args.length > 2) {
          args[2] = stats;
        } else {
          args.push(stats);
        }
        emitEvent();
      }
    };

    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
    return this;
  }

  if (event === 'change') {
    if (!this._throttle('change', path, 50)) return this;
  }

  if (
    this.options.alwaysStat && val1 === undefined &&
    (event === 'add' || event === 'addDir' || event === 'change')
  ) {
    var fullPath = this.options.cwd ? sysPath.join(this.options.cwd, path) : path;
    fs.stat(fullPath, function(error, stats) {
      // Suppress event when fs.stat fails, to avoid sending undefined 'stat'
      if (error || !stats) return;

      args.push(stats);
      emitEvent();
    });
  } else {
    emitEvent();
  }

  return this;
};

// Private method: Common handler for errors
//
// * error  - object, Error instance
//
// Returns the error if defined, otherwise the value of the
// FSWatcher instance's `closed` flag
FSWatcher.prototype._handleError = function(error) {
  var code = error && error.code;
  var ipe = this.options.ignorePermissionErrors;
  if (error &&
    code !== 'ENOENT' &&
    code !== 'ENOTDIR' &&
    (!ipe || (code !== 'EPERM' && code !== 'EACCES'))
  ) this.emit('error', error);
  return error || this.closed;
};

// Private method: Helper utility for throttling
//
// * action  - string, type of action being throttled
// * path    - string, path being acted upon
// * timeout - int, duration of time to suppress duplicate actions
//
// Returns throttle tracking object or false if action should be suppressed
FSWatcher.prototype._throttle = function(action, path, timeout) {
  if (!(action in this._throttled)) {
    this._throttled[action] = Object.create(null);
  }
  var throttled = this._throttled[action];
  if (path in throttled) return false;
  function clear() {
    delete throttled[path];
    clearTimeout(timeoutObject);
  }
  var timeoutObject = setTimeout(clear, timeout);
  throttled[path] = {timeoutObject: timeoutObject, clear: clear};
  return throttled[path];
};

// Private method: Awaits write operation to finish
//
// * path    - string, path being acted upon
// * threshold - int, time in milliseconds a file size must be fixed before
//                    acknowledgeing write operation is finished
// * awfEmit - function, to be called when ready for event to be emitted
// Polls a newly created file for size variations. When files size does not
// change for 'threshold' milliseconds calls callback.
FSWatcher.prototype._awaitWriteFinish = function(path, threshold, event, awfEmit) {
  var timeoutHandler;

  var fullPath = path;
  if (this.options.cwd && !isAbsolute(path)) {
    fullPath = sysPath.join(this.options.cwd, path);
  }

  var now = new Date();

  var awaitWriteFinish = (function (prevStat) {
    fs.stat(fullPath, function(err, curStat) {
      if (err) {
        if (err.code !== 'ENOENT') awfEmit(err);
        return;
      }

      var now = new Date();

      if (prevStat && curStat.size != prevStat.size) {
        this._pendingWrites[path].lastChange = now;
      }

      if (now - this._pendingWrites[path].lastChange >= threshold) {
        delete this._pendingWrites[path];
        awfEmit(null, curStat);
      } else {
        timeoutHandler = setTimeout(
          awaitWriteFinish.bind(this, curStat),
          this.options.awaitWriteFinish.pollInterval
        );
      }
    }.bind(this));
  }.bind(this));

  if (!(path in this._pendingWrites)) {
    this._pendingWrites[path] = {
      lastChange: now,
      cancelWait: function() {
        delete this._pendingWrites[path];
        clearTimeout(timeoutHandler);
        return event;
      }.bind(this)
    };
    timeoutHandler = setTimeout(
      awaitWriteFinish.bind(this),
      this.options.awaitWriteFinish.pollInterval
    );
  }
};

// Private method: Determines whether user has asked to ignore this path
//
// * path  - string, path to file or directory
// * stats - object, result of fs.stat
//
// Returns boolean
var dotRe = /\..*\.(sw[px])$|\~$|\.subl.*\.tmp/;
FSWatcher.prototype._isIgnored = function(path, stats) {
  if (this.options.atomic && dotRe.test(path)) return true;

  if (!this._userIgnored) {
    var cwd = this.options.cwd;
    var ignored = this.options.ignored;
    if (cwd && ignored) {
      ignored = ignored.map(function (path) {
        if (typeof path !== 'string') return path;
        return isAbsolute(path) ? path : sysPath.join(cwd, path);
      });
    }
    var paths = arrify(ignored)
      .filter(function(path) {
        return typeof path === 'string' && !isGlob(path);
      }).map(function(path) {
        return path + '/**';
      });
    this._userIgnored = anymatch(
      this._globIgnored.concat(ignored).concat(paths)
    );
  }

  return this._userIgnored([path, stats]);
};

// Private method: Provides a set of common helpers and properties relating to
// symlink and glob handling
//
// * path - string, file, directory, or glob pattern being watched
// * depth - int, at any depth > 0, this isn't a glob
//
// Returns object containing helpers for this path
var replacerRe = /^\.[\/\\]/;
FSWatcher.prototype._getWatchHelpers = function(path, depth) {
  path = path.replace(replacerRe, '');
  var watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);
  var fullWatchPath = sysPath.resolve(watchPath);
  var hasGlob = watchPath !== path;
  var globFilter = hasGlob ? anymatch(path) : false;
  var follow = this.options.followSymlinks;
  var globSymlink = hasGlob && follow ? null : false;

  var checkGlobSymlink = function(entry) {
    // only need to resolve once
    // first entry should always have entry.parentDir === ''
    if (globSymlink == null) {
      globSymlink = entry.fullParentDir === fullWatchPath ? false : {
        realPath: entry.fullParentDir,
        linkPath: fullWatchPath
      };
    }

    if (globSymlink) {
      return entry.fullPath.replace(globSymlink.realPath, globSymlink.linkPath);
    }

    return entry.fullPath;
  };

  var entryPath = function(entry) {
    return sysPath.join(watchPath,
      sysPath.relative(watchPath, checkGlobSymlink(entry))
    );
  };

  var filterPath = function(entry) {
    if (entry.stat && entry.stat.isSymbolicLink()) return filterDir(entry);
    var resolvedPath = entryPath(entry);
    return (!hasGlob || globFilter(resolvedPath)) &&
      this._isntIgnored(resolvedPath, entry.stat) &&
      (this.options.ignorePermissionErrors ||
        this._hasReadPermissions(entry.stat));
  }.bind(this);

  var getDirParts = function(path) {
    if (!hasGlob) return false;
    var parts = sysPath.relative(watchPath, path).split(/[\/\\]/);
    return parts;
  };

  var dirParts = getDirParts(path);
  if (dirParts && dirParts.length > 1) dirParts.pop();
  var unmatchedGlob;

  var filterDir = function(entry) {
    if (hasGlob) {
      var entryParts = getDirParts(checkGlobSymlink(entry));
      var globstar = false;
      unmatchedGlob = !dirParts.every(function(part, i) {
        if (part === '**') globstar = true;
        return globstar || !entryParts[i] || anymatch(part, entryParts[i]);
      });
    }
    return !unmatchedGlob && this._isntIgnored(entryPath(entry), entry.stat);
  }.bind(this);

  return {
    followSymlinks: follow,
    statMethod: follow ? 'stat' : 'lstat',
    path: path,
    watchPath: watchPath,
    entryPath: entryPath,
    hasGlob: hasGlob,
    globFilter: globFilter,
    filterPath: filterPath,
    filterDir: filterDir
  };
};

// Directory helpers
// -----------------

// Private method: Provides directory tracking objects
//
// * directory - string, path of the directory
//
// Returns the directory's tracking object
FSWatcher.prototype._getWatchedDir = function(directory) {
  var dir = sysPath.resolve(directory);
  var watcherRemove = this._remove.bind(this);
  if (!(dir in this._watched)) this._watched[dir] = {
    _items: Object.create(null),
    add: function(item) {
      if (item !== '.' && item !== '..') this._items[item] = true;
    },
    remove: function(item) {
      delete this._items[item];
      if (!this.children().length) {
        fs.readdir(dir, function(err) {
          if (err) watcherRemove(sysPath.dirname(dir), sysPath.basename(dir));
        });
      }
    },
    has: function(item) {return item in this._items;},
    children: function() {return Object.keys(this._items);}
  };
  return this._watched[dir];
};

// File helpers
// ------------

// Private method: Check for read permissions
// Based on this answer on SO: http://stackoverflow.com/a/11781404/1358405
//
// * stats - object, result of fs.stat
//
// Returns boolean
FSWatcher.prototype._hasReadPermissions = function(stats) {
  return Boolean(4 & parseInt(((stats && stats.mode) & 0x1ff).toString(8)[0], 10));
};

// Private method: Handles emitting unlink events for
// files and directories, and via recursion, for
// files and directories within directories that are unlinked
//
// * directory - string, directory within which the following item is located
// * item      - string, base path of item/directory
//
// Returns nothing
FSWatcher.prototype._remove = function(directory, item) {
  // if what is being deleted is a directory, get that directory's paths
  // for recursive deleting and cleaning of watched object
  // if it is not a directory, nestedDirectoryChildren will be empty array
  var path = sysPath.join(directory, item);
  var fullPath = sysPath.resolve(path);
  var isDirectory = this._watched[path] || this._watched[fullPath];

  // prevent duplicate handling in case of arriving here nearly simultaneously
  // via multiple paths (such as _handleFile and _handleDir)
  if (!this._throttle('remove', path, 100)) return;

  // if the only watched file is removed, watch for its return
  var watchedDirs = Object.keys(this._watched);
  if (!isDirectory && !this.options.useFsEvents && watchedDirs.length === 1) {
    this.add(directory, item, true);
  }

  // This will create a new entry in the watched object in either case
  // so we got to do the directory check beforehand
  var nestedDirectoryChildren = this._getWatchedDir(path).children();

  // Recursively remove children directories / files.
  nestedDirectoryChildren.forEach(function(nestedItem) {
    this._remove(path, nestedItem);
  }, this);

  // Check if item was on the watched list and remove it
  var parent = this._getWatchedDir(directory);
  var wasTracked = parent.has(item);
  parent.remove(item);

  // If we wait for this file to be fully written, cancel the wait.
  var relPath = path;
  if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);
  if (this.options.awaitWriteFinish && this._pendingWrites[relPath]) {
    var event = this._pendingWrites[relPath].cancelWait();
    if (event === 'add') return;
  }

  // The Entry will either be a directory that just got removed
  // or a bogus entry to a file, in either case we have to remove it
  delete this._watched[path];
  delete this._watched[fullPath];
  var eventName = isDirectory ? 'unlinkDir' : 'unlink';
  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);

  // Avoid conflicts if we later create another file with the same name
  if (!this.options.useFsEvents) {
    this._closePath(path);
  }
};

FSWatcher.prototype._closePath = function(path) {
  if (!this._closers[path]) return;
  this._closers[path]();
  delete this._closers[path];
  this._getWatchedDir(sysPath.dirname(path)).remove(sysPath.basename(path));
}

// Public method: Adds paths to be watched on an existing FSWatcher instance

// * paths     - string or array of strings, file/directory paths and/or globs
// * _origAdd  - private boolean, for handling non-existent paths to be watched
// * _internal - private boolean, indicates a non-user add

// Returns an instance of FSWatcher for chaining.
FSWatcher.prototype.add = function(paths, _origAdd, _internal) {
  var cwd = this.options.cwd;
  this.closed = false;
  paths = flatten(arrify(paths));

  if (!paths.every(isString)) {
    throw new TypeError('Non-string provided as watch path: ' + paths);
  }

  if (cwd) paths = paths.map(function(path) {
    if (isAbsolute(path)) {
      return path;
    } else if (path[0] === '!') {
      return '!' + sysPath.join(cwd, path.substring(1));
    } else {
      return sysPath.join(cwd, path);
    }
  });

  // set aside negated glob strings
  paths = paths.filter(function(path) {
    if (path[0] === '!') {
      this._ignoredPaths[path.substring(1)] = true;
    } else {
      // if a path is being added that was previously ignored, stop ignoring it
      delete this._ignoredPaths[path];
      delete this._ignoredPaths[path + '/**'];

      // reset the cached userIgnored anymatch fn
      // to make ignoredPaths changes effective
      this._userIgnored = null;

      return true;
    }
  }, this);

  if (this.options.useFsEvents && FsEventsHandler.canUse()) {
    if (!this._readyCount) this._readyCount = paths.length;
    if (this.options.persistent) this._readyCount *= 2;
    paths.forEach(this._addToFsEvents, this);
  } else {
    if (!this._readyCount) this._readyCount = 0;
    this._readyCount += paths.length;
    asyncEach(paths, function(path, next) {
      this._addToNodeFs(path, !_internal, 0, 0, _origAdd, function(err, res) {
        if (res) this._emitReady();
        next(err, res);
      }.bind(this));
    }.bind(this), function(error, results) {
      results.forEach(function(item) {
        if (!item || this.closed) return;
        this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));
      }, this);
    }.bind(this));
  }

  return this;
};

// Public method: Close watchers or start ignoring events from specified paths.

// * paths     - string or array of strings, file/directory paths and/or globs

// Returns instance of FSWatcher for chaining.
FSWatcher.prototype.unwatch = function(paths) {
  if (this.closed) return this;
  paths = flatten(arrify(paths));

  paths.forEach(function(path) {
    // convert to absolute path unless relative path already matches
    if (!isAbsolute(path) && !this._closers[path]) {
      if (this.options.cwd) path = sysPath.join(this.options.cwd, path);
      path = sysPath.resolve(path);
    }

    this._closePath(path);

    this._ignoredPaths[path] = true;
    if (path in this._watched) {
      this._ignoredPaths[path + '/**'] = true;
    }

    // reset the cached userIgnored anymatch fn
    // to make ignoredPaths changes effective
    this._userIgnored = null;
  }, this);

  return this;
};

// Public method: Close watchers and remove all listeners from watched paths.

// Returns instance of FSWatcher for chaining.
FSWatcher.prototype.close = function() {
  if (this.closed) return this;

  this.closed = true;
  Object.keys(this._closers).forEach(function(watchPath) {
    this._closers[watchPath]();
    delete this._closers[watchPath];
  }, this);
  this._watched = Object.create(null);

  this.removeAllListeners();
  return this;
};

// Public method: Expose list of watched paths

// Returns object w/ dir paths as keys and arrays of contained paths as values.
FSWatcher.prototype.getWatched = function() {
  var watchList = {};
  Object.keys(this._watched).forEach(function(dir) {
    var key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;
    watchList[key || '.'] = Object.keys(this._watched[dir]._items).sort();
  }.bind(this));
  return watchList;
};

// Attach watch handler prototype methods
function importHandler(handler) {
  Object.keys(handler.prototype).forEach(function(method) {
    FSWatcher.prototype[method] = handler.prototype[method];
  });
}
importHandler(NodeFsHandler);
if (FsEventsHandler.canUse()) importHandler(FsEventsHandler);

// Export FSWatcher class
exports.FSWatcher = FSWatcher;

// Public function: Instantiates watcher with paths to be tracked.

// * paths     - string or array of strings, file/directory paths and/or globs
// * options   - object, chokidar options

// Returns an instance of FSWatcher for chaining.
exports.watch = function(paths, options) {
  return new FSWatcher(options).add(paths);
};


/***/ }),
/* 625 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1);
var sysPath = __webpack_require__(0);
var readdirp = __webpack_require__(398);
var fsevents;
try { fsevents = __webpack_require__(468); } catch (error) {}

// fsevents instance helper functions

// object to hold per-process fsevents instances
// (may be shared across chokidar FSWatcher instances)
var FSEventsWatchers = Object.create(null);

// Threshold of duplicate path prefixes at which to start
// consolidating going forward
var consolidateThreshhold = 10;

// Private function: Instantiates the fsevents interface

// * path       - string, path to be watched
// * callback   - function, called when fsevents is bound and ready

// Returns new fsevents instance
function createFSEventsInstance(path, callback) {
  return (new fsevents(path)).on('fsevent', callback).start();
}

// Private function: Instantiates the fsevents interface or binds listeners
// to an existing one covering the same file tree

// * path       - string, path to be watched
// * realPath   - string, real path (in case of symlinks)
// * listener   - function, called when fsevents emits events
// * rawEmitter - function, passes data to listeners of the 'raw' event

// Returns close function
function setFSEventsListener(path, realPath, listener, rawEmitter) {
  var watchPath = sysPath.extname(path) ? sysPath.dirname(path) : path;
  var watchContainer;
  var parentPath = sysPath.dirname(watchPath);

  // If we've accumulated a substantial number of paths that
  // could have been consolidated by watching one directory
  // above the current one, create a watcher on the parent
  // path instead, so that we do consolidate going forward.
  if (couldConsolidate(parentPath)) {
    watchPath = parentPath;
  }

  var resolvedPath = sysPath.resolve(path);
  var hasSymlink = resolvedPath !== realPath;
  function filteredListener(fullPath, flags, info) {
    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);
    if (
      fullPath === resolvedPath ||
      !fullPath.indexOf(resolvedPath + sysPath.sep)
    ) listener(fullPath, flags, info);
  }

  // check if there is already a watcher on a parent path
  // modifies `watchPath` to the parent path when it finds a match
  function watchedParent() {
    return Object.keys(FSEventsWatchers).some(function(watchedPath) {
      // condition is met when indexOf returns 0
      if (!realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep)) {
        watchPath = watchedPath;
        return true;
      }
    });
  }

  if (watchPath in FSEventsWatchers || watchedParent()) {
    watchContainer = FSEventsWatchers[watchPath];
    watchContainer.listeners.push(filteredListener);
  } else {
    watchContainer = FSEventsWatchers[watchPath] = {
      listeners: [filteredListener],
      rawEmitters: [rawEmitter],
      watcher: createFSEventsInstance(watchPath, function(fullPath, flags) {
        var info = fsevents.getInfo(fullPath, flags);
        watchContainer.listeners.forEach(function(listener) {
          listener(fullPath, flags, info);
        });
        watchContainer.rawEmitters.forEach(function(emitter) {
          emitter(info.event, fullPath, info);
        });
      })
    };
  }
  var listenerIndex = watchContainer.listeners.length - 1;

  // removes this instance's listeners and closes the underlying fsevents
  // instance if there are no more listeners left
  return function close() {
    delete watchContainer.listeners[listenerIndex];
    delete watchContainer.rawEmitters[listenerIndex];
    if (!Object.keys(watchContainer.listeners).length) {
      watchContainer.watcher.stop();
      delete FSEventsWatchers[watchPath];
    }
  };
}

// Decide whether or not we should start a new higher-level
// parent watcher
function couldConsolidate(path) {
  var keys = Object.keys(FSEventsWatchers);
  var count = 0;

  for (var i = 0, len = keys.length; i < len; ++i) {
    var watchPath = keys[i];
    if (watchPath.indexOf(path) === 0) {
      count++;
      if (count >= consolidateThreshhold) {
        return true;
      }
    }
  }

  return false;
}

// returns boolean indicating whether fsevents can be used
function canUse() {
  return fsevents && Object.keys(FSEventsWatchers).length < 128;
}

// determines subdirectory traversal levels from root to path
function depth(path, root) {
  var i = 0;
  while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;
  return i;
}

// fake constructor for attaching fsevents-specific prototype methods that
// will be copied to FSWatcher's prototype
function FsEventsHandler() {}

// Private method: Handle symlinks encountered during directory scan

// * watchPath  - string, file/dir path to be watched with fsevents
// * realPath   - string, real path (in case of symlinks)
// * transform  - function, path transformer
// * globFilter - function, path filter in case a glob pattern was provided

// Returns close function for the watcher instance
FsEventsHandler.prototype._watchWithFsEvents =
function(watchPath, realPath, transform, globFilter) {
  if (this._isIgnored(watchPath)) return;
  var watchCallback = function(fullPath, flags, info) {
    if (
      this.options.depth !== undefined &&
      depth(fullPath, realPath) > this.options.depth
    ) return;
    var path = transform(sysPath.join(
      watchPath, sysPath.relative(watchPath, fullPath)
    ));
    if (globFilter && !globFilter(path)) return;
    // ensure directories are tracked
    var parent = sysPath.dirname(path);
    var item = sysPath.basename(path);
    var watchedDir = this._getWatchedDir(
      info.type === 'directory' ? path : parent
    );
    var checkIgnored = function(stats) {
      if (this._isIgnored(path, stats)) {
        this._ignoredPaths[path] = true;
        if (stats && stats.isDirectory()) {
          this._ignoredPaths[path + '/**/*'] = true;
        }
        return true;
      } else {
        delete this._ignoredPaths[path];
        delete this._ignoredPaths[path + '/**/*'];
      }
    }.bind(this);

    var handleEvent = function(event) {
      if (checkIgnored()) return;

      if (event === 'unlink') {
        // suppress unlink events on never before seen files
        if (info.type === 'directory' || watchedDir.has(item)) {
          this._remove(parent, item);
        }
      } else {
        if (event === 'add') {
          // track new directories
          if (info.type === 'directory') this._getWatchedDir(path);

          if (info.type === 'symlink' && this.options.followSymlinks) {
            // push symlinks back to the top of the stack to get handled
            var curDepth = this.options.depth === undefined ?
              undefined : depth(fullPath, realPath) + 1;
            return this._addToFsEvents(path, false, true, curDepth);
          } else {
            // track new paths
            // (other than symlinks being followed, which will be tracked soon)
            this._getWatchedDir(parent).add(item);
          }
        }
        var eventName = info.type === 'directory' ? event + 'Dir' : event;
        this._emit(eventName, path);
        if (eventName === 'addDir') this._addToFsEvents(path, false, true);
      }
    }.bind(this);

    function addOrChange() {
      handleEvent(watchedDir.has(item) ? 'change' : 'add');
    }
    function checkFd() {
      fs.open(path, 'r', function(error, fd) {
        if (fd) fs.close(fd);
        error && error.code !== 'EACCES' ?
          handleEvent('unlink') : addOrChange();
      });
    }
    // correct for wrong events emitted
    var wrongEventFlags = [
      69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
    ];
    if (wrongEventFlags.indexOf(flags) !== -1 || info.event === 'unknown') {
      if (typeof this.options.ignored === 'function') {
        fs.stat(path, function(error, stats) {
          if (checkIgnored(stats)) return;
          stats ? addOrChange() : handleEvent('unlink');
        });
      } else {
        checkFd();
      }
    } else {
      switch (info.event) {
      case 'created':
      case 'modified':
        return addOrChange();
      case 'deleted':
      case 'moved':
        return checkFd();
      }
    }
  }.bind(this);

  var closer = setFSEventsListener(
    watchPath,
    realPath,
    watchCallback,
    this.emit.bind(this, 'raw')
  );

  this._emitReady();
  return closer;
};

// Private method: Handle symlinks encountered during directory scan

// * linkPath   - string, path to symlink
// * fullPath   - string, absolute path to the symlink
// * transform  - function, pre-existing path transformer
// * curDepth   - int, level of subdirectories traversed to where symlink is

// Returns nothing
FsEventsHandler.prototype._handleFsEventsSymlink =
function(linkPath, fullPath, transform, curDepth) {
  // don't follow the same symlink more than once
  if (this._symlinkPaths[fullPath]) return;
  else this._symlinkPaths[fullPath] = true;

  this._readyCount++;

  fs.realpath(linkPath, function(error, linkTarget) {
    if (this._handleError(error) || this._isIgnored(linkTarget)) {
      return this._emitReady();
    }

    this._readyCount++;

    // add the linkTarget for watching with a wrapper for transform
    // that causes emitted paths to incorporate the link's path
    this._addToFsEvents(linkTarget || linkPath, function(path) {
      var dotSlash = '.' + sysPath.sep;
      var aliasedPath = linkPath;
      if (linkTarget && linkTarget !== dotSlash) {
        aliasedPath = path.replace(linkTarget, linkPath);
      } else if (path !== dotSlash) {
        aliasedPath = sysPath.join(linkPath, path);
      }
      return transform(aliasedPath);
    }, false, curDepth);
  }.bind(this));
};

// Private method: Handle added path with fsevents

// * path       - string, file/directory path or glob pattern
// * transform  - function, converts working path to what the user expects
// * forceAdd   - boolean, ensure add is emitted
// * priorDepth - int, level of subdirectories already traversed

// Returns nothing
FsEventsHandler.prototype._addToFsEvents =
function(path, transform, forceAdd, priorDepth) {

  // applies transform if provided, otherwise returns same value
  var processPath = typeof transform === 'function' ?
    transform : function(val) { return val; };

  var emitAdd = function(newPath, stats) {
    var pp = processPath(newPath);
    var isDir = stats.isDirectory();
    var dirObj = this._getWatchedDir(sysPath.dirname(pp));
    var base = sysPath.basename(pp);

    // ensure empty dirs get tracked
    if (isDir) this._getWatchedDir(pp);

    if (dirObj.has(base)) return;
    dirObj.add(base);

    if (!this.options.ignoreInitial || forceAdd === true) {
      this._emit(isDir ? 'addDir' : 'add', pp, stats);
    }
  }.bind(this);

  var wh = this._getWatchHelpers(path);

  // evaluate what is at the path we're being asked to watch
  fs[wh.statMethod](wh.watchPath, function(error, stats) {
    if (this._handleError(error) || this._isIgnored(wh.watchPath, stats)) {
      this._emitReady();
      return this._emitReady();
    }

    if (stats.isDirectory()) {
      // emit addDir unless this is a glob parent
      if (!wh.globFilter) emitAdd(processPath(path), stats);

      // don't recurse further if it would exceed depth setting
      if (priorDepth && priorDepth > this.options.depth) return;

      // scan the contents of the dir
      readdirp({
        root: wh.watchPath,
        entryType: 'all',
        fileFilter: wh.filterPath,
        directoryFilter: wh.filterDir,
        lstat: true,
        depth: this.options.depth - (priorDepth || 0)
      }).on('data', function(entry) {
        // need to check filterPath on dirs b/c filterDir is less restrictive
        if (entry.stat.isDirectory() && !wh.filterPath(entry)) return;

        var joinedPath = sysPath.join(wh.watchPath, entry.path);
        var fullPath = entry.fullPath;

        if (wh.followSymlinks && entry.stat.isSymbolicLink()) {
          // preserve the current depth here since it can't be derived from
          // real paths past the symlink
          var curDepth = this.options.depth === undefined ?
            undefined : depth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;

          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);
        } else {
          emitAdd(joinedPath, entry.stat);
        }
      }.bind(this)).on('error', function() {
        // Ignore readdirp errors
      }).on('end', this._emitReady);
    } else {
      emitAdd(wh.watchPath, stats);
      this._emitReady();
    }
  }.bind(this));

  if (this.options.persistent && forceAdd !== true) {
    var initWatch = function(error, realPath) {
      if (this.closed) return;
      var closer = this._watchWithFsEvents(
        wh.watchPath,
        sysPath.resolve(realPath || wh.watchPath),
        processPath,
        wh.globFilter
      );
      if (closer) this._closers[path] = closer;
    }.bind(this);

    if (typeof transform === 'function') {
      // realpath has already been resolved
      initWatch();
    } else {
      fs.realpath(wh.watchPath, initWatch);
    }
  }
};

module.exports = FsEventsHandler;
module.exports.canUse = canUse;


/***/ }),
/* 626 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1);
var sysPath = __webpack_require__(0);
var readdirp = __webpack_require__(398);
var isBinaryPath = __webpack_require__(891);

// fs.watch helpers

// object to hold per-process fs.watch instances
// (may be shared across chokidar FSWatcher instances)
var FsWatchInstances = Object.create(null);

// Private function: Instantiates the fs.watch interface

// * path       - string, path to be watched
// * options    - object, options to be passed to fs.watch
// * listener   - function, main event handler
// * errHandler - function, handler which emits info about errors
// * emitRaw    - function, handler which emits raw event data

// Returns new fsevents instance
function createFsWatchInstance(path, options, listener, errHandler, emitRaw) {
  var handleEvent = function(rawEvent, evPath) {
    listener(path);
    emitRaw(rawEvent, evPath, {watchedPath: path});

    // emit based on events occuring for files from a directory's watcher in
    // case the file's watcher misses it (and rely on throttling to de-dupe)
    if (evPath && path !== evPath) {
      fsWatchBroadcast(
        sysPath.resolve(path, evPath), 'listeners', sysPath.join(path, evPath)
      );
    }
  };
  try {
    return fs.watch(path, options, handleEvent);
  } catch (error) {
    errHandler(error);
  }
}

// Private function: Helper for passing fs.watch event data to a
// collection of listeners

// * fullPath   - string, absolute path bound to the fs.watch instance
// * type       - string, listener type
// * val[1..3]  - arguments to be passed to listeners

// Returns nothing
function fsWatchBroadcast(fullPath, type, val1, val2, val3) {
  if (!FsWatchInstances[fullPath]) return;
  FsWatchInstances[fullPath][type].forEach(function(listener) {
    listener(val1, val2, val3);
  });
}

// Private function: Instantiates the fs.watch interface or binds listeners
// to an existing one covering the same file system entry

// * path       - string, path to be watched
// * fullPath   - string, absolute path
// * options    - object, options to be passed to fs.watch
// * handlers   - object, container for event listener functions

// Returns close function
function setFsWatchListener(path, fullPath, options, handlers) {
  var listener = handlers.listener;
  var errHandler = handlers.errHandler;
  var rawEmitter = handlers.rawEmitter;
  var container = FsWatchInstances[fullPath];
  var watcher;
  if (!options.persistent) {
    watcher = createFsWatchInstance(
      path, options, listener, errHandler, rawEmitter
    );
    return watcher.close.bind(watcher);
  }
  if (!container) {
    watcher = createFsWatchInstance(
      path,
      options,
      fsWatchBroadcast.bind(null, fullPath, 'listeners'),
      errHandler, // no need to use broadcast here
      fsWatchBroadcast.bind(null, fullPath, 'rawEmitters')
    );
    if (!watcher) return;
    var broadcastErr = fsWatchBroadcast.bind(null, fullPath, 'errHandlers');
    watcher.on('error', function(error) {
      // Workaround for https://github.com/joyent/node/issues/4337
      if (process.platform === 'win32' && error.code === 'EPERM') {
        fs.open(path, 'r', function(err, fd) {
          if (fd) fs.close(fd);
          if (!err) broadcastErr(error);
        });
      } else {
        broadcastErr(error);
      }
    });
    container = FsWatchInstances[fullPath] = {
      listeners: [listener],
      errHandlers: [errHandler],
      rawEmitters: [rawEmitter],
      watcher: watcher
    };
  } else {
    container.listeners.push(listener);
    container.errHandlers.push(errHandler);
    container.rawEmitters.push(rawEmitter);
  }
  var listenerIndex = container.listeners.length - 1;

  // removes this instance's listeners and closes the underlying fs.watch
  // instance if there are no more listeners left
  return function close() {
    delete container.listeners[listenerIndex];
    delete container.errHandlers[listenerIndex];
    delete container.rawEmitters[listenerIndex];
    if (!Object.keys(container.listeners).length) {
      container.watcher.close();
      delete FsWatchInstances[fullPath];
    }
  };
}

// fs.watchFile helpers

// object to hold per-process fs.watchFile instances
// (may be shared across chokidar FSWatcher instances)
var FsWatchFileInstances = Object.create(null);

// Private function: Instantiates the fs.watchFile interface or binds listeners
// to an existing one covering the same file system entry

// * path       - string, path to be watched
// * fullPath   - string, absolute path
// * options    - object, options to be passed to fs.watchFile
// * handlers   - object, container for event listener functions

// Returns close function
function setFsWatchFileListener(path, fullPath, options, handlers) {
  var listener = handlers.listener;
  var rawEmitter = handlers.rawEmitter;
  var container = FsWatchFileInstances[fullPath];
  var listeners = [];
  var rawEmitters = [];
  if (
    container && (
      container.options.persistent < options.persistent ||
      container.options.interval > options.interval
    )
  ) {
    // "Upgrade" the watcher to persistence or a quicker interval.
    // This creates some unlikely edge case issues if the user mixes
    // settings in a very weird way, but solving for those cases
    // doesn't seem worthwhile for the added complexity.
    listeners = container.listeners;
    rawEmitters = container.rawEmitters;
    fs.unwatchFile(fullPath);
    container = false;
  }
  if (!container) {
    listeners.push(listener);
    rawEmitters.push(rawEmitter);
    container = FsWatchFileInstances[fullPath] = {
      listeners: listeners,
      rawEmitters: rawEmitters,
      options: options,
      watcher: fs.watchFile(fullPath, options, function(curr, prev) {
        container.rawEmitters.forEach(function(rawEmitter) {
          rawEmitter('change', fullPath, {curr: curr, prev: prev});
        });
        var currmtime = curr.mtime.getTime();
        if (curr.size !== prev.size || currmtime > prev.mtime.getTime() || currmtime === 0) {
          container.listeners.forEach(function(listener) {
            listener(path, curr);
          });
        }
      })
    };
  } else {
    container.listeners.push(listener);
    container.rawEmitters.push(rawEmitter);
  }
  var listenerIndex = container.listeners.length - 1;

  // removes this instance's listeners and closes the underlying fs.watchFile
  // instance if there are no more listeners left
  return function close() {
    delete container.listeners[listenerIndex];
    delete container.rawEmitters[listenerIndex];
    if (!Object.keys(container.listeners).length) {
      fs.unwatchFile(fullPath);
      delete FsWatchFileInstances[fullPath];
    }
  };
}

// fake constructor for attaching nodefs-specific prototype methods that
// will be copied to FSWatcher's prototype
function NodeFsHandler() {}

// Private method: Watch file for changes with fs.watchFile or fs.watch.

// * path     - string, path to file or directory.
// * listener - function, to be executed on fs change.

// Returns close function for the watcher instance
NodeFsHandler.prototype._watchWithNodeFs =
function(path, listener) {
  var directory = sysPath.dirname(path);
  var basename = sysPath.basename(path);
  var parent = this._getWatchedDir(directory);
  parent.add(basename);
  var absolutePath = sysPath.resolve(path);
  var options = {persistent: this.options.persistent};
  if (!listener) listener = Function.prototype; // empty function

  var closer;
  if (this.options.usePolling) {
    options.interval = this.enableBinaryInterval && isBinaryPath(basename) ?
      this.options.binaryInterval : this.options.interval;
    closer = setFsWatchFileListener(path, absolutePath, options, {
      listener: listener,
      rawEmitter: this.emit.bind(this, 'raw')
    });
  } else {
    closer = setFsWatchListener(path, absolutePath, options, {
      listener: listener,
      errHandler: this._handleError.bind(this),
      rawEmitter: this.emit.bind(this, 'raw')
    });
  }
  return closer;
};

// Private method: Watch a file and emit add event if warranted

// * file       - string, the file's path
// * stats      - object, result of fs.stat
// * initialAdd - boolean, was the file added at watch instantiation?
// * callback   - function, called when done processing as a newly seen file

// Returns close function for the watcher instance
NodeFsHandler.prototype._handleFile =
function(file, stats, initialAdd, callback) {
  var dirname = sysPath.dirname(file);
  var basename = sysPath.basename(file);
  var parent = this._getWatchedDir(dirname);

  // if the file is already being watched, do nothing
  if (parent.has(basename)) return callback();

  // kick off the watcher
  var closer = this._watchWithNodeFs(file, function(path, newStats) {
    if (!this._throttle('watch', file, 5)) return;
    if (!newStats || newStats && newStats.mtime.getTime() === 0) {
      fs.stat(file, function(error, newStats) {
        // Fix issues where mtime is null but file is still present
        if (error) {
          this._remove(dirname, basename);
        } else {
          this._emit('change', file, newStats);
        }
      }.bind(this));
    // add is about to be emitted if file not already tracked in parent
    } else if (parent.has(basename)) {
      this._emit('change', file, newStats);
    }
  }.bind(this));

  // emit an add event if we're supposed to
  if (!(initialAdd && this.options.ignoreInitial)) {
    if (!this._throttle('add', file, 0)) return;
    this._emit('add', file, stats);
  }

  if (callback) callback();
  return closer;
};

// Private method: Handle symlinks encountered while reading a dir

// * entry      - object, entry object returned by readdirp
// * directory  - string, path of the directory being read
// * path       - string, path of this item
// * item       - string, basename of this item

// Returns true if no more processing is needed for this entry.
NodeFsHandler.prototype._handleSymlink =
function(entry, directory, path, item) {
  var full = entry.fullPath;
  var dir = this._getWatchedDir(directory);

  if (!this.options.followSymlinks) {
    // watch symlink directly (don't follow) and detect changes
    this._readyCount++;
    fs.realpath(path, function(error, linkPath) {
      if (dir.has(item)) {
        if (this._symlinkPaths[full] !== linkPath) {
          this._symlinkPaths[full] = linkPath;
          this._emit('change', path, entry.stat);
        }
      } else {
        dir.add(item);
        this._symlinkPaths[full] = linkPath;
        this._emit('add', path, entry.stat);
      }
      this._emitReady();
    }.bind(this));
    return true;
  }

  // don't follow the same symlink more than once
  if (this._symlinkPaths[full]) return true;
  else this._symlinkPaths[full] = true;
};

// Private method: Read directory to add / remove files from `@watched` list
// and re-read it on change.

// * dir        - string, fs path.
// * stats      - object, result of fs.stat
// * initialAdd - boolean, was the file added at watch instantiation?
// * depth      - int, depth relative to user-supplied path
// * target     - string, child path actually targeted for watch
// * wh         - object, common watch helpers for this path
// * callback   - function, called when dir scan is complete

// Returns close function for the watcher instance
NodeFsHandler.prototype._handleDir =
function(dir, stats, initialAdd, depth, target, wh, callback) {
  var parentDir = this._getWatchedDir(sysPath.dirname(dir));
  var tracked = parentDir.has(sysPath.basename(dir));
  if (!(initialAdd && this.options.ignoreInitial) && !target && !tracked) {
    if (!wh.hasGlob || wh.globFilter(dir)) this._emit('addDir', dir, stats);
  }

  // ensure dir is tracked (harmless if redundant)
  parentDir.add(sysPath.basename(dir));
  this._getWatchedDir(dir);

  var read = function(directory, initialAdd, done) {
    // Normalize the directory name on Windows
    directory = sysPath.join(directory, '');

    if (!wh.hasGlob) {
      var throttler = this._throttle('readdir', directory, 1000);
      if (!throttler) return;
    }

    var previous = this._getWatchedDir(wh.path);
    var current = [];

    readdirp({
      root: directory,
      entryType: 'all',
      fileFilter: wh.filterPath,
      directoryFilter: wh.filterDir,
      depth: 0,
      lstat: true
    }).on('data', function(entry) {
      var item = entry.path;
      var path = sysPath.join(directory, item);
      current.push(item);

      if (entry.stat.isSymbolicLink() &&
        this._handleSymlink(entry, directory, path, item)) return;

      // Files that present in current directory snapshot
      // but absent in previous are added to watch list and
      // emit `add` event.
      if (item === target || !target && !previous.has(item)) {
        this._readyCount++;

        // ensure relativeness of path is preserved in case of watcher reuse
        path = sysPath.join(dir, sysPath.relative(dir, path));

        this._addToNodeFs(path, initialAdd, wh, depth + 1);
      }
    }.bind(this)).on('end', function() {
      if (throttler) throttler.clear();
      if (done) done();

      // Files that absent in current directory snapshot
      // but present in previous emit `remove` event
      // and are removed from @watched[directory].
      previous.children().filter(function(item) {
        return item !== directory &&
          current.indexOf(item) === -1 &&
          // in case of intersecting globs;
          // a path may have been filtered out of this readdir, but
          // shouldn't be removed because it matches a different glob
          (!wh.hasGlob || wh.filterPath({
            fullPath: sysPath.resolve(directory, item)
          }));
      }).forEach(function(item) {
        this._remove(directory, item);
      }, this);
    }.bind(this)).on('error', this._handleError.bind(this));
  }.bind(this);

  var closer;

  if (this.options.depth == null || depth <= this.options.depth) {
    if (!target) read(dir, initialAdd, callback);
    closer = this._watchWithNodeFs(dir, function(dirPath, stats) {
      // if current directory is removed, do nothing
      if (stats && stats.mtime.getTime() === 0) return;

      read(dirPath, false);
    });
  } else {
    callback();
  }
  return closer;
};

// Private method: Handle added file, directory, or glob pattern.
// Delegates call to _handleFile / _handleDir after checks.

// * path       - string, path to file or directory.
// * initialAdd - boolean, was the file added at watch instantiation?
// * depth      - int, depth relative to user-supplied path
// * target     - string, child path actually targeted for watch
// * callback   - function, indicates whether the path was found or not

// Returns nothing
NodeFsHandler.prototype._addToNodeFs =
function(path, initialAdd, priorWh, depth, target, callback) {
  if (!callback) callback = Function.prototype;
  var ready = this._emitReady;
  if (this._isIgnored(path) || this.closed) {
    ready();
    return callback(null, false);
  }

  var wh = this._getWatchHelpers(path, depth);
  if (!wh.hasGlob && priorWh) {
    wh.hasGlob = priorWh.hasGlob;
    wh.globFilter = priorWh.globFilter;
    wh.filterPath = priorWh.filterPath;
    wh.filterDir = priorWh.filterDir;
  }

  // evaluate what is at the path we're being asked to watch
  fs[wh.statMethod](wh.watchPath, function(error, stats) {
    if (this._handleError(error)) return callback(null, path);
    if (this._isIgnored(wh.watchPath, stats)) {
      ready();
      return callback(null, false);
    }

    var initDir = function(dir, target) {
      return this._handleDir(dir, stats, initialAdd, depth, target, wh, ready);
    }.bind(this);

    var closer;
    if (stats.isDirectory()) {
      closer = initDir(wh.watchPath, target);
    } else if (stats.isSymbolicLink()) {
      var parent = sysPath.dirname(wh.watchPath);
      this._getWatchedDir(parent).add(wh.watchPath);
      this._emit('add', wh.watchPath, stats);
      closer = initDir(parent, path);

      // preserve this symlink's target path
      fs.realpath(path, function(error, targetPath) {
        this._symlinkPaths[sysPath.resolve(path)] = targetPath;
        ready();
      }.bind(this));
    } else {
      closer = this._handleFile(wh.watchPath, stats, initialAdd, ready);
    }

    if (closer) this._closers[path] = closer;
    callback(null, false);
  }.bind(this));
};

module.exports = NodeFsHandler;


/***/ }),
/* 627 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var path = __webpack_require__(0);
var isglob = __webpack_require__(96);

module.exports = function globParent(str) {
	str += 'a'; // preserves full path in case of trailing path separator
	do {str = path.dirname(str)} while (isglob(str));
	return str;
};


/***/ }),
/* 628 */
/***/ (function(module, exports, __webpack_require__) {

var stringWidth = __webpack_require__(423)
var stripAnsi = __webpack_require__(243)
var wrap = __webpack_require__(1126)
var align = {
  right: alignRight,
  center: alignCenter
}
var top = 0
var right = 1
var bottom = 2
var left = 3

function UI (opts) {
  this.width = opts.width
  this.wrap = opts.wrap
  this.rows = []
}

UI.prototype.span = function () {
  var cols = this.div.apply(this, arguments)
  cols.span = true
}

UI.prototype.div = function () {
  if (arguments.length === 0) this.div('')
  if (this.wrap && this._shouldApplyLayoutDSL.apply(this, arguments)) {
    return this._applyLayoutDSL(arguments[0])
  }

  var cols = []

  for (var i = 0, arg; (arg = arguments[i]) !== undefined; i++) {
    if (typeof arg === 'string') cols.push(this._colFromString(arg))
    else cols.push(arg)
  }

  this.rows.push(cols)
  return cols
}

UI.prototype._shouldApplyLayoutDSL = function () {
  return arguments.length === 1 && typeof arguments[0] === 'string' &&
    /[\t\n]/.test(arguments[0])
}

UI.prototype._applyLayoutDSL = function (str) {
  var _this = this
  var rows = str.split('\n')
  var leftColumnWidth = 0

  // simple heuristic for layout, make sure the
  // second column lines up along the left-hand.
  // don't allow the first column to take up more
  // than 50% of the screen.
  rows.forEach(function (row) {
    var columns = row.split('\t')
    if (columns.length > 1 && stringWidth(columns[0]) > leftColumnWidth) {
      leftColumnWidth = Math.min(
        Math.floor(_this.width * 0.5),
        stringWidth(columns[0])
      )
    }
  })

  // generate a table:
  //  replacing ' ' with padding calculations.
  //  using the algorithmically generated width.
  rows.forEach(function (row) {
    var columns = row.split('\t')
    _this.div.apply(_this, columns.map(function (r, i) {
      return {
        text: r.trim(),
        padding: _this._measurePadding(r),
        width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
      }
    }))
  })

  return this.rows[this.rows.length - 1]
}

UI.prototype._colFromString = function (str) {
  return {
    text: str,
    padding: this._measurePadding(str)
  }
}

UI.prototype._measurePadding = function (str) {
  // measure padding without ansi escape codes
  var noAnsi = stripAnsi(str)
  return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length]
}

UI.prototype.toString = function () {
  var _this = this
  var lines = []

  _this.rows.forEach(function (row, i) {
    _this.rowToString(row, lines)
  })

  // don't display any lines with the
  // hidden flag set.
  lines = lines.filter(function (line) {
    return !line.hidden
  })

  return lines.map(function (line) {
    return line.text
  }).join('\n')
}

UI.prototype.rowToString = function (row, lines) {
  var _this = this
  var padding
  var rrows = this._rasterize(row)
  var str = ''
  var ts
  var width
  var wrapWidth

  rrows.forEach(function (rrow, r) {
    str = ''
    rrow.forEach(function (col, c) {
      ts = '' // temporary string used during alignment/padding.
      width = row[c].width // the width with padding.
      wrapWidth = _this._negatePadding(row[c]) // the width without padding.

      ts += col

      for (var i = 0; i < wrapWidth - stringWidth(col); i++) {
        ts += ' '
      }

      // align the string within its column.
      if (row[c].align && row[c].align !== 'left' && _this.wrap) {
        ts = align[row[c].align](ts, wrapWidth)
        if (stringWidth(ts) < wrapWidth) ts += new Array(width - stringWidth(ts)).join(' ')
      }

      // apply border and padding to string.
      padding = row[c].padding || [0, 0, 0, 0]
      if (padding[left]) str += new Array(padding[left] + 1).join(' ')
      str += addBorder(row[c], ts, '| ')
      str += ts
      str += addBorder(row[c], ts, ' |')
      if (padding[right]) str += new Array(padding[right] + 1).join(' ')

      // if prior row is span, try to render the
      // current row on the prior line.
      if (r === 0 && lines.length > 0) {
        str = _this._renderInline(str, lines[lines.length - 1])
      }
    })

    // remove trailing whitespace.
    lines.push({
      text: str.replace(/ +$/, ''),
      span: row.span
    })
  })

  return lines
}

function addBorder (col, ts, style) {
  if (col.border) {
    if (/[.']-+[.']/.test(ts)) return ''
    else if (ts.trim().length) return style
    else return '  '
  }
  return ''
}

// if the full 'source' can render in
// the target line, do so.
UI.prototype._renderInline = function (source, previousLine) {
  var leadingWhitespace = source.match(/^ */)[0].length
  var target = previousLine.text
  var targetTextWidth = stringWidth(target.trimRight())

  if (!previousLine.span) return source

  // if we're not applying wrapping logic,
  // just always append to the span.
  if (!this.wrap) {
    previousLine.hidden = true
    return target + source
  }

  if (leadingWhitespace < targetTextWidth) return source

  previousLine.hidden = true

  return target.trimRight() + new Array(leadingWhitespace - targetTextWidth + 1).join(' ') + source.trimLeft()
}

UI.prototype._rasterize = function (row) {
  var _this = this
  var i
  var rrow
  var rrows = []
  var widths = this._columnWidths(row)
  var wrapped

  // word wrap all columns, and create
  // a data-structure that is easy to rasterize.
  row.forEach(function (col, c) {
    // leave room for left and right padding.
    col.width = widths[c]
    if (_this.wrap) wrapped = wrap(col.text, _this._negatePadding(col), {hard: true}).split('\n')
    else wrapped = col.text.split('\n')

    if (col.border) {
      wrapped.unshift('.' + new Array(_this._negatePadding(col) + 3).join('-') + '.')
      wrapped.push("'" + new Array(_this._negatePadding(col) + 3).join('-') + "'")
    }

    // add top and bottom padding.
    if (col.padding) {
      for (i = 0; i < (col.padding[top] || 0); i++) wrapped.unshift('')
      for (i = 0; i < (col.padding[bottom] || 0); i++) wrapped.push('')
    }

    wrapped.forEach(function (str, r) {
      if (!rrows[r]) rrows.push([])

      rrow = rrows[r]

      for (var i = 0; i < c; i++) {
        if (rrow[i] === undefined) rrow.push('')
      }
      rrow.push(str)
    })
  })

  return rrows
}

UI.prototype._negatePadding = function (col) {
  var wrapWidth = col.width
  if (col.padding) wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)
  if (col.border) wrapWidth -= 4
  return wrapWidth
}

UI.prototype._columnWidths = function (row) {
  var _this = this
  var widths = []
  var unset = row.length
  var unsetWidth
  var remainingWidth = this.width

  // column widths can be set in config.
  row.forEach(function (col, i) {
    if (col.width) {
      unset--
      widths[i] = col.width
      remainingWidth -= col.width
    } else {
      widths[i] = undefined
    }
  })

  // any unset widths should be calculated.
  if (unset) unsetWidth = Math.floor(remainingWidth / unset)
  widths.forEach(function (w, i) {
    if (!_this.wrap) widths[i] = row[i].width || stringWidth(row[i].text)
    else if (w === undefined) widths[i] = Math.max(unsetWidth, _minWidth(row[i]))
  })

  return widths
}

// calculates the minimum width of
// a column, based on padding preferences.
function _minWidth (col) {
  var padding = col.padding || []
  var minWidth = 1 + (padding[left] || 0) + (padding[right] || 0)
  if (col.border) minWidth += 4
  return minWidth
}

function alignRight (str, width) {
  str = str.trim()
  var padding = ''
  var strWidth = stringWidth(str)

  if (strWidth < width) {
    padding = new Array(width - strWidth + 1).join(' ')
  }

  return padding + str
}

function alignCenter (str, width) {
  str = str.trim()
  var padding = ''
  var strWidth = stringWidth(str.trim())

  if (strWidth < width) {
    padding = new Array(parseInt((width - strWidth) / 2, 10) + 1).join(' ')
  }

  return padding + str
}

module.exports = function (opts) {
  opts = opts || {}

  return new UI({
    width: (opts || {}).width || 80,
    wrap: typeof opts.wrap === 'boolean' ? opts.wrap : true
  })
}


/***/ }),
/* 629 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* eslint-disable babel/new-cap, xo/throw-new-error */

module.exports = function (str, pos) {
	if (str === null || str === undefined) {
		throw TypeError();
	}

	str = String(str);

	var size = str.length;
	var i = pos ? Number(pos) : 0;

	if (Number.isNaN(i)) {
		i = 0;
	}

	if (i < 0 || i >= size) {
		return undefined;
	}

	var first = str.charCodeAt(i);

	if (first >= 0xD800 && first <= 0xDBFF && size > i + 1) {
		var second = str.charCodeAt(i + 1);

		if (second >= 0xDC00 && second <= 0xDFFF) {
			return ((first - 0xD800) * 0x400) + second - 0xDC00 + 0x10000;
		}
	}

	return first;
};


/***/ }),
/* 630 */
/***/ (function(module, exports) {

module.exports = defer;

/**
 * Runs provided function on next iteration of the event loop
 *
 * @param {function} fn - function to run
 */
function defer(fn)
{
  var nextTick = typeof setImmediate == 'function'
    ? setImmediate
    : (
      typeof process == 'object' && typeof process.nextTick == 'function'
      ? process.nextTick
      : null
    );

  if (nextTick)
  {
    nextTick(fn);
  }
  else
  {
    setTimeout(fn, 0);
  }
}


/***/ }),
/* 631 */
/***/ (function(module, exports) {

module.exports = function (xs, fn) {
    var res = [];
    for (var i = 0; i < xs.length; i++) {
        var x = fn(xs[i], i);
        if (isArray(x)) res.push.apply(res, x);
        else res.push(x);
    }
    return res;
};

var isArray = Array.isArray || function (xs) {
    return Object.prototype.toString.call(xs) === '[object Array]';
};


/***/ }),
/* 632 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(208);
__webpack_require__(667);
module.exports = __webpack_require__(26).Array.from;


/***/ }),
/* 633 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(669);
module.exports = __webpack_require__(26).Object.assign;


/***/ }),
/* 634 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(673);
module.exports = __webpack_require__(26).Object.entries;


/***/ }),
/* 635 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(670);
module.exports = __webpack_require__(26).Object.keys;


/***/ }),
/* 636 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(674);
module.exports = __webpack_require__(26).Object.values;


/***/ }),
/* 637 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(313);
__webpack_require__(208);
__webpack_require__(314);
__webpack_require__(671);
__webpack_require__(675);
__webpack_require__(676);
module.exports = __webpack_require__(26).Promise;


/***/ }),
/* 638 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(313);
__webpack_require__(208);
__webpack_require__(314);
__webpack_require__(672);
__webpack_require__(679);
__webpack_require__(678);
__webpack_require__(677);
module.exports = __webpack_require__(26).Set;


/***/ }),
/* 639 */
/***/ (function(module, exports) {

module.exports = function () { /* empty */ };


/***/ }),
/* 640 */
/***/ (function(module, exports, __webpack_require__) {

var forOf = __webpack_require__(111);

module.exports = function (iter, ITERATOR) {
  var result = [];
  forOf(iter, false, result.push, result, ITERATOR);
  return result;
};


/***/ }),
/* 641 */
/***/ (function(module, exports, __webpack_require__) {

// false -> Array#indexOf
// true  -> Array#includes
var toIObject = __webpack_require__(149);
var toLength = __webpack_require__(150);
var toAbsoluteIndex = __webpack_require__(664);
module.exports = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
      if (O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};


/***/ }),
/* 642 */
/***/ (function(module, exports, __webpack_require__) {

// 0 -> Array#forEach
// 1 -> Array#map
// 2 -> Array#filter
// 3 -> Array#some
// 4 -> Array#every
// 5 -> Array#find
// 6 -> Array#findIndex
var ctx = __webpack_require__(61);
var IObject = __webpack_require__(199);
var toObject = __webpack_require__(114);
var toLength = __webpack_require__(150);
var asc = __webpack_require__(644);
module.exports = function (TYPE, $create) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  var create = $create || asc;
  return function ($this, callbackfn, that) {
    var O = toObject($this);
    var self = IObject(O);
    var f = ctx(callbackfn, that, 3);
    var length = toLength(self.length);
    var index = 0;
    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
    var val, res;
    for (;length > index; index++) if (NO_HOLES || index in self) {
      val = self[index];
      res = f(val, index, O);
      if (TYPE) {
        if (IS_MAP) result[index] = res;   // map
        else if (res) switch (TYPE) {
          case 3: return true;             // some
          case 5: return val;              // find
          case 6: return index;            // findIndex
          case 2: result.push(val);        // filter
        } else if (IS_EVERY) return false; // every
      }
    }
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
  };
};


/***/ }),
/* 643 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(48);
var isArray = __webpack_require__(651);
var SPECIES = __webpack_require__(34)('species');

module.exports = function (original) {
  var C;
  if (isArray(original)) {
    C = original.constructor;
    // cross-realm fallback
    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
    if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  } return C === undefined ? Array : C;
};


/***/ }),
/* 644 */
/***/ (function(module, exports, __webpack_require__) {

// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
var speciesConstructor = __webpack_require__(643);

module.exports = function (original, length) {
  return new (speciesConstructor(original))(length);
};


/***/ }),
/* 645 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var dP = __webpack_require__(62).f;
var create = __webpack_require__(302);
var redefineAll = __webpack_require__(204);
var ctx = __webpack_require__(61);
var anInstance = __webpack_require__(195);
var forOf = __webpack_require__(111);
var $iterDefine = __webpack_require__(200);
var step = __webpack_require__(300);
var setSpecies = __webpack_require__(307);
var DESCRIPTORS = __webpack_require__(76);
var fastKey = __webpack_require__(301).fastKey;
var validate = __webpack_require__(311);
var SIZE = DESCRIPTORS ? '_s' : 'size';

var getEntry = function (that, key) {
  // fast case
  var index = fastKey(key);
  var entry;
  if (index !== 'F') return that._i[index];
  // frozen object case
  for (entry = that._f; entry; entry = entry.n) {
    if (entry.k == key) return entry;
  }
};

module.exports = {
  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
    var C = wrapper(function (that, iterable) {
      anInstance(that, C, NAME, '_i');
      that._t = NAME;         // collection type
      that._i = create(null); // index
      that._f = undefined;    // first entry
      that._l = undefined;    // last entry
      that[SIZE] = 0;         // size
      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
    });
    redefineAll(C.prototype, {
      // 23.1.3.1 Map.prototype.clear()
      // 23.2.3.2 Set.prototype.clear()
      clear: function clear() {
        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
          entry.r = true;
          if (entry.p) entry.p = entry.p.n = undefined;
          delete data[entry.i];
        }
        that._f = that._l = undefined;
        that[SIZE] = 0;
      },
      // 23.1.3.3 Map.prototype.delete(key)
      // 23.2.3.4 Set.prototype.delete(value)
      'delete': function (key) {
        var that = validate(this, NAME);
        var entry = getEntry(that, key);
        if (entry) {
          var next = entry.n;
          var prev = entry.p;
          delete that._i[entry.i];
          entry.r = true;
          if (prev) prev.n = next;
          if (next) next.p = prev;
          if (that._f == entry) that._f = next;
          if (that._l == entry) that._l = prev;
          that[SIZE]--;
        } return !!entry;
      },
      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
      forEach: function forEach(callbackfn /* , that = undefined */) {
        validate(this, NAME);
        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
        var entry;
        while (entry = entry ? entry.n : this._f) {
          f(entry.v, entry.k, this);
          // revert to the last existing entry
          while (entry && entry.r) entry = entry.p;
        }
      },
      // 23.1.3.7 Map.prototype.has(key)
      // 23.2.3.7 Set.prototype.has(value)
      has: function has(key) {
        return !!getEntry(validate(this, NAME), key);
      }
    });
    if (DESCRIPTORS) dP(C.prototype, 'size', {
      get: function () {
        return validate(this, NAME)[SIZE];
      }
    });
    return C;
  },
  def: function (that, key, value) {
    var entry = getEntry(that, key);
    var prev, index;
    // change existing entry
    if (entry) {
      entry.v = value;
    // create new entry
    } else {
      that._l = entry = {
        i: index = fastKey(key, true), // <- index
        k: key,                        // <- key
        v: value,                      // <- value
        p: prev = that._l,             // <- previous entry
        n: undefined,                  // <- next entry
        r: false                       // <- removed
      };
      if (!that._f) that._f = entry;
      if (prev) prev.n = entry;
      that[SIZE]++;
      // add to index
      if (index !== 'F') that._i[index] = entry;
    } return that;
  },
  getEntry: getEntry,
  setStrong: function (C, NAME, IS_MAP) {
    // add .keys, .values, .entries, [@@iterator]
    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
    $iterDefine(C, NAME, function (iterated, kind) {
      this._t = validate(iterated, NAME); // target
      this._k = kind;                     // kind
      this._l = undefined;                // previous
    }, function () {
      var that = this;
      var kind = that._k;
      var entry = that._l;
      // revert to the last existing entry
      while (entry && entry.r) entry = entry.p;
      // get next entry
      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
        // or finish the iteration
        that._t = undefined;
        return step(1);
      }
      // return step by kind
      if (kind == 'keys') return step(0, entry.k);
      if (kind == 'values') return step(0, entry.v);
      return step(0, [entry.k, entry.v]);
    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);

    // add [@@species], 23.1.2.2, 23.2.2.2
    setSpecies(NAME);
  }
};


/***/ }),
/* 646 */
/***/ (function(module, exports, __webpack_require__) {

// https://github.com/DavidBruant/Map-Set.prototype.toJSON
var classof = __webpack_require__(196);
var from = __webpack_require__(640);
module.exports = function (NAME) {
  return function toJSON() {
    if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
    return from(this);
  };
};


/***/ }),
/* 647 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(30);
var $export = __webpack_require__(29);
var meta = __webpack_require__(301);
var fails = __webpack_require__(89);
var hide = __webpack_require__(77);
var redefineAll = __webpack_require__(204);
var forOf = __webpack_require__(111);
var anInstance = __webpack_require__(195);
var isObject = __webpack_require__(48);
var setToStringTag = __webpack_require__(148);
var dP = __webpack_require__(62).f;
var each = __webpack_require__(642)(0);
var DESCRIPTORS = __webpack_require__(76);

module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
  var Base = global[NAME];
  var C = Base;
  var ADDER = IS_MAP ? 'set' : 'add';
  var proto = C && C.prototype;
  var O = {};
  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
    new C().entries().next();
  }))) {
    // create collection constructor
    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
    redefineAll(C.prototype, methods);
    meta.NEED = true;
  } else {
    C = wrapper(function (target, iterable) {
      anInstance(target, C, NAME, '_c');
      target._c = new Base();
      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);
    });
    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {
      var IS_ADDER = KEY == 'add' || KEY == 'set';
      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {
        anInstance(this, C, KEY);
        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;
        var result = this._c[KEY](a === 0 ? 0 : a, b);
        return IS_ADDER ? this : result;
      });
    });
    IS_WEAK || dP(C.prototype, 'size', {
      get: function () {
        return this._c.size;
      }
    });
  }

  setToStringTag(C, NAME);

  O[NAME] = C;
  $export($export.G + $export.W + $export.F, O);

  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);

  return C;
};


/***/ }),
/* 648 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $defineProperty = __webpack_require__(62);
var createDesc = __webpack_require__(203);

module.exports = function (object, index, value) {
  if (index in object) $defineProperty.f(object, index, createDesc(0, value));
  else object[index] = value;
};


/***/ }),
/* 649 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = !__webpack_require__(76) && !__webpack_require__(89)(function () {
  return Object.defineProperty(__webpack_require__(198)('div'), 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 650 */
/***/ (function(module, exports) {

// fast apply, http://jsperf.lnkit.com/fast-apply/5
module.exports = function (fn, args, that) {
  var un = that === undefined;
  switch (args.length) {
    case 0: return un ? fn()
                      : fn.call(that);
    case 1: return un ? fn(args[0])
                      : fn.call(that, args[0]);
    case 2: return un ? fn(args[0], args[1])
                      : fn.call(that, args[0], args[1]);
    case 3: return un ? fn(args[0], args[1], args[2])
                      : fn.call(that, args[0], args[1], args[2]);
    case 4: return un ? fn(args[0], args[1], args[2], args[3])
                      : fn.call(that, args[0], args[1], args[2], args[3]);
  } return fn.apply(that, args);
};


/***/ }),
/* 651 */
/***/ (function(module, exports, __webpack_require__) {

// 7.2.2 IsArray(argument)
var cof = __webpack_require__(110);
module.exports = Array.isArray || function isArray(arg) {
  return cof(arg) == 'Array';
};


/***/ }),
/* 652 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__(302);
var descriptor = __webpack_require__(203);
var setToStringTag = __webpack_require__(148);
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__(77)(IteratorPrototype, __webpack_require__(34)('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),
/* 653 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(30);
var macrotask = __webpack_require__(310).set;
var Observer = global.MutationObserver || global.WebKitMutationObserver;
var process = global.process;
var Promise = global.Promise;
var isNode = __webpack_require__(110)(process) == 'process';

module.exports = function () {
  var head, last, notify;

  var flush = function () {
    var parent, fn;
    if (isNode && (parent = process.domain)) parent.exit();
    while (head) {
      fn = head.fn;
      head = head.next;
      try {
        fn();
      } catch (e) {
        if (head) notify();
        else last = undefined;
        throw e;
      }
    } last = undefined;
    if (parent) parent.enter();
  };

  // Node.js
  if (isNode) {
    notify = function () {
      process.nextTick(flush);
    };
  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
  } else if (Observer && !(global.navigator && global.navigator.standalone)) {
    var toggle = true;
    var node = document.createTextNode('');
    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
    notify = function () {
      node.data = toggle = !toggle;
    };
  // environments with maybe non-completely correct, but existent Promise
  } else if (Promise && Promise.resolve) {
    // Promise.resolve without an argument throws an error in LG WebOS 2
    var promise = Promise.resolve(undefined);
    notify = function () {
      promise.then(flush);
    };
  // for other environments - macrotask based on:
  // - setImmediate
  // - MessageChannel
  // - window.postMessag
  // - onreadystatechange
  // - setTimeout
  } else {
    notify = function () {
      // strange IE + webpack dev server bug - use .call(global)
      macrotask.call(global, flush);
    };
  }

  return function (fn) {
    var task = { fn: fn, next: undefined };
    if (last) last.next = task;
    if (!head) {
      head = task;
      notify();
    } last = task;
  };
};


/***/ }),
/* 654 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.2.1 Object.assign(target, source, ...)
var getKeys = __webpack_require__(147);
var gOPS = __webpack_require__(656);
var pIE = __webpack_require__(303);
var toObject = __webpack_require__(114);
var IObject = __webpack_require__(199);
var $assign = Object.assign;

// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__(89)(function () {
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var S = Symbol();
  var K = 'abcdefghijklmnopqrst';
  A[S] = 7;
  K.split('').forEach(function (k) { B[k] = k; });
  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var aLen = arguments.length;
  var index = 1;
  var getSymbols = gOPS.f;
  var isEnum = pIE.f;
  while (aLen > index) {
    var S = IObject(arguments[index++]);
    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
  } return T;
} : $assign;


/***/ }),
/* 655 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(62);
var anObject = __webpack_require__(75);
var getKeys = __webpack_require__(147);

module.exports = __webpack_require__(76) ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),
/* 656 */
/***/ (function(module, exports) {

exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 657 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__(112);
var toObject = __webpack_require__(114);
var IE_PROTO = __webpack_require__(205)('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),
/* 658 */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(112);
var toIObject = __webpack_require__(149);
var arrayIndexOf = __webpack_require__(641)(false);
var IE_PROTO = __webpack_require__(205)('IE_PROTO');

module.exports = function (object, names) {
  var O = toIObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),
/* 659 */
/***/ (function(module, exports, __webpack_require__) {

// most Object methods by ES6 should accept primitives
var $export = __webpack_require__(29);
var core = __webpack_require__(26);
var fails = __webpack_require__(89);
module.exports = function (KEY, exec) {
  var fn = (core.Object || {})[KEY] || Object[KEY];
  var exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
};


/***/ }),
/* 660 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(77);


/***/ }),
/* 661 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://tc39.github.io/proposal-setmap-offrom/
var $export = __webpack_require__(29);
var aFunction = __webpack_require__(109);
var ctx = __webpack_require__(61);
var forOf = __webpack_require__(111);

module.exports = function (COLLECTION) {
  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
    var mapFn = arguments[1];
    var mapping, A, n, cb;
    aFunction(this);
    mapping = mapFn !== undefined;
    if (mapping) aFunction(mapFn);
    if (source == undefined) return new this();
    A = [];
    if (mapping) {
      n = 0;
      cb = ctx(mapFn, arguments[2], 2);
      forOf(source, false, function (nextItem) {
        A.push(cb(nextItem, n++));
      });
    } else {
      forOf(source, false, A.push, A);
    }
    return new this(A);
  } });
};


/***/ }),
/* 662 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://tc39.github.io/proposal-setmap-offrom/
var $export = __webpack_require__(29);

module.exports = function (COLLECTION) {
  $export($export.S, COLLECTION, { of: function of() {
    var length = arguments.length;
    var A = new Array(length);
    while (length--) A[length] = arguments[length];
    return new this(A);
  } });
};


/***/ }),
/* 663 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(206);
var defined = __webpack_require__(197);
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),
/* 664 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(206);
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),
/* 665 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__(48);
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 666 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(30);
var navigator = global.navigator;

module.exports = navigator && navigator.userAgent || '';


/***/ }),
/* 667 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var ctx = __webpack_require__(61);
var $export = __webpack_require__(29);
var toObject = __webpack_require__(114);
var call = __webpack_require__(298);
var isArrayIter = __webpack_require__(297);
var toLength = __webpack_require__(150);
var createProperty = __webpack_require__(648);
var getIterFn = __webpack_require__(312);

$export($export.S + $export.F * !__webpack_require__(299)(function (iter) { Array.from(iter); }), 'Array', {
  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
    var O = toObject(arrayLike);
    var C = typeof this == 'function' ? this : Array;
    var aLen = arguments.length;
    var mapfn = aLen > 1 ? arguments[1] : undefined;
    var mapping = mapfn !== undefined;
    var index = 0;
    var iterFn = getIterFn(O);
    var length, result, step, iterator;
    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
    // if object isn't iterable or it's array with default iterator - use simple case
    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
      }
    } else {
      length = toLength(O.length);
      for (result = new C(length); length > index; index++) {
        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
      }
    }
    result.length = index;
    return result;
  }
});


/***/ }),
/* 668 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var addToUnscopables = __webpack_require__(639);
var step = __webpack_require__(300);
var Iterators = __webpack_require__(113);
var toIObject = __webpack_require__(149);

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__(200)(Array, 'Array', function (iterated, kind) {
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var kind = this._k;
  var index = this._i++;
  if (!O || index >= O.length) {
    this._t = undefined;
    return step(1);
  }
  if (kind == 'keys') return step(0, index);
  if (kind == 'values') return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 669 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__(29);

$export($export.S + $export.F, 'Object', { assign: __webpack_require__(654) });


/***/ }),
/* 670 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 Object.keys(O)
var toObject = __webpack_require__(114);
var $keys = __webpack_require__(147);

__webpack_require__(659)('keys', function () {
  return function keys(it) {
    return $keys(toObject(it));
  };
});


/***/ }),
/* 671 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(201);
var global = __webpack_require__(30);
var ctx = __webpack_require__(61);
var classof = __webpack_require__(196);
var $export = __webpack_require__(29);
var isObject = __webpack_require__(48);
var aFunction = __webpack_require__(109);
var anInstance = __webpack_require__(195);
var forOf = __webpack_require__(111);
var speciesConstructor = __webpack_require__(309);
var task = __webpack_require__(310).set;
var microtask = __webpack_require__(653)();
var newPromiseCapabilityModule = __webpack_require__(202);
var perform = __webpack_require__(305);
var userAgent = __webpack_require__(666);
var promiseResolve = __webpack_require__(306);
var PROMISE = 'Promise';
var TypeError = global.TypeError;
var process = global.process;
var versions = process && process.versions;
var v8 = versions && versions.v8 || '';
var $Promise = global[PROMISE];
var isNode = classof(process) == 'process';
var empty = function () { /* empty */ };
var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;

var USE_NATIVE = !!function () {
  try {
    // correct subclassing with @@species support
    var promise = $Promise.resolve(1);
    var FakePromise = (promise.constructor = {})[__webpack_require__(34)('species')] = function (exec) {
      exec(empty, empty);
    };
    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
    return (isNode || typeof PromiseRejectionEvent == 'function')
      && promise.then(empty) instanceof FakePromise
      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
      // we can't detect it synchronously, so just check versions
      && v8.indexOf('6.6') !== 0
      && userAgent.indexOf('Chrome/66') === -1;
  } catch (e) { /* empty */ }
}();

// helpers
var isThenable = function (it) {
  var then;
  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
  if (promise._n) return;
  promise._n = true;
  var chain = promise._c;
  microtask(function () {
    var value = promise._v;
    var ok = promise._s == 1;
    var i = 0;
    var run = function (reaction) {
      var handler = ok ? reaction.ok : reaction.fail;
      var resolve = reaction.resolve;
      var reject = reaction.reject;
      var domain = reaction.domain;
      var result, then, exited;
      try {
        if (handler) {
          if (!ok) {
            if (promise._h == 2) onHandleUnhandled(promise);
            promise._h = 1;
          }
          if (handler === true) result = value;
          else {
            if (domain) domain.enter();
            result = handler(value); // may throw
            if (domain) {
              domain.exit();
              exited = true;
            }
          }
          if (result === reaction.promise) {
            reject(TypeError('Promise-chain cycle'));
          } else if (then = isThenable(result)) {
            then.call(result, resolve, reject);
          } else resolve(result);
        } else reject(value);
      } catch (e) {
        if (domain && !exited) domain.exit();
        reject(e);
      }
    };
    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
    promise._c = [];
    promise._n = false;
    if (isReject && !promise._h) onUnhandled(promise);
  });
};
var onUnhandled = function (promise) {
  task.call(global, function () {
    var value = promise._v;
    var unhandled = isUnhandled(promise);
    var result, handler, console;
    if (unhandled) {
      result = perform(function () {
        if (isNode) {
          process.emit('unhandledRejection', value, promise);
        } else if (handler = global.onunhandledrejection) {
          handler({ promise: promise, reason: value });
        } else if ((console = global.console) && console.error) {
          console.error('Unhandled promise rejection', value);
        }
      });
      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
    } promise._a = undefined;
    if (unhandled && result.e) throw result.v;
  });
};
var isUnhandled = function (promise) {
  return promise._h !== 1 && (promise._a || promise._c).length === 0;
};
var onHandleUnhandled = function (promise) {
  task.call(global, function () {
    var handler;
    if (isNode) {
      process.emit('rejectionHandled', promise);
    } else if (handler = global.onrejectionhandled) {
      handler({ promise: promise, reason: promise._v });
    }
  });
};
var $reject = function (value) {
  var promise = this;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  promise._v = value;
  promise._s = 2;
  if (!promise._a) promise._a = promise._c.slice();
  notify(promise, true);
};
var $resolve = function (value) {
  var promise = this;
  var then;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  try {
    if (promise === value) throw TypeError("Promise can't be resolved itself");
    if (then = isThenable(value)) {
      microtask(function () {
        var wrapper = { _w: promise, _d: false }; // wrap
        try {
          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
        } catch (e) {
          $reject.call(wrapper, e);
        }
      });
    } else {
      promise._v = value;
      promise._s = 1;
      notify(promise, false);
    }
  } catch (e) {
    $reject.call({ _w: promise, _d: false }, e); // wrap
  }
};

// constructor polyfill
if (!USE_NATIVE) {
  // 25.4.3.1 Promise(executor)
  $Promise = function Promise(executor) {
    anInstance(this, $Promise, PROMISE, '_h');
    aFunction(executor);
    Internal.call(this);
    try {
      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
    } catch (err) {
      $reject.call(this, err);
    }
  };
  // eslint-disable-next-line no-unused-vars
  Internal = function Promise(executor) {
    this._c = [];             // <- awaiting reactions
    this._a = undefined;      // <- checked in isUnhandled reactions
    this._s = 0;              // <- state
    this._d = false;          // <- done
    this._v = undefined;      // <- value
    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
    this._n = false;          // <- notify
  };
  Internal.prototype = __webpack_require__(204)($Promise.prototype, {
    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
    then: function then(onFulfilled, onRejected) {
      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
      reaction.fail = typeof onRejected == 'function' && onRejected;
      reaction.domain = isNode ? process.domain : undefined;
      this._c.push(reaction);
      if (this._a) this._a.push(reaction);
      if (this._s) notify(this, false);
      return reaction.promise;
    },
    // 25.4.5.1 Promise.prototype.catch(onRejected)
    'catch': function (onRejected) {
      return this.then(undefined, onRejected);
    }
  });
  OwnPromiseCapability = function () {
    var promise = new Internal();
    this.promise = promise;
    this.resolve = ctx($resolve, promise, 1);
    this.reject = ctx($reject, promise, 1);
  };
  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
    return C === $Promise || C === Wrapper
      ? new OwnPromiseCapability(C)
      : newGenericPromiseCapability(C);
  };
}

$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
__webpack_require__(148)($Promise, PROMISE);
__webpack_require__(307)(PROMISE);
Wrapper = __webpack_require__(26)[PROMISE];

// statics
$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
  // 25.4.4.5 Promise.reject(r)
  reject: function reject(r) {
    var capability = newPromiseCapability(this);
    var $$reject = capability.reject;
    $$reject(r);
    return capability.promise;
  }
});
$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
  // 25.4.4.6 Promise.resolve(x)
  resolve: function resolve(x) {
    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
  }
});
$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(299)(function (iter) {
  $Promise.all(iter)['catch'](empty);
})), PROMISE, {
  // 25.4.4.1 Promise.all(iterable)
  all: function all(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var values = [];
      var index = 0;
      var remaining = 1;
      forOf(iterable, false, function (promise) {
        var $index = index++;
        var alreadyCalled = false;
        values.push(undefined);
        remaining++;
        C.resolve(promise).then(function (value) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[$index] = value;
          --remaining || resolve(values);
        }, reject);
      });
      --remaining || resolve(values);
    });
    if (result.e) reject(result.v);
    return capability.promise;
  },
  // 25.4.4.4 Promise.race(iterable)
  race: function race(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var reject = capability.reject;
    var result = perform(function () {
      forOf(iterable, false, function (promise) {
        C.resolve(promise).then(capability.resolve, reject);
      });
    });
    if (result.e) reject(result.v);
    return capability.promise;
  }
});


/***/ }),
/* 672 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var strong = __webpack_require__(645);
var validate = __webpack_require__(311);
var SET = 'Set';

// 23.2 Set Objects
module.exports = __webpack_require__(647)(SET, function (get) {
  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
  // 23.2.3.1 Set.prototype.add(value)
  add: function add(value) {
    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
  }
}, strong);


/***/ }),
/* 673 */
/***/ (function(module, exports, __webpack_require__) {

// https://github.com/tc39/proposal-object-values-entries
var $export = __webpack_require__(29);
var $entries = __webpack_require__(304)(true);

$export($export.S, 'Object', {
  entries: function entries(it) {
    return $entries(it);
  }
});


/***/ }),
/* 674 */
/***/ (function(module, exports, __webpack_require__) {

// https://github.com/tc39/proposal-object-values-entries
var $export = __webpack_require__(29);
var $values = __webpack_require__(304)(false);

$export($export.S, 'Object', {
  values: function values(it) {
    return $values(it);
  }
});


/***/ }),
/* 675 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// https://github.com/tc39/proposal-promise-finally

var $export = __webpack_require__(29);
var core = __webpack_require__(26);
var global = __webpack_require__(30);
var speciesConstructor = __webpack_require__(309);
var promiseResolve = __webpack_require__(306);

$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
  var C = speciesConstructor(this, core.Promise || global.Promise);
  var isFunction = typeof onFinally == 'function';
  return this.then(
    isFunction ? function (x) {
      return promiseResolve(C, onFinally()).then(function () { return x; });
    } : onFinally,
    isFunction ? function (e) {
      return promiseResolve(C, onFinally()).then(function () { throw e; });
    } : onFinally
  );
} });


/***/ }),
/* 676 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://github.com/tc39/proposal-promise-try
var $export = __webpack_require__(29);
var newPromiseCapability = __webpack_require__(202);
var perform = __webpack_require__(305);

$export($export.S, 'Promise', { 'try': function (callbackfn) {
  var promiseCapability = newPromiseCapability.f(this);
  var result = perform(callbackfn);
  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
  return promiseCapability.promise;
} });


/***/ }),
/* 677 */
/***/ (function(module, exports, __webpack_require__) {

// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
__webpack_require__(661)('Set');


/***/ }),
/* 678 */
/***/ (function(module, exports, __webpack_require__) {

// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of
__webpack_require__(662)('Set');


/***/ }),
/* 679 */
/***/ (function(module, exports, __webpack_require__) {

// https://github.com/DavidBruant/Map-Set.prototype.toJSON
var $export = __webpack_require__(29);

$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(646)('Set') });


/***/ }),
/* 680 */
/***/ (function(module, exports, __webpack_require__) {

/*
Copyright (c) 2012, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://yuilibrary.com/license/
*/
var fs = __webpack_require__(3);
var Stack = __webpack_require__(681).Stack;
var path = __webpack_require__(0);
var rimraf = __webpack_require__(683);
var mkdirp = __webpack_require__(228);

var getTree = function(from, options, callback) {
    var stack = new Stack(),
        errors = [],
        results = {};

    options.stats = options.stats || {};
    options.toHash = options.toHash || {};

    fs.readdir(from, stack.add(function(err, dirs) {
        if (!dirs.length) {
            results[from] = true;
            fs.stat(from, stack.add(function(err, stat) {
                if (err) {
                    return errors.push(err);
                }
                options.stats[from] = stat;
                options.toHash[from] = path.join(options.to, path.relative(options.from, from));
            }));
        }
        dirs.forEach(function (dir) {
            var base = path.join(from, dir);
            fs.stat(base, stack.add(function(err, stat) {
                options.stats[base] = stat;
                options.toHash[base] = path.join(options.to, path.relative(options.from, base));
                if (err) {
                    return errors.push(err);
                }
                if (stat.isDirectory()) {
                    getTree(base, options, stack.add(function(errs, tree) {
                        if (errs && errs.length) {
                            errs.forEach(function(item) {
                                errors.push(item);
                            });
                        }
                        if (tree && tree.length) {
                            tree.forEach(function(item) {
                                results[item] = true;
                            });
                        }
                    }));
                } else if (stat.isFile()) {
                    results[base] = true;
                }
            }));
        });
    }));

    stack.done(function() {
        callback(errors, Object.keys(results).sort());
    });
};

var filterTree = function (tree, options, callback) {
    var t = tree;
    if (options.filter) {
        if (typeof options.filter === 'function') {
            t = tree.filter(options.filter);
        } else if (options.filter instanceof RegExp) {
            t = tree.filter(function(item) {
                return !options.filter.test(item);
            });
        }
    }
    callback(null, t);
};

var splitTree = function (tree, options, callback) {
    var files = {},
        dirs = {};

    tree.forEach(function(item) {
        var to = options.toHash[item];
        if (options.stats[item] && options.stats[item].isDirectory()) {
            dirs[item] = true;
        } else {
            dirs[path.dirname(item)] = true;
            options.stats[path.dirname(item)] = fs.statSync(path.dirname(item));
            options.toHash[path.dirname(item)] = path.dirname(to);
        }
    });

    tree.forEach(function(item) {
        if (!dirs[item]) {
            files[item] = true;
        }
    });

    callback(Object.keys(dirs).sort(), Object.keys(files).sort());
};


var createDirs = function(dirs, to, options, callback) {
    var stack = new Stack();

    dirs.forEach(function(dir) {
        var stat = options.stats[dir],
            to = options.toHash[dir];

        if (to && typeof to === 'string') {
            fs.stat(to, stack.add(function(err, s) {
                if (s && s.isDirectory()) {
                    if (options.overwrite) {
                        rimraf(to, stack.add(function() {
                            mkdirp(to, stat.mode, stack.add(function(err) {
                                if (err) {
                                    options.errors.push(err);
                                }
                            }));
                        }));
                    }
                } else {
                    mkdirp(to, stat.mode, stack.add(function(err) {
                        if (err) {
                            options.errors.push(err);
                        }
                    }));
                }
            }));
        }
    });

    stack.done(function() {
        callback();
    });
};

var copyFile = function(from, to, options, callback) {
    var dir = path.dirname(to);
    mkdirp(dir, function() {
        fs.stat(to, function(statError) {
            if(!statError && options.overwrite !== true) {
              return callback(new Error('File '+to+' exists'));
            }

            var fromFile = fs.createReadStream(from),
                toFile = fs.createWriteStream(to),
                err,
                onError = function (e) {
                    err = e;
                };

            fromFile.on('error', onError);
            toFile.on('error', onError);
            fromFile.once('end', function() {
                callback(err);
            });
            fromFile.pipe(toFile);
        });
    });
};

var createFiles = function(files, to, options, callback) {
    var next = process.nextTick,
        complete = 0,
        count = files.length,
        check = function() {
            if (count === complete) {
                callback();
            }
        },
        copy = function() {
            var from = files.pop(),
                to = options.toHash[from],
                bail;
            if (!from) {
                return check();
            }
            copyFile(from, to, options, function(err) {
                /*istanbul ignore next*/
                //This shouldn't happen with graceful-fs, but just in case
                if (/EMFILE/.test(err)) {
                    bail = true;
                    files.push(from);
                } else if (err) {
                    options.errors.push(err);
                }
                /*istanbul ignore next*/
                if (!bail) {
                    complete++;
                }
                next(copy);
            });
        };

    copy();
};

var confirm = function(files, options, callback) {
    var stack = new Stack(),
        errors = [],
        f = [],
        filtered = files;

    if (options.filter) {
        if (typeof options.filter === 'function') {
            filtered = files.filter(options.filter);
        } else if (options.filter instanceof RegExp) {
            filtered = files.filter(function(item) {
                return !options.filter.test(item);
            });
        }
    }

    if (filtered.length) {
        filtered.forEach(function(file) {
            fs.stat(file, stack.add(function(err, stat) {
                /*istanbul ignore next*/
                if (err) {
                    errors.push(err);
                } else {
                    if (stat && (stat.isFile() || stat.isDirectory())) {
                        f.push(file);
                    }
                }
            }));
        });
    }

    stack.done(function() {
        callback(((errors.length) ? errors : null), f.sort());
    });
};

var cpr = function(from, to, opts, callback) {
    if (typeof opts === 'function') {
        callback = opts;
        opts = {};
    }

    var options = {},
        proc;

    Object.keys(opts).forEach(function(key) {
        options[key] = opts[key];
    });

    options.from = from;
    options.to = to;
    options.errors = [];

    proc = function() {
        getTree(options.from, options, function(err, tree) {
            filterTree(tree, options, function(err, t) {
                splitTree(t, options, function(dirs, files) {
                    if (!dirs.length && !files.length) {
                        return callback(new Error('No files to copy'));
                    }
                    createDirs(dirs, to, options, function() {
                        createFiles(files, to, options, function() {
                            var out = [], err;
                            Object.keys(options.toHash).forEach(function(k) {
                                out.push(options.toHash[k]);
                            });
                            if (options.confirm) {
                                confirm(out, options, callback);
                            } else if (!options.errors.length) {
                                callback(null, out.sort());
                            } else {
                                /*istanbul ignore next*/
                                err = new Error('Unable to copy directory' + (out.length ? ' entirely' : ''));
                                /*istanbul ignore next*/
                                err.list = options.errors;
                                /*istanbul ignore next*/
                                callback(err, out.sort());
                            }
                        });
                    });
                });
            });
        });
    };

    fs.stat(options.from, function(err, stat) {
        if (err) {
            return callback(new Error('From should be a file or directory'));
        }
        if (stat && stat.isDirectory()) {
            if (options.deleteFirst) {
                rimraf(to, function() {
                    proc();
                });
            } else {
                proc();

            }
        } else {
            if (stat.isFile()) {
                return copyFile(options.from, path.join(to, path.basename(options.from)), options, callback);
            }
            callback(new Error('From should be a file or directory'));
        }
    });
};

//Preserve backward compatibility
cpr.cpr = cpr;
//Export a function
module.exports = cpr;


/***/ }),
/* 681 */
/***/ (function(module, exports) {

/*
Copyright (c) 2012, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://yuilibrary.com/license/
*/
var Stack = function () {
    this.errors   = [];
    this.finished = 0;
    this.results  = [];
    this.total    = 0;
};

Stack.prototype = {
    add: function (fn) {
        var self  = this,
            index = self.total;

        self.total += 1;

        return function (err) {
            if (err) { self.errors[index] = err; }

            self.finished += 1;
            self.results[index] = fn.apply(null, arguments);
            self.test();
        };
    },

    test: function () {
        if (this.finished >= this.total && this.callback) {
            this.callback.call(null, this.errors.length ? this.errors : null,
                    this.results, this.data);
        }
    },

    done: function (callback, data) {
        this.callback = callback;
        this.data     = data;
        this.test();
    }
};

exports.Stack = Stack;



/***/ }),
/* 682 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = globSync
globSync.GlobSync = GlobSync

var fs = __webpack_require__(1)
var minimatch = __webpack_require__(64)
var Minimatch = minimatch.Minimatch
var Glob = __webpack_require__(316).Glob
var util = __webpack_require__(2)
var path = __webpack_require__(0)
var assert = __webpack_require__(11)
var isAbsolute = __webpack_require__(65)
var common = __webpack_require__(315)
var alphasort = common.alphasort
var alphasorti = common.alphasorti
var setopts = common.setopts
var ownProp = common.ownProp
var childrenIgnored = common.childrenIgnored

function globSync (pattern, options) {
  if (typeof options === 'function' || arguments.length === 3)
    throw new TypeError('callback provided to sync glob\n'+
                        'See: https://github.com/isaacs/node-glob/issues/167')

  return new GlobSync(pattern, options).found
}

function GlobSync (pattern, options) {
  if (!pattern)
    throw new Error('must provide pattern')

  if (typeof options === 'function' || arguments.length === 3)
    throw new TypeError('callback provided to sync glob\n'+
                        'See: https://github.com/isaacs/node-glob/issues/167')

  if (!(this instanceof GlobSync))
    return new GlobSync(pattern, options)

  setopts(this, pattern, options)

  if (this.noprocess)
    return this

  var n = this.minimatch.set.length
  this.matches = new Array(n)
  for (var i = 0; i < n; i ++) {
    this._process(this.minimatch.set[i], i, false)
  }
  this._finish()
}

GlobSync.prototype._finish = function () {
  assert(this instanceof GlobSync)
  if (this.realpath) {
    var self = this
    this.matches.forEach(function (matchset, index) {
      var set = self.matches[index] = Object.create(null)
      for (var p in matchset) {
        try {
          p = self._makeAbs(p)
          var real = fs.realpathSync(p, self.realpathCache)
          set[real] = true
        } catch (er) {
          if (er.syscall === 'stat')
            set[self._makeAbs(p)] = true
          else
            throw er
        }
      }
    })
  }
  common.finish(this)
}


GlobSync.prototype._process = function (pattern, index, inGlobStar) {
  assert(this instanceof GlobSync)

  // Get the first [n] parts of pattern that are all strings.
  var n = 0
  while (typeof pattern[n] === 'string') {
    n ++
  }
  // now n is the index of the first one that is *not* a string.

  // See if there's anything else
  var prefix
  switch (n) {
    // if not, then this is rather simple
    case pattern.length:
      this._processSimple(pattern.join('/'), index)
      return

    case 0:
      // pattern *starts* with some non-trivial item.
      // going to readdir(cwd), but not include the prefix in matches.
      prefix = null
      break

    default:
      // pattern has some string bits in the front.
      // whatever it starts with, whether that's 'absolute' like /foo/bar,
      // or 'relative' like '../baz'
      prefix = pattern.slice(0, n).join('/')
      break
  }

  var remain = pattern.slice(n)

  // get the list of entries.
  var read
  if (prefix === null)
    read = '.'
  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
    if (!prefix || !isAbsolute(prefix))
      prefix = '/' + prefix
    read = prefix
  } else
    read = prefix

  var abs = this._makeAbs(read)

  //if ignored, skip processing
  if (childrenIgnored(this, read))
    return

  var isGlobStar = remain[0] === minimatch.GLOBSTAR
  if (isGlobStar)
    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
  else
    this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
}


GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
  var entries = this._readdir(abs, inGlobStar)

  // if the abs isn't a dir, then nothing can match!
  if (!entries)
    return

  // It will only match dot entries if it starts with a dot, or if
  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
  var pn = remain[0]
  var negate = !!this.minimatch.negate
  var rawGlob = pn._glob
  var dotOk = this.dot || rawGlob.charAt(0) === '.'

  var matchedEntries = []
  for (var i = 0; i < entries.length; i++) {
    var e = entries[i]
    if (e.charAt(0) !== '.' || dotOk) {
      var m
      if (negate && !prefix) {
        m = !e.match(pn)
      } else {
        m = e.match(pn)
      }
      if (m)
        matchedEntries.push(e)
    }
  }

  var len = matchedEntries.length
  // If there are no matched entries, then nothing matches.
  if (len === 0)
    return

  // if this is the last remaining pattern bit, then no need for
  // an additional stat *unless* the user has specified mark or
  // stat explicitly.  We know they exist, since readdir returned
  // them.

  if (remain.length === 1 && !this.mark && !this.stat) {
    if (!this.matches[index])
      this.matches[index] = Object.create(null)

    for (var i = 0; i < len; i ++) {
      var e = matchedEntries[i]
      if (prefix) {
        if (prefix.slice(-1) !== '/')
          e = prefix + '/' + e
        else
          e = prefix + e
      }

      if (e.charAt(0) === '/' && !this.nomount) {
        e = path.join(this.root, e)
      }
      this.matches[index][e] = true
    }
    // This was the last one, and no stats were needed
    return
  }

  // now test all matched entries as stand-ins for that part
  // of the pattern.
  remain.shift()
  for (var i = 0; i < len; i ++) {
    var e = matchedEntries[i]
    var newPattern
    if (prefix)
      newPattern = [prefix, e]
    else
      newPattern = [e]
    this._process(newPattern.concat(remain), index, inGlobStar)
  }
}


GlobSync.prototype._emitMatch = function (index, e) {
  var abs = this._makeAbs(e)
  if (this.mark)
    e = this._mark(e)

  if (this.matches[index][e])
    return

  if (this.nodir) {
    var c = this.cache[this._makeAbs(e)]
    if (c === 'DIR' || Array.isArray(c))
      return
  }

  this.matches[index][e] = true
  if (this.stat)
    this._stat(e)
}


GlobSync.prototype._readdirInGlobStar = function (abs) {
  // follow all symlinked directories forever
  // just proceed as if this is a non-globstar situation
  if (this.follow)
    return this._readdir(abs, false)

  var entries
  var lstat
  var stat
  try {
    lstat = fs.lstatSync(abs)
  } catch (er) {
    // lstat failed, doesn't exist
    return null
  }

  var isSym = lstat.isSymbolicLink()
  this.symlinks[abs] = isSym

  // If it's not a symlink or a dir, then it's definitely a regular file.
  // don't bother doing a readdir in that case.
  if (!isSym && !lstat.isDirectory())
    this.cache[abs] = 'FILE'
  else
    entries = this._readdir(abs, false)

  return entries
}

GlobSync.prototype._readdir = function (abs, inGlobStar) {
  var entries

  if (inGlobStar && !ownProp(this.symlinks, abs))
    return this._readdirInGlobStar(abs)

  if (ownProp(this.cache, abs)) {
    var c = this.cache[abs]
    if (!c || c === 'FILE')
      return null

    if (Array.isArray(c))
      return c
  }

  try {
    return this._readdirEntries(abs, fs.readdirSync(abs))
  } catch (er) {
    this._readdirError(abs, er)
    return null
  }
}

GlobSync.prototype._readdirEntries = function (abs, entries) {
  // if we haven't asked to stat everything, then just
  // assume that everything in there exists, so we can avoid
  // having to stat it a second time.
  if (!this.mark && !this.stat) {
    for (var i = 0; i < entries.length; i ++) {
      var e = entries[i]
      if (abs === '/')
        e = abs + e
      else
        e = abs + '/' + e
      this.cache[e] = true
    }
  }

  this.cache[abs] = entries

  // mark and cache dir-ness
  return entries
}

GlobSync.prototype._readdirError = function (f, er) {
  // handle errors, and cache the information
  switch (er.code) {
    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
    case 'ENOTDIR': // totally normal. means it *does* exist.
      this.cache[this._makeAbs(f)] = 'FILE'
      break

    case 'ENOENT': // not terribly unusual
    case 'ELOOP':
    case 'ENAMETOOLONG':
    case 'UNKNOWN':
      this.cache[this._makeAbs(f)] = false
      break

    default: // some unusual error.  Treat as failure.
      this.cache[this._makeAbs(f)] = false
      if (this.strict)
        throw er
      if (!this.silent)
        console.error('glob error', er)
      break
  }
}

GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {

  var entries = this._readdir(abs, inGlobStar)

  // no entries means not a dir, so it can never have matches
  // foo.txt/** doesn't match foo.txt
  if (!entries)
    return

  // test without the globstar, and with every child both below
  // and replacing the globstar.
  var remainWithoutGlobStar = remain.slice(1)
  var gspref = prefix ? [ prefix ] : []
  var noGlobStar = gspref.concat(remainWithoutGlobStar)

  // the noGlobStar pattern exits the inGlobStar state
  this._process(noGlobStar, index, false)

  var len = entries.length
  var isSym = this.symlinks[abs]

  // If it's a symlink, and we're in a globstar, then stop
  if (isSym && inGlobStar)
    return

  for (var i = 0; i < len; i++) {
    var e = entries[i]
    if (e.charAt(0) === '.' && !this.dot)
      continue

    // these two cases enter the inGlobStar state
    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
    this._process(instead, index, true)

    var below = gspref.concat(entries[i], remain)
    this._process(below, index, true)
  }
}

GlobSync.prototype._processSimple = function (prefix, index) {
  // XXX review this.  Shouldn't it be doing the mounting etc
  // before doing stat?  kinda weird?
  var exists = this._stat(prefix)

  if (!this.matches[index])
    this.matches[index] = Object.create(null)

  // If it doesn't exist, then just mark the lack of results
  if (!exists)
    return

  if (prefix && isAbsolute(prefix) && !this.nomount) {
    var trail = /[\/\\]$/.test(prefix)
    if (prefix.charAt(0) === '/') {
      prefix = path.join(this.root, prefix)
    } else {
      prefix = path.resolve(this.root, prefix)
      if (trail)
        prefix += '/'
    }
  }

  if (process.platform === 'win32')
    prefix = prefix.replace(/\\/g, '/')

  // Mark this as a match
  this.matches[index][prefix] = true
}

// Returns either 'DIR', 'FILE', or false
GlobSync.prototype._stat = function (f) {
  var abs = this._makeAbs(f)
  var needDir = f.slice(-1) === '/'

  if (f.length > this.maxLength)
    return false

  if (!this.stat && ownProp(this.cache, abs)) {
    var c = this.cache[abs]

    if (Array.isArray(c))
      c = 'DIR'

    // It exists, but maybe not how we need it
    if (!needDir || c === 'DIR')
      return c

    if (needDir && c === 'FILE')
      return false

    // otherwise we have to stat, because maybe c=true
    // if we know it exists, but not what it is.
  }

  var exists
  var stat = this.statCache[abs]
  if (!stat) {
    var lstat
    try {
      lstat = fs.lstatSync(abs)
    } catch (er) {
      return false
    }

    if (lstat.isSymbolicLink()) {
      try {
        stat = fs.statSync(abs)
      } catch (er) {
        stat = lstat
      }
    } else {
      stat = lstat
    }
  }

  this.statCache[abs] = stat

  var c = stat.isDirectory() ? 'DIR' : 'FILE'
  this.cache[abs] = this.cache[abs] || c

  if (needDir && c !== 'DIR')
    return false

  return c
}

GlobSync.prototype._mark = function (p) {
  return common.mark(this, p)
}

GlobSync.prototype._makeAbs = function (f) {
  return common.makeAbs(this, f)
}


/***/ }),
/* 683 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = rimraf
rimraf.sync = rimrafSync

var assert = __webpack_require__(11)
var path = __webpack_require__(0)
var fs = __webpack_require__(1)
var glob = __webpack_require__(316)

var globOpts = {
  nosort: true,
  nocomment: true,
  nonegate: true,
  silent: true
}

// for EMFILE handling
var timeout = 0

var isWindows = (process.platform === "win32")

function defaults (options) {
  var methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(function(m) {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
  options.emfileWait = options.emfileWait || 1000
  options.disableGlob = options.disableGlob || false
}

function rimraf (p, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')
  assert.equal(typeof cb, 'function', 'rimraf: callback function required')

  defaults(options)

  var busyTries = 0
  var errState = null
  var n = 0

  if (options.disableGlob || !glob.hasMagic(p))
    return afterGlob(null, [p])

  fs.lstat(p, function (er, stat) {
    if (!er)
      return afterGlob(null, [p])

    glob(p, globOpts, afterGlob)
  })

  function next (er) {
    errState = errState || er
    if (--n === 0)
      cb(errState)
  }

  function afterGlob (er, results) {
    if (er)
      return cb(er)

    n = results.length
    if (n === 0)
      return cb()

    results.forEach(function (p) {
      rimraf_(p, options, function CB (er) {
        if (er) {
          if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
              busyTries < options.maxBusyTries) {
            busyTries ++
            var time = busyTries * 100
            // try again, with the same exact callback as this one.
            return setTimeout(function () {
              rimraf_(p, options, CB)
            }, time)
          }

          // this one won't happen if graceful-fs is used.
          if (er.code === "EMFILE" && timeout < options.emfileWait) {
            return setTimeout(function () {
              rimraf_(p, options, CB)
            }, timeout ++)
          }

          // already gone
          if (er.code === "ENOENT") er = null
        }

        timeout = 0
        next(er)
      })
    })
  }
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, function (er, st) {
    if (er && er.code === "ENOENT")
      return cb(null)

    if (st && st.isDirectory())
      return rmdir(p, options, er, cb)

    options.unlink(p, function (er) {
      if (er) {
        if (er.code === "ENOENT")
          return cb(null)
        if (er.code === "EPERM")
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        if (er.code === "EISDIR")
          return rmdir(p, options, er, cb)
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er)
    assert(er instanceof Error)

  options.chmod(p, 666, function (er2) {
    if (er2)
      cb(er2.code === "ENOENT" ? null : er)
    else
      options.stat(p, function(er3, stats) {
        if (er3)
          cb(er3.code === "ENOENT" ? null : er)
        else if (stats.isDirectory())
          rmdir(p, options, er, cb)
        else
          options.unlink(p, cb)
      })
  })
}

function fixWinEPERMSync (p, options, er) {
  assert(p)
  assert(options)
  if (er)
    assert(er instanceof Error)

  try {
    options.chmodSync(p, 666)
  } catch (er2) {
    if (er2.code === "ENOENT")
      return
    else
      throw er
  }

  try {
    var stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === "ENOENT")
      return
    else
      throw er
  }

  if (stats.isDirectory())
    rmdirSync(p, options, er)
  else
    options.unlinkSync(p)
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, function (er) {
    if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
      rmkids(p, options, cb)
    else if (er && er.code === "ENOTDIR")
      cb(originalEr)
    else
      cb(er)
  })
}

function rmkids(p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, function (er, files) {
    if (er)
      return cb(er)
    var n = files.length
    if (n === 0)
      return options.rmdir(p, cb)
    var errState
    files.forEach(function (f) {
      rimraf(path.join(p, f), options, function (er) {
        if (errState)
          return
        if (er)
          return cb(errState = er)
        if (--n === 0)
          options.rmdir(p, cb)
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  var results

  if (options.disableGlob || !glob.hasMagic(p)) {
    results = [p]
  } else {
    try {
      fs.lstatSync(p)
      results = [p]
    } catch (er) {
      results = glob.sync(p, globOpts)
    }
  }

  if (!results.length)
    return

  for (var i = 0; i < results.length; i++) {
    var p = results[i]

    try {
      var st = options.lstatSync(p)
    } catch (er) {
      if (er.code === "ENOENT")
        return
    }

    try {
      // sunos lets the root user unlink directories, which is... weird.
      if (st && st.isDirectory())
        rmdirSync(p, options, null)
      else
        options.unlinkSync(p)
    } catch (er) {
      if (er.code === "ENOENT")
        return
      if (er.code === "EPERM")
        return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
      if (er.code !== "EISDIR")
        throw er
      rmdirSync(p, options, er)
    }
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === "ENOENT")
      return
    if (er.code === "ENOTDIR")
      throw originalEr
    if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
      rmkidsSync(p, options)
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(function (f) {
    rimrafSync(path.join(p, f), options)
  })
  options.rmdirSync(p, options)
}


/***/ }),
/* 684 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var cp = __webpack_require__(39);
var parse = __webpack_require__(686);
var enoent = __webpack_require__(685);

var cpSpawnSync = cp.spawnSync;

function spawn(command, args, options) {
    var parsed;
    var spawned;

    // Parse the arguments
    parsed = parse(command, args, options);

    // Spawn the child process
    spawned = cp.spawn(parsed.command, parsed.args, parsed.options);

    // Hook into child process "exit" event to emit an error if the command
    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
    enoent.hookChildProcess(spawned, parsed);

    return spawned;
}

function spawnSync(command, args, options) {
    var parsed;
    var result;

    if (!cpSpawnSync) {
        try {
            cpSpawnSync = __webpack_require__(1068);  // eslint-disable-line global-require
        } catch (ex) {
            throw new Error(
                'In order to use spawnSync on node 0.10 or older, you must ' +
                'install spawn-sync:\n\n' +
                '  npm install spawn-sync --save'
            );
        }
    }

    // Parse the arguments
    parsed = parse(command, args, options);

    // Spawn the child process
    result = cpSpawnSync(parsed.command, parsed.args, parsed.options);

    // Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);

    return result;
}

module.exports = spawn;
module.exports.spawn = spawn;
module.exports.sync = spawnSync;

module.exports._parse = parse;
module.exports._enoent = enoent;


/***/ }),
/* 685 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var isWin = process.platform === 'win32';
var resolveCommand = __webpack_require__(318);

var isNode10 = process.version.indexOf('v0.10.') === 0;

function notFoundError(command, syscall) {
    var err;

    err = new Error(syscall + ' ' + command + ' ENOENT');
    err.code = err.errno = 'ENOENT';
    err.syscall = syscall + ' ' + command;

    return err;
}

function hookChildProcess(cp, parsed) {
    var originalEmit;

    if (!isWin) {
        return;
    }

    originalEmit = cp.emit;
    cp.emit = function (name, arg1) {
        var err;

        // If emitting "exit" event and exit code is 1, we need to check if
        // the command exists and emit an "error" instead
        // See: https://github.com/IndigoUnited/node-cross-spawn/issues/16
        if (name === 'exit') {
            err = verifyENOENT(arg1, parsed, 'spawn');

            if (err) {
                return originalEmit.call(cp, 'error', err);
            }
        }

        return originalEmit.apply(cp, arguments);
    };
}

function verifyENOENT(status, parsed) {
    if (isWin && status === 1 && !parsed.file) {
        return notFoundError(parsed.original, 'spawn');
    }

    return null;
}

function verifyENOENTSync(status, parsed) {
    if (isWin && status === 1 && !parsed.file) {
        return notFoundError(parsed.original, 'spawnSync');
    }

    // If we are in node 10, then we are using spawn-sync; if it exited
    // with -1 it probably means that the command does not exist
    if (isNode10 && status === -1) {
        parsed.file = isWin ? parsed.file : resolveCommand(parsed.original);

        if (!parsed.file) {
            return notFoundError(parsed.original, 'spawnSync');
        }
    }

    return null;
}

module.exports.hookChildProcess = hookChildProcess;
module.exports.verifyENOENT = verifyENOENT;
module.exports.verifyENOENTSync = verifyENOENTSync;
module.exports.notFoundError = notFoundError;


/***/ }),
/* 686 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var resolveCommand = __webpack_require__(318);
var hasEmptyArgumentBug = __webpack_require__(688);
var escapeArgument = __webpack_require__(317);
var escapeCommand = __webpack_require__(687);
var readShebang = __webpack_require__(689);

var isWin = process.platform === 'win32';
var skipShellRegExp = /\.(?:com|exe)$/i;

// Supported in Node >= 6 and >= 4.8
var supportsShellOption = parseInt(process.version.substr(1).split('.')[0], 10) >= 6 ||
 parseInt(process.version.substr(1).split('.')[0], 10) === 4 && parseInt(process.version.substr(1).split('.')[1], 10) >= 8;

function parseNonShell(parsed) {
    var shebang;
    var needsShell;
    var applyQuotes;

    if (!isWin) {
        return parsed;
    }

    // Detect & add support for shebangs
    parsed.file = resolveCommand(parsed.command);
    parsed.file = parsed.file || resolveCommand(parsed.command, true);
    shebang = parsed.file && readShebang(parsed.file);

    if (shebang) {
        parsed.args.unshift(parsed.file);
        parsed.command = shebang;
        needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(resolveCommand(shebang) || resolveCommand(shebang, true));
    } else {
        needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(parsed.file);
    }

    // If a shell is required, use cmd.exe and take care of escaping everything correctly
    if (needsShell) {
        // Escape command & arguments
        applyQuotes = (parsed.command !== 'echo');  // Do not quote arguments for the special "echo" command
        parsed.command = escapeCommand(parsed.command);
        parsed.args = parsed.args.map(function (arg) {
            return escapeArgument(arg, applyQuotes);
        });

        // Make use of cmd.exe
        parsed.args = ['/d', '/s', '/c', '"' + parsed.command + (parsed.args.length ? ' ' + parsed.args.join(' ') : '') + '"'];
        parsed.command = process.env.comspec || 'cmd.exe';
        parsed.options.windowsVerbatimArguments = true;  // Tell node's spawn that the arguments are already escaped
    }

    return parsed;
}

function parseShell(parsed) {
    var shellCommand;

    // If node supports the shell option, there's no need to mimic its behavior
    if (supportsShellOption) {
        return parsed;
    }

    // Mimic node shell option, see: https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
    shellCommand = [parsed.command].concat(parsed.args).join(' ');

    if (isWin) {
        parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
        parsed.args = ['/d', '/s', '/c', '"' + shellCommand + '"'];
        parsed.options.windowsVerbatimArguments = true;  // Tell node's spawn that the arguments are already escaped
    } else {
        if (typeof parsed.options.shell === 'string') {
            parsed.command = parsed.options.shell;
        } else if (process.platform === 'android') {
            parsed.command = '/system/bin/sh';
        } else {
            parsed.command = '/bin/sh';
        }

        parsed.args = ['-c', shellCommand];
    }

    return parsed;
}

// ------------------------------------------------

function parse(command, args, options) {
    var parsed;

    // Normalize arguments, similar to nodejs
    if (args && !Array.isArray(args)) {
        options = args;
        args = null;
    }

    args = args ? args.slice(0) : [];  // Clone array to avoid changing the original
    options = options || {};

    // Build our parsed object
    parsed = {
        command: command,
        args: args,
        options: options,
        file: undefined,
        original: command,
    };

    // Delegate further parsing to shell or non-shell
    return options.shell ? parseShell(parsed) : parseNonShell(parsed);
}

module.exports = parse;


/***/ }),
/* 687 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var escapeArgument = __webpack_require__(317);

function escapeCommand(command) {
    // Do not escape if this command is not dangerous..
    // We do this so that commands like "echo" or "ifconfig" work
    // Quoting them, will make them unaccessible
    return /^[a-z0-9_-]+$/i.test(command) ? command : escapeArgument(command, true);
}

module.exports = escapeCommand;


/***/ }),
/* 688 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// See: https://github.com/IndigoUnited/node-cross-spawn/pull/34#issuecomment-221623455
function hasEmptyArgumentBug() {
    var nodeVer;

    if (process.platform !== 'win32') {
        return false;
    }

    nodeVer = process.version.substr(1).split('.').map(function (num) {
        return parseInt(num, 10);
    });

    return (nodeVer[0] === 0 && nodeVer[1] < 12);
}

module.exports = hasEmptyArgumentBug();


/***/ }),
/* 689 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1);
var LRU = __webpack_require__(378);
var shebangCommand = __webpack_require__(1055);

var shebangCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec

function readShebang(command) {
    var buffer;
    var fd;
    var shebang;

    // Check if it is in the cache first
    if (shebangCache.has(command)) {
        return shebangCache.get(command);
    }

    // Read the first 150 bytes from the file
    buffer = new Buffer(150);

    try {
        fd = fs.openSync(command, 'r');
        fs.readSync(fd, buffer, 0, 150, 0);
        fs.closeSync(fd);
    } catch (e) { /* empty */ }

    // Attempt to extract shebang (null is returned if not a shebang)
    shebang = shebangCommand(buffer.toString());

    // Store the shebang in the cache
    shebangCache.set(command, shebang);

    return shebang;
}

module.exports = readShebang;


/***/ }),
/* 690 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(91), __webpack_require__(93), __webpack_require__(92), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var BlockCipher = C_lib.BlockCipher;
	    var C_algo = C.algo;

	    // Lookup tables
	    var SBOX = [];
	    var INV_SBOX = [];
	    var SUB_MIX_0 = [];
	    var SUB_MIX_1 = [];
	    var SUB_MIX_2 = [];
	    var SUB_MIX_3 = [];
	    var INV_SUB_MIX_0 = [];
	    var INV_SUB_MIX_1 = [];
	    var INV_SUB_MIX_2 = [];
	    var INV_SUB_MIX_3 = [];

	    // Compute lookup tables
	    (function () {
	        // Compute double table
	        var d = [];
	        for (var i = 0; i < 256; i++) {
	            if (i < 128) {
	                d[i] = i << 1;
	            } else {
	                d[i] = (i << 1) ^ 0x11b;
	            }
	        }

	        // 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
	            var 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;

	            // Compute next counter
	            if (!x) {
	                x = xi = 1;
	            } else {
	                x = x2 ^ d[d[d[x8 ^ x2]]];
	                xi ^= d[d[xi]];
	            }
	        }
	    }());

	    // Precomputed Rcon lookup
	    var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];

	    /**
	     * AES block cipher algorithm.
	     */
	    var AES = C_algo.AES = BlockCipher.extend({
	        _doReset: function () {
	            // Skip reset of nRounds has been set before and key did not change
	            if (this._nRounds && this._keyPriorReset === this._key) {
	                return;
	            }

	            // Shortcuts
	            var key = this._keyPriorReset = this._key;
	            var keyWords = key.words;
	            var keySize = key.sigBytes / 4;

	            // Compute number of rounds
	            var nRounds = this._nRounds = keySize + 6;

	            // Compute number of key schedule rows
	            var ksRows = (nRounds + 1) * 4;

	            // Compute key schedule
	            var keySchedule = this._keySchedule = [];
	            for (var ksRow = 0; ksRow < ksRows; ksRow++) {
	                if (ksRow < keySize) {
	                    keySchedule[ksRow] = keyWords[ksRow];
	                } else {
	                    var t = keySchedule[ksRow - 1];

	                    if (!(ksRow % keySize)) {
	                        // Rot word
	                        t = (t << 8) | (t >>> 24);

	                        // Sub word
	                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];

	                        // Mix Rcon
	                        t ^= RCON[(ksRow / keySize) | 0] << 24;
	                    } else if (keySize > 6 && ksRow % keySize == 4) {
	                        // Sub word
	                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
	                    }

	                    keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
	                }
	            }

	            // Compute inv key schedule
	            var invKeySchedule = this._invKeySchedule = [];
	            for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
	                var ksRow = ksRows - invKsRow;

	                if (invKsRow % 4) {
	                    var t = keySchedule[ksRow];
	                } else {
	                    var t = keySchedule[ksRow - 4];
	                }

	                if (invKsRow < 4 || ksRow <= 4) {
	                    invKeySchedule[invKsRow] = t;
	                } else {
	                    invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
	                                               INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
	                }
	            }
	        },

	        encryptBlock: function (M, offset) {
	            this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
	        },

	        decryptBlock: function (M, offset) {
	            // Swap 2nd and 4th rows
	            var t = M[offset + 1];
	            M[offset + 1] = M[offset + 3];
	            M[offset + 3] = t;

	            this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);

	            // Inv swap 2nd and 4th rows
	            var t = M[offset + 1];
	            M[offset + 1] = M[offset + 3];
	            M[offset + 3] = t;
	        },

	        _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
	            // Shortcut
	            var nRounds = this._nRounds;

	            // Get input, add round key
	            var s0 = M[offset]     ^ keySchedule[0];
	            var s1 = M[offset + 1] ^ keySchedule[1];
	            var s2 = M[offset + 2] ^ keySchedule[2];
	            var s3 = M[offset + 3] ^ keySchedule[3];

	            // Key schedule row counter
	            var ksRow = 4;

	            // Rounds
	            for (var round = 1; round < nRounds; round++) {
	                // Shift rows, sub bytes, mix columns, add round key
	                var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
	                var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
	                var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
	                var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];

	                // Update state
	                s0 = t0;
	                s1 = t1;
	                s2 = t2;
	                s3 = t3;
	            }

	            // Shift rows, sub bytes, add round key
	            var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
	            var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
	            var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
	            var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];

	            // Set output
	            M[offset]     = t0;
	            M[offset + 1] = t1;
	            M[offset + 2] = t2;
	            M[offset + 3] = t3;
	        },

	        keySize: 256/32
	    });

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);
	     */
	    C.AES = BlockCipher._createHelper(AES);
	}());


	return CryptoJS.AES;

}));

/***/ }),
/* 691 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var C_enc = C.enc;

	    /**
	     * UTF-16 BE encoding strategy.
	     */
	    var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
	        /**
	         * Converts a word array to a UTF-16 BE string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The UTF-16 BE string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var utf16Chars = [];
	            for (var i = 0; i < sigBytes; i += 2) {
	                var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
	                utf16Chars.push(String.fromCharCode(codePoint));
	            }

	            return utf16Chars.join('');
	        },

	        /**
	         * Converts a UTF-16 BE string to a word array.
	         *
	         * @param {string} utf16Str The UTF-16 BE string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
	         */
	        parse: function (utf16Str) {
	            // Shortcut
	            var utf16StrLength = utf16Str.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < utf16StrLength; i++) {
	                words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
	            }

	            return WordArray.create(words, utf16StrLength * 2);
	        }
	    };

	    /**
	     * UTF-16 LE encoding strategy.
	     */
	    C_enc.Utf16LE = {
	        /**
	         * Converts a word array to a UTF-16 LE string.
	         *
	         * @param {WordArray} wordArray The word array.
	         *
	         * @return {string} The UTF-16 LE string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
	         */
	        stringify: function (wordArray) {
	            // Shortcuts
	            var words = wordArray.words;
	            var sigBytes = wordArray.sigBytes;

	            // Convert
	            var utf16Chars = [];
	            for (var i = 0; i < sigBytes; i += 2) {
	                var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
	                utf16Chars.push(String.fromCharCode(codePoint));
	            }

	            return utf16Chars.join('');
	        },

	        /**
	         * Converts a UTF-16 LE string to a word array.
	         *
	         * @param {string} utf16Str The UTF-16 LE string.
	         *
	         * @return {WordArray} The word array.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
	         */
	        parse: function (utf16Str) {
	            // Shortcut
	            var utf16StrLength = utf16Str.length;

	            // Convert
	            var words = [];
	            for (var i = 0; i < utf16StrLength; i++) {
	                words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
	            }

	            return WordArray.create(words, utf16StrLength * 2);
	        }
	    };

	    function swapEndian(word) {
	        return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
	    }
	}());


	return CryptoJS.enc.Utf16;

}));

/***/ }),
/* 692 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (undefined) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var CipherParams = C_lib.CipherParams;
	    var C_enc = C.enc;
	    var Hex = C_enc.Hex;
	    var C_format = C.format;

	    var HexFormatter = C_format.Hex = {
	        /**
	         * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
	         *
	         * @param {CipherParams} cipherParams The cipher params object.
	         *
	         * @return {string} The hexadecimally encoded string.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var hexString = CryptoJS.format.Hex.stringify(cipherParams);
	         */
	        stringify: function (cipherParams) {
	            return cipherParams.ciphertext.toString(Hex);
	        },

	        /**
	         * Converts a hexadecimally encoded ciphertext string to a cipher params object.
	         *
	         * @param {string} input The hexadecimally encoded string.
	         *
	         * @return {CipherParams} The cipher params object.
	         *
	         * @static
	         *
	         * @example
	         *
	         *     var cipherParams = CryptoJS.format.Hex.parse(hexString);
	         */
	        parse: function (input) {
	            var ciphertext = Hex.parse(input);
	            return CipherParams.create({ ciphertext: ciphertext });
	        }
	    };
	}());


	return CryptoJS.format.Hex;

}));

/***/ }),
/* 693 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Check if typed arrays are supported
	    if (typeof ArrayBuffer != 'function') {
	        return;
	    }

	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;

	    // Reference original init
	    var superInit = WordArray.init;

	    // Augment WordArray.init to handle typed arrays
	    var subInit = WordArray.init = function (typedArray) {
	        // Convert buffers to uint8
	        if (typedArray instanceof ArrayBuffer) {
	            typedArray = new Uint8Array(typedArray);
	        }

	        // Convert other array views to uint8
	        if (
	            typedArray instanceof Int8Array ||
	            (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) ||
	            typedArray instanceof Int16Array ||
	            typedArray instanceof Uint16Array ||
	            typedArray instanceof Int32Array ||
	            typedArray instanceof Uint32Array ||
	            typedArray instanceof Float32Array ||
	            typedArray instanceof Float64Array
	        ) {
	            typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
	        }

	        // Handle Uint8Array
	        if (typedArray instanceof Uint8Array) {
	            // Shortcut
	            var typedArrayByteLength = typedArray.byteLength;

	            // Extract bytes
	            var words = [];
	            for (var i = 0; i < typedArrayByteLength; i++) {
	                words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
	            }

	            // Initialize this word array
	            superInit.call(this, words, typedArrayByteLength);
	        } else {
	            // Else call normal init
	            superInit.apply(this, arguments);
	        }
	    };

	    subInit.prototype = WordArray;
	}());


	return CryptoJS.lib.WordArray;

}));

/***/ }),
/* 694 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Cipher Feedback block mode.
	 */
	CryptoJS.mode.CFB = (function () {
	    var CFB = CryptoJS.lib.BlockCipherMode.extend();

	    CFB.Encryptor = CFB.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher;
	            var blockSize = cipher.blockSize;

	            generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);

	            // Remember this block to use with next block
	            this._prevBlock = words.slice(offset, offset + blockSize);
	        }
	    });

	    CFB.Decryptor = CFB.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher;
	            var blockSize = cipher.blockSize;

	            // Remember this block to use with next block
	            var thisBlock = words.slice(offset, offset + blockSize);

	            generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);

	            // This block becomes the previous block
	            this._prevBlock = thisBlock;
	        }
	    });

	    function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
	        // Shortcut
	        var iv = this._iv;

	        // Generate keystream
	        if (iv) {
	            var keystream = iv.slice(0);

	            // Remove IV for subsequent blocks
	            this._iv = undefined;
	        } else {
	            var keystream = this._prevBlock;
	        }
	        cipher.encryptBlock(keystream, 0);

	        // Encrypt
	        for (var i = 0; i < blockSize; i++) {
	            words[offset + i] ^= keystream[i];
	        }
	    }

	    return CFB;
	}());


	return CryptoJS.mode.CFB;

}));

/***/ }),
/* 695 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/** @preserve
	 * Counter block mode compatible with  Dr Brian Gladman fileenc.c
	 * derived from CryptoJS.mode.CTR
	 * Jan Hruby jhruby.web@gmail.com
	 */
	CryptoJS.mode.CTRGladman = (function () {
	    var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();

		function incWord(word)
		{
			if (((word >> 24) & 0xff) === 0xff) { //overflow
			var b1 = (word >> 16)&0xff;
			var b2 = (word >> 8)&0xff;
			var b3 = word & 0xff;

			if (b1 === 0xff) // overflow b1
			{
			b1 = 0;
			if (b2 === 0xff)
			{
				b2 = 0;
				if (b3 === 0xff)
				{
					b3 = 0;
				}
				else
				{
					++b3;
				}
			}
			else
			{
				++b2;
			}
			}
			else
			{
			++b1;
			}

			word = 0;
			word += (b1 << 16);
			word += (b2 << 8);
			word += b3;
			}
			else
			{
			word += (0x01 << 24);
			}
			return word;
		}

		function incCounter(counter)
		{
			if ((counter[0] = incWord(counter[0])) === 0)
			{
				// encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8
				counter[1] = incWord(counter[1]);
			}
			return counter;
		}

	    var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher
	            var blockSize = cipher.blockSize;
	            var iv = this._iv;
	            var counter = this._counter;

	            // Generate keystream
	            if (iv) {
	                counter = this._counter = iv.slice(0);

	                // Remove IV for subsequent blocks
	                this._iv = undefined;
	            }

				incCounter(counter);

				var keystream = counter.slice(0);
	            cipher.encryptBlock(keystream, 0);

	            // Encrypt
	            for (var i = 0; i < blockSize; i++) {
	                words[offset + i] ^= keystream[i];
	            }
	        }
	    });

	    CTRGladman.Decryptor = Encryptor;

	    return CTRGladman;
	}());




	return CryptoJS.mode.CTRGladman;

}));

/***/ }),
/* 696 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Counter block mode.
	 */
	CryptoJS.mode.CTR = (function () {
	    var CTR = CryptoJS.lib.BlockCipherMode.extend();

	    var Encryptor = CTR.Encryptor = CTR.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher
	            var blockSize = cipher.blockSize;
	            var iv = this._iv;
	            var counter = this._counter;

	            // Generate keystream
	            if (iv) {
	                counter = this._counter = iv.slice(0);

	                // Remove IV for subsequent blocks
	                this._iv = undefined;
	            }
	            var keystream = counter.slice(0);
	            cipher.encryptBlock(keystream, 0);

	            // Increment counter
	            counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0

	            // Encrypt
	            for (var i = 0; i < blockSize; i++) {
	                words[offset + i] ^= keystream[i];
	            }
	        }
	    });

	    CTR.Decryptor = Encryptor;

	    return CTR;
	}());


	return CryptoJS.mode.CTR;

}));

/***/ }),
/* 697 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Electronic Codebook block mode.
	 */
	CryptoJS.mode.ECB = (function () {
	    var ECB = CryptoJS.lib.BlockCipherMode.extend();

	    ECB.Encryptor = ECB.extend({
	        processBlock: function (words, offset) {
	            this._cipher.encryptBlock(words, offset);
	        }
	    });

	    ECB.Decryptor = ECB.extend({
	        processBlock: function (words, offset) {
	            this._cipher.decryptBlock(words, offset);
	        }
	    });

	    return ECB;
	}());


	return CryptoJS.mode.ECB;

}));

/***/ }),
/* 698 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Output Feedback block mode.
	 */
	CryptoJS.mode.OFB = (function () {
	    var OFB = CryptoJS.lib.BlockCipherMode.extend();

	    var Encryptor = OFB.Encryptor = OFB.extend({
	        processBlock: function (words, offset) {
	            // Shortcuts
	            var cipher = this._cipher
	            var blockSize = cipher.blockSize;
	            var iv = this._iv;
	            var keystream = this._keystream;

	            // Generate keystream
	            if (iv) {
	                keystream = this._keystream = iv.slice(0);

	                // Remove IV for subsequent blocks
	                this._iv = undefined;
	            }
	            cipher.encryptBlock(keystream, 0);

	            // Encrypt
	            for (var i = 0; i < blockSize; i++) {
	                words[offset + i] ^= keystream[i];
	            }
	        }
	    });

	    OFB.Decryptor = Encryptor;

	    return OFB;
	}());


	return CryptoJS.mode.OFB;

}));

/***/ }),
/* 699 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * ANSI X.923 padding strategy.
	 */
	CryptoJS.pad.AnsiX923 = {
	    pad: function (data, blockSize) {
	        // Shortcuts
	        var dataSigBytes = data.sigBytes;
	        var blockSizeBytes = blockSize * 4;

	        // Count padding bytes
	        var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;

	        // Compute last byte position
	        var lastBytePos = dataSigBytes + nPaddingBytes - 1;

	        // Pad
	        data.clamp();
	        data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
	        data.sigBytes += nPaddingBytes;
	    },

	    unpad: function (data) {
	        // Get number of padding bytes from last byte
	        var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;

	        // Remove padding
	        data.sigBytes -= nPaddingBytes;
	    }
	};


	return CryptoJS.pad.Ansix923;

}));

/***/ }),
/* 700 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * ISO 10126 padding strategy.
	 */
	CryptoJS.pad.Iso10126 = {
	    pad: function (data, blockSize) {
	        // Shortcut
	        var blockSizeBytes = blockSize * 4;

	        // Count padding bytes
	        var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;

	        // Pad
	        data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
	             concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
	    },

	    unpad: function (data) {
	        // Get number of padding bytes from last byte
	        var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;

	        // Remove padding
	        data.sigBytes -= nPaddingBytes;
	    }
	};


	return CryptoJS.pad.Iso10126;

}));

/***/ }),
/* 701 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * ISO/IEC 9797-1 Padding Method 2.
	 */
	CryptoJS.pad.Iso97971 = {
	    pad: function (data, blockSize) {
	        // Add 0x80 byte
	        data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));

	        // Zero pad the rest
	        CryptoJS.pad.ZeroPadding.pad(data, blockSize);
	    },

	    unpad: function (data) {
	        // Remove zero padding
	        CryptoJS.pad.ZeroPadding.unpad(data);

	        // Remove one more byte -- the 0x80 byte
	        data.sigBytes--;
	    }
	};


	return CryptoJS.pad.Iso97971;

}));

/***/ }),
/* 702 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * A noop padding strategy.
	 */
	CryptoJS.pad.NoPadding = {
	    pad: function () {
	    },

	    unpad: function () {
	    }
	};


	return CryptoJS.pad.NoPadding;

}));

/***/ }),
/* 703 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/**
	 * Zero padding strategy.
	 */
	CryptoJS.pad.ZeroPadding = {
	    pad: function (data, blockSize) {
	        // Shortcut
	        var blockSizeBytes = blockSize * 4;

	        // Pad
	        data.clamp();
	        data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
	    },

	    unpad: function (data) {
	        // Shortcut
	        var dataWords = data.words;

	        // Unpad
	        var i = data.sigBytes - 1;
	        while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
	            i--;
	        }
	        data.sigBytes = i + 1;
	    }
	};


	return CryptoJS.pad.ZeroPadding;

}));

/***/ }),
/* 704 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(211), __webpack_require__(209));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./sha1", "./hmac"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var WordArray = C_lib.WordArray;
	    var C_algo = C.algo;
	    var SHA1 = C_algo.SHA1;
	    var HMAC = C_algo.HMAC;

	    /**
	     * Password-Based Key Derivation Function 2 algorithm.
	     */
	    var PBKDF2 = C_algo.PBKDF2 = Base.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
	         * @property {Hasher} hasher The hasher to use. Default: SHA1
	         * @property {number} iterations The number of iterations to perform. Default: 1
	         */
	        cfg: Base.extend({
	            keySize: 128/32,
	            hasher: SHA1,
	            iterations: 1
	        }),

	        /**
	         * Initializes a newly created key derivation function.
	         *
	         * @param {Object} cfg (Optional) The configuration options to use for the derivation.
	         *
	         * @example
	         *
	         *     var kdf = CryptoJS.algo.PBKDF2.create();
	         *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
	         *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
	         */
	        init: function (cfg) {
	            this.cfg = this.cfg.extend(cfg);
	        },

	        /**
	         * Computes the Password-Based Key Derivation Function 2.
	         *
	         * @param {WordArray|string} password The password.
	         * @param {WordArray|string} salt A salt.
	         *
	         * @return {WordArray} The derived key.
	         *
	         * @example
	         *
	         *     var key = kdf.compute(password, salt);
	         */
	        compute: function (password, salt) {
	            // Shortcut
	            var cfg = this.cfg;

	            // Init HMAC
	            var hmac = HMAC.create(cfg.hasher, password);

	            // Initial values
	            var derivedKey = WordArray.create();
	            var blockIndex = WordArray.create([0x00000001]);

	            // Shortcuts
	            var derivedKeyWords = derivedKey.words;
	            var blockIndexWords = blockIndex.words;
	            var keySize = cfg.keySize;
	            var iterations = cfg.iterations;

	            // Generate key
	            while (derivedKeyWords.length < keySize) {
	                var block = hmac.update(salt).finalize(blockIndex);
	                hmac.reset();

	                // Shortcuts
	                var blockWords = block.words;
	                var blockWordsLength = blockWords.length;

	                // Iterations
	                var intermediate = block;
	                for (var i = 1; i < iterations; i++) {
	                    intermediate = hmac.finalize(intermediate);
	                    hmac.reset();

	                    // Shortcut
	                    var intermediateWords = intermediate.words;

	                    // XOR intermediate with block
	                    for (var j = 0; j < blockWordsLength; j++) {
	                        blockWords[j] ^= intermediateWords[j];
	                    }
	                }

	                derivedKey.concat(block);
	                blockIndexWords[0]++;
	            }
	            derivedKey.sigBytes = keySize * 4;

	            return derivedKey;
	        }
	    });

	    /**
	     * Computes the Password-Based Key Derivation Function 2.
	     *
	     * @param {WordArray|string} password The password.
	     * @param {WordArray|string} salt A salt.
	     * @param {Object} cfg (Optional) The configuration options to use for this computation.
	     *
	     * @return {WordArray} The derived key.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var key = CryptoJS.PBKDF2(password, salt);
	     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
	     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
	     */
	    C.PBKDF2 = function (password, salt, cfg) {
	        return PBKDF2.create(cfg).compute(password, salt);
	    };
	}());


	return CryptoJS.PBKDF2;

}));

/***/ }),
/* 705 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(91), __webpack_require__(93), __webpack_require__(92), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var StreamCipher = C_lib.StreamCipher;
	    var C_algo = C.algo;

	    // Reusable objects
	    var S  = [];
	    var C_ = [];
	    var G  = [];

	    /**
	     * Rabbit stream cipher algorithm.
	     *
	     * This is a legacy version that neglected to convert the key to little-endian.
	     * This error doesn't affect the cipher's security,
	     * but it does affect its compatibility with other implementations.
	     */
	    var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
	        _doReset: function () {
	            // Shortcuts
	            var K = this._key.words;
	            var iv = this.cfg.iv;

	            // Generate initial state values
	            var X = this._X = [
	                K[0], (K[3] << 16) | (K[2] >>> 16),
	                K[1], (K[0] << 16) | (K[3] >>> 16),
	                K[2], (K[1] << 16) | (K[0] >>> 16),
	                K[3], (K[2] << 16) | (K[1] >>> 16)
	            ];

	            // Generate initial counter values
	            var C = this._C = [
	                (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
	                (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
	                (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
	                (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
	            ];

	            // Carry bit
	            this._b = 0;

	            // Iterate the system four times
	            for (var i = 0; i < 4; i++) {
	                nextState.call(this);
	            }

	            // Modify the counters
	            for (var i = 0; i < 8; i++) {
	                C[i] ^= X[(i + 4) & 7];
	            }

	            // IV setup
	            if (iv) {
	                // Shortcuts
	                var IV = iv.words;
	                var IV_0 = IV[0];
	                var IV_1 = IV[1];

	                // Generate four subvectors
	                var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
	                var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
	                var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
	                var i3 = (i2 << 16)  | (i0 & 0x0000ffff);

	                // Modify counter values
	                C[0] ^= i0;
	                C[1] ^= i1;
	                C[2] ^= i2;
	                C[3] ^= i3;
	                C[4] ^= i0;
	                C[5] ^= i1;
	                C[6] ^= i2;
	                C[7] ^= i3;

	                // Iterate the system four times
	                for (var i = 0; i < 4; i++) {
	                    nextState.call(this);
	                }
	            }
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcut
	            var X = this._X;

	            // Iterate the system
	            nextState.call(this);

	            // Generate four keystream words
	            S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
	            S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
	            S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
	            S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);

	            for (var i = 0; i < 4; i++) {
	                // Swap endian
	                S[i] = (((S[i] << 8)  | (S[i] >>> 24)) & 0x00ff00ff) |
	                       (((S[i] << 24) | (S[i] >>> 8))  & 0xff00ff00);

	                // Encrypt
	                M[offset + i] ^= S[i];
	            }
	        },

	        blockSize: 128/32,

	        ivSize: 64/32
	    });

	    function nextState() {
	        // Shortcuts
	        var X = this._X;
	        var C = this._C;

	        // Save old counter values
	        for (var i = 0; i < 8; i++) {
	            C_[i] = C[i];
	        }

	        // Calculate new counter values
	        C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
	        C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
	        C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
	        C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
	        C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
	        C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
	        C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
	        C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
	        this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;

	        // Calculate the g-values
	        for (var i = 0; i < 8; i++) {
	            var gx = X[i] + C[i];

	            // Construct high and low argument for squaring
	            var ga = gx & 0xffff;
	            var gb = gx >>> 16;

	            // Calculate high and low result of squaring
	            var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
	            var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);

	            // High XOR low
	            G[i] = gh ^ gl;
	        }

	        // Calculate new state values
	        X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
	        X[1] = (G[1] + ((G[0] << 8)  | (G[0] >>> 24)) + G[7]) | 0;
	        X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
	        X[3] = (G[3] + ((G[2] << 8)  | (G[2] >>> 24)) + G[1]) | 0;
	        X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
	        X[5] = (G[5] + ((G[4] << 8)  | (G[4] >>> 24)) + G[3]) | 0;
	        X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
	        X[7] = (G[7] + ((G[6] << 8)  | (G[6] >>> 24)) + G[5]) | 0;
	    }

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
	     */
	    C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
	}());


	return CryptoJS.RabbitLegacy;

}));

/***/ }),
/* 706 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(91), __webpack_require__(93), __webpack_require__(92), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var StreamCipher = C_lib.StreamCipher;
	    var C_algo = C.algo;

	    // Reusable objects
	    var S  = [];
	    var C_ = [];
	    var G  = [];

	    /**
	     * Rabbit stream cipher algorithm
	     */
	    var Rabbit = C_algo.Rabbit = StreamCipher.extend({
	        _doReset: function () {
	            // Shortcuts
	            var K = this._key.words;
	            var iv = this.cfg.iv;

	            // Swap endian
	            for (var i = 0; i < 4; i++) {
	                K[i] = (((K[i] << 8)  | (K[i] >>> 24)) & 0x00ff00ff) |
	                       (((K[i] << 24) | (K[i] >>> 8))  & 0xff00ff00);
	            }

	            // Generate initial state values
	            var X = this._X = [
	                K[0], (K[3] << 16) | (K[2] >>> 16),
	                K[1], (K[0] << 16) | (K[3] >>> 16),
	                K[2], (K[1] << 16) | (K[0] >>> 16),
	                K[3], (K[2] << 16) | (K[1] >>> 16)
	            ];

	            // Generate initial counter values
	            var C = this._C = [
	                (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
	                (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
	                (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
	                (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
	            ];

	            // Carry bit
	            this._b = 0;

	            // Iterate the system four times
	            for (var i = 0; i < 4; i++) {
	                nextState.call(this);
	            }

	            // Modify the counters
	            for (var i = 0; i < 8; i++) {
	                C[i] ^= X[(i + 4) & 7];
	            }

	            // IV setup
	            if (iv) {
	                // Shortcuts
	                var IV = iv.words;
	                var IV_0 = IV[0];
	                var IV_1 = IV[1];

	                // Generate four subvectors
	                var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
	                var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
	                var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
	                var i3 = (i2 << 16)  | (i0 & 0x0000ffff);

	                // Modify counter values
	                C[0] ^= i0;
	                C[1] ^= i1;
	                C[2] ^= i2;
	                C[3] ^= i3;
	                C[4] ^= i0;
	                C[5] ^= i1;
	                C[6] ^= i2;
	                C[7] ^= i3;

	                // Iterate the system four times
	                for (var i = 0; i < 4; i++) {
	                    nextState.call(this);
	                }
	            }
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcut
	            var X = this._X;

	            // Iterate the system
	            nextState.call(this);

	            // Generate four keystream words
	            S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
	            S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
	            S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
	            S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);

	            for (var i = 0; i < 4; i++) {
	                // Swap endian
	                S[i] = (((S[i] << 8)  | (S[i] >>> 24)) & 0x00ff00ff) |
	                       (((S[i] << 24) | (S[i] >>> 8))  & 0xff00ff00);

	                // Encrypt
	                M[offset + i] ^= S[i];
	            }
	        },

	        blockSize: 128/32,

	        ivSize: 64/32
	    });

	    function nextState() {
	        // Shortcuts
	        var X = this._X;
	        var C = this._C;

	        // Save old counter values
	        for (var i = 0; i < 8; i++) {
	            C_[i] = C[i];
	        }

	        // Calculate new counter values
	        C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
	        C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
	        C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
	        C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
	        C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
	        C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
	        C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
	        C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
	        this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;

	        // Calculate the g-values
	        for (var i = 0; i < 8; i++) {
	            var gx = X[i] + C[i];

	            // Construct high and low argument for squaring
	            var ga = gx & 0xffff;
	            var gb = gx >>> 16;

	            // Calculate high and low result of squaring
	            var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
	            var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);

	            // High XOR low
	            G[i] = gh ^ gl;
	        }

	        // Calculate new state values
	        X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
	        X[1] = (G[1] + ((G[0] << 8)  | (G[0] >>> 24)) + G[7]) | 0;
	        X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
	        X[3] = (G[3] + ((G[2] << 8)  | (G[2] >>> 24)) + G[1]) | 0;
	        X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
	        X[5] = (G[5] + ((G[4] << 8)  | (G[4] >>> 24)) + G[3]) | 0;
	        X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
	        X[7] = (G[7] + ((G[6] << 8)  | (G[6] >>> 24)) + G[5]) | 0;
	    }

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
	     */
	    C.Rabbit = StreamCipher._createHelper(Rabbit);
	}());


	return CryptoJS.Rabbit;

}));

/***/ }),
/* 707 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(91), __webpack_require__(93), __webpack_require__(92), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var StreamCipher = C_lib.StreamCipher;
	    var C_algo = C.algo;

	    /**
	     * RC4 stream cipher algorithm.
	     */
	    var RC4 = C_algo.RC4 = StreamCipher.extend({
	        _doReset: function () {
	            // Shortcuts
	            var key = this._key;
	            var keyWords = key.words;
	            var keySigBytes = key.sigBytes;

	            // Init sbox
	            var S = this._S = [];
	            for (var i = 0; i < 256; i++) {
	                S[i] = i;
	            }

	            // Key setup
	            for (var i = 0, j = 0; i < 256; i++) {
	                var keyByteIndex = i % keySigBytes;
	                var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;

	                j = (j + S[i] + keyByte) % 256;

	                // Swap
	                var t = S[i];
	                S[i] = S[j];
	                S[j] = t;
	            }

	            // Counters
	            this._i = this._j = 0;
	        },

	        _doProcessBlock: function (M, offset) {
	            M[offset] ^= generateKeystreamWord.call(this);
	        },

	        keySize: 256/32,

	        ivSize: 0
	    });

	    function generateKeystreamWord() {
	        // Shortcuts
	        var S = this._S;
	        var i = this._i;
	        var j = this._j;

	        // Generate keystream word
	        var keystreamWord = 0;
	        for (var n = 0; n < 4; n++) {
	            i = (i + 1) % 256;
	            j = (j + S[i]) % 256;

	            // Swap
	            var t = S[i];
	            S[i] = S[j];
	            S[j] = t;

	            keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);
	        }

	        // Update counters
	        this._i = i;
	        this._j = j;

	        return keystreamWord;
	    }

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
	     */
	    C.RC4 = StreamCipher._createHelper(RC4);

	    /**
	     * Modified RC4 stream cipher algorithm.
	     */
	    var RC4Drop = C_algo.RC4Drop = RC4.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {number} drop The number of keystream words to drop. Default 192
	         */
	        cfg: RC4.cfg.extend({
	            drop: 192
	        }),

	        _doReset: function () {
	            RC4._doReset.call(this);

	            // Drop
	            for (var i = this.cfg.drop; i > 0; i--) {
	                generateKeystreamWord.call(this);
	            }
	        }
	    });

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
	     */
	    C.RC4Drop = StreamCipher._createHelper(RC4Drop);
	}());


	return CryptoJS.RC4;

}));

/***/ }),
/* 708 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	/** @preserve
	(c) 2012 by Cédric Mesnil. All rights reserved.

	Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

	    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
	    - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	*/

	(function (Math) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_algo = C.algo;

	    // Constants table
	    var _zl = WordArray.create([
	        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 = WordArray.create([
	        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 = WordArray.create([
	         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 = WordArray.create([
	        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 =  WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
	    var _hr =  WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);

	    /**
	     * RIPEMD160 hash algorithm.
	     */
	    var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
	        _doReset: function () {
	            this._hash  = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
	        },

	        _doProcessBlock: function (M, offset) {

	            // Swap endian
	            for (var i = 0; i < 16; i++) {
	                // Shortcuts
	                var offset_i = offset + i;
	                var M_offset_i = M[offset_i];

	                // Swap
	                M[offset_i] = (
	                    (((M_offset_i << 8)  | (M_offset_i >>> 24)) & 0x00ff00ff) |
	                    (((M_offset_i << 24) | (M_offset_i >>> 8))  & 0xff00ff00)
	                );
	            }
	            // Shortcut
	            var H  = this._hash.words;
	            var hl = _hl.words;
	            var hr = _hr.words;
	            var zl = _zl.words;
	            var zr = _zr.words;
	            var sl = _sl.words;
	            var sr = _sr.words;

	            // Working variables
	            var al, bl, cl, dl, el;
	            var ar, br, cr, dr, er;

	            ar = al = H[0];
	            br = bl = H[1];
	            cr = cl = H[2];
	            dr = dl = H[3];
	            er = el = H[4];
	            // Computation
	            var t;
	            for (var i = 0; i < 80; i += 1) {
	                t = (al +  M[offset+zl[i]])|0;
	                if (i<16){
		            t +=  f1(bl,cl,dl) + hl[0];
	                } else if (i<32) {
		            t +=  f2(bl,cl,dl) + hl[1];
	                } else if (i<48) {
		            t +=  f3(bl,cl,dl) + hl[2];
	                } else if (i<64) {
		            t +=  f4(bl,cl,dl) + hl[3];
	                } else {// if (i<80) {
		            t +=  f5(bl,cl,dl) + hl[4];
	                }
	                t = t|0;
	                t =  rotl(t,sl[i]);
	                t = (t+el)|0;
	                al = el;
	                el = dl;
	                dl = rotl(cl, 10);
	                cl = bl;
	                bl = t;

	                t = (ar + M[offset+zr[i]])|0;
	                if (i<16){
		            t +=  f5(br,cr,dr) + hr[0];
	                } else if (i<32) {
		            t +=  f4(br,cr,dr) + hr[1];
	                } else if (i<48) {
		            t +=  f3(br,cr,dr) + hr[2];
	                } else if (i<64) {
		            t +=  f2(br,cr,dr) + hr[3];
	                } else {// if (i<80) {
		            t +=  f1(br,cr,dr) + hr[4];
	                }
	                t = t|0;
	                t =  rotl(t,sr[i]) ;
	                t = (t+er)|0;
	                ar = er;
	                er = dr;
	                dr = rotl(cr, 10);
	                cr = br;
	                br = t;
	            }
	            // Intermediate hash value
	            t    = (H[1] + cl + dr)|0;
	            H[1] = (H[2] + dl + er)|0;
	            H[2] = (H[3] + el + ar)|0;
	            H[3] = (H[4] + al + br)|0;
	            H[4] = (H[0] + bl + cr)|0;
	            H[0] =  t;
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;

	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
	            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
	                (((nBitsTotal << 8)  | (nBitsTotal >>> 24)) & 0x00ff00ff) |
	                (((nBitsTotal << 24) | (nBitsTotal >>> 8))  & 0xff00ff00)
	            );
	            data.sigBytes = (dataWords.length + 1) * 4;

	            // Hash final blocks
	            this._process();

	            // Shortcuts
	            var hash = this._hash;
	            var H = hash.words;

	            // Swap endian
	            for (var i = 0; i < 5; i++) {
	                // Shortcut
	                var H_i = H[i];

	                // Swap
	                H[i] = (((H_i << 8)  | (H_i >>> 24)) & 0x00ff00ff) |
	                       (((H_i << 24) | (H_i >>> 8))  & 0xff00ff00);
	            }

	            // Return final computed hash
	            return hash;
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);
	            clone._hash = this._hash.clone();

	            return clone;
	        }
	    });


	    function f1(x, y, z) {
	        return ((x) ^ (y) ^ (z));

	    }

	    function f2(x, y, z) {
	        return (((x)&(y)) | ((~x)&(z)));
	    }

	    function f3(x, y, z) {
	        return (((x) | (~(y))) ^ (z));
	    }

	    function f4(x, y, z) {
	        return (((x) & (z)) | ((y)&(~(z))));
	    }

	    function f5(x, y, z) {
	        return ((x) ^ ((y) |(~(z))));

	    }

	    function rotl(x,n) {
	        return (x<<n) | (x>>>(32-n));
	    }


	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.RIPEMD160('message');
	     *     var hash = CryptoJS.RIPEMD160(wordArray);
	     */
	    C.RIPEMD160 = Hasher._createHelper(RIPEMD160);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacRIPEMD160(message, key);
	     */
	    C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
	}(Math));


	return CryptoJS.RIPEMD160;

}));

/***/ }),
/* 709 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(319));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./sha256"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var C_algo = C.algo;
	    var SHA256 = C_algo.SHA256;

	    /**
	     * SHA-224 hash algorithm.
	     */
	    var SHA224 = C_algo.SHA224 = SHA256.extend({
	        _doReset: function () {
	            this._hash = new WordArray.init([
	                0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
	                0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
	            ]);
	        },

	        _doFinalize: function () {
	            var hash = SHA256._doFinalize.call(this);

	            hash.sigBytes -= 4;

	            return hash;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA224('message');
	     *     var hash = CryptoJS.SHA224(wordArray);
	     */
	    C.SHA224 = SHA256._createHelper(SHA224);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA224(message, key);
	     */
	    C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
	}());


	return CryptoJS.SHA224;

}));

/***/ }),
/* 710 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(151), __webpack_require__(320));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./x64-core", "./sha512"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_x64 = C.x64;
	    var X64Word = C_x64.Word;
	    var X64WordArray = C_x64.WordArray;
	    var C_algo = C.algo;
	    var SHA512 = C_algo.SHA512;

	    /**
	     * SHA-384 hash algorithm.
	     */
	    var SHA384 = C_algo.SHA384 = SHA512.extend({
	        _doReset: function () {
	            this._hash = new X64WordArray.init([
	                new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
	                new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
	                new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
	                new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
	            ]);
	        },

	        _doFinalize: function () {
	            var hash = SHA512._doFinalize.call(this);

	            hash.sigBytes -= 16;

	            return hash;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA384('message');
	     *     var hash = CryptoJS.SHA384(wordArray);
	     */
	    C.SHA384 = SHA512._createHelper(SHA384);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA384(message, key);
	     */
	    C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
	}());


	return CryptoJS.SHA384;

}));

/***/ }),
/* 711 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(4), __webpack_require__(91), __webpack_require__(93), __webpack_require__(92), __webpack_require__(13));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function () {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var BlockCipher = C_lib.BlockCipher;
	    var C_algo = C.algo;

	    // Permuted Choice 1 constants
	    var PC1 = [
	        57, 49, 41, 33, 25, 17, 9,  1,
	        58, 50, 42, 34, 26, 18, 10, 2,
	        59, 51, 43, 35, 27, 19, 11, 3,
	        60, 52, 44, 36, 63, 55, 47, 39,
	        31, 23, 15, 7,  62, 54, 46, 38,
	        30, 22, 14, 6,  61, 53, 45, 37,
	        29, 21, 13, 5,  28, 20, 12, 4
	    ];

	    // Permuted Choice 2 constants
	    var PC2 = [
	        14, 17, 11, 24, 1,  5,
	        3,  28, 15, 6,  21, 10,
	        23, 19, 12, 4,  26, 8,
	        16, 7,  27, 20, 13, 2,
	        41, 52, 31, 37, 47, 55,
	        30, 40, 51, 45, 33, 48,
	        44, 49, 39, 56, 34, 53,
	        46, 42, 50, 36, 29, 32
	    ];

	    // Cumulative bit shift constants
	    var BIT_SHIFTS = [1,  2,  4,  6,  8,  10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];

	    // SBOXes and round permutation constants
	    var SBOX_P = [
	        {
	            0x0: 0x808200,
	            0x10000000: 0x8000,
	            0x20000000: 0x808002,
	            0x30000000: 0x2,
	            0x40000000: 0x200,
	            0x50000000: 0x808202,
	            0x60000000: 0x800202,
	            0x70000000: 0x800000,
	            0x80000000: 0x202,
	            0x90000000: 0x800200,
	            0xa0000000: 0x8200,
	            0xb0000000: 0x808000,
	            0xc0000000: 0x8002,
	            0xd0000000: 0x800002,
	            0xe0000000: 0x0,
	            0xf0000000: 0x8202,
	            0x8000000: 0x0,
	            0x18000000: 0x808202,
	            0x28000000: 0x8202,
	            0x38000000: 0x8000,
	            0x48000000: 0x808200,
	            0x58000000: 0x200,
	            0x68000000: 0x808002,
	            0x78000000: 0x2,
	            0x88000000: 0x800200,
	            0x98000000: 0x8200,
	            0xa8000000: 0x808000,
	            0xb8000000: 0x800202,
	            0xc8000000: 0x800002,
	            0xd8000000: 0x8002,
	            0xe8000000: 0x202,
	            0xf8000000: 0x800000,
	            0x1: 0x8000,
	            0x10000001: 0x2,
	            0x20000001: 0x808200,
	            0x30000001: 0x800000,
	            0x40000001: 0x808002,
	            0x50000001: 0x8200,
	            0x60000001: 0x200,
	            0x70000001: 0x800202,
	            0x80000001: 0x808202,
	            0x90000001: 0x808000,
	            0xa0000001: 0x800002,
	            0xb0000001: 0x8202,
	            0xc0000001: 0x202,
	            0xd0000001: 0x800200,
	            0xe0000001: 0x8002,
	            0xf0000001: 0x0,
	            0x8000001: 0x808202,
	            0x18000001: 0x808000,
	            0x28000001: 0x800000,
	            0x38000001: 0x200,
	            0x48000001: 0x8000,
	            0x58000001: 0x800002,
	            0x68000001: 0x2,
	            0x78000001: 0x8202,
	            0x88000001: 0x8002,
	            0x98000001: 0x800202,
	            0xa8000001: 0x202,
	            0xb8000001: 0x808200,
	            0xc8000001: 0x800200,
	            0xd8000001: 0x0,
	            0xe8000001: 0x8200,
	            0xf8000001: 0x808002
	        },
	        {
	            0x0: 0x40084010,
	            0x1000000: 0x4000,
	            0x2000000: 0x80000,
	            0x3000000: 0x40080010,
	            0x4000000: 0x40000010,
	            0x5000000: 0x40084000,
	            0x6000000: 0x40004000,
	            0x7000000: 0x10,
	            0x8000000: 0x84000,
	            0x9000000: 0x40004010,
	            0xa000000: 0x40000000,
	            0xb000000: 0x84010,
	            0xc000000: 0x80010,
	            0xd000000: 0x0,
	            0xe000000: 0x4010,
	            0xf000000: 0x40080000,
	            0x800000: 0x40004000,
	            0x1800000: 0x84010,
	            0x2800000: 0x10,
	            0x3800000: 0x40004010,
	            0x4800000: 0x40084010,
	            0x5800000: 0x40000000,
	            0x6800000: 0x80000,
	            0x7800000: 0x40080010,
	            0x8800000: 0x80010,
	            0x9800000: 0x0,
	            0xa800000: 0x4000,
	            0xb800000: 0x40080000,
	            0xc800000: 0x40000010,
	            0xd800000: 0x84000,
	            0xe800000: 0x40084000,
	            0xf800000: 0x4010,
	            0x10000000: 0x0,
	            0x11000000: 0x40080010,
	            0x12000000: 0x40004010,
	            0x13000000: 0x40084000,
	            0x14000000: 0x40080000,
	            0x15000000: 0x10,
	            0x16000000: 0x84010,
	            0x17000000: 0x4000,
	            0x18000000: 0x4010,
	            0x19000000: 0x80000,
	            0x1a000000: 0x80010,
	            0x1b000000: 0x40000010,
	            0x1c000000: 0x84000,
	            0x1d000000: 0x40004000,
	            0x1e000000: 0x40000000,
	            0x1f000000: 0x40084010,
	            0x10800000: 0x84010,
	            0x11800000: 0x80000,
	            0x12800000: 0x40080000,
	            0x13800000: 0x4000,
	            0x14800000: 0x40004000,
	            0x15800000: 0x40084010,
	            0x16800000: 0x10,
	            0x17800000: 0x40000000,
	            0x18800000: 0x40084000,
	            0x19800000: 0x40000010,
	            0x1a800000: 0x40004010,
	            0x1b800000: 0x80010,
	            0x1c800000: 0x0,
	            0x1d800000: 0x4010,
	            0x1e800000: 0x40080010,
	            0x1f800000: 0x84000
	        },
	        {
	            0x0: 0x104,
	            0x100000: 0x0,
	            0x200000: 0x4000100,
	            0x300000: 0x10104,
	            0x400000: 0x10004,
	            0x500000: 0x4000004,
	            0x600000: 0x4010104,
	            0x700000: 0x4010000,
	            0x800000: 0x4000000,
	            0x900000: 0x4010100,
	            0xa00000: 0x10100,
	            0xb00000: 0x4010004,
	            0xc00000: 0x4000104,
	            0xd00000: 0x10000,
	            0xe00000: 0x4,
	            0xf00000: 0x100,
	            0x80000: 0x4010100,
	            0x180000: 0x4010004,
	            0x280000: 0x0,
	            0x380000: 0x4000100,
	            0x480000: 0x4000004,
	            0x580000: 0x10000,
	            0x680000: 0x10004,
	            0x780000: 0x104,
	            0x880000: 0x4,
	            0x980000: 0x100,
	            0xa80000: 0x4010000,
	            0xb80000: 0x10104,
	            0xc80000: 0x10100,
	            0xd80000: 0x4000104,
	            0xe80000: 0x4010104,
	            0xf80000: 0x4000000,
	            0x1000000: 0x4010100,
	            0x1100000: 0x10004,
	            0x1200000: 0x10000,
	            0x1300000: 0x4000100,
	            0x1400000: 0x100,
	            0x1500000: 0x4010104,
	            0x1600000: 0x4000004,
	            0x1700000: 0x0,
	            0x1800000: 0x4000104,
	            0x1900000: 0x4000000,
	            0x1a00000: 0x4,
	            0x1b00000: 0x10100,
	            0x1c00000: 0x4010000,
	            0x1d00000: 0x104,
	            0x1e00000: 0x10104,
	            0x1f00000: 0x4010004,
	            0x1080000: 0x4000000,
	            0x1180000: 0x104,
	            0x1280000: 0x4010100,
	            0x1380000: 0x0,
	            0x1480000: 0x10004,
	            0x1580000: 0x4000100,
	            0x1680000: 0x100,
	            0x1780000: 0x4010004,
	            0x1880000: 0x10000,
	            0x1980000: 0x4010104,
	            0x1a80000: 0x10104,
	            0x1b80000: 0x4000004,
	            0x1c80000: 0x4000104,
	            0x1d80000: 0x4010000,
	            0x1e80000: 0x4,
	            0x1f80000: 0x10100
	        },
	        {
	            0x0: 0x80401000,
	            0x10000: 0x80001040,
	            0x20000: 0x401040,
	            0x30000: 0x80400000,
	            0x40000: 0x0,
	            0x50000: 0x401000,
	            0x60000: 0x80000040,
	            0x70000: 0x400040,
	            0x80000: 0x80000000,
	            0x90000: 0x400000,
	            0xa0000: 0x40,
	            0xb0000: 0x80001000,
	            0xc0000: 0x80400040,
	            0xd0000: 0x1040,
	            0xe0000: 0x1000,
	            0xf0000: 0x80401040,
	            0x8000: 0x80001040,
	            0x18000: 0x40,
	            0x28000: 0x80400040,
	            0x38000: 0x80001000,
	            0x48000: 0x401000,
	            0x58000: 0x80401040,
	            0x68000: 0x0,
	            0x78000: 0x80400000,
	            0x88000: 0x1000,
	            0x98000: 0x80401000,
	            0xa8000: 0x400000,
	            0xb8000: 0x1040,
	            0xc8000: 0x80000000,
	            0xd8000: 0x400040,
	            0xe8000: 0x401040,
	            0xf8000: 0x80000040,
	            0x100000: 0x400040,
	            0x110000: 0x401000,
	            0x120000: 0x80000040,
	            0x130000: 0x0,
	            0x140000: 0x1040,
	            0x150000: 0x80400040,
	            0x160000: 0x80401000,
	            0x170000: 0x80001040,
	            0x180000: 0x80401040,
	            0x190000: 0x80000000,
	            0x1a0000: 0x80400000,
	            0x1b0000: 0x401040,
	            0x1c0000: 0x80001000,
	            0x1d0000: 0x400000,
	            0x1e0000: 0x40,
	            0x1f0000: 0x1000,
	            0x108000: 0x80400000,
	            0x118000: 0x80401040,
	            0x128000: 0x0,
	            0x138000: 0x401000,
	            0x148000: 0x400040,
	            0x158000: 0x80000000,
	            0x168000: 0x80001040,
	            0x178000: 0x40,
	            0x188000: 0x80000040,
	            0x198000: 0x1000,
	            0x1a8000: 0x80001000,
	            0x1b8000: 0x80400040,
	            0x1c8000: 0x1040,
	            0x1d8000: 0x80401000,
	            0x1e8000: 0x400000,
	            0x1f8000: 0x401040
	        },
	        {
	            0x0: 0x80,
	            0x1000: 0x1040000,
	            0x2000: 0x40000,
	            0x3000: 0x20000000,
	            0x4000: 0x20040080,
	            0x5000: 0x1000080,
	            0x6000: 0x21000080,
	            0x7000: 0x40080,
	            0x8000: 0x1000000,
	            0x9000: 0x20040000,
	            0xa000: 0x20000080,
	            0xb000: 0x21040080,
	            0xc000: 0x21040000,
	            0xd000: 0x0,
	            0xe000: 0x1040080,
	            0xf000: 0x21000000,
	            0x800: 0x1040080,
	            0x1800: 0x21000080,
	            0x2800: 0x80,
	            0x3800: 0x1040000,
	            0x4800: 0x40000,
	            0x5800: 0x20040080,
	            0x6800: 0x21040000,
	            0x7800: 0x20000000,
	            0x8800: 0x20040000,
	            0x9800: 0x0,
	            0xa800: 0x21040080,
	            0xb800: 0x1000080,
	            0xc800: 0x20000080,
	            0xd800: 0x21000000,
	            0xe800: 0x1000000,
	            0xf800: 0x40080,
	            0x10000: 0x40000,
	            0x11000: 0x80,
	            0x12000: 0x20000000,
	            0x13000: 0x21000080,
	            0x14000: 0x1000080,
	            0x15000: 0x21040000,
	            0x16000: 0x20040080,
	            0x17000: 0x1000000,
	            0x18000: 0x21040080,
	            0x19000: 0x21000000,
	            0x1a000: 0x1040000,
	            0x1b000: 0x20040000,
	            0x1c000: 0x40080,
	            0x1d000: 0x20000080,
	            0x1e000: 0x0,
	            0x1f000: 0x1040080,
	            0x10800: 0x21000080,
	            0x11800: 0x1000000,
	            0x12800: 0x1040000,
	            0x13800: 0x20040080,
	            0x14800: 0x20000000,
	            0x15800: 0x1040080,
	            0x16800: 0x80,
	            0x17800: 0x21040000,
	            0x18800: 0x40080,
	            0x19800: 0x21040080,
	            0x1a800: 0x0,
	            0x1b800: 0x21000000,
	            0x1c800: 0x1000080,
	            0x1d800: 0x40000,
	            0x1e800: 0x20040000,
	            0x1f800: 0x20000080
	        },
	        {
	            0x0: 0x10000008,
	            0x100: 0x2000,
	            0x200: 0x10200000,
	            0x300: 0x10202008,
	            0x400: 0x10002000,
	            0x500: 0x200000,
	            0x600: 0x200008,
	            0x700: 0x10000000,
	            0x800: 0x0,
	            0x900: 0x10002008,
	            0xa00: 0x202000,
	            0xb00: 0x8,
	            0xc00: 0x10200008,
	            0xd00: 0x202008,
	            0xe00: 0x2008,
	            0xf00: 0x10202000,
	            0x80: 0x10200000,
	            0x180: 0x10202008,
	            0x280: 0x8,
	            0x380: 0x200000,
	            0x480: 0x202008,
	            0x580: 0x10000008,
	            0x680: 0x10002000,
	            0x780: 0x2008,
	            0x880: 0x200008,
	            0x980: 0x2000,
	            0xa80: 0x10002008,
	            0xb80: 0x10200008,
	            0xc80: 0x0,
	            0xd80: 0x10202000,
	            0xe80: 0x202000,
	            0xf80: 0x10000000,
	            0x1000: 0x10002000,
	            0x1100: 0x10200008,
	            0x1200: 0x10202008,
	            0x1300: 0x2008,
	            0x1400: 0x200000,
	            0x1500: 0x10000000,
	            0x1600: 0x10000008,
	            0x1700: 0x202000,
	            0x1800: 0x202008,
	            0x1900: 0x0,
	            0x1a00: 0x8,
	            0x1b00: 0x10200000,
	            0x1c00: 0x2000,
	            0x1d00: 0x10002008,
	            0x1e00: 0x10202000,
	            0x1f00: 0x200008,
	            0x1080: 0x8,
	            0x1180: 0x202000,
	            0x1280: 0x200000,
	            0x1380: 0x10000008,
	            0x1480: 0x10002000,
	            0x1580: 0x2008,
	            0x1680: 0x10202008,
	            0x1780: 0x10200000,
	            0x1880: 0x10202000,
	            0x1980: 0x10200008,
	            0x1a80: 0x2000,
	            0x1b80: 0x202008,
	            0x1c80: 0x200008,
	            0x1d80: 0x0,
	            0x1e80: 0x10000000,
	            0x1f80: 0x10002008
	        },
	        {
	            0x0: 0x100000,
	            0x10: 0x2000401,
	            0x20: 0x400,
	            0x30: 0x100401,
	            0x40: 0x2100401,
	            0x50: 0x0,
	            0x60: 0x1,
	            0x70: 0x2100001,
	            0x80: 0x2000400,
	            0x90: 0x100001,
	            0xa0: 0x2000001,
	            0xb0: 0x2100400,
	            0xc0: 0x2100000,
	            0xd0: 0x401,
	            0xe0: 0x100400,
	            0xf0: 0x2000000,
	            0x8: 0x2100001,
	            0x18: 0x0,
	            0x28: 0x2000401,
	            0x38: 0x2100400,
	            0x48: 0x100000,
	            0x58: 0x2000001,
	            0x68: 0x2000000,
	            0x78: 0x401,
	            0x88: 0x100401,
	            0x98: 0x2000400,
	            0xa8: 0x2100000,
	            0xb8: 0x100001,
	            0xc8: 0x400,
	            0xd8: 0x2100401,
	            0xe8: 0x1,
	            0xf8: 0x100400,
	            0x100: 0x2000000,
	            0x110: 0x100000,
	            0x120: 0x2000401,
	            0x130: 0x2100001,
	            0x140: 0x100001,
	            0x150: 0x2000400,
	            0x160: 0x2100400,
	            0x170: 0x100401,
	            0x180: 0x401,
	            0x190: 0x2100401,
	            0x1a0: 0x100400,
	            0x1b0: 0x1,
	            0x1c0: 0x0,
	            0x1d0: 0x2100000,
	            0x1e0: 0x2000001,
	            0x1f0: 0x400,
	            0x108: 0x100400,
	            0x118: 0x2000401,
	            0x128: 0x2100001,
	            0x138: 0x1,
	            0x148: 0x2000000,
	            0x158: 0x100000,
	            0x168: 0x401,
	            0x178: 0x2100400,
	            0x188: 0x2000001,
	            0x198: 0x2100000,
	            0x1a8: 0x0,
	            0x1b8: 0x2100401,
	            0x1c8: 0x100401,
	            0x1d8: 0x400,
	            0x1e8: 0x2000400,
	            0x1f8: 0x100001
	        },
	        {
	            0x0: 0x8000820,
	            0x1: 0x20000,
	            0x2: 0x8000000,
	            0x3: 0x20,
	            0x4: 0x20020,
	            0x5: 0x8020820,
	            0x6: 0x8020800,
	            0x7: 0x800,
	            0x8: 0x8020000,
	            0x9: 0x8000800,
	            0xa: 0x20800,
	            0xb: 0x8020020,
	            0xc: 0x820,
	            0xd: 0x0,
	            0xe: 0x8000020,
	            0xf: 0x20820,
	            0x80000000: 0x800,
	            0x80000001: 0x8020820,
	            0x80000002: 0x8000820,
	            0x80000003: 0x8000000,
	            0x80000004: 0x8020000,
	            0x80000005: 0x20800,
	            0x80000006: 0x20820,
	            0x80000007: 0x20,
	            0x80000008: 0x8000020,
	            0x80000009: 0x820,
	            0x8000000a: 0x20020,
	            0x8000000b: 0x8020800,
	            0x8000000c: 0x0,
	            0x8000000d: 0x8020020,
	            0x8000000e: 0x8000800,
	            0x8000000f: 0x20000,
	            0x10: 0x20820,
	            0x11: 0x8020800,
	            0x12: 0x20,
	            0x13: 0x800,
	            0x14: 0x8000800,
	            0x15: 0x8000020,
	            0x16: 0x8020020,
	            0x17: 0x20000,
	            0x18: 0x0,
	            0x19: 0x20020,
	            0x1a: 0x8020000,
	            0x1b: 0x8000820,
	            0x1c: 0x8020820,
	            0x1d: 0x20800,
	            0x1e: 0x820,
	            0x1f: 0x8000000,
	            0x80000010: 0x20000,
	            0x80000011: 0x800,
	            0x80000012: 0x8020020,
	            0x80000013: 0x20820,
	            0x80000014: 0x20,
	            0x80000015: 0x8020000,
	            0x80000016: 0x8000000,
	            0x80000017: 0x8000820,
	            0x80000018: 0x8020820,
	            0x80000019: 0x8000020,
	            0x8000001a: 0x8000800,
	            0x8000001b: 0x0,
	            0x8000001c: 0x20800,
	            0x8000001d: 0x820,
	            0x8000001e: 0x20020,
	            0x8000001f: 0x8020800
	        }
	    ];

	    // Masks that select the SBOX input
	    var SBOX_MASK = [
	        0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,
	        0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f
	    ];

	    /**
	     * DES block cipher algorithm.
	     */
	    var DES = C_algo.DES = BlockCipher.extend({
	        _doReset: function () {
	            // Shortcuts
	            var key = this._key;
	            var keyWords = key.words;

	            // Select 56 bits according to PC1
	            var keyBits = [];
	            for (var i = 0; i < 56; i++) {
	                var keyBitPos = PC1[i] - 1;
	                keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;
	            }

	            // Assemble 16 subkeys
	            var subKeys = this._subKeys = [];
	            for (var nSubKey = 0; nSubKey < 16; nSubKey++) {
	                // Create subkey
	                var subKey = subKeys[nSubKey] = [];

	                // Shortcut
	                var bitShift = BIT_SHIFTS[nSubKey];

	                // Select 48 bits according to PC2
	                for (var i = 0; i < 24; i++) {
	                    // Select from the left 28 key bits
	                    subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);

	                    // Select from the right 28 key bits
	                    subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);
	                }

	                // Since each subkey is applied to an expanded 32-bit input,
	                // the subkey can be broken into 8 values scaled to 32-bits,
	                // which allows the key to be used without expansion
	                subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);
	                for (var i = 1; i < 7; i++) {
	                    subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);
	                }
	                subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);
	            }

	            // Compute inverse subkeys
	            var invSubKeys = this._invSubKeys = [];
	            for (var i = 0; i < 16; i++) {
	                invSubKeys[i] = subKeys[15 - i];
	            }
	        },

	        encryptBlock: function (M, offset) {
	            this._doCryptBlock(M, offset, this._subKeys);
	        },

	        decryptBlock: function (M, offset) {
	            this._doCryptBlock(M, offset, this._invSubKeys);
	        },

	        _doCryptBlock: function (M, offset, subKeys) {
	            // Get input
	            this._lBlock = M[offset];
	            this._rBlock = M[offset + 1];

	            // Initial permutation
	            exchangeLR.call(this, 4,  0x0f0f0f0f);
	            exchangeLR.call(this, 16, 0x0000ffff);
	            exchangeRL.call(this, 2,  0x33333333);
	            exchangeRL.call(this, 8,  0x00ff00ff);
	            exchangeLR.call(this, 1,  0x55555555);

	            // Rounds
	            for (var round = 0; round < 16; round++) {
	                // Shortcuts
	                var subKey = subKeys[round];
	                var lBlock = this._lBlock;
	                var rBlock = this._rBlock;

	                // Feistel function
	                var f = 0;
	                for (var i = 0; i < 8; i++) {
	                    f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];
	                }
	                this._lBlock = rBlock;
	                this._rBlock = lBlock ^ f;
	            }

	            // Undo swap from last round
	            var t = this._lBlock;
	            this._lBlock = this._rBlock;
	            this._rBlock = t;

	            // Final permutation
	            exchangeLR.call(this, 1,  0x55555555);
	            exchangeRL.call(this, 8,  0x00ff00ff);
	            exchangeRL.call(this, 2,  0x33333333);
	            exchangeLR.call(this, 16, 0x0000ffff);
	            exchangeLR.call(this, 4,  0x0f0f0f0f);

	            // Set output
	            M[offset] = this._lBlock;
	            M[offset + 1] = this._rBlock;
	        },

	        keySize: 64/32,

	        ivSize: 64/32,

	        blockSize: 64/32
	    });

	    // Swap bits across the left and right words
	    function exchangeLR(offset, mask) {
	        var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;
	        this._rBlock ^= t;
	        this._lBlock ^= t << offset;
	    }

	    function exchangeRL(offset, mask) {
	        var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;
	        this._lBlock ^= t;
	        this._rBlock ^= t << offset;
	    }

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);
	     */
	    C.DES = BlockCipher._createHelper(DES);

	    /**
	     * Triple-DES block cipher algorithm.
	     */
	    var TripleDES = C_algo.TripleDES = BlockCipher.extend({
	        _doReset: function () {
	            // Shortcuts
	            var key = this._key;
	            var keyWords = key.words;

	            // Create DES instances
	            this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));
	            this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));
	            this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));
	        },

	        encryptBlock: function (M, offset) {
	            this._des1.encryptBlock(M, offset);
	            this._des2.decryptBlock(M, offset);
	            this._des3.encryptBlock(M, offset);
	        },

	        decryptBlock: function (M, offset) {
	            this._des3.decryptBlock(M, offset);
	            this._des2.encryptBlock(M, offset);
	            this._des1.decryptBlock(M, offset);
	        },

	        keySize: 192/32,

	        ivSize: 64/32,

	        blockSize: 64/32
	    });

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
	     */
	    C.TripleDES = BlockCipher._createHelper(TripleDES);
	}());


	return CryptoJS.TripleDES;

}));

/***/ }),
/* 712 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(321);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  'lightseagreen',
  'forestgreen',
  'goldenrod',
  'dodgerblue',
  'darkorchid',
  'crimson'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 713 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process !== 'undefined' && process.type === 'renderer') {
  module.exports = __webpack_require__(712);
} else {
  module.exports = __webpack_require__(714);
}


/***/ }),
/* 714 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(321);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [6, 2, 3, 4, 5, 1];

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * The file descriptor to write the `debug()` calls to.
 * Set the `DEBUG_FD` env variable to override with another value. i.e.:
 *
 *   $ DEBUG_FD=3 node script.js 3>debug.log
 */

var fd = parseInt(process.env.DEBUG_FD, 10) || 2;

if (1 !== fd && 2 !== fd) {
  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
}

var stream = 1 === fd ? process.stdout :
             2 === fd ? process.stderr :
             createWritableStdioStream(fd);

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var prefix = '  \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = new Date().toUTCString()
      + ' ' + name + ' ' + args[0];
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to `stream`.
 */

function log() {
  return stream.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Copied from `node/src/node.js`.
 *
 * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
 * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
 */

function createWritableStdioStream (fd) {
  var stream;
  var tty_wrap = process.binding('tty_wrap');

  // Note stream._type is used for test-module-load-list.js

  switch (tty_wrap.guessHandleType(fd)) {
    case 'TTY':
      stream = new tty.WriteStream(fd);
      stream._type = 'tty';

      // Hack to have stream not keep the event loop alive.
      // See https://github.com/joyent/node/issues/1726
      if (stream._handle && stream._handle.unref) {
        stream._handle.unref();
      }
      break;

    case 'FILE':
      var fs = __webpack_require__(1);
      stream = new fs.SyncWriteStream(fd, { autoClose: false });
      stream._type = 'fs';
      break;

    case 'PIPE':
    case 'TCP':
      var net = __webpack_require__(32);
      stream = new net.Socket({
        fd: fd,
        readable: false,
        writable: true
      });

      // FIXME Should probably have an option in net.Socket to create a
      // stream from an existing fd which is writable only. But for now
      // we'll just add this hack and set the `readable` member to false.
      // Test: ./node test/fixtures/echo.js < /etc/passwd
      stream.readable = false;
      stream.read = null;
      stream._type = 'pipe';

      // FIXME Hack to have stream not keep the event loop alive.
      // See https://github.com/joyent/node/issues/1726
      if (stream._handle && stream._handle.unref) {
        stream._handle.unref();
      }
      break;

    default:
      // Probably an error on in uv_guess_handle()
      throw new Error('Implement me. Unknown stream file type!');
  }

  // For supporting legacy API we put the FD here.
  stream.fd = fd;

  stream._isStdio = true;

  return stream;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 715 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (str, sep) {
	if (typeof str !== 'string') {
		throw new TypeError('Expected a string');
	}

	sep = typeof sep === 'undefined' ? '_' : sep;

	return str
		.replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2')
		.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2')
		.toLowerCase();
};


/***/ }),
/* 716 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* globals Symbol: false, Uint8Array: false, WeakMap: false */
/*!
 * deep-eql
 * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>
 * MIT Licensed
 */

var type = __webpack_require__(244);
function FakeMap() {
  this._key = 'chai/deep-eql__' + Math.random() + Date.now();
}

FakeMap.prototype = {
  get: function getMap(key) {
    return key[this._key];
  },
  set: function setMap(key, value) {
    if (Object.isExtensible(key)) {
      Object.defineProperty(key, this._key, {
        value: value,
        configurable: true,
      });
    }
  },
};

var MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap;
/*!
 * Check to see if the MemoizeMap has recorded a result of the two operands
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {MemoizeMap} memoizeMap
 * @returns {Boolean|null} result
*/
function memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) {
  // Technically, WeakMap keys can *only* be objects, not primitives.
  if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {
    return null;
  }
  var leftHandMap = memoizeMap.get(leftHandOperand);
  if (leftHandMap) {
    var result = leftHandMap.get(rightHandOperand);
    if (typeof result === 'boolean') {
      return result;
    }
  }
  return null;
}

/*!
 * Set the result of the equality into the MemoizeMap
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {MemoizeMap} memoizeMap
 * @param {Boolean} result
*/
function memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) {
  // Technically, WeakMap keys can *only* be objects, not primitives.
  if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {
    return;
  }
  var leftHandMap = memoizeMap.get(leftHandOperand);
  if (leftHandMap) {
    leftHandMap.set(rightHandOperand, result);
  } else {
    leftHandMap = new MemoizeMap();
    leftHandMap.set(rightHandOperand, result);
    memoizeMap.set(leftHandOperand, leftHandMap);
  }
}

/*!
 * Primary Export
 */

module.exports = deepEqual;
module.exports.MemoizeMap = MemoizeMap;

/**
 * Assert deeply nested sameValue equality between two objects of any type.
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {Object} [options] (optional) Additional options
 * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.
 * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of
    complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular
    references to blow the stack.
 * @return {Boolean} equal match
 */
function deepEqual(leftHandOperand, rightHandOperand, options) {
  // If we have a comparator, we can't assume anything; so bail to its check first.
  if (options && options.comparator) {
    return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);
  }

  var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);
  if (simpleResult !== null) {
    return simpleResult;
  }

  // Deeper comparisons are pushed through to a larger function
  return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);
}

/**
 * Many comparisons can be canceled out early via simple equality or primitive checks.
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @return {Boolean|null} equal match
 */
function simpleEqual(leftHandOperand, rightHandOperand) {
  // Equal references (except for Numbers) can be returned early
  if (leftHandOperand === rightHandOperand) {
    // Handle +-0 cases
    return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand;
  }

  // handle NaN cases
  if (
    leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare
    rightHandOperand !== rightHandOperand // eslint-disable-line no-self-compare
  ) {
    return true;
  }

  // Anything that is not an 'object', i.e. symbols, functions, booleans, numbers,
  // strings, and undefined, can be compared by reference.
  if (isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {
    // Easy out b/c it would have passed the first equality check
    return false;
  }
  return null;
}

/*!
 * The main logic of the `deepEqual` function.
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {Object} [options] (optional) Additional options
 * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.
 * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of
    complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular
    references to blow the stack.
 * @return {Boolean} equal match
*/
function extensiveDeepEqual(leftHandOperand, rightHandOperand, options) {
  options = options || {};
  options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap();
  var comparator = options && options.comparator;

  // Check if a memoized result exists.
  var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize);
  if (memoizeResultLeft !== null) {
    return memoizeResultLeft;
  }
  var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize);
  if (memoizeResultRight !== null) {
    return memoizeResultRight;
  }

  // If a comparator is present, use it.
  if (comparator) {
    var comparatorResult = comparator(leftHandOperand, rightHandOperand);
    // Comparators may return null, in which case we want to go back to default behavior.
    if (comparatorResult === false || comparatorResult === true) {
      memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult);
      return comparatorResult;
    }
    // To allow comparators to override *any* behavior, we ran them first. Since it didn't decide
    // what to do, we need to make sure to return the basic tests first before we move on.
    var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);
    if (simpleResult !== null) {
      // Don't memoize this, it takes longer to set/retrieve than to just compare.
      return simpleResult;
    }
  }

  var leftHandType = type(leftHandOperand);
  if (leftHandType !== type(rightHandOperand)) {
    memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false);
    return false;
  }

  // Temporarily set the operands in the memoize object to prevent blowing the stack
  memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true);

  var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options);
  memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result);
  return result;
}

function extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) {
  switch (leftHandType) {
    case 'String':
    case 'Number':
    case 'Boolean':
    case 'Date':
      // If these types are their instance types (e.g. `new Number`) then re-deepEqual against their values
      return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf());
    case 'Promise':
    case 'Symbol':
    case 'function':
    case 'WeakMap':
    case 'WeakSet':
    case 'Error':
      return leftHandOperand === rightHandOperand;
    case 'Arguments':
    case 'Int8Array':
    case 'Uint8Array':
    case 'Uint8ClampedArray':
    case 'Int16Array':
    case 'Uint16Array':
    case 'Int32Array':
    case 'Uint32Array':
    case 'Float32Array':
    case 'Float64Array':
    case 'Array':
      return iterableEqual(leftHandOperand, rightHandOperand, options);
    case 'RegExp':
      return regexpEqual(leftHandOperand, rightHandOperand);
    case 'Generator':
      return generatorEqual(leftHandOperand, rightHandOperand, options);
    case 'DataView':
      return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options);
    case 'ArrayBuffer':
      return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options);
    case 'Set':
      return entriesEqual(leftHandOperand, rightHandOperand, options);
    case 'Map':
      return entriesEqual(leftHandOperand, rightHandOperand, options);
    default:
      return objectEqual(leftHandOperand, rightHandOperand, options);
  }
}

/*!
 * Compare two Regular Expressions for equality.
 *
 * @param {RegExp} leftHandOperand
 * @param {RegExp} rightHandOperand
 * @return {Boolean} result
 */

function regexpEqual(leftHandOperand, rightHandOperand) {
  return leftHandOperand.toString() === rightHandOperand.toString();
}

/*!
 * Compare two Sets/Maps for equality. Faster than other equality functions.
 *
 * @param {Set} leftHandOperand
 * @param {Set} rightHandOperand
 * @param {Object} [options] (Optional)
 * @return {Boolean} result
 */

function entriesEqual(leftHandOperand, rightHandOperand, options) {
  // IE11 doesn't support Set#entries or Set#@@iterator, so we need manually populate using Set#forEach
  if (leftHandOperand.size !== rightHandOperand.size) {
    return false;
  }
  if (leftHandOperand.size === 0) {
    return true;
  }
  var leftHandItems = [];
  var rightHandItems = [];
  leftHandOperand.forEach(function gatherEntries(key, value) {
    leftHandItems.push([ key, value ]);
  });
  rightHandOperand.forEach(function gatherEntries(key, value) {
    rightHandItems.push([ key, value ]);
  });
  return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options);
}

/*!
 * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers.
 *
 * @param {Iterable} leftHandOperand
 * @param {Iterable} rightHandOperand
 * @param {Object} [options] (Optional)
 * @return {Boolean} result
 */

function iterableEqual(leftHandOperand, rightHandOperand, options) {
  var length = leftHandOperand.length;
  if (length !== rightHandOperand.length) {
    return false;
  }
  if (length === 0) {
    return true;
  }
  var index = -1;
  while (++index < length) {
    if (deepEqual(leftHandOperand[index], rightHandOperand[index], options) === false) {
      return false;
    }
  }
  return true;
}

/*!
 * Simple equality for generator objects such as those returned by generator functions.
 *
 * @param {Iterable} leftHandOperand
 * @param {Iterable} rightHandOperand
 * @param {Object} [options] (Optional)
 * @return {Boolean} result
 */

function generatorEqual(leftHandOperand, rightHandOperand, options) {
  return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options);
}

/*!
 * Determine if the given object has an @@iterator function.
 *
 * @param {Object} target
 * @return {Boolean} `true` if the object has an @@iterator function.
 */
function hasIteratorFunction(target) {
  return typeof Symbol !== 'undefined' &&
    typeof target === 'object' &&
    typeof Symbol.iterator !== 'undefined' &&
    typeof target[Symbol.iterator] === 'function';
}

/*!
 * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array.
 * This will consume the iterator - which could have side effects depending on the @@iterator implementation.
 *
 * @param {Object} target
 * @returns {Array} an array of entries from the @@iterator function
 */
function getIteratorEntries(target) {
  if (hasIteratorFunction(target)) {
    try {
      return getGeneratorEntries(target[Symbol.iterator]());
    } catch (iteratorError) {
      return [];
    }
  }
  return [];
}

/*!
 * Gets all entries from a Generator. This will consume the generator - which could have side effects.
 *
 * @param {Generator} target
 * @returns {Array} an array of entries from the Generator.
 */
function getGeneratorEntries(generator) {
  var generatorResult = generator.next();
  var accumulator = [ generatorResult.value ];
  while (generatorResult.done === false) {
    generatorResult = generator.next();
    accumulator.push(generatorResult.value);
  }
  return accumulator;
}

/*!
 * Gets all own and inherited enumerable keys from a target.
 *
 * @param {Object} target
 * @returns {Array} an array of own and inherited enumerable keys from the target.
 */
function getEnumerableKeys(target) {
  var keys = [];
  for (var key in target) {
    keys.push(key);
  }
  return keys;
}

/*!
 * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of
 * each key. If any value of the given key is not equal, the function will return false (early).
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against
 * @param {Object} [options] (Optional)
 * @return {Boolean} result
 */
function keysEqual(leftHandOperand, rightHandOperand, keys, options) {
  var length = keys.length;
  if (length === 0) {
    return true;
  }
  for (var i = 0; i < length; i += 1) {
    if (deepEqual(leftHandOperand[keys[i]], rightHandOperand[keys[i]], options) === false) {
      return false;
    }
  }
  return true;
}

/*!
 * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual`
 * for each enumerable key in the object.
 *
 * @param {Mixed} leftHandOperand
 * @param {Mixed} rightHandOperand
 * @param {Object} [options] (Optional)
 * @return {Boolean} result
 */

function objectEqual(leftHandOperand, rightHandOperand, options) {
  var leftHandKeys = getEnumerableKeys(leftHandOperand);
  var rightHandKeys = getEnumerableKeys(rightHandOperand);
  if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) {
    leftHandKeys.sort();
    rightHandKeys.sort();
    if (iterableEqual(leftHandKeys, rightHandKeys) === false) {
      return false;
    }
    return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options);
  }

  var leftHandEntries = getIteratorEntries(leftHandOperand);
  var rightHandEntries = getIteratorEntries(rightHandOperand);
  if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) {
    leftHandEntries.sort();
    rightHandEntries.sort();
    return iterableEqual(leftHandEntries, rightHandEntries, options);
  }

  if (leftHandKeys.length === 0 &&
      leftHandEntries.length === 0 &&
      rightHandKeys.length === 0 &&
      rightHandEntries.length === 0) {
    return true;
  }

  return false;
}

/*!
 * Returns true if the argument is a primitive.
 *
 * This intentionally returns true for all objects that can be compared by reference,
 * including functions and symbols.
 *
 * @param {Mixed} value
 * @return {Boolean} result
 */
function isPrimitive(value) {
  return value === null || typeof value !== 'object';
}


/***/ }),
/* 717 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var path = __webpack_require__(0);
var globby = __webpack_require__(718);
var isPathCwd = __webpack_require__(899);
var isPathInCwd = __webpack_require__(900);
var objectAssign = __webpack_require__(385);
var Promise = __webpack_require__(388);
var pify = __webpack_require__(166);
var rimraf = __webpack_require__(237);

var rimrafP = pify(rimraf, Promise);

function safeCheck(file) {
	if (isPathCwd(file)) {
		throw new Error('Cannot delete the current working directory. Can be overriden with the `force` option.');
	}

	if (!isPathInCwd(file)) {
		throw new Error('Cannot delete files/folders outside the current working directory. Can be overriden with the `force` option.');
	}
}

module.exports = function (patterns, opts) {
	opts = objectAssign({}, opts);

	var force = opts.force;
	delete opts.force;

	var dryRun = opts.dryRun;
	delete opts.dryRun;

	return globby(patterns, opts).then(function (files) {
		return Promise.all(files.map(function (file) {
			if (!force) {
				safeCheck(file);
			}

			file = path.resolve(opts.cwd || '', file);

			if (dryRun) {
				return Promise.resolve(file);
			}

			return rimrafP(file).then(function () {
				return file;
			});
		}));
	});
};

module.exports.sync = function (patterns, opts) {
	opts = objectAssign({}, opts);

	var force = opts.force;
	delete opts.force;

	var dryRun = opts.dryRun;
	delete opts.dryRun;

	return globby.sync(patterns, opts).map(function (file) {
		if (!force) {
			safeCheck(file);
		}

		file = path.resolve(opts.cwd || '', file);

		if (!dryRun) {
			rimraf.sync(file);
		}

		return file;
	});
};


/***/ }),
/* 718 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var Promise = __webpack_require__(388);
var arrayUnion = __webpack_require__(564);
var objectAssign = __webpack_require__(385);
var glob = __webpack_require__(124);
var arrify = __webpack_require__(566);
var pify = __webpack_require__(166);

var globP = pify(glob, Promise).bind(glob);

function isNegative(pattern) {
	return pattern[0] === '!';
}

function generateGlobTasks(patterns, opts) {
	var globTasks = [];

	patterns = arrify(patterns);
	opts = objectAssign({
		cache: Object.create(null),
		statCache: Object.create(null),
		realpathCache: Object.create(null),
		symlinks: Object.create(null),
		ignore: []
	}, opts);

	patterns.forEach(function (pattern, i) {
		if (isNegative(pattern)) {
			return;
		}

		var ignore = patterns.slice(i).filter(isNegative).map(function (pattern) {
			return pattern.slice(1);
		});

		globTasks.push({
			pattern: pattern,
			opts: objectAssign({}, opts, {
				ignore: opts.ignore.concat(ignore)
			})
		});
	});

	return globTasks;
}

module.exports = function (patterns, opts) {
	var globTasks = generateGlobTasks(patterns, opts);

	return Promise.all(globTasks.map(function (task) {
		return globP(task.pattern, task.opts);
	})).then(function (paths) {
		return arrayUnion.apply(null, paths);
	});
};

module.exports.sync = function (patterns, opts) {
	var globTasks = generateGlobTasks(patterns, opts);

	return globTasks.reduce(function (matches, task) {
		return arrayUnion(matches, glob.sync(task.pattern, task.opts));
	}, []);
};

module.exports.generateGlobTasks = generateGlobTasks;


/***/ }),
/* 719 */
/***/ (function(module, exports, __webpack_require__) {

var Stream = __webpack_require__(22).Stream;
var util = __webpack_require__(2);

module.exports = DelayedStream;
function DelayedStream() {
  this.source = null;
  this.dataSize = 0;
  this.maxDataSize = 1024 * 1024;
  this.pauseStream = true;

  this._maxDataSizeExceeded = false;
  this._released = false;
  this._bufferedEvents = [];
}
util.inherits(DelayedStream, Stream);

DelayedStream.create = function(source, options) {
  var delayedStream = new this();

  options = options || {};
  for (var option in options) {
    delayedStream[option] = options[option];
  }

  delayedStream.source = source;

  var realEmit = source.emit;
  source.emit = function() {
    delayedStream._handleEmit(arguments);
    return realEmit.apply(source, arguments);
  };

  source.on('error', function() {});
  if (delayedStream.pauseStream) {
    source.pause();
  }

  return delayedStream;
};

Object.defineProperty(DelayedStream.prototype, 'readable', {
  configurable: true,
  enumerable: true,
  get: function() {
    return this.source.readable;
  }
});

DelayedStream.prototype.setEncoding = function() {
  return this.source.setEncoding.apply(this.source, arguments);
};

DelayedStream.prototype.resume = function() {
  if (!this._released) {
    this.release();
  }

  this.source.resume();
};

DelayedStream.prototype.pause = function() {
  this.source.pause();
};

DelayedStream.prototype.release = function() {
  this._released = true;

  this._bufferedEvents.forEach(function(args) {
    this.emit.apply(this, args);
  }.bind(this));
  this._bufferedEvents = [];
};

DelayedStream.prototype.pipe = function() {
  var r = Stream.prototype.pipe.apply(this, arguments);
  this.resume();
  return r;
};

DelayedStream.prototype._handleEmit = function(args) {
  if (this._released) {
    this.emit.apply(this, args);
    return;
  }

  if (args[0] === 'data') {
    this.dataSize += args[1].length;
    this._checkIfMaxDataSizeExceeded();
  }

  this._bufferedEvents.push(args);
};

DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
  if (this._maxDataSizeExceeded) {
    return;
  }

  if (this.dataSize <= this.maxDataSize) {
    return;
  }

  this._maxDataSizeExceeded = true;
  var message =
    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
  this.emit('error', new Error(message));
};


/***/ }),
/* 720 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * depd
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 */

module.exports = callSiteToString

/**
 * Format a CallSite file location to a string.
 */

function callSiteFileLocation (callSite) {
  var fileName
  var fileLocation = ''

  if (callSite.isNative()) {
    fileLocation = 'native'
  } else if (callSite.isEval()) {
    fileName = callSite.getScriptNameOrSourceURL()
    if (!fileName) {
      fileLocation = callSite.getEvalOrigin()
    }
  } else {
    fileName = callSite.getFileName()
  }

  if (fileName) {
    fileLocation += fileName

    var lineNumber = callSite.getLineNumber()
    if (lineNumber != null) {
      fileLocation += ':' + lineNumber

      var columnNumber = callSite.getColumnNumber()
      if (columnNumber) {
        fileLocation += ':' + columnNumber
      }
    }
  }

  return fileLocation || 'unknown source'
}

/**
 * Format a CallSite to a string.
 */

function callSiteToString (callSite) {
  var addSuffix = true
  var fileLocation = callSiteFileLocation(callSite)
  var functionName = callSite.getFunctionName()
  var isConstructor = callSite.isConstructor()
  var isMethodCall = !(callSite.isToplevel() || isConstructor)
  var line = ''

  if (isMethodCall) {
    var methodName = callSite.getMethodName()
    var typeName = getConstructorName(callSite)

    if (functionName) {
      if (typeName && functionName.indexOf(typeName) !== 0) {
        line += typeName + '.'
      }

      line += functionName

      if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) {
        line += ' [as ' + methodName + ']'
      }
    } else {
      line += typeName + '.' + (methodName || '<anonymous>')
    }
  } else if (isConstructor) {
    line += 'new ' + (functionName || '<anonymous>')
  } else if (functionName) {
    line += functionName
  } else {
    addSuffix = false
    line += fileLocation
  }

  if (addSuffix) {
    line += ' (' + fileLocation + ')'
  }

  return line
}

/**
 * Get constructor name of reviver.
 */

function getConstructorName (obj) {
  var receiver = obj.receiver
  return (receiver.constructor && receiver.constructor.name) || null
}


/***/ }),
/* 721 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = eventListenerCount

/**
 * Get the count of listeners on an event emitter of a specific type.
 */

function eventListenerCount (emitter, type) {
  return emitter.listeners(type).length
}


/***/ }),
/* 722 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * destroy
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var ReadStream = __webpack_require__(1).ReadStream
var Stream = __webpack_require__(22)

/**
 * Module exports.
 * @public
 */

module.exports = destroy

/**
 * Destroy a stream.
 *
 * @param {object} stream
 * @public
 */

function destroy(stream) {
  if (stream instanceof ReadStream) {
    return destroyReadStream(stream)
  }

  if (!(stream instanceof Stream)) {
    return stream
  }

  if (typeof stream.destroy === 'function') {
    stream.destroy()
  }

  return stream
}

/**
 * Destroy a ReadStream.
 *
 * @param {object} stream
 * @private
 */

function destroyReadStream(stream) {
  stream.destroy()

  if (typeof stream.close === 'function') {
    // node.js core bug work-around
    stream.on('open', onOpenClose)
  }

  return stream
}

/**
 * On open handler to close stream.
 * @private
 */

function onOpenClose() {
  if (typeof this.fd === 'number') {
    // actually close down the fd
    this.close()
  }
}


/***/ }),
/* 723 */
/***/ (function(module, exports, __webpack_require__) {

// Named EC curves

// Requires ec.js, jsbn.js, and jsbn2.js
var BigInteger = __webpack_require__(63).BigInteger
var ECCurveFp = __webpack_require__(116).ECCurveFp


// ----------------
// X9ECParameters

// constructor
function X9ECParameters(curve,g,n,h) {
    this.curve = curve;
    this.g = g;
    this.n = n;
    this.h = h;
}

function x9getCurve() {
    return this.curve;
}

function x9getG() {
    return this.g;
}

function x9getN() {
    return this.n;
}

function x9getH() {
    return this.h;
}

X9ECParameters.prototype.getCurve = x9getCurve;
X9ECParameters.prototype.getG = x9getG;
X9ECParameters.prototype.getN = x9getN;
X9ECParameters.prototype.getH = x9getH;

// ----------------
// SECNamedCurves

function fromHex(s) { return new BigInteger(s, 16); }

function secp128r1() {
    // p = 2^128 - 2^97 - 1
    var p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF");
    var a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC");
    var b = fromHex("E87579C11079F43DD824993C2CEE5ED3");
    //byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679");
    var n = fromHex("FFFFFFFE0000000075A30D1B9038A115");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "161FF7528B899B2D0C28607CA52C5B86"
		+ "CF5AC8395BAFEB13C02DA292DDED7A83");
    return new X9ECParameters(curve, G, n, h);
}

function secp160k1() {
    // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1
    var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73");
    var a = BigInteger.ZERO;
    var b = fromHex("7");
    //byte[] S = null;
    var n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB"
                + "938CF935318FDCED6BC28286531733C3F03C4FEE");
    return new X9ECParameters(curve, G, n, h);
}

function secp160r1() {
    // p = 2^160 - 2^31 - 1
    var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF");
    var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC");
    var b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45");
    //byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345");
    var n = fromHex("0100000000000000000001F4C8F927AED3CA752257");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
		+ "4A96B5688EF573284664698968C38BB913CBFC82"
		+ "23A628553168947D59DCC912042351377AC5FB32");
    return new X9ECParameters(curve, G, n, h);
}

function secp192k1() {
    // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1
    var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37");
    var a = BigInteger.ZERO;
    var b = fromHex("3");
    //byte[] S = null;
    var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D"
                + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D");
    return new X9ECParameters(curve, G, n, h);
}

function secp192r1() {
    // p = 2^192 - 2^64 - 1
    var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF");
    var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC");
    var b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1");
    //byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5");
    var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012"
                + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811");
    return new X9ECParameters(curve, G, n, h);
}

function secp224r1() {
    // p = 2^224 - 2^96 + 1
    var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001");
    var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE");
    var b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4");
    //byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5");
    var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21"
                + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34");
    return new X9ECParameters(curve, G, n, h);
}

function secp256r1() {
    // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1
    var p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF");
    var a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC");
    var b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B");
    //byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90");
    var n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551");
    var h = BigInteger.ONE;
    var curve = new ECCurveFp(p, a, b);
    var G = curve.decodePointHex("04"
                + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"
		+ "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5");
    return new X9ECParameters(curve, G, n, h);
}

// TODO: make this into a proper hashtable
function getSECCurveByName(name) {
    if(name == "secp128r1") return secp128r1();
    if(name == "secp160k1") return secp160k1();
    if(name == "secp160r1") return secp160r1();
    if(name == "secp192k1") return secp192k1();
    if(name == "secp192r1") return secp192r1();
    if(name == "secp224r1") return secp224r1();
    if(name == "secp256r1") return secp256r1();
    return null;
}

module.exports = {
  "secp128r1":secp128r1,
  "secp160k1":secp160k1,
  "secp160r1":secp160r1,
  "secp192k1":secp192k1,
  "secp192r1":secp192r1,
  "secp224r1":secp224r1,
  "secp256r1":secp256r1
}


/***/ }),
/* 724 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * ee-first
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = first

/**
 * Get the first event in a set of event emitters and event pairs.
 *
 * @param {array} stuff
 * @param {function} done
 * @public
 */

function first(stuff, done) {
  if (!Array.isArray(stuff))
    throw new TypeError('arg must be an array of [ee, events...] arrays')

  var cleanups = []

  for (var i = 0; i < stuff.length; i++) {
    var arr = stuff[i]

    if (!Array.isArray(arr) || arr.length < 2)
      throw new TypeError('each array member must be [ee, events...]')

    var ee = arr[0]

    for (var j = 1; j < arr.length; j++) {
      var event = arr[j]
      var fn = listener(event, callback)

      // listen to the event
      ee.on(event, fn)
      // push this listener to the list of cleanups
      cleanups.push({
        ee: ee,
        event: event,
        fn: fn,
      })
    }
  }

  function callback() {
    cleanup()
    done.apply(null, arguments)
  }

  function cleanup() {
    var x
    for (var i = 0; i < cleanups.length; i++) {
      x = cleanups[i]
      x.ee.removeListener(x.event, x.fn)
    }
  }

  function thunk(fn) {
    done = fn
  }

  thunk.cancel = cleanup

  return thunk
}

/**
 * Create the event listener.
 * @private
 */

function listener(event, done) {
  return function onevent(arg1) {
    var args = new Array(arguments.length)
    var ee = this
    var err = event === 'error'
      ? arg1
      : null

    // copy args to prevent arguments escaping scope
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i]
    }

    done(err, ee, event, args)
  }
}


/***/ }),
/* 725 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var util = __webpack_require__(2);
var isArrayish = __webpack_require__(890);

var errorEx = function errorEx(name, properties) {
	if (!name || name.constructor !== String) {
		properties = name || {};
		name = Error.name;
	}

	var errorExError = function ErrorEXError(message) {
		if (!this) {
			return new ErrorEXError(message);
		}

		message = message instanceof Error
			? message.message
			: (message || this.message);

		Error.call(this, message);
		Error.captureStackTrace(this, errorExError);

		this.name = name;

		Object.defineProperty(this, 'message', {
			configurable: true,
			enumerable: false,
			get: function () {
				var newMessage = message.split(/\r?\n/g);

				for (var key in properties) {
					if (!properties.hasOwnProperty(key)) {
						continue;
					}

					var modifier = properties[key];

					if ('message' in modifier) {
						newMessage = modifier.message(this[key], newMessage) || newMessage;
						if (!isArrayish(newMessage)) {
							newMessage = [newMessage];
						}
					}
				}

				return newMessage.join('\n');
			},
			set: function (v) {
				message = v;
			}
		});

		var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack');
		var stackGetter = stackDescriptor.get;
		var stackValue = stackDescriptor.value;
		delete stackDescriptor.value;
		delete stackDescriptor.writable;

		stackDescriptor.get = function () {
			var stack = (stackGetter)
				? stackGetter.call(this).split(/\r?\n+/g)
				: stackValue.split(/\r?\n+/g);

			// starting in Node 7, the stack builder caches the message.
			// just replace it.
			stack[0] = this.name + ': ' + this.message;

			var lineCount = 1;
			for (var key in properties) {
				if (!properties.hasOwnProperty(key)) {
					continue;
				}

				var modifier = properties[key];

				if ('line' in modifier) {
					var line = modifier.line(this[key]);
					if (line) {
						stack.splice(lineCount++, 0, '    ' + line);
					}
				}

				if ('stack' in modifier) {
					modifier.stack(this[key], stack);
				}
			}

			return stack.join('\n');
		};

		Object.defineProperty(this, 'stack', stackDescriptor);
	};

	if (Object.setPrototypeOf) {
		Object.setPrototypeOf(errorExError.prototype, Error.prototype);
		Object.setPrototypeOf(errorExError, Error);
	} else {
		util.inherits(errorExError, Error);
	}

	return errorExError;
};

errorEx.append = function (str, def) {
	return {
		message: function (v, message) {
			v = v || def;

			if (v) {
				message[0] += ' ' + str.replace('%s', v.toString());
			}

			return message;
		}
	};
};

errorEx.line = function (str, def) {
	return {
		line: function (v) {
			v = v || def;

			if (v) {
				return str.replace('%s', v.toString());
			}

			return null;
		}
	};
};

module.exports = errorEx;


/***/ }),
/* 726 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * etag
 * Copyright(c) 2014-2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = etag

/**
 * Module dependencies.
 * @private
 */

var crypto = __webpack_require__(7)
var Stats = __webpack_require__(1).Stats

/**
 * Module variables.
 * @private
 */

var toString = Object.prototype.toString

/**
 * Generate an entity tag.
 *
 * @param {Buffer|string} entity
 * @return {string}
 * @private
 */

function entitytag (entity) {
  if (entity.length === 0) {
    // fast-path empty
    return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'
  }

  // compute hash of entity
  var hash = crypto
    .createHash('sha1')
    .update(entity, 'utf8')
    .digest('base64')
    .substring(0, 27)

  // compute length of entity
  var len = typeof entity === 'string'
    ? Buffer.byteLength(entity, 'utf8')
    : entity.length

  return '"' + len.toString(16) + '-' + hash + '"'
}

/**
 * Create a simple ETag.
 *
 * @param {string|Buffer|Stats} entity
 * @param {object} [options]
 * @param {boolean} [options.weak]
 * @return {String}
 * @public
 */

function etag (entity, options) {
  if (entity == null) {
    throw new TypeError('argument entity is required')
  }

  // support fs.Stats object
  var isStats = isstats(entity)
  var weak = options && typeof options.weak === 'boolean'
    ? options.weak
    : isStats

  // validate argument
  if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {
    throw new TypeError('argument entity must be string, Buffer, or fs.Stats')
  }

  // generate entity tag
  var tag = isStats
    ? stattag(entity)
    : entitytag(entity)

  return weak
    ? 'W/' + tag
    : tag
}

/**
 * Determine if object is a Stats object.
 *
 * @param {object} obj
 * @return {boolean}
 * @api private
 */

function isstats (obj) {
  // genuine fs.Stats
  if (typeof Stats === 'function' && obj instanceof Stats) {
    return true
  }

  // quack quack
  return obj && typeof obj === 'object' &&
    'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&
    'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&
    'ino' in obj && typeof obj.ino === 'number' &&
    'size' in obj && typeof obj.size === 'number'
}

/**
 * Generate a tag for a stat.
 *
 * @param {object} stat
 * @return {string}
 * @private
 */

function stattag (stat) {
  var mtime = stat.mtime.getTime().toString(16)
  var size = stat.size.toString(16)

  return '"' + size + '-' + mtime + '"'
}


/***/ }),
/* 727 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var BN = __webpack_require__(728);
var numberToBN = __webpack_require__(975);
var keccak256 = __webpack_require__(909).keccak_256;

// from ethereumjs-util
function stripZeros(aInput) {
  var a = aInput; // eslint-disable-line
  var first = a[0]; // eslint-disable-line
  while (a.length > 0 && first.toString() === '0') {
    a = a.slice(1);
    first = a[0];
  }
  return a;
}

function bnToBuffer(bnInput) {
  var bn = bnInput; // eslint-disable-line
  var hex = bn.toString(16); // eslint-disable-line
  if (hex.length % 2) {
    hex = '0' + hex;
  }
  return stripZeros(new Buffer(hex, 'hex'));
}

function isHexString(value, length) {
  if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
    return false;
  }
  if (length && value.length !== 2 + 2 * length) {
    return false;
  }
  return true;
}

function hexOrBuffer(valueInput, name) {
  var value = valueInput; // eslint-disable-line
  if (!Buffer.isBuffer(value)) {
    if (!isHexString(value)) {
      var error = new Error(name ? '[ethjs-abi] invalid ' + name : '[ethjs-abi] invalid hex or buffer, must be a prefixed alphanumeric even length hex string');
      error.reason = '[ethjs-abi] invalid hex string, hex must be prefixed and alphanumeric (e.g. 0x023..)';
      error.value = value;
      throw error;
    }

    value = value.substring(2);
    if (value.length % 2) {
      value = '0' + value;
    }
    value = new Buffer(value, 'hex');
  }

  return value;
}

function hexlify(value) {
  if (typeof value === 'number') {
    return '0x' + bnToBuffer(new BN(value)).toString('hex');
  } else if (value.mod || value.modulo) {
    return '0x' + bnToBuffer(value).toString('hex');
  } else {
    // eslint-disable-line
    return '0x' + hexOrBuffer(value).toString('hex');
  }
}

// getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
function getKeys(params, key, allowEmpty) {
  var result = []; // eslint-disable-line

  if (!Array.isArray(params)) {
    throw new Error('[ethjs-abi] while getting keys, invalid params value ' + JSON.stringify(params));
  }

  for (var i = 0; i < params.length; i++) {
    // eslint-disable-line
    var value = params[i][key]; // eslint-disable-line
    if (allowEmpty && !value) {
      value = '';
    } else if (typeof value !== 'string') {
      throw new Error('[ethjs-abi] while getKeys found invalid ABI data structure, type value not string');
    }
    result.push(value);
  }

  return result;
}

function coderNumber(size, signed) {
  return {
    encode: function encodeNumber(valueInput) {
      var value = valueInput; // eslint-disable-line

      if (typeof value === 'object' && value.toString && (value.toTwos || value.dividedToIntegerBy)) {
        value = value.toString(10).split('.')[0];
      }

      if (typeof value === 'string' || typeof value === 'number') {
        value = String(value).split('.')[0];
      }

      value = numberToBN(value);
      value = value.toTwos(size * 8).maskn(size * 8);
      if (signed) {
        value = value.fromTwos(size * 8).toTwos(256);
      }
      return value.toArrayLike(Buffer, 'be', 32);
    },
    decode: function decodeNumber(data, offset) {
      var junkLength = 32 - size; // eslint-disable-line
      var value = new BN(data.slice(offset + junkLength, offset + 32)); // eslint-disable-line
      if (signed) {
        value = value.fromTwos(size * 8);
      } else {
        value = value.maskn(size * 8);
      }
      return {
        consumed: 32,
        value: new BN(value.toString(10))
      };
    }
  };
}
var uint256Coder = coderNumber(32, false);

var coderBoolean = {
  encode: function encodeBoolean(value) {
    return uint256Coder.encode(value ? 1 : 0);
  },
  decode: function decodeBoolean(data, offset) {
    var result = uint256Coder.decode(data, offset); // eslint-disable-line
    return {
      consumed: result.consumed,
      value: !result.value.isZero()
    };
  }
};

function coderFixedBytes(length) {
  return {
    encode: function encodeFixedBytes(valueInput) {
      var value = valueInput; // eslint-disable-line
      value = hexOrBuffer(value);

      if (value.length === 32) {
        return value;
      }

      var result = new Buffer(32); // eslint-disable-line
      result.fill(0);
      value.copy(result);
      return result;
    },
    decode: function decodeFixedBytes(data, offset) {
      if (data.length < offset + 32) {
        throw new Error('[ethjs-abi] while decoding fixed bytes, invalid bytes data length: ' + length);
      }

      return {
        consumed: 32,
        value: '0x' + data.slice(offset, offset + length).toString('hex')
      };
    }
  };
}

var coderAddress = {
  encode: function encodeAddress(valueInput) {
    var value = valueInput; // eslint-disable-line
    var result = new Buffer(32); // eslint-disable-line
    if (!isHexString(value, 20)) {
      throw new Error('[ethjs-abi] while encoding address, invalid address value, not alphanumeric 20 byte hex string');
    }
    value = hexOrBuffer(value);
    result.fill(0);
    value.copy(result, 12);
    return result;
  },
  decode: function decodeAddress(data, offset) {
    if (data.length === 0) {
      return {
        consumed: 32,
        value: '0x'
      };
    }
    if (data.length < offset + 32) {
      throw new Error('[ethjs-abi] while decoding address data, invalid address data, invalid byte length ' + data.length);
    }
    return {
      consumed: 32,
      value: '0x' + data.slice(offset + 12, offset + 32).toString('hex')
    };
  }
};

function encodeDynamicBytesHelper(value) {
  var dataLength = parseInt(32 * Math.ceil(value.length / 32)); // eslint-disable-line
  var padding = new Buffer(dataLength - value.length); // eslint-disable-line
  padding.fill(0);

  return Buffer.concat([uint256Coder.encode(value.length), value, padding]);
}

function decodeDynamicBytesHelper(data, offset) {
  if (data.length < offset + 32) {
    throw new Error('[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ' + data.length + ' should be less than ' + (offset + 32));
  }

  var length = uint256Coder.decode(data, offset).value; // eslint-disable-line
  length = length.toNumber();
  if (data.length < offset + 32 + length) {
    throw new Error('[ethjs-abi] while decoding dynamic bytes data, invalid bytes length: ' + data.length + ' should be less than ' + (offset + 32 + length));
  }

  return {
    consumed: parseInt(32 + 32 * Math.ceil(length / 32), 10),
    value: data.slice(offset + 32, offset + 32 + length)
  };
}

var coderDynamicBytes = {
  encode: function encodeDynamicBytes(value) {
    return encodeDynamicBytesHelper(hexOrBuffer(value));
  },
  decode: function decodeDynamicBytes(data, offset) {
    var result = decodeDynamicBytesHelper(data, offset); // eslint-disable-line
    result.value = '0x' + result.value.toString('hex');
    return result;
  },
  dynamic: true
};

var coderString = {
  encode: function encodeString(value) {
    return encodeDynamicBytesHelper(new Buffer(value, 'utf8'));
  },
  decode: function decodeString(data, offset) {
    var result = decodeDynamicBytesHelper(data, offset); // eslint-disable-line
    result.value = result.value.toString('utf8');
    return result;
  },
  dynamic: true
};

function coderArray(coder, lengthInput) {
  return {
    encode: function encodeArray(value) {
      var result = new Buffer(0); // eslint-disable-line
      var length = lengthInput; // eslint-disable-line

      if (!Array.isArray(value)) {
        throw new Error('[ethjs-abi] while encoding array, invalid array data, not type Object (Array)');
      }

      if (length === -1) {
        length = value.length;
        result = uint256Coder.encode(length);
      }

      if (length !== value.length) {
        throw new Error('[ethjs-abi] while encoding array, size mismatch array length ' + length + ' does not equal ' + value.length);
      }

      value.forEach(function (resultValue) {
        result = Buffer.concat([result, coder.encode(resultValue)]);
      });

      return result;
    },
    decode: function decodeArray(data, offsetInput) {
      var length = lengthInput; // eslint-disable-line
      var offset = offsetInput; // eslint-disable-line
      // @TODO:
      // if (data.length < offset + length * 32) { throw new Error('invalid array'); }

      var consumed = 0; // eslint-disable-line
      var decodeResult; // eslint-disable-line

      if (length === -1) {
        decodeResult = uint256Coder.decode(data, offset);
        length = decodeResult.value.toNumber();
        consumed += decodeResult.consumed;
        offset += decodeResult.consumed;
      }

      var value = []; // eslint-disable-line

      for (var i = 0; i < length; i++) {
        // eslint-disable-line
        var loopResult = coder.decode(data, offset);
        consumed += loopResult.consumed;
        offset += loopResult.consumed;
        value.push(loopResult.value);
      }

      return {
        consumed: consumed,
        value: value
      };
    },
    dynamic: lengthInput === -1
  };
}

// Break the type up into [staticType][staticArray]*[dynamicArray]? | [dynamicType] and
// build the coder up from its parts
var paramTypePart = new RegExp(/^((u?int|bytes)([0-9]*)|(address|bool|string)|(\[([0-9]*)\]))/);

function getParamCoder(typeInput) {
  var type = typeInput; // eslint-disable-line
  var coder = null; // eslint-disable-line
  var invalidTypeErrorMessage = '[ethjs-abi] while getting param coder (getParamCoder) type value ' + JSON.stringify(type) + ' is either invalid or unsupported by ethjs-abi.';

  while (type) {
    var part = type.match(paramTypePart); // eslint-disable-line
    if (!part) {
      throw new Error(invalidTypeErrorMessage);
    }
    type = type.substring(part[0].length);

    var prefix = part[2] || part[4] || part[5]; // eslint-disable-line
    switch (prefix) {
      case 'int':case 'uint':
        if (coder) {
          throw new Error(invalidTypeErrorMessage);
        }
        var intSize = parseInt(part[3] || 256); // eslint-disable-line
        if (intSize === 0 || intSize > 256 || intSize % 8 !== 0) {
          throw new Error('[ethjs-abi] while getting param coder for type ' + type + ', invalid ' + prefix + '<N> width: ' + type);
        }

        coder = coderNumber(intSize / 8, prefix === 'int');
        break;

      case 'bool':
        if (coder) {
          throw new Error(invalidTypeErrorMessage);
        }
        coder = coderBoolean;
        break;

      case 'string':
        if (coder) {
          throw new Error(invalidTypeErrorMessage);
        }
        coder = coderString;
        break;

      case 'bytes':
        if (coder) {
          throw new Error(invalidTypeErrorMessage);
        }
        if (part[3]) {
          var size = parseInt(part[3]); // eslint-disable-line
          if (size === 0 || size > 32) {
            throw new Error('[ethjs-abi] while getting param coder for prefix bytes, invalid type ' + type + ', size ' + size + ' should be 0 or greater than 32');
          }
          coder = coderFixedBytes(size);
        } else {
          coder = coderDynamicBytes;
        }
        break;

      case 'address':
        if (coder) {
          throw new Error(invalidTypeErrorMessage);
        }
        coder = coderAddress;
        break;

      case '[]':
        if (!coder || coder.dynamic) {
          throw new Error(invalidTypeErrorMessage);
        }
        coder = coderArray(coder, -1);
        break;

      // "[0-9+]"
      default:
        if (!coder || coder.dynamic) {
          throw new Error(invalidTypeErrorMessage);
        }
        var defaultSize = parseInt(part[6]); // eslint-disable-line
        coder = coderArray(coder, defaultSize);
    }
  }

  if (!coder) {
    throw new Error(invalidTypeErrorMessage);
  }
  return coder;
}

module.exports = {
  BN: BN,
  bnToBuffer: bnToBuffer,
  isHexString: isHexString,
  hexOrBuffer: hexOrBuffer,
  hexlify: hexlify,
  stripZeros: stripZeros,

  keccak256: keccak256,

  getKeys: getKeys,
  numberToBN: numberToBN,
  coderNumber: coderNumber,
  uint256Coder: uint256Coder,
  coderBoolean: coderBoolean,
  coderFixedBytes: coderFixedBytes,
  coderAddress: coderAddress,
  coderDynamicBytes: coderDynamicBytes,
  coderString: coderString,
  coderArray: coderArray,
  paramTypePart: paramTypePart,
  getParamCoder: getParamCoder
};

/***/ }),
/* 728 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {(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 = __webpack_require__(70).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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  };

  /*

  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);
    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);

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 729 */
/***/ (function(module, exports, __webpack_require__) {

var contract = __webpack_require__(327);
var Registry = __webpack_require__(730);
var Web3 = __webpack_require__(331);

var EPMRegistry = {
  use: function(address, from_address, provider) {
    return new Registry(address, from_address, provider);
  }
};

module.exports = EPMRegistry;


/***/ }),
/* 730 */
/***/ (function(module, exports, __webpack_require__) {

var contract = __webpack_require__(327);
var PackageIndex = contract(__webpack_require__(478));
var ReleaseDB = contract(__webpack_require__(479));
var semver = __webpack_require__(238);

function Registry(registry_address, from_address, provider) {
  PackageIndex.setProvider(provider);
  ReleaseDB.setProvider(provider);

  PackageIndex.defaults({
    from: from_address,
    gas: 3141592
  });

  ReleaseDB.defaults({
    from: from_address,
    gas: 3141592
  });

  this.package_index = PackageIndex.at(registry_address);
};

Registry.prototype.getAllVersions = function(package_name) {
  var self = this;

  return this.package_index.getAllPackageReleaseHashes(package_name).then(function(hashes) {
    var promises = hashes.map(function(hash) {
      return self.package_index.getReleaseData(hash);
    });

    return Promise.all(promises);
  }).then(function(releases) {

    // Convert releases to version strings
    var versions = releases.map(function(release) {
      var major = release[0];
      var minor = release[1];
      var patch = release[2];
      var preRelease = release[3];
      var build = release[4];

      var version_string = major + "." + minor + "." + patch;

      if (preRelease != 0 && preRelease != "") {
        version_string += "-" + preRelease;
      }

      if (build != 0 && build != "") {
        version_string += "+" + build;
      }

      return version_string;
    }).sort(semver.compare); // Sort via semver lib

    return versions;
  });
}

Registry.prototype.resolveVersion = function(package_name, version_range) {
  return this.getAllVersions(package_name).then(function(versions) {
    // This can be optimized.
    var max = null;

    versions.forEach(function(version) {
      if (semver.satisfies(version, version_range)) {
        if (max == null || semver.gte(version, max)) {
          max = version;
        }
      }
    });

    return max;
  });
};

Registry.prototype.getLockfileURI = function(package_name, version_range) {
  var self = this;
  var version_registry;
  var version;

  return this.resolveVersion(package_name, version_range).then(function(v) {
    if (v == null) {
      throw new Error("Cannot find any published versions of '" + package_name + "' with the specified version range (" + version_range + ")");
    }

    version = self.convertToObject(v);
    return self.package_index.getReleaseLockfileURI(package_name, version.major, version.minor, version.patch, version.preRelease, version.build);
  });
};

Registry.prototype.register = function(package_name, version, lockfileURI) {
  var self = this;
  return Promise.resolve().then(function() {
    version = self.convertToObject(version);
  }).then(function() {
    return self.package_index.release(package_name, version.major, version.minor, version.patch, version.preRelease, version.build, lockfileURI);
  }).then(function(results) {
    var release_log = null;

    for (var i = 0; i < results.logs.length; i++) {
      var log = results.logs[i];
      if (log.event == "PackageRelease") {
        release_log = log;
        break;
      }
    }

    if (release_log == null) {
      throw new Error("Could not publish package. Please check version number and ensure it was not previously published.")
    }
  });
};

Registry.prototype.convertToObject = function(version) {
  var pieces = version.split("+");
  version = pieces[0];

  var build = "";

  if (pieces.length > 1) {
    build = pieces[1];
  }

  var major = semver.major(version);
  var minor = semver.minor(version);
  var patch = semver.patch(version);
  var preRelease = (semver.prerelease(version) || []).join("."); // r

  return {
    major: major,
    minor: minor,
    patch: patch,
    preRelease: preRelease,
    build: build
  };
};

module.exports = Registry;


/***/ }),
/* 731 */
/***/ (function(module, exports, __webpack_require__) {

// TODO: remove web3 requirement
// Call functions directly on the provider.
var Web3 = __webpack_require__(331);

var Blockchain = {
  parse: function(uri) {
    var parsed = {};
    if (uri.indexOf("blockchain://") != 0) return parsed;

    uri = uri.replace("blockchain://", "");

    var pieces = uri.split("/block/");

    parsed.genesis_hash = "0x" + pieces[0];
    parsed.block_hash = "0x" + pieces[1];

    return parsed;
  },

  asURI: function(provider, callback) {
    var web3 = new Web3(provider);

    web3.eth.getBlock(0, function(err, genesis) {
      if (err) return callback(err);

      web3.eth.getBlock("latest", function(err, latest) {
        if (err) return callback(err);

        var url = "blockchain://" + genesis.hash.replace("0x", "") + "/block/" + latest.hash.replace("0x", "");

        callback(null, url);
      });
    });
  },

  matches: function(uri, provider, callback) {
    uri = this.parse(uri);

    var expected_genesis = uri.genesis_hash;
    var expected_block = uri.block_hash;

    var web3 = new Web3(provider);

    web3.eth.getBlock(0, function(err, block) {
      if (err) return callback(err);
      if (block.hash != expected_genesis) return callback(null, false);

      web3.eth.getBlock(expected_block, function(err, block) {
        // Treat an error as if the block didn't exist. This is because
        // some clients respond differently.
        if (err || block == null) {
          return callback(null, false);
        }

        callback(null, true);
      });
    });
  }
};

module.exports = Blockchain;


/***/ }),
/* 732 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var ethJSABI = __webpack_require__(326);
var BlockchainUtils = __webpack_require__(731);
var Web3 = __webpack_require__(733);

// For browserified version. If browserify gave us an empty version,
// look for the one provided by the user.
if (typeof Web3 == "object" && Object.keys(Web3).length == 0) {
  Web3 = global.Web3;
}

var contract = (function(module) {

  // Planned for future features, logging, etc.
  function Provider(provider) {
    this.provider = provider;
  }

  Provider.prototype.send = function() {
    return this.provider.send.apply(this.provider, arguments);
  };

  Provider.prototype.sendAsync = function() {
    return this.provider.sendAsync.apply(this.provider, arguments);
  };

  var BigNumber = (new Web3()).toBigNumber(0).constructor;

  var Utils = {
    is_object: function(val) {
      return typeof val == "object" && !Array.isArray(val);
    },
    is_big_number: function(val) {
      if (typeof val != "object") return false;

      // Instanceof won't work because we have multiple versions of Web3.
      try {
        new BigNumber(val);
        return true;
      } catch (e) {
        return false;
      }
    },
    decodeLogs: function(C, instance, logs) {
      return logs.map(function(log) {
        var logABI = C.events[log.topics[0]];

        if (logABI == null) {
          return null;
        }

        // This function has been adapted from web3's SolidityEvent.decode() method,
        // and built to work with ethjs-abi.

        var copy = Utils.merge({}, log);

        function partialABI(fullABI, indexed) {
          var inputs = fullABI.inputs.filter(function (i) {
            return i.indexed === indexed;
          });

          var partial = {
            inputs: inputs,
            name: fullABI.name,
            type: fullABI.type,
            anonymous: fullABI.anonymous
          };

          return partial;
        }

        var argTopics = logABI.anonymous ? copy.topics : copy.topics.slice(1);
        var indexedData = "0x" + argTopics.map(function (topics) { return topics.slice(2); }).join("");
        var indexedParams = ethJSABI.decodeEvent(partialABI(logABI, true), indexedData);

        var notIndexedData = copy.data;
        var notIndexedParams = ethJSABI.decodeEvent(partialABI(logABI, false), notIndexedData);

        copy.event = logABI.name;

        copy.args = logABI.inputs.reduce(function (acc, current) {
          var val = indexedParams[current.name];

          if (val === undefined) {
            val = notIndexedParams[current.name];
          }

          acc[current.name] = val;
          return acc;
        }, {});

        Object.keys(copy.args).forEach(function(key) {
          var val = copy.args[key];

          // We have BN. Convert it to BigNumber
          if (val.constructor.isBN) {
            copy.args[key] = C.web3.toBigNumber("0x" + val.toString(16));
          }
        });

        delete copy.data;
        delete copy.topics;

        return copy;
      }).filter(function(log) {
        return log != null;
      });
    },
    promisifyFunction: function(fn, C) {
      var self = this;
      return function() {
        var instance = this;

        var args = Array.prototype.slice.call(arguments);
        var tx_params = {};
        var last_arg = args[args.length - 1];

        // It's only tx_params if it's an object and not a BigNumber.
        if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
          tx_params = args.pop();
        }

        tx_params = Utils.merge(C.class_defaults, tx_params);

        return C.detectNetwork().then(function() {
          return new Promise(function(accept, reject) {
            var callback = function(error, result) {
              if (error != null) {
                reject(error);
              } else {
                accept(result);
              }
            };
            args.push(tx_params, callback);
            fn.apply(instance.contract, args);
          });
        });
      };
    },
    synchronizeFunction: function(fn, instance, C) {
      var self = this;
      return function() {
        var args = Array.prototype.slice.call(arguments);
        var tx_params = {};
        var last_arg = args[args.length - 1];

        // It's only tx_params if it's an object and not a BigNumber.
        if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
          tx_params = args.pop();
        }

        tx_params = Utils.merge(C.class_defaults, tx_params);

        return C.detectNetwork().then(function() {
          return new Promise(function(accept, reject) {
            var callback = function(error, tx) {
              if (error != null) {
                reject(error);
                return;
              }

              var timeout = C.synchronization_timeout || 240000;
              var start = new Date().getTime();

              var make_attempt = function() {
                C.web3.eth.getTransactionReceipt(tx, function(err, receipt) {
                  if (err) return reject(err);

                  if (receipt != null) {
                    return accept({
                      tx: tx,
                      receipt: receipt,
                      logs: Utils.decodeLogs(C, instance, receipt.logs)
                    });
                  }

                  if (timeout > 0 && new Date().getTime() - start > timeout) {
                    return reject(new Error("Transaction " + tx + " wasn't processed in " + (timeout / 1000) + " seconds!"));
                  }

                  setTimeout(make_attempt, 1000);
                });
              };

              make_attempt();
            };

            args.push(tx_params, callback);
            fn.apply(self, args);
          });
        });
      };
    },
    merge: function() {
      var merged = {};
      var args = Array.prototype.slice.call(arguments);

      for (var i = 0; i < args.length; i++) {
        var object = args[i];
        var keys = Object.keys(object);
        for (var j = 0; j < keys.length; j++) {
          var key = keys[j];
          var value = object[key];
          merged[key] = value;
        }
      }

      return merged;
    },
    parallel: function (arr, callback) {
      callback = callback || function () {};
      if (!arr.length) {
        return callback(null, []);
      }
      var index = 0;
      var results = new Array(arr.length);
      arr.forEach(function (fn, position) {
        fn(function (err, result) {
          if (err) {
            callback(err);
            callback = function () {};
          } else {
            index++;
            results[position] = result;
            if (index >= arr.length) {
              callback(null, results);
            }
          }
        });
      });
    },
    bootstrap: function(fn) {
      // Add our static methods
      Object.keys(fn._static_methods).forEach(function(key) {
        fn[key] = fn._static_methods[key].bind(fn);
      });

      // Add our properties.
      Object.keys(fn._properties).forEach(function(key) {
        fn.addProp(key, fn._properties[key]);
      });

      return fn;
    }
  };

  // Accepts a contract object created with web3.eth.contract.
  // Optionally, if called without `new`, accepts a network_id and will
  // create a new version of the contract abstraction with that network_id set.
  function Contract(contract) {
    var self = this;
    var constructor = this.constructor;
    this.abi = constructor.abi;

    if (typeof contract == "string") {
      var address = contract;
      var contract_class = constructor.web3.eth.contract(this.abi);
      contract = contract_class.at(address);
    }

    this.contract = contract;

    // Provision our functions.
    for (var i = 0; i < this.abi.length; i++) {
      var item = this.abi[i];
      if (item.type == "function") {
        if (item.constant == true) {
          this[item.name] = Utils.promisifyFunction(contract[item.name], constructor);
        } else {
          this[item.name] = Utils.synchronizeFunction(contract[item.name], this, constructor);
        }

        this[item.name].call = Utils.promisifyFunction(contract[item.name].call, constructor);
        this[item.name].sendTransaction = Utils.promisifyFunction(contract[item.name].sendTransaction, constructor);
        this[item.name].request = contract[item.name].request;
        this[item.name].estimateGas = Utils.promisifyFunction(contract[item.name].estimateGas, constructor);
      }

      if (item.type == "event") {
        this[item.name] = contract[item.name];
      }
    }

    this.sendTransaction = Utils.synchronizeFunction(function(tx_params, callback) {
      if (typeof tx_params == "function") {
        callback = tx_params;
        tx_params = {};
      }

      tx_params.to = self.address;

      constructor.web3.eth.sendTransaction.apply(constructor.web3.eth, [tx_params, callback]);
    }, this, constructor);

    this.send = function(value) {
      return self.sendTransaction({value: value});
    };

    this.allEvents = contract.allEvents;
    this.address = contract.address;
    this.transactionHash = contract.transactionHash;
  };

  Contract._static_methods = {
    setProvider: function(provider) {
      if (!provider) {
        throw new Error("Invalid provider passed to setProvider(); provider is " + provider);
      }

      var wrapped = new Provider(provider);
      this.web3.setProvider(wrapped);
      this.currentProvider = provider;
    },

    new: function() {
      var self = this;

      if (this.currentProvider == null) {
        throw new Error(this.contract_name + " error: Please call setProvider() first before calling new().");
      }

      var args = Array.prototype.slice.call(arguments);

      if (!this.unlinked_binary) {
        throw new Error(this._json.contract_name + " error: contract binary not set. Can't deploy new instance.");
      }

      return self.detectNetwork().then(function(network_id) {
        // After the network is set, check to make sure everything's ship shape.
        var regex = /__[^_]+_+/g;
        var unlinked_libraries = self.binary.match(regex);

        if (unlinked_libraries != null) {
          unlinked_libraries = unlinked_libraries.map(function(name) {
            // Remove underscores
            return name.replace(/_/g, "");
          }).sort().filter(function(name, index, arr) {
            // Remove duplicates
            if (index + 1 >= arr.length) {
              return true;
            }

            return name != arr[index + 1];
          }).join(", ");

          throw new Error(self.contract_name + " contains unresolved libraries. You must deploy and link the following libraries before you can deploy a new version of " + self._json.contract_name + ": " + unlinked_libraries);
        }
      }).then(function() {
        return new Promise(function(accept, reject) {
          var contract_class = self.web3.eth.contract(self.abi);
          var tx_params = {};
          var last_arg = args[args.length - 1];

          // It's only tx_params if it's an object and not a BigNumber.
          if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
            tx_params = args.pop();
          }

          tx_params = Utils.merge(self.class_defaults, tx_params);

          if (tx_params.data == null) {
            tx_params.data = self.binary;
          }

          // web3 0.9.0 and above calls new this callback twice.
          // Why, I have no idea...
          var intermediary = function(err, web3_instance) {
            if (err != null) {
              reject(err);
              return;
            }

            if (err == null && web3_instance != null && web3_instance.address != null) {
              accept(new self(web3_instance));
            }
          };

          args.push(tx_params, intermediary);
          contract_class.new.apply(contract_class, args);
        });
      });
    },

    at: function(address) {
      var self = this;

      if (address == null || typeof address != "string" || address.length != 42) {
        throw new Error("Invalid address passed to " + this._json.contract_name + ".at(): " + address);
      }

      var contract = new this(address);

      // Add thennable to allow people opt into new recommended usage.
      contract.then = function(fn) {
        return self.detectNetwork().then(function(network_id) {
          var instance = new self(address);

          return new Promise(function(accept, reject) {
            self.web3.eth.getCode(address, function(err, code) {
              if (err) return reject(err);

              if (!code || new BigNumber(code).eq(0)) {
                return reject(new Error("Cannot create instance of " + self.contract_name + "; no code at address " + address));
              }

              accept(instance);
            });
          });
        }).then(fn);
      };

      return contract;
    },

    deployed: function() {
      var self = this;
      return self.detectNetwork().then(function() {
        // We don't have a network config for the one we found
        if (self._json.networks[self.network_id] == null) {
          throw new Error(self.contract_name + " has not been deployed to detected network (network/artifact mismatch)");
        }

        // If we found the network but it's not deployed
        if (!self.isDeployed()) {
          throw new Error(self.contract_name + " has not been deployed to detected network (" + self.network_id + ")");
        }

        return new self(self.address);
      });
    },

    defaults: function(class_defaults) {
      if (this.class_defaults == null) {
        this.class_defaults = {};
      }

      if (class_defaults == null) {
        class_defaults = {};
      }

      var self = this;
      Object.keys(class_defaults).forEach(function(key) {
        var value = class_defaults[key];
        self.class_defaults[key] = value;
      });

      return this.class_defaults;
    },

    hasNetwork: function(network_id) {
      return this._json.networks[network_id + ""] != null;
    },

    isDeployed: function() {
      if (this.network_id == null) {
        return false;
      }

      if (this._json.networks[this.network_id] == null) {
        return false;
      }

      return !!this.network.address;
    },

    detectNetwork: function() {
      var self = this;

      return new Promise(function(accept, reject) {
        // Try to detect the network we have artifacts for.
        if (self.network_id) {
          // We have a network id and a configuration, let's go with it.
          if (self.networks[self.network_id] != null) {
            return accept(self.network_id);
          }
        }

        self.web3.version.getNetwork(function(err, result) {
          if (err) return reject(err);

          var network_id = result.toString();

          // If we found the network via a number, let's use that.
          if (self.hasNetwork(network_id)) {
            self.setNetwork(network_id);
            return accept();
          }

          // Otherwise, go through all the networks that are listed as
          // blockchain uris and see if they match.
          var uris = Object.keys(self._json.networks).filter(function(network) {
            return network.indexOf("blockchain://") == 0;
          });

          var matches = uris.map(function(uri) {
            return BlockchainUtils.matches.bind(BlockchainUtils, uri, self.web3.currentProvider);
          });

          Utils.parallel(matches, function(err, results) {
            if (err) return reject(err);

            for (var i = 0; i < results.length; i++) {
              if (results[i]) {
                self.setNetwork(uris[i]);
                return accept();
              }
            }

            // We found nothing. Set the network id to whatever the provider states.
            self.setNetwork(network_id);

            accept();
          });

        });
      });
    },

    setNetwork: function(network_id) {
      if (!network_id) return;
      this.network_id = network_id + "";
    },

    // Overrides the deployed address to null.
    // You must call this explicitly so you don't inadvertently do this otherwise.
    resetAddress: function() {
      delete this.network.address;
    },

    link: function(name, address) {
      var self = this;

      if (typeof name == "function") {
        var contract = name;

        if (contract.isDeployed() == false) {
          throw new Error("Cannot link contract without an address.");
        }

        this.link(contract.contract_name, contract.address);

        // Merge events so this contract knows about library's events
        Object.keys(contract.events).forEach(function(topic) {
          self.network.events[topic] = contract.events[topic];
        });

        return;
      }

      if (typeof name == "object") {
        var obj = name;
        Object.keys(obj).forEach(function(name) {
          var a = obj[name];
          self.link(name, a);
        });
        return;
      }

      if (this._json.networks[this.network_id] == null) {
        this._json.networks[this.network_id] = {
          events: {},
          links: {}
        };
      }

      this.network.links[name] = address;
    },

    clone: function(options) {
      var self = this;
      var temp = function TruffleContract() {
        this.constructor = temp;
        return Contract.apply(this, arguments);
      };

      var json = options;
      var network_id;

      if (typeof options != "object") {
        json = self._json;
        network_id = options;
        options = {};
      }

      temp.prototype = Object.create(self.prototype);

      temp._static_methods = this._static_methods;
      temp._properties = this._properties;

      temp._property_values = {};
      temp._json = json || {};

      Utils.bootstrap(temp);

      temp.web3 = new Web3();
      temp.class_defaults = temp.prototype.defaults || {};

      if (network_id) {
        temp.setNetwork(network_id);
      }

      // Copy over custom options
      Object.keys(options).forEach(function(key) {
        if (key.indexOf("x-") != 0) return;
        temp[key] = options[key];
      });

      return temp;
    },

    addProp: function(key, fn) {
      var self = this;

      var getter = function() {
        if (fn.get != null) {
          return fn.get.call(self);
        }

        return self._property_values[key] || fn.call(self);
      }
      var setter = function(val) {
        if (fn.set != null) {
          fn.set.call(self, val);
          return;
        }

        // If there's not a setter, then the property is immutable.
        throw new Error(key + " property is immutable");
      };

      var definition = {};
      definition.enumerable = false;
      definition.configurable = false;
      definition.get = getter;
      definition.set = setter;

      Object.defineProperty(this, key, definition);
    },

    toJSON: function() {
      return this._json;
    }
  };

  // Getter functions are scoped to Contract object.
  Contract._properties = {
    contract_name: {
      get: function() {
        return this._json.contract_name;
      },
      set: function(val) {
        this._json.contract_name = val;
      }
    },
    abi: {
      get: function() {
        return this._json.abi;
      },
      set: function(val) {
        this._json.abi = val;
      }
    },
    network: function() {
      var network_id = this.network_id;

      if (network_id == null) {
        throw new Error(this.contract_name + " has no network id set, cannot lookup artifact data. Either set the network manually using " + this.contract_name + ".setNetwork(), run " + this.contract_name + ".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.");
      }

      // TODO: this might be bad; setting a value on a get.
      if (this._json.networks[network_id] == null) {
        throw new Error(this.contract_name + " has no network configuration for its current network id (" + network_id + ").");
      }

      return this._json.networks[network_id];
    },
    networks: function() {
      return this._json.networks;
    },
    address: {
      get: function() {
        var address = this.network.address;

        if (address == null) {
          throw new Error("Cannot find deployed address: " + this.contract_name + " not deployed or address not set.");
        }

        return address;
      },
      set: function(val) {
        if (val == null) {
          throw new Error("Cannot set deployed address; malformed value: " + val);
        }

        var network_id = this.network_id;

        if (network_id == null) {
          throw new Error(this.contract_name + " has no network id set, cannot lookup artifact data. Either set the network manually using " + this.contract_name + ".setNetwork(), run " + this.contract_name + ".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.");
        }

        // Create a network if we don't have one.
        if (this._json.networks[network_id] == null) {
          this._json.networks[network_id] = {
            events: {},
            links: {}
          };
        }

        // Finally, set the address.
        this.network.address = val;
      }
    },
    links: function() {
      if (this._json.networks[this.network_id] == null) {
        return {};
      }

      return this.network.links || {};
    },
    events: function() {
      // helper web3; not used for provider
      var web3 = new Web3();

      var events;

      if (this._json.networks[this.network_id] == null) {
        events = {};
      } else {
        events = this.network.events || {};
      }

      // Merge abi events with whatever's returned.
      var abi = this.abi;

      abi.forEach(function(item) {
        if (item.type != "event") return;

        var signature = item.name + "(";

        item.inputs.forEach(function(input, index) {
          signature += input.type;

          if (index < item.inputs.length - 1) {
            signature += ",";
          }
        });

        signature += ")";

        var topic = web3.sha3(signature);

        events[topic] = item;
      });

      return events;
    },
    binary: function() {
      var self = this;
      var binary = this.unlinked_binary;

      Object.keys(this.links).forEach(function(library_name) {
        var library_address = self.links[library_name];
        var regex = new RegExp("__" + library_name + "_*", "g");

        binary = binary.replace(regex, library_address.replace("0x", ""));
      });

      return binary;
    },
    unlinked_binary: {
      get: function() {
        return this._json.unlinked_binary;
      },
      set: function(val) {
        // TODO: Ensure 0x prefix.
        this._json.unlinked_binary = val;
      }
    },
    schema_version: function() {
      return this._json.schema_version;
    },
    updated_at: function() {
      try {
        return this.network.updated_at || this._json.updated_at;
      } catch (e) {
        return this._json.updated_at;
      }
    }
  };

  Utils.bootstrap(Contract);

  module.exports = Contract;

  return Contract;
})(module || {});

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 733 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(743);

// dont override global variable
if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') {
    window.Web3 = Web3;
}

module.exports = Web3;


/***/ }),
/* 734 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeAddress is a prootype that represents address type
 * It matches:
 * address
 * address[]
 * address[4]
 * address[][]
 * address[3][]
 * address[][6][], ...
 */
var SolidityTypeAddress = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputAddress;
};

SolidityTypeAddress.prototype = new SolidityType({});
SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;

SolidityTypeAddress.prototype.isType = function (name) {
    return !!name.match(/address(\[([0-9]*)\])?/);
};

SolidityTypeAddress.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeAddress;



/***/ }),
/* 735 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeBool is a prootype that represents bool type
 * It matches:
 * bool
 * bool[]
 * bool[4]
 * bool[][]
 * bool[3][]
 * bool[][6][], ...
 */
var SolidityTypeBool = function () {
    this._inputFormatter = f.formatInputBool;
    this._outputFormatter = f.formatOutputBool;
};

SolidityTypeBool.prototype = new SolidityType({});
SolidityTypeBool.prototype.constructor = SolidityTypeBool;

SolidityTypeBool.prototype.isType = function (name) {
    return !!name.match(/^bool(\[([0-9]*)\])*$/);
};

SolidityTypeBool.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeBool;


/***/ }),
/* 736 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeBytes is a prootype that represents bytes type
 * It matches:
 * bytes
 * bytes[]
 * bytes[4]
 * bytes[][]
 * bytes[3][]
 * bytes[][6][], ...
 * bytes32
 * bytes64[]
 * bytes8[4]
 * bytes256[][]
 * bytes[3][]
 * bytes64[][6][], ...
 */
var SolidityTypeBytes = function () {
    this._inputFormatter = f.formatInputBytes;
    this._outputFormatter = f.formatOutputBytes;
};

SolidityTypeBytes.prototype = new SolidityType({});
SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;

SolidityTypeBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
};

SolidityTypeBytes.prototype.staticPartLength = function (name) {
    var matches = name.match(/^bytes([0-9]*)/);
    var size = parseInt(matches[1]);
    return size * this.staticArrayLength(name);
};

module.exports = SolidityTypeBytes;


/***/ }),
/* 737 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

var SolidityTypeDynamicBytes = function () {
    this._inputFormatter = f.formatInputDynamicBytes;
    this._outputFormatter = f.formatOutputDynamicBytes;
};

SolidityTypeDynamicBytes.prototype = new SolidityType({});
SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;

SolidityTypeDynamicBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
};

SolidityTypeDynamicBytes.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeDynamicBytes;



/***/ }),
/* 738 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeInt is a prootype that represents int type
 * It matches:
 * int
 * int[]
 * int[4]
 * int[][]
 * int[3][]
 * int[][6][], ...
 * int32
 * int64[]
 * int8[4]
 * int256[][]
 * int[3][]
 * int64[][6][], ...
 */
var SolidityTypeInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputInt;
};

SolidityTypeInt.prototype = new SolidityType({});
SolidityTypeInt.prototype.constructor = SolidityTypeInt;

SolidityTypeInt.prototype.isType = function (name) {
    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
};

SolidityTypeInt.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeInt;


/***/ }),
/* 739 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeReal is a prootype that represents real type
 * It matches:
 * real
 * real[]
 * real[4]
 * real[][]
 * real[3][]
 * real[][6][], ...
 * real32
 * real64[]
 * real8[4]
 * real256[][]
 * real[3][]
 * real64[][6][], ...
 */
var SolidityTypeReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputReal;
};

SolidityTypeReal.prototype = new SolidityType({});
SolidityTypeReal.prototype.constructor = SolidityTypeReal;

SolidityTypeReal.prototype.isType = function (name) {
    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
};

SolidityTypeReal.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeReal;


/***/ }),
/* 740 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

var SolidityTypeString = function () {
    this._inputFormatter = f.formatInputString;
    this._outputFormatter = f.formatOutputString;
};

SolidityTypeString.prototype = new SolidityType({});
SolidityTypeString.prototype.constructor = SolidityTypeString;

SolidityTypeString.prototype.isType = function (name) {
    return !!name.match(/^string(\[([0-9]*)\])*$/);
};

SolidityTypeString.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

SolidityTypeString.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeString;



/***/ }),
/* 741 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeUInt is a prootype that represents uint type
 * It matches:
 * uint
 * uint[]
 * uint[4]
 * uint[][]
 * uint[3][]
 * uint[][6][], ...
 * uint32
 * uint64[]
 * uint8[4]
 * uint256[][]
 * uint[3][]
 * uint64[][6][], ...
 */
var SolidityTypeUInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputUInt;
};

SolidityTypeUInt.prototype = new SolidityType({});
SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;

SolidityTypeUInt.prototype.isType = function (name) {
    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
};

SolidityTypeUInt.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeUInt;


/***/ }),
/* 742 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(40);
var SolidityType = __webpack_require__(49);

/**
 * SolidityTypeUReal is a prootype that represents ureal type
 * It matches:
 * ureal
 * ureal[]
 * ureal[4]
 * ureal[][]
 * ureal[3][]
 * ureal[][6][], ...
 * ureal32
 * ureal64[]
 * ureal8[4]
 * ureal256[][]
 * ureal[3][]
 * ureal64[][6][], ...
 */
var SolidityTypeUReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputUReal;
};

SolidityTypeUReal.prototype = new SolidityType({});
SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;

SolidityTypeUReal.prototype.isType = function (name) {
    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
};

SolidityTypeUReal.prototype.staticPartLength = function (name) {
    return 32 * this.staticArrayLength(name);
};

module.exports = SolidityTypeUReal;


/***/ }),
/* 743 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file web3.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var RequestManager = __webpack_require__(757);
var Iban = __webpack_require__(155);
var Eth = __webpack_require__(752);
var DB = __webpack_require__(751);
var Shh = __webpack_require__(755);
var Net = __webpack_require__(753);
var Personal = __webpack_require__(754);
var Settings = __webpack_require__(758);
var version = __webpack_require__(483);
var utils = __webpack_require__(14);
var sha3 = __webpack_require__(118);
var extend = __webpack_require__(747);
var Batch = __webpack_require__(745);
var Property = __webpack_require__(120);
var HttpProvider = __webpack_require__(749);
var IpcProvider = __webpack_require__(750);



function Web3 (provider) {
    this._requestManager = new RequestManager(provider);
    this.currentProvider = provider;
    this.eth = new Eth(this);
    this.db = new DB(this);
    this.shh = new Shh(this);
    this.net = new Net(this);
    this.personal = new Personal(this);
    this.settings = new Settings();
    this.version = {
        api: version.version
    };
    this.providers = {
        HttpProvider: HttpProvider,
        IpcProvider: IpcProvider
    };
    this._extend = extend(this);
    this._extend({
        properties: properties()
    });
}

// expose providers on the class
Web3.providers = {
    HttpProvider: HttpProvider,
    IpcProvider: IpcProvider
};

Web3.prototype.setProvider = function (provider) {
    this._requestManager.setProvider(provider);
    this.currentProvider = provider;
};

Web3.prototype.reset = function (keepIsSyncing) {
    this._requestManager.reset(keepIsSyncing);
    this.settings = new Settings();
};

Web3.prototype.toHex = utils.toHex;
Web3.prototype.toAscii = utils.toAscii;
Web3.prototype.toUtf8 = utils.toUtf8;
Web3.prototype.fromAscii = utils.fromAscii;
Web3.prototype.fromUtf8 = utils.fromUtf8;
Web3.prototype.toDecimal = utils.toDecimal;
Web3.prototype.fromDecimal = utils.fromDecimal;
Web3.prototype.toBigNumber = utils.toBigNumber;
Web3.prototype.toWei = utils.toWei;
Web3.prototype.fromWei = utils.fromWei;
Web3.prototype.isAddress = utils.isAddress;
Web3.prototype.isChecksumAddress = utils.isChecksumAddress;
Web3.prototype.toChecksumAddress = utils.toChecksumAddress;
Web3.prototype.isIBAN = utils.isIBAN;


Web3.prototype.sha3 = function(string, options) {
    return '0x' + sha3(string, options);
};

/**
 * Transforms direct icap to address
 */
Web3.prototype.fromICAP = function (icap) {
    var iban = new Iban(icap);
    return iban.address();
};

var properties = function () {
    return [
        new Property({
            name: 'version.node',
            getter: 'web3_clientVersion'
        }),
        new Property({
            name: 'version.network',
            getter: 'net_version',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.ethereum',
            getter: 'eth_protocolVersion',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.whisper',
            getter: 'shh_version',
            inputFormatter: utils.toDecimal
        })
    ];
};

Web3.prototype.isConnected = function(){
    return (this.currentProvider && this.currentProvider.isConnected());
};

Web3.prototype.createBatch = function () {
    return new Batch(this);
};

module.exports = Web3;



/***/ }),
/* 744 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file allevents.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var sha3 = __webpack_require__(118);
var SolidityEvent = __webpack_require__(329);
var formatters = __webpack_require__(50);
var utils = __webpack_require__(14);
var Filter = __webpack_require__(154);
var watches = __webpack_require__(156);

var AllSolidityEvents = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._json = json;
    this._address = address;
};

AllSolidityEvents.prototype.encode = function (options) {
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.address = this._address;

    return result;
};

AllSolidityEvents.prototype.decode = function (data) {
    data.data = data.data || '';
    data.topics = data.topics || [];

    var eventTopic = data.topics[0].slice(2);
    var match = this._json.filter(function (j) {
        return eventTopic === sha3(utils.transformToFullName(j));
    })[0];

    if (!match) { // cannot find matching event?
        console.warn('cannot find event for log');
        return data;
    }

    var event = new SolidityEvent(this._requestManager, match, this._address);
    return event.decode(data);
};

AllSolidityEvents.prototype.execute = function (options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 1)
            options = null;
    }

    var o = this.encode(options);
    var formatter = this.decode.bind(this);
    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
};

AllSolidityEvents.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    contract.allEvents = execute;
};

module.exports = AllSolidityEvents;



/***/ }),
/* 745 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file batch.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Jsonrpc = __webpack_require__(330);
var errors = __webpack_require__(119);

var Batch = function (web3) {
    this.requestManager = web3._requestManager;
    this.requests = [];
};

/**
 * Should be called to add create new request to batch request
 *
 * @method add
 * @param {Object} jsonrpc requet object
 */
Batch.prototype.add = function (request) {
    this.requests.push(request);
};

/**
 * Should be called to execute batch request
 *
 * @method execute
 */
Batch.prototype.execute = function () {
    var requests = this.requests;
    this.requestManager.sendBatch(requests, function (err, results) {
        results = results || [];
        requests.map(function (request, index) {
            return results[index] || {};
        }).forEach(function (result, index) {
            if (requests[index].callback) {

                if (!Jsonrpc.getInstance().isValidResponse(result)) {
                    return requests[index].callback(errors.InvalidResponse(result));
                }

                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
            }
        });
    }); 
};

module.exports = Batch;



/***/ }),
/* 746 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file contract.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(14);
var coder = __webpack_require__(213);
var SolidityEvent = __webpack_require__(329);
var SolidityFunction = __webpack_require__(748);
var AllEvents = __webpack_require__(744);

/**
 * Should be called to encode constructor params
 *
 * @method encodeConstructorParams
 * @param {Array} abi
 * @param {Array} constructor params
 */
var encodeConstructorParams = function (abi, params) {
    return abi.filter(function (json) {
        return json.type === 'constructor' && json.inputs.length === params.length;
    }).map(function (json) {
        return json.inputs.map(function (input) {
            return input.type;
        });
    }).map(function (types) {
        return coder.encodeParams(types, params);
    })[0] || '';
};

/**
 * Should be called to add functions to contract object
 *
 * @method addFunctionsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addFunctionsToContract = function (contract) {
    contract.abi.filter(function (json) {
        return json.type === 'function';
    }).map(function (json) {
        return new SolidityFunction(contract._eth, json, contract.address);
    }).forEach(function (f) {
        f.attachToContract(contract);
    });
};

/**
 * Should be called to add events to contract object
 *
 * @method addEventsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addEventsToContract = function (contract) {
    var events = contract.abi.filter(function (json) {
        return json.type === 'event';
    });

    var All = new AllEvents(contract._eth._requestManager, events, contract.address);
    All.attachToContract(contract);

    events.map(function (json) {
        return new SolidityEvent(contract._eth._requestManager, json, contract.address);
    }).forEach(function (e) {
        e.attachToContract(contract);
    });
};


/**
 * Should be called to check if the contract gets properly deployed on the blockchain.
 *
 * @method checkForContractAddress
 * @param {Object} contract
 * @param {Function} callback
 * @returns {Undefined}
 */
var checkForContractAddress = function(contract, callback){
    var count = 0,
        callbackFired = false;

    // wait for receipt
    var filter = contract._eth.filter('latest', function(e){
        if (!e && !callbackFired) {
            count++;

            // stop watching after 50 blocks (timeout)
            if (count > 50) {

                filter.stopWatching();
                callbackFired = true;

                if (callback)
                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
                else
                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');


            } else {

                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
                    if(receipt && !callbackFired) {

                        contract._eth.getCode(receipt.contractAddress, function(e, code){
                            /*jshint maxcomplexity: 6 */

                            if(callbackFired || !code)
                                return;

                            filter.stopWatching();
                            callbackFired = true;

                            if(code.length > 2) {

                                // console.log('Contract code deployed!');

                                contract.address = receipt.contractAddress;

                                // attach events and methods again after we have
                                addFunctionsToContract(contract);
                                addEventsToContract(contract);

                                // call callback for the second time
                                if(callback)
                                    callback(null, contract);

                            } else {
                                if(callback)
                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
                                else
                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
                            }
                        });
                    }
                });
            }
        }
    });
};

/**
 * Should be called to create new ContractFactory instance
 *
 * @method ContractFactory
 * @param {Array} abi
 */
var ContractFactory = function (eth, abi) {
    this.eth = eth;
    this.abi = abi;

    /**
     * Should be called to create new contract on a blockchain
     *
     * @method new
     * @param {Any} contract constructor param1 (optional)
     * @param {Any} contract constructor param2 (optional)
     * @param {Object} contract transaction object (required)
     * @param {Function} callback
     * @returns {Contract} returns contract instance
     */
    this.new = function () {
        var contract = new Contract(this.eth, this.abi);

        // parse arguments
        var options = {}; // required!
        var callback;

        var args = Array.prototype.slice.call(arguments);
        if (utils.isFunction(args[args.length - 1])) {
            callback = args.pop();
        }

        var last = args[args.length - 1];
        if (utils.isObject(last) && !utils.isArray(last)) {
            options = args.pop();
        }

        var bytes = encodeConstructorParams(this.abi, args);
        options.data += bytes;

        if (callback) {

            // wait for the contract address adn check if the code was deployed
            this.eth.sendTransaction(options, function (err, hash) {
                if (err) {
                    callback(err);
                } else {
                    // add the transaction hash
                    contract.transactionHash = hash;

                    // call callback for the first time
                    callback(null, contract);

                    checkForContractAddress(contract, callback);
                }
            });
        } else {
            var hash = this.eth.sendTransaction(options);
            // add the transaction hash
            contract.transactionHash = hash;
            checkForContractAddress(contract);
        }

        return contract;
    };

    this.new.getData = this.getData.bind(this);
};

/**
 * Should be called to create new ContractFactory
 *
 * @method contract
 * @param {Array} abi
 * @returns {ContractFactory} new contract factory
 */
//var contract = function (abi) {
    //return new ContractFactory(abi);
//};



/**
 * Should be called to get access to existing contract on a blockchain
 *
 * @method at
 * @param {Address} contract address (required)
 * @param {Function} callback {optional)
 * @returns {Contract} returns contract if no callback was passed,
 * otherwise calls callback function (err, contract)
 */
ContractFactory.prototype.at = function (address, callback) {
    var contract = new Contract(this.eth, this.abi, address);

    // this functions are not part of prototype,
    // because we dont want to spoil the interface
    addFunctionsToContract(contract);
    addEventsToContract(contract);

    if (callback) {
        callback(null, contract);
    }
    return contract;
};

/**
 * Gets the data, which is data to deploy plus constructor params
 *
 * @method getData
 */
ContractFactory.prototype.getData = function () {
    var options = {}; // required!
    var args = Array.prototype.slice.call(arguments);

    var last = args[args.length - 1];
    if (utils.isObject(last) && !utils.isArray(last)) {
        options = args.pop();
    }

    var bytes = encodeConstructorParams(this.abi, args);
    options.data += bytes;

    return options.data;
};

/**
 * Should be called to create new contract instance
 *
 * @method Contract
 * @param {Array} abi
 * @param {Address} contract address
 */
var Contract = function (eth, abi, address) {
    this._eth = eth;
    this.transactionHash = null;
    this.address = address;
    this.abi = abi;
};

module.exports = ContractFactory;


/***/ }),
/* 747 */
/***/ (function(module, exports, __webpack_require__) {

var formatters = __webpack_require__(50);
var utils = __webpack_require__(14);
var Method = __webpack_require__(94);
var Property = __webpack_require__(120);

// TODO: refactor, so the input params are not altered.
// it's necessary to make same 'extension' work with multiple providers
var extend = function (web3) {
    /* jshint maxcomplexity:5 */
    var ex = function (extension) {

        var extendedObject;
        if (extension.property) {
            if (!web3[extension.property]) {
                web3[extension.property] = {};
            }
            extendedObject = web3[extension.property];
        } else {
            extendedObject = web3;
        }

        if (extension.methods) {
            extension.methods.forEach(function (method) {
                method.attachToObject(extendedObject);
                method.setRequestManager(web3._requestManager);
            });
        }

        if (extension.properties) {
            extension.properties.forEach(function (property) {
                property.attachToObject(extendedObject);
                property.setRequestManager(web3._requestManager);
            });
        }
    };

    ex.formatters = formatters; 
    ex.utils = utils;
    ex.Method = Method;
    ex.Property = Property;

    return ex;
};



module.exports = extend;



/***/ }),
/* 748 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file function.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var coder = __webpack_require__(213);
var utils = __webpack_require__(14);
var formatters = __webpack_require__(50);
var sha3 = __webpack_require__(118);

/**
 * This prototype should be used to call/sendTransaction to solidity functions
 */
var SolidityFunction = function (eth, json, address) {
    this._eth = eth;
    this._inputTypes = json.inputs.map(function (i) {
        return i.type;
    });
    this._outputTypes = json.outputs.map(function (i) {
        return i.type;
    });
    this._constant = json.constant;
    this._name = utils.transformToFullName(json);
    this._address = address;
};

SolidityFunction.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

SolidityFunction.prototype.extractDefaultBlock = function (args) {
    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
    }
};

/**
 * Should be used to create payload from arguments
 *
 * @method toPayload
 * @param {Array} solidity function params
 * @param {Object} optional payload options
 */
SolidityFunction.prototype.toPayload = function (args) {
    var options = {};
    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
        options = args[args.length - 1];
    }
    options.to = this._address;
    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
    return options;
};

/**
 * Should be used to get function signature
 *
 * @method signature
 * @return {String} function signature
 */
SolidityFunction.prototype.signature = function () {
    return sha3(this._name).slice(0, 8);
};


SolidityFunction.prototype.unpackOutput = function (output) {
    if (!output) {
        return;
    }

    output = output.length >= 2 ? output.slice(2) : output;
    var result = coder.decodeParams(this._outputTypes, output);
    return result.length === 1 ? result[0] : result;
};

/**
 * Calls a contract function.
 *
 * @method call
 * @param {...Object} Contract function arguments
 * @param {function} If the last argument is a function, the contract function
 *   call will be asynchronous, and the callback will be passed the
 *   error and result.
 * @return {String} output bytes
 */
SolidityFunction.prototype.call = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var defaultBlock = this.extractDefaultBlock(args);
    var payload = this.toPayload(args);


    if (!callback) {
        var output = this._eth.call(payload, defaultBlock);
        return this.unpackOutput(output);
    } 
        
    var self = this;
    this._eth.call(payload, defaultBlock, function (error, output) {
        callback(error, self.unpackOutput(output));
    });
};

/**
 * Should be used to sendTransaction to solidity function
 *
 * @method sendTransaction
 */
SolidityFunction.prototype.sendTransaction = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (!callback) {
        return this._eth.sendTransaction(payload);
    }

    this._eth.sendTransaction(payload, callback);
};

/**
 * Should be used to estimateGas of solidity function
 *
 * @method estimateGas
 */
SolidityFunction.prototype.estimateGas = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (!callback) {
        return this._eth.estimateGas(payload);
    }

    this._eth.estimateGas(payload, callback);
};

/**
 * Return the encoded data of the call
 *
 * @method getData
 * @return {String} the encoded data
 */
SolidityFunction.prototype.getData = function () {
    var args = Array.prototype.slice.call(arguments);
    var payload = this.toPayload(args);

    return payload.data;
};

/**
 * Should be used to get function display name
 *
 * @method displayName
 * @return {String} display name of the function
 */
SolidityFunction.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get function type name
 *
 * @method typeName
 * @return {String} type name of the function
 */
SolidityFunction.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be called to get rpc requests from solidity function
 *
 * @method request
 * @returns {Object}
 */
SolidityFunction.prototype.request = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);
    var format = this.unpackOutput.bind(this);
    
    return {
        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
        callback: callback,
        params: [payload], 
        format: format
    };
};

/**
 * Should be called to execute function
 *
 * @method execute
 */
SolidityFunction.prototype.execute = function () {
    var transaction = !this._constant;

    // send transaction
    if (transaction) {
        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
    }

    // call
    return this.call.apply(this, Array.prototype.slice.call(arguments));
};

/**
 * Should be called to attach function to contract
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityFunction.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    execute.request = this.request.bind(this);
    execute.call = this.call.bind(this);
    execute.sendTransaction = this.sendTransaction.bind(this);
    execute.estimateGas = this.estimateGas.bind(this);
    execute.getData = this.getData.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = execute; // circular!!!!
};

module.exports = SolidityFunction;



/***/ }),
/* 749 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file httpprovider.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var errors = __webpack_require__(119);

// workaround to use httpprovider in different envs
var XMLHttpRequest; // jshint ignore: line

// meteor server environment
if (typeof Meteor !== 'undefined' && Meteor.isServer) { // jshint ignore: line
    XMLHttpRequest = Npm.require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line

// browser
} else if (typeof window !== 'undefined' && window.XMLHttpRequest) {
    XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line

// node
} else {
    XMLHttpRequest = __webpack_require__(174).XMLHttpRequest; // jshint ignore: line
}

/**
 * HttpProvider should be used to send rpc calls over http
 */
var HttpProvider = function (host) {
    this.host = host || 'http://localhost:8545';
};

/**
 * Should be called to prepare new XMLHttpRequest
 *
 * @method prepareRequest
 * @param {Boolean} true if request should be async
 * @return {XMLHttpRequest} object
 */
HttpProvider.prototype.prepareRequest = function (async) {
    var request = new XMLHttpRequest();
    request.open('POST', this.host, async);
    request.setRequestHeader('Content-Type','application/json');
    return request;
};

/**
 * Should be called to make sync request
 *
 * @method send
 * @param {Object} payload
 * @return {Object} result
 */
HttpProvider.prototype.send = function (payload) {
    var request = this.prepareRequest(false);

    try {
        request.send(JSON.stringify(payload));
    } catch(error) {
        throw errors.InvalidConnection(this.host);
    }

    var result = request.responseText;

    try {
        result = JSON.parse(result);
    } catch(e) {
        throw errors.InvalidResponse(request.responseText);                
    }

    return result;
};

/**
 * Should be used to make async request
 *
 * @method sendAsync
 * @param {Object} payload
 * @param {Function} callback triggered on end with (err, result)
 */
HttpProvider.prototype.sendAsync = function (payload, callback) {
    var request = this.prepareRequest(true); 

    request.onreadystatechange = function() {
        if (request.readyState === 4) {
            var result = request.responseText;
            var error = null;

            try {
                result = JSON.parse(result);
            } catch(e) {
                error = errors.InvalidResponse(request.responseText);                
            }

            callback(error, result);
        }
    };
    
    try {
        request.send(JSON.stringify(payload));
    } catch(error) {
        callback(errors.InvalidConnection(this.host));
    }
};

/**
 * Synchronously tries to make Http request
 *
 * @method isConnected
 * @return {Boolean} returns true if request haven't failed. Otherwise false
 */
HttpProvider.prototype.isConnected = function() {
    try {
        this.send({
            id: 9999999999,
            jsonrpc: '2.0',
            method: 'net_listening',
            params: []
        });
        return true;
    } catch(e) {
        return false;
    }
};

module.exports = HttpProvider;



/***/ }),
/* 750 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ipcprovider.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var utils = __webpack_require__(14);
var errors = __webpack_require__(119);


var IpcProvider = function (path, net) {
    var _this = this;
    this.responseCallbacks = {};
    this.path = path;
    
    this.connection = net.connect({path: this.path});

    this.connection.on('error', function(e){
        console.error('IPC Connection Error', e);
        _this._timeout();
    });

    this.connection.on('end', function(){
        _this._timeout();
    }); 


    // LISTEN FOR CONNECTION RESPONSES
    this.connection.on('data', function(data) {
        /*jshint maxcomplexity: 6 */

        _this._parseResponse(data.toString()).forEach(function(result){

            var id = null;

            // get the id which matches the returned id
            if(utils.isArray(result)) {
                result.forEach(function(load){
                    if(_this.responseCallbacks[load.id])
                        id = load.id;
                });
            } else {
                id = result.id;
            }

            // fire the callback
            if(_this.responseCallbacks[id]) {
                _this.responseCallbacks[id](null, result);
                delete _this.responseCallbacks[id];
            }
        });
    });
};

/**
Will parse the response and make an array out of it.

@method _parseResponse
@param {String} data
*/
IpcProvider.prototype._parseResponse = function(data) {
    var _this = this,
        returnValues = [];
    
    // DE-CHUNKER
    var dechunkedData = data
        .replace(/\}[\n\r]?\{/g,'}|--|{') // }{
        .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{
        .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{
        .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{
        .split('|--|');

    dechunkedData.forEach(function(data){

        // prepend the last chunk
        if(_this.lastChunk)
            data = _this.lastChunk + data;

        var result = null;

        try {
            result = JSON.parse(data);

        } catch(e) {

            _this.lastChunk = data;

            // start timeout to cancel all requests
            clearTimeout(_this.lastChunkTimeout);
            _this.lastChunkTimeout = setTimeout(function(){
                _this._timeout();
                throw errors.InvalidResponse(data);
            }, 1000 * 15);

            return;
        }

        // cancel timeout and set chunk to null
        clearTimeout(_this.lastChunkTimeout);
        _this.lastChunk = null;

        if(result)
            returnValues.push(result);
    });

    return returnValues;
};


/**
Get the adds a callback to the responseCallbacks object,
which will be called if a response matching the response Id will arrive.

@method _addResponseCallback
*/
IpcProvider.prototype._addResponseCallback = function(payload, callback) {
    var id = payload.id || payload[0].id;
    var method = payload.method || payload[0].method;

    this.responseCallbacks[id] = callback;
    this.responseCallbacks[id].method = method;
};

/**
Timeout all requests when the end/error event is fired

@method _timeout
*/
IpcProvider.prototype._timeout = function() {
    for(var key in this.responseCallbacks) {
        if(this.responseCallbacks.hasOwnProperty(key)){
            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
            delete this.responseCallbacks[key];
        }
    }
};


/**
Check if the current connection is still valid.

@method isConnected
*/
IpcProvider.prototype.isConnected = function() {
    var _this = this;

    // try reconnect, when connection is gone
    if(!_this.connection.writable)
        _this.connection.connect({path: _this.path});

    return !!this.connection.writable;
};

IpcProvider.prototype.send = function (payload) {

    if(this.connection.writeSync) {
        var result;

        // try reconnect, when connection is gone
        if(!this.connection.writable)
            this.connection.connect({path: this.path});

        var data = this.connection.writeSync(JSON.stringify(payload));

        try {
            result = JSON.parse(data);
        } catch(e) {
            throw errors.InvalidResponse(data);                
        }

        return result;

    } else {
        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
    }
};

IpcProvider.prototype.sendAsync = function (payload, callback) {
    // try reconnect, when connection is gone
    if(!this.connection.writable)
        this.connection.connect({path: this.path});


    this.connection.write(JSON.stringify(payload));
    this._addResponseCallback(payload, callback);
};

module.exports = IpcProvider;



/***/ }),
/* 751 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file db.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(94);

var DB = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;
    
    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(web3._requestManager);
    });
};

var methods = function () {
    var putString = new Method({
        name: 'putString',
        call: 'db_putString',
        params: 3
    });

    var getString = new Method({
        name: 'getString',
        call: 'db_getString',
        params: 2
    });

    var putHex = new Method({
        name: 'putHex',
        call: 'db_putHex',
        params: 3
    });

    var getHex = new Method({
        name: 'getHex',
        call: 'db_getHex',
        params: 2
    });

    return [
        putString, getString, putHex, getHex
    ];
};

module.exports = DB;


/***/ }),
/* 752 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var formatters = __webpack_require__(50);
var utils = __webpack_require__(14);
var Method = __webpack_require__(94);
var Property = __webpack_require__(120);
var c = __webpack_require__(153);
var Contract = __webpack_require__(746);
var watches = __webpack_require__(156);
var Filter = __webpack_require__(154);
var IsSyncing = __webpack_require__(759);
var namereg = __webpack_require__(756);
var Iban = __webpack_require__(155);
var transfer = __webpack_require__(760);

var blockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
};

var transactionFromBlockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
};

var uncleCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
};

var getBlockTransactionCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
};

var uncleCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
};

function Eth(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) { 
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });


    this.iban = Iban;
    this.sendIBANTransaction = transfer.bind(null, this);
}

Object.defineProperty(Eth.prototype, 'defaultBlock', {
    get: function () {
        return c.defaultBlock;
    },
    set: function (val) {
        c.defaultBlock = val;
        return val;
    }
});

Object.defineProperty(Eth.prototype, 'defaultAccount', {
    get: function () {
        return c.defaultAccount;
    },
    set: function (val) {
        c.defaultAccount = val;
        return val;
    }
});

var methods = function () {
    var getBalance = new Method({
        name: 'getBalance',
        call: 'eth_getBalance',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: formatters.outputBigNumberFormatter
    });

    var getStorageAt = new Method({
        name: 'getStorageAt',
        call: 'eth_getStorageAt',
        params: 3,
        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
    });

    var getCode = new Method({
        name: 'getCode',
        call: 'eth_getCode',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var getBlock = new Method({
        name: 'getBlock',
        call: blockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
        outputFormatter: formatters.outputBlockFormatter
    });

    var getUncle = new Method({
        name: 'getUncle',
        call: uncleCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputBlockFormatter,

    });

    var getCompilers = new Method({
        name: 'getCompilers',
        call: 'eth_getCompilers',
        params: 0
    });

    var getBlockTransactionCount = new Method({
        name: 'getBlockTransactionCount',
        call: getBlockTransactionCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getBlockUncleCount = new Method({
        name: 'getBlockUncleCount',
        call: uncleCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getTransaction = new Method({
        name: 'getTransaction',
        call: 'eth_getTransactionByHash',
        params: 1,
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionFromBlock = new Method({
        name: 'getTransactionFromBlock',
        call: transactionFromBlockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionReceipt = new Method({
        name: 'getTransactionReceipt',
        call: 'eth_getTransactionReceipt',
        params: 1,
        outputFormatter: formatters.outputTransactionReceiptFormatter
    });

    var getTransactionCount = new Method({
        name: 'getTransactionCount',
        call: 'eth_getTransactionCount',
        params: 2,
        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var sendRawTransaction = new Method({
        name: 'sendRawTransaction',
        call: 'eth_sendRawTransaction',
        params: 1,
        inputFormatter: [null]
    });

    var sendTransaction = new Method({
        name: 'sendTransaction',
        call: 'eth_sendTransaction',
        params: 1,
        inputFormatter: [formatters.inputTransactionFormatter]
    });

    var sign = new Method({
        name: 'sign',
        call: 'eth_sign',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, null]
    });

    var call = new Method({
        name: 'call',
        call: 'eth_call',
        params: 2,
        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var estimateGas = new Method({
        name: 'estimateGas',
        call: 'eth_estimateGas',
        params: 1,
        inputFormatter: [formatters.inputCallFormatter],
        outputFormatter: utils.toDecimal
    });

    var compileSolidity = new Method({
        name: 'compile.solidity',
        call: 'eth_compileSolidity',
        params: 1
    });

    var compileLLL = new Method({
        name: 'compile.lll',
        call: 'eth_compileLLL',
        params: 1
    });

    var compileSerpent = new Method({
        name: 'compile.serpent',
        call: 'eth_compileSerpent',
        params: 1
    });

    var submitWork = new Method({
        name: 'submitWork',
        call: 'eth_submitWork',
        params: 3
    });

    var getWork = new Method({
        name: 'getWork',
        call: 'eth_getWork',
        params: 0
    });

    return [
        getBalance,
        getStorageAt,
        getCode,
        getBlock,
        getUncle,
        getCompilers,
        getBlockTransactionCount,
        getBlockUncleCount,
        getTransaction,
        getTransactionFromBlock,
        getTransactionReceipt,
        getTransactionCount,
        call,
        estimateGas,
        sendRawTransaction,
        sendTransaction,
        sign,
        compileSolidity,
        compileLLL,
        compileSerpent,
        submitWork,
        getWork
    ];
};


var properties = function () {
    return [
        new Property({
            name: 'coinbase',
            getter: 'eth_coinbase'
        }),
        new Property({
            name: 'mining',
            getter: 'eth_mining'
        }),
        new Property({
            name: 'hashrate',
            getter: 'eth_hashrate',
            outputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'syncing',
            getter: 'eth_syncing',
            outputFormatter: formatters.outputSyncingFormatter
        }),
        new Property({
            name: 'gasPrice',
            getter: 'eth_gasPrice',
            outputFormatter: formatters.outputBigNumberFormatter
        }),
        new Property({
            name: 'accounts',
            getter: 'eth_accounts'
        }),
        new Property({
            name: 'blockNumber',
            getter: 'eth_blockNumber',
            outputFormatter: utils.toDecimal
        })
    ];
};

Eth.prototype.contract = function (abi) {
    var factory = new Contract(this, abi);
    return factory;
};

Eth.prototype.filter = function (fil, callback) {
    return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback);
};

Eth.prototype.namereg = function () {
    return this.contract(namereg.global.abi).at(namereg.global.address);
};

Eth.prototype.icapNamereg = function () {
    return this.contract(namereg.icap.abi).at(namereg.icap.address);
};

Eth.prototype.isSyncing = function (callback) {
    return new IsSyncing(this._requestManager, callback);
};

module.exports = Eth;



/***/ }),
/* 753 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file eth.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(14);
var Property = __webpack_require__(120);

var Net = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    properties().forEach(function(p) { 
        p.attachToObject(self);
        p.setRequestManager(web3._requestManager);
    });
};

/// @returns an array of objects describing web3.eth api properties
var properties = function () {
    return [
        new Property({
            name: 'listening',
            getter: 'net_listening'
        }),
        new Property({
            name: 'peerCount',
            getter: 'net_peerCount',
            outputFormatter: utils.toDecimal
        })
    ];
};

module.exports = Net;


/***/ }),
/* 754 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var Method = __webpack_require__(94);
var Property = __webpack_require__(120);
var formatters = __webpack_require__(50);

function Personal(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });
}

var methods = function () {
    var newAccount = new Method({
        name: 'newAccount',
        call: 'personal_newAccount',
        params: 1,
        inputFormatter: [null]
    });

    var unlockAccount = new Method({
        name: 'unlockAccount',
        call: 'personal_unlockAccount',
        params: 3,
        inputFormatter: [formatters.inputAddressFormatter, null, null]
    });

    var lockAccount = new Method({
        name: 'lockAccount',
        call: 'personal_lockAccount',
        params: 1,
        inputFormatter: [formatters.inputAddressFormatter]
    });

    return [
        newAccount,
        unlockAccount,
        lockAccount
    ];
};

var properties = function () {
    return [
        new Property({
            name: 'listAccounts',
            getter: 'personal_listAccounts'
        })
    ];
};


module.exports = Personal;


/***/ }),
/* 755 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file shh.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(94);
var formatters = __webpack_require__(50);
var Filter = __webpack_require__(154);
var watches = __webpack_require__(156);

var Shh = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });
};

Shh.prototype.filter = function (fil, callback) {
    return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback);
};

var methods = function () { 

    var post = new Method({
        name: 'post', 
        call: 'shh_post', 
        params: 1,
        inputFormatter: [formatters.inputPostFormatter]
    });

    var newIdentity = new Method({
        name: 'newIdentity',
        call: 'shh_newIdentity',
        params: 0
    });

    var hasIdentity = new Method({
        name: 'hasIdentity',
        call: 'shh_hasIdentity',
        params: 1
    });

    var newGroup = new Method({
        name: 'newGroup',
        call: 'shh_newGroup',
        params: 0
    });

    var addToGroup = new Method({
        name: 'addToGroup',
        call: 'shh_addToGroup',
        params: 0
    });

    return [
        post,
        newIdentity,
        hasIdentity,
        newGroup,
        addToGroup
    ];
};

module.exports = Shh;



/***/ }),
/* 756 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file namereg.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var globalRegistrarAbi = __webpack_require__(480);
var icapRegistrarAbi= __webpack_require__(481);

var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';

module.exports = {
    global: {
        abi: globalRegistrarAbi,
        address: globalNameregAddress
    },
    icap: {
        abi: icapRegistrarAbi,
        address: icapNameregAddress
    }
};



/***/ }),
/* 757 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file requestmanager.js
 * @author Jeffrey Wilcke <jeff@ethdev.com>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Marian Oancea <marian@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @author Gav Wood <g@ethdev.com>
 * @date 2014
 */

var Jsonrpc = __webpack_require__(330);
var utils = __webpack_require__(14);
var c = __webpack_require__(153);
var errors = __webpack_require__(119);

/**
 * It's responsible for passing messages to providers
 * It's also responsible for polling the ethereum node for incoming messages
 * Default poll timeout is 1 second
 * Singleton
 */
var RequestManager = function (provider) {
    this.provider = provider;
    this.polls = {};
    this.timeout = null;
};

/**
 * Should be used to synchronously send request
 *
 * @method send
 * @param {Object} data
 * @return {Object}
 */
RequestManager.prototype.send = function (data) {
    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return null;
    }

    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
    var result = this.provider.send(payload);

    if (!Jsonrpc.getInstance().isValidResponse(result)) {
        throw errors.InvalidResponse(result);
    }

    return result.result;
};

/**
 * Should be used to asynchronously send request
 *
 * @method sendAsync
 * @param {Object} data
 * @param {Function} callback
 */
RequestManager.prototype.sendAsync = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
    this.provider.sendAsync(payload, function (err, result) {
        if (err) {
            return callback(err);
        }
        
        if (!Jsonrpc.getInstance().isValidResponse(result)) {
            return callback(errors.InvalidResponse(result));
        }

        callback(null, result.result);
    });
};

/**
 * Should be called to asynchronously send batch request
 *
 * @method sendBatch
 * @param {Array} batch data
 * @param {Function} callback
 */
RequestManager.prototype.sendBatch = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.getInstance().toBatchPayload(data);

    this.provider.sendAsync(payload, function (err, results) {
        if (err) {
            return callback(err);
        }

        if (!utils.isArray(results)) {
            return callback(errors.InvalidResponse(results));
        }

        callback(err, results);
    }); 
};

/**
 * Should be used to set provider of request manager
 *
 * @method setProvider
 * @param {Object}
 */
RequestManager.prototype.setProvider = function (p) {
    this.provider = p;
};

/**
 * Should be used to start polling
 *
 * @method startPolling
 * @param {Object} data
 * @param {Number} pollId
 * @param {Function} callback
 * @param {Function} uninstall
 *
 * @todo cleanup number of params
 */
RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
    this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};


    // start polling
    if (!this.timeout) {
        this.poll();
    }
};

/**
 * Should be used to stop polling for filter with given id
 *
 * @method stopPolling
 * @param {Number} pollId
 */
RequestManager.prototype.stopPolling = function (pollId) {
    delete this.polls[pollId];

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to reset the polling mechanism of the request manager
 *
 * @method reset
 */
RequestManager.prototype.reset = function (keepIsSyncing) {
    /*jshint maxcomplexity:5 */

    for (var key in this.polls) {
        // remove all polls, except sync polls,
        // they need to be removed manually by calling syncing.stopWatching()
        if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {
            this.polls[key].uninstall();
            delete this.polls[key];
        }
    }

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to poll for changes on filter with given id
 *
 * @method poll
 */
RequestManager.prototype.poll = function () {
    /*jshint maxcomplexity: 6 */
    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);

    if (Object.keys(this.polls).length === 0) {
        return;
    }

    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return;
    }

    var pollsData = [];
    var pollsIds = [];
    for (var key in this.polls) {
        pollsData.push(this.polls[key].data);
        pollsIds.push(key);
    }

    if (pollsData.length === 0) {
        return;
    }

    var payload = Jsonrpc.getInstance().toBatchPayload(pollsData);
    
    // map the request id to they poll id
    var pollsIdMap = {};
    payload.forEach(function(load, index){
        pollsIdMap[load.id] = pollsIds[index];
    });


    var self = this;
    this.provider.sendAsync(payload, function (error, results) {


        // TODO: console log?
        if (error) {
            return;
        }

        if (!utils.isArray(results)) {
            throw errors.InvalidResponse(results);
        }
        results.map(function (result) {
            var id = pollsIdMap[result.id];

            // make sure the filter is still installed after arrival of the request
            if (self.polls[id]) {
                result.callback = self.polls[id].callback;
                return result;
            } else
                return false;
        }).filter(function (result) {
            return !!result; 
        }).filter(function (result) {
            var valid = Jsonrpc.getInstance().isValidResponse(result);
            if (!valid) {
                result.callback(errors.InvalidResponse(result));
            }
            return valid;
        }).forEach(function (result) {
            result.callback(null, result.result);
        });
    });
};

module.exports = RequestManager;



/***/ }),
/* 758 */
/***/ (function(module, exports) {



var Settings = function () {
    this.defaultBlock = 'latest';
    this.defaultAccount = undefined;
};

module.exports = Settings;



/***/ }),
/* 759 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file syncing.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var formatters = __webpack_require__(50);
var utils = __webpack_require__(14);

var count = 1;

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollSyncing
@param {Object} self
*/
var pollSyncing = function(self) {

    var onMessage = function (error, sync) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isObject(sync) && sync.startingBlock)
            sync = formatters.outputSyncingFormatter(sync);

        self.callbacks.forEach(function (callback) {
            if (self.lastSyncState !== sync) {
                
                // call the callback with true first so the app can stop anything, before receiving the sync data
                if(!self.lastSyncState && utils.isObject(sync))
                    callback(null, true);
                
                // call on the next CPU cycle, so the actions of the sync stop can be processes first
                setTimeout(function() {
                    callback(null, sync);
                }, 0);
                
                self.lastSyncState = sync;
            }
        });
    };

    self.requestManager.startPolling({
        method: 'eth_syncing',
        params: [],
    }, self.pollId, onMessage, self.stopWatching.bind(self));

};

var IsSyncing = function (requestManager, callback) {
    this.requestManager = requestManager;
    this.pollId = 'syncPoll_'+ count++;
    this.callbacks = [];
    this.addCallback(callback);
    this.lastSyncState = false;
    pollSyncing(this);

    return this;
};

IsSyncing.prototype.addCallback = function (callback) {
    if(callback)
        this.callbacks.push(callback);
    return this;
};

IsSyncing.prototype.stopWatching = function () {
    this.requestManager.stopPolling(this.pollId);
    this.callbacks = [];
};

module.exports = IsSyncing;



/***/ }),
/* 760 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file transfer.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Iban = __webpack_require__(155);
var exchangeAbi = __webpack_require__(482);

/**
 * Should be used to make Iban transfer
 *
 * @method transfer
 * @param {String} from
 * @param {String} to iban
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transfer = function (eth, from, to, value, callback) {
    var iban = new Iban(to); 
    if (!iban.isValid()) {
        throw new Error('invalid iban address');
    }

    if (iban.isDirect()) {
        return transferToAddress(eth, from, iban.address(), value, callback);
    }
    
    if (!callback) {
        var address = eth.icapNamereg().addr(iban.institution());
        return deposit(eth, from, address, value, iban.client());
    }

    eth.icapNamereg().addr(iban.institution(), function (err, address) {
        return deposit(eth, from, address, value, iban.client(), callback);
    });
    
};

/**
 * Should be used to transfer funds to certain address
 *
 * @method transferToAddress
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transferToAddress = function (eth, from, to, value, callback) {
    return eth.sendTransaction({
        address: to,
        from: from,
        value: value
    }, callback);
};

/**
 * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
 *
 * @method deposit
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be transfered
 * @param {String} client unique identifier
 * @param {Function} callback, callback
 */
var deposit = function (eth, from, to, value, client, callback) {
    var abi = exchangeAbi;
    return eth.contract(abi).at(to).deposit(client, {
        from: from,
        value: value
    }, callback);
};

module.exports = transfer;



/***/ }),
/* 761 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeAddress is a prootype that represents address type
 * It matches:
 * address
 * address[]
 * address[4]
 * address[][]
 * address[3][]
 * address[][6][], ...
 */
var SolidityTypeAddress = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputAddress;
};

SolidityTypeAddress.prototype = new SolidityType({});
SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;

SolidityTypeAddress.prototype.isType = function (name) {
    return !!name.match(/address(\[([0-9]*)\])?/);
};

module.exports = SolidityTypeAddress;


/***/ }),
/* 762 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeBool is a prootype that represents bool type
 * It matches:
 * bool
 * bool[]
 * bool[4]
 * bool[][]
 * bool[3][]
 * bool[][6][], ...
 */
var SolidityTypeBool = function () {
    this._inputFormatter = f.formatInputBool;
    this._outputFormatter = f.formatOutputBool;
};

SolidityTypeBool.prototype = new SolidityType({});
SolidityTypeBool.prototype.constructor = SolidityTypeBool;

SolidityTypeBool.prototype.isType = function (name) {
    return !!name.match(/^bool(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeBool;


/***/ }),
/* 763 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeBytes is a prototype that represents the bytes type.
 * It matches:
 * bytes
 * bytes[]
 * bytes[4]
 * bytes[][]
 * bytes[3][]
 * bytes[][6][], ...
 * bytes32
 * bytes8[4]
 * bytes[3][]
 */
var SolidityTypeBytes = function () {
    this._inputFormatter = f.formatInputBytes;
    this._outputFormatter = f.formatOutputBytes;
};

SolidityTypeBytes.prototype = new SolidityType({});
SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;

SolidityTypeBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeBytes;


/***/ }),
/* 764 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

var SolidityTypeDynamicBytes = function () {
    this._inputFormatter = f.formatInputDynamicBytes;
    this._outputFormatter = f.formatOutputDynamicBytes;
};

SolidityTypeDynamicBytes.prototype = new SolidityType({});
SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;

SolidityTypeDynamicBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
};

SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeDynamicBytes;


/***/ }),
/* 765 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeInt is a prootype that represents int type
 * It matches:
 * int
 * int[]
 * int[4]
 * int[][]
 * int[3][]
 * int[][6][], ...
 * int32
 * int64[]
 * int8[4]
 * int256[][]
 * int[3][]
 * int64[][6][], ...
 */
var SolidityTypeInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputInt;
};

SolidityTypeInt.prototype = new SolidityType({});
SolidityTypeInt.prototype.constructor = SolidityTypeInt;

SolidityTypeInt.prototype.isType = function (name) {
    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeInt;


/***/ }),
/* 766 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeReal is a prootype that represents real type
 * It matches:
 * real
 * real[]
 * real[4]
 * real[][]
 * real[3][]
 * real[][6][], ...
 * real32
 * real64[]
 * real8[4]
 * real256[][]
 * real[3][]
 * real64[][6][], ...
 */
var SolidityTypeReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputReal;
};

SolidityTypeReal.prototype = new SolidityType({});
SolidityTypeReal.prototype.constructor = SolidityTypeReal;

SolidityTypeReal.prototype.isType = function (name) {
    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
};

module.exports = SolidityTypeReal;


/***/ }),
/* 767 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

var SolidityTypeString = function () {
    this._inputFormatter = f.formatInputString;
    this._outputFormatter = f.formatOutputString;
};

SolidityTypeString.prototype = new SolidityType({});
SolidityTypeString.prototype.constructor = SolidityTypeString;

SolidityTypeString.prototype.isType = function (name) {
    return !!name.match(/^string(\[([0-9]*)\])*$/);
};

SolidityTypeString.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeString;


/***/ }),
/* 768 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeUInt is a prootype that represents uint type
 * It matches:
 * uint
 * uint[]
 * uint[4]
 * uint[][]
 * uint[3][]
 * uint[][6][], ...
 * uint32
 * uint64[]
 * uint8[4]
 * uint256[][]
 * uint[3][]
 * uint64[][6][], ...
 */
var SolidityTypeUInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputUInt;
};

SolidityTypeUInt.prototype = new SolidityType({});
SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;

SolidityTypeUInt.prototype.isType = function (name) {
    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeUInt;


/***/ }),
/* 769 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(41);
var SolidityType = __webpack_require__(51);

/**
 * SolidityTypeUReal is a prootype that represents ureal type
 * It matches:
 * ureal
 * ureal[]
 * ureal[4]
 * ureal[][]
 * ureal[3][]
 * ureal[][6][], ...
 * ureal32
 * ureal64[]
 * ureal8[4]
 * ureal256[][]
 * ureal[3][]
 * ureal64[][6][], ...
 */
var SolidityTypeUReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputUReal;
};

SolidityTypeUReal.prototype = new SolidityType({});
SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;

SolidityTypeUReal.prototype.isType = function (name) {
    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeUReal;


/***/ }),
/* 770 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file web3.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var RequestManager = __webpack_require__(785);
var Iban = __webpack_require__(159);
var Eth = __webpack_require__(779);
var DB = __webpack_require__(778);
var Shh = __webpack_require__(782);
var Net = __webpack_require__(780);
var Personal = __webpack_require__(781);
var Swarm = __webpack_require__(783);
var Settings = __webpack_require__(786);
var version = __webpack_require__(487);
var utils = __webpack_require__(15);
var sha3 = __webpack_require__(121);
var extend = __webpack_require__(774);
var Batch = __webpack_require__(772);
var Property = __webpack_require__(95);
var HttpProvider = __webpack_require__(776);
var IpcProvider = __webpack_require__(777);
var BigNumber = __webpack_require__(117);



function Web3 (provider) {
    this._requestManager = new RequestManager(provider);
    this.currentProvider = provider;
    this.eth = new Eth(this);
    this.db = new DB(this);
    this.shh = new Shh(this);
    this.net = new Net(this);
    this.personal = new Personal(this);
    this.bzz = new Swarm(this);
    this.settings = new Settings();
    this.version = {
        api: version.version
    };
    this.providers = {
        HttpProvider: HttpProvider,
        IpcProvider: IpcProvider
    };
    this._extend = extend(this);
    this._extend({
        properties: properties()
    });
}

// expose providers on the class
Web3.providers = {
    HttpProvider: HttpProvider,
    IpcProvider: IpcProvider
};

Web3.prototype.setProvider = function (provider) {
    this._requestManager.setProvider(provider);
    this.currentProvider = provider;
};

Web3.prototype.reset = function (keepIsSyncing) {
    this._requestManager.reset(keepIsSyncing);
    this.settings = new Settings();
};

Web3.prototype.BigNumber = BigNumber;
Web3.prototype.toHex = utils.toHex;
Web3.prototype.toAscii = utils.toAscii;
Web3.prototype.toUtf8 = utils.toUtf8;
Web3.prototype.fromAscii = utils.fromAscii;
Web3.prototype.fromUtf8 = utils.fromUtf8;
Web3.prototype.toDecimal = utils.toDecimal;
Web3.prototype.fromDecimal = utils.fromDecimal;
Web3.prototype.toBigNumber = utils.toBigNumber;
Web3.prototype.toWei = utils.toWei;
Web3.prototype.fromWei = utils.fromWei;
Web3.prototype.isAddress = utils.isAddress;
Web3.prototype.isChecksumAddress = utils.isChecksumAddress;
Web3.prototype.toChecksumAddress = utils.toChecksumAddress;
Web3.prototype.isIBAN = utils.isIBAN;


Web3.prototype.sha3 = function(string, options) {
    return '0x' + sha3(string, options);
};

/**
 * Transforms direct icap to address
 */
Web3.prototype.fromICAP = function (icap) {
    var iban = new Iban(icap);
    return iban.address();
};

var properties = function () {
    return [
        new Property({
            name: 'version.node',
            getter: 'web3_clientVersion'
        }),
        new Property({
            name: 'version.network',
            getter: 'net_version',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.ethereum',
            getter: 'eth_protocolVersion',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.whisper',
            getter: 'shh_version',
            inputFormatter: utils.toDecimal
        })
    ];
};

Web3.prototype.isConnected = function(){
    return (this.currentProvider && this.currentProvider.isConnected());
};

Web3.prototype.createBatch = function () {
    return new Batch(this);
};

module.exports = Web3;



/***/ }),
/* 771 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file allevents.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var sha3 = __webpack_require__(121);
var SolidityEvent = __webpack_require__(333);
var formatters = __webpack_require__(52);
var utils = __webpack_require__(15);
var Filter = __webpack_require__(158);
var watches = __webpack_require__(160);

var AllSolidityEvents = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._json = json;
    this._address = address;
};

AllSolidityEvents.prototype.encode = function (options) {
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.address = this._address;

    return result;
};

AllSolidityEvents.prototype.decode = function (data) {
    data.data = data.data || '';
    data.topics = data.topics || [];

    var eventTopic = data.topics[0].slice(2);
    var match = this._json.filter(function (j) {
        return eventTopic === sha3(utils.transformToFullName(j));
    })[0];

    if (!match) { // cannot find matching event?
        console.warn('cannot find event for log');
        return data;
    }

    var event = new SolidityEvent(this._requestManager, match, this._address);
    return event.decode(data);
};

AllSolidityEvents.prototype.execute = function (options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 1)
            options = null;
    }

    var o = this.encode(options);
    var formatter = this.decode.bind(this);
    return new Filter(this._requestManager, o, watches.eth(), formatter, callback);
};

AllSolidityEvents.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    contract.allEvents = execute;
};

module.exports = AllSolidityEvents;



/***/ }),
/* 772 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file batch.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Jsonrpc = __webpack_require__(334);
var errors = __webpack_require__(122);

var Batch = function (web3) {
    this.requestManager = web3._requestManager;
    this.requests = [];
};

/**
 * Should be called to add create new request to batch request
 *
 * @method add
 * @param {Object} jsonrpc requet object
 */
Batch.prototype.add = function (request) {
    this.requests.push(request);
};

/**
 * Should be called to execute batch request
 *
 * @method execute
 */
Batch.prototype.execute = function () {
    var requests = this.requests;
    this.requestManager.sendBatch(requests, function (err, results) {
        results = results || [];
        requests.map(function (request, index) {
            return results[index] || {};
        }).forEach(function (result, index) {
            if (requests[index].callback) {

                if (!Jsonrpc.isValidResponse(result)) {
                    return requests[index].callback(errors.InvalidResponse(result));
                }

                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
            }
        });
    }); 
};

module.exports = Batch;



/***/ }),
/* 773 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file contract.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(15);
var coder = __webpack_require__(214);
var SolidityEvent = __webpack_require__(333);
var SolidityFunction = __webpack_require__(775);
var AllEvents = __webpack_require__(771);

/**
 * Should be called to encode constructor params
 *
 * @method encodeConstructorParams
 * @param {Array} abi
 * @param {Array} constructor params
 */
var encodeConstructorParams = function (abi, params) {
    return abi.filter(function (json) {
        return json.type === 'constructor' && json.inputs.length === params.length;
    }).map(function (json) {
        return json.inputs.map(function (input) {
            return input.type;
        });
    }).map(function (types) {
        return coder.encodeParams(types, params);
    })[0] || '';
};

/**
 * Should be called to add functions to contract object
 *
 * @method addFunctionsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addFunctionsToContract = function (contract) {
    contract.abi.filter(function (json) {
        return json.type === 'function';
    }).map(function (json) {
        return new SolidityFunction(contract._eth, json, contract.address);
    }).forEach(function (f) {
        f.attachToContract(contract);
    });
};

/**
 * Should be called to add events to contract object
 *
 * @method addEventsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addEventsToContract = function (contract) {
    var events = contract.abi.filter(function (json) {
        return json.type === 'event';
    });

    var All = new AllEvents(contract._eth._requestManager, events, contract.address);
    All.attachToContract(contract);

    events.map(function (json) {
        return new SolidityEvent(contract._eth._requestManager, json, contract.address);
    }).forEach(function (e) {
        e.attachToContract(contract);
    });
};


/**
 * Should be called to check if the contract gets properly deployed on the blockchain.
 *
 * @method checkForContractAddress
 * @param {Object} contract
 * @param {Function} callback
 * @returns {Undefined}
 */
var checkForContractAddress = function(contract, callback){
    var count = 0,
        callbackFired = false;

    // wait for receipt
    var filter = contract._eth.filter('latest', function(e){
        if (!e && !callbackFired) {
            count++;

            // stop watching after 50 blocks (timeout)
            if (count > 50) {

                filter.stopWatching(function() {});
                callbackFired = true;

                if (callback)
                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
                else
                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');


            } else {

                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
                    if(receipt && !callbackFired) {

                        contract._eth.getCode(receipt.contractAddress, function(e, code){
                            /*jshint maxcomplexity: 6 */

                            if(callbackFired || !code)
                                return;

                            filter.stopWatching(function() {});
                            callbackFired = true;

                            if(code.length > 3) {

                                // console.log('Contract code deployed!');

                                contract.address = receipt.contractAddress;

                                // attach events and methods again after we have
                                addFunctionsToContract(contract);
                                addEventsToContract(contract);

                                // call callback for the second time
                                if(callback)
                                    callback(null, contract);

                            } else {
                                if(callback)
                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
                                else
                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
                            }
                        });
                    }
                });
            }
        }
    });
};

/**
 * Should be called to create new ContractFactory instance
 *
 * @method ContractFactory
 * @param {Array} abi
 */
var ContractFactory = function (eth, abi) {
    this.eth = eth;
    this.abi = abi;

    /**
     * Should be called to create new contract on a blockchain
     *
     * @method new
     * @param {Any} contract constructor param1 (optional)
     * @param {Any} contract constructor param2 (optional)
     * @param {Object} contract transaction object (required)
     * @param {Function} callback
     * @returns {Contract} returns contract instance
     */
    this.new = function () {
        /*jshint maxcomplexity: 7 */
        
        var contract = new Contract(this.eth, this.abi);

        // parse arguments
        var options = {}; // required!
        var callback;

        var args = Array.prototype.slice.call(arguments);
        if (utils.isFunction(args[args.length - 1])) {
            callback = args.pop();
        }

        var last = args[args.length - 1];
        if (utils.isObject(last) && !utils.isArray(last)) {
            options = args.pop();
        }

        if (options.value > 0) {
            var constructorAbi = abi.filter(function (json) {
                return json.type === 'constructor' && json.inputs.length === args.length;
            })[0] || {};

            if (!constructorAbi.payable) {
                throw new Error('Cannot send value to non-payable constructor');
            }
        }

        var bytes = encodeConstructorParams(this.abi, args);
        options.data += bytes;

        if (callback) {

            // wait for the contract address adn check if the code was deployed
            this.eth.sendTransaction(options, function (err, hash) {
                if (err) {
                    callback(err);
                } else {
                    // add the transaction hash
                    contract.transactionHash = hash;

                    // call callback for the first time
                    callback(null, contract);

                    checkForContractAddress(contract, callback);
                }
            });
        } else {
            var hash = this.eth.sendTransaction(options);
            // add the transaction hash
            contract.transactionHash = hash;
            checkForContractAddress(contract);
        }

        return contract;
    };

    this.new.getData = this.getData.bind(this);
};

/**
 * Should be called to create new ContractFactory
 *
 * @method contract
 * @param {Array} abi
 * @returns {ContractFactory} new contract factory
 */
//var contract = function (abi) {
    //return new ContractFactory(abi);
//};



/**
 * Should be called to get access to existing contract on a blockchain
 *
 * @method at
 * @param {Address} contract address (required)
 * @param {Function} callback {optional)
 * @returns {Contract} returns contract if no callback was passed,
 * otherwise calls callback function (err, contract)
 */
ContractFactory.prototype.at = function (address, callback) {
    var contract = new Contract(this.eth, this.abi, address);

    // this functions are not part of prototype,
    // because we dont want to spoil the interface
    addFunctionsToContract(contract);
    addEventsToContract(contract);

    if (callback) {
        callback(null, contract);
    }
    return contract;
};

/**
 * Gets the data, which is data to deploy plus constructor params
 *
 * @method getData
 */
ContractFactory.prototype.getData = function () {
    var options = {}; // required!
    var args = Array.prototype.slice.call(arguments);

    var last = args[args.length - 1];
    if (utils.isObject(last) && !utils.isArray(last)) {
        options = args.pop();
    }

    var bytes = encodeConstructorParams(this.abi, args);
    options.data += bytes;

    return options.data;
};

/**
 * Should be called to create new contract instance
 *
 * @method Contract
 * @param {Array} abi
 * @param {Address} contract address
 */
var Contract = function (eth, abi, address) {
    this._eth = eth;
    this.transactionHash = null;
    this.address = address;
    this.abi = abi;
};

module.exports = ContractFactory;


/***/ }),
/* 774 */
/***/ (function(module, exports, __webpack_require__) {

var formatters = __webpack_require__(52);
var utils = __webpack_require__(15);
var Method = __webpack_require__(78);
var Property = __webpack_require__(95);

// TODO: refactor, so the input params are not altered.
// it's necessary to make same 'extension' work with multiple providers
var extend = function (web3) {
    /* jshint maxcomplexity:5 */
    var ex = function (extension) {

        var extendedObject;
        if (extension.property) {
            if (!web3[extension.property]) {
                web3[extension.property] = {};
            }
            extendedObject = web3[extension.property];
        } else {
            extendedObject = web3;
        }

        if (extension.methods) {
            extension.methods.forEach(function (method) {
                method.attachToObject(extendedObject);
                method.setRequestManager(web3._requestManager);
            });
        }

        if (extension.properties) {
            extension.properties.forEach(function (property) {
                property.attachToObject(extendedObject);
                property.setRequestManager(web3._requestManager);
            });
        }
    };

    ex.formatters = formatters; 
    ex.utils = utils;
    ex.Method = Method;
    ex.Property = Property;

    return ex;
};



module.exports = extend;



/***/ }),
/* 775 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file function.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var coder = __webpack_require__(214);
var utils = __webpack_require__(15);
var formatters = __webpack_require__(52);
var sha3 = __webpack_require__(121);

/**
 * This prototype should be used to call/sendTransaction to solidity functions
 */
var SolidityFunction = function (eth, json, address) {
    this._eth = eth;
    this._inputTypes = json.inputs.map(function (i) {
        return i.type;
    });
    this._outputTypes = json.outputs.map(function (i) {
        return i.type;
    });
    this._constant = json.constant;
    this._payable = json.payable;
    this._name = utils.transformToFullName(json);
    this._address = address;
};

SolidityFunction.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

SolidityFunction.prototype.extractDefaultBlock = function (args) {
    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
    }
};

/**
 * Should be used to create payload from arguments
 *
 * @method toPayload
 * @param {Array} solidity function params
 * @param {Object} optional payload options
 */
SolidityFunction.prototype.toPayload = function (args) {
    var options = {};
    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
        options = args[args.length - 1];
    }
    options.to = this._address;
    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
    return options;
};

/**
 * Should be used to get function signature
 *
 * @method signature
 * @return {String} function signature
 */
SolidityFunction.prototype.signature = function () {
    return sha3(this._name).slice(0, 8);
};


SolidityFunction.prototype.unpackOutput = function (output) {
    if (!output) {
        return;
    }

    output = output.length >= 2 ? output.slice(2) : output;
    var result = coder.decodeParams(this._outputTypes, output);
    return result.length === 1 ? result[0] : result;
};

/**
 * Calls a contract function.
 *
 * @method call
 * @param {...Object} Contract function arguments
 * @param {function} If the last argument is a function, the contract function
 *   call will be asynchronous, and the callback will be passed the
 *   error and result.
 * @return {String} output bytes
 */
SolidityFunction.prototype.call = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var defaultBlock = this.extractDefaultBlock(args);
    var payload = this.toPayload(args);


    if (!callback) {
        var output = this._eth.call(payload, defaultBlock);
        return this.unpackOutput(output);
    }

    var self = this;
    this._eth.call(payload, defaultBlock, function (error, output) {
        if (error) return callback(error, null);

        var unpacked = null;
        try {
            unpacked = self.unpackOutput(output);
        }
        catch (e) {
            error = e;
        }

        callback(error, unpacked);
    });
};

/**
 * Should be used to sendTransaction to solidity function
 *
 * @method sendTransaction
 */
SolidityFunction.prototype.sendTransaction = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (payload.value > 0 && !this._payable) {
        throw new Error('Cannot send value to non-payable function');
    }

    if (!callback) {
        return this._eth.sendTransaction(payload);
    }

    this._eth.sendTransaction(payload, callback);
};

/**
 * Should be used to estimateGas of solidity function
 *
 * @method estimateGas
 */
SolidityFunction.prototype.estimateGas = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (!callback) {
        return this._eth.estimateGas(payload);
    }

    this._eth.estimateGas(payload, callback);
};

/**
 * Return the encoded data of the call
 *
 * @method getData
 * @return {String} the encoded data
 */
SolidityFunction.prototype.getData = function () {
    var args = Array.prototype.slice.call(arguments);
    var payload = this.toPayload(args);

    return payload.data;
};

/**
 * Should be used to get function display name
 *
 * @method displayName
 * @return {String} display name of the function
 */
SolidityFunction.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get function type name
 *
 * @method typeName
 * @return {String} type name of the function
 */
SolidityFunction.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be called to get rpc requests from solidity function
 *
 * @method request
 * @returns {Object}
 */
SolidityFunction.prototype.request = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);
    var format = this.unpackOutput.bind(this);

    return {
        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
        callback: callback,
        params: [payload],
        format: format
    };
};

/**
 * Should be called to execute function
 *
 * @method execute
 */
SolidityFunction.prototype.execute = function () {
    var transaction = !this._constant;

    // send transaction
    if (transaction) {
        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
    }

    // call
    return this.call.apply(this, Array.prototype.slice.call(arguments));
};

/**
 * Should be called to attach function to contract
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityFunction.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    execute.request = this.request.bind(this);
    execute.call = this.call.bind(this);
    execute.sendTransaction = this.sendTransaction.bind(this);
    execute.estimateGas = this.estimateGas.bind(this);
    execute.getData = this.getData.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = execute; // circular!!!!
};

module.exports = SolidityFunction;



/***/ }),
/* 776 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file httpprovider.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */


var errors = __webpack_require__(122);

// workaround to use httpprovider in different envs

// browser
if (typeof window !== 'undefined' && window.XMLHttpRequest) {
    XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
// node
} else {
    XMLHttpRequest = __webpack_require__(174).XMLHttpRequest; // jshint ignore: line
}

var XHR2 = __webpack_require__(438); // jshint ignore: line

/**
 * HttpProvider should be used to send rpc calls over http
 */
var HttpProvider = function (host, timeout) {
    this.host = host || 'http://localhost:8545';
    this.timeout = timeout || 0;
};

/**
 * Should be called to prepare new XMLHttpRequest
 *
 * @method prepareRequest
 * @param {Boolean} true if request should be async
 * @return {XMLHttpRequest} object
 */
HttpProvider.prototype.prepareRequest = function (async) {
    var request;

    if (async) {
      request = new XHR2();
      request.timeout = this.timeout;
    }else {
      request = new XMLHttpRequest();
    }

    request.open('POST', this.host, async);
    request.setRequestHeader('Content-Type','application/json');
    return request;
};

/**
 * Should be called to make sync request
 *
 * @method send
 * @param {Object} payload
 * @return {Object} result
 */
HttpProvider.prototype.send = function (payload) {
    var request = this.prepareRequest(false);

    try {
        request.send(JSON.stringify(payload));
    } catch(error) {
        throw errors.InvalidConnection(this.host);
    }

    var result = request.responseText;

    try {
        result = JSON.parse(result);
    } catch(e) {
        throw errors.InvalidResponse(request.responseText);
    }

    return result;
};

/**
 * Should be used to make async request
 *
 * @method sendAsync
 * @param {Object} payload
 * @param {Function} callback triggered on end with (err, result)
 */
HttpProvider.prototype.sendAsync = function (payload, callback) {
    var request = this.prepareRequest(true);

    request.onreadystatechange = function() {
        if (request.readyState === 4 && request.timeout !== 1) {
            var result = request.responseText;
            var error = null;

            try {
                result = JSON.parse(result);
            } catch(e) {
                error = errors.InvalidResponse(request.responseText);
            }

            callback(error, result);
        }
    };

    request.ontimeout = function() {
      callback(errors.ConnectionTimeout(this.timeout));
    };

    try {
        request.send(JSON.stringify(payload));
    } catch(error) {
        callback(errors.InvalidConnection(this.host));
    }
};

/**
 * Synchronously tries to make Http request
 *
 * @method isConnected
 * @return {Boolean} returns true if request haven't failed. Otherwise false
 */
HttpProvider.prototype.isConnected = function() {
    try {
        this.send({
            id: 9999999999,
            jsonrpc: '2.0',
            method: 'net_listening',
            params: []
        });
        return true;
    } catch(e) {
        return false;
    }
};

module.exports = HttpProvider;


/***/ }),
/* 777 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ipcprovider.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var utils = __webpack_require__(15);
var errors = __webpack_require__(122);


var IpcProvider = function (path, net) {
    var _this = this;
    this.responseCallbacks = {};
    this.path = path;
    
    this.connection = net.connect({path: this.path});

    this.connection.on('error', function(e){
        console.error('IPC Connection Error', e);
        _this._timeout();
    });

    this.connection.on('end', function(){
        _this._timeout();
    }); 


    // LISTEN FOR CONNECTION RESPONSES
    this.connection.on('data', function(data) {
        /*jshint maxcomplexity: 6 */

        _this._parseResponse(data.toString()).forEach(function(result){

            var id = null;

            // get the id which matches the returned id
            if(utils.isArray(result)) {
                result.forEach(function(load){
                    if(_this.responseCallbacks[load.id])
                        id = load.id;
                });
            } else {
                id = result.id;
            }

            // fire the callback
            if(_this.responseCallbacks[id]) {
                _this.responseCallbacks[id](null, result);
                delete _this.responseCallbacks[id];
            }
        });
    });
};

/**
Will parse the response and make an array out of it.

@method _parseResponse
@param {String} data
*/
IpcProvider.prototype._parseResponse = function(data) {
    var _this = this,
        returnValues = [];
    
    // DE-CHUNKER
    var dechunkedData = data
        .replace(/\}[\n\r]?\{/g,'}|--|{') // }{
        .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{
        .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{
        .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{
        .split('|--|');

    dechunkedData.forEach(function(data){

        // prepend the last chunk
        if(_this.lastChunk)
            data = _this.lastChunk + data;

        var result = null;

        try {
            result = JSON.parse(data);

        } catch(e) {

            _this.lastChunk = data;

            // start timeout to cancel all requests
            clearTimeout(_this.lastChunkTimeout);
            _this.lastChunkTimeout = setTimeout(function(){
                _this._timeout();
                throw errors.InvalidResponse(data);
            }, 1000 * 15);

            return;
        }

        // cancel timeout and set chunk to null
        clearTimeout(_this.lastChunkTimeout);
        _this.lastChunk = null;

        if(result)
            returnValues.push(result);
    });

    return returnValues;
};


/**
Get the adds a callback to the responseCallbacks object,
which will be called if a response matching the response Id will arrive.

@method _addResponseCallback
*/
IpcProvider.prototype._addResponseCallback = function(payload, callback) {
    var id = payload.id || payload[0].id;
    var method = payload.method || payload[0].method;

    this.responseCallbacks[id] = callback;
    this.responseCallbacks[id].method = method;
};

/**
Timeout all requests when the end/error event is fired

@method _timeout
*/
IpcProvider.prototype._timeout = function() {
    for(var key in this.responseCallbacks) {
        if(this.responseCallbacks.hasOwnProperty(key)){
            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
            delete this.responseCallbacks[key];
        }
    }
};


/**
Check if the current connection is still valid.

@method isConnected
*/
IpcProvider.prototype.isConnected = function() {
    var _this = this;

    // try reconnect, when connection is gone
    if(!_this.connection.writable)
        _this.connection.connect({path: _this.path});

    return !!this.connection.writable;
};

IpcProvider.prototype.send = function (payload) {

    if(this.connection.writeSync) {
        var result;

        // try reconnect, when connection is gone
        if(!this.connection.writable)
            this.connection.connect({path: this.path});

        var data = this.connection.writeSync(JSON.stringify(payload));

        try {
            result = JSON.parse(data);
        } catch(e) {
            throw errors.InvalidResponse(data);                
        }

        return result;

    } else {
        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
    }
};

IpcProvider.prototype.sendAsync = function (payload, callback) {
    // try reconnect, when connection is gone
    if(!this.connection.writable)
        this.connection.connect({path: this.path});


    this.connection.write(JSON.stringify(payload));
    this._addResponseCallback(payload, callback);
};

module.exports = IpcProvider;



/***/ }),
/* 778 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file db.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(78);

var DB = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;
    
    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(web3._requestManager);
    });
};

var methods = function () {
    var putString = new Method({
        name: 'putString',
        call: 'db_putString',
        params: 3
    });

    var getString = new Method({
        name: 'getString',
        call: 'db_getString',
        params: 2
    });

    var putHex = new Method({
        name: 'putHex',
        call: 'db_putHex',
        params: 3
    });

    var getHex = new Method({
        name: 'getHex',
        call: 'db_getHex',
        params: 2
    });

    return [
        putString, getString, putHex, getHex
    ];
};

module.exports = DB;


/***/ }),
/* 779 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var formatters = __webpack_require__(52);
var utils = __webpack_require__(15);
var Method = __webpack_require__(78);
var Property = __webpack_require__(95);
var c = __webpack_require__(157);
var Contract = __webpack_require__(773);
var watches = __webpack_require__(160);
var Filter = __webpack_require__(158);
var IsSyncing = __webpack_require__(787);
var namereg = __webpack_require__(784);
var Iban = __webpack_require__(159);
var transfer = __webpack_require__(788);

var blockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
};

var transactionFromBlockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
};

var uncleCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
};

var getBlockTransactionCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
};

var uncleCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
};

function Eth(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });


    this.iban = Iban;
    this.sendIBANTransaction = transfer.bind(null, this);
}

Object.defineProperty(Eth.prototype, 'defaultBlock', {
    get: function () {
        return c.defaultBlock;
    },
    set: function (val) {
        c.defaultBlock = val;
        return val;
    }
});

Object.defineProperty(Eth.prototype, 'defaultAccount', {
    get: function () {
        return c.defaultAccount;
    },
    set: function (val) {
        c.defaultAccount = val;
        return val;
    }
});

var methods = function () {
    var getBalance = new Method({
        name: 'getBalance',
        call: 'eth_getBalance',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: formatters.outputBigNumberFormatter
    });

    var getStorageAt = new Method({
        name: 'getStorageAt',
        call: 'eth_getStorageAt',
        params: 3,
        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
    });

    var getCode = new Method({
        name: 'getCode',
        call: 'eth_getCode',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var getBlock = new Method({
        name: 'getBlock',
        call: blockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
        outputFormatter: formatters.outputBlockFormatter
    });

    var getUncle = new Method({
        name: 'getUncle',
        call: uncleCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputBlockFormatter,

    });

    var getCompilers = new Method({
        name: 'getCompilers',
        call: 'eth_getCompilers',
        params: 0
    });

    var getBlockTransactionCount = new Method({
        name: 'getBlockTransactionCount',
        call: getBlockTransactionCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getBlockUncleCount = new Method({
        name: 'getBlockUncleCount',
        call: uncleCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getTransaction = new Method({
        name: 'getTransaction',
        call: 'eth_getTransactionByHash',
        params: 1,
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionFromBlock = new Method({
        name: 'getTransactionFromBlock',
        call: transactionFromBlockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionReceipt = new Method({
        name: 'getTransactionReceipt',
        call: 'eth_getTransactionReceipt',
        params: 1,
        outputFormatter: formatters.outputTransactionReceiptFormatter
    });

    var getTransactionCount = new Method({
        name: 'getTransactionCount',
        call: 'eth_getTransactionCount',
        params: 2,
        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var sendRawTransaction = new Method({
        name: 'sendRawTransaction',
        call: 'eth_sendRawTransaction',
        params: 1,
        inputFormatter: [null]
    });

    var sendTransaction = new Method({
        name: 'sendTransaction',
        call: 'eth_sendTransaction',
        params: 1,
        inputFormatter: [formatters.inputTransactionFormatter]
    });

    var signTransaction = new Method({
        name: 'signTransaction',
        call: 'eth_signTransaction',
        params: 1,
        inputFormatter: [formatters.inputTransactionFormatter]
    });

    var sign = new Method({
        name: 'sign',
        call: 'eth_sign',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, null]
    });

    var call = new Method({
        name: 'call',
        call: 'eth_call',
        params: 2,
        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var estimateGas = new Method({
        name: 'estimateGas',
        call: 'eth_estimateGas',
        params: 1,
        inputFormatter: [formatters.inputCallFormatter],
        outputFormatter: utils.toDecimal
    });

    var compileSolidity = new Method({
        name: 'compile.solidity',
        call: 'eth_compileSolidity',
        params: 1
    });

    var compileLLL = new Method({
        name: 'compile.lll',
        call: 'eth_compileLLL',
        params: 1
    });

    var compileSerpent = new Method({
        name: 'compile.serpent',
        call: 'eth_compileSerpent',
        params: 1
    });

    var submitWork = new Method({
        name: 'submitWork',
        call: 'eth_submitWork',
        params: 3
    });

    var getWork = new Method({
        name: 'getWork',
        call: 'eth_getWork',
        params: 0
    });

    return [
        getBalance,
        getStorageAt,
        getCode,
        getBlock,
        getUncle,
        getCompilers,
        getBlockTransactionCount,
        getBlockUncleCount,
        getTransaction,
        getTransactionFromBlock,
        getTransactionReceipt,
        getTransactionCount,
        call,
        estimateGas,
        sendRawTransaction,
        signTransaction,
        sendTransaction,
        sign,
        compileSolidity,
        compileLLL,
        compileSerpent,
        submitWork,
        getWork
    ];
};


var properties = function () {
    return [
        new Property({
            name: 'coinbase',
            getter: 'eth_coinbase'
        }),
        new Property({
            name: 'mining',
            getter: 'eth_mining'
        }),
        new Property({
            name: 'hashrate',
            getter: 'eth_hashrate',
            outputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'syncing',
            getter: 'eth_syncing',
            outputFormatter: formatters.outputSyncingFormatter
        }),
        new Property({
            name: 'gasPrice',
            getter: 'eth_gasPrice',
            outputFormatter: formatters.outputBigNumberFormatter
        }),
        new Property({
            name: 'accounts',
            getter: 'eth_accounts'
        }),
        new Property({
            name: 'blockNumber',
            getter: 'eth_blockNumber',
            outputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'protocolVersion',
            getter: 'eth_protocolVersion'
        })
    ];
};

Eth.prototype.contract = function (abi) {
    var factory = new Contract(this, abi);
    return factory;
};

Eth.prototype.filter = function (fil, callback) {
    return new Filter(this._requestManager, fil, watches.eth(), formatters.outputLogFormatter, callback);
};

Eth.prototype.namereg = function () {
    return this.contract(namereg.global.abi).at(namereg.global.address);
};

Eth.prototype.icapNamereg = function () {
    return this.contract(namereg.icap.abi).at(namereg.icap.address);
};

Eth.prototype.isSyncing = function (callback) {
    return new IsSyncing(this._requestManager, callback);
};

module.exports = Eth;


/***/ }),
/* 780 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file eth.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(15);
var Property = __webpack_require__(95);

var Net = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    properties().forEach(function(p) { 
        p.attachToObject(self);
        p.setRequestManager(web3._requestManager);
    });
};

/// @returns an array of objects describing web3.eth api properties
var properties = function () {
    return [
        new Property({
            name: 'listening',
            getter: 'net_listening'
        }),
        new Property({
            name: 'peerCount',
            getter: 'net_peerCount',
            outputFormatter: utils.toDecimal
        })
    ];
};

module.exports = Net;


/***/ }),
/* 781 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var Method = __webpack_require__(78);
var Property = __webpack_require__(95);
var formatters = __webpack_require__(52);

function Personal(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });
}

var methods = function () {
    var newAccount = new Method({
        name: 'newAccount',
        call: 'personal_newAccount',
        params: 1,
        inputFormatter: [null]
    });

    var unlockAccount = new Method({
        name: 'unlockAccount',
        call: 'personal_unlockAccount',
        params: 3,
        inputFormatter: [formatters.inputAddressFormatter, null, null]
    });

    var sendTransaction = new Method({
        name: 'sendTransaction',
        call: 'personal_sendTransaction',
        params: 2,
        inputFormatter: [formatters.inputTransactionFormatter, null]
    });

    var lockAccount = new Method({
        name: 'lockAccount',
        call: 'personal_lockAccount',
        params: 1,
        inputFormatter: [formatters.inputAddressFormatter]
    });

    return [
        newAccount,
        unlockAccount,
        sendTransaction,
        lockAccount
    ];
};

var properties = function () {
    return [
        new Property({
            name: 'listAccounts',
            getter: 'personal_listAccounts'
        })
    ];
};


module.exports = Personal;


/***/ }),
/* 782 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file shh.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(78);
var formatters = __webpack_require__(52);
var Filter = __webpack_require__(158);
var watches = __webpack_require__(160);

var Shh = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });
};

Shh.prototype.filter = function (fil, callback) {
    return new Filter(this._requestManager, fil, watches.shh(), formatters.outputPostFormatter, callback);
};

var methods = function () { 

    var post = new Method({
        name: 'post', 
        call: 'shh_post', 
        params: 1,
        inputFormatter: [formatters.inputPostFormatter]
    });

    var newIdentity = new Method({
        name: 'newIdentity',
        call: 'shh_newIdentity',
        params: 0
    });

    var hasIdentity = new Method({
        name: 'hasIdentity',
        call: 'shh_hasIdentity',
        params: 1
    });

    var newGroup = new Method({
        name: 'newGroup',
        call: 'shh_newGroup',
        params: 0
    });

    var addToGroup = new Method({
        name: 'addToGroup',
        call: 'shh_addToGroup',
        params: 0
    });

    return [
        post,
        newIdentity,
        hasIdentity,
        newGroup,
        addToGroup
    ];
};

module.exports = Shh;



/***/ }),
/* 783 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file bzz.js
 * @author Alex Beregszaszi <alex@rtfs.hu>
 * @date 2016
 *
 * Reference: https://github.com/ethereum/go-ethereum/blob/swarm/internal/web3ext/web3ext.go#L33
 */



var Method = __webpack_require__(78);
var Property = __webpack_require__(95);

function Swarm(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });
}

var methods = function () {
    var blockNetworkRead = new Method({
        name: 'blockNetworkRead',
        call: 'bzz_blockNetworkRead',
        params: 1,
        inputFormatter: [null]
    });

    var syncEnabled = new Method({
        name: 'syncEnabled',
        call: 'bzz_syncEnabled',
        params: 1,
        inputFormatter: [null]
    });

    var swapEnabled = new Method({
        name: 'swapEnabled',
        call: 'bzz_swapEnabled',
        params: 1,
        inputFormatter: [null]
    });

    var download = new Method({
        name: 'download',
        call: 'bzz_download',
        params: 2,
        inputFormatter: [null, null]
    });

    var upload = new Method({
        name: 'upload',
        call: 'bzz_upload',
        params: 2,
        inputFormatter: [null, null]
    });

    var retrieve = new Method({
        name: 'retrieve',
        call: 'bzz_retrieve',
        params: 1,
        inputFormatter: [null]
    });

    var store = new Method({
        name: 'store',
        call: 'bzz_store',
        params: 2,
        inputFormatter: [null, null]
    });

    var get = new Method({
        name: 'get',
        call: 'bzz_get',
        params: 1,
        inputFormatter: [null]
    });

    var put = new Method({
        name: 'put',
        call: 'bzz_put',
        params: 2,
        inputFormatter: [null, null]
    });

    var modify = new Method({
        name: 'modify',
        call: 'bzz_modify',
        params: 4,
        inputFormatter: [null, null, null, null]
    });

    return [
        blockNetworkRead,
        syncEnabled,
        swapEnabled,
        download,
        upload,
        retrieve,
        store,
        get,
        put,
        modify
    ];
};

var properties = function () {
    return [
        new Property({
            name: 'hive',
            getter: 'bzz_hive'
        }),
        new Property({
            name: 'info',
            getter: 'bzz_info'
        })
    ];
};


module.exports = Swarm;


/***/ }),
/* 784 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file namereg.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var globalRegistrarAbi = __webpack_require__(484);
var icapRegistrarAbi= __webpack_require__(485);

var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';

module.exports = {
    global: {
        abi: globalRegistrarAbi,
        address: globalNameregAddress
    },
    icap: {
        abi: icapRegistrarAbi,
        address: icapNameregAddress
    }
};



/***/ }),
/* 785 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file requestmanager.js
 * @author Jeffrey Wilcke <jeff@ethdev.com>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Marian Oancea <marian@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @author Gav Wood <g@ethdev.com>
 * @date 2014
 */

var Jsonrpc = __webpack_require__(334);
var utils = __webpack_require__(15);
var c = __webpack_require__(157);
var errors = __webpack_require__(122);

/**
 * It's responsible for passing messages to providers
 * It's also responsible for polling the ethereum node for incoming messages
 * Default poll timeout is 1 second
 * Singleton
 */
var RequestManager = function (provider) {
    this.provider = provider;
    this.polls = {};
    this.timeout = null;
};

/**
 * Should be used to synchronously send request
 *
 * @method send
 * @param {Object} data
 * @return {Object}
 */
RequestManager.prototype.send = function (data) {
    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return null;
    }

    var payload = Jsonrpc.toPayload(data.method, data.params);
    var result = this.provider.send(payload);

    if (!Jsonrpc.isValidResponse(result)) {
        throw errors.InvalidResponse(result);
    }

    return result.result;
};

/**
 * Should be used to asynchronously send request
 *
 * @method sendAsync
 * @param {Object} data
 * @param {Function} callback
 */
RequestManager.prototype.sendAsync = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toPayload(data.method, data.params);
    this.provider.sendAsync(payload, function (err, result) {
        if (err) {
            return callback(err);
        }
        
        if (!Jsonrpc.isValidResponse(result)) {
            return callback(errors.InvalidResponse(result));
        }

        callback(null, result.result);
    });
};

/**
 * Should be called to asynchronously send batch request
 *
 * @method sendBatch
 * @param {Array} batch data
 * @param {Function} callback
 */
RequestManager.prototype.sendBatch = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toBatchPayload(data);

    this.provider.sendAsync(payload, function (err, results) {
        if (err) {
            return callback(err);
        }

        if (!utils.isArray(results)) {
            return callback(errors.InvalidResponse(results));
        }

        callback(err, results);
    }); 
};

/**
 * Should be used to set provider of request manager
 *
 * @method setProvider
 * @param {Object}
 */
RequestManager.prototype.setProvider = function (p) {
    this.provider = p;
};

/**
 * Should be used to start polling
 *
 * @method startPolling
 * @param {Object} data
 * @param {Number} pollId
 * @param {Function} callback
 * @param {Function} uninstall
 *
 * @todo cleanup number of params
 */
RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
    this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};


    // start polling
    if (!this.timeout) {
        this.poll();
    }
};

/**
 * Should be used to stop polling for filter with given id
 *
 * @method stopPolling
 * @param {Number} pollId
 */
RequestManager.prototype.stopPolling = function (pollId) {
    delete this.polls[pollId];

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to reset the polling mechanism of the request manager
 *
 * @method reset
 */
RequestManager.prototype.reset = function (keepIsSyncing) {
    /*jshint maxcomplexity:5 */

    for (var key in this.polls) {
        // remove all polls, except sync polls,
        // they need to be removed manually by calling syncing.stopWatching()
        if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {
            this.polls[key].uninstall();
            delete this.polls[key];
        }
    }

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to poll for changes on filter with given id
 *
 * @method poll
 */
RequestManager.prototype.poll = function () {
    /*jshint maxcomplexity: 6 */
    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);

    if (Object.keys(this.polls).length === 0) {
        return;
    }

    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return;
    }

    var pollsData = [];
    var pollsIds = [];
    for (var key in this.polls) {
        pollsData.push(this.polls[key].data);
        pollsIds.push(key);
    }

    if (pollsData.length === 0) {
        return;
    }

    var payload = Jsonrpc.toBatchPayload(pollsData);
    
    // map the request id to they poll id
    var pollsIdMap = {};
    payload.forEach(function(load, index){
        pollsIdMap[load.id] = pollsIds[index];
    });


    var self = this;
    this.provider.sendAsync(payload, function (error, results) {


        // TODO: console log?
        if (error) {
            return;
        }

        if (!utils.isArray(results)) {
            throw errors.InvalidResponse(results);
        }
        results.map(function (result) {
            var id = pollsIdMap[result.id];

            // make sure the filter is still installed after arrival of the request
            if (self.polls[id]) {
                result.callback = self.polls[id].callback;
                return result;
            } else
                return false;
        }).filter(function (result) {
            return !!result; 
        }).filter(function (result) {
            var valid = Jsonrpc.isValidResponse(result);
            if (!valid) {
                result.callback(errors.InvalidResponse(result));
            }
            return valid;
        }).forEach(function (result) {
            result.callback(null, result.result);
        });
    });
};

module.exports = RequestManager;



/***/ }),
/* 786 */
/***/ (function(module, exports) {



var Settings = function () {
    this.defaultBlock = 'latest';
    this.defaultAccount = undefined;
};

module.exports = Settings;



/***/ }),
/* 787 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file syncing.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var formatters = __webpack_require__(52);
var utils = __webpack_require__(15);

var count = 1;

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollSyncing
@param {Object} self
*/
var pollSyncing = function(self) {

    var onMessage = function (error, sync) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isObject(sync) && sync.startingBlock)
            sync = formatters.outputSyncingFormatter(sync);

        self.callbacks.forEach(function (callback) {
            if (self.lastSyncState !== sync) {
                
                // call the callback with true first so the app can stop anything, before receiving the sync data
                if(!self.lastSyncState && utils.isObject(sync))
                    callback(null, true);
                
                // call on the next CPU cycle, so the actions of the sync stop can be processes first
                setTimeout(function() {
                    callback(null, sync);
                }, 0);
                
                self.lastSyncState = sync;
            }
        });
    };

    self.requestManager.startPolling({
        method: 'eth_syncing',
        params: [],
    }, self.pollId, onMessage, self.stopWatching.bind(self));

};

var IsSyncing = function (requestManager, callback) {
    this.requestManager = requestManager;
    this.pollId = 'syncPoll_'+ count++;
    this.callbacks = [];
    this.addCallback(callback);
    this.lastSyncState = false;
    pollSyncing(this);

    return this;
};

IsSyncing.prototype.addCallback = function (callback) {
    if(callback)
        this.callbacks.push(callback);
    return this;
};

IsSyncing.prototype.stopWatching = function () {
    this.requestManager.stopPolling(this.pollId);
    this.callbacks = [];
};

module.exports = IsSyncing;



/***/ }),
/* 788 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file transfer.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Iban = __webpack_require__(159);
var exchangeAbi = __webpack_require__(486);

/**
 * Should be used to make Iban transfer
 *
 * @method transfer
 * @param {String} from
 * @param {String} to iban
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transfer = function (eth, from, to, value, callback) {
    var iban = new Iban(to); 
    if (!iban.isValid()) {
        throw new Error('invalid iban address');
    }

    if (iban.isDirect()) {
        return transferToAddress(eth, from, iban.address(), value, callback);
    }
    
    if (!callback) {
        var address = eth.icapNamereg().addr(iban.institution());
        return deposit(eth, from, address, value, iban.client());
    }

    eth.icapNamereg().addr(iban.institution(), function (err, address) {
        return deposit(eth, from, address, value, iban.client(), callback);
    });
    
};

/**
 * Should be used to transfer funds to certain address
 *
 * @method transferToAddress
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transferToAddress = function (eth, from, to, value, callback) {
    return eth.sendTransaction({
        address: to,
        from: from,
        value: value
    }, callback);
};

/**
 * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
 *
 * @method deposit
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be transfered
 * @param {String} client unique identifier
 * @param {Function} callback, callback
 */
var deposit = function (eth, from, to, value, client, callback) {
    var abi = exchangeAbi;
    return eth.contract(abi).at(to).deposit(client, {
        from: from,
        value: value
    }, callback);
};

module.exports = transfer;



/***/ }),
/* 789 */
/***/ (function(module, exports, __webpack_require__) {

var Preflight = __webpack_require__(339);
var Installer = __webpack_require__(791);
var Publisher = __webpack_require__(794);
var IPFSHost = __webpack_require__(336);
var IPFSHostWithLocalReader = __webpack_require__(790);
var MemoryRegistry = __webpack_require__(795);
var Config = __webpack_require__(335);

var fs = __webpack_require__(80);
var path = __webpack_require__(0);
var _ = __webpack_require__(24);

function EthPM(directory, host, registry) {
  this.host = host || new IPFSHost();
  this.registry = registry || new MemoryRegistry();

  this.config = Config.default().with({
    working_directory: directory,
    base_dir: directory,
    host: host,
    registry: registry
  });
};

_.extend(EthPM.prototype, {
  install: function(manifest) {
    var installer = new Installer(this.config, this.config.installed_packages_directory);
    return installer.installDependencies(manifest);
  },

  installDependency: function(package_name, version_range) {
    var installer = new Installer(this.config, this.config.installed_packages_directory);
    return installer.installPackage(package_name, version_range);
  },

  // Publish the current package to the host and registry.
  // Contract metadata is also required for all contracts listed in the `contracts` portion of the manifest.
  // Returns a Promise.
  publish: function(contract_types, deployments, manifest) {
    var publisher = new Publisher(this.config.registry, this.config.host);
    return publisher.publish(this.config, contract_types, deployments, manifest);
  },

  installed_artifacts: function() {
    var manifest = {};

    try {
      manifest = Manifest.read(this.config.manifest_file);
    } catch (e) {
      // Do nothing with the error.
    }

    return Preflight.find_artifacts(this.config.installed_packages_directory, manifest.dependencies);
  }
});

_.extend(EthPM, {

  // deprecated
  configure: function(directory, host, registry) {
    return new EthPM(directory, host, registry);
  },

  init: function(directory, host, registry, options) {
    options = options || {};

    var json = !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }());

    json = _.cloneDeep(json);
    json = _.merge(json, options);

    return fs.writeFile(path.join(directory, "epm.json"), "utf8").then(function() {
      return new EthPM(directory, host, registry);
    });
  },

  hosts: {
    IPFS: IPFSHost,
    IPFSWithLocalReader: IPFSHostWithLocalReader
  }
});

module.exports = EthPM;


/***/ }),
/* 790 */
/***/ (function(module, exports, __webpack_require__) {

var wget = __webpack_require__(435);
var inherits = __webpack_require__(2).inherits;
var IPFSHost = __webpack_require__(336);

inherits(IPFSHostWithLocalReader, IPFSHost);

function IPFSHostWithLocalReader(host, port, protocol) {
  IPFSHost.call(this, host, port, protocol);
}

IPFSHostWithLocalReader.prototype.get = function(uri) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (uri.indexOf("ipfs://") != 0) {
      return reject(new Error("Don't know how to resolve URI " + uri));
    }

    var hash = uri.replace("ipfs://", "");
    var multihash = hash;

    var options = {
      protocol: self.protocol,
      host: self.host,
      path: '/ipfs/' + hash,
      method: 'GET'
    };

    var req = wget.request(options, function(res) {
      var content = '';
      if (res.statusCode === 200) {
        res.on('error', reject);
        res.on('data', function(chunk) {
          content += chunk;
        });
        res.on('end', function() {
          accept(content);
        });
      } else {
        reject(new Error("Unknown server response " + res.statusCode + " when downloading hash " + hash));
      }
    });

    req.end();
    req.on('error', reject);
  });
};

module.exports = IPFSHostWithLocalReader;


/***/ }),
/* 791 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(80);
var path = __webpack_require__(0);
var Manifest = __webpack_require__(338);
var Lockfile = __webpack_require__(337);
var Preflight = __webpack_require__(339);
var Sources = __webpack_require__(340);
var Config = __webpack_require__(335);
var Util = __webpack_require__(341);

function Installer(config, destination) {
  this.config = config;
  this.registry = config.registry;
  this.host = config.host;
  this.destination = destination;
};

Installer.prototype.installDependencies = function(manifest) {
  var self = this;

  // Start a promise chain to ensure errors are caught.
  return new Promise(function(accept, reject) {
    accept();
  }).then(function() {

    if (manifest == null) {
      manifest = Manifest.read(self.config.manifest_file);
    }

    return Preflight.resolve_dependencies(manifest.dependencies, self.registry, self.host);
  }).then(function(preflight) {
    var promises = [];

    Object.keys(preflight).forEach(function(package_name) {
      var versions = Object.keys(preflight[package_name]);

      if (versions.length > 1) {
        throw new Error("Your package and its dependencies require conflicting versions of the '" + package_name + "' package: " + versions.join(", ") + ". This dependency structure is currently unallowed at this time but will be allowed upon updates to the Solidity compiler. Please remove conflicting dependencies in the meantime.");
      }
    });

    Object.keys(manifest.dependencies).forEach(function(package_name) {
      var version_range = manifest.dependencies[package_name];
      promises.push(self.installPackage(package_name, version_range));
    });

    return Promise.all(promises);
  });
};

Installer.prototype.installPackage = function(package_name, version_range) {
  var self = this;
  var lockfileURI;
  var lockfile;
  var version;
  var manifest;
  var package_location;

  return Promise.resolve().then(function() {
    // If we have a URI, don't go to the registry.
    if (Util.isURI(version_range)) {
      return version_range;
    }

    return self.registry.getLockfileURI(package_name, version_range);
  }).then(function(uri) {
    lockfileURI = uri;
    return self.host.get(lockfileURI);
  }).then(function(data) {
    lockfile = JSON.parse(data);

    // Validate the lockfile before moving further.
    var results = Lockfile.validate(lockfile);

    if (results.errors.length > 0) {
      throw new Error("Could not install package `" + package_name + "`: Invalid package specification (" + results.errors[0].stack.replace("instance.", "") + ")");
    }

    // Create a manifest from the lockfile
    manifest = Manifest.fromLockfile(lockfile);

    package_location = path.resolve(path.join(self.destination, package_name));
    var manifest_location = path.resolve(path.join(package_location, self.config.default_manifest_filename));
    var lockfile_location = path.resolve(path.join(package_location, self.config.default_lockfile_filename));
    var lockfile_uri_location = path.resolve(path.join(package_location, self.config.default_lockfile_uri_filename));

    var file_promises = [];

    // Add the sources
    Object.keys(lockfile.sources).forEach(function(relative_source_path) {
      var source_path = path.resolve(path.join(package_location, relative_source_path));
      var uri = lockfile.sources[relative_source_path];

      file_promises.push(self.saveURI(uri, source_path));
    });

    // Add the lockfile itself
    // This requests the lockfile again, but it's easy.
    file_promises.push(self.saveURI(lockfileURI, lockfile_location));

    // Save the URI of the lockfile for this version
    file_promises.push(fs.outputFile(lockfile_uri_location, lockfileURI));

    // Create and save the manifest
    file_promises.push(fs.outputFile(manifest_location, JSON.stringify(manifest, null, 2)));

    return Promise.all(file_promises);
  }).then(function() {
    // After this package is installed, use the manfest to install any dependencies.
    var dependency_config = Config.default().with({
      working_directory: package_location,
      base_dir: package_location,
      host: self.host,
      registry: self.registry
    });
    var dependency_installer = new Installer(dependency_config, self.destination);

    return dependency_installer.installDependencies();
  });
};

Installer.prototype.saveURI = function(uri, destination_path) {
  return this.host.get(uri).then(function(contents) {
    return fs.outputFile(destination_path, contents);
  });
};

module.exports = Installer;


/***/ }),
/* 792 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(24);
var validate = __webpack_require__(914).validate;
var lockfile_spec = __webpack_require__(488);

var V1 = {
  version: 1,
  validate: function(json) {
    return validate(json, lockfile_spec);
  },
  normalize: function(json) {
    // Add keys with default values if non-existent
    // (don't use this function for validation)
    var defaults = {
      authors: {},
      license: "",
      description: "",
      keywords: [],
      links: {},
      sources: null,
      dependencies: {}
    };

    json = _.merge(defaults, json);

    return json;
  },
  // fromLockfile: function(lockfile) {
  //   var meta = lockfile.meta || {};
  //   var sources = lockfile.sources || {};
  //
  //   var manifest = {
  //     manifest_version: this.version,
  //     package_name: lockfile.package_name,
  //     authors: meta.authors,
  //     version: lockfile.version,
  //     license: meta.license,
  //     description: meta.description,
  //     keywords: meta.keywords,
  //     links: meta.links,
  //     sources: Object.keys(sources),
  //     dependencies: lockfile.build_dependencies
  //   };
  //
  //   return manifest;
  // }
};

module.exports = V1;


/***/ }),
/* 793 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(24);

var V1 = {
  version: 1,
  validate: function(json) {
    // TODO: throw errors for data that *must* be there, and validate correct
    // format of data that is there. Perhaps use json spec.
  },
  normalize: function(json) {
    // Add keys with default values if non-existent
    // (don't use this function for validation)
    var defaults = {
      authors: {},
      license: "",
      description: "",
      keywords: [],
      links: {},
      sources: null,
      dependencies: {}
    };

    json = _.merge(defaults, json);

    return json;
  },
  fromLockfile: function(lockfile) {
    var meta = lockfile.meta || {};
    var sources = lockfile.sources || {};

    var manifest = {
      manifest_version: this.version,
      package_name: lockfile.package_name,
      authors: meta.authors,
      version: lockfile.version,
      license: meta.license,
      description: meta.description,
      keywords: meta.keywords,
      links: meta.links,
      sources: Object.keys(sources),
      dependencies: lockfile.build_dependencies
    };

    return manifest;
  }
};

module.exports = V1;


/***/ }),
/* 794 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(80);
var Manifest = __webpack_require__(338);
var Lockfile = __webpack_require__(337);
var Sources = __webpack_require__(340);
var path = __webpack_require__(0);

function Publisher(registry, host, contract_types, deployments) {
  this.registry = registry;
  this.host = host;
};

Publisher.prototype.publish = function(config, contract_types, deployments, manifest) {
  var self = this;

  var lockfile = {};
  var lockfileURI;

  return new Promise(function(accept, reject) {
    // Place this in a promise so errors will be sent down the promise chain.
    if (!manifest) {
      manifest = Manifest.read(config.manifest_file);
    }

    lockfile.lockfile_version = Lockfile.getInterpreter().version + ""; // ensure string
    lockfile.package_name = manifest.package_name;
    lockfile.meta = {
      authors: manifest.authors,
      license: manifest.license,
      description: manifest.description,
      keywords: manifest.keywords,
      links: manifest.links
    };
    lockfile.version = manifest.version;
    lockfile.contract_types = contract_types || {};
    lockfile.deployments = deployments || {};

    Object.keys(manifest).filter(function (option) {
      return option.indexOf('x-') == 0;
    }).forEach(function (option) {
      lockfile[option] = manifest[option];
    });

    accept();
  }).then(function() {
    // If no sources and no empty array, assume all solidity files in the source directory (configurable).
    if (!manifest.sources) {
      manifest.sources = [
        path.relative(config.working_directory, path.join(config.source_directory, "*.sol")),
        path.relative(config.working_directory, path.join(config.source_directory, "**", "*.sol"))
      ];
    }

    return Sources.expand(manifest.sources, config.base_path);
  }).then(function(source_paths) {
    var promises = [];

    source_paths.forEach(function(source_path) {
      var promise = new Promise(function(accept, reject) {
        self.host.putFile(source_path).then(function(sourceURI) {
          var relative = "." + path.sep + path.relative(config.base_path, source_path);
          var obj = {};
          obj[relative] = sourceURI;
          accept(obj);
        }).catch(reject);
      });

      promises.push(promise);
    });

    return Promise.all(promises);
  }).then(function(source_objects) {

    lockfile.sources = source_objects.reduce(function(merged_obj, source_obj) {
      Object.keys(source_obj).forEach(function(key) {
        merged_obj[key] = source_obj[key];
      });
      return merged_obj;
    }, {});

    var promises = [];

    Object.keys(manifest.dependencies || {}).forEach(function(dependency_name) {
      var lockfile_uri_location = path.join(config.installed_packages_directory, dependency_name, config.default_lockfile_uri_filename);
      promises.push(fs.readFile(lockfile_uri_location, "utf8").then(function(uri) {
        return [dependency_name, uri];
      }));
    });

    return Promise.all(promises);
  }).then(function(lockfile_uris) {

    lockfile.build_dependencies = {};

    lockfile_uris.forEach(function(tuple) {
      var dependency_name = tuple[0];
      var lockfile_uri = tuple[1];

      lockfile.build_dependencies[dependency_name] = lockfile_uri;
    });

    // TODO: Validating here kinda sucks because we've already pushed a bunch of stuff
    // to IPFS.
    var results = Lockfile.validate(lockfile);

    if (results.errors.length > 0) {
      var message = results.errors[0].stack;

      // Remove prefixes so error context is within the manifest
      message = message.replace("instance.", "");
      message = message.replace("meta.", "");

      throw new Error("Invalid package configuration: " + message);
    }

    return self.host.putContents(JSON.stringify(lockfile));
  }).then(function(lockfileURI) {
    return self.registry.register(manifest.package_name, manifest.version, lockfileURI);
  }).then(function() {
    return lockfile;
  });
}

module.exports = Publisher;


/***/ }),
/* 795 */
/***/ (function(module, exports, __webpack_require__) {

var semver = __webpack_require__(238);

function MemoryRegistry() {
  this.packages = {};
};

MemoryRegistry.prototype.getAllVersions = function(package_name, callback) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (!self.packages[package_name]) {
      return accept([]);
    }
    accept(Object.keys(self.packages[package_name]).sort());
  });
}

MemoryRegistry.prototype.resolveVersion = function(package_name, version_range) {
  return this.getAllVersions(package_name).then(function(versions) {
    // This can be optimized.
    var max = null;

    versions.forEach(function(version) {
      if (semver.satisfies(version, version_range)) {
        if (max == null || semver.gte(version, max)) {
          max = version;
        }
      }
    });

    return max;
  });
};

MemoryRegistry.prototype.getLockfileURI = function(package_name, version_range) {
  var self = this;
  return this.resolveVersion(package_name, version_range).then(function(version) {
    if (version == null) {
      throw new Error("Cannot find package '" + package_name + "' that satisfies the version range: " + version_range);
    }

    return self.packages[package_name][version];
  });
};

MemoryRegistry.prototype.register = function(package_name, version, lockfileURI) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (self.packages[package_name] && self.packages[package_name][version]) {
      return reject(new Error("Version " + version + " already exists for package " + package_name));
    }

    if (!self.packages[package_name]) {
      self.packages[package_name] = [];
    }

    self.packages[package_name][version] = lockfileURI;
    accept();
  });
};

module.exports = MemoryRegistry;


/***/ }),
/* 796 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * expand-range <https://github.com/jonschlinkert/expand-range>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT license.
 */



var fill = __webpack_require__(797);

module.exports = function expandRange(str, options, fn) {
  if (typeof str !== 'string') {
    throw new TypeError('expand-range expects a string.');
  }

  if (typeof options === 'function') {
    fn = options;
    options = {};
  }

  if (typeof options === 'boolean') {
    options = {};
    options.makeRe = true;
  }

  // create arguments to pass to fill-range
  var opts = options || {};
  var args = str.split('..');
  var len = args.length;
  if (len > 3) { return str; }

  // if only one argument, it can't expand so return it
  if (len === 1) { return args; }

  // if `true`, tell fill-range to regexify the string
  if (typeof fn === 'boolean' && fn === true) {
    opts.makeRe = true;
  }

  args.push(opts);
  return fill.apply(null, args.concat(fn));
};


/***/ }),
/* 797 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * fill-range <https://github.com/jonschlinkert/fill-range>
 *
 * Copyright (c) 2014-2018, Jon Schlinkert.
 * Released under the MIT License.
 */



var isObject = __webpack_require__(799);
var isNumber = __webpack_require__(798);
var randomize = __webpack_require__(999);
var repeatStr = __webpack_require__(1030);
var repeat = __webpack_require__(407);

/**
 * Expose `fillRange`
 */

module.exports = fillRange;

/**
 * Return a range of numbers or letters.
 *
 * @param  {String} `a` Start of the range
 * @param  {String} `b` End of the range
 * @param  {String} `step` Increment or decrement to use.
 * @param  {Function} `fn` Custom function to modify each element in the range.
 * @return {Array}
 */

function fillRange(a, b, step, options, fn) {
  if (a == null || b == null) {
    throw new Error('fill-range expects the first and second args to be strings.');
  }

  if (typeof step === 'function') {
    fn = step; options = {}; step = null;
  }

  if (typeof options === 'function') {
    fn = options; options = {};
  }

  if (isObject(step)) {
    options = step; step = '';
  }

  var expand, regex = false, sep = '';
  var opts = options || {};

  if (typeof opts.silent === 'undefined') {
    opts.silent = true;
  }

  step = step || opts.step;

  // store a ref to unmodified arg
  var origA = a, origB = b;

  b = (b.toString() === '-0') ? 0 : b;

  if (opts.optimize || opts.makeRe) {
    step = step ? (step += '~') : step;
    expand = true;
    regex = true;
    sep = '~';
  }

  // handle special step characters
  if (typeof step === 'string') {
    var match = stepRe().exec(step);

    if (match) {
      var i = match.index;
      var m = match[0];

      // repeat string
      if (m === '+') {
        return repeat(a, b);

      // randomize a, `b` times
      } else if (m === '?') {
        return [randomize(a, b)];

      // expand right, no regex reduction
      } else if (m === '>') {
        step = step.substr(0, i) + step.substr(i + 1);
        expand = true;

      // expand to an array, or if valid create a reduced
      // string for a regex logic `or`
      } else if (m === '|') {
        step = step.substr(0, i) + step.substr(i + 1);
        expand = true;
        regex = true;
        sep = m;

      // expand to an array, or if valid create a reduced
      // string for a regex range
      } else if (m === '~') {
        step = step.substr(0, i) + step.substr(i + 1);
        expand = true;
        regex = true;
        sep = m;
      }
    } else if (!isNumber(step)) {
      if (!opts.silent) {
        throw new TypeError('fill-range: invalid step.');
      }
      return null;
    }
  }

  if (/[.&*()[\]^%$#@!]/.test(a) || /[.&*()[\]^%$#@!]/.test(b)) {
    if (!opts.silent) {
      throw new RangeError('fill-range: invalid range arguments.');
    }
    return null;
  }

  // has neither a letter nor number, or has both letters and numbers
  // this needs to be after the step logic
  if (!noAlphaNum(a) || !noAlphaNum(b) || hasBoth(a) || hasBoth(b)) {
    if (!opts.silent) {
      throw new RangeError('fill-range: invalid range arguments.');
    }
    return null;
  }

  // validate arguments
  var isNumA = isNumber(zeros(a));
  var isNumB = isNumber(zeros(b));

  if ((!isNumA && isNumB) || (isNumA && !isNumB)) {
    if (!opts.silent) {
      throw new TypeError('fill-range: first range argument is incompatible with second.');
    }
    return null;
  }

  // by this point both are the same, so we
  // can use A to check going forward.
  var isNum = isNumA;
  var num = formatStep(step);

  // is the range alphabetical? or numeric?
  if (isNum) {
    // if numeric, coerce to an integer
    a = +a; b = +b;
  } else {
    // otherwise, get the charCode to expand alpha ranges
    a = a.charCodeAt(0);
    b = b.charCodeAt(0);
  }

  // is the pattern descending?
  var isDescending = a > b;

  // don't create a character class if the args are < 0
  if (a < 0 || b < 0) {
    expand = false;
    regex = false;
  }

  // detect padding
  var padding = isPadded(origA, origB);
  var res, pad, arr = [];
  var ii = 0;

  // character classes, ranges and logical `or`
  if (regex) {
    if (shouldExpand(a, b, num, isNum, padding, opts)) {
      // make sure the correct separator is used
      if (sep === '|' || sep === '~') {
        sep = detectSeparator(a, b, num, isNum, isDescending);
      }
      return wrap([origA, origB], sep, opts);
    }
  }

  while (isDescending ? (a >= b) : (a <= b)) {
    if (padding && isNum) {
      pad = padding(a);
    }

    // custom function
    if (typeof fn === 'function') {
      res = fn(a, isNum, pad, ii++);

    // letters
    } else if (!isNum) {
      if (regex && isInvalidChar(a)) {
        res = null;
      } else {
        res = String.fromCharCode(a);
      }

    // numbers
    } else {
      res = formatPadding(a, pad);
    }

    // add result to the array, filtering any nulled values
    if (res !== null) arr.push(res);

    // increment or decrement
    if (isDescending) {
      a -= num;
    } else {
      a += num;
    }
  }

  // now that the array is expanded, we need to handle regex
  // character classes, ranges or logical `or` that wasn't
  // already handled before the loop
  if ((regex || expand) && !opts.noexpand) {
    // make sure the correct separator is used
    if (sep === '|' || sep === '~') {
      sep = detectSeparator(a, b, num, isNum, isDescending);
    }
    if (arr.length === 1 || a < 0 || b < 0) { return arr; }
    return wrap(arr, sep, opts);
  }

  return arr;
}

/**
 * Wrap the string with the correct regex
 * syntax.
 */

function wrap(arr, sep, opts) {
  if (sep === '~') { sep = '-'; }
  var str = arr.join(sep);
  var pre = opts && opts.regexPrefix;

  // regex logical `or`
  if (sep === '|') {
    str = pre ? pre + str : str;
    str = '(' + str + ')';
  }

  // regex character class
  if (sep === '-') {
    str = (pre && pre === '^')
      ? pre + str
      : str;
    str = '[' + str + ']';
  }
  return [str];
}

/**
 * Check for invalid characters
 */

function isCharClass(a, b, step, isNum, isDescending) {
  if (isDescending) { return false; }
  if (isNum) { return a <= 9 && b <= 9; }
  if (a < b) { return step === 1; }
  return false;
}

/**
 * Detect the correct separator to use
 */

function shouldExpand(a, b, num, isNum, padding, opts) {
  if (isNum && (a > 9 || b > 9)) { return false; }
  return !padding && num === 1 && a < b;
}

/**
 * Detect the correct separator to use
 */

function detectSeparator(a, b, step, isNum, isDescending) {
  var isChar = isCharClass(a, b, step, isNum, isDescending);
  if (!isChar) {
    return '|';
  }
  return '~';
}

/**
 * Correctly format the step based on type
 */

function formatStep(step) {
  return Math.abs(step >> 0) || 1;
}

/**
 * Format padding, taking leading `-` into account
 */

function formatPadding(ch, pad) {
  var res = pad ? pad + ch : ch;
  if (pad && ch.toString().charAt(0) === '-') {
    res = '-' + pad + ch.toString().substr(1);
  }
  return res.toString();
}

/**
 * Check for invalid characters
 */

function isInvalidChar(str) {
  var ch = toStr(str);
  return ch === '\\'
    || ch === '['
    || ch === ']'
    || ch === '^'
    || ch === '('
    || ch === ')'
    || ch === '`';
}

/**
 * Convert to a string from a charCode
 */

function toStr(ch) {
  return String.fromCharCode(ch);
}


/**
 * Step regex
 */

function stepRe() {
  return /\?|>|\||\+|\~/g;
}

/**
 * Return true if `val` has either a letter
 * or a number
 */

function noAlphaNum(val) {
  return /[a-z0-9]/i.test(val);
}

/**
 * Return true if `val` has both a letter and
 * a number (invalid)
 */

function hasBoth(val) {
  return /[a-z][0-9]|[0-9][a-z]/i.test(val);
}

/**
 * Normalize zeros for checks
 */

function zeros(val) {
  if (/^-*0+$/.test(val.toString())) {
    return '0';
  }
  return val;
}

/**
 * Return true if `val` has leading zeros,
 * or a similar valid pattern.
 */

function hasZeros(val) {
  return /[^.]\.|^-*0+[0-9]/.test(val);
}

/**
 * If the string is padded, returns a curried function with
 * the a cached padding string, or `false` if no padding.
 *
 * @param  {*} `origA` String or number.
 * @return {String|Boolean}
 */

function isPadded(origA, origB) {
  if (hasZeros(origA) || hasZeros(origB)) {
    var alen = length(origA);
    var blen = length(origB);

    var len = alen >= blen
      ? alen
      : blen;

    return function (a) {
      return repeatStr('0', len - length(a));
    };
  }
  return false;
}

/**
 * Get the string length of `val`
 */

function length(val) {
  return val.toString().length;
}


/***/ }),
/* 798 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * is-number <https://github.com/jonschlinkert/is-number>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var typeOf = __webpack_require__(370);

module.exports = function isNumber(num) {
  var type = typeOf(num);
  if (type !== 'number' && type !== 'string') {
    return false;
  }
  var n = +num;
  return (n - n + 1) >= 0 && num !== '';
};


/***/ }),
/* 799 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * isobject <https://github.com/jonschlinkert/isobject>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var isArray = __webpack_require__(367);

module.exports = function isObject(val) {
  return val != null && typeof val === 'object' && isArray(val) === false;
};


/***/ }),
/* 800 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * extsprintf.js: extended POSIX-style sprintf
 */

var mod_assert = __webpack_require__(11);
var mod_util = __webpack_require__(2);

/*
 * Public interface
 */
exports.sprintf = jsSprintf;
exports.printf = jsPrintf;
exports.fprintf = jsFprintf;

/*
 * Stripped down version of s[n]printf(3c).  We make a best effort to throw an
 * exception when given a format string we don't understand, rather than
 * ignoring it, so that we won't break existing programs if/when we go implement
 * the rest of this.
 *
 * This implementation currently supports specifying
 *	- field alignment ('-' flag),
 * 	- zero-pad ('0' flag)
 *	- always show numeric sign ('+' flag),
 *	- field width
 *	- conversions for strings, decimal integers, and floats (numbers).
 *	- argument size specifiers.  These are all accepted but ignored, since
 *	  Javascript has no notion of the physical size of an argument.
 *
 * Everything else is currently unsupported, most notably precision, unsigned
 * numbers, non-decimal numbers, and characters.
 */
function jsSprintf(fmt)
{
	var regex = [
	    '([^%]*)',				/* normal text */
	    '%',				/* start of format */
	    '([\'\\-+ #0]*?)',			/* flags (optional) */
	    '([1-9]\\d*)?',			/* width (optional) */
	    '(\\.([1-9]\\d*))?',		/* precision (optional) */
	    '[lhjztL]*?',			/* length mods (ignored) */
	    '([diouxXfFeEgGaAcCsSp%jr])'	/* conversion */
	].join('');

	var re = new RegExp(regex);
	var args = Array.prototype.slice.call(arguments, 1);
	var flags, width, precision, conversion;
	var left, pad, sign, arg, match;
	var ret = '';
	var argn = 1;

	mod_assert.equal('string', typeof (fmt));

	while ((match = re.exec(fmt)) !== null) {
		ret += match[1];
		fmt = fmt.substring(match[0].length);

		flags = match[2] || '';
		width = match[3] || 0;
		precision = match[4] || '';
		conversion = match[6];
		left = false;
		sign = false;
		pad = ' ';

		if (conversion == '%') {
			ret += '%';
			continue;
		}

		if (args.length === 0)
			throw (new Error('too few args to sprintf'));

		arg = args.shift();
		argn++;

		if (flags.match(/[\' #]/))
			throw (new Error(
			    'unsupported flags: ' + flags));

		if (precision.length > 0)
			throw (new Error(
			    'non-zero precision not supported'));

		if (flags.match(/-/))
			left = true;

		if (flags.match(/0/))
			pad = '0';

		if (flags.match(/\+/))
			sign = true;

		switch (conversion) {
		case 's':
			if (arg === undefined || arg === null)
				throw (new Error('argument ' + argn +
				    ': attempted to print undefined or null ' +
				    'as a string'));
			ret += doPad(pad, width, left, arg.toString());
			break;

		case 'd':
			arg = Math.floor(arg);
			/*jsl:fallthru*/
		case 'f':
			sign = sign && arg > 0 ? '+' : '';
			ret += sign + doPad(pad, width, left,
			    arg.toString());
			break;

		case 'x':
			ret += doPad(pad, width, left, arg.toString(16));
			break;

		case 'j': /* non-standard */
			if (width === 0)
				width = 10;
			ret += mod_util.inspect(arg, false, width);
			break;

		case 'r': /* non-standard */
			ret += dumpException(arg);
			break;

		default:
			throw (new Error('unsupported conversion: ' +
			    conversion));
		}
	}

	ret += fmt;
	return (ret);
}

function jsPrintf() {
	var args = Array.prototype.slice.call(arguments);
	args.unshift(process.stdout);
	jsFprintf.apply(null, args);
}

function jsFprintf(stream) {
	var args = Array.prototype.slice.call(arguments, 1);
	return (stream.write(jsSprintf.apply(this, args)));
}

function doPad(chr, width, left, str)
{
	var ret = str;

	while (ret.length < width) {
		if (left)
			ret += chr;
		else
			ret = chr + ret;
	}

	return (ret);
}

/*
 * This function dumps long stack traces for exceptions having a cause() method.
 * See node-verror for an example.
 */
function dumpException(ex)
{
	var ret;

	if (!(ex instanceof Error))
		throw (new Error(jsSprintf('invalid type for %%r: %j', ex)));

	/* Note that V8 prepends "ex.stack" with ex.toString(). */
	ret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack;

	if (ex.cause && typeof (ex.cause) === 'function') {
		var cex = ex.cause();
		if (cex) {
			ret += '\nCaused by: ' + dumpException(cex);
		}
	}

	return (ret);
}


/***/ }),
/* 801 */
/***/ (function(module, exports) {

/*!
 * filename-regex <https://github.com/regexps/filename-regex>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert
 * Licensed under the MIT license.
 */

module.exports = function filenameRegex() {
  return /([^\\\/]+)$/;
};


/***/ }),
/* 802 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * finalhandler
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var debug = __webpack_require__(804)('finalhandler')
var escapeHtml = __webpack_require__(212)
var http = __webpack_require__(27)
var onFinished = __webpack_require__(386)
var unpipe = __webpack_require__(1092)

/**
 * Module variables.
 * @private
 */

/* istanbul ignore next */
var defer = typeof setImmediate === 'function'
  ? setImmediate
  : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }
var isFinished = onFinished.isFinished

/**
 * Module exports.
 * @public
 */

module.exports = finalhandler

/**
 * Create a function to handle the final response.
 *
 * @param {Request} req
 * @param {Response} res
 * @param {Object} [options]
 * @return {Function}
 * @public
 */

function finalhandler(req, res, options) {
  var opts = options || {}

  // get environment
  var env = opts.env || process.env.NODE_ENV || 'development'

  // get error callback
  var onerror = opts.onerror

  return function (err) {
    var status = res.statusCode

    // ignore 404 on in-flight response
    if (!err && res._header) {
      debug('cannot 404 after headers sent')
      return
    }

    // unhandled error
    if (err) {
      // respect err.statusCode
      if (err.statusCode) {
        status = err.statusCode
      }

      // respect err.status
      if (err.status) {
        status = err.status
      }

      // default status code to 500
      if (!status || status < 400) {
        status = 500
      }

      // production gets a basic error message
      var msg = env === 'production'
        ? http.STATUS_CODES[status]
        : err.stack || err.toString()
      msg = escapeHtml(msg)
        .replace(/\n/g, '<br>')
        .replace(/  /g, ' &nbsp;') + '\n'
    } else {
      status = 404
      msg = 'Cannot ' + escapeHtml(req.method) + ' ' + escapeHtml(req.originalUrl || req.url) + '\n'
    }

    debug('default %s', status)

    // schedule onerror callback
    if (err && onerror) {
      defer(onerror, err, req, res)
    }

    // cannot actually respond
    if (res._header) {
      return req.socket.destroy()
    }

    send(req, res, status, msg)
  }
}

/**
 * Send response.
 *
 * @param {IncomingMessage} req
 * @param {OutgoingMessage} res
 * @param {number} status
 * @param {string} body
 * @private
 */

function send(req, res, status, body) {
  function write() {
    res.statusCode = status

    // security header for content sniffing
    res.setHeader('X-Content-Type-Options', 'nosniff')

    // standard headers
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))

    if (req.method === 'HEAD') {
      res.end()
      return
    }

    res.end(body, 'utf8')
  }

  if (isFinished(req)) {
    write()
    return
  }

  // unpipe everything from the request
  unpipe(req)

  // flush the request
  onFinished(req, write)
  req.resume()
}


/***/ }),
/* 803 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = debug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(805);

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lowercased letter, i.e. "n".
 */

exports.formatters = {};

/**
 * Previously assigned color.
 */

var prevColor = 0;

/**
 * Previous log timestamp.
 */

var prevTime;

/**
 * Select a color.
 *
 * @return {Number}
 * @api private
 */

function selectColor() {
  return exports.colors[prevColor++ % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function debug(namespace) {

  // define the `disabled` version
  function disabled() {
  }
  disabled.enabled = false;

  // define the `enabled` version
  function enabled() {

    var self = enabled;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // add the `color` if not set
    if (null == self.useColors) self.useColors = exports.useColors();
    if (null == self.color && self.useColors) self.color = selectColor();

    var args = Array.prototype.slice.call(arguments);

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %o
      args = ['%o'].concat(args);
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    if ('function' === typeof exports.formatArgs) {
      args = exports.formatArgs.apply(self, args);
    }
    var logFn = enabled.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }
  enabled.enabled = true;

  var fn = exports.enabled(namespace) ? enabled : disabled;

  fn.namespace = namespace;

  return fn;
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  var split = (namespaces || '').split(/[\s,]+/);
  var len = split.length;

  for (var i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}


/***/ }),
/* 804 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(803);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [6, 2, 3, 4, 5, 1];

/**
 * The file descriptor to write the `debug()` calls to.
 * Set the `DEBUG_FD` env variable to override with another value. i.e.:
 *
 *   $ DEBUG_FD=3 node script.js 3>debug.log
 */

var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
var stream = 1 === fd ? process.stdout :
             2 === fd ? process.stderr :
             createWritableStdioStream(fd);

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  var debugColors = (process.env.DEBUG_COLORS || '').trim().toLowerCase();
  if (0 === debugColors.length) {
    return tty.isatty(fd);
  } else {
    return '0' !== debugColors
        && 'no' !== debugColors
        && 'false' !== debugColors
        && 'disabled' !== debugColors;
  }
}

/**
 * Map %o to `util.inspect()`, since Node doesn't do that out of the box.
 */

var inspect = (4 === util.inspect.length ?
  // node <= 0.8.x
  function (v, colors) {
    return util.inspect(v, void 0, void 0, colors);
  } :
  // node > 0.8.x
  function (v, colors) {
    return util.inspect(v, { colors: colors });
  }
);

exports.formatters.o = function(v) {
  return inspect(v, this.useColors)
    .replace(/\s*\n\s*/g, ' ');
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs() {
  var args = arguments;
  var useColors = this.useColors;
  var name = this.namespace;

  if (useColors) {
    var c = this.color;

    args[0] = '  \u001b[3' + c + ';1m' + name + ' '
      + '\u001b[0m'
      + args[0] + '\u001b[3' + c + 'm'
      + ' +' + exports.humanize(this.diff) + '\u001b[0m';
  } else {
    args[0] = new Date().toUTCString()
      + ' ' + name + ' ' + args[0];
  }
  return args;
}

/**
 * Invokes `console.error()` with the specified arguments.
 */

function log() {
  return stream.write(util.format.apply(this, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Copied from `node/src/node.js`.
 *
 * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
 * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
 */

function createWritableStdioStream (fd) {
  var stream;
  var tty_wrap = process.binding('tty_wrap');

  // Note stream._type is used for test-module-load-list.js

  switch (tty_wrap.guessHandleType(fd)) {
    case 'TTY':
      stream = new tty.WriteStream(fd);
      stream._type = 'tty';

      // Hack to have stream not keep the event loop alive.
      // See https://github.com/joyent/node/issues/1726
      if (stream._handle && stream._handle.unref) {
        stream._handle.unref();
      }
      break;

    case 'FILE':
      var fs = __webpack_require__(1);
      stream = new fs.SyncWriteStream(fd, { autoClose: false });
      stream._type = 'fs';
      break;

    case 'PIPE':
    case 'TCP':
      var net = __webpack_require__(32);
      stream = new net.Socket({
        fd: fd,
        readable: false,
        writable: true
      });

      // FIXME Should probably have an option in net.Socket to create a
      // stream from an existing fd which is writable only. But for now
      // we'll just add this hack and set the `readable` member to false.
      // Test: ./node test/fixtures/echo.js < /etc/passwd
      stream.readable = false;
      stream.read = null;
      stream._type = 'pipe';

      // FIXME Hack to have stream not keep the event loop alive.
      // See https://github.com/joyent/node/issues/1726
      if (stream._handle && stream._handle.unref) {
        stream._handle.unref();
      }
      break;

    default:
      // Probably an error on in uv_guess_handle()
      throw new Error('Implement me. Unknown stream file type!');
  }

  // For supporting legacy API we put the FD here.
  stream.fd = fd;

  stream._isStdio = true;

  return stream;
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 805 */
/***/ (function(module, exports) {

/**
 * Helpers.
 */

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;

/**
 * Parse or format the given `val`.
 *
 * Options:
 *
 *  - `long` verbose formatting [false]
 *
 * @param {String|Number} val
 * @param {Object} options
 * @return {String|Number}
 * @api public
 */

module.exports = function(val, options){
  options = options || {};
  if ('string' == typeof val) return parse(val);
  return options.long
    ? long(val)
    : short(val);
};

/**
 * Parse the given `str` and return milliseconds.
 *
 * @param {String} str
 * @return {Number}
 * @api private
 */

function parse(str) {
  str = '' + str;
  if (str.length > 10000) return;
  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
  if (!match) return;
  var n = parseFloat(match[1]);
  var type = (match[2] || 'ms').toLowerCase();
  switch (type) {
    case 'years':
    case 'year':
    case 'yrs':
    case 'yr':
    case 'y':
      return n * y;
    case 'days':
    case 'day':
    case 'd':
      return n * d;
    case 'hours':
    case 'hour':
    case 'hrs':
    case 'hr':
    case 'h':
      return n * h;
    case 'minutes':
    case 'minute':
    case 'mins':
    case 'min':
    case 'm':
      return n * m;
    case 'seconds':
    case 'second':
    case 'secs':
    case 'sec':
    case 's':
      return n * s;
    case 'milliseconds':
    case 'millisecond':
    case 'msecs':
    case 'msec':
    case 'ms':
      return n;
  }
}

/**
 * Short format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function short(ms) {
  if (ms >= d) return Math.round(ms / d) + 'd';
  if (ms >= h) return Math.round(ms / h) + 'h';
  if (ms >= m) return Math.round(ms / m) + 'm';
  if (ms >= s) return Math.round(ms / s) + 's';
  return ms + 'ms';
}

/**
 * Long format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function long(ms) {
  return plural(ms, d, 'day')
    || plural(ms, h, 'hour')
    || plural(ms, m, 'minute')
    || plural(ms, s, 'second')
    || ms + ' ms';
}

/**
 * Pluralization helper.
 */

function plural(ms, n, name) {
  if (ms < n) return;
  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
  return Math.ceil(ms / n) + ' ' + name + 's';
}


/***/ }),
/* 806 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * for-in <https://github.com/jonschlinkert/for-in>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



module.exports = function forIn(obj, fn, thisArg) {
  for (var key in obj) {
    if (fn.call(thisArg, obj[key], key, obj) === false) {
      break;
    }
  }
};


/***/ }),
/* 807 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * for-own <https://github.com/jonschlinkert/for-own>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



var forIn = __webpack_require__(806);
var hasOwn = Object.prototype.hasOwnProperty;

module.exports = function forOwn(obj, fn, thisArg) {
  forIn(obj, function(val, key) {
    if (hasOwn.call(obj, key)) {
      return fn.call(thisArg, obj[key], key, obj);
    }
  });
};


/***/ }),
/* 808 */
/***/ (function(module, exports) {


var hasOwn = Object.prototype.hasOwnProperty;
var toString = Object.prototype.toString;

module.exports = function forEach (obj, fn, ctx) {
    if (toString.call(fn) !== '[object Function]') {
        throw new TypeError('iterator must be a function');
    }
    var l = obj.length;
    if (l === +l) {
        for (var i = 0; i < l; i++) {
            fn.call(ctx, obj[i], i, obj);
        }
    } else {
        for (var k in obj) {
            if (hasOwn.call(obj, k)) {
                fn.call(ctx, obj[k], k, obj);
            }
        }
    }
};



/***/ }),
/* 809 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = ForeverAgent
ForeverAgent.SSL = ForeverAgentSSL

var util = __webpack_require__(2)
  , Agent = __webpack_require__(27).Agent
  , net = __webpack_require__(32)
  , tls = __webpack_require__(71)
  , AgentSSL = __webpack_require__(45).Agent
  
function getConnectionName(host, port) {  
  var name = ''
  if (typeof host === 'string') {
    name = host + ':' + port
  } else {
    // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name.
    name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':')
  }
  return name
}    

function ForeverAgent(options) {
  var self = this
  self.options = options || {}
  self.requests = {}
  self.sockets = {}
  self.freeSockets = {}
  self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets
  self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets
  self.on('free', function(socket, host, port) {
    var name = getConnectionName(host, port)

    if (self.requests[name] && self.requests[name].length) {
      self.requests[name].shift().onSocket(socket)
    } else if (self.sockets[name].length < self.minSockets) {
      if (!self.freeSockets[name]) self.freeSockets[name] = []
      self.freeSockets[name].push(socket)
      
      // if an error happens while we don't use the socket anyway, meh, throw the socket away
      var onIdleError = function() {
        socket.destroy()
      }
      socket._onIdleError = onIdleError
      socket.on('error', onIdleError)
    } else {
      // If there are no pending requests just destroy the
      // socket and it will get removed from the pool. This
      // gets us out of timeout issues and allows us to
      // default to Connection:keep-alive.
      socket.destroy()
    }
  })

}
util.inherits(ForeverAgent, Agent)

ForeverAgent.defaultMinSockets = 5


ForeverAgent.prototype.createConnection = net.createConnection
ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest
ForeverAgent.prototype.addRequest = function(req, host, port) {
  var name = getConnectionName(host, port)
  
  if (typeof host !== 'string') {
    var options = host
    port = options.port
    host = options.host
  }

  if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) {
    var idleSocket = this.freeSockets[name].pop()
    idleSocket.removeListener('error', idleSocket._onIdleError)
    delete idleSocket._onIdleError
    req._reusedSocket = true
    req.onSocket(idleSocket)
  } else {
    this.addRequestNoreuse(req, host, port)
  }
}

ForeverAgent.prototype.removeSocket = function(s, name, host, port) {
  if (this.sockets[name]) {
    var index = this.sockets[name].indexOf(s)
    if (index !== -1) {
      this.sockets[name].splice(index, 1)
    }
  } else if (this.sockets[name] && this.sockets[name].length === 0) {
    // don't leak
    delete this.sockets[name]
    delete this.requests[name]
  }
  
  if (this.freeSockets[name]) {
    var index = this.freeSockets[name].indexOf(s)
    if (index !== -1) {
      this.freeSockets[name].splice(index, 1)
      if (this.freeSockets[name].length === 0) {
        delete this.freeSockets[name]
      }
    }
  }

  if (this.requests[name] && this.requests[name].length) {
    // If we have pending requests and a socket gets closed a new one
    // needs to be created to take over in the pool for the one that closed.
    this.createSocket(name, host, port).emit('free')
  }
}

function ForeverAgentSSL (options) {
  ForeverAgent.call(this, options)
}
util.inherits(ForeverAgentSSL, ForeverAgent)

ForeverAgentSSL.prototype.createConnection = createConnectionSSL
ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest

function createConnectionSSL (port, host, options) {
  if (typeof port === 'object') {
    options = port;
  } else if (typeof host === 'object') {
    options = host;
  } else if (typeof options === 'object') {
    options = options;
  } else {
    options = {};
  }

  if (typeof port === 'number') {
    options.port = port;
  }

  if (typeof host === 'string') {
    options.host = host;
  }

  return tls.connect(options);
}


/***/ }),
/* 810 */
/***/ (function(module, exports, __webpack_require__) {

var CombinedStream = __webpack_require__(294);
var util = __webpack_require__(2);
var path = __webpack_require__(0);
var http = __webpack_require__(27);
var https = __webpack_require__(45);
var parseUrl = __webpack_require__(8).parse;
var fs = __webpack_require__(1);
var mime = __webpack_require__(379);
var asynckit = __webpack_require__(587);
var populate = __webpack_require__(811);

// Public API
module.exports = FormData;

// make it a Stream
util.inherits(FormData, CombinedStream);

/**
 * Create readable "multipart/form-data" streams.
 * Can be used to submit forms
 * and file uploads to other web applications.
 *
 * @constructor
 * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
 */
function FormData(options) {
  if (!(this instanceof FormData)) {
    return new FormData();
  }

  this._overheadLength = 0;
  this._valueLength = 0;
  this._valuesToMeasure = [];

  CombinedStream.call(this);

  options = options || {};
  for (var option in options) {
    this[option] = options[option];
  }
}

FormData.LINE_BREAK = '\r\n';
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';

FormData.prototype.append = function(field, value, options) {

  options = options || {};

  // allow filename as single option
  if (typeof options == 'string') {
    options = {filename: options};
  }

  var append = CombinedStream.prototype.append.bind(this);

  // all that streamy business can't handle numbers
  if (typeof value == 'number') {
    value = '' + value;
  }

  // https://github.com/felixge/node-form-data/issues/38
  if (util.isArray(value)) {
    // Please convert your array into string
    // the way web server expects it
    this._error(new Error('Arrays are not supported.'));
    return;
  }

  var header = this._multiPartHeader(field, value, options);
  var footer = this._multiPartFooter();

  append(header);
  append(value);
  append(footer);

  // pass along options.knownLength
  this._trackLength(header, value, options);
};

FormData.prototype._trackLength = function(header, value, options) {
  var valueLength = 0;

  // used w/ getLengthSync(), when length is known.
  // e.g. for streaming directly from a remote server,
  // w/ a known file a size, and not wanting to wait for
  // incoming file to finish to get its size.
  if (options.knownLength != null) {
    valueLength += +options.knownLength;
  } else if (Buffer.isBuffer(value)) {
    valueLength = value.length;
  } else if (typeof value === 'string') {
    valueLength = Buffer.byteLength(value);
  }

  this._valueLength += valueLength;

  // @check why add CRLF? does this account for custom/multiple CRLFs?
  this._overheadLength +=
    Buffer.byteLength(header) +
    FormData.LINE_BREAK.length;

  // empty or either doesn't have path or not an http response
  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {
    return;
  }

  // no need to bother with the length
  if (!options.knownLength) {
    this._valuesToMeasure.push(value);
  }
};

FormData.prototype._lengthRetriever = function(value, callback) {

  if (value.hasOwnProperty('fd')) {

    // take read range into a account
    // `end` = Infinity –> read file till the end
    //
    // TODO: Looks like there is bug in Node fs.createReadStream
    // it doesn't respect `end` options without `start` options
    // Fix it when node fixes it.
    // https://github.com/joyent/node/issues/7819
    if (value.end != undefined && value.end != Infinity && value.start != undefined) {

      // when end specified
      // no need to calculate range
      // inclusive, starts with 0
      callback(null, value.end + 1 - (value.start ? value.start : 0));

    // not that fast snoopy
    } else {
      // still need to fetch file size from fs
      fs.stat(value.path, function(err, stat) {

        var fileSize;

        if (err) {
          callback(err);
          return;
        }

        // update final size based on the range options
        fileSize = stat.size - (value.start ? value.start : 0);
        callback(null, fileSize);
      });
    }

  // or http response
  } else if (value.hasOwnProperty('httpVersion')) {
    callback(null, +value.headers['content-length']);

  // or request stream http://github.com/mikeal/request
  } else if (value.hasOwnProperty('httpModule')) {
    // wait till response come back
    value.on('response', function(response) {
      value.pause();
      callback(null, +response.headers['content-length']);
    });
    value.resume();

  // something else
  } else {
    callback('Unknown stream');
  }
};

FormData.prototype._multiPartHeader = function(field, value, options) {
  // custom header specified (as string)?
  // it becomes responsible for boundary
  // (e.g. to handle extra CRLFs on .NET servers)
  if (typeof options.header == 'string') {
    return options.header;
  }

  var contentDisposition = this._getContentDisposition(value, options);
  var contentType = this._getContentType(value, options);

  var contents = '';
  var headers  = {
    // add custom disposition as third element or keep it two elements if not
    'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
    // if no content type. allow it to be empty array
    'Content-Type': [].concat(contentType || [])
  };

  // allow custom headers.
  if (typeof options.header == 'object') {
    populate(headers, options.header);
  }

  var header;
  for (var prop in headers) {
    if (!headers.hasOwnProperty(prop)) continue;
    header = headers[prop];

    // skip nullish headers.
    if (header == null) {
      continue;
    }

    // convert all headers to arrays.
    if (!Array.isArray(header)) {
      header = [header];
    }

    // add non-empty headers.
    if (header.length) {
      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
    }
  }

  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
};

FormData.prototype._getContentDisposition = function(value, options) {

  var filename
    , contentDisposition
    ;

  if (typeof options.filepath === 'string') {
    // custom filepath for relative paths
    filename = path.normalize(options.filepath).replace(/\\/g, '/');
  } else if (options.filename || value.name || value.path) {
    // custom filename take precedence
    // formidable and the browser add a name property
    // fs- and request- streams have path property
    filename = path.basename(options.filename || value.name || value.path);
  } else if (value.readable && value.hasOwnProperty('httpVersion')) {
    // or try http response
    filename = path.basename(value.client._httpMessage.path);
  }

  if (filename) {
    contentDisposition = 'filename="' + filename + '"';
  }

  return contentDisposition;
};

FormData.prototype._getContentType = function(value, options) {

  // use custom content-type above all
  var contentType = options.contentType;

  // or try `name` from formidable, browser
  if (!contentType && value.name) {
    contentType = mime.lookup(value.name);
  }

  // or try `path` from fs-, request- streams
  if (!contentType && value.path) {
    contentType = mime.lookup(value.path);
  }

  // or if it's http-reponse
  if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
    contentType = value.headers['content-type'];
  }

  // or guess it from the filepath or filename
  if (!contentType && (options.filepath || options.filename)) {
    contentType = mime.lookup(options.filepath || options.filename);
  }

  // fallback to the default content type if `value` is not simple value
  if (!contentType && typeof value == 'object') {
    contentType = FormData.DEFAULT_CONTENT_TYPE;
  }

  return contentType;
};

FormData.prototype._multiPartFooter = function() {
  return function(next) {
    var footer = FormData.LINE_BREAK;

    var lastPart = (this._streams.length === 0);
    if (lastPart) {
      footer += this._lastBoundary();
    }

    next(footer);
  }.bind(this);
};

FormData.prototype._lastBoundary = function() {
  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
};

FormData.prototype.getHeaders = function(userHeaders) {
  var header;
  var formHeaders = {
    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
  };

  for (header in userHeaders) {
    if (userHeaders.hasOwnProperty(header)) {
      formHeaders[header.toLowerCase()] = userHeaders[header];
    }
  }

  return formHeaders;
};

FormData.prototype.getBoundary = function() {
  if (!this._boundary) {
    this._generateBoundary();
  }

  return this._boundary;
};

FormData.prototype._generateBoundary = function() {
  // This generates a 50 character boundary similar to those used by Firefox.
  // They are optimized for boyer-moore parsing.
  var boundary = '--------------------------';
  for (var i = 0; i < 24; i++) {
    boundary += Math.floor(Math.random() * 10).toString(16);
  }

  this._boundary = boundary;
};

// Note: getLengthSync DOESN'T calculate streams length
// As workaround one can calculate file size manually
// and add it as knownLength option
FormData.prototype.getLengthSync = function() {
  var knownLength = this._overheadLength + this._valueLength;

  // Don't get confused, there are 3 "internal" streams for each keyval pair
  // so it basically checks if there is any value added to the form
  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  // https://github.com/form-data/form-data/issues/40
  if (!this.hasKnownLength()) {
    // Some async length retrievers are present
    // therefore synchronous length calculation is false.
    // Please use getLength(callback) to get proper length
    this._error(new Error('Cannot calculate proper length in synchronous way.'));
  }

  return knownLength;
};

// Public API to check if length of added values is known
// https://github.com/form-data/form-data/issues/196
// https://github.com/form-data/form-data/issues/262
FormData.prototype.hasKnownLength = function() {
  var hasKnownLength = true;

  if (this._valuesToMeasure.length) {
    hasKnownLength = false;
  }

  return hasKnownLength;
};

FormData.prototype.getLength = function(cb) {
  var knownLength = this._overheadLength + this._valueLength;

  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  if (!this._valuesToMeasure.length) {
    process.nextTick(cb.bind(this, null, knownLength));
    return;
  }

  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
    if (err) {
      cb(err);
      return;
    }

    values.forEach(function(length) {
      knownLength += length;
    });

    cb(null, knownLength);
  });
};

FormData.prototype.submit = function(params, cb) {
  var request
    , options
    , defaults = {method: 'post'}
    ;

  // parse provided url if it's string
  // or treat it as options object
  if (typeof params == 'string') {

    params = parseUrl(params);
    options = populate({
      port: params.port,
      path: params.pathname,
      host: params.hostname,
      protocol: params.protocol
    }, defaults);

  // use custom params
  } else {

    options = populate(params, defaults);
    // if no port provided use default one
    if (!options.port) {
      options.port = options.protocol == 'https:' ? 443 : 80;
    }
  }

  // put that good code in getHeaders to some use
  options.headers = this.getHeaders(params.headers);

  // https if specified, fallback to http in any other case
  if (options.protocol == 'https:') {
    request = https.request(options);
  } else {
    request = http.request(options);
  }

  // get content length and fire away
  this.getLength(function(err, length) {
    if (err) {
      this._error(err);
      return;
    }

    // add content length
    request.setHeader('Content-Length', length);

    this.pipe(request);
    if (cb) {
      request.on('error', cb);
      request.on('response', cb.bind(this, null));
    }
  }.bind(this));

  return request;
};

FormData.prototype._error = function(err) {
  if (!this.error) {
    this.error = err;
    this.pause();
    this.emit('error', err);
  }
};

FormData.prototype.toString = function () {
  return '[object FormData]';
};


/***/ }),
/* 811 */
/***/ (function(module, exports) {

// populates missing values
module.exports = function(dst, src) {

  Object.keys(src).forEach(function(prop)
  {
    dst[prop] = dst[prop] || src[prop];
  });

  return dst;
};


/***/ }),
/* 812 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * fresh
 * Copyright(c) 2012 TJ Holowaychuk
 * Copyright(c) 2016-2017 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * RegExp to check for no-cache token in Cache-Control.
 * @private
 */

var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/

/**
 * Module exports.
 * @public
 */

module.exports = fresh

/**
 * Check freshness of the response using request and response headers.
 *
 * @param {Object} reqHeaders
 * @param {Object} resHeaders
 * @return {Boolean}
 * @public
 */

function fresh (reqHeaders, resHeaders) {
  // fields
  var modifiedSince = reqHeaders['if-modified-since']
  var noneMatch = reqHeaders['if-none-match']

  // unconditional request
  if (!modifiedSince && !noneMatch) {
    return false
  }

  // Always return stale when Cache-Control: no-cache
  // to support end-to-end reload requests
  // https://tools.ietf.org/html/rfc2616#section-14.9.4
  var cacheControl = reqHeaders['cache-control']
  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
    return false
  }

  // if-none-match
  if (noneMatch && noneMatch !== '*') {
    var etag = resHeaders['etag']

    if (!etag) {
      return false
    }

    var etagStale = true
    var matches = parseTokenList(noneMatch)
    for (var i = 0; i < matches.length; i++) {
      var match = matches[i]
      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {
        etagStale = false
        break
      }
    }

    if (etagStale) {
      return false
    }
  }

  // if-modified-since
  if (modifiedSince) {
    var lastModified = resHeaders['last-modified']
    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))

    if (modifiedStale) {
      return false
    }
  }

  return true
}

/**
 * Parse an HTTP Date into a number.
 *
 * @param {string} date
 * @private
 */

function parseHttpDate (date) {
  var timestamp = date && Date.parse(date)

  // istanbul ignore next: guard against date.js Date.parse patching
  return typeof timestamp === 'number'
    ? timestamp
    : NaN
}

/**
 * Parse a HTTP token list.
 *
 * @param {string} str
 * @private
 */

function parseTokenList (str) {
  var end = 0
  var list = []
  var start = 0

  // gather tokens
  for (var i = 0, len = str.length; i < len; i++) {
    switch (str.charCodeAt(i)) {
      case 0x20: /*   */
        if (start === end) {
          start = end = i + 1
        }
        break
      case 0x2c: /* , */
        list.push(str.substring(start, end))
        start = end = i + 1
        break
      default:
        end = i + 1
        break
    }
  }

  // final token
  list.push(str.substring(start, end))

  return list
}


/***/ }),
/* 813 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const mkdirpSync = __webpack_require__(35).mkdirsSync
const utimesSync = __webpack_require__(349).utimesMillisSync

const notExist = Symbol('notExist')
const existsReg = Symbol('existsReg')

function copySync (src, dest, opts) {
  if (typeof opts === 'function') {
    opts = {filter: opts}
  }

  opts = opts || {}
  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  const resolvedDest = checkPaths(src, dest)

  if (opts.filter && !opts.filter(src, dest)) return

  const destParent = path.dirname(dest)
  if (!fs.existsSync(destParent)) mkdirpSync(destParent)
  return startCopy(resolvedDest, src, dest, opts)
}

function startCopy (resolvedDest, src, dest, opts) {
  if (opts.filter && !opts.filter(src, dest)) return
  return getStats(resolvedDest, src, dest, opts)
}

function getStats (resolvedDest, src, dest, opts) {
  const statSync = opts.dereference ? fs.statSync : fs.lstatSync
  const st = statSync(src)

  if (st.isDirectory()) return onDir(st, resolvedDest, src, dest, opts)
  else if (st.isFile() ||
           st.isCharacterDevice() ||
           st.isBlockDevice()) return onFile(st, resolvedDest, src, dest, opts)
  else if (st.isSymbolicLink()) return onLink(resolvedDest, src, dest, opts)
}

function onFile (srcStat, resolvedDest, src, dest, opts) {
  if (resolvedDest === notExist) return copyFile(srcStat, src, dest, opts)
  else if (resolvedDest === existsReg) return mayCopyFile(srcStat, src, dest, opts)
  return mayCopyFile(srcStat, src, dest, opts)
}

function mayCopyFile (srcStat, src, dest, opts) {
  if (opts.overwrite) {
    fs.unlinkSync(dest)
    return copyFile(srcStat, src, dest, opts)
  } else if (opts.errorOnExist) {
    throw new Error(`'${dest}' already exists`)
  }
}

function copyFile (srcStat, src, dest, opts) {
  if (typeof fs.copyFileSync === 'function') {
    fs.copyFileSync(src, dest)
    fs.chmodSync(dest, srcStat.mode)
    if (opts.preserveTimestamps) {
      return utimesSync(dest, srcStat.atime, srcStat.mtime)
    }
    return
  }
  return copyFileFallback(srcStat, src, dest, opts)
}

function copyFileFallback (srcStat, src, dest, opts) {
  const BUF_LENGTH = 64 * 1024
  const _buff = __webpack_require__(348)(BUF_LENGTH)

  const fdr = fs.openSync(src, 'r')
  const fdw = fs.openSync(dest, 'w', srcStat.mode)
  let pos = 0

  while (pos < srcStat.size) {
    const bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  if (opts.preserveTimestamps) fs.futimesSync(fdw, srcStat.atime, srcStat.mtime)

  fs.closeSync(fdr)
  fs.closeSync(fdw)
}

function onDir (srcStat, resolvedDest, src, dest, opts) {
  if (resolvedDest === notExist) {
    if (isSrcSubdir(src, dest)) {
      throw new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`)
    }
    return mkDirAndCopy(srcStat, src, dest, opts)
  } else if (resolvedDest === existsReg) {
    if (isSrcSubdir(src, dest)) {
      throw new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`)
    }
    return mayCopyDir(src, dest, opts)
  }
  return copyDir(src, dest, opts)
}

function mayCopyDir (src, dest, opts) {
  if (!fs.statSync(dest).isDirectory()) {
    throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
  }
  return copyDir(src, dest, opts)
}

function mkDirAndCopy (srcStat, src, dest, opts) {
  fs.mkdirSync(dest, srcStat.mode)
  fs.chmodSync(dest, srcStat.mode)
  return copyDir(src, dest, opts)
}

function copyDir (src, dest, opts) {
  fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
}

function copyDirItem (item, src, dest, opts) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  const resolvedDest = checkPaths(srcItem, destItem)
  return startCopy(resolvedDest, srcItem, destItem, opts)
}

function onLink (resolvedDest, src, dest, opts) {
  let resolvedSrc = fs.readlinkSync(src)

  if (opts.dereference) {
    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
  }

  if (resolvedDest === notExist || resolvedDest === existsReg) {
    // if dest already exists, fs throws error anyway,
    // so no need to guard against it here.
    return fs.symlinkSync(resolvedSrc, dest)
  } else {
    if (opts.dereference) {
      resolvedDest = path.resolve(process.cwd(), resolvedDest)
    }
    if (pathsAreIdentical(resolvedSrc, resolvedDest)) return

    // prevent copy if src is a subdir of dest since unlinking
    // dest in this case would result in removing src contents
    // and therefore a broken symlink would be created.
    if (fs.statSync(dest).isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
      throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
    }
    return copyLink(resolvedSrc, dest)
  }
}

function copyLink (resolvedSrc, dest) {
  fs.unlinkSync(dest)
  return fs.symlinkSync(resolvedSrc, dest)
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename.
function isSrcSubdir (src, dest) {
  const srcArray = path.resolve(src).split(path.sep)
  const destArray = path.resolve(dest).split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

// check if dest exists and is a symlink.
function checkDest (dest) {
  let resolvedPath
  try {
    resolvedPath = fs.readlinkSync(dest)
  } catch (err) {
    if (err.code === 'ENOENT') return notExist

    // dest exists and is a regular file or directory, Windows may throw UNKNOWN error.
    if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return existsReg

    throw err
  }
  return resolvedPath // dest exists and is a symlink
}

function pathsAreIdentical (src, dest) {
  const os = process.platform
  const resolvedSrc = path.resolve(src)
  const resolvedDest = path.resolve(dest)
  // case-insensitive paths
  if (os === 'darwin' || os === 'win32') {
    return resolvedSrc.toLowerCase() === resolvedDest.toLowerCase()
  }
  return resolvedSrc === resolvedDest
}

function checkPaths (src, dest) {
  const resolvedDest = checkDest(dest)
  if (resolvedDest === notExist || resolvedDest === existsReg) {
    if (pathsAreIdentical(src, dest)) throw new Error('Source and destination must not be the same.')
    return resolvedDest
  } else {
    // check resolved dest path if dest is a symlink
    if (pathsAreIdentical(src, resolvedDest)) throw new Error('Source and destination must not be the same.')
    return resolvedDest
  }
}

module.exports = copySync


/***/ }),
/* 814 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const mkdirp = __webpack_require__(35).mkdirs
const pathExists = __webpack_require__(53).pathExists
const utimes = __webpack_require__(349).utimesMillis

const notExist = Symbol('notExist')
const existsReg = Symbol('existsReg')

function copy (src, dest, opts, cb) {
  if (typeof opts === 'function' && !cb) {
    cb = opts
    opts = {}
  } else if (typeof opts === 'function') {
    opts = {filter: opts}
  }

  cb = cb || function () {}
  opts = opts || {}

  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  checkPaths(src, dest, (err, resolvedDest) => {
    if (err) return cb(err)
    if (opts.filter) return handleFilter(checkParentDir, resolvedDest, src, dest, opts, cb)
    return checkParentDir(resolvedDest, src, dest, opts, cb)
  })
}

function checkParentDir (resolvedDest, src, dest, opts, cb) {
  const destParent = path.dirname(dest)
  pathExists(destParent, (err, dirExists) => {
    if (err) return cb(err)
    if (dirExists) return startCopy(resolvedDest, src, dest, opts, cb)
    mkdirp(destParent, err => {
      if (err) return cb(err)
      return startCopy(resolvedDest, src, dest, opts, cb)
    })
  })
}

function startCopy (resolvedDest, src, dest, opts, cb) {
  if (opts.filter) return handleFilter(getStats, resolvedDest, src, dest, opts, cb)
  return getStats(resolvedDest, src, dest, opts, cb)
}

function handleFilter (onInclude, resolvedDest, src, dest, opts, cb) {
  Promise.resolve(opts.filter(src, dest)).then(include => {
    if (include) {
      if (resolvedDest) return onInclude(resolvedDest, src, dest, opts, cb)
      return onInclude(src, dest, opts, cb)
    }
    return cb()
  }, error => cb(error))
}

function getStats (resolvedDest, src, dest, opts, cb) {
  const stat = opts.dereference ? fs.stat : fs.lstat
  stat(src, (err, st) => {
    if (err) return cb(err)

    if (st.isDirectory()) return onDir(st, resolvedDest, src, dest, opts, cb)
    else if (st.isFile() ||
             st.isCharacterDevice() ||
             st.isBlockDevice()) return onFile(st, resolvedDest, src, dest, opts, cb)
    else if (st.isSymbolicLink()) return onLink(resolvedDest, src, dest, opts, cb)
  })
}

function onFile (srcStat, resolvedDest, src, dest, opts, cb) {
  if (resolvedDest === notExist) return copyFile(srcStat, src, dest, opts, cb)
  else if (resolvedDest === existsReg) return mayCopyFile(srcStat, src, dest, opts, cb)
  return mayCopyFile(srcStat, src, dest, opts, cb)
}

function mayCopyFile (srcStat, src, dest, opts, cb) {
  if (opts.overwrite) {
    fs.unlink(dest, err => {
      if (err) return cb(err)
      return copyFile(srcStat, src, dest, opts, cb)
    })
  } else if (opts.errorOnExist) {
    return cb(new Error(`'${dest}' already exists`))
  } else return cb()
}

function copyFile (srcStat, src, dest, opts, cb) {
  if (typeof fs.copyFile === 'function') {
    return fs.copyFile(src, dest, err => {
      if (err) return cb(err)
      return setDestModeAndTimestamps(srcStat, dest, opts, cb)
    })
  }
  return copyFileFallback(srcStat, src, dest, opts, cb)
}

function copyFileFallback (srcStat, src, dest, opts, cb) {
  const rs = fs.createReadStream(src)
  rs.on('error', err => cb(err)).once('open', () => {
    const ws = fs.createWriteStream(dest, { mode: srcStat.mode })
    ws.on('error', err => cb(err))
      .on('open', () => rs.pipe(ws))
      .once('close', () => setDestModeAndTimestamps(srcStat, dest, opts, cb))
  })
}

function setDestModeAndTimestamps (srcStat, dest, opts, cb) {
  fs.chmod(dest, srcStat.mode, err => {
    if (err) return cb(err)
    if (opts.preserveTimestamps) {
      return utimes(dest, srcStat.atime, srcStat.mtime, cb)
    }
    return cb()
  })
}

function onDir (srcStat, resolvedDest, src, dest, opts, cb) {
  if (resolvedDest === notExist) {
    if (isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    return mkDirAndCopy(srcStat, src, dest, opts, cb)
  } else if (resolvedDest === existsReg) {
    if (isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    return mayCopyDir(src, dest, opts, cb)
  }
  return copyDir(src, dest, opts, cb)
}

function mayCopyDir (src, dest, opts, cb) {
  fs.stat(dest, (err, st) => {
    if (err) return cb(err)
    if (!st.isDirectory()) {
      return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
    }
    return copyDir(src, dest, opts, cb)
  })
}

function mkDirAndCopy (srcStat, src, dest, opts, cb) {
  fs.mkdir(dest, srcStat.mode, err => {
    if (err) return cb(err)
    fs.chmod(dest, srcStat.mode, err => {
      if (err) return cb(err)
      return copyDir(src, dest, opts, cb)
    })
  })
}

function copyDir (src, dest, opts, cb) {
  fs.readdir(src, (err, items) => {
    if (err) return cb(err)
    return copyDirItems(items, src, dest, opts, cb)
  })
}

function copyDirItems (items, src, dest, opts, cb) {
  const item = items.pop()
  if (!item) return cb()
  return copyDirItem(items, item, src, dest, opts, cb)
}

function copyDirItem (items, item, src, dest, opts, cb) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  checkPaths(srcItem, destItem, (err, resolvedDest) => {
    if (err) return cb(err)
    startCopy(resolvedDest, srcItem, destItem, opts, err => {
      if (err) return cb(err)
      return copyDirItems(items, src, dest, opts, cb)
    })
  })
}

function onLink (resolvedDest, src, dest, opts, cb) {
  fs.readlink(src, (err, resolvedSrc) => {
    if (err) return cb(err)

    if (opts.dereference) {
      resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
    }

    if (resolvedDest === notExist || resolvedDest === existsReg) {
      // if dest already exists, fs throws error anyway,
      // so no need to guard against it here.
      return fs.symlink(resolvedSrc, dest, cb)
    } else {
      if (opts.dereference) {
        resolvedDest = path.resolve(process.cwd(), resolvedDest)
      }
      if (pathsAreIdentical(resolvedSrc, resolvedDest)) return cb()

      // prevent copy if src is a subdir of dest since unlinking
      // dest in this case would result in removing src contents
      // and therefore a broken symlink would be created.
      fs.stat(dest, (err, st) => {
        if (err) return cb(err)
        if (st.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
          return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
        }
        return copyLink(resolvedSrc, dest, cb)
      })
    }
  })
}

function copyLink (resolvedSrc, dest, cb) {
  fs.unlink(dest, err => {
    if (err) return cb(err)
    return fs.symlink(resolvedSrc, dest, cb)
  })
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename.
function isSrcSubdir (src, dest) {
  const srcArray = path.resolve(src).split(path.sep)
  const destArray = path.resolve(dest).split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

// check if dest exists and is a symlink.
function checkDest (dest, cb) {
  fs.readlink(dest, (err, resolvedPath) => {
    if (err) {
      if (err.code === 'ENOENT') return cb(null, notExist)

      // dest exists and is a regular file or directory, Windows may throw UNKNOWN error.
      if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return cb(null, existsReg)

      return cb(err)
    }
    return cb(null, resolvedPath) // dest exists and is a symlink
  })
}

function pathsAreIdentical (src, dest) {
  const os = process.platform
  const resolvedSrc = path.resolve(src)
  const resolvedDest = path.resolve(dest)
  // case-insensitive paths
  if (os === 'darwin' || os === 'win32') {
    return resolvedSrc.toLowerCase() === resolvedDest.toLowerCase()
  }
  return resolvedSrc === resolvedDest
}

function checkPaths (src, dest, cb) {
  checkDest(dest, (err, resolvedDest) => {
    if (err) return cb(err)
    if (resolvedDest === notExist || resolvedDest === existsReg) {
      if (pathsAreIdentical(src, dest)) return cb(new Error('Source and destination must not be the same.'))
      return cb(null, resolvedDest)
    } else {
      // check resolved dest path if dest is a symlink
      if (pathsAreIdentical(src, resolvedDest)) return cb(new Error('Source and destination must not be the same.'))
      return cb(null, resolvedDest)
    }
  })
}

module.exports = copy


/***/ }),
/* 815 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const fs = __webpack_require__(1)
const path = __webpack_require__(0)
const mkdir = __webpack_require__(35)
const remove = __webpack_require__(161)

const emptyDir = u(function emptyDir (dir, callback) {
  callback = callback || function () {}
  fs.readdir(dir, (err, items) => {
    if (err) return mkdir.mkdirs(dir, callback)

    items = items.map(item => path.join(dir, item))

    deleteItem()

    function deleteItem () {
      const item = items.pop()
      if (!item) return callback()
      remove.remove(item, err => {
        if (err) return callback(err)
        deleteItem()
      })
    }
  })
})

function emptyDirSync (dir) {
  let items
  try {
    items = fs.readdirSync(dir)
  } catch (err) {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(item => {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir
}


/***/ }),
/* 816 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const path = __webpack_require__(0)
const fs = __webpack_require__(3)
const mkdir = __webpack_require__(35)
const pathExists = __webpack_require__(53).pathExists

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', err => {
      if (err) return callback(err)
      callback()
    })
  }

  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
    if (!err && stats.isFile()) return callback()
    const dir = path.dirname(file)
    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return makeFile()
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        makeFile()
      })
    })
  })
}

function createFileSync (file) {
  let stats
  try {
    stats = fs.statSync(file)
  } catch (e) {}
  if (stats && stats.isFile()) return

  const dir = path.dirname(file)
  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: u(createFile),
  createFileSync
}


/***/ }),
/* 817 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const file = __webpack_require__(816)
const link = __webpack_require__(818)
const symlink = __webpack_require__(821)

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}


/***/ }),
/* 818 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const path = __webpack_require__(0)
const fs = __webpack_require__(3)
const mkdir = __webpack_require__(35)
const pathExists = __webpack_require__(53).pathExists

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, err => {
      if (err) return callback(err)
      callback(null)
    })
  }

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    fs.lstat(srcpath, (err) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }

      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, err => {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  try {
    fs.lstatSync(srcpath)
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  const dir = path.dirname(dstpath)
  const dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: u(createLink),
  createLinkSync
}


/***/ }),
/* 819 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const path = __webpack_require__(0)
const fs = __webpack_require__(3)
const pathExists = __webpack_require__(53).pathExists

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, (err) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        'toCwd': srcpath,
        'toDst': srcpath
      })
    })
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    return pathExists(relativeToDst, (err, exists) => {
      if (err) return callback(err)
      if (exists) {
        return callback(null, {
          'toCwd': relativeToDst,
          'toDst': srcpath
        })
      } else {
        return fs.lstat(srcpath, (err) => {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            'toCwd': srcpath,
            'toDst': path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  let exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      'toCwd': srcpath,
      'toDst': srcpath
    }
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        'toCwd': relativeToDst,
        'toDst': srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        'toCwd': srcpath,
        'toDst': path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  symlinkPaths,
  symlinkPathsSync
}


/***/ }),
/* 820 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, (err, stats) => {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  let stats

  if (type) return type
  try {
    stats = fs.lstatSync(srcpath)
  } catch (e) {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType,
  symlinkTypeSync
}


/***/ }),
/* 821 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const path = __webpack_require__(0)
const fs = __webpack_require__(3)
const _mkdirs = __webpack_require__(35)
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync

const _symlinkPaths = __webpack_require__(819)
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync

const _symlinkType = __webpack_require__(820)
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync

const pathExists = __webpack_require__(53).pathExists

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    symlinkPaths(srcpath, dstpath, (err, relative) => {
      if (err) return callback(err)
      srcpath = relative.toDst
      symlinkType(relative.toCwd, type, (err, type) => {
        if (err) return callback(err)
        const dir = path.dirname(dstpath)
        pathExists(dir, (err, dirExists) => {
          if (err) return callback(err)
          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
          mkdirs(dir, err => {
            if (err) return callback(err)
            fs.symlink(srcpath, dstpath, type, callback)
          })
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  const relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  const dir = path.dirname(dstpath)
  const exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: u(createSymlink),
  createSymlinkSync
}


/***/ }),
/* 822 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const jsonFile = __webpack_require__(218)

jsonFile.outputJson = u(__webpack_require__(824))
jsonFile.outputJsonSync = __webpack_require__(823)
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync

module.exports = jsonFile


/***/ }),
/* 823 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const mkdir = __webpack_require__(35)
const jsonFile = __webpack_require__(218)

function outputJsonSync (file, data, options) {
  const dir = path.dirname(file)

  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  jsonFile.writeJsonSync(file, data, options)
}

module.exports = outputJsonSync


/***/ }),
/* 824 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const path = __webpack_require__(0)
const mkdir = __webpack_require__(35)
const pathExists = __webpack_require__(53).pathExists
const jsonFile = __webpack_require__(218)

function outputJson (file, data, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const dir = path.dirname(file)

  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return jsonFile.writeJson(file, data, options, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)
      jsonFile.writeJson(file, data, options, callback)
    })
  })
}

module.exports = outputJson


/***/ }),
/* 825 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const invalidWin32Path = __webpack_require__(347).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirsSync (p, opts, made) {
  if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    throw errInval
  }

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  p = path.resolve(p)

  try {
    xfs.mkdirSync(p, mode)
    made = made || p
  } catch (err0) {
    if (err0.code === 'ENOENT') {
      if (path.dirname(p) === p) throw err0
      made = mkdirsSync(path.dirname(p), opts, made)
      mkdirsSync(p, opts, made)
    } else {
      // In the case of any other error, just see if there's a dir there
      // already. If so, then hooray!  If not, then something is borked.
      let stat
      try {
        stat = xfs.statSync(p)
      } catch (err1) {
        throw err0
      }
      if (!stat.isDirectory()) throw err0
    }
  }

  return made
}

module.exports = mkdirsSync


/***/ }),
/* 826 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const invalidWin32Path = __webpack_require__(347).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirs (p, opts, callback, made) {
  if (typeof opts === 'function') {
    callback = opts
    opts = {}
  } else if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    return callback(errInval)
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  callback = callback || function () {}
  p = path.resolve(p)

  xfs.mkdir(p, mode, er => {
    if (!er) {
      made = made || p
      return callback(null, made)
    }
    switch (er.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) return callback(er)
        mkdirs(path.dirname(p), opts, (er, made) => {
          if (er) callback(er, made)
          else mkdirs(p, opts, callback, made)
        })
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        xfs.stat(p, (er2, stat) => {
          // if the stat fails, then that's super weird.
          // let the original error be the failure reason.
          if (er2 || !stat.isDirectory()) callback(er, made)
          else callback(null, made)
        })
        break
    }
  })
}

module.exports = mkdirs


/***/ }),
/* 827 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const copySync = __webpack_require__(344).copySync
const removeSync = __webpack_require__(161).removeSync
const mkdirpSync = __webpack_require__(35).mkdirsSync
const buffer = __webpack_require__(348)

function moveSync (src, dest, options) {
  options = options || {}
  const overwrite = options.overwrite || options.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.accessSync(src)

  if (isSrcSubdir(src, dest)) throw new Error(`Cannot move '${src}' into itself '${dest}'.`)

  mkdirpSync(path.dirname(dest))
  tryRenameSync()

  function tryRenameSync () {
    if (overwrite) {
      try {
        return fs.renameSync(src, dest)
      } catch (err) {
        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST' || err.code === 'EPERM') {
          removeSync(dest)
          options.overwrite = false // just overwriteed it, no need to do it again
          return moveSync(src, dest, options)
        }

        if (err.code !== 'EXDEV') throw err
        return moveSyncAcrossDevice(src, dest, overwrite)
      }
    } else {
      try {
        fs.linkSync(src, dest)
        return fs.unlinkSync(src)
      } catch (err) {
        if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
          return moveSyncAcrossDevice(src, dest, overwrite)
        }
        throw err
      }
    }
  }
}

function moveSyncAcrossDevice (src, dest, overwrite) {
  const stat = fs.statSync(src)

  if (stat.isDirectory()) {
    return moveDirSyncAcrossDevice(src, dest, overwrite)
  } else {
    return moveFileSyncAcrossDevice(src, dest, overwrite)
  }
}

function moveFileSyncAcrossDevice (src, dest, overwrite) {
  const BUF_LENGTH = 64 * 1024
  const _buff = buffer(BUF_LENGTH)

  const flags = overwrite ? 'w' : 'wx'

  const fdr = fs.openSync(src, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(dest, flags, stat.mode)
  let pos = 0

  while (pos < stat.size) {
    const bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
  return fs.unlinkSync(src)
}

function moveDirSyncAcrossDevice (src, dest, overwrite) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    removeSync(dest)
    tryCopySync()
  } else {
    tryCopySync()
  }

  function tryCopySync () {
    copySync(src, dest, options)
    return removeSync(src)
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest) {
  try {
    return fs.statSync(src).isDirectory() &&
           src !== dest &&
           dest.indexOf(src) > -1 &&
           dest.split(path.dirname(src) + path.sep)[1].split(path.sep)[0] === path.basename(src)
  } catch (e) {
    return false
  }
}

module.exports = {
  moveSync
}


/***/ }),
/* 828 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const copy = __webpack_require__(345).copy
const remove = __webpack_require__(161).remove
const mkdirp = __webpack_require__(35).mkdirp
const pathExists = __webpack_require__(53).pathExists

function move (src, dest, opts, cb) {
  if (typeof opts === 'function') {
    cb = opts
    opts = {}
  }

  const overwrite = opts.overwrite || opts.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.access(src, cb)

  fs.stat(src, (err, st) => {
    if (err) return cb(err)

    if (st.isDirectory() && isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    mkdirp(path.dirname(dest), err => {
      if (err) return cb(err)
      return doRename(src, dest, overwrite, cb)
    })
  })
}

function doRename (src, dest, overwrite, cb) {
  if (overwrite) {
    return remove(dest, err => {
      if (err) return cb(err)
      return rename(src, dest, overwrite, cb)
    })
  }
  pathExists(dest, (err, destExists) => {
    if (err) return cb(err)
    if (destExists) return cb(new Error('dest already exists.'))
    return rename(src, dest, overwrite, cb)
  })
}

function rename (src, dest, overwrite, cb) {
  fs.rename(src, dest, err => {
    if (!err) return cb()
    if (err.code !== 'EXDEV') return cb(err)
    return moveAcrossDevice(src, dest, overwrite, cb)
  })
}

function moveAcrossDevice (src, dest, overwrite, cb) {
  const opts = {
    overwrite,
    errorOnExist: true
  }

  copy(src, dest, opts, err => {
    if (err) return cb(err)
    return remove(src, cb)
  })
}

function isSrcSubdir (src, dest) {
  const srcArray = src.split(path.sep)
  const destArray = dest.split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

module.exports = {
  move: u(move)
}


/***/ }),
/* 829 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const u = __webpack_require__(31).fromCallback
const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const mkdir = __webpack_require__(35)
const pathExists = __webpack_require__(53).pathExists

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  const dir = path.dirname(file)
  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, ...args) {
  const dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync(file, ...args)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync(file, ...args)
}

module.exports = {
  outputFile: u(outputFile),
  outputFileSync
}


/***/ }),
/* 830 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


const fs = __webpack_require__(3)
const path = __webpack_require__(0)
const assert = __webpack_require__(11)

const isWindows = (process.platform === 'win32')

function defaults (options) {
  const methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(m => {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
}

function rimraf (p, options, cb) {
  let busyTries = 0

  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  rimraf_(p, options, function CB (er) {
    if (er) {
      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
          busyTries < options.maxBusyTries) {
        busyTries++
        const time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(() => rimraf_(p, options, CB), time)
      }

      // already gone
      if (er.code === 'ENOENT') er = null
    }

    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, (er, st) => {
    if (er && er.code === 'ENOENT') {
      return cb(null)
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === 'EPERM' && isWindows) {
      return fixWinEPERM(p, options, er, cb)
    }

    if (st && st.isDirectory()) {
      return rmdir(p, options, er, cb)
    }

    options.unlink(p, er => {
      if (er) {
        if (er.code === 'ENOENT') {
          return cb(null)
        }
        if (er.code === 'EPERM') {
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        }
        if (er.code === 'EISDIR') {
          return rmdir(p, options, er, cb)
        }
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er) {
    assert(er instanceof Error)
  }

  options.chmod(p, 0o666, er2 => {
    if (er2) {
      cb(er2.code === 'ENOENT' ? null : er)
    } else {
      options.stat(p, (er3, stats) => {
        if (er3) {
          cb(er3.code === 'ENOENT' ? null : er)
        } else if (stats.isDirectory()) {
          rmdir(p, options, er, cb)
        } else {
          options.unlink(p, cb)
        }
      })
    }
  })
}

function fixWinEPERMSync (p, options, er) {
  let stats

  assert(p)
  assert(options)
  if (er) {
    assert(er instanceof Error)
  }

  try {
    options.chmodSync(p, 0o666)
  } catch (er2) {
    if (er2.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  try {
    stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  if (stats.isDirectory()) {
    rmdirSync(p, options, er)
  } else {
    options.unlinkSync(p)
  }
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, er => {
    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
      rmkids(p, options, cb)
    } else if (er && er.code === 'ENOTDIR') {
      cb(originalEr)
    } else {
      cb(er)
    }
  })
}

function rmkids (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, (er, files) => {
    if (er) return cb(er)

    let n = files.length
    let errState

    if (n === 0) return options.rmdir(p, cb)

    files.forEach(f => {
      rimraf(path.join(p, f), options, er => {
        if (errState) {
          return
        }
        if (er) return cb(errState = er)
        if (--n === 0) {
          options.rmdir(p, cb)
        }
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  let st

  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  try {
    st = options.lstatSync(p)
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er.code === 'EPERM' && isWindows) {
      fixWinEPERMSync(p, options, er)
    }
  }

  try {
    // sunos lets the root user unlink directories, which is... weird.
    if (st && st.isDirectory()) {
      rmdirSync(p, options, null)
    } else {
      options.unlinkSync(p)
    }
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    } else if (er.code === 'EPERM') {
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    } else if (er.code !== 'EISDIR') {
      throw er
    }
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === 'ENOTDIR') {
      throw originalEr
    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
      rmkidsSync(p, options)
    } else if (er.code !== 'ENOENT') {
      throw er
    }
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))

  // We only end up here once we got ENOTEMPTY at least once, and
  // at this point, we are guaranteed to have removed all the kids.
  // So, we know that it won't be ENOENT or ENOTDIR or anything else.
  // try really hard to delete stuff on windows, because it has a
  // PROFOUNDLY annoying habit of not closing handles promptly when
  // files are deleted, resulting in spurious ENOTEMPTY errors.
  const retries = isWindows ? 100 : 1
  let i = 0
  do {
    let threw = true
    try {
      const ret = options.rmdirSync(p, options)
      threw = false
      return ret
    } finally {
      if (++i < retries && threw) continue // eslint-disable-line
    }
  } while (true)
}

module.exports = rimraf
rimraf.sync = rimrafSync


/***/ }),
/* 831 */
/***/ (function(module, exports, __webpack_require__) {

var _fs
try {
  _fs = __webpack_require__(3)
} catch (_) {
  _fs = __webpack_require__(1)
}

function readFile (file, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }

  if (typeof options === 'string') {
    options = {encoding: options}
  }

  options = options || {}
  var fs = options.fs || _fs

  var shouldThrow = true
  if ('throws' in options) {
    shouldThrow = options.throws
  }

  fs.readFile(file, options, function (err, data) {
    if (err) return callback(err)

    data = stripBom(data)

    var obj
    try {
      obj = JSON.parse(data, options ? options.reviver : null)
    } catch (err2) {
      if (shouldThrow) {
        err2.message = file + ': ' + err2.message
        return callback(err2)
      } else {
        return callback(null, null)
      }
    }

    callback(null, obj)
  })
}

function readFileSync (file, options) {
  options = options || {}
  if (typeof options === 'string') {
    options = {encoding: options}
  }

  var fs = options.fs || _fs

  var shouldThrow = true
  if ('throws' in options) {
    shouldThrow = options.throws
  }

  try {
    var content = fs.readFileSync(file, options)
    content = stripBom(content)
    return JSON.parse(content, options.reviver)
  } catch (err) {
    if (shouldThrow) {
      err.message = file + ': ' + err.message
      throw err
    } else {
      return null
    }
  }
}

function stringify (obj, options) {
  var spaces
  var EOL = '\n'
  if (typeof options === 'object' && options !== null) {
    if (options.spaces) {
      spaces = options.spaces
    }
    if (options.EOL) {
      EOL = options.EOL
    }
  }

  var str = JSON.stringify(obj, options ? options.replacer : null, spaces)

  return str.replace(/\n/g, EOL) + EOL
}

function writeFile (file, obj, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }
  options = options || {}
  var fs = options.fs || _fs

  var str = ''
  try {
    str = stringify(obj, options)
  } catch (err) {
    // Need to return whether a callback was passed or not
    if (callback) callback(err, null)
    return
  }

  fs.writeFile(file, str, options, callback)
}

function writeFileSync (file, obj, options) {
  options = options || {}
  var fs = options.fs || _fs

  var str = stringify(obj, options)
  // not sure if fs.writeFileSync returns anything, but just in case
  return fs.writeFileSync(file, str, options)
}

function stripBom (content) {
  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
  if (Buffer.isBuffer(content)) content = content.toString('utf8')
  content = content.replace(/^\uFEFF/, '')
  return content
}

var jsonfile = {
  readFile: readFile,
  readFileSync: readFileSync,
  writeFile: writeFile,
  writeFileSync: writeFileSync
}

module.exports = jsonfile


/***/ }),
/* 832 */
/***/ (function(module, exports, __webpack_require__) {

// 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 pathModule = __webpack_require__(0);
var isWindows = process.platform === 'win32';
var fs = __webpack_require__(1);

// JavaScript implementation of realpath, ported from node pre-v6

var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);

function rethrow() {
  // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
  // is fairly slow to generate.
  var callback;
  if (DEBUG) {
    var backtrace = new Error;
    callback = debugCallback;
  } else
    callback = missingCallback;

  return callback;

  function debugCallback(err) {
    if (err) {
      backtrace.message = err.message;
      err = backtrace;
      missingCallback(err);
    }
  }

  function missingCallback(err) {
    if (err) {
      if (process.throwDeprecation)
        throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs
      else if (!process.noDeprecation) {
        var msg = 'fs: missing callback ' + (err.stack || err.message);
        if (process.traceDeprecation)
          console.trace(msg);
        else
          console.error(msg);
      }
    }
  }
}

function maybeCallback(cb) {
  return typeof cb === 'function' ? cb : rethrow();
}

var normalize = pathModule.normalize;

// Regexp that finds the next partion of a (partial) path
// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']
if (isWindows) {
  var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
} else {
  var nextPartRe = /(.*?)(?:[\/]+|$)/g;
}

// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
if (isWindows) {
  var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
} else {
  var splitRootRe = /^[\/]*/;
}

exports.realpathSync = function realpathSync(p, cache) {
  // make p is absolute
  p = pathModule.resolve(p);

  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
    return cache[p];
  }

  var original = p,
      seenLinks = {},
      knownHard = {};

  // current character position in p
  var pos;
  // the partial path so far, including a trailing slash if any
  var current;
  // the partial path without a trailing slash (except when pointing at a root)
  var base;
  // the partial path scanned in the previous round, with slash
  var previous;

  start();

  function start() {
    // Skip over roots
    var m = splitRootRe.exec(p);
    pos = m[0].length;
    current = m[0];
    base = m[0];
    previous = '';

    // On windows, check that the root exists. On unix there is no need.
    if (isWindows && !knownHard[base]) {
      fs.lstatSync(base);
      knownHard[base] = true;
    }
  }

  // walk down the path, swapping out linked pathparts for their real
  // values
  // NB: p.length changes.
  while (pos < p.length) {
    // find the next part
    nextPartRe.lastIndex = pos;
    var result = nextPartRe.exec(p);
    previous = current;
    current += result[0];
    base = previous + result[1];
    pos = nextPartRe.lastIndex;

    // continue if not a symlink
    if (knownHard[base] || (cache && cache[base] === base)) {
      continue;
    }

    var resolvedLink;
    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
      // some known symbolic link.  no need to stat again.
      resolvedLink = cache[base];
    } else {
      var stat = fs.lstatSync(base);
      if (!stat.isSymbolicLink()) {
        knownHard[base] = true;
        if (cache) cache[base] = base;
        continue;
      }

      // read the link if it wasn't read before
      // dev/ino always return 0 on windows, so skip the check.
      var linkTarget = null;
      if (!isWindows) {
        var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
        if (seenLinks.hasOwnProperty(id)) {
          linkTarget = seenLinks[id];
        }
      }
      if (linkTarget === null) {
        fs.statSync(base);
        linkTarget = fs.readlinkSync(base);
      }
      resolvedLink = pathModule.resolve(previous, linkTarget);
      // track this, if given a cache.
      if (cache) cache[base] = resolvedLink;
      if (!isWindows) seenLinks[id] = linkTarget;
    }

    // resolve the link, then start over
    p = pathModule.resolve(resolvedLink, p.slice(pos));
    start();
  }

  if (cache) cache[original] = p;

  return p;
};


exports.realpath = function realpath(p, cache, cb) {
  if (typeof cb !== 'function') {
    cb = maybeCallback(cache);
    cache = null;
  }

  // make p is absolute
  p = pathModule.resolve(p);

  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
    return process.nextTick(cb.bind(null, null, cache[p]));
  }

  var original = p,
      seenLinks = {},
      knownHard = {};

  // current character position in p
  var pos;
  // the partial path so far, including a trailing slash if any
  var current;
  // the partial path without a trailing slash (except when pointing at a root)
  var base;
  // the partial path scanned in the previous round, with slash
  var previous;

  start();

  function start() {
    // Skip over roots
    var m = splitRootRe.exec(p);
    pos = m[0].length;
    current = m[0];
    base = m[0];
    previous = '';

    // On windows, check that the root exists. On unix there is no need.
    if (isWindows && !knownHard[base]) {
      fs.lstat(base, function(err) {
        if (err) return cb(err);
        knownHard[base] = true;
        LOOP();
      });
    } else {
      process.nextTick(LOOP);
    }
  }

  // walk down the path, swapping out linked pathparts for their real
  // values
  function LOOP() {
    // stop if scanned past end of path
    if (pos >= p.length) {
      if (cache) cache[original] = p;
      return cb(null, p);
    }

    // find the next part
    nextPartRe.lastIndex = pos;
    var result = nextPartRe.exec(p);
    previous = current;
    current += result[0];
    base = previous + result[1];
    pos = nextPartRe.lastIndex;

    // continue if not a symlink
    if (knownHard[base] || (cache && cache[base] === base)) {
      return process.nextTick(LOOP);
    }

    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
      // known symbolic link.  no need to stat again.
      return gotResolvedLink(cache[base]);
    }

    return fs.lstat(base, gotStat);
  }

  function gotStat(err, stat) {
    if (err) return cb(err);

    // if not a symlink, skip to the next path part
    if (!stat.isSymbolicLink()) {
      knownHard[base] = true;
      if (cache) cache[base] = base;
      return process.nextTick(LOOP);
    }

    // stat & read the link if not read before
    // call gotTarget as soon as the link target is known
    // dev/ino always return 0 on windows, so skip the check.
    if (!isWindows) {
      var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
      if (seenLinks.hasOwnProperty(id)) {
        return gotTarget(null, seenLinks[id], base);
      }
    }
    fs.stat(base, function(err) {
      if (err) return cb(err);

      fs.readlink(base, function(err, target) {
        if (!isWindows) seenLinks[id] = target;
        gotTarget(err, target);
      });
    });
  }

  function gotTarget(err, target, base) {
    if (err) return cb(err);

    var resolvedLink = pathModule.resolve(previous, target);
    if (cache) cache[base] = resolvedLink;
    gotResolvedLink(resolvedLink);
  }

  function gotResolvedLink(resolvedLink) {
    // resolve the link, then start over
    p = pathModule.resolve(resolvedLink, p.slice(pos));
    start();
  }
};


/***/ }),
/* 833 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// Call this function in a another function to find out the file from
// which that function was called from. (Inspects the v8 stack trace)
//
// Inspired by http://stackoverflow.com/questions/13227489

module.exports = function getCallerFile(_position) {
  var oldPrepareStackTrace = Error.prepareStackTrace;
  Error.prepareStackTrace = function(err, stack) { return stack; };
  var stack = new Error().stack;
  Error.prepareStackTrace = oldPrepareStackTrace;

  var position = _position ? _position : 2;

  // stack[0] holds this file
  // stack[1] holds where this function was called
  // stack[2] holds the file we're interested in
  return stack[position] ? stack[position].getFileName() : undefined;
};


/***/ }),
/* 834 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const PassThrough = __webpack_require__(22).PassThrough;

module.exports = opts => {
	opts = Object.assign({}, opts);

	const array = opts.array;
	let encoding = opts.encoding;
	const buffer = encoding === 'buffer';
	let objectMode = false;

	if (array) {
		objectMode = !(encoding || buffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (buffer) {
		encoding = null;
	}

	let len = 0;
	const ret = [];
	const stream = new PassThrough({objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	stream.on('data', chunk => {
		ret.push(chunk);

		if (objectMode) {
			len = ret.length;
		} else {
			len += chunk.length;
		}
	});

	stream.getBufferedValue = () => {
		if (array) {
			return ret;
		}

		return buffer ? Buffer.concat(ret, len) : ret.join('');
	};

	stream.getBufferedLength = () => len;

	return stream;
};


/***/ }),
/* 835 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const bufferStream = __webpack_require__(834);

function getStream(inputStream, opts) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	opts = Object.assign({maxBuffer: Infinity}, opts);

	const maxBuffer = opts.maxBuffer;
	let stream;
	let clean;

	const p = new Promise((resolve, reject) => {
		const error = err => {
			if (err) { // null check
				err.bufferedData = stream.getBufferedValue();
			}

			reject(err);
		};

		stream = bufferStream(opts);
		inputStream.once('error', error);
		inputStream.pipe(stream);

		stream.on('data', () => {
			if (stream.getBufferedLength() > maxBuffer) {
				reject(new Error('maxBuffer exceeded'));
			}
		});
		stream.once('error', error);
		stream.on('end', resolve);

		clean = () => {
			// some streams doesn't implement the `stream.Readable` interface correctly
			if (inputStream.unpipe) {
				inputStream.unpipe(stream);
			}
		};
	});

	p.then(clean, clean);

	return p.then(() => stream.getBufferedValue());
}

module.exports = getStream;
module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'}));
module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true}));


/***/ }),
/* 836 */
/***/ (function(module, exports, __webpack_require__) {

var EventEmitter = __webpack_require__(18).EventEmitter
var vcsurl = __webpack_require__(431)
var request = __webpack_require__(408)
var path = __webpack_require__(0)
var fs = __webpack_require__(353)
var util = __webpack_require__(2)
var extractZip = __webpack_require__(837).extractZip
var cwd = process.cwd()

function GithubDownloader (user, repo, ref, dir) {
  this.user = user
  this.repo = repo
  this.ref = ref || 'master'
  this.dir = dir
  this._log = []
  this._getZip = false
}
util.inherits(GithubDownloader, EventEmitter)

GithubDownloader.prototype.start = function () {
  var _this = this
  var initialUrl = 'https://api.github.com/repos/' + this.user + '/' + this.repo + '/contents/'
  var initialUrlRef = this.ref ? '?ref=' + this.ref : ''
  var rawUrl = 'https://raw.github.com/' + this.user + '/' + this.repo + '/' + this.ref + '/'
  var pending = 0
  var gonnaProcess = 0

  gonnaProcess += 1
  requestJSON.call(this, initialUrl + initialUrlRef, processItems)

  function processItems (items) {
    pending += items.length
    gonnaProcess -= 1
    items.forEach(handleItem)
    checkDone()
  }

  function handleItem (item) {
    if (item.type === 'dir') {
      var dir = path.join(_this.dir, item.path)
      fs.mkdirs(dir, function (err) {
        if (err) _this.emit('error', err)
        _this._log.push(dir)
        gonnaProcess += 1
        requestJSON.call(_this, initialUrl + item.path + initialUrlRef, processItems)
        _this.emit('dir', item.path)
        pending -= 1
        checkDone()
      })
    } else if (item.type === 'file') {
      var file = path.join(_this.dir, item.path)
      fs.createFile(file, function (err) {
        if (err) _this.emit('error', err)
        request.get(rawUrl + item.path).pipe(fs.createWriteStream(file)).on('close', function () {
          _this._log.push(file)
          _this.emit('file', item.path)
          pending -= 1
          checkDone()
        })
      })
    } else {
      _this.emit('Error', new Error(JSON.stringify(item, null, 2) + '\n does not have type.'))
    }
  }

  function checkDone () {
    // console.log('PENDING: ' + pending + ' gonnaProcess: ' + gonnaProcess)
    if (pending === 0 && gonnaProcess === 0 && !this._getZip) {
      _this.emit('end')
    }
  }

  return this
}

module.exports = function GithubDownload (params, dir) {
  if (typeof params === 'string') {
    var pieces = params.split('#')
    var ref = pieces[1]
    var url = (vcsurl(pieces[0]) || pieces[0]).split('/')
    params = {user: url[url.length - 2], repo: url[url.length - 1], ref: ref}
  }

  if (typeof params !== 'object') {
    throw new Error('Invalid parameter type. Should be repo URL string or object containing repo and user.')
  }

  // console.dir(params)

  dir = dir || process.cwd()
  var gh = new GithubDownloader(params.user, params.repo, params.ref, dir)
  return gh.start()
}

// PRIVATE METHODS

function requestJSON (url, callback) {
  var _this = this
  request({url: url}, function (err, resp, body) {
    if (err) return this.emit('error', err)
    if (resp.statusCode === 403) return downloadZip.call(_this)
    if (resp.statusCode !== 200) _this.emit('error', new Error(url + ': returned ' + resp.statusCode + '\n\nbody:\n' + body))

    callback(JSON.parse(body))
  })
}

function downloadZip () {
  var _this = this
  if (_this._getZip) return
  _this._getZip = true

  _this._log.forEach(function (file) {
    fs.remove(file)
  })

  var tmpdir = generateTempDir()
  var zipBaseDir = _this.repo + '-' + _this.ref
  var zipFile = path.join(tmpdir, zipBaseDir + '.zip')

  var zipUrl = 'https://nodeload.github.com/' + _this.user + '/' + _this.repo + '/zip/' + _this.ref
  _this.emit('zip', zipUrl)

  // console.log(zipUrl)
  fs.mkdir(tmpdir, function (err) {
    if (err) _this.emit('error', err)
    request.get(zipUrl).pipe(fs.createWriteStream(zipFile)).on('close', function () {
      extractZip.call(_this, zipFile, tmpdir, function (extractedFolderName) {
        var oldPath = path.join(tmpdir, extractedFolderName)
        fs.rename(oldPath, _this.dir, function (err) {
          if (err) _this.emit('error', err)
          fs.remove(tmpdir, function (err) {
            if (err) _this.emit('error', err)
            _this.emit('end')
          })
        })
      })
    })
  })
}

function generateTempDir () {
  return path.join(cwd, Date.now().toString() + '-' + Math.random().toString().substring(2))
}


/***/ }),
/* 837 */
/***/ (function(module, exports, __webpack_require__) {

var AdmZip = __webpack_require__(515)
var fs = __webpack_require__(353)
var path = __webpack_require__(0)

// using 'this' here is weird, TODO: improve
function extractZip (zipFile, outputDir, callback) {
  var zip = new AdmZip(zipFile)
  var entries = zip.getEntries()
  var pending = entries.length
  var _this = this
  var folderName = path.basename(entries[0].entryName)

  function checkDone (err) {
    if (err) _this.emit('error', err)
    pending -= 1
    if (pending === 0) callback(folderName)
  }

  entries.forEach(function (entry) {
    if (entry.isDirectory) return checkDone()

    var file = path.resolve(outputDir, entry.entryName)
    fs.outputFile(file, entry.getData(), checkDone)
  })
}

module.exports = {
  extractZip: extractZip
}


/***/ }),
/* 838 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)

var BUF_LENGTH = 64 * 1024
var _buff = new Buffer(BUF_LENGTH)

function copyFileSync (srcFile, destFile, options) {
  var clobber = options.clobber
  var preserveTimestamps = options.preserveTimestamps

  if (fs.existsSync(destFile) && !clobber) {
    throw Error('EEXIST')
  }

  var fdr = fs.openSync(srcFile, 'r')
  var stat = fs.fstatSync(fdr)
  var fdw = fs.openSync(destFile, 'w', stat.mode)
  var bytesRead = 1
  var pos = 0

  while (bytesRead > 0) {
    bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  if (preserveTimestamps) {
    fs.futimesSync(fdw, stat.atime, stat.mtime)
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
}

module.exports = copyFileSync


/***/ }),
/* 839 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var copyFileSync = __webpack_require__(838)
var mkdir = __webpack_require__(36)

function copySync (src, dest, options) {
  if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }

  options = options || {}
  options.recursive = !!options.recursive

  // default to true for now
  options.clobber = 'clobber' in options ? !!options.clobber : true
  options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : true

  options.filter = options.filter || function () { return true }

  var stats = options.recursive ? fs.lstatSync(src) : fs.statSync(src)
  var destFolder = path.dirname(dest)
  var destFolderExists = fs.existsSync(destFolder)
  var performCopy = false

  if (stats.isFile()) {
    if (options.filter instanceof RegExp) performCopy = options.filter.test(src)
    else if (typeof options.filter === 'function') performCopy = options.filter(src)

    if (performCopy) {
      if (!destFolderExists) mkdir.mkdirsSync(destFolder)
      copyFileSync(src, dest, {clobber: options.clobber, preserveTimestamps: options.preserveTimestamps})
    }
  } else if (stats.isDirectory()) {
    if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest)
    var contents = fs.readdirSync(src)
    contents.forEach(function (content) {
      var opts = options
      opts.recursive = true
      copySync(path.join(src, content), path.join(dest, content), opts)
    })
  } else if (options.recursive && stats.isSymbolicLink()) {
    var srcPath = fs.readlinkSync(src)
    fs.symlinkSync(srcPath, dest)
  }
}

module.exports = copySync


/***/ }),
/* 840 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  copySync: __webpack_require__(839)
}


/***/ }),
/* 841 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var ncp = __webpack_require__(352)
var mkdir = __webpack_require__(36)

function copy (src, dest, options, callback) {
  if (typeof options === 'function' && !callback) {
    callback = options
    options = {}
  } else if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }
  callback = callback || function () {}

  fs.lstat(src, function (err, stats) {
    if (err) return callback(err)

    var dir = null
    if (stats.isDirectory()) {
      var parts = dest.split(path.sep)
      parts.pop()
      dir = parts.join(path.sep)
    } else {
      dir = path.dirname(dest)
    }

    fs.exists(dir, function (dirExists) {
      if (dirExists) return ncp(src, dest, options, callback)
      mkdir.mkdirs(dir, function (err) {
        if (err) return callback(err)
        ncp(src, dest, options, callback)
      })
    })
  })
}

module.exports = copy


/***/ }),
/* 842 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  copy: __webpack_require__(841)
}


/***/ }),
/* 843 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1)
var path = __webpack_require__(0)
var mkdir = __webpack_require__(36)
var remove = __webpack_require__(356)

function emptyDir (dir, callback) {
  fs.readdir(dir, function (err, items) {
    if (err) return mkdir.mkdirs(dir, callback)

    items = items.map(function (item) {
      return path.join(dir, item)
    })

    deleteItem()

    function deleteItem () {
      var item = items.pop()
      if (!item) return callback()
      remove.remove(item, function (err) {
        if (err) return callback(err)
        deleteItem()
      })
    }
  })
}

function emptyDirSync (dir) {
  var items
  try {
    items = fs.readdirSync(dir)
  } catch (err) {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(function (item) {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync: emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir: emptyDir,
  emptydir: emptyDir
}


/***/ }),
/* 844 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
var fs = __webpack_require__(3)
var mkdir = __webpack_require__(36)

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', function (err) {
      if (err) return callback(err)
      callback()
    })
  }

  fs.exists(file, function (fileExists) {
    if (fileExists) return callback()
    var dir = path.dirname(file)
    fs.exists(dir, function (dirExists) {
      if (dirExists) return makeFile()
      mkdir.mkdirs(dir, function (err) {
        if (err) return callback(err)
        makeFile()
      })
    })
  })
}

function createFileSync (file) {
  if (fs.existsSync(file)) return

  var dir = path.dirname(file)
  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: createFile,
  createFileSync: createFileSync,
  // alias
  ensureFile: createFile,
  ensureFileSync: createFileSync
}


/***/ }),
/* 845 */
/***/ (function(module, exports, __webpack_require__) {

var file = __webpack_require__(844)
var link = __webpack_require__(846)
var symlink = __webpack_require__(849)

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}


/***/ }),
/* 846 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
var fs = __webpack_require__(3)
var mkdir = __webpack_require__(36)

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, function (err) {
      if (err) return callback(err)
      callback(null)
    })
  }

  fs.exists(dstpath, function (destinationExists) {
    if (destinationExists) return callback(null)
    fs.lstat(srcpath, function (err, stat) {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }
      var dir = path.dirname(dstpath)
      fs.exists(dir, function (dirExists) {
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, function (err) {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath, callback) {

  var destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  try {
    fs.lstatSync(srcpath)
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  var dir = path.dirname(dstpath)
  var dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: createLink,
  createLinkSync: createLinkSync,
  // alias
  ensureLink: createLink,
  ensureLinkSync: createLinkSync
}


/***/ }),
/* 847 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
// path.isAbsolute shim for Node.js 0.10 support
path.isAbsolute = (path.isAbsolute) ? path.isAbsolute : __webpack_require__(65)
var fs = __webpack_require__(3)

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, function (err, stat) {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        'toCwd': srcpath,
        'toDst': srcpath
      })
    })
  } else {
    var dstdir = path.dirname(dstpath)
    var relativeToDst = path.join(dstdir, srcpath)
    return fs.exists(relativeToDst, function (exists) {
      if (exists) {
        return callback(null, {
          'toCwd': relativeToDst,
          'toDst': srcpath
        })
      } else {
        return fs.lstat(srcpath, function (err, stat) {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            'toCwd': srcpath,
            'toDst': path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  var exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      'toCwd': srcpath,
      'toDst': srcpath
    }
  } else {
    var dstdir = path.dirname(dstpath)
    var relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        'toCwd': relativeToDst,
        'toDst': srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        'toCwd': srcpath,
        'toDst': path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  'symlinkPaths': symlinkPaths,
  'symlinkPathsSync': symlinkPathsSync
}


/***/ }),
/* 848 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, function (err, stats) {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  if (type) return type
  try {
    var stats = fs.lstatSync(srcpath)
  } catch(e) {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType: symlinkType,
  symlinkTypeSync: symlinkTypeSync
}


/***/ }),
/* 849 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
var fs = __webpack_require__(3)
var _mkdirs = __webpack_require__(36)
var mkdirs = _mkdirs.mkdirs
var mkdirsSync = _mkdirs.mkdirsSync

var _symlinkPaths = __webpack_require__(847)
var symlinkPaths = _symlinkPaths.symlinkPaths
var symlinkPathsSync = _symlinkPaths.symlinkPathsSync

var _symlinkType = __webpack_require__(848)
var symlinkType = _symlinkType.symlinkType
var symlinkTypeSync = _symlinkType.symlinkTypeSync

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  fs.exists(dstpath, function (destinationExists) {
    if (destinationExists) return callback(null)
    symlinkPaths(srcpath, dstpath, function (err, relative) {
      if (err) return callback(err)
      srcpath = relative.toDst
      symlinkType(relative.toCwd, type, function (err, type) {
        if (err) return callback(err)
        var dir = path.dirname(dstpath)
        fs.exists(dir, function (dirExists) {
          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
          mkdirs(dir, function (err) {
            if (err) return callback(err)
            fs.symlink(srcpath, dstpath, type, callback)
          })
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  var destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  var relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  var dir = path.dirname(dstpath)
  var exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: createSymlink,
  createSymlinkSync: createSymlinkSync,
  // alias
  ensureSymlink: createSymlink,
  ensureSymlinkSync: createSymlinkSync
}


/***/ }),
/* 850 */
/***/ (function(module, exports, __webpack_require__) {

var jsonFile = __webpack_require__(224)

module.exports = {
  outputJsonSync: __webpack_require__(354),
  outputJson: __webpack_require__(355),
  // aliases
  outputJSONSync: __webpack_require__(354),
  outputJSON: __webpack_require__(355),
  // jsonfile exports
  readJson: jsonFile.readFile,
  readJSON: jsonFile.readFile,
  readJsonSync: jsonFile.readFileSync,
  readJSONSync: jsonFile.readFileSync,
  writeJson: jsonFile.writeFile,
  writeJSON: jsonFile.writeFile,
  writeJsonSync: jsonFile.writeFileSync,
  writeJSONSync: jsonFile.writeFileSync,
  spaces: 2 // default in fs-extra
}


/***/ }),
/* 851 */
/***/ (function(module, exports, __webpack_require__) {

// most of this code was written by Andrew Kelley
// licensed under the BSD license: see
// https://github.com/andrewrk/node-mv/blob/master/package.json

// this needs a cleanup

var fs = __webpack_require__(3)
var ncp = __webpack_require__(352)
var path = __webpack_require__(0)
var rimraf = __webpack_require__(237)
var mkdirp = __webpack_require__(36).mkdirs

function mv (source, dest, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  var shouldMkdirp = ('mkdirp' in options) ? options.mkdirp : true
  var clobber = ('clobber' in options) ? options.clobber : false

  var limit = options.limit || 16

  if (shouldMkdirp) {
    mkdirs()
  } else {
    doRename()
  }

  function mkdirs () {
    mkdirp(path.dirname(dest), function (err) {
      if (err) return callback(err)
      doRename()
    })
  }

  function doRename () {
    if (clobber) {
      fs.rename(source, dest, function (err) {
        if (!err) return callback()

        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') {
          rimraf(dest, function (err) {
            if (err) return callback(err)
            options.clobber = false // just clobbered it, no need to do it again
            mv(source, dest, options, callback)
          })
          return
        }

        // weird Windows shit
        if (err.code === 'EPERM') {
          setTimeout(function () {
            rimraf(dest, function (err) {
              if (err) return callback(err)
              options.clobber = false
              mv(source, dest, options, callback)
            })
          }, 200)
          return
        }

        if (err.code !== 'EXDEV') return callback(err)
        moveAcrossDevice(source, dest, clobber, limit, callback)
      })
    } else {
      fs.link(source, dest, function (err) {
        if (err) {
          if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM') {
            moveAcrossDevice(source, dest, clobber, limit, callback)
            return
          }
          callback(err)
          return
        }
        fs.unlink(source, callback)
      })
    }
  }
}

function moveAcrossDevice (source, dest, clobber, limit, callback) {
  fs.stat(source, function (err, stat) {
    if (err) {
      callback(err)
      return
    }

    if (stat.isDirectory()) {
      moveDirAcrossDevice(source, dest, clobber, limit, callback)
    } else {
      moveFileAcrossDevice(source, dest, clobber, limit, callback)
    }
  })
}

function moveFileAcrossDevice (source, dest, clobber, limit, callback) {
  var outFlags = clobber ? 'w' : 'wx'
  var ins = fs.createReadStream(source)
  var outs = fs.createWriteStream(dest, {flags: outFlags})

  ins.on('error', function (err) {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)

    // may want to create a directory but `out` line above
    // creates an empty file for us: See #108
    // don't care about error here
    fs.unlink(dest, function () {
      // note: `err` here is from the input stream errror
      if (err.code === 'EISDIR' || err.code === 'EPERM') {
        moveDirAcrossDevice(source, dest, clobber, limit, callback)
      } else {
        callback(err)
      }
    })
  })

  outs.on('error', function (err) {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)
    callback(err)
  })

  outs.once('close', onClose)
  ins.pipe(outs)

  function onClose () {
    fs.unlink(source, callback)
  }
}

function moveDirAcrossDevice (source, dest, clobber, limit, callback) {
  var options = {
    stopOnErr: true,
    clobber: false,
    limit: limit
  }

  function startNcp () {
    ncp(source, dest, options, function (errList) {
      if (errList) return callback(errList[0])
      rimraf(source, callback)
    })
  }

  if (clobber) {
    rimraf(dest, function (err) {
      if (err) return callback(err)
      startNcp()
    })
  } else {
    startNcp()
  }
}

module.exports = {
  move: mv
}


/***/ }),
/* 852 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
var fs = __webpack_require__(3)
var mkdir = __webpack_require__(36)

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  var dir = path.dirname(file)
  fs.exists(dir, function (itDoes) {
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, function (err) {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, data, encoding) {
  var dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync.apply(fs, arguments)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync.apply(fs, arguments)
}

module.exports = {
  outputFile: outputFile,
  outputFileSync: outputFileSync
}


/***/ }),
/* 853 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0)
var fs = __webpack_require__(1)
var mkdir = __webpack_require__(36)
var WriteStream = fs.WriteStream

function createOutputStream (file, options) {
  var dirExists = false
  var dir = path.dirname(file)
  options = options || {}

  // if fd is set with an actual number, file is created, hence directory is too
  if (options.fd) {
    return fs.createWriteStream(file, options)
  } else {
    // this hacks the WriteStream constructor from calling open()
    options.fd = -1
  }

  var ws = new WriteStream(file, options)

  var oldOpen = ws.open
  ws.open = function () {
    ws.fd = null // set actual fd
    if (dirExists) return oldOpen.call(ws)

    // this only runs once on first write
    mkdir.mkdirs(dir, function (err) {
      if (err) {
        ws.destroy()
        ws.emit('error', err)
        return
      }
      dirExists = true
      oldOpen.call(ws)
    })
  }

  ws.open()

  return ws
}

module.exports = createOutputStream


/***/ }),
/* 854 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = {
  createOutputStream: __webpack_require__(853)
}


/***/ }),
/* 855 */
/***/ (function(module, exports) {

// simple mutable assign
function assign () {
  var args = [].slice.call(arguments).filter(function (i) { return i })
  var dest = args.shift()
  args.forEach(function (src) {
    Object.keys(src).forEach(function (key) {
      dest[key] = src[key]
    })
  })

  return dest
}

module.exports = assign


/***/ }),
/* 856 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(3)
var path = __webpack_require__(0)
var os = __webpack_require__(5)

// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisResSync () {
  var tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  var d = new Date(1435410243862)
  fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
  var fd = fs.openSync(tmpfile, 'r+')
  fs.futimesSync(fd, d, d)
  fs.closeSync(fd)
  return fs.statSync(tmpfile).mtime > 1435410243000
}

function hasMillisRes (callback) {
  var tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  var d = new Date(1435410243862)
  fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', function (err) {
    if (err) return callback(err)
    fs.open(tmpfile, 'r+', function (err, fd) {
      if (err) return callback(err)
      fs.futimes(fd, d, d, function (err) {
        if (err) return callback(err)
        fs.close(fd, function (err) {
          if (err) return callback(err)
          fs.stat(tmpfile, function (err, stats) {
            if (err) return callback(err)
            callback(null, stats.mtime > 1435410243000)
          })
        })
      })
    })
  })
}

function timeRemoveMillis (timestamp) {
  if (typeof timestamp === 'number') {
    return Math.floor(timestamp / 1000) * 1000
  } else if (timestamp instanceof Date) {
    return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
  } else {
    throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
  }
}

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', function (err, fd) {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, function (err) {
      if (err) return callback(err)
      fs.close(fd, callback)
    })
  })
}

module.exports = {
  hasMillisRes: hasMillisRes,
  hasMillisResSync: hasMillisResSync,
  timeRemoveMillis: timeRemoveMillis,
  utimesMillis: utimesMillis
}


/***/ }),
/* 857 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * glob-base <https://github.com/jonschlinkert/glob-base>
 *
 * Copyright (c) 2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var path = __webpack_require__(0);
var parent = __webpack_require__(858);
var isGlob = __webpack_require__(96);

module.exports = function globBase(pattern) {
  if (typeof pattern !== 'string') {
    throw new TypeError('glob-base expects a string.');
  }

  var res = {};
  res.base = parent(pattern);
  res.isGlob = isGlob(pattern);

  if (res.base !== '.') {
    res.glob = pattern.substr(res.base.length);
    if (res.glob.charAt(0) === '/') {
      res.glob = res.glob.substr(1);
    }
  } else {
    res.glob = pattern;
  }

  if (!res.isGlob) {
    res.base = dirname(pattern);
    res.glob = res.base !== '.'
      ? pattern.substr(res.base.length)
      : pattern;
  }

  if (res.glob.substr(0, 2) === './') {
    res.glob = res.glob.substr(2);
  }
  if (res.glob.charAt(0) === '/') {
    res.glob = res.glob.substr(1);
  }
  return res;
};

function dirname(glob) {
  if (glob.slice(-1) === '/') return glob;
  return path.dirname(glob);
}


/***/ }),
/* 858 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var path = __webpack_require__(0);
var isglob = __webpack_require__(96);

module.exports = function globParent(str) {
	str += 'a'; // preserves full path in case of trailing path separator
	do {str = path.dirname(str)} while (isglob(str));
	return str;
};


/***/ }),
/* 859 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = globSync
globSync.GlobSync = GlobSync

var fs = __webpack_require__(1)
var rp = __webpack_require__(350)
var minimatch = __webpack_require__(64)
var Minimatch = minimatch.Minimatch
var Glob = __webpack_require__(124).Glob
var util = __webpack_require__(2)
var path = __webpack_require__(0)
var assert = __webpack_require__(11)
var isAbsolute = __webpack_require__(65)
var common = __webpack_require__(357)
var alphasort = common.alphasort
var alphasorti = common.alphasorti
var setopts = common.setopts
var ownProp = common.ownProp
var childrenIgnored = common.childrenIgnored
var isIgnored = common.isIgnored

function globSync (pattern, options) {
  if (typeof options === 'function' || arguments.length === 3)
    throw new TypeError('callback provided to sync glob\n'+
                        'See: https://github.com/isaacs/node-glob/issues/167')

  return new GlobSync(pattern, options).found
}

function GlobSync (pattern, options) {
  if (!pattern)
    throw new Error('must provide pattern')

  if (typeof options === 'function' || arguments.length === 3)
    throw new TypeError('callback provided to sync glob\n'+
                        'See: https://github.com/isaacs/node-glob/issues/167')

  if (!(this instanceof GlobSync))
    return new GlobSync(pattern, options)

  setopts(this, pattern, options)

  if (this.noprocess)
    return this

  var n = this.minimatch.set.length
  this.matches = new Array(n)
  for (var i = 0; i < n; i ++) {
    this._process(this.minimatch.set[i], i, false)
  }
  this._finish()
}

GlobSync.prototype._finish = function () {
  assert(this instanceof GlobSync)
  if (this.realpath) {
    var self = this
    this.matches.forEach(function (matchset, index) {
      var set = self.matches[index] = Object.create(null)
      for (var p in matchset) {
        try {
          p = self._makeAbs(p)
          var real = rp.realpathSync(p, self.realpathCache)
          set[real] = true
        } catch (er) {
          if (er.syscall === 'stat')
            set[self._makeAbs(p)] = true
          else
            throw er
        }
      }
    })
  }
  common.finish(this)
}


GlobSync.prototype._process = function (pattern, index, inGlobStar) {
  assert(this instanceof GlobSync)

  // Get the first [n] parts of pattern that are all strings.
  var n = 0
  while (typeof pattern[n] === 'string') {
    n ++
  }
  // now n is the index of the first one that is *not* a string.

  // See if there's anything else
  var prefix
  switch (n) {
    // if not, then this is rather simple
    case pattern.length:
      this._processSimple(pattern.join('/'), index)
      return

    case 0:
      // pattern *starts* with some non-trivial item.
      // going to readdir(cwd), but not include the prefix in matches.
      prefix = null
      break

    default:
      // pattern has some string bits in the front.
      // whatever it starts with, whether that's 'absolute' like /foo/bar,
      // or 'relative' like '../baz'
      prefix = pattern.slice(0, n).join('/')
      break
  }

  var remain = pattern.slice(n)

  // get the list of entries.
  var read
  if (prefix === null)
    read = '.'
  else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
    if (!prefix || !isAbsolute(prefix))
      prefix = '/' + prefix
    read = prefix
  } else
    read = prefix

  var abs = this._makeAbs(read)

  //if ignored, skip processing
  if (childrenIgnored(this, read))
    return

  var isGlobStar = remain[0] === minimatch.GLOBSTAR
  if (isGlobStar)
    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
  else
    this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
}


GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
  var entries = this._readdir(abs, inGlobStar)

  // if the abs isn't a dir, then nothing can match!
  if (!entries)
    return

  // It will only match dot entries if it starts with a dot, or if
  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
  var pn = remain[0]
  var negate = !!this.minimatch.negate
  var rawGlob = pn._glob
  var dotOk = this.dot || rawGlob.charAt(0) === '.'

  var matchedEntries = []
  for (var i = 0; i < entries.length; i++) {
    var e = entries[i]
    if (e.charAt(0) !== '.' || dotOk) {
      var m
      if (negate && !prefix) {
        m = !e.match(pn)
      } else {
        m = e.match(pn)
      }
      if (m)
        matchedEntries.push(e)
    }
  }

  var len = matchedEntries.length
  // If there are no matched entries, then nothing matches.
  if (len === 0)
    return

  // if this is the last remaining pattern bit, then no need for
  // an additional stat *unless* the user has specified mark or
  // stat explicitly.  We know they exist, since readdir returned
  // them.

  if (remain.length === 1 && !this.mark && !this.stat) {
    if (!this.matches[index])
      this.matches[index] = Object.create(null)

    for (var i = 0; i < len; i ++) {
      var e = matchedEntries[i]
      if (prefix) {
        if (prefix.slice(-1) !== '/')
          e = prefix + '/' + e
        else
          e = prefix + e
      }

      if (e.charAt(0) === '/' && !this.nomount) {
        e = path.join(this.root, e)
      }
      this._emitMatch(index, e)
    }
    // This was the last one, and no stats were needed
    return
  }

  // now test all matched entries as stand-ins for that part
  // of the pattern.
  remain.shift()
  for (var i = 0; i < len; i ++) {
    var e = matchedEntries[i]
    var newPattern
    if (prefix)
      newPattern = [prefix, e]
    else
      newPattern = [e]
    this._process(newPattern.concat(remain), index, inGlobStar)
  }
}


GlobSync.prototype._emitMatch = function (index, e) {
  if (isIgnored(this, e))
    return

  var abs = this._makeAbs(e)

  if (this.mark)
    e = this._mark(e)

  if (this.absolute) {
    e = abs
  }

  if (this.matches[index][e])
    return

  if (this.nodir) {
    var c = this.cache[abs]
    if (c === 'DIR' || Array.isArray(c))
      return
  }

  this.matches[index][e] = true

  if (this.stat)
    this._stat(e)
}


GlobSync.prototype._readdirInGlobStar = function (abs) {
  // follow all symlinked directories forever
  // just proceed as if this is a non-globstar situation
  if (this.follow)
    return this._readdir(abs, false)

  var entries
  var lstat
  var stat
  try {
    lstat = fs.lstatSync(abs)
  } catch (er) {
    if (er.code === 'ENOENT') {
      // lstat failed, doesn't exist
      return null
    }
  }

  var isSym = lstat && lstat.isSymbolicLink()
  this.symlinks[abs] = isSym

  // If it's not a symlink or a dir, then it's definitely a regular file.
  // don't bother doing a readdir in that case.
  if (!isSym && lstat && !lstat.isDirectory())
    this.cache[abs] = 'FILE'
  else
    entries = this._readdir(abs, false)

  return entries
}

GlobSync.prototype._readdir = function (abs, inGlobStar) {
  var entries

  if (inGlobStar && !ownProp(this.symlinks, abs))
    return this._readdirInGlobStar(abs)

  if (ownProp(this.cache, abs)) {
    var c = this.cache[abs]
    if (!c || c === 'FILE')
      return null

    if (Array.isArray(c))
      return c
  }

  try {
    return this._readdirEntries(abs, fs.readdirSync(abs))
  } catch (er) {
    this._readdirError(abs, er)
    return null
  }
}

GlobSync.prototype._readdirEntries = function (abs, entries) {
  // if we haven't asked to stat everything, then just
  // assume that everything in there exists, so we can avoid
  // having to stat it a second time.
  if (!this.mark && !this.stat) {
    for (var i = 0; i < entries.length; i ++) {
      var e = entries[i]
      if (abs === '/')
        e = abs + e
      else
        e = abs + '/' + e
      this.cache[e] = true
    }
  }

  this.cache[abs] = entries

  // mark and cache dir-ness
  return entries
}

GlobSync.prototype._readdirError = function (f, er) {
  // handle errors, and cache the information
  switch (er.code) {
    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
    case 'ENOTDIR': // totally normal. means it *does* exist.
      var abs = this._makeAbs(f)
      this.cache[abs] = 'FILE'
      if (abs === this.cwdAbs) {
        var error = new Error(er.code + ' invalid cwd ' + this.cwd)
        error.path = this.cwd
        error.code = er.code
        throw error
      }
      break

    case 'ENOENT': // not terribly unusual
    case 'ELOOP':
    case 'ENAMETOOLONG':
    case 'UNKNOWN':
      this.cache[this._makeAbs(f)] = false
      break

    default: // some unusual error.  Treat as failure.
      this.cache[this._makeAbs(f)] = false
      if (this.strict)
        throw er
      if (!this.silent)
        console.error('glob error', er)
      break
  }
}

GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {

  var entries = this._readdir(abs, inGlobStar)

  // no entries means not a dir, so it can never have matches
  // foo.txt/** doesn't match foo.txt
  if (!entries)
    return

  // test without the globstar, and with every child both below
  // and replacing the globstar.
  var remainWithoutGlobStar = remain.slice(1)
  var gspref = prefix ? [ prefix ] : []
  var noGlobStar = gspref.concat(remainWithoutGlobStar)

  // the noGlobStar pattern exits the inGlobStar state
  this._process(noGlobStar, index, false)

  var len = entries.length
  var isSym = this.symlinks[abs]

  // If it's a symlink, and we're in a globstar, then stop
  if (isSym && inGlobStar)
    return

  for (var i = 0; i < len; i++) {
    var e = entries[i]
    if (e.charAt(0) === '.' && !this.dot)
      continue

    // these two cases enter the inGlobStar state
    var instead = gspref.concat(entries[i], remainWithoutGlobStar)
    this._process(instead, index, true)

    var below = gspref.concat(entries[i], remain)
    this._process(below, index, true)
  }
}

GlobSync.prototype._processSimple = function (prefix, index) {
  // XXX review this.  Shouldn't it be doing the mounting etc
  // before doing stat?  kinda weird?
  var exists = this._stat(prefix)

  if (!this.matches[index])
    this.matches[index] = Object.create(null)

  // If it doesn't exist, then just mark the lack of results
  if (!exists)
    return

  if (prefix && isAbsolute(prefix) && !this.nomount) {
    var trail = /[\/\\]$/.test(prefix)
    if (prefix.charAt(0) === '/') {
      prefix = path.join(this.root, prefix)
    } else {
      prefix = path.resolve(this.root, prefix)
      if (trail)
        prefix += '/'
    }
  }

  if (process.platform === 'win32')
    prefix = prefix.replace(/\\/g, '/')

  // Mark this as a match
  this._emitMatch(index, prefix)
}

// Returns either 'DIR', 'FILE', or false
GlobSync.prototype._stat = function (f) {
  var abs = this._makeAbs(f)
  var needDir = f.slice(-1) === '/'

  if (f.length > this.maxLength)
    return false

  if (!this.stat && ownProp(this.cache, abs)) {
    var c = this.cache[abs]

    if (Array.isArray(c))
      c = 'DIR'

    // It exists, but maybe not how we need it
    if (!needDir || c === 'DIR')
      return c

    if (needDir && c === 'FILE')
      return false

    // otherwise we have to stat, because maybe c=true
    // if we know it exists, but not what it is.
  }

  var exists
  var stat = this.statCache[abs]
  if (!stat) {
    var lstat
    try {
      lstat = fs.lstatSync(abs)
    } catch (er) {
      if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
        this.statCache[abs] = false
        return false
      }
    }

    if (lstat && lstat.isSymbolicLink()) {
      try {
        stat = fs.statSync(abs)
      } catch (er) {
        stat = lstat
      }
    } else {
      stat = lstat
    }
  }

  this.statCache[abs] = stat

  var c = true
  if (stat)
    c = stat.isDirectory() ? 'DIR' : 'FILE'

  this.cache[abs] = this.cache[abs] || c

  if (needDir && c === 'FILE')
    return false

  return c
}

GlobSync.prototype._mark = function (p) {
  return common.mark(this, p)
}

GlobSync.prototype._makeAbs = function (f) {
  return common.makeAbs(this, f)
}


/***/ }),
/* 860 */
/***/ (function(module, exports, __webpack_require__) {

var Stream = __webpack_require__(22).Stream

module.exports = legacy

function legacy (fs) {
  return {
    ReadStream: ReadStream,
    WriteStream: WriteStream
  }

  function ReadStream (path, options) {
    if (!(this instanceof ReadStream)) return new ReadStream(path, options);

    Stream.call(this);

    var self = this;

    this.path = path;
    this.fd = null;
    this.readable = true;
    this.paused = false;

    this.flags = 'r';
    this.mode = 438; /*=0666*/
    this.bufferSize = 64 * 1024;

    options = options || {};

    // Mixin options into this
    var keys = Object.keys(options);
    for (var index = 0, length = keys.length; index < length; index++) {
      var key = keys[index];
      this[key] = options[key];
    }

    if (this.encoding) this.setEncoding(this.encoding);

    if (this.start !== undefined) {
      if ('number' !== typeof this.start) {
        throw TypeError('start must be a Number');
      }
      if (this.end === undefined) {
        this.end = Infinity;
      } else if ('number' !== typeof this.end) {
        throw TypeError('end must be a Number');
      }

      if (this.start > this.end) {
        throw new Error('start must be <= end');
      }

      this.pos = this.start;
    }

    if (this.fd !== null) {
      process.nextTick(function() {
        self._read();
      });
      return;
    }

    fs.open(this.path, this.flags, this.mode, function (err, fd) {
      if (err) {
        self.emit('error', err);
        self.readable = false;
        return;
      }

      self.fd = fd;
      self.emit('open', fd);
      self._read();
    })
  }

  function WriteStream (path, options) {
    if (!(this instanceof WriteStream)) return new WriteStream(path, options);

    Stream.call(this);

    this.path = path;
    this.fd = null;
    this.writable = true;

    this.flags = 'w';
    this.encoding = 'binary';
    this.mode = 438; /*=0666*/
    this.bytesWritten = 0;

    options = options || {};

    // Mixin options into this
    var keys = Object.keys(options);
    for (var index = 0, length = keys.length; index < length; index++) {
      var key = keys[index];
      this[key] = options[key];
    }

    if (this.start !== undefined) {
      if ('number' !== typeof this.start) {
        throw TypeError('start must be a Number');
      }
      if (this.start < 0) {
        throw new Error('start must be >= zero');
      }

      this.pos = this.start;
    }

    this.busy = false;
    this._queue = [];

    if (this.fd === null) {
      this._open = fs.open;
      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
      this.flush();
    }
  }
}


/***/ }),
/* 861 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(358)
var constants = __webpack_require__(141)

var origCwd = process.cwd
var cwd = null

var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform

process.cwd = function() {
  if (!cwd)
    cwd = origCwd.call(process)
  return cwd
}
try {
  process.cwd()
} catch (er) {}

var chdir = process.chdir
process.chdir = function(d) {
  cwd = null
  chdir.call(process, d)
}

module.exports = patch

function patch (fs) {
  // (re-)implement some things that are known busted or missing.

  // lchmod, broken prior to 0.6.2
  // back-port the fix here.
  if (constants.hasOwnProperty('O_SYMLINK') &&
      process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
    patchLchmod(fs)
  }

  // lutimes implementation, or no-op
  if (!fs.lutimes) {
    patchLutimes(fs)
  }

  // https://github.com/isaacs/node-graceful-fs/issues/4
  // Chown should not fail on einval or eperm if non-root.
  // It should not fail on enosys ever, as this just indicates
  // that a fs doesn't support the intended operation.

  fs.chown = chownFix(fs.chown)
  fs.fchown = chownFix(fs.fchown)
  fs.lchown = chownFix(fs.lchown)

  fs.chmod = chmodFix(fs.chmod)
  fs.fchmod = chmodFix(fs.fchmod)
  fs.lchmod = chmodFix(fs.lchmod)

  fs.chownSync = chownFixSync(fs.chownSync)
  fs.fchownSync = chownFixSync(fs.fchownSync)
  fs.lchownSync = chownFixSync(fs.lchownSync)

  fs.chmodSync = chmodFixSync(fs.chmodSync)
  fs.fchmodSync = chmodFixSync(fs.fchmodSync)
  fs.lchmodSync = chmodFixSync(fs.lchmodSync)

  fs.stat = statFix(fs.stat)
  fs.fstat = statFix(fs.fstat)
  fs.lstat = statFix(fs.lstat)

  fs.statSync = statFixSync(fs.statSync)
  fs.fstatSync = statFixSync(fs.fstatSync)
  fs.lstatSync = statFixSync(fs.lstatSync)

  // if lchmod/lchown do not exist, then make them no-ops
  if (!fs.lchmod) {
    fs.lchmod = function (path, mode, cb) {
      if (cb) process.nextTick(cb)
    }
    fs.lchmodSync = function () {}
  }
  if (!fs.lchown) {
    fs.lchown = function (path, uid, gid, cb) {
      if (cb) process.nextTick(cb)
    }
    fs.lchownSync = function () {}
  }

  // on Windows, A/V software can lock the directory, causing this
  // to fail with an EACCES or EPERM if the directory contains newly
  // created files.  Try again on failure, for up to 60 seconds.

  // Set the timeout this long because some Windows Anti-Virus, such as Parity
  // bit9, may lock files for up to a minute, causing npm package install
  // failures. Also, take care to yield the scheduler. Windows scheduling gives
  // CPU to a busy looping process, which can cause the program causing the lock
  // contention to be starved of CPU by node, so the contention doesn't resolve.
  if (platform === "win32") {
    fs.rename = (function (fs$rename) { return function (from, to, cb) {
      var start = Date.now()
      var backoff = 0;
      fs$rename(from, to, function CB (er) {
        if (er
            && (er.code === "EACCES" || er.code === "EPERM")
            && Date.now() - start < 60000) {
          setTimeout(function() {
            fs.stat(to, function (stater, st) {
              if (stater && stater.code === "ENOENT")
                fs$rename(from, to, CB);
              else
                cb(er)
            })
          }, backoff)
          if (backoff < 100)
            backoff += 10;
          return;
        }
        if (cb) cb(er)
      })
    }})(fs.rename)
  }

  // if read() returns EAGAIN, then just try it again.
  fs.read = (function (fs$read) { return function (fd, buffer, offset, length, position, callback_) {
    var callback
    if (callback_ && typeof callback_ === 'function') {
      var eagCounter = 0
      callback = function (er, _, __) {
        if (er && er.code === 'EAGAIN' && eagCounter < 10) {
          eagCounter ++
          return fs$read.call(fs, fd, buffer, offset, length, position, callback)
        }
        callback_.apply(this, arguments)
      }
    }
    return fs$read.call(fs, fd, buffer, offset, length, position, callback)
  }})(fs.read)

  fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
    var eagCounter = 0
    while (true) {
      try {
        return fs$readSync.call(fs, fd, buffer, offset, length, position)
      } catch (er) {
        if (er.code === 'EAGAIN' && eagCounter < 10) {
          eagCounter ++
          continue
        }
        throw er
      }
    }
  }})(fs.readSync)
}

function patchLchmod (fs) {
  fs.lchmod = function (path, mode, callback) {
    fs.open( path
           , constants.O_WRONLY | constants.O_SYMLINK
           , mode
           , function (err, fd) {
      if (err) {
        if (callback) callback(err)
        return
      }
      // prefer to return the chmod error, if one occurs,
      // but still try to close, and report closing errors if they occur.
      fs.fchmod(fd, mode, function (err) {
        fs.close(fd, function(err2) {
          if (callback) callback(err || err2)
        })
      })
    })
  }

  fs.lchmodSync = function (path, mode) {
    var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)

    // prefer to return the chmod error, if one occurs,
    // but still try to close, and report closing errors if they occur.
    var threw = true
    var ret
    try {
      ret = fs.fchmodSync(fd, mode)
      threw = false
    } finally {
      if (threw) {
        try {
          fs.closeSync(fd)
        } catch (er) {}
      } else {
        fs.closeSync(fd)
      }
    }
    return ret
  }
}

function patchLutimes (fs) {
  if (constants.hasOwnProperty("O_SYMLINK")) {
    fs.lutimes = function (path, at, mt, cb) {
      fs.open(path, constants.O_SYMLINK, function (er, fd) {
        if (er) {
          if (cb) cb(er)
          return
        }
        fs.futimes(fd, at, mt, function (er) {
          fs.close(fd, function (er2) {
            if (cb) cb(er || er2)
          })
        })
      })
    }

    fs.lutimesSync = function (path, at, mt) {
      var fd = fs.openSync(path, constants.O_SYMLINK)
      var ret
      var threw = true
      try {
        ret = fs.futimesSync(fd, at, mt)
        threw = false
      } finally {
        if (threw) {
          try {
            fs.closeSync(fd)
          } catch (er) {}
        } else {
          fs.closeSync(fd)
        }
      }
      return ret
    }

  } else {
    fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
    fs.lutimesSync = function () {}
  }
}

function chmodFix (orig) {
  if (!orig) return orig
  return function (target, mode, cb) {
    return orig.call(fs, target, mode, function (er) {
      if (chownErOk(er)) er = null
      if (cb) cb.apply(this, arguments)
    })
  }
}

function chmodFixSync (orig) {
  if (!orig) return orig
  return function (target, mode) {
    try {
      return orig.call(fs, target, mode)
    } catch (er) {
      if (!chownErOk(er)) throw er
    }
  }
}


function chownFix (orig) {
  if (!orig) return orig
  return function (target, uid, gid, cb) {
    return orig.call(fs, target, uid, gid, function (er) {
      if (chownErOk(er)) er = null
      if (cb) cb.apply(this, arguments)
    })
  }
}

function chownFixSync (orig) {
  if (!orig) return orig
  return function (target, uid, gid) {
    try {
      return orig.call(fs, target, uid, gid)
    } catch (er) {
      if (!chownErOk(er)) throw er
    }
  }
}


function statFix (orig) {
  if (!orig) return orig
  // Older versions of Node erroneously returned signed integers for
  // uid + gid.
  return function (target, cb) {
    return orig.call(fs, target, function (er, stats) {
      if (!stats) return cb.apply(this, arguments)
      if (stats.uid < 0) stats.uid += 0x100000000
      if (stats.gid < 0) stats.gid += 0x100000000
      if (cb) cb.apply(this, arguments)
    })
  }
}

function statFixSync (orig) {
  if (!orig) return orig
  // Older versions of Node erroneously returned signed integers for
  // uid + gid.
  return function (target) {
    var stats = orig.call(fs, target)
    if (stats.uid < 0) stats.uid += 0x100000000
    if (stats.gid < 0) stats.gid += 0x100000000
    return stats;
  }
}

// ENOSYS means that the fs doesn't support the op. Just ignore
// that, because it doesn't matter.
//
// if there's no getuid, or if getuid() is something other
// than 0, and the error is EINVAL or EPERM, then just ignore
// it.
//
// This specific case is a silent failure in cp, install, tar,
// and most other unix tools that manage permissions.
//
// When running as root, or if other types of errors are
// encountered, then it's strict.
function chownErOk (er) {
  if (!er)
    return true

  if (er.code === "ENOSYS")
    return true

  var nonroot = !process.getuid || process.getuid() !== 0
  if (nonroot) {
    if (er.code === "EINVAL" || er.code === "EPERM")
      return true
  }

  return false
}


/***/ }),
/* 862 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Copyright (c) 2014, Chris Pettitt
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its contributors
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

var lib = __webpack_require__(871);

module.exports = {
  Graph: lib.Graph,
  json: __webpack_require__(872),
  alg: __webpack_require__(361),
  version: lib.version
};


/***/ }),
/* 863 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = components;

function components(g) {
  var visited = {},
      cmpts = [],
      cmpt;

  function dfs(v) {
    if (_.has(visited, v)) return;
    visited[v] = true;
    cmpt.push(v);
    _.each(g.successors(v), dfs);
    _.each(g.predecessors(v), dfs);
  }

  _.each(g.nodes(), function(v) {
    cmpt = [];
    dfs(v);
    if (cmpt.length) {
      cmpts.push(cmpt);
    }
  });

  return cmpts;
}


/***/ }),
/* 864 */
/***/ (function(module, exports, __webpack_require__) {

var dijkstra = __webpack_require__(360),
    _ = __webpack_require__(37);

module.exports = dijkstraAll;

function dijkstraAll(g, weightFunc, edgeFunc) {
  return _.transform(g.nodes(), function(acc, v) {
    acc[v] = dijkstra(g, v, weightFunc, edgeFunc);
  }, {});
}


/***/ }),
/* 865 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37),
    tarjan = __webpack_require__(362);

module.exports = findCycles;

function findCycles(g) {
  return _.filter(tarjan(g), function(cmpt) {
    return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));
  });
}


/***/ }),
/* 866 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37);

module.exports = floydWarshall;

var DEFAULT_WEIGHT_FUNC = _.constant(1);

function floydWarshall(g, weightFn, edgeFn) {
  return runFloydWarshall(g,
                          weightFn || DEFAULT_WEIGHT_FUNC,
                          edgeFn || function(v) { return g.outEdges(v); });
}

function runFloydWarshall(g, weightFn, edgeFn) {
  var results = {},
      nodes = g.nodes();

  nodes.forEach(function(v) {
    results[v] = {};
    results[v][v] = { distance: 0 };
    nodes.forEach(function(w) {
      if (v !== w) {
        results[v][w] = { distance: Number.POSITIVE_INFINITY };
      }
    });
    edgeFn(v).forEach(function(edge) {
      var w = edge.v === v ? edge.w : edge.v,
          d = weightFn(edge);
      results[v][w] = { distance: d, predecessor: v };
    });
  });

  nodes.forEach(function(k) {
    var rowK = results[k];
    nodes.forEach(function(i) {
      var rowI = results[i];
      nodes.forEach(function(j) {
        var ik = rowI[k];
        var kj = rowK[j];
        var ij = rowI[j];
        var altDistance = ik.distance + kj.distance;
        if (altDistance < ij.distance) {
          ij.distance = altDistance;
          ij.predecessor = kj.predecessor;
        }
      });
    });
  });

  return results;
}


/***/ }),
/* 867 */
/***/ (function(module, exports, __webpack_require__) {

var topsort = __webpack_require__(363);

module.exports = isAcyclic;

function isAcyclic(g) {
  try {
    topsort(g);
  } catch (e) {
    if (e instanceof topsort.CycleException) {
      return false;
    }
    throw e;
  }
  return true;
}


/***/ }),
/* 868 */
/***/ (function(module, exports, __webpack_require__) {

var dfs = __webpack_require__(359);

module.exports = postorder;

function postorder(g, vs) {
  return dfs(g, vs, "post");
}


/***/ }),
/* 869 */
/***/ (function(module, exports, __webpack_require__) {

var dfs = __webpack_require__(359);

module.exports = preorder;

function preorder(g, vs) {
  return dfs(g, vs, "pre");
}


/***/ }),
/* 870 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37),
    Graph = __webpack_require__(221),
    PriorityQueue = __webpack_require__(364);

module.exports = prim;

function prim(g, weightFunc) {
  var result = new Graph(),
      parents = {},
      pq = new PriorityQueue(),
      v;

  function updateNeighbors(edge) {
    var w = edge.v === v ? edge.w : edge.v,
        pri = pq.priority(w);
    if (pri !== undefined) {
      var edgeWeight = weightFunc(edge);
      if (edgeWeight < pri) {
        parents[w] = v;
        pq.decrease(w, edgeWeight);
      }
    }
  }

  if (g.nodeCount() === 0) {
    return result;
  }

  _.each(g.nodes(), function(v) {
    pq.add(v, Number.POSITIVE_INFINITY);
    result.setNode(v);
  });

  // Start from an arbitrary node
  pq.decrease(g.nodes()[0], 0);

  var init = false;
  while (pq.size() > 0) {
    v = pq.removeMin();
    if (_.has(parents, v)) {
      result.setEdge(v, parents[v]);
    } else if (init) {
      throw new Error("Input graph is not connected: " + g);
    } else {
      init = true;
    }

    g.nodeEdges(v).forEach(updateNeighbors);
  }

  return result;
}


/***/ }),
/* 871 */
/***/ (function(module, exports, __webpack_require__) {

// Includes only the "core" of graphlib
module.exports = {
  Graph: __webpack_require__(221),
  version: __webpack_require__(873)
};


/***/ }),
/* 872 */
/***/ (function(module, exports, __webpack_require__) {

var _ = __webpack_require__(37),
    Graph = __webpack_require__(221);

module.exports = {
  write: write,
  read: read
};

function write(g) {
  var json = {
    options: {
      directed: g.isDirected(),
      multigraph: g.isMultigraph(),
      compound: g.isCompound()
    },
    nodes: writeNodes(g),
    edges: writeEdges(g)
  };
  if (!_.isUndefined(g.graph())) {
    json.value = _.clone(g.graph());
  }
  return json;
}

function writeNodes(g) {
  return _.map(g.nodes(), function(v) {
    var nodeValue = g.node(v),
        parent = g.parent(v),
        node = { v: v };
    if (!_.isUndefined(nodeValue)) {
      node.value = nodeValue;
    }
    if (!_.isUndefined(parent)) {
      node.parent = parent;
    }
    return node;
  });
}

function writeEdges(g) {
  return _.map(g.edges(), function(e) {
    var edgeValue = g.edge(e),
        edge = { v: e.v, w: e.w };
    if (!_.isUndefined(e.name)) {
      edge.name = e.name;
    }
    if (!_.isUndefined(edgeValue)) {
      edge.value = edgeValue;
    }
    return edge;
  });
}

function read(json) {
  var g = new Graph(json.options).setGraph(json.value);
  _.each(json.nodes, function(entry) {
    g.setNode(entry.v, entry.value);
    if (entry.parent) {
      g.setParent(entry.v, entry.parent);
    }
  });
  _.each(json.edges, function(entry) {
    g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
  });
  return g;
}


/***/ }),
/* 873 */
/***/ (function(module, exports) {

module.exports = '2.1.5';


/***/ }),
/* 874 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = {
  afterRequest: __webpack_require__(489),
  beforeRequest: __webpack_require__(490),
  browser: __webpack_require__(491),
  cache: __webpack_require__(492),
  content: __webpack_require__(493),
  cookie: __webpack_require__(494),
  creator: __webpack_require__(495),
  entry: __webpack_require__(496),
  har: __webpack_require__(497),
  header: __webpack_require__(498),
  log: __webpack_require__(499),
  page: __webpack_require__(500),
  pageTimings: __webpack_require__(501),
  postData: __webpack_require__(502),
  query: __webpack_require__(503),
  request: __webpack_require__(504),
  response: __webpack_require__(505),
  timings: __webpack_require__(506)
}


/***/ }),
/* 875 */
/***/ (function(module, exports) {

function HARError (errors) {
  var message = 'validation failed'

  this.name = 'HARError'
  this.message = message
  this.errors = errors

  if (typeof Error.captureStackTrace === 'function') {
    Error.captureStackTrace(this, this.constructor)
  } else {
    this.stack = (new Error(message)).stack
  }
}

HARError.prototype = Error.prototype

module.exports = HARError


/***/ }),
/* 876 */
/***/ (function(module, exports, __webpack_require__) {

var Ajv = __webpack_require__(266)
var HARError = __webpack_require__(875)
var schemas = __webpack_require__(874)

var ajv

function validate (name, data) {
  data = data || {}

  // validator config
  ajv = ajv || new Ajv({
    allErrors: true,
    schemas: schemas
  })

  var validate = ajv.getSchema(name + '.json')

  return new Promise(function (resolve, reject) {
    var valid = validate(data)

    !valid ? reject(new HARError(validate.errors)) : resolve(data)
  })
}

exports.afterRequest = function (data) {
  return validate('afterRequest', data)
}

exports.beforeRequest = function (data) {
  return validate('beforeRequest', data)
}

exports.browser = function (data) {
  return validate('browser', data)
}

exports.cache = function (data) {
  return validate('cache', data)
}

exports.content = function (data) {
  return validate('content', data)
}

exports.cookie = function (data) {
  return validate('cookie', data)
}

exports.creator = function (data) {
  return validate('creator', data)
}

exports.entry = function (data) {
  return validate('entry', data)
}

exports.har = function (data) {
  return validate('har', data)
}

exports.header = function (data) {
  return validate('header', data)
}

exports.log = function (data) {
  return validate('log', data)
}

exports.page = function (data) {
  return validate('page', data)
}

exports.pageTimings = function (data) {
  return validate('pageTimings', data)
}

exports.postData = function (data) {
  return validate('postData', data)
}

exports.query = function (data) {
  return validate('query', data)
}

exports.request = function (data) {
  return validate('request', data)
}

exports.response = function (data) {
  return validate('response', data)
}

exports.timings = function (data) {
  return validate('timings', data)
}


/***/ }),
/* 877 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/he v1.1.1 by @mathias | MIT license */
;(function(root) {

	// Detect free variables `exports`.
	var freeExports = typeof exports == 'object' && exports;

	// Detect free variable `module`.
	var freeModule = typeof module == 'object' && module &&
		module.exports == freeExports && module;

	// Detect free variable `global`, from Node.js or Browserified code,
	// and use it as `root`.
	var freeGlobal = typeof global == 'object' && global;
	if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
		root = freeGlobal;
	}

	/*--------------------------------------------------------------------------*/

	// All astral symbols.
	var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
	// All ASCII symbols (not just printable ASCII) except those listed in the
	// first column of the overrides table.
	// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
	var regexAsciiWhitelist = /[\x01-\x7F]/g;
	// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
	// code points listed in the first column of the overrides table on
	// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
	var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;

	var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
	var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};

	var regexEscape = /["&'<>`]/g;
	var escapeMap = {
		'"': '&quot;',
		'&': '&amp;',
		'\'': '&#x27;',
		'<': '&lt;',
		// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
		// following is not strictly necessary unless it’s part of a tag or an
		// unquoted attribute value. We’re only escaping it to support those
		// situations, and for XML support.
		'>': '&gt;',
		// In Internet Explorer ≤ 8, the backtick character can be used
		// to break out of (un)quoted attribute values or HTML comments.
		// See http://html5sec.org/#102, http://html5sec.org/#108, and
		// http://html5sec.org/#133.
		'`': '&#x60;'
	};

	var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
	var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
	var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
	var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
	var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
	var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
	var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];

	/*--------------------------------------------------------------------------*/

	var stringFromCharCode = String.fromCharCode;

	var object = {};
	var hasOwnProperty = object.hasOwnProperty;
	var has = function(object, propertyName) {
		return hasOwnProperty.call(object, propertyName);
	};

	var contains = function(array, value) {
		var index = -1;
		var length = array.length;
		while (++index < length) {
			if (array[index] == value) {
				return true;
			}
		}
		return false;
	};

	var merge = function(options, defaults) {
		if (!options) {
			return defaults;
		}
		var result = {};
		var key;
		for (key in defaults) {
			// A `hasOwnProperty` check is not needed here, since only recognized
			// option names are used anyway. Any others are ignored.
			result[key] = has(options, key) ? options[key] : defaults[key];
		}
		return result;
	};

	// Modified version of `ucs2encode`; see https://mths.be/punycode.
	var codePointToSymbol = function(codePoint, strict) {
		var output = '';
		if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
			// See issue #4:
			// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
			// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
			// REPLACEMENT CHARACTER.”
			if (strict) {
				parseError('character reference outside the permissible Unicode range');
			}
			return '\uFFFD';
		}
		if (has(decodeMapNumeric, codePoint)) {
			if (strict) {
				parseError('disallowed character reference');
			}
			return decodeMapNumeric[codePoint];
		}
		if (strict && contains(invalidReferenceCodePoints, codePoint)) {
			parseError('disallowed character reference');
		}
		if (codePoint > 0xFFFF) {
			codePoint -= 0x10000;
			output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
			codePoint = 0xDC00 | codePoint & 0x3FF;
		}
		output += stringFromCharCode(codePoint);
		return output;
	};

	var hexEscape = function(codePoint) {
		return '&#x' + codePoint.toString(16).toUpperCase() + ';';
	};

	var decEscape = function(codePoint) {
		return '&#' + codePoint + ';';
	};

	var parseError = function(message) {
		throw Error('Parse error: ' + message);
	};

	/*--------------------------------------------------------------------------*/

	var encode = function(string, options) {
		options = merge(options, encode.options);
		var strict = options.strict;
		if (strict && regexInvalidRawCodePoint.test(string)) {
			parseError('forbidden code point');
		}
		var encodeEverything = options.encodeEverything;
		var useNamedReferences = options.useNamedReferences;
		var allowUnsafeSymbols = options.allowUnsafeSymbols;
		var escapeCodePoint = options.decimal ? decEscape : hexEscape;

		var escapeBmpSymbol = function(symbol) {
			return escapeCodePoint(symbol.charCodeAt(0));
		};

		if (encodeEverything) {
			// Encode ASCII symbols.
			string = string.replace(regexAsciiWhitelist, function(symbol) {
				// Use named references if requested & possible.
				if (useNamedReferences && has(encodeMap, symbol)) {
					return '&' + encodeMap[symbol] + ';';
				}
				return escapeBmpSymbol(symbol);
			});
			// Shorten a few escapes that represent two symbols, of which at least one
			// is within the ASCII range.
			if (useNamedReferences) {
				string = string
					.replace(/&gt;\u20D2/g, '&nvgt;')
					.replace(/&lt;\u20D2/g, '&nvlt;')
					.replace(/&#x66;&#x6A;/g, '&fjlig;');
			}
			// Encode non-ASCII symbols.
			if (useNamedReferences) {
				// Encode non-ASCII symbols that can be replaced with a named reference.
				string = string.replace(regexEncodeNonAscii, function(string) {
					// Note: there is no need to check `has(encodeMap, string)` here.
					return '&' + encodeMap[string] + ';';
				});
			}
			// Note: any remaining non-ASCII symbols are handled outside of the `if`.
		} else if (useNamedReferences) {
			// Apply named character references.
			// Encode `<>"'&` using named character references.
			if (!allowUnsafeSymbols) {
				string = string.replace(regexEscape, function(string) {
					return '&' + encodeMap[string] + ';'; // no need to check `has()` here
				});
			}
			// Shorten escapes that represent two symbols, of which at least one is
			// `<>"'&`.
			string = string
				.replace(/&gt;\u20D2/g, '&nvgt;')
				.replace(/&lt;\u20D2/g, '&nvlt;');
			// Encode non-ASCII symbols that can be replaced with a named reference.
			string = string.replace(regexEncodeNonAscii, function(string) {
				// Note: there is no need to check `has(encodeMap, string)` here.
				return '&' + encodeMap[string] + ';';
			});
		} else if (!allowUnsafeSymbols) {
			// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
			// using named character references.
			string = string.replace(regexEscape, escapeBmpSymbol);
		}
		return string
			// Encode astral symbols.
			.replace(regexAstralSymbols, function($0) {
				// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
				var high = $0.charCodeAt(0);
				var low = $0.charCodeAt(1);
				var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
				return escapeCodePoint(codePoint);
			})
			// Encode any remaining BMP symbols that are not printable ASCII symbols
			// using a hexadecimal escape.
			.replace(regexBmpWhitelist, escapeBmpSymbol);
	};
	// Expose default options (so they can be overridden globally).
	encode.options = {
		'allowUnsafeSymbols': false,
		'encodeEverything': false,
		'strict': false,
		'useNamedReferences': false,
		'decimal' : false
	};

	var decode = function(html, options) {
		options = merge(options, decode.options);
		var strict = options.strict;
		if (strict && regexInvalidEntity.test(html)) {
			parseError('malformed character reference');
		}
		return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
			var codePoint;
			var semicolon;
			var decDigits;
			var hexDigits;
			var reference;
			var next;
			if ($1) {
				// Decode decimal escapes, e.g. `&#119558;`.
				decDigits = $1;
				semicolon = $2;
				if (strict && !semicolon) {
					parseError('character reference was not terminated by a semicolon');
				}
				codePoint = parseInt(decDigits, 10);
				return codePointToSymbol(codePoint, strict);
			}
			if ($3) {
				// Decode hexadecimal escapes, e.g. `&#x1D306;`.
				hexDigits = $3;
				semicolon = $4;
				if (strict && !semicolon) {
					parseError('character reference was not terminated by a semicolon');
				}
				codePoint = parseInt(hexDigits, 16);
				return codePointToSymbol(codePoint, strict);
			}
			if ($5) {
				// Decode named character references with trailing `;`, e.g. `&copy;`.
				reference = $5;
				if (has(decodeMap, reference)) {
					return decodeMap[reference];
				} else {
					// Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
					if (strict) {
						parseError(
							'named character reference was not terminated by a semicolon'
						);
					}
					return $0;
				}
			}
			// If we’re still here, it’s a legacy reference for sure. No need for an
			// extra `if` check.
			// Decode named character references without trailing `;`, e.g. `&amp`
			// This is only a parse error if it gets converted to `&`, or if it is
			// followed by `=` in an attribute context.
			reference = $6;
			next = $7;
			if (next && options.isAttributeValue) {
				if (strict && next == '=') {
					parseError('`&` did not start a character reference');
				}
				return $0;
			} else {
				if (strict) {
					parseError(
						'named character reference was not terminated by a semicolon'
					);
				}
				// Note: there is no need to check `has(decodeMapLegacy, reference)`.
				return decodeMapLegacy[reference] + (next || '');
			}
		});
	};
	// Expose default options (so they can be overridden globally).
	decode.options = {
		'isAttributeValue': false,
		'strict': false
	};

	var escape = function(string) {
		return string.replace(regexEscape, function($0) {
			// Note: there is no need to check `has(escapeMap, $0)` here.
			return escapeMap[$0];
		});
	};

	/*--------------------------------------------------------------------------*/

	var he = {
		'version': '1.1.1',
		'encode': encode,
		'decode': decode,
		'escape': escape,
		'unescape': decode
	};

	// Some AMD build optimizers, like r.js, check for specific condition patterns
	// like the following:
	if (
		true
	) {
		!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
			return he;
		}.call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}	else if (freeExports && !freeExports.nodeType) {
		if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
			freeModule.exports = he;
		} else { // in Narwhal or RingoJS v0.7.0-
			for (var key in he) {
				has(he, key) && (freeExports[key] = he[key]);
			}
		}
	} else { // in Rhino or a web browser
		root.he = he;
	}

}(this));

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 878 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var gitHosts = __webpack_require__(365)

var GitHost = module.exports = function (type, user, auth, project, committish, defaultRepresentation, opts) {
  var gitHostInfo = this
  gitHostInfo.type = type
  Object.keys(gitHosts[type]).forEach(function (key) {
    gitHostInfo[key] = gitHosts[type][key]
  })
  gitHostInfo.user = user
  gitHostInfo.auth = auth
  gitHostInfo.project = project
  gitHostInfo.committish = committish
  gitHostInfo.default = defaultRepresentation
  gitHostInfo.opts = opts || {}
}
GitHost.prototype = {}

GitHost.prototype.hash = function () {
  return this.committish ? '#' + this.committish : ''
}

GitHost.prototype._fill = function (template, opts) {
  if (!template) return
  var vars = Object.assign({}, opts)
  vars.path = vars.path ? vars.path.replace(/^[/]+/g, '') : ''
  opts = Object.assign({}, this.opts, opts)
  var self = this
  Object.keys(this).forEach(function (key) {
    if (self[key] != null && vars[key] == null) vars[key] = self[key]
  })
  var rawAuth = vars.auth
  var rawComittish = vars.committish
  var rawFragment = vars.fragment
  var rawPath = vars.path
  Object.keys(vars).forEach(function (key) {
    vars[key] = encodeURIComponent(vars[key])
  })
  vars['auth@'] = rawAuth ? rawAuth + '@' : ''
  vars['#fragment'] = rawFragment ? '#' + this.hashformat(rawFragment) : ''
  vars.fragment = vars.fragment ? vars.fragment : ''
  vars['#path'] = rawPath ? '#' + this.hashformat(rawPath) : ''
  vars['/path'] = vars.path ? '/' + vars.path : ''
  if (opts.noCommittish) {
    vars['#committish'] = ''
    vars['/tree/committish'] = ''
    vars['/comittish'] = ''
    vars.comittish = ''
  } else {
    vars['#committish'] = rawComittish ? '#' + rawComittish : ''
    vars['/tree/committish'] = vars.committish
                            ? '/' + vars.treepath + '/' + vars.committish
                            : ''
    vars['/committish'] = vars.committish ? '/' + vars.committish : ''
    vars.committish = vars.committish || 'master'
  }
  var res = template
  Object.keys(vars).forEach(function (key) {
    res = res.replace(new RegExp('[{]' + key + '[}]', 'g'), vars[key])
  })
  if (opts.noGitPlus) {
    return res.replace(/^git[+]/, '')
  } else {
    return res
  }
}

GitHost.prototype.ssh = function (opts) {
  return this._fill(this.sshtemplate, opts)
}

GitHost.prototype.sshurl = function (opts) {
  return this._fill(this.sshurltemplate, opts)
}

GitHost.prototype.browse = function (P, F, opts) {
  if (typeof P === 'string') {
    if (typeof F !== 'string') {
      opts = F
      F = null
    }
    return this._fill(this.browsefiletemplate, Object.assign({
      fragment: F,
      path: P
    }, opts))
  } else {
    return this._fill(this.browsetemplate, P)
  }
}

GitHost.prototype.docs = function (opts) {
  return this._fill(this.docstemplate, opts)
}

GitHost.prototype.bugs = function (opts) {
  return this._fill(this.bugstemplate, opts)
}

GitHost.prototype.https = function (opts) {
  return this._fill(this.httpstemplate, opts)
}

GitHost.prototype.git = function (opts) {
  return this._fill(this.gittemplate, opts)
}

GitHost.prototype.shortcut = function (opts) {
  return this._fill(this.shortcuttemplate, opts)
}

GitHost.prototype.path = function (opts) {
  return this._fill(this.pathtemplate, opts)
}

GitHost.prototype.tarball = function (opts) {
  return this._fill(this.tarballtemplate, opts)
}

GitHost.prototype.file = function (P, opts) {
  return this._fill(this.filetemplate, Object.assign({ path: P }, opts))
}

GitHost.prototype.getDefaultRepresentation = function () {
  return this.default
}

GitHost.prototype.toString = function (opts) {
  return (this[this.default] || this.sshurl).call(this, opts)
}


/***/ }),
/* 879 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var url = __webpack_require__(8)
var gitHosts = __webpack_require__(365)
var GitHost = module.exports = __webpack_require__(878)

var protocolToRepresentationMap = {
  'git+ssh': 'sshurl',
  'git+https': 'https',
  'ssh': 'sshurl',
  'git': 'git'
}

function protocolToRepresentation (protocol) {
  if (protocol.substr(-1) === ':') protocol = protocol.slice(0, -1)
  return protocolToRepresentationMap[protocol] || protocol
}

var authProtocols = {
  'git:': true,
  'https:': true,
  'git+https:': true,
  'http:': true,
  'git+http:': true
}

var cache = {}

module.exports.fromUrl = function (giturl, opts) {
  var key = giturl + JSON.stringify(opts || {})

  if (!(key in cache)) {
    cache[key] = fromUrl(giturl, opts)
  }

  return cache[key]
}

function fromUrl (giturl, opts) {
  if (giturl == null || giturl === '') return
  var url = fixupUnqualifiedGist(
    isGitHubShorthand(giturl) ? 'github:' + giturl : giturl
  )
  var parsed = parseGitUrl(url)
  var shortcutMatch = url.match(new RegExp('^([^:]+):(?:(?:[^@:]+(?:[^@]+)?@)?([^/]*))[/](.+?)(?:[.]git)?($|#)'))
  var matches = Object.keys(gitHosts).map(function (gitHostName) {
    try {
      var gitHostInfo = gitHosts[gitHostName]
      var auth = null
      if (parsed.auth && authProtocols[parsed.protocol]) {
        auth = decodeURIComponent(parsed.auth)
      }
      var committish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
      var user = null
      var project = null
      var defaultRepresentation = null
      if (shortcutMatch && shortcutMatch[1] === gitHostName) {
        user = shortcutMatch[2] && decodeURIComponent(shortcutMatch[2])
        project = decodeURIComponent(shortcutMatch[3])
        defaultRepresentation = 'shortcut'
      } else {
        if (parsed.host !== gitHostInfo.domain) return
        if (!gitHostInfo.protocols_re.test(parsed.protocol)) return
        if (!parsed.path) return
        var pathmatch = gitHostInfo.pathmatch
        var matched = parsed.path.match(pathmatch)
        if (!matched) return
        if (matched[1] != null) user = decodeURIComponent(matched[1].replace(/^:/, ''))
        if (matched[2] != null) project = decodeURIComponent(matched[2])
        defaultRepresentation = protocolToRepresentation(parsed.protocol)
      }
      return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation, opts)
    } catch (ex) {
      if (!(ex instanceof URIError)) throw ex
    }
  }).filter(function (gitHostInfo) { return gitHostInfo })
  if (matches.length !== 1) return
  return matches[0]
}

function isGitHubShorthand (arg) {
  // Note: This does not fully test the git ref format.
  // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
  //
  // The only way to do this properly would be to shell out to
  // git-check-ref-format, and as this is a fast sync function,
  // we don't want to do that.  Just let git fail if it turns
  // out that the commit-ish is invalid.
  // GH usernames cannot start with . or -
  return /^[^:@%/\s.-][^:@%/\s]*[/][^:@\s/%]+(?:#.*)?$/.test(arg)
}

function fixupUnqualifiedGist (giturl) {
  // necessary for round-tripping gists
  var parsed = url.parse(giturl)
  if (parsed.protocol === 'gist:' && parsed.host && !parsed.path) {
    return parsed.protocol + '/' + parsed.host
  } else {
    return giturl
  }
}

function parseGitUrl (giturl) {
  if (typeof giturl !== 'string') giturl = '' + giturl
  var matched = giturl.match(/^([^@]+)@([^:/]+):[/]?((?:[^/]+[/])?[^/]+?)(?:[.]git)?(#.*)?$/)
  if (!matched) return url.parse(giturl)
  return {
    protocol: 'git+ssh:',
    slashes: true,
    auth: matched[1],
    host: matched[2],
    port: null,
    hostname: matched[2],
    hash: matched[4],
    search: null,
    query: null,
    pathname: '/' + matched[3],
    path: '/' + matched[3],
    href: 'git+ssh://' + matched[1] + '@' + matched[2] +
          '/' + matched[3] + (matched[4] || '')
  }
}


/***/ }),
/* 880 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * http-errors
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var deprecate = __webpack_require__(322)('http-errors')
var setPrototypeOf = __webpack_require__(1054)
var statuses = __webpack_require__(881)
var inherits = __webpack_require__(54)

/**
 * Module exports.
 * @public
 */

module.exports = createError
module.exports.HttpError = createHttpErrorConstructor()

// Populate exports for all constructors
populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)

/**
 * Get the code class of a status code.
 * @private
 */

function codeClass (status) {
  return Number(String(status).charAt(0) + '00')
}

/**
 * Create a new HTTP Error.
 *
 * @returns {Error}
 * @public
 */

function createError () {
  // so much arity going on ~_~
  var err
  var msg
  var status = 500
  var props = {}
  for (var i = 0; i < arguments.length; i++) {
    var arg = arguments[i]
    if (arg instanceof Error) {
      err = arg
      status = err.status || err.statusCode || status
      continue
    }
    switch (typeof arg) {
      case 'string':
        msg = arg
        break
      case 'number':
        status = arg
        if (i !== 0) {
          deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)')
        }
        break
      case 'object':
        props = arg
        break
    }
  }

  if (typeof status === 'number' && (status < 400 || status >= 600)) {
    deprecate('non-error status code; use only 4xx or 5xx status codes')
  }

  if (typeof status !== 'number' ||
    (!statuses[status] && (status < 400 || status >= 600))) {
    status = 500
  }

  // constructor
  var HttpError = createError[status] || createError[codeClass(status)]

  if (!err) {
    // create error
    err = HttpError
      ? new HttpError(msg)
      : new Error(msg || statuses[status])
    Error.captureStackTrace(err, createError)
  }

  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {
    // add properties to generic error
    err.expose = status < 500
    err.status = err.statusCode = status
  }

  for (var key in props) {
    if (key !== 'status' && key !== 'statusCode') {
      err[key] = props[key]
    }
  }

  return err
}

/**
 * Create HTTP error abstract base class.
 * @private
 */

function createHttpErrorConstructor () {
  function HttpError () {
    throw new TypeError('cannot construct abstract class')
  }

  inherits(HttpError, Error)

  return HttpError
}

/**
 * Create a constructor for a client error.
 * @private
 */

function createClientErrorConstructor (HttpError, name, code) {
  var className = name.match(/Error$/) ? name : name + 'Error'

  function ClientError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ClientError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ClientError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ClientError, HttpError)

  ClientError.prototype.status = code
  ClientError.prototype.statusCode = code
  ClientError.prototype.expose = true

  return ClientError
}

/**
 * Create a constructor for a server error.
 * @private
 */

function createServerErrorConstructor (HttpError, name, code) {
  var className = name.match(/Error$/) ? name : name + 'Error'

  function ServerError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ServerError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ServerError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ServerError, HttpError)

  ServerError.prototype.status = code
  ServerError.prototype.statusCode = code
  ServerError.prototype.expose = false

  return ServerError
}

/**
 * Populate the exports object with constructors for every error class.
 * @private
 */

function populateConstructorExports (exports, codes, HttpError) {
  codes.forEach(function forEachCode (code) {
    var CodeError
    var name = toIdentifier(statuses[code])

    switch (codeClass(code)) {
      case 400:
        CodeError = createClientErrorConstructor(HttpError, name, code)
        break
      case 500:
        CodeError = createServerErrorConstructor(HttpError, name, code)
        break
    }

    if (CodeError) {
      // export the constructor
      exports[code] = CodeError
      exports[name] = CodeError
    }
  })

  // backwards-compatibility
  exports["I'mateapot"] = deprecate.function(exports.ImATeapot,
    '"I\'mateapot"; use "ImATeapot" instead')
}

/**
 * Convert a string of words to a JavaScript identifier.
 * @private
 */

function toIdentifier (str) {
  return str.split(' ').map(function (token) {
    return token.slice(0, 1).toUpperCase() + token.slice(1)
  }).join('').replace(/[^ _0-9a-z]/gi, '')
}


/***/ }),
/* 881 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * statuses
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var codes = __webpack_require__(507)

/**
 * Module exports.
 * @public
 */

module.exports = status

// status code to message map
status.STATUS_CODES = codes

// array of status codes
status.codes = populateStatusesMap(status, codes)

// status codes for redirects
status.redirect = {
  300: true,
  301: true,
  302: true,
  303: true,
  305: true,
  307: true,
  308: true
}

// status codes for empty bodies
status.empty = {
  204: true,
  205: true,
  304: true
}

// status codes for when you should retry the request
status.retry = {
  502: true,
  503: true,
  504: true
}

/**
 * Populate the statuses map for given codes.
 * @private
 */

function populateStatusesMap (statuses, codes) {
  var arr = []

  Object.keys(codes).forEach(function forEachCode (code) {
    var message = codes[code]
    var status = Number(code)

    // Populate properties
    statuses[status] = message
    statuses[message] = status
    statuses[message.toLowerCase()] = status

    // Add to array
    arr.push(status)
  })

  return arr
}

/**
 * Get the status code.
 *
 * Given a number, this will throw if it is not a known status
 * code, otherwise the code will be returned. Given a string,
 * the string will be parsed for a number and return the code
 * if valid, otherwise will lookup the code assuming this is
 * the status message.
 *
 * @param {string|number} code
 * @returns {number}
 * @public
 */

function status (code) {
  if (typeof code === 'number') {
    if (!status[code]) throw new Error('invalid status code: ' + code)
    return code
  }

  if (typeof code !== 'string') {
    throw new TypeError('code must be a number or string')
  }

  // '403'
  var n = parseInt(code, 10)
  if (!isNaN(n)) {
    if (!status[n]) throw new Error('invalid status code: ' + n)
    return n
  }

  n = status[code.toLowerCase()]
  if (!n) throw new Error('invalid status message: "' + code + '"')
  return n
}


/***/ }),
/* 882 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

var parser = __webpack_require__(883);
var signer = __webpack_require__(884);
var verify = __webpack_require__(885);
var utils = __webpack_require__(162);



///--- API

module.exports = {

  parse: parser.parseRequest,
  parseRequest: parser.parseRequest,

  sign: signer.signRequest,
  signRequest: signer.signRequest,
  createSigner: signer.createSigner,
  isSigner: signer.isSigner,

  sshKeyToPEM: utils.sshKeyToPEM,
  sshKeyFingerprint: utils.fingerprint,
  pemToRsaSSHKey: utils.pemToRsaSSHKey,

  verify: verify.verifySignature,
  verifySignature: verify.verifySignature,
  verifyHMAC: verify.verifyHMAC
};


/***/ }),
/* 883 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2012 Joyent, Inc.  All rights reserved.

var assert = __webpack_require__(6);
var util = __webpack_require__(2);
var utils = __webpack_require__(162);



///--- Globals

var HASH_ALGOS = utils.HASH_ALGOS;
var PK_ALGOS = utils.PK_ALGOS;
var HttpSignatureError = utils.HttpSignatureError;
var InvalidAlgorithmError = utils.InvalidAlgorithmError;
var validateAlgorithm = utils.validateAlgorithm;

var State = {
  New: 0,
  Params: 1
};

var ParamsState = {
  Name: 0,
  Quote: 1,
  Value: 2,
  Comma: 3
};


///--- Specific Errors


function ExpiredRequestError(message) {
  HttpSignatureError.call(this, message, ExpiredRequestError);
}
util.inherits(ExpiredRequestError, HttpSignatureError);


function InvalidHeaderError(message) {
  HttpSignatureError.call(this, message, InvalidHeaderError);
}
util.inherits(InvalidHeaderError, HttpSignatureError);


function InvalidParamsError(message) {
  HttpSignatureError.call(this, message, InvalidParamsError);
}
util.inherits(InvalidParamsError, HttpSignatureError);


function MissingHeaderError(message) {
  HttpSignatureError.call(this, message, MissingHeaderError);
}
util.inherits(MissingHeaderError, HttpSignatureError);

function StrictParsingError(message) {
  HttpSignatureError.call(this, message, StrictParsingError);
}
util.inherits(StrictParsingError, HttpSignatureError);

///--- Exported API

module.exports = {

  /**
   * Parses the 'Authorization' header out of an http.ServerRequest object.
   *
   * Note that this API will fully validate the Authorization header, and throw
   * on any error.  It will not however check the signature, or the keyId format
   * as those are specific to your environment.  You can use the options object
   * to pass in extra constraints.
   *
   * As a response object you can expect this:
   *
   *     {
   *       "scheme": "Signature",
   *       "params": {
   *         "keyId": "foo",
   *         "algorithm": "rsa-sha256",
   *         "headers": [
   *           "date" or "x-date",
   *           "digest"
   *         ],
   *         "signature": "base64"
   *       },
   *       "signingString": "ready to be passed to crypto.verify()"
   *     }
   *
   * @param {Object} request an http.ServerRequest.
   * @param {Object} options an optional options object with:
   *                   - clockSkew: allowed clock skew in seconds (default 300).
   *                   - headers: required header names (def: date or x-date)
   *                   - algorithms: algorithms to support (default: all).
   *                   - strict: should enforce latest spec parsing
   *                             (default: false).
   * @return {Object} parsed out object (see above).
   * @throws {TypeError} on invalid input.
   * @throws {InvalidHeaderError} on an invalid Authorization header error.
   * @throws {InvalidParamsError} if the params in the scheme are invalid.
   * @throws {MissingHeaderError} if the params indicate a header not present,
   *                              either in the request headers from the params,
   *                              or not in the params from a required header
   *                              in options.
   * @throws {StrictParsingError} if old attributes are used in strict parsing
   *                              mode.
   * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew.
   */
  parseRequest: function parseRequest(request, options) {
    assert.object(request, 'request');
    assert.object(request.headers, 'request.headers');
    if (options === undefined) {
      options = {};
    }
    if (options.headers === undefined) {
      options.headers = [request.headers['x-date'] ? 'x-date' : 'date'];
    }
    assert.object(options, 'options');
    assert.arrayOfString(options.headers, 'options.headers');
    assert.optionalFinite(options.clockSkew, 'options.clockSkew');

    var authzHeaderName = options.authorizationHeaderName || 'authorization';

    if (!request.headers[authzHeaderName]) {
      throw new MissingHeaderError('no ' + authzHeaderName + ' header ' +
                                   'present in the request');
    }

    options.clockSkew = options.clockSkew || 300;


    var i = 0;
    var state = State.New;
    var substate = ParamsState.Name;
    var tmpName = '';
    var tmpValue = '';

    var parsed = {
      scheme: '',
      params: {},
      signingString: ''
    };

    var authz = request.headers[authzHeaderName];
    for (i = 0; i < authz.length; i++) {
      var c = authz.charAt(i);

      switch (Number(state)) {

      case State.New:
        if (c !== ' ') parsed.scheme += c;
        else state = State.Params;
        break;

      case State.Params:
        switch (Number(substate)) {

        case ParamsState.Name:
          var code = c.charCodeAt(0);
          // restricted name of A-Z / a-z
          if ((code >= 0x41 && code <= 0x5a) || // A-Z
              (code >= 0x61 && code <= 0x7a)) { // a-z
            tmpName += c;
          } else if (c === '=') {
            if (tmpName.length === 0)
              throw new InvalidHeaderError('bad param format');
            substate = ParamsState.Quote;
          } else {
            throw new InvalidHeaderError('bad param format');
          }
          break;

        case ParamsState.Quote:
          if (c === '"') {
            tmpValue = '';
            substate = ParamsState.Value;
          } else {
            throw new InvalidHeaderError('bad param format');
          }
          break;

        case ParamsState.Value:
          if (c === '"') {
            parsed.params[tmpName] = tmpValue;
            substate = ParamsState.Comma;
          } else {
            tmpValue += c;
          }
          break;

        case ParamsState.Comma:
          if (c === ',') {
            tmpName = '';
            substate = ParamsState.Name;
          } else {
            throw new InvalidHeaderError('bad param format');
          }
          break;

        default:
          throw new Error('Invalid substate');
        }
        break;

      default:
        throw new Error('Invalid substate');
      }

    }

    if (!parsed.params.headers || parsed.params.headers === '') {
      if (request.headers['x-date']) {
        parsed.params.headers = ['x-date'];
      } else {
        parsed.params.headers = ['date'];
      }
    } else {
      parsed.params.headers = parsed.params.headers.split(' ');
    }

    // Minimally validate the parsed object
    if (!parsed.scheme || parsed.scheme !== 'Signature')
      throw new InvalidHeaderError('scheme was not "Signature"');

    if (!parsed.params.keyId)
      throw new InvalidHeaderError('keyId was not specified');

    if (!parsed.params.algorithm)
      throw new InvalidHeaderError('algorithm was not specified');

    if (!parsed.params.signature)
      throw new InvalidHeaderError('signature was not specified');

    // Check the algorithm against the official list
    parsed.params.algorithm = parsed.params.algorithm.toLowerCase();
    try {
      validateAlgorithm(parsed.params.algorithm);
    } catch (e) {
      if (e instanceof InvalidAlgorithmError)
        throw (new InvalidParamsError(parsed.params.algorithm + ' is not ' +
          'supported'));
      else
        throw (e);
    }

    // Build the signingString
    for (i = 0; i < parsed.params.headers.length; i++) {
      var h = parsed.params.headers[i].toLowerCase();
      parsed.params.headers[i] = h;

      if (h === 'request-line') {
        if (!options.strict) {
          /*
           * We allow headers from the older spec drafts if strict parsing isn't
           * specified in options.
           */
          parsed.signingString +=
            request.method + ' ' + request.url + ' HTTP/' + request.httpVersion;
        } else {
          /* Strict parsing doesn't allow older draft headers. */
          throw (new StrictParsingError('request-line is not a valid header ' +
            'with strict parsing enabled.'));
        }
      } else if (h === '(request-target)') {
        parsed.signingString +=
          '(request-target): ' + request.method.toLowerCase() + ' ' +
          request.url;
      } else {
        var value = request.headers[h];
        if (value === undefined)
          throw new MissingHeaderError(h + ' was not in the request');
        parsed.signingString += h + ': ' + value;
      }

      if ((i + 1) < parsed.params.headers.length)
        parsed.signingString += '\n';
    }

    // Check against the constraints
    var date;
    if (request.headers.date || request.headers['x-date']) {
        if (request.headers['x-date']) {
          date = new Date(request.headers['x-date']);
        } else {
          date = new Date(request.headers.date);
        }
      var now = new Date();
      var skew = Math.abs(now.getTime() - date.getTime());

      if (skew > options.clockSkew * 1000) {
        throw new ExpiredRequestError('clock skew of ' +
                                      (skew / 1000) +
                                      's was greater than ' +
                                      options.clockSkew + 's');
      }
    }

    options.headers.forEach(function (hdr) {
      // Remember that we already checked any headers in the params
      // were in the request, so if this passes we're good.
      if (parsed.params.headers.indexOf(hdr.toLowerCase()) < 0)
        throw new MissingHeaderError(hdr + ' was not a signed header');
    });

    if (options.algorithms) {
      if (options.algorithms.indexOf(parsed.params.algorithm) === -1)
        throw new InvalidParamsError(parsed.params.algorithm +
                                     ' is not a supported algorithm');
    }

    parsed.algorithm = parsed.params.algorithm.toUpperCase();
    parsed.keyId = parsed.params.keyId;
    return parsed;
  }

};


/***/ }),
/* 884 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2012 Joyent, Inc.  All rights reserved.

var assert = __webpack_require__(6);
var crypto = __webpack_require__(7);
var http = __webpack_require__(27);
var util = __webpack_require__(2);
var sshpk = __webpack_require__(242);
var jsprim = __webpack_require__(916);
var utils = __webpack_require__(162);

var sprintf = __webpack_require__(2).format;

var HASH_ALGOS = utils.HASH_ALGOS;
var PK_ALGOS = utils.PK_ALGOS;
var InvalidAlgorithmError = utils.InvalidAlgorithmError;
var HttpSignatureError = utils.HttpSignatureError;
var validateAlgorithm = utils.validateAlgorithm;

///--- Globals

var AUTHZ_FMT =
  'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"';

///--- Specific Errors

function MissingHeaderError(message) {
  HttpSignatureError.call(this, message, MissingHeaderError);
}
util.inherits(MissingHeaderError, HttpSignatureError);

function StrictParsingError(message) {
  HttpSignatureError.call(this, message, StrictParsingError);
}
util.inherits(StrictParsingError, HttpSignatureError);

/* See createSigner() */
function RequestSigner(options) {
  assert.object(options, 'options');

  var alg = [];
  if (options.algorithm !== undefined) {
    assert.string(options.algorithm, 'options.algorithm');
    alg = validateAlgorithm(options.algorithm);
  }
  this.rs_alg = alg;

  /*
   * RequestSigners come in two varieties: ones with an rs_signFunc, and ones
   * with an rs_signer.
   *
   * rs_signFunc-based RequestSigners have to build up their entire signing
   * string within the rs_lines array and give it to rs_signFunc as a single
   * concat'd blob. rs_signer-based RequestSigners can add a line at a time to
   * their signing state by using rs_signer.update(), thus only needing to
   * buffer the hash function state and one line at a time.
   */
  if (options.sign !== undefined) {
    assert.func(options.sign, 'options.sign');
    this.rs_signFunc = options.sign;

  } else if (alg[0] === 'hmac' && options.key !== undefined) {
    assert.string(options.keyId, 'options.keyId');
    this.rs_keyId = options.keyId;

    if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key))
      throw (new TypeError('options.key for HMAC must be a string or Buffer'));

    /*
     * Make an rs_signer for HMACs, not a rs_signFunc -- HMACs digest their
     * data in chunks rather than requiring it all to be given in one go
     * at the end, so they are more similar to signers than signFuncs.
     */
    this.rs_signer = crypto.createHmac(alg[1].toUpperCase(), options.key);
    this.rs_signer.sign = function () {
      var digest = this.digest('base64');
      return ({
        hashAlgorithm: alg[1],
        toString: function () { return (digest); }
      });
    };

  } else if (options.key !== undefined) {
    var key = options.key;
    if (typeof (key) === 'string' || Buffer.isBuffer(key))
      key = sshpk.parsePrivateKey(key);

    assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),
      'options.key must be a sshpk.PrivateKey');
    this.rs_key = key;

    assert.string(options.keyId, 'options.keyId');
    this.rs_keyId = options.keyId;

    if (!PK_ALGOS[key.type]) {
      throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +
        'keys are not supported'));
    }

    if (alg[0] !== undefined && key.type !== alg[0]) {
      throw (new InvalidAlgorithmError('options.key must be a ' +
        alg[0].toUpperCase() + ' key, was given a ' +
        key.type.toUpperCase() + ' key instead'));
    }

    this.rs_signer = key.createSign(alg[1]);

  } else {
    throw (new TypeError('options.sign (func) or options.key is required'));
  }

  this.rs_headers = [];
  this.rs_lines = [];
}

/**
 * Adds a header to be signed, with its value, into this signer.
 *
 * @param {String} header
 * @param {String} value
 * @return {String} value written
 */
RequestSigner.prototype.writeHeader = function (header, value) {
  assert.string(header, 'header');
  header = header.toLowerCase();
  assert.string(value, 'value');

  this.rs_headers.push(header);

  if (this.rs_signFunc) {
    this.rs_lines.push(header + ': ' + value);

  } else {
    var line = header + ': ' + value;
    if (this.rs_headers.length > 0)
      line = '\n' + line;
    this.rs_signer.update(line);
  }

  return (value);
};

/**
 * Adds a default Date header, returning its value.
 *
 * @return {String}
 */
RequestSigner.prototype.writeDateHeader = function () {
  return (this.writeHeader('date', jsprim.rfc1123(new Date())));
};

/**
 * Adds the request target line to be signed.
 *
 * @param {String} method, HTTP method (e.g. 'get', 'post', 'put')
 * @param {String} path
 */
RequestSigner.prototype.writeTarget = function (method, path) {
  assert.string(method, 'method');
  assert.string(path, 'path');
  method = method.toLowerCase();
  this.writeHeader('(request-target)', method + ' ' + path);
};

/**
 * Calculate the value for the Authorization header on this request
 * asynchronously.
 *
 * @param {Func} callback (err, authz)
 */
RequestSigner.prototype.sign = function (cb) {
  assert.func(cb, 'callback');

  if (this.rs_headers.length < 1)
    throw (new Error('At least one header must be signed'));

  var alg, authz;
  if (this.rs_signFunc) {
    var data = this.rs_lines.join('\n');
    var self = this;
    this.rs_signFunc(data, function (err, sig) {
      if (err) {
        cb(err);
        return;
      }
      try {
        assert.object(sig, 'signature');
        assert.string(sig.keyId, 'signature.keyId');
        assert.string(sig.algorithm, 'signature.algorithm');
        assert.string(sig.signature, 'signature.signature');
        alg = validateAlgorithm(sig.algorithm);

        authz = sprintf(AUTHZ_FMT,
          sig.keyId,
          sig.algorithm,
          self.rs_headers.join(' '),
          sig.signature);
      } catch (e) {
        cb(e);
        return;
      }
      cb(null, authz);
    });

  } else {
    try {
      var sigObj = this.rs_signer.sign();
    } catch (e) {
      cb(e);
      return;
    }
    alg = (this.rs_alg[0] || this.rs_key.type) + '-' + sigObj.hashAlgorithm;
    var signature = sigObj.toString();
    authz = sprintf(AUTHZ_FMT,
      this.rs_keyId,
      alg,
      this.rs_headers.join(' '),
      signature);
    cb(null, authz);
  }
};

///--- Exported API

module.exports = {
  /**
   * Identifies whether a given object is a request signer or not.
   *
   * @param {Object} object, the object to identify
   * @returns {Boolean}
   */
  isSigner: function (obj) {
    if (typeof (obj) === 'object' && obj instanceof RequestSigner)
      return (true);
    return (false);
  },

  /**
   * Creates a request signer, used to asynchronously build a signature
   * for a request (does not have to be an http.ClientRequest).
   *
   * @param {Object} options, either:
   *                   - {String} keyId
   *                   - {String|Buffer} key
   *                   - {String} algorithm (optional, required for HMAC)
   *                 or:
   *                   - {Func} sign (data, cb)
   * @return {RequestSigner}
   */
  createSigner: function createSigner(options) {
    return (new RequestSigner(options));
  },

  /**
   * Adds an 'Authorization' header to an http.ClientRequest object.
   *
   * Note that this API will add a Date header if it's not already set. Any
   * other headers in the options.headers array MUST be present, or this
   * will throw.
   *
   * You shouldn't need to check the return type; it's just there if you want
   * to be pedantic.
   *
   * The optional flag indicates whether parsing should use strict enforcement
   * of the version draft-cavage-http-signatures-04 of the spec or beyond.
   * The default is to be loose and support
   * older versions for compatibility.
   *
   * @param {Object} request an instance of http.ClientRequest.
   * @param {Object} options signing parameters object:
   *                   - {String} keyId required.
   *                   - {String} key required (either a PEM or HMAC key).
   *                   - {Array} headers optional; defaults to ['date'].
   *                   - {String} algorithm optional (unless key is HMAC);
   *                              default is the same as the sshpk default
   *                              signing algorithm for the type of key given
   *                   - {String} httpVersion optional; defaults to '1.1'.
   *                   - {Boolean} strict optional; defaults to 'false'.
   * @return {Boolean} true if Authorization (and optionally Date) were added.
   * @throws {TypeError} on bad parameter types (input).
   * @throws {InvalidAlgorithmError} if algorithm was bad or incompatible with
   *                                 the given key.
   * @throws {sshpk.KeyParseError} if key was bad.
   * @throws {MissingHeaderError} if a header to be signed was specified but
   *                              was not present.
   */
  signRequest: function signRequest(request, options) {
    assert.object(request, 'request');
    assert.object(options, 'options');
    assert.optionalString(options.algorithm, 'options.algorithm');
    assert.string(options.keyId, 'options.keyId');
    assert.optionalArrayOfString(options.headers, 'options.headers');
    assert.optionalString(options.httpVersion, 'options.httpVersion');

    if (!request.getHeader('Date'))
      request.setHeader('Date', jsprim.rfc1123(new Date()));
    if (!options.headers)
      options.headers = ['date'];
    if (!options.httpVersion)
      options.httpVersion = '1.1';

    var alg = [];
    if (options.algorithm) {
      options.algorithm = options.algorithm.toLowerCase();
      alg = validateAlgorithm(options.algorithm);
    }

    var i;
    var stringToSign = '';
    for (i = 0; i < options.headers.length; i++) {
      if (typeof (options.headers[i]) !== 'string')
        throw new TypeError('options.headers must be an array of Strings');

      var h = options.headers[i].toLowerCase();

      if (h === 'request-line') {
        if (!options.strict) {
          /**
           * We allow headers from the older spec drafts if strict parsing isn't
           * specified in options.
           */
          stringToSign +=
            request.method + ' ' + request.path + ' HTTP/' +
            options.httpVersion;
        } else {
          /* Strict parsing doesn't allow older draft headers. */
          throw (new StrictParsingError('request-line is not a valid header ' +
            'with strict parsing enabled.'));
        }
      } else if (h === '(request-target)') {
        stringToSign +=
          '(request-target): ' + request.method.toLowerCase() + ' ' +
          request.path;
      } else {
        var value = request.getHeader(h);
        if (value === undefined || value === '') {
          throw new MissingHeaderError(h + ' was not in the request');
        }
        stringToSign += h + ': ' + value;
      }

      if ((i + 1) < options.headers.length)
        stringToSign += '\n';
    }

    /* This is just for unit tests. */
    if (request.hasOwnProperty('_stringToSign')) {
      request._stringToSign = stringToSign;
    }

    var signature;
    if (alg[0] === 'hmac') {
      if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key))
        throw (new TypeError('options.key must be a string or Buffer'));

      var hmac = crypto.createHmac(alg[1].toUpperCase(), options.key);
      hmac.update(stringToSign);
      signature = hmac.digest('base64');

    } else {
      var key = options.key;
      if (typeof (key) === 'string' || Buffer.isBuffer(key))
        key = sshpk.parsePrivateKey(options.key);

      assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]),
        'options.key must be a sshpk.PrivateKey');

      if (!PK_ALGOS[key.type]) {
        throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' +
          'keys are not supported'));
      }

      if (alg[0] !== undefined && key.type !== alg[0]) {
        throw (new InvalidAlgorithmError('options.key must be a ' +
          alg[0].toUpperCase() + ' key, was given a ' +
          key.type.toUpperCase() + ' key instead'));
      }

      var signer = key.createSign(alg[1]);
      signer.update(stringToSign);
      var sigObj = signer.sign();
      if (!HASH_ALGOS[sigObj.hashAlgorithm]) {
        throw (new InvalidAlgorithmError(sigObj.hashAlgorithm.toUpperCase() +
          ' is not a supported hash algorithm'));
      }
      options.algorithm = key.type + '-' + sigObj.hashAlgorithm;
      signature = sigObj.toString();
      assert.notStrictEqual(signature, '', 'empty signature produced');
    }

    var authzHeaderName = options.authorizationHeaderName || 'Authorization';

    request.setHeader(authzHeaderName, sprintf(AUTHZ_FMT,
                                               options.keyId,
                                               options.algorithm,
                                               options.headers.join(' '),
                                               signature));

    return true;
  }

};


/***/ }),
/* 885 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2015 Joyent, Inc.

var assert = __webpack_require__(6);
var crypto = __webpack_require__(7);
var sshpk = __webpack_require__(242);
var utils = __webpack_require__(162);

var HASH_ALGOS = utils.HASH_ALGOS;
var PK_ALGOS = utils.PK_ALGOS;
var InvalidAlgorithmError = utils.InvalidAlgorithmError;
var HttpSignatureError = utils.HttpSignatureError;
var validateAlgorithm = utils.validateAlgorithm;

///--- Exported API

module.exports = {
  /**
   * Verify RSA/DSA signature against public key.  You are expected to pass in
   * an object that was returned from `parse()`.
   *
   * @param {Object} parsedSignature the object you got from `parse`.
   * @param {String} pubkey RSA/DSA private key PEM.
   * @return {Boolean} true if valid, false otherwise.
   * @throws {TypeError} if you pass in bad arguments.
   * @throws {InvalidAlgorithmError}
   */
  verifySignature: function verifySignature(parsedSignature, pubkey) {
    assert.object(parsedSignature, 'parsedSignature');
    if (typeof (pubkey) === 'string' || Buffer.isBuffer(pubkey))
      pubkey = sshpk.parseKey(pubkey);
    assert.ok(sshpk.Key.isKey(pubkey, [1, 1]), 'pubkey must be a sshpk.Key');

    var alg = validateAlgorithm(parsedSignature.algorithm);
    if (alg[0] === 'hmac' || alg[0] !== pubkey.type)
      return (false);

    var v = pubkey.createVerify(alg[1]);
    v.update(parsedSignature.signingString);
    return (v.verify(parsedSignature.params.signature, 'base64'));
  },

  /**
   * Verify HMAC against shared secret.  You are expected to pass in an object
   * that was returned from `parse()`.
   *
   * @param {Object} parsedSignature the object you got from `parse`.
   * @param {String} secret HMAC shared secret.
   * @return {Boolean} true if valid, false otherwise.
   * @throws {TypeError} if you pass in bad arguments.
   * @throws {InvalidAlgorithmError}
   */
  verifyHMAC: function verifyHMAC(parsedSignature, secret) {
    assert.object(parsedSignature, 'parsedHMAC');
    assert.string(secret, 'secret');

    var alg = validateAlgorithm(parsedSignature.algorithm);
    if (alg[0] !== 'hmac')
      return (false);

    var hashAlg = alg[1].toUpperCase();

    var hmac = crypto.createHmac(hashAlg, secret);
    hmac.update(parsedSignature.signingString);

    /*
     * Now double-hash to avoid leaking timing information - there's
     * no easy constant-time compare in JS, so we use this approach
     * instead. See for more info:
     * https://www.isecpartners.com/blog/2011/february/double-hmac-
     * verification.aspx
     */
    var h1 = crypto.createHmac(hashAlg, secret);
    h1.update(hmac.digest());
    h1 = h1.digest();
    var h2 = crypto.createHmac(hashAlg, secret);
    h2.update(new Buffer(parsedSignature.params.signature, 'base64'));
    h2 = h2.digest();

    /* Node 0.8 returns strings from .digest(). */
    if (typeof (h1) === 'string')
      return (h1 === h2);
    /* And node 0.10 lacks the .equals() method on Buffers. */
    if (Buffer.isBuffer(h1) && !h1.equals)
      return (h1.toString('binary') === h2.toString('binary'));

    return (h1.equals(h2));
  }
};


/***/ }),
/* 886 */
/***/ (function(module, exports) {

if (typeof Object.create === 'function') {
  // implementation from standard node.js 'util' module
  module.exports = function inherits(ctor, 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) {
    ctor.super_ = superCtor
    var TempCtor = function () {}
    TempCtor.prototype = superCtor.prototype
    ctor.prototype = new TempCtor()
    ctor.prototype.constructor = ctor
  }
}


/***/ }),
/* 887 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (obj) {
	if (typeof obj !== 'object') {
		throw new TypeError('Expected an object');
	}

	var ret = {};

	for (var key in obj) {
		var val = obj[key];
		ret[val] = key;
	}

	return ret;
};


/***/ }),
/* 888 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var XMLHttpRequest = __webpack_require__(889);

module.exports = IPFS;

/**
 * The constructor object
 * @param {Object} `provider` the provider object
 * @return {Object} `ipfs` returns an IPFS instance
 * @throws if the `new` flag is not used
 */
function IPFS(provider) {
  if (!(this instanceof IPFS)) {
    throw new Error('[ipfs-mini] IPFS instance must be instantiated with "new" flag (e.g. var ipfs = new IPFS("http://localhost:8545");).');
  }

  var self = this;
  self.setProvider(provider || {});
}

/**
 * Sets the provider of the IPFS instance
 * @param {Object} `provider` the provider object
 * @throws if the provider object is not an object
 */
IPFS.prototype.setProvider = function setProvider(provider) {
  if (typeof provider !== 'object') {
    throw new Error('[ifpsjs] provider must be type Object, got \'' + typeof provider + '\'.');
  }
  var self = this;
  var data = self.provider = Object.assign({
    host: '127.0.0.1',
    pinning: true,
    port: '5001',
    protocol: 'http',
    base: '/api/v0' }, provider || {});
  self.requestBase = String(data.protocol + '://' + data.host + ':' + data.port + data.base);
};

/**
 * Sends an async data packet to an IPFS node
 * @param {Object} `opts` the options object
 * @param {Function} `cb` the provider callback
 * @callback returns an error if any, or the data from IPFS
 */
IPFS.prototype.sendAsync = function sendAsync(opts, cb) {
  var self = this;
  var request = new XMLHttpRequest(); // eslint-disable-line
  var options = opts || {};
  var callback = cb || function emptyCallback() {};

  request.onreadystatechange = function () {
    if (request.readyState === 4 && request.timeout !== 1) {
      if (request.status !== 200) {
        callback(new Error('[ipfs-mini] status ' + request.status + ': ' + request.responseText), null);
      } else {
        try {
          callback(null, options.jsonParse ? JSON.parse(request.responseText) : request.responseText);
        } catch (jsonError) {
          callback(new Error('[ipfs-mini] while parsing data: \'' + String(request.responseText) + '\', error: ' + String(jsonError) + ' with provider: \'' + self.requestBase + '\'', null));
        }
      }
    }
  };

  var pinningURI = self.provider.pinning && opts.uri === '/add' ? '?pin=true' : '';

  if (options.payload) {
    request.open('POST', '' + self.requestBase + opts.uri + pinningURI);
  } else {
    request.open('GET', '' + self.requestBase + opts.uri + pinningURI);
  }

  if (options.accept) {
    request.setRequestHeader('accept', options.accept);
  }

  if (options.payload && options.boundary) {
    request.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + options.boundary);
    request.send(options.payload);
  } else {
    request.send();
  }
};

/**
 * creates a boundary that isn't part of the payload
 */
function createBoundary(data) {
  while (true) {
    var boundary = '----IPFSMini' + Math.random() * 100000 + '.' + Math.random() * 100000;
    if (data.indexOf(boundary) === -1) {
      return boundary;
    }
  }
}

/**
 * Add an string or buffer to IPFS
 * @param {String|Buffer} `input` a single string or buffer
 * @param {Function} `callback` a callback, with (error, ipfsHash String)
 * @callback {String} `ipfsHash` returns an IPFS hash string
 */
IPFS.prototype.add = function addData(input, callback) {
  var data = typeof input === 'object' && input.isBuffer ? input.toString('binary') : input;
  var boundary = createBoundary(data);
  var payload = '--' + boundary + '\r\nContent-Disposition: form-data; name="path"\r\nContent-Type: application/octet-stream\r\n\r\n' + data + '\r\n--' + boundary + '--';

  var addCallback = function addCallback(err, result) {
    return callback(err, !err ? result.Hash : null);
  };
  this.sendAsync({
    jsonParse: true,
    accept: 'application/json',
    uri: '/add',
    payload: payload, boundary: boundary
  }, addCallback);
};

/**
 * Add an JSON object to IPFS
 * @param {Object} `jsonData` a single JSON object
 * @param {Function} `callback` a callback, with (error, ipfsHash String)
 * @callback {String} `ipfsHash` returns an IPFS hash string
 */
IPFS.prototype.addJSON = function addJson(jsonData, callback) {
  var self = this;
  self.add(JSON.stringify(jsonData), callback);
};

/**
 * Get an object stat `/object/stat` for an IPFS hash
 * @param {String} `ipfsHash` a single IPFS hash String
 * @param {Function} `callback` a callback, with (error, stats Object)
 * @callback {Object} `stats` returns the stats object for that IPFS hash
 */
IPFS.prototype.stat = function cat(ipfsHash, callback) {
  var self = this;
  self.sendAsync({ jsonParse: true, uri: '/object/stat/' + ipfsHash }, callback);
};

/**
 * Get the data from an IPFS hash
 * @param {String} `ipfsHash` a single IPFS hash String
 * @param {Function} `callback` a callback, with (error, stats Object)
 * @callback {String} `data` returns the output data
 */
IPFS.prototype.cat = function cat(ipfsHash, callback) {
  var self = this;
  self.sendAsync({ uri: '/cat/' + ipfsHash }, callback);
};

/**
 * Get the data from an IPFS hash that is a JSON object
 * @param {String} `ipfsHash` a single IPFS hash String
 * @param {Function} `callback` a callback, with (error, json Object)
 * @callback {Object} `data` returns the output data JSON object
 */
IPFS.prototype.catJSON = function cat(ipfsHash, callback) {
  var self = this;
  self.cat(ipfsHash, function (jsonError, jsonResult) {
    // eslint-disable-line
    if (jsonError) {
      return callback(jsonError, null);
    }

    try {
      callback(null, JSON.parse(jsonResult));
    } catch (jsonParseError) {
      callback(jsonParseError, null);
    }
  });
};

/***/ }),
/* 889 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var XMLHttpRequest = __webpack_require__(174).XMLHttpRequest;

module.exports = XMLHttpRequest;

/***/ }),
/* 890 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function isArrayish(obj) {
	if (!obj) {
		return false;
	}

	return obj instanceof Array || Array.isArray(obj) ||
		(obj.length >= 0 && obj.splice instanceof Function);
};


/***/ }),
/* 891 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var path = __webpack_require__(0);
var binaryExtensions = __webpack_require__(476);
var exts = Object.create(null);

binaryExtensions.forEach(function (el) {
	exts[el] = true;
});

module.exports = function (filepath) {
	return path.extname(filepath).slice(1).toLowerCase() in exts;
};


/***/ }),
/* 892 */
/***/ (function(module, exports) {

/*!
 * Determine if an object is a Buffer
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @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))
}


/***/ }),
/* 893 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var builtinModules = __webpack_require__(602);

module.exports = function (str) {
	if (typeof str !== 'string') {
		throw new TypeError('Expected a string');
	}

	return builtinModules.indexOf(str) !== -1;
};


/***/ }),
/* 894 */
/***/ (function(module, exports) {

/*!
 * is-dotfile <https://github.com/jonschlinkert/is-dotfile>
 *
 * Copyright (c) 2015-2017, Jon Schlinkert.
 * Released under the MIT License.
 */

module.exports = function(str) {
  if (str.charCodeAt(0) === 46 /* . */ && str.indexOf('/', 1) === -1) {
    return true;
  }
  var slash = str.lastIndexOf('/');
  return slash !== -1 ? str.charCodeAt(slash + 1) === 46  /* . */ : false;
};


/***/ }),
/* 895 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * is-equal-shallow <https://github.com/jonschlinkert/is-equal-shallow>
 *
 * Copyright (c) 2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var isPrimitive = __webpack_require__(903);

module.exports = function isEqual(a, b) {
  if (!a && !b) { return true; }
  if (!a && b || a && !b) { return false; }

  var numKeysA = 0, numKeysB = 0, key;
  for (key in b) {
    numKeysB++;
    if (!isPrimitive(b[key]) || !a.hasOwnProperty(key) || (a[key] !== b[key])) {
      return false;
    }
  }
  for (key in a) {
    numKeysA++;
  }
  return numKeysA === numKeysB;
};


/***/ }),
/* 896 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * is-extendable <https://github.com/jonschlinkert/is-extendable>
 *
 * Copyright (c) 2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



module.exports = function isExtendable(val) {
  return typeof val !== 'undefined' && val !== null
    && (typeof val === 'object' || typeof val === 'function');
};


/***/ }),
/* 897 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* eslint-disable yoda */
module.exports = x => {
	if (Number.isNaN(x)) {
		return false;
	}

	// code points are derived from:
	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
	if (
		x >= 0x1100 && (
			x <= 0x115f ||  // Hangul Jamo
			x === 0x2329 || // LEFT-POINTING ANGLE BRACKET
			x === 0x232a || // RIGHT-POINTING ANGLE BRACKET
			// CJK Radicals Supplement .. Enclosed CJK Letters and Months
			(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
			// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
			(0x3250 <= x && x <= 0x4dbf) ||
			// CJK Unified Ideographs .. Yi Radicals
			(0x4e00 <= x && x <= 0xa4c6) ||
			// Hangul Jamo Extended-A
			(0xa960 <= x && x <= 0xa97c) ||
			// Hangul Syllables
			(0xac00 <= x && x <= 0xd7a3) ||
			// CJK Compatibility Ideographs
			(0xf900 <= x && x <= 0xfaff) ||
			// Vertical Forms
			(0xfe10 <= x && x <= 0xfe19) ||
			// CJK Compatibility Forms .. Small Form Variants
			(0xfe30 <= x && x <= 0xfe6b) ||
			// Halfwidth and Fullwidth Forms
			(0xff01 <= x && x <= 0xff60) ||
			(0xffe0 <= x && x <= 0xffe6) ||
			// Kana Supplement
			(0x1b000 <= x && x <= 0x1b001) ||
			// Enclosed Ideographic Supplement
			(0x1f200 <= x && x <= 0x1f251) ||
			// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
			(0x20000 <= x && x <= 0x3fffd)
		)
	) {
		return true;
	}

	return false;
};


/***/ }),
/* 898 */
/***/ (function(module, exports) {

/**
 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
 * @param {String} str the string input value
 * @return {Boolean} a boolean if it is or is not hex prefixed
 * @throws if the str input is not a string
 */
module.exports = function isHexPrefixed(str) {
  if (typeof str !== 'string') {
    throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
  }

  return str.slice(0, 2) === '0x';
}


/***/ }),
/* 899 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var path = __webpack_require__(0);

module.exports = function (str) {
	return path.resolve(str) === path.resolve(process.cwd());
};


/***/ }),
/* 900 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isPathInside = __webpack_require__(901);

module.exports = function (str) {
	return isPathInside(str, process.cwd());
};


/***/ }),
/* 901 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var path = __webpack_require__(0);
var pathIsInside = __webpack_require__(989);

module.exports = function (a, b) {
	a = path.resolve(a);
	b = path.resolve(b);

	if (a === b) {
		return false;
	}

	return pathIsInside(a, b);
};


/***/ }),
/* 902 */
/***/ (function(module, exports) {

/*!
 * is-posix-bracket <https://github.com/jonschlinkert/is-posix-bracket>
 *
 * Copyright (c) 2015-2016, Jon Schlinkert.
 * Licensed under the MIT License.
 */

module.exports = function isPosixBracket(str) {
  return typeof str === 'string' && /\[([:.=+])(?:[^\[\]]|)+\1\]/.test(str);
};


/***/ }),
/* 903 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * is-primitive <https://github.com/jonschlinkert/is-primitive>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



// see http://jsperf.com/testing-value-is-primitive/7
module.exports = function isPrimitive(value) {
  return value == null || (typeof value !== 'function' && typeof value !== 'object');
};


/***/ }),
/* 904 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var isStream = module.exports = function (stream) {
	return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
};

isStream.writable = function (stream) {
	return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
};

isStream.readable = function (stream) {
	return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
};

isStream.duplex = function (stream) {
	return isStream.writable(stream) && isStream.readable(stream);
};

isStream.transform = function (stream) {
	return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
};


/***/ }),
/* 905 */
/***/ (function(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)]
}


/***/ }),
/* 906 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1)
var core
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
  core = __webpack_require__(908)
} else {
  core = __webpack_require__(907)
}

module.exports = isexe
isexe.sync = sync

function isexe (path, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  if (!cb) {
    if (typeof Promise !== 'function') {
      throw new TypeError('callback not provided')
    }

    return new Promise(function (resolve, reject) {
      isexe(path, options || {}, function (er, is) {
        if (er) {
          reject(er)
        } else {
          resolve(is)
        }
      })
    })
  }

  core(path, options || {}, function (er, is) {
    // ignore EACCES because that just means we aren't allowed to run it
    if (er) {
      if (er.code === 'EACCES' || options && options.ignoreErrors) {
        er = null
        is = false
      }
    }
    cb(er, is)
  })
}

function sync (path, options) {
  // my kingdom for a filtered catch
  try {
    return core.sync(path, options || {})
  } catch (er) {
    if (options && options.ignoreErrors || er.code === 'EACCES') {
      return false
    } else {
      throw er
    }
  }
}


/***/ }),
/* 907 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = isexe
isexe.sync = sync

var fs = __webpack_require__(1)

function isexe (path, options, cb) {
  fs.stat(path, function (er, stat) {
    cb(er, er ? false : checkStat(stat, options))
  })
}

function sync (path, options) {
  return checkStat(fs.statSync(path), options)
}

function checkStat (stat, options) {
  return stat.isFile() && checkMode(stat, options)
}

function checkMode (stat, options) {
  var mod = stat.mode
  var uid = stat.uid
  var gid = stat.gid

  var myUid = options.uid !== undefined ?
    options.uid : process.getuid && process.getuid()
  var myGid = options.gid !== undefined ?
    options.gid : process.getgid && process.getgid()

  var u = parseInt('100', 8)
  var g = parseInt('010', 8)
  var o = parseInt('001', 8)
  var ug = u | g

  var ret = (mod & o) ||
    (mod & g) && gid === myGid ||
    (mod & u) && uid === myUid ||
    (mod & ug) && myUid === 0

  return ret
}


/***/ }),
/* 908 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = isexe
isexe.sync = sync

var fs = __webpack_require__(1)

function checkPathExt (path, options) {
  var pathext = options.pathExt !== undefined ?
    options.pathExt : process.env.PATHEXT

  if (!pathext) {
    return true
  }

  pathext = pathext.split(';')
  if (pathext.indexOf('') !== -1) {
    return true
  }
  for (var i = 0; i < pathext.length; i++) {
    var p = pathext[i].toLowerCase()
    if (p && path.substr(-p.length).toLowerCase() === p) {
      return true
    }
  }
  return false
}

function checkStat (stat, path, options) {
  if (!stat.isSymbolicLink() && !stat.isFile()) {
    return false
  }
  return checkPathExt(path, options)
}

function isexe (path, options, cb) {
  fs.stat(path, function (er, stat) {
    cb(er, er ? false : checkStat(stat, path, options))
  })
}

function sync (path, options) {
  return checkStat(fs.statSync(path), path, options)
}


/***/ }),
/* 909 */
/***/ (function(module, exports) {

/**
 * [js-sha3]{@link https://github.com/emn178/js-sha3}
 *
 * @version 0.5.5
 * @author Chen, Yi-Cyuan [emn178@gmail.com]
 * @copyright Chen, Yi-Cyuan 2015-2016
 * @license MIT
 */
(function (root) {
  'use strict';

  var NODE_JS = typeof process == 'object' && process.versions && process.versions.node;
  if (NODE_JS) {
    root = global;
  }
  var COMMON_JS = !root.JS_SHA3_TEST && typeof module == 'object' && module.exports;
  var HEX_CHARS = '0123456789abcdef'.split('');
  var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
  var KECCAK_PADDING = [1, 256, 65536, 16777216];
  var PADDING = [6, 1536, 393216, 100663296];
  var SHIFT = [0, 8, 16, 24];
  var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
            0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 
            2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 
            2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
            2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
  var BITS = [224, 256, 384, 512];
  var SHAKE_BITS = [128, 256];
  var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];

  var createOutputMethod = function (bits, padding, outputType) {
    return function (message) {
      return new Keccak(bits, padding, bits).update(message)[outputType]();
    }
  };

  var createShakeOutputMethod = function (bits, padding, outputType) {
    return function (message, outputBits) {
      return new Keccak(bits, padding, outputBits).update(message)[outputType]();
    }
  };

  var createMethod = function (bits, padding) {
    var method = createOutputMethod(bits, padding, 'hex');
    method.create = function () {
      return new Keccak(bits, padding, bits);
    };
    method.update = function (message) {
      return method.create().update(message);
    };
    for (var i = 0;i < OUTPUT_TYPES.length;++i) {
      var type = OUTPUT_TYPES[i];
      method[type] = createOutputMethod(bits, padding, type);
    }
    return method;
  };

  var createShakeMethod = function (bits, padding) {
    var method = createShakeOutputMethod(bits, padding, 'hex');
    method.create = function (outputBits) {
      return new Keccak(bits, padding, outputBits);
    };
    method.update = function (message, outputBits) {
      return method.create(outputBits).update(message);
    };
    for (var i = 0;i < OUTPUT_TYPES.length;++i) {
      var type = OUTPUT_TYPES[i];
      method[type] = createShakeOutputMethod(bits, padding, type);
    }
    return method;
  };

  var algorithms = [
    {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},
    {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},
    {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}
  ];

  var methods = {};

  for (var i = 0;i < algorithms.length;++i) {
    var algorithm = algorithms[i];
    var bits  = algorithm.bits;
    for (var j = 0;j < bits.length;++j) {
      methods[algorithm.name +'_' + bits[j]] = algorithm.createMethod(bits[j], algorithm.padding);
    }
  }

  function Keccak(bits, padding, outputBits) {
    this.blocks = [];
    this.s = [];
    this.padding = padding;
    this.outputBits = outputBits;
    this.reset = true;
    this.block = 0;
    this.start = 0;
    this.blockCount = (1600 - (bits << 1)) >> 5;
    this.byteCount = this.blockCount << 2;
    this.outputBlocks = outputBits >> 5;
    this.extraBytes = (outputBits & 31) >> 3;

    for (var i = 0;i < 50;++i) {
      this.s[i] = 0;
    }
  };

  Keccak.prototype.update = function (message) {
    var notString = typeof message != 'string';
    if (notString && message.constructor == root.ArrayBuffer) {
      message = new Uint8Array(message);
    }
    var length = message.length, blocks = this.blocks, byteCount = this.byteCount, 
        blockCount = this.blockCount, index = 0, s = this.s, i, code;
    
    while (index < length) {
      if (this.reset) {
        this.reset = false;
        blocks[0] = this.block;
        for (i = 1;i < blockCount + 1;++i) {
          blocks[i] = 0;
        }
      }
      if (notString) {
        for (i = this.start;index < length && i < byteCount;++index) {
          blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
        }
      } else {
        for (i = this.start;index < length && i < byteCount;++index) {
          code = message.charCodeAt(index);
          if (code < 0x80) {
            blocks[i >> 2] |= code << SHIFT[i++ & 3];
          } else if (code < 0x800) {
            blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
          } else if (code < 0xd800 || code >= 0xe000) {
            blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
          } else {
            code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
            blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
          }
        }
      }
      this.lastByteIndex = i;
      if (i >= byteCount) {
        this.start = i - byteCount;
        this.block = blocks[blockCount];
        for (i = 0;i < blockCount;++i) {
          s[i] ^= blocks[i];
        }
        f(s);
        this.reset = true;
      } else {
        this.start = i;
      }
    }
    return this;
  };

  Keccak.prototype.finalize = function () {
    var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
    blocks[i >> 2] |= this.padding[i & 3];
    if (this.lastByteIndex == this.byteCount) {
      blocks[0] = blocks[blockCount];
      for (i = 1;i < blockCount + 1;++i) {
        blocks[i] = 0;
      }
    }
    blocks[blockCount - 1] |= 0x80000000;
    for (i = 0;i < blockCount;++i) {
      s[i] ^= blocks[i];
    }
    f(s);
  };

  Keccak.prototype.toString = Keccak.prototype.hex = function () {
    this.finalize();

    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, 
        extraBytes = this.extraBytes, i = 0, j = 0;
    var hex = '', block;
    while (j < outputBlocks) {
      for (i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
        block = s[i];
        hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
               HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
               HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
               HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
      }
      if (j % blockCount == 0) {
        f(s);
        i = 0;
      }
    }
    if (extraBytes) {
      block = s[i];
      if (extraBytes > 0) {
        hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
      }
      if (extraBytes > 1) {
        hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
      }
      if (extraBytes > 2) {
        hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
      }
    }
    return hex;
  };

  Keccak.prototype.arrayBuffer = function () {
    this.finalize();

    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, 
        extraBytes = this.extraBytes, i = 0, j = 0;
    var bytes = this.outputBits >> 3;
    var buffer;
    if (extraBytes) {
      buffer = new ArrayBuffer((outputBlocks + 1) << 2);
    } else {
      buffer = new ArrayBuffer(bytes);
    }
    var array = new Uint32Array(buffer);
    while (j < outputBlocks) {
      for (i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
        array[j] = s[i];
      }
      if (j % blockCount == 0) {
        f(s);
      }
    }
    if (extraBytes) {
      array[i] = s[i];
      buffer = buffer.slice(0, bytes);
    }
    return buffer;
  };

  Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;

  Keccak.prototype.digest = Keccak.prototype.array = function () {
    this.finalize();

    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, 
        extraBytes = this.extraBytes, i = 0, j = 0;
    var array = [], offset, block;
    while (j < outputBlocks) {
      for (i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
        offset = j << 2;
        block = s[i];
        array[offset] = block & 0xFF;
        array[offset + 1] = (block >> 8) & 0xFF;
        array[offset + 2] = (block >> 16) & 0xFF;
        array[offset + 3] = (block >> 24) & 0xFF;
      }
      if (j % blockCount == 0) {
        f(s);
      }
    }
    if (extraBytes) {
      offset = j << 2;
      block = s[i];
      if (extraBytes > 0) {
        array[offset] = block & 0xFF;
      }
      if (extraBytes > 1) {
        array[offset + 1] = (block >> 8) & 0xFF;
      }
      if (extraBytes > 2) {
        array[offset + 2] = (block >> 16) & 0xFF;
      }
    }
    return array;
  };

  var f = function (s) {
    var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, 
        b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, 
        b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, 
        b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
    for (n = 0;n < 48;n += 2) {
      c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
      c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
      c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
      c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
      c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
      c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
      c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
      c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
      c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
      c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];

      h = c8 ^ ((c2 << 1) | (c3 >>> 31));
      l = c9 ^ ((c3 << 1) | (c2 >>> 31));
      s[0] ^= h;
      s[1] ^= l;
      s[10] ^= h;
      s[11] ^= l;
      s[20] ^= h;
      s[21] ^= l;
      s[30] ^= h;
      s[31] ^= l;
      s[40] ^= h;
      s[41] ^= l;
      h = c0 ^ ((c4 << 1) | (c5 >>> 31));
      l = c1 ^ ((c5 << 1) | (c4 >>> 31));
      s[2] ^= h;
      s[3] ^= l;
      s[12] ^= h;
      s[13] ^= l;
      s[22] ^= h;
      s[23] ^= l;
      s[32] ^= h;
      s[33] ^= l;
      s[42] ^= h;
      s[43] ^= l;
      h = c2 ^ ((c6 << 1) | (c7 >>> 31));
      l = c3 ^ ((c7 << 1) | (c6 >>> 31));
      s[4] ^= h;
      s[5] ^= l;
      s[14] ^= h;
      s[15] ^= l;
      s[24] ^= h;
      s[25] ^= l;
      s[34] ^= h;
      s[35] ^= l;
      s[44] ^= h;
      s[45] ^= l;
      h = c4 ^ ((c8 << 1) | (c9 >>> 31));
      l = c5 ^ ((c9 << 1) | (c8 >>> 31));
      s[6] ^= h;
      s[7] ^= l;
      s[16] ^= h;
      s[17] ^= l;
      s[26] ^= h;
      s[27] ^= l;
      s[36] ^= h;
      s[37] ^= l;
      s[46] ^= h;
      s[47] ^= l;
      h = c6 ^ ((c0 << 1) | (c1 >>> 31));
      l = c7 ^ ((c1 << 1) | (c0 >>> 31));
      s[8] ^= h;
      s[9] ^= l;
      s[18] ^= h;
      s[19] ^= l;
      s[28] ^= h;
      s[29] ^= l;
      s[38] ^= h;
      s[39] ^= l;
      s[48] ^= h;
      s[49] ^= l;

      b0 = s[0];
      b1 = s[1];
      b32 = (s[11] << 4) | (s[10] >>> 28);
      b33 = (s[10] << 4) | (s[11] >>> 28);
      b14 = (s[20] << 3) | (s[21] >>> 29);
      b15 = (s[21] << 3) | (s[20] >>> 29);
      b46 = (s[31] << 9) | (s[30] >>> 23);
      b47 = (s[30] << 9) | (s[31] >>> 23);
      b28 = (s[40] << 18) | (s[41] >>> 14);
      b29 = (s[41] << 18) | (s[40] >>> 14);
      b20 = (s[2] << 1) | (s[3] >>> 31);
      b21 = (s[3] << 1) | (s[2] >>> 31);
      b2 = (s[13] << 12) | (s[12] >>> 20);
      b3 = (s[12] << 12) | (s[13] >>> 20);
      b34 = (s[22] << 10) | (s[23] >>> 22);
      b35 = (s[23] << 10) | (s[22] >>> 22);
      b16 = (s[33] << 13) | (s[32] >>> 19);
      b17 = (s[32] << 13) | (s[33] >>> 19);
      b48 = (s[42] << 2) | (s[43] >>> 30);
      b49 = (s[43] << 2) | (s[42] >>> 30);
      b40 = (s[5] << 30) | (s[4] >>> 2);
      b41 = (s[4] << 30) | (s[5] >>> 2);
      b22 = (s[14] << 6) | (s[15] >>> 26);
      b23 = (s[15] << 6) | (s[14] >>> 26);
      b4 = (s[25] << 11) | (s[24] >>> 21);
      b5 = (s[24] << 11) | (s[25] >>> 21);
      b36 = (s[34] << 15) | (s[35] >>> 17);
      b37 = (s[35] << 15) | (s[34] >>> 17);
      b18 = (s[45] << 29) | (s[44] >>> 3);
      b19 = (s[44] << 29) | (s[45] >>> 3);
      b10 = (s[6] << 28) | (s[7] >>> 4);
      b11 = (s[7] << 28) | (s[6] >>> 4);
      b42 = (s[17] << 23) | (s[16] >>> 9);
      b43 = (s[16] << 23) | (s[17] >>> 9);
      b24 = (s[26] << 25) | (s[27] >>> 7);
      b25 = (s[27] << 25) | (s[26] >>> 7);
      b6 = (s[36] << 21) | (s[37] >>> 11);
      b7 = (s[37] << 21) | (s[36] >>> 11);
      b38 = (s[47] << 24) | (s[46] >>> 8);
      b39 = (s[46] << 24) | (s[47] >>> 8);
      b30 = (s[8] << 27) | (s[9] >>> 5);
      b31 = (s[9] << 27) | (s[8] >>> 5);
      b12 = (s[18] << 20) | (s[19] >>> 12);
      b13 = (s[19] << 20) | (s[18] >>> 12);
      b44 = (s[29] << 7) | (s[28] >>> 25);
      b45 = (s[28] << 7) | (s[29] >>> 25);
      b26 = (s[38] << 8) | (s[39] >>> 24);
      b27 = (s[39] << 8) | (s[38] >>> 24);
      b8 = (s[48] << 14) | (s[49] >>> 18);
      b9 = (s[49] << 14) | (s[48] >>> 18);

      s[0] = b0 ^ (~b2 & b4);
      s[1] = b1 ^ (~b3 & b5);
      s[10] = b10 ^ (~b12 & b14);
      s[11] = b11 ^ (~b13 & b15);
      s[20] = b20 ^ (~b22 & b24);
      s[21] = b21 ^ (~b23 & b25);
      s[30] = b30 ^ (~b32 & b34);
      s[31] = b31 ^ (~b33 & b35);
      s[40] = b40 ^ (~b42 & b44);
      s[41] = b41 ^ (~b43 & b45);
      s[2] = b2 ^ (~b4 & b6);
      s[3] = b3 ^ (~b5 & b7);
      s[12] = b12 ^ (~b14 & b16);
      s[13] = b13 ^ (~b15 & b17);
      s[22] = b22 ^ (~b24 & b26);
      s[23] = b23 ^ (~b25 & b27);
      s[32] = b32 ^ (~b34 & b36);
      s[33] = b33 ^ (~b35 & b37);
      s[42] = b42 ^ (~b44 & b46);
      s[43] = b43 ^ (~b45 & b47);
      s[4] = b4 ^ (~b6 & b8);
      s[5] = b5 ^ (~b7 & b9);
      s[14] = b14 ^ (~b16 & b18);
      s[15] = b15 ^ (~b17 & b19);
      s[24] = b24 ^ (~b26 & b28);
      s[25] = b25 ^ (~b27 & b29);
      s[34] = b34 ^ (~b36 & b38);
      s[35] = b35 ^ (~b37 & b39);
      s[44] = b44 ^ (~b46 & b48);
      s[45] = b45 ^ (~b47 & b49);
      s[6] = b6 ^ (~b8 & b0);
      s[7] = b7 ^ (~b9 & b1);
      s[16] = b16 ^ (~b18 & b10);
      s[17] = b17 ^ (~b19 & b11);
      s[26] = b26 ^ (~b28 & b20);
      s[27] = b27 ^ (~b29 & b21);
      s[36] = b36 ^ (~b38 & b30);
      s[37] = b37 ^ (~b39 & b31);
      s[46] = b46 ^ (~b48 & b40);
      s[47] = b47 ^ (~b49 & b41);
      s[8] = b8 ^ (~b0 & b2);
      s[9] = b9 ^ (~b1 & b3);
      s[18] = b18 ^ (~b10 & b12);
      s[19] = b19 ^ (~b11 & b13);
      s[28] = b28 ^ (~b20 & b22);
      s[29] = b29 ^ (~b21 & b23);
      s[38] = b38 ^ (~b30 & b32);
      s[39] = b39 ^ (~b31 & b33);
      s[48] = b48 ^ (~b40 & b42);
      s[49] = b49 ^ (~b41 & b43);

      s[0] ^= RC[n];
      s[1] ^= RC[n + 1];
    }
  }

  if (COMMON_JS) {
    module.exports = methods;
  } else if (root) {
    for (var key in methods) {
      root[key] = methods[key];
    }
  }
}(this));


/***/ }),
/* 910 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var traverse = module.exports = function (schema, opts, cb) {
  if (typeof opts == 'function') {
    cb = opts;
    opts = {};
  }
  _traverse(opts, cb, schema, '', schema);
};


traverse.keywords = {
  additionalItems: true,
  items: true,
  contains: true,
  additionalProperties: true,
  propertyNames: true,
  not: true
};

traverse.arrayKeywords = {
  items: true,
  allOf: true,
  anyOf: true,
  oneOf: true
};

traverse.propsKeywords = {
  definitions: true,
  properties: true,
  patternProperties: true,
  dependencies: true
};

traverse.skipKeywords = {
  enum: true,
  const: true,
  required: true,
  maximum: true,
  minimum: true,
  exclusiveMaximum: true,
  exclusiveMinimum: true,
  multipleOf: true,
  maxLength: true,
  minLength: true,
  pattern: true,
  format: true,
  maxItems: true,
  minItems: true,
  uniqueItems: true,
  maxProperties: true,
  minProperties: true
};


function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {
    cb(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
    for (var key in schema) {
      var sch = schema[key];
      if (Array.isArray(sch)) {
        if (key in traverse.arrayKeywords) {
          for (var i=0; i<sch.length; i++)
            _traverse(opts, cb, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);
        }
      } else if (key in traverse.propsKeywords) {
        if (sch && typeof sch == 'object') {
          for (var prop in sch)
            _traverse(opts, cb, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);
        }
      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {
        _traverse(opts, cb, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);
      }
    }
  }
}


function escapeJsonPtr(str) {
  return str.replace(/~/g, '~0').replace(/\//g, '~1');
}


/***/ }),
/* 911 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
 * JSONSchema Validator - Validates JavaScript objects using JSON Schemas
 *	(http://www.json.com/json-schema-proposal/)
 *
 * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com)
 * Licensed under the MIT (MIT-LICENSE.txt) license.
To use the validator call the validate function with an instance object and an optional schema object.
If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
that schema will be used to validate and the schema parameter is not necessary (if both exist,
both validations will occur).
The validate method will return an array of validation errors. If there are no errors, then an
empty list will be returned. A validation error will have two properties:
"property" which indicates which property had the error
"message" which indicates what the error was
 */
(function (root, factory) {
    if (true) {
        // AMD. Register as an anonymous module.
        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
            return factory();
        }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof module === 'object' && module.exports) {
        // Node. Does not work with strict CommonJS, but
        // only CommonJS-like environments that support module.exports,
        // like Node.
        module.exports = factory();
    } else {
        // Browser globals
        root.jsonSchema = factory();
    }
}(this, function () {// setup primitive classes to be JSON Schema types
var exports = validate
exports.Integer = {type:"integer"};
var primitiveConstructors = {
	String: String,
	Boolean: Boolean,
	Number: Number,
	Object: Object,
	Array: Array,
	Date: Date
}
exports.validate = validate;
function validate(/*Any*/instance,/*Object*/schema) {
		// Summary:
		//  	To use the validator call JSONSchema.validate with an instance object and an optional schema object.
		// 		If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
		// 		that schema will be used to validate and the schema parameter is not necessary (if both exist,
		// 		both validations will occur).
		// 		The validate method will return an object with two properties:
		// 			valid: A boolean indicating if the instance is valid by the schema
		// 			errors: An array of validation errors. If there are no errors, then an
		// 					empty list will be returned. A validation error will have two properties:
		// 						property: which indicates which property had the error
		// 						message: which indicates what the error was
		//
		return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false});
	};
exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) {
		// Summary:
		// 		The checkPropertyChange method will check to see if an value can legally be in property with the given schema
		// 		This is slightly different than the validate method in that it will fail if the schema is readonly and it will
		// 		not check for self-validation, it is assumed that the passed in value is already internally valid.
		// 		The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for
		// 		information.
		//
		return validate(value, schema, {changing: property || "property"});
	};
var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) {

	if (!options) options = {};
	var _changing = options.changing;

	function getType(schema){
		return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase());
	}
	var errors = [];
	// validate a value against a property definition
	function checkProp(value, schema, path,i){

		var l;
		path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i;
		function addError(message){
			errors.push({property:path,message:message});
		}

		if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){
			if(typeof schema == 'function'){
				if(!(value instanceof schema)){
					addError("is not an instance of the class/constructor " + schema.name);
				}
			}else if(schema){
				addError("Invalid schema/property definition " + schema);
			}
			return null;
		}
		if(_changing && schema.readonly){
			addError("is a readonly field, it can not be changed");
		}
		if(schema['extends']){ // if it extends another schema, it must pass that schema as well
			checkProp(value,schema['extends'],path,i);
		}
		// validate a value against a type definition
		function checkType(type,value){
			if(type){
				if(typeof type == 'string' && type != 'any' &&
						(type == 'null' ? value !== null : typeof value != type) &&
						!(value instanceof Array && type == 'array') &&
						!(value instanceof Date && type == 'date') &&
						!(type == 'integer' && value%1===0)){
					return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}];
				}
				if(type instanceof Array){
					var unionErrors=[];
					for(var j = 0; j < type.length; j++){ // a union type
						if(!(unionErrors=checkType(type[j],value)).length){
							break;
						}
					}
					if(unionErrors.length){
						return unionErrors;
					}
				}else if(typeof type == 'object'){
					var priorErrors = errors;
					errors = [];
					checkProp(value,type,path);
					var theseErrors = errors;
					errors = priorErrors;
					return theseErrors;
				}
			}
			return [];
		}
		if(value === undefined){
			if(schema.required){
				addError("is missing and it is required");
			}
		}else{
			errors = errors.concat(checkType(getType(schema),value));
			if(schema.disallow && !checkType(schema.disallow,value).length){
				addError(" disallowed value was matched");
			}
			if(value !== null){
				if(value instanceof Array){
					if(schema.items){
						var itemsIsArray = schema.items instanceof Array;
						var propDef = schema.items;
						for (i = 0, l = value.length; i < l; i += 1) {
							if (itemsIsArray)
								propDef = schema.items[i];
							if (options.coerce)
								value[i] = options.coerce(value[i], propDef);
							errors.concat(checkProp(value[i],propDef,path,i));
						}
					}
					if(schema.minItems && value.length < schema.minItems){
						addError("There must be a minimum of " + schema.minItems + " in the array");
					}
					if(schema.maxItems && value.length > schema.maxItems){
						addError("There must be a maximum of " + schema.maxItems + " in the array");
					}
				}else if(schema.properties || schema.additionalProperties){
					errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));
				}
				if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){
					addError("does not match the regex pattern " + schema.pattern);
				}
				if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){
					addError("may only be " + schema.maxLength + " characters long");
				}
				if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){
					addError("must be at least " + schema.minLength + " characters long");
				}
				if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum &&
						schema.minimum > value){
					addError("must have a minimum value of " + schema.minimum);
				}
				if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum &&
						schema.maximum < value){
					addError("must have a maximum value of " + schema.maximum);
				}
				if(schema['enum']){
					var enumer = schema['enum'];
					l = enumer.length;
					var found;
					for(var j = 0; j < l; j++){
						if(enumer[j]===value){
							found=1;
							break;
						}
					}
					if(!found){
						addError("does not have a value in the enumeration " + enumer.join(", "));
					}
				}
				if(typeof schema.maxDecimal == 'number' &&
					(value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){
					addError("may only have " + schema.maxDecimal + " digits of decimal places");
				}
			}
		}
		return null;
	}
	// validate an object against a schema
	function checkObj(instance,objTypeDef,path,additionalProp){

		if(typeof objTypeDef =='object'){
			if(typeof instance != 'object' || instance instanceof Array){
				errors.push({property:path,message:"an object is required"});
			}
			
			for(var i in objTypeDef){ 
				if(objTypeDef.hasOwnProperty(i)){
					var value = instance[i];
					// skip _not_ specified properties
					if (value === undefined && options.existingOnly) continue;
					var propDef = objTypeDef[i];
					// set default
					if(value === undefined && propDef["default"]){
						value = instance[i] = propDef["default"];
					}
					if(options.coerce && i in instance){
						value = instance[i] = options.coerce(value, propDef);
					}
					checkProp(value,propDef,path,i);
				}
			}
		}
		for(i in instance){
			if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){
				if (options.filter) {
					delete instance[i];
					continue;
				} else {
					errors.push({property:path,message:(typeof value) + "The property " + i +
						" is not defined in the schema and the schema does not allow additional properties"});
				}
			}
			var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;
			if(requires && !(requires in instance)){
				errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"});
			}
			value = instance[i];
			if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){
				if(options.coerce){
					value = instance[i] = options.coerce(value, additionalProp);
				}
				checkProp(value,additionalProp,path,i);
			}
			if(!_changing && value && value.$schema){
				errors = errors.concat(checkProp(value,value.$schema,path,i));
			}
		}
		return errors;
	}
	if(schema){
		checkProp(instance,schema,'',_changing || '');
	}
	if(!_changing && instance && instance.$schema){
		checkProp(instance,instance.$schema,'','');
	}
	return {valid:!errors.length,errors:errors};
};
exports.mustBeValid = function(result){
	//	summary:
	//		This checks to ensure that the result is valid and will throw an appropriate error message if it is not
	// result: the result returned from checkPropertyChange or validate
	if(!result.valid){
		throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n"));
	}
}

return exports;
}));


/***/ }),
/* 912 */
/***/ (function(module, exports) {

exports = module.exports = stringify
exports.getSerialize = serializer

function stringify(obj, replacer, spaces, cycleReplacer) {
  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)
}

function serializer(replacer, cycleReplacer) {
  var stack = [], keys = []

  if (cycleReplacer == null) cycleReplacer = function(key, value) {
    if (stack[0] === value) return "[Circular ~]"
    return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]"
  }

  return function(key, value) {
    if (stack.length > 0) {
      var thisPos = stack.indexOf(this)
      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)
      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)
      if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)
    }
    else stack.push(value)

    return replacer == null ? value : replacer.call(this, key, value)
  }
}


/***/ }),
/* 913 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var helpers = __webpack_require__(97);

/** @type ValidatorResult */
var ValidatorResult = helpers.ValidatorResult;
/** @type SchemaError */
var SchemaError = helpers.SchemaError;

var attribute = {};

attribute.ignoreProperties = {
  // informative properties
  'id': true,
  'default': true,
  'description': true,
  'title': true,
  // arguments to other properties
  'exclusiveMinimum': true,
  'exclusiveMaximum': true,
  'additionalItems': true,
  // special-handled properties
  '$schema': true,
  '$ref': true,
  'extends': true
};

/**
 * @name validators
 */
var validators = attribute.validators = {};

/**
 * Validates whether the instance if of a certain type
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {ValidatorResult|null}
 */
validators.type = function validateType (instance, schema, options, ctx) {
  // Ignore undefined instances
  if (instance === undefined) {
    return null;
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  var types = Array.isArray(schema.type) ? schema.type : [schema.type];
  if (!types.some(this.testType.bind(this, instance, schema, options, ctx))) {
    var list = types.map(function (v) {
      return v.id && ('<' + v.id + '>') || (v+'');
    });
    result.addError({
      name: 'type',
      argument: list,
      message: "is not of a type(s) " + list,
    });
  }
  return result;
};

function testSchemaNoThrow(instance, options, ctx, callback, schema){
  var throwError = options.throwError;
  options.throwError = false;
  var res = this.validateSchema(instance, schema, options, ctx);
  options.throwError = throwError;

  if (! res.valid && callback instanceof Function) {
    callback(res);
  }
  return res.valid;
}

/**
 * Validates whether the instance matches some of the given schemas
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {ValidatorResult|null}
 */
validators.anyOf = function validateAnyOf (instance, schema, options, ctx) {
  // Ignore undefined instances
  if (instance === undefined) {
    return null;
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  var inner = new ValidatorResult(instance, schema, options, ctx);
  if (!Array.isArray(schema.anyOf)){
    throw new SchemaError("anyOf must be an array");
  }
  if (!schema.anyOf.some(
    testSchemaNoThrow.bind(
      this, instance, options, ctx, function(res){inner.importErrors(res);}
      ))) {
    var list = schema.anyOf.map(function (v, i) {
      return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
    });
    if (options.nestedErrors) {
      result.importErrors(inner);
    }
    result.addError({
      name: 'anyOf',
      argument: list,
      message: "is not any of " + list.join(','),
    });
  }
  return result;
};

/**
 * Validates whether the instance matches every given schema
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null}
 */
validators.allOf = function validateAllOf (instance, schema, options, ctx) {
  // Ignore undefined instances
  if (instance === undefined) {
    return null;
  }
  if (!Array.isArray(schema.allOf)){
    throw new SchemaError("allOf must be an array");
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  var self = this;
  schema.allOf.forEach(function(v, i){
    var valid = self.validateSchema(instance, v, options, ctx);
    if(!valid.valid){
      var msg = (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
      result.addError({
        name: 'allOf',
        argument: { id: msg, length: valid.errors.length, valid: valid },
        message: 'does not match allOf schema ' + msg + ' with ' + valid.errors.length + ' error[s]:',
      });
      result.importErrors(valid);
    }
  });
  return result;
};

/**
 * Validates whether the instance matches exactly one of the given schemas
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null}
 */
validators.oneOf = function validateOneOf (instance, schema, options, ctx) {
  // Ignore undefined instances
  if (instance === undefined) {
    return null;
  }
  if (!Array.isArray(schema.oneOf)){
    throw new SchemaError("oneOf must be an array");
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  var inner = new ValidatorResult(instance, schema, options, ctx);
  var count = schema.oneOf.filter(
    testSchemaNoThrow.bind(
      this, instance, options, ctx, function(res) {inner.importErrors(res);}
      ) ).length;
  var list = schema.oneOf.map(function (v, i) {
    return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';
  });
  if (count!==1) {
    if (options.nestedErrors) {
      result.importErrors(inner);
    }
    result.addError({
      name: 'oneOf',
      argument: list,
      message: "is not exactly one from " + list.join(','),
    });
  }
  return result;
};

/**
 * Validates properties
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null|ValidatorResult}
 */
validators.properties = function validateProperties (instance, schema, options, ctx) {
  if(!this.types.object(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var properties = schema.properties || {};
  for (var property in properties) {
    if (typeof options.preValidateProperty == 'function') {
      options.preValidateProperty(instance, property, properties[property], options, ctx);
    }

    var prop = Object.hasOwnProperty.call(instance, property) ? instance[property] : undefined;
    var res = this.validateSchema(prop, properties[property], options, ctx.makeChild(properties[property], property));
    if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
    result.importErrors(res);
  }
  return result;
};

/**
 * Test a specific property within in instance against the additionalProperties schema attribute
 * This ignores properties with definitions in the properties schema attribute, but no other attributes.
 * If too many more types of property-existance tests pop up they may need their own class of tests (like `type` has)
 * @private
 * @return {boolean}
 */
function testAdditionalProperty (instance, schema, options, ctx, property, result) {
  if(!this.types.object(instance)) return;
  if (schema.properties && schema.properties[property] !== undefined) {
    return;
  }
  if (schema.additionalProperties === false) {
    result.addError({
      name: 'additionalProperties',
      argument: property,
      message: "additionalProperty " + JSON.stringify(property) + " exists in instance when not allowed",
    });
  } else {
    var additionalProperties = schema.additionalProperties || {};

    if (typeof options.preValidateProperty == 'function') {
      options.preValidateProperty(instance, property, additionalProperties, options, ctx);
    }

    var res = this.validateSchema(instance[property], additionalProperties, options, ctx.makeChild(additionalProperties, property));
    if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
    result.importErrors(res);
  }
}

/**
 * Validates patternProperties
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null|ValidatorResult}
 */
validators.patternProperties = function validatePatternProperties (instance, schema, options, ctx) {
  if(!this.types.object(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var patternProperties = schema.patternProperties || {};

  for (var property in instance) {
    var test = true;
    for (var pattern in patternProperties) {
      var expr = new RegExp(pattern);
      if (!expr.test(property)) {
        continue;
      }
      test = false;

      if (typeof options.preValidateProperty == 'function') {
        options.preValidateProperty(instance, property, patternProperties[pattern], options, ctx);
      }

      var res = this.validateSchema(instance[property], patternProperties[pattern], options, ctx.makeChild(patternProperties[pattern], property));
      if(res.instance !== result.instance[property]) result.instance[property] = res.instance;
      result.importErrors(res);
    }
    if (test) {
      testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);
    }
  }

  return result;
};

/**
 * Validates additionalProperties
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null|ValidatorResult}
 */
validators.additionalProperties = function validateAdditionalProperties (instance, schema, options, ctx) {
  if(!this.types.object(instance)) return;
  // if patternProperties is defined then we'll test when that one is called instead
  if (schema.patternProperties) {
    return null;
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  for (var property in instance) {
    testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);
  }
  return result;
};

/**
 * Validates whether the instance value is at least of a certain length, when the instance value is a string.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.minProperties = function validateMinProperties (instance, schema, options, ctx) {
  if (!this.types.object(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var keys = Object.keys(instance);
  if (!(keys.length >= schema.minProperties)) {
    result.addError({
      name: 'minProperties',
      argument: schema.minProperties,
      message: "does not meet minimum property length of " + schema.minProperties,
    })
  }
  return result;
};

/**
 * Validates whether the instance value is at most of a certain length, when the instance value is a string.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.maxProperties = function validateMaxProperties (instance, schema, options, ctx) {
  if (!this.types.object(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var keys = Object.keys(instance);
  if (!(keys.length <= schema.maxProperties)) {
    result.addError({
      name: 'maxProperties',
      argument: schema.maxProperties,
      message: "does not meet maximum property length of " + schema.maxProperties,
    });
  }
  return result;
};

/**
 * Validates items when instance is an array
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null|ValidatorResult}
 */
validators.items = function validateItems (instance, schema, options, ctx) {
  var self = this;
  if (!this.types.array(instance)) return;
  if (!schema.items) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  instance.every(function (value, i) {
    var items = Array.isArray(schema.items) ? (schema.items[i] || schema.additionalItems) : schema.items;
    if (items === undefined) {
      return true;
    }
    if (items === false) {
      result.addError({
        name: 'items',
        message: "additionalItems not permitted",
      });
      return false;
    }
    var res = self.validateSchema(value, items, options, ctx.makeChild(items, i));
    if(res.instance !== result.instance[i]) result.instance[i] = res.instance;
    result.importErrors(res);
    return true;
  });
  return result;
};

/**
 * Validates minimum and exclusiveMinimum when the type of the instance value is a number.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.minimum = function validateMinimum (instance, schema, options, ctx) {
  if (!this.types.number(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var valid = true;
  if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) {
    valid = instance > schema.minimum;
  } else {
    valid = instance >= schema.minimum;
  }
  if (!valid) {
    result.addError({
      name: 'minimum',
      argument: schema.minimum,
      message: "must have a minimum value of " + schema.minimum,
    });
  }
  return result;
};

/**
 * Validates maximum and exclusiveMaximum when the type of the instance value is a number.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.maximum = function validateMaximum (instance, schema, options, ctx) {
  if (!this.types.number(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var valid;
  if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) {
    valid = instance < schema.maximum;
  } else {
    valid = instance <= schema.maximum;
  }
  if (!valid) {
    result.addError({
      name: 'maximum',
      argument: schema.maximum,
      message: "must have a maximum value of " + schema.maximum,
    });
  }
  return result;
};

/**
 * Perform validation for multipleOf and divisibleBy, which are essentially the same.
 * @param instance
 * @param schema
 * @param validationType
 * @param errorMessage
 * @returns {String|null}
 */
var validateMultipleOfOrDivisbleBy = function validateMultipleOfOrDivisbleBy (instance, schema, options, ctx, validationType, errorMessage) {
  if (!this.types.number(instance)) return;

  var validationArgument = schema[validationType];
  if (validationArgument == 0) {
    throw new SchemaError(validationType + " cannot be zero");
  }

  var result = new ValidatorResult(instance, schema, options, ctx);

  var instanceDecimals = helpers.getDecimalPlaces(instance);
  var divisorDecimals = helpers.getDecimalPlaces(validationArgument);

  var maxDecimals = Math.max(instanceDecimals , divisorDecimals);
  var multiplier = Math.pow(10, maxDecimals);

  if (Math.round(instance * multiplier) % Math.round(validationArgument * multiplier) !== 0) {
    result.addError({
      name: validationType,
      argument:  validationArgument,
      message: errorMessage + JSON.stringify(validationArgument)
    });
  }

  return result;
};

/**
 * Validates divisibleBy when the type of the instance value is a number.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.multipleOf = function validateMultipleOf (instance, schema, options, ctx) {
 return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, "multipleOf", "is not a multiple of (divisible by) ");
};

/**
 * Validates multipleOf when the type of the instance value is a number.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.divisibleBy = function validateDivisibleBy (instance, schema, options, ctx) {
  return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, "divisibleBy", "is not divisible by (multiple of) ");
};

/**
 * Validates whether the instance value is present.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.required = function validateRequired (instance, schema, options, ctx) {
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (instance === undefined && schema.required === true) {
    // A boolean form is implemented for reverse-compatability with schemas written against older drafts
    result.addError({
      name: 'required',
      message: "is required"
    });
  } else if (this.types.object(instance) && Array.isArray(schema.required)) {
    schema.required.forEach(function(n){
      if(instance[n]===undefined){
        result.addError({
          name: 'required',
          argument: n,
          message: "requires property " + JSON.stringify(n),
        });
      }
    });
  }
  return result;
};

/**
 * Validates whether the instance value matches the regular expression, when the instance value is a string.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.pattern = function validatePattern (instance, schema, options, ctx) {
  if (!this.types.string(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!instance.match(schema.pattern)) {
    result.addError({
      name: 'pattern',
      argument: schema.pattern,
      message: "does not match pattern " + JSON.stringify(schema.pattern),
    });
  }
  return result;
};

/**
 * Validates whether the instance value is of a certain defined format or a custom
 * format.
 * The following formats are supported for string types:
 *   - date-time
 *   - date
 *   - time
 *   - ip-address
 *   - ipv6
 *   - uri
 *   - color
 *   - host-name
 *   - alpha
 *   - alpha-numeric
 *   - utc-millisec
 * @param instance
 * @param schema
 * @param [options]
 * @param [ctx]
 * @return {String|null}
 */
validators.format = function validateFormat (instance, schema, options, ctx) {
  if (instance===undefined) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!result.disableFormat && !helpers.isFormat(instance, schema.format, this)) {
    result.addError({
      name: 'format',
      argument: schema.format,
      message: "does not conform to the " + JSON.stringify(schema.format) + " format",
    });
  }
  return result;
};

/**
 * Validates whether the instance value is at least of a certain length, when the instance value is a string.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.minLength = function validateMinLength (instance, schema, options, ctx) {
  if (!this.types.string(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var hsp = instance.match(/[\uDC00-\uDFFF]/g);
  var length = instance.length - (hsp ? hsp.length : 0);
  if (!(length >= schema.minLength)) {
    result.addError({
      name: 'minLength',
      argument: schema.minLength,
      message: "does not meet minimum length of " + schema.minLength,
    });
  }
  return result;
};

/**
 * Validates whether the instance value is at most of a certain length, when the instance value is a string.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.maxLength = function validateMaxLength (instance, schema, options, ctx) {
  if (!this.types.string(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  // TODO if this was already computed in "minLength", use that value instead of re-computing
  var hsp = instance.match(/[\uDC00-\uDFFF]/g);
  var length = instance.length - (hsp ? hsp.length : 0);
  if (!(length <= schema.maxLength)) {
    result.addError({
      name: 'maxLength',
      argument: schema.maxLength,
      message: "does not meet maximum length of " + schema.maxLength,
    });
  }
  return result;
};

/**
 * Validates whether instance contains at least a minimum number of items, when the instance is an Array.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.minItems = function validateMinItems (instance, schema, options, ctx) {
  if (!this.types.array(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!(instance.length >= schema.minItems)) {
    result.addError({
      name: 'minItems',
      argument: schema.minItems,
      message: "does not meet minimum length of " + schema.minItems,
    });
  }
  return result;
};

/**
 * Validates whether instance contains no more than a maximum number of items, when the instance is an Array.
 * @param instance
 * @param schema
 * @return {String|null}
 */
validators.maxItems = function validateMaxItems (instance, schema, options, ctx) {
  if (!this.types.array(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!(instance.length <= schema.maxItems)) {
    result.addError({
      name: 'maxItems',
      argument: schema.maxItems,
      message: "does not meet maximum length of " + schema.maxItems,
    });
  }
  return result;
};

/**
 * Validates that every item in an instance array is unique, when instance is an array
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {String|null|ValidatorResult}
 */
validators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {
  if (!this.types.array(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  function testArrays (v, i, a) {
    for (var j = i + 1; j < a.length; j++) if (helpers.deepCompareStrict(v, a[j])) {
      return false;
    }
    return true;
  }
  if (!instance.every(testArrays)) {
    result.addError({
      name: 'uniqueItems',
      message: "contains duplicate item",
    });
  }
  return result;
};

/**
 * Deep compares arrays for duplicates
 * @param v
 * @param i
 * @param a
 * @private
 * @return {boolean}
 */
function testArrays (v, i, a) {
  var j, len = a.length;
  for (j = i + 1, len; j < len; j++) {
    if (helpers.deepCompareStrict(v, a[j])) {
      return false;
    }
  }
  return true;
}

/**
 * Validates whether there are no duplicates, when the instance is an Array.
 * @param instance
 * @return {String|null}
 */
validators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {
  if (!this.types.array(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!instance.every(testArrays)) {
    result.addError({
      name: 'uniqueItems',
      message: "contains duplicate item",
    });
  }
  return result;
};

/**
 * Validate for the presence of dependency properties, if the instance is an object.
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {null|ValidatorResult}
 */
validators.dependencies = function validateDependencies (instance, schema, options, ctx) {
  if (!this.types.object(instance)) return;
  var result = new ValidatorResult(instance, schema, options, ctx);
  for (var property in schema.dependencies) {
    if (instance[property] === undefined) {
      continue;
    }
    var dep = schema.dependencies[property];
    var childContext = ctx.makeChild(dep, property);
    if (typeof dep == 'string') {
      dep = [dep];
    }
    if (Array.isArray(dep)) {
      dep.forEach(function (prop) {
        if (instance[prop] === undefined) {
          result.addError({
            // FIXME there's two different "dependencies" errors here with slightly different outputs
            // Can we make these the same? Or should we create different error types?
            name: 'dependencies',
            argument: childContext.propertyPath,
            message: "property " + prop + " not found, required by " + childContext.propertyPath,
          });
        }
      });
    } else {
      var res = this.validateSchema(instance, dep, options, childContext);
      if(result.instance !== res.instance) result.instance = res.instance;
      if (res && res.errors.length) {
        result.addError({
          name: 'dependencies',
          argument: childContext.propertyPath,
          message: "does not meet dependency required by " + childContext.propertyPath,
        });
        result.importErrors(res);
      }
    }
  }
  return result;
};

/**
 * Validates whether the instance value is one of the enumerated values.
 *
 * @param instance
 * @param schema
 * @return {ValidatorResult|null}
 */
validators['enum'] = function validateEnum (instance, schema, options, ctx) {
  if (instance === undefined) {
    return null;
  }
  if (!Array.isArray(schema['enum'])) {
    throw new SchemaError("enum expects an array", schema);
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!schema['enum'].some(helpers.deepCompareStrict.bind(null, instance))) {
    result.addError({
      name: 'enum',
      argument: schema['enum'],
      message: "is not one of enum values: " + schema['enum'].map(String).join(','),
    });
  }
  return result;
};

/**
 * Validates whether the instance exactly matches a given value
 *
 * @param instance
 * @param schema
 * @return {ValidatorResult|null}
 */
validators['const'] = function validateEnum (instance, schema, options, ctx) {
  if (instance === undefined) {
    return null;
  }
  var result = new ValidatorResult(instance, schema, options, ctx);
  if (!helpers.deepCompareStrict(schema['const'], instance)) {
    result.addError({
      name: 'const',
      argument: schema['const'],
      message: "does not exactly match expected constant: " + schema['const'],
    });
  }
  return result;
};

/**
 * Validates whether the instance if of a prohibited type.
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @return {null|ValidatorResult}
 */
validators.not = validators.disallow = function validateNot (instance, schema, options, ctx) {
  var self = this;
  if(instance===undefined) return null;
  var result = new ValidatorResult(instance, schema, options, ctx);
  var notTypes = schema.not || schema.disallow;
  if(!notTypes) return null;
  if(!Array.isArray(notTypes)) notTypes=[notTypes];
  notTypes.forEach(function (type) {
    if (self.testType(instance, schema, options, ctx, type)) {
      var schemaId = type && type.id && ('<' + type.id + '>') || type;
      result.addError({
        name: 'not',
        argument: schemaId,
        message: "is of prohibited type " + schemaId,
      });
    }
  });
  return result;
};

module.exports = attribute;


/***/ }),
/* 914 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var Validator = module.exports.Validator = __webpack_require__(915);

module.exports.ValidatorResult = __webpack_require__(97).ValidatorResult;
module.exports.ValidationError = __webpack_require__(97).ValidationError;
module.exports.SchemaError = __webpack_require__(97).SchemaError;
module.exports.SchemaScanResult = __webpack_require__(225).SchemaScanResult;
module.exports.scan = __webpack_require__(225).scan;

module.exports.validate = function (instance, schema, options) {
  var v = new Validator();
  return v.validate(instance, schema, options);
};


/***/ }),
/* 915 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var urilib = __webpack_require__(8);

var attribute = __webpack_require__(913);
var helpers = __webpack_require__(97);
var scanSchema = __webpack_require__(225).scan;
var ValidatorResult = helpers.ValidatorResult;
var SchemaError = helpers.SchemaError;
var SchemaContext = helpers.SchemaContext;
//var anonymousBase = 'vnd.jsonschema:///';
var anonymousBase = '/';

/**
 * Creates a new Validator object
 * @name Validator
 * @constructor
 */
var Validator = function Validator () {
  // Allow a validator instance to override global custom formats or to have their
  // own custom formats.
  this.customFormats = Object.create(Validator.prototype.customFormats);
  this.schemas = {};
  this.unresolvedRefs = [];

  // Use Object.create to make this extensible without Validator instances stepping on each other's toes.
  this.types = Object.create(types);
  this.attributes = Object.create(attribute.validators);
};

// Allow formats to be registered globally.
Validator.prototype.customFormats = {};

// Hint at the presence of a property
Validator.prototype.schemas = null;
Validator.prototype.types = null;
Validator.prototype.attributes = null;
Validator.prototype.unresolvedRefs = null;

/**
 * Adds a schema with a certain urn to the Validator instance.
 * @param schema
 * @param urn
 * @return {Object}
 */
Validator.prototype.addSchema = function addSchema (schema, base) {
  var self = this;
  if (!schema) {
    return null;
  }
  var scan = scanSchema(base||anonymousBase, schema);
  var ourUri = base || schema.id;
  for(var uri in scan.id){
    this.schemas[uri] = scan.id[uri];
  }
  for(var uri in scan.ref){
    this.unresolvedRefs.push(uri);
  }
  this.unresolvedRefs = this.unresolvedRefs.filter(function(uri){
    return typeof self.schemas[uri]==='undefined';
  });
  return this.schemas[ourUri];
};

Validator.prototype.addSubSchemaArray = function addSubSchemaArray(baseuri, schemas) {
  if(!(schemas instanceof Array)) return;
  for(var i=0; i<schemas.length; i++){
    this.addSubSchema(baseuri, schemas[i]);
  }
};

Validator.prototype.addSubSchemaObject = function addSubSchemaArray(baseuri, schemas) {
  if(!schemas || typeof schemas!='object') return;
  for(var p in schemas){
    this.addSubSchema(baseuri, schemas[p]);
  }
};



/**
 * Sets all the schemas of the Validator instance.
 * @param schemas
 */
Validator.prototype.setSchemas = function setSchemas (schemas) {
  this.schemas = schemas;
};

/**
 * Returns the schema of a certain urn
 * @param urn
 */
Validator.prototype.getSchema = function getSchema (urn) {
  return this.schemas[urn];
};

/**
 * Validates instance against the provided schema
 * @param instance
 * @param schema
 * @param [options]
 * @param [ctx]
 * @return {Array}
 */
Validator.prototype.validate = function validate (instance, schema, options, ctx) {
  if (!options) {
    options = {};
  }
  var propertyName = options.propertyName || 'instance';
  // This will work so long as the function at uri.resolve() will resolve a relative URI to a relative URI
  var base = urilib.resolve(options.base||anonymousBase, schema.id||'');
  if(!ctx){
    ctx = new SchemaContext(schema, options, propertyName, base, Object.create(this.schemas));
    if (!ctx.schemas[base]) {
      ctx.schemas[base] = schema;
    }
    var found = scanSchema(base, schema);
    for(var n in found.id){
      var sch = found.id[n];
      ctx.schemas[n] = sch;
    }
  }
  if (schema) {
    var result = this.validateSchema(instance, schema, options, ctx);
    if (!result) {
      throw new Error('Result undefined');
    }
    return result;
  }
  throw new SchemaError('no schema specified', schema);
};

/**
* @param Object schema
* @return mixed schema uri or false
*/
function shouldResolve(schema) {
  var ref = (typeof schema === 'string') ? schema : schema.$ref;
  if (typeof ref=='string') return ref;
  return false;
}

/**
 * Validates an instance against the schema (the actual work horse)
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @private
 * @return {ValidatorResult}
 */
Validator.prototype.validateSchema = function validateSchema (instance, schema, options, ctx) {
  var result = new ValidatorResult(instance, schema, options, ctx);

    // Support for the true/false schemas
  if(typeof schema==='boolean') {
    if(schema===true){
      // `true` is always valid
      schema = {};
    }else if(schema===false){
      // `false` is always invalid
      schema = {type: []};
    }
  }else if(!schema){
    // This might be a string
    throw new Error("schema is undefined");
  }

  if (schema['extends']) {
    if (schema['extends'] instanceof Array) {
      var schemaobj = {schema: schema, ctx: ctx};
      schema['extends'].forEach(this.schemaTraverser.bind(this, schemaobj));
      schema = schemaobj.schema;
      schemaobj.schema = null;
      schemaobj.ctx = null;
      schemaobj = null;
    } else {
      schema = helpers.deepMerge(schema, this.superResolve(schema['extends'], ctx));
    }
  }

  // If passed a string argument, load that schema URI
  var switchSchema;
  if (switchSchema = shouldResolve(schema)) {
    var resolved = this.resolve(schema, switchSchema, ctx);
    var subctx = new SchemaContext(resolved.subschema, options, ctx.propertyPath, resolved.switchSchema, ctx.schemas);
    return this.validateSchema(instance, resolved.subschema, options, subctx);
  }

  var skipAttributes = options && options.skipAttributes || [];
  // Validate each schema attribute against the instance
  for (var key in schema) {
    if (!attribute.ignoreProperties[key] && skipAttributes.indexOf(key) < 0) {
      var validatorErr = null;
      var validator = this.attributes[key];
      if (validator) {
        validatorErr = validator.call(this, instance, schema, options, ctx);
      } else if (options.allowUnknownAttributes === false) {
        // This represents an error with the schema itself, not an invalid instance
        throw new SchemaError("Unsupported attribute: " + key, schema);
      }
      if (validatorErr) {
        result.importErrors(validatorErr);
      }
    }
  }

  if (typeof options.rewrite == 'function') {
    var value = options.rewrite.call(this, instance, schema, options, ctx);
    result.instance = value;
  }
  return result;
};

/**
* @private
* @param Object schema
* @param SchemaContext ctx
* @returns Object schema or resolved schema
*/
Validator.prototype.schemaTraverser = function schemaTraverser (schemaobj, s) {
  schemaobj.schema = helpers.deepMerge(schemaobj.schema, this.superResolve(s, schemaobj.ctx));
}

/**
* @private
* @param Object schema
* @param SchemaContext ctx
* @returns Object schema or resolved schema
*/
Validator.prototype.superResolve = function superResolve (schema, ctx) {
  var ref;
  if(ref = shouldResolve(schema)) {
    return this.resolve(schema, ref, ctx).subschema;
  }
  return schema;
}

/**
* @private
* @param Object schema
* @param Object switchSchema
* @param SchemaContext ctx
* @return Object resolved schemas {subschema:String, switchSchema: String}
* @throws SchemaError
*/
Validator.prototype.resolve = function resolve (schema, switchSchema, ctx) {
  switchSchema = ctx.resolve(switchSchema);
  // First see if the schema exists under the provided URI
  if (ctx.schemas[switchSchema]) {
    return {subschema: ctx.schemas[switchSchema], switchSchema: switchSchema};
  }
  // Else try walking the property pointer
  var parsed = urilib.parse(switchSchema);
  var fragment = parsed && parsed.hash;
  var document = fragment && fragment.length && switchSchema.substr(0, switchSchema.length - fragment.length);
  if (!document || !ctx.schemas[document]) {
    throw new SchemaError("no such schema <" + switchSchema + ">", schema);
  }
  var subschema = helpers.objectGetPath(ctx.schemas[document], fragment.substr(1));
  if(subschema===undefined){
    throw new SchemaError("no such schema " + fragment + " located in <" + document + ">", schema);
  }
  return {subschema: subschema, switchSchema: switchSchema};
};

/**
 * Tests whether the instance if of a certain type.
 * @private
 * @param instance
 * @param schema
 * @param options
 * @param ctx
 * @param type
 * @return {boolean}
 */
Validator.prototype.testType = function validateType (instance, schema, options, ctx, type) {
  if (typeof this.types[type] == 'function') {
    return this.types[type].call(this, instance);
  }
  if (type && typeof type == 'object') {
    var res = this.validateSchema(instance, type, options, ctx);
    return res === undefined || !(res && res.errors.length);
  }
  // Undefined or properties not on the list are acceptable, same as not being defined
  return true;
};

var types = Validator.prototype.types = {};
types.string = function testString (instance) {
  return typeof instance == 'string';
};
types.number = function testNumber (instance) {
  // isFinite returns false for NaN, Infinity, and -Infinity
  return typeof instance == 'number' && isFinite(instance);
};
types.integer = function testInteger (instance) {
  return (typeof instance == 'number') && instance % 1 === 0;
};
types.boolean = function testBoolean (instance) {
  return typeof instance == 'boolean';
};
types.array = function testArray (instance) {
  return Array.isArray(instance);
};
types['null'] = function testNull (instance) {
  return instance === null;
};
types.date = function testDate (instance) {
  return instance instanceof Date;
};
types.any = function testAny (instance) {
  return true;
};
types.object = function testObject (instance) {
  // TODO: fix this - see #15
  return instance && (typeof instance) === 'object' && !(instance instanceof Array) && !(instance instanceof Date);
};

module.exports = Validator;


/***/ }),
/* 916 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * lib/jsprim.js: utilities for primitive JavaScript types
 */

var mod_assert = __webpack_require__(6);
var mod_util = __webpack_require__(2);

var mod_extsprintf = __webpack_require__(800);
var mod_verror = __webpack_require__(1095);
var mod_jsonschema = __webpack_require__(911);

/*
 * Public interface
 */
exports.deepCopy = deepCopy;
exports.deepEqual = deepEqual;
exports.isEmpty = isEmpty;
exports.hasKey = hasKey;
exports.forEachKey = forEachKey;
exports.pluck = pluck;
exports.flattenObject = flattenObject;
exports.flattenIter = flattenIter;
exports.validateJsonObject = validateJsonObjectJS;
exports.validateJsonObjectJS = validateJsonObjectJS;
exports.randElt = randElt;
exports.extraProperties = extraProperties;
exports.mergeObjects = mergeObjects;

exports.startsWith = startsWith;
exports.endsWith = endsWith;

exports.parseInteger = parseInteger;

exports.iso8601 = iso8601;
exports.rfc1123 = rfc1123;
exports.parseDateTime = parseDateTime;

exports.hrtimediff = hrtimeDiff;
exports.hrtimeDiff = hrtimeDiff;
exports.hrtimeAccum = hrtimeAccum;
exports.hrtimeAdd = hrtimeAdd;
exports.hrtimeNanosec = hrtimeNanosec;
exports.hrtimeMicrosec = hrtimeMicrosec;
exports.hrtimeMillisec = hrtimeMillisec;


/*
 * Deep copy an acyclic *basic* Javascript object.  This only handles basic
 * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects
 * containing these.  This does *not* handle instances of other classes.
 */
function deepCopy(obj)
{
	var ret, key;
	var marker = '__deepCopy';

	if (obj && obj[marker])
		throw (new Error('attempted deep copy of cyclic object'));

	if (obj && obj.constructor == Object) {
		ret = {};
		obj[marker] = true;

		for (key in obj) {
			if (key == marker)
				continue;

			ret[key] = deepCopy(obj[key]);
		}

		delete (obj[marker]);
		return (ret);
	}

	if (obj && obj.constructor == Array) {
		ret = [];
		obj[marker] = true;

		for (key = 0; key < obj.length; key++)
			ret.push(deepCopy(obj[key]));

		delete (obj[marker]);
		return (ret);
	}

	/*
	 * It must be a primitive type -- just return it.
	 */
	return (obj);
}

function deepEqual(obj1, obj2)
{
	if (typeof (obj1) != typeof (obj2))
		return (false);

	if (obj1 === null || obj2 === null || typeof (obj1) != 'object')
		return (obj1 === obj2);

	if (obj1.constructor != obj2.constructor)
		return (false);

	var k;
	for (k in obj1) {
		if (!obj2.hasOwnProperty(k))
			return (false);

		if (!deepEqual(obj1[k], obj2[k]))
			return (false);
	}

	for (k in obj2) {
		if (!obj1.hasOwnProperty(k))
			return (false);
	}

	return (true);
}

function isEmpty(obj)
{
	var key;
	for (key in obj)
		return (false);
	return (true);
}

function hasKey(obj, key)
{
	mod_assert.equal(typeof (key), 'string');
	return (Object.prototype.hasOwnProperty.call(obj, key));
}

function forEachKey(obj, callback)
{
	for (var key in obj) {
		if (hasKey(obj, key)) {
			callback(key, obj[key]);
		}
	}
}

function pluck(obj, key)
{
	mod_assert.equal(typeof (key), 'string');
	return (pluckv(obj, key));
}

function pluckv(obj, key)
{
	if (obj === null || typeof (obj) !== 'object')
		return (undefined);

	if (obj.hasOwnProperty(key))
		return (obj[key]);

	var i = key.indexOf('.');
	if (i == -1)
		return (undefined);

	var key1 = key.substr(0, i);
	if (!obj.hasOwnProperty(key1))
		return (undefined);

	return (pluckv(obj[key1], key.substr(i + 1)));
}

/*
 * Invoke callback(row) for each entry in the array that would be returned by
 * flattenObject(data, depth).  This is just like flattenObject(data,
 * depth).forEach(callback), except that the intermediate array is never
 * created.
 */
function flattenIter(data, depth, callback)
{
	doFlattenIter(data, depth, [], callback);
}

function doFlattenIter(data, depth, accum, callback)
{
	var each;
	var key;

	if (depth === 0) {
		each = accum.slice(0);
		each.push(data);
		callback(each);
		return;
	}

	mod_assert.ok(data !== null);
	mod_assert.equal(typeof (data), 'object');
	mod_assert.equal(typeof (depth), 'number');
	mod_assert.ok(depth >= 0);

	for (key in data) {
		each = accum.slice(0);
		each.push(key);
		doFlattenIter(data[key], depth - 1, each, callback);
	}
}

function flattenObject(data, depth)
{
	if (depth === 0)
		return ([ data ]);

	mod_assert.ok(data !== null);
	mod_assert.equal(typeof (data), 'object');
	mod_assert.equal(typeof (depth), 'number');
	mod_assert.ok(depth >= 0);

	var rv = [];
	var key;

	for (key in data) {
		flattenObject(data[key], depth - 1).forEach(function (p) {
			rv.push([ key ].concat(p));
		});
	}

	return (rv);
}

function startsWith(str, prefix)
{
	return (str.substr(0, prefix.length) == prefix);
}

function endsWith(str, suffix)
{
	return (str.substr(
	    str.length - suffix.length, suffix.length) == suffix);
}

function iso8601(d)
{
	if (typeof (d) == 'number')
		d = new Date(d);
	mod_assert.ok(d.constructor === Date);
	return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ',
	    d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(),
	    d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(),
	    d.getUTCMilliseconds()));
}

var RFC1123_MONTHS = [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var RFC1123_DAYS = [
    'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];

function rfc1123(date) {
	return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT',
	    RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(),
	    RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(),
	    date.getUTCHours(), date.getUTCMinutes(),
	    date.getUTCSeconds()));
}

/*
 * Parses a date expressed as a string, as either a number of milliseconds since
 * the epoch or any string format that Date accepts, giving preference to the
 * former where these two sets overlap (e.g., small numbers).
 */
function parseDateTime(str)
{
	/*
	 * This is irritatingly implicit, but significantly more concise than
	 * alternatives.  The "+str" will convert a string containing only a
	 * number directly to a Number, or NaN for other strings.  Thus, if the
	 * conversion succeeds, we use it (this is the milliseconds-since-epoch
	 * case).  Otherwise, we pass the string directly to the Date
	 * constructor to parse.
	 */
	var numeric = +str;
	if (!isNaN(numeric)) {
		return (new Date(numeric));
	} else {
		return (new Date(str));
	}
}


/*
 * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode
 * the ES6 definitions here, while allowing for them to someday be higher.
 */
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;


/*
 * Default options for parseInteger().
 */
var PI_DEFAULTS = {
	base: 10,
	allowSign: true,
	allowPrefix: false,
	allowTrailing: false,
	allowImprecise: false,
	trimWhitespace: false,
	leadingZeroIsOctal: false
};

var CP_0 = 0x30;
var CP_9 = 0x39;

var CP_A = 0x41;
var CP_B = 0x42;
var CP_O = 0x4f;
var CP_T = 0x54;
var CP_X = 0x58;
var CP_Z = 0x5a;

var CP_a = 0x61;
var CP_b = 0x62;
var CP_o = 0x6f;
var CP_t = 0x74;
var CP_x = 0x78;
var CP_z = 0x7a;

var PI_CONV_DEC = 0x30;
var PI_CONV_UC = 0x37;
var PI_CONV_LC = 0x57;


/*
 * A stricter version of parseInt() that provides options for changing what
 * is an acceptable string (for example, disallowing trailing characters).
 */
function parseInteger(str, uopts)
{
	mod_assert.string(str, 'str');
	mod_assert.optionalObject(uopts, 'options');

	var baseOverride = false;
	var options = PI_DEFAULTS;

	if (uopts) {
		baseOverride = hasKey(uopts, 'base');
		options = mergeObjects(options, uopts);
		mod_assert.number(options.base, 'options.base');
		mod_assert.ok(options.base >= 2, 'options.base >= 2');
		mod_assert.ok(options.base <= 36, 'options.base <= 36');
		mod_assert.bool(options.allowSign, 'options.allowSign');
		mod_assert.bool(options.allowPrefix, 'options.allowPrefix');
		mod_assert.bool(options.allowTrailing,
		    'options.allowTrailing');
		mod_assert.bool(options.allowImprecise,
		    'options.allowImprecise');
		mod_assert.bool(options.trimWhitespace,
		    'options.trimWhitespace');
		mod_assert.bool(options.leadingZeroIsOctal,
		    'options.leadingZeroIsOctal');

		if (options.leadingZeroIsOctal) {
			mod_assert.ok(!baseOverride,
			    '"base" and "leadingZeroIsOctal" are ' +
			    'mutually exclusive');
		}
	}

	var c;
	var pbase = -1;
	var base = options.base;
	var start;
	var mult = 1;
	var value = 0;
	var idx = 0;
	var len = str.length;

	/* Trim any whitespace on the left side. */
	if (options.trimWhitespace) {
		while (idx < len && isSpace(str.charCodeAt(idx))) {
			++idx;
		}
	}

	/* Check the number for a leading sign. */
	if (options.allowSign) {
		if (str[idx] === '-') {
			idx += 1;
			mult = -1;
		} else if (str[idx] === '+') {
			idx += 1;
		}
	}

	/* Parse the base-indicating prefix if there is one. */
	if (str[idx] === '0') {
		if (options.allowPrefix) {
			pbase = prefixToBase(str.charCodeAt(idx + 1));
			if (pbase !== -1 && (!baseOverride || pbase === base)) {
				base = pbase;
				idx += 2;
			}
		}

		if (pbase === -1 && options.leadingZeroIsOctal) {
			base = 8;
		}
	}

	/* Parse the actual digits. */
	for (start = idx; idx < len; ++idx) {
		c = translateDigit(str.charCodeAt(idx));
		if (c !== -1 && c < base) {
			value *= base;
			value += c;
		} else {
			break;
		}
	}

	/* If we didn't parse any digits, we have an invalid number. */
	if (start === idx) {
		return (new Error('invalid number: ' + JSON.stringify(str)));
	}

	/* Trim any whitespace on the right side. */
	if (options.trimWhitespace) {
		while (idx < len && isSpace(str.charCodeAt(idx))) {
			++idx;
		}
	}

	/* Check for trailing characters. */
	if (idx < len && !options.allowTrailing) {
		return (new Error('trailing characters after number: ' +
		    JSON.stringify(str.slice(idx))));
	}

	/* If our value is 0, we return now, to avoid returning -0. */
	if (value === 0) {
		return (0);
	}

	/* Calculate our final value. */
	var result = value * mult;

	/*
	 * If the string represents a value that cannot be precisely represented
	 * by JavaScript, then we want to check that:
	 *
	 * - We never increased the value past MAX_SAFE_INTEGER
	 * - We don't make the result negative and below MIN_SAFE_INTEGER
	 *
	 * Because we only ever increment the value during parsing, there's no
	 * chance of moving past MAX_SAFE_INTEGER and then dropping below it
	 * again, losing precision in the process. This means that we only need
	 * to do our checks here, at the end.
	 */
	if (!options.allowImprecise &&
	    (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) {
		return (new Error('number is outside of the supported range: ' +
		    JSON.stringify(str.slice(start, idx))));
	}

	return (result);
}


/*
 * Interpret a character code as a base-36 digit.
 */
function translateDigit(d)
{
	if (d >= CP_0 && d <= CP_9) {
		/* '0' to '9' -> 0 to 9 */
		return (d - PI_CONV_DEC);
	} else if (d >= CP_A && d <= CP_Z) {
		/* 'A' - 'Z' -> 10 to 35 */
		return (d - PI_CONV_UC);
	} else if (d >= CP_a && d <= CP_z) {
		/* 'a' - 'z' -> 10 to 35 */
		return (d - PI_CONV_LC);
	} else {
		/* Invalid character code */
		return (-1);
	}
}


/*
 * Test if a value matches the ECMAScript definition of trimmable whitespace.
 */
function isSpace(c)
{
	return (c === 0x20) ||
	    (c >= 0x0009 && c <= 0x000d) ||
	    (c === 0x00a0) ||
	    (c === 0x1680) ||
	    (c === 0x180e) ||
	    (c >= 0x2000 && c <= 0x200a) ||
	    (c === 0x2028) ||
	    (c === 0x2029) ||
	    (c === 0x202f) ||
	    (c === 0x205f) ||
	    (c === 0x3000) ||
	    (c === 0xfeff);
}


/*
 * Determine which base a character indicates (e.g., 'x' indicates hex).
 */
function prefixToBase(c)
{
	if (c === CP_b || c === CP_B) {
		/* 0b/0B (binary) */
		return (2);
	} else if (c === CP_o || c === CP_O) {
		/* 0o/0O (octal) */
		return (8);
	} else if (c === CP_t || c === CP_T) {
		/* 0t/0T (decimal) */
		return (10);
	} else if (c === CP_x || c === CP_X) {
		/* 0x/0X (hexadecimal) */
		return (16);
	} else {
		/* Not a meaningful character */
		return (-1);
	}
}


function validateJsonObjectJS(schema, input)
{
	var report = mod_jsonschema.validate(input, schema);

	if (report.errors.length === 0)
		return (null);

	/* Currently, we only do anything useful with the first error. */
	var error = report.errors[0];

	/* The failed property is given by a URI with an irrelevant prefix. */
	var propname = error['property'];
	var reason = error['message'].toLowerCase();
	var i, j;

	/*
	 * There's at least one case where the property error message is
	 * confusing at best.  We work around this here.
	 */
	if ((i = reason.indexOf('the property ')) != -1 &&
	    (j = reason.indexOf(' is not defined in the schema and the ' +
	    'schema does not allow additional properties')) != -1) {
		i += 'the property '.length;
		if (propname === '')
			propname = reason.substr(i, j - i);
		else
			propname = propname + '.' + reason.substr(i, j - i);

		reason = 'unsupported property';
	}

	var rv = new mod_verror.VError('property "%s": %s', propname, reason);
	rv.jsv_details = error;
	return (rv);
}

function randElt(arr)
{
	mod_assert.ok(Array.isArray(arr) && arr.length > 0,
	    'randElt argument must be a non-empty array');

	return (arr[Math.floor(Math.random() * arr.length)]);
}

function assertHrtime(a)
{
	mod_assert.ok(a[0] >= 0 && a[1] >= 0,
	    'negative numbers not allowed in hrtimes');
	mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow');
}

/*
 * Compute the time elapsed between hrtime readings A and B, where A is later
 * than B.  hrtime readings come from Node's process.hrtime().  There is no
 * defined way to represent negative deltas, so it's illegal to diff B from A
 * where the time denoted by B is later than the time denoted by A.  If this
 * becomes valuable, we can define a representation and extend the
 * implementation to support it.
 */
function hrtimeDiff(a, b)
{
	assertHrtime(a);
	assertHrtime(b);
	mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]),
	    'negative differences not allowed');

	var rv = [ a[0] - b[0], 0 ];

	if (a[1] >= b[1]) {
		rv[1] = a[1] - b[1];
	} else {
		rv[0]--;
		rv[1] = 1e9 - (b[1] - a[1]);
	}

	return (rv);
}

/*
 * Convert a hrtime reading from the array format returned by Node's
 * process.hrtime() into a scalar number of nanoseconds.
 */
function hrtimeNanosec(a)
{
	assertHrtime(a);

	return (Math.floor(a[0] * 1e9 + a[1]));
}

/*
 * Convert a hrtime reading from the array format returned by Node's
 * process.hrtime() into a scalar number of microseconds.
 */
function hrtimeMicrosec(a)
{
	assertHrtime(a);

	return (Math.floor(a[0] * 1e6 + a[1] / 1e3));
}

/*
 * Convert a hrtime reading from the array format returned by Node's
 * process.hrtime() into a scalar number of milliseconds.
 */
function hrtimeMillisec(a)
{
	assertHrtime(a);

	return (Math.floor(a[0] * 1e3 + a[1] / 1e6));
}

/*
 * Add two hrtime readings A and B, overwriting A with the result of the
 * addition.  This function is useful for accumulating several hrtime intervals
 * into a counter.  Returns A.
 */
function hrtimeAccum(a, b)
{
	assertHrtime(a);
	assertHrtime(b);

	/*
	 * Accumulate the nanosecond component.
	 */
	a[1] += b[1];
	if (a[1] >= 1e9) {
		/*
		 * The nanosecond component overflowed, so carry to the seconds
		 * field.
		 */
		a[0]++;
		a[1] -= 1e9;
	}

	/*
	 * Accumulate the seconds component.
	 */
	a[0] += b[0];

	return (a);
}

/*
 * Add two hrtime readings A and B, returning the result as a new hrtime array.
 * Does not modify either input argument.
 */
function hrtimeAdd(a, b)
{
	assertHrtime(a);

	var rv = [ a[0], a[1] ];

	return (hrtimeAccum(rv, b));
}


/*
 * Check an object for unexpected properties.  Accepts the object to check, and
 * an array of allowed property names (strings).  Returns an array of key names
 * that were found on the object, but did not appear in the list of allowed
 * properties.  If no properties were found, the returned array will be of
 * zero length.
 */
function extraProperties(obj, allowed)
{
	mod_assert.ok(typeof (obj) === 'object' && obj !== null,
	    'obj argument must be a non-null object');
	mod_assert.ok(Array.isArray(allowed),
	    'allowed argument must be an array of strings');
	for (var i = 0; i < allowed.length; i++) {
		mod_assert.ok(typeof (allowed[i]) === 'string',
		    'allowed argument must be an array of strings');
	}

	return (Object.keys(obj).filter(function (key) {
		return (allowed.indexOf(key) === -1);
	}));
}

/*
 * Given three sets of properties "provided" (may be undefined), "overrides"
 * (required), and "defaults" (may be undefined), construct an object containing
 * the union of these sets with "overrides" overriding "provided", and
 * "provided" overriding "defaults".  None of the input objects are modified.
 */
function mergeObjects(provided, overrides, defaults)
{
	var rv, k;

	rv = {};
	if (defaults) {
		for (k in defaults)
			rv[k] = defaults[k];
	}

	if (provided) {
		for (k in provided)
			rv[k] = provided[k];
	}

	if (overrides) {
		for (k in overrides)
			rv[k] = overrides[k];
	}

	return (rv);
}


/***/ }),
/* 917 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var invertKv = __webpack_require__(887);
var all = __webpack_require__(508);
var inverted = invertKv(all);

exports.from = function (lcidCode) {
	if (typeof lcidCode !== 'number') {
		throw new TypeError('Expected a number');
	}

	return inverted[lcidCode];
};

exports.to = function (localeId) {
	if (typeof localeId !== 'string') {
		throw new TypeError('Expected a string');
	}

	return all[localeId];
};

exports.all = all;


/***/ }),
/* 918 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const path = __webpack_require__(0);
const pathExists = __webpack_require__(988);
const pLocate = __webpack_require__(981);

module.exports = (iterable, opts) => {
	opts = Object.assign({
		cwd: process.cwd()
	}, opts);

	return pLocate(iterable, el => pathExists(path.resolve(opts.cwd, el)), opts);
};

module.exports.sync = (iterable, opts) => {
	opts = Object.assign({
		cwd: process.cwd()
	}, opts);

	for (const el of iterable) {
		if (pathExists.sync(path.resolve(opts.cwd, el))) {
			return el;
		}
	}
};


/***/ }),
/* 919 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol_js__ = __webpack_require__(371);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getRawTag_js__ = __webpack_require__(922);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectToString_js__ = __webpack_require__(923);




/** `Object#toString` result references. */
var nullTag = '[object Null]',
    undefinedTag = '[object Undefined]';

/** Built-in value references. */
var symToStringTag = __WEBPACK_IMPORTED_MODULE_0__Symbol_js__["a" /* default */] ? __WEBPACK_IMPORTED_MODULE_0__Symbol_js__["a" /* default */].toStringTag : undefined;

/**
 * The base implementation of `getTag` without fallbacks for buggy environments.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
function baseGetTag(value) {
  if (value == null) {
    return value === undefined ? undefinedTag : nullTag;
  }
  return (symToStringTag && symToStringTag in Object(value))
    ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__getRawTag_js__["a" /* default */])(value)
    : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__objectToString_js__["a" /* default */])(value);
}

/* harmony default export */ __webpack_exports__["a"] = (baseGetTag);


/***/ }),
/* 920 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

/* harmony default export */ __webpack_exports__["a"] = (freeGlobal);


/***/ }),
/* 921 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__overArg_js__ = __webpack_require__(924);


/** Built-in value references. */
var getPrototype = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__overArg_js__["a" /* default */])(Object.getPrototypeOf, Object);

/* harmony default export */ __webpack_exports__["a"] = (getPrototype);


/***/ }),
/* 922 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol_js__ = __webpack_require__(371);


/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/** Built-in value references. */
var symToStringTag = __WEBPACK_IMPORTED_MODULE_0__Symbol_js__["a" /* default */] ? __WEBPACK_IMPORTED_MODULE_0__Symbol_js__["a" /* default */].toStringTag : undefined;

/**
 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the raw `toStringTag`.
 */
function getRawTag(value) {
  var isOwn = hasOwnProperty.call(value, symToStringTag),
      tag = value[symToStringTag];

  try {
    value[symToStringTag] = undefined;
    var unmasked = true;
  } catch (e) {}

  var result = nativeObjectToString.call(value);
  if (unmasked) {
    if (isOwn) {
      value[symToStringTag] = tag;
    } else {
      delete value[symToStringTag];
    }
  }
  return result;
}

/* harmony default export */ __webpack_exports__["a"] = (getRawTag);


/***/ }),
/* 923 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/**
 * Converts `value` to a string using `Object.prototype.toString`.
 *
 * @private
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 */
function objectToString(value) {
  return nativeObjectToString.call(value);
}

/* harmony default export */ __webpack_exports__["a"] = (objectToString);


/***/ }),
/* 924 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/**
 * Creates a unary function that invokes `func` with its argument transformed.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} transform The argument transform.
 * @returns {Function} Returns the new function.
 */
function overArg(func, transform) {
  return function(arg) {
    return func(transform(arg));
  };
}

/* harmony default export */ __webpack_exports__["a"] = (overArg);


/***/ }),
/* 925 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__freeGlobal_js__ = __webpack_require__(920);


/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

/** Used as a reference to the global object. */
var root = __WEBPACK_IMPORTED_MODULE_0__freeGlobal_js__["a" /* default */] || freeSelf || Function('return this')();

/* harmony default export */ __webpack_exports__["a"] = (root);


/***/ }),
/* 926 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/**
 * Checks if `value` is object-like. A value is object-like if it's not `null`
 * and has a `typeof` result of "object".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
 * @example
 *
 * _.isObjectLike({});
 * // => true
 *
 * _.isObjectLike([1, 2, 3]);
 * // => true
 *
 * _.isObjectLike(_.noop);
 * // => false
 *
 * _.isObjectLike(null);
 * // => false
 */
function isObjectLike(value) {
  return value != null && typeof value == 'object';
}

/* harmony default export */ __webpack_exports__["a"] = (isObjectLike);


/***/ }),
/* 927 */
/***/ (function(module, exports) {

/**
 * lodash (Custom Build) <https://lodash.com/>
 * Build: `lodash modularize exports="npm" -o ./`
 * Copyright jQuery Foundation and other contributors <https://jquery.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
    funcTag = '[object Function]',
    genTag = '[object GeneratorFunction]',
    mapTag = '[object Map]',
    objectTag = '[object Object]',
    promiseTag = '[object Promise]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    weakMapTag = '[object WeakMap]';

var dataViewTag = '[object DataView]';

/**
 * Used to match `RegExp`
 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
 */
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;

/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;

/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;

/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
    rsComboSymbolsRange = '\\u20d0-\\u20f0',
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');

/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();

/**
 * A specialized version of `_.map` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function arrayMap(array, iteratee) {
  var index = -1,
      length = array ? array.length : 0,
      result = Array(length);

  while (++index < length) {
    result[index] = iteratee(array[index], index, array);
  }
  return result;
}

/**
 * Converts an ASCII `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function asciiToArray(string) {
  return string.split('');
}

/**
 * The base implementation of `_.times` without support for iteratee shorthands
 * or max array length checks.
 *
 * @private
 * @param {number} n The number of times to invoke `iteratee`.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the array of results.
 */
function baseTimes(n, iteratee) {
  var index = -1,
      result = Array(n);

  while (++index < n) {
    result[index] = iteratee(index);
  }
  return result;
}

/**
 * The base implementation of `_.values` and `_.valuesIn` which creates an
 * array of `object` property values corresponding to the property names
 * of `props`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array} props The property names to get values for.
 * @returns {Object} Returns the array of property values.
 */
function baseValues(object, props) {
  return arrayMap(props, function(key) {
    return object[key];
  });
}

/**
 * Gets the value at `key` of `object`.
 *
 * @private
 * @param {Object} [object] The object to query.
 * @param {string} key The key of the property to get.
 * @returns {*} Returns the property value.
 */
function getValue(object, key) {
  return object == null ? undefined : object[key];
}

/**
 * Checks if `string` contains Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
 */
function hasUnicode(string) {
  return reHasUnicode.test(string);
}

/**
 * Checks if `value` is a host object in IE < 9.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
 */
function isHostObject(value) {
  // Many host objects are `Object` objects that can coerce to strings
  // despite having improperly defined `toString` methods.
  var result = false;
  if (value != null && typeof value.toString != 'function') {
    try {
      result = !!(value + '');
    } catch (e) {}
  }
  return result;
}

/**
 * Converts `iterator` to an array.
 *
 * @private
 * @param {Object} iterator The iterator to convert.
 * @returns {Array} Returns the converted array.
 */
function iteratorToArray(iterator) {
  var data,
      result = [];

  while (!(data = iterator.next()).done) {
    result.push(data.value);
  }
  return result;
}

/**
 * Converts `map` to its key-value pairs.
 *
 * @private
 * @param {Object} map The map to convert.
 * @returns {Array} Returns the key-value pairs.
 */
function mapToArray(map) {
  var index = -1,
      result = Array(map.size);

  map.forEach(function(value, key) {
    result[++index] = [key, value];
  });
  return result;
}

/**
 * Creates a unary function that invokes `func` with its argument transformed.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} transform The argument transform.
 * @returns {Function} Returns the new function.
 */
function overArg(func, transform) {
  return function(arg) {
    return func(transform(arg));
  };
}

/**
 * Converts `set` to an array of its values.
 *
 * @private
 * @param {Object} set The set to convert.
 * @returns {Array} Returns the values.
 */
function setToArray(set) {
  var index = -1,
      result = Array(set.size);

  set.forEach(function(value) {
    result[++index] = value;
  });
  return result;
}

/**
 * Converts `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function stringToArray(string) {
  return hasUnicode(string)
    ? unicodeToArray(string)
    : asciiToArray(string);
}

/**
 * Converts a Unicode `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function unicodeToArray(string) {
  return string.match(reUnicode) || [];
}

/** Used for built-in method references. */
var funcProto = Function.prototype,
    objectProto = Object.prototype;

/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];

/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  return uid ? ('Symbol(src)_1.' + uid) : '';
}());

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var objectToString = objectProto.toString;

/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);

/** Built-in value references. */
var Symbol = root.Symbol,
    iteratorSymbol = Symbol ? Symbol.iterator : undefined,
    propertyIsEnumerable = objectProto.propertyIsEnumerable;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = overArg(Object.keys, Object);

/* Built-in method references that are verified to be native. */
var DataView = getNative(root, 'DataView'),
    Map = getNative(root, 'Map'),
    Promise = getNative(root, 'Promise'),
    Set = getNative(root, 'Set'),
    WeakMap = getNative(root, 'WeakMap');

/** Used to detect maps, sets, and weakmaps. */
var dataViewCtorString = toSource(DataView),
    mapCtorString = toSource(Map),
    promiseCtorString = toSource(Promise),
    setCtorString = toSource(Set),
    weakMapCtorString = toSource(WeakMap);

/**
 * Creates an array of the enumerable property names of the array-like `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @param {boolean} inherited Specify returning inherited property names.
 * @returns {Array} Returns the array of property names.
 */
function arrayLikeKeys(value, inherited) {
  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
  // Safari 9 makes `arguments.length` enumerable in strict mode.
  var result = (isArray(value) || isArguments(value))
    ? baseTimes(value.length, String)
    : [];

  var length = result.length,
      skipIndexes = !!length;

  for (var key in value) {
    if ((inherited || hasOwnProperty.call(value, key)) &&
        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
      result.push(key);
    }
  }
  return result;
}

/**
 * The base implementation of `getTag`.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
function baseGetTag(value) {
  return objectToString.call(value);
}

/**
 * The base implementation of `_.isNative` without bad shim checks.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a native function,
 *  else `false`.
 */
function baseIsNative(value) {
  if (!isObject(value) || isMasked(value)) {
    return false;
  }
  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
  return pattern.test(toSource(value));
}

/**
 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function baseKeys(object) {
  if (!isPrototype(object)) {
    return nativeKeys(object);
  }
  var result = [];
  for (var key in Object(object)) {
    if (hasOwnProperty.call(object, key) && key != 'constructor') {
      result.push(key);
    }
  }
  return result;
}

/**
 * Copies the values of `source` to `array`.
 *
 * @private
 * @param {Array} source The array to copy values from.
 * @param {Array} [array=[]] The array to copy values to.
 * @returns {Array} Returns `array`.
 */
function copyArray(source, array) {
  var index = -1,
      length = source.length;

  array || (array = Array(length));
  while (++index < length) {
    array[index] = source[index];
  }
  return array;
}

/**
 * Gets the native function at `key` of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {string} key The key of the method to get.
 * @returns {*} Returns the function if it's native, else `undefined`.
 */
function getNative(object, key) {
  var value = getValue(object, key);
  return baseIsNative(value) ? value : undefined;
}

/**
 * Gets the `toStringTag` of `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
var getTag = baseGetTag;

// Fallback for data views, maps, sets, and weak maps in IE 11,
// for data views in Edge < 14, and promises in Node.js.
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
    (Map && getTag(new Map) != mapTag) ||
    (Promise && getTag(Promise.resolve()) != promiseTag) ||
    (Set && getTag(new Set) != setTag) ||
    (WeakMap && getTag(new WeakMap) != weakMapTag)) {
  getTag = function(value) {
    var result = objectToString.call(value),
        Ctor = result == objectTag ? value.constructor : undefined,
        ctorString = Ctor ? toSource(Ctor) : undefined;

    if (ctorString) {
      switch (ctorString) {
        case dataViewCtorString: return dataViewTag;
        case mapCtorString: return mapTag;
        case promiseCtorString: return promiseTag;
        case setCtorString: return setTag;
        case weakMapCtorString: return weakMapTag;
      }
    }
    return result;
  };
}

/**
 * Checks if `value` is a valid array-like index.
 *
 * @private
 * @param {*} value The value to check.
 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
 */
function isIndex(value, length) {
  length = length == null ? MAX_SAFE_INTEGER : length;
  return !!length &&
    (typeof value == 'number' || reIsUint.test(value)) &&
    (value > -1 && value % 1 == 0 && value < length);
}

/**
 * Checks if `func` has its source masked.
 *
 * @private
 * @param {Function} func The function to check.
 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
 */
function isMasked(func) {
  return !!maskSrcKey && (maskSrcKey in func);
}

/**
 * Checks if `value` is likely a prototype object.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
 */
function isPrototype(value) {
  var Ctor = value && value.constructor,
      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

  return value === proto;
}

/**
 * Converts `func` to its source code.
 *
 * @private
 * @param {Function} func The function to process.
 * @returns {string} Returns the source code.
 */
function toSource(func) {
  if (func != null) {
    try {
      return funcToString.call(func);
    } catch (e) {}
    try {
      return (func + '');
    } catch (e) {}
  }
  return '';
}

/**
 * Checks if `value` is likely an `arguments` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 *  else `false`.
 * @example
 *
 * _.isArguments(function() { return arguments; }());
 * // => true
 *
 * _.isArguments([1, 2, 3]);
 * // => false
 */
function isArguments(value) {
  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
}

/**
 * Checks if `value` is classified as an `Array` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
 * @example
 *
 * _.isArray([1, 2, 3]);
 * // => true
 *
 * _.isArray(document.body.children);
 * // => false
 *
 * _.isArray('abc');
 * // => false
 *
 * _.isArray(_.noop);
 * // => false
 */
var isArray = Array.isArray;

/**
 * Checks if `value` is array-like. A value is considered array-like if it's
 * not a function and has a `value.length` that's an integer greater than or
 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
 * @example
 *
 * _.isArrayLike([1, 2, 3]);
 * // => true
 *
 * _.isArrayLike(document.body.children);
 * // => true
 *
 * _.isArrayLike('abc');
 * // => true
 *
 * _.isArrayLike(_.noop);
 * // => false
 */
function isArrayLike(value) {
  return value != null && isLength(value.length) && !isFunction(value);
}

/**
 * This method is like `_.isArrayLike` except that it also checks if `value`
 * is an object.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array-like object,
 *  else `false`.
 * @example
 *
 * _.isArrayLikeObject([1, 2, 3]);
 * // => true
 *
 * _.isArrayLikeObject(document.body.children);
 * // => true
 *
 * _.isArrayLikeObject('abc');
 * // => false
 *
 * _.isArrayLikeObject(_.noop);
 * // => false
 */
function isArrayLikeObject(value) {
  return isObjectLike(value) && isArrayLike(value);
}

/**
 * Checks if `value` is classified as a `Function` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
 * @example
 *
 * _.isFunction(_);
 * // => true
 *
 * _.isFunction(/abc/);
 * // => false
 */
function isFunction(value) {
  // The use of `Object#toString` avoids issues with the `typeof` operator
  // in Safari 8-9 which returns 'object' for typed array and other constructors.
  var tag = isObject(value) ? objectToString.call(value) : '';
  return tag == funcTag || tag == genTag;
}

/**
 * Checks if `value` is a valid array-like length.
 *
 * **Note:** This method is loosely based on
 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
 * @example
 *
 * _.isLength(3);
 * // => true
 *
 * _.isLength(Number.MIN_VALUE);
 * // => false
 *
 * _.isLength(Infinity);
 * // => false
 *
 * _.isLength('3');
 * // => false
 */
function isLength(value) {
  return typeof value == 'number' &&
    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}

/**
 * Checks if `value` is the
 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(_.noop);
 * // => true
 *
 * _.isObject(null);
 * // => false
 */
function isObject(value) {
  var type = typeof value;
  return !!value && (type == 'object' || type == 'function');
}

/**
 * Checks if `value` is object-like. A value is object-like if it's not `null`
 * and has a `typeof` result of "object".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
 * @example
 *
 * _.isObjectLike({});
 * // => true
 *
 * _.isObjectLike([1, 2, 3]);
 * // => true
 *
 * _.isObjectLike(_.noop);
 * // => false
 *
 * _.isObjectLike(null);
 * // => false
 */
function isObjectLike(value) {
  return !!value && typeof value == 'object';
}

/**
 * Checks if `value` is classified as a `String` primitive or object.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a string, else `false`.
 * @example
 *
 * _.isString('abc');
 * // => true
 *
 * _.isString(1);
 * // => false
 */
function isString(value) {
  return typeof value == 'string' ||
    (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);
}

/**
 * Converts `value` to an array.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {Array} Returns the converted array.
 * @example
 *
 * _.toArray({ 'a': 1, 'b': 2 });
 * // => [1, 2]
 *
 * _.toArray('abc');
 * // => ['a', 'b', 'c']
 *
 * _.toArray(1);
 * // => []
 *
 * _.toArray(null);
 * // => []
 */
function toArray(value) {
  if (!value) {
    return [];
  }
  if (isArrayLike(value)) {
    return isString(value) ? stringToArray(value) : copyArray(value);
  }
  if (iteratorSymbol && value[iteratorSymbol]) {
    return iteratorToArray(value[iteratorSymbol]());
  }
  var tag = getTag(value),
      func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

  return func(value);
}

/**
 * Creates an array of the own enumerable property names of `object`.
 *
 * **Note:** Non-object values are coerced to objects. See the
 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
 * for more details.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.keys(new Foo);
 * // => ['a', 'b'] (iteration order is not guaranteed)
 *
 * _.keys('hi');
 * // => ['0', '1']
 */
function keys(object) {
  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}

/**
 * Creates an array of the own enumerable string keyed property values of `object`.
 *
 * **Note:** Non-object values are coerced to objects.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property values.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.values(new Foo);
 * // => [1, 2] (iteration order is not guaranteed)
 *
 * _.values('hi');
 * // => ['h', 'i']
 */
function values(object) {
  return object ? baseValues(object, keys(object)) : [];
}

module.exports = toArray;


/***/ }),
/* 928 */
/***/ (function(module, exports, __webpack_require__) {

var baseTimes = __webpack_require__(934),
    isArguments = __webpack_require__(944),
    isArray = __webpack_require__(945),
    isBuffer = __webpack_require__(946),
    isIndex = __webpack_require__(937),
    isTypedArray = __webpack_require__(948);

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates an array of the enumerable property names of the array-like `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @param {boolean} inherited Specify returning inherited property names.
 * @returns {Array} Returns the array of property names.
 */
function arrayLikeKeys(value, inherited) {
  var isArr = isArray(value),
      isArg = !isArr && isArguments(value),
      isBuff = !isArr && !isArg && isBuffer(value),
      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
      skipIndexes = isArr || isArg || isBuff || isType,
      result = skipIndexes ? baseTimes(value.length, String) : [],
      length = result.length;

  for (var key in value) {
    if ((inherited || hasOwnProperty.call(value, key)) &&
        !(skipIndexes && (
           // Safari 9 has enumerable `arguments.length` in strict mode.
           key == 'length' ||
           // Node.js 0.10 has enumerable non-index properties on buffers.
           (isBuff && (key == 'offset' || key == 'parent')) ||
           // PhantomJS 2 has enumerable non-index properties on typed arrays.
           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
           // Skip index properties.
           isIndex(key, length)
        ))) {
      result.push(key);
    }
  }
  return result;
}

module.exports = arrayLikeKeys;


/***/ }),
/* 929 */
/***/ (function(module, exports) {

/**
 * A specialized version of `_.map` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function arrayMap(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length,
      result = Array(length);

  while (++index < length) {
    result[index] = iteratee(array[index], index, array);
  }
  return result;
}

module.exports = arrayMap;


/***/ }),
/* 930 */
/***/ (function(module, exports, __webpack_require__) {

var baseGetTag = __webpack_require__(226),
    isObjectLike = __webpack_require__(227);

/** `Object#toString` result references. */
var argsTag = '[object Arguments]';

/**
 * The base implementation of `_.isArguments`.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 */
function baseIsArguments(value) {
  return isObjectLike(value) && baseGetTag(value) == argsTag;
}

module.exports = baseIsArguments;


/***/ }),
/* 931 */
/***/ (function(module, exports, __webpack_require__) {

var baseGetTag = __webpack_require__(226),
    isLength = __webpack_require__(376),
    isObjectLike = __webpack_require__(227);

/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
    arrayTag = '[object Array]',
    boolTag = '[object Boolean]',
    dateTag = '[object Date]',
    errorTag = '[object Error]',
    funcTag = '[object Function]',
    mapTag = '[object Map]',
    numberTag = '[object Number]',
    objectTag = '[object Object]',
    regexpTag = '[object RegExp]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    weakMapTag = '[object WeakMap]';

var arrayBufferTag = '[object ArrayBuffer]',
    dataViewTag = '[object DataView]',
    float32Tag = '[object Float32Array]',
    float64Tag = '[object Float64Array]',
    int8Tag = '[object Int8Array]',
    int16Tag = '[object Int16Array]',
    int32Tag = '[object Int32Array]',
    uint8Tag = '[object Uint8Array]',
    uint8ClampedTag = '[object Uint8ClampedArray]',
    uint16Tag = '[object Uint16Array]',
    uint32Tag = '[object Uint32Array]';

/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
typedArrayTags[setTag] = typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] = false;

/**
 * The base implementation of `_.isTypedArray` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 */
function baseIsTypedArray(value) {
  return isObjectLike(value) &&
    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}

module.exports = baseIsTypedArray;


/***/ }),
/* 932 */
/***/ (function(module, exports, __webpack_require__) {

var isPrototype = __webpack_require__(938),
    nativeKeys = __webpack_require__(939);

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function baseKeys(object) {
  if (!isPrototype(object)) {
    return nativeKeys(object);
  }
  var result = [];
  for (var key in Object(object)) {
    if (hasOwnProperty.call(object, key) && key != 'constructor') {
      result.push(key);
    }
  }
  return result;
}

module.exports = baseKeys;


/***/ }),
/* 933 */
/***/ (function(module, exports) {

/**
 * The base implementation of `_.property` without support for deep paths.
 *
 * @private
 * @param {string} key The key of the property to get.
 * @returns {Function} Returns the new accessor function.
 */
function baseProperty(key) {
  return function(object) {
    return object == null ? undefined : object[key];
  };
}

module.exports = baseProperty;


/***/ }),
/* 934 */
/***/ (function(module, exports) {

/**
 * The base implementation of `_.times` without support for iteratee shorthands
 * or max array length checks.
 *
 * @private
 * @param {number} n The number of times to invoke `iteratee`.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the array of results.
 */
function baseTimes(n, iteratee) {
  var index = -1,
      result = Array(n);

  while (++index < n) {
    result[index] = iteratee(index);
  }
  return result;
}

module.exports = baseTimes;


/***/ }),
/* 935 */
/***/ (function(module, exports) {

/**
 * The base implementation of `_.unary` without support for storing metadata.
 *
 * @private
 * @param {Function} func The function to cap arguments for.
 * @returns {Function} Returns the new capped function.
 */
function baseUnary(func) {
  return function(value) {
    return func(value);
  };
}

module.exports = baseUnary;


/***/ }),
/* 936 */
/***/ (function(module, exports, __webpack_require__) {

var Symbol = __webpack_require__(373);

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

/**
 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the raw `toStringTag`.
 */
function getRawTag(value) {
  var isOwn = hasOwnProperty.call(value, symToStringTag),
      tag = value[symToStringTag];

  try {
    value[symToStringTag] = undefined;
    var unmasked = true;
  } catch (e) {}

  var result = nativeObjectToString.call(value);
  if (unmasked) {
    if (isOwn) {
      value[symToStringTag] = tag;
    } else {
      delete value[symToStringTag];
    }
  }
  return result;
}

module.exports = getRawTag;


/***/ }),
/* 937 */
/***/ (function(module, exports) {

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;

/**
 * Checks if `value` is a valid array-like index.
 *
 * @private
 * @param {*} value The value to check.
 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
 */
function isIndex(value, length) {
  var type = typeof value;
  length = length == null ? MAX_SAFE_INTEGER : length;

  return !!length &&
    (type == 'number' ||
      (type != 'symbol' && reIsUint.test(value))) &&
        (value > -1 && value % 1 == 0 && value < length);
}

module.exports = isIndex;


/***/ }),
/* 938 */
/***/ (function(module, exports) {

/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Checks if `value` is likely a prototype object.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
 */
function isPrototype(value) {
  var Ctor = value && value.constructor,
      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

  return value === proto;
}

module.exports = isPrototype;


/***/ }),
/* 939 */
/***/ (function(module, exports, __webpack_require__) {

var overArg = __webpack_require__(942);

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = overArg(Object.keys, Object);

module.exports = nativeKeys;


/***/ }),
/* 940 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(374);

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Detect free variable `process` from Node.js. */
var freeProcess = moduleExports && freeGlobal.process;

/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
  try {
    // Use `util.types` for Node.js 10+.
    var types = freeModule && freeModule.require && freeModule.require('util').types;

    if (types) {
      return types;
    }

    // Legacy `process.binding('util')` for Node.js < 10.
    return freeProcess && freeProcess.binding && freeProcess.binding('util');
  } catch (e) {}
}());

module.exports = nodeUtil;

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 941 */
/***/ (function(module, exports) {

/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/**
 * Converts `value` to a string using `Object.prototype.toString`.
 *
 * @private
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 */
function objectToString(value) {
  return nativeObjectToString.call(value);
}

module.exports = objectToString;


/***/ }),
/* 942 */
/***/ (function(module, exports) {

/**
 * Creates a unary function that invokes `func` with its argument transformed.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} transform The argument transform.
 * @returns {Function} Returns the new function.
 */
function overArg(func, transform) {
  return function(arg) {
    return func(transform(arg));
  };
}

module.exports = overArg;


/***/ }),
/* 943 */
/***/ (function(module, exports) {

/**
 * This method returns the first argument it receives.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {*} value Any value.
 * @returns {*} Returns `value`.
 * @example
 *
 * var object = { 'a': 1 };
 *
 * console.log(_.identity(object) === object);
 * // => true
 */
function identity(value) {
  return value;
}

module.exports = identity;


/***/ }),
/* 944 */
/***/ (function(module, exports, __webpack_require__) {

var baseIsArguments = __webpack_require__(930),
    isObjectLike = __webpack_require__(227);

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Built-in value references. */
var propertyIsEnumerable = objectProto.propertyIsEnumerable;

/**
 * Checks if `value` is likely an `arguments` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 *  else `false`.
 * @example
 *
 * _.isArguments(function() { return arguments; }());
 * // => true
 *
 * _.isArguments([1, 2, 3]);
 * // => false
 */
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
    !propertyIsEnumerable.call(value, 'callee');
};

module.exports = isArguments;


/***/ }),
/* 945 */
/***/ (function(module, exports) {

/**
 * Checks if `value` is classified as an `Array` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
 * @example
 *
 * _.isArray([1, 2, 3]);
 * // => true
 *
 * _.isArray(document.body.children);
 * // => false
 *
 * _.isArray('abc');
 * // => false
 *
 * _.isArray(_.noop);
 * // => false
 */
var isArray = Array.isArray;

module.exports = isArray;


/***/ }),
/* 946 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(375),
    stubFalse = __webpack_require__(950);

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;

/**
 * Checks if `value` is a buffer.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
 * @example
 *
 * _.isBuffer(new Buffer(2));
 * // => true
 *
 * _.isBuffer(new Uint8Array(2));
 * // => false
 */
var isBuffer = nativeIsBuffer || stubFalse;

module.exports = isBuffer;

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 947 */
/***/ (function(module, exports, __webpack_require__) {

var baseGetTag = __webpack_require__(226),
    isObject = __webpack_require__(377);

/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]',
    funcTag = '[object Function]',
    genTag = '[object GeneratorFunction]',
    proxyTag = '[object Proxy]';

/**
 * Checks if `value` is classified as a `Function` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
 * @example
 *
 * _.isFunction(_);
 * // => true
 *
 * _.isFunction(/abc/);
 * // => false
 */
function isFunction(value) {
  if (!isObject(value)) {
    return false;
  }
  // The use of `Object#toString` avoids issues with the `typeof` operator
  // in Safari 9 which returns 'object' for typed arrays and other constructors.
  var tag = baseGetTag(value);
  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}

module.exports = isFunction;


/***/ }),
/* 948 */
/***/ (function(module, exports, __webpack_require__) {

var baseIsTypedArray = __webpack_require__(931),
    baseUnary = __webpack_require__(935),
    nodeUtil = __webpack_require__(940);

/* Node.js helper references. */
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

/**
 * Checks if `value` is classified as a typed array.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 * @example
 *
 * _.isTypedArray(new Uint8Array);
 * // => true
 *
 * _.isTypedArray([]);
 * // => false
 */
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

module.exports = isTypedArray;


/***/ }),
/* 949 */
/***/ (function(module, exports, __webpack_require__) {

var arrayLikeKeys = __webpack_require__(928),
    baseKeys = __webpack_require__(932),
    isArrayLike = __webpack_require__(164);

/**
 * Creates an array of the own enumerable property names of `object`.
 *
 * **Note:** Non-object values are coerced to objects. See the
 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
 * for more details.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.keys(new Foo);
 * // => ['a', 'b'] (iteration order is not guaranteed)
 *
 * _.keys('hi');
 * // => ['0', '1']
 */
function keys(object) {
  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}

module.exports = keys;


/***/ }),
/* 950 */
/***/ (function(module, exports) {

/**
 * This method returns `false`.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {boolean} Returns `false`.
 * @example
 *
 * _.times(2, _.stubFalse);
 * // => [false, false]
 */
function stubFalse() {
  return false;
}

module.exports = stubFalse;


/***/ }),
/* 951 */
/***/ (function(module, exports) {

module.exports = Yallist

Yallist.Node = Node
Yallist.create = Yallist

function Yallist (list) {
  var self = this
  if (!(self instanceof Yallist)) {
    self = new Yallist()
  }

  self.tail = null
  self.head = null
  self.length = 0

  if (list && typeof list.forEach === 'function') {
    list.forEach(function (item) {
      self.push(item)
    })
  } else if (arguments.length > 0) {
    for (var i = 0, l = arguments.length; i < l; i++) {
      self.push(arguments[i])
    }
  }

  return self
}

Yallist.prototype.removeNode = function (node) {
  if (node.list !== this) {
    throw new Error('removing node which does not belong to this list')
  }

  var next = node.next
  var prev = node.prev

  if (next) {
    next.prev = prev
  }

  if (prev) {
    prev.next = next
  }

  if (node === this.head) {
    this.head = next
  }
  if (node === this.tail) {
    this.tail = prev
  }

  node.list.length--
  node.next = null
  node.prev = null
  node.list = null
}

Yallist.prototype.unshiftNode = function (node) {
  if (node === this.head) {
    return
  }

  if (node.list) {
    node.list.removeNode(node)
  }

  var head = this.head
  node.list = this
  node.next = head
  if (head) {
    head.prev = node
  }

  this.head = node
  if (!this.tail) {
    this.tail = node
  }
  this.length++
}

Yallist.prototype.pushNode = function (node) {
  if (node === this.tail) {
    return
  }

  if (node.list) {
    node.list.removeNode(node)
  }

  var tail = this.tail
  node.list = this
  node.prev = tail
  if (tail) {
    tail.next = node
  }

  this.tail = node
  if (!this.head) {
    this.head = node
  }
  this.length++
}

Yallist.prototype.push = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    push(this, arguments[i])
  }
  return this.length
}

Yallist.prototype.unshift = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    unshift(this, arguments[i])
  }
  return this.length
}

Yallist.prototype.pop = function () {
  if (!this.tail) {
    return undefined
  }

  var res = this.tail.value
  this.tail = this.tail.prev
  if (this.tail) {
    this.tail.next = null
  } else {
    this.head = null
  }
  this.length--
  return res
}

Yallist.prototype.shift = function () {
  if (!this.head) {
    return undefined
  }

  var res = this.head.value
  this.head = this.head.next
  if (this.head) {
    this.head.prev = null
  } else {
    this.tail = null
  }
  this.length--
  return res
}

Yallist.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this.head, i = 0; walker !== null; i++) {
    fn.call(thisp, walker.value, i, this)
    walker = walker.next
  }
}

Yallist.prototype.forEachReverse = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
    fn.call(thisp, walker.value, i, this)
    walker = walker.prev
  }
}

Yallist.prototype.get = function (n) {
  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.next
  }
  if (i === n && walker !== null) {
    return walker.value
  }
}

Yallist.prototype.getReverse = function (n) {
  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.prev
  }
  if (i === n && walker !== null) {
    return walker.value
  }
}

Yallist.prototype.map = function (fn, thisp) {
  thisp = thisp || this
  var res = new Yallist()
  for (var walker = this.head; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this))
    walker = walker.next
  }
  return res
}

Yallist.prototype.mapReverse = function (fn, thisp) {
  thisp = thisp || this
  var res = new Yallist()
  for (var walker = this.tail; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this))
    walker = walker.prev
  }
  return res
}

Yallist.prototype.reduce = function (fn, initial) {
  var acc
  var walker = this.head
  if (arguments.length > 1) {
    acc = initial
  } else if (this.head) {
    walker = this.head.next
    acc = this.head.value
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = 0; walker !== null; i++) {
    acc = fn(acc, walker.value, i)
    walker = walker.next
  }

  return acc
}

Yallist.prototype.reduceReverse = function (fn, initial) {
  var acc
  var walker = this.tail
  if (arguments.length > 1) {
    acc = initial
  } else if (this.tail) {
    walker = this.tail.prev
    acc = this.tail.value
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = this.length - 1; walker !== null; i--) {
    acc = fn(acc, walker.value, i)
    walker = walker.prev
  }

  return acc
}

Yallist.prototype.toArray = function () {
  var arr = new Array(this.length)
  for (var i = 0, walker = this.head; walker !== null; i++) {
    arr[i] = walker.value
    walker = walker.next
  }
  return arr
}

Yallist.prototype.toArrayReverse = function () {
  var arr = new Array(this.length)
  for (var i = 0, walker = this.tail; walker !== null; i++) {
    arr[i] = walker.value
    walker = walker.prev
  }
  return arr
}

Yallist.prototype.slice = function (from, to) {
  to = to || this.length
  if (to < 0) {
    to += this.length
  }
  from = from || 0
  if (from < 0) {
    from += this.length
  }
  var ret = new Yallist()
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0
  }
  if (to > this.length) {
    to = this.length
  }
  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
    walker = walker.next
  }
  for (; walker !== null && i < to; i++, walker = walker.next) {
    ret.push(walker.value)
  }
  return ret
}

Yallist.prototype.sliceReverse = function (from, to) {
  to = to || this.length
  if (to < 0) {
    to += this.length
  }
  from = from || 0
  if (from < 0) {
    from += this.length
  }
  var ret = new Yallist()
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0
  }
  if (to > this.length) {
    to = this.length
  }
  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
    walker = walker.prev
  }
  for (; walker !== null && i > from; i--, walker = walker.prev) {
    ret.push(walker.value)
  }
  return ret
}

Yallist.prototype.reverse = function () {
  var head = this.head
  var tail = this.tail
  for (var walker = head; walker !== null; walker = walker.prev) {
    var p = walker.prev
    walker.prev = walker.next
    walker.next = p
  }
  this.head = tail
  this.tail = head
  return this
}

function push (self, item) {
  self.tail = new Node(item, self.tail, null, self)
  if (!self.head) {
    self.head = self.tail
  }
  self.length++
}

function unshift (self, item) {
  self.head = new Node(item, null, self.head, self)
  if (!self.tail) {
    self.tail = self.head
  }
  self.length++
}

function Node (value, prev, next, list) {
  if (!(this instanceof Node)) {
    return new Node(value, prev, next, list)
  }

  this.list = list
  this.value = value

  if (prev) {
    prev.next = this
    this.prev = prev
  } else {
    this.prev = null
  }

  if (next) {
    next.prev = this
    this.next = next
  } else {
    this.next = null
  }
}


/***/ }),
/* 952 */
/***/ (function(module, exports, __webpack_require__) {

var crypto = __webpack_require__(7)
var max = Math.pow(2, 32)

module.exports = random
module.exports.cryptographic = true

function random () {
  var buf = crypto
    .randomBytes(4)
    .toString('hex')

  return parseInt(buf, 16) / max
}


/***/ }),
/* 953 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const mimicFn = __webpack_require__(955);

const cacheStore = new WeakMap();

const defaultCacheKey = function (x) {
	if (arguments.length === 1 && (x === null || x === undefined || (typeof x !== 'function' && typeof x !== 'object'))) {
		return x;
	}

	return JSON.stringify(arguments);
};

module.exports = (fn, opts) => {
	opts = Object.assign({
		cacheKey: defaultCacheKey,
		cache: new Map()
	}, opts);

	const memoized = function () {
		const cache = cacheStore.get(memoized);
		const key = opts.cacheKey.apply(null, arguments);

		if (cache.has(key)) {
			const c = cache.get(key);

			if (typeof opts.maxAge !== 'number' || Date.now() < c.maxAge) {
				return c.data;
			}
		}

		const ret = fn.apply(null, arguments);

		cache.set(key, {
			data: ret,
			maxAge: Date.now() + (opts.maxAge || 0)
		});

		return ret;
	};

	mimicFn(memoized, fn);

	cacheStore.set(memoized, opts.cache);

	return memoized;
};

module.exports.clear = fn => {
	const cache = cacheStore.get(fn);

	if (cache && typeof cache.clear === 'function') {
		cache.clear();
	}
};


/***/ }),
/* 954 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * mime-db
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */

/**
 * Module exports.
 */

module.exports = __webpack_require__(509)


/***/ }),
/* 955 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = (to, from) => {
	// TODO: use `Reflect.ownKeys()` when targeting Node.js 6
	for (const prop of Object.getOwnPropertyNames(from).concat(Object.getOwnPropertySymbols(from))) {
		Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));
	}

	return to;
};


/***/ }),
/* 956 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var Runnable = __webpack_require__(381);
var inherits = __webpack_require__(165).inherits;

/**
 * Expose `Hook`.
 */

module.exports = Hook;

/**
 * Initialize a new `Hook` with the given `title` and callback `fn`
 *
 * @class
 * @extends Runnable
 * @param {String} title
 * @param {Function} fn
 */
function Hook(title, fn) {
  Runnable.call(this, title, fn);
  this.type = 'hook';
}

/**
 * Inherit from `Runnable.prototype`.
 */
inherits(Hook, Runnable);

/**
 * Get or set the test `err`.
 *
 * @memberof Hook
 * @public
 * @param {Error} err
 * @return {Error}
 */
Hook.prototype.error = function(err) {
  if (!arguments.length) {
    err = this._error;
    this._error = null;
    return err;
  }

  this._error = err;
};


/***/ }),
/* 957 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = Pending;

/**
 * Initialize a new `Pending` error with the given message.
 *
 * @param {string} message
 */
function Pending(message) {
  this.message = message;
}


/***/ }),
/* 958 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/**
 * @module Suite
 */

/**
 * Module dependencies.
 */
var EventEmitter = __webpack_require__(18).EventEmitter;
var Hook = __webpack_require__(956);
var utils = __webpack_require__(165);
var inherits = utils.inherits;
var debug = __webpack_require__(229)('mocha:suite');
var milliseconds = __webpack_require__(380);

/**
 * Expose `Suite`.
 */

exports = module.exports = Suite;

/**
 * Create a new `Suite` with the given `title` and parent `Suite`. When a suite
 * with the same title is already present, that suite is returned to provide
 * nicer reporter and more flexible meta-testing.
 *
 * @memberof Mocha
 * @public
 * @api public
 * @param {Suite} parent
 * @param {string} title
 * @return {Suite}
 */
exports.create = function(parent, title) {
  var suite = new Suite(title, parent.ctx);
  suite.parent = parent;
  title = suite.fullTitle();
  parent.addSuite(suite);
  return suite;
};

/**
 * Initialize a new `Suite` with the given `title` and `ctx`. Derived from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)
 *
 * @memberof Mocha
 * @public
 * @class
 * @param {string} title
 * @param {Context} parentContext
 */
function Suite(title, parentContext) {
  if (!utils.isString(title)) {
    throw new Error(
      'Suite `title` should be a "string" but "' +
        typeof title +
        '" was given instead.'
    );
  }
  this.title = title;
  function Context() {}
  Context.prototype = parentContext;
  this.ctx = new Context();
  this.suites = [];
  this.tests = [];
  this.pending = false;
  this._beforeEach = [];
  this._beforeAll = [];
  this._afterEach = [];
  this._afterAll = [];
  this.root = !title;
  this._timeout = 2000;
  this._enableTimeouts = true;
  this._slow = 75;
  this._bail = false;
  this._retries = -1;
  this._onlyTests = [];
  this._onlySuites = [];
  this.delayed = false;
}

/**
 * Inherit from `EventEmitter.prototype`.
 */
inherits(Suite, EventEmitter);

/**
 * Return a clone of this `Suite`.
 *
 * @api private
 * @return {Suite}
 */
Suite.prototype.clone = function() {
  var suite = new Suite(this.title);
  debug('clone');
  suite.ctx = this.ctx;
  suite.timeout(this.timeout());
  suite.retries(this.retries());
  suite.enableTimeouts(this.enableTimeouts());
  suite.slow(this.slow());
  suite.bail(this.bail());
  return suite;
};

/**
 * Set or get timeout `ms` or short-hand such as "2s".
 *
 * @api private
 * @param {number|string} ms
 * @return {Suite|number} for chaining
 */
Suite.prototype.timeout = function(ms) {
  if (!arguments.length) {
    return this._timeout;
  }
  if (ms.toString() === '0') {
    this._enableTimeouts = false;
  }
  if (typeof ms === 'string') {
    ms = milliseconds(ms);
  }
  debug('timeout %d', ms);
  this._timeout = parseInt(ms, 10);
  return this;
};

/**
 * Set or get number of times to retry a failed test.
 *
 * @api private
 * @param {number|string} n
 * @return {Suite|number} for chaining
 */
Suite.prototype.retries = function(n) {
  if (!arguments.length) {
    return this._retries;
  }
  debug('retries %d', n);
  this._retries = parseInt(n, 10) || 0;
  return this;
};

/**
 * Set or get timeout to `enabled`.
 *
 * @api private
 * @param {boolean} enabled
 * @return {Suite|boolean} self or enabled
 */
Suite.prototype.enableTimeouts = function(enabled) {
  if (!arguments.length) {
    return this._enableTimeouts;
  }
  debug('enableTimeouts %s', enabled);
  this._enableTimeouts = enabled;
  return this;
};

/**
 * Set or get slow `ms` or short-hand such as "2s".
 *
 * @api private
 * @param {number|string} ms
 * @return {Suite|number} for chaining
 */
Suite.prototype.slow = function(ms) {
  if (!arguments.length) {
    return this._slow;
  }
  if (typeof ms === 'string') {
    ms = milliseconds(ms);
  }
  debug('slow %d', ms);
  this._slow = ms;
  return this;
};

/**
 * Set or get whether to bail after first error.
 *
 * @api private
 * @param {boolean} bail
 * @return {Suite|number} for chaining
 */
Suite.prototype.bail = function(bail) {
  if (!arguments.length) {
    return this._bail;
  }
  debug('bail %s', bail);
  this._bail = bail;
  return this;
};

/**
 * Check if this suite or its parent suite is marked as pending.
 *
 * @api private
 */
Suite.prototype.isPending = function() {
  return this.pending || (this.parent && this.parent.isPending());
};

/**
 * Generic hook-creator.
 * @private
 * @param {string} title - Title of hook
 * @param {Function} fn - Hook callback
 * @returns {Hook} A new hook
 */
Suite.prototype._createHook = function(title, fn) {
  var hook = new Hook(title, fn);
  hook.parent = this;
  hook.timeout(this.timeout());
  hook.retries(this.retries());
  hook.enableTimeouts(this.enableTimeouts());
  hook.slow(this.slow());
  hook.ctx = this.ctx;
  hook.file = this.file;
  return hook;
};

/**
 * Run `fn(test[, done])` before running tests.
 *
 * @api private
 * @param {string} title
 * @param {Function} fn
 * @return {Suite} for chaining
 */
Suite.prototype.beforeAll = function(title, fn) {
  if (this.isPending()) {
    return this;
  }
  if (typeof title === 'function') {
    fn = title;
    title = fn.name;
  }
  title = '"before all" hook' + (title ? ': ' + title : '');

  var hook = this._createHook(title, fn);
  this._beforeAll.push(hook);
  this.emit('beforeAll', hook);
  return this;
};

/**
 * Run `fn(test[, done])` after running tests.
 *
 * @api private
 * @param {string} title
 * @param {Function} fn
 * @return {Suite} for chaining
 */
Suite.prototype.afterAll = function(title, fn) {
  if (this.isPending()) {
    return this;
  }
  if (typeof title === 'function') {
    fn = title;
    title = fn.name;
  }
  title = '"after all" hook' + (title ? ': ' + title : '');

  var hook = this._createHook(title, fn);
  this._afterAll.push(hook);
  this.emit('afterAll', hook);
  return this;
};

/**
 * Run `fn(test[, done])` before each test case.
 *
 * @api private
 * @param {string} title
 * @param {Function} fn
 * @return {Suite} for chaining
 */
Suite.prototype.beforeEach = function(title, fn) {
  if (this.isPending()) {
    return this;
  }
  if (typeof title === 'function') {
    fn = title;
    title = fn.name;
  }
  title = '"before each" hook' + (title ? ': ' + title : '');

  var hook = this._createHook(title, fn);
  this._beforeEach.push(hook);
  this.emit('beforeEach', hook);
  return this;
};

/**
 * Run `fn(test[, done])` after each test case.
 *
 * @api private
 * @param {string} title
 * @param {Function} fn
 * @return {Suite} for chaining
 */
Suite.prototype.afterEach = function(title, fn) {
  if (this.isPending()) {
    return this;
  }
  if (typeof title === 'function') {
    fn = title;
    title = fn.name;
  }
  title = '"after each" hook' + (title ? ': ' + title : '');

  var hook = this._createHook(title, fn);
  this._afterEach.push(hook);
  this.emit('afterEach', hook);
  return this;
};

/**
 * Add a test `suite`.
 *
 * @api private
 * @param {Suite} suite
 * @return {Suite} for chaining
 */
Suite.prototype.addSuite = function(suite) {
  suite.parent = this;
  suite.timeout(this.timeout());
  suite.retries(this.retries());
  suite.enableTimeouts(this.enableTimeouts());
  suite.slow(this.slow());
  suite.bail(this.bail());
  this.suites.push(suite);
  this.emit('suite', suite);
  return this;
};

/**
 * Add a `test` to this suite.
 *
 * @api private
 * @param {Test} test
 * @return {Suite} for chaining
 */
Suite.prototype.addTest = function(test) {
  test.parent = this;
  test.timeout(this.timeout());
  test.retries(this.retries());
  test.enableTimeouts(this.enableTimeouts());
  test.slow(this.slow());
  test.ctx = this.ctx;
  this.tests.push(test);
  this.emit('test', test);
  return this;
};

/**
 * Return the full title generated by recursively concatenating the parent's
 * full title.
 *
 * @memberof Mocha.Suite
 * @public
 * @api public
 * @return {string}
 */
Suite.prototype.fullTitle = function() {
  return this.titlePath().join(' ');
};

/**
 * Return the title path generated by recursively concatenating the parent's
 * title path.
 *
 * @memberof Mocha.Suite
 * @public
 * @api public
 * @return {string}
 */
Suite.prototype.titlePath = function() {
  var result = [];
  if (this.parent) {
    result = result.concat(this.parent.titlePath());
  }
  if (!this.root) {
    result.push(this.title);
  }
  return result;
};

/**
 * Return the total number of tests.
 *
 * @memberof Mocha.Suite
 * @public
 * @api public
 * @return {number}
 */
Suite.prototype.total = function() {
  return (
    this.suites.reduce(function(sum, suite) {
      return sum + suite.total();
    }, 0) + this.tests.length
  );
};

/**
 * Iterates through each suite recursively to find all tests. Applies a
 * function in the format `fn(test)`.
 *
 * @api private
 * @param {Function} fn
 * @return {Suite}
 */
Suite.prototype.eachTest = function(fn) {
  this.tests.forEach(fn);
  this.suites.forEach(function(suite) {
    suite.eachTest(fn);
  });
  return this;
};

/**
 * This will run the root suite if we happen to be running in delayed mode.
 */
Suite.prototype.run = function run() {
  if (this.root) {
    this.emit('run');
  }
};


/***/ }),
/* 959 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var Runnable = __webpack_require__(381);
var utils = __webpack_require__(165);
var isString = utils.isString;

module.exports = Test;

/**
 * Initialize a new `Test` with the given `title` and callback `fn`.
 *
 * @class
 * @extends Runnable
 * @param {String} title
 * @param {Function} fn
 */
function Test(title, fn) {
  if (!isString(title)) {
    throw new Error(
      'Test `title` should be a "string" but "' +
        typeof title +
        '" was given instead.'
    );
  }
  Runnable.call(this, title, fn);
  this.pending = !fn;
  this.type = 'test';
}

/**
 * Inherit from `Runnable.prototype`.
 */
utils.inherits(Test, Runnable);

Test.prototype.clone = function() {
  var test = new Test(this.title, this.fn);
  test.timeout(this.timeout());
  test.slow(this.slow());
  test.enableTimeouts(this.enableTimeouts());
  test.retries(this.retries());
  test.currentRetry(this.currentRetry());
  test.globals(this.globals());
  test.parent = this.parent;
  test.file = this.file;
  test.ctx = this.ctx;
  return test;
};


/***/ }),
/* 960 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(382);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 961 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(382);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(963);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 962 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = (flag, argv) => {
	argv = argv || process.argv;
	const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
	const pos = argv.indexOf(prefix + flag);
	const terminatorPos = argv.indexOf('--');
	return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};


/***/ }),
/* 963 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const os = __webpack_require__(5);
const hasFlag = __webpack_require__(962);

const env = process.env;

let forceColor;
if (hasFlag('no-color') ||
	hasFlag('no-colors') ||
	hasFlag('color=false')) {
	forceColor = false;
} else if (hasFlag('color') ||
	hasFlag('colors') ||
	hasFlag('color=true') ||
	hasFlag('color=always')) {
	forceColor = true;
}
if ('FORCE_COLOR' in env) {
	forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;
}

function translateLevel(level) {
	if (level === 0) {
		return false;
	}

	return {
		level,
		hasBasic: true,
		has256: level >= 2,
		has16m: level >= 3
	};
}

function supportsColor(stream) {
	if (forceColor === false) {
		return 0;
	}

	if (hasFlag('color=16m') ||
		hasFlag('color=full') ||
		hasFlag('color=truecolor')) {
		return 3;
	}

	if (hasFlag('color=256')) {
		return 2;
	}

	if (stream && !stream.isTTY && forceColor !== true) {
		return 0;
	}

	const min = forceColor ? 1 : 0;

	if (process.platform === 'win32') {
		// Node.js 7.5.0 is the first version of Node.js to include a patch to
		// libuv that enables 256 color output on Windows. Anything earlier and it
		// won't work. However, here we target Node.js 8 at minimum as it is an LTS
		// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows
		// release that supports 256 colors. Windows 10 build 14931 is the first release
		// that supports 16m/TrueColor.
		const osRelease = os.release().split('.');
		if (
			Number(process.versions.node.split('.')[0]) >= 8 &&
			Number(osRelease[0]) >= 10 &&
			Number(osRelease[2]) >= 10586
		) {
			return Number(osRelease[2]) >= 14931 ? 3 : 2;
		}

		return 1;
	}

	if ('CI' in env) {
		if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
			return 1;
		}

		return min;
	}

	if ('TEAMCITY_VERSION' in env) {
		return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
	}

	if (env.COLORTERM === 'truecolor') {
		return 3;
	}

	if ('TERM_PROGRAM' in env) {
		const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);

		switch (env.TERM_PROGRAM) {
			case 'iTerm.app':
				return version >= 3 ? 3 : 2;
			case 'Apple_Terminal':
				return 2;
			// No default
		}
	}

	if (/-256(color)?$/i.test(env.TERM)) {
		return 2;
	}

	if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
		return 1;
	}

	if ('COLORTERM' in env) {
		return 1;
	}

	if (env.TERM === 'dumb') {
		return min;
	}

	return min;
}

function getSupportLevel(stream) {
	const level = supportsColor(stream);
	return translateLevel(level);
}

module.exports = {
	supportsColor: getSupportLevel,
	stdout: getSupportLevel(process.stdout),
	stderr: getSupportLevel(process.stderr)
};


/***/ }),
/* 964 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1),
    path = __webpack_require__(0);

exports.promiseFiles = function promiseFiles(dir, type, options){
  type = type || 'file'

  var processor = function(res,rej){
    var cb = function(err,data){
      if(err)return rej(err)
      res(data)
    }
    exports.files(dir,type,cb,options)
  }
  return new Promise(processor)
}

/**
 * find all files or subdirs (recursive) and pass to callback fn
 *
 * @param {string} dir directory in which to recurse files or subdirs
 * @param {string} type type of dir entry to recurse ('file', 'dir', or 'all', defaults to 'file')
 * @param {function(error, <Array.<string>)} callback fn to call when done
 * @example
 * dir.files(__dirname, function(err, files) {
 *      if (err) throw err;
 *      console.log('files:', files);
 *  });
 */
exports.files = function files(dir, type, callback, options) {
  var ofType = typeof type
  if(ofType == 'object'){
    options = options || type
    type = 'file'
    callback = function(){}
  }else if (ofType !== 'string') {
    //ignoreType = callback;
    callback = type;
    type = 'file';
  }
  
  options = options || {}

  var pending,
      results = {
          files: [],
          dirs: []
      };

  var done = function() {
    if(type==='combine'){
      results = results.files.concat(results.dirs)
    } else if (!type || options.ignoreType || ['all','combine'].indexOf(type)>=0) {
        results = results
    } else {
      results = results[type + 's']
    }

    if(options.sync)return;


    callback(null, results);
  };

  var getStatHandler = function(statPath, name, lstatCalled) {
    return function(err, stat) {
      if (err) {
        if (!lstatCalled) {
          return fs.lstat(statPath, getStatHandler(statPath, name, true));
        }
        return callback(err);
      }

      var pushVal = options.shortName ? name : statPath

      if (stat && stat.isDirectory() && stat.mode !== 17115) {
        if (type !== 'file') {
          results.dirs.push(pushVal);
        }

        if (options.recursive==null || options.recursive) {
          var subloop = function(err, res) {
            if (err){
                return callback(err)
            }
            
            if(type === 'combine'){
              results.files = results.files.concat(res);
            }else if (type === 'all') {
              results.files = results.files.concat(res.files);
              results.dirs = results.dirs.concat(res.dirs);
            } else if (type === 'file') {
                results.files = results.files.concat(res.files);
            } else {
                results.dirs = results.dirs.concat(res.dirs);
            }

            if (!--pending){
              done();
            }
          }

          var newOptions = Object.assign({}, options)
          newOptions.ignoreType = true
          var moreResults = files(statPath, type, subloop, newOptions);

          if(options.sync){
            subloop(null, moreResults)
          }
        }else if (!--pending){
          done()
        }
      } else {
        if (type !== 'dir') {
          results.files.push(pushVal);
        }
        // should be the last statement in statHandler
        if (!--pending){
          done()
        }
      }
    }
  }

  var bufdir = Buffer.from(dir);

  const onDirRead = function(err, list) {
    if (err) return callback(err);
    
    pending = list.length;
    if (!pending) return done();
    
    for (var file, i = 0, l = list.length; i < l; i++) {
      var fname = list[i].toString();
      file = path.join(dir, fname);
      var buffile = Buffer.concat([bufdir, Buffer.from(path.sep), list[i]]);

      if(options.sync){
        var res = fs.statSync(buffile);
        getStatHandler(file,fname)(null, res)
      }else{
        fs.stat(buffile, getStatHandler(file,fname));
      }
    }

    return results
  }

  const onStat = function(err, stat) {
    if (err) return callback(err);
    if (stat && stat.mode === 17115) return done();

    if(options.sync){
      const list = fs.readdirSync(bufdir, {encoding: 'buffer'})
      return onDirRead(null, list)
    }else{
      fs.readdir(bufdir, {encoding: 'buffer'}, onDirRead)
    }
  }

  if(options.sync){
    const stat = fs.statSync(bufdir);
    return onStat(null, stat)
  }else{
    fs.stat(bufdir, onStat);
  }
};


/**
 * find all files and subdirs in  a directory (recursive) and pass them to callback fn
 *
 * @param {string} dir directory in which to recurse files or subdirs
 * @param {boolean} combine whether to combine both subdirs and filepaths into one array (default false)
 * @param {function(error, Object.<<Array.<string>, Array.<string>>)} callback fn to call when done
 * @example
 * dir.paths(__dirname, function (err, paths) {
 *     if (err) throw err;
 *     console.log('files:', paths.files);
 *     console.log('subdirs:', paths.dirs);
 * });
 * dir.paths(__dirname, true, function (err, paths) {
 *      if (err) throw err;
 *      console.log('paths:', paths);
 * });
 */
exports.paths = function paths(dir, combine, callback) {

    var type;

    if (typeof combine === 'function') {
        callback = combine;
        combine = false;
    }

    exports.files(dir, 'all', function(err, results) {
        if (err) return callback(err);
        if (combine) {

            callback(null, results.files.concat(results.dirs));
        } else {
            callback(null, results);
        }
    });
};


/**
 * find all subdirs (recursive) of a directory and pass them to callback fn
 *
 * @param {string} dir directory in which to find subdirs
 * @param {string} type type of dir entry to recurse ('file' or 'dir', defaults to 'file')
 * @param {function(error, <Array.<string>)} callback fn to call when done
 * @example
 * dir.subdirs(__dirname, function (err, paths) {
 *      if (err) throw err;
 *      console.log('files:', paths.files);
 *      console.log('subdirs:', paths.dirs);
 * });
 */
exports.subdirs = function subdirs(dir, callback, type, options) {
  options = options || {}

  const iCallback = function(err, subdirs) {
    if (err) return callback(err);

    if(type=='combine'){
      subdirs = subdirs.files.concat(subdirs.dirs)
    }
    
    if(options.sync)return subdirs

    callback(null, subdirs);
  }

  const res = exports.files(dir, 'dir', iCallback, options)

  if(options && options.sync){
    return iCallback(null,res)
  }
};


/***/ }),
/* 965 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1),
    path = __webpack_require__(0);

/**
 * merge two objects by extending target object with source object
 * @param target object to merge
 * @param source object to merge
 * @param {Boolean} [modify] whether to modify the target
 * @returns {Object} extended object
 */
function extend(target, source, modify) {
    var result = target ? modify ? target : extend({}, target, true) : {};
    if (!source) return result;
    for (var key in source) {
        if (source.hasOwnProperty(key) && source[key] !== undefined) {
            result[key] = source[key];
        }
    }
    return result;
}

/**
 * determine if a string is contained within an array or matches a regular expression
 * @param   {String} str string to match
 * @param   {Array|Regex} match array or regular expression to match against
 * @returns {Boolean} whether there is a match
 */
function matches(str, match) {
    if (Array.isArray(match)) return match.indexOf(str) > -1;
    return match.test(str);
}

/**
 * read files and call a function with the contents of each file
 * @param  {String} dir path of dir containing the files to be read
 * @param  {String} encoding file encoding (default is 'utf8')
 * @param  {Object} options options hash for encoding, recursive, and match/exclude
 * @param  {Function(error, string)} callback  callback for each files content
 * @param  {Function(error)}   complete  fn to call when finished
 */
function readFiles(dir, options, callback, complete) {
    if (typeof options === 'function') {
        complete = callback;
        callback = options;
        options = {};
    }
    if (typeof options === 'string') options = {
        encoding: options
    };
    options = extend({
        recursive: true,
        encoding: 'utf8',
        doneOnErr: true
    }, options);
    var files = [];

    var done = function(err) {
        if (typeof complete === 'function') {
            if (err) return complete(err);
            complete(null, files);
        }
    };

    fs.readdir(dir, function(err, list) {
        if (err)  {
            if (options.doneOnErr === true) {
              if (err.code === 'EACCES') return done();
              return done(err);
            }
        }
        var i = 0;

        if (options.reverse === true ||
            (typeof options.sort == 'string' &&
                (/reverse|desc/i).test(options.sort))) {
            list = list.reverse();
        } else if (options.sort !== false) list = list.sort();

        (function next() {
            var filename = list[i++];
            if (!filename) return done(null, files);
            var file = path.join(dir, filename);
            fs.stat(file, function(err, stat) {
                if (err && options.doneOnErr === true) return done(err);
                if (stat && stat.isDirectory()) {
                    if (options.recursive) {
                        if (options.matchDir && !matches(filename, options.matchDir)) return next();
                        if (options.excludeDir && matches(filename, options.excludeDir)) return next();
                        readFiles(file, options, callback, function(err, sfiles) {
                            if (err && options.doneOnErr === true) return done(err);
                            files = files.concat(sfiles);
                            next();
                        });
                    } else next();
                } else if (stat && stat.isFile()) {
                    if (options.match && !matches(filename, options.match)) return next();
                    if (options.exclude && matches(filename, options.exclude)) return next();
                    if (options.filter && !options.filter(filename)) return next();
                    if (options.shortName) files.push(filename);
                    else files.push(file);
                    fs.readFile(file, options.encoding, function(err, data) {
                        if (err) {
                            if (err.code === 'EACCES') return next();
                            if (options.doneOnErr === true) {
                                return done(err);
                            }
                        }
                        if (callback.length > 3)
                            if (options.shortName) callback(null, data, filename, next);
                            else callback(null, data, file, next);
                            else callback(null, data, next);
                    });
                }
                else {
                    next();
                }
            });
        })();

    });
}
module.exports = readFiles;


/***/ }),
/* 966 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1),
    mm = __webpack_require__(64),
    path = __webpack_require__(0);

/**
 * merge two objects by extending target object with source object
 * @param target object to merge
 * @param source object to merge
 * @param {Boolean} [modify] whether to modify the target
 * @returns {Object} extended object
 */
function extend(target, source, modify) {
    var result = target ? modify ? target : extend({}, target, true) : {};
    if (!source) return result;
    for (var key in source) {
        if (source.hasOwnProperty(key) && source[key] !== undefined) {
            result[key] = source[key];
        }
    }
    return result;
}

/**
 * determine if a string is contained within an array or matches a regular expression
 * @param   {String} str string to match
 * @param   {Array|Regex} match array or regular expression to match against
 * @returns {Boolean} whether there is a match
 */
function matches(str, match) {
    if (Array.isArray(match)) {
        var l = match.length;
        for( var s=0; s < l; s++) {
            if ( mm(str,match[s])) {
                return true;
            }
        }
        return false;
    }
    return match.test(str);
}

/**
 * read files and call a function with the contents of each file
 * @param  {String} dir path of dir containing the files to be read
 * @param  {String} encoding file encoding (default is 'utf8')
 * @param  {Object} options options hash for encoding, recursive, and match/exclude
 * @param  {Function(error, string)} callback  callback for each files content
 * @param  {Function(error)}   complete  fn to call when finished
 */
function readFilesStream(dir, options, callback, complete) {
    if (typeof options === 'function') {
        complete = callback;
        callback = options;
        options = {};
    }
    if (typeof options === 'string') options = {
        encoding: options
    };
    options = extend({
        recursive: true,
        encoding: 'utf8',
        doneOnErr: true
    }, options);
    var files = [];

    var done = function(err) {
        if (typeof complete === 'function') {
            if (err) return complete(err);
            complete(null, files);
        }
    };

    fs.readdir(dir, function(err, list) {
        if (err)  {
            if (options.doneOnErr === true) {
              if (err.code === 'EACCES') return done();
              return done(err);
            }
        }
        var i = 0;

        if (options.reverse === true ||
            (typeof options.sort == 'string' &&
                (/reverse|desc/i).test(options.sort))) {
            list = list.reverse();
        } else if (options.sort !== false) list = list.sort();

        (function next() {
            var filename = list[i++];
            if (!filename) return done(null, files);
            var file = path.join(dir, filename);
            fs.stat(file, function(err, stat) {
                if (err && options.doneOnErr === true) return done(err);
                if (stat && stat.isDirectory()) {
                    if (options.recursive) {
                        if (options.matchDir && !matches(filename, options.matchDir)) return next();
                        if (options.excludeDir && matches(filename, options.excludeDir)) return next();
                        readFilesStream(file, options, callback, function(err, sfiles) {
                            if (err && options.doneOnErr === true) return done(err);
                            files = files.concat(sfiles);
                            next();
                        });
                    } else next();
                } else if (stat && stat.isFile()) {
                    if (options.match && !matches(filename, options.match)) return next();
                    if (options.exclude && matches(filename, options.exclude)) return next();
                    if (options.filter && !options.filter(filename)) return next();
                    if (options.shortName) files.push(filename);
                    else files.push(file);
                    var stream = fs.createReadStream(file);
                    if (options.encoding !== null) {
                        stream.setEncoding(options.encoding);
                    }
                    stream.on('error',function(err) {
                      if (options.doneOnErr === true) return done(err);
                      next();
                    });
                    if (callback.length > 3)
                        if (options.shortName) callback(null, stream, filename, next);
                        else callback(null, stream, file, next);
                        else callback(null, stream, next);
                }
                else {
                  next();
                }
            });
        })();

    });
}
module.exports = readFilesStream;


/***/ }),
/* 967 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(968);

/***/ }),
/* 968 */
/***/ (function(module, exports, __webpack_require__) {

/*jslint node: true*/
var toArray = __webpack_require__(927);
var emojiByName = __webpack_require__(510);

"use strict";

/**
 * regex to parse emoji in a string - finds emoji, e.g. :coffee:
 */
var emojiNameRegex = /:([a-zA-Z0-9_\-\+]+):/g;

/**
 * regex to trim whitespace
 * use instead of String.prototype.trim() for IE8 supprt
 */
var trimSpaceRegex = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;

/**
 * Removes colons on either side
 * of the string if present
 * @param  {string} str
 * @return {string}
 */
function stripColons (str) {
  var colonIndex = str.indexOf(':');
  if (colonIndex > -1) {
    // :emoji: (http://www.emoji-cheat-sheet.com/)
    if (colonIndex === str.length - 1) {
      str = str.substring(0, colonIndex);
      return stripColons(str);
    } else {
      str = str.substr(colonIndex + 1);
      return stripColons(str);
    }
  }

  return str;
}

/**
 * Adds colons to either side
 * of the string
 * @param {string} str
 * @return {string}
 */
function wrapColons (str) {
  return (typeof str === 'string' && str.length > 0) ? ':' + str + ':' : str;
}

/**
 * Ensure that the word is wrapped in colons
 * by only adding them, if they are not there.
 * @param {string} str
 * @return {string}
 */
function ensureColons (str) {
  return (typeof str === 'string' && str[0] !== ':') ? wrapColons(str) : str;
}

// Non spacing mark, some emoticons have them. It's the 'Variant Form',
// which provides more information so that emoticons can be rendered as
// more colorful graphics. FE0E is a unicode text version, where as FE0F
// should be rendered as a graphical version. The code gracefully degrades.
var NON_SPACING_MARK = String.fromCharCode(65039); // 65039 - '️' - 0xFE0F;
var nonSpacingRegex = new RegExp(NON_SPACING_MARK, 'g')

// Remove the non-spacing-mark from the code, never send a stripped version
// to the client, as it kills graphical emoticons.
function stripNSB (code) {
  return code.replace(nonSpacingRegex, '');
};

// Reversed hash table, where as emojiByName contains a { heart: '❤' }
// dictionary emojiByCode contains { ❤: 'heart' }. The codes are normalized
// to the text version.
var emojiByCode = Object.keys(emojiByName).reduce(function(h,k) {
  h[stripNSB(emojiByName[k])] = k;
  return h;
}, {});

/**
 * Emoji namespace
 */
var Emoji = {
  emoji: emojiByName,
};

/**
 * get emoji code from name
 * @param  {string} emoji
 * @return {string}
 */
Emoji._get = function _get (emoji) {
  if (emojiByName.hasOwnProperty(emoji)) {
    return emojiByName[emoji];
  }

  return ensureColons(emoji);
};

/**
 * get emoji code from :emoji: string or name
 * @param  {string} emoji
 * @return {string}
 */
Emoji.get = function get (emoji) {
  emoji = stripColons(emoji);

  return Emoji._get(emoji);
};

/**
 * find the emoji by either code or name
 * @param {string} nameOrCode The emoji to find, either `coffee`, `:coffee:` or `☕`;
 * @return {object}
 */
Emoji.find = function find (nameOrCode) {
  return Emoji.findByName(nameOrCode) || Emoji.findByCode(nameOrCode);
};

/**
 * find the emoji by name
 * @param {string} name The emoji to find either `coffee` or `:coffee:`;
 * @return {object}
 */
Emoji.findByName = function findByName (name) {
  var stripped = stripColons(name);
  var emoji = emojiByName[stripped];

  return emoji ? ({ emoji: emoji, key: stripped }) : undefined;
};

/**
 * find the emoji by code (emoji)
 * @param {string} code The emoji to find; for example `☕` or `☔`
 * @return {object}
 */
Emoji.findByCode = function findByCode (code) {
  var stripped = stripNSB(code);
  var name = emojiByCode[stripped];

  // lookup emoji to ensure the Variant Form is returned
  return name ? ({ emoji: emojiByName[name], key: name }) : undefined;
};


/**
 * Check if an emoji is known by this library
 * @param {string} nameOrCode The emoji to validate, either `coffee`, `:coffee:` or `☕`;
 * @return {object}
 */
Emoji.hasEmoji = function hasEmoji (nameOrCode) {
  return Emoji.hasEmojiByName(nameOrCode) || Emoji.hasEmojiByCode(nameOrCode);
};

/**
 * Check if an emoji with given name is known by this library
 * @param {string} name The emoji to validate either `coffee` or `:coffee:`;
 * @return {object}
 */
Emoji.hasEmojiByName = function hasEmojiByName (name) {
  var result = Emoji.findByName(name);
  return !!result && result.key === stripColons(name);
};

/**
 * Check if a given emoji is known by this library
 * @param {string} code The emoji to validate; for example `☕` or `☔`
 * @return {object}
 */
Emoji.hasEmojiByCode = function hasEmojiByCode (code) {
  var result = Emoji.findByCode(code);
  return !!result && stripNSB(result.emoji) === stripNSB(code);
};

/**
 * get emoji name from code
 * @param  {string} emoji
 * @param  {boolean} includeColons should the result include the ::
 * @return {string}
 */
Emoji.which = function which (emoji_code, includeColons) {
  var code = stripNSB(emoji_code);
  var word = emojiByCode[code];

  return includeColons ? wrapColons(word) : word;
};

/**
 * emojify a string (replace :emoji: with an emoji)
 * @param  {string} str
 * @param  {function} on_missing (gets emoji name without :: and returns a proper emoji if no emoji was found)
 * @param  {function} format (wrap the returned emoji in a custom element)
 * @return {string}
 */
Emoji.emojify = function emojify (str, on_missing, format) {
  if (!str) return '';

  return str.split(emojiNameRegex) // parse emoji via regex
            .map(function parseEmoji(s, i) {
              // every second element is an emoji, e.g. "test :fast_forward:" -> [ "test ", "fast_forward" ]
              if (i % 2 === 0) return s;
              var emoji = Emoji._get(s);
              var isMissing = emoji.indexOf(':') > -1;

              if (isMissing && typeof on_missing === 'function') {
                return on_missing(s);
              }

              if (!isMissing && typeof format === 'function') {
                return format(emoji, s);
              }

              return emoji;
            })
            .join('') // convert back to string
  ;
};

/**
 * return a random emoji
 * @return {string}
 */
Emoji.random = function random () {
  var emojiKeys = Object.keys(emojiByName);
  var randomIndex = Math.floor(Math.random() * emojiKeys.length);
  var key = emojiKeys[randomIndex];
  var emoji = Emoji._get(key);
  return { key: key, emoji: emoji };
}

/**
 *  return an collection of potential emoji matches
 *  @param {string} str
 *  @return {Array.<Object>}
 */
Emoji.search = function search (str) {
  var emojiKeys = Object.keys(emojiByName);
  var matcher = stripColons(str)
  var matchingKeys = emojiKeys.filter(function(key) {
    return key.toString().indexOf(matcher) === 0;
  });
  return matchingKeys.map(function(key) {
    return {
      key: key,
      emoji: Emoji._get(key),
    };
  });
}

/**
 * unemojify a string (replace emoji with :emoji:)
 * @param  {string} str
 * @return {string}
 */
Emoji.unemojify = function unemojify (str) {
  if (!str) return '';
  var words = toArray(str);

  return words.map(function(word) {
    return Emoji.which(word, true) || word;
  }).join('');
};

/**
 * replace emojis with replacement value
 * @param {string} str
 * @param {function|string} the string or callback function to replace the emoji with
 * @param {boolean} should trailing whitespaces be cleaned? Defaults false
 * @return {string}
 */
Emoji.replace = function replace (str, replacement, cleanSpaces) {
  if (!str) return '';

  var replace = typeof replacement === 'function' ? replacement : function() { return replacement; };
  var words = toArray(str);

  var replaced = words.map(function(word, idx) {
    var emoji = Emoji.findByCode(word);
    
    if (emoji && cleanSpaces && words[idx + 1] === ' ') {
      words[idx + 1] = '';
    }

    return emoji ? replace(emoji) : word;
  }).join('');

  return cleanSpaces ? replaced.replace(trimSpaceRegex, '') : replaced;
};


/**
 * remove all emojis from a string
 * @param {string} str
 * @return {string}
 */
Emoji.strip = function strip (str) {
  return Emoji.replace(str, '', true);
};

module.exports = Emoji;


/***/ }),
/* 969 */
/***/ (function(module, exports) {

module.exports = extractDescription

// Extracts description from contents of a readme file in markdown format
function extractDescription (d) {
  if (!d) return;
  if (d === "ERROR: No README data found!") return;
  // the first block of text before the first heading
  // that isn't the first line heading
  d = d.trim().split('\n')
  for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s ++);
  var l = d.length
  for (var e = s + 1; e < l && d[e].trim(); e ++);
  return d.slice(s, e).join(' ').trim()
}


/***/ }),
/* 970 */
/***/ (function(module, exports, __webpack_require__) {

var semver = __webpack_require__(238)
var validateLicense = __webpack_require__(1094);
var hostedGitInfo = __webpack_require__(879)
var isBuiltinModule = __webpack_require__(893)
var depTypes = ["dependencies","devDependencies","optionalDependencies"]
var extractDescription = __webpack_require__(969)
var url = __webpack_require__(8)
var typos = __webpack_require__(511)

var fixer = module.exports = {
  // default warning function
  warn: function() {},

  fixRepositoryField: function(data) {
    if (data.repositories) {
      this.warn("repositories");
      data.repository = data.repositories[0]
    }
    if (!data.repository) return this.warn("missingRepository")
    if (typeof data.repository === "string") {
      data.repository = {
        type: "git",
        url: data.repository
      }
    }
    var r = data.repository.url || ""
    if (r) {
      var hosted = hostedGitInfo.fromUrl(r)
      if (hosted) {
        r = data.repository.url
          = hosted.getDefaultRepresentation() == "shortcut" ? hosted.https() : hosted.toString()
      }
    }

    if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) {
      this.warn("brokenGitUrl", r)
    }
  }

, fixTypos: function(data) {
    Object.keys(typos.topLevel).forEach(function (d) {
      if (data.hasOwnProperty(d)) {
        this.warn("typo", d, typos.topLevel[d])
      }
    }, this)
  }

, fixScriptsField: function(data) {
    if (!data.scripts) return
    if (typeof data.scripts !== "object") {
      this.warn("nonObjectScripts")
      delete data.scripts
      return
    }
    Object.keys(data.scripts).forEach(function (k) {
      if (typeof data.scripts[k] !== "string") {
        this.warn("nonStringScript")
        delete data.scripts[k]
      } else if (typos.script[k] && !data.scripts[typos.script[k]]) {
        this.warn("typo", k, typos.script[k], "scripts")
      }
    }, this)
  }

, fixFilesField: function(data) {
    var files = data.files
    if (files && !Array.isArray(files)) {
      this.warn("nonArrayFiles")
      delete data.files
    } else if (data.files) {
      data.files = data.files.filter(function(file) {
        if (!file || typeof file !== "string") {
          this.warn("invalidFilename", file)
          return false
        } else {
          return true
        }
      }, this)
    }
  }

, fixBinField: function(data) {
    if (!data.bin) return;
    if (typeof data.bin === "string") {
      var b = {}
      var match
      if (match = data.name.match(/^@[^/]+[/](.*)$/)) {
        b[match[1]] = data.bin
      } else {
        b[data.name] = data.bin
      }
      data.bin = b
    }
  }

, fixManField: function(data) {
    if (!data.man) return;
    if (typeof data.man === "string") {
      data.man = [ data.man ]
    }
  }
, fixBundleDependenciesField: function(data) {
    var bdd = "bundledDependencies"
    var bd = "bundleDependencies"
    if (data[bdd] && !data[bd]) {
      data[bd] = data[bdd]
      delete data[bdd]
    }
    if (data[bd] && !Array.isArray(data[bd])) {
      this.warn("nonArrayBundleDependencies")
      delete data[bd]
    } else if (data[bd]) {
      data[bd] = data[bd].filter(function(bd) {
        if (!bd || typeof bd !== 'string') {
          this.warn("nonStringBundleDependency", bd)
          return false
        } else {
          if (!data.dependencies) {
            data.dependencies = {}
          }
          if (!data.dependencies.hasOwnProperty(bd)) {
            this.warn("nonDependencyBundleDependency", bd)
            data.dependencies[bd] = "*"
          }
          return true
        }
      }, this)
    }
  }

, fixDependencies: function(data, strict) {
    var loose = !strict
    objectifyDeps(data, this.warn)
    addOptionalDepsToDeps(data, this.warn)
    this.fixBundleDependenciesField(data)

    ;['dependencies','devDependencies'].forEach(function(deps) {
      if (!(deps in data)) return
      if (!data[deps] || typeof data[deps] !== "object") {
        this.warn("nonObjectDependencies", deps)
        delete data[deps]
        return
      }
      Object.keys(data[deps]).forEach(function (d) {
        var r = data[deps][d]
        if (typeof r !== 'string') {
          this.warn("nonStringDependency", d, JSON.stringify(r))
          delete data[deps][d]
        }
        var hosted = hostedGitInfo.fromUrl(data[deps][d])
        if (hosted) data[deps][d] = hosted.toString()
      }, this)
    }, this)
  }

, fixModulesField: function (data) {
    if (data.modules) {
      this.warn("deprecatedModules")
      delete data.modules
    }
  }

, fixKeywordsField: function (data) {
    if (typeof data.keywords === "string") {
      data.keywords = data.keywords.split(/,\s+/)
    }
    if (data.keywords && !Array.isArray(data.keywords)) {
      delete data.keywords
      this.warn("nonArrayKeywords")
    } else if (data.keywords) {
      data.keywords = data.keywords.filter(function(kw) {
        if (typeof kw !== "string" || !kw) {
          this.warn("nonStringKeyword");
          return false
        } else {
          return true
        }
      }, this)
    }
  }

, fixVersionField: function(data, strict) {
    // allow "loose" semver 1.0 versions in non-strict mode
    // enforce strict semver 2.0 compliance in strict mode
    var loose = !strict
    if (!data.version) {
      data.version = ""
      return true
    }
    if (!semver.valid(data.version, loose)) {
      throw new Error('Invalid version: "'+ data.version + '"')
    }
    data.version = semver.clean(data.version, loose)
    return true
  }

, fixPeople: function(data) {
    modifyPeople(data, unParsePerson)
    modifyPeople(data, parsePerson)
  }

, fixNameField: function(data, options) {
    if (typeof options === "boolean") options = {strict: options}
    else if (typeof options === "undefined") options = {}
    var strict = options.strict
    if (!data.name && !strict) {
      data.name = ""
      return
    }
    if (typeof data.name !== "string") {
      throw new Error("name field must be a string.")
    }
    if (!strict)
      data.name = data.name.trim()
    ensureValidName(data.name, strict, options.allowLegacyCase)
    if (isBuiltinModule(data.name))
      this.warn("conflictingName", data.name)
  }


, fixDescriptionField: function (data) {
    if (data.description && typeof data.description !== 'string') {
      this.warn("nonStringDescription")
      delete data.description
    }
    if (data.readme && !data.description)
      data.description = extractDescription(data.readme)
      if(data.description === undefined) delete data.description;
    if (!data.description) this.warn("missingDescription")
  }

, fixReadmeField: function (data) {
    if (!data.readme) {
      this.warn("missingReadme")
      data.readme = "ERROR: No README data found!"
    }
  }

, fixBugsField: function(data) {
    if (!data.bugs && data.repository && data.repository.url) {
      var hosted = hostedGitInfo.fromUrl(data.repository.url)
      if(hosted && hosted.bugs()) {
        data.bugs = {url: hosted.bugs()}
      }
    }
    else if(data.bugs) {
      var emailRe = /^.+@.*\..+$/
      if(typeof data.bugs == "string") {
        if(emailRe.test(data.bugs))
          data.bugs = {email:data.bugs}
        else if(url.parse(data.bugs).protocol)
          data.bugs = {url: data.bugs}
        else
          this.warn("nonEmailUrlBugsString")
      }
      else {
        bugsTypos(data.bugs, this.warn)
        var oldBugs = data.bugs
        data.bugs = {}
        if(oldBugs.url) {
          if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol)
            data.bugs.url = oldBugs.url
          else
            this.warn("nonUrlBugsUrlField")
        }
        if(oldBugs.email) {
          if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email))
            data.bugs.email = oldBugs.email
          else
            this.warn("nonEmailBugsEmailField")
        }
      }
      if(!data.bugs.email && !data.bugs.url) {
        delete data.bugs
        this.warn("emptyNormalizedBugs")
      }
    }
  }

, fixHomepageField: function(data) {
    if (!data.homepage && data.repository && data.repository.url) {
      var hosted = hostedGitInfo.fromUrl(data.repository.url)
      if (hosted && hosted.docs()) data.homepage = hosted.docs()
    }
    if (!data.homepage) return

    if(typeof data.homepage !== "string") {
      this.warn("nonUrlHomepage")
      return delete data.homepage
    }
    if(!url.parse(data.homepage).protocol) {
      data.homepage = "http://" + data.homepage
    }
  }

, fixLicenseField: function(data) {
    if (!data.license) {
      return this.warn("missingLicense")
    } else{
      if (
        typeof(data.license) !== 'string' ||
        data.license.length < 1
      ) {
        this.warn("invalidLicense")
      } else {
        if (!validateLicense(data.license).validForNewPackages)
          this.warn("invalidLicense")
      }
    }
  }
}

function isValidScopedPackageName(spec) {
  if (spec.charAt(0) !== '@') return false

  var rest = spec.slice(1).split('/')
  if (rest.length !== 2) return false

  return rest[0] && rest[1] &&
    rest[0] === encodeURIComponent(rest[0]) &&
    rest[1] === encodeURIComponent(rest[1])
}

function isCorrectlyEncodedName(spec) {
  return !spec.match(/[\/@\s\+%:]/) &&
    spec === encodeURIComponent(spec)
}

function ensureValidName (name, strict, allowLegacyCase) {
  if (name.charAt(0) === "." ||
      !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) ||
      (strict && (!allowLegacyCase) && name !== name.toLowerCase()) ||
      name.toLowerCase() === "node_modules" ||
      name.toLowerCase() === "favicon.ico") {
        throw new Error("Invalid name: " + JSON.stringify(name))
  }
}

function modifyPeople (data, fn) {
  if (data.author) data.author = fn(data.author)
  ;["maintainers", "contributors"].forEach(function (set) {
    if (!Array.isArray(data[set])) return;
    data[set] = data[set].map(fn)
  })
  return data
}

function unParsePerson (person) {
  if (typeof person === "string") return person
  var name = person.name || ""
  var u = person.url || person.web
  var url = u ? (" ("+u+")") : ""
  var e = person.email || person.mail
  var email = e ? (" <"+e+">") : ""
  return name+email+url
}

function parsePerson (person) {
  if (typeof person !== "string") return person
  var name = person.match(/^([^\(<]+)/)
  var url = person.match(/\(([^\)]+)\)/)
  var email = person.match(/<([^>]+)>/)
  var obj = {}
  if (name && name[0].trim()) obj.name = name[0].trim()
  if (email) obj.email = email[1];
  if (url) obj.url = url[1];
  return obj
}

function addOptionalDepsToDeps (data, warn) {
  var o = data.optionalDependencies
  if (!o) return;
  var d = data.dependencies || {}
  Object.keys(o).forEach(function (k) {
    d[k] = o[k]
  })
  data.dependencies = d
}

function depObjectify (deps, type, warn) {
  if (!deps) return {}
  if (typeof deps === "string") {
    deps = deps.trim().split(/[\n\r\s\t ,]+/)
  }
  if (!Array.isArray(deps)) return deps
  warn("deprecatedArrayDependencies", type)
  var o = {}
  deps.filter(function (d) {
    return typeof d === "string"
  }).forEach(function(d) {
    d = d.trim().split(/(:?[@\s><=])/)
    var dn = d.shift()
    var dv = d.join("")
    dv = dv.trim()
    dv = dv.replace(/^@/, "")
    o[dn] = dv
  })
  return o
}

function objectifyDeps (data, warn) {
  depTypes.forEach(function (type) {
    if (!data[type]) return;
    data[type] = depObjectify(data[type], type, warn)
  })
}

function bugsTypos(bugs, warn) {
  if (!bugs) return
  Object.keys(bugs).forEach(function (k) {
    if (typos.bugs[k]) {
      warn("typo", k, typos.bugs[k], "bugs")
      bugs[typos.bugs[k]] = bugs[k]
      delete bugs[k]
    }
  })
}


/***/ }),
/* 971 */
/***/ (function(module, exports, __webpack_require__) {

var util = __webpack_require__(2)
var messages = __webpack_require__(512)

module.exports = function() {
  var args = Array.prototype.slice.call(arguments, 0)
  var warningName = args.shift()
  if (warningName == "typo") {
    return makeTypoWarning.apply(null,args)
  }
  else {
    var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'"
    args.unshift(msgTemplate)
    return util.format.apply(null, args)
  }
}

function makeTypoWarning (providedName, probableName, field) {
  if (field) {
    providedName = field + "['" + providedName + "']"
    probableName = field + "['" + probableName + "']"
  }
  return util.format(messages.typo, providedName, probableName)
}


/***/ }),
/* 972 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const path = __webpack_require__(0);
const pathKey = __webpack_require__(990);

module.exports = opts => {
	opts = Object.assign({
		cwd: process.cwd(),
		path: process.env[pathKey()]
	}, opts);

	let prev;
	let pth = path.resolve(opts.cwd);
	const ret = [];

	while (prev !== pth) {
		ret.push(path.join(pth, 'node_modules/.bin'));
		prev = pth;
		pth = path.resolve(pth, '..');
	}

	// ensure the running `node` binary is used
	ret.push(path.dirname(process.execPath));

	return ret.concat(opts.path).join(path.delimiter);
};

module.exports.env = opts => {
	opts = Object.assign({
		env: process.env
	}, opts);

	const env = Object.assign({}, opts.env);
	const path = pathKey({env});

	opts.path = env[path];
	env[path] = module.exports(opts);

	return env;
};


/***/ }),
/* 973 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = Number.isNaN || function (x) {
	return x !== x;
};


/***/ }),
/* 974 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {(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 = __webpack_require__(70).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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  };

  /*

  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);
    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);

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 975 */
/***/ (function(module, exports, __webpack_require__) {

var BN = __webpack_require__(974);
var stripHexPrefix = __webpack_require__(1080);

/**
 * Returns a BN object, converts a number value to a BN
 * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object
 * @return {Object} `output` BN object of the number
 * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number
 */
module.exports = function numberToBN(arg) {
  if (typeof arg === 'string' || typeof arg === 'number') {
    var multiplier = new BN(1); // eslint-disable-line
    var formattedString = String(arg).toLowerCase().trim();
    var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x';
    var stringArg = stripHexPrefix(formattedString); // eslint-disable-line
    if (stringArg.substr(0, 1) === '-') {
      stringArg = stripHexPrefix(stringArg.slice(1));
      multiplier = new BN(-1, 10);
    }
    stringArg = stringArg === '' ? '0' : stringArg;

    if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/))
      || stringArg.match(/^[a-fA-F]+$/)
      || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) {
      return new BN(stringArg, 16).mul(multiplier);
    }

    if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {
      return new BN(stringArg, 10).mul(multiplier);
    }
  } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) {
    if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {
      return new BN(arg.toString(10), 10);
    }
  }

  throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.');
}


/***/ }),
/* 976 */
/***/ (function(module, exports, __webpack_require__) {

var crypto = __webpack_require__(7)
  , qs = __webpack_require__(85)
  ;

function sha1 (key, body) {
  return crypto.createHmac('sha1', key).update(body).digest('base64')
}

function rsa (key, body) {
  return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64');
}

function rfc3986 (str) {
  return encodeURIComponent(str)
    .replace(/!/g,'%21')
    .replace(/\*/g,'%2A')
    .replace(/\(/g,'%28')
    .replace(/\)/g,'%29')
    .replace(/'/g,'%27')
    ;
}

// Maps object to bi-dimensional array
// Converts { foo: 'A', bar: [ 'b', 'B' ]} to
// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ]
function map (obj) {
  var key, val, arr = []
  for (key in obj) {
    val = obj[key]
    if (Array.isArray(val))
      for (var i = 0; i < val.length; i++)
        arr.push([key, val[i]])
    else if (typeof val === "object")
      for (var prop in val)
        arr.push([key + '[' + prop + ']', val[prop]]);
    else
      arr.push([key, val])
  }
  return arr
}

// Compare function for sort
function compare (a, b) {
  return a > b ? 1 : a < b ? -1 : 0
}

function generateBase (httpMethod, base_uri, params) {
  // adapted from https://dev.twitter.com/docs/auth/oauth and 
  // https://dev.twitter.com/docs/auth/creating-signature

  // Parameter normalization
  // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2
  var normalized = map(params)
  // 1.  First, the name and value of each parameter are encoded
  .map(function (p) {
    return [ rfc3986(p[0]), rfc3986(p[1] || '') ]
  })
  // 2.  The parameters are sorted by name, using ascending byte value
  //     ordering.  If two or more parameters share the same name, they
  //     are sorted by their value.
  .sort(function (a, b) {
    return compare(a[0], b[0]) || compare(a[1], b[1])
  })
  // 3.  The name of each parameter is concatenated to its corresponding
  //     value using an "=" character (ASCII code 61) as a separator, even
  //     if the value is empty.
  .map(function (p) { return p.join('=') })
   // 4.  The sorted name/value pairs are concatenated together into a
   //     single string by using an "&" character (ASCII code 38) as
   //     separator.
  .join('&')

  var base = [
    rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'),
    rfc3986(base_uri),
    rfc3986(normalized)
  ].join('&')

  return base
}

function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {
  var base = generateBase(httpMethod, base_uri, params)
  var key = [
    consumer_secret || '',
    token_secret || ''
  ].map(rfc3986).join('&')

  return sha1(key, base)
}

function rsasign (httpMethod, base_uri, params, private_key, token_secret) {
  var base = generateBase(httpMethod, base_uri, params)
  var key = private_key || ''

  return rsa(key, base)
}

function plaintext (consumer_secret, token_secret) {
  var key = [
    consumer_secret || '',
    token_secret || ''
  ].map(rfc3986).join('&')

  return key
}

function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) {
  var method
  var skipArgs = 1

  switch (signMethod) {
    case 'RSA-SHA1':
      method = rsasign
      break
    case 'HMAC-SHA1':
      method = hmacsign
      break
    case 'PLAINTEXT':
      method = plaintext
      skipArgs = 4
      break
    default:
     throw new Error("Signature method not supported: " + signMethod)
  }

  return method.apply(null, [].slice.call(arguments, skipArgs))
}

exports.hmacsign = hmacsign
exports.rsasign = rsasign
exports.plaintext = plaintext
exports.sign = sign
exports.rfc3986 = rfc3986
exports.generateBase = generateBase



/***/ }),
/* 977 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * object.omit <https://github.com/jonschlinkert/object.omit>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var isObject = __webpack_require__(896);
var forOwn = __webpack_require__(807);

module.exports = function omit(obj, keys) {
  if (!isObject(obj)) return {};

  keys = [].concat.apply([], [].slice.call(arguments, 1));
  var last = keys[keys.length - 1];
  var res = {}, fn;

  if (typeof last === 'function') {
    fn = keys.pop();
  }

  var isFunction = typeof fn === 'function';
  if (!keys.length && !isFunction) {
    return obj;
  }

  forOwn(obj, function(value, key) {
    if (keys.indexOf(key) === -1) {

      if (!isFunction) {
        res[key] = value;
      } else if (fn(value, key, obj)) {
        res[key] = value;
      }
    }
  });
  return res;
};


/***/ }),
/* 978 */
/***/ (function(module, exports, __webpack_require__) {

var os = __webpack_require__(5)
var osShim

'use strict';

// clone the 'os' module object to avoid mutations and unexpected behavior
module.exports = osShim = clone(os)

//
// apply the missing API
//

if (!os.tmpdir) {
  osShim.tmpdir = tmpdir
}

if (!os.platform) {
  osShim.platform = platform
}

if (!os.arch) {
  osShim.arch = arch
}

if (!os.endianness) {
  osShim.endianness = endianness
}

if (!os.EOL) {
  Object.defineProperty(osShim, 'EOL', {
    get: function () {
      return process.platform === 'win32' ? '\n\r' : '\n'
    }
  })
}

function tmpdir() {
  var isWindows = process.platform === 'win32'
  var env = process.env

  if (isWindows) {
    return env.TEMP ||
           env.TMP ||
           (env.SystemRoot || env.windir) + '\\temp';
  } else {
    return env.TMPDIR ||
           env.TMP ||
           env.TEMP ||
           '/tmp';
  }
}

function platform() {
  return process.platform
}

function arch() {
  return process.arch
}

function endianness() {
  var isEndianness = ((new Uint32Array((new Uint8Array([1,2,3,4])).buffer))[0] === 0x04030201)
  return isEndianness ? 'LE' : 'BE'
}

function clone(object) {
  var prop, cloneObj = {}
  for (prop in object) {
    if (object.hasOwnProperty(prop)) {
      cloneObj[prop] = object[prop]
    }
  }
  return cloneObj
}


/***/ }),
/* 979 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = (promise, onFinally) => {
	onFinally = onFinally || (() => {});

	return promise.then(
		val => new Promise(resolve => {
			resolve(onFinally());
		}).then(() => val),
		err => new Promise(resolve => {
			resolve(onFinally());
		}).then(() => {
			throw err;
		})
	);
};


/***/ }),
/* 980 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const pTry = __webpack_require__(982);

module.exports = concurrency => {
	if (concurrency < 1) {
		throw new TypeError('Expected `concurrency` to be a number from 1 and up');
	}

	const queue = [];
	let activeCount = 0;

	const next = () => {
		activeCount--;

		if (queue.length > 0) {
			queue.shift()();
		}
	};

	return fn => new Promise((resolve, reject) => {
		const run = () => {
			activeCount++;

			pTry(fn).then(
				val => {
					resolve(val);
					next();
				},
				err => {
					reject(err);
					next();
				}
			);
		};

		if (activeCount < concurrency) {
			run();
		} else {
			queue.push(run);
		}
	});
};


/***/ }),
/* 981 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const pLimit = __webpack_require__(980);

class EndError extends Error {
	constructor(value) {
		super();
		this.value = value;
	}
}

// the input can also be a promise, so we `Promise.all()` them both
const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0])));

module.exports = (iterable, tester, opts) => {
	opts = Object.assign({
		concurrency: Infinity,
		preserveOrder: true
	}, opts);

	const limit = pLimit(opts.concurrency);

	// start all the promises concurrently with optional limit
	const items = Array.from(iterable).map(el => [el, limit(() => Promise.resolve(el).then(tester))]);

	// check the promises either serially or concurrently
	const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity);

	return Promise.all(items.map(el => checkLimit(() => finder(el))))
		.then(() => {})
		.catch(err => err instanceof EndError ? err.value : Promise.reject(err));
};


/***/ }),
/* 982 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = cb => new Promise(resolve => {
	resolve(cb());
});


/***/ }),
/* 983 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * parse-glob <https://github.com/jonschlinkert/parse-glob>
 *
 * Copyright (c) 2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



var isGlob = __webpack_require__(96);
var findBase = __webpack_require__(857);
var extglob = __webpack_require__(163);
var dotfile = __webpack_require__(894);

/**
 * Expose `cache`
 */

var cache = module.exports.cache = {};

/**
 * Parse a glob pattern into tokens.
 *
 * When no paths or '**' are in the glob, we use a
 * different strategy for parsing the filename, since
 * file names can contain braces and other difficult
 * patterns. such as:
 *
 *  - `*.{a,b}`
 *  - `(**|*.js)`
 */

module.exports = function parseGlob(glob) {
  if (cache.hasOwnProperty(glob)) {
    return cache[glob];
  }

  var tok = {};
  tok.orig = glob;
  tok.is = {};

  // unescape dots and slashes in braces/brackets
  glob = escape(glob);

  var parsed = findBase(glob);
  tok.is.glob = parsed.isGlob;

  tok.glob = parsed.glob;
  tok.base = parsed.base;
  var segs = /([^\/]*)$/.exec(glob);

  tok.path = {};
  tok.path.dirname = '';
  tok.path.basename = segs[1] || '';
  tok.path.dirname = glob.split(tok.path.basename).join('') || '';
  var basename = (tok.path.basename || '').split('.') || '';
  tok.path.filename = basename[0] || '';
  tok.path.extname = basename.slice(1).join('.') || '';
  tok.path.ext = '';

  if (isGlob(tok.path.dirname) && !tok.path.basename) {
    if (!/\/$/.test(tok.glob)) {
      tok.path.basename = tok.glob;
    }
    tok.path.dirname = tok.base;
  }

  if (glob.indexOf('/') === -1 && !tok.is.globstar) {
    tok.path.dirname = '';
    tok.path.basename = tok.orig;
  }

  var dot = tok.path.basename.indexOf('.');
  if (dot !== -1) {
    tok.path.filename = tok.path.basename.slice(0, dot);
    tok.path.extname = tok.path.basename.slice(dot);
  }

  if (tok.path.extname.charAt(0) === '.') {
    var exts = tok.path.extname.split('.');
    tok.path.ext = exts[exts.length - 1];
  }

  // unescape dots and slashes in braces/brackets
  tok.glob = unescape(tok.glob);
  tok.path.dirname = unescape(tok.path.dirname);
  tok.path.basename = unescape(tok.path.basename);
  tok.path.filename = unescape(tok.path.filename);
  tok.path.extname = unescape(tok.path.extname);

  // Booleans
  var is = (glob && tok.is.glob);
  tok.is.negated  = glob && glob.charAt(0) === '!';
  tok.is.extglob  = glob && extglob(glob);
  tok.is.braces   = has(is, glob, '{');
  tok.is.brackets = has(is, glob, '[:');
  tok.is.globstar = has(is, glob, '**');
  tok.is.dotfile  = dotfile(tok.path.basename) || dotfile(tok.path.filename);
  tok.is.dotdir   = dotdir(tok.path.dirname);
  return (cache[glob] = tok);
}

/**
 * Returns true if the glob matches dot-directories.
 *
 * @param  {Object} `tok` The tokens object
 * @param  {Object} `path` The path object
 * @return {Object}
 */

function dotdir(base) {
  if (base.indexOf('/.') !== -1) {
    return true;
  }
  if (base.charAt(0) === '.' && base.charAt(1) !== '/') {
    return true;
  }
  return false;
}

/**
 * Returns true if the pattern has the given `ch`aracter(s)
 *
 * @param  {Object} `glob` The glob pattern.
 * @param  {Object} `ch` The character to test for
 * @return {Object}
 */

function has(is, glob, ch) {
  return is && glob.indexOf(ch) !== -1;
}

/**
 * Escape/unescape utils
 */

function escape(str) {
  var re = /\{([^{}]*?)}|\(([^()]*?)\)|\[([^\[\]]*?)\]/g;
  return str.replace(re, function (outter, braces, parens, brackets) {
    var inner = braces || parens || brackets;
    if (!inner) { return outter; }
    return outter.split(inner).join(esc(inner));
  });
}

function esc(str) {
  str = str.split('/').join('__SLASH__');
  str = str.split('.').join('__DOT__');
  return str;
}

function unescape(str) {
  str = str.split('__SLASH__').join('/');
  str = str.split('__DOT__').join('.');
  return str;
}


/***/ }),
/* 984 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var errorEx = __webpack_require__(725);
var fallback = __webpack_require__(985);

var JSONError = errorEx('JSONError', {
	fileName: errorEx.append('in %s')
});

module.exports = function (x, reviver, filename) {
	if (typeof reviver === 'string') {
		filename = reviver;
		reviver = null;
	}

	try {
		try {
			return JSON.parse(x, reviver);
		} catch (err) {
			fallback.parse(x, {
				mode: 'json',
				reviver: reviver
			});

			throw err;
		}
	} catch (err) {
		var jsonErr = new JSONError(err);

		if (filename) {
			jsonErr.fileName = filename;
		}

		throw jsonErr;
	}
};


/***/ }),
/* 985 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Author: Alex Kocharin <alex@kocharin.ru>
 * GIT: https://github.com/rlidwka/jju
 * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/
 */

// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

var Uni = __webpack_require__(986)

function isHexDigit(x) {
  return (x >= '0' && x <= '9')
      || (x >= 'A' && x <= 'F')
      || (x >= 'a' && x <= 'f')
}

function isOctDigit(x) {
  return x >= '0' && x <= '7'
}

function isDecDigit(x) {
  return x >= '0' && x <= '9'
}

var unescapeMap = {
  '\'': '\'',
  '"' : '"',
  '\\': '\\',
  'b' : '\b',
  'f' : '\f',
  'n' : '\n',
  'r' : '\r',
  't' : '\t',
  'v' : '\v',
  '/' : '/',
}

function formatError(input, msg, position, lineno, column, json5) {
  var result = msg + ' at ' + (lineno + 1) + ':' + (column + 1)
    , tmppos = position - column - 1
    , srcline = ''
    , underline = ''

  var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON

  // output no more than 70 characters before the wrong ones
  if (tmppos < position - 70) {
    tmppos = position - 70
  }

  while (1) {
    var chr = input[++tmppos]

    if (isLineTerminator(chr) || tmppos === input.length) {
      if (position >= tmppos) {
        // ending line error, so show it after the last char
        underline += '^'
      }
      break
    }
    srcline += chr

    if (position === tmppos) {
      underline += '^'
    } else if (position > tmppos) {
      underline += input[tmppos] === '\t' ? '\t' : ' '
    }

    // output no more than 78 characters on the string
    if (srcline.length > 78) break
  }

  return result + '\n' + srcline + '\n' + underline
}

function parse(input, options) {
  // parse as a standard JSON mode
  var json5 = !(options.mode === 'json' || options.legacy)
  var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON
  var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON

  var length = input.length
    , lineno = 0
    , linestart = 0
    , position = 0
    , stack = []

  var tokenStart = function() {}
  var tokenEnd = function(v) {return v}

  /* tokenize({
       raw: '...',
       type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline',
       value: 'number'|'string'|'whatever',
       path: [...],
     })
  */
  if (options._tokenize) {
    ;(function() {
      var start = null
      tokenStart = function() {
        if (start !== null) throw Error('internal error, token overlap')
        start = position
      }

      tokenEnd = function(v, type) {
        if (start != position) {
          var hash = {
            raw: input.substr(start, position-start),
            type: type,
            stack: stack.slice(0),
          }
          if (v !== undefined) hash.value = v
          options._tokenize.call(null, hash)
        }
        start = null
        return v
      }
    })()
  }

  function fail(msg) {
    var column = position - linestart

    if (!msg) {
      if (position < length) {
        var token = '\'' +
          JSON
            .stringify(input[position])
            .replace(/^"|"$/g, '')
            .replace(/'/g, "\\'")
            .replace(/\\"/g, '"')
          + '\''

        if (!msg) msg = 'Unexpected token ' + token
      } else {
        if (!msg) msg = 'Unexpected end of input'
      }
    }

    var error = SyntaxError(formatError(input, msg, position, lineno, column, json5))
    error.row = lineno + 1
    error.column = column + 1
    throw error
  }

  function newline(chr) {
    // account for <cr><lf>
    if (chr === '\r' && input[position] === '\n') position++
    linestart = position
    lineno++
  }

  function parseGeneric() {
    var result

    while (position < length) {
      tokenStart()
      var chr = input[position++]

      if (chr === '"' || (chr === '\'' && json5)) {
        return tokenEnd(parseString(chr), 'literal')

      } else if (chr === '{') {
        tokenEnd(undefined, 'separator')
        return parseObject()

      } else if (chr === '[') {
        tokenEnd(undefined, 'separator')
        return parseArray()

      } else if (chr === '-'
             ||  chr === '.'
             ||  isDecDigit(chr)
                 //           + number       Infinity          NaN
             ||  (json5 && (chr === '+' || chr === 'I' || chr === 'N'))
      ) {
        return tokenEnd(parseNumber(), 'literal')

      } else if (chr === 'n') {
        parseKeyword('null')
        return tokenEnd(null, 'literal')

      } else if (chr === 't') {
        parseKeyword('true')
        return tokenEnd(true, 'literal')

      } else if (chr === 'f') {
        parseKeyword('false')
        return tokenEnd(false, 'literal')

      } else {
        position--
        return tokenEnd(undefined)
      }
    }
  }

  function parseKey() {
    var result

    while (position < length) {
      tokenStart()
      var chr = input[position++]

      if (chr === '"' || (chr === '\'' && json5)) {
        return tokenEnd(parseString(chr), 'key')

      } else if (chr === '{') {
        tokenEnd(undefined, 'separator')
        return parseObject()

      } else if (chr === '[') {
        tokenEnd(undefined, 'separator')
        return parseArray()

      } else if (chr === '.'
             ||  isDecDigit(chr)
      ) {
        return tokenEnd(parseNumber(true), 'key')

      } else if (json5
             &&  Uni.isIdentifierStart(chr) || (chr === '\\' && input[position] === 'u')) {
        // unicode char or a unicode sequence
        var rollback = position - 1
        var result = parseIdentifier()

        if (result === undefined) {
          position = rollback
          return tokenEnd(undefined)
        } else {
          return tokenEnd(result, 'key')
        }

      } else {
        position--
        return tokenEnd(undefined)
      }
    }
  }

  function skipWhiteSpace() {
    tokenStart()
    while (position < length) {
      var chr = input[position++]

      if (isLineTerminator(chr)) {
        position--
        tokenEnd(undefined, 'whitespace')
        tokenStart()
        position++
        newline(chr)
        tokenEnd(undefined, 'newline')
        tokenStart()

      } else if (isWhiteSpace(chr)) {
        // nothing

      } else if (chr === '/'
             && json5
             && (input[position] === '/' || input[position] === '*')
      ) {
        position--
        tokenEnd(undefined, 'whitespace')
        tokenStart()
        position++
        skipComment(input[position++] === '*')
        tokenEnd(undefined, 'comment')
        tokenStart()

      } else {
        position--
        break
      }
    }
    return tokenEnd(undefined, 'whitespace')
  }

  function skipComment(multi) {
    while (position < length) {
      var chr = input[position++]

      if (isLineTerminator(chr)) {
        // LineTerminator is an end of singleline comment
        if (!multi) {
          // let parent function deal with newline
          position--
          return
        }

        newline(chr)

      } else if (chr === '*' && multi) {
        // end of multiline comment
        if (input[position] === '/') {
          position++
          return
        }

      } else {
        // nothing
      }
    }

    if (multi) {
      fail('Unclosed multiline comment')
    }
  }

  function parseKeyword(keyword) {
    // keyword[0] is not checked because it should've checked earlier
    var _pos = position
    var len = keyword.length
    for (var i=1; i<len; i++) {
      if (position >= length || keyword[i] != input[position]) {
        position = _pos-1
        fail()
      }
      position++
    }
  }

  function parseObject() {
    var result = options.null_prototype ? Object.create(null) : {}
      , empty_object = {}
      , is_non_empty = false

    while (position < length) {
      skipWhiteSpace()
      var item1 = parseKey()
      skipWhiteSpace()
      tokenStart()
      var chr = input[position++]
      tokenEnd(undefined, 'separator')

      if (chr === '}' && item1 === undefined) {
        if (!json5 && is_non_empty) {
          position--
          fail('Trailing comma in object')
        }
        return result

      } else if (chr === ':' && item1 !== undefined) {
        skipWhiteSpace()
        stack.push(item1)
        var item2 = parseGeneric()
        stack.pop()

        if (item2 === undefined) fail('No value found for key ' + item1)
        if (typeof(item1) !== 'string') {
          if (!json5 || typeof(item1) !== 'number') {
            fail('Wrong key type: ' + item1)
          }
        }

        if ((item1 in empty_object || empty_object[item1] != null) && options.reserved_keys !== 'replace') {
          if (options.reserved_keys === 'throw') {
            fail('Reserved key: ' + item1)
          } else {
            // silently ignore it
          }
        } else {
          if (typeof(options.reviver) === 'function') {
            item2 = options.reviver.call(null, item1, item2)
          }

          if (item2 !== undefined) {
            is_non_empty = true
            Object.defineProperty(result, item1, {
              value: item2,
              enumerable: true,
              configurable: true,
              writable: true,
            })
          }
        }

        skipWhiteSpace()

        tokenStart()
        var chr = input[position++]
        tokenEnd(undefined, 'separator')

        if (chr === ',') {
          continue

        } else if (chr === '}') {
          return result

        } else {
          fail()
        }

      } else {
        position--
        fail()
      }
    }

    fail()
  }

  function parseArray() {
    var result = []

    while (position < length) {
      skipWhiteSpace()
      stack.push(result.length)
      var item = parseGeneric()
      stack.pop()
      skipWhiteSpace()
      tokenStart()
      var chr = input[position++]
      tokenEnd(undefined, 'separator')

      if (item !== undefined) {
        if (typeof(options.reviver) === 'function') {
          item = options.reviver.call(null, String(result.length), item)
        }
        if (item === undefined) {
          result.length++
          item = true // hack for check below, not included into result
        } else {
          result.push(item)
        }
      }

      if (chr === ',') {
        if (item === undefined) {
          fail('Elisions are not supported')
        }

      } else if (chr === ']') {
        if (!json5 && item === undefined && result.length) {
          position--
          fail('Trailing comma in array')
        }
        return result

      } else {
        position--
        fail()
      }
    }
  }

  function parseNumber() {
    // rewind because we don't know first char
    position--

    var start = position
      , chr = input[position++]
      , t

    var to_num = function(is_octal) {
      var str = input.substr(start, position - start)

      if (is_octal) {
        var result = parseInt(str.replace(/^0o?/, ''), 8)
      } else {
        var result = Number(str)
      }

      if (Number.isNaN(result)) {
        position--
        fail('Bad numeric literal - "' + input.substr(start, position - start + 1) + '"')
      } else if (!json5 && !str.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) {
        // additional restrictions imposed by json
        position--
        fail('Non-json numeric literal - "' + input.substr(start, position - start + 1) + '"')
      } else {
        return result
      }
    }

    // ex: -5982475.249875e+29384
    //     ^ skipping this
    if (chr === '-' || (chr === '+' && json5)) chr = input[position++]

    if (chr === 'N' && json5) {
      parseKeyword('NaN')
      return NaN
    }

    if (chr === 'I' && json5) {
      parseKeyword('Infinity')

      // returning +inf or -inf
      return to_num()
    }

    if (chr >= '1' && chr <= '9') {
      // ex: -5982475.249875e+29384
      //        ^^^ skipping these
      while (position < length && isDecDigit(input[position])) position++
      chr = input[position++]
    }

    // special case for leading zero: 0.123456
    if (chr === '0') {
      chr = input[position++]

      //             new syntax, "0o777"           old syntax, "0777"
      var is_octal = chr === 'o' || chr === 'O' || isOctDigit(chr)
      var is_hex = chr === 'x' || chr === 'X'

      if (json5 && (is_octal || is_hex)) {
        while (position < length
           &&  (is_hex ? isHexDigit : isOctDigit)( input[position] )
        ) position++

        var sign = 1
        if (input[start] === '-') {
          sign = -1
          start++
        } else if (input[start] === '+') {
          start++
        }

        return sign * to_num(is_octal)
      }
    }

    if (chr === '.') {
      // ex: -5982475.249875e+29384
      //                ^^^ skipping these
      while (position < length && isDecDigit(input[position])) position++
      chr = input[position++]
    }

    if (chr === 'e' || chr === 'E') {
      chr = input[position++]
      if (chr === '-' || chr === '+') position++
      // ex: -5982475.249875e+29384
      //                       ^^^ skipping these
      while (position < length && isDecDigit(input[position])) position++
      chr = input[position++]
    }

    // we have char in the buffer, so count for it
    position--
    return to_num()
  }

  function parseIdentifier() {
    // rewind because we don't know first char
    position--

    var result = ''

    while (position < length) {
      var chr = input[position++]

      if (chr === '\\'
      &&  input[position] === 'u'
      &&  isHexDigit(input[position+1])
      &&  isHexDigit(input[position+2])
      &&  isHexDigit(input[position+3])
      &&  isHexDigit(input[position+4])
      ) {
        // UnicodeEscapeSequence
        chr = String.fromCharCode(parseInt(input.substr(position+1, 4), 16))
        position += 5
      }

      if (result.length) {
        // identifier started
        if (Uni.isIdentifierPart(chr)) {
          result += chr
        } else {
          position--
          return result
        }

      } else {
        if (Uni.isIdentifierStart(chr)) {
          result += chr
        } else {
          return undefined
        }
      }
    }

    fail()
  }

  function parseString(endChar) {
    // 7.8.4 of ES262 spec
    var result = ''

    while (position < length) {
      var chr = input[position++]

      if (chr === endChar) {
        return result

      } else if (chr === '\\') {
        if (position >= length) fail()
        chr = input[position++]

        if (unescapeMap[chr] && (json5 || (chr != 'v' && chr != "'"))) {
          result += unescapeMap[chr]

        } else if (json5 && isLineTerminator(chr)) {
          // line continuation
          newline(chr)

        } else if (chr === 'u' || (chr === 'x' && json5)) {
          // unicode/character escape sequence
          var off = chr === 'u' ? 4 : 2

          // validation for \uXXXX
          for (var i=0; i<off; i++) {
            if (position >= length) fail()
            if (!isHexDigit(input[position])) fail('Bad escape sequence')
            position++
          }

          result += String.fromCharCode(parseInt(input.substr(position-off, off), 16))
        } else if (json5 && isOctDigit(chr)) {
          if (chr < '4' && isOctDigit(input[position]) && isOctDigit(input[position+1])) {
            // three-digit octal
            var digits = 3
          } else if (isOctDigit(input[position])) {
            // two-digit octal
            var digits = 2
          } else {
            var digits = 1
          }
          position += digits - 1
          result += String.fromCharCode(parseInt(input.substr(position-digits, digits), 8))
          /*if (!isOctDigit(input[position])) {
            // \0 is allowed still
            result += '\0'
          } else {
            fail('Octal literals are not supported')
          }*/

        } else if (json5) {
          // \X -> x
          result += chr

        } else {
          position--
          fail()
        }

      } else if (isLineTerminator(chr)) {
        fail()

      } else {
        if (!json5 && chr.charCodeAt(0) < 32) {
          position--
          fail('Unexpected control character')
        }

        // SourceCharacter but not one of " or \ or LineTerminator
        result += chr
      }
    }

    fail()
  }

  skipWhiteSpace()
  var return_value = parseGeneric()
  if (return_value !== undefined || position < length) {
    skipWhiteSpace()

    if (position >= length) {
      if (typeof(options.reviver) === 'function') {
        return_value = options.reviver.call(null, '', return_value)
      }
      return return_value
    } else {
      fail()
    }

  } else {
    if (position) {
      fail('No data, only a whitespace')
    } else {
      fail('No data, empty input')
    }
  }
}

/*
 * parse(text, options)
 * or
 * parse(text, reviver)
 *
 * where:
 * text - string
 * options - object
 * reviver - function
 */
module.exports.parse = function parseJSON(input, options) {
  // support legacy functions
  if (typeof(options) === 'function') {
    options = {
      reviver: options
    }
  }

  if (input === undefined) {
    // parse(stringify(x)) should be equal x
    // with JSON functions it is not 'cause of undefined
    // so we're fixing it
    return undefined
  }

  // JSON.parse compat
  if (typeof(input) !== 'string') input = String(input)
  if (options == null) options = {}
  if (options.reserved_keys == null) options.reserved_keys = 'ignore'

  if (options.reserved_keys === 'throw' || options.reserved_keys === 'ignore') {
    if (options.null_prototype == null) {
      options.null_prototype = true
    }
  }

  try {
    return parse(input, options)
  } catch(err) {
    // jju is a recursive parser, so JSON.parse("{{{{{{{") could blow up the stack
    //
    // this catch is used to skip all those internal calls
    if (err instanceof SyntaxError && err.row != null && err.column != null) {
      var old_err = err
      err = SyntaxError(old_err.message)
      err.column = old_err.column
      err.row = old_err.row
    }
    throw err
  }
}

module.exports.tokenize = function tokenizeJSON(input, options) {
  if (options == null) options = {}

  options._tokenize = function(smth) {
    if (options._addstack) smth.stack.unshift.apply(smth.stack, options._addstack)
    tokens.push(smth)
  }

  var tokens = []
  tokens.data = module.exports.parse(input, options)
  return tokens
}



/***/ }),
/* 986 */
/***/ (function(module, exports) {


// This is autogenerated with esprima tools, see:
// https://github.com/ariya/esprima/blob/master/esprima.js
//
// PS: oh God, I hate Unicode

// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart:

var Uni = module.exports

module.exports.isWhiteSpace = function isWhiteSpace(x) {
  // section 7.2, table 2
  return x === '\u0020'
      || x === '\u00A0'
      || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one
      || (x >= '\u0009' && x <= '\u000D') // 9 A B C D

      // + whitespace characters from unicode, category Zs
      || x === '\u1680'
      || x === '\u180E'
      || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A
      || x === '\u2028'
      || x === '\u2029'
      || x === '\u202F'
      || x === '\u205F'
      || x === '\u3000'
}

module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) {
  return x === '\u0020'
      || x === '\u0009'
      || x === '\u000A'
      || x === '\u000D'
}

module.exports.isLineTerminator = function isLineTerminator(x) {
  // ok, here is the part when JSON is wrong
  // section 7.3, table 3
  return x === '\u000A'
      || x === '\u000D'
      || x === '\u2028'
      || x === '\u2029'
}

module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) {
  return x === '\u000A'
      || x === '\u000D'
}

module.exports.isIdentifierStart = function isIdentifierStart(x) {
  return x === '$'
      || x === '_'
      || (x >= 'A' && x <= 'Z')
      || (x >= 'a' && x <= 'z')
      || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x))
}

module.exports.isIdentifierPart = function isIdentifierPart(x) {
  return x === '$'
      || x === '_'
      || (x >= 'A' && x <= 'Z')
      || (x >= 'a' && x <= 'z')
      || (x >= '0' && x <= '9') // <-- addition to Start
      || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x))
}

module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/

// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart:

module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/


/***/ }),
/* 987 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * parseurl
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var url = __webpack_require__(8)
var parse = url.parse
var Url = url.Url

/**
 * Module exports.
 * @public
 */

module.exports = parseurl
module.exports.original = originalurl

/**
 * Parse the `req` url with memoization.
 *
 * @param {ServerRequest} req
 * @return {Object}
 * @public
 */

function parseurl (req) {
  var url = req.url

  if (url === undefined) {
    // URL is undefined
    return undefined
  }

  var parsed = req._parsedUrl

  if (fresh(url, parsed)) {
    // Return cached URL parse
    return parsed
  }

  // Parse the URL
  parsed = fastparse(url)
  parsed._raw = url

  return (req._parsedUrl = parsed)
};

/**
 * Parse the `req` original url with fallback and memoization.
 *
 * @param {ServerRequest} req
 * @return {Object}
 * @public
 */

function originalurl (req) {
  var url = req.originalUrl

  if (typeof url !== 'string') {
    // Fallback
    return parseurl(req)
  }

  var parsed = req._parsedOriginalUrl

  if (fresh(url, parsed)) {
    // Return cached URL parse
    return parsed
  }

  // Parse the URL
  parsed = fastparse(url)
  parsed._raw = url

  return (req._parsedOriginalUrl = parsed)
};

/**
 * Parse the `str` url with fast-path short-cut.
 *
 * @param {string} str
 * @return {Object}
 * @private
 */

function fastparse (str) {
  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {
    return parse(str)
  }

  var pathname = str
  var query = null
  var search = null

  // This takes the regexp from https://github.com/joyent/node/pull/7878
  // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/
  // And unrolls it into a for loop
  for (var i = 1; i < str.length; i++) {
    switch (str.charCodeAt(i)) {
      case 0x3f: /* ?  */
        if (search === null) {
          pathname = str.substring(0, i)
          query = str.substring(i + 1)
          search = str.substring(i)
        }
        break
      case 0x09: /* \t */
      case 0x0a: /* \n */
      case 0x0c: /* \f */
      case 0x0d: /* \r */
      case 0x20: /*    */
      case 0x23: /* #  */
      case 0xa0:
      case 0xfeff:
        return parse(str)
    }
  }

  var url = Url !== undefined
    ? new Url()
    : {}
  url.path = str
  url.href = str
  url.pathname = pathname
  url.query = query
  url.search = search

  return url
}

/**
 * Determine if parsed is still fresh for url.
 *
 * @param {string} url
 * @param {object} parsedUrl
 * @return {boolean}
 * @private
 */

function fresh (url, parsedUrl) {
  return typeof parsedUrl === 'object' &&
    parsedUrl !== null &&
    (Url === undefined || parsedUrl instanceof Url) &&
    parsedUrl._raw === url
}


/***/ }),
/* 988 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const fs = __webpack_require__(1);

module.exports = fp => new Promise(resolve => {
	fs.access(fp, err => {
		resolve(!err);
	});
});

module.exports.sync = fp => {
	try {
		fs.accessSync(fp);
		return true;
	} catch (err) {
		return false;
	}
};


/***/ }),
/* 989 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var path = __webpack_require__(0);

module.exports = function (thePath, potentialParent) {
    // For inside-directory checking, we want to allow trailing slashes, so normalize.
    thePath = stripTrailingSep(thePath);
    potentialParent = stripTrailingSep(potentialParent);

    // Node treats only Windows as case-insensitive in its path module; we follow those conventions.
    if (process.platform === "win32") {
        thePath = thePath.toLowerCase();
        potentialParent = potentialParent.toLowerCase();
    }

    return thePath.lastIndexOf(potentialParent, 0) === 0 &&
		(
			thePath[potentialParent.length] === path.sep ||
			thePath[potentialParent.length] === undefined
		);
};

function stripTrailingSep(thePath) {
    if (thePath[thePath.length - 1] === path.sep) {
        return thePath.slice(0, -1);
    }
    return thePath;
}


/***/ }),
/* 990 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = opts => {
	opts = opts || {};

	const env = opts.env || process.env;
	const platform = opts.platform || process.platform;

	if (platform !== 'win32') {
		return 'PATH';
	}

	return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';
};


/***/ }),
/* 991 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/* !
 * Chai - pathval utility
 * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
 * @see https://github.com/logicalparadox/filtr
 * MIT Licensed
 */

/**
 * ### .hasProperty(object, name)
 *
 * This allows checking whether an object has own
 * or inherited from prototype chain named property.
 *
 * Basically does the same thing as the `in`
 * operator but works properly with null/undefined values
 * and other primitives.
 *
 *     var obj = {
 *         arr: ['a', 'b', 'c']
 *       , str: 'Hello'
 *     }
 *
 * The following would be the results.
 *
 *     hasProperty(obj, 'str');  // true
 *     hasProperty(obj, 'constructor');  // true
 *     hasProperty(obj, 'bar');  // false
 *
 *     hasProperty(obj.str, 'length'); // true
 *     hasProperty(obj.str, 1);  // true
 *     hasProperty(obj.str, 5);  // false
 *
 *     hasProperty(obj.arr, 'length');  // true
 *     hasProperty(obj.arr, 2);  // true
 *     hasProperty(obj.arr, 3);  // false
 *
 * @param {Object} object
 * @param {String|Symbol} name
 * @returns {Boolean} whether it exists
 * @namespace Utils
 * @name hasProperty
 * @api public
 */

function hasProperty(obj, name) {
  if (typeof obj === 'undefined' || obj === null) {
    return false;
  }

  // The `in` operator does not work with primitives.
  return name in Object(obj);
}

/* !
 * ## parsePath(path)
 *
 * Helper function used to parse string object
 * paths. Use in conjunction with `internalGetPathValue`.
 *
 *      var parsed = parsePath('myobject.property.subprop');
 *
 * ### Paths:
 *
 * * Can be infinitely deep and nested.
 * * Arrays are also valid using the formal `myobject.document[3].property`.
 * * Literal dots and brackets (not delimiter) must be backslash-escaped.
 *
 * @param {String} path
 * @returns {Object} parsed
 * @api private
 */

function parsePath(path) {
  var str = path.replace(/([^\\])\[/g, '$1.[');
  var parts = str.match(/(\\\.|[^.]+?)+/g);
  return parts.map(function mapMatches(value) {
    var regexp = /^\[(\d+)\]$/;
    var mArr = regexp.exec(value);
    var parsed = null;
    if (mArr) {
      parsed = { i: parseFloat(mArr[1]) };
    } else {
      parsed = { p: value.replace(/\\([.\[\]])/g, '$1') };
    }

    return parsed;
  });
}

/* !
 * ## internalGetPathValue(obj, parsed[, pathDepth])
 *
 * Helper companion function for `.parsePath` that returns
 * the value located at the parsed address.
 *
 *      var value = getPathValue(obj, parsed);
 *
 * @param {Object} object to search against
 * @param {Object} parsed definition from `parsePath`.
 * @param {Number} depth (nesting level) of the property we want to retrieve
 * @returns {Object|Undefined} value
 * @api private
 */

function internalGetPathValue(obj, parsed, pathDepth) {
  var temporaryValue = obj;
  var res = null;
  pathDepth = (typeof pathDepth === 'undefined' ? parsed.length : pathDepth);

  for (var i = 0; i < pathDepth; i++) {
    var part = parsed[i];
    if (temporaryValue) {
      if (typeof part.p === 'undefined') {
        temporaryValue = temporaryValue[part.i];
      } else {
        temporaryValue = temporaryValue[part.p];
      }

      if (i === (pathDepth - 1)) {
        res = temporaryValue;
      }
    }
  }

  return res;
}

/* !
 * ## internalSetPathValue(obj, value, parsed)
 *
 * Companion function for `parsePath` that sets
 * the value located at a parsed address.
 *
 *  internalSetPathValue(obj, 'value', parsed);
 *
 * @param {Object} object to search and define on
 * @param {*} value to use upon set
 * @param {Object} parsed definition from `parsePath`
 * @api private
 */

function internalSetPathValue(obj, val, parsed) {
  var tempObj = obj;
  var pathDepth = parsed.length;
  var part = null;
  // Here we iterate through every part of the path
  for (var i = 0; i < pathDepth; i++) {
    var propName = null;
    var propVal = null;
    part = parsed[i];

    // If it's the last part of the path, we set the 'propName' value with the property name
    if (i === (pathDepth - 1)) {
      propName = typeof part.p === 'undefined' ? part.i : part.p;
      // Now we set the property with the name held by 'propName' on object with the desired val
      tempObj[propName] = val;
    } else if (typeof part.p !== 'undefined' && tempObj[part.p]) {
      tempObj = tempObj[part.p];
    } else if (typeof part.i !== 'undefined' && tempObj[part.i]) {
      tempObj = tempObj[part.i];
    } else {
      // If the obj doesn't have the property we create one with that name to define it
      var next = parsed[i + 1];
      // Here we set the name of the property which will be defined
      propName = typeof part.p === 'undefined' ? part.i : part.p;
      // Here we decide if this property will be an array or a new object
      propVal = typeof next.p === 'undefined' ? [] : {};
      tempObj[propName] = propVal;
      tempObj = tempObj[propName];
    }
  }
}

/**
 * ### .getPathInfo(object, path)
 *
 * This allows the retrieval of property info in an
 * object given a string path.
 *
 * The path info consists of an object with the
 * following properties:
 *
 * * parent - The parent object of the property referenced by `path`
 * * name - The name of the final property, a number if it was an array indexer
 * * value - The value of the property, if it exists, otherwise `undefined`
 * * exists - Whether the property exists or not
 *
 * @param {Object} object
 * @param {String} path
 * @returns {Object} info
 * @namespace Utils
 * @name getPathInfo
 * @api public
 */

function getPathInfo(obj, path) {
  var parsed = parsePath(path);
  var last = parsed[parsed.length - 1];
  var info = {
    parent: parsed.length > 1 ? internalGetPathValue(obj, parsed, parsed.length - 1) : obj,
    name: last.p || last.i,
    value: internalGetPathValue(obj, parsed),
  };
  info.exists = hasProperty(info.parent, info.name);

  return info;
}

/**
 * ### .getPathValue(object, path)
 *
 * This allows the retrieval of values in an
 * object given a string path.
 *
 *     var obj = {
 *         prop1: {
 *             arr: ['a', 'b', 'c']
 *           , str: 'Hello'
 *         }
 *       , prop2: {
 *             arr: [ { nested: 'Universe' } ]
 *           , str: 'Hello again!'
 *         }
 *     }
 *
 * The following would be the results.
 *
 *     getPathValue(obj, 'prop1.str'); // Hello
 *     getPathValue(obj, 'prop1.att[2]'); // b
 *     getPathValue(obj, 'prop2.arr[0].nested'); // Universe
 *
 * @param {Object} object
 * @param {String} path
 * @returns {Object} value or `undefined`
 * @namespace Utils
 * @name getPathValue
 * @api public
 */

function getPathValue(obj, path) {
  var info = getPathInfo(obj, path);
  return info.value;
}

/**
 * ### .setPathValue(object, path, value)
 *
 * Define the value in an object at a given string path.
 *
 * ```js
 * var obj = {
 *     prop1: {
 *         arr: ['a', 'b', 'c']
 *       , str: 'Hello'
 *     }
 *   , prop2: {
 *         arr: [ { nested: 'Universe' } ]
 *       , str: 'Hello again!'
 *     }
 * };
 * ```
 *
 * The following would be acceptable.
 *
 * ```js
 * var properties = require('tea-properties');
 * properties.set(obj, 'prop1.str', 'Hello Universe!');
 * properties.set(obj, 'prop1.arr[2]', 'B');
 * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' });
 * ```
 *
 * @param {Object} object
 * @param {String} path
 * @param {Mixed} value
 * @api private
 */

function setPathValue(obj, path, val) {
  var parsed = parsePath(path);
  internalSetPathValue(obj, val, parsed);
  return obj;
}

module.exports = {
  hasProperty: hasProperty,
  getPathInfo: getPathInfo,
  getPathValue: getPathValue,
  setPathValue: setPathValue,
};


/***/ }),
/* 992 */
/***/ (function(module, exports) {

// Generated by CoffeeScript 1.12.2
(function() {
  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;

  if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
    module.exports = function() {
      return performance.now();
    };
  } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
    module.exports = function() {
      return (getNanoSeconds() - nodeLoadTime) / 1e6;
    };
    hrtime = process.hrtime;
    getNanoSeconds = function() {
      var hr;
      hr = hrtime();
      return hr[0] * 1e9 + hr[1];
    };
    moduleLoadTime = getNanoSeconds();
    upTime = process.uptime() * 1e9;
    nodeLoadTime = moduleLoadTime - upTime;
  } else if (Date.now) {
    module.exports = function() {
      return Date.now() - loadTime;
    };
    loadTime = Date.now();
  } else {
    module.exports = function() {
      return new Date().getTime() - loadTime;
    };
    loadTime = new Date().getTime();
  }

}).call(this);

//# sourceMappingURL=performance-now.js.map


/***/ }),
/* 993 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var PENDING = 'pending';
var SETTLED = 'settled';
var FULFILLED = 'fulfilled';
var REJECTED = 'rejected';
var NOOP = function () {};
var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';

var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;
var asyncQueue = [];
var asyncTimer;

function asyncFlush() {
	// run promise callbacks
	for (var i = 0; i < asyncQueue.length; i++) {
		asyncQueue[i][0](asyncQueue[i][1]);
	}

	// reset async asyncQueue
	asyncQueue = [];
	asyncTimer = false;
}

function asyncCall(callback, arg) {
	asyncQueue.push([callback, arg]);

	if (!asyncTimer) {
		asyncTimer = true;
		asyncSetTimer(asyncFlush, 0);
	}
}

function invokeResolver(resolver, promise) {
	function resolvePromise(value) {
		resolve(promise, value);
	}

	function rejectPromise(reason) {
		reject(promise, reason);
	}

	try {
		resolver(resolvePromise, rejectPromise);
	} catch (e) {
		rejectPromise(e);
	}
}

function invokeCallback(subscriber) {
	var owner = subscriber.owner;
	var settled = owner._state;
	var value = owner._data;
	var callback = subscriber[settled];
	var promise = subscriber.then;

	if (typeof callback === 'function') {
		settled = FULFILLED;
		try {
			value = callback(value);
		} catch (e) {
			reject(promise, e);
		}
	}

	if (!handleThenable(promise, value)) {
		if (settled === FULFILLED) {
			resolve(promise, value);
		}

		if (settled === REJECTED) {
			reject(promise, value);
		}
	}
}

function handleThenable(promise, value) {
	var resolved;

	try {
		if (promise === value) {
			throw new TypeError('A promises callback cannot return that same promise.');
		}

		if (value && (typeof value === 'function' || typeof value === 'object')) {
			// then should be retrieved only once
			var then = value.then;

			if (typeof then === 'function') {
				then.call(value, function (val) {
					if (!resolved) {
						resolved = true;

						if (value === val) {
							fulfill(promise, val);
						} else {
							resolve(promise, val);
						}
					}
				}, function (reason) {
					if (!resolved) {
						resolved = true;

						reject(promise, reason);
					}
				});

				return true;
			}
		}
	} catch (e) {
		if (!resolved) {
			reject(promise, e);
		}

		return true;
	}

	return false;
}

function resolve(promise, value) {
	if (promise === value || !handleThenable(promise, value)) {
		fulfill(promise, value);
	}
}

function fulfill(promise, value) {
	if (promise._state === PENDING) {
		promise._state = SETTLED;
		promise._data = value;

		asyncCall(publishFulfillment, promise);
	}
}

function reject(promise, reason) {
	if (promise._state === PENDING) {
		promise._state = SETTLED;
		promise._data = reason;

		asyncCall(publishRejection, promise);
	}
}

function publish(promise) {
	promise._then = promise._then.forEach(invokeCallback);
}

function publishFulfillment(promise) {
	promise._state = FULFILLED;
	publish(promise);
}

function publishRejection(promise) {
	promise._state = REJECTED;
	publish(promise);
	if (!promise._handled && isNode) {
		global.process.emit('unhandledRejection', promise._data, promise);
	}
}

function notifyRejectionHandled(promise) {
	global.process.emit('rejectionHandled', promise);
}

/**
 * @class
 */
function Promise(resolver) {
	if (typeof resolver !== 'function') {
		throw new TypeError('Promise resolver ' + resolver + ' is not a function');
	}

	if (this instanceof Promise === false) {
		throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
	}

	this._then = [];

	invokeResolver(resolver, this);
}

Promise.prototype = {
	constructor: Promise,

	_state: PENDING,
	_then: null,
	_data: undefined,
	_handled: false,

	then: function (onFulfillment, onRejection) {
		var subscriber = {
			owner: this,
			then: new this.constructor(NOOP),
			fulfilled: onFulfillment,
			rejected: onRejection
		};

		if ((onRejection || onFulfillment) && !this._handled) {
			this._handled = true;
			if (this._state === REJECTED && isNode) {
				asyncCall(notifyRejectionHandled, this);
			}
		}

		if (this._state === FULFILLED || this._state === REJECTED) {
			// already resolved, call callback async
			asyncCall(invokeCallback, subscriber);
		} else {
			// subscribe
			this._then.push(subscriber);
		}

		return subscriber.then;
	},

	catch: function (onRejection) {
		return this.then(null, onRejection);
	}
};

Promise.all = function (promises) {
	if (!Array.isArray(promises)) {
		throw new TypeError('You must pass an array to Promise.all().');
	}

	return new Promise(function (resolve, reject) {
		var results = [];
		var remaining = 0;

		function resolver(index) {
			remaining++;
			return function (value) {
				results[index] = value;
				if (!--remaining) {
					resolve(results);
				}
			};
		}

		for (var i = 0, promise; i < promises.length; i++) {
			promise = promises[i];

			if (promise && typeof promise.then === 'function') {
				promise.then(resolver(i), reject);
			} else {
				results[i] = promise;
			}
		}

		if (!remaining) {
			resolve(results);
		}
	});
};

Promise.race = function (promises) {
	if (!Array.isArray(promises)) {
		throw new TypeError('You must pass an array to Promise.race().');
	}

	return new Promise(function (resolve, reject) {
		for (var i = 0, promise; i < promises.length; i++) {
			promise = promises[i];

			if (promise && typeof promise.then === 'function') {
				promise.then(resolve, reject);
			} else {
				resolve(promise);
			}
		}
	});
};

Promise.resolve = function (value) {
	if (value && typeof value === 'object' && value.constructor === Promise) {
		return value;
	}

	return new Promise(function (resolve) {
		resolve(value);
	});
};

Promise.reject = function (reason) {
	return new Promise(function (resolve, reject) {
		reject(reason);
	});
};

module.exports = Promise;


/***/ }),
/* 994 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * preserve <https://github.com/jonschlinkert/preserve>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT license.
 */



/**
 * Replace tokens in `str` with a temporary, heuristic placeholder.
 *
 * ```js
 * tokens.before('{a\\,b}');
 * //=> '{__ID1__}'
 * ```
 *
 * @param  {String} `str`
 * @return {String} String with placeholders.
 * @api public
 */

exports.before = function before(str, re) {
  return str.replace(re, function (match) {
    var id = randomize();
    cache[id] = match;
    return '__ID' + id + '__';
  });
};

/**
 * Replace placeholders in `str` with original tokens.
 *
 * ```js
 * tokens.after('{__ID1__}');
 * //=> '{a\\,b}'
 * ```
 *
 * @param  {String} `str` String with placeholders
 * @return {String} `str` String with original tokens.
 * @api public
 */

exports.after = function after(str) {
  return str.replace(/__ID(.{5})__/g, function (_, id) {
    return cache[id];
  });
};

function randomize() {
  return Math.random().toString().slice(2, 7);
}

var cache = {};

/***/ }),
/* 995 */
/***/ (function(module, exports, __webpack_require__) {

if (process.env.npm_package_name === 'pseudomap' &&
    process.env.npm_lifecycle_script === 'test')
  process.env.TEST_PSEUDOMAP = 'true'

if (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) {
  module.exports = Map
} else {
  module.exports = __webpack_require__(996)
}


/***/ }),
/* 996 */
/***/ (function(module, exports) {

var hasOwnProperty = Object.prototype.hasOwnProperty

module.exports = PseudoMap

function PseudoMap (set) {
  if (!(this instanceof PseudoMap)) // whyyyyyyy
    throw new TypeError("Constructor PseudoMap requires 'new'")

  this.clear()

  if (set) {
    if ((set instanceof PseudoMap) ||
        (typeof Map === 'function' && set instanceof Map))
      set.forEach(function (value, key) {
        this.set(key, value)
      }, this)
    else if (Array.isArray(set))
      set.forEach(function (kv) {
        this.set(kv[0], kv[1])
      }, this)
    else
      throw new TypeError('invalid argument')
  }
}

PseudoMap.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  Object.keys(this._data).forEach(function (k) {
    if (k !== 'size')
      fn.call(thisp, this._data[k].value, this._data[k].key)
  }, this)
}

PseudoMap.prototype.has = function (k) {
  return !!find(this._data, k)
}

PseudoMap.prototype.get = function (k) {
  var res = find(this._data, k)
  return res && res.value
}

PseudoMap.prototype.set = function (k, v) {
  set(this._data, k, v)
}

PseudoMap.prototype.delete = function (k) {
  var res = find(this._data, k)
  if (res) {
    delete this._data[res._index]
    this._data.size--
  }
}

PseudoMap.prototype.clear = function () {
  var data = Object.create(null)
  data.size = 0

  Object.defineProperty(this, '_data', {
    value: data,
    enumerable: false,
    configurable: true,
    writable: false
  })
}

Object.defineProperty(PseudoMap.prototype, 'size', {
  get: function () {
    return this._data.size
  },
  set: function (n) {},
  enumerable: true,
  configurable: true
})

PseudoMap.prototype.values =
PseudoMap.prototype.keys =
PseudoMap.prototype.entries = function () {
  throw new Error('iterators are not implemented in this version')
}

// Either identical, or both NaN
function same (a, b) {
  return a === b || a !== a && b !== b
}

function Entry (k, v, i) {
  this.key = k
  this.value = v
  this._index = i
}

function find (data, k) {
  for (var i = 0, s = '_' + k, key = s;
       hasOwnProperty.call(data, key);
       key = s + i++) {
    if (same(data[key].key, k))
      return data[key]
  }
}

function set (data, k, v) {
  for (var i = 0, s = '_' + k, key = s;
       hasOwnProperty.call(data, key);
       key = s + i++) {
    if (same(data[key].key, k)) {
      data[key].value = v
      return
    }
  }
  data.size++
  data[key] = new Entry(k, v, key)
}


/***/ }),
/* 997 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(391);

var has = Object.prototype.hasOwnProperty;

var defaults = {
    allowDots: false,
    allowPrototypes: false,
    arrayLimit: 20,
    decoder: utils.decode,
    delimiter: '&',
    depth: 5,
    parameterLimit: 1000,
    plainObjects: false,
    strictNullHandling: false
};

var parseValues = function parseQueryStringValues(str, options) {
    var obj = {};
    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str;
    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;
    var parts = cleanStr.split(options.delimiter, limit);

    for (var i = 0; i < parts.length; ++i) {
        var part = parts[i];

        var bracketEqualsPos = part.indexOf(']=');
        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;

        var key, val;
        if (pos === -1) {
            key = options.decoder(part, defaults.decoder);
            val = options.strictNullHandling ? null : '';
        } else {
            key = options.decoder(part.slice(0, pos), defaults.decoder);
            val = options.decoder(part.slice(pos + 1), defaults.decoder);
        }
        if (has.call(obj, key)) {
            obj[key] = [].concat(obj[key]).concat(val);
        } else {
            obj[key] = val;
        }
    }

    return obj;
};

var parseObject = function (chain, val, options) {
    var leaf = val;

    for (var i = chain.length - 1; i >= 0; --i) {
        var obj;
        var root = chain[i];

        if (root === '[]') {
            obj = [];
            obj = obj.concat(leaf);
        } else {
            obj = options.plainObjects ? Object.create(null) : {};
            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;
            var index = parseInt(cleanRoot, 10);
            if (
                !isNaN(index)
                && root !== cleanRoot
                && String(index) === cleanRoot
                && index >= 0
                && (options.parseArrays && index <= options.arrayLimit)
            ) {
                obj = [];
                obj[index] = leaf;
            } else {
                obj[cleanRoot] = leaf;
            }
        }

        leaf = obj;
    }

    return leaf;
};

var parseKeys = function parseQueryStringKeys(givenKey, val, options) {
    if (!givenKey) {
        return;
    }

    // Transform dot notation to bracket notation
    var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;

    // The regex chunks

    var brackets = /(\[[^[\]]*])/;
    var child = /(\[[^[\]]*])/g;

    // Get the parent

    var segment = brackets.exec(key);
    var parent = segment ? key.slice(0, segment.index) : key;

    // Stash the parent if it exists

    var keys = [];
    if (parent) {
        // If we aren't using plain objects, optionally prefix keys
        // that would overwrite object prototype properties
        if (!options.plainObjects && has.call(Object.prototype, parent)) {
            if (!options.allowPrototypes) {
                return;
            }
        }

        keys.push(parent);
    }

    // Loop through children appending to the array until we hit depth

    var i = 0;
    while ((segment = child.exec(key)) !== null && i < options.depth) {
        i += 1;
        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {
            if (!options.allowPrototypes) {
                return;
            }
        }
        keys.push(segment[1]);
    }

    // If there's a remainder, just add whatever is left

    if (segment) {
        keys.push('[' + key.slice(segment.index) + ']');
    }

    return parseObject(keys, val, options);
};

module.exports = function (str, opts) {
    var options = opts ? utils.assign({}, opts) : {};

    if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {
        throw new TypeError('Decoder has to be a function.');
    }

    options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;
    options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;
    options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;
    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;
    options.parseArrays = options.parseArrays !== false;
    options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;
    options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;
    options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;
    options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;
    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;
    options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;

    if (str === '' || str === null || typeof str === 'undefined') {
        return options.plainObjects ? Object.create(null) : {};
    }

    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
    var obj = options.plainObjects ? Object.create(null) : {};

    // Iterate over the keys and setup the new object

    var keys = Object.keys(tempObj);
    for (var i = 0; i < keys.length; ++i) {
        var key = keys[i];
        var newObj = parseKeys(key, tempObj[key], options);
        obj = utils.merge(obj, newObj, options);
    }

    return utils.compact(obj);
};


/***/ }),
/* 998 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(391);
var formats = __webpack_require__(389);

var arrayPrefixGenerators = {
    brackets: function brackets(prefix) { // eslint-disable-line func-name-matching
        return prefix + '[]';
    },
    indices: function indices(prefix, key) { // eslint-disable-line func-name-matching
        return prefix + '[' + key + ']';
    },
    repeat: function repeat(prefix) { // eslint-disable-line func-name-matching
        return prefix;
    }
};

var toISO = Date.prototype.toISOString;

var defaults = {
    delimiter: '&',
    encode: true,
    encoder: utils.encode,
    encodeValuesOnly: false,
    serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching
        return toISO.call(date);
    },
    skipNulls: false,
    strictNullHandling: false
};

var stringify = function stringify( // eslint-disable-line func-name-matching
    object,
    prefix,
    generateArrayPrefix,
    strictNullHandling,
    skipNulls,
    encoder,
    filter,
    sort,
    allowDots,
    serializeDate,
    formatter,
    encodeValuesOnly
) {
    var obj = object;
    if (typeof filter === 'function') {
        obj = filter(prefix, obj);
    } else if (obj instanceof Date) {
        obj = serializeDate(obj);
    } else if (obj === null) {
        if (strictNullHandling) {
            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;
        }

        obj = '';
    }

    if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {
        if (encoder) {
            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);
            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];
        }
        return [formatter(prefix) + '=' + formatter(String(obj))];
    }

    var values = [];

    if (typeof obj === 'undefined') {
        return values;
    }

    var objKeys;
    if (Array.isArray(filter)) {
        objKeys = filter;
    } else {
        var keys = Object.keys(obj);
        objKeys = sort ? keys.sort(sort) : keys;
    }

    for (var i = 0; i < objKeys.length; ++i) {
        var key = objKeys[i];

        if (skipNulls && obj[key] === null) {
            continue;
        }

        if (Array.isArray(obj)) {
            values = values.concat(stringify(
                obj[key],
                generateArrayPrefix(prefix, key),
                generateArrayPrefix,
                strictNullHandling,
                skipNulls,
                encoder,
                filter,
                sort,
                allowDots,
                serializeDate,
                formatter,
                encodeValuesOnly
            ));
        } else {
            values = values.concat(stringify(
                obj[key],
                prefix + (allowDots ? '.' + key : '[' + key + ']'),
                generateArrayPrefix,
                strictNullHandling,
                skipNulls,
                encoder,
                filter,
                sort,
                allowDots,
                serializeDate,
                formatter,
                encodeValuesOnly
            ));
        }
    }

    return values;
};

module.exports = function (object, opts) {
    var obj = object;
    var options = opts ? utils.assign({}, opts) : {};

    if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
        throw new TypeError('Encoder has to be a function.');
    }

    var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
    var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
    var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
    var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
    var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;
    var sort = typeof options.sort === 'function' ? options.sort : null;
    var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
    var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;
    var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;
    if (typeof options.format === 'undefined') {
        options.format = formats['default'];
    } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {
        throw new TypeError('Unknown format option provided.');
    }
    var formatter = formats.formatters[options.format];
    var objKeys;
    var filter;

    if (typeof options.filter === 'function') {
        filter = options.filter;
        obj = filter('', obj);
    } else if (Array.isArray(options.filter)) {
        filter = options.filter;
        objKeys = filter;
    }

    var keys = [];

    if (typeof obj !== 'object' || obj === null) {
        return '';
    }

    var arrayFormat;
    if (options.arrayFormat in arrayPrefixGenerators) {
        arrayFormat = options.arrayFormat;
    } else if ('indices' in options) {
        arrayFormat = options.indices ? 'indices' : 'repeat';
    } else {
        arrayFormat = 'indices';
    }

    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];

    if (!objKeys) {
        objKeys = Object.keys(obj);
    }

    if (sort) {
        objKeys.sort(sort);
    }

    for (var i = 0; i < objKeys.length; ++i) {
        var key = objKeys[i];

        if (skipNulls && obj[key] === null) {
            continue;
        }

        keys = keys.concat(stringify(
            obj[key],
            key,
            generateArrayPrefix,
            strictNullHandling,
            skipNulls,
            encode ? encoder : null,
            filter,
            sort,
            allowDots,
            serializeDate,
            formatter,
            encodeValuesOnly
        ));
    }

    var joined = keys.join(delimiter);
    var prefix = options.addQueryPrefix === true ? '?' : '';

    return joined.length > 0 ? prefix + joined : '';
};


/***/ }),
/* 999 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * randomatic <https://github.com/jonschlinkert/randomatic>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



var isNumber = __webpack_require__(1000);
var typeOf = __webpack_require__(1001);
var mathRandom = __webpack_require__(952);

/**
 * Expose `randomatic`
 */

module.exports = randomatic;
module.exports.isCrypto = !!mathRandom.cryptographic;

/**
 * Available mask characters
 */

var type = {
  lower: 'abcdefghijklmnopqrstuvwxyz',
  upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  number: '0123456789',
  special: '~!@#$%^&()_+-={}[];\',.'
};

type.all = type.lower + type.upper + type.number + type.special;

/**
 * Generate random character sequences of a specified `length`,
 * based on the given `pattern`.
 *
 * @param {String} `pattern` The pattern to use for generating the random string.
 * @param {String} `length` The length of the string to generate.
 * @param {String} `options`
 * @return {String}
 * @api public
 */

function randomatic(pattern, length, options) {
  if (typeof pattern === 'undefined') {
    throw new Error('randomatic expects a string or number.');
  }

  var custom = false;
  if (arguments.length === 1) {
    if (typeof pattern === 'string') {
      length = pattern.length;

    } else if (isNumber(pattern)) {
      options = {};
      length = pattern;
      pattern = '*';
    }
  }

  if (typeOf(length) === 'object' && length.hasOwnProperty('chars')) {
    options = length;
    pattern = options.chars;
    length = pattern.length;
    custom = true;
  }

  var opts = options || {};
  var mask = '';
  var res = '';

  // Characters to be used
  if (pattern.indexOf('?') !== -1) mask += opts.chars;
  if (pattern.indexOf('a') !== -1) mask += type.lower;
  if (pattern.indexOf('A') !== -1) mask += type.upper;
  if (pattern.indexOf('0') !== -1) mask += type.number;
  if (pattern.indexOf('!') !== -1) mask += type.special;
  if (pattern.indexOf('*') !== -1) mask += type.all;
  if (custom) mask += pattern;

  while (length--) {
    res += mask.charAt(parseInt(mathRandom() * mask.length, 10));
  }
  return res;
};


/***/ }),
/* 1000 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * is-number <https://github.com/jonschlinkert/is-number>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



module.exports = function isNumber(num) {
  var type = typeof num;

  if (type === 'string' || num instanceof String) {
    // an empty string would be coerced to true with the below logic
    if (!num.trim()) return false;
  } else if (type !== 'number' && !(num instanceof Number)) {
    return false;
  }

  return (num - num + 1) >= 0;
};


/***/ }),
/* 1001 */
/***/ (function(module, exports) {

var toString = Object.prototype.toString;

module.exports = function kindOf(val) {
  if (val === void 0) return 'undefined';
  if (val === null) return 'null';

  var type = typeof val;
  if (type === 'boolean') return 'boolean';
  if (type === 'string') return 'string';
  if (type === 'number') return 'number';
  if (type === 'symbol') return 'symbol';
  if (type === 'function') {
    return isGeneratorFn(val) ? 'generatorfunction' : 'function';
  }

  if (isArray(val)) return 'array';
  if (isBuffer(val)) return 'buffer';
  if (isArguments(val)) return 'arguments';
  if (isDate(val)) return 'date';
  if (isError(val)) return 'error';
  if (isRegexp(val)) return 'regexp';

  switch (ctorName(val)) {
    case 'Symbol': return 'symbol';
    case 'Promise': return 'promise';

    // Set, Map, WeakSet, WeakMap
    case 'WeakMap': return 'weakmap';
    case 'WeakSet': return 'weakset';
    case 'Map': return 'map';
    case 'Set': return 'set';

    // 8-bit typed arrays
    case 'Int8Array': return 'int8array';
    case 'Uint8Array': return 'uint8array';
    case 'Uint8ClampedArray': return 'uint8clampedarray';

    // 16-bit typed arrays
    case 'Int16Array': return 'int16array';
    case 'Uint16Array': return 'uint16array';

    // 32-bit typed arrays
    case 'Int32Array': return 'int32array';
    case 'Uint32Array': return 'uint32array';
    case 'Float32Array': return 'float32array';
    case 'Float64Array': return 'float64array';
  }

  if (isGeneratorObj(val)) {
    return 'generator';
  }

  // Non-plain objects
  type = toString.call(val);
  switch (type) {
    case '[object Object]': return 'object';
    // iterators
    case '[object Map Iterator]': return 'mapiterator';
    case '[object Set Iterator]': return 'setiterator';
    case '[object String Iterator]': return 'stringiterator';
    case '[object Array Iterator]': return 'arrayiterator';
  }

  // other
  return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
};

function ctorName(val) {
  return val.constructor ? val.constructor.name : null;
}

function isArray(val) {
  if (Array.isArray) return Array.isArray(val);
  return val instanceof Array;
}

function isError(val) {
  return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');
}

function isDate(val) {
  if (val instanceof Date) return true;
  return typeof val.toDateString === 'function'
    && typeof val.getDate === 'function'
    && typeof val.setDate === 'function';
}

function isRegexp(val) {
  if (val instanceof RegExp) return true;
  return typeof val.flags === 'string'
    && typeof val.ignoreCase === 'boolean'
    && typeof val.multiline === 'boolean'
    && typeof val.global === 'boolean';
}

function isGeneratorFn(name, val) {
  return ctorName(name) === 'GeneratorFunction';
}

function isGeneratorObj(val) {
  return typeof val.throw === 'function'
    && typeof val.return === 'function'
    && typeof val.next === 'function';
}

function isArguments(val) {
  try {
    if (typeof val.length === 'number' && typeof val.callee === 'function') {
      return true;
    }
  } catch (err) {
    if (err.message.indexOf('callee') !== -1) {
      return true;
    }
  }
  return false;
}

/**
 * If you need to support Safari 5-7 (8-10 yr-old browser),
 * take a look at https://github.com/feross/is-buffer
 */

function isBuffer(val) {
  if (val.constructor && typeof val.constructor.isBuffer === 'function') {
    return val.constructor.isBuffer(val);
  }
  return false;
}


/***/ }),
/* 1002 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * range-parser
 * Copyright(c) 2012-2014 TJ Holowaychuk
 * Copyright(c) 2015-2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = rangeParser

/**
 * Parse "Range" header `str` relative to the given file `size`.
 *
 * @param {Number} size
 * @param {String} str
 * @param {Object} [options]
 * @return {Array}
 * @public
 */

function rangeParser (size, str, options) {
  var index = str.indexOf('=')

  if (index === -1) {
    return -2
  }

  // split the range string
  var arr = str.slice(index + 1).split(',')
  var ranges = []

  // add ranges type
  ranges.type = str.slice(0, index)

  // parse all ranges
  for (var i = 0; i < arr.length; i++) {
    var range = arr[i].split('-')
    var start = parseInt(range[0], 10)
    var end = parseInt(range[1], 10)

    // -nnn
    if (isNaN(start)) {
      start = size - end
      end = size - 1
    // nnn-
    } else if (isNaN(end)) {
      end = size - 1
    }

    // limit last-byte-pos to current length
    if (end > size - 1) {
      end = size - 1
    }

    // invalid or unsatisifiable
    if (isNaN(start) || isNaN(end) || start > end || start < 0) {
      continue
    }

    // add range
    ranges.push({
      start: start,
      end: end
    })
  }

  if (ranges.length < 1) {
    // unsatisifiable
    return -1
  }

  return options && options.combine
    ? combineRanges(ranges)
    : ranges
}

/**
 * Combine overlapping & adjacent ranges.
 * @private
 */

function combineRanges (ranges) {
  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)

  for (var j = 0, i = 1; i < ordered.length; i++) {
    var range = ordered[i]
    var current = ordered[j]

    if (range.start > current.end + 1) {
      // next range
      ordered[++j] = range
    } else if (range.end > current.end) {
      // extend range
      current.end = range.end
      current.index = Math.min(current.index, range.index)
    }
  }

  // trim ordered array
  ordered.length = j + 1

  // generate combined range
  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)

  // copy ranges type
  combined.type = ranges.type

  return combined
}

/**
 * Map function to add index value to ranges.
 * @private
 */

function mapWithIndex (range, index) {
  return {
    start: range.start,
    end: range.end,
    index: index
  }
}

/**
 * Map function to remove index value from ranges.
 * @private
 */

function mapWithoutIndex (range) {
  return {
    start: range.start,
    end: range.end
  }
}

/**
 * Sort function to sort ranges by index.
 * @private
 */

function sortByRangeIndex (a, b) {
  return a.index - b.index
}

/**
 * Sort function to sort ranges by start position.
 * @private
 */

function sortByRangeStart (a, b) {
  return a.start - b.start
}


/***/ }),
/* 1003 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 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.



module.exports = PassThrough;

var Transform = __webpack_require__(393);

/*<replacement>*/
var util = __webpack_require__(90);
util.inherits = __webpack_require__(54);
/*</replacement>*/

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);
};

/***/ }),
/* 1004 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Buffer = __webpack_require__(55).Buffer;
var util = __webpack_require__(2);

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;
  };
}

/***/ }),
/* 1005 */
/***/ (function(module, exports, __webpack_require__) {

var Stream = __webpack_require__(22);
if (process.env.READABLE_STREAM === 'disable' && Stream) {
  module.exports = Stream;
  exports = module.exports = Stream.Readable;
  exports.Readable = Stream.Readable;
  exports.Writable = Stream.Writable;
  exports.Duplex = Stream.Duplex;
  exports.Transform = Stream.Transform;
  exports.PassThrough = Stream.PassThrough;
  exports.Stream = Stream;
} else {
  exports = module.exports = __webpack_require__(392);
  exports.Stream = Stream || exports;
  exports.Readable = exports;
  exports.Writable = __webpack_require__(394);
  exports.Duplex = __webpack_require__(99);
  exports.Transform = __webpack_require__(393);
  exports.PassThrough = __webpack_require__(1003);
}


/***/ }),
/* 1006 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var si =  __webpack_require__(414);
var stream = __webpack_require__(1005);
var util = __webpack_require__(2);

var Readable = stream.Readable;

module.exports = ReaddirpReadable;

util.inherits(ReaddirpReadable, Readable);

function ReaddirpReadable (opts) {
  if (!(this instanceof ReaddirpReadable)) return new ReaddirpReadable(opts);

  opts = opts || {};

  opts.objectMode = true;
  Readable.call(this, opts);

  // backpressure not implemented at this point
  this.highWaterMark = Infinity;

  this._destroyed = false;
  this._paused = false;
  this._warnings = [];
  this._errors = [];

  this._pauseResumeErrors();
}

var proto = ReaddirpReadable.prototype;

proto._pauseResumeErrors = function () {
  var self = this;
  self.on('pause', function () { self._paused = true });
  self.on('resume', function () {
    if (self._destroyed) return;
    self._paused = false;

    self._warnings.forEach(function (err) { self.emit('warn', err) });
    self._warnings.length = 0;

    self._errors.forEach(function (err) { self.emit('error', err) });
    self._errors.length = 0;
  })
}

// called for each entry
proto._processEntry = function (entry) {
  if (this._destroyed) return;
  this.push(entry);
}

proto._read = function () { }

proto.destroy = function () {
  // when stream is destroyed it will emit nothing further, not even errors or warnings
  this.push(null);
  this.readable = false;
  this._destroyed = true;
  this.emit('close');
}

proto._done = function () {
  this.push(null);
}

// we emit errors and warnings async since we may handle errors like invalid args
// within the initial event loop before any event listeners subscribed
proto._handleError = function (err) {
  var self = this;
  si(function () {
    if (self._paused) return self._warnings.push(err);
    if (!self._destroyed) self.emit('warn', err);
  });
}

proto._handleFatalError = function (err) {
  var self = this;
  si(function () {
    if (self._paused) return self._errors.push(err);
    if (!self._destroyed) self.emit('error', err);
  });
}

function createStreamAPI () {
  var stream = new ReaddirpReadable();

  return {
      stream           :  stream
    , processEntry     :  stream._processEntry.bind(stream)
    , done             :  stream._done.bind(stream)
    , handleError      :  stream._handleError.bind(stream)
    , handleFatalError :  stream._handleFatalError.bind(stream)
  };
}

module.exports = createStreamAPI;


/***/ }),
/* 1007 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = createCLILogger;
var colors = __webpack_require__(1017);

// gets top level keys and prints them in format
var topLevel = function topLevel(obj, rightArrow) {
  var formatted = '';
  Object.keys(obj).forEach(function (key) {
    if (key.length > 0) {
      formatted += rightArrow + ' ' + key + ' ';
    }
    if (obj.hasOwnProperty(key)) {
      formatted += JSON.stringify(obj[key]) + '\n';
    }
  });

  return formatted;
};

var renderToConsole = function renderToConsole(obj, rightArrow) {
  try {
    return topLevel(obj, rightArrow);
  } catch (e) {
    return obj;
  }
};

function createCLILogger(options) {
  var _options$downArrow = options.downArrow,
      downArrow = _options$downArrow === undefined ? '▼' : _options$downArrow,
      _options$rightArrow = options.rightArrow,
      rightArrow = _options$rightArrow === undefined ? '▶' : _options$rightArrow,
      _options$messageColor = options.messageColor,
      messageColor = _options$messageColor === undefined ? 'yellow' : _options$messageColor,
      _options$prevColor = options.prevColor,
      prevColor = _options$prevColor === undefined ? 'grey' : _options$prevColor,
      _options$actionColor = options.actionColor,
      actionColor = _options$actionColor === undefined ? 'blue' : _options$actionColor,
      _options$nextColor = options.nextColor,
      nextColor = _options$nextColor === undefined ? 'green' : _options$nextColor,
      _options$predicate = options.predicate,
      predicate = _options$predicate === undefined ? null : _options$predicate,
      _options$log = options.log,
      log = _options$log === undefined ? console.log : _options$log,
      _options$stateTransfo = options.stateTransformer,
      stateTransformer = _options$stateTransfo === undefined ? function (x) {
    return x;
  } : _options$stateTransfo,
      _options$actionTransf = options.actionTransformer,
      actionTransformer = _options$actionTransf === undefined ? function (x) {
    return x;
  } : _options$actionTransf;


  return function (store) {
    return function (next) {
      return function (action) {
        var getState = store.getState;


        if (predicate && !predicate(getState, action)) {
          return next(action);
        }

        if (typeof console === 'undefined') {
          return next(action);
        }

        var prevState = renderToConsole(stateTransformer(getState()), rightArrow);
        var actionDisplay = renderToConsole(actionTransformer(action), rightArrow);
        var returnValue = next(action);
        var nextState = renderToConsole(stateTransformer(getState()), rightArrow);
        var time = new Date();

        var h = padLeft(time.getHours(), 2, "0");
        var m = padLeft(time.getMinutes(), 2, "0");
        var s = padLeft(time.getSeconds(), 2, "0");
        var message = downArrow + ' action ' + action.type + ' @ ' + h + ':' + m + ':' + s;

        var output = colors[messageColor](message) + '\n' + ('  ' + colors[prevColor]('prev state\n' + prevState)) + ('  ' + colors[actionColor]('action\n' + actionDisplay)) + ('  ' + colors[nextColor]('next\n' + nextState));

        log(output);
        return returnValue;
      };
    };
  };
}

function padLeft(input, len, filler) {
  var output = "" + input;
  while (output.length < len) {
    output = filler + output;
  }
  return output;
}

/***/ }),
/* 1008 */
/***/ (function(module, exports) {

module['exports'] = function runTheTrap(text, options) {
  var result = '';
  text = text || 'Run the trap, drop the bass';
  text = text.split('');
  var trap = {
    a: ['\u0040', '\u0104', '\u023a', '\u0245', '\u0394', '\u039b', '\u0414'],
    b: ['\u00df', '\u0181', '\u0243', '\u026e', '\u03b2', '\u0e3f'],
    c: ['\u00a9', '\u023b', '\u03fe'],
    d: ['\u00d0', '\u018a', '\u0500', '\u0501', '\u0502', '\u0503'],
    e: ['\u00cb', '\u0115', '\u018e', '\u0258', '\u03a3', '\u03be', '\u04bc',
         '\u0a6c'],
    f: ['\u04fa'],
    g: ['\u0262'],
    h: ['\u0126', '\u0195', '\u04a2', '\u04ba', '\u04c7', '\u050a'],
    i: ['\u0f0f'],
    j: ['\u0134'],
    k: ['\u0138', '\u04a0', '\u04c3', '\u051e'],
    l: ['\u0139'],
    m: ['\u028d', '\u04cd', '\u04ce', '\u0520', '\u0521', '\u0d69'],
    n: ['\u00d1', '\u014b', '\u019d', '\u0376', '\u03a0', '\u048a'],
    o: ['\u00d8', '\u00f5', '\u00f8', '\u01fe', '\u0298', '\u047a', '\u05dd',
         '\u06dd', '\u0e4f'],
    p: ['\u01f7', '\u048e'],
    q: ['\u09cd'],
    r: ['\u00ae', '\u01a6', '\u0210', '\u024c', '\u0280', '\u042f'],
    s: ['\u00a7', '\u03de', '\u03df', '\u03e8'],
    t: ['\u0141', '\u0166', '\u0373'],
    u: ['\u01b1', '\u054d'],
    v: ['\u05d8'],
    w: ['\u0428', '\u0460', '\u047c', '\u0d70'],
    x: ['\u04b2', '\u04fe', '\u04fc', '\u04fd'],
    y: ['\u00a5', '\u04b0', '\u04cb'],
    z: ['\u01b5', '\u0240'],
  };
  text.forEach(function(c) {
    c = c.toLowerCase();
    var chars = trap[c] || [' '];
    var rand = Math.floor(Math.random() * chars.length);
    if (typeof trap[c] !== 'undefined') {
      result += trap[c][rand];
    } else {
      result += c;
    }
  });
  return result;
};


/***/ }),
/* 1009 */
/***/ (function(module, exports) {

// please no
module['exports'] = function zalgo(text, options) {
  text = text || '   he is here   ';
  var soul = {
    'up': [
      '̍', '̎', '̄', '̅',
      '̿', '̑', '̆', '̐',
      '͒', '͗', '͑', '̇',
      '̈', '̊', '͂', '̓',
      '̈', '͊', '͋', '͌',
      '̃', '̂', '̌', '͐',
      '̀', '́', '̋', '̏',
      '̒', '̓', '̔', '̽',
      '̉', 'ͣ', 'ͤ', 'ͥ',
      'ͦ', 'ͧ', 'ͨ', 'ͩ',
      'ͪ', 'ͫ', 'ͬ', 'ͭ',
      'ͮ', 'ͯ', '̾', '͛',
      '͆', '̚',
    ],
    'down': [
      '̖', '̗', '̘', '̙',
      '̜', '̝', '̞', '̟',
      '̠', '̤', '̥', '̦',
      '̩', '̪', '̫', '̬',
      '̭', '̮', '̯', '̰',
      '̱', '̲', '̳', '̹',
      '̺', '̻', '̼', 'ͅ',
      '͇', '͈', '͉', '͍',
      '͎', '͓', '͔', '͕',
      '͖', '͙', '͚', '̣',
    ],
    'mid': [
      '̕', '̛', '̀', '́',
      '͘', '̡', '̢', '̧',
      '̨', '̴', '̵', '̶',
      '͜', '͝', '͞',
      '͟', '͠', '͢', '̸',
      '̷', '͡', ' ҉',
    ],
  };
  var all = [].concat(soul.up, soul.down, soul.mid);

  function randomNumber(range) {
    var r = Math.floor(Math.random() * range);
    return r;
  }

  function isChar(character) {
    var bool = false;
    all.filter(function(i) {
      bool = (i === character);
    });
    return bool;
  }


  function heComes(text, options) {
    var result = '';
    var counts;
    var l;
    options = options || {};
    options['up'] =
      typeof options['up'] !== 'undefined' ? options['up'] : true;
    options['mid'] =
      typeof options['mid'] !== 'undefined' ? options['mid'] : true;
    options['down'] =
      typeof options['down'] !== 'undefined' ? options['down'] : true;
    options['size'] =
      typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';
    text = text.split('');
    for (l in text) {
      if (isChar(l)) {
        continue;
      }
      result = result + text[l];
      counts = {'up': 0, 'down': 0, 'mid': 0};
      switch (options.size) {
      case 'mini':
        counts.up = randomNumber(8);
        counts.mid = randomNumber(2);
        counts.down = randomNumber(8);
        break;
      case 'maxi':
        counts.up = randomNumber(16) + 3;
        counts.mid = randomNumber(4) + 1;
        counts.down = randomNumber(64) + 3;
        break;
      default:
        counts.up = randomNumber(8) + 1;
        counts.mid = randomNumber(6) / 2;
        counts.down = randomNumber(8) + 1;
        break;
      }

      var arr = ['up', 'mid', 'down'];
      for (var d in arr) {
        var index = arr[d];
        for (var i = 0; i <= counts[index]; i++) {
          if (options[index]) {
            result = result + soul[index][randomNumber(soul[index].length)];
          }
        }
      }
    }
    return result;
  }
  // don't summon him
  return heComes(text, options);
};



/***/ }),
/* 1010 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(129);

module['exports'] = (function() {
  return function(letter, i, exploded) {
    if (letter === ' ') return letter;
    switch (i%3) {
      case 0: return colors.red(letter);
      case 1: return colors.white(letter);
      case 2: return colors.blue(letter);
    }
  };
})();


/***/ }),
/* 1011 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(129);

module['exports'] = (function() {
  // RoY G BiV
  var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];
  return function(letter, i, exploded) {
    if (letter === ' ') {
      return letter;
    } else {
      return colors[rainbowColors[i++ % rainbowColors.length]](letter);
    }
  };
})();



/***/ }),
/* 1012 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(129);

module['exports'] = (function() {
  var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',
    'blue', 'white', 'cyan', 'magenta'];
  return function(letter, i, exploded) {
    return letter === ' ' ? letter :
      colors[
        available[Math.round(Math.random() * (available.length - 2))]
      ](letter);
  };
})();


/***/ }),
/* 1013 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(129);

module['exports'] = function(letter, i, exploded) {
  return i % 2 === 0 ? letter : colors.inverse(letter);
};


/***/ }),
/* 1014 */
/***/ (function(module, exports) {

/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var styles = {};
module['exports'] = styles;

var codes = {
  reset: [0, 0],

  bold: [1, 22],
  dim: [2, 22],
  italic: [3, 23],
  underline: [4, 24],
  inverse: [7, 27],
  hidden: [8, 28],
  strikethrough: [9, 29],

  black: [30, 39],
  red: [31, 39],
  green: [32, 39],
  yellow: [33, 39],
  blue: [34, 39],
  magenta: [35, 39],
  cyan: [36, 39],
  white: [37, 39],
  gray: [90, 39],
  grey: [90, 39],

  bgBlack: [40, 49],
  bgRed: [41, 49],
  bgGreen: [42, 49],
  bgYellow: [43, 49],
  bgBlue: [44, 49],
  bgMagenta: [45, 49],
  bgCyan: [46, 49],
  bgWhite: [47, 49],

  // legacy styles for colors pre v1.0.0
  blackBG: [40, 49],
  redBG: [41, 49],
  greenBG: [42, 49],
  yellowBG: [43, 49],
  blueBG: [44, 49],
  magentaBG: [45, 49],
  cyanBG: [46, 49],
  whiteBG: [47, 49],

};

Object.keys(codes).forEach(function(key) {
  var val = codes[key];
  var style = styles[key] = [];
  style.open = '\u001b[' + val[0] + 'm';
  style.close = '\u001b[' + val[1] + 'm';
});


/***/ }),
/* 1015 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/



module.exports = function(flag, argv) {
  argv = argv || process.argv;

  var terminatorPos = argv.indexOf('--');
  var prefix = /^-{1,2}/.test(flag) ? '' : '--';
  var pos = argv.indexOf(prefix + flag);

  return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};


/***/ }),
/* 1016 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/



var os = __webpack_require__(5);
var hasFlag = __webpack_require__(1015);

var env = process.env;

var forceColor = void 0;
if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {
  forceColor = false;
} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')
           || hasFlag('color=always')) {
  forceColor = true;
}
if ('FORCE_COLOR' in env) {
  forceColor = env.FORCE_COLOR.length === 0
    || parseInt(env.FORCE_COLOR, 10) !== 0;
}

function translateLevel(level) {
  if (level === 0) {
    return false;
  }

  return {
    level: level,
    hasBasic: true,
    has256: level >= 2,
    has16m: level >= 3,
  };
}

function supportsColor(stream) {
  if (forceColor === false) {
    return 0;
  }

  if (hasFlag('color=16m') || hasFlag('color=full')
      || hasFlag('color=truecolor')) {
    return 3;
  }

  if (hasFlag('color=256')) {
    return 2;
  }

  if (stream && !stream.isTTY && forceColor !== true) {
    return 0;
  }

  var min = forceColor ? 1 : 0;

  if (process.platform === 'win32') {
    // Node.js 7.5.0 is the first version of Node.js to include a patch to
    // libuv that enables 256 color output on Windows. Anything earlier and it
    // won't work. However, here we target Node.js 8 at minimum as it is an LTS
    // release, and Node.js 7 is not. Windows 10 build 10586 is the first
    // Windows release that supports 256 colors. Windows 10 build 14931 is the
    // first release that supports 16m/TrueColor.
    var osRelease = os.release().split('.');
    if (Number(process.versions.node.split('.')[0]) >= 8
        && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
      return Number(osRelease[2]) >= 14931 ? 3 : 2;
    }

    return 1;
  }

  if ('CI' in env) {
    if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {
      return sign in env;
    }) || env.CI_NAME === 'codeship') {
      return 1;
    }

    return min;
  }

  if ('TEAMCITY_VERSION' in env) {
    return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0
    );
  }

  if ('TERM_PROGRAM' in env) {
    var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);

    switch (env.TERM_PROGRAM) {
      case 'iTerm.app':
        return version >= 3 ? 3 : 2;
      case 'Hyper':
        return 3;
      case 'Apple_Terminal':
        return 2;
      // No default
    }
  }

  if (/-256(color)?$/i.test(env.TERM)) {
    return 2;
  }

  if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
    return 1;
  }

  if ('COLORTERM' in env) {
    return 1;
  }

  if (env.TERM === 'dumb') {
    return min;
  }

  return min;
}

function getSupportLevel(stream) {
  var level = supportsColor(stream);
  return translateLevel(level);
}

module.exports = {
  supportsColor: getSupportLevel,
  stdout: getSupportLevel(process.stdout),
  stderr: getSupportLevel(process.stderr),
};


/***/ }),
/* 1017 */
/***/ (function(module, exports, __webpack_require__) {

//
// Remark: Requiring this file will use the "safe" colors API,
// which will not touch String.prototype.
//
//   var colors = require('colors/safe');
//   colors.red("foo")
//
//
var colors = __webpack_require__(129);
module['exports'] = colors;


/***/ }),
/* 1018 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_middleware__ = __webpack_require__(1019);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__internal_runSaga__ = __webpack_require__(401);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "runSaga", function() { return __WEBPACK_IMPORTED_MODULE_1__internal_runSaga__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__internal_channel__ = __webpack_require__(100);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "END", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "eventChannel", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__["b"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "channel", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__["c"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__internal_buffers__ = __webpack_require__(168);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "buffers", function() { return __WEBPACK_IMPORTED_MODULE_3__internal_buffers__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__ = __webpack_require__(402);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "takeEvery", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "takeLatest", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__["b"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__["c"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__internal_utils__ = __webpack_require__(38);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return __WEBPACK_IMPORTED_MODULE_5__internal_utils__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CANCEL", function() { return __WEBPACK_IMPORTED_MODULE_5__internal_utils__["b"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__internal_io__ = __webpack_require__(81);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "detach", function() { return __WEBPACK_IMPORTED_MODULE_6__internal_io__["a"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__effects__ = __webpack_require__(399);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils__ = __webpack_require__(1023);
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "effects", function() { return __WEBPACK_IMPORTED_MODULE_7__effects__; });
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "utils", function() { return __WEBPACK_IMPORTED_MODULE_8__utils__; });

/* harmony default export */ __webpack_exports__["default"] = (__WEBPACK_IMPORTED_MODULE_0__internal_middleware__["a" /* default */]);













/***/ }),
/* 1019 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = sagaMiddlewareFactory;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(38);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__channel__ = __webpack_require__(100);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__runSaga__ = __webpack_require__(401);
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }






function sagaMiddlewareFactory() {
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

  var _ref$context = _ref.context,
      context = _ref$context === undefined ? {} : _ref$context,
      options = _objectWithoutProperties(_ref, ['context']);

  var sagaMonitor = options.sagaMonitor,
      logger = options.logger,
      onError = options.onError;


  if (__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(options)) {
    if (process.env.NODE_ENV === 'production') {
      throw new Error('Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead');
    } else {
      throw new Error('You passed a function to the Saga middleware. You are likely trying to start a        Saga by directly passing it to the middleware. This is no longer possible starting from 0.10.0.        To run a Saga, you must do it dynamically AFTER mounting the middleware into the store.\n        Example:\n          import createSagaMiddleware from \'redux-saga\'\n          ... other imports\n\n          const sagaMiddleware = createSagaMiddleware()\n          const store = createStore(reducer, applyMiddleware(sagaMiddleware))\n          sagaMiddleware.run(saga, ...args)\n      ');
    }
  }

  if (logger && !__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(logger)) {
    throw new Error('`options.logger` passed to the Saga middleware is not a function!');
  }

  if (process.env.NODE_ENV === 'development' && options.onerror) {
    throw new Error('`options.onerror` was removed. Use `options.onError` instead.');
  }

  if (onError && !__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(onError)) {
    throw new Error('`options.onError` passed to the Saga middleware is not a function!');
  }

  if (options.emitter && !__WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].func(options.emitter)) {
    throw new Error('`options.emitter` passed to the Saga middleware is not a function!');
  }

  function sagaMiddleware(_ref2) {
    var getState = _ref2.getState,
        dispatch = _ref2.dispatch;

    var sagaEmitter = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__channel__["f" /* emitter */])();
    sagaEmitter.emit = (options.emitter || __WEBPACK_IMPORTED_MODULE_0__utils__["z" /* ident */])(sagaEmitter.emit);

    sagaMiddleware.run = __WEBPACK_IMPORTED_MODULE_2__runSaga__["a" /* runSaga */].bind(null, {
      context: context,
      subscribe: sagaEmitter.subscribe,
      dispatch: dispatch,
      getState: getState,
      sagaMonitor: sagaMonitor,
      logger: logger,
      onError: onError
    });

    return function (next) {
      return function (action) {
        if (sagaMonitor && sagaMonitor.actionDispatched) {
          sagaMonitor.actionDispatched(action);
        }
        var result = next(action); // hit reducers
        sagaEmitter.emit(action);
        return result;
      };
    };
  }

  sagaMiddleware.run = function () {
    throw new Error('Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware');
  };

  sagaMiddleware.setContext = function (props) {
    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["n" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__["f" /* is */].object, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["v" /* createSetContextWarning */])('sagaMiddleware', props));
    __WEBPACK_IMPORTED_MODULE_0__utils__["u" /* object */].assign(context, props);
  };

  return sagaMiddleware;
}

/***/ }),
/* 1020 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = takeEvery;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(234);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(81);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(100);




function takeEvery(patternOrChannel, worker) {
  for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
    args[_key - 2] = arguments[_key];
  }

  var yTake = { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["d" /* take */])(patternOrChannel) };
  var yFork = function yFork(ac) {
    return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__["e" /* fork */].apply(undefined, [worker].concat(args, [ac])) };
  };

  var action = void 0,
      setAction = function setAction(ac) {
    return action = ac;
  };

  return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["a" /* default */])({
    q1: function q1() {
      return ['q2', yTake, setAction];
    },
    q2: function q2() {
      return action === __WEBPACK_IMPORTED_MODULE_2__channel__["a" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["b" /* qEnd */]] : ['q1', yFork(action)];
    }
  }, 'q1', 'takeEvery(' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["c" /* safeName */])(patternOrChannel) + ', ' + worker.name + ')');
}

/***/ }),
/* 1021 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = takeLatest;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(234);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(81);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(100);




function takeLatest(patternOrChannel, worker) {
  for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
    args[_key - 2] = arguments[_key];
  }

  var yTake = { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["d" /* take */])(patternOrChannel) };
  var yFork = function yFork(ac) {
    return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__["e" /* fork */].apply(undefined, [worker].concat(args, [ac])) };
  };
  var yCancel = function yCancel(task) {
    return { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["g" /* cancel */])(task) };
  };

  var task = void 0,
      action = void 0;
  var setTask = function setTask(t) {
    return task = t;
  };
  var setAction = function setAction(ac) {
    return action = ac;
  };

  return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["a" /* default */])({
    q1: function q1() {
      return ['q2', yTake, setAction];
    },
    q2: function q2() {
      return action === __WEBPACK_IMPORTED_MODULE_2__channel__["a" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["b" /* qEnd */]] : task ? ['q3', yCancel(task)] : ['q1', yFork(action), setTask];
    },
    q3: function q3() {
      return ['q1', yFork(action), setTask];
    }
  }, 'q1', 'takeLatest(' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["c" /* safeName */])(patternOrChannel) + ', ' + worker.name + ')');
}

/***/ }),
/* 1022 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = throttle;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(234);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(81);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(100);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__buffers__ = __webpack_require__(168);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils__ = __webpack_require__(38);






function throttle(delayLength, pattern, worker) {
  for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
    args[_key - 3] = arguments[_key];
  }

  var action = void 0,
      channel = void 0;

  var yActionChannel = { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["c" /* actionChannel */])(pattern, __WEBPACK_IMPORTED_MODULE_3__buffers__["a" /* buffers */].sliding(1)) };
  var yTake = function yTake() {
    return { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["d" /* take */])(channel) };
  };
  var yFork = function yFork(ac) {
    return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__["e" /* fork */].apply(undefined, [worker].concat(args, [ac])) };
  };
  var yDelay = { done: false, value: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__io__["f" /* call */])(__WEBPACK_IMPORTED_MODULE_4__utils__["a" /* delay */], delayLength) };

  var setAction = function setAction(ac) {
    return action = ac;
  };
  var setChannel = function setChannel(ch) {
    return channel = ch;
  };

  return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["a" /* default */])({
    q1: function q1() {
      return ['q2', yActionChannel, setChannel];
    },
    q2: function q2() {
      return ['q3', yTake(), setAction];
    },
    q3: function q3() {
      return action === __WEBPACK_IMPORTED_MODULE_2__channel__["a" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["b" /* qEnd */]] : ['q4', yFork(action)];
    },
    q4: function q4() {
      return ['q2', yDelay];
    }
  }, 'q1', 'throttle(' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__["c" /* safeName */])(pattern) + ', ' + worker.name + ')');
}

/***/ }),
/* 1023 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_utils__ = __webpack_require__(38);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TASK", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["c"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SAGA_ACTION", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["d"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["e"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "is", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["f"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deferred", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["g"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "arrayOfDeffered", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["h"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createMockTask", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["i"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cloneableGenerator", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__["j"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__internal_io__ = __webpack_require__(81);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "asEffect", function() { return __WEBPACK_IMPORTED_MODULE_1__internal_io__["b"]; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__internal_proc__ = __webpack_require__(400);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CHANNEL_END", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_proc__["a"]; });




/***/ }),
/* 1024 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = applyMiddleware;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__compose__ = __webpack_require__(404);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };



/**
 * Creates a store enhancer that applies middleware to the dispatch method
 * of the Redux store. This is handy for a variety of tasks, such as expressing
 * asynchronous actions in a concise manner, or logging every action payload.
 *
 * See `redux-thunk` package as an example of the Redux middleware.
 *
 * Because middleware is potentially asynchronous, this should be the first
 * store enhancer in the composition chain.
 *
 * Note that each middleware will be given the `dispatch` and `getState` functions
 * as named arguments.
 *
 * @param {...Function} middlewares The middleware chain to be applied.
 * @returns {Function} A store enhancer applying the middleware.
 */
function applyMiddleware() {
  for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
    middlewares[_key] = arguments[_key];
  }

  return function (createStore) {
    return function (reducer, preloadedState, enhancer) {
      var store = createStore(reducer, preloadedState, enhancer);
      var _dispatch = store.dispatch;
      var chain = [];

      var middlewareAPI = {
        getState: store.getState,
        dispatch: function dispatch(action) {
          return _dispatch(action);
        }
      };
      chain = middlewares.map(function (middleware) {
        return middleware(middlewareAPI);
      });
      _dispatch = __WEBPACK_IMPORTED_MODULE_0__compose__["a" /* default */].apply(undefined, chain)(store.dispatch);

      return _extends({}, store, {
        dispatch: _dispatch
      });
    };
  };
}

/***/ }),
/* 1025 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = bindActionCreators;
function bindActionCreator(actionCreator, dispatch) {
  return function () {
    return dispatch(actionCreator.apply(undefined, arguments));
  };
}

/**
 * Turns an object whose values are action creators, into an object with the
 * same keys, but with every function wrapped into a `dispatch` call so they
 * may be invoked directly. This is just a convenience method, as you can call
 * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
 *
 * For convenience, you can also pass a single function as the first argument,
 * and get a function in return.
 *
 * @param {Function|Object} actionCreators An object whose values are action
 * creator functions. One handy way to obtain it is to use ES6 `import * as`
 * syntax. You may also pass a single function.
 *
 * @param {Function} dispatch The `dispatch` function available on your Redux
 * store.
 *
 * @returns {Function|Object} The object mimicking the original object, but with
 * every action creator wrapped into the `dispatch` call. If you passed a
 * function as `actionCreators`, the return value will also be a single
 * function.
 */
function bindActionCreators(actionCreators, dispatch) {
  if (typeof actionCreators === 'function') {
    return bindActionCreator(actionCreators, dispatch);
  }

  if (typeof actionCreators !== 'object' || actionCreators === null) {
    throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');
  }

  var keys = Object.keys(actionCreators);
  var boundActionCreators = {};
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var actionCreator = actionCreators[key];
    if (typeof actionCreator === 'function') {
      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
    }
  }
  return boundActionCreators;
}

/***/ }),
/* 1026 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = combineReducers;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(405);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_es_isPlainObject__ = __webpack_require__(372);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_warning__ = __webpack_require__(406);




function getUndefinedStateErrorMessage(key, action) {
  var actionType = action && action.type;
  var actionName = actionType && '"' + actionType.toString() + '"' || 'an action';

  return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';
}

function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
  var reducerKeys = Object.keys(reducers);
  var argumentName = action && action.type === __WEBPACK_IMPORTED_MODULE_0__createStore__["b" /* ActionTypes */].INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';

  if (reducerKeys.length === 0) {
    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';
  }

  if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_lodash_es_isPlainObject__["a" /* default */])(inputState)) {
    return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"');
  }

  var unexpectedKeys = Object.keys(inputState).filter(function (key) {
    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];
  });

  unexpectedKeys.forEach(function (key) {
    unexpectedKeyCache[key] = true;
  });

  if (unexpectedKeys.length > 0) {
    return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.');
  }
}

function assertReducerShape(reducers) {
  Object.keys(reducers).forEach(function (key) {
    var reducer = reducers[key];
    var initialState = reducer(undefined, { type: __WEBPACK_IMPORTED_MODULE_0__createStore__["b" /* ActionTypes */].INIT });

    if (typeof initialState === 'undefined') {
      throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');
    }

    var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');
    if (typeof reducer(undefined, { type: type }) === 'undefined') {
      throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + __WEBPACK_IMPORTED_MODULE_0__createStore__["b" /* ActionTypes */].INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');
    }
  });
}

/**
 * Turns an object whose values are different reducer functions, into a single
 * reducer function. It will call every child reducer, and gather their results
 * into a single state object, whose keys correspond to the keys of the passed
 * reducer functions.
 *
 * @param {Object} reducers An object whose values correspond to different
 * reducer functions that need to be combined into one. One handy way to obtain
 * it is to use ES6 `import * as reducers` syntax. The reducers may never return
 * undefined for any action. Instead, they should return their initial state
 * if the state passed to them was undefined, and the current state for any
 * unrecognized action.
 *
 * @returns {Function} A reducer function that invokes every reducer inside the
 * passed object, and builds a state object with the same shape.
 */
function combineReducers(reducers) {
  var reducerKeys = Object.keys(reducers);
  var finalReducers = {};
  for (var i = 0; i < reducerKeys.length; i++) {
    var key = reducerKeys[i];

    if (process.env.NODE_ENV !== 'production') {
      if (typeof reducers[key] === 'undefined') {
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_warning__["a" /* default */])('No reducer provided for key "' + key + '"');
      }
    }

    if (typeof reducers[key] === 'function') {
      finalReducers[key] = reducers[key];
    }
  }
  var finalReducerKeys = Object.keys(finalReducers);

  var unexpectedKeyCache = void 0;
  if (process.env.NODE_ENV !== 'production') {
    unexpectedKeyCache = {};
  }

  var shapeAssertionError = void 0;
  try {
    assertReducerShape(finalReducers);
  } catch (e) {
    shapeAssertionError = e;
  }

  return function combination() {
    var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    var action = arguments[1];

    if (shapeAssertionError) {
      throw shapeAssertionError;
    }

    if (process.env.NODE_ENV !== 'production') {
      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
      if (warningMessage) {
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_warning__["a" /* default */])(warningMessage);
      }
    }

    var hasChanged = false;
    var nextState = {};
    for (var _i = 0; _i < finalReducerKeys.length; _i++) {
      var _key = finalReducerKeys[_i];
      var reducer = finalReducers[_key];
      var previousStateForKey = state[_key];
      var nextStateForKey = reducer(previousStateForKey, action);
      if (typeof nextStateForKey === 'undefined') {
        var errorMessage = getUndefinedStateErrorMessage(_key, action);
        throw new Error(errorMessage);
      }
      nextState[_key] = nextStateForKey;
      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
    }
    return hasChanged ? nextState : state;
  };
}

/***/ }),
/* 1027 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(405);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__combineReducers__ = __webpack_require__(1026);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__ = __webpack_require__(1025);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__ = __webpack_require__(1024);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__compose__ = __webpack_require__(404);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_warning__ = __webpack_require__(406);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createStore", function() { return __WEBPACK_IMPORTED_MODULE_0__createStore__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "combineReducers", function() { return __WEBPACK_IMPORTED_MODULE_1__combineReducers__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "bindActionCreators", function() { return __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "applyMiddleware", function() { return __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "compose", function() { return __WEBPACK_IMPORTED_MODULE_4__compose__["a"]; });







/*
* This is a dummy function to check if the function name has been altered by minification.
* If the function has been minified and NODE_ENV !== 'production', warn the user.
*/
function isCrushed() {}

if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_warning__["a" /* default */])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');
}



/***/ }),
/* 1028 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * regex-cache <https://github.com/jonschlinkert/regex-cache>
 *
 * Copyright (c) 2015-2017, Jon Schlinkert.
 * Released under the MIT License.
 */



var equal = __webpack_require__(895);
var basic = {};
var cache = {};

/**
 * Expose `regexCache`
 */

module.exports = regexCache;

/**
 * Memoize the results of a call to the new RegExp constructor.
 *
 * @param  {Function} fn [description]
 * @param  {String} str [description]
 * @param  {Options} options [description]
 * @param  {Boolean} nocompare [description]
 * @return {RegExp}
 */

function regexCache(fn, str, opts) {
  var key = '_default_', regex, cached;

  if (!str && !opts) {
    if (typeof fn !== 'function') {
      return fn;
    }
    return basic[key] || (basic[key] = fn(str));
  }

  var isString = typeof str === 'string';
  if (isString) {
    if (!opts) {
      return basic[str] || (basic[str] = fn(str));
    }
    key = str;
  } else {
    opts = str;
  }

  cached = cache[key];
  if (cached && equal(cached.opts, opts)) {
    return cached.regex;
  }

  memo(key, opts, (regex = fn(str, opts)));
  return regex;
}

function memo(key, opts, regex) {
  cache[key] = {regex: regex, opts: opts};
}

/**
 * Expose `cache`
 */

module.exports.cache = cache;
module.exports.basic = basic;


/***/ }),
/* 1029 */
/***/ (function(module, exports) {

var isWin = process.platform === 'win32';

module.exports = function (str) {
	var i = str.length - 1;
	if (i < 2) {
		return str;
	}
	while (isSeparator(str, i)) {
		i--;
	}
	return str.substr(0, i + 1);
};

function isSeparator(str, i) {
	var char = str[i];
	return i > 0 && (char === '/' || (isWin && char === '\\'));
}


/***/ }),
/* 1030 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * repeat-string <https://github.com/jonschlinkert/repeat-string>
 *
 * Copyright (c) 2014-2015, Jon Schlinkert.
 * Licensed under the MIT License.
 */



/**
 * Results cache
 */

var res = '';
var cache;

/**
 * Expose `repeat`
 */

module.exports = repeat;

/**
 * Repeat the given `string` the specified `number`
 * of times.
 *
 * **Example:**
 *
 * ```js
 * var repeat = require('repeat-string');
 * repeat('A', 5);
 * //=> AAAAA
 * ```
 *
 * @param {String} `string` The string to repeat
 * @param {Number} `number` The number of times to repeat the string
 * @return {String} Repeated string
 * @api public
 */

function repeat(str, num) {
  if (typeof str !== 'string') {
    throw new TypeError('expected a string');
  }

  // cover common, quick use cases
  if (num === 1) return str;
  if (num === 2) return str + str;

  var max = str.length * num;
  if (cache !== str || typeof cache === 'undefined') {
    cache = str;
    res = '';
  } else if (res.length >= max) {
    return res.substr(0, max);
  }

  while (max > res.length && num > 1) {
    if (num & 1) {
      res += str;
    }

    num >>= 1;
    str += str;
  }

  res += str;
  res = res.substr(0, max);
  return res;
}


/***/ }),
/* 1031 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var caseless = __webpack_require__(194)
var uuid = __webpack_require__(236)
var helpers = __webpack_require__(235)

var md5 = helpers.md5
var toBase64 = helpers.toBase64

function Auth (request) {
  // define all public properties here
  this.request = request
  this.hasAuth = false
  this.sentAuth = false
  this.bearerToken = null
  this.user = null
  this.pass = null
}

Auth.prototype.basic = function (user, pass, sendImmediately) {
  var self = this
  if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
    self.request.emit('error', new Error('auth() received invalid user or password'))
  }
  self.user = user
  self.pass = pass
  self.hasAuth = true
  var header = user + ':' + (pass || '')
  if (sendImmediately || typeof sendImmediately === 'undefined') {
    var authHeader = 'Basic ' + toBase64(header)
    self.sentAuth = true
    return authHeader
  }
}

Auth.prototype.bearer = function (bearer, sendImmediately) {
  var self = this
  self.bearerToken = bearer
  self.hasAuth = true
  if (sendImmediately || typeof sendImmediately === 'undefined') {
    if (typeof bearer === 'function') {
      bearer = bearer()
    }
    var authHeader = 'Bearer ' + (bearer || '')
    self.sentAuth = true
    return authHeader
  }
}

Auth.prototype.digest = function (method, path, authHeader) {
  // TODO: More complete implementation of RFC 2617.
  //   - handle challenge.domain
  //   - support qop="auth-int" only
  //   - handle Authentication-Info (not necessarily?)
  //   - check challenge.stale (not necessarily?)
  //   - increase nc (not necessarily?)
  // For reference:
  // http://tools.ietf.org/html/rfc2617#section-3
  // https://github.com/bagder/curl/blob/master/lib/http_digest.c

  var self = this

  var challenge = {}
  var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi
  for (;;) {
    var match = re.exec(authHeader)
    if (!match) {
      break
    }
    challenge[match[1]] = match[2] || match[3]
  }

  /**
   * RFC 2617: handle both MD5 and MD5-sess algorithms.
   *
   * If the algorithm directive's value is "MD5" or unspecified, then HA1 is
   *   HA1=MD5(username:realm:password)
   * If the algorithm directive's value is "MD5-sess", then HA1 is
   *   HA1=MD5(MD5(username:realm:password):nonce:cnonce)
   */
  var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {
    var ha1 = md5(user + ':' + realm + ':' + pass)
    if (algorithm && algorithm.toLowerCase() === 'md5-sess') {
      return md5(ha1 + ':' + nonce + ':' + cnonce)
    } else {
      return ha1
    }
  }

  var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth'
  var nc = qop && '00000001'
  var cnonce = qop && uuid().replace(/-/g, '')
  var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce)
  var ha2 = md5(method + ':' + path)
  var digestResponse = qop
    ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2)
    : md5(ha1 + ':' + challenge.nonce + ':' + ha2)
  var authValues = {
    username: self.user,
    realm: challenge.realm,
    nonce: challenge.nonce,
    uri: path,
    qop: qop,
    response: digestResponse,
    nc: nc,
    cnonce: cnonce,
    algorithm: challenge.algorithm,
    opaque: challenge.opaque
  }

  authHeader = []
  for (var k in authValues) {
    if (authValues[k]) {
      if (k === 'qop' || k === 'nc' || k === 'algorithm') {
        authHeader.push(k + '=' + authValues[k])
      } else {
        authHeader.push(k + '="' + authValues[k] + '"')
      }
    }
  }
  authHeader = 'Digest ' + authHeader.join(', ')
  self.sentAuth = true
  return authHeader
}

Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {
  var self = this
  var request = self.request

  var authHeader
  if (bearer === undefined && user === undefined) {
    self.request.emit('error', new Error('no auth mechanism defined'))
  } else if (bearer !== undefined) {
    authHeader = self.bearer(bearer, sendImmediately)
  } else {
    authHeader = self.basic(user, pass, sendImmediately)
  }
  if (authHeader) {
    request.setHeader('authorization', authHeader)
  }
}

Auth.prototype.onResponse = function (response) {
  var self = this
  var request = self.request

  if (!self.hasAuth || self.sentAuth) { return null }

  var c = caseless(response.headers)

  var authHeader = c.get('www-authenticate')
  var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()
  request.debug('reauth', authVerb)

  switch (authVerb) {
    case 'basic':
      return self.basic(self.user, self.pass, true)

    case 'bearer':
      return self.bearer(self.bearerToken, true)

    case 'digest':
      return self.digest(request.method, request.path, authHeader)
  }
}

exports.Auth = Auth


/***/ }),
/* 1032 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function formatHostname (hostname) {
  // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
  return hostname.replace(/^\.*/, '.').toLowerCase()
}

function parseNoProxyZone (zone) {
  zone = zone.trim().toLowerCase()

  var zoneParts = zone.split(':', 2)
  var zoneHost = formatHostname(zoneParts[0])
  var zonePort = zoneParts[1]
  var hasPort = zone.indexOf(':') > -1

  return {hostname: zoneHost, port: zonePort, hasPort: hasPort}
}

function uriInNoProxy (uri, noProxy) {
  var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
  var hostname = formatHostname(uri.hostname)
  var noProxyList = noProxy.split(',')

  // iterate through the noProxyList until it finds a match.
  return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {
    var isMatchedAt = hostname.indexOf(noProxyZone.hostname)
    var hostnameMatched = (
      isMatchedAt > -1 &&
        (isMatchedAt === hostname.length - noProxyZone.hostname.length)
    )

    if (noProxyZone.hasPort) {
      return (port === noProxyZone.port) && hostnameMatched
    }

    return hostnameMatched
  })
}

function getProxyFromURI (uri) {
  // Decide the proper request proxy to use based on the request URI object and the
  // environmental variables (NO_PROXY, HTTP_PROXY, etc.)
  // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html)

  var noProxy = process.env.NO_PROXY || process.env.no_proxy || ''

  // if the noProxy is a wildcard then return null

  if (noProxy === '*') {
    return null
  }

  // if the noProxy is not empty and the uri is found return null

  if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {
    return null
  }

  // Check for HTTP or HTTPS Proxy in environment Else default to null

  if (uri.protocol === 'http:') {
    return process.env.HTTP_PROXY ||
      process.env.http_proxy || null
  }

  if (uri.protocol === 'https:') {
    return process.env.HTTPS_PROXY ||
      process.env.https_proxy ||
      process.env.HTTP_PROXY ||
      process.env.http_proxy || null
  }

  // if none of that works, return null
  // (What uri protocol are you using then?)

  return null
}

module.exports = getProxyFromURI


/***/ }),
/* 1033 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1)
var qs = __webpack_require__(85)
var validate = __webpack_require__(876)
var extend = __webpack_require__(216)

function Har (request) {
  this.request = request
}

Har.prototype.reducer = function (obj, pair) {
  // new property ?
  if (obj[pair.name] === undefined) {
    obj[pair.name] = pair.value
    return obj
  }

  // existing? convert to array
  var arr = [
    obj[pair.name],
    pair.value
  ]

  obj[pair.name] = arr

  return obj
}

Har.prototype.prep = function (data) {
  // construct utility properties
  data.queryObj = {}
  data.headersObj = {}
  data.postData.jsonObj = false
  data.postData.paramsObj = false

  // construct query objects
  if (data.queryString && data.queryString.length) {
    data.queryObj = data.queryString.reduce(this.reducer, {})
  }

  // construct headers objects
  if (data.headers && data.headers.length) {
    // loweCase header keys
    data.headersObj = data.headers.reduceRight(function (headers, header) {
      headers[header.name] = header.value
      return headers
    }, {})
  }

  // construct Cookie header
  if (data.cookies && data.cookies.length) {
    var cookies = data.cookies.map(function (cookie) {
      return cookie.name + '=' + cookie.value
    })

    if (cookies.length) {
      data.headersObj.cookie = cookies.join('; ')
    }
  }

  // prep body
  function some (arr) {
    return arr.some(function (type) {
      return data.postData.mimeType.indexOf(type) === 0
    })
  }

  if (some([
    'multipart/mixed',
    'multipart/related',
    'multipart/form-data',
    'multipart/alternative'])) {
    // reset values
    data.postData.mimeType = 'multipart/form-data'
  } else if (some([
    'application/x-www-form-urlencoded'])) {
    if (!data.postData.params) {
      data.postData.text = ''
    } else {
      data.postData.paramsObj = data.postData.params.reduce(this.reducer, {})

      // always overwrite
      data.postData.text = qs.stringify(data.postData.paramsObj)
    }
  } else if (some([
    'text/json',
    'text/x-json',
    'application/json',
    'application/x-json'])) {
    data.postData.mimeType = 'application/json'

    if (data.postData.text) {
      try {
        data.postData.jsonObj = JSON.parse(data.postData.text)
      } catch (e) {
        this.request.debug(e)

        // force back to text/plain
        data.postData.mimeType = 'text/plain'
      }
    }
  }

  return data
}

Har.prototype.options = function (options) {
  // skip if no har property defined
  if (!options.har) {
    return options
  }

  var har = {}
  extend(har, options.har)

  // only process the first entry
  if (har.log && har.log.entries) {
    har = har.log.entries[0]
  }

  // add optional properties to make validation successful
  har.url = har.url || options.url || options.uri || options.baseUrl || '/'
  har.httpVersion = har.httpVersion || 'HTTP/1.1'
  har.queryString = har.queryString || []
  har.headers = har.headers || []
  har.cookies = har.cookies || []
  har.postData = har.postData || {}
  har.postData.mimeType = har.postData.mimeType || 'application/octet-stream'

  har.bodySize = 0
  har.headersSize = 0
  har.postData.size = 0

  if (!validate.request(har)) {
    return options
  }

  // clean up and get some utility properties
  var req = this.prep(har)

  // construct new options
  if (req.url) {
    options.url = req.url
  }

  if (req.method) {
    options.method = req.method
  }

  if (Object.keys(req.queryObj).length) {
    options.qs = req.queryObj
  }

  if (Object.keys(req.headersObj).length) {
    options.headers = req.headersObj
  }

  function test (type) {
    return req.postData.mimeType.indexOf(type) === 0
  }
  if (test('application/x-www-form-urlencoded')) {
    options.form = req.postData.paramsObj
  } else if (test('application/json')) {
    if (req.postData.jsonObj) {
      options.body = req.postData.jsonObj
      options.json = true
    }
  } else if (test('multipart/form-data')) {
    options.formData = {}

    req.postData.params.forEach(function (param) {
      var attachment = {}

      if (!param.fileName && !param.fileName && !param.contentType) {
        options.formData[param.name] = param.value
        return
      }

      // attempt to read from disk!
      if (param.fileName && !param.value) {
        attachment.value = fs.createReadStream(param.fileName)
      } else if (param.value) {
        attachment.value = param.value
      }

      if (param.fileName) {
        attachment.options = {
          filename: param.fileName,
          contentType: param.contentType ? param.contentType : null
        }
      }

      options.formData[param.name] = attachment
    })
  } else {
    if (req.postData.text) {
      options.body = req.postData.text
    }
  }

  return options
}

exports.Har = Har


/***/ }),
/* 1034 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var crypto = __webpack_require__(7)

function randomString (size) {
  var bits = (size + 1) * 6
  var buffer = crypto.randomBytes(Math.ceil(bits / 8))
  var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
  return string.slice(0, size)
}

function calculatePayloadHash (payload, algorithm, contentType) {
  var hash = crypto.createHash(algorithm)
  hash.update('hawk.1.payload\n')
  hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\n')
  hash.update(payload || '')
  hash.update('\n')
  return hash.digest('base64')
}

exports.calculateMac = function (credentials, opts) {
  var normalized = 'hawk.1.header\n' +
    opts.ts + '\n' +
    opts.nonce + '\n' +
    (opts.method || '').toUpperCase() + '\n' +
    opts.resource + '\n' +
    opts.host.toLowerCase() + '\n' +
    opts.port + '\n' +
    (opts.hash || '') + '\n'

  if (opts.ext) {
    normalized = normalized + opts.ext.replace('\\', '\\\\').replace('\n', '\\n')
  }

  normalized = normalized + '\n'

  if (opts.app) {
    normalized = normalized + opts.app + '\n' + (opts.dlg || '') + '\n'
  }

  var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized)
  var digest = hmac.digest('base64')
  return digest
}

exports.header = function (uri, method, opts) {
  var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000)
  var credentials = opts.credentials
  if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) {
    return ''
  }

  if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) {
    return ''
  }

  var artifacts = {
    ts: timestamp,
    nonce: opts.nonce || randomString(6),
    method: method,
    resource: uri.pathname + (uri.search || ''),
    host: uri.hostname,
    port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
    hash: opts.hash,
    ext: opts.ext,
    app: opts.app,
    dlg: opts.dlg
  }

  if (!artifacts.hash && (opts.payload || opts.payload === '')) {
    artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType)
  }

  var mac = exports.calculateMac(credentials, artifacts)

  var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''
  var header = 'Hawk id="' + credentials.id +
    '", ts="' + artifacts.ts +
    '", nonce="' + artifacts.nonce +
    (artifacts.hash ? '", hash="' + artifacts.hash : '') +
    (hasExt ? '", ext="' + artifacts.ext.replace(/\\/g, '\\\\').replace(/"/g, '\\"') : '') +
    '", mac="' + mac + '"'

  if (artifacts.app) {
    header = header + ', app="' + artifacts.app + (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'
  }

  return header
}


/***/ }),
/* 1035 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var uuid = __webpack_require__(236)
var CombinedStream = __webpack_require__(294)
var isstream = __webpack_require__(368)
var Buffer = __webpack_require__(55).Buffer

function Multipart (request) {
  this.request = request
  this.boundary = uuid()
  this.chunked = false
  this.body = null
}

Multipart.prototype.isChunked = function (options) {
  var self = this
  var chunked = false
  var parts = options.data || options

  if (!parts.forEach) {
    self.request.emit('error', new Error('Argument error, options.multipart.'))
  }

  if (options.chunked !== undefined) {
    chunked = options.chunked
  }

  if (self.request.getHeader('transfer-encoding') === 'chunked') {
    chunked = true
  }

  if (!chunked) {
    parts.forEach(function (part) {
      if (typeof part.body === 'undefined') {
        self.request.emit('error', new Error('Body attribute missing in multipart.'))
      }
      if (isstream(part.body)) {
        chunked = true
      }
    })
  }

  return chunked
}

Multipart.prototype.setHeaders = function (chunked) {
  var self = this

  if (chunked && !self.request.hasHeader('transfer-encoding')) {
    self.request.setHeader('transfer-encoding', 'chunked')
  }

  var header = self.request.getHeader('content-type')

  if (!header || header.indexOf('multipart') === -1) {
    self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
  } else {
    if (header.indexOf('boundary') !== -1) {
      self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1')
    } else {
      self.request.setHeader('content-type', header + '; boundary=' + self.boundary)
    }
  }
}

Multipart.prototype.build = function (parts, chunked) {
  var self = this
  var body = chunked ? new CombinedStream() : []

  function add (part) {
    if (typeof part === 'number') {
      part = part.toString()
    }
    return chunked ? body.append(part) : body.push(Buffer.from(part))
  }

  if (self.request.preambleCRLF) {
    add('\r\n')
  }

  parts.forEach(function (part) {
    var preamble = '--' + self.boundary + '\r\n'
    Object.keys(part).forEach(function (key) {
      if (key === 'body') { return }
      preamble += key + ': ' + part[key] + '\r\n'
    })
    preamble += '\r\n'
    add(preamble)
    add(part.body)
    add('\r\n')
  })
  add('--' + self.boundary + '--')

  if (self.request.postambleCRLF) {
    add('\r\n')
  }

  return body
}

Multipart.prototype.onRequest = function (options) {
  var self = this

  var chunked = self.isChunked(options)
  var parts = options.data || options

  self.setHeaders(chunked)
  self.chunked = chunked
  self.body = self.build(parts, chunked)
}

exports.Multipart = Multipart


/***/ }),
/* 1036 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var url = __webpack_require__(8)
var qs = __webpack_require__(390)
var caseless = __webpack_require__(194)
var uuid = __webpack_require__(236)
var oauth = __webpack_require__(976)
var crypto = __webpack_require__(7)
var Buffer = __webpack_require__(55).Buffer

function OAuth (request) {
  this.request = request
  this.params = null
}

OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) {
  var oa = {}
  for (var i in _oauth) {
    oa['oauth_' + i] = _oauth[i]
  }
  if (!oa.oauth_version) {
    oa.oauth_version = '1.0'
  }
  if (!oa.oauth_timestamp) {
    oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString()
  }
  if (!oa.oauth_nonce) {
    oa.oauth_nonce = uuid().replace(/-/g, '')
  }
  if (!oa.oauth_signature_method) {
    oa.oauth_signature_method = 'HMAC-SHA1'
  }

  var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase
  delete oa.oauth_consumer_secret
  delete oa.oauth_private_key

  var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase
  delete oa.oauth_token_secret

  var realm = oa.oauth_realm
  delete oa.oauth_realm
  delete oa.oauth_transport_method

  var baseurl = uri.protocol + '//' + uri.host + uri.pathname
  var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&'))

  oa.oauth_signature = oauth.sign(
    oa.oauth_signature_method,
    method,
    baseurl,
    params,
    consumer_secret_or_private_key, // eslint-disable-line camelcase
    token_secret // eslint-disable-line camelcase
  )

  if (realm) {
    oa.realm = realm
  }

  return oa
}

OAuth.prototype.buildBodyHash = function (_oauth, body) {
  if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) {
    this.request.emit('error', new Error('oauth: ' + _oauth.signature_method +
      ' signature_method not supported with body_hash signing.'))
  }

  var shasum = crypto.createHash('sha1')
  shasum.update(body || '')
  var sha1 = shasum.digest('hex')

  return Buffer.from(sha1, 'hex').toString('base64')
}

OAuth.prototype.concatParams = function (oa, sep, wrap) {
  wrap = wrap || ''

  var params = Object.keys(oa).filter(function (i) {
    return i !== 'realm' && i !== 'oauth_signature'
  }).sort()

  if (oa.realm) {
    params.splice(0, 0, 'realm')
  }
  params.push('oauth_signature')

  return params.map(function (i) {
    return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap
  }).join(sep)
}

OAuth.prototype.onRequest = function (_oauth) {
  var self = this
  self.params = _oauth

  var uri = self.request.uri || {}
  var method = self.request.method || ''
  var headers = caseless(self.request.headers)
  var body = self.request.body || ''
  var qsLib = self.request.qsLib || qs

  var form
  var query
  var contentType = headers.get('content-type') || ''
  var formContentType = 'application/x-www-form-urlencoded'
  var transport = _oauth.transport_method || 'header'

  if (contentType.slice(0, formContentType.length) === formContentType) {
    contentType = formContentType
    form = body
  }
  if (uri.query) {
    query = uri.query
  }
  if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) {
    self.request.emit('error', new Error('oauth: transport_method of body requires POST ' +
      'and content-type ' + formContentType))
  }

  if (!form && typeof _oauth.body_hash === 'boolean') {
    _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString())
  }

  var oa = self.buildParams(_oauth, uri, method, query, form, qsLib)

  switch (transport) {
    case 'header':
      self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"'))
      break

    case 'query':
      var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&')
      self.request.uri = url.parse(href)
      self.request.path = self.request.uri.path
      break

    case 'body':
      self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&')
      break

    default:
      self.request.emit('error', new Error('oauth: transport_method invalid'))
  }
}

exports.OAuth = OAuth


/***/ }),
/* 1037 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var qs = __webpack_require__(390)
var querystring = __webpack_require__(85)

function Querystring (request) {
  this.request = request
  this.lib = null
  this.useQuerystring = null
  this.parseOptions = null
  this.stringifyOptions = null
}

Querystring.prototype.init = function (options) {
  if (this.lib) { return }

  this.useQuerystring = options.useQuerystring
  this.lib = (this.useQuerystring ? querystring : qs)

  this.parseOptions = options.qsParseOptions || {}
  this.stringifyOptions = options.qsStringifyOptions || {}
}

Querystring.prototype.stringify = function (obj) {
  return (this.useQuerystring)
    ? this.rfc3986(this.lib.stringify(obj,
      this.stringifyOptions.sep || null,
      this.stringifyOptions.eq || null,
      this.stringifyOptions))
    : this.lib.stringify(obj, this.stringifyOptions)
}

Querystring.prototype.parse = function (str) {
  return (this.useQuerystring)
    ? this.lib.parse(str,
      this.parseOptions.sep || null,
      this.parseOptions.eq || null,
      this.parseOptions)
    : this.lib.parse(str, this.parseOptions)
}

Querystring.prototype.rfc3986 = function (str) {
  return str.replace(/[!'()*]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

Querystring.prototype.unescape = querystring.unescape

exports.Querystring = Querystring


/***/ }),
/* 1038 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var url = __webpack_require__(8)
var isUrl = /^https?:/

function Redirect (request) {
  this.request = request
  this.followRedirect = true
  this.followRedirects = true
  this.followAllRedirects = false
  this.followOriginalHttpMethod = false
  this.allowRedirect = function () { return true }
  this.maxRedirects = 10
  this.redirects = []
  this.redirectsFollowed = 0
  this.removeRefererHeader = false
}

Redirect.prototype.onRequest = function (options) {
  var self = this

  if (options.maxRedirects !== undefined) {
    self.maxRedirects = options.maxRedirects
  }
  if (typeof options.followRedirect === 'function') {
    self.allowRedirect = options.followRedirect
  }
  if (options.followRedirect !== undefined) {
    self.followRedirects = !!options.followRedirect
  }
  if (options.followAllRedirects !== undefined) {
    self.followAllRedirects = options.followAllRedirects
  }
  if (self.followRedirects || self.followAllRedirects) {
    self.redirects = self.redirects || []
  }
  if (options.removeRefererHeader !== undefined) {
    self.removeRefererHeader = options.removeRefererHeader
  }
  if (options.followOriginalHttpMethod !== undefined) {
    self.followOriginalHttpMethod = options.followOriginalHttpMethod
  }
}

Redirect.prototype.redirectTo = function (response) {
  var self = this
  var request = self.request

  var redirectTo = null
  if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) {
    var location = response.caseless.get('location')
    request.debug('redirect', location)

    if (self.followAllRedirects) {
      redirectTo = location
    } else if (self.followRedirects) {
      switch (request.method) {
        case 'PATCH':
        case 'PUT':
        case 'POST':
        case 'DELETE':
          // Do not follow redirects
          break
        default:
          redirectTo = location
          break
      }
    }
  } else if (response.statusCode === 401) {
    var authHeader = request._auth.onResponse(response)
    if (authHeader) {
      request.setHeader('authorization', authHeader)
      redirectTo = request.uri
    }
  }
  return redirectTo
}

Redirect.prototype.onResponse = function (response) {
  var self = this
  var request = self.request

  var redirectTo = self.redirectTo(response)
  if (!redirectTo || !self.allowRedirect.call(request, response)) {
    return false
  }

  request.debug('redirect to', redirectTo)

  // ignore any potential response body.  it cannot possibly be useful
  // to us at this point.
  // response.resume should be defined, but check anyway before calling. Workaround for browserify.
  if (response.resume) {
    response.resume()
  }

  if (self.redirectsFollowed >= self.maxRedirects) {
    request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href))
    return false
  }
  self.redirectsFollowed += 1

  if (!isUrl.test(redirectTo)) {
    redirectTo = url.resolve(request.uri.href, redirectTo)
  }

  var uriPrev = request.uri
  request.uri = url.parse(redirectTo)

  // handle the case where we change protocol from https to http or vice versa
  if (request.uri.protocol !== uriPrev.protocol) {
    delete request.agent
  }

  self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo })

  if (self.followAllRedirects && request.method !== 'HEAD' &&
    response.statusCode !== 401 && response.statusCode !== 307) {
    request.method = self.followOriginalHttpMethod ? request.method : 'GET'
  }
  // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215
  delete request.src
  delete request.req
  delete request._started
  if (response.statusCode !== 401 && response.statusCode !== 307) {
    // Remove parameters from the previous response, unless this is the second request
    // for a server that requires digest authentication.
    delete request.body
    delete request._form
    if (request.headers) {
      request.removeHeader('host')
      request.removeHeader('content-type')
      request.removeHeader('content-length')
      if (request.uri.hostname !== request.originalHost.split(':')[0]) {
        // Remove authorization if changing hostnames (but not if just
        // changing ports or protocols).  This matches the behavior of curl:
        // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710
        request.removeHeader('authorization')
      }
    }
  }

  if (!self.removeRefererHeader) {
    request.setHeader('referer', uriPrev.href)
  }

  request.emit('redirect')

  request.init()

  return true
}

exports.Redirect = Redirect


/***/ }),
/* 1039 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var url = __webpack_require__(8)
var tunnel = __webpack_require__(1089)

var defaultProxyHeaderWhiteList = [
  'accept',
  'accept-charset',
  'accept-encoding',
  'accept-language',
  'accept-ranges',
  'cache-control',
  'content-encoding',
  'content-language',
  'content-location',
  'content-md5',
  'content-range',
  'content-type',
  'connection',
  'date',
  'expect',
  'max-forwards',
  'pragma',
  'referer',
  'te',
  'user-agent',
  'via'
]

var defaultProxyHeaderExclusiveList = [
  'proxy-authorization'
]

function constructProxyHost (uriObject) {
  var port = uriObject.port
  var protocol = uriObject.protocol
  var proxyHost = uriObject.hostname + ':'

  if (port) {
    proxyHost += port
  } else if (protocol === 'https:') {
    proxyHost += '443'
  } else {
    proxyHost += '80'
  }

  return proxyHost
}

function constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) {
  var whiteList = proxyHeaderWhiteList
    .reduce(function (set, header) {
      set[header.toLowerCase()] = true
      return set
    }, {})

  return Object.keys(headers)
    .filter(function (header) {
      return whiteList[header.toLowerCase()]
    })
    .reduce(function (set, header) {
      set[header] = headers[header]
      return set
    }, {})
}

function constructTunnelOptions (request, proxyHeaders) {
  var proxy = request.proxy

  var tunnelOptions = {
    proxy: {
      host: proxy.hostname,
      port: +proxy.port,
      proxyAuth: proxy.auth,
      headers: proxyHeaders
    },
    headers: request.headers,
    ca: request.ca,
    cert: request.cert,
    key: request.key,
    passphrase: request.passphrase,
    pfx: request.pfx,
    ciphers: request.ciphers,
    rejectUnauthorized: request.rejectUnauthorized,
    secureOptions: request.secureOptions,
    secureProtocol: request.secureProtocol
  }

  return tunnelOptions
}

function constructTunnelFnName (uri, proxy) {
  var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')
  var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')
  return [uriProtocol, proxyProtocol].join('Over')
}

function getTunnelFn (request) {
  var uri = request.uri
  var proxy = request.proxy
  var tunnelFnName = constructTunnelFnName(uri, proxy)
  return tunnel[tunnelFnName]
}

function Tunnel (request) {
  this.request = request
  this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
  this.proxyHeaderExclusiveList = []
  if (typeof request.tunnel !== 'undefined') {
    this.tunnelOverride = request.tunnel
  }
}

Tunnel.prototype.isEnabled = function () {
  var self = this
  var request = self.request
    // Tunnel HTTPS by default. Allow the user to override this setting.

  // If self.tunnelOverride is set (the user specified a value), use it.
  if (typeof self.tunnelOverride !== 'undefined') {
    return self.tunnelOverride
  }

  // If the destination is HTTPS, tunnel.
  if (request.uri.protocol === 'https:') {
    return true
  }

  // Otherwise, do not use tunnel.
  return false
}

Tunnel.prototype.setup = function (options) {
  var self = this
  var request = self.request

  options = options || {}

  if (typeof request.proxy === 'string') {
    request.proxy = url.parse(request.proxy)
  }

  if (!request.proxy || !request.tunnel) {
    return false
  }

  // Setup Proxy Header Exclusive List and White List
  if (options.proxyHeaderWhiteList) {
    self.proxyHeaderWhiteList = options.proxyHeaderWhiteList
  }
  if (options.proxyHeaderExclusiveList) {
    self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList
  }

  var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
  var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)

  // Setup Proxy Headers and Proxy Headers Host
  // Only send the Proxy White Listed Header names
  var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)
  proxyHeaders.host = constructProxyHost(request.uri)

  proxyHeaderExclusiveList.forEach(request.removeHeader, request)

  // Set Agent from Tunnel Data
  var tunnelFn = getTunnelFn(request)
  var tunnelOptions = constructTunnelOptions(request, proxyHeaders)
  request.agent = tunnelFn(tunnelOptions)

  return true
}

Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList
Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList
exports.Tunnel = Tunnel


/***/ }),
/* 1040 */
/***/ (function(module, exports, __webpack_require__) {

var rng = __webpack_require__(411);
var bytesToUuid = __webpack_require__(410);

// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

var _nodeId;
var _clockseq;

// Previous uuid creation time
var _lastMSecs = 0;
var _lastNSecs = 0;

// See https://github.com/broofa/node-uuid for API details
function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || [];

  options = options || {};
  var node = options.node || _nodeId;
  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;

  // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189
  if (node == null || clockseq == null) {
    var seedBytes = rng();
    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [
        seedBytes[0] | 0x01,
        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
      ];
    }
    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  }

  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();

  // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock
  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;

  // Time since last uuid creation (in msecs)
  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;

  // Per 4.2.1.2, Bump clockseq on clock regression
  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  }

  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval
  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  }

  // Per 4.2.1.2 Throw error if too many uuids are requested
  if (nsecs >= 10000) {
    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq;

  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
  msecs += 12219292800000;

  // `time_low`
  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff;

  // `time_mid`
  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff;

  // `time_high_and_version`
  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
  b[i++] = tmh >>> 16 & 0xff;

  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
  b[i++] = clockseq >>> 8 | 0x80;

  // `clock_seq_low`
  b[i++] = clockseq & 0xff;

  // `node`
  for (var n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf ? buf : bytesToUuid(b);
}

module.exports = v1;


/***/ }),
/* 1041 */
/***/ (function(module, exports, __webpack_require__) {

var rng = __webpack_require__(411);
var bytesToUuid = __webpack_require__(410);

function v4(options, buf, offset) {
  var i = buf && offset || 0;

  if (typeof(options) == 'string') {
    buf = options === 'binary' ? new Array(16) : null;
    options = null;
  }
  options = options || {};

  var rnds = options.random || (options.rng || rng)();

  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
  rnds[6] = (rnds[6] & 0x0f) | 0x40;
  rnds[8] = (rnds[8] & 0x3f) | 0x80;

  // Copy bytes to buffer, if provided
  if (buf) {
    for (var ii = 0; ii < 16; ++ii) {
      buf[i + ii] = rnds[ii];
    }
  }

  return buf || bytesToUuid(rnds);
}

module.exports = v4;


/***/ }),
/* 1042 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var http = __webpack_require__(27)
var https = __webpack_require__(45)
var url = __webpack_require__(8)
var util = __webpack_require__(2)
var stream = __webpack_require__(22)
var zlib = __webpack_require__(87)
var aws2 = __webpack_require__(591)
var aws4 = __webpack_require__(592)
var httpSignature = __webpack_require__(882)
var mime = __webpack_require__(379)
var caseless = __webpack_require__(194)
var ForeverAgent = __webpack_require__(809)
var FormData = __webpack_require__(810)
var extend = __webpack_require__(216)
var isstream = __webpack_require__(368)
var isTypedArray = __webpack_require__(905).strict
var helpers = __webpack_require__(235)
var cookies = __webpack_require__(409)
var getProxyFromURI = __webpack_require__(1032)
var Querystring = __webpack_require__(1037).Querystring
var Har = __webpack_require__(1033).Har
var Auth = __webpack_require__(1031).Auth
var OAuth = __webpack_require__(1036).OAuth
var hawk = __webpack_require__(1034)
var Multipart = __webpack_require__(1035).Multipart
var Redirect = __webpack_require__(1038).Redirect
var Tunnel = __webpack_require__(1039).Tunnel
var now = __webpack_require__(992)
var Buffer = __webpack_require__(55).Buffer

var safeStringify = helpers.safeStringify
var isReadStream = helpers.isReadStream
var toBase64 = helpers.toBase64
var defer = helpers.defer
var copy = helpers.copy
var version = helpers.version
var globalCookieJar = cookies.jar()

var globalPool = {}

function filterForNonReserved (reserved, options) {
  // Filter out properties that are not reserved.
  // Reserved values are passed in at call site.

  var object = {}
  for (var i in options) {
    var notReserved = (reserved.indexOf(i) === -1)
    if (notReserved) {
      object[i] = options[i]
    }
  }
  return object
}

function filterOutReservedFunctions (reserved, options) {
  // Filter out properties that are functions and are reserved.
  // Reserved values are passed in at call site.

  var object = {}
  for (var i in options) {
    var isReserved = !(reserved.indexOf(i) === -1)
    var isFunction = (typeof options[i] === 'function')
    if (!(isReserved && isFunction)) {
      object[i] = options[i]
    }
  }
  return object
}

// Return a simpler request object to allow serialization
function requestToJSON () {
  var self = this
  return {
    uri: self.uri,
    method: self.method,
    headers: self.headers
  }
}

// Return a simpler response object to allow serialization
function responseToJSON () {
  var self = this
  return {
    statusCode: self.statusCode,
    body: self.body,
    headers: self.headers,
    request: requestToJSON.call(self.request)
  }
}

function Request (options) {
  // if given the method property in options, set property explicitMethod to true

  // extend the Request instance with any non-reserved properties
  // remove any reserved functions from the options object
  // set Request instance to be readable and writable
  // call init

  var self = this

  // start with HAR, then override with additional options
  if (options.har) {
    self._har = new Har(self)
    options = self._har.options(options)
  }

  stream.Stream.call(self)
  var reserved = Object.keys(Request.prototype)
  var nonReserved = filterForNonReserved(reserved, options)

  extend(self, nonReserved)
  options = filterOutReservedFunctions(reserved, options)

  self.readable = true
  self.writable = true
  if (options.method) {
    self.explicitMethod = true
  }
  self._qs = new Querystring(self)
  self._auth = new Auth(self)
  self._oauth = new OAuth(self)
  self._multipart = new Multipart(self)
  self._redirect = new Redirect(self)
  self._tunnel = new Tunnel(self)
  self.init(options)
}

util.inherits(Request, stream.Stream)

// Debugging
Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG)
function debug () {
  if (Request.debug) {
    console.error('REQUEST %s', util.format.apply(util, arguments))
  }
}
Request.prototype.debug = debug

Request.prototype.init = function (options) {
  // init() contains all the code to setup the request object.
  // the actual outgoing request is not started until start() is called
  // this function is called from both the constructor and on redirect.
  var self = this
  if (!options) {
    options = {}
  }
  self.headers = self.headers ? copy(self.headers) : {}

  // Delete headers with value undefined since they break
  // ClientRequest.OutgoingMessage.setHeader in node 0.12
  for (var headerName in self.headers) {
    if (typeof self.headers[headerName] === 'undefined') {
      delete self.headers[headerName]
    }
  }

  caseless.httpify(self, self.headers)

  if (!self.method) {
    self.method = options.method || 'GET'
  }
  if (!self.localAddress) {
    self.localAddress = options.localAddress
  }

  self._qs.init(options)

  debug(options)
  if (!self.pool && self.pool !== false) {
    self.pool = globalPool
  }
  self.dests = self.dests || []
  self.__isRequestRequest = true

  // Protect against double callback
  if (!self._callback && self.callback) {
    self._callback = self.callback
    self.callback = function () {
      if (self._callbackCalled) {
        return // Print a warning maybe?
      }
      self._callbackCalled = true
      self._callback.apply(self, arguments)
    }
    self.on('error', self.callback.bind())
    self.on('complete', self.callback.bind(self, null))
  }

  // People use this property instead all the time, so support it
  if (!self.uri && self.url) {
    self.uri = self.url
    delete self.url
  }

  // If there's a baseUrl, then use it as the base URL (i.e. uri must be
  // specified as a relative path and is appended to baseUrl).
  if (self.baseUrl) {
    if (typeof self.baseUrl !== 'string') {
      return self.emit('error', new Error('options.baseUrl must be a string'))
    }

    if (typeof self.uri !== 'string') {
      return self.emit('error', new Error('options.uri must be a string when using options.baseUrl'))
    }

    if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) {
      return self.emit('error', new Error('options.uri must be a path when using options.baseUrl'))
    }

    // Handle all cases to make sure that there's only one slash between
    // baseUrl and uri.
    var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1
    var uriStartsWithSlash = self.uri.indexOf('/') === 0

    if (baseUrlEndsWithSlash && uriStartsWithSlash) {
      self.uri = self.baseUrl + self.uri.slice(1)
    } else if (baseUrlEndsWithSlash || uriStartsWithSlash) {
      self.uri = self.baseUrl + self.uri
    } else if (self.uri === '') {
      self.uri = self.baseUrl
    } else {
      self.uri = self.baseUrl + '/' + self.uri
    }
    delete self.baseUrl
  }

  // A URI is needed by this point, emit error if we haven't been able to get one
  if (!self.uri) {
    return self.emit('error', new Error('options.uri is a required argument'))
  }

  // If a string URI/URL was given, parse it into a URL object
  if (typeof self.uri === 'string') {
    self.uri = url.parse(self.uri)
  }

  // Some URL objects are not from a URL parsed string and need href added
  if (!self.uri.href) {
    self.uri.href = url.format(self.uri)
  }

  // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme
  if (self.uri.protocol === 'unix:') {
    return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))
  }

  // Support Unix Sockets
  if (self.uri.host === 'unix') {
    self.enableUnixSocket()
  }

  if (self.strictSSL === false) {
    self.rejectUnauthorized = false
  }

  if (!self.uri.pathname) { self.uri.pathname = '/' }

  if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {
    // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar
    // Detect and reject it as soon as possible
    var faultyUri = url.format(self.uri)
    var message = 'Invalid URI "' + faultyUri + '"'
    if (Object.keys(options).length === 0) {
      // No option ? This can be the sign of a redirect
      // As this is a case where the user cannot do anything (they didn't call request directly with this URL)
      // they should be warned that it can be caused by a redirection (can save some hair)
      message += '. This can be caused by a crappy redirection.'
    }
    // This error was fatal
    self.abort()
    return self.emit('error', new Error(message))
  }

  if (!self.hasOwnProperty('proxy')) {
    self.proxy = getProxyFromURI(self.uri)
  }

  self.tunnel = self._tunnel.isEnabled()
  if (self.proxy) {
    self._tunnel.setup(options)
  }

  self._redirect.onRequest(options)

  self.setHost = false
  if (!self.hasHeader('host')) {
    var hostHeaderName = self.originalHostHeaderName || 'host'
    // When used with an IPv6 address, `host` will provide
    // the correct bracketed format, unlike using `hostname` and
    // optionally adding the `port` when necessary.
    self.setHeader(hostHeaderName, self.uri.host)
    self.setHost = true
  }

  self.jar(self._jar || options.jar)

  if (!self.uri.port) {
    if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 }
  }

  if (self.proxy && !self.tunnel) {
    self.port = self.proxy.port
    self.host = self.proxy.hostname
  } else {
    self.port = self.uri.port
    self.host = self.uri.hostname
  }

  if (options.form) {
    self.form(options.form)
  }

  if (options.formData) {
    var formData = options.formData
    var requestForm = self.form()
    var appendFormValue = function (key, value) {
      if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) {
        requestForm.append(key, value.value, value.options)
      } else {
        requestForm.append(key, value)
      }
    }
    for (var formKey in formData) {
      if (formData.hasOwnProperty(formKey)) {
        var formValue = formData[formKey]
        if (formValue instanceof Array) {
          for (var j = 0; j < formValue.length; j++) {
            appendFormValue(formKey, formValue[j])
          }
        } else {
          appendFormValue(formKey, formValue)
        }
      }
    }
  }

  if (options.qs) {
    self.qs(options.qs)
  }

  if (self.uri.path) {
    self.path = self.uri.path
  } else {
    self.path = self.uri.pathname + (self.uri.search || '')
  }

  if (self.path.length === 0) {
    self.path = '/'
  }

  // Auth must happen last in case signing is dependent on other headers
  if (options.aws) {
    self.aws(options.aws)
  }

  if (options.hawk) {
    self.hawk(options.hawk)
  }

  if (options.httpSignature) {
    self.httpSignature(options.httpSignature)
  }

  if (options.auth) {
    if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {
      options.auth.user = options.auth.username
    }
    if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {
      options.auth.pass = options.auth.password
    }

    self.auth(
      options.auth.user,
      options.auth.pass,
      options.auth.sendImmediately,
      options.auth.bearer
    )
  }

  if (self.gzip && !self.hasHeader('accept-encoding')) {
    self.setHeader('accept-encoding', 'gzip, deflate')
  }

  if (self.uri.auth && !self.hasHeader('authorization')) {
    var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) })
    self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
  }

  if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {
    var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) })
    var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
    self.setHeader('proxy-authorization', authHeader)
  }

  if (self.proxy && !self.tunnel) {
    self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
  }

  if (options.json) {
    self.json(options.json)
  }
  if (options.multipart) {
    self.multipart(options.multipart)
  }

  if (options.time) {
    self.timing = true

    // NOTE: elapsedTime is deprecated in favor of .timings
    self.elapsedTime = self.elapsedTime || 0
  }

  function setContentLength () {
    if (isTypedArray(self.body)) {
      self.body = Buffer.from(self.body)
    }

    if (!self.hasHeader('content-length')) {
      var length
      if (typeof self.body === 'string') {
        length = Buffer.byteLength(self.body)
      } else if (Array.isArray(self.body)) {
        length = self.body.reduce(function (a, b) { return a + b.length }, 0)
      } else {
        length = self.body.length
      }

      if (length) {
        self.setHeader('content-length', length)
      } else {
        self.emit('error', new Error('Argument error, options.body.'))
      }
    }
  }
  if (self.body && !isstream(self.body)) {
    setContentLength()
  }

  if (options.oauth) {
    self.oauth(options.oauth)
  } else if (self._oauth.params && self.hasHeader('authorization')) {
    self.oauth(self._oauth.params)
  }

  var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
  var defaultModules = {'http:': http, 'https:': https}
  var httpModules = self.httpModules || {}

  self.httpModule = httpModules[protocol] || defaultModules[protocol]

  if (!self.httpModule) {
    return self.emit('error', new Error('Invalid protocol: ' + protocol))
  }

  if (options.ca) {
    self.ca = options.ca
  }

  if (!self.agent) {
    if (options.agentOptions) {
      self.agentOptions = options.agentOptions
    }

    if (options.agentClass) {
      self.agentClass = options.agentClass
    } else if (options.forever) {
      var v = version()
      // use ForeverAgent in node 0.10- only
      if (v.major === 0 && v.minor <= 10) {
        self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
      } else {
        self.agentClass = self.httpModule.Agent
        self.agentOptions = self.agentOptions || {}
        self.agentOptions.keepAlive = true
      }
    } else {
      self.agentClass = self.httpModule.Agent
    }
  }

  if (self.pool === false) {
    self.agent = false
  } else {
    self.agent = self.agent || self.getNewAgent()
  }

  self.on('pipe', function (src) {
    if (self.ntick && self._started) {
      self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.'))
    }
    self.src = src
    if (isReadStream(src)) {
      if (!self.hasHeader('content-type')) {
        self.setHeader('content-type', mime.lookup(src.path))
      }
    } else {
      if (src.headers) {
        for (var i in src.headers) {
          if (!self.hasHeader(i)) {
            self.setHeader(i, src.headers[i])
          }
        }
      }
      if (self._json && !self.hasHeader('content-type')) {
        self.setHeader('content-type', 'application/json')
      }
      if (src.method && !self.explicitMethod) {
        self.method = src.method
      }
    }

  // self.on('pipe', function () {
  //   console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')
  // })
  })

  defer(function () {
    if (self._aborted) {
      return
    }

    var end = function () {
      if (self._form) {
        if (!self._auth.hasAuth) {
          self._form.pipe(self)
        } else if (self._auth.hasAuth && self._auth.sentAuth) {
          self._form.pipe(self)
        }
      }
      if (self._multipart && self._multipart.chunked) {
        self._multipart.body.pipe(self)
      }
      if (self.body) {
        if (isstream(self.body)) {
          self.body.pipe(self)
        } else {
          setContentLength()
          if (Array.isArray(self.body)) {
            self.body.forEach(function (part) {
              self.write(part)
            })
          } else {
            self.write(self.body)
          }
          self.end()
        }
      } else if (self.requestBodyStream) {
        console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')
        self.requestBodyStream.pipe(self)
      } else if (!self.src) {
        if (self._auth.hasAuth && !self._auth.sentAuth) {
          self.end()
          return
        }
        if (self.method !== 'GET' && typeof self.method !== 'undefined') {
          self.setHeader('content-length', 0)
        }
        self.end()
      }
    }

    if (self._form && !self.hasHeader('content-length')) {
      // Before ending the request, we had to compute the length of the whole form, asyncly
      self.setHeader(self._form.getHeaders(), true)
      self._form.getLength(function (err, length) {
        if (!err && !isNaN(length)) {
          self.setHeader('content-length', length)
        }
        end()
      })
    } else {
      end()
    }

    self.ntick = true
  })
}

Request.prototype.getNewAgent = function () {
  var self = this
  var Agent = self.agentClass
  var options = {}
  if (self.agentOptions) {
    for (var i in self.agentOptions) {
      options[i] = self.agentOptions[i]
    }
  }
  if (self.ca) {
    options.ca = self.ca
  }
  if (self.ciphers) {
    options.ciphers = self.ciphers
  }
  if (self.secureProtocol) {
    options.secureProtocol = self.secureProtocol
  }
  if (self.secureOptions) {
    options.secureOptions = self.secureOptions
  }
  if (typeof self.rejectUnauthorized !== 'undefined') {
    options.rejectUnauthorized = self.rejectUnauthorized
  }

  if (self.cert && self.key) {
    options.key = self.key
    options.cert = self.cert
  }

  if (self.pfx) {
    options.pfx = self.pfx
  }

  if (self.passphrase) {
    options.passphrase = self.passphrase
  }

  var poolKey = ''

  // different types of agents are in different pools
  if (Agent !== self.httpModule.Agent) {
    poolKey += Agent.name
  }

  // ca option is only relevant if proxy or destination are https
  var proxy = self.proxy
  if (typeof proxy === 'string') {
    proxy = url.parse(proxy)
  }
  var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'

  if (isHttps) {
    if (options.ca) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.ca
    }

    if (typeof options.rejectUnauthorized !== 'undefined') {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.rejectUnauthorized
    }

    if (options.cert) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
    }

    if (options.pfx) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.pfx.toString('ascii')
    }

    if (options.ciphers) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.ciphers
    }

    if (options.secureProtocol) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.secureProtocol
    }

    if (options.secureOptions) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.secureOptions
    }
  }

  if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) {
    // not doing anything special.  Use the globalAgent
    return self.httpModule.globalAgent
  }

  // we're using a stored agent.  Make sure it's protocol-specific
  poolKey = self.uri.protocol + poolKey

  // generate a new agent for this setting if none yet exists
  if (!self.pool[poolKey]) {
    self.pool[poolKey] = new Agent(options)
    // properly set maxSockets on new agents
    if (self.pool.maxSockets) {
      self.pool[poolKey].maxSockets = self.pool.maxSockets
    }
  }

  return self.pool[poolKey]
}

Request.prototype.start = function () {
  // start() is called once we are ready to send the outgoing HTTP request.
  // this is usually called on the first write(), end() or on nextTick()
  var self = this

  if (self.timing) {
    // All timings will be relative to this request's startTime.  In order to do this,
    // we need to capture the wall-clock start time (via Date), immediately followed
    // by the high-resolution timer (via now()).  While these two won't be set
    // at the _exact_ same time, they should be close enough to be able to calculate
    // high-resolution, monotonically non-decreasing timestamps relative to startTime.
    var startTime = new Date().getTime()
    var startTimeNow = now()
  }

  if (self._aborted) {
    return
  }

  self._started = true
  self.method = self.method || 'GET'
  self.href = self.uri.href

  if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {
    self.setHeader('content-length', self.src.stat.size)
  }
  if (self._aws) {
    self.aws(self._aws, true)
  }

  // We have a method named auth, which is completely different from the http.request
  // auth option.  If we don't remove it, we're gonna have a bad time.
  var reqOptions = copy(self)
  delete reqOptions.auth

  debug('make request', self.uri.href)

  // node v6.8.0 now supports a `timeout` value in `http.request()`, but we
  // should delete it for now since we handle timeouts manually for better
  // consistency with node versions before v6.8.0
  delete reqOptions.timeout

  try {
    self.req = self.httpModule.request(reqOptions)
  } catch (err) {
    self.emit('error', err)
    return
  }

  if (self.timing) {
    self.startTime = startTime
    self.startTimeNow = startTimeNow

    // Timing values will all be relative to startTime (by comparing to startTimeNow
    // so we have an accurate clock)
    self.timings = {}
  }

  var timeout
  if (self.timeout && !self.timeoutTimer) {
    if (self.timeout < 0) {
      timeout = 0
    } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) {
      timeout = self.timeout
    }
  }

  self.req.on('response', self.onRequestResponse.bind(self))
  self.req.on('error', self.onRequestError.bind(self))
  self.req.on('drain', function () {
    self.emit('drain')
  })

  self.req.on('socket', function (socket) {
    // `._connecting` was the old property which was made public in node v6.1.0
    var isConnecting = socket._connecting || socket.connecting
    if (self.timing) {
      self.timings.socket = now() - self.startTimeNow

      if (isConnecting) {
        var onLookupTiming = function () {
          self.timings.lookup = now() - self.startTimeNow
        }

        var onConnectTiming = function () {
          self.timings.connect = now() - self.startTimeNow
        }

        socket.once('lookup', onLookupTiming)
        socket.once('connect', onConnectTiming)

        // clean up timing event listeners if needed on error
        self.req.once('error', function () {
          socket.removeListener('lookup', onLookupTiming)
          socket.removeListener('connect', onConnectTiming)
        })
      }
    }

    var setReqTimeout = function () {
      // This timeout sets the amount of time to wait *between* bytes sent
      // from the server once connected.
      //
      // In particular, it's useful for erroring if the server fails to send
      // data halfway through streaming a response.
      self.req.setTimeout(timeout, function () {
        if (self.req) {
          self.abort()
          var e = new Error('ESOCKETTIMEDOUT')
          e.code = 'ESOCKETTIMEDOUT'
          e.connect = false
          self.emit('error', e)
        }
      })
    }
    if (timeout !== undefined) {
      // Only start the connection timer if we're actually connecting a new
      // socket, otherwise if we're already connected (because this is a
      // keep-alive connection) do not bother. This is important since we won't
      // get a 'connect' event for an already connected socket.
      if (isConnecting) {
        var onReqSockConnect = function () {
          socket.removeListener('connect', onReqSockConnect)
          clearTimeout(self.timeoutTimer)
          self.timeoutTimer = null
          setReqTimeout()
        }

        socket.on('connect', onReqSockConnect)

        self.req.on('error', function (err) { // eslint-disable-line handle-callback-err
          socket.removeListener('connect', onReqSockConnect)
        })

        // Set a timeout in memory - this block will throw if the server takes more
        // than `timeout` to write the HTTP status and headers (corresponding to
        // the on('response') event on the client). NB: this measures wall-clock
        // time, not the time between bytes sent by the server.
        self.timeoutTimer = setTimeout(function () {
          socket.removeListener('connect', onReqSockConnect)
          self.abort()
          var e = new Error('ETIMEDOUT')
          e.code = 'ETIMEDOUT'
          e.connect = true
          self.emit('error', e)
        }, timeout)
      } else {
        // We're already connected
        setReqTimeout()
      }
    }
    self.emit('socket', socket)
  })

  self.emit('request', self.req)
}

Request.prototype.onRequestError = function (error) {
  var self = this
  if (self._aborted) {
    return
  }
  if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' &&
    self.agent.addRequestNoreuse) {
    self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
    self.start()
    self.req.end()
    return
  }
  if (self.timeout && self.timeoutTimer) {
    clearTimeout(self.timeoutTimer)
    self.timeoutTimer = null
  }
  self.emit('error', error)
}

Request.prototype.onRequestResponse = function (response) {
  var self = this

  if (self.timing) {
    self.timings.response = now() - self.startTimeNow
  }

  debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)
  response.on('end', function () {
    if (self.timing) {
      self.timings.end = now() - self.startTimeNow
      response.timingStart = self.startTime

      // fill in the blanks for any periods that didn't trigger, such as
      // no lookup or connect due to keep alive
      if (!self.timings.socket) {
        self.timings.socket = 0
      }
      if (!self.timings.lookup) {
        self.timings.lookup = self.timings.socket
      }
      if (!self.timings.connect) {
        self.timings.connect = self.timings.lookup
      }
      if (!self.timings.response) {
        self.timings.response = self.timings.connect
      }

      debug('elapsed time', self.timings.end)

      // elapsedTime includes all redirects
      self.elapsedTime += Math.round(self.timings.end)

      // NOTE: elapsedTime is deprecated in favor of .timings
      response.elapsedTime = self.elapsedTime

      // timings is just for the final fetch
      response.timings = self.timings

      // pre-calculate phase timings as well
      response.timingPhases = {
        wait: self.timings.socket,
        dns: self.timings.lookup - self.timings.socket,
        tcp: self.timings.connect - self.timings.lookup,
        firstByte: self.timings.response - self.timings.connect,
        download: self.timings.end - self.timings.response,
        total: self.timings.end
      }
    }
    debug('response end', self.uri.href, response.statusCode, response.headers)
  })

  if (self._aborted) {
    debug('aborted', self.uri.href)
    response.resume()
    return
  }

  self.response = response
  response.request = self
  response.toJSON = responseToJSON

  // XXX This is different on 0.10, because SSL is strict by default
  if (self.httpModule === https &&
    self.strictSSL && (!response.hasOwnProperty('socket') ||
    !response.socket.authorized)) {
    debug('strict ssl error', self.uri.href)
    var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL'
    self.emit('error', new Error('SSL Error: ' + sslErr))
    return
  }

  // Save the original host before any redirect (if it changes, we need to
  // remove any authorization headers).  Also remember the case of the header
  // name because lots of broken servers expect Host instead of host and we
  // want the caller to be able to specify this.
  self.originalHost = self.getHeader('host')
  if (!self.originalHostHeaderName) {
    self.originalHostHeaderName = self.hasHeader('host')
  }
  if (self.setHost) {
    self.removeHeader('host')
  }
  if (self.timeout && self.timeoutTimer) {
    clearTimeout(self.timeoutTimer)
    self.timeoutTimer = null
  }

  var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar
  var addCookie = function (cookie) {
    // set the cookie if it's domain in the href's domain.
    try {
      targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true})
    } catch (e) {
      self.emit('error', e)
    }
  }

  response.caseless = caseless(response.headers)

  if (response.caseless.has('set-cookie') && (!self._disableCookies)) {
    var headerName = response.caseless.has('set-cookie')
    if (Array.isArray(response.headers[headerName])) {
      response.headers[headerName].forEach(addCookie)
    } else {
      addCookie(response.headers[headerName])
    }
  }

  if (self._redirect.onResponse(response)) {
    return // Ignore the rest of the response
  } else {
    // Be a good stream and emit end when the response is finished.
    // Hack to emit end on close because of a core bug that never fires end
    response.on('close', function () {
      if (!self._ended) {
        self.response.emit('end')
      }
    })

    response.once('end', function () {
      self._ended = true
    })

    var noBody = function (code) {
      return (
        self.method === 'HEAD' ||
        // Informational
        (code >= 100 && code < 200) ||
        // No Content
        code === 204 ||
        // Not Modified
        code === 304
      )
    }

    var responseContent
    if (self.gzip && !noBody(response.statusCode)) {
      var contentEncoding = response.headers['content-encoding'] || 'identity'
      contentEncoding = contentEncoding.trim().toLowerCase()

      // Be more lenient with decoding compressed responses, since (very rarely)
      // servers send slightly invalid gzip responses that are still accepted
      // by common browsers.
      // Always using Z_SYNC_FLUSH is what cURL does.
      var zlibOptions = {
        flush: zlib.Z_SYNC_FLUSH,
        finishFlush: zlib.Z_SYNC_FLUSH
      }

      if (contentEncoding === 'gzip') {
        responseContent = zlib.createGunzip(zlibOptions)
        response.pipe(responseContent)
      } else if (contentEncoding === 'deflate') {
        responseContent = zlib.createInflate(zlibOptions)
        response.pipe(responseContent)
      } else {
        // Since previous versions didn't check for Content-Encoding header,
        // ignore any invalid values to preserve backwards-compatibility
        if (contentEncoding !== 'identity') {
          debug('ignoring unrecognized Content-Encoding ' + contentEncoding)
        }
        responseContent = response
      }
    } else {
      responseContent = response
    }

    if (self.encoding) {
      if (self.dests.length !== 0) {
        console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')
      } else {
        responseContent.setEncoding(self.encoding)
      }
    }

    if (self._paused) {
      responseContent.pause()
    }

    self.responseContent = responseContent

    self.emit('response', response)

    self.dests.forEach(function (dest) {
      self.pipeDest(dest)
    })

    responseContent.on('data', function (chunk) {
      if (self.timing && !self.responseStarted) {
        self.responseStartTime = (new Date()).getTime()

        // NOTE: responseStartTime is deprecated in favor of .timings
        response.responseStartTime = self.responseStartTime
      }
      self._destdata = true
      self.emit('data', chunk)
    })
    responseContent.once('end', function (chunk) {
      self.emit('end', chunk)
    })
    responseContent.on('error', function (error) {
      self.emit('error', error)
    })
    responseContent.on('close', function () { self.emit('close') })

    if (self.callback) {
      self.readResponseBody(response)
    } else { // if no callback
      self.on('end', function () {
        if (self._aborted) {
          debug('aborted', self.uri.href)
          return
        }
        self.emit('complete', response)
      })
    }
  }
  debug('finish init function', self.uri.href)
}

Request.prototype.readResponseBody = function (response) {
  var self = this
  debug("reading response's body")
  var buffers = []
  var bufferLength = 0
  var strings = []

  self.on('data', function (chunk) {
    if (!Buffer.isBuffer(chunk)) {
      strings.push(chunk)
    } else if (chunk.length) {
      bufferLength += chunk.length
      buffers.push(chunk)
    }
  })
  self.on('end', function () {
    debug('end event', self.uri.href)
    if (self._aborted) {
      debug('aborted', self.uri.href)
      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.
      // This can lead to leaky behavior if the user retains a reference to the request object.
      buffers = []
      bufferLength = 0
      return
    }

    if (bufferLength) {
      debug('has body', self.uri.href, bufferLength)
      response.body = Buffer.concat(buffers, bufferLength)
      if (self.encoding !== null) {
        response.body = response.body.toString(self.encoding)
      }
      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.
      // This can lead to leaky behavior if the user retains a reference to the request object.
      buffers = []
      bufferLength = 0
    } else if (strings.length) {
      // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
      // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
      if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
        strings[0] = strings[0].substring(1)
      }
      response.body = strings.join('')
    }

    if (self._json) {
      try {
        response.body = JSON.parse(response.body, self._jsonReviver)
      } catch (e) {
        debug('invalid JSON received', self.uri.href)
      }
    }
    debug('emitting complete', self.uri.href)
    if (typeof response.body === 'undefined' && !self._json) {
      response.body = self.encoding === null ? Buffer.alloc(0) : ''
    }
    self.emit('complete', response, response.body)
  })
}

Request.prototype.abort = function () {
  var self = this
  self._aborted = true

  if (self.req) {
    self.req.abort()
  } else if (self.response) {
    self.response.destroy()
  }

  self.emit('abort')
}

Request.prototype.pipeDest = function (dest) {
  var self = this
  var response = self.response
  // Called after the response is received
  if (dest.headers && !dest.headersSent) {
    if (response.caseless.has('content-type')) {
      var ctname = response.caseless.has('content-type')
      if (dest.setHeader) {
        dest.setHeader(ctname, response.headers[ctname])
      } else {
        dest.headers[ctname] = response.headers[ctname]
      }
    }

    if (response.caseless.has('content-length')) {
      var clname = response.caseless.has('content-length')
      if (dest.setHeader) {
        dest.setHeader(clname, response.headers[clname])
      } else {
        dest.headers[clname] = response.headers[clname]
      }
    }
  }
  if (dest.setHeader && !dest.headersSent) {
    for (var i in response.headers) {
      // If the response content is being decoded, the Content-Encoding header
      // of the response doesn't represent the piped content, so don't pass it.
      if (!self.gzip || i !== 'content-encoding') {
        dest.setHeader(i, response.headers[i])
      }
    }
    dest.statusCode = response.statusCode
  }
  if (self.pipefilter) {
    self.pipefilter(response, dest)
  }
}

Request.prototype.qs = function (q, clobber) {
  var self = this
  var base
  if (!clobber && self.uri.query) {
    base = self._qs.parse(self.uri.query)
  } else {
    base = {}
  }

  for (var i in q) {
    base[i] = q[i]
  }

  var qs = self._qs.stringify(base)

  if (qs === '') {
    return self
  }

  self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs)
  self.url = self.uri
  self.path = self.uri.path

  if (self.uri.host === 'unix') {
    self.enableUnixSocket()
  }

  return self
}
Request.prototype.form = function (form) {
  var self = this
  if (form) {
    if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
      self.setHeader('content-type', 'application/x-www-form-urlencoded')
    }
    self.body = (typeof form === 'string')
      ? self._qs.rfc3986(form.toString('utf8'))
      : self._qs.stringify(form).toString('utf8')
    return self
  }
  // create form-data object
  self._form = new FormData()
  self._form.on('error', function (err) {
    err.message = 'form-data: ' + err.message
    self.emit('error', err)
    self.abort()
  })
  return self._form
}
Request.prototype.multipart = function (multipart) {
  var self = this

  self._multipart.onRequest(multipart)

  if (!self._multipart.chunked) {
    self.body = self._multipart.body
  }

  return self
}
Request.prototype.json = function (val) {
  var self = this

  if (!self.hasHeader('accept')) {
    self.setHeader('accept', 'application/json')
  }

  if (typeof self.jsonReplacer === 'function') {
    self._jsonReplacer = self.jsonReplacer
  }

  self._json = true
  if (typeof val === 'boolean') {
    if (self.body !== undefined) {
      if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
        self.body = safeStringify(self.body, self._jsonReplacer)
      } else {
        self.body = self._qs.rfc3986(self.body)
      }
      if (!self.hasHeader('content-type')) {
        self.setHeader('content-type', 'application/json')
      }
    }
  } else {
    self.body = safeStringify(val, self._jsonReplacer)
    if (!self.hasHeader('content-type')) {
      self.setHeader('content-type', 'application/json')
    }
  }

  if (typeof self.jsonReviver === 'function') {
    self._jsonReviver = self.jsonReviver
  }

  return self
}
Request.prototype.getHeader = function (name, headers) {
  var self = this
  var result, re, match
  if (!headers) {
    headers = self.headers
  }
  Object.keys(headers).forEach(function (key) {
    if (key.length !== name.length) {
      return
    }
    re = new RegExp(name, 'i')
    match = key.match(re)
    if (match) {
      result = headers[key]
    }
  })
  return result
}
Request.prototype.enableUnixSocket = function () {
  // Get the socket & request paths from the URL
  var unixParts = this.uri.path.split(':')
  var host = unixParts[0]
  var path = unixParts[1]
  // Apply unix properties to request
  this.socketPath = host
  this.uri.pathname = path
  this.uri.path = path
  this.uri.host = host
  this.uri.hostname = host
  this.uri.isUnix = true
}

Request.prototype.auth = function (user, pass, sendImmediately, bearer) {
  var self = this

  self._auth.onRequest(user, pass, sendImmediately, bearer)

  return self
}
Request.prototype.aws = function (opts, now) {
  var self = this

  if (!now) {
    self._aws = opts
    return self
  }

  if (opts.sign_version === 4 || opts.sign_version === '4') {
    // use aws4
    var options = {
      host: self.uri.host,
      path: self.uri.path,
      method: self.method,
      headers: {
        'content-type': self.getHeader('content-type') || ''
      },
      body: self.body
    }
    var signRes = aws4.sign(options, {
      accessKeyId: opts.key,
      secretAccessKey: opts.secret,
      sessionToken: opts.session
    })
    self.setHeader('authorization', signRes.headers.Authorization)
    self.setHeader('x-amz-date', signRes.headers['X-Amz-Date'])
    if (signRes.headers['X-Amz-Security-Token']) {
      self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token'])
    }
  } else {
    // default: use aws-sign2
    var date = new Date()
    self.setHeader('date', date.toUTCString())
    var auth = {
      key: opts.key,
      secret: opts.secret,
      verb: self.method.toUpperCase(),
      date: date,
      contentType: self.getHeader('content-type') || '',
      md5: self.getHeader('content-md5') || '',
      amazonHeaders: aws2.canonicalizeHeaders(self.headers)
    }
    var path = self.uri.path
    if (opts.bucket && path) {
      auth.resource = '/' + opts.bucket + path
    } else if (opts.bucket && !path) {
      auth.resource = '/' + opts.bucket
    } else if (!opts.bucket && path) {
      auth.resource = path
    } else if (!opts.bucket && !path) {
      auth.resource = '/'
    }
    auth.resource = aws2.canonicalizeResource(auth.resource)
    self.setHeader('authorization', aws2.authorization(auth))
  }

  return self
}
Request.prototype.httpSignature = function (opts) {
  var self = this
  httpSignature.signRequest({
    getHeader: function (header) {
      return self.getHeader(header, self.headers)
    },
    setHeader: function (header, value) {
      self.setHeader(header, value)
    },
    method: self.method,
    path: self.path
  }, opts)
  debug('httpSignature authorization', self.getHeader('authorization'))

  return self
}
Request.prototype.hawk = function (opts) {
  var self = this
  self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))
}
Request.prototype.oauth = function (_oauth) {
  var self = this

  self._oauth.onRequest(_oauth)

  return self
}

Request.prototype.jar = function (jar) {
  var self = this
  var cookies

  if (self._redirect.redirectsFollowed === 0) {
    self.originalCookieHeader = self.getHeader('cookie')
  }

  if (!jar) {
    // disable cookies
    cookies = false
    self._disableCookies = true
  } else {
    var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar
    var urihref = self.uri.href
    // fetch cookie in the Specified host
    if (targetCookieJar) {
      cookies = targetCookieJar.getCookieString(urihref)
    }
  }

  // if need cookie and cookie is not empty
  if (cookies && cookies.length) {
    if (self.originalCookieHeader) {
      // Don't overwrite existing Cookie header
      self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)
    } else {
      self.setHeader('cookie', cookies)
    }
  }
  self._jar = jar
  return self
}

// Stream API
Request.prototype.pipe = function (dest, opts) {
  var self = this

  if (self.response) {
    if (self._destdata) {
      self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))
    } else if (self._ended) {
      self.emit('error', new Error('You cannot pipe after the response has been ended.'))
    } else {
      stream.Stream.prototype.pipe.call(self, dest, opts)
      self.pipeDest(dest)
      return dest
    }
  } else {
    self.dests.push(dest)
    stream.Stream.prototype.pipe.call(self, dest, opts)
    return dest
  }
}
Request.prototype.write = function () {
  var self = this
  if (self._aborted) { return }

  if (!self._started) {
    self.start()
  }
  if (self.req) {
    return self.req.write.apply(self.req, arguments)
  }
}
Request.prototype.end = function (chunk) {
  var self = this
  if (self._aborted) { return }

  if (chunk) {
    self.write(chunk)
  }
  if (!self._started) {
    self.start()
  }
  if (self.req) {
    self.req.end()
  }
}
Request.prototype.pause = function () {
  var self = this
  if (!self.responseContent) {
    self._paused = true
  } else {
    self.responseContent.pause.apply(self.responseContent, arguments)
  }
}
Request.prototype.resume = function () {
  var self = this
  if (!self.responseContent) {
    self._paused = false
  } else {
    self.responseContent.resume.apply(self.responseContent, arguments)
  }
}
Request.prototype.destroy = function () {
  var self = this
  if (!self._ended) {
    self.end()
  } else if (self.response) {
    self.response.destroy()
  }
}

Request.defaultProxyHeaderWhiteList =
  Tunnel.defaultProxyHeaderWhiteList.slice()

Request.defaultProxyHeaderExclusiveList =
  Tunnel.defaultProxyHeaderExclusiveList.slice()

// Exports

Request.prototype.toJSON = requestToJSON
module.exports = Request


/***/ }),
/* 1043 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fs = __webpack_require__(1),
  join = __webpack_require__(0).join,
  resolve = __webpack_require__(0).resolve,
  dirname = __webpack_require__(0).dirname,
  defaultOptions = {
    extensions: ['js', 'json', 'coffee'],
    recurse: true,
    rename: function (name) {
      return name;
    },
    visit: function (obj) {
      return obj;
    }
  };

function checkFileInclusion(path, filename, options) {
  return (
    // verify file has valid extension
    (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) &&

    // if options.include is a RegExp, evaluate it and make sure the path passes
    !(options.include && options.include instanceof RegExp && !options.include.test(path)) &&

    // if options.include is a function, evaluate it and make sure the path passes
    !(options.include && typeof options.include === 'function' && !options.include(path, filename)) &&

    // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass
    !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) &&

    // if options.exclude is a function, evaluate it and make sure the path doesn't pass
    !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename))
  );
}

function requireDirectory(m, path, options) {
  var retval = {};

  // path is optional
  if (path && !options && typeof path !== 'string') {
    options = path;
    path = null;
  }

  // default options
  options = options || {};
  for (var prop in defaultOptions) {
    if (typeof options[prop] === 'undefined') {
      options[prop] = defaultOptions[prop];
    }
  }

  // if no path was passed in, assume the equivelant of __dirname from caller
  // otherwise, resolve path relative to the equivalent of __dirname
  path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path);

  // get the path of each file in specified directory, append to current tree node, recurse
  fs.readdirSync(path).forEach(function (filename) {
    var joined = join(path, filename),
      files,
      key,
      obj;

    if (fs.statSync(joined).isDirectory() && options.recurse) {
      // this node is a directory; recurse
      files = requireDirectory(m, joined, options);
      // exclude empty directories
      if (Object.keys(files).length) {
        retval[options.rename(filename, joined, filename)] = files;
      }
    } else {
      if (joined !== m.filename && checkFileInclusion(joined, filename, options)) {
        // hash node key shouldn't include file extension
        key = filename.substring(0, filename.lastIndexOf('.'));
        obj = m.require(joined);
        retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj;
      }
    }
  });

  return retval;
}

module.exports = requireDirectory;
module.exports.defaults = defaultOptions;


/***/ }),
/* 1044 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = function (_require) {
  _require = _require || !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
  var main = _require.main
  if (main && isIISNode(main)) return handleIISNode(main)
  else return main ? main.filename : process.cwd()
}

function isIISNode (main) {
  return /\\iisnode\\/.test(main.filename)
}

function handleIISNode (main) {
  if (!main.children.length) {
    return main.filename
  } else {
    return main.children[0].filename
  }
}


/***/ }),
/* 1045 */
/***/ (function(module, exports, __webpack_require__) {

(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define("reselect-tree", [], factory);
	else if(typeof exports === 'object')
		exports["reselect-tree"] = factory();
	else
		root["reselect-tree"] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 4);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1047);

/***/ }),
/* 1 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(259);

/***/ }),
/* 2 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(0);

/***/ }),
/* 3 */,
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _entries = __webpack_require__(5);

var _entries2 = _interopRequireDefault(_entries);

var _assign = __webpack_require__(6);

var _assign2 = _interopRequireDefault(_assign);

var _keys = __webpack_require__(7);

var _keys2 = _interopRequireDefault(_keys);

exports.createNestedSelector = createNestedSelector;
exports.createLeaf = createLeaf;
exports.createSelectorTree = createSelectorTree;

var _debug = __webpack_require__(0);

var _debug2 = _interopRequireDefault(_debug);

__webpack_require__(1);

var _reselect = __webpack_require__(8);

var _jsonPointer = __webpack_require__(9);

var _jsonPointer2 = _interopRequireDefault(_jsonPointer);

var _path = __webpack_require__(2);

var _path2 = _interopRequireDefault(_path);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const debug = (0, _debug2.default)("reselect-tree");

/**
 * Create a single memoized selector for a collection of named sub-selectors.
 * Behaves like `createStructuredSelector` but also allows direct invocation
 * of child selectors.
 *
 * For example:
 *
 *   const shop = createNestedSelector({
 *     items: (state) => state.items,
 *     promos: (state) => state.promos
 *   });
 *
 * Results in three selectors:
 *
 *   shop(state) ==> { items: state.items, promos: state.items }
 *   shop.items(state) => state.items
 *   shop.promos(state) => state.promos
 *
 * Override `rootSelector` to change behavior of top-level (i.e. `shop(state)`
 * in example.)
 *
 * @param {Object} selectors - object description of selector funcs
 * @param {Selector} rootSelector - specify root selector instead of aggregation
 * @return Selector
 */
function createNestedSelector(selectors, rootSelector = null) {
  let selector;

  if (!rootSelector) {
    // unspecified means default to structured aggregation
    selector = (0, _reselect.createStructuredSelector)(selectors);
  } else if (!(rootSelector instanceof Object) || !rootSelector.resultFunc) {
    // rootSelector isn't already a selector, or it's not an object...
    // forward to `createSelector()`
    selector = (0, _reselect.createSelector)(rootSelector);
  } else {
    // otherwise, just use as is
    selector = rootSelector;
  }

  // add properties for child selectors
  (0, _keys2.default)(selectors).forEach(prop => {
    selector[prop] = selectors[prop];
  });

  return selector;
}

class Leaf {
  constructor(deps, selector) {
    this.deps = deps;
    this.selector = selector;
  }

  contextualize(resolve, pointer) {
    let resolved = this.deps.map(dep => {
      if (typeof dep == 'string') {
        if (dep == "") {
          dep = "/";
        }

        let abspath = _path2.default.posix.resolve(pointer, "..", dep);

        return (...args) => {
          debug("args: %o", args);
          let selector = resolve(abspath);
          debug("resolved selector: %o", selector);
          let result = selector.apply(selector, args);
          debug("result: %o", result);
          return result;
        };
      }

      return dep;
    });

    return (0, _reselect.createSelector)(resolved, this.selector);
  }
}

function createLeaf(deps, selector) {
  return new Leaf(deps, selector);
}

class Tree {
  setRoot(root) {
    this.root = root;
  }

  resolve(abspath) {
    var resolved;
    try {
      let parsed = _jsonPointer2.default.parse(abspath);

      let cur = this.root;
      for (let step of parsed) {
        cur = cur[step];
      }

      return cur;
    } catch (e) {
      debug("failed, root: %O", this.root);
      throw e;
    }

    return resolved;
  }
}

function createSelectorTree(root) {
  let tree = new Tree();

  let selector = _createNode(root, tree.resolve.bind(tree), "");

  tree.setRoot(selector);

  return selector;
}

/**
 * Recursively create a selector node in the tree, applying context to nodes
 * as needed.
 */
function _createNode(node, resolve, pointer = "") {
  //based on type of node, operate differently
  if (node instanceof Leaf) {
    // base case - leaf nodes just need context resolution for relative deps
    return node.contextualize(resolve, pointer);
  } else if (node instanceof Object && !(node instanceof Function)) {
    // node is an object, recurse necessary

    const recurse = (key, child) => _createNode(child, resolve, `${pointer}/${key}`);

    let selectors = (0, _assign2.default)({}, ...(0, _entries2.default)(node).map(([key, child]) => ({ [key]: recurse(key, child) })));

    // special-case `_` child nodes override root selector
    const rootSelector = selectors._ || null;

    return createNestedSelector(selectors, rootSelector);
  } else {
    // default, just return
    return node;
  }
}

/***/ }),
/* 5 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(285);

/***/ }),
/* 6 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(193);

/***/ }),
/* 7 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(286);

/***/ }),
/* 8 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(1049);

/***/ }),
/* 9 */
/***/ (function(module, exports) {

module.exports = __webpack_require__(369);

/***/ })
/******/ ]);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64, 

/***/ }),
/* 1046 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(412);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 1047 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(1046);
} else {
  module.exports = __webpack_require__(1048);
}


/***/ }),
/* 1048 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(412);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 1049 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


exports.__esModule = true;
exports.defaultMemoize = defaultMemoize;
exports.createSelectorCreator = createSelectorCreator;
exports.createStructuredSelector = createStructuredSelector;
function defaultEqualityCheck(a, b) {
  return a === b;
}

function areArgumentsShallowlyEqual(equalityCheck, prev, next) {
  if (prev === null || next === null || prev.length !== next.length) {
    return false;
  }

  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.
  var length = prev.length;
  for (var i = 0; i < length; i++) {
    if (!equalityCheck(prev[i], next[i])) {
      return false;
    }
  }

  return true;
}

function defaultMemoize(func) {
  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;

  var lastArgs = null;
  var lastResult = null;
  // we reference arguments instead of spreading them for performance reasons
  return function () {
    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
      // apply arguments instead of spreading for performance.
      lastResult = func.apply(null, arguments);
    }

    lastArgs = arguments;
    return lastResult;
  };
}

function getDependencies(funcs) {
  var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;

  if (!dependencies.every(function (dep) {
    return typeof dep === 'function';
  })) {
    var dependencyTypes = dependencies.map(function (dep) {
      return typeof dep;
    }).join(', ');
    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));
  }

  return dependencies;
}

function createSelectorCreator(memoize) {
  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    memoizeOptions[_key - 1] = arguments[_key];
  }

  return function () {
    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      funcs[_key2] = arguments[_key2];
    }

    var recomputations = 0;
    var resultFunc = funcs.pop();
    var dependencies = getDependencies(funcs);

    var memoizedResultFunc = memoize.apply(undefined, [function () {
      recomputations++;
      // apply arguments instead of spreading for performance.
      return resultFunc.apply(null, arguments);
    }].concat(memoizeOptions));

    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.
    var selector = defaultMemoize(function () {
      var params = [];
      var length = dependencies.length;

      for (var i = 0; i < length; i++) {
        // apply arguments instead of spreading and mutate a local list of params for performance.
        params.push(dependencies[i].apply(null, arguments));
      }

      // apply arguments instead of spreading for performance.
      return memoizedResultFunc.apply(null, params);
    });

    selector.resultFunc = resultFunc;
    selector.recomputations = function () {
      return recomputations;
    };
    selector.resetRecomputations = function () {
      return recomputations = 0;
    };
    return selector;
  };
}

var createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);

function createStructuredSelector(selectors) {
  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;

  if (typeof selectors !== 'object') {
    throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));
  }
  var objectKeys = Object.keys(selectors);
  return selectorCreator(objectKeys.map(function (key) {
    return selectors[key];
  }), function () {
    for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
      values[_key3] = arguments[_key3];
    }

    return values.reduce(function (composition, value, index) {
      composition[objectKeys[index]] = value;
      return composition;
    }, {});
  });
}

/***/ }),
/* 1050 */
/***/ (function(module, exports, __webpack_require__) {

var vm = __webpack_require__(86)

module.exports = function safeEval (code, context, opts) {
  var sandbox = {}
  var resultKey = 'SAFE_EVAL_' + Math.floor(Math.random() * 1000000)
  sandbox[resultKey] = {}
  code = resultKey + '=' + code
  if (context) {
    Object.keys(context).forEach(function (key) {
      sandbox[key] = context[key]
    })
  }
  vm.runInNewContext(code, sandbox, opts)
  return sandbox[resultKey]
}


/***/ }),
/* 1051 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * send
 * Copyright(c) 2012 TJ Holowaychuk
 * Copyright(c) 2014-2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var createError = __webpack_require__(880)
var debug = __webpack_require__(713)('send')
var deprecate = __webpack_require__(322)('send')
var destroy = __webpack_require__(722)
var encodeUrl = __webpack_require__(325)
var escapeHtml = __webpack_require__(212)
var etag = __webpack_require__(726)
var fresh = __webpack_require__(812)
var fs = __webpack_require__(1)
var mime = __webpack_require__(1052)
var ms = __webpack_require__(42)
var onFinished = __webpack_require__(386)
var parseRange = __webpack_require__(1002)
var path = __webpack_require__(0)
var statuses = __webpack_require__(1076)
var Stream = __webpack_require__(22)
var util = __webpack_require__(2)

/**
 * Path function references.
 * @private
 */

var extname = path.extname
var join = path.join
var normalize = path.normalize
var resolve = path.resolve
var sep = path.sep

/**
 * Regular expression for identifying a bytes Range header.
 * @private
 */

var BYTES_RANGE_REGEXP = /^ *bytes=/

/**
 * Maximum value allowed for the max age.
 * @private
 */

var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year

/**
 * Regular expression to match a path with a directory up component.
 * @private
 */

var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/

/**
 * Module exports.
 * @public
 */

module.exports = send
module.exports.mime = mime

/**
 * Return a `SendStream` for `req` and `path`.
 *
 * @param {object} req
 * @param {string} path
 * @param {object} [options]
 * @return {SendStream}
 * @public
 */

function send (req, path, options) {
  return new SendStream(req, path, options)
}

/**
 * Initialize a `SendStream` with the given `path`.
 *
 * @param {Request} req
 * @param {String} path
 * @param {object} [options]
 * @private
 */

function SendStream (req, path, options) {
  Stream.call(this)

  var opts = options || {}

  this.options = opts
  this.path = path
  this.req = req

  this._acceptRanges = opts.acceptRanges !== undefined
    ? Boolean(opts.acceptRanges)
    : true

  this._cacheControl = opts.cacheControl !== undefined
    ? Boolean(opts.cacheControl)
    : true

  this._etag = opts.etag !== undefined
    ? Boolean(opts.etag)
    : true

  this._dotfiles = opts.dotfiles !== undefined
    ? opts.dotfiles
    : 'ignore'

  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {
    throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"')
  }

  this._hidden = Boolean(opts.hidden)

  if (opts.hidden !== undefined) {
    deprecate('hidden: use dotfiles: \'' + (this._hidden ? 'allow' : 'ignore') + '\' instead')
  }

  // legacy support
  if (opts.dotfiles === undefined) {
    this._dotfiles = undefined
  }

  this._extensions = opts.extensions !== undefined
    ? normalizeList(opts.extensions, 'extensions option')
    : []

  this._immutable = opts.immutable !== undefined
    ? Boolean(opts.immutable)
    : false

  this._index = opts.index !== undefined
    ? normalizeList(opts.index, 'index option')
    : ['index.html']

  this._lastModified = opts.lastModified !== undefined
    ? Boolean(opts.lastModified)
    : true

  this._maxage = opts.maxAge || opts.maxage
  this._maxage = typeof this._maxage === 'string'
    ? ms(this._maxage)
    : Number(this._maxage)
  this._maxage = !isNaN(this._maxage)
    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)
    : 0

  this._root = opts.root
    ? resolve(opts.root)
    : null

  if (!this._root && opts.from) {
    this.from(opts.from)
  }
}

/**
 * Inherits from `Stream`.
 */

util.inherits(SendStream, Stream)

/**
 * Enable or disable etag generation.
 *
 * @param {Boolean} val
 * @return {SendStream}
 * @api public
 */

SendStream.prototype.etag = deprecate.function(function etag (val) {
  this._etag = Boolean(val)
  debug('etag %s', this._etag)
  return this
}, 'send.etag: pass etag as option')

/**
 * Enable or disable "hidden" (dot) files.
 *
 * @param {Boolean} path
 * @return {SendStream}
 * @api public
 */

SendStream.prototype.hidden = deprecate.function(function hidden (val) {
  this._hidden = Boolean(val)
  this._dotfiles = undefined
  debug('hidden %s', this._hidden)
  return this
}, 'send.hidden: use dotfiles option')

/**
 * Set index `paths`, set to a falsy
 * value to disable index support.
 *
 * @param {String|Boolean|Array} paths
 * @return {SendStream}
 * @api public
 */

SendStream.prototype.index = deprecate.function(function index (paths) {
  var index = !paths ? [] : normalizeList(paths, 'paths argument')
  debug('index %o', paths)
  this._index = index
  return this
}, 'send.index: pass index as option')

/**
 * Set root `path`.
 *
 * @param {String} path
 * @return {SendStream}
 * @api public
 */

SendStream.prototype.root = function root (path) {
  this._root = resolve(String(path))
  debug('root %s', this._root)
  return this
}

SendStream.prototype.from = deprecate.function(SendStream.prototype.root,
  'send.from: pass root as option')

SendStream.prototype.root = deprecate.function(SendStream.prototype.root,
  'send.root: pass root as option')

/**
 * Set max-age to `maxAge`.
 *
 * @param {Number} maxAge
 * @return {SendStream}
 * @api public
 */

SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {
  this._maxage = typeof maxAge === 'string'
    ? ms(maxAge)
    : Number(maxAge)
  this._maxage = !isNaN(this._maxage)
    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)
    : 0
  debug('max-age %d', this._maxage)
  return this
}, 'send.maxage: pass maxAge as option')

/**
 * Emit error with `status`.
 *
 * @param {number} status
 * @param {Error} [err]
 * @private
 */

SendStream.prototype.error = function error (status, err) {
  // emit if listeners instead of responding
  if (hasListeners(this, 'error')) {
    return this.emit('error', createError(status, err, {
      expose: false
    }))
  }

  var res = this.res
  var msg = statuses[status] || String(status)
  var doc = createHtmlDocument('Error', escapeHtml(msg))

  // clear existing headers
  clearHeaders(res)

  // add error headers
  if (err && err.headers) {
    setHeaders(res, err.headers)
  }

  // send basic response
  res.statusCode = status
  res.setHeader('Content-Type', 'text/html; charset=UTF-8')
  res.setHeader('Content-Length', Buffer.byteLength(doc))
  res.setHeader('Content-Security-Policy', "default-src 'self'")
  res.setHeader('X-Content-Type-Options', 'nosniff')
  res.end(doc)
}

/**
 * Check if the pathname ends with "/".
 *
 * @return {boolean}
 * @private
 */

SendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {
  return this.path[this.path.length - 1] === '/'
}

/**
 * Check if this is a conditional GET request.
 *
 * @return {Boolean}
 * @api private
 */

SendStream.prototype.isConditionalGET = function isConditionalGET () {
  return this.req.headers['if-match'] ||
    this.req.headers['if-unmodified-since'] ||
    this.req.headers['if-none-match'] ||
    this.req.headers['if-modified-since']
}

/**
 * Check if the request preconditions failed.
 *
 * @return {boolean}
 * @private
 */

SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {
  var req = this.req
  var res = this.res

  // if-match
  var match = req.headers['if-match']
  if (match) {
    var etag = res.getHeader('ETag')
    return !etag || (match !== '*' && parseTokenList(match).every(function (match) {
      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag
    }))
  }

  // if-unmodified-since
  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])
  if (!isNaN(unmodifiedSince)) {
    var lastModified = parseHttpDate(res.getHeader('Last-Modified'))
    return isNaN(lastModified) || lastModified > unmodifiedSince
  }

  return false
}

/**
 * Strip content-* header fields.
 *
 * @private
 */

SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {
  var res = this.res
  var headers = getHeaderNames(res)

  for (var i = 0; i < headers.length; i++) {
    var header = headers[i]
    if (header.substr(0, 8) === 'content-' && header !== 'content-location') {
      res.removeHeader(header)
    }
  }
}

/**
 * Respond with 304 not modified.
 *
 * @api private
 */

SendStream.prototype.notModified = function notModified () {
  var res = this.res
  debug('not modified')
  this.removeContentHeaderFields()
  res.statusCode = 304
  res.end()
}

/**
 * Raise error that headers already sent.
 *
 * @api private
 */

SendStream.prototype.headersAlreadySent = function headersAlreadySent () {
  var err = new Error('Can\'t set headers after they are sent.')
  debug('headers already sent')
  this.error(500, err)
}

/**
 * Check if the request is cacheable, aka
 * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).
 *
 * @return {Boolean}
 * @api private
 */

SendStream.prototype.isCachable = function isCachable () {
  var statusCode = this.res.statusCode
  return (statusCode >= 200 && statusCode < 300) ||
    statusCode === 304
}

/**
 * Handle stat() error.
 *
 * @param {Error} error
 * @private
 */

SendStream.prototype.onStatError = function onStatError (error) {
  switch (error.code) {
    case 'ENAMETOOLONG':
    case 'ENOENT':
    case 'ENOTDIR':
      this.error(404, error)
      break
    default:
      this.error(500, error)
      break
  }
}

/**
 * Check if the cache is fresh.
 *
 * @return {Boolean}
 * @api private
 */

SendStream.prototype.isFresh = function isFresh () {
  return fresh(this.req.headers, {
    'etag': this.res.getHeader('ETag'),
    'last-modified': this.res.getHeader('Last-Modified')
  })
}

/**
 * Check if the range is fresh.
 *
 * @return {Boolean}
 * @api private
 */

SendStream.prototype.isRangeFresh = function isRangeFresh () {
  var ifRange = this.req.headers['if-range']

  if (!ifRange) {
    return true
  }

  // if-range as etag
  if (ifRange.indexOf('"') !== -1) {
    var etag = this.res.getHeader('ETag')
    return Boolean(etag && ifRange.indexOf(etag) !== -1)
  }

  // if-range as modified date
  var lastModified = this.res.getHeader('Last-Modified')
  return parseHttpDate(lastModified) <= parseHttpDate(ifRange)
}

/**
 * Redirect to path.
 *
 * @param {string} path
 * @private
 */

SendStream.prototype.redirect = function redirect (path) {
  var res = this.res

  if (hasListeners(this, 'directory')) {
    this.emit('directory', res, path)
    return
  }

  if (this.hasTrailingSlash()) {
    this.error(403)
    return
  }

  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))
  var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href="' + escapeHtml(loc) + '">' +
    escapeHtml(loc) + '</a>')

  // redirect
  res.statusCode = 301
  res.setHeader('Content-Type', 'text/html; charset=UTF-8')
  res.setHeader('Content-Length', Buffer.byteLength(doc))
  res.setHeader('Content-Security-Policy', "default-src 'self'")
  res.setHeader('X-Content-Type-Options', 'nosniff')
  res.setHeader('Location', loc)
  res.end(doc)
}

/**
 * Pipe to `res.
 *
 * @param {Stream} res
 * @return {Stream} res
 * @api public
 */

SendStream.prototype.pipe = function pipe (res) {
  // root path
  var root = this._root

  // references
  this.res = res

  // decode the path
  var path = decode(this.path)
  if (path === -1) {
    this.error(400)
    return res
  }

  // null byte(s)
  if (~path.indexOf('\0')) {
    this.error(400)
    return res
  }

  var parts
  if (root !== null) {
    // normalize
    if (path) {
      path = normalize('.' + sep + path)
    }

    // malicious path
    if (UP_PATH_REGEXP.test(path)) {
      debug('malicious path "%s"', path)
      this.error(403)
      return res
    }

    // explode path parts
    parts = path.split(sep)

    // join / normalize from optional root dir
    path = normalize(join(root, path))
    root = normalize(root + sep)
  } else {
    // ".." is malicious without "root"
    if (UP_PATH_REGEXP.test(path)) {
      debug('malicious path "%s"', path)
      this.error(403)
      return res
    }

    // explode path parts
    parts = normalize(path).split(sep)

    // resolve the path
    path = resolve(path)
  }

  // dotfile handling
  if (containsDotFile(parts)) {
    var access = this._dotfiles

    // legacy support
    if (access === undefined) {
      access = parts[parts.length - 1][0] === '.'
        ? (this._hidden ? 'allow' : 'ignore')
        : 'allow'
    }

    debug('%s dotfile "%s"', access, path)
    switch (access) {
      case 'allow':
        break
      case 'deny':
        this.error(403)
        return res
      case 'ignore':
      default:
        this.error(404)
        return res
    }
  }

  // index file support
  if (this._index.length && this.hasTrailingSlash()) {
    this.sendIndex(path)
    return res
  }

  this.sendFile(path)
  return res
}

/**
 * Transfer `path`.
 *
 * @param {String} path
 * @api public
 */

SendStream.prototype.send = function send (path, stat) {
  var len = stat.size
  var options = this.options
  var opts = {}
  var res = this.res
  var req = this.req
  var ranges = req.headers.range
  var offset = options.start || 0

  if (headersSent(res)) {
    // impossible to send now
    this.headersAlreadySent()
    return
  }

  debug('pipe "%s"', path)

  // set header fields
  this.setHeader(path, stat)

  // set content-type
  this.type(path)

  // conditional GET support
  if (this.isConditionalGET()) {
    if (this.isPreconditionFailure()) {
      this.error(412)
      return
    }

    if (this.isCachable() && this.isFresh()) {
      this.notModified()
      return
    }
  }

  // adjust len to start/end options
  len = Math.max(0, len - offset)
  if (options.end !== undefined) {
    var bytes = options.end - offset + 1
    if (len > bytes) len = bytes
  }

  // Range support
  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {
    // parse
    ranges = parseRange(len, ranges, {
      combine: true
    })

    // If-Range support
    if (!this.isRangeFresh()) {
      debug('range stale')
      ranges = -2
    }

    // unsatisfiable
    if (ranges === -1) {
      debug('range unsatisfiable')

      // Content-Range
      res.setHeader('Content-Range', contentRange('bytes', len))

      // 416 Requested Range Not Satisfiable
      return this.error(416, {
        headers: {'Content-Range': res.getHeader('Content-Range')}
      })
    }

    // valid (syntactically invalid/multiple ranges are treated as a regular response)
    if (ranges !== -2 && ranges.length === 1) {
      debug('range %j', ranges)

      // Content-Range
      res.statusCode = 206
      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))

      // adjust for requested range
      offset += ranges[0].start
      len = ranges[0].end - ranges[0].start + 1
    }
  }

  // clone options
  for (var prop in options) {
    opts[prop] = options[prop]
  }

  // set read options
  opts.start = offset
  opts.end = Math.max(offset, offset + len - 1)

  // content-length
  res.setHeader('Content-Length', len)

  // HEAD support
  if (req.method === 'HEAD') {
    res.end()
    return
  }

  this.stream(path, opts)
}

/**
 * Transfer file for `path`.
 *
 * @param {String} path
 * @api private
 */
SendStream.prototype.sendFile = function sendFile (path) {
  var i = 0
  var self = this

  debug('stat "%s"', path)
  fs.stat(path, function onstat (err, stat) {
    if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {
      // not found, check extensions
      return next(err)
    }
    if (err) return self.onStatError(err)
    if (stat.isDirectory()) return self.redirect(path)
    self.emit('file', path, stat)
    self.send(path, stat)
  })

  function next (err) {
    if (self._extensions.length <= i) {
      return err
        ? self.onStatError(err)
        : self.error(404)
    }

    var p = path + '.' + self._extensions[i++]

    debug('stat "%s"', p)
    fs.stat(p, function (err, stat) {
      if (err) return next(err)
      if (stat.isDirectory()) return next()
      self.emit('file', p, stat)
      self.send(p, stat)
    })
  }
}

/**
 * Transfer index for `path`.
 *
 * @param {String} path
 * @api private
 */
SendStream.prototype.sendIndex = function sendIndex (path) {
  var i = -1
  var self = this

  function next (err) {
    if (++i >= self._index.length) {
      if (err) return self.onStatError(err)
      return self.error(404)
    }

    var p = join(path, self._index[i])

    debug('stat "%s"', p)
    fs.stat(p, function (err, stat) {
      if (err) return next(err)
      if (stat.isDirectory()) return next()
      self.emit('file', p, stat)
      self.send(p, stat)
    })
  }

  next()
}

/**
 * Stream `path` to the response.
 *
 * @param {String} path
 * @param {Object} options
 * @api private
 */

SendStream.prototype.stream = function stream (path, options) {
  // TODO: this is all lame, refactor meeee
  var finished = false
  var self = this
  var res = this.res

  // pipe
  var stream = fs.createReadStream(path, options)
  this.emit('stream', stream)
  stream.pipe(res)

  // response finished, done with the fd
  onFinished(res, function onfinished () {
    finished = true
    destroy(stream)
  })

  // error handling code-smell
  stream.on('error', function onerror (err) {
    // request already finished
    if (finished) return

    // clean up stream
    finished = true
    destroy(stream)

    // error
    self.onStatError(err)
  })

  // end
  stream.on('end', function onend () {
    self.emit('end')
  })
}

/**
 * Set content-type based on `path`
 * if it hasn't been explicitly set.
 *
 * @param {String} path
 * @api private
 */

SendStream.prototype.type = function type (path) {
  var res = this.res

  if (res.getHeader('Content-Type')) return

  var type = mime.lookup(path)

  if (!type) {
    debug('no content-type')
    return
  }

  var charset = mime.charsets.lookup(type)

  debug('content-type %s', type)
  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))
}

/**
 * Set response header fields, most
 * fields may be pre-defined.
 *
 * @param {String} path
 * @param {Object} stat
 * @api private
 */

SendStream.prototype.setHeader = function setHeader (path, stat) {
  var res = this.res

  this.emit('headers', res, path, stat)

  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {
    debug('accept ranges')
    res.setHeader('Accept-Ranges', 'bytes')
  }

  if (this._cacheControl && !res.getHeader('Cache-Control')) {
    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)

    if (this._immutable) {
      cacheControl += ', immutable'
    }

    debug('cache-control %s', cacheControl)
    res.setHeader('Cache-Control', cacheControl)
  }

  if (this._lastModified && !res.getHeader('Last-Modified')) {
    var modified = stat.mtime.toUTCString()
    debug('modified %s', modified)
    res.setHeader('Last-Modified', modified)
  }

  if (this._etag && !res.getHeader('ETag')) {
    var val = etag(stat)
    debug('etag %s', val)
    res.setHeader('ETag', val)
  }
}

/**
 * Clear all headers from a response.
 *
 * @param {object} res
 * @private
 */

function clearHeaders (res) {
  var headers = getHeaderNames(res)

  for (var i = 0; i < headers.length; i++) {
    res.removeHeader(headers[i])
  }
}

/**
 * Collapse all leading slashes into a single slash
 *
 * @param {string} str
 * @private
 */
function collapseLeadingSlashes (str) {
  for (var i = 0; i < str.length; i++) {
    if (str[i] !== '/') {
      break
    }
  }

  return i > 1
    ? '/' + str.substr(i)
    : str
}

/**
 * Determine if path parts contain a dotfile.
 *
 * @api private
 */

function containsDotFile (parts) {
  for (var i = 0; i < parts.length; i++) {
    var part = parts[i]
    if (part.length > 1 && part[0] === '.') {
      return true
    }
  }

  return false
}

/**
 * Create a Content-Range header.
 *
 * @param {string} type
 * @param {number} size
 * @param {array} [range]
 */

function contentRange (type, size, range) {
  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size
}

/**
 * Create a minimal HTML document.
 *
 * @param {string} title
 * @param {string} body
 * @private
 */

function createHtmlDocument (title, body) {
  return '<!DOCTYPE html>\n' +
    '<html lang="en">\n' +
    '<head>\n' +
    '<meta charset="utf-8">\n' +
    '<title>' + title + '</title>\n' +
    '</head>\n' +
    '<body>\n' +
    '<pre>' + body + '</pre>\n' +
    '</body>\n' +
    '</html>\n'
}

/**
 * decodeURIComponent.
 *
 * Allows V8 to only deoptimize this fn instead of all
 * of send().
 *
 * @param {String} path
 * @api private
 */

function decode (path) {
  try {
    return decodeURIComponent(path)
  } catch (err) {
    return -1
  }
}

/**
 * Get the header names on a respnse.
 *
 * @param {object} res
 * @returns {array[string]}
 * @private
 */

function getHeaderNames (res) {
  return typeof res.getHeaderNames !== 'function'
    ? Object.keys(res._headers || {})
    : res.getHeaderNames()
}

/**
 * Determine if emitter has listeners of a given type.
 *
 * The way to do this check is done three different ways in Node.js >= 0.8
 * so this consolidates them into a minimal set using instance methods.
 *
 * @param {EventEmitter} emitter
 * @param {string} type
 * @returns {boolean}
 * @private
 */

function hasListeners (emitter, type) {
  var count = typeof emitter.listenerCount !== 'function'
    ? emitter.listeners(type).length
    : emitter.listenerCount(type)

  return count > 0
}

/**
 * Determine if the response headers have been sent.
 *
 * @param {object} res
 * @returns {boolean}
 * @private
 */

function headersSent (res) {
  return typeof res.headersSent !== 'boolean'
    ? Boolean(res._header)
    : res.headersSent
}

/**
 * Normalize the index option into an array.
 *
 * @param {boolean|string|array} val
 * @param {string} name
 * @private
 */

function normalizeList (val, name) {
  var list = [].concat(val || [])

  for (var i = 0; i < list.length; i++) {
    if (typeof list[i] !== 'string') {
      throw new TypeError(name + ' must be array of strings or false')
    }
  }

  return list
}

/**
 * Parse an HTTP Date into a number.
 *
 * @param {string} date
 * @private
 */

function parseHttpDate (date) {
  var timestamp = date && Date.parse(date)

  return typeof timestamp === 'number'
    ? timestamp
    : NaN
}

/**
 * Parse a HTTP token list.
 *
 * @param {string} str
 * @private
 */

function parseTokenList (str) {
  var end = 0
  var list = []
  var start = 0

  // gather tokens
  for (var i = 0, len = str.length; i < len; i++) {
    switch (str.charCodeAt(i)) {
      case 0x20: /*   */
        if (start === end) {
          start = end = i + 1
        }
        break
      case 0x2c: /* , */
        list.push(str.substring(start, end))
        start = end = i + 1
        break
      default:
        end = i + 1
        break
    }
  }

  // final token
  list.push(str.substring(start, end))

  return list
}

/**
 * Set an object of headers on a response.
 *
 * @param {object} res
 * @param {object} headers
 * @private
 */

function setHeaders (res, headers) {
  var keys = Object.keys(headers)

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i]
    res.setHeader(key, headers[key])
  }
}


/***/ }),
/* 1052 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0);
var fs = __webpack_require__(1);

function Mime() {
  // Map of extension -> mime type
  this.types = Object.create(null);

  // Map of mime type -> extension
  this.extensions = Object.create(null);
}

/**
 * Define mimetype -> extension mappings.  Each key is a mime-type that maps
 * to an array of extensions associated with the type.  The first extension is
 * used as the default extension for the type.
 *
 * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
 *
 * @param map (Object) type definitions
 */
Mime.prototype.define = function (map) {
  for (var type in map) {
    var exts = map[type];
    for (var i = 0; i < exts.length; i++) {
      if (process.env.DEBUG_MIME && this.types[exts[i]]) {
        console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' +
          this.types[exts[i]] + ' to ' + type);
      }

      this.types[exts[i]] = type;
    }

    // Default extension is the first one we encounter
    if (!this.extensions[type]) {
      this.extensions[type] = exts[0];
    }
  }
};

/**
 * Load an Apache2-style ".types" file
 *
 * This may be called multiple times (it's expected).  Where files declare
 * overlapping types/extensions, the last file wins.
 *
 * @param file (String) path of file to load.
 */
Mime.prototype.load = function(file) {
  this._loading = file;
  // Read file and split into lines
  var map = {},
      content = fs.readFileSync(file, 'ascii'),
      lines = content.split(/[\r\n]+/);

  lines.forEach(function(line) {
    // Clean up whitespace/comments, and split into fields
    var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/);
    map[fields.shift()] = fields;
  });

  this.define(map);

  this._loading = null;
};

/**
 * Lookup a mime type based on extension
 */
Mime.prototype.lookup = function(path, fallback) {
  var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase();

  return this.types[ext] || fallback || this.default_type;
};

/**
 * Return file extension associated with a mime type
 */
Mime.prototype.extension = function(mimeType) {
  var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
  return this.extensions[type];
};

// Default instance
var mime = new Mime();

// Define built-in types
mime.define(__webpack_require__(514));

// Default type
mime.default_type = mime.lookup('bin');

//
// Additional API specific to the default instance
//

mime.Mime = Mime;

/**
 * Lookup a charset based on mime type.
 */
mime.charsets = {
  lookup: function(mimeType, fallback) {
    // Assume text types are utf8
    return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;
  }
};

module.exports = mime;


/***/ }),
/* 1053 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * serve-static
 * Copyright(c) 2010 Sencha Inc.
 * Copyright(c) 2011 TJ Holowaychuk
 * Copyright(c) 2014-2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var encodeUrl = __webpack_require__(325)
var escapeHtml = __webpack_require__(212)
var parseUrl = __webpack_require__(987)
var resolve = __webpack_require__(0).resolve
var send = __webpack_require__(1051)
var url = __webpack_require__(8)

/**
 * Module exports.
 * @public
 */

module.exports = serveStatic
module.exports.mime = send.mime

/**
 * @param {string} root
 * @param {object} [options]
 * @return {function}
 * @public
 */

function serveStatic (root, options) {
  if (!root) {
    throw new TypeError('root path required')
  }

  if (typeof root !== 'string') {
    throw new TypeError('root path must be a string')
  }

  // copy options object
  var opts = Object.create(options || null)

  // fall-though
  var fallthrough = opts.fallthrough !== false

  // default redirect
  var redirect = opts.redirect !== false

  // headers listener
  var setHeaders = opts.setHeaders

  if (setHeaders && typeof setHeaders !== 'function') {
    throw new TypeError('option setHeaders must be function')
  }

  // setup options for send
  opts.maxage = opts.maxage || opts.maxAge || 0
  opts.root = resolve(root)

  // construct directory listener
  var onDirectory = redirect
    ? createRedirectDirectoryListener()
    : createNotFoundDirectoryListener()

  return function serveStatic (req, res, next) {
    if (req.method !== 'GET' && req.method !== 'HEAD') {
      if (fallthrough) {
        return next()
      }

      // method not allowed
      res.statusCode = 405
      res.setHeader('Allow', 'GET, HEAD')
      res.setHeader('Content-Length', '0')
      res.end()
      return
    }

    var forwardError = !fallthrough
    var originalUrl = parseUrl.original(req)
    var path = parseUrl(req).pathname

    // make sure redirect occurs at mount
    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {
      path = ''
    }

    // create send stream
    var stream = send(req, path, opts)

    // add directory handler
    stream.on('directory', onDirectory)

    // add headers listener
    if (setHeaders) {
      stream.on('headers', setHeaders)
    }

    // add file listener for fallthrough
    if (fallthrough) {
      stream.on('file', function onFile () {
        // once file is determined, always forward error
        forwardError = true
      })
    }

    // forward errors
    stream.on('error', function error (err) {
      if (forwardError || !(err.statusCode < 500)) {
        next(err)
        return
      }

      next()
    })

    // pipe
    stream.pipe(res)
  }
}

/**
 * Collapse all leading slashes into a single slash
 * @private
 */
function collapseLeadingSlashes (str) {
  for (var i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) !== 0x2f /* / */) {
      break
    }
  }

  return i > 1
    ? '/' + str.substr(i)
    : str
}

 /**
 * Create a minimal HTML document.
 *
 * @param {string} title
 * @param {string} body
 * @private
 */

function createHtmlDocument (title, body) {
  return '<!DOCTYPE html>\n' +
    '<html lang="en">\n' +
    '<head>\n' +
    '<meta charset="utf-8">\n' +
    '<title>' + title + '</title>\n' +
    '</head>\n' +
    '<body>\n' +
    '<pre>' + body + '</pre>\n' +
    '</body>\n' +
    '</html>\n'
}

/**
 * Create a directory listener that just 404s.
 * @private
 */

function createNotFoundDirectoryListener () {
  return function notFound () {
    this.error(404)
  }
}

/**
 * Create a directory listener that performs a redirect.
 * @private
 */

function createRedirectDirectoryListener () {
  return function redirect (res) {
    if (this.hasTrailingSlash()) {
      this.error(404)
      return
    }

    // get original URL
    var originalUrl = parseUrl.original(this.req)

    // append trailing slash
    originalUrl.path = null
    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')

    // reformat the URL
    var loc = encodeUrl(url.format(originalUrl))
    var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href="' + escapeHtml(loc) + '">' +
      escapeHtml(loc) + '</a>')

    // send redirect response
    res.statusCode = 301
    res.setHeader('Content-Type', 'text/html; charset=UTF-8')
    res.setHeader('Content-Length', Buffer.byteLength(doc))
    res.setHeader('Content-Security-Policy', "default-src 'self'")
    res.setHeader('X-Content-Type-Options', 'nosniff')
    res.setHeader('Location', loc)
    res.end(doc)
  }
}


/***/ }),
/* 1054 */
/***/ (function(module, exports) {

module.exports = Object.setPrototypeOf || ({__proto__:[]} instanceof Array ? setProtoOf : mixinProperties);

function setProtoOf(obj, proto) {
	obj.__proto__ = proto;
	return obj;
}

function mixinProperties(obj, proto) {
	for (var prop in proto) {
		if (!obj.hasOwnProperty(prop)) {
			obj[prop] = proto[prop];
		}
	}
	return obj;
}


/***/ }),
/* 1055 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var shebangRegex = __webpack_require__(1056);

module.exports = function (str) {
	var match = str.match(shebangRegex);

	if (!match) {
		return null;
	}

	var arr = match[0].replace(/#! ?/, '').split(' ');
	var bin = arr[0].split('/').pop();
	var arg = arr[1];

	return (bin === 'env' ?
		arg :
		bin + (arg ? ' ' + arg : '')
	);
};


/***/ }),
/* 1056 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = /^#!.*/;


/***/ }),
/* 1057 */
/***/ (function(module, exports, __webpack_require__) {

// Note: since nyc uses this module to output coverage, any lines
// that are in the direct sync flow of nyc's outputCoverage are
// ignored, since we can never get coverage for them.
var assert = __webpack_require__(11)
var signals = __webpack_require__(1058)

var EE = __webpack_require__(18)
/* istanbul ignore if */
if (typeof EE !== 'function') {
  EE = EE.EventEmitter
}

var emitter
if (process.__signal_exit_emitter__) {
  emitter = process.__signal_exit_emitter__
} else {
  emitter = process.__signal_exit_emitter__ = new EE()
  emitter.count = 0
  emitter.emitted = {}
}

// Because this emitter is a global, we have to check to see if a
// previous version of this library failed to enable infinite listeners.
// I know what you're about to say.  But literally everything about
// signal-exit is a compromise with evil.  Get used to it.
if (!emitter.infinite) {
  emitter.setMaxListeners(Infinity)
  emitter.infinite = true
}

module.exports = function (cb, opts) {
  assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')

  if (loaded === false) {
    load()
  }

  var ev = 'exit'
  if (opts && opts.alwaysLast) {
    ev = 'afterexit'
  }

  var remove = function () {
    emitter.removeListener(ev, cb)
    if (emitter.listeners('exit').length === 0 &&
        emitter.listeners('afterexit').length === 0) {
      unload()
    }
  }
  emitter.on(ev, cb)

  return remove
}

module.exports.unload = unload
function unload () {
  if (!loaded) {
    return
  }
  loaded = false

  signals.forEach(function (sig) {
    try {
      process.removeListener(sig, sigListeners[sig])
    } catch (er) {}
  })
  process.emit = originalProcessEmit
  process.reallyExit = originalProcessReallyExit
  emitter.count -= 1
}

function emit (event, code, signal) {
  if (emitter.emitted[event]) {
    return
  }
  emitter.emitted[event] = true
  emitter.emit(event, code, signal)
}

// { <signal>: <listener fn>, ... }
var sigListeners = {}
signals.forEach(function (sig) {
  sigListeners[sig] = function listener () {
    // If there are no other listeners, an exit is coming!
    // Simplest way: remove us and then re-send the signal.
    // We know that this will kill the process, so we can
    // safely emit now.
    var listeners = process.listeners(sig)
    if (listeners.length === emitter.count) {
      unload()
      emit('exit', null, sig)
      /* istanbul ignore next */
      emit('afterexit', null, sig)
      /* istanbul ignore next */
      process.kill(process.pid, sig)
    }
  }
})

module.exports.signals = function () {
  return signals
}

module.exports.load = load

var loaded = false

function load () {
  if (loaded) {
    return
  }
  loaded = true

  // This is the number of onSignalExit's that are in play.
  // It's important so that we can count the correct number of
  // listeners on signals, and don't wait for the other one to
  // handle it instead of us.
  emitter.count += 1

  signals = signals.filter(function (sig) {
    try {
      process.on(sig, sigListeners[sig])
      return true
    } catch (er) {
      return false
    }
  })

  process.emit = processEmit
  process.reallyExit = processReallyExit
}

var originalProcessReallyExit = process.reallyExit
function processReallyExit (code) {
  process.exitCode = code || 0
  emit('exit', process.exitCode, null)
  /* istanbul ignore next */
  emit('afterexit', process.exitCode, null)
  /* istanbul ignore next */
  originalProcessReallyExit.call(process, process.exitCode)
}

var originalProcessEmit = process.emit
function processEmit (ev, arg) {
  if (ev === 'exit') {
    if (arg !== undefined) {
      process.exitCode = arg
    }
    var ret = originalProcessEmit.apply(this, arguments)
    emit('exit', process.exitCode, null)
    /* istanbul ignore next */
    emit('afterexit', process.exitCode, null)
    return ret
  } else {
    return originalProcessEmit.apply(this, arguments)
  }
}


/***/ }),
/* 1058 */
/***/ (function(module, exports) {

// This is not the set of all possible signals.
//
// It IS, however, the set of all signals that trigger
// an exit on either Linux or BSD systems.  Linux is a
// superset of the signal names supported on BSD, and
// the unknown signals just fail to register, so we can
// catch that easily enough.
//
// Don't bother with SIGKILL.  It's uncatchable, which
// means that we can't fire any callbacks anyway.
//
// If a user does happen to register a handler on a non-
// fatal signal like SIGWINCH or something, and then
// exit, it'll end up firing `process.emit('exit')`, so
// the handler will be fired anyway.
//
// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
// artificially, inherently leave the process in a
// state from which it is not safe to try and enter JS
// listeners.
module.exports = [
  'SIGABRT',
  'SIGALRM',
  'SIGHUP',
  'SIGINT',
  'SIGTERM'
]

if (process.platform !== 'win32') {
  module.exports.push(
    'SIGVTALRM',
    'SIGXCPU',
    'SIGXFSZ',
    'SIGUSR2',
    'SIGTRAP',
    'SIGSYS',
    'SIGQUIT',
    'SIGIOT'
    // should detect profiler and enable/disable accordingly.
    // see #21
    // 'SIGPROF'
  )
}

if (process.platform === 'linux') {
  module.exports.push(
    'SIGIO',
    'SIGPOLL',
    'SIGPWR',
    'SIGSTKFLT',
    'SIGUNUSED'
  )
}


/***/ }),
/* 1059 */
/***/ (function(module, exports) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');

/**
 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
 */
exports.encode = function (number) {
  if (0 <= number && number < intToCharMap.length) {
    return intToCharMap[number];
  }
  throw new TypeError("Must be between 0 and 63: " + number);
};

/**
 * Decode a single base 64 character code digit to an integer. Returns -1 on
 * failure.
 */
exports.decode = function (charCode) {
  var bigA = 65;     // 'A'
  var bigZ = 90;     // 'Z'

  var littleA = 97;  // 'a'
  var littleZ = 122; // 'z'

  var zero = 48;     // '0'
  var nine = 57;     // '9'

  var plus = 43;     // '+'
  var slash = 47;    // '/'

  var littleOffset = 26;
  var numberOffset = 52;

  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  if (bigA <= charCode && charCode <= bigZ) {
    return (charCode - bigA);
  }

  // 26 - 51: abcdefghijklmnopqrstuvwxyz
  if (littleA <= charCode && charCode <= littleZ) {
    return (charCode - littleA + littleOffset);
  }

  // 52 - 61: 0123456789
  if (zero <= charCode && charCode <= nine) {
    return (charCode - zero + numberOffset);
  }

  // 62: +
  if (charCode == plus) {
    return 62;
  }

  // 63: /
  if (charCode == slash) {
    return 63;
  }

  // Invalid base64 digit.
  return -1;
};


/***/ }),
/* 1060 */
/***/ (function(module, exports) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

exports.GREATEST_LOWER_BOUND = 1;
exports.LEAST_UPPER_BOUND = 2;

/**
 * Recursive implementation of binary search.
 *
 * @param aLow Indices here and lower do not contain the needle.
 * @param aHigh Indices here and higher do not contain the needle.
 * @param aNeedle The element being searched for.
 * @param aHaystack The non-empty array being searched.
 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 */
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
  // This function terminates when one of the following is true:
  //
  //   1. We find the exact element we are looking for.
  //
  //   2. We did not find the exact element, but we can return the index of
  //      the next-closest element.
  //
  //   3. We did not find the exact element, and there is no next-closest
  //      element than the one we are searching for, so we return -1.
  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  var cmp = aCompare(aNeedle, aHaystack[mid], true);
  if (cmp === 0) {
    // Found the element we are looking for.
    return mid;
  }
  else if (cmp > 0) {
    // Our needle is greater than aHaystack[mid].
    if (aHigh - mid > 1) {
      // The element is in the upper half.
      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
    }

    // The exact needle element was not found in this haystack. Determine if
    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return aHigh < aHaystack.length ? aHigh : -1;
    } else {
      return mid;
    }
  }
  else {
    // Our needle is less than aHaystack[mid].
    if (mid - aLow > 1) {
      // The element is in the lower half.
      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
    }

    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return mid;
    } else {
      return aLow < 0 ? -1 : aLow;
    }
  }
}

/**
 * This is an implementation of binary search which will always try and return
 * the index of the closest element if there is no exact hit. This is because
 * mappings between original and generated line/col pairs are single points,
 * and there is an implicit region between each of them, so a miss just means
 * that you aren't on the very start of a region.
 *
 * @param aNeedle The element you are looking for.
 * @param aHaystack The array that is being searched.
 * @param aCompare A function which takes the needle and an element in the
 *     array and returns -1, 0, or 1 depending on whether the needle is less
 *     than, equal to, or greater than the element, respectively.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
 */
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
  if (aHaystack.length === 0) {
    return -1;
  }

  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
  if (index < 0) {
    return -1;
  }

  // We have found either the exact element, or the next-closest element than
  // the one we are searching for. However, there may be more than one such
  // element. Make sure we always return the smallest of these.
  while (index - 1 >= 0) {
    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
      break;
    }
    --index;
  }

  return index;
};


/***/ }),
/* 1061 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2014 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = __webpack_require__(130);

/**
 * Determine whether mappingB is after mappingA with respect to generated
 * position.
 */
function generatedPositionAfter(mappingA, mappingB) {
  // Optimized for most common case
  var lineA = mappingA.generatedLine;
  var lineB = mappingB.generatedLine;
  var columnA = mappingA.generatedColumn;
  var columnB = mappingB.generatedColumn;
  return lineB > lineA || lineB == lineA && columnB >= columnA ||
         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
}

/**
 * A data structure to provide a sorted view of accumulated mappings in a
 * performance conscious manner. It trades a neglibable overhead in general
 * case for a large speedup in case of mappings being added in order.
 */
function MappingList() {
  this._array = [];
  this._sorted = true;
  // Serves as infimum
  this._last = {generatedLine: -1, generatedColumn: 0};
}

/**
 * Iterate through internal items. This method takes the same arguments that
 * `Array.prototype.forEach` takes.
 *
 * NOTE: The order of the mappings is NOT guaranteed.
 */
MappingList.prototype.unsortedForEach =
  function MappingList_forEach(aCallback, aThisArg) {
    this._array.forEach(aCallback, aThisArg);
  };

/**
 * Add the given source mapping.
 *
 * @param Object aMapping
 */
MappingList.prototype.add = function MappingList_add(aMapping) {
  if (generatedPositionAfter(this._last, aMapping)) {
    this._last = aMapping;
    this._array.push(aMapping);
  } else {
    this._sorted = false;
    this._array.push(aMapping);
  }
};

/**
 * Returns the flat, sorted array of mappings. The mappings are sorted by
 * generated position.
 *
 * WARNING: This method returns internal data without copying, for
 * performance. The return value must NOT be mutated, and should be treated as
 * an immutable borrow. If you want to take ownership, you must make your own
 * copy.
 */
MappingList.prototype.toArray = function MappingList_toArray() {
  if (!this._sorted) {
    this._array.sort(util.compareByGeneratedPositionsInflated);
    this._sorted = true;
  }
  return this._array;
};

exports.MappingList = MappingList;


/***/ }),
/* 1062 */
/***/ (function(module, exports) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

// It turns out that some (most?) JavaScript engines don't self-host
// `Array.prototype.sort`. This makes sense because C++ will likely remain
// faster than JS when doing raw CPU-intensive sorting. However, when using a
// custom comparator function, calling back and forth between the VM's C++ and
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
// worse generated code for the comparator function than would be optimal. In
// fact, when sorting with a comparator, these costs outweigh the benefits of
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
// a ~3500ms mean speed-up in `bench/bench.html`.

/**
 * Swap the elements indexed by `x` and `y` in the array `ary`.
 *
 * @param {Array} ary
 *        The array.
 * @param {Number} x
 *        The index of the first item.
 * @param {Number} y
 *        The index of the second item.
 */
function swap(ary, x, y) {
  var temp = ary[x];
  ary[x] = ary[y];
  ary[y] = temp;
}

/**
 * Returns a random integer within the range `low .. high` inclusive.
 *
 * @param {Number} low
 *        The lower bound on the range.
 * @param {Number} high
 *        The upper bound on the range.
 */
function randomIntInRange(low, high) {
  return Math.round(low + (Math.random() * (high - low)));
}

/**
 * The Quick Sort algorithm.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 * @param {Number} p
 *        Start index of the array
 * @param {Number} r
 *        End index of the array
 */
function doQuickSort(ary, comparator, p, r) {
  // If our lower bound is less than our upper bound, we (1) partition the
  // array into two pieces and (2) recurse on each half. If it is not, this is
  // the empty array and our base case.

  if (p < r) {
    // (1) Partitioning.
    //
    // The partitioning chooses a pivot between `p` and `r` and moves all
    // elements that are less than or equal to the pivot to the before it, and
    // all the elements that are greater than it after it. The effect is that
    // once partition is done, the pivot is in the exact place it will be when
    // the array is put in sorted order, and it will not need to be moved
    // again. This runs in O(n) time.

    // Always choose a random pivot so that an input array which is reverse
    // sorted does not cause O(n^2) running time.
    var pivotIndex = randomIntInRange(p, r);
    var i = p - 1;

    swap(ary, pivotIndex, r);
    var pivot = ary[r];

    // Immediately after `j` is incremented in this loop, the following hold
    // true:
    //
    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
    //
    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
    for (var j = p; j < r; j++) {
      if (comparator(ary[j], pivot) <= 0) {
        i += 1;
        swap(ary, i, j);
      }
    }

    swap(ary, i + 1, j);
    var q = i + 1;

    // (2) Recurse on each half.

    doQuickSort(ary, comparator, p, q - 1);
    doQuickSort(ary, comparator, q + 1, r);
  }
}

/**
 * Sort the given array in-place with the given comparator function.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 */
exports.quickSort = function (ary, comparator) {
  doQuickSort(ary, comparator, 0, ary.length - 1);
};


/***/ }),
/* 1063 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = __webpack_require__(130);
var binarySearch = __webpack_require__(1060);
var ArraySet = __webpack_require__(415).ArraySet;
var base64VLQ = __webpack_require__(416);
var quickSort = __webpack_require__(1062).quickSort;

function SourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  return sourceMap.sections != null
    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
}

SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
}

/**
 * The version of the source mapping spec that we are consuming.
 */
SourceMapConsumer.prototype._version = 3;

// `__generatedMappings` and `__originalMappings` are arrays that hold the
// parsed mapping coordinates from the source map's "mappings" attribute. They
// are lazily instantiated, accessed via the `_generatedMappings` and
// `_originalMappings` getters respectively, and we only parse the mappings
// and create these arrays once queried for a source location. We jump through
// these hoops because there can be many thousands of mappings, and parsing
// them is expensive, so we only want to do it if we must.
//
// Each object in the arrays is of the form:
//
//     {
//       generatedLine: The line number in the generated code,
//       generatedColumn: The column number in the generated code,
//       source: The path to the original source file that generated this
//               chunk of code,
//       originalLine: The line number in the original source that
//                     corresponds to this chunk of generated code,
//       originalColumn: The column number in the original source that
//                       corresponds to this chunk of generated code,
//       name: The name of the original symbol which generated this chunk of
//             code.
//     }
//
// All properties except for `generatedLine` and `generatedColumn` can be
// `null`.
//
// `_generatedMappings` is ordered by the generated positions.
//
// `_originalMappings` is ordered by the original positions.

SourceMapConsumer.prototype.__generatedMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__generatedMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__generatedMappings;
  }
});

SourceMapConsumer.prototype.__originalMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__originalMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__originalMappings;
  }
});

SourceMapConsumer.prototype._charIsMappingSeparator =
  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
    var c = aStr.charAt(index);
    return c === ";" || c === ",";
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
SourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    throw new Error("Subclasses must implement _parseMappings");
  };

SourceMapConsumer.GENERATED_ORDER = 1;
SourceMapConsumer.ORIGINAL_ORDER = 2;

SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
SourceMapConsumer.LEAST_UPPER_BOUND = 2;

/**
 * Iterate over each mapping between an original source/line/column and a
 * generated line/column in this source map.
 *
 * @param Function aCallback
 *        The function that is called with each mapping.
 * @param Object aContext
 *        Optional. If specified, this object will be the value of `this` every
 *        time that `aCallback` is called.
 * @param aOrder
 *        Either `SourceMapConsumer.GENERATED_ORDER` or
 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
 *        iterate over the mappings sorted by the generated file's line/column
 *        order or the original's source/line/column order, respectively. Defaults to
 *        `SourceMapConsumer.GENERATED_ORDER`.
 */
SourceMapConsumer.prototype.eachMapping =
  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
    var context = aContext || null;
    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;

    var mappings;
    switch (order) {
    case SourceMapConsumer.GENERATED_ORDER:
      mappings = this._generatedMappings;
      break;
    case SourceMapConsumer.ORIGINAL_ORDER:
      mappings = this._originalMappings;
      break;
    default:
      throw new Error("Unknown order of iteration.");
    }

    var sourceRoot = this.sourceRoot;
    mappings.map(function (mapping) {
      var source = mapping.source === null ? null : this._sources.at(mapping.source);
      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
      return {
        source: source,
        generatedLine: mapping.generatedLine,
        generatedColumn: mapping.generatedColumn,
        originalLine: mapping.originalLine,
        originalColumn: mapping.originalColumn,
        name: mapping.name === null ? null : this._names.at(mapping.name)
      };
    }, this).forEach(aCallback, context);
  };

/**
 * Returns all generated line and column information for the original source,
 * line, and column provided. If no column is provided, returns all mappings
 * corresponding to a either the line we are searching for or the next
 * closest line that has any mappings. Otherwise, returns all mappings
 * corresponding to the given line and either the column we are searching for
 * or the next closest column that has any offsets.
 *
 * The only argument is an object with the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number is 1-based.
 *   - column: Optional. the column number in the original source.
 *    The column number is 0-based.
 *
 * and an array of objects is returned, each with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *    line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *    The column number is 0-based.
 */
SourceMapConsumer.prototype.allGeneratedPositionsFor =
  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
    var line = util.getArg(aArgs, 'line');

    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
    // returns the index of the closest mapping less than the needle. By
    // setting needle.originalColumn to 0, we thus find the last mapping for
    // the given line, provided such a mapping exists.
    var needle = {
      source: util.getArg(aArgs, 'source'),
      originalLine: line,
      originalColumn: util.getArg(aArgs, 'column', 0)
    };

    needle.source = this._findSourceIndex(needle.source);
    if (needle.source < 0) {
      return [];
    }

    var mappings = [];

    var index = this._findMapping(needle,
                                  this._originalMappings,
                                  "originalLine",
                                  "originalColumn",
                                  util.compareByOriginalPositions,
                                  binarySearch.LEAST_UPPER_BOUND);
    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (aArgs.column === undefined) {
        var originalLine = mapping.originalLine;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we found. Since
        // mappings are sorted, this is guaranteed to find all mappings for
        // the line we found.
        while (mapping && mapping.originalLine === originalLine) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      } else {
        var originalColumn = mapping.originalColumn;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we were searching for.
        // Since mappings are sorted, this is guaranteed to find all mappings for
        // the line we are searching for.
        while (mapping &&
               mapping.originalLine === line &&
               mapping.originalColumn == originalColumn) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      }
    }

    return mappings;
  };

exports.SourceMapConsumer = SourceMapConsumer;

/**
 * A BasicSourceMapConsumer instance represents a parsed source map which we can
 * query for information about the original file positions by giving it a file
 * position in the generated source.
 *
 * The first parameter is the raw source map (either as a JSON string, or
 * already parsed to an object). According to the spec, source maps have the
 * following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - sources: An array of URLs to the original source files.
 *   - names: An array of identifiers which can be referrenced by individual mappings.
 *   - sourceRoot: Optional. The URL root from which all sources are relative.
 *   - sourcesContent: Optional. An array of contents of the original source files.
 *   - mappings: A string of base64 VLQs which contain the actual mappings.
 *   - file: Optional. The generated file this source map is associated with.
 *
 * Here is an example source map, taken from the source map spec[0]:
 *
 *     {
 *       version : 3,
 *       file: "out.js",
 *       sourceRoot : "",
 *       sources: ["foo.js", "bar.js"],
 *       names: ["src", "maps", "are", "fun"],
 *       mappings: "AA,AB;;ABCDE;"
 *     }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
 */
function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sources = util.getArg(sourceMap, 'sources');
  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
  // requires the array) to play nice here.
  var names = util.getArg(sourceMap, 'names', []);
  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  var mappings = util.getArg(sourceMap, 'mappings');
  var file = util.getArg(sourceMap, 'file', null);

  // Once again, Sass deviates from the spec and supplies the version as a
  // string rather than a number, so we use loose equality checking here.
  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  if (sourceRoot) {
    sourceRoot = util.normalize(sourceRoot);
  }

  sources = sources
    .map(String)
    // Some source maps produce relative source paths like "./foo.js" instead of
    // "foo.js".  Normalize these first so that future comparisons will succeed.
    // See bugzil.la/1090768.
    .map(util.normalize)
    // Always ensure that absolute sources are internally stored relative to
    // the source root, if the source root is absolute. Not doing this would
    // be particularly problematic when the source root is a prefix of the
    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
    .map(function (source) {
      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
        ? util.relative(sourceRoot, source)
        : source;
    });

  // Pass `true` below to allow duplicate names and sources. While source maps
  // are intended to be compressed and deduplicated, the TypeScript compiler
  // sometimes generates source maps with duplicates in them. See Github issue
  // #72 and bugzil.la/889492.
  this._names = ArraySet.fromArray(names.map(String), true);
  this._sources = ArraySet.fromArray(sources, true);

  this._absoluteSources = this._sources.toArray().map(function (s) {
    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
  });

  this.sourceRoot = sourceRoot;
  this.sourcesContent = sourcesContent;
  this._mappings = mappings;
  this._sourceMapURL = aSourceMapURL;
  this.file = file;
}

BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;

/**
 * Utility function to find the index of a source.  Returns -1 if not
 * found.
 */
BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
  var relativeSource = aSource;
  if (this.sourceRoot != null) {
    relativeSource = util.relative(this.sourceRoot, relativeSource);
  }

  if (this._sources.has(relativeSource)) {
    return this._sources.indexOf(relativeSource);
  }

  // Maybe aSource is an absolute URL as returned by |sources|.  In
  // this case we can't simply undo the transform.
  var i;
  for (i = 0; i < this._absoluteSources.length; ++i) {
    if (this._absoluteSources[i] == aSource) {
      return i;
    }
  }

  return -1;
};

/**
 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
 *
 * @param SourceMapGenerator aSourceMap
 *        The source map that will be consumed.
 * @param String aSourceMapURL
 *        The URL at which the source map can be found (optional)
 * @returns BasicSourceMapConsumer
 */
BasicSourceMapConsumer.fromSourceMap =
  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
    var smc = Object.create(BasicSourceMapConsumer.prototype);

    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
    smc.sourceRoot = aSourceMap._sourceRoot;
    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
                                                            smc.sourceRoot);
    smc.file = aSourceMap._file;
    smc._sourceMapURL = aSourceMapURL;
    smc._absoluteSources = smc._sources.toArray().map(function (s) {
      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
    });

    // Because we are modifying the entries (by converting string sources and
    // names to indices into the sources and names ArraySets), we have to make
    // a copy of the entry or else bad things happen. Shared mutable state
    // strikes again! See github issue #191.

    var generatedMappings = aSourceMap._mappings.toArray().slice();
    var destGeneratedMappings = smc.__generatedMappings = [];
    var destOriginalMappings = smc.__originalMappings = [];

    for (var i = 0, length = generatedMappings.length; i < length; i++) {
      var srcMapping = generatedMappings[i];
      var destMapping = new Mapping;
      destMapping.generatedLine = srcMapping.generatedLine;
      destMapping.generatedColumn = srcMapping.generatedColumn;

      if (srcMapping.source) {
        destMapping.source = sources.indexOf(srcMapping.source);
        destMapping.originalLine = srcMapping.originalLine;
        destMapping.originalColumn = srcMapping.originalColumn;

        if (srcMapping.name) {
          destMapping.name = names.indexOf(srcMapping.name);
        }

        destOriginalMappings.push(destMapping);
      }

      destGeneratedMappings.push(destMapping);
    }

    quickSort(smc.__originalMappings, util.compareByOriginalPositions);

    return smc;
  };

/**
 * The version of the source mapping spec that we are consuming.
 */
BasicSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
  get: function () {
    return this._absoluteSources.slice();
  }
});

/**
 * Provide the JIT with a nice shape / hidden class.
 */
function Mapping() {
  this.generatedLine = 0;
  this.generatedColumn = 0;
  this.source = null;
  this.originalLine = null;
  this.originalColumn = null;
  this.name = null;
}

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
BasicSourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    var generatedLine = 1;
    var previousGeneratedColumn = 0;
    var previousOriginalLine = 0;
    var previousOriginalColumn = 0;
    var previousSource = 0;
    var previousName = 0;
    var length = aStr.length;
    var index = 0;
    var cachedSegments = {};
    var temp = {};
    var originalMappings = [];
    var generatedMappings = [];
    var mapping, str, segment, end, value;

    while (index < length) {
      if (aStr.charAt(index) === ';') {
        generatedLine++;
        index++;
        previousGeneratedColumn = 0;
      }
      else if (aStr.charAt(index) === ',') {
        index++;
      }
      else {
        mapping = new Mapping();
        mapping.generatedLine = generatedLine;

        // Because each offset is encoded relative to the previous one,
        // many segments often have the same encoding. We can exploit this
        // fact by caching the parsed variable length fields of each segment,
        // allowing us to avoid a second parse if we encounter the same
        // segment again.
        for (end = index; end < length; end++) {
          if (this._charIsMappingSeparator(aStr, end)) {
            break;
          }
        }
        str = aStr.slice(index, end);

        segment = cachedSegments[str];
        if (segment) {
          index += str.length;
        } else {
          segment = [];
          while (index < end) {
            base64VLQ.decode(aStr, index, temp);
            value = temp.value;
            index = temp.rest;
            segment.push(value);
          }

          if (segment.length === 2) {
            throw new Error('Found a source, but no line and column');
          }

          if (segment.length === 3) {
            throw new Error('Found a source and line, but no column');
          }

          cachedSegments[str] = segment;
        }

        // Generated column.
        mapping.generatedColumn = previousGeneratedColumn + segment[0];
        previousGeneratedColumn = mapping.generatedColumn;

        if (segment.length > 1) {
          // Original source.
          mapping.source = previousSource + segment[1];
          previousSource += segment[1];

          // Original line.
          mapping.originalLine = previousOriginalLine + segment[2];
          previousOriginalLine = mapping.originalLine;
          // Lines are stored 0-based
          mapping.originalLine += 1;

          // Original column.
          mapping.originalColumn = previousOriginalColumn + segment[3];
          previousOriginalColumn = mapping.originalColumn;

          if (segment.length > 4) {
            // Original name.
            mapping.name = previousName + segment[4];
            previousName += segment[4];
          }
        }

        generatedMappings.push(mapping);
        if (typeof mapping.originalLine === 'number') {
          originalMappings.push(mapping);
        }
      }
    }

    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
    this.__generatedMappings = generatedMappings;

    quickSort(originalMappings, util.compareByOriginalPositions);
    this.__originalMappings = originalMappings;
  };

/**
 * Find the mapping that best matches the hypothetical "needle" mapping that
 * we are searching for in the given "haystack" of mappings.
 */
BasicSourceMapConsumer.prototype._findMapping =
  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
                                         aColumnName, aComparator, aBias) {
    // To return the position we are searching for, we must first find the
    // mapping for the given position and then return the opposite position it
    // points to. Because the mappings are sorted, we can use binary search to
    // find the best mapping.

    if (aNeedle[aLineName] <= 0) {
      throw new TypeError('Line must be greater than or equal to 1, got '
                          + aNeedle[aLineName]);
    }
    if (aNeedle[aColumnName] < 0) {
      throw new TypeError('Column must be greater than or equal to 0, got '
                          + aNeedle[aColumnName]);
    }

    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
  };

/**
 * Compute the last column for each generated mapping. The last column is
 * inclusive.
 */
BasicSourceMapConsumer.prototype.computeColumnSpans =
  function SourceMapConsumer_computeColumnSpans() {
    for (var index = 0; index < this._generatedMappings.length; ++index) {
      var mapping = this._generatedMappings[index];

      // Mappings do not contain a field for the last generated columnt. We
      // can come up with an optimistic estimate, however, by assuming that
      // mappings are contiguous (i.e. given two consecutive mappings, the
      // first mapping ends where the second one starts).
      if (index + 1 < this._generatedMappings.length) {
        var nextMapping = this._generatedMappings[index + 1];

        if (mapping.generatedLine === nextMapping.generatedLine) {
          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
          continue;
        }
      }

      // The last mapping for each line spans the entire line.
      mapping.lastGeneratedColumn = Infinity;
    }
  };

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
BasicSourceMapConsumer.prototype.originalPositionFor =
  function SourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._generatedMappings,
      "generatedLine",
      "generatedColumn",
      util.compareByGeneratedPositionsDeflated,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._generatedMappings[index];

      if (mapping.generatedLine === needle.generatedLine) {
        var source = util.getArg(mapping, 'source', null);
        if (source !== null) {
          source = this._sources.at(source);
          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
        }
        var name = util.getArg(mapping, 'name', null);
        if (name !== null) {
          name = this._names.at(name);
        }
        return {
          source: source,
          line: util.getArg(mapping, 'originalLine', null),
          column: util.getArg(mapping, 'originalColumn', null),
          name: name
        };
      }
    }

    return {
      source: null,
      line: null,
      column: null,
      name: null
    };
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
  function BasicSourceMapConsumer_hasContentsOfAllSources() {
    if (!this.sourcesContent) {
      return false;
    }
    return this.sourcesContent.length >= this._sources.size() &&
      !this.sourcesContent.some(function (sc) { return sc == null; });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
BasicSourceMapConsumer.prototype.sourceContentFor =
  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    if (!this.sourcesContent) {
      return null;
    }

    var index = this._findSourceIndex(aSource);
    if (index >= 0) {
      return this.sourcesContent[index];
    }

    var relativeSource = aSource;
    if (this.sourceRoot != null) {
      relativeSource = util.relative(this.sourceRoot, relativeSource);
    }

    var url;
    if (this.sourceRoot != null
        && (url = util.urlParse(this.sourceRoot))) {
      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
      // many users. We can help them out when they expect file:// URIs to
      // behave like it would if they were running a local HTTP server. See
      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
      if (url.scheme == "file"
          && this._sources.has(fileUriAbsPath)) {
        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
      }

      if ((!url.path || url.path == "/")
          && this._sources.has("/" + relativeSource)) {
        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
      }
    }

    // This function is used recursively from
    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
    // don't want to throw if we can't find the source - we just want to
    // return null, so we provide a flag to exit gracefully.
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
BasicSourceMapConsumer.prototype.generatedPositionFor =
  function SourceMapConsumer_generatedPositionFor(aArgs) {
    var source = util.getArg(aArgs, 'source');
    source = this._findSourceIndex(source);
    if (source < 0) {
      return {
        line: null,
        column: null,
        lastColumn: null
      };
    }

    var needle = {
      source: source,
      originalLine: util.getArg(aArgs, 'line'),
      originalColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._originalMappings,
      "originalLine",
      "originalColumn",
      util.compareByOriginalPositions,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (mapping.source === needle.source) {
        return {
          line: util.getArg(mapping, 'generatedLine', null),
          column: util.getArg(mapping, 'generatedColumn', null),
          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
        };
      }
    }

    return {
      line: null,
      column: null,
      lastColumn: null
    };
  };

exports.BasicSourceMapConsumer = BasicSourceMapConsumer;

/**
 * An IndexedSourceMapConsumer instance represents a parsed source map which
 * we can query for information. It differs from BasicSourceMapConsumer in
 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
 * input.
 *
 * The first parameter is a raw source map (either as a JSON string, or already
 * parsed to an object). According to the spec for indexed source maps, they
 * have the following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - file: Optional. The generated file this source map is associated with.
 *   - sections: A list of section definitions.
 *
 * Each value under the "sections" field has two fields:
 *   - offset: The offset into the original specified at which this section
 *       begins to apply, defined as an object with a "line" and "column"
 *       field.
 *   - map: A source map definition. This source map could also be indexed,
 *       but doesn't have to be.
 *
 * Instead of the "map" field, it's also possible to have a "url" field
 * specifying a URL to retrieve a source map from, but that's currently
 * unsupported.
 *
 * Here's an example source map, taken from the source map spec[0], but
 * modified to omit a section which uses the "url" field.
 *
 *  {
 *    version : 3,
 *    file: "app.js",
 *    sections: [{
 *      offset: {line:100, column:10},
 *      map: {
 *        version : 3,
 *        file: "section.js",
 *        sources: ["foo.js", "bar.js"],
 *        names: ["src", "maps", "are", "fun"],
 *        mappings: "AAAA,E;;ABCDE;"
 *      }
 *    }],
 *  }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
 */
function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sections = util.getArg(sourceMap, 'sections');

  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  this._sources = new ArraySet();
  this._names = new ArraySet();

  var lastOffset = {
    line: -1,
    column: 0
  };
  this._sections = sections.map(function (s) {
    if (s.url) {
      // The url field will require support for asynchronicity.
      // See https://github.com/mozilla/source-map/issues/16
      throw new Error('Support for url field in sections not implemented.');
    }
    var offset = util.getArg(s, 'offset');
    var offsetLine = util.getArg(offset, 'line');
    var offsetColumn = util.getArg(offset, 'column');

    if (offsetLine < lastOffset.line ||
        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
      throw new Error('Section offsets must be ordered and non-overlapping.');
    }
    lastOffset = offset;

    return {
      generatedOffset: {
        // The offset fields are 0-based, but we use 1-based indices when
        // encoding/decoding from VLQ.
        generatedLine: offsetLine + 1,
        generatedColumn: offsetColumn + 1
      },
      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
    }
  });
}

IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;

/**
 * The version of the source mapping spec that we are consuming.
 */
IndexedSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
  get: function () {
    var sources = [];
    for (var i = 0; i < this._sections.length; i++) {
      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
        sources.push(this._sections[i].consumer.sources[j]);
      }
    }
    return sources;
  }
});

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
IndexedSourceMapConsumer.prototype.originalPositionFor =
  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    // Find the section containing the generated position we're trying to map
    // to an original position.
    var sectionIndex = binarySearch.search(needle, this._sections,
      function(needle, section) {
        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
        if (cmp) {
          return cmp;
        }

        return (needle.generatedColumn -
                section.generatedOffset.generatedColumn);
      });
    var section = this._sections[sectionIndex];

    if (!section) {
      return {
        source: null,
        line: null,
        column: null,
        name: null
      };
    }

    return section.consumer.originalPositionFor({
      line: needle.generatedLine -
        (section.generatedOffset.generatedLine - 1),
      column: needle.generatedColumn -
        (section.generatedOffset.generatedLine === needle.generatedLine
         ? section.generatedOffset.generatedColumn - 1
         : 0),
      bias: aArgs.bias
    });
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
    return this._sections.every(function (s) {
      return s.consumer.hasContentsOfAllSources();
    });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
IndexedSourceMapConsumer.prototype.sourceContentFor =
  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      var content = section.consumer.sourceContentFor(aSource, true);
      if (content) {
        return content;
      }
    }
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + aSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based. 
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
IndexedSourceMapConsumer.prototype.generatedPositionFor =
  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      // Only consider this section if the requested source is in the list of
      // sources of the consumer.
      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
        continue;
      }
      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
      if (generatedPosition) {
        var ret = {
          line: generatedPosition.line +
            (section.generatedOffset.generatedLine - 1),
          column: generatedPosition.column +
            (section.generatedOffset.generatedLine === generatedPosition.line
             ? section.generatedOffset.generatedColumn - 1
             : 0)
        };
        return ret;
      }
    }

    return {
      line: null,
      column: null
    };
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
IndexedSourceMapConsumer.prototype._parseMappings =
  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    this.__generatedMappings = [];
    this.__originalMappings = [];
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];
      var sectionMappings = section.consumer._generatedMappings;
      for (var j = 0; j < sectionMappings.length; j++) {
        var mapping = sectionMappings[j];

        var source = section.consumer._sources.at(mapping.source);
        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
        this._sources.add(source);
        source = this._sources.indexOf(source);

        var name = null;
        if (mapping.name) {
          name = section.consumer._names.at(mapping.name);
          this._names.add(name);
          name = this._names.indexOf(name);
        }

        // The mappings coming from the consumer for the section have
        // generated positions relative to the start of the section, so we
        // need to offset them to be relative to the start of the concatenated
        // generated file.
        var adjustedMapping = {
          source: source,
          generatedLine: mapping.generatedLine +
            (section.generatedOffset.generatedLine - 1),
          generatedColumn: mapping.generatedColumn +
            (section.generatedOffset.generatedLine === mapping.generatedLine
            ? section.generatedOffset.generatedColumn - 1
            : 0),
          originalLine: mapping.originalLine,
          originalColumn: mapping.originalColumn,
          name: name
        };

        this.__generatedMappings.push(adjustedMapping);
        if (typeof adjustedMapping.originalLine === 'number') {
          this.__originalMappings.push(adjustedMapping);
        }
      }
    }

    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
    quickSort(this.__originalMappings, util.compareByOriginalPositions);
  };

exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;


/***/ }),
/* 1064 */
/***/ (function(module, exports, __webpack_require__) {

/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var SourceMapGenerator = __webpack_require__(417).SourceMapGenerator;
var util = __webpack_require__(130);

// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
// operating systems these days (capturing the result).
var REGEX_NEWLINE = /(\r?\n)/;

// Newline character code for charCodeAt() comparisons
var NEWLINE_CODE = 10;

// Private symbol for identifying `SourceNode`s when multiple versions of
// the source-map library are loaded. This MUST NOT CHANGE across
// versions!
var isSourceNode = "$$$isSourceNode$$$";

/**
 * SourceNodes provide a way to abstract over interpolating/concatenating
 * snippets of generated JavaScript source code while maintaining the line and
 * column information associated with the original source code.
 *
 * @param aLine The original line number.
 * @param aColumn The original column number.
 * @param aSource The original source's filename.
 * @param aChunks Optional. An array of strings which are snippets of
 *        generated JS, or other SourceNodes.
 * @param aName The original identifier.
 */
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  this.children = [];
  this.sourceContents = {};
  this.line = aLine == null ? null : aLine;
  this.column = aColumn == null ? null : aColumn;
  this.source = aSource == null ? null : aSource;
  this.name = aName == null ? null : aName;
  this[isSourceNode] = true;
  if (aChunks != null) this.add(aChunks);
}

/**
 * Creates a SourceNode from generated code and a SourceMapConsumer.
 *
 * @param aGeneratedCode The generated code
 * @param aSourceMapConsumer The SourceMap for the generated code
 * @param aRelativePath Optional. The path that relative sources in the
 *        SourceMapConsumer should be relative to.
 */
SourceNode.fromStringWithSourceMap =
  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
    // The SourceNode we want to fill with the generated code
    // and the SourceMap
    var node = new SourceNode();

    // All even indices of this array are one line of the generated code,
    // while all odd indices are the newlines between two adjacent lines
    // (since `REGEX_NEWLINE` captures its match).
    // Processed fragments are accessed by calling `shiftNextLine`.
    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
    var remainingLinesIndex = 0;
    var shiftNextLine = function() {
      var lineContents = getNextLine();
      // The last line of a file might not have a newline.
      var newLine = getNextLine() || "";
      return lineContents + newLine;

      function getNextLine() {
        return remainingLinesIndex < remainingLines.length ?
            remainingLines[remainingLinesIndex++] : undefined;
      }
    };

    // We need to remember the position of "remainingLines"
    var lastGeneratedLine = 1, lastGeneratedColumn = 0;

    // The generate SourceNodes we need a code range.
    // To extract it current and last mapping is used.
    // Here we store the last mapping.
    var lastMapping = null;

    aSourceMapConsumer.eachMapping(function (mapping) {
      if (lastMapping !== null) {
        // We add the code from "lastMapping" to "mapping":
        // First check if there is a new line in between.
        if (lastGeneratedLine < mapping.generatedLine) {
          // Associate first line with "lastMapping"
          addMappingWithCode(lastMapping, shiftNextLine());
          lastGeneratedLine++;
          lastGeneratedColumn = 0;
          // The remaining code is added without mapping
        } else {
          // There is no new line in between.
          // Associate the code between "lastGeneratedColumn" and
          // "mapping.generatedColumn" with "lastMapping"
          var nextLine = remainingLines[remainingLinesIndex] || '';
          var code = nextLine.substr(0, mapping.generatedColumn -
                                        lastGeneratedColumn);
          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
                                              lastGeneratedColumn);
          lastGeneratedColumn = mapping.generatedColumn;
          addMappingWithCode(lastMapping, code);
          // No more remaining code, continue
          lastMapping = mapping;
          return;
        }
      }
      // We add the generated code until the first mapping
      // to the SourceNode without any mapping.
      // Each line is added as separate string.
      while (lastGeneratedLine < mapping.generatedLine) {
        node.add(shiftNextLine());
        lastGeneratedLine++;
      }
      if (lastGeneratedColumn < mapping.generatedColumn) {
        var nextLine = remainingLines[remainingLinesIndex] || '';
        node.add(nextLine.substr(0, mapping.generatedColumn));
        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
        lastGeneratedColumn = mapping.generatedColumn;
      }
      lastMapping = mapping;
    }, this);
    // We have processed all mappings.
    if (remainingLinesIndex < remainingLines.length) {
      if (lastMapping) {
        // Associate the remaining code in the current line with "lastMapping"
        addMappingWithCode(lastMapping, shiftNextLine());
      }
      // and add the remaining lines without any mapping
      node.add(remainingLines.splice(remainingLinesIndex).join(""));
    }

    // Copy sourcesContent into SourceNode
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aRelativePath != null) {
          sourceFile = util.join(aRelativePath, sourceFile);
        }
        node.setSourceContent(sourceFile, content);
      }
    });

    return node;

    function addMappingWithCode(mapping, code) {
      if (mapping === null || mapping.source === undefined) {
        node.add(code);
      } else {
        var source = aRelativePath
          ? util.join(aRelativePath, mapping.source)
          : mapping.source;
        node.add(new SourceNode(mapping.originalLine,
                                mapping.originalColumn,
                                source,
                                code,
                                mapping.name));
      }
    }
  };

/**
 * Add a chunk of generated JS to this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.add = function SourceNode_add(aChunk) {
  if (Array.isArray(aChunk)) {
    aChunk.forEach(function (chunk) {
      this.add(chunk);
    }, this);
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    if (aChunk) {
      this.children.push(aChunk);
    }
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Add a chunk of generated JS to the beginning of this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  if (Array.isArray(aChunk)) {
    for (var i = aChunk.length-1; i >= 0; i--) {
      this.prepend(aChunk[i]);
    }
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    this.children.unshift(aChunk);
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Walk over the tree of JS snippets in this node and its children. The
 * walking function is called once for each snippet of JS and is passed that
 * snippet and the its original associated source's line/column location.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  var chunk;
  for (var i = 0, len = this.children.length; i < len; i++) {
    chunk = this.children[i];
    if (chunk[isSourceNode]) {
      chunk.walk(aFn);
    }
    else {
      if (chunk !== '') {
        aFn(chunk, { source: this.source,
                     line: this.line,
                     column: this.column,
                     name: this.name });
      }
    }
  }
};

/**
 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
 * each of `this.children`.
 *
 * @param aSep The separator.
 */
SourceNode.prototype.join = function SourceNode_join(aSep) {
  var newChildren;
  var i;
  var len = this.children.length;
  if (len > 0) {
    newChildren = [];
    for (i = 0; i < len-1; i++) {
      newChildren.push(this.children[i]);
      newChildren.push(aSep);
    }
    newChildren.push(this.children[i]);
    this.children = newChildren;
  }
  return this;
};

/**
 * Call String.prototype.replace on the very right-most source snippet. Useful
 * for trimming whitespace from the end of a source node, etc.
 *
 * @param aPattern The pattern to replace.
 * @param aReplacement The thing to replace the pattern with.
 */
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  var lastChild = this.children[this.children.length - 1];
  if (lastChild[isSourceNode]) {
    lastChild.replaceRight(aPattern, aReplacement);
  }
  else if (typeof lastChild === 'string') {
    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  }
  else {
    this.children.push(''.replace(aPattern, aReplacement));
  }
  return this;
};

/**
 * Set the source content for a source file. This will be added to the SourceMapGenerator
 * in the sourcesContent field.
 *
 * @param aSourceFile The filename of the source file
 * @param aSourceContent The content of the source file
 */
SourceNode.prototype.setSourceContent =
  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  };

/**
 * Walk over the tree of SourceNodes. The walking function is called for each
 * source file content and is passed the filename and source content.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walkSourceContents =
  function SourceNode_walkSourceContents(aFn) {
    for (var i = 0, len = this.children.length; i < len; i++) {
      if (this.children[i][isSourceNode]) {
        this.children[i].walkSourceContents(aFn);
      }
    }

    var sources = Object.keys(this.sourceContents);
    for (var i = 0, len = sources.length; i < len; i++) {
      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
    }
  };

/**
 * Return the string representation of this source node. Walks over the tree
 * and concatenates all the various snippets together to one string.
 */
SourceNode.prototype.toString = function SourceNode_toString() {
  var str = "";
  this.walk(function (chunk) {
    str += chunk;
  });
  return str;
};

/**
 * Returns the string representation of this source node along with a source
 * map.
 */
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  var generated = {
    code: "",
    line: 1,
    column: 0
  };
  var map = new SourceMapGenerator(aArgs);
  var sourceMappingActive = false;
  var lastOriginalSource = null;
  var lastOriginalLine = null;
  var lastOriginalColumn = null;
  var lastOriginalName = null;
  this.walk(function (chunk, original) {
    generated.code += chunk;
    if (original.source !== null
        && original.line !== null
        && original.column !== null) {
      if(lastOriginalSource !== original.source
         || lastOriginalLine !== original.line
         || lastOriginalColumn !== original.column
         || lastOriginalName !== original.name) {
        map.addMapping({
          source: original.source,
          original: {
            line: original.line,
            column: original.column
          },
          generated: {
            line: generated.line,
            column: generated.column
          },
          name: original.name
        });
      }
      lastOriginalSource = original.source;
      lastOriginalLine = original.line;
      lastOriginalColumn = original.column;
      lastOriginalName = original.name;
      sourceMappingActive = true;
    } else if (sourceMappingActive) {
      map.addMapping({
        generated: {
          line: generated.line,
          column: generated.column
        }
      });
      lastOriginalSource = null;
      sourceMappingActive = false;
    }
    for (var idx = 0, length = chunk.length; idx < length; idx++) {
      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
        generated.line++;
        generated.column = 0;
        // Mappings end at eol
        if (idx + 1 === length) {
          lastOriginalSource = null;
          sourceMappingActive = false;
        } else if (sourceMappingActive) {
          map.addMapping({
            source: original.source,
            original: {
              line: original.line,
              column: original.column
            },
            generated: {
              line: generated.line,
              column: generated.column
            },
            name: original.name
          });
        }
      } else {
        generated.column++;
      }
    }
  });
  this.walkSourceContents(function (sourceFile, sourceContent) {
    map.setSourceContent(sourceFile, sourceContent);
  });

  return { code: generated.code, map: map };
};

exports.SourceNode = SourceNode;


/***/ }),
/* 1065 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Copyright 2009-2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE.txt or:
 * http://opensource.org/licenses/BSD-3-Clause
 */
exports.SourceMapGenerator = __webpack_require__(417).SourceMapGenerator;
exports.SourceMapConsumer = __webpack_require__(1063).SourceMapConsumer;
exports.SourceNode = __webpack_require__(1064).SourceNode;


/***/ }),
/* 1066 */
/***/ (function(module, exports, __webpack_require__) {

var SourceMapConsumer = __webpack_require__(1065).SourceMapConsumer;
var path = __webpack_require__(0);

var fs;
try {
  fs = __webpack_require__(1);
  if (!fs.existsSync || !fs.readFileSync) {
    // fs doesn't have all methods we need
    fs = null;
  }
} catch (err) {
  /* nop */
}

var bufferFrom = __webpack_require__(601);

// Only install once if called multiple times
var errorFormatterInstalled = false;
var uncaughtShimInstalled = false;

// If true, the caches are reset before a stack trace formatting operation
var emptyCacheBetweenOperations = false;

// Supports {browser, node, auto}
var environment = "auto";

// Maps a file path to a string containing the file contents
var fileContentsCache = {};

// Maps a file path to a source map for that file
var sourceMapCache = {};

// Regex for detecting source maps
var reSourceMap = /^data:application\/json[^,]+base64,/;

// Priority list of retrieve handlers
var retrieveFileHandlers = [];
var retrieveMapHandlers = [];

function isInBrowser() {
  if (environment === "browser")
    return true;
  if (environment === "node")
    return false;
  return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === "renderer"));
}

function hasGlobalProcessEventEmitter() {
  return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function'));
}

function handlerExec(list) {
  return function(arg) {
    for (var i = 0; i < list.length; i++) {
      var ret = list[i](arg);
      if (ret) {
        return ret;
      }
    }
    return null;
  };
}

var retrieveFile = handlerExec(retrieveFileHandlers);

retrieveFileHandlers.push(function(path) {
  // Trim the path to make sure there is no extra whitespace.
  path = path.trim();
  if (/^file:/.test(path)) {
    // existsSync/readFileSync can't handle file protocol, but once stripped, it works
    path = path.replace(/file:\/\/\/(\w:)?/, function(protocol, drive) {
      return drive ?
        '' : // file:///C:/dir/file -> C:/dir/file
        '/'; // file:///root-dir/file -> /root-dir/file
    });
  }
  if (path in fileContentsCache) {
    return fileContentsCache[path];
  }

  var contents = null;
  if (!fs) {
    // Use SJAX if we are in the browser
    var xhr = new XMLHttpRequest();
    xhr.open('GET', path, false);
    xhr.send(null);
    var contents = null
    if (xhr.readyState === 4 && xhr.status === 200) {
      contents = xhr.responseText
    }
  } else if (fs.existsSync(path)) {
    // Otherwise, use the filesystem
    try {
      contents = fs.readFileSync(path, 'utf8');
    } catch (er) {
      contents = '';
    }
  }

  return fileContentsCache[path] = contents;
});

// Support URLs relative to a directory, but be careful about a protocol prefix
// in case we are in the browser (i.e. directories may start with "http://" or "file:///")
function supportRelativeURL(file, url) {
  if (!file) return url;
  var dir = path.dirname(file);
  var match = /^\w+:\/\/[^\/]*/.exec(dir);
  var protocol = match ? match[0] : '';
  var startPath = dir.slice(protocol.length);
  if (protocol && /^\/\w\:/.test(startPath)) {
    // handle file:///C:/ paths
    protocol += '/';
    return protocol + path.resolve(dir.slice(protocol.length), url).replace(/\\/g, '/');
  }
  return protocol + path.resolve(dir.slice(protocol.length), url);
}

function retrieveSourceMapURL(source) {
  var fileData;

  if (isInBrowser()) {
     try {
       var xhr = new XMLHttpRequest();
       xhr.open('GET', source, false);
       xhr.send(null);
       fileData = xhr.readyState === 4 ? xhr.responseText : null;

       // Support providing a sourceMappingURL via the SourceMap header
       var sourceMapHeader = xhr.getResponseHeader("SourceMap") ||
                             xhr.getResponseHeader("X-SourceMap");
       if (sourceMapHeader) {
         return sourceMapHeader;
       }
     } catch (e) {
     }
  }

  // Get the URL of the source map
  fileData = retrieveFile(source);
  var re = /(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/)[ \t]*$)/mg;
  // Keep executing the search to find the *last* sourceMappingURL to avoid
  // picking up sourceMappingURLs from comments, strings, etc.
  var lastMatch, match;
  while (match = re.exec(fileData)) lastMatch = match;
  if (!lastMatch) return null;
  return lastMatch[1];
};

// Can be overridden by the retrieveSourceMap option to install. Takes a
// generated source filename; returns a {map, optional url} object, or null if
// there is no source map.  The map field may be either a string or the parsed
// JSON object (ie, it must be a valid argument to the SourceMapConsumer
// constructor).
var retrieveSourceMap = handlerExec(retrieveMapHandlers);
retrieveMapHandlers.push(function(source) {
  var sourceMappingURL = retrieveSourceMapURL(source);
  if (!sourceMappingURL) return null;

  // Read the contents of the source map
  var sourceMapData;
  if (reSourceMap.test(sourceMappingURL)) {
    // Support source map URL as a data url
    var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);
    sourceMapData = bufferFrom(rawData, "base64").toString();
    sourceMappingURL = source;
  } else {
    // Support source map URLs relative to the source URL
    sourceMappingURL = supportRelativeURL(source, sourceMappingURL);
    sourceMapData = retrieveFile(sourceMappingURL);
  }

  if (!sourceMapData) {
    return null;
  }

  return {
    url: sourceMappingURL,
    map: sourceMapData
  };
});

function mapSourcePosition(position) {
  var sourceMap = sourceMapCache[position.source];
  if (!sourceMap) {
    // Call the (overrideable) retrieveSourceMap function to get the source map.
    var urlAndMap = retrieveSourceMap(position.source);
    if (urlAndMap) {
      sourceMap = sourceMapCache[position.source] = {
        url: urlAndMap.url,
        map: new SourceMapConsumer(urlAndMap.map)
      };

      // Load all sources stored inline with the source map into the file cache
      // to pretend like they are already loaded. They may not exist on disk.
      if (sourceMap.map.sourcesContent) {
        sourceMap.map.sources.forEach(function(source, i) {
          var contents = sourceMap.map.sourcesContent[i];
          if (contents) {
            var url = supportRelativeURL(sourceMap.url, source);
            fileContentsCache[url] = contents;
          }
        });
      }
    } else {
      sourceMap = sourceMapCache[position.source] = {
        url: null,
        map: null
      };
    }
  }

  // Resolve the source URL relative to the URL of the source map
  if (sourceMap && sourceMap.map) {
    var originalPosition = sourceMap.map.originalPositionFor(position);

    // Only return the original position if a matching line was found. If no
    // matching line is found then we return position instead, which will cause
    // the stack trace to print the path and line for the compiled file. It is
    // better to give a precise location in the compiled file than a vague
    // location in the original file.
    if (originalPosition.source !== null) {
      originalPosition.source = supportRelativeURL(
        sourceMap.url, originalPosition.source);
      return originalPosition;
    }
  }

  return position;
}

// Parses code generated by FormatEvalOrigin(), a function inside V8:
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js
function mapEvalOrigin(origin) {
  // Most eval() calls are in this format
  var match = /^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(origin);
  if (match) {
    var position = mapSourcePosition({
      source: match[2],
      line: +match[3],
      column: match[4] - 1
    });
    return 'eval at ' + match[1] + ' (' + position.source + ':' +
      position.line + ':' + (position.column + 1) + ')';
  }

  // Parse nested eval() calls using recursion
  match = /^eval at ([^(]+) \((.+)\)$/.exec(origin);
  if (match) {
    return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')';
  }

  // Make sure we still return useful information if we didn't find anything
  return origin;
}

// This is copied almost verbatim from the V8 source code at
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js. The
// implementation of wrapCallSite() used to just forward to the actual source
// code of CallSite.prototype.toString but unfortunately a new release of V8
// did something to the prototype chain and broke the shim. The only fix I
// could find was copy/paste.
function CallSiteToString() {
  var fileName;
  var fileLocation = "";
  if (this.isNative()) {
    fileLocation = "native";
  } else {
    fileName = this.getScriptNameOrSourceURL();
    if (!fileName && this.isEval()) {
      fileLocation = this.getEvalOrigin();
      fileLocation += ", ";  // Expecting source position to follow.
    }

    if (fileName) {
      fileLocation += fileName;
    } else {
      // Source code does not originate from a file and is not native, but we
      // can still get the source position inside the source string, e.g. in
      // an eval string.
      fileLocation += "<anonymous>";
    }
    var lineNumber = this.getLineNumber();
    if (lineNumber != null) {
      fileLocation += ":" + lineNumber;
      var columnNumber = this.getColumnNumber();
      if (columnNumber) {
        fileLocation += ":" + columnNumber;
      }
    }
  }

  var line = "";
  var functionName = this.getFunctionName();
  var addSuffix = true;
  var isConstructor = this.isConstructor();
  var isMethodCall = !(this.isToplevel() || isConstructor);
  if (isMethodCall) {
    var typeName = this.getTypeName();
    // Fixes shim to be backward compatable with Node v0 to v4
    if (typeName === "[object Object]") {
      typeName = "null";
    }
    var methodName = this.getMethodName();
    if (functionName) {
      if (typeName && functionName.indexOf(typeName) != 0) {
        line += typeName + ".";
      }
      line += functionName;
      if (methodName && functionName.indexOf("." + methodName) != functionName.length - methodName.length - 1) {
        line += " [as " + methodName + "]";
      }
    } else {
      line += typeName + "." + (methodName || "<anonymous>");
    }
  } else if (isConstructor) {
    line += "new " + (functionName || "<anonymous>");
  } else if (functionName) {
    line += functionName;
  } else {
    line += fileLocation;
    addSuffix = false;
  }
  if (addSuffix) {
    line += " (" + fileLocation + ")";
  }
  return line;
}

function cloneCallSite(frame) {
  var object = {};
  Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) {
    object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name];
  });
  object.toString = CallSiteToString;
  return object;
}

function wrapCallSite(frame) {
  if(frame.isNative()) {
    return frame;
  }

  // Most call sites will return the source file from getFileName(), but code
  // passed to eval() ending in "//# sourceURL=..." will return the source file
  // from getScriptNameOrSourceURL() instead
  var source = frame.getFileName() || frame.getScriptNameOrSourceURL();
  if (source) {
    var line = frame.getLineNumber();
    var column = frame.getColumnNumber() - 1;

    // Fix position in Node where some (internal) code is prepended.
    // See https://github.com/evanw/node-source-map-support/issues/36
    var headerLength = 62;
    if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) {
      column -= headerLength;
    }

    var position = mapSourcePosition({
      source: source,
      line: line,
      column: column
    });
    frame = cloneCallSite(frame);
    frame.getFileName = function() { return position.source; };
    frame.getLineNumber = function() { return position.line; };
    frame.getColumnNumber = function() { return position.column + 1; };
    frame.getScriptNameOrSourceURL = function() { return position.source; };
    return frame;
  }

  // Code called using eval() needs special handling
  var origin = frame.isEval() && frame.getEvalOrigin();
  if (origin) {
    origin = mapEvalOrigin(origin);
    frame = cloneCallSite(frame);
    frame.getEvalOrigin = function() { return origin; };
    return frame;
  }

  // If we get here then we were unable to change the source position
  return frame;
}

// This function is part of the V8 stack trace API, for more info see:
// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
function prepareStackTrace(error, stack) {
  if (emptyCacheBetweenOperations) {
    fileContentsCache = {};
    sourceMapCache = {};
  }

  return error + stack.map(function(frame) {
    return '\n    at ' + wrapCallSite(frame);
  }).join('');
}

// Generate position and snippet of original source with pointer
function getErrorSource(error) {
  var match = /\n    at [^(]+ \((.*):(\d+):(\d+)\)/.exec(error.stack);
  if (match) {
    var source = match[1];
    var line = +match[2];
    var column = +match[3];

    // Support the inline sourceContents inside the source map
    var contents = fileContentsCache[source];

    // Support files on disk
    if (!contents && fs && fs.existsSync(source)) {
      try {
        contents = fs.readFileSync(source, 'utf8');
      } catch (er) {
        contents = '';
      }
    }

    // Format the line from the original source code like node does
    if (contents) {
      var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1];
      if (code) {
        return source + ':' + line + '\n' + code + '\n' +
          new Array(column).join(' ') + '^';
      }
    }
  }
  return null;
}

function printErrorAndExit (error) {
  var source = getErrorSource(error);

  if (source) {
    fs.writeSync(2, "\n" + source + "\n");
  }

  fs.writeSync(2, error.stack + "\n");
  process.exit(1);
}

function shimEmitUncaughtException () {
  var origEmit = process.emit;

  process.emit = function (type) {
    if (type === 'uncaughtException') {
      var hasStack = (arguments[1] && arguments[1].stack);
      var hasListeners = (this.listeners(type).length > 0);

      if (hasStack && !hasListeners) {
        return printErrorAndExit(arguments[1]);
      }
    }

    return origEmit.apply(this, arguments);
  };
}

var originalRetrieveFileHandlers = retrieveFileHandlers.slice(0);
var originalRetrieveMapHandlers = retrieveMapHandlers.slice(0);

exports.wrapCallSite = wrapCallSite;
exports.getErrorSource = getErrorSource;
exports.mapSourcePosition = mapSourcePosition;
exports.retrieveSourceMap = retrieveSourceMap;

exports.install = function(options) {
  options = options || {};

  if (options.environment) {
    environment = options.environment;
    if (["node", "browser", "auto"].indexOf(environment) === -1) {
      throw new Error("environment " + environment + " was unknown. Available options are {auto, browser, node}")
    }
  }

  // Allow sources to be found by methods other than reading the files
  // directly from disk.
  if (options.retrieveFile) {
    if (options.overrideRetrieveFile) {
      retrieveFileHandlers.length = 0;
    }

    retrieveFileHandlers.unshift(options.retrieveFile);
  }

  // Allow source maps to be found by methods other than reading the files
  // directly from disk.
  if (options.retrieveSourceMap) {
    if (options.overrideRetrieveSourceMap) {
      retrieveMapHandlers.length = 0;
    }

    retrieveMapHandlers.unshift(options.retrieveSourceMap);
  }

  // Support runtime transpilers that include inline source maps
  if (options.hookRequire && !isInBrowser()) {
    var Module;
    try {
      Module = __webpack_require__(106);
    } catch (err) {
      // NOP: Loading in catch block to convert webpack error to warning.
    }
    var $compile = Module.prototype._compile;

    if (!$compile.__sourceMapSupport) {
      Module.prototype._compile = function(content, filename) {
        fileContentsCache[filename] = content;
        sourceMapCache[filename] = undefined;
        return $compile.call(this, content, filename);
      };

      Module.prototype._compile.__sourceMapSupport = true;
    }
  }

  // Configure options
  if (!emptyCacheBetweenOperations) {
    emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ?
      options.emptyCacheBetweenOperations : false;
  }

  // Install the error reformatter
  if (!errorFormatterInstalled) {
    errorFormatterInstalled = true;
    Error.prepareStackTrace = prepareStackTrace;
  }

  if (!uncaughtShimInstalled) {
    var installHandler = 'handleUncaughtExceptions' in options ?
      options.handleUncaughtExceptions : true;

    // Provide the option to not install the uncaught exception handler. This is
    // to support other uncaught exception handlers (in test frameworks, for
    // example). If this handler is not installed and there are no other uncaught
    // exception handlers, uncaught exceptions will be caught by node's built-in
    // exception handler and the process will still be terminated. However, the
    // generated JavaScript code will be shown above the stack trace instead of
    // the original source code.
    if (installHandler && hasGlobalProcessEventEmitter()) {
      uncaughtShimInstalled = true;
      shimEmitUncaughtException();
    }
  }
};

exports.resetRetrieveHandlers = function() {
  retrieveFileHandlers.length = 0;
  retrieveMapHandlers.length = 0;

  retrieveFileHandlers = originalRetrieveFileHandlers.slice(0);
  retrieveMapHandlers = originalRetrieveMapHandlers.slice(0);
}


/***/ }),
/* 1067 */
/***/ (function(module, exports) {

module.exports = function(args, opts){
	opts = opts || {}
	args = args || '';
	var arr = [];

	var current = null;
	var quoted = null;
	var quoteType = null;

	function addcurrent(){
		if(current){
			// trim extra whitespace on the current arg
			arr.push(current.trim());
			current = null;
		}
	}

	// remove escaped newlines
	args = args.replace(/\\\n/g, '');

	for(var i=0; i<args.length; i++){
		var c = args.charAt(i);

		if(c==" "){
			if(quoted){
				quoted += c;
			}
			else{
				addcurrent();
			}
		}
		else if(c == '\'' || c == '"'){
			if(quoted){
				quoted += c;
				// only end this arg if the end quote is the same type as start quote
				if (quoteType === c) {
					// make sure the quote is not escaped
					if (quoted.charAt(quoted.length - 2) !== '\\') {
						arr.push(quoted);
						quoted = null;
						quoteType = null;
					}
				}
			}
			else{
				addcurrent();
				quoted = c;
				quoteType = c;
			}
		}
		else{
			if(quoted){
				quoted += c;
			}
			else{
				if(current){
					current += c;
				}
				else{
					current = c;
				}
			}
		}
	}

	addcurrent();

	if(opts.removequotes){
		arr = arr.map(function(arg){
			if(arg.match(/\s/)) return arg
			return arg.replace(/^"|"$/g, "");
		});
	}

	return arr;
}


/***/ }),
/* 1068 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = __webpack_require__(39).spawnSync || __webpack_require__(1070);


/***/ }),
/* 1069 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";



//TODO: handle reviver/dehydrate function like normal
//and handle indentation, like normal.
//if anyone needs this... please send pull request.

exports.stringify = function stringify (o) {
  if(o && Buffer.isBuffer(o))
    return JSON.stringify(':base64:' + o.toString('base64'))

  if(o && o.toJSON)
    o =  o.toJSON()

  if(o && 'object' === typeof o) {
    var s = ''
    var array = Array.isArray(o)
    s = array ? '[' : '{'
    var first = true

    for(var k in o) {
      var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])
      if(Object.hasOwnProperty.call(o, k) && !ignore) {
        if(!first)
          s += ','
        first = false
        if (array) {
          s += stringify(o[k])
        } else if (o[k] !== void(0)) {
          s += stringify(k) + ':' + stringify(o[k])
        }
      }
    }

    s += array ? ']' : '}'

    return s
  } else if ('string' === typeof o) {
    return JSON.stringify(/^:/.test(o) ? ':' + o : o)
  } else if ('undefined' === typeof o) {
    return 'null';
  } else
    return JSON.stringify(o)
}

exports.parse = function (s) {
  return JSON.parse(s, function (key, value) {
    if('string' === typeof value) {
      if(/^:base64:/.test(value))
        return new Buffer(value.substring(8), 'base64')
      else
        return /^:/.test(value) ? value.substring(1) : value
    }
    return value
  })
}

/***/ }),
/* 1070 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var tmpdir = __webpack_require__(5).tmpdir || __webpack_require__(978).tmpdir;
var cp = __webpack_require__(39);
var sleep;
var JSON = __webpack_require__(1069);
try {
  sleep = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"try-thread-sleep\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
} catch (ex) {
  console.warn('Native thread-sleep not available.');
  console.warn('This will result in much slower performance, but it will still work.');
  console.warn('You should re-install spawn-sync or upgrade to the lastest version of node if possible.');
  console.warn('Check ' + path.resolve(__dirname, '../error.log') + ' for more details');
  sleep = function () {};
}

var temp = path.normalize(path.join(tmpdir(), 'spawn-sync'));

function randomFileName(name) {
  function randomHash(count) {
    if (count === 1)
      return parseInt(16*Math.random(), 10).toString(16);
    else {
      var hash = '';
      for (var i=0; i<count; i++)
        hash += randomHash(1);
      return hash;
    }
  }

  return temp + '_' + name + '_' + String(process.pid) + randomHash(20);
}
function unlink(filename) {
  try {
    fs.unlinkSync(filename);
  } catch (ex) {
    if (ex.code !== 'ENOENT') throw ex;
  }
}
function tryUnlink(filename) {
  // doesn't matter too much if we fail to delete temp files
  try {
    fs.unlinkSync(filename);
  } catch(e) {}
}

function invoke(cmd) {
  // location to keep flag for busy waiting fallback
  var finished = randomFileName("finished");
  unlink(finished);
  if (process.platform === 'win32') {
    cmd = cmd + '& echo "finished" > ' + finished;
  } else {
    cmd = cmd + '; echo "finished" > ' + finished;
  }
  cp.exec(cmd);

  while (!fs.existsSync(finished)) {
    // busy wait
    sleep(200);
  }

  tryUnlink(finished);

  return 0;
}

module.exports = spawnSyncFallback;
function spawnSyncFallback(cmd, commandArgs, options) {
  var args = [];
  for (var i = 0; i < arguments.length; i++) {
    args.push(arguments[i]);
  }

  // node.js script to run the command
  var worker = path.normalize(__dirname + '/worker.js');
  // location to store arguments
  var input = randomFileName('input');
  var output = randomFileName('output');
  unlink(output);

  fs.writeFileSync(input, JSON.stringify(args));
  invoke('"' + process.execPath + '" "' + worker + '" "' + input + '" "' + output + '"');
  var res = JSON.parse(fs.readFileSync(output, 'utf8'));
  tryUnlink(input);tryUnlink(output);
  return res;
}


/***/ }),
/* 1071 */
/***/ (function(module, exports, __webpack_require__) {

/*
Copyright 2015 Kyle E. Mitchell

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var parse = __webpack_require__(418)
var spdxLicenseIds = __webpack_require__(469)

function valid (string) {
  try {
    parse(string)
    return true
  } catch (error) {
    return false
  }
}

// Common transpositions of license identifier acronyms
var transpositions = [
  ['APGL', 'AGPL'],
  ['Gpl', 'GPL'],
  ['GLP', 'GPL'],
  ['APL', 'Apache'],
  ['ISD', 'ISC'],
  ['GLP', 'GPL'],
  ['IST', 'ISC'],
  ['Claude', 'Clause'],
  [' or later', '+'],
  [' International', ''],
  ['GNU', 'GPL'],
  ['GUN', 'GPL'],
  ['+', ''],
  ['GNU GPL', 'GPL'],
  ['GNU/GPL', 'GPL'],
  ['GNU GLP', 'GPL'],
  ['GNU General Public License', 'GPL'],
  ['Gnu public license', 'GPL'],
  ['GNU Public License', 'GPL'],
  ['GNU GENERAL PUBLIC LICENSE', 'GPL'],
  ['MTI', 'MIT'],
  ['Mozilla Public License', 'MPL'],
  ['WTH', 'WTF'],
  ['-License', '']
]

var TRANSPOSED = 0
var CORRECT = 1

// Simple corrections to nearly valid identifiers.
var transforms = [
  // e.g. 'mit'
  function (argument) {
    return argument.toUpperCase()
  },
  // e.g. 'MIT '
  function (argument) {
    return argument.trim()
  },
  // e.g. 'M.I.T.'
  function (argument) {
    return argument.replace(/\./g, '')
  },
  // e.g. 'Apache- 2.0'
  function (argument) {
    return argument.replace(/\s+/g, '')
  },
  // e.g. 'CC BY 4.0''
  function (argument) {
    return argument.replace(/\s+/g, '-')
  },
  // e.g. 'LGPLv2.1'
  function (argument) {
    return argument.replace('v', '-')
  },
  // e.g. 'Apache 2.0'
  function (argument) {
    return argument.replace(/,?\s*(\d)/, '-$1')
  },
  // e.g. 'GPL 2'
  function (argument) {
    return argument.replace(/,?\s*(\d)/, '-$1.0')
  },
  // e.g. 'Apache Version 2.0'
  function (argument) {
    return argument
      .replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2')
  },
  // e.g. 'Apache Version 2'
  function (argument) {
    return argument
      .replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2.0')
  },
  // e.g. 'ZLIB'
  function (argument) {
    return argument[0].toUpperCase() + argument.slice(1)
  },
  // e.g. 'MPL/2.0'
  function (argument) {
    return argument.replace('/', '-')
  },
  // e.g. 'Apache 2'
  function (argument) {
    return argument
      .replace(/\s*V\s*(\d)/, '-$1')
      .replace(/(\d)$/, '$1.0')
  },
  // e.g. 'GPL-2.0', 'GPL-3.0'
  function (argument) {
    if (argument.indexOf('3.0') !== -1) {
      return argument + '-or-later'
    } else {
      return argument + '-only'
    }
  },
  // e.g. 'GPL-2.0-'
  function (argument) {
    return argument + 'only'
  },
  // e.g. 'GPL2'
  function (argument) {
    return argument.replace(/(\d)$/, '-$1.0')
  },
  // e.g. 'BSD 3'
  function (argument) {
    return argument.replace(/(-| )?(\d)$/, '-$2-Clause')
  },
  // e.g. 'BSD clause 3'
  function (argument) {
    return argument.replace(/(-| )clause(-| )(\d)/, '-$3-Clause')
  },
  // e.g. 'BY-NC-4.0'
  function (argument) {
    return 'CC-' + argument
  },
  // e.g. 'BY-NC'
  function (argument) {
    return 'CC-' + argument + '-4.0'
  },
  // e.g. 'Attribution-NonCommercial'
  function (argument) {
    return argument
      .replace('Attribution', 'BY')
      .replace('NonCommercial', 'NC')
      .replace('NoDerivatives', 'ND')
      .replace(/ (\d)/, '-$1')
      .replace(/ ?International/, '')
  },
  // e.g. 'Attribution-NonCommercial'
  function (argument) {
    return 'CC-' +
      argument
        .replace('Attribution', 'BY')
        .replace('NonCommercial', 'NC')
        .replace('NoDerivatives', 'ND')
        .replace(/ (\d)/, '-$1')
        .replace(/ ?International/, '') +
      '-4.0'
  }
]

var licensesWithVersions = spdxLicenseIds
  .map(function (id) {
    var match = /^(.*)-\d+\.\d+$/.exec(id)
    return match
      ? [match[0], match[1]]
      : [id, null]
  })
  .reduce(function (objectMap, item) {
    var key = item[1]
    objectMap[key] = objectMap[key] || []
    objectMap[key].push(item[0])
    return objectMap
  }, {})

var licensesWithOneVersion = Object.keys(licensesWithVersions)
  .map(function makeEntries (key) {
    return [key, licensesWithVersions[key]]
  })
  .filter(function identifySoleVersions (item) {
    return (
      // Licenses has just one valid version suffix.
      item[1].length === 1 &&
      item[0] !== null &&
      // APL will be considered Apache, rather than APL-1.0
      item[0] !== 'APL'
    )
  })
  .map(function createLastResorts (item) {
    return [item[0], item[1][0]]
  })

licensesWithVersions = undefined

// If all else fails, guess that strings containing certain substrings
// meant to identify certain licenses.
var lastResorts = [
  ['UNLI', 'Unlicense'],
  ['WTF', 'WTFPL'],
  ['2 CLAUSE', 'BSD-2-Clause'],
  ['2-CLAUSE', 'BSD-2-Clause'],
  ['3 CLAUSE', 'BSD-3-Clause'],
  ['3-CLAUSE', 'BSD-3-Clause'],
  ['AFFERO', 'AGPL-3.0-or-later'],
  ['AGPL', 'AGPL-3.0-or-later'],
  ['APACHE', 'Apache-2.0'],
  ['ARTISTIC', 'Artistic-2.0'],
  ['Affero', 'AGPL-3.0-or-later'],
  ['BEER', 'Beerware'],
  ['BOOST', 'BSL-1.0'],
  ['BSD', 'BSD-2-Clause'],
  ['CDDL', 'CDDL-1.1'],
  ['ECLIPSE', 'EPL-1.0'],
  ['FUCK', 'WTFPL'],
  ['GNU', 'GPL-3.0-or-later'],
  ['LGPL', 'LGPL-3.0-or-later'],
  ['GPLV1', 'GPL-1.0-only'],
  ['GPLV2', 'GPL-2.0-only'],
  ['GPL', 'GPL-3.0-or-later'],
  ['MIT +NO-FALSE-ATTRIBS', 'MITNFA'],
  ['MIT', 'MIT'],
  ['MPL', 'MPL-2.0'],
  ['X11', 'X11'],
  ['ZLIB', 'Zlib']
].concat(licensesWithOneVersion)

var SUBSTRING = 0
var IDENTIFIER = 1

var validTransformation = function (identifier) {
  for (var i = 0; i < transforms.length; i++) {
    var transformed = transforms[i](identifier).trim()
    if (transformed !== identifier && valid(transformed)) {
      return transformed
    }
  }
  return null
}

var validLastResort = function (identifier) {
  var upperCased = identifier.toUpperCase()
  for (var i = 0; i < lastResorts.length; i++) {
    var lastResort = lastResorts[i]
    if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) {
      return lastResort[IDENTIFIER]
    }
  }
  return null
}

var anyCorrection = function (identifier, check) {
  for (var i = 0; i < transpositions.length; i++) {
    var transposition = transpositions[i]
    var transposed = transposition[TRANSPOSED]
    if (identifier.indexOf(transposed) > -1) {
      var corrected = identifier.replace(
        transposed,
        transposition[CORRECT]
      )
      var checked = check(corrected)
      if (checked !== null) {
        return checked
      }
    }
  }
  return null
}

module.exports = function (identifier) {
  var validArugment = (
    typeof identifier === 'string' &&
    identifier.trim().length !== 0
  )
  if (!validArugment) {
    throw Error('Invalid argument. Expected non-empty string.')
  }
  identifier = identifier.replace(/\+$/, '').trim()
  if (valid(identifier)) {
    return upgradeGPLs(identifier)
  }
  var transformed = validTransformation(identifier)
  if (transformed !== null) {
    return upgradeGPLs(transformed)
  }
  transformed = anyCorrection(identifier, function (argument) {
    if (valid(argument)) {
      return argument
    }
    return validTransformation(argument)
  })
  if (transformed !== null) {
    return upgradeGPLs(transformed)
  }
  transformed = validLastResort(identifier)
  if (transformed !== null) {
    return upgradeGPLs(transformed)
  }
  transformed = anyCorrection(identifier, validLastResort)
  if (transformed !== null) {
    return upgradeGPLs(transformed)
  }
  return null
}

function upgradeGPLs (value) {
  if ([
    'GPL-1.0', 'LGPL-1.0', 'AGPL-1.0',
    'GPL-2.0', 'LGPL-2.0', 'AGPL-2.0',
    'LGPL-2.1'
  ].indexOf(value) !== -1) {
    return value + '-only'
  } else if (['GPL-3.0', 'LGPL-3.0', 'AGPL-3.0'].indexOf(value) !== -1) {
    return value + '-or-later'
  } else {
    return value
  }
}


/***/ }),
/* 1072 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// The ABNF grammar in the spec is totally ambiguous.
//
// This parser follows the operator precedence defined in the
// `Order of Precedence and Parentheses` section.

module.exports = function (tokens) {
  var index = 0

  function hasMore () {
    return index < tokens.length
  }

  function token () {
    return hasMore() ? tokens[index] : null
  }

  function next () {
    if (!hasMore()) {
      throw new Error()
    }
    index++
  }

  function parseOperator (operator) {
    var t = token()
    if (t && t.type === 'OPERATOR' && operator === t.string) {
      next()
      return t.string
    }
  }

  function parseWith () {
    if (parseOperator('WITH')) {
      var t = token()
      if (t && t.type === 'EXCEPTION') {
        next()
        return t.string
      }
      throw new Error('Expected exception after `WITH`')
    }
  }

  function parseLicenseRef () {
    // TODO: Actually, everything is concatenated into one string
    // for backward-compatibility but it could be better to return
    // a nice structure.
    var begin = index
    var string = ''
    var t = token()
    if (t.type === 'DOCUMENTREF') {
      next()
      string += 'DocumentRef-' + t.string + ':'
      if (!parseOperator(':')) {
        throw new Error('Expected `:` after `DocumentRef-...`')
      }
    }
    t = token()
    if (t.type === 'LICENSEREF') {
      next()
      string += 'LicenseRef-' + t.string
      return {license: string}
    }
    index = begin
  }

  function parseLicense () {
    var t = token()
    if (t && t.type === 'LICENSE') {
      next()
      var node = {license: t.string}
      if (parseOperator('+')) {
        node.plus = true
      }
      var exception = parseWith()
      if (exception) {
        node.exception = exception
      }
      return node
    }
  }

  function parseParenthesizedExpression () {
    var left = parseOperator('(')
    if (!left) {
      return
    }

    var expr = parseExpression()

    if (!parseOperator(')')) {
      throw new Error('Expected `)`')
    }

    return expr
  }

  function parseAtom () {
    return (
      parseParenthesizedExpression() ||
      parseLicenseRef() ||
      parseLicense()
    )
  }

  function makeBinaryOpParser (operator, nextParser) {
    return function parseBinaryOp () {
      var left = nextParser()
      if (!left) {
        return
      }

      if (!parseOperator(operator)) {
        return left
      }

      var right = parseBinaryOp()
      if (!right) {
        throw new Error('Expected expression')
      }
      return {
        left: left,
        conjunction: operator.toLowerCase(),
        right: right
      }
    }
  }

  var parseAnd = makeBinaryOpParser('AND', parseAtom)
  var parseExpression = makeBinaryOpParser('OR', parseAnd)

  var node = parseExpression()
  if (!node || hasMore()) {
    throw new Error('Syntax error')
  }
  return node
}


/***/ }),
/* 1073 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var licenses = []
  .concat(__webpack_require__(469))
  .concat(__webpack_require__(1230))
var exceptions = __webpack_require__(1229)

module.exports = function (source) {
  var index = 0

  function hasMore () {
    return index < source.length
  }

  // `value` can be a regexp or a string.
  // If it is recognized, the matching source string is returned and
  // the index is incremented. Otherwise `undefined` is returned.
  function read (value) {
    if (value instanceof RegExp) {
      var chars = source.slice(index)
      var match = chars.match(value)
      if (match) {
        index += match[0].length
        return match[0]
      }
    } else {
      if (source.indexOf(value, index) === index) {
        index += value.length
        return value
      }
    }
  }

  function skipWhitespace () {
    read(/[ ]*/)
  }

  function operator () {
    var string
    var possibilities = ['WITH', 'AND', 'OR', '(', ')', ':', '+']
    for (var i = 0; i < possibilities.length; i++) {
      string = read(possibilities[i])
      if (string) {
        break
      }
    }

    if (string === '+' && index > 1 && source[index - 2] === ' ') {
      throw new Error('Space before `+`')
    }

    return string && {
      type: 'OPERATOR',
      string: string
    }
  }

  function idstring () {
    return read(/[A-Za-z0-9-.]+/)
  }

  function expectIdstring () {
    var string = idstring()
    if (!string) {
      throw new Error('Expected idstring at offset ' + index)
    }
    return string
  }

  function documentRef () {
    if (read('DocumentRef-')) {
      var string = expectIdstring()
      return {type: 'DOCUMENTREF', string: string}
    }
  }

  function licenseRef () {
    if (read('LicenseRef-')) {
      var string = expectIdstring()
      return {type: 'LICENSEREF', string: string}
    }
  }

  function identifier () {
    var begin = index
    var string = idstring()

    if (licenses.indexOf(string) !== -1) {
      return {
        type: 'LICENSE',
        string: string
      }
    } else if (exceptions.indexOf(string) !== -1) {
      return {
        type: 'EXCEPTION',
        string: string
      }
    }

    index = begin
  }

  // Tries to read the next token. Returns `undefined` if no token is
  // recognized.
  function parseToken () {
    // Ordering matters
    return (
      operator() ||
      documentRef() ||
      licenseRef() ||
      identifier()
    )
  }

  var tokens = []
  while (hasMore()) {
    skipWhitespace()
    if (!hasMore()) {
      break
    }

    var token = parseToken()
    if (!token) {
      throw new Error('Unexpected `' + source[index] +
                      '` at offset ' + index)
    }

    tokens.push(token)
  }
  return tokens
}


/***/ }),
/* 1074 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2017 Joyent, Inc.

module.exports = {
	read: read,
	verify: verify,
	sign: sign,
	signAsync: signAsync,
	write: write,

	/* Internal private API */
	fromBuffer: fromBuffer,
	toBuffer: toBuffer
};

var assert = __webpack_require__(6);
var SSHBuffer = __webpack_require__(135);
var crypto = __webpack_require__(7);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var Identity = __webpack_require__(134);
var rfc4253 = __webpack_require__(82);
var Signature = __webpack_require__(57);
var utils = __webpack_require__(12);
var Certificate = __webpack_require__(131);

function verify(cert, key) {
	/*
	 * We always give an issuerKey, so if our verify() is being called then
	 * there was no signature. Return false.
	 */
	return (false);
}

var TYPES = {
	'user': 1,
	'host': 2
};
Object.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; });

var ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/;

function read(buf, options) {
	if (Buffer.isBuffer(buf))
		buf = buf.toString('ascii');
	var parts = buf.trim().split(/[ \t\n]+/g);
	if (parts.length < 2 || parts.length > 3)
		throw (new Error('Not a valid SSH certificate line'));

	var algo = parts[0];
	var data = parts[1];

	data = Buffer.from(data, 'base64');
	return (fromBuffer(data, algo));
}

function fromBuffer(data, algo, partial) {
	var sshbuf = new SSHBuffer({ buffer: data });
	var innerAlgo = sshbuf.readString();
	if (algo !== undefined && innerAlgo !== algo)
		throw (new Error('SSH certificate algorithm mismatch'));
	if (algo === undefined)
		algo = innerAlgo;

	var cert = {};
	cert.signatures = {};
	cert.signatures.openssh = {};

	cert.signatures.openssh.nonce = sshbuf.readBuffer();

	var key = {};
	var parts = (key.parts = []);
	key.type = getAlg(algo);

	var partCount = algs.info[key.type].parts.length;
	while (parts.length < partCount)
		parts.push(sshbuf.readPart());
	assert.ok(parts.length >= 1, 'key must have at least one part');

	var algInfo = algs.info[key.type];
	if (key.type === 'ecdsa') {
		var res = ECDSA_ALGO.exec(algo);
		assert.ok(res !== null);
		assert.strictEqual(res[1], parts[0].data.toString());
	}

	for (var i = 0; i < algInfo.parts.length; ++i) {
		parts[i].name = algInfo.parts[i];
		if (parts[i].name !== 'curve' &&
		    algInfo.normalize !== false) {
			var p = parts[i];
			p.data = utils.mpNormalize(p.data);
		}
	}

	cert.subjectKey = new Key(key);

	cert.serial = sshbuf.readInt64();

	var type = TYPES[sshbuf.readInt()];
	assert.string(type, 'valid cert type');

	cert.signatures.openssh.keyId = sshbuf.readString();

	var principals = [];
	var pbuf = sshbuf.readBuffer();
	var psshbuf = new SSHBuffer({ buffer: pbuf });
	while (!psshbuf.atEnd())
		principals.push(psshbuf.readString());
	if (principals.length === 0)
		principals = ['*'];

	cert.subjects = principals.map(function (pr) {
		if (type === 'user')
			return (Identity.forUser(pr));
		else if (type === 'host')
			return (Identity.forHost(pr));
		throw (new Error('Unknown identity type ' + type));
	});

	cert.validFrom = int64ToDate(sshbuf.readInt64());
	cert.validUntil = int64ToDate(sshbuf.readInt64());

	cert.signatures.openssh.critical = sshbuf.readBuffer();
	cert.signatures.openssh.exts = sshbuf.readBuffer();

	/* reserved */
	sshbuf.readBuffer();

	var signingKeyBuf = sshbuf.readBuffer();
	cert.issuerKey = rfc4253.read(signingKeyBuf);

	/*
	 * OpenSSH certs don't give the identity of the issuer, just their
	 * public key. So, we use an Identity that matches anything. The
	 * isSignedBy() function will later tell you if the key matches.
	 */
	cert.issuer = Identity.forHost('**');

	var sigBuf = sshbuf.readBuffer();
	cert.signatures.openssh.signature =
	    Signature.parse(sigBuf, cert.issuerKey.type, 'ssh');

	if (partial !== undefined) {
		partial.remainder = sshbuf.remainder();
		partial.consumed = sshbuf._offset;
	}

	return (new Certificate(cert));
}

function int64ToDate(buf) {
	var i = buf.readUInt32BE(0) * 4294967296;
	i += buf.readUInt32BE(4);
	var d = new Date();
	d.setTime(i * 1000);
	d.sourceInt64 = buf;
	return (d);
}

function dateToInt64(date) {
	if (date.sourceInt64 !== undefined)
		return (date.sourceInt64);
	var i = Math.round(date.getTime() / 1000);
	var upper = Math.floor(i / 4294967296);
	var lower = Math.floor(i % 4294967296);
	var buf = Buffer.alloc(8);
	buf.writeUInt32BE(upper, 0);
	buf.writeUInt32BE(lower, 4);
	return (buf);
}

function sign(cert, key) {
	if (cert.signatures.openssh === undefined)
		cert.signatures.openssh = {};
	try {
		var blob = toBuffer(cert, true);
	} catch (e) {
		delete (cert.signatures.openssh);
		return (false);
	}
	var sig = cert.signatures.openssh;
	var hashAlgo = undefined;
	if (key.type === 'rsa' || key.type === 'dsa')
		hashAlgo = 'sha1';
	var signer = key.createSign(hashAlgo);
	signer.write(blob);
	sig.signature = signer.sign();
	return (true);
}

function signAsync(cert, signer, done) {
	if (cert.signatures.openssh === undefined)
		cert.signatures.openssh = {};
	try {
		var blob = toBuffer(cert, true);
	} catch (e) {
		delete (cert.signatures.openssh);
		done(e);
		return;
	}
	var sig = cert.signatures.openssh;

	signer(blob, function (err, signature) {
		if (err) {
			done(err);
			return;
		}
		try {
			/*
			 * This will throw if the signature isn't of a
			 * type/algo that can be used for SSH.
			 */
			signature.toBuffer('ssh');
		} catch (e) {
			done(e);
			return;
		}
		sig.signature = signature;
		done();
	});
}

function write(cert, options) {
	if (options === undefined)
		options = {};

	var blob = toBuffer(cert);
	var out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64');
	if (options.comment)
		out = out + ' ' + options.comment;
	return (out);
}


function toBuffer(cert, noSig) {
	assert.object(cert.signatures.openssh, 'signature for openssh format');
	var sig = cert.signatures.openssh;

	if (sig.nonce === undefined)
		sig.nonce = crypto.randomBytes(16);
	var buf = new SSHBuffer({});
	buf.writeString(getCertType(cert.subjectKey));
	buf.writeBuffer(sig.nonce);

	var key = cert.subjectKey;
	var algInfo = algs.info[key.type];
	algInfo.parts.forEach(function (part) {
		buf.writePart(key.part[part]);
	});

	buf.writeInt64(cert.serial);

	var type = cert.subjects[0].type;
	assert.notStrictEqual(type, 'unknown');
	cert.subjects.forEach(function (id) {
		assert.strictEqual(id.type, type);
	});
	type = TYPES[type];
	buf.writeInt(type);

	if (sig.keyId === undefined) {
		sig.keyId = cert.subjects[0].type + '_' +
		    (cert.subjects[0].uid || cert.subjects[0].hostname);
	}
	buf.writeString(sig.keyId);

	var sub = new SSHBuffer({});
	cert.subjects.forEach(function (id) {
		if (type === TYPES.host)
			sub.writeString(id.hostname);
		else if (type === TYPES.user)
			sub.writeString(id.uid);
	});
	buf.writeBuffer(sub.toBuffer());

	buf.writeInt64(dateToInt64(cert.validFrom));
	buf.writeInt64(dateToInt64(cert.validUntil));

	if (sig.critical === undefined)
		sig.critical = Buffer.alloc(0);
	buf.writeBuffer(sig.critical);

	if (sig.exts === undefined)
		sig.exts = Buffer.alloc(0);
	buf.writeBuffer(sig.exts);

	/* reserved */
	buf.writeBuffer(Buffer.alloc(0));

	sub = rfc4253.write(cert.issuerKey);
	buf.writeBuffer(sub);

	if (!noSig)
		buf.writeBuffer(sig.signature.toBuffer('ssh'));

	return (buf.toBuffer());
}

function getAlg(certType) {
	if (certType === 'ssh-rsa-cert-v01@openssh.com')
		return ('rsa');
	if (certType === 'ssh-dss-cert-v01@openssh.com')
		return ('dsa');
	if (certType.match(ECDSA_ALGO))
		return ('ecdsa');
	if (certType === 'ssh-ed25519-cert-v01@openssh.com')
		return ('ed25519');
	throw (new Error('Unsupported cert type ' + certType));
}

function getCertType(key) {
	if (key.type === 'rsa')
		return ('ssh-rsa-cert-v01@openssh.com');
	if (key.type === 'dsa')
		return ('ssh-dss-cert-v01@openssh.com');
	if (key.type === 'ecdsa')
		return ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com');
	if (key.type === 'ed25519')
		return ('ssh-ed25519-cert-v01@openssh.com');
	throw (new Error('Unsupported key type ' + key.type));
}


/***/ }),
/* 1075 */
/***/ (function(module, exports, __webpack_require__) {

// Copyright 2016 Joyent, Inc.

var x509 = __webpack_require__(422);

module.exports = {
	read: read,
	verify: x509.verify,
	sign: x509.sign,
	write: write
};

var assert = __webpack_require__(6);
var asn1 = __webpack_require__(47);
var Buffer = __webpack_require__(10).Buffer;
var algs = __webpack_require__(19);
var utils = __webpack_require__(12);
var Key = __webpack_require__(16);
var PrivateKey = __webpack_require__(20);
var pem = __webpack_require__(66);
var Identity = __webpack_require__(134);
var Signature = __webpack_require__(57);
var Certificate = __webpack_require__(131);

function read(buf, options) {
	if (typeof (buf) !== 'string') {
		assert.buffer(buf, 'buf');
		buf = buf.toString('ascii');
	}

	var lines = buf.trim().split(/[\r\n]+/g);

	var m = lines[0].match(/*JSSTYLED*/
	    /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);
	assert.ok(m, 'invalid PEM header');

	var m2 = lines[lines.length - 1].match(/*JSSTYLED*/
	    /[-]+[ ]*END CERTIFICATE[ ]*[-]+/);
	assert.ok(m2, 'invalid PEM footer');

	var headers = {};
	while (true) {
		lines = lines.slice(1);
		m = lines[0].match(/*JSSTYLED*/
		    /^([A-Za-z0-9-]+): (.+)$/);
		if (!m)
			break;
		headers[m[1].toLowerCase()] = m[2];
	}

	/* Chop off the first and last lines */
	lines = lines.slice(0, -1).join('');
	buf = Buffer.from(lines, 'base64');

	return (x509.read(buf, options));
}

function write(cert, options) {
	var dbuf = x509.write(cert, options);

	var header = 'CERTIFICATE';
	var tmp = dbuf.toString('base64');
	var len = tmp.length + (tmp.length / 64) +
	    18 + 16 + header.length*2 + 10;
	var buf = Buffer.alloc(len);
	var o = 0;
	o += buf.write('-----BEGIN ' + header + '-----\n', o);
	for (var i = 0; i < tmp.length; ) {
		var limit = i + 64;
		if (limit > tmp.length)
			limit = tmp.length;
		o += buf.write(tmp.slice(i, limit), o);
		buf[o++] = 10;
		i = limit;
	}
	o += buf.write('-----END ' + header + '-----\n', o);

	return (buf.slice(0, o));
}


/***/ }),
/* 1076 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * statuses
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var codes = __webpack_require__(1231)

/**
 * Module exports.
 * @public
 */

module.exports = status

// status code to message map
status.STATUS_CODES = codes

// array of status codes
status.codes = populateStatusesMap(status, codes)

// status codes for redirects
status.redirect = {
  300: true,
  301: true,
  302: true,
  303: true,
  305: true,
  307: true,
  308: true
}

// status codes for empty bodies
status.empty = {
  204: true,
  205: true,
  304: true
}

// status codes for when you should retry the request
status.retry = {
  502: true,
  503: true,
  504: true
}

/**
 * Populate the statuses map for given codes.
 * @private
 */

function populateStatusesMap (statuses, codes) {
  var arr = []

  Object.keys(codes).forEach(function forEachCode (code) {
    var message = codes[code]
    var status = Number(code)

    // Populate properties
    statuses[status] = message
    statuses[message] = status
    statuses[message.toLowerCase()] = status

    // Add to array
    arr.push(status)
  })

  return arr
}

/**
 * Get the status code.
 *
 * Given a number, this will throw if it is not a known status
 * code, otherwise the code will be returned. Given a string,
 * the string will be parsed for a number and return the code
 * if valid, otherwise will lookup the code assuming this is
 * the status message.
 *
 * @param {string|number} code
 * @returns {number}
 * @public
 */

function status (code) {
  if (typeof code === 'number') {
    if (!status[code]) throw new Error('invalid status code: ' + code)
    return code
  }

  if (typeof code !== 'string') {
    throw new TypeError('code must be a number or string')
  }

  // '403'
  var n = parseInt(code, 10)
  if (!isNaN(n)) {
    if (!status[n]) throw new Error('invalid status code: ' + n)
    return n
  }

  n = status[code.toLowerCase()]
  if (!n) throw new Error('invalid status message: "' + code + '"')
  return n
}


/***/ }),
/* 1077 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var numberIsNan = __webpack_require__(973);

module.exports = function (x) {
	if (numberIsNan(x)) {
		return false;
	}

	// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1369

	// code points are derived from:
	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
	if (x >= 0x1100 && (
		x <= 0x115f ||  // Hangul Jamo
		0x2329 === x || // LEFT-POINTING ANGLE BRACKET
		0x232a === x || // RIGHT-POINTING ANGLE BRACKET
		// CJK Radicals Supplement .. Enclosed CJK Letters and Months
		(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
		// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
		0x3250 <= x && x <= 0x4dbf ||
		// CJK Unified Ideographs .. Yi Radicals
		0x4e00 <= x && x <= 0xa4c6 ||
		// Hangul Jamo Extended-A
		0xa960 <= x && x <= 0xa97c ||
		// Hangul Syllables
		0xac00 <= x && x <= 0xd7a3 ||
		// CJK Compatibility Ideographs
		0xf900 <= x && x <= 0xfaff ||
		// Vertical Forms
		0xfe10 <= x && x <= 0xfe19 ||
		// CJK Compatibility Forms .. Small Form Variants
		0xfe30 <= x && x <= 0xfe6b ||
		// Halfwidth and Fullwidth Forms
		0xff01 <= x && x <= 0xff60 ||
		0xffe0 <= x && x <= 0xffe6 ||
		// Kana Supplement
		0x1b000 <= x && x <= 0x1b001 ||
		// Enclosed Ideographic Supplement
		0x1f200 <= x && x <= 0x1f251 ||
		// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
		0x20000 <= x && x <= 0x3fffd)) {
		return true;
	}

	return false;
}


/***/ }),
/* 1078 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = x => {
	if (typeof x !== 'string') {
		throw new TypeError('Expected a string, got ' + typeof x);
	}

	// Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
	// conversion translates it to FEFF (UTF-16 BOM)
	if (x.charCodeAt(0) === 0xFEFF) {
		return x.slice(1);
	}

	return x;
};


/***/ }),
/* 1079 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (x) {
	var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
	var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();

	if (x[x.length - 1] === lf) {
		x = x.slice(0, x.length - 1);
	}

	if (x[x.length - 1] === cr) {
		x = x.slice(0, x.length - 1);
	}

	return x;
};


/***/ }),
/* 1080 */
/***/ (function(module, exports, __webpack_require__) {

var isHexPrefixed = __webpack_require__(898);

/**
 * Removes '0x' from a given `String` is present
 * @param {String} str the string value
 * @return {String|Optional} a string by pass if necessary
 */
module.exports = function stripHexPrefix(str) {
  if (typeof str !== 'string') {
    return str;
  }

  return isHexPrefixed(str) ? str.slice(2) : str;
}


/***/ }),
/* 1081 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ponyfill_js__ = __webpack_require__(1082);
/* global window */


var root;

if (typeof self !== 'undefined') {
  root = self;
} else if (typeof window !== 'undefined') {
  root = window;
} else if (typeof global !== 'undefined') {
  root = global;
} else if (true) {
  root = module;
} else {
  root = Function('return this')();
}

var result = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__ponyfill_js__["a" /* default */])(root);
/* harmony default export */ __webpack_exports__["a"] = (result);

/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(1227)(module)))

/***/ }),
/* 1082 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = symbolObservablePonyfill;
function symbolObservablePonyfill(root) {
	var result;
	var Symbol = root.Symbol;

	if (typeof Symbol === 'function') {
		if (Symbol.observable) {
			result = Symbol.observable;
		} else {
			result = Symbol('observable');
			Symbol.observable = result;
		}
	} else {
		result = '@@observable';
	}

	return result;
};


/***/ }),
/* 1083 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = rimraf
rimraf.sync = rimrafSync

var assert = __webpack_require__(11)
var path = __webpack_require__(0)
var fs = __webpack_require__(1)

// for EMFILE handling
var timeout = 0
exports.EMFILE_MAX = 1000
exports.BUSYTRIES_MAX = 3

var isWindows = (process.platform === "win32")

function defaults (options) {
  var methods = [
    'unlink',
    'chmod',
    'stat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(function(m) {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })
}

function rimraf (p, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = {}
  }
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  defaults(options)

  if (!cb) throw new Error("No callback passed to rimraf()")

  var busyTries = 0
  rimraf_(p, options, function CB (er) {
    if (er) {
      if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
          busyTries < exports.BUSYTRIES_MAX) {
        busyTries ++
        var time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(function () {
          rimraf_(p, options, CB)
        }, time)
      }

      // this one won't happen if graceful-fs is used.
      if (er.code === "EMFILE" && timeout < exports.EMFILE_MAX) {
        return setTimeout(function () {
          rimraf_(p, options, CB)
        }, timeout ++)
      }

      // already gone
      if (er.code === "ENOENT") er = null
    }

    timeout = 0
    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.unlink(p, function (er) {
    if (er) {
      if (er.code === "ENOENT")
        return cb(null)
      if (er.code === "EPERM")
        return (isWindows)
          ? fixWinEPERM(p, options, er, cb)
          : rmdir(p, options, er, cb)
      if (er.code === "EISDIR")
        return rmdir(p, options, er, cb)
    }
    return cb(er)
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er)
    assert(er instanceof Error)

  options.chmod(p, 666, function (er2) {
    if (er2)
      cb(er2.code === "ENOENT" ? null : er)
    else
      options.stat(p, function(er3, stats) {
        if (er3)
          cb(er3.code === "ENOENT" ? null : er)
        else if (stats.isDirectory())
          rmdir(p, options, er, cb)
        else
          options.unlink(p, cb)
      })
  })
}

function fixWinEPERMSync (p, options, er) {
  assert(p)
  assert(options)
  if (er)
    assert(er instanceof Error)

  try {
    options.chmodSync(p, 666)
  } catch (er2) {
    if (er2.code === "ENOENT")
      return
    else
      throw er
  }

  try {
    var stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === "ENOENT")
      return
    else
      throw er
  }

  if (stats.isDirectory())
    rmdirSync(p, options, er)
  else
    options.unlinkSync(p)
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, function (er) {
    if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
      rmkids(p, options, cb)
    else if (er && er.code === "ENOTDIR")
      cb(originalEr)
    else
      cb(er)
  })
}

function rmkids(p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, function (er, files) {
    if (er)
      return cb(er)
    var n = files.length
    if (n === 0)
      return options.rmdir(p, cb)
    var errState
    files.forEach(function (f) {
      rimraf(path.join(p, f), options, function (er) {
        if (errState)
          return
        if (er)
          return cb(errState = er)
        if (--n === 0)
          options.rmdir(p, cb)
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  options = options || {}
  defaults(options)

  assert(p)
  assert(options)

  try {
    options.unlinkSync(p)
  } catch (er) {
    if (er.code === "ENOENT")
      return
    if (er.code === "EPERM")
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    if (er.code !== "EISDIR")
      throw er
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr)
    assert(originalEr instanceof Error)

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === "ENOENT")
      return
    if (er.code === "ENOTDIR")
      throw originalEr
    if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
      rmkidsSync(p, options)
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(function (f) {
    rimrafSync(path.join(p, f), options)
  })
  options.rmdirSync(p, options)
}


/***/ }),
/* 1084 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * Copyright (c) 2015, Salesforce.com, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Salesforce.com nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

var net = __webpack_require__(32);
var urlParse = __webpack_require__(8).parse;
var pubsuffix = __webpack_require__(428);
var Store = __webpack_require__(429).Store;
var MemoryCookieStore = __webpack_require__(1085).MemoryCookieStore;
var pathMatch = __webpack_require__(426).pathMatch;
var VERSION = __webpack_require__(1232).version;

var punycode;
try {
  punycode = __webpack_require__(472);
} catch(e) {
  console.warn("cookie: can't load punycode; won't use punycode for domain normalization");
}

// From RFC6265 S4.1.1
// note that it excludes \x3B ";"
var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;

var CONTROL_CHARS = /[\x00-\x1F]/;

// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
// the "relaxed" mode, see:
// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
var TERMINATORS = ['\n', '\r', '\0'];

// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
// Note ';' is \x3B
var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;

// date-time parsing constants (RFC6265 S5.1.1)

var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;

var MONTH_TO_NUM = {
  jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
  jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
};
var NUM_TO_MONTH = [
  'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
];
var NUM_TO_DAY = [
  'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
];

var MAX_TIME = 2147483647000; // 31-bit max
var MIN_TIME = 0; // 31-bit min

/*
 * Parses a Natural number (i.e., non-negative integer) with either the
 *    <min>*<max>DIGIT ( non-digit *OCTET )
 * or
 *    <min>*<max>DIGIT
 * grammar (RFC6265 S5.1.1).
 *
 * The "trailingOK" boolean controls if the grammar accepts a
 * "( non-digit *OCTET )" trailer.
 */
function parseDigits(token, minDigits, maxDigits, trailingOK) {
  var count = 0;
  while (count < token.length) {
    var c = token.charCodeAt(count);
    // "non-digit = %x00-2F / %x3A-FF"
    if (c <= 0x2F || c >= 0x3A) {
      break;
    }
    count++;
  }

  // constrain to a minimum and maximum number of digits.
  if (count < minDigits || count > maxDigits) {
    return null;
  }

  if (!trailingOK && count != token.length) {
    return null;
  }

  return parseInt(token.substr(0,count), 10);
}

function parseTime(token) {
  var parts = token.split(':');
  var result = [0,0,0];

  /* RF6256 S5.1.1:
   *      time            = hms-time ( non-digit *OCTET )
   *      hms-time        = time-field ":" time-field ":" time-field
   *      time-field      = 1*2DIGIT
   */

  if (parts.length !== 3) {
    return null;
  }

  for (var i = 0; i < 3; i++) {
    // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
    // followed by "( non-digit *OCTET )" so therefore the last time-field can
    // have a trailer
    var trailingOK = (i == 2);
    var num = parseDigits(parts[i], 1, 2, trailingOK);
    if (num === null) {
      return null;
    }
    result[i] = num;
  }

  return result;
}

function parseMonth(token) {
  token = String(token).substr(0,3).toLowerCase();
  var num = MONTH_TO_NUM[token];
  return num >= 0 ? num : null;
}

/*
 * RFC6265 S5.1.1 date parser (see RFC for full grammar)
 */
function parseDate(str) {
  if (!str) {
    return;
  }

  /* RFC6265 S5.1.1:
   * 2. Process each date-token sequentially in the order the date-tokens
   * appear in the cookie-date
   */
  var tokens = str.split(DATE_DELIM);
  if (!tokens) {
    return;
  }

  var hour = null;
  var minute = null;
  var second = null;
  var dayOfMonth = null;
  var month = null;
  var year = null;

  for (var i=0; i<tokens.length; i++) {
    var token = tokens[i].trim();
    if (!token.length) {
      continue;
    }

    var result;

    /* 2.1. If the found-time flag is not set and the token matches the time
     * production, set the found-time flag and set the hour- value,
     * minute-value, and second-value to the numbers denoted by the digits in
     * the date-token, respectively.  Skip the remaining sub-steps and continue
     * to the next date-token.
     */
    if (second === null) {
      result = parseTime(token);
      if (result) {
        hour = result[0];
        minute = result[1];
        second = result[2];
        continue;
      }
    }

    /* 2.2. If the found-day-of-month flag is not set and the date-token matches
     * the day-of-month production, set the found-day-of- month flag and set
     * the day-of-month-value to the number denoted by the date-token.  Skip
     * the remaining sub-steps and continue to the next date-token.
     */
    if (dayOfMonth === null) {
      // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
      result = parseDigits(token, 1, 2, true);
      if (result !== null) {
        dayOfMonth = result;
        continue;
      }
    }

    /* 2.3. If the found-month flag is not set and the date-token matches the
     * month production, set the found-month flag and set the month-value to
     * the month denoted by the date-token.  Skip the remaining sub-steps and
     * continue to the next date-token.
     */
    if (month === null) {
      result = parseMonth(token);
      if (result !== null) {
        month = result;
        continue;
      }
    }

    /* 2.4. If the found-year flag is not set and the date-token matches the
     * year production, set the found-year flag and set the year-value to the
     * number denoted by the date-token.  Skip the remaining sub-steps and
     * continue to the next date-token.
     */
    if (year === null) {
      // "year = 2*4DIGIT ( non-digit *OCTET )"
      result = parseDigits(token, 2, 4, true);
      if (result !== null) {
        year = result;
        /* From S5.1.1:
         * 3.  If the year-value is greater than or equal to 70 and less
         * than or equal to 99, increment the year-value by 1900.
         * 4.  If the year-value is greater than or equal to 0 and less
         * than or equal to 69, increment the year-value by 2000.
         */
        if (year >= 70 && year <= 99) {
          year += 1900;
        } else if (year >= 0 && year <= 69) {
          year += 2000;
        }
      }
    }
  }

  /* RFC 6265 S5.1.1
   * "5. Abort these steps and fail to parse the cookie-date if:
   *     *  at least one of the found-day-of-month, found-month, found-
   *        year, or found-time flags is not set,
   *     *  the day-of-month-value is less than 1 or greater than 31,
   *     *  the year-value is less than 1601,
   *     *  the hour-value is greater than 23,
   *     *  the minute-value is greater than 59, or
   *     *  the second-value is greater than 59.
   *     (Note that leap seconds cannot be represented in this syntax.)"
   *
   * So, in order as above:
   */
  if (
    dayOfMonth === null || month === null || year === null || second === null ||
    dayOfMonth < 1 || dayOfMonth > 31 ||
    year < 1601 ||
    hour > 23 ||
    minute > 59 ||
    second > 59
  ) {
    return;
  }

  return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
}

function formatDate(date) {
  var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
  var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
  var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
  var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
  return NUM_TO_DAY[date.getUTCDay()] + ', ' +
    d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
    h+':'+m+':'+s+' GMT';
}

// S5.1.2 Canonicalized Host Names
function canonicalDomain(str) {
  if (str == null) {
    return null;
  }
  str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .

  // convert to IDN if any non-ASCII characters
  if (punycode && /[^\u0001-\u007f]/.test(str)) {
    str = punycode.toASCII(str);
  }

  return str.toLowerCase();
}

// S5.1.3 Domain Matching
function domainMatch(str, domStr, canonicalize) {
  if (str == null || domStr == null) {
    return null;
  }
  if (canonicalize !== false) {
    str = canonicalDomain(str);
    domStr = canonicalDomain(domStr);
  }

  /*
   * "The domain string and the string are identical. (Note that both the
   * domain string and the string will have been canonicalized to lower case at
   * this point)"
   */
  if (str == domStr) {
    return true;
  }

  /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */

  /* "* The string is a host name (i.e., not an IP address)." */
  if (net.isIP(str)) {
    return false;
  }

  /* "* The domain string is a suffix of the string" */
  var idx = str.indexOf(domStr);
  if (idx <= 0) {
    return false; // it's a non-match (-1) or prefix (0)
  }

  // e.g "a.b.c".indexOf("b.c") === 2
  // 5 === 3+2
  if (str.length !== domStr.length + idx) { // it's not a suffix
    return false;
  }

  /* "* The last character of the string that is not included in the domain
  * string is a %x2E (".") character." */
  if (str.substr(idx-1,1) !== '.') {
    return false;
  }

  return true;
}


// RFC6265 S5.1.4 Paths and Path-Match

/*
 * "The user agent MUST use an algorithm equivalent to the following algorithm
 * to compute the default-path of a cookie:"
 *
 * Assumption: the path (and not query part or absolute uri) is passed in.
 */
function defaultPath(path) {
  // "2. If the uri-path is empty or if the first character of the uri-path is not
  // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
  if (!path || path.substr(0,1) !== "/") {
    return "/";
  }

  // "3. If the uri-path contains no more than one %x2F ("/") character, output
  // %x2F ("/") and skip the remaining step."
  if (path === "/") {
    return path;
  }

  var rightSlash = path.lastIndexOf("/");
  if (rightSlash === 0) {
    return "/";
  }

  // "4. Output the characters of the uri-path from the first character up to,
  // but not including, the right-most %x2F ("/")."
  return path.slice(0, rightSlash);
}

function trimTerminator(str) {
  for (var t = 0; t < TERMINATORS.length; t++) {
    var terminatorIdx = str.indexOf(TERMINATORS[t]);
    if (terminatorIdx !== -1) {
      str = str.substr(0,terminatorIdx);
    }
  }

  return str;
}

function parseCookiePair(cookiePair, looseMode) {
  cookiePair = trimTerminator(cookiePair);

  var firstEq = cookiePair.indexOf('=');
  if (looseMode) {
    if (firstEq === 0) { // '=' is immediately at start
      cookiePair = cookiePair.substr(1);
      firstEq = cookiePair.indexOf('='); // might still need to split on '='
    }
  } else { // non-loose mode
    if (firstEq <= 0) { // no '=' or is at start
      return; // needs to have non-empty "cookie-name"
    }
  }

  var cookieName, cookieValue;
  if (firstEq <= 0) {
    cookieName = "";
    cookieValue = cookiePair.trim();
  } else {
    cookieName = cookiePair.substr(0, firstEq).trim();
    cookieValue = cookiePair.substr(firstEq+1).trim();
  }

  if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
    return;
  }

  var c = new Cookie();
  c.key = cookieName;
  c.value = cookieValue;
  return c;
}

function parse(str, options) {
  if (!options || typeof options !== 'object') {
    options = {};
  }
  str = str.trim();

  // We use a regex to parse the "name-value-pair" part of S5.2
  var firstSemi = str.indexOf(';'); // S5.2 step 1
  var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);
  var c = parseCookiePair(cookiePair, !!options.loose);
  if (!c) {
    return;
  }

  if (firstSemi === -1) {
    return c;
  }

  // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
  // (including the %x3B (";") in question)." plus later on in the same section
  // "discard the first ";" and trim".
  var unparsed = str.slice(firstSemi + 1).trim();

  // "If the unparsed-attributes string is empty, skip the rest of these
  // steps."
  if (unparsed.length === 0) {
    return c;
  }

  /*
   * S5.2 says that when looping over the items "[p]rocess the attribute-name
   * and attribute-value according to the requirements in the following
   * subsections" for every item.  Plus, for many of the individual attributes
   * in S5.3 it says to use the "attribute-value of the last attribute in the
   * cookie-attribute-list".  Therefore, in this implementation, we overwrite
   * the previous value.
   */
  var cookie_avs = unparsed.split(';');
  while (cookie_avs.length) {
    var av = cookie_avs.shift().trim();
    if (av.length === 0) { // happens if ";;" appears
      continue;
    }
    var av_sep = av.indexOf('=');
    var av_key, av_value;

    if (av_sep === -1) {
      av_key = av;
      av_value = null;
    } else {
      av_key = av.substr(0,av_sep);
      av_value = av.substr(av_sep+1);
    }

    av_key = av_key.trim().toLowerCase();

    if (av_value) {
      av_value = av_value.trim();
    }

    switch(av_key) {
    case 'expires': // S5.2.1
      if (av_value) {
        var exp = parseDate(av_value);
        // "If the attribute-value failed to parse as a cookie date, ignore the
        // cookie-av."
        if (exp) {
          // over and underflow not realistically a concern: V8's getTime() seems to
          // store something larger than a 32-bit time_t (even with 32-bit node)
          c.expires = exp;
        }
      }
      break;

    case 'max-age': // S5.2.2
      if (av_value) {
        // "If the first character of the attribute-value is not a DIGIT or a "-"
        // character ...[or]... If the remainder of attribute-value contains a
        // non-DIGIT character, ignore the cookie-av."
        if (/^-?[0-9]+$/.test(av_value)) {
          var delta = parseInt(av_value, 10);
          // "If delta-seconds is less than or equal to zero (0), let expiry-time
          // be the earliest representable date and time."
          c.setMaxAge(delta);
        }
      }
      break;

    case 'domain': // S5.2.3
      // "If the attribute-value is empty, the behavior is undefined.  However,
      // the user agent SHOULD ignore the cookie-av entirely."
      if (av_value) {
        // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
        // (".") character."
        var domain = av_value.trim().replace(/^\./, '');
        if (domain) {
          // "Convert the cookie-domain to lower case."
          c.domain = domain.toLowerCase();
        }
      }
      break;

    case 'path': // S5.2.4
      /*
       * "If the attribute-value is empty or if the first character of the
       * attribute-value is not %x2F ("/"):
       *   Let cookie-path be the default-path.
       * Otherwise:
       *   Let cookie-path be the attribute-value."
       *
       * We'll represent the default-path as null since it depends on the
       * context of the parsing.
       */
      c.path = av_value && av_value[0] === "/" ? av_value : null;
      break;

    case 'secure': // S5.2.5
      /*
       * "If the attribute-name case-insensitively matches the string "Secure",
       * the user agent MUST append an attribute to the cookie-attribute-list
       * with an attribute-name of Secure and an empty attribute-value."
       */
      c.secure = true;
      break;

    case 'httponly': // S5.2.6 -- effectively the same as 'secure'
      c.httpOnly = true;
      break;

    default:
      c.extensions = c.extensions || [];
      c.extensions.push(av);
      break;
    }
  }

  return c;
}

// avoid the V8 deoptimization monster!
function jsonParse(str) {
  var obj;
  try {
    obj = JSON.parse(str);
  } catch (e) {
    return e;
  }
  return obj;
}

function fromJSON(str) {
  if (!str) {
    return null;
  }

  var obj;
  if (typeof str === 'string') {
    obj = jsonParse(str);
    if (obj instanceof Error) {
      return null;
    }
  } else {
    // assume it's an Object
    obj = str;
  }

  var c = new Cookie();
  for (var i=0; i<Cookie.serializableProperties.length; i++) {
    var prop = Cookie.serializableProperties[i];
    if (obj[prop] === undefined ||
        obj[prop] === Cookie.prototype[prop])
    {
      continue; // leave as prototype default
    }

    if (prop === 'expires' ||
        prop === 'creation' ||
        prop === 'lastAccessed')
    {
      if (obj[prop] === null) {
        c[prop] = null;
      } else {
        c[prop] = obj[prop] == "Infinity" ?
          "Infinity" : new Date(obj[prop]);
      }
    } else {
      c[prop] = obj[prop];
    }
  }

  return c;
}

/* Section 5.4 part 2:
 * "*  Cookies with longer paths are listed before cookies with
 *     shorter paths.
 *
 *  *  Among cookies that have equal-length path fields, cookies with
 *     earlier creation-times are listed before cookies with later
 *     creation-times."
 */

function cookieCompare(a,b) {
  var cmp = 0;

  // descending for length: b CMP a
  var aPathLen = a.path ? a.path.length : 0;
  var bPathLen = b.path ? b.path.length : 0;
  cmp = bPathLen - aPathLen;
  if (cmp !== 0) {
    return cmp;
  }

  // ascending for time: a CMP b
  var aTime = a.creation ? a.creation.getTime() : MAX_TIME;
  var bTime = b.creation ? b.creation.getTime() : MAX_TIME;
  cmp = aTime - bTime;
  if (cmp !== 0) {
    return cmp;
  }

  // break ties for the same millisecond (precision of JavaScript's clock)
  cmp = a.creationIndex - b.creationIndex;

  return cmp;
}

// Gives the permutation of all possible pathMatch()es of a given path. The
// array is in longest-to-shortest order.  Handy for indexing.
function permutePath(path) {
  if (path === '/') {
    return ['/'];
  }
  if (path.lastIndexOf('/') === path.length-1) {
    path = path.substr(0,path.length-1);
  }
  var permutations = [path];
  while (path.length > 1) {
    var lindex = path.lastIndexOf('/');
    if (lindex === 0) {
      break;
    }
    path = path.substr(0,lindex);
    permutations.push(path);
  }
  permutations.push('/');
  return permutations;
}

function getCookieContext(url) {
  if (url instanceof Object) {
    return url;
  }
  // NOTE: decodeURI will throw on malformed URIs (see GH-32).
  // Therefore, we will just skip decoding for such URIs.
  try {
    url = decodeURI(url);
  }
  catch(err) {
    // Silently swallow error
  }

  return urlParse(url);
}

function Cookie(options) {
  options = options || {};

  Object.keys(options).forEach(function(prop) {
    if (Cookie.prototype.hasOwnProperty(prop) &&
        Cookie.prototype[prop] !== options[prop] &&
        prop.substr(0,1) !== '_')
    {
      this[prop] = options[prop];
    }
  }, this);

  this.creation = this.creation || new Date();

  // used to break creation ties in cookieCompare():
  Object.defineProperty(this, 'creationIndex', {
    configurable: false,
    enumerable: false, // important for assert.deepEqual checks
    writable: true,
    value: ++Cookie.cookiesCreated
  });
}

Cookie.cookiesCreated = 0; // incremented each time a cookie is created

Cookie.parse = parse;
Cookie.fromJSON = fromJSON;

Cookie.prototype.key = "";
Cookie.prototype.value = "";

// the order in which the RFC has them:
Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
Cookie.prototype.domain = null;
Cookie.prototype.path = null;
Cookie.prototype.secure = false;
Cookie.prototype.httpOnly = false;
Cookie.prototype.extensions = null;

// set by the CookieJar:
Cookie.prototype.hostOnly = null; // boolean when set
Cookie.prototype.pathIsDefault = null; // boolean when set
Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
Cookie.prototype.lastAccessed = null; // Date when set
Object.defineProperty(Cookie.prototype, 'creationIndex', {
  configurable: true,
  enumerable: false,
  writable: true,
  value: 0
});

Cookie.serializableProperties = Object.keys(Cookie.prototype)
  .filter(function(prop) {
    return !(
      Cookie.prototype[prop] instanceof Function ||
      prop === 'creationIndex' ||
      prop.substr(0,1) === '_'
    );
  });

Cookie.prototype.inspect = function inspect() {
  var now = Date.now();
  return 'Cookie="'+this.toString() +
    '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
    '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
    '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
    '"';
};

Cookie.prototype.toJSON = function() {
  var obj = {};

  var props = Cookie.serializableProperties;
  for (var i=0; i<props.length; i++) {
    var prop = props[i];
    if (this[prop] === Cookie.prototype[prop]) {
      continue; // leave as prototype default
    }

    if (prop === 'expires' ||
        prop === 'creation' ||
        prop === 'lastAccessed')
    {
      if (this[prop] === null) {
        obj[prop] = null;
      } else {
        obj[prop] = this[prop] == "Infinity" ? // intentionally not ===
          "Infinity" : this[prop].toISOString();
      }
    } else if (prop === 'maxAge') {
      if (this[prop] !== null) {
        // again, intentionally not ===
        obj[prop] = (this[prop] == Infinity || this[prop] == -Infinity) ?
          this[prop].toString() : this[prop];
      }
    } else {
      if (this[prop] !== Cookie.prototype[prop]) {
        obj[prop] = this[prop];
      }
    }
  }

  return obj;
};

Cookie.prototype.clone = function() {
  return fromJSON(this.toJSON());
};

Cookie.prototype.validate = function validate() {
  if (!COOKIE_OCTETS.test(this.value)) {
    return false;
  }
  if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires)) {
    return false;
  }
  if (this.maxAge != null && this.maxAge <= 0) {
    return false; // "Max-Age=" non-zero-digit *DIGIT
  }
  if (this.path != null && !PATH_VALUE.test(this.path)) {
    return false;
  }

  var cdomain = this.cdomain();
  if (cdomain) {
    if (cdomain.match(/\.$/)) {
      return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
    }
    var suffix = pubsuffix.getPublicSuffix(cdomain);
    if (suffix == null) { // it's a public suffix
      return false;
    }
  }
  return true;
};

Cookie.prototype.setExpires = function setExpires(exp) {
  if (exp instanceof Date) {
    this.expires = exp;
  } else {
    this.expires = parseDate(exp) || "Infinity";
  }
};

Cookie.prototype.setMaxAge = function setMaxAge(age) {
  if (age === Infinity || age === -Infinity) {
    this.maxAge = age.toString(); // so JSON.stringify() works
  } else {
    this.maxAge = age;
  }
};

// gives Cookie header format
Cookie.prototype.cookieString = function cookieString() {
  var val = this.value;
  if (val == null) {
    val = '';
  }
  if (this.key === '') {
    return val;
  }
  return this.key+'='+val;
};

// gives Set-Cookie header format
Cookie.prototype.toString = function toString() {
  var str = this.cookieString();

  if (this.expires != Infinity) {
    if (this.expires instanceof Date) {
      str += '; Expires='+formatDate(this.expires);
    } else {
      str += '; Expires='+this.expires;
    }
  }

  if (this.maxAge != null && this.maxAge != Infinity) {
    str += '; Max-Age='+this.maxAge;
  }

  if (this.domain && !this.hostOnly) {
    str += '; Domain='+this.domain;
  }
  if (this.path) {
    str += '; Path='+this.path;
  }

  if (this.secure) {
    str += '; Secure';
  }
  if (this.httpOnly) {
    str += '; HttpOnly';
  }
  if (this.extensions) {
    this.extensions.forEach(function(ext) {
      str += '; '+ext;
    });
  }

  return str;
};

// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
// elsewhere)
// S5.3 says to give the "latest representable date" for which we use Infinity
// For "expired" we use 0
Cookie.prototype.TTL = function TTL(now) {
  /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
   * attribute, the Max-Age attribute has precedence and controls the
   * expiration date of the cookie.
   * (Concurs with S5.3 step 3)
   */
  if (this.maxAge != null) {
    return this.maxAge<=0 ? 0 : this.maxAge*1000;
  }

  var expires = this.expires;
  if (expires != Infinity) {
    if (!(expires instanceof Date)) {
      expires = parseDate(expires) || Infinity;
    }

    if (expires == Infinity) {
      return Infinity;
    }

    return expires.getTime() - (now || Date.now());
  }

  return Infinity;
};

// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
// elsewhere)
Cookie.prototype.expiryTime = function expiryTime(now) {
  if (this.maxAge != null) {
    var relativeTo = now || this.creation || new Date();
    var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000;
    return relativeTo.getTime() + age;
  }

  if (this.expires == Infinity) {
    return Infinity;
  }
  return this.expires.getTime();
};

// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
// elsewhere), except it returns a Date
Cookie.prototype.expiryDate = function expiryDate(now) {
  var millisec = this.expiryTime(now);
  if (millisec == Infinity) {
    return new Date(MAX_TIME);
  } else if (millisec == -Infinity) {
    return new Date(MIN_TIME);
  } else {
    return new Date(millisec);
  }
};

// This replaces the "persistent-flag" parts of S5.3 step 3
Cookie.prototype.isPersistent = function isPersistent() {
  return (this.maxAge != null || this.expires != Infinity);
};

// Mostly S5.1.2 and S5.2.3:
Cookie.prototype.cdomain =
Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {
  if (this.domain == null) {
    return null;
  }
  return canonicalDomain(this.domain);
};

function CookieJar(store, options) {
  if (typeof options === "boolean") {
    options = {rejectPublicSuffixes: options};
  } else if (options == null) {
    options = {};
  }
  if (options.rejectPublicSuffixes != null) {
    this.rejectPublicSuffixes = options.rejectPublicSuffixes;
  }
  if (options.looseMode != null) {
    this.enableLooseMode = options.looseMode;
  }

  if (!store) {
    store = new MemoryCookieStore();
  }
  this.store = store;
}
CookieJar.prototype.store = null;
CookieJar.prototype.rejectPublicSuffixes = true;
CookieJar.prototype.enableLooseMode = false;
var CAN_BE_SYNC = [];

CAN_BE_SYNC.push('setCookie');
CookieJar.prototype.setCookie = function(cookie, url, options, cb) {
  var err;
  var context = getCookieContext(url);
  if (options instanceof Function) {
    cb = options;
    options = {};
  }

  var host = canonicalDomain(context.hostname);
  var loose = this.enableLooseMode;
  if (options.loose != null) {
    loose = options.loose;
  }

  // S5.3 step 1
  if (!(cookie instanceof Cookie)) {
    cookie = Cookie.parse(cookie, { loose: loose });
  }
  if (!cookie) {
    err = new Error("Cookie failed to parse");
    return cb(options.ignoreError ? null : err);
  }

  // S5.3 step 2
  var now = options.now || new Date(); // will assign later to save effort in the face of errors

  // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()

  // S5.3 step 4: NOOP; domain is null by default

  // S5.3 step 5: public suffixes
  if (this.rejectPublicSuffixes && cookie.domain) {
    var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
    if (suffix == null) { // e.g. "com"
      err = new Error("Cookie has domain set to a public suffix");
      return cb(options.ignoreError ? null : err);
    }
  }

  // S5.3 step 6:
  if (cookie.domain) {
    if (!domainMatch(host, cookie.cdomain(), false)) {
      err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host);
      return cb(options.ignoreError ? null : err);
    }

    if (cookie.hostOnly == null) { // don't reset if already set
      cookie.hostOnly = false;
    }

  } else {
    cookie.hostOnly = true;
    cookie.domain = host;
  }

  //S5.2.4 If the attribute-value is empty or if the first character of the
  //attribute-value is not %x2F ("/"):
  //Let cookie-path be the default-path.
  if (!cookie.path || cookie.path[0] !== '/') {
    cookie.path = defaultPath(context.pathname);
    cookie.pathIsDefault = true;
  }

  // S5.3 step 8: NOOP; secure attribute
  // S5.3 step 9: NOOP; httpOnly attribute

  // S5.3 step 10
  if (options.http === false && cookie.httpOnly) {
    err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
    return cb(options.ignoreError ? null : err);
  }

  var store = this.store;

  if (!store.updateCookie) {
    store.updateCookie = function(oldCookie, newCookie, cb) {
      this.putCookie(newCookie, cb);
    };
  }

  function withCookie(err, oldCookie) {
    if (err) {
      return cb(err);
    }

    var next = function(err) {
      if (err) {
        return cb(err);
      } else {
        cb(null, cookie);
      }
    };

    if (oldCookie) {
      // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
      // domain, and path as the newly created cookie:"
      if (options.http === false && oldCookie.httpOnly) { // step 11.2
        err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
        return cb(options.ignoreError ? null : err);
      }
      cookie.creation = oldCookie.creation; // step 11.3
      cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
      cookie.lastAccessed = now;
      // Step 11.4 (delete cookie) is implied by just setting the new one:
      store.updateCookie(oldCookie, cookie, next); // step 12

    } else {
      cookie.creation = cookie.lastAccessed = now;
      store.putCookie(cookie, next); // step 12
    }
  }

  store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
};

// RFC6365 S5.4
CAN_BE_SYNC.push('getCookies');
CookieJar.prototype.getCookies = function(url, options, cb) {
  var context = getCookieContext(url);
  if (options instanceof Function) {
    cb = options;
    options = {};
  }

  var host = canonicalDomain(context.hostname);
  var path = context.pathname || '/';

  var secure = options.secure;
  if (secure == null && context.protocol &&
      (context.protocol == 'https:' || context.protocol == 'wss:'))
  {
    secure = true;
  }

  var http = options.http;
  if (http == null) {
    http = true;
  }

  var now = options.now || Date.now();
  var expireCheck = options.expire !== false;
  var allPaths = !!options.allPaths;
  var store = this.store;

  function matchingCookie(c) {
    // "Either:
    //   The cookie's host-only-flag is true and the canonicalized
    //   request-host is identical to the cookie's domain.
    // Or:
    //   The cookie's host-only-flag is false and the canonicalized
    //   request-host domain-matches the cookie's domain."
    if (c.hostOnly) {
      if (c.domain != host) {
        return false;
      }
    } else {
      if (!domainMatch(host, c.domain, false)) {
        return false;
      }
    }

    // "The request-uri's path path-matches the cookie's path."
    if (!allPaths && !pathMatch(path, c.path)) {
      return false;
    }

    // "If the cookie's secure-only-flag is true, then the request-uri's
    // scheme must denote a "secure" protocol"
    if (c.secure && !secure) {
      return false;
    }

    // "If the cookie's http-only-flag is true, then exclude the cookie if the
    // cookie-string is being generated for a "non-HTTP" API"
    if (c.httpOnly && !http) {
      return false;
    }

    // deferred from S5.3
    // non-RFC: allow retention of expired cookies by choice
    if (expireCheck && c.expiryTime() <= now) {
      store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored
      return false;
    }

    return true;
  }

  store.findCookies(host, allPaths ? null : path, function(err,cookies) {
    if (err) {
      return cb(err);
    }

    cookies = cookies.filter(matchingCookie);

    // sorting of S5.4 part 2
    if (options.sort !== false) {
      cookies = cookies.sort(cookieCompare);
    }

    // S5.4 part 3
    var now = new Date();
    cookies.forEach(function(c) {
      c.lastAccessed = now;
    });
    // TODO persist lastAccessed

    cb(null,cookies);
  });
};

CAN_BE_SYNC.push('getCookieString');
CookieJar.prototype.getCookieString = function(/*..., cb*/) {
  var args = Array.prototype.slice.call(arguments,0);
  var cb = args.pop();
  var next = function(err,cookies) {
    if (err) {
      cb(err);
    } else {
      cb(null, cookies
        .sort(cookieCompare)
        .map(function(c){
          return c.cookieString();
        })
        .join('; '));
    }
  };
  args.push(next);
  this.getCookies.apply(this,args);
};

CAN_BE_SYNC.push('getSetCookieStrings');
CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) {
  var args = Array.prototype.slice.call(arguments,0);
  var cb = args.pop();
  var next = function(err,cookies) {
    if (err) {
      cb(err);
    } else {
      cb(null, cookies.map(function(c){
        return c.toString();
      }));
    }
  };
  args.push(next);
  this.getCookies.apply(this,args);
};

CAN_BE_SYNC.push('serialize');
CookieJar.prototype.serialize = function(cb) {
  var type = this.store.constructor.name;
  if (type === 'Object') {
    type = null;
  }

  // update README.md "Serialization Format" if you change this, please!
  var serialized = {
    // The version of tough-cookie that serialized this jar. Generally a good
    // practice since future versions can make data import decisions based on
    // known past behavior. When/if this matters, use `semver`.
    version: 'tough-cookie@'+VERSION,

    // add the store type, to make humans happy:
    storeType: type,

    // CookieJar configuration:
    rejectPublicSuffixes: !!this.rejectPublicSuffixes,

    // this gets filled from getAllCookies:
    cookies: []
  };

  if (!(this.store.getAllCookies &&
        typeof this.store.getAllCookies === 'function'))
  {
    return cb(new Error('store does not support getAllCookies and cannot be serialized'));
  }

  this.store.getAllCookies(function(err,cookies) {
    if (err) {
      return cb(err);
    }

    serialized.cookies = cookies.map(function(cookie) {
      // convert to serialized 'raw' cookies
      cookie = (cookie instanceof Cookie) ? cookie.toJSON() : cookie;

      // Remove the index so new ones get assigned during deserialization
      delete cookie.creationIndex;

      return cookie;
    });

    return cb(null, serialized);
  });
};

// well-known name that JSON.stringify calls
CookieJar.prototype.toJSON = function() {
  return this.serializeSync();
};

// use the class method CookieJar.deserialize instead of calling this directly
CAN_BE_SYNC.push('_importCookies');
CookieJar.prototype._importCookies = function(serialized, cb) {
  var jar = this;
  var cookies = serialized.cookies;
  if (!cookies || !Array.isArray(cookies)) {
    return cb(new Error('serialized jar has no cookies array'));
  }
  cookies = cookies.slice(); // do not modify the original

  function putNext(err) {
    if (err) {
      return cb(err);
    }

    if (!cookies.length) {
      return cb(err, jar);
    }

    var cookie;
    try {
      cookie = fromJSON(cookies.shift());
    } catch (e) {
      return cb(e);
    }

    if (cookie === null) {
      return putNext(null); // skip this cookie
    }

    jar.store.putCookie(cookie, putNext);
  }

  putNext();
};

CookieJar.deserialize = function(strOrObj, store, cb) {
  if (arguments.length !== 3) {
    // store is optional
    cb = store;
    store = null;
  }

  var serialized;
  if (typeof strOrObj === 'string') {
    serialized = jsonParse(strOrObj);
    if (serialized instanceof Error) {
      return cb(serialized);
    }
  } else {
    serialized = strOrObj;
  }

  var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
  jar._importCookies(serialized, function(err) {
    if (err) {
      return cb(err);
    }
    cb(null, jar);
  });
};

CookieJar.deserializeSync = function(strOrObj, store) {
  var serialized = typeof strOrObj === 'string' ?
    JSON.parse(strOrObj) : strOrObj;
  var jar = new CookieJar(store, serialized.rejectPublicSuffixes);

  // catch this mistake early:
  if (!jar.store.synchronous) {
    throw new Error('CookieJar store is not synchronous; use async API instead.');
  }

  jar._importCookiesSync(serialized);
  return jar;
};
CookieJar.fromJSON = CookieJar.deserializeSync;

CAN_BE_SYNC.push('clone');
CookieJar.prototype.clone = function(newStore, cb) {
  if (arguments.length === 1) {
    cb = newStore;
    newStore = null;
  }

  this.serialize(function(err,serialized) {
    if (err) {
      return cb(err);
    }
    CookieJar.deserialize(newStore, serialized, cb);
  });
};

// Use a closure to provide a true imperative API for synchronous stores.
function syncWrap(method) {
  return function() {
    if (!this.store.synchronous) {
      throw new Error('CookieJar store is not synchronous; use async API instead.');
    }

    var args = Array.prototype.slice.call(arguments);
    var syncErr, syncResult;
    args.push(function syncCb(err, result) {
      syncErr = err;
      syncResult = result;
    });
    this[method].apply(this, args);

    if (syncErr) {
      throw syncErr;
    }
    return syncResult;
  };
}

// wrap all declared CAN_BE_SYNC methods in the sync wrapper
CAN_BE_SYNC.forEach(function(method) {
  CookieJar.prototype[method+'Sync'] = syncWrap(method);
});

module.exports = {
  CookieJar: CookieJar,
  Cookie: Cookie,
  Store: Store,
  MemoryCookieStore: MemoryCookieStore,
  parseDate: parseDate,
  formatDate: formatDate,
  parse: parse,
  fromJSON: fromJSON,
  domainMatch: domainMatch,
  defaultPath: defaultPath,
  pathMatch: pathMatch,
  getPublicSuffix: pubsuffix.getPublicSuffix,
  cookieCompare: cookieCompare,
  permuteDomain: __webpack_require__(427).permuteDomain,
  permutePath: permutePath,
  canonicalDomain: canonicalDomain
};


/***/ }),
/* 1085 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * Copyright (c) 2015, Salesforce.com, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of Salesforce.com nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

var Store = __webpack_require__(429).Store;
var permuteDomain = __webpack_require__(427).permuteDomain;
var pathMatch = __webpack_require__(426).pathMatch;
var util = __webpack_require__(2);

function MemoryCookieStore() {
  Store.call(this);
  this.idx = {};
}
util.inherits(MemoryCookieStore, Store);
exports.MemoryCookieStore = MemoryCookieStore;
MemoryCookieStore.prototype.idx = null;

// Since it's just a struct in RAM, this Store is synchronous
MemoryCookieStore.prototype.synchronous = true;

// force a default depth:
MemoryCookieStore.prototype.inspect = function() {
  return "{ idx: "+util.inspect(this.idx, false, 2)+' }';
};

MemoryCookieStore.prototype.findCookie = function(domain, path, key, cb) {
  if (!this.idx[domain]) {
    return cb(null,undefined);
  }
  if (!this.idx[domain][path]) {
    return cb(null,undefined);
  }
  return cb(null,this.idx[domain][path][key]||null);
};

MemoryCookieStore.prototype.findCookies = function(domain, path, cb) {
  var results = [];
  if (!domain) {
    return cb(null,[]);
  }

  var pathMatcher;
  if (!path) {
    // null means "all paths"
    pathMatcher = function matchAll(domainIndex) {
      for (var curPath in domainIndex) {
        var pathIndex = domainIndex[curPath];
        for (var key in pathIndex) {
          results.push(pathIndex[key]);
        }
      }
    };

  } else {
    pathMatcher = function matchRFC(domainIndex) {
       //NOTE: we should use path-match algorithm from S5.1.4 here
       //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
       Object.keys(domainIndex).forEach(function (cookiePath) {
         if (pathMatch(path, cookiePath)) {
           var pathIndex = domainIndex[cookiePath];

           for (var key in pathIndex) {
             results.push(pathIndex[key]);
           }
         }
       });
     };
  }

  var domains = permuteDomain(domain) || [domain];
  var idx = this.idx;
  domains.forEach(function(curDomain) {
    var domainIndex = idx[curDomain];
    if (!domainIndex) {
      return;
    }
    pathMatcher(domainIndex);
  });

  cb(null,results);
};

MemoryCookieStore.prototype.putCookie = function(cookie, cb) {
  if (!this.idx[cookie.domain]) {
    this.idx[cookie.domain] = {};
  }
  if (!this.idx[cookie.domain][cookie.path]) {
    this.idx[cookie.domain][cookie.path] = {};
  }
  this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
  cb(null);
};

MemoryCookieStore.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  // updateCookie() may avoid updating cookies that are identical.  For example,
  // lastAccessed may not be important to some stores and an equality
  // comparison could exclude that field.
  this.putCookie(newCookie,cb);
};

MemoryCookieStore.prototype.removeCookie = function(domain, path, key, cb) {
  if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) {
    delete this.idx[domain][path][key];
  }
  cb(null);
};

MemoryCookieStore.prototype.removeCookies = function(domain, path, cb) {
  if (this.idx[domain]) {
    if (path) {
      delete this.idx[domain][path];
    } else {
      delete this.idx[domain];
    }
  }
  return cb(null);
};

MemoryCookieStore.prototype.getAllCookies = function(cb) {
  var cookies = [];
  var idx = this.idx;

  var domains = Object.keys(idx);
  domains.forEach(function(domain) {
    var paths = Object.keys(idx[domain]);
    paths.forEach(function(path) {
      var keys = Object.keys(idx[domain][path]);
      keys.forEach(function(key) {
        if (key !== null) {
          cookies.push(idx[domain][path][key]);
        }
      });
    });
  });

  // Sort by creationIndex so deserializing retains the creation order.
  // When implementing your own store, this SHOULD retain the order too
  cookies.sort(function(a,b) {
    return (a.creationIndex||0) - (b.creationIndex||0);
  });

  cb(null, cookies);
};


/***/ }),
/* 1086 */
/***/ (function(module, exports, __webpack_require__) {

var sha3 = __webpack_require__(1087);
var schema_version = __webpack_require__(1233).version;

var TruffleSchema = {
  // Normalize options passed in to be the exact options required
  // for truffle-contract.
  //
  // options can be three things:
  // - normal object
  // - contract object
  // - solc output
  //
  // TODO: Is extra_options still necessary?
  normalizeOptions: function(options, extra_options) {
    extra_options = extra_options || {};
    var normalized = {};
    var expected_keys = [
      "contract_name",
      "abi",
      "binary",
      "unlinked_binary",
      "address",
      "networks",
      "links",
      "events",
      "network_id",
      "default_network",
      "updated_at"
    ];

    // Merge options/contract object first, then extra_options
    expected_keys.forEach(function(key) {
      var value;

      try {
        // Will throw an error if key == address and address doesn't exist.
        value = options[key];

        if (value != undefined) {
          normalized[key] = value;
        }
      } catch (e) {
        // Do nothing.
      }

      try {
        // Will throw an error if key == address and address doesn't exist.
        value = extra_options[key];

        if (value != undefined) {
          normalized[key] = value;
        }
      } catch (e) {
        // Do nothing.
      }
    });

    // Now look for solc specific items.
    if (options.interface != null) {
      normalized.abi = JSON.parse(options.interface);
    }

    if (options.bytecode != null) {
      normalized.unlinked_binary = options.bytecode
    }

    // Assume any binary passed is the unlinked binary
    if (normalized.unlinked_binary == null && normalized.binary) {
      normalized.unlinked_binary = normalized.binary;
    }

    delete normalized.binary;

    this.copyCustomOptions(options, normalized);

    return normalized;
  },

  // Generate a proper binary from normalized options, and optionally
  // merge it with an existing binary.
  generateBinary: function(options, existing_binary, extra_options) {
    extra_options = extra_options || {};

    existing_binary = existing_binary || {};

    if (options.overwrite == true) {
      existing_binary = {};
    }

    existing_binary.contract_name = options.contract_name || existing_binary.contract_name || "Contract";
    existing_binary.default_network = options.default_network || existing_binary.default_network;

    existing_binary.abi = options.abi || existing_binary.abi;
    existing_binary.unlinked_binary = options.unlinked_binary || existing_binary.unlinked_binary;

    // Ensure unlinked binary starts with a 0x
    if (existing_binary.unlinked_binary && existing_binary.unlinked_binary.indexOf("0x") < 0) {
      existing_binary.unlinked_binary = "0x" + existing_binary.unlinked_binary;
    }

    // Merge existing networks with any passed in networks.
    existing_binary.networks = existing_binary.networks || {};
    options.networks = options.networks || {};
    Object.keys(options.networks).forEach(function(network_id) {
      existing_binary.networks[network_id] = options.networks[network_id];
    });

    var updated_at = new Date().getTime();

    if (options.network_id) {
      // Ensure an object exists for this network.
      existing_binary.networks[options.network_id] = existing_binary.networks[options.network_id] || {};

      var network = existing_binary.networks[options.network_id];

      // Override specific keys
      network.address = options.address || network.address;
      network.links = options.links;

      // merge events with any that previously existed
      network.events = network.events || {};
      options.events = options.events || {};
      Object.keys(options.events).forEach(function(event_id) {
        options.events[event_id] = options.events[event_id];
      });

      // Now overwrite any events with the most recent data from the ABI.
      existing_binary.abi.forEach(function(item) {
        if (item.type != "event") return;

        var signature = item.name + "(" + item.inputs.map(function(param) {return param.type;}).join(",") + ")";
        network.events["0x" + sha3(signature, {outputLength: 256})] = item;
      });

      if (extra_options.dirty !== false) {
        network.updated_at = updated_at;
      }
    } else {
      if (options.address) {
        throw new Error("Cannot set address without network id");
      }
    }

    // Ensure all networks have a `links` object.
    Object.keys(existing_binary.networks).forEach(function(network_id) {
      var network = existing_binary.networks[network_id];
      network.links = network.links || {};
    });

    existing_binary.schema_version = schema_version;

    if (extra_options.dirty !== false) {
      existing_binary.updated_at = updated_at;
    } else {
      existing_binary.updated_at = options.updated_at || existing_binary.updated_at || updated_at;
    }

    this.copyCustomOptions(options, existing_binary);

    return existing_binary;
  },

  copyCustomOptions: function(from, to) {
    // Now let all x- options through.
    Object.keys(from).forEach(function(key) {
      if (key.indexOf("x-") != 0) return;

      try {
        value = from[key];

        if (value != undefined) {
          to[key] = value;
        }
      } catch (e) {
        // Do nothing.
      }
    });
  }
};

module.exports = TruffleSchema;


/***/ }),
/* 1087 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory, undef) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(430), __webpack_require__(1088));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core", "./x64-core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (Math) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var WordArray = C_lib.WordArray;
	    var Hasher = C_lib.Hasher;
	    var C_x64 = C.x64;
	    var X64Word = C_x64.Word;
	    var C_algo = C.algo;

	    // Constants tables
	    var RHO_OFFSETS = [];
	    var PI_INDEXES  = [];
	    var ROUND_CONSTANTS = [];

	    // Compute Constants
	    (function () {
	        // Compute rho offset constants
	        var x = 1, y = 0;
	        for (var t = 0; t < 24; t++) {
	            RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;

	            var newX = y % 5;
	            var newY = (2 * x + 3 * y) % 5;
	            x = newX;
	            y = newY;
	        }

	        // Compute pi index constants
	        for (var x = 0; x < 5; x++) {
	            for (var y = 0; y < 5; y++) {
	                PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
	            }
	        }

	        // Compute round constants
	        var LFSR = 0x01;
	        for (var i = 0; i < 24; i++) {
	            var roundConstantMsw = 0;
	            var roundConstantLsw = 0;

	            for (var j = 0; j < 7; j++) {
	                if (LFSR & 0x01) {
	                    var bitPosition = (1 << j) - 1;
	                    if (bitPosition < 32) {
	                        roundConstantLsw ^= 1 << bitPosition;
	                    } else /* if (bitPosition >= 32) */ {
	                        roundConstantMsw ^= 1 << (bitPosition - 32);
	                    }
	                }

	                // Compute next LFSR
	                if (LFSR & 0x80) {
	                    // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
	                    LFSR = (LFSR << 1) ^ 0x71;
	                } else {
	                    LFSR <<= 1;
	                }
	            }

	            ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
	        }
	    }());

	    // Reusable objects for temporary values
	    var T = [];
	    (function () {
	        for (var i = 0; i < 25; i++) {
	            T[i] = X64Word.create();
	        }
	    }());

	    /**
	     * SHA-3 hash algorithm.
	     */
	    var SHA3 = C_algo.SHA3 = Hasher.extend({
	        /**
	         * Configuration options.
	         *
	         * @property {number} outputLength
	         *   The desired number of bits in the output hash.
	         *   Only values permitted are: 224, 256, 384, 512.
	         *   Default: 512
	         */
	        cfg: Hasher.cfg.extend({
	            outputLength: 512
	        }),

	        _doReset: function () {
	            var state = this._state = []
	            for (var i = 0; i < 25; i++) {
	                state[i] = new X64Word.init();
	            }

	            this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
	        },

	        _doProcessBlock: function (M, offset) {
	            // Shortcuts
	            var state = this._state;
	            var nBlockSizeLanes = this.blockSize / 2;

	            // Absorb
	            for (var i = 0; i < nBlockSizeLanes; i++) {
	                // Shortcuts
	                var M2i  = M[offset + 2 * i];
	                var M2i1 = M[offset + 2 * i + 1];

	                // Swap endian
	                M2i = (
	                    (((M2i << 8)  | (M2i >>> 24)) & 0x00ff00ff) |
	                    (((M2i << 24) | (M2i >>> 8))  & 0xff00ff00)
	                );
	                M2i1 = (
	                    (((M2i1 << 8)  | (M2i1 >>> 24)) & 0x00ff00ff) |
	                    (((M2i1 << 24) | (M2i1 >>> 8))  & 0xff00ff00)
	                );

	                // Absorb message into state
	                var lane = state[i];
	                lane.high ^= M2i1;
	                lane.low  ^= M2i;
	            }

	            // Rounds
	            for (var round = 0; round < 24; round++) {
	                // Theta
	                for (var x = 0; x < 5; x++) {
	                    // Mix column lanes
	                    var tMsw = 0, tLsw = 0;
	                    for (var y = 0; y < 5; y++) {
	                        var lane = state[x + 5 * y];
	                        tMsw ^= lane.high;
	                        tLsw ^= lane.low;
	                    }

	                    // Temporary values
	                    var Tx = T[x];
	                    Tx.high = tMsw;
	                    Tx.low  = tLsw;
	                }
	                for (var x = 0; x < 5; x++) {
	                    // Shortcuts
	                    var Tx4 = T[(x + 4) % 5];
	                    var Tx1 = T[(x + 1) % 5];
	                    var Tx1Msw = Tx1.high;
	                    var Tx1Lsw = Tx1.low;

	                    // Mix surrounding columns
	                    var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
	                    var tLsw = Tx4.low  ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
	                    for (var y = 0; y < 5; y++) {
	                        var lane = state[x + 5 * y];
	                        lane.high ^= tMsw;
	                        lane.low  ^= tLsw;
	                    }
	                }

	                // Rho Pi
	                for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
	                    // Shortcuts
	                    var lane = state[laneIndex];
	                    var laneMsw = lane.high;
	                    var laneLsw = lane.low;
	                    var rhoOffset = RHO_OFFSETS[laneIndex];

	                    // Rotate lanes
	                    if (rhoOffset < 32) {
	                        var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
	                        var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
	                    } else /* if (rhoOffset >= 32) */ {
	                        var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
	                        var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
	                    }

	                    // Transpose lanes
	                    var TPiLane = T[PI_INDEXES[laneIndex]];
	                    TPiLane.high = tMsw;
	                    TPiLane.low  = tLsw;
	                }

	                // Rho pi at x = y = 0
	                var T0 = T[0];
	                var state0 = state[0];
	                T0.high = state0.high;
	                T0.low  = state0.low;

	                // Chi
	                for (var x = 0; x < 5; x++) {
	                    for (var y = 0; y < 5; y++) {
	                        // Shortcuts
	                        var laneIndex = x + 5 * y;
	                        var lane = state[laneIndex];
	                        var TLane = T[laneIndex];
	                        var Tx1Lane = T[((x + 1) % 5) + 5 * y];
	                        var Tx2Lane = T[((x + 2) % 5) + 5 * y];

	                        // Mix rows
	                        lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
	                        lane.low  = TLane.low  ^ (~Tx1Lane.low  & Tx2Lane.low);
	                    }
	                }

	                // Iota
	                var lane = state[0];
	                var roundConstant = ROUND_CONSTANTS[round];
	                lane.high ^= roundConstant.high;
	                lane.low  ^= roundConstant.low;;
	            }
	        },

	        _doFinalize: function () {
	            // Shortcuts
	            var data = this._data;
	            var dataWords = data.words;
	            var nBitsTotal = this._nDataBytes * 8;
	            var nBitsLeft = data.sigBytes * 8;
	            var blockSizeBits = this.blockSize * 32;

	            // Add padding
	            dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
	            dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
	            data.sigBytes = dataWords.length * 4;

	            // Hash final blocks
	            this._process();

	            // Shortcuts
	            var state = this._state;
	            var outputLengthBytes = this.cfg.outputLength / 8;
	            var outputLengthLanes = outputLengthBytes / 8;

	            // Squeeze
	            var hashWords = [];
	            for (var i = 0; i < outputLengthLanes; i++) {
	                // Shortcuts
	                var lane = state[i];
	                var laneMsw = lane.high;
	                var laneLsw = lane.low;

	                // Swap endian
	                laneMsw = (
	                    (((laneMsw << 8)  | (laneMsw >>> 24)) & 0x00ff00ff) |
	                    (((laneMsw << 24) | (laneMsw >>> 8))  & 0xff00ff00)
	                );
	                laneLsw = (
	                    (((laneLsw << 8)  | (laneLsw >>> 24)) & 0x00ff00ff) |
	                    (((laneLsw << 24) | (laneLsw >>> 8))  & 0xff00ff00)
	                );

	                // Squeeze state to retrieve hash
	                hashWords.push(laneLsw);
	                hashWords.push(laneMsw);
	            }

	            // Return final computed hash
	            return new WordArray.init(hashWords, outputLengthBytes);
	        },

	        clone: function () {
	            var clone = Hasher.clone.call(this);

	            var state = clone._state = this._state.slice(0);
	            for (var i = 0; i < 25; i++) {
	                state[i] = state[i].clone();
	            }

	            return clone;
	        }
	    });

	    /**
	     * Shortcut function to the hasher's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     *
	     * @return {WordArray} The hash.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hash = CryptoJS.SHA3('message');
	     *     var hash = CryptoJS.SHA3(wordArray);
	     */
	    C.SHA3 = Hasher._createHelper(SHA3);

	    /**
	     * Shortcut function to the HMAC's object interface.
	     *
	     * @param {WordArray|string} message The message to hash.
	     * @param {WordArray|string} key The secret key.
	     *
	     * @return {WordArray} The HMAC.
	     *
	     * @static
	     *
	     * @example
	     *
	     *     var hmac = CryptoJS.HmacSHA3(message, key);
	     */
	    C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
	}(Math));


	return CryptoJS.SHA3;

}));

/***/ }),
/* 1088 */
/***/ (function(module, exports, __webpack_require__) {

;(function (root, factory) {
	if (true) {
		// CommonJS
		module.exports = exports = factory(__webpack_require__(430));
	}
	else if (typeof define === "function" && define.amd) {
		// AMD
		define(["./core"], factory);
	}
	else {
		// Global (browser)
		factory(root.CryptoJS);
	}
}(this, function (CryptoJS) {

	(function (undefined) {
	    // Shortcuts
	    var C = CryptoJS;
	    var C_lib = C.lib;
	    var Base = C_lib.Base;
	    var X32WordArray = C_lib.WordArray;

	    /**
	     * x64 namespace.
	     */
	    var C_x64 = C.x64 = {};

	    /**
	     * A 64-bit word.
	     */
	    var X64Word = C_x64.Word = Base.extend({
	        /**
	         * Initializes a newly created 64-bit word.
	         *
	         * @param {number} high The high 32 bits.
	         * @param {number} low The low 32 bits.
	         *
	         * @example
	         *
	         *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
	         */
	        init: function (high, low) {
	            this.high = high;
	            this.low = low;
	        }

	        /**
	         * Bitwise NOTs this word.
	         *
	         * @return {X64Word} A new x64-Word object after negating.
	         *
	         * @example
	         *
	         *     var negated = x64Word.not();
	         */
	        // not: function () {
	            // var high = ~this.high;
	            // var low = ~this.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise ANDs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to AND with this word.
	         *
	         * @return {X64Word} A new x64-Word object after ANDing.
	         *
	         * @example
	         *
	         *     var anded = x64Word.and(anotherX64Word);
	         */
	        // and: function (word) {
	            // var high = this.high & word.high;
	            // var low = this.low & word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise ORs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to OR with this word.
	         *
	         * @return {X64Word} A new x64-Word object after ORing.
	         *
	         * @example
	         *
	         *     var ored = x64Word.or(anotherX64Word);
	         */
	        // or: function (word) {
	            // var high = this.high | word.high;
	            // var low = this.low | word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Bitwise XORs this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to XOR with this word.
	         *
	         * @return {X64Word} A new x64-Word object after XORing.
	         *
	         * @example
	         *
	         *     var xored = x64Word.xor(anotherX64Word);
	         */
	        // xor: function (word) {
	            // var high = this.high ^ word.high;
	            // var low = this.low ^ word.low;

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Shifts this word n bits to the left.
	         *
	         * @param {number} n The number of bits to shift.
	         *
	         * @return {X64Word} A new x64-Word object after shifting.
	         *
	         * @example
	         *
	         *     var shifted = x64Word.shiftL(25);
	         */
	        // shiftL: function (n) {
	            // if (n < 32) {
	                // var high = (this.high << n) | (this.low >>> (32 - n));
	                // var low = this.low << n;
	            // } else {
	                // var high = this.low << (n - 32);
	                // var low = 0;
	            // }

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Shifts this word n bits to the right.
	         *
	         * @param {number} n The number of bits to shift.
	         *
	         * @return {X64Word} A new x64-Word object after shifting.
	         *
	         * @example
	         *
	         *     var shifted = x64Word.shiftR(7);
	         */
	        // shiftR: function (n) {
	            // if (n < 32) {
	                // var low = (this.low >>> n) | (this.high << (32 - n));
	                // var high = this.high >>> n;
	            // } else {
	                // var low = this.high >>> (n - 32);
	                // var high = 0;
	            // }

	            // return X64Word.create(high, low);
	        // },

	        /**
	         * Rotates this word n bits to the left.
	         *
	         * @param {number} n The number of bits to rotate.
	         *
	         * @return {X64Word} A new x64-Word object after rotating.
	         *
	         * @example
	         *
	         *     var rotated = x64Word.rotL(25);
	         */
	        // rotL: function (n) {
	            // return this.shiftL(n).or(this.shiftR(64 - n));
	        // },

	        /**
	         * Rotates this word n bits to the right.
	         *
	         * @param {number} n The number of bits to rotate.
	         *
	         * @return {X64Word} A new x64-Word object after rotating.
	         *
	         * @example
	         *
	         *     var rotated = x64Word.rotR(7);
	         */
	        // rotR: function (n) {
	            // return this.shiftR(n).or(this.shiftL(64 - n));
	        // },

	        /**
	         * Adds this word with the passed word.
	         *
	         * @param {X64Word} word The x64-Word to add with this word.
	         *
	         * @return {X64Word} A new x64-Word object after adding.
	         *
	         * @example
	         *
	         *     var added = x64Word.add(anotherX64Word);
	         */
	        // add: function (word) {
	            // var low = (this.low + word.low) | 0;
	            // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
	            // var high = (this.high + word.high + carry) | 0;

	            // return X64Word.create(high, low);
	        // }
	    });

	    /**
	     * An array of 64-bit words.
	     *
	     * @property {Array} words The array of CryptoJS.x64.Word objects.
	     * @property {number} sigBytes The number of significant bytes in this word array.
	     */
	    var X64WordArray = C_x64.WordArray = Base.extend({
	        /**
	         * Initializes a newly created word array.
	         *
	         * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
	         * @param {number} sigBytes (Optional) The number of significant bytes in the words.
	         *
	         * @example
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create();
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create([
	         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),
	         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
	         *     ]);
	         *
	         *     var wordArray = CryptoJS.x64.WordArray.create([
	         *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),
	         *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
	         *     ], 10);
	         */
	        init: function (words, sigBytes) {
	            words = this.words = words || [];

	            if (sigBytes != undefined) {
	                this.sigBytes = sigBytes;
	            } else {
	                this.sigBytes = words.length * 8;
	            }
	        },

	        /**
	         * Converts this 64-bit word array to a 32-bit word array.
	         *
	         * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
	         *
	         * @example
	         *
	         *     var x32WordArray = x64WordArray.toX32();
	         */
	        toX32: function () {
	            // Shortcuts
	            var x64Words = this.words;
	            var x64WordsLength = x64Words.length;

	            // Convert
	            var x32Words = [];
	            for (var i = 0; i < x64WordsLength; i++) {
	                var x64Word = x64Words[i];
	                x32Words.push(x64Word.high);
	                x32Words.push(x64Word.low);
	            }

	            return X32WordArray.create(x32Words, this.sigBytes);
	        },

	        /**
	         * Creates a copy of this word array.
	         *
	         * @return {X64WordArray} The clone.
	         *
	         * @example
	         *
	         *     var clone = x64WordArray.clone();
	         */
	        clone: function () {
	            var clone = Base.clone.call(this);

	            // Clone "words" array
	            var words = clone.words = this.words.slice(0);

	            // Clone each X64Word object
	            var wordsLength = words.length;
	            for (var i = 0; i < wordsLength; i++) {
	                words[i] = words[i].clone();
	            }

	            return clone;
	        }
	    });
	}());


	return CryptoJS;

}));

/***/ }),
/* 1089 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var net = __webpack_require__(32)
  , tls = __webpack_require__(71)
  , http = __webpack_require__(27)
  , https = __webpack_require__(45)
  , events = __webpack_require__(18)
  , assert = __webpack_require__(11)
  , util = __webpack_require__(2)
  , Buffer = __webpack_require__(55).Buffer
  ;

exports.httpOverHttp = httpOverHttp
exports.httpsOverHttp = httpsOverHttp
exports.httpOverHttps = httpOverHttps
exports.httpsOverHttps = httpsOverHttps


function httpOverHttp(options) {
  var agent = new TunnelingAgent(options)
  agent.request = http.request
  return agent
}

function httpsOverHttp(options) {
  var agent = new TunnelingAgent(options)
  agent.request = http.request
  agent.createSocket = createSecureSocket
  agent.defaultPort = 443
  return agent
}

function httpOverHttps(options) {
  var agent = new TunnelingAgent(options)
  agent.request = https.request
  return agent
}

function httpsOverHttps(options) {
  var agent = new TunnelingAgent(options)
  agent.request = https.request
  agent.createSocket = createSecureSocket
  agent.defaultPort = 443
  return agent
}


function TunnelingAgent(options) {
  var self = this
  self.options = options || {}
  self.proxyOptions = self.options.proxy || {}
  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets
  self.requests = []
  self.sockets = []

  self.on('free', function onFree(socket, host, port) {
    for (var i = 0, len = self.requests.length; i < len; ++i) {
      var pending = self.requests[i]
      if (pending.host === host && pending.port === port) {
        // Detect the request to connect same origin server,
        // reuse the connection.
        self.requests.splice(i, 1)
        pending.request.onSocket(socket)
        return
      }
    }
    socket.destroy()
    self.removeSocket(socket)
  })
}
util.inherits(TunnelingAgent, events.EventEmitter)

TunnelingAgent.prototype.addRequest = function addRequest(req, options) {
  var self = this

   // Legacy API: addRequest(req, host, port, path)
  if (typeof options === 'string') {
    options = {
      host: options,
      port: arguments[2],
      path: arguments[3]
    };
  }

  if (self.sockets.length >= this.maxSockets) {
    // We are over limit so we'll add it to the queue.
    self.requests.push({host: options.host, port: options.port, request: req})
    return
  }

  // If we are under maxSockets create a new one.
  self.createConnection({host: options.host, port: options.port, request: req})
}

TunnelingAgent.prototype.createConnection = function createConnection(pending) {
  var self = this

  self.createSocket(pending, function(socket) {
    socket.on('free', onFree)
    socket.on('close', onCloseOrRemove)
    socket.on('agentRemove', onCloseOrRemove)
    pending.request.onSocket(socket)

    function onFree() {
      self.emit('free', socket, pending.host, pending.port)
    }

    function onCloseOrRemove(err) {
      self.removeSocket(socket)
      socket.removeListener('free', onFree)
      socket.removeListener('close', onCloseOrRemove)
      socket.removeListener('agentRemove', onCloseOrRemove)
    }
  })
}

TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
  var self = this
  var placeholder = {}
  self.sockets.push(placeholder)

  var connectOptions = mergeOptions({}, self.proxyOptions,
    { method: 'CONNECT'
    , path: options.host + ':' + options.port
    , agent: false
    }
  )
  if (connectOptions.proxyAuth) {
    connectOptions.headers = connectOptions.headers || {}
    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
        Buffer.from(connectOptions.proxyAuth).toString('base64')
  }

  debug('making CONNECT request')
  var connectReq = self.request(connectOptions)
  connectReq.useChunkedEncodingByDefault = false // for v0.6
  connectReq.once('response', onResponse) // for v0.6
  connectReq.once('upgrade', onUpgrade)   // for v0.6
  connectReq.once('connect', onConnect)   // for v0.7 or later
  connectReq.once('error', onError)
  connectReq.end()

  function onResponse(res) {
    // Very hacky. This is necessary to avoid http-parser leaks.
    res.upgrade = true
  }

  function onUpgrade(res, socket, head) {
    // Hacky.
    process.nextTick(function() {
      onConnect(res, socket, head)
    })
  }

  function onConnect(res, socket, head) {
    connectReq.removeAllListeners()
    socket.removeAllListeners()

    if (res.statusCode === 200) {
      assert.equal(head.length, 0)
      debug('tunneling connection has established')
      self.sockets[self.sockets.indexOf(placeholder)] = socket
      cb(socket)
    } else {
      debug('tunneling socket could not be established, statusCode=%d', res.statusCode)
      var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode)
      error.code = 'ECONNRESET'
      options.request.emit('error', error)
      self.removeSocket(placeholder)
    }
  }

  function onError(cause) {
    connectReq.removeAllListeners()

    debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack)
    var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message)
    error.code = 'ECONNRESET'
    options.request.emit('error', error)
    self.removeSocket(placeholder)
  }
}

TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
  var pos = this.sockets.indexOf(socket)
  if (pos === -1) return

  this.sockets.splice(pos, 1)

  var pending = this.requests.shift()
  if (pending) {
    // If we have pending requests and a socket gets closed a new one
    // needs to be created to take over in the pool for the one that closed.
    this.createConnection(pending)
  }
}

function createSecureSocket(options, cb) {
  var self = this
  TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
    // 0 is dummy port for v0.6
    var secureSocket = tls.connect(0, mergeOptions({}, self.options,
      { servername: options.host
      , socket: socket
      }
    ))
    self.sockets[self.sockets.indexOf(socket)] = secureSocket
    cb(secureSocket)
  })
}


function mergeOptions(target) {
  for (var i = 1, len = arguments.length; i < len; ++i) {
    var overrides = arguments[i]
    if (typeof overrides === 'object') {
      var keys = Object.keys(overrides)
      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
        var k = keys[j]
        if (overrides[k] !== undefined) {
          target[k] = overrides[k]
        }
      }
    }
  }
  return target
}


var debug
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
  debug = function() {
    var args = Array.prototype.slice.call(arguments)
    if (typeof args[0] === 'string') {
      args[0] = 'TUNNEL: ' + args[0]
    } else {
      args.unshift('TUNNEL:')
    }
    console.error.apply(console, args)
  }
} else {
  debug = function() {}
}
exports.debug = debug // for test


/***/ }),
/* 1090 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1091);


/***/ }),
/* 1091 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var net = __webpack_require__(32);
var tls = __webpack_require__(71);
var http = __webpack_require__(27);
var https = __webpack_require__(45);
var events = __webpack_require__(18);
var assert = __webpack_require__(11);
var util = __webpack_require__(2);


exports.httpOverHttp = httpOverHttp;
exports.httpsOverHttp = httpsOverHttp;
exports.httpOverHttps = httpOverHttps;
exports.httpsOverHttps = httpsOverHttps;


function httpOverHttp(options) {
  var agent = new TunnelingAgent(options);
  agent.request = http.request;
  return agent;
}

function httpsOverHttp(options) {
  var agent = new TunnelingAgent(options);
  agent.request = http.request;
  agent.createSocket = createSecureSocket;
  return agent;
}

function httpOverHttps(options) {
  var agent = new TunnelingAgent(options);
  agent.request = https.request;
  return agent;
}

function httpsOverHttps(options) {
  var agent = new TunnelingAgent(options);
  agent.request = https.request;
  agent.createSocket = createSecureSocket;
  return agent;
}


function TunnelingAgent(options) {
  var self = this;
  self.options = options || {};
  self.proxyOptions = self.options.proxy || {};
  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
  self.requests = [];
  self.sockets = [];

  self.on('free', function onFree(socket, host, port) {
    for (var i = 0, len = self.requests.length; i < len; ++i) {
      var pending = self.requests[i];
      if (pending.host === host && pending.port === port) {
        // Detect the request to connect same origin server,
        // reuse the connection.
        self.requests.splice(i, 1);
        pending.request.onSocket(socket);
        return;
      }
    }
    socket.destroy();
    self.removeSocket(socket);
  });
}
util.inherits(TunnelingAgent, events.EventEmitter);

TunnelingAgent.prototype.addRequest = function addRequest(req, host, port) {
  var self = this;

  if (self.sockets.length >= this.maxSockets) {
    // We are over limit so we'll add it to the queue.
    self.requests.push({host: host, port: port, request: req});
    return;
  }

  // If we are under maxSockets create a new one.
  self.createSocket({host: host, port: port, request: req}, function(socket) {
    socket.on('free', onFree);
    socket.on('close', onCloseOrRemove);
    socket.on('agentRemove', onCloseOrRemove);
    req.onSocket(socket);

    function onFree() {
      self.emit('free', socket, host, port);
    }

    function onCloseOrRemove(err) {
      self.removeSocket(socket);
      socket.removeListener('free', onFree);
      socket.removeListener('close', onCloseOrRemove);
      socket.removeListener('agentRemove', onCloseOrRemove);
    }
  });
};

TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
  var self = this;
  var placeholder = {};
  self.sockets.push(placeholder);

  var connectOptions = mergeOptions({}, self.proxyOptions, {
    method: 'CONNECT',
    path: options.host + ':' + options.port,
    agent: false
  });
  if (connectOptions.proxyAuth) {
    connectOptions.headers = connectOptions.headers || {};
    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
        new Buffer(connectOptions.proxyAuth).toString('base64');
  }

  debug('making CONNECT request');
  var connectReq = self.request(connectOptions);
  connectReq.useChunkedEncodingByDefault = false; // for v0.6
  connectReq.once('response', onResponse); // for v0.6
  connectReq.once('upgrade', onUpgrade);   // for v0.6
  connectReq.once('connect', onConnect);   // for v0.7 or later
  connectReq.once('error', onError);
  connectReq.end();

  function onResponse(res) {
    // Very hacky. This is necessary to avoid http-parser leaks.
    res.upgrade = true;
  }

  function onUpgrade(res, socket, head) {
    // Hacky.
    process.nextTick(function() {
      onConnect(res, socket, head);
    });
  }

  function onConnect(res, socket, head) {
    connectReq.removeAllListeners();
    socket.removeAllListeners();

    if (res.statusCode === 200) {
      assert.equal(head.length, 0);
      debug('tunneling connection has established');
      self.sockets[self.sockets.indexOf(placeholder)] = socket;
      cb(socket);
    } else {
      debug('tunneling socket could not be established, statusCode=%d',
            res.statusCode);
      var error = new Error('tunneling socket could not be established, ' +
                            'sutatusCode=' + res.statusCode);
      error.code = 'ECONNRESET';
      options.request.emit('error', error);
      self.removeSocket(placeholder);
    }
  }

  function onError(cause) {
    connectReq.removeAllListeners();

    debug('tunneling socket could not be established, cause=%s\n',
          cause.message, cause.stack);
    var error = new Error('tunneling socket could not be established, ' +
                          'cause=' + cause.message);
    error.code = 'ECONNRESET';
    options.request.emit('error', error);
    self.removeSocket(placeholder);
  }
};

TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
  var pos = this.sockets.indexOf(socket)
  if (pos === -1) {
    return;
  }
  this.sockets.splice(pos, 1);

  var pending = this.requests.shift();
  if (pending) {
    // If we have pending requests and a socket gets closed a new one
    // needs to be created to take over in the pool for the one that closed.
    this.createSocket(pending, function(socket) {
      pending.request.onSocket(socket);
    });
  }
};

function createSecureSocket(options, cb) {
  var self = this;
  TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
    var hostHeader = options.request.getHeader('host');
    var tlsOptions = mergeOptions({}, self.options, {
      socket: socket,
      servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
    });

    // 0 is dummy port for v0.6
    var secureSocket = tls.connect(0, tlsOptions);
    self.sockets[self.sockets.indexOf(socket)] = secureSocket;
    cb(secureSocket);
  });
}


function mergeOptions(target) {
  for (var i = 1, len = arguments.length; i < len; ++i) {
    var overrides = arguments[i];
    if (typeof overrides === 'object') {
      var keys = Object.keys(overrides);
      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
        var k = keys[j];
        if (overrides[k] !== undefined) {
          target[k] = overrides[k];
        }
      }
    }
  }
  return target;
}


var debug;
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
  debug = function() {
    var args = Array.prototype.slice.call(arguments);
    if (typeof args[0] === 'string') {
      args[0] = 'TUNNEL: ' + args[0];
    } else {
      args.unshift('TUNNEL:');
    }
    console.error.apply(console, args);
  }
} else {
  debug = function() {};
}
exports.debug = debug; // for test


/***/ }),
/* 1092 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * unpipe
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module exports.
 * @public
 */

module.exports = unpipe

/**
 * Determine if there are Node.js pipe-like data listeners.
 * @private
 */

function hasPipeDataListeners(stream) {
  var listeners = stream.listeners('data')

  for (var i = 0; i < listeners.length; i++) {
    if (listeners[i].name === 'ondata') {
      return true
    }
  }

  return false
}

/**
 * Unpipe a stream from all destinations.
 *
 * @param {object} stream
 * @public
 */

function unpipe(stream) {
  if (!stream) {
    throw new TypeError('argument stream is required')
  }

  if (typeof stream.unpipe === 'function') {
    // new-style
    stream.unpipe()
    return
  }

  // Node.js 0.8 hack
  if (!hasPipeDataListeners(stream)) {
    return
  }

  var listener
  var listeners = stream.listeners('close')

  for (var i = 0; i < listeners.length; i++) {
    listener = listeners[i]

    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {
      continue
    }

    // invoke the listener
    listener.call(stream)
  }
}


/***/ }),
/* 1093 */
/***/ (function(module, exports, __webpack_require__) {


/**
 * For Node.js, simply re-export the core `util.deprecate` function.
 */

module.exports = __webpack_require__(2).deprecate;


/***/ }),
/* 1094 */
/***/ (function(module, exports, __webpack_require__) {

var parse = __webpack_require__(418);
var correct = __webpack_require__(1071);

var genericWarning = (
  'license should be ' +
  'a valid SPDX license expression (without "LicenseRef"), ' +
  '"UNLICENSED", or ' +
  '"SEE LICENSE IN <filename>"'
);

var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/;

function startsWith(prefix, string) {
  return string.slice(0, prefix.length) === prefix;
}

function usesLicenseRef(ast) {
  if (ast.hasOwnProperty('license')) {
    var license = ast.license;
    return (
      startsWith('LicenseRef', license) ||
      startsWith('DocumentRef', license)
    );
  } else {
    return (
      usesLicenseRef(ast.left) ||
      usesLicenseRef(ast.right)
    );
  }
}

module.exports = function(argument) {
  var ast;

  try {
    ast = parse(argument);
  } catch (e) {
    var match
    if (
      argument === 'UNLICENSED' ||
      argument === 'UNLICENCED'
    ) {
      return {
        validForOldPackages: true,
        validForNewPackages: true,
        unlicensed: true
      };
    } else if (match = fileReferenceRE.exec(argument)) {
      return {
        validForOldPackages: true,
        validForNewPackages: true,
        inFile: match[1]
      };
    } else {
      var result = {
        validForOldPackages: false,
        validForNewPackages: false,
        warnings: [genericWarning]
      };
      var corrected = correct(argument);
      if (corrected) {
        result.warnings.push(
          'license is similar to the valid expression "' + corrected + '"'
        );
      }
      return result;
    }
  }

  if (usesLicenseRef(ast)) {
    return {
      validForNewPackages: false,
      validForOldPackages: false,
      spdx: true,
      warnings: [genericWarning]
    };
  } else {
    return {
      validForNewPackages: true,
      validForOldPackages: true,
      spdx: true
    };
  }
};


/***/ }),
/* 1095 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * verror.js: richer JavaScript errors
 */

var mod_assertplus = __webpack_require__(6);
var mod_util = __webpack_require__(2);

var mod_extsprintf = __webpack_require__(1096);
var mod_isError = __webpack_require__(90).isError;
var sprintf = mod_extsprintf.sprintf;

/*
 * Public interface
 */

/* So you can 'var VError = require('verror')' */
module.exports = VError;
/* For compatibility */
VError.VError = VError;
/* Other exported classes */
VError.SError = SError;
VError.WError = WError;
VError.MultiError = MultiError;

/*
 * Common function used to parse constructor arguments for VError, WError, and
 * SError.  Named arguments to this function:
 *
 *     strict		force strict interpretation of sprintf arguments, even
 *     			if the options in "argv" don't say so
 *
 *     argv		error's constructor arguments, which are to be
 *     			interpreted as described in README.md.  For quick
 *     			reference, "argv" has one of the following forms:
 *
 *          [ sprintf_args... ]           (argv[0] is a string)
 *          [ cause, sprintf_args... ]    (argv[0] is an Error)
 *          [ options, sprintf_args... ]  (argv[0] is an object)
 *
 * This function normalizes these forms, producing an object with the following
 * properties:
 *
 *    options           equivalent to "options" in third form.  This will never
 *    			be a direct reference to what the caller passed in
 *    			(i.e., it may be a shallow copy), so it can be freely
 *    			modified.
 *
 *    shortmessage      result of sprintf(sprintf_args), taking options.strict
 *    			into account as described in README.md.
 */
function parseConstructorArguments(args)
{
	var argv, options, sprintf_args, shortmessage, k;

	mod_assertplus.object(args, 'args');
	mod_assertplus.bool(args.strict, 'args.strict');
	mod_assertplus.array(args.argv, 'args.argv');
	argv = args.argv;

	/*
	 * First, figure out which form of invocation we've been given.
	 */
	if (argv.length === 0) {
		options = {};
		sprintf_args = [];
	} else if (mod_isError(argv[0])) {
		options = { 'cause': argv[0] };
		sprintf_args = argv.slice(1);
	} else if (typeof (argv[0]) === 'object') {
		options = {};
		for (k in argv[0]) {
			options[k] = argv[0][k];
		}
		sprintf_args = argv.slice(1);
	} else {
		mod_assertplus.string(argv[0],
		    'first argument to VError, SError, or WError ' +
		    'constructor must be a string, object, or Error');
		options = {};
		sprintf_args = argv;
	}

	/*
	 * Now construct the error's message.
	 *
	 * extsprintf (which we invoke here with our caller's arguments in order
	 * to construct this Error's message) is strict in its interpretation of
	 * values to be processed by the "%s" specifier.  The value passed to
	 * extsprintf must actually be a string or something convertible to a
	 * String using .toString().  Passing other values (notably "null" and
	 * "undefined") is considered a programmer error.  The assumption is
	 * that if you actually want to print the string "null" or "undefined",
	 * then that's easy to do that when you're calling extsprintf; on the
	 * other hand, if you did NOT want that (i.e., there's actually a bug
	 * where the program assumes some variable is non-null and tries to
	 * print it, which might happen when constructing a packet or file in
	 * some specific format), then it's better to stop immediately than
	 * produce bogus output.
	 *
	 * However, sometimes the bug is only in the code calling VError, and a
	 * programmer might prefer to have the error message contain "null" or
	 * "undefined" rather than have the bug in the error path crash the
	 * program (making the first bug harder to identify).  For that reason,
	 * by default VError converts "null" or "undefined" arguments to their
	 * string representations and passes those to extsprintf.  Programmers
	 * desiring the strict behavior can use the SError class or pass the
	 * "strict" option to the VError constructor.
	 */
	mod_assertplus.object(options);
	if (!options.strict && !args.strict) {
		sprintf_args = sprintf_args.map(function (a) {
			return (a === null ? 'null' :
			    a === undefined ? 'undefined' : a);
		});
	}

	if (sprintf_args.length === 0) {
		shortmessage = '';
	} else {
		shortmessage = sprintf.apply(null, sprintf_args);
	}

	return ({
	    'options': options,
	    'shortmessage': shortmessage
	});
}

/*
 * See README.md for reference documentation.
 */
function VError()
{
	var args, obj, parsed, cause, ctor, message, k;

	args = Array.prototype.slice.call(arguments, 0);

	/*
	 * This is a regrettable pattern, but JavaScript's built-in Error class
	 * is defined to work this way, so we allow the constructor to be called
	 * without "new".
	 */
	if (!(this instanceof VError)) {
		obj = Object.create(VError.prototype);
		VError.apply(obj, arguments);
		return (obj);
	}

	/*
	 * For convenience and backwards compatibility, we support several
	 * different calling forms.  Normalize them here.
	 */
	parsed = parseConstructorArguments({
	    'argv': args,
	    'strict': false
	});

	/*
	 * If we've been given a name, apply it now.
	 */
	if (parsed.options.name) {
		mod_assertplus.string(parsed.options.name,
		    'error\'s "name" must be a string');
		this.name = parsed.options.name;
	}

	/*
	 * For debugging, we keep track of the original short message (attached
	 * this Error particularly) separately from the complete message (which
	 * includes the messages of our cause chain).
	 */
	this.jse_shortmsg = parsed.shortmessage;
	message = parsed.shortmessage;

	/*
	 * If we've been given a cause, record a reference to it and update our
	 * message appropriately.
	 */
	cause = parsed.options.cause;
	if (cause) {
		mod_assertplus.ok(mod_isError(cause), 'cause is not an Error');
		this.jse_cause = cause;

		if (!parsed.options.skipCauseMessage) {
			message += ': ' + cause.message;
		}
	}

	/*
	 * If we've been given an object with properties, shallow-copy that
	 * here.  We don't want to use a deep copy in case there are non-plain
	 * objects here, but we don't want to use the original object in case
	 * the caller modifies it later.
	 */
	this.jse_info = {};
	if (parsed.options.info) {
		for (k in parsed.options.info) {
			this.jse_info[k] = parsed.options.info[k];
		}
	}

	this.message = message;
	Error.call(this, message);

	if (Error.captureStackTrace) {
		ctor = parsed.options.constructorOpt || this.constructor;
		Error.captureStackTrace(this, ctor);
	}

	return (this);
}

mod_util.inherits(VError, Error);
VError.prototype.name = 'VError';

VError.prototype.toString = function ve_toString()
{
	var str = (this.hasOwnProperty('name') && this.name ||
		this.constructor.name || this.constructor.prototype.name);
	if (this.message)
		str += ': ' + this.message;

	return (str);
};

/*
 * This method is provided for compatibility.  New callers should use
 * VError.cause() instead.  That method also uses the saner `null` return value
 * when there is no cause.
 */
VError.prototype.cause = function ve_cause()
{
	var cause = VError.cause(this);
	return (cause === null ? undefined : cause);
};

/*
 * Static methods
 *
 * These class-level methods are provided so that callers can use them on
 * instances of Errors that are not VErrors.  New interfaces should be provided
 * only using static methods to eliminate the class of programming mistake where
 * people fail to check whether the Error object has the corresponding methods.
 */

VError.cause = function (err)
{
	mod_assertplus.ok(mod_isError(err), 'err must be an Error');
	return (mod_isError(err.jse_cause) ? err.jse_cause : null);
};

VError.info = function (err)
{
	var rv, cause, k;

	mod_assertplus.ok(mod_isError(err), 'err must be an Error');
	cause = VError.cause(err);
	if (cause !== null) {
		rv = VError.info(cause);
	} else {
		rv = {};
	}

	if (typeof (err.jse_info) == 'object' && err.jse_info !== null) {
		for (k in err.jse_info) {
			rv[k] = err.jse_info[k];
		}
	}

	return (rv);
};

VError.findCauseByName = function (err, name)
{
	var cause;

	mod_assertplus.ok(mod_isError(err), 'err must be an Error');
	mod_assertplus.string(name, 'name');
	mod_assertplus.ok(name.length > 0, 'name cannot be empty');

	for (cause = err; cause !== null; cause = VError.cause(cause)) {
		mod_assertplus.ok(mod_isError(cause));
		if (cause.name == name) {
			return (cause);
		}
	}

	return (null);
};

VError.hasCauseWithName = function (err, name)
{
	return (VError.findCauseByName(err, name) !== null);
};

VError.fullStack = function (err)
{
	mod_assertplus.ok(mod_isError(err), 'err must be an Error');

	var cause = VError.cause(err);

	if (cause) {
		return (err.stack + '\ncaused by: ' + VError.fullStack(cause));
	}

	return (err.stack);
};

VError.errorFromList = function (errors)
{
	mod_assertplus.arrayOfObject(errors, 'errors');

	if (errors.length === 0) {
		return (null);
	}

	errors.forEach(function (e) {
		mod_assertplus.ok(mod_isError(e));
	});

	if (errors.length == 1) {
		return (errors[0]);
	}

	return (new MultiError(errors));
};

VError.errorForEach = function (err, func)
{
	mod_assertplus.ok(mod_isError(err), 'err must be an Error');
	mod_assertplus.func(func, 'func');

	if (err instanceof MultiError) {
		err.errors().forEach(function iterError(e) { func(e); });
	} else {
		func(err);
	}
};


/*
 * SError is like VError, but stricter about types.  You cannot pass "null" or
 * "undefined" as string arguments to the formatter.
 */
function SError()
{
	var args, obj, parsed, options;

	args = Array.prototype.slice.call(arguments, 0);
	if (!(this instanceof SError)) {
		obj = Object.create(SError.prototype);
		SError.apply(obj, arguments);
		return (obj);
	}

	parsed = parseConstructorArguments({
	    'argv': args,
	    'strict': true
	});

	options = parsed.options;
	VError.call(this, options, '%s', parsed.shortmessage);

	return (this);
}

/*
 * We don't bother setting SError.prototype.name because once constructed,
 * SErrors are just like VErrors.
 */
mod_util.inherits(SError, VError);


/*
 * Represents a collection of errors for the purpose of consumers that generally
 * only deal with one error.  Callers can extract the individual errors
 * contained in this object, but may also just treat it as a normal single
 * error, in which case a summary message will be printed.
 */
function MultiError(errors)
{
	mod_assertplus.array(errors, 'list of errors');
	mod_assertplus.ok(errors.length > 0, 'must be at least one error');
	this.ase_errors = errors;

	VError.call(this, {
	    'cause': errors[0]
	}, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's');
}

mod_util.inherits(MultiError, VError);
MultiError.prototype.name = 'MultiError';

MultiError.prototype.errors = function me_errors()
{
	return (this.ase_errors.slice(0));
};


/*
 * See README.md for reference details.
 */
function WError()
{
	var args, obj, parsed, options;

	args = Array.prototype.slice.call(arguments, 0);
	if (!(this instanceof WError)) {
		obj = Object.create(WError.prototype);
		WError.apply(obj, args);
		return (obj);
	}

	parsed = parseConstructorArguments({
	    'argv': args,
	    'strict': false
	});

	options = parsed.options;
	options['skipCauseMessage'] = true;
	VError.call(this, options, '%s', parsed.shortmessage);

	return (this);
}

mod_util.inherits(WError, VError);
WError.prototype.name = 'WError';

WError.prototype.toString = function we_toString()
{
	var str = (this.hasOwnProperty('name') && this.name ||
		this.constructor.name || this.constructor.prototype.name);
	if (this.message)
		str += ': ' + this.message;
	if (this.jse_cause && this.jse_cause.message)
		str += '; caused by ' + this.jse_cause.toString();

	return (str);
};

/*
 * For purely historical reasons, WError's cause() function allows you to set
 * the cause.
 */
WError.prototype.cause = function we_cause(c)
{
	if (mod_isError(c))
		this.jse_cause = c;

	return (this.jse_cause);
};


/***/ }),
/* 1096 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * extsprintf.js: extended POSIX-style sprintf
 */

var mod_assert = __webpack_require__(11);
var mod_util = __webpack_require__(2);

/*
 * Public interface
 */
exports.sprintf = jsSprintf;
exports.printf = jsPrintf;
exports.fprintf = jsFprintf;

/*
 * Stripped down version of s[n]printf(3c).  We make a best effort to throw an
 * exception when given a format string we don't understand, rather than
 * ignoring it, so that we won't break existing programs if/when we go implement
 * the rest of this.
 *
 * This implementation currently supports specifying
 *	- field alignment ('-' flag),
 * 	- zero-pad ('0' flag)
 *	- always show numeric sign ('+' flag),
 *	- field width
 *	- conversions for strings, decimal integers, and floats (numbers).
 *	- argument size specifiers.  These are all accepted but ignored, since
 *	  Javascript has no notion of the physical size of an argument.
 *
 * Everything else is currently unsupported, most notably precision, unsigned
 * numbers, non-decimal numbers, and characters.
 */
function jsSprintf(ofmt)
{
	var regex = [
	    '([^%]*)',				/* normal text */
	    '%',				/* start of format */
	    '([\'\\-+ #0]*?)',			/* flags (optional) */
	    '([1-9]\\d*)?',			/* width (optional) */
	    '(\\.([1-9]\\d*))?',		/* precision (optional) */
	    '[lhjztL]*?',			/* length mods (ignored) */
	    '([diouxXfFeEgGaAcCsSp%jr])'	/* conversion */
	].join('');

	var re = new RegExp(regex);

	/* variadic arguments used to fill in conversion specifiers */
	var args = Array.prototype.slice.call(arguments, 1);
	/* remaining format string */
	var fmt = ofmt;

	/* components of the current conversion specifier */
	var flags, width, precision, conversion;
	var left, pad, sign, arg, match;

	/* return value */
	var ret = '';

	/* current variadic argument (1-based) */
	var argn = 1;
	/* 0-based position in the format string that we've read */
	var posn = 0;
	/* 1-based position in the format string of the current conversion */
	var convposn;
	/* current conversion specifier */
	var curconv;

	mod_assert.equal('string', typeof (fmt),
	    'first argument must be a format string');

	while ((match = re.exec(fmt)) !== null) {
		ret += match[1];
		fmt = fmt.substring(match[0].length);

		/*
		 * Update flags related to the current conversion specifier's
		 * position so that we can report clear error messages.
		 */
		curconv = match[0].substring(match[1].length);
		convposn = posn + match[1].length + 1;
		posn += match[0].length;

		flags = match[2] || '';
		width = match[3] || 0;
		precision = match[4] || '';
		conversion = match[6];
		left = false;
		sign = false;
		pad = ' ';

		if (conversion == '%') {
			ret += '%';
			continue;
		}

		if (args.length === 0) {
			throw (jsError(ofmt, convposn, curconv,
			    'has no matching argument ' +
			    '(too few arguments passed)'));
		}

		arg = args.shift();
		argn++;

		if (flags.match(/[\' #]/)) {
			throw (jsError(ofmt, convposn, curconv,
			    'uses unsupported flags'));
		}

		if (precision.length > 0) {
			throw (jsError(ofmt, convposn, curconv,
			    'uses non-zero precision (not supported)'));
		}

		if (flags.match(/-/))
			left = true;

		if (flags.match(/0/))
			pad = '0';

		if (flags.match(/\+/))
			sign = true;

		switch (conversion) {
		case 's':
			if (arg === undefined || arg === null) {
				throw (jsError(ofmt, convposn, curconv,
				    'attempted to print undefined or null ' +
				    'as a string (argument ' + argn + ' to ' +
				    'sprintf)'));
			}
			ret += doPad(pad, width, left, arg.toString());
			break;

		case 'd':
			arg = Math.floor(arg);
			/*jsl:fallthru*/
		case 'f':
			sign = sign && arg > 0 ? '+' : '';
			ret += sign + doPad(pad, width, left,
			    arg.toString());
			break;

		case 'x':
			ret += doPad(pad, width, left, arg.toString(16));
			break;

		case 'j': /* non-standard */
			if (width === 0)
				width = 10;
			ret += mod_util.inspect(arg, false, width);
			break;

		case 'r': /* non-standard */
			ret += dumpException(arg);
			break;

		default:
			throw (jsError(ofmt, convposn, curconv,
			    'is not supported'));
		}
	}

	ret += fmt;
	return (ret);
}

function jsError(fmtstr, convposn, curconv, reason) {
	mod_assert.equal(typeof (fmtstr), 'string');
	mod_assert.equal(typeof (curconv), 'string');
	mod_assert.equal(typeof (convposn), 'number');
	mod_assert.equal(typeof (reason), 'string');
	return (new Error('format string "' + fmtstr +
	    '": conversion specifier "' + curconv + '" at character ' +
	    convposn + ' ' + reason));
}

function jsPrintf() {
	var args = Array.prototype.slice.call(arguments);
	args.unshift(process.stdout);
	jsFprintf.apply(null, args);
}

function jsFprintf(stream) {
	var args = Array.prototype.slice.call(arguments, 1);
	return (stream.write(jsSprintf.apply(this, args)));
}

function doPad(chr, width, left, str)
{
	var ret = str;

	while (ret.length < width) {
		if (left)
			ret += chr;
		else
			ret = chr + ret;
	}

	return (ret);
}

/*
 * This function dumps long stack traces for exceptions having a cause() method.
 * See node-verror for an example.
 */
function dumpException(ex)
{
	var ret;

	if (!(ex instanceof Error))
		throw (new Error(jsSprintf('invalid type for %%r: %j', ex)));

	/* Note that V8 prepends "ex.stack" with ex.toString(). */
	ret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack;

	if (ex.cause && typeof (ex.cause) === 'function') {
		var cex = ex.cause();
		if (cex) {
			ret += '\nCaused by: ' + dumpException(cex);
		}
	}

	return (ret);
}


/***/ }),
/* 1097 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeAddress is a prootype that represents address type
 * It matches:
 * address
 * address[]
 * address[4]
 * address[][]
 * address[3][]
 * address[][6][], ...
 */
var SolidityTypeAddress = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputAddress;
};

SolidityTypeAddress.prototype = new SolidityType({});
SolidityTypeAddress.prototype.constructor = SolidityTypeAddress;

SolidityTypeAddress.prototype.isType = function (name) {
    return !!name.match(/address(\[([0-9]*)\])?/);
};

module.exports = SolidityTypeAddress;


/***/ }),
/* 1098 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeBool is a prootype that represents bool type
 * It matches:
 * bool
 * bool[]
 * bool[4]
 * bool[][]
 * bool[3][]
 * bool[][6][], ...
 */
var SolidityTypeBool = function () {
    this._inputFormatter = f.formatInputBool;
    this._outputFormatter = f.formatOutputBool;
};

SolidityTypeBool.prototype = new SolidityType({});
SolidityTypeBool.prototype.constructor = SolidityTypeBool;

SolidityTypeBool.prototype.isType = function (name) {
    return !!name.match(/^bool(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeBool;


/***/ }),
/* 1099 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeBytes is a prototype that represents the bytes type.
 * It matches:
 * bytes
 * bytes[]
 * bytes[4]
 * bytes[][]
 * bytes[3][]
 * bytes[][6][], ...
 * bytes32
 * bytes8[4]
 * bytes[3][]
 */
var SolidityTypeBytes = function () {
    this._inputFormatter = f.formatInputBytes;
    this._outputFormatter = f.formatOutputBytes;
};

SolidityTypeBytes.prototype = new SolidityType({});
SolidityTypeBytes.prototype.constructor = SolidityTypeBytes;

SolidityTypeBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeBytes;


/***/ }),
/* 1100 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

var SolidityTypeDynamicBytes = function () {
    this._inputFormatter = f.formatInputDynamicBytes;
    this._outputFormatter = f.formatOutputDynamicBytes;
};

SolidityTypeDynamicBytes.prototype = new SolidityType({});
SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes;

SolidityTypeDynamicBytes.prototype.isType = function (name) {
    return !!name.match(/^bytes(\[([0-9]*)\])*$/);
};

SolidityTypeDynamicBytes.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeDynamicBytes;


/***/ }),
/* 1101 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeInt is a prootype that represents int type
 * It matches:
 * int
 * int[]
 * int[4]
 * int[][]
 * int[3][]
 * int[][6][], ...
 * int32
 * int64[]
 * int8[4]
 * int256[][]
 * int[3][]
 * int64[][6][], ...
 */
var SolidityTypeInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputInt;
};

SolidityTypeInt.prototype = new SolidityType({});
SolidityTypeInt.prototype.constructor = SolidityTypeInt;

SolidityTypeInt.prototype.isType = function (name) {
    return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeInt;


/***/ }),
/* 1102 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeReal is a prootype that represents real type
 * It matches:
 * real
 * real[]
 * real[4]
 * real[][]
 * real[3][]
 * real[][6][], ...
 * real32
 * real64[]
 * real8[4]
 * real256[][]
 * real[3][]
 * real64[][6][], ...
 */
var SolidityTypeReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputReal;
};

SolidityTypeReal.prototype = new SolidityType({});
SolidityTypeReal.prototype.constructor = SolidityTypeReal;

SolidityTypeReal.prototype.isType = function (name) {
    return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/);
};

module.exports = SolidityTypeReal;


/***/ }),
/* 1103 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

var SolidityTypeString = function () {
    this._inputFormatter = f.formatInputString;
    this._outputFormatter = f.formatOutputString;
};

SolidityTypeString.prototype = new SolidityType({});
SolidityTypeString.prototype.constructor = SolidityTypeString;

SolidityTypeString.prototype.isType = function (name) {
    return !!name.match(/^string(\[([0-9]*)\])*$/);
};

SolidityTypeString.prototype.isDynamicType = function () {
    return true;
};

module.exports = SolidityTypeString;


/***/ }),
/* 1104 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeUInt is a prootype that represents uint type
 * It matches:
 * uint
 * uint[]
 * uint[4]
 * uint[][]
 * uint[3][]
 * uint[][6][], ...
 * uint32
 * uint64[]
 * uint8[4]
 * uint256[][]
 * uint[3][]
 * uint64[][6][], ...
 */
var SolidityTypeUInt = function () {
    this._inputFormatter = f.formatInputInt;
    this._outputFormatter = f.formatOutputUInt;
};

SolidityTypeUInt.prototype = new SolidityType({});
SolidityTypeUInt.prototype.constructor = SolidityTypeUInt;

SolidityTypeUInt.prototype.isType = function (name) {
    return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeUInt;


/***/ }),
/* 1105 */
/***/ (function(module, exports, __webpack_require__) {

var f = __webpack_require__(43);
var SolidityType = __webpack_require__(59);

/**
 * SolidityTypeUReal is a prootype that represents ureal type
 * It matches:
 * ureal
 * ureal[]
 * ureal[4]
 * ureal[][]
 * ureal[3][]
 * ureal[][6][], ...
 * ureal32
 * ureal64[]
 * ureal8[4]
 * ureal256[][]
 * ureal[3][]
 * ureal64[][6][], ...
 */
var SolidityTypeUReal = function () {
    this._inputFormatter = f.formatInputReal;
    this._outputFormatter = f.formatOutputUReal;
};

SolidityTypeUReal.prototype = new SolidityType({});
SolidityTypeUReal.prototype.constructor = SolidityTypeUReal;

SolidityTypeUReal.prototype.isType = function (name) {
    return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/);
};

module.exports = SolidityTypeUReal;


/***/ }),
/* 1106 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file web3.js
 * @authors:
 *   Jeffrey Wilcke <jeff@ethdev.com>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 *   Gav Wood <g@ethdev.com>
 * @date 2014
 */

var RequestManager = __webpack_require__(1121);
var Iban = __webpack_require__(172);
var Eth = __webpack_require__(1115);
var DB = __webpack_require__(1114);
var Shh = __webpack_require__(1118);
var Net = __webpack_require__(1116);
var Personal = __webpack_require__(1117);
var Swarm = __webpack_require__(1119);
var Settings = __webpack_require__(1122);
var version = __webpack_require__(1237);
var utils = __webpack_require__(17);
var sha3 = __webpack_require__(137);
var extend = __webpack_require__(1110);
var Batch = __webpack_require__(1108);
var Property = __webpack_require__(102);
var HttpProvider = __webpack_require__(1112);
var IpcProvider = __webpack_require__(1113);
var BigNumber = __webpack_require__(108);



function Web3 (provider) {
    this._requestManager = new RequestManager(provider);
    this.currentProvider = provider;
    this.eth = new Eth(this);
    this.db = new DB(this);
    this.shh = new Shh(this);
    this.net = new Net(this);
    this.personal = new Personal(this);
    this.bzz = new Swarm(this);
    this.settings = new Settings();
    this.version = {
        api: version.version
    };
    this.providers = {
        HttpProvider: HttpProvider,
        IpcProvider: IpcProvider
    };
    this._extend = extend(this);
    this._extend({
        properties: properties()
    });
}

// expose providers on the class
Web3.providers = {
    HttpProvider: HttpProvider,
    IpcProvider: IpcProvider
};

Web3.prototype.setProvider = function (provider) {
    this._requestManager.setProvider(provider);
    this.currentProvider = provider;
};

Web3.prototype.reset = function (keepIsSyncing) {
    this._requestManager.reset(keepIsSyncing);
    this.settings = new Settings();
};

Web3.prototype.BigNumber = BigNumber;
Web3.prototype.toHex = utils.toHex;
Web3.prototype.toAscii = utils.toAscii;
Web3.prototype.toUtf8 = utils.toUtf8;
Web3.prototype.fromAscii = utils.fromAscii;
Web3.prototype.fromUtf8 = utils.fromUtf8;
Web3.prototype.toDecimal = utils.toDecimal;
Web3.prototype.fromDecimal = utils.fromDecimal;
Web3.prototype.toBigNumber = utils.toBigNumber;
Web3.prototype.toWei = utils.toWei;
Web3.prototype.fromWei = utils.fromWei;
Web3.prototype.isAddress = utils.isAddress;
Web3.prototype.isChecksumAddress = utils.isChecksumAddress;
Web3.prototype.toChecksumAddress = utils.toChecksumAddress;
Web3.prototype.isIBAN = utils.isIBAN;
Web3.prototype.padLeft = utils.padLeft;
Web3.prototype.padRight = utils.padRight;


Web3.prototype.sha3 = function(string, options) {
    return '0x' + sha3(string, options);
};

/**
 * Transforms direct icap to address
 */
Web3.prototype.fromICAP = function (icap) {
    var iban = new Iban(icap);
    return iban.address();
};

var properties = function () {
    return [
        new Property({
            name: 'version.node',
            getter: 'web3_clientVersion'
        }),
        new Property({
            name: 'version.network',
            getter: 'net_version',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.ethereum',
            getter: 'eth_protocolVersion',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.whisper',
            getter: 'shh_version',
            inputFormatter: utils.toDecimal
        })
    ];
};

Web3.prototype.isConnected = function(){
    return (this.currentProvider && this.currentProvider.isConnected());
};

Web3.prototype.createBatch = function () {
    return new Batch(this);
};

module.exports = Web3;



/***/ }),
/* 1107 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file allevents.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var sha3 = __webpack_require__(137);
var SolidityEvent = __webpack_require__(433);
var formatters = __webpack_require__(68);
var utils = __webpack_require__(17);
var Filter = __webpack_require__(171);
var watches = __webpack_require__(173);

var AllSolidityEvents = function (requestManager, json, address) {
    this._requestManager = requestManager;
    this._json = json;
    this._address = address;
};

AllSolidityEvents.prototype.encode = function (options) {
    options = options || {};
    var result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    result.address = this._address;

    return result;
};

AllSolidityEvents.prototype.decode = function (data) {
    data.data = data.data || '';


    var eventTopic = (utils.isArray(data.topics) && utils.isString(data.topics[0])) ? data.topics[0].slice(2) : '';
    var match = this._json.filter(function (j) {
        return eventTopic === sha3(utils.transformToFullName(j));
    })[0];

    if (!match) { // cannot find matching event?
        return formatters.outputLogFormatter(data);
    }

    var event = new SolidityEvent(this._requestManager, match, this._address);
    return event.decode(data);
};

AllSolidityEvents.prototype.execute = function (options, callback) {

    if (utils.isFunction(arguments[arguments.length - 1])) {
        callback = arguments[arguments.length - 1];
        if(arguments.length === 1)
            options = null;
    }

    var o = this.encode(options);
    var formatter = this.decode.bind(this);
    return new Filter(o, 'eth', this._requestManager, watches.eth(), formatter, callback);
};

AllSolidityEvents.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    contract.allEvents = execute;
};

module.exports = AllSolidityEvents;



/***/ }),
/* 1108 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file batch.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Jsonrpc = __webpack_require__(434);
var errors = __webpack_require__(101);

var Batch = function (web3) {
    this.requestManager = web3._requestManager;
    this.requests = [];
};

/**
 * Should be called to add create new request to batch request
 *
 * @method add
 * @param {Object} jsonrpc requet object
 */
Batch.prototype.add = function (request) {
    this.requests.push(request);
};

/**
 * Should be called to execute batch request
 *
 * @method execute
 */
Batch.prototype.execute = function () {
    var requests = this.requests;
    this.requestManager.sendBatch(requests, function (err, results) {
        results = results || [];
        requests.map(function (request, index) {
            return results[index] || {};
        }).forEach(function (result, index) {
            if (requests[index].callback) {

                if (!Jsonrpc.isValidResponse(result)) {
                    return requests[index].callback(errors.InvalidResponse(result));
                }

                requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
            }
        });
    }); 
};

module.exports = Batch;



/***/ }),
/* 1109 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file contract.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

var utils = __webpack_require__(17);
var coder = __webpack_require__(136);
var SolidityEvent = __webpack_require__(433);
var SolidityFunction = __webpack_require__(1111);
var AllEvents = __webpack_require__(1107);

/**
 * Should be called to encode constructor params
 *
 * @method encodeConstructorParams
 * @param {Array} abi
 * @param {Array} constructor params
 */
var encodeConstructorParams = function (abi, params) {
    return abi.filter(function (json) {
        return json.type === 'constructor' && json.inputs.length === params.length;
    }).map(function (json) {
        return json.inputs.map(function (input) {
            return input.type;
        });
    }).map(function (types) {
        return coder.encodeParams(types, params);
    })[0] || '';
};

/**
 * Should be called to add functions to contract object
 *
 * @method addFunctionsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addFunctionsToContract = function (contract) {
    contract.abi.filter(function (json) {
        return json.type === 'function';
    }).map(function (json) {
        return new SolidityFunction(contract._eth, json, contract.address);
    }).forEach(function (f) {
        f.attachToContract(contract);
    });
};

/**
 * Should be called to add events to contract object
 *
 * @method addEventsToContract
 * @param {Contract} contract
 * @param {Array} abi
 */
var addEventsToContract = function (contract) {
    var events = contract.abi.filter(function (json) {
        return json.type === 'event';
    });

    var All = new AllEvents(contract._eth._requestManager, events, contract.address);
    All.attachToContract(contract);

    events.map(function (json) {
        return new SolidityEvent(contract._eth._requestManager, json, contract.address);
    }).forEach(function (e) {
        e.attachToContract(contract);
    });
};


/**
 * Should be called to check if the contract gets properly deployed on the blockchain.
 *
 * @method checkForContractAddress
 * @param {Object} contract
 * @param {Function} callback
 * @returns {Undefined}
 */
var checkForContractAddress = function(contract, callback){
    var count = 0,
        callbackFired = false;

    // wait for receipt
    var filter = contract._eth.filter('latest', function(e){
        if (!e && !callbackFired) {
            count++;

            // stop watching after 50 blocks (timeout)
            if (count > 50) {

                filter.stopWatching(function() {});
                callbackFired = true;

                if (callback)
                    callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
                else
                    throw new Error('Contract transaction couldn\'t be found after 50 blocks');


            } else {

                contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){
                    if(receipt && receipt.blockHash && !callbackFired) {

                        contract._eth.getCode(receipt.contractAddress, function(e, code){
                            /*jshint maxcomplexity: 6 */

                            if(callbackFired || !code)
                                return;

                            filter.stopWatching(function() {});
                            callbackFired = true;

                            if(code.length > 3) {

                                // console.log('Contract code deployed!');

                                contract.address = receipt.contractAddress;

                                // attach events and methods again after we have
                                addFunctionsToContract(contract);
                                addEventsToContract(contract);

                                // call callback for the second time
                                if(callback)
                                    callback(null, contract);

                            } else {
                                if(callback)
                                    callback(new Error('The contract code couldn\'t be stored, please check your gas amount.'));
                                else
                                    throw new Error('The contract code couldn\'t be stored, please check your gas amount.');
                            }
                        });
                    }
                });
            }
        }
    });
};

/**
 * Should be called to create new ContractFactory instance
 *
 * @method ContractFactory
 * @param {Array} abi
 */
var ContractFactory = function (eth, abi) {
    this.eth = eth;
    this.abi = abi;

    /**
     * Should be called to create new contract on a blockchain
     *
     * @method new
     * @param {Any} contract constructor param1 (optional)
     * @param {Any} contract constructor param2 (optional)
     * @param {Object} contract transaction object (required)
     * @param {Function} callback
     * @returns {Contract} returns contract instance
     */
    this.new = function () {
        /*jshint maxcomplexity: 7 */

        var contract = new Contract(this.eth, this.abi);

        // parse arguments
        var options = {}; // required!
        var callback;

        var args = Array.prototype.slice.call(arguments);
        if (utils.isFunction(args[args.length - 1])) {
            callback = args.pop();
        }

        var last = args[args.length - 1];
        if (utils.isObject(last) && !utils.isArray(last)) {
            options = args.pop();
        }

        if (options.value > 0) {
            var constructorAbi = abi.filter(function (json) {
                return json.type === 'constructor' && json.inputs.length === args.length;
            })[0] || {};

            if (!constructorAbi.payable) {
                throw new Error('Cannot send value to non-payable constructor');
            }
        }

        var bytes = encodeConstructorParams(this.abi, args);
        options.data += bytes;

        if (callback) {

            // wait for the contract address and check if the code was deployed
            this.eth.sendTransaction(options, function (err, hash) {
                if (err) {
                    callback(err);
                } else {
                    // add the transaction hash
                    contract.transactionHash = hash;

                    // call callback for the first time
                    callback(null, contract);

                    checkForContractAddress(contract, callback);
                }
            });
        } else {
            var hash = this.eth.sendTransaction(options);
            // add the transaction hash
            contract.transactionHash = hash;
            checkForContractAddress(contract);
        }

        return contract;
    };

    this.new.getData = this.getData.bind(this);
};

/**
 * Should be called to create new ContractFactory
 *
 * @method contract
 * @param {Array} abi
 * @returns {ContractFactory} new contract factory
 */
//var contract = function (abi) {
    //return new ContractFactory(abi);
//};



/**
 * Should be called to get access to existing contract on a blockchain
 *
 * @method at
 * @param {Address} contract address (required)
 * @param {Function} callback {optional)
 * @returns {Contract} returns contract if no callback was passed,
 * otherwise calls callback function (err, contract)
 */
ContractFactory.prototype.at = function (address, callback) {
    var contract = new Contract(this.eth, this.abi, address);

    // this functions are not part of prototype,
    // because we dont want to spoil the interface
    addFunctionsToContract(contract);
    addEventsToContract(contract);

    if (callback) {
        callback(null, contract);
    }
    return contract;
};

/**
 * Gets the data, which is data to deploy plus constructor params
 *
 * @method getData
 */
ContractFactory.prototype.getData = function () {
    var options = {}; // required!
    var args = Array.prototype.slice.call(arguments);

    var last = args[args.length - 1];
    if (utils.isObject(last) && !utils.isArray(last)) {
        options = args.pop();
    }

    var bytes = encodeConstructorParams(this.abi, args);
    options.data += bytes;

    return options.data;
};

/**
 * Should be called to create new contract instance
 *
 * @method Contract
 * @param {Array} abi
 * @param {Address} contract address
 */
var Contract = function (eth, abi, address) {
    this._eth = eth;
    this.transactionHash = null;
    this.address = address;
    this.abi = abi;
};

module.exports = ContractFactory;


/***/ }),
/* 1110 */
/***/ (function(module, exports, __webpack_require__) {

var formatters = __webpack_require__(68);
var utils = __webpack_require__(17);
var Method = __webpack_require__(83);
var Property = __webpack_require__(102);

// TODO: refactor, so the input params are not altered.
// it's necessary to make same 'extension' work with multiple providers
var extend = function (web3) {
    /* jshint maxcomplexity:5 */
    var ex = function (extension) {

        var extendedObject;
        if (extension.property) {
            if (!web3[extension.property]) {
                web3[extension.property] = {};
            }
            extendedObject = web3[extension.property];
        } else {
            extendedObject = web3;
        }

        if (extension.methods) {
            extension.methods.forEach(function (method) {
                method.attachToObject(extendedObject);
                method.setRequestManager(web3._requestManager);
            });
        }

        if (extension.properties) {
            extension.properties.forEach(function (property) {
                property.attachToObject(extendedObject);
                property.setRequestManager(web3._requestManager);
            });
        }
    };

    ex.formatters = formatters; 
    ex.utils = utils;
    ex.Method = Method;
    ex.Property = Property;

    return ex;
};



module.exports = extend;



/***/ }),
/* 1111 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file function.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var coder = __webpack_require__(136);
var utils = __webpack_require__(17);
var errors = __webpack_require__(101);
var formatters = __webpack_require__(68);
var sha3 = __webpack_require__(137);

/**
 * This prototype should be used to call/sendTransaction to solidity functions
 */
var SolidityFunction = function (eth, json, address) {
    this._eth = eth;
    this._inputTypes = json.inputs.map(function (i) {
        return i.type;
    });
    this._outputTypes = json.outputs.map(function (i) {
        return i.type;
    });
    this._constant = json.constant;
    this._payable = json.payable;
    this._name = utils.transformToFullName(json);
    this._address = address;
};

SolidityFunction.prototype.extractCallback = function (args) {
    if (utils.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

SolidityFunction.prototype.extractDefaultBlock = function (args) {
    if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) {
        return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 *
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */
SolidityFunction.prototype.validateArgs = function (args) {
    var inputArgs = args.filter(function (a) {
      // filter the options object but not arguments that are arrays
      return !( (utils.isObject(a) === true) &&
                (utils.isArray(a) === false) &&
                (utils.isBigNumber(a) === false)
              );
    });
    if (inputArgs.length !== this._inputTypes.length) {
        throw errors.InvalidNumberOfSolidityArgs();
    }
};

/**
 * Should be used to create payload from arguments
 *
 * @method toPayload
 * @param {Array} solidity function params
 * @param {Object} optional payload options
 */
SolidityFunction.prototype.toPayload = function (args) {
    var options = {};
    if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
        options = args[args.length - 1];
    }
    this.validateArgs(args);
    options.to = this._address;
    options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
    return options;
};

/**
 * Should be used to get function signature
 *
 * @method signature
 * @return {String} function signature
 */
SolidityFunction.prototype.signature = function () {
    return sha3(this._name).slice(0, 8);
};


SolidityFunction.prototype.unpackOutput = function (output) {
    if (!output) {
        return;
    }

    output = output.length >= 2 ? output.slice(2) : output;
    var result = coder.decodeParams(this._outputTypes, output);
    return result.length === 1 ? result[0] : result;
};

/**
 * Calls a contract function.
 *
 * @method call
 * @param {...Object} Contract function arguments
 * @param {function} If the last argument is a function, the contract function
 *   call will be asynchronous, and the callback will be passed the
 *   error and result.
 * @return {String} output bytes
 */
SolidityFunction.prototype.call = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var defaultBlock = this.extractDefaultBlock(args);
    var payload = this.toPayload(args);


    if (!callback) {
        var output = this._eth.call(payload, defaultBlock);
        return this.unpackOutput(output);
    }

    var self = this;
    this._eth.call(payload, defaultBlock, function (error, output) {
        if (error) return callback(error, null);

        var unpacked = null;
        try {
            unpacked = self.unpackOutput(output);
        }
        catch (e) {
            error = e;
        }

        callback(error, unpacked);
    });
};

/**
 * Should be used to sendTransaction to solidity function
 *
 * @method sendTransaction
 */
SolidityFunction.prototype.sendTransaction = function () {
    var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; });
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (payload.value > 0 && !this._payable) {
        throw new Error('Cannot send value to non-payable function');
    }

    if (!callback) {
        return this._eth.sendTransaction(payload);
    }

    this._eth.sendTransaction(payload, callback);
};

/**
 * Should be used to estimateGas of solidity function
 *
 * @method estimateGas
 */
SolidityFunction.prototype.estimateGas = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);

    if (!callback) {
        return this._eth.estimateGas(payload);
    }

    this._eth.estimateGas(payload, callback);
};

/**
 * Return the encoded data of the call
 *
 * @method getData
 * @return {String} the encoded data
 */
SolidityFunction.prototype.getData = function () {
    var args = Array.prototype.slice.call(arguments);
    var payload = this.toPayload(args);

    return payload.data;
};

/**
 * Should be used to get function display name
 *
 * @method displayName
 * @return {String} display name of the function
 */
SolidityFunction.prototype.displayName = function () {
    return utils.extractDisplayName(this._name);
};

/**
 * Should be used to get function type name
 *
 * @method typeName
 * @return {String} type name of the function
 */
SolidityFunction.prototype.typeName = function () {
    return utils.extractTypeName(this._name);
};

/**
 * Should be called to get rpc requests from solidity function
 *
 * @method request
 * @returns {Object}
 */
SolidityFunction.prototype.request = function () {
    var args = Array.prototype.slice.call(arguments);
    var callback = this.extractCallback(args);
    var payload = this.toPayload(args);
    var format = this.unpackOutput.bind(this);

    return {
        method: this._constant ? 'eth_call' : 'eth_sendTransaction',
        callback: callback,
        params: [payload],
        format: format
    };
};

/**
 * Should be called to execute function
 *
 * @method execute
 */
SolidityFunction.prototype.execute = function () {
    var transaction = !this._constant;

    // send transaction
    if (transaction) {
        return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
    }

    // call
    return this.call.apply(this, Array.prototype.slice.call(arguments));
};

/**
 * Should be called to attach function to contract
 *
 * @method attachToContract
 * @param {Contract}
 */
SolidityFunction.prototype.attachToContract = function (contract) {
    var execute = this.execute.bind(this);
    execute.request = this.request.bind(this);
    execute.call = this.call.bind(this);
    execute.sendTransaction = this.sendTransaction.bind(this);
    execute.estimateGas = this.estimateGas.bind(this);
    execute.getData = this.getData.bind(this);
    var displayName = this.displayName();
    if (!contract[displayName]) {
        contract[displayName] = execute;
    }
    contract[displayName][this.typeName()] = execute; // circular!!!!
};

module.exports = SolidityFunction;


/***/ }),
/* 1112 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file httpprovider.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 *   Marian Oancea <marian@ethdev.com>
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var errors = __webpack_require__(101);

// workaround to use httpprovider in different envs

// browser
if (typeof window !== 'undefined' && window.XMLHttpRequest) {
  XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
// node
} else {
  XMLHttpRequest = __webpack_require__(174).XMLHttpRequest; // jshint ignore: line
}

var XHR2 = __webpack_require__(438); // jshint ignore: line

/**
 * HttpProvider should be used to send rpc calls over http
 */
var HttpProvider = function (host, timeout, user, password, headers) {
  this.host = host || 'http://localhost:8545';
  this.timeout = timeout || 0;
  this.user = user;
  this.password = password;
  this.headers = headers;
};

/**
 * Should be called to prepare new XMLHttpRequest
 *
 * @method prepareRequest
 * @param {Boolean} true if request should be async
 * @return {XMLHttpRequest} object
 */
HttpProvider.prototype.prepareRequest = function (async) {
  var request;

  if (async) {
    request = new XHR2();
    request.timeout = this.timeout;
  } else {
    request = new XMLHttpRequest();
  }

  request.open('POST', this.host, async);
  if (this.user && this.password) {
    var auth = 'Basic ' + new Buffer(this.user + ':' + this.password).toString('base64');
    request.setRequestHeader('Authorization', auth);
  } request.setRequestHeader('Content-Type', 'application/json');
  if(this.headers) {
      this.headers.forEach(function(header) {
          request.setRequestHeader(header.name, header.value);
      });
  }
  return request;
};

/**
 * Should be called to make sync request
 *
 * @method send
 * @param {Object} payload
 * @return {Object} result
 */
HttpProvider.prototype.send = function (payload) {
  var request = this.prepareRequest(false);

  try {
    request.send(JSON.stringify(payload));
  } catch (error) {
    throw errors.InvalidConnection(this.host);
  }

  var result = request.responseText;

  try {
    result = JSON.parse(result);
  } catch (e) {
    throw errors.InvalidResponse(request.responseText);
  }

  return result;
};

/**
 * Should be used to make async request
 *
 * @method sendAsync
 * @param {Object} payload
 * @param {Function} callback triggered on end with (err, result)
 */
HttpProvider.prototype.sendAsync = function (payload, callback) {
  var request = this.prepareRequest(true);

  request.onreadystatechange = function () {
    if (request.readyState === 4 && request.timeout !== 1) {
      var result = request.responseText;
      var error = null;

      try {
        result = JSON.parse(result);
      } catch (e) {
        error = errors.InvalidResponse(request.responseText);
      }

      callback(error, result);
    }
  };

  request.ontimeout = function () {
    callback(errors.ConnectionTimeout(this.timeout));
  };

  try {
    request.send(JSON.stringify(payload));
  } catch (error) {
    callback(errors.InvalidConnection(this.host));
  }
};

/**
 * Synchronously tries to make Http request
 *
 * @method isConnected
 * @return {Boolean} returns true if request haven't failed. Otherwise false
 */
HttpProvider.prototype.isConnected = function () {
  try {
    this.send({
      id: 9999999999,
      jsonrpc: '2.0',
      method: 'net_listening',
      params: []
    });
    return true;
  } catch (e) {
    return false;
  }
};

module.exports = HttpProvider;


/***/ }),
/* 1113 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ipcprovider.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var utils = __webpack_require__(17);
var errors = __webpack_require__(101);


var IpcProvider = function (path, net) {
    var _this = this;
    this.responseCallbacks = {};
    this.path = path;
    
    this.connection = net.connect({path: this.path});

    this.connection.on('error', function(e){
        console.error('IPC Connection Error', e);
        _this._timeout();
    });

    this.connection.on('end', function(){
        _this._timeout();
    }); 


    // LISTEN FOR CONNECTION RESPONSES
    this.connection.on('data', function(data) {
        /*jshint maxcomplexity: 6 */

        _this._parseResponse(data.toString()).forEach(function(result){

            var id = null;

            // get the id which matches the returned id
            if(utils.isArray(result)) {
                result.forEach(function(load){
                    if(_this.responseCallbacks[load.id])
                        id = load.id;
                });
            } else {
                id = result.id;
            }

            // fire the callback
            if(_this.responseCallbacks[id]) {
                _this.responseCallbacks[id](null, result);
                delete _this.responseCallbacks[id];
            }
        });
    });
};

/**
Will parse the response and make an array out of it.

@method _parseResponse
@param {String} data
*/
IpcProvider.prototype._parseResponse = function(data) {
    var _this = this,
        returnValues = [];
    
    // DE-CHUNKER
    var dechunkedData = data
        .replace(/\}[\n\r]?\{/g,'}|--|{') // }{
        .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{
        .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{
        .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{
        .split('|--|');

    dechunkedData.forEach(function(data){

        // prepend the last chunk
        if(_this.lastChunk)
            data = _this.lastChunk + data;

        var result = null;

        try {
            result = JSON.parse(data);

        } catch(e) {

            _this.lastChunk = data;

            // start timeout to cancel all requests
            clearTimeout(_this.lastChunkTimeout);
            _this.lastChunkTimeout = setTimeout(function(){
                _this._timeout();
                throw errors.InvalidResponse(data);
            }, 1000 * 15);

            return;
        }

        // cancel timeout and set chunk to null
        clearTimeout(_this.lastChunkTimeout);
        _this.lastChunk = null;

        if(result)
            returnValues.push(result);
    });

    return returnValues;
};


/**
Get the adds a callback to the responseCallbacks object,
which will be called if a response matching the response Id will arrive.

@method _addResponseCallback
*/
IpcProvider.prototype._addResponseCallback = function(payload, callback) {
    var id = payload.id || payload[0].id;
    var method = payload.method || payload[0].method;

    this.responseCallbacks[id] = callback;
    this.responseCallbacks[id].method = method;
};

/**
Timeout all requests when the end/error event is fired

@method _timeout
*/
IpcProvider.prototype._timeout = function() {
    for(var key in this.responseCallbacks) {
        if(this.responseCallbacks.hasOwnProperty(key)){
            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
            delete this.responseCallbacks[key];
        }
    }
};


/**
Check if the current connection is still valid.

@method isConnected
*/
IpcProvider.prototype.isConnected = function() {
    var _this = this;

    // try reconnect, when connection is gone
    if(!_this.connection.writable)
        _this.connection.connect({path: _this.path});

    return !!this.connection.writable;
};

IpcProvider.prototype.send = function (payload) {

    if(this.connection.writeSync) {
        var result;

        // try reconnect, when connection is gone
        if(!this.connection.writable)
            this.connection.connect({path: this.path});

        var data = this.connection.writeSync(JSON.stringify(payload));

        try {
            result = JSON.parse(data);
        } catch(e) {
            throw errors.InvalidResponse(data);                
        }

        return result;

    } else {
        throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.');
    }
};

IpcProvider.prototype.sendAsync = function (payload, callback) {
    // try reconnect, when connection is gone
    if(!this.connection.writable)
        this.connection.connect({path: this.path});


    this.connection.write(JSON.stringify(payload));
    this._addResponseCallback(payload, callback);
};

module.exports = IpcProvider;



/***/ }),
/* 1114 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file db.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Method = __webpack_require__(83);

var DB = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;
    
    methods().forEach(function(method) { 
        method.attachToObject(self);
        method.setRequestManager(web3._requestManager);
    });
};

var methods = function () {
    var putString = new Method({
        name: 'putString',
        call: 'db_putString',
        params: 3
    });

    var getString = new Method({
        name: 'getString',
        call: 'db_getString',
        params: 2
    });

    var putHex = new Method({
        name: 'putHex',
        call: 'db_putHex',
        params: 3
    });

    var getHex = new Method({
        name: 'getHex',
        call: 'db_getHex',
        params: 2
    });

    return [
        putString, getString, putHex, getHex
    ];
};

module.exports = DB;


/***/ }),
/* 1115 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var formatters = __webpack_require__(68);
var utils = __webpack_require__(17);
var Method = __webpack_require__(83);
var Property = __webpack_require__(102);
var c = __webpack_require__(170);
var Contract = __webpack_require__(1109);
var watches = __webpack_require__(173);
var Filter = __webpack_require__(171);
var IsSyncing = __webpack_require__(1123);
var namereg = __webpack_require__(1120);
var Iban = __webpack_require__(172);
var transfer = __webpack_require__(1124);

var blockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
};

var transactionFromBlockCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
};

var uncleCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
};

var getBlockTransactionCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
};

var uncleCountCall = function (args) {
    return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
};

function Eth(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });


    this.iban = Iban;
    this.sendIBANTransaction = transfer.bind(null, this);
}

Object.defineProperty(Eth.prototype, 'defaultBlock', {
    get: function () {
        return c.defaultBlock;
    },
    set: function (val) {
        c.defaultBlock = val;
        return val;
    }
});

Object.defineProperty(Eth.prototype, 'defaultAccount', {
    get: function () {
        return c.defaultAccount;
    },
    set: function (val) {
        c.defaultAccount = val;
        return val;
    }
});

var methods = function () {
    var getBalance = new Method({
        name: 'getBalance',
        call: 'eth_getBalance',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: formatters.outputBigNumberFormatter
    });

    var getStorageAt = new Method({
        name: 'getStorageAt',
        call: 'eth_getStorageAt',
        params: 3,
        inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
    });

    var getCode = new Method({
        name: 'getCode',
        call: 'eth_getCode',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var getBlock = new Method({
        name: 'getBlock',
        call: blockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
        outputFormatter: formatters.outputBlockFormatter
    });

    var getUncle = new Method({
        name: 'getUncle',
        call: uncleCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputBlockFormatter,

    });

    var getCompilers = new Method({
        name: 'getCompilers',
        call: 'eth_getCompilers',
        params: 0
    });

    var getBlockTransactionCount = new Method({
        name: 'getBlockTransactionCount',
        call: getBlockTransactionCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getBlockUncleCount = new Method({
        name: 'getBlockUncleCount',
        call: uncleCountCall,
        params: 1,
        inputFormatter: [formatters.inputBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var getTransaction = new Method({
        name: 'getTransaction',
        call: 'eth_getTransactionByHash',
        params: 1,
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionFromBlock = new Method({
        name: 'getTransactionFromBlock',
        call: transactionFromBlockCall,
        params: 2,
        inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
        outputFormatter: formatters.outputTransactionFormatter
    });

    var getTransactionReceipt = new Method({
        name: 'getTransactionReceipt',
        call: 'eth_getTransactionReceipt',
        params: 1,
        outputFormatter: formatters.outputTransactionReceiptFormatter
    });

    var getTransactionCount = new Method({
        name: 'getTransactionCount',
        call: 'eth_getTransactionCount',
        params: 2,
        inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: utils.toDecimal
    });

    var sendRawTransaction = new Method({
        name: 'sendRawTransaction',
        call: 'eth_sendRawTransaction',
        params: 1,
        inputFormatter: [null]
    });

    var sendTransaction = new Method({
        name: 'sendTransaction',
        call: 'eth_sendTransaction',
        params: 1,
        inputFormatter: [formatters.inputTransactionFormatter]
    });

    var signTransaction = new Method({
        name: 'signTransaction',
        call: 'eth_signTransaction',
        params: 1,
        inputFormatter: [formatters.inputTransactionFormatter]
    });

    var sign = new Method({
        name: 'sign',
        call: 'eth_sign',
        params: 2,
        inputFormatter: [formatters.inputAddressFormatter, null]
    });

    var call = new Method({
        name: 'call',
        call: 'eth_call',
        params: 2,
        inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
    });

    var estimateGas = new Method({
        name: 'estimateGas',
        call: 'eth_estimateGas',
        params: 1,
        inputFormatter: [formatters.inputCallFormatter],
        outputFormatter: utils.toDecimal
    });

    var compileSolidity = new Method({
        name: 'compile.solidity',
        call: 'eth_compileSolidity',
        params: 1
    });

    var compileLLL = new Method({
        name: 'compile.lll',
        call: 'eth_compileLLL',
        params: 1
    });

    var compileSerpent = new Method({
        name: 'compile.serpent',
        call: 'eth_compileSerpent',
        params: 1
    });

    var submitWork = new Method({
        name: 'submitWork',
        call: 'eth_submitWork',
        params: 3
    });

    var getWork = new Method({
        name: 'getWork',
        call: 'eth_getWork',
        params: 0
    });

    return [
        getBalance,
        getStorageAt,
        getCode,
        getBlock,
        getUncle,
        getCompilers,
        getBlockTransactionCount,
        getBlockUncleCount,
        getTransaction,
        getTransactionFromBlock,
        getTransactionReceipt,
        getTransactionCount,
        call,
        estimateGas,
        sendRawTransaction,
        signTransaction,
        sendTransaction,
        sign,
        compileSolidity,
        compileLLL,
        compileSerpent,
        submitWork,
        getWork
    ];
};


var properties = function () {
    return [
        new Property({
            name: 'coinbase',
            getter: 'eth_coinbase'
        }),
        new Property({
            name: 'mining',
            getter: 'eth_mining'
        }),
        new Property({
            name: 'hashrate',
            getter: 'eth_hashrate',
            outputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'syncing',
            getter: 'eth_syncing',
            outputFormatter: formatters.outputSyncingFormatter
        }),
        new Property({
            name: 'gasPrice',
            getter: 'eth_gasPrice',
            outputFormatter: formatters.outputBigNumberFormatter
        }),
        new Property({
            name: 'accounts',
            getter: 'eth_accounts'
        }),
        new Property({
            name: 'blockNumber',
            getter: 'eth_blockNumber',
            outputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'protocolVersion',
            getter: 'eth_protocolVersion'
        })
    ];
};

Eth.prototype.contract = function (abi) {
    var factory = new Contract(this, abi);
    return factory;
};

Eth.prototype.filter = function (options, callback, filterCreationErrorCallback) {
    return new Filter(options, 'eth', this._requestManager, watches.eth(), formatters.outputLogFormatter, callback, filterCreationErrorCallback);
};

Eth.prototype.namereg = function () {
    return this.contract(namereg.global.abi).at(namereg.global.address);
};

Eth.prototype.icapNamereg = function () {
    return this.contract(namereg.icap.abi).at(namereg.icap.address);
};

Eth.prototype.isSyncing = function (callback) {
    return new IsSyncing(this._requestManager, callback);
};

module.exports = Eth;


/***/ }),
/* 1116 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file eth.js
 * @authors:
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var utils = __webpack_require__(17);
var Property = __webpack_require__(102);

var Net = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    properties().forEach(function(p) { 
        p.attachToObject(self);
        p.setRequestManager(web3._requestManager);
    });
};

/// @returns an array of objects describing web3.eth api properties
var properties = function () {
    return [
        new Property({
            name: 'listening',
            getter: 'net_listening'
        }),
        new Property({
            name: 'peerCount',
            getter: 'net_peerCount',
            outputFormatter: utils.toDecimal
        })
    ];
};

module.exports = Net;


/***/ }),
/* 1117 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file eth.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */



var Method = __webpack_require__(83);
var Property = __webpack_require__(102);
var formatters = __webpack_require__(68);

function Personal(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });
}

var methods = function () {
    var newAccount = new Method({
        name: 'newAccount',
        call: 'personal_newAccount',
        params: 1,
        inputFormatter: [null]
    });

    var importRawKey = new Method({
        name: 'importRawKey',
		call: 'personal_importRawKey',
		params: 2
    });

    var sign = new Method({
        name: 'sign',
		call: 'personal_sign',
		params: 3,
		inputFormatter: [null, formatters.inputAddressFormatter, null]
    });

    var ecRecover = new Method({
        name: 'ecRecover',
		call: 'personal_ecRecover',
		params: 2
    });

    var unlockAccount = new Method({
        name: 'unlockAccount',
        call: 'personal_unlockAccount',
        params: 3,
        inputFormatter: [formatters.inputAddressFormatter, null, null]
    });

    var sendTransaction = new Method({
        name: 'sendTransaction',
        call: 'personal_sendTransaction',
        params: 2,
        inputFormatter: [formatters.inputTransactionFormatter, null]
    });

    var lockAccount = new Method({
        name: 'lockAccount',
        call: 'personal_lockAccount',
        params: 1,
        inputFormatter: [formatters.inputAddressFormatter]
    });

    return [
        newAccount,
        importRawKey,
        unlockAccount,
        ecRecover,
        sign,
        sendTransaction,
        lockAccount
    ];
};

var properties = function () {
    return [
        new Property({
            name: 'listAccounts',
            getter: 'personal_listAccounts'
        })
    ];
};


module.exports = Personal;


/***/ }),
/* 1118 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file shh.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 *   Marek Kotewicz <marek@ethcore.io>
 * @date 2017
 */

var Method = __webpack_require__(83);
var Filter = __webpack_require__(171);
var watches = __webpack_require__(173);

var Shh = function (web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });
};

Shh.prototype.newMessageFilter = function (options, callback, filterCreationErrorCallback) {
    return new Filter(options, 'shh', this._requestManager, watches.shh(), null, callback, filterCreationErrorCallback);
};

var methods = function () {

    return [
        new Method({
            name: 'version',
            call: 'shh_version',
            params: 0
        }),
        new Method({
            name: 'info',
            call: 'shh_info',
            params: 0
        }),
        new Method({
            name: 'setMaxMessageSize',
            call: 'shh_setMaxMessageSize',
            params: 1
        }),
        new Method({
            name: 'setMinPoW',
            call: 'shh_setMinPoW',
            params: 1
        }),
        new Method({
            name: 'markTrustedPeer',
            call: 'shh_markTrustedPeer',
            params: 1
        }),
        new Method({
            name: 'newKeyPair',
            call: 'shh_newKeyPair',
            params: 0
        }),
        new Method({
            name: 'addPrivateKey',
            call: 'shh_addPrivateKey',
            params: 1
        }),
        new Method({
            name: 'deleteKeyPair',
            call: 'shh_deleteKeyPair',
            params: 1
        }),
        new Method({
            name: 'hasKeyPair',
            call: 'shh_hasKeyPair',
            params: 1
        }),
        new Method({
            name: 'getPublicKey',
            call: 'shh_getPublicKey',
            params: 1
        }),
        new Method({
            name: 'getPrivateKey',
            call: 'shh_getPrivateKey',
            params: 1
        }),
        new Method({
            name: 'newSymKey',
            call: 'shh_newSymKey',
            params: 0
        }),
        new Method({
            name: 'addSymKey',
            call: 'shh_addSymKey',
            params: 1
        }),
        new Method({
            name: 'generateSymKeyFromPassword',
            call: 'shh_generateSymKeyFromPassword',
            params: 1
        }),
        new Method({
            name: 'hasSymKey',
            call: 'shh_hasSymKey',
            params: 1
        }),
        new Method({
            name: 'getSymKey',
            call: 'shh_getSymKey',
            params: 1
        }),
        new Method({
            name: 'deleteSymKey',
            call: 'shh_deleteSymKey',
            params: 1
        }),

        // subscribe and unsubscribe missing

        new Method({
            name: 'post',
            call: 'shh_post',
            params: 1,
            inputFormatter: [null]
        })
    ];
};

module.exports = Shh;



/***/ }),
/* 1119 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file bzz.js
 * @author Alex Beregszaszi <alex@rtfs.hu>
 * @date 2016
 *
 * Reference: https://github.com/ethereum/go-ethereum/blob/swarm/internal/web3ext/web3ext.go#L33
 */



var Method = __webpack_require__(83);
var Property = __webpack_require__(102);

function Swarm(web3) {
    this._requestManager = web3._requestManager;

    var self = this;

    methods().forEach(function(method) {
        method.attachToObject(self);
        method.setRequestManager(self._requestManager);
    });

    properties().forEach(function(p) {
        p.attachToObject(self);
        p.setRequestManager(self._requestManager);
    });
}

var methods = function () {
    var blockNetworkRead = new Method({
        name: 'blockNetworkRead',
        call: 'bzz_blockNetworkRead',
        params: 1,
        inputFormatter: [null]
    });

    var syncEnabled = new Method({
        name: 'syncEnabled',
        call: 'bzz_syncEnabled',
        params: 1,
        inputFormatter: [null]
    });

    var swapEnabled = new Method({
        name: 'swapEnabled',
        call: 'bzz_swapEnabled',
        params: 1,
        inputFormatter: [null]
    });

    var download = new Method({
        name: 'download',
        call: 'bzz_download',
        params: 2,
        inputFormatter: [null, null]
    });

    var upload = new Method({
        name: 'upload',
        call: 'bzz_upload',
        params: 2,
        inputFormatter: [null, null]
    });

    var retrieve = new Method({
        name: 'retrieve',
        call: 'bzz_retrieve',
        params: 1,
        inputFormatter: [null]
    });

    var store = new Method({
        name: 'store',
        call: 'bzz_store',
        params: 2,
        inputFormatter: [null, null]
    });

    var get = new Method({
        name: 'get',
        call: 'bzz_get',
        params: 1,
        inputFormatter: [null]
    });

    var put = new Method({
        name: 'put',
        call: 'bzz_put',
        params: 2,
        inputFormatter: [null, null]
    });

    var modify = new Method({
        name: 'modify',
        call: 'bzz_modify',
        params: 4,
        inputFormatter: [null, null, null, null]
    });

    return [
        blockNetworkRead,
        syncEnabled,
        swapEnabled,
        download,
        upload,
        retrieve,
        store,
        get,
        put,
        modify
    ];
};

var properties = function () {
    return [
        new Property({
            name: 'hive',
            getter: 'bzz_hive'
        }),
        new Property({
            name: 'info',
            getter: 'bzz_info'
        })
    ];
};


module.exports = Swarm;


/***/ }),
/* 1120 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file namereg.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var globalRegistrarAbi = __webpack_require__(1234);
var icapRegistrarAbi= __webpack_require__(1235);

var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';

module.exports = {
    global: {
        abi: globalRegistrarAbi,
        address: globalNameregAddress
    },
    icap: {
        abi: icapRegistrarAbi,
        address: icapNameregAddress
    }
};



/***/ }),
/* 1121 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file requestmanager.js
 * @author Jeffrey Wilcke <jeff@ethdev.com>
 * @author Marek Kotewicz <marek@ethdev.com>
 * @author Marian Oancea <marian@ethdev.com>
 * @author Fabian Vogelsteller <fabian@ethdev.com>
 * @author Gav Wood <g@ethdev.com>
 * @date 2014
 */

var Jsonrpc = __webpack_require__(434);
var utils = __webpack_require__(17);
var c = __webpack_require__(170);
var errors = __webpack_require__(101);

/**
 * It's responsible for passing messages to providers
 * It's also responsible for polling the ethereum node for incoming messages
 * Default poll timeout is 1 second
 * Singleton
 */
var RequestManager = function (provider) {
    this.provider = provider;
    this.polls = {};
    this.timeout = null;
};

/**
 * Should be used to synchronously send request
 *
 * @method send
 * @param {Object} data
 * @return {Object}
 */
RequestManager.prototype.send = function (data) {
    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return null;
    }

    var payload = Jsonrpc.toPayload(data.method, data.params);
    var result = this.provider.send(payload);

    if (!Jsonrpc.isValidResponse(result)) {
        throw errors.InvalidResponse(result);
    }

    return result.result;
};

/**
 * Should be used to asynchronously send request
 *
 * @method sendAsync
 * @param {Object} data
 * @param {Function} callback
 */
RequestManager.prototype.sendAsync = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toPayload(data.method, data.params);
    this.provider.sendAsync(payload, function (err, result) {
        if (err) {
            return callback(err);
        }
        
        if (!Jsonrpc.isValidResponse(result)) {
            return callback(errors.InvalidResponse(result));
        }

        callback(null, result.result);
    });
};

/**
 * Should be called to asynchronously send batch request
 *
 * @method sendBatch
 * @param {Array} batch data
 * @param {Function} callback
 */
RequestManager.prototype.sendBatch = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toBatchPayload(data);

    this.provider.sendAsync(payload, function (err, results) {
        if (err) {
            return callback(err);
        }

        if (!utils.isArray(results)) {
            return callback(errors.InvalidResponse(results));
        }

        callback(err, results);
    }); 
};

/**
 * Should be used to set provider of request manager
 *
 * @method setProvider
 * @param {Object}
 */
RequestManager.prototype.setProvider = function (p) {
    this.provider = p;
};

/**
 * Should be used to start polling
 *
 * @method startPolling
 * @param {Object} data
 * @param {Number} pollId
 * @param {Function} callback
 * @param {Function} uninstall
 *
 * @todo cleanup number of params
 */
RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) {
    this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall};


    // start polling
    if (!this.timeout) {
        this.poll();
    }
};

/**
 * Should be used to stop polling for filter with given id
 *
 * @method stopPolling
 * @param {Number} pollId
 */
RequestManager.prototype.stopPolling = function (pollId) {
    delete this.polls[pollId];

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to reset the polling mechanism of the request manager
 *
 * @method reset
 */
RequestManager.prototype.reset = function (keepIsSyncing) {
    /*jshint maxcomplexity:5 */

    for (var key in this.polls) {
        // remove all polls, except sync polls,
        // they need to be removed manually by calling syncing.stopWatching()
        if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) {
            this.polls[key].uninstall();
            delete this.polls[key];
        }
    }

    // stop polling
    if(Object.keys(this.polls).length === 0 && this.timeout) {
        clearTimeout(this.timeout);
        this.timeout = null;
    }
};

/**
 * Should be called to poll for changes on filter with given id
 *
 * @method poll
 */
RequestManager.prototype.poll = function () {
    /*jshint maxcomplexity: 6 */
    this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT);

    if (Object.keys(this.polls).length === 0) {
        return;
    }

    if (!this.provider) {
        console.error(errors.InvalidProvider());
        return;
    }

    var pollsData = [];
    var pollsIds = [];
    for (var key in this.polls) {
        pollsData.push(this.polls[key].data);
        pollsIds.push(key);
    }

    if (pollsData.length === 0) {
        return;
    }

    var payload = Jsonrpc.toBatchPayload(pollsData);
    
    // map the request id to they poll id
    var pollsIdMap = {};
    payload.forEach(function(load, index){
        pollsIdMap[load.id] = pollsIds[index];
    });


    var self = this;
    this.provider.sendAsync(payload, function (error, results) {


        // TODO: console log?
        if (error) {
            return;
        }

        if (!utils.isArray(results)) {
            throw errors.InvalidResponse(results);
        }
        results.map(function (result) {
            var id = pollsIdMap[result.id];

            // make sure the filter is still installed after arrival of the request
            if (self.polls[id]) {
                result.callback = self.polls[id].callback;
                return result;
            } else
                return false;
        }).filter(function (result) {
            return !!result; 
        }).filter(function (result) {
            var valid = Jsonrpc.isValidResponse(result);
            if (!valid) {
                result.callback(errors.InvalidResponse(result));
            }
            return valid;
        }).forEach(function (result) {
            result.callback(null, result.result);
        });
    });
};

module.exports = RequestManager;



/***/ }),
/* 1122 */
/***/ (function(module, exports) {



var Settings = function () {
    this.defaultBlock = 'latest';
    this.defaultAccount = undefined;
};

module.exports = Settings;



/***/ }),
/* 1123 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file syncing.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethdev.com>
 * @date 2015
 */

var formatters = __webpack_require__(68);
var utils = __webpack_require__(17);

var count = 1;

/**
Adds the callback and sets up the methods, to iterate over the results.

@method pollSyncing
@param {Object} self
*/
var pollSyncing = function(self) {

    var onMessage = function (error, sync) {
        if (error) {
            return self.callbacks.forEach(function (callback) {
                callback(error);
            });
        }

        if(utils.isObject(sync) && sync.startingBlock)
            sync = formatters.outputSyncingFormatter(sync);

        self.callbacks.forEach(function (callback) {
            if (self.lastSyncState !== sync) {
                
                // call the callback with true first so the app can stop anything, before receiving the sync data
                if(!self.lastSyncState && utils.isObject(sync))
                    callback(null, true);
                
                // call on the next CPU cycle, so the actions of the sync stop can be processes first
                setTimeout(function() {
                    callback(null, sync);
                }, 0);
                
                self.lastSyncState = sync;
            }
        });
    };

    self.requestManager.startPolling({
        method: 'eth_syncing',
        params: [],
    }, self.pollId, onMessage, self.stopWatching.bind(self));

};

var IsSyncing = function (requestManager, callback) {
    this.requestManager = requestManager;
    this.pollId = 'syncPoll_'+ count++;
    this.callbacks = [];
    this.addCallback(callback);
    this.lastSyncState = false;
    pollSyncing(this);

    return this;
};

IsSyncing.prototype.addCallback = function (callback) {
    if(callback)
        this.callbacks.push(callback);
    return this;
};

IsSyncing.prototype.stopWatching = function () {
    this.requestManager.stopPolling(this.pollId);
    this.callbacks = [];
};

module.exports = IsSyncing;



/***/ }),
/* 1124 */
/***/ (function(module, exports, __webpack_require__) {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file transfer.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */

var Iban = __webpack_require__(172);
var exchangeAbi = __webpack_require__(1236);

/**
 * Should be used to make Iban transfer
 *
 * @method transfer
 * @param {String} from
 * @param {String} to iban
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transfer = function (eth, from, to, value, callback) {
    var iban = new Iban(to); 
    if (!iban.isValid()) {
        throw new Error('invalid iban address');
    }

    if (iban.isDirect()) {
        return transferToAddress(eth, from, iban.address(), value, callback);
    }
    
    if (!callback) {
        var address = eth.icapNamereg().addr(iban.institution());
        return deposit(eth, from, address, value, iban.client());
    }

    eth.icapNamereg().addr(iban.institution(), function (err, address) {
        return deposit(eth, from, address, value, iban.client(), callback);
    });
    
};

/**
 * Should be used to transfer funds to certain address
 *
 * @method transferToAddress
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be tranfered
 * @param {Function} callback, callback
 */
var transferToAddress = function (eth, from, to, value, callback) {
    return eth.sendTransaction({
        address: to,
        from: from,
        value: value
    }, callback);
};

/**
 * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!)
 *
 * @method deposit
 * @param {String} from
 * @param {String} to
 * @param {Value} value to be transfered
 * @param {String} client unique identifier
 * @param {Function} callback, callback
 */
var deposit = function (eth, from, to, value, client, callback) {
    var abi = exchangeAbi;
    return eth.contract(abi).at(to).deposit(client, {
        from: from,
        value: value
    }, callback);
};

module.exports = transfer;



/***/ }),
/* 1125 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = which
which.sync = whichSync

var isWindows = process.platform === 'win32' ||
    process.env.OSTYPE === 'cygwin' ||
    process.env.OSTYPE === 'msys'

var path = __webpack_require__(0)
var COLON = isWindows ? ';' : ':'
var isexe = __webpack_require__(906)

function getNotFoundError (cmd) {
  var er = new Error('not found: ' + cmd)
  er.code = 'ENOENT'

  return er
}

function getPathInfo (cmd, opt) {
  var colon = opt.colon || COLON
  var pathEnv = opt.path || process.env.PATH || ''
  var pathExt = ['']

  pathEnv = pathEnv.split(colon)

  var pathExtExe = ''
  if (isWindows) {
    pathEnv.unshift(process.cwd())
    pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
    pathExt = pathExtExe.split(colon)


    // Always test the cmd itself first.  isexe will check to make sure
    // it's found in the pathExt set.
    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
      pathExt.unshift('')
  }

  // If it has a slash, then we don't bother searching the pathenv.
  // just check the file itself, and that's it.
  if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
    pathEnv = ['']

  return {
    env: pathEnv,
    ext: pathExt,
    extExe: pathExtExe
  }
}

function which (cmd, opt, cb) {
  if (typeof opt === 'function') {
    cb = opt
    opt = {}
  }

  var info = getPathInfo(cmd, opt)
  var pathEnv = info.env
  var pathExt = info.ext
  var pathExtExe = info.extExe
  var found = []

  ;(function F (i, l) {
    if (i === l) {
      if (opt.all && found.length)
        return cb(null, found)
      else
        return cb(getNotFoundError(cmd))
    }

    var pathPart = pathEnv[i]
    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
      pathPart = pathPart.slice(1, -1)

    var p = path.join(pathPart, cmd)
    if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
      p = cmd.slice(0, 2) + p
    }
    ;(function E (ii, ll) {
      if (ii === ll) return F(i + 1, l)
      var ext = pathExt[ii]
      isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
        if (!er && is) {
          if (opt.all)
            found.push(p + ext)
          else
            return cb(null, p + ext)
        }
        return E(ii + 1, ll)
      })
    })(0, pathExt.length)
  })(0, pathEnv.length)
}

function whichSync (cmd, opt) {
  opt = opt || {}

  var info = getPathInfo(cmd, opt)
  var pathEnv = info.env
  var pathExt = info.ext
  var pathExtExe = info.extExe
  var found = []

  for (var i = 0, l = pathEnv.length; i < l; i ++) {
    var pathPart = pathEnv[i]
    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
      pathPart = pathPart.slice(1, -1)

    var p = path.join(pathPart, cmd)
    if (!pathPart && /^\.[\\\/]/.test(cmd)) {
      p = cmd.slice(0, 2) + p
    }
    for (var j = 0, ll = pathExt.length; j < ll; j ++) {
      var cur = p + pathExt[j]
      var is
      try {
        is = isexe.sync(cur, { pathExt: pathExtExe })
        if (is) {
          if (opt.all)
            found.push(cur)
          else
            return cur
        }
      } catch (ex) {}
    }
  }

  if (opt.all && found.length)
    return found

  if (opt.nothrow)
    return null

  throw getNotFoundError(cmd)
}


/***/ }),
/* 1126 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var stringWidth = __webpack_require__(423);
var stripAnsi = __webpack_require__(243);

var ESCAPES = [
	'\u001b',
	'\u009b'
];

var END_CODE = 39;

var ESCAPE_CODES = {
	0: 0,
	1: 22,
	2: 22,
	3: 23,
	4: 24,
	7: 27,
	8: 28,
	9: 29,
	30: 39,
	31: 39,
	32: 39,
	33: 39,
	34: 39,
	35: 39,
	36: 39,
	37: 39,
	90: 39,
	40: 49,
	41: 49,
	42: 49,
	43: 49,
	44: 49,
	45: 49,
	46: 49,
	47: 49
};

function wrapAnsi(code) {
	return ESCAPES[0] + '[' + code + 'm';
}

// calculate the length of words split on ' ', ignoring
// the extra characters added by ansi escape codes.
function wordLengths(str) {
	return str.split(' ').map(function (s) {
		return stringWidth(s);
	});
}

// wrap a long word across multiple rows.
// ansi escape codes do not count towards length.
function wrapWord(rows, word, cols) {
	var insideEscape = false;
	var visible = stripAnsi(rows[rows.length - 1]).length;

	for (var i = 0; i < word.length; i++) {
		var x = word[i];

		rows[rows.length - 1] += x;

		if (ESCAPES.indexOf(x) !== -1) {
			insideEscape = true;
		} else if (insideEscape && x === 'm') {
			insideEscape = false;
			continue;
		}

		if (insideEscape) {
			continue;
		}

		visible++;

		if (visible >= cols && i < word.length - 1) {
			rows.push('');
			visible = 0;
		}
	}

	// it's possible that the last row we copy over is only
	// ansi escape characters, handle this edge-case.
	if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {
		rows[rows.length - 2] += rows.pop();
	}
}

// the wrap-ansi module can be invoked
// in either 'hard' or 'soft' wrap mode.
//
// 'hard' will never allow a string to take up more
// than cols characters.
//
// 'soft' allows long words to expand past the column length.
function exec(str, cols, opts) {
	var options = opts || {};

	var pre = '';
	var ret = '';
	var escapeCode;

	var lengths = wordLengths(str);
	var words = str.split(' ');
	var rows = [''];

	for (var i = 0, word; (word = words[i]) !== undefined; i++) {
		var rowLength = stringWidth(rows[rows.length - 1]);

		if (rowLength) {
			rows[rows.length - 1] += ' ';
			rowLength++;
		}

		// in 'hard' wrap mode, the length of a line is
		// never allowed to extend past 'cols'.
		if (lengths[i] > cols && options.hard) {
			if (rowLength) {
				rows.push('');
			}
			wrapWord(rows, word, cols);
			continue;
		}

		if (rowLength + lengths[i] > cols && rowLength > 0) {
			if (options.wordWrap === false && rowLength < cols) {
				wrapWord(rows, word, cols);
				continue;
			}

			rows.push('');
		}

		rows[rows.length - 1] += word;
	}

	pre = rows.map(function (r) {
		return r.trim();
	}).join('\n');

	for (var j = 0; j < pre.length; j++) {
		var y = pre[j];

		ret += y;

		if (ESCAPES.indexOf(y) !== -1) {
			var code = parseFloat(/[0-9][^m]*/.exec(pre.slice(j, j + 4)));
			escapeCode = code === END_CODE ? null : code;
		}

		if (escapeCode && ESCAPE_CODES[escapeCode]) {
			if (pre[j + 1] === '\n') {
				ret += wrapAnsi(ESCAPE_CODES[escapeCode]);
			} else if (y === '\n') {
				ret += wrapAnsi(escapeCode);
			}
		}
	}

	return ret;
}

// for each line break, invoke the method separately.
module.exports = function (str, cols, opts) {
	return String(str).split('\n').map(function (substr) {
		return exec(substr, cols, opts);
	}).join('\n');
};


/***/ }),
/* 1127 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1)
var path = __webpack_require__(0)
var util = __webpack_require__(2)

function Y18N (opts) {
  // configurable options.
  opts = opts || {}
  this.directory = opts.directory || './locales'
  this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true
  this.locale = opts.locale || 'en'
  this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true

  // internal stuff.
  this.cache = {}
  this.writeQueue = []
}

Y18N.prototype.__ = function () {
  var args = Array.prototype.slice.call(arguments)
  var str = args.shift()
  var cb = function () {} // start with noop.

  if (typeof args[args.length - 1] === 'function') cb = args.pop()
  cb = cb || function () {} // noop.

  if (!this.cache[this.locale]) this._readLocaleFile()

  // we've observed a new string, update the language file.
  if (!this.cache[this.locale][str] && this.updateFiles) {
    this.cache[this.locale][str] = str

    // include the current directory and locale,
    // since these values could change before the
    // write is performed.
    this._enqueueWrite([this.directory, this.locale, cb])
  } else {
    cb()
  }

  return util.format.apply(util, [this.cache[this.locale][str] || str].concat(args))
}

Y18N.prototype._enqueueWrite = function (work) {
  this.writeQueue.push(work)
  if (this.writeQueue.length === 1) this._processWriteQueue()
}

Y18N.prototype._processWriteQueue = function () {
  var _this = this
  var work = this.writeQueue[0]

  // destructure the enqueued work.
  var directory = work[0]
  var locale = work[1]
  var cb = work[2]

  var languageFile = this._resolveLocaleFile(directory, locale)
  var serializedLocale = JSON.stringify(this.cache[locale], null, 2)

  fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) {
    _this.writeQueue.shift()
    if (_this.writeQueue.length > 0) _this._processWriteQueue()
    cb(err)
  })
}

Y18N.prototype._readLocaleFile = function () {
  var localeLookup = {}
  var languageFile = this._resolveLocaleFile(this.directory, this.locale)

  try {
    localeLookup = JSON.parse(fs.readFileSync(languageFile, 'utf-8'))
  } catch (err) {
    if (err instanceof SyntaxError) {
      err.message = 'syntax error in ' + languageFile
    }

    if (err.code === 'ENOENT') localeLookup = {}
    else throw err
  }

  this.cache[this.locale] = localeLookup
}

Y18N.prototype._resolveLocaleFile = function (directory, locale) {
  var file = path.resolve(directory, './', locale + '.json')
  if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) {
    // attempt fallback to language only
    var languageFile = path.resolve(directory, './', locale.split('_')[0] + '.json')
    if (this._fileExistsSync(languageFile)) file = languageFile
  }
  return file
}

// this only exists because fs.existsSync() "will be deprecated"
// see https://nodejs.org/api/fs.html#fs_fs_existssync_path
Y18N.prototype._fileExistsSync = function (file) {
  try {
    return fs.statSync(file).isFile()
  } catch (err) {
    return false
  }
}

Y18N.prototype.__n = function () {
  var args = Array.prototype.slice.call(arguments)
  var singular = args.shift()
  var plural = args.shift()
  var quantity = args.shift()

  var cb = function () {} // start with noop.
  if (typeof args[args.length - 1] === 'function') cb = args.pop()

  if (!this.cache[this.locale]) this._readLocaleFile()

  var str = quantity === 1 ? singular : plural
  if (this.cache[this.locale][singular]) {
    str = this.cache[this.locale][singular][quantity === 1 ? 'one' : 'other']
  }

  // we've observed a new string, update the language file.
  if (!this.cache[this.locale][singular] && this.updateFiles) {
    this.cache[this.locale][singular] = {
      one: singular,
      other: plural
    }

    // include the current directory and locale,
    // since these values could change before the
    // write is performed.
    this._enqueueWrite([this.directory, this.locale, cb])
  } else {
    cb()
  }

  // if a %d placeholder is provided, add quantity
  // to the arguments expanded by util.format.
  var values = [str]
  if (~str.indexOf('%d')) values.push(quantity)

  return util.format.apply(util, values.concat(args))
}

Y18N.prototype.setLocale = function (locale) {
  this.locale = locale
}

Y18N.prototype.getLocale = function () {
  return this.locale
}

Y18N.prototype.updateLocale = function (obj) {
  if (!this.cache[this.locale]) this._readLocaleFile()

  for (var key in obj) {
    this.cache[this.locale][key] = obj[key]
  }
}

module.exports = function (opts) {
  var y18n = new Y18N(opts)

  // bind all functions to y18n, so that
  // they can be used in isolation.
  for (var key in y18n) {
    if (typeof y18n[key] === 'function') {
      y18n[key] = y18n[key].bind(y18n)
    }
  }

  return y18n
}


/***/ }),
/* 1128 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(439);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 1129 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(1128);
} else {
  module.exports = __webpack_require__(1130);
}


/***/ }),
/* 1130 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(439);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 1131 */
/***/ (function(module, exports, __webpack_require__) {

var utils = __webpack_require__(1133);
var tmp = __webpack_require__(425);
var path = __webpack_require__(0);

var Config = __webpack_require__(9);

var Box = {
  unbox: function(url, destination, options) {
    options = options || {};
    options.logger = options.logger || {log: function() {}}

    return Promise.resolve()
      .then(function() {
        options.logger.log("Downloading...");
        return utils.downloadBox(url, destination)
      })
      .then(function() {
        options.logger.log("Unpacking...");
        return utils.unpackBox(destination);
      })
      .then(function(boxConfig) {
        options.logger.log("Setting up...");
        return utils.setupBox(boxConfig, destination)
      })
      .then(function(boxConfig) {
        return boxConfig;
      });
  },

  sandbox: function(name, callback) {
    var self = this;
    if (typeof name === "function") {
      callback = name;
      name = "default";
    }

    tmp.dir(function(err, dir, cleanupCallback) {
      if (err) {
        return callback(err);
      }

      self.unbox("https://github.com/trufflesuite/truffle-init-" + name, dir)
        .then(function() {
          var config = Config.load(path.join(dir, "truffle-config.js"), {});
          callback(null, config);
        })
        .catch(callback);
    });
  }
};

module.exports = Box;


/***/ }),
/* 1132 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(80);

function setDefaults(config) {
  config = config || {};

  var hooks = config.hooks || {};

  return {
    ignore: config.ignore || [],
    commands: config.commands || {
      "compile": "truffle compile",
      "migrate": "truffle migrate",
      "test": "truffle test"
    },
    hooks: {
      "post-unpack": hooks["post-unpack"] || ""
    }
  };
}

function read(path) {
  return fs.readFile(path)
    .catch(function() {
      return "{}";
    })
    .then(JSON.parse)
    .then(setDefaults);
}

module.exports = {
  read: read,
  setDefaults: setDefaults
}


/***/ }),
/* 1133 */
/***/ (function(module, exports, __webpack_require__) {

var unbox = __webpack_require__(1134);

module.exports = {
  downloadBox: function(url, destination) {
    var tmpDir;
    var tmpCleanup;

    return Promise.resolve()
      .then(function() {
        return unbox.checkDestination(destination);
      })
      .then(function() {
        return unbox.verifyURL(url);
      })
      .then(function() {
        return unbox.setupTempDirectory();
      }).then(function(dir, func) {
        // save tmpDir result
        tmpDir = dir;
        tmpCleanup = func;
      })
      .then(function() {
        return unbox.fetchRepository(url, tmpDir);
      })
      .then(function() {
        return unbox.copyTempIntoDestination(tmpDir, destination);
      })
      .then(tmpCleanup);
  },

  unpackBox: function(destination) {
    var boxConfig;

    return Promise.resolve()
      .then(function() {
        return unbox.readBoxConfig(destination)
      })
      .then(function(cfg) {
        boxConfig = cfg;
      })
      .then(function() {
        return unbox.cleanupUnpack(boxConfig, destination);
      })
      .then(function() {
        return boxConfig;
      });
  },

  setupBox: function(boxConfig, destination) {
    return Promise.resolve()
      .then(function() {
        return unbox.installBoxDependencies(boxConfig, destination)
      })
      .then(function() {
        return boxConfig;
      });
  }
}


/***/ }),
/* 1134 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(80);
var path = __webpack_require__(0);
var ghdownload = __webpack_require__(836);
var request = __webpack_require__(408);
var vcsurl = __webpack_require__(431);
var parseURL = __webpack_require__(8).parse;
var tmp = __webpack_require__(425);
var exec = __webpack_require__(39).exec;
var cwd = __webpack_require__(1246).cwd();

var config = __webpack_require__(1132);

function checkDestination(destination) {
  return Promise.resolve().then(function() {

    var contents = fs.readdirSync(destination);
    if (contents.length) {
      var err = "Something already exists at the destination. " +
                "`truffle init` and `truffle unbox` must be executed in an empty folder. " +
                "Stopping to prevent overwriting data."

      throw new Error(err);
    }
  })
}

function verifyURL(url) {
  // Next let's see if the expected repository exists. If it doesn't, ghdownload
  // will fail spectacularly in a way we can't catch, so we have to do it ourselves.
  return new Promise(function(accept, reject) {

    var configURL = parseURL(
      vcsurl(url)
        .replace("github.com", "raw.githubusercontent.com")
        .replace(/#.*/, "") +
        "/master/truffle-box.json"
    );

    var options = {
      method: 'HEAD',
      uri: 'https://' + configURL.host + configURL.path
    };
    request(options, function(error, r) {
      if (error) {
        return reject(new Error(
          "Error making request to " + options.uri + ". Got error: " + error.message +
          ". Please check the format of the requested resource."
        ));
      } else if (r.statusCode == 404) {
        return reject(new Error("Truffle Box at URL " + url + " doesn't exist. If you believe this is an error, please contact Truffle support."));
      } else if (r.statusCode != 200) {
        return reject(new Error("Error connecting to github.com. Please check your internet connection and try again."));
      }
      accept();
    });
  });
}

function setupTempDirectory() {
  return new Promise(function(accept, reject) {
    tmp.dir({dir: cwd, unsafeCleanup: true}, function(err, dir, cleanupCallback) {
      if (err) return reject(err);

      accept(path.join(dir, "box"), cleanupCallback);
    });
  });
}

function fetchRepository(url, dir) {
  return new Promise(function(accept, reject) {
    // Download the package from github.
    ghdownload(url, dir)
      .on('err', function(err) {
        reject(err);
      })
      .on('end', function() {
        accept();
      });
  });
}

function copyTempIntoDestination(tmpDir, destination) {
  return new Promise(function(accept, reject) {
    fs.copy(tmpDir, destination, function(err) {
      if (err) return reject(err);
      accept();
    });
  });
}

function readBoxConfig(destination) {
  var possibleConfigs = [
    path.join(destination, "truffle-box.json"),
    path.join(destination, "truffle-init.json")
  ];

  var configPath = possibleConfigs.reduce(function(path, alt) {
    return path || fs.existsSync(alt) && alt;
  }, undefined);

  return config.read(configPath);
}

function cleanupUnpack(boxConfig, destination) {
  var needingRemoval = boxConfig.ignore || [];

  // remove box config file
  needingRemoval.push("truffle-box.json");
  needingRemoval.push("truffle-init.json");

  var promises = needingRemoval.map(function(file_path) {
    return path.join(destination, file_path);
  }).map(function(file_path) {
    return new Promise(function(accept, reject) {
      fs.remove(file_path, function(err) {
        if (err) return reject(err);
        accept();
      });
    });
  });

  return Promise.all(promises);
}

function installBoxDependencies(boxConfig, destination) {
  var postUnpack = boxConfig.hooks['post-unpack']

  return new Promise(function(accept, reject) {
    if (postUnpack.length === 0) {
      return accept();
    }

    exec(postUnpack, {cwd: destination}, function(err, stdout, stderr) {
      if (err) return reject(err);
      accept(stdout, stderr);
    });
  });
}

module.exports = {
  checkDestination: checkDestination,
  verifyURL: verifyURL,
  setupTempDirectory: setupTempDirectory,
  fetchRepository: fetchRepository,
  copyTempIntoDestination: copyTempIntoDestination,
  readBoxConfig: readBoxConfig,
  cleanupUnpack: cleanupUnpack,
  installBoxDependencies: installBoxDependencies
}


/***/ }),
/* 1135 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var codes = {
  // 0x0 range - arithmetic ops
  // name, baseCost, off stack, on stack, dynamic
  0x00: ['STOP', 0, 0, 0, false],
  0x01: ['ADD', 3, 2, 1, false],
  0x02: ['MUL', 5, 2, 1, false],
  0x03: ['SUB', 3, 2, 1, false],
  0x04: ['DIV', 5, 2, 1, false],
  0x05: ['SDIV', 5, 2, 1, false],
  0x06: ['MOD', 5, 2, 1, false],
  0x07: ['SMOD', 5, 2, 1, false],
  0x08: ['ADDMOD', 8, 3, 1, false],
  0x09: ['MULMOD', 8, 3, 1, false],
  0x0a: ['EXP', 10, 2, 1, false],
  0x0b: ['SIGNEXTEND', 5, 1, 1, false],

  // 0x10 range - bit ops
  0x10: ['LT', 3, 2, 1, false],
  0x11: ['GT', 3, 2, 1, false],
  0x12: ['SLT', 3, 2, 1, false],
  0x13: ['SGT', 3, 2, 1, false],
  0x14: ['EQ', 3, 2, 1, false],
  0x15: ['ISZERO', 3, 1, 1, false],
  0x16: ['AND', 3, 2, 1, false],
  0x17: ['OR', 3, 2, 1, false],
  0x18: ['XOR', 3, 2, 1, false],
  0x19: ['NOT', 3, 1, 1, false],
  0x1a: ['BYTE', 3, 2, 1, false],

  // 0x20 range - crypto
  0x20: ['SHA3', 30, 2, 1, false],

  // 0x30 range - closure state
  0x30: ['ADDRESS', 2, 0, 1, true],
  0x31: ['BALANCE', 20, 1, 1, true],
  0x32: ['ORIGIN', 2, 0, 1, true],
  0x33: ['CALLER', 2, 0, 1, true],
  0x34: ['CALLVALUE', 2, 0, 1, true],
  0x35: ['CALLDATALOAD', 3, 1, 1, true],
  0x36: ['CALLDATASIZE', 2, 0, 1, true],
  0x37: ['CALLDATACOPY', 3, 3, 0, true],
  0x38: ['CODESIZE', 2, 0, 1, false],
  0x39: ['CODECOPY', 3, 3, 0, false],
  0x3a: ['GASPRICE', 2, 0, 1, false],
  0x3b: ['EXTCODESIZE', 20, 1, 1, true],
  0x3c: ['EXTCODECOPY', 20, 4, 0, true],

  // '0x40' range - block operations
  0x40: ['BLOCKHASH', 20, 1, 1, true],
  0x41: ['COINBASE', 2, 0, 1, true],
  0x42: ['TIMESTAMP', 2, 0, 1, true],
  0x43: ['NUMBER', 2, 0, 1, true],
  0x44: ['DIFFICULTY', 2, 0, 1, true],
  0x45: ['GASLIMIT', 2, 0, 1, true],

  // 0x50 range - 'storage' and execution
  0x50: ['POP', 2, 1, 0, false],
  0x51: ['MLOAD', 3, 1, 1, false],
  0x52: ['MSTORE', 3, 2, 0, false],
  0x53: ['MSTORE8', 3, 2, 0, false],
  0x54: ['SLOAD', 50, 1, 1, true],
  0x55: ['SSTORE', 0, 2, 0, true],
  0x56: ['JUMP', 8, 1, 0, false],
  0x57: ['JUMPI', 10, 2, 0, false],
  0x58: ['PC', 2, 0, 1, false],
  0x59: ['MSIZE', 2, 0, 1, false],
  0x5a: ['GAS', 2, 0, 1, false],
  0x5b: ['JUMPDEST', 1, 0, 0, false],

  // 0x60, range
  0x60: ['PUSH1', 3, 0, 1, false],
  0x61: ['PUSH2', 3, 0, 1, false],
  0x62: ['PUSH3', 3, 0, 1, false],
  0x63: ['PUSH4', 3, 0, 1, false],
  0x64: ['PUSH5', 3, 0, 1, false],
  0x65: ['PUSH6', 3, 0, 1, false],
  0x66: ['PUSH7', 3, 0, 1, false],
  0x67: ['PUSH8', 3, 0, 1, false],
  0x68: ['PUSH9', 3, 0, 1, false],
  0x69: ['PUSH10', 3, 0, 1, false],
  0x6a: ['PUSH11', 3, 0, 1, false],
  0x6b: ['PUSH12', 3, 0, 1, false],
  0x6c: ['PUSH13', 3, 0, 1, false],
  0x6d: ['PUSH14', 3, 0, 1, false],
  0x6e: ['PUSH15', 3, 0, 1, false],
  0x6f: ['PUSH16', 3, 0, 1, false],
  0x70: ['PUSH17', 3, 0, 1, false],
  0x71: ['PUSH18', 3, 0, 1, false],
  0x72: ['PUSH19', 3, 0, 1, false],
  0x73: ['PUSH20', 3, 0, 1, false],
  0x74: ['PUSH21', 3, 0, 1, false],
  0x75: ['PUSH22', 3, 0, 1, false],
  0x76: ['PUSH23', 3, 0, 1, false],
  0x77: ['PUSH24', 3, 0, 1, false],
  0x78: ['PUSH25', 3, 0, 1, false],
  0x79: ['PUSH26', 3, 0, 1, false],
  0x7a: ['PUSH27', 3, 0, 1, false],
  0x7b: ['PUSH28', 3, 0, 1, false],
  0x7c: ['PUSH29', 3, 0, 1, false],
  0x7d: ['PUSH30', 3, 0, 1, false],
  0x7e: ['PUSH31', 3, 0, 1, false],
  0x7f: ['PUSH32', 3, 0, 1, false],

  0x80: ['DUP1', 3, 0, 1, false],
  0x81: ['DUP2', 3, 0, 1, false],
  0x82: ['DUP3', 3, 0, 1, false],
  0x83: ['DUP4', 3, 0, 1, false],
  0x84: ['DUP5', 3, 0, 1, false],
  0x85: ['DUP6', 3, 0, 1, false],
  0x86: ['DUP7', 3, 0, 1, false],
  0x87: ['DUP8', 3, 0, 1, false],
  0x88: ['DUP9', 3, 0, 1, false],
  0x89: ['DUP10', 3, 0, 1, false],
  0x8a: ['DUP11', 3, 0, 1, false],
  0x8b: ['DUP12', 3, 0, 1, false],
  0x8c: ['DUP13', 3, 0, 1, false],
  0x8d: ['DUP14', 3, 0, 1, false],
  0x8e: ['DUP15', 3, 0, 1, false],
  0x8f: ['DUP16', 3, 0, 1, false],

  0x90: ['SWAP1', 3, 0, 0, false],
  0x91: ['SWAP2', 3, 0, 0, false],
  0x92: ['SWAP3', 3, 0, 0, false],
  0x93: ['SWAP4', 3, 0, 0, false],
  0x94: ['SWAP5', 3, 0, 0, false],
  0x95: ['SWAP6', 3, 0, 0, false],
  0x96: ['SWAP7', 3, 0, 0, false],
  0x97: ['SWAP8', 3, 0, 0, false],
  0x98: ['SWAP9', 3, 0, 0, false],
  0x99: ['SWAP10', 3, 0, 0, false],
  0x9a: ['SWAP11', 3, 0, 0, false],
  0x9b: ['SWAP12', 3, 0, 0, false],
  0x9c: ['SWAP13', 3, 0, 0, false],
  0x9d: ['SWAP14', 3, 0, 0, false],
  0x9e: ['SWAP15', 3, 0, 0, false],
  0x9f: ['SWAP16', 3, 0, 0, false],

  0xa0: ['LOG0', 375, 2, 0, false],
  0xa1: ['LOG1', 375, 3, 0, false],
  0xa2: ['LOG2', 375, 4, 0, false],
  0xa3: ['LOG3', 375, 5, 0, false],
  0xa4: ['LOG4', 375, 6, 0, false],

  // '0xf0' range - closures
  0xf0: ['CREATE', 32000, 3, 1, true],
  0xf1: ['CALL', 40, 7, 1, true],
  0xf2: ['CALLCODE', 40, 7, 1, true],
  0xf3: ['RETURN', 0, 2, 0, false],
  0xf4: ['DELEGATECALL', 40, 6, 1, true],
  0xf5: ['CALLBLACKBOX', 7, 1, 40],
  0xfa: ['STATICCALL', 6, 1, 40],
  0xfd: ['REVERT', 2, 0, 0],

  // '0x70', range - other
  0xff: ['SUICIDE', 0, 1, 0, false]
}

module.exports = function (op, full) {
  var code = codes[op] ? codes[op] : ['INVALID', 0]

  var opcode = code[0]

  if (full) {
    if (opcode === 'LOG') {
      opcode += op - 0xa0
    }

    if (opcode === 'PUSH') {
      opcode += op - 0x5f
    }

    if (opcode === 'DUP') {
      opcode += op - 0x7f
    }

    if (opcode === 'SWAP') {
      opcode += op - 0x8f
    }
  }

  return {name: opcode, fee: code[1], in: code[2], out: code[3], dynamic: code[4], async: code[5]}
}


/***/ }),
/* 1136 */
/***/ (function(module, exports) {

module['exports'] = function runTheTrap(text, options) {
  var result = '';
  text = text || 'Run the trap, drop the bass';
  text = text.split('');
  var trap = {
    a: ['\u0040', '\u0104', '\u023a', '\u0245', '\u0394', '\u039b', '\u0414'],
    b: ['\u00df', '\u0181', '\u0243', '\u026e', '\u03b2', '\u0e3f'],
    c: ['\u00a9', '\u023b', '\u03fe'],
    d: ['\u00d0', '\u018a', '\u0500', '\u0501', '\u0502', '\u0503'],
    e: ['\u00cb', '\u0115', '\u018e', '\u0258', '\u03a3', '\u03be', '\u04bc',
         '\u0a6c'],
    f: ['\u04fa'],
    g: ['\u0262'],
    h: ['\u0126', '\u0195', '\u04a2', '\u04ba', '\u04c7', '\u050a'],
    i: ['\u0f0f'],
    j: ['\u0134'],
    k: ['\u0138', '\u04a0', '\u04c3', '\u051e'],
    l: ['\u0139'],
    m: ['\u028d', '\u04cd', '\u04ce', '\u0520', '\u0521', '\u0d69'],
    n: ['\u00d1', '\u014b', '\u019d', '\u0376', '\u03a0', '\u048a'],
    o: ['\u00d8', '\u00f5', '\u00f8', '\u01fe', '\u0298', '\u047a', '\u05dd',
         '\u06dd', '\u0e4f'],
    p: ['\u01f7', '\u048e'],
    q: ['\u09cd'],
    r: ['\u00ae', '\u01a6', '\u0210', '\u024c', '\u0280', '\u042f'],
    s: ['\u00a7', '\u03de', '\u03df', '\u03e8'],
    t: ['\u0141', '\u0166', '\u0373'],
    u: ['\u01b1', '\u054d'],
    v: ['\u05d8'],
    w: ['\u0428', '\u0460', '\u047c', '\u0d70'],
    x: ['\u04b2', '\u04fe', '\u04fc', '\u04fd'],
    y: ['\u00a5', '\u04b0', '\u04cb'],
    z: ['\u01b5', '\u0240'],
  };
  text.forEach(function(c) {
    c = c.toLowerCase();
    var chars = trap[c] || [' '];
    var rand = Math.floor(Math.random() * chars.length);
    if (typeof trap[c] !== 'undefined') {
      result += trap[c][rand];
    } else {
      result += c;
    }
  });
  return result;
};


/***/ }),
/* 1137 */
/***/ (function(module, exports) {

// please no
module['exports'] = function zalgo(text, options) {
  text = text || '   he is here   ';
  var soul = {
    'up': [
      '̍', '̎', '̄', '̅',
      '̿', '̑', '̆', '̐',
      '͒', '͗', '͑', '̇',
      '̈', '̊', '͂', '̓',
      '̈', '͊', '͋', '͌',
      '̃', '̂', '̌', '͐',
      '̀', '́', '̋', '̏',
      '̒', '̓', '̔', '̽',
      '̉', 'ͣ', 'ͤ', 'ͥ',
      'ͦ', 'ͧ', 'ͨ', 'ͩ',
      'ͪ', 'ͫ', 'ͬ', 'ͭ',
      'ͮ', 'ͯ', '̾', '͛',
      '͆', '̚',
    ],
    'down': [
      '̖', '̗', '̘', '̙',
      '̜', '̝', '̞', '̟',
      '̠', '̤', '̥', '̦',
      '̩', '̪', '̫', '̬',
      '̭', '̮', '̯', '̰',
      '̱', '̲', '̳', '̹',
      '̺', '̻', '̼', 'ͅ',
      '͇', '͈', '͉', '͍',
      '͎', '͓', '͔', '͕',
      '͖', '͙', '͚', '̣',
    ],
    'mid': [
      '̕', '̛', '̀', '́',
      '͘', '̡', '̢', '̧',
      '̨', '̴', '̵', '̶',
      '͜', '͝', '͞',
      '͟', '͠', '͢', '̸',
      '̷', '͡', ' ҉',
    ],
  };
  var all = [].concat(soul.up, soul.down, soul.mid);

  function randomNumber(range) {
    var r = Math.floor(Math.random() * range);
    return r;
  }

  function isChar(character) {
    var bool = false;
    all.filter(function(i) {
      bool = (i === character);
    });
    return bool;
  }


  function heComes(text, options) {
    var result = '';
    var counts;
    var l;
    options = options || {};
    options['up'] =
      typeof options['up'] !== 'undefined' ? options['up'] : true;
    options['mid'] =
      typeof options['mid'] !== 'undefined' ? options['mid'] : true;
    options['down'] =
      typeof options['down'] !== 'undefined' ? options['down'] : true;
    options['size'] =
      typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';
    text = text.split('');
    for (l in text) {
      if (isChar(l)) {
        continue;
      }
      result = result + text[l];
      counts = {'up': 0, 'down': 0, 'mid': 0};
      switch (options.size) {
      case 'mini':
        counts.up = randomNumber(8);
        counts.mid = randomNumber(2);
        counts.down = randomNumber(8);
        break;
      case 'maxi':
        counts.up = randomNumber(16) + 3;
        counts.mid = randomNumber(4) + 1;
        counts.down = randomNumber(64) + 3;
        break;
      default:
        counts.up = randomNumber(8) + 1;
        counts.mid = randomNumber(6) / 2;
        counts.down = randomNumber(8) + 1;
        break;
      }

      var arr = ['up', 'mid', 'down'];
      for (var d in arr) {
        var index = arr[d];
        for (var i = 0; i <= counts[index]; i++) {
          if (options[index]) {
            result = result + soul[index][randomNumber(soul[index].length)];
          }
        }
      }
    }
    return result;
  }
  // don't summon him
  return heComes(text, options);
};



/***/ }),
/* 1138 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);

module['exports'] = function() {
  //
  // Extends prototype of native string object to allow for "foo".red syntax
  //
  var addProperty = function(color, func) {
    String.prototype.__defineGetter__(color, func);
  };

  addProperty('strip', function() {
    return colors.strip(this);
  });

  addProperty('stripColors', function() {
    return colors.strip(this);
  });

  addProperty('trap', function() {
    return colors.trap(this);
  });

  addProperty('zalgo', function() {
    return colors.zalgo(this);
  });

  addProperty('zebra', function() {
    return colors.zebra(this);
  });

  addProperty('rainbow', function() {
    return colors.rainbow(this);
  });

  addProperty('random', function() {
    return colors.random(this);
  });

  addProperty('america', function() {
    return colors.america(this);
  });

  //
  // Iterate through all default styles and colors
  //
  var x = Object.keys(colors.styles);
  x.forEach(function(style) {
    addProperty(style, function() {
      return colors.stylize(this, style);
    });
  });

  function applyTheme(theme) {
    //
    // Remark: This is a list of methods that exist
    // on String that you should not overwrite.
    //
    var stringPrototypeBlacklist = [
      '__defineGetter__', '__defineSetter__', '__lookupGetter__',
      '__lookupSetter__', 'charAt', 'constructor', 'hasOwnProperty',
      'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString',
      'valueOf', 'charCodeAt', 'indexOf', 'lastIndexOf', 'length',
      'localeCompare', 'match', 'repeat', 'replace', 'search', 'slice',
      'split', 'substring', 'toLocaleLowerCase', 'toLocaleUpperCase',
      'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight',
    ];

    Object.keys(theme).forEach(function(prop) {
      if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
        console.log('warn: '.red + ('String.prototype' + prop).magenta +
          ' is probably something you don\'t want to override.  ' +
          'Ignoring style name');
      } else {
        if (typeof(theme[prop]) === 'string') {
          colors[prop] = colors[theme[prop]];
          addProperty(prop, function() {
            return colors[theme[prop]](this);
          });
        } else {
          addProperty(prop, function() {
            var ret = this;
            for (var t = 0; t < theme[prop].length; t++) {
              ret = colors[theme[prop][t]](ret);
            }
            return ret;
          });
        }
      }
    });
  }

  colors.setTheme = function(theme) {
    if (typeof theme === 'string') {
      console.log('colors.setTheme now only accepts an object, not a string. ' +
        'If you are trying to set a theme from a file, it is now your (the ' +
        'caller\'s) responsibility to require the file.  The old syntax ' +
        'looked like colors.setTheme(__dirname + ' +
        '\'/../themes/generic-logging.js\'); The new syntax looks like '+
        'colors.setTheme(require(__dirname + ' +
        '\'/../themes/generic-logging.js\'));');
       return;
    } else {
      applyTheme(theme);
    }
  };
};


/***/ }),
/* 1139 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);
module['exports'] = colors;

// Remark: By default, colors will add style properties to String.prototype.
//
// If you don't wish to extend String.prototype, you can do this instead and
// native String will not be touched:
//
//   var colors = require('colors/safe);
//   colors.red("foo")
//
//
__webpack_require__(1138)();


/***/ }),
/* 1140 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);

module['exports'] = (function() {
  return function(letter, i, exploded) {
    if (letter === ' ') return letter;
    switch (i%3) {
      case 0: return colors.red(letter);
      case 1: return colors.white(letter);
      case 2: return colors.blue(letter);
    }
  };
})();


/***/ }),
/* 1141 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);

module['exports'] = (function() {
  // RoY G BiV
  var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];
  return function(letter, i, exploded) {
    if (letter === ' ') {
      return letter;
    } else {
      return colors[rainbowColors[i++ % rainbowColors.length]](letter);
    }
  };
})();



/***/ }),
/* 1142 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);

module['exports'] = (function() {
  var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',
    'blue', 'white', 'cyan', 'magenta'];
  return function(letter, i, exploded) {
    return letter === ' ' ? letter :
      colors[
        available[Math.round(Math.random() * (available.length - 2))]
      ](letter);
  };
})();


/***/ }),
/* 1143 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(103);

module['exports'] = function(letter, i, exploded) {
  return i % 2 === 0 ? letter : colors.inverse(letter);
};


/***/ }),
/* 1144 */
/***/ (function(module, exports) {

/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var styles = {};
module['exports'] = styles;

var codes = {
  reset: [0, 0],

  bold: [1, 22],
  dim: [2, 22],
  italic: [3, 23],
  underline: [4, 24],
  inverse: [7, 27],
  hidden: [8, 28],
  strikethrough: [9, 29],

  black: [30, 39],
  red: [31, 39],
  green: [32, 39],
  yellow: [33, 39],
  blue: [34, 39],
  magenta: [35, 39],
  cyan: [36, 39],
  white: [37, 39],
  gray: [90, 39],
  grey: [90, 39],

  bgBlack: [40, 49],
  bgRed: [41, 49],
  bgGreen: [42, 49],
  bgYellow: [43, 49],
  bgBlue: [44, 49],
  bgMagenta: [45, 49],
  bgCyan: [46, 49],
  bgWhite: [47, 49],

  // legacy styles for colors pre v1.0.0
  blackBG: [40, 49],
  redBG: [41, 49],
  greenBG: [42, 49],
  yellowBG: [43, 49],
  blueBG: [44, 49],
  magentaBG: [45, 49],
  cyanBG: [46, 49],
  whiteBG: [47, 49],

};

Object.keys(codes).forEach(function(key) {
  var val = codes[key];
  var style = styles[key] = [];
  style.open = '\u001b[' + val[0] + 'm';
  style.close = '\u001b[' + val[1] + 'm';
});


/***/ }),
/* 1145 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/



module.exports = function(flag, argv) {
  argv = argv || process.argv;

  var terminatorPos = argv.indexOf('--');
  var prefix = /^-{1,2}/.test(flag) ? '' : '--';
  var pos = argv.indexOf(prefix + flag);

  return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};


/***/ }),
/* 1146 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/



var os = __webpack_require__(5);
var hasFlag = __webpack_require__(1145);

var env = process.env;

var forceColor = void 0;
if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {
  forceColor = false;
} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')
           || hasFlag('color=always')) {
  forceColor = true;
}
if ('FORCE_COLOR' in env) {
  forceColor = env.FORCE_COLOR.length === 0
    || parseInt(env.FORCE_COLOR, 10) !== 0;
}

function translateLevel(level) {
  if (level === 0) {
    return false;
  }

  return {
    level: level,
    hasBasic: true,
    has256: level >= 2,
    has16m: level >= 3,
  };
}

function supportsColor(stream) {
  if (forceColor === false) {
    return 0;
  }

  if (hasFlag('color=16m') || hasFlag('color=full')
      || hasFlag('color=truecolor')) {
    return 3;
  }

  if (hasFlag('color=256')) {
    return 2;
  }

  if (stream && !stream.isTTY && forceColor !== true) {
    return 0;
  }

  var min = forceColor ? 1 : 0;

  if (process.platform === 'win32') {
    // Node.js 7.5.0 is the first version of Node.js to include a patch to
    // libuv that enables 256 color output on Windows. Anything earlier and it
    // won't work. However, here we target Node.js 8 at minimum as it is an LTS
    // release, and Node.js 7 is not. Windows 10 build 10586 is the first
    // Windows release that supports 256 colors. Windows 10 build 14931 is the
    // first release that supports 16m/TrueColor.
    var osRelease = os.release().split('.');
    if (Number(process.versions.node.split('.')[0]) >= 8
        && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
      return Number(osRelease[2]) >= 14931 ? 3 : 2;
    }

    return 1;
  }

  if ('CI' in env) {
    if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {
      return sign in env;
    }) || env.CI_NAME === 'codeship') {
      return 1;
    }

    return min;
  }

  if ('TEAMCITY_VERSION' in env) {
    return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0
    );
  }

  if ('TERM_PROGRAM' in env) {
    var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);

    switch (env.TERM_PROGRAM) {
      case 'iTerm.app':
        return version >= 3 ? 3 : 2;
      case 'Hyper':
        return 3;
      case 'Apple_Terminal':
        return 2;
      // No default
    }
  }

  if (/-256(color)?$/i.test(env.TERM)) {
    return 2;
  }

  if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
    return 1;
  }

  if ('COLORTERM' in env) {
    return 1;
  }

  if (env.TERM === 'dumb') {
    return min;
  }

  return min;
}

function getSupportLevel(stream) {
  var level = supportsColor(stream);
  return translateLevel(level);
}

module.exports = {
  supportsColor: getSupportLevel,
  stdout: getSupportLevel(process.stdout),
  stderr: getSupportLevel(process.stderr),
};


/***/ }),
/* 1147 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(442);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 1148 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(442);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 1149 */
/***/ (function(module, exports, __webpack_require__) {

var CompileError = __webpack_require__(246);
var solc = __webpack_require__(473);
var fs = __webpack_require__(1);
var path = __webpack_require__(0);

// Clean up after solc.
var listeners = process.listeners("uncaughtException");
var solc_listener = listeners[listeners.length - 1];

if (solc_listener) {
  process.removeListener("uncaughtException", solc_listener);
}

// Warning issued by a pre-release compiler version, ignored by this component.
var preReleaseCompilerWarning = "This is a pre-release compiler version, please do not use it in production.";

var installedContractsDir = "installed_contracts"

module.exports = {
  parse: function(body, fileName) {
    // Here, we want a valid AST even if imports don't exist. The way to
    // get around that is to tell the compiler, as they happen, that we
    // have source for them (an empty file).

    var build_remappings = function() {
      // Maps import paths to paths from EthPM installed contracts, so we can correctly solve imports
      // e.g. "my_pkg/=installed_contracts/my_pkg/contracts/"
      var remappings = [];

      if (fs.existsSync('ethpm.json')) {
        ethpm = JSON.parse(fs.readFileSync('ethpm.json'));
        for (pkg in ethpm.dependencies) {
          remappings.push(pkg + "/=" + path.join(installedContractsDir, pkg, 'contracts', '/'));
        }
      }
      
      return remappings;
    }

    var fileName = fileName || "ParsedContract.sol";

    var remappings = build_remappings();

    var solcStandardInput = {
      language: "Solidity",
      sources: {
        [fileName]: {
          content: body
        }
      },
      settings: {
        remappings: remappings,
        outputSelection: {
          "*": {
            "": [
              "ast"
            ]
          }
        }
      }
    };

    var output = solc.compileStandard(JSON.stringify(solcStandardInput), function(file_path) {
      // Resolve dependency manually.
      if (fs.existsSync(file_path)) {
        contents = fs.readFileSync(file_path, {encoding: 'UTF-8'});
      }
      else {
        contents = "pragma solidity ^0.4.0;";
      }
      return {contents: contents};
    });

    output = JSON.parse(output);

    // Filter out the "pre-release compiler" warning, if present.
    var errors = output.errors ? output.errors.filter(function(solidity_error) {
      return solidity_error.message.indexOf(preReleaseCompilerWarning) < 0;
    }) : [];

    // Filter out warnings.
    var warnings = output.errors ? output.errors.filter(function(solidity_error) {
      return solidity_error.severity == "warning";
    }) : [];
    var errors = output.errors ? output.errors.filter(function(solidity_error) {
      return solidity_error.severity != "warning";
    }) : [];

    if (errors.length > 0) {
      throw new CompileError(errors[0].formattedMessage);
    }

    return {
      contracts: Object.keys(output.contracts[fileName]),
      ast: output.sources[fileName].ast
    };
  },

  // This needs to be fast! It is fast (as of this writing). Keep it fast!
  parseImports: function(body) {
    var self = this;

    // WARNING: Kind of a hack (an expedient one).

    // So we don't have to maintain a separate parser, we'll get all the imports
    // in a file by sending the file to solc and evaluating the error messages
    // to see what import statements couldn't be resolved. To prevent full-on
    // compilation when a file has no import statements, we inject an import
    // statement right on the end; just to ensure it will error and we can parse
    // the imports speedily without doing extra work.

    // Helper to detect import errors with an easy regex.
    var importErrorKey = "TRUFFLE_IMPORT";

    // Inject failing import.
    var failingImportFileName = "__Truffle__NotFound.sol";

    body = body + "\n\nimport '" + failingImportFileName + "';\n";

    var solcStandardInput = {
      language: "Solidity",
      sources: {
        "ParsedContract.sol": {
          content: body
        }
      },
      settings: {
        outputSelection: {
          "ParsedContract.sol": {
            "*": [] // We don't need any output.
          }
        }
      }
    };

    var output = solc.compileStandard(JSON.stringify(solcStandardInput), function() {
      // The existence of this function ensures we get a parsable error message.
      // Without this, we'll get an error message we *can* detect, but the key will make it easier.
      // Note: This is not a normal callback. See docs here: https://github.com/ethereum/solc-js#from-version-021
      return {error: importErrorKey};
    });

    output = JSON.parse(output);

    // Filter out the "pre-release compiler" warning, if present.
    var errors = output.errors.filter(function(solidity_error) {
      return solidity_error.message.indexOf(preReleaseCompilerWarning) < 0;
    });

    var nonImportErrors = errors.filter(function(solidity_error) {
      // If the import error key is not found, we must not have an import error.
      // This means we have a *different* parsing error which we should show to the user.
      // Note: solc can return multiple parsing errors at once.
      // We ignore the "pre-release compiler" warning message.
      return solidity_error.formattedMessage.indexOf(importErrorKey) < 0;
    });

    // Should we try to throw more than one? (aside; we didn't before)
    if (nonImportErrors.length > 0) {
      throw new CompileError(nonImportErrors[0].formattedMessage);
    }

    // Now, all errors must be import errors.
    // Filter out our forced import, then get the import paths of the rest.
    var imports = errors.filter(function(solidity_error) {
      return solidity_error.message.indexOf(failingImportFileName) < 0;
    }).map(function(solidity_error) {
      var matches = solidity_error.formattedMessage.match(/import[^'"]+("|')([^'"]+)("|');/);

      // Return the item between the quotes.
      return matches[2];
    });

    return imports;
  }
}


/***/ }),
/* 1150 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(module) {var ethJSABI = __webpack_require__(326);
var BlockchainUtils = __webpack_require__(440);
var Web3 = __webpack_require__(25);
var StatusError = __webpack_require__(1151)

// For browserified version. If browserify gave us an empty version,
// look for the one provided by the user.
if (typeof Web3 == "object" && Object.keys(Web3).length == 0) {
  Web3 = global.Web3;
}

var contract = (function(module) {

  // Planned for future features, logging, etc.
  function Provider(provider) {
    this.provider = provider;
  }

  Provider.prototype.send = function() {
    return this.provider.send.apply(this.provider, arguments);
  };

  Provider.prototype.sendAsync = function() {
    return this.provider.sendAsync.apply(this.provider, arguments);
  };

  var BigNumber = (new Web3()).toBigNumber(0).constructor;

  var Utils = {
    is_object: function(val) {
      return typeof val == "object" && !Array.isArray(val);
    },
    is_big_number: function(val) {
      if (typeof val != "object") return false;

      // Instanceof won't work because we have multiple versions of Web3.
      try {
        new BigNumber(val);
        return true;
      } catch (e) {
        return false;
      }
    },
    decodeLogs: function(C, instance, logs) {
      return logs.map(function(log) {
        var logABI = C.events[log.topics[0]];

        if (logABI == null) {
          return null;
        }

        // This function has been adapted from web3's SolidityEvent.decode() method,
        // and built to work with ethjs-abi.

        var copy = Utils.merge({}, log);

        function partialABI(fullABI, indexed) {
          var inputs = fullABI.inputs.filter(function (i) {
            return i.indexed === indexed;
          });

          var partial = {
            inputs: inputs,
            name: fullABI.name,
            type: fullABI.type,
            anonymous: fullABI.anonymous
          };

          return partial;
        }

        var argTopics = logABI.anonymous ? copy.topics : copy.topics.slice(1);
        var indexedData = "0x" + argTopics.map(function (topics) { return topics.slice(2); }).join("");
        var indexedParams = ethJSABI.decodeEvent(partialABI(logABI, true), indexedData);

        var notIndexedData = copy.data;
        var notIndexedParams = ethJSABI.decodeEvent(partialABI(logABI, false), notIndexedData);

        copy.event = logABI.name;

        copy.args = logABI.inputs.reduce(function (acc, current) {
          var val = indexedParams[current.name];

          if (val === undefined) {
            val = notIndexedParams[current.name];
          }

          acc[current.name] = val;
          return acc;
        }, {});

        Object.keys(copy.args).forEach(function(key) {
          var val = copy.args[key];

          // We have BN. Convert it to BigNumber
          if (val.constructor.isBN) {
            copy.args[key] = C.web3.toBigNumber("0x" + val.toString(16));
          }
        });

        delete copy.data;
        delete copy.topics;

        return copy;
      }).filter(function(log) {
        return log != null;
      });
    },
    promisifyFunction: function(fn, C) {
      var self = this;
      return function() {
        var instance = this;

        var args = Array.prototype.slice.call(arguments);
        var tx_params = {};
        var last_arg = args[args.length - 1];

        // It's only tx_params if it's an object and not a BigNumber.
        if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
          tx_params = args.pop();
        }

        tx_params = Utils.merge(C.class_defaults, tx_params);

        return C.detectNetwork().then(function() {
          return new Promise(function(accept, reject) {
            var callback = function(error, result) {
              if (error != null) {
                reject(error);
              } else {
                accept(result);
              }
            };
            args.push(tx_params, callback);
            fn.apply(instance.contract, args);
          });
        });
      };
    },
    synchronizeFunction: function(fn, instance, C) {
      var self = this;
      return function() {
        var args = Array.prototype.slice.call(arguments);
        var tx_params = {};
        var last_arg = args[args.length - 1];

        // It's only tx_params if it's an object and not a BigNumber.
        if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
          tx_params = args.pop();
        }

        tx_params = Utils.merge(C.class_defaults, tx_params);

        return C.detectNetwork().then(function() {
          return new Promise(function(accept, reject) {
            var callback = function(error, tx) {
              if (error != null) {
                reject(error);
                return;
              }

              var timeout;
              if (C.synchronization_timeout === 0 || C.synchronization_timeout !== undefined) {
                timeout = C.synchronization_timeout;
              } else {
                timeout = 240000;
              }

              var start = new Date().getTime();

              var make_attempt = function() {
                C.web3.eth.getTransactionReceipt(tx, function(err, receipt) {
                  if (err && !err.toString().includes('unknown transaction')){
                    return reject(err);
                  }

                  // Reject on transaction failures, accept otherwise
                  // Handles "0x00" or hex 0
                  if (receipt != null) {
                    if (parseInt(receipt.status, 16) == 0){
                      var statusError = new StatusError(tx_params, tx, receipt);
                      return reject(statusError);
                    } else {
                      return accept({
                        tx: tx,
                        receipt: receipt,
                        logs: Utils.decodeLogs(C, instance, receipt.logs)
                      });
                    }
                  }

                  if (timeout > 0 && new Date().getTime() - start > timeout) {
                    return reject(new Error("Transaction " + tx + " wasn't processed in " + (timeout / 1000) + " seconds!"));
                  }

                  setTimeout(make_attempt, 1000);
                });
              };

              make_attempt();
            };

            args.push(tx_params, callback);
            fn.apply(self, args);
          });
        });
      };
    },
    merge: function() {
      var merged = {};
      var args = Array.prototype.slice.call(arguments);

      for (var i = 0; i < args.length; i++) {
        var object = args[i];
        var keys = Object.keys(object);
        for (var j = 0; j < keys.length; j++) {
          var key = keys[j];
          var value = object[key];
          merged[key] = value;
        }
      }

      return merged;
    },
    parallel: function (arr, callback) {
      callback = callback || function () {};
      if (!arr.length) {
        return callback(null, []);
      }
      var index = 0;
      var results = new Array(arr.length);
      arr.forEach(function (fn, position) {
        fn(function (err, result) {
          if (err) {
            callback(err);
            callback = function () {};
          } else {
            index++;
            results[position] = result;
            if (index >= arr.length) {
              callback(null, results);
            }
          }
        });
      });
    },
    bootstrap: function(fn) {
      // Add our static methods
      Object.keys(fn._static_methods).forEach(function(key) {
        fn[key] = fn._static_methods[key].bind(fn);
      });

      // Add our properties.
      Object.keys(fn._properties).forEach(function(key) {
        fn.addProp(key, fn._properties[key]);
      });

      return fn;
    },
    linkBytecode: function(bytecode, links) {
      Object.keys(links).forEach(function(library_name) {
        var library_address = links[library_name];
        var regex = new RegExp("__" + library_name + "_+", "g");

        bytecode = bytecode.replace(regex, library_address.replace("0x", ""));
      });

      return bytecode;
    }
  };

  // Accepts a contract object created with web3.eth.contract.
  // Optionally, if called without `new`, accepts a network_id and will
  // create a new version of the contract abstraction with that network_id set.
  function Contract(contract) {
    var self = this;
    var constructor = this.constructor;
    this.abi = constructor.abi;

    if (typeof contract == "string") {
      var address = contract;
      var contract_class = constructor.web3.eth.contract(this.abi);
      contract = contract_class.at(address);
    }

    this.contract = contract;

    // Provision our functions.
    for (var i = 0; i < this.abi.length; i++) {
      var item = this.abi[i];
      if (item.type == "function") {
        if (item.constant == true) {
          this[item.name] = Utils.promisifyFunction(contract[item.name], constructor);
        } else {
          this[item.name] = Utils.synchronizeFunction(contract[item.name], this, constructor);
        }

        this[item.name].call = Utils.promisifyFunction(contract[item.name].call, constructor);
        this[item.name].sendTransaction = Utils.promisifyFunction(contract[item.name].sendTransaction, constructor);
        this[item.name].request = contract[item.name].request;
        this[item.name].estimateGas = Utils.promisifyFunction(contract[item.name].estimateGas, constructor);
      }

      if (item.type == "event") {
        this[item.name] = contract[item.name];
      }
    }

    this.sendTransaction = Utils.synchronizeFunction(function(tx_params, callback) {
      if (typeof tx_params == "function") {
        callback = tx_params;
        tx_params = {};
      }

      tx_params.to = self.address;

      constructor.web3.eth.sendTransaction.apply(constructor.web3.eth, [tx_params, callback]);
    }, this, constructor);

    this.send = function(value) {
      return self.sendTransaction({value: value});
    };

    this.allEvents = contract.allEvents;
    this.address = contract.address;
    this.transactionHash = contract.transactionHash;
  };

  Contract._static_methods = {
    setProvider: function(provider) {
      if (!provider) {
        throw new Error("Invalid provider passed to setProvider(); provider is " + provider);
      }

      var wrapped = new Provider(provider);
      this.web3.setProvider(wrapped);
      this.currentProvider = provider;
    },

    new: function() {
      var self = this;

      if (this.currentProvider == null) {
        throw new Error(this.contractName + " error: Please call setProvider() first before calling new().");
      }

      var args = Array.prototype.slice.call(arguments);

      if (!this.bytecode) {
        throw new Error(this._json.contractName + " error: contract binary not set. Can't deploy new instance.");
      }

      return self.detectNetwork().then(function(network_id) {
        // After the network is set, check to make sure everything's ship shape.
        var regex = /__[^_]+_+/g;
        var unlinked_libraries = self.binary.match(regex);

        if (unlinked_libraries != null) {
          unlinked_libraries = unlinked_libraries.map(function(name) {
            // Remove underscores
            return name.replace(/_/g, "");
          }).sort().filter(function(name, index, arr) {
            // Remove duplicates
            if (index + 1 >= arr.length) {
              return true;
            }

            return name != arr[index + 1];
          }).join(", ");

          throw new Error(self.contractName + " contains unresolved libraries. You must deploy and link the following libraries before you can deploy a new version of " + self._json.contractName + ": " + unlinked_libraries);
        }
      }).then(function() {
        return new Promise(function(accept, reject) {
          var contract_class = self.web3.eth.contract(self.abi);
          var tx_params = {};
          var last_arg = args[args.length - 1];

          // It's only tx_params if it's an object and not a BigNumber.
          if (Utils.is_object(last_arg) && !Utils.is_big_number(last_arg)) {
            tx_params = args.pop();
          }

          // Validate constructor args
          var constructor = self.abi.filter(function(item){
            return item.type === 'constructor';
          });

          if (constructor.length && constructor[0].inputs.length !== args.length){
            throw new Error(self.contractName + " contract constructor expected " + constructor[0].inputs.length + " arguments, received " + args.length);
          }

          tx_params = Utils.merge(self.class_defaults, tx_params);

          if (tx_params.data == null) {
            tx_params.data = self.binary;
          }

          // web3 0.9.0 and above calls new this callback twice.
          // Why, I have no idea...
          var intermediary = function(err, web3_instance) {
            if (err != null) {
              reject(err);
              return;
            }

            if (err == null && web3_instance != null && web3_instance.address != null) {
              accept(new self(web3_instance));
            }
          };

          args.push(tx_params, intermediary);
          contract_class.new.apply(contract_class, args);
        });
      });
    },

    at: function(address) {
      var self = this;

      if (address == null || typeof address != "string" || address.length != 42) {
        throw new Error("Invalid address passed to " + this._json.contractName + ".at(): " + address);
      }

      var contract = new this(address);

      // Add thennable to allow people opt into new recommended usage.
      contract.then = function(fn) {
        return self.detectNetwork().then(function(network_id) {
          var instance = new self(address);

          return new Promise(function(accept, reject) {
            self.web3.eth.getCode(address, function(err, code) {
              if (err) return reject(err);

              if (!code || code.replace("0x", "").replace(/0/g, "") === '') {
                return reject(new Error("Cannot create instance of " + self.contractName + "; no code at address " + address));
              }

              accept(instance);
            });
          });
        }).then(fn);
      };

      return contract;
    },

    deployed: function() {
      var self = this;
      return self.detectNetwork().then(function() {
        // We don't have a network config for the one we found
        if (self._json.networks[self.network_id] == null) {
          throw new Error(self.contractName + " has not been deployed to detected network (network/artifact mismatch)");
        }

        // If we found the network but it's not deployed
        if (!self.isDeployed()) {
          throw new Error(self.contractName + " has not been deployed to detected network (" + self.network_id + ")");
        }

        return new self(self.address);
      });
    },

    defaults: function(class_defaults) {
      if (this.class_defaults == null) {
        this.class_defaults = {};
      }

      if (class_defaults == null) {
        class_defaults = {};
      }

      var self = this;
      Object.keys(class_defaults).forEach(function(key) {
        var value = class_defaults[key];
        self.class_defaults[key] = value;
      });

      return this.class_defaults;
    },

    hasNetwork: function(network_id) {
      return this._json.networks[network_id + ""] != null;
    },

    isDeployed: function() {
      if (this.network_id == null) {
        return false;
      }

      if (this._json.networks[this.network_id] == null) {
        return false;
      }

      return !!this.network.address;
    },

    detectNetwork: function() {
      var self = this;

      return new Promise(function(accept, reject) {
        // Try to detect the network we have artifacts for.
        if (self.network_id) {
          // We have a network id and a configuration, let's go with it.
          if (self.networks[self.network_id] != null) {
            return accept(self.network_id);
          }
        }

        self.web3.version.getNetwork(function(err, result) {
          if (err) return reject(err);

          var network_id = result.toString();

          // If we found the network via a number, let's use that.
          if (self.hasNetwork(network_id)) {
            self.setNetwork(network_id);
            return accept();
          }

          // Otherwise, go through all the networks that are listed as
          // blockchain uris and see if they match.
          var uris = Object.keys(self._json.networks).filter(function(network) {
            return network.indexOf("blockchain://") == 0;
          });

          var matches = uris.map(function(uri) {
            return BlockchainUtils.matches.bind(BlockchainUtils, uri, self.web3.currentProvider);
          });

          Utils.parallel(matches, function(err, results) {
            if (err) return reject(err);

            for (var i = 0; i < results.length; i++) {
              if (results[i]) {
                self.setNetwork(uris[i]);
                return accept();
              }
            }

            // We found nothing. Set the network id to whatever the provider states.
            self.setNetwork(network_id);

            accept();
          });

        });
      });
    },

    setNetwork: function(network_id) {
      if (!network_id) return;
      this.network_id = network_id + "";
    },

    // Overrides the deployed address to null.
    // You must call this explicitly so you don't inadvertently do this otherwise.
    resetAddress: function() {
      delete this.network.address;
    },

    link: function(name, address) {
      var self = this;

      if (typeof name == "function") {
        var contract = name;

        if (contract.isDeployed() == false) {
          throw new Error("Cannot link contract without an address.");
        }

        this.link(contract.contractName, contract.address);

        // Merge events so this contract knows about library's events
        Object.keys(contract.events).forEach(function(topic) {
          self.network.events[topic] = contract.events[topic];
        });

        return;
      }

      if (typeof name == "object") {
        var obj = name;
        Object.keys(obj).forEach(function(name) {
          var a = obj[name];
          self.link(name, a);
        });
        return;
      }

      if (this._json.networks[this.network_id] == null) {
        this._json.networks[this.network_id] = {
          events: {},
          links: {}
        };
      }

      this.network.links[name] = address;
    },

    // Note, this function can be called with two input types:
    // 1. Object with a bunch of data; this data will be merged with the json data of contract being cloned.
    // 2. network id; this will clone the contract and set a specific network id upon cloning.
    clone: function(json) {
      var self = this;

      json = json || {};

      var temp = function TruffleContract() {
        this.constructor = temp;
        return Contract.apply(this, arguments);
      };

      temp.prototype = Object.create(self.prototype);

      var network_id;

      // If we have a network id passed
      if (typeof json != "object") {
        network_id = json;
        json = self._json;
      }

      json = Utils.merge({}, self._json || {}, json);

      temp._static_methods = this._static_methods;
      temp._properties = this._properties;

      temp._property_values = {};
      temp._json = json;

      Utils.bootstrap(temp);

      temp.web3 = new Web3();
      temp.class_defaults = temp.prototype.defaults || {};

      if (network_id) {
        temp.setNetwork(network_id);
      }

      // Copy over custom key/values to the contract class
      Object.keys(json).forEach(function(key) {
        if (key.indexOf("x-") != 0) return;
        temp[key] = json[key];
      });

      return temp;
    },

    addProp: function(key, fn) {
      var self = this;

      var getter = function() {
        if (fn.get != null) {
          return fn.get.call(self);
        }

        return self._property_values[key] || fn.call(self);
      }
      var setter = function(val) {
        if (fn.set != null) {
          fn.set.call(self, val);
          return;
        }

        // If there's not a setter, then the property is immutable.
        throw new Error(key + " property is immutable");
      };

      var definition = {};
      definition.enumerable = false;
      definition.configurable = false;
      definition.get = getter;
      definition.set = setter;

      Object.defineProperty(this, key, definition);
    },

    toJSON: function() {
      return this._json;
    }
  };

  // Getter functions are scoped to Contract object.
  Contract._properties = {
    contract_name: {
      get: function() {
        return this.contractName;
      },
      set: function(val) {
        this.contractName = val;
      }
    },
    contractName: {
      get: function() {
        return this._json.contractName || "Contract";
      },
      set: function(val) {
        this._json.contractName = val;
      }
    },
    abi: {
      get: function() {
        return this._json.abi;
      },
      set: function(val) {
        this._json.abi = val;
      }
    },
    network: function() {
      var network_id = this.network_id;

      if (network_id == null) {
        throw new Error(this.contractName + " has no network id set, cannot lookup artifact data. Either set the network manually using " + this.contractName + ".setNetwork(), run " + this.contractName + ".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.");
      }

      // TODO: this might be bad; setting a value on a get.
      if (this._json.networks[network_id] == null) {
        throw new Error(this.contractName + " has no network configuration for its current network id (" + network_id + ").");
      }

      var returnVal = this._json.networks[network_id];

      // Normalize output
      if (returnVal.links == null) {
        returnVal.links = {};
      }

      if (returnVal.events == null) {
        returnVal.events = {};
      }

      return returnVal;
    },
    networks: function() {
      return this._json.networks;
    },
    address: {
      get: function() {
        var address = this.network.address;

        if (address == null) {
          throw new Error("Cannot find deployed address: " + this.contractName + " not deployed or address not set.");
        }

        return address;
      },
      set: function(val) {
        if (val == null) {
          throw new Error("Cannot set deployed address; malformed value: " + val);
        }

        var network_id = this.network_id;

        if (network_id == null) {
          throw new Error(this.contractName + " has no network id set, cannot lookup artifact data. Either set the network manually using " + this.contractName + ".setNetwork(), run " + this.contractName + ".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.");
        }

        // Create a network if we don't have one.
        if (this._json.networks[network_id] == null) {
          this._json.networks[network_id] = {
            events: {},
            links: {}
          };
        }

        // Finally, set the address.
        this.network.address = val;
      }
    },
    transactionHash: {
      get: function() {
        var transactionHash = this.network.transactionHash;

        if(transactionHash === null) {
          throw new Error("Could not find transaction hash for " + this.contractName);
        }

        return transactionHash;
      },
      set: function(val) {
        this.network.transactionHash = val;
      }
    },
    links: function() {
      if (!this.network_id) {
        throw new Error(this.contractName + " has no network id set, cannot lookup artifact data. Either set the network manually using " + this.contractName + ".setNetwork(), run " + this.contractName + ".detectNetwork(), or use new(), at() or deployed() as a thenable which will detect the network automatically.");
      }

      if (this._json.networks[this.network_id] == null) {
        return {};
      }

      return this.network.links || {};
    },
    events: function() {
      // helper web3; not used for provider
      var web3 = new Web3();

      var events;

      if (this._json.networks[this.network_id] == null) {
        events = {};
      } else {
        events = this.network.events || {};
      }

      // Merge abi events with whatever's returned.
      var abi = this.abi;

      abi.forEach(function(item) {
        if (item.type != "event") return;

        var signature = item.name + "(";

        item.inputs.forEach(function(input, index) {
          signature += input.type;

          if (index < item.inputs.length - 1) {
            signature += ",";
          }
        });

        signature += ")";

        var topic = web3.sha3(signature);

        events[topic] = item;
      });

      return events;
    },
    binary: function() {
      return Utils.linkBytecode(this.bytecode, this.links);
    },
    deployedBinary: function() {
      return Utils.linkBytecode(this.deployedBytecode, this.links);
    },
    // deprecated; use bytecode
    unlinked_binary: {
      get: function() {
        return this.bytecode;
      },
      set: function(val) {
        this.bytecode = val;
      }
    },
    // alias for unlinked_binary; unlinked_binary will eventually be deprecated
    bytecode: {
      get: function() {
        return this._json.bytecode;
      },
      set: function(val) {
        this._json.bytecode = val;
      }
    },
    deployedBytecode: {
      get: function() {
        var code = this._json.deployedBytecode;

        if (code.indexOf("0x") != 0) {
          code = "0x" + code;
        }

        return code;
      },
      set: function(val) {
        var code = val;

        if (val.indexOf("0x") != 0) {
          code = "0x" + code;
        }

        this._json.deployedBytecode = code;
      }
    },
    sourceMap: {
      get: function() {
        return this._json.sourceMap;
      },
      set: function(val) {
        this._json.sourceMap = val;
      }
    },
    deployedSourceMap: {
      get: function() {
        return this._json.deployedSourceMap;
      },
      set: function(val) {
        this._json.deployedSourceMap = val;
      }
    },
    source: {
      get: function() {
        return this._json.source;
      },
      set: function(val) {
        this._json.source = val;
      }
    },
    sourcePath: {
      get: function() {
        return this._json.sourcePath;
      },
      set: function(val) {
        this._json.sourcePath = val;
      }
    },
    legacyAST: {
      get: function() {
        return this._json.legacyAST;
      },
      set: function(val) {
        this._json.legacyAST = val;
      }
    },
    ast: {
      get: function() {
        return this._json.ast;
      },
      set: function(val) {
        this._json.ast = val;
      }
    },
    compiler: {
      get: function() {
        return this._json.compiler;
      },
      set: function(val) {
        this._json.compiler = val;
      }
    },
    // Deprecated
    schema_version: function() {
      return this.schemaVersion;
    },
    schemaVersion: function() {
      return this._json.schemaVersion;
    },
    // deprecated
    updated_at: function() {
      return this.updatedAt;
    },
    updatedAt: function() {
      try {
        return this.network.updatedAt || this._json.updatedAt;
      } catch (e) {
        return this._json.updatedAt;
      }
    }
  };

  Utils.bootstrap(Contract);

  module.exports = Contract;

  return Contract;
})(module || {});

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(44)(module)))

/***/ }),
/* 1151 */
/***/ (function(module, exports, __webpack_require__) {

var TruffleError = __webpack_require__(23);
var inherits = __webpack_require__(2).inherits;
var web3 = __webpack_require__(25);

inherits(StatusError, TruffleError);

var defaultGas = 90000;

function StatusError(args, tx, receipt) {
  var message;
  var gasLimit = parseInt(args.gas) || defaultGas;

  if(receipt.gasUsed === gasLimit){

    message = "Transaction: " + tx + " exited with an error (status 0) after consuming all gas.\n" +
      "Please check that the transaction:\n" +
      "    - satisfies all conditions set by Solidity `assert` statements.\n" +
      "    - has enough gas to execute the full transaction.\n" +
      "    - does not trigger an invalid opcode by other means (ex: accessing an array out of bounds).";

  } else {

    message = "Transaction: " + tx + " exited with an error (status 0).\n" +
      "Please check that the transaction:\n" +
      "    - satisfies all conditions set by Solidity `require` statements.\n" +
      "    - does not trigger a Solidity `revert` statement.\n";
  }

  StatusError.super_.call(this, message);
  this.tx = tx;
  this.receipt = receipt;
}

module.exports = StatusError;

/***/ }),
/* 1152 */,
/* 1153 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(259)

var Config = __webpack_require__(9);
var Command = __webpack_require__(180);
var TaskError = __webpack_require__(260);
var TruffleError = __webpack_require__(23);
var version = __webpack_require__(261);
var OS = __webpack_require__(5);

var command = new Command(__webpack_require__(181));

// Hack to suppress web3 MaxListenersExceededWarning
// This should be removed when issue is resolved upstream:
// https://github.com/ethereum/web3.js/issues/1648
var listeners = process.listeners('warning');
listeners.forEach(listener => process.removeListener('warning', listener));

var options = {
  logger: console
};

command.run(process.argv.slice(2), options, function(err) {
  if (err) {
    if (err instanceof TaskError) {
      command.args
        .usage("Truffle v" + (version.bundle || version.core) + " - a development framework for Ethereum"
        + OS.EOL + OS.EOL
        + 'Usage: truffle <command> [options]')
        .epilog("See more at http://truffleframework.com/docs")
        .showHelp();
    } else {
      if (err instanceof TruffleError) {
        console.log(err.message);
      } else if (typeof err == "number") {
        // If a number is returned, exit with that number.
        process.exit(err);
      } else {
        // Bubble up all other unexpected errors.
        console.log(err.stack || err.toString());
      }
    }
    process.exit(1);
  }

  process.exit(0);
});


/***/ }),
/* 1154 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(25);
var web3 = new Web3();

module.exports = function(chai, utils) {
  var assert = chai.assert;
  chai.Assertion.addProperty('address', function() {
    this.assert(this._obj.length === 42, 'expected #{this} to be a 42 character address (0x...)', 'expected #{this} to not be a 42 character address (0x...)');

    // Convert address to a number. Make sure it's not zero.
    // Controversial: Technically there is that edge case where
    // all zeroes could be a valid address. But: This catches all
    // those cases where Ethereum returns 0x0000... if something fails.
    var number = web3.toBigNumber(this._obj);
    this.assert(number.equals(0) === false, 'expected address #{this} to not be zero', 'you shouldn\'t ever see this.');
  });
  assert.isAddress = function(val, exp, msg) {
    return new chai.Assertion(val, msg).to.be.address;
  };
};


/***/ }),
/* 1155 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'build',
  description: 'Execute build pipeline (if configuration present)',
  builder: {},
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Build = __webpack_require__(445);

    var config = Config.detect(options);
    Build.build(config, done);
  }
}

module.exports = command;


/***/ }),
/* 1156 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'compile',
  description: 'Compile contract source files',
  builder: {
    all: {
      type: "boolean",
      default: false
    }
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Contracts = __webpack_require__(84);

    var config = Config.detect(options);
    Contracts.compile(config, done);
  }
}

module.exports = command;


/***/ }),
/* 1157 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'console',
  description: 'Run a console with contract abstractions and commands available',
  builder: {},
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Console = __webpack_require__(450);
    var Environment = __webpack_require__(104);
    var Develop = __webpack_require__(446);
    var TruffleError = __webpack_require__(23);

    var config = Config.detect(options);

    if (!config.network && !config.networks.development) {
      return done(new TruffleError(
        "No network available. Use `truffle develop` " +
          "or add network to truffle.js config."
      ));
    }

    // This require a smell?
    var commands = __webpack_require__(181)
    var excluded = [
      "console",
      "init",
      "watch",
      "serve",
      "develop"
    ];

    var available_commands = Object.keys(commands).filter(function(name) {
      return excluded.indexOf(name) == -1;
    });

    var console_commands = {};
    available_commands.forEach(function(name) {
      console_commands[name] = commands[name];
    });

    Environment.detect(config, function(err) {
      if (err) return done(err);

      var c = new Console(console_commands, config.with({
        noAliases: true
      }));
      c.start(done);
    });
  }
}

module.exports = command;


/***/ }),
/* 1158 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'create',
  description: 'Helper to create new contracts, migrations and tests',
  builder: {
    all: {
      type: "boolean",
      default: false
    },
    force: {
      type: "boolean",
      default: false
    }
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var ConfigurationError = __webpack_require__(451);
    var create = __webpack_require__(1170);

    var config = Config.detect(options);

    var type = config.type;

    if (type == null && config._.length > 0) {
      type = config._[0]
    }

    var name = config.name;

    if (name == null && config._.length > 1) {
      name = config._[1];
    }

    if (type == null) {
      return done(new ConfigurationError("Please specify the type of item to create. Example: truffle create contract MyContract"));
    }

    if (name == null) {
      return done(new ConfigurationError("Please specify the name of item to create. Example: truffle create contract MyContract"));
    }

    if (!/^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(name)) {
      return done(new ConfigurationError("The name " + name + " is invalid. Please enter a valid name using alpha-numeric characters."));
    }

    var fn = create[type];

    if (fn == null) return done(new ConfigurationError("Cannot find creation type: " + type));

    var destinations = {
      "contract": config.contracts_directory,
      "migration": config.migrations_directory,
      "test": config.test_directory
    };

    create[type](destinations[type], name, options, done);
  }
}

module.exports = command;


/***/ }),
/* 1159 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'debug',
  description: 'Interactively debug any transaction on the blockchain (experimental)',
  builder: {
    _: {
      type: "string"
    }
  },
  run: function (options, done) {
    var OS = __webpack_require__(5);
    var path = __webpack_require__(0);
    var debugModule = __webpack_require__(142);
    var debug = debugModule("lib:commands:debug");
    var safeEval = __webpack_require__(1050)
    var util = __webpack_require__(2);
    var _ = __webpack_require__(24);

    var compile = __webpack_require__(247);
    var Config = __webpack_require__(9);
    var Debugger = __webpack_require__(462);
    var DebugUtils = __webpack_require__(1208);
    var Environment = __webpack_require__(104);
    var ReplManager = __webpack_require__(454);
    var selectors = __webpack_require__(462).selectors;

    // Debugger Session properties
    var ast = selectors.ast;
    var data = selectors.data;
    var trace = selectors.trace;
    var solidity = selectors.solidity;
    var evm = selectors.evm;

    var config = Config.detect(options);

    Environment.detect(config, function(err) {
      if (err) return done(err);

      if (config._.length == 0) {
        return callback(new Error(
          "Please specify a transaction hash as the first parameter in order to " +
          "debug that transaction. i.e., truffle debug 0x1234..."
        ));
      }

      var txHash = config._[0];

      var lastCommand = "n";
      var enabledExpressions = new Set();
      var breakpoints = [];


      let compilePromise = new Promise(function(accept, reject) {
        compile.all(config, function(err, contracts, files) {
          if (err) { return reject(err); }

          return accept({
            contracts: contracts,
            files: files
          });
        });
      });

      var sessionPromise = compilePromise
        .then(function(result) {
          config.logger.log(DebugUtils.formatStartMessage());

          debug("contracts %O", result.contracts);

          return Debugger.forTx(txHash, {
            provider: config.provider,
            files: result.files,
            contracts: Object.keys(result.contracts).map(function(name) {
              var contract = result.contracts[name];
              return {
                contractName: contract.contractName || contract.contract_name,
                source: contract.source,
                sourcePath: contract.sourcePath,
                ast: contract.ast,
                binary: contract.binary || contract.bytecode,
                sourceMap: contract.sourceMap,
                deployedBinary: contract.deployedBinary || contract.deployedBytecode,
                deployedSourceMap: contract.deployedSourceMap
              };
            })
          });
        })
        .then(function (bugger) {
          return bugger.connect();
        })
        .catch(done);

      sessionPromise.then(function (session) {
        if (err) return done(err);

        function splitLines(str) {
          // We were splitting on OS.EOL, but it turns out on Windows,
          // in some environments (perhaps?) line breaks are still denoted by just \n
          return str.split(/\r?\n/g);
        }

        function printAddressesAffected() {
          var affectedInstances = session.view(selectors.session.info.affectedInstances);

          config.logger.log("Addresses affected:");
          config.logger.log(DebugUtils.formatAffectedInstances(affectedInstances));
        }

        function printHelp() {
          config.logger.log("");
          config.logger.log(DebugUtils.formatHelp());
        }

        function printFile() {
          var message = "";

          var sourcePath = session.view(solidity.current.source).sourcePath;

          if (sourcePath) {
            message += path.basename(sourcePath);
          } else {
            message += "?";
          }

          config.logger.log("");
          config.logger.log(message + ":");
        }

        function printState() {
          var source = session.view(solidity.current.source).source;
          var range = session.view(solidity.current.sourceRange);
          debug("source: %o", source);
          debug("range: %o", range);

          if (!source) {
            config.logger.log()
            config.logger.log("1: // No source code found.");
            config.logger.log("");
            return;
          }

          var lines = splitLines(source);

          config.logger.log("");

          config.logger.log(
            DebugUtils.formatRangeLines(lines, range.lines)
          );

          config.logger.log("");
        }

        function printInstruction() {
          var instruction = session.view(solidity.current.instruction);
          var step = session.view(trace.step);
          var traceIndex = session.view(trace.index);

          config.logger.log("");
          config.logger.log(
            DebugUtils.formatInstruction(traceIndex, instruction)
          );
          config.logger.log(DebugUtils.formatStack(step.stack));
        };

        function printSelector(specified) {
          var selector = specified
            .split(".")
            .filter(function(next) { return next.length > 0 })
            .reduce(function(sel, next) {
              debug("next %o, sel %o", next, sel);
              return sel[next];
            }, selectors);

          debug("selector %o", selector);
          var result = session.view(selector);
          var debugSelector = debugModule(specified);
          debugSelector.enabled = true;
          debugSelector("%O", result);
        };

        function printWatchExpressions() {
          if (enabledExpressions.size == 0) {
            config.logger.log("No watch expressions added.");
            return;
          }

          config.logger.log("");
          enabledExpressions.forEach(function(expression) {
            config.logger.log("  " + expression);
          });
          config.logger.log("");
        }

        function printWatchExpressionsResults() {
          enabledExpressions.forEach(function(expression) {
            config.logger.log(expression);
            // Add some padding. Note: This won't work with all loggers,
            // meaning it's not portable. But doing this now so we can get something
            // pretty until we can build more architecture around this.
            // Note: Selector results already have padding, so this isn't needed.
            if (expression[0] == ":") {
              process.stdout.write("  ");
            }
            printWatchExpressionResult(expression);
          });
        };

        function printWatchExpressionResult(expression) {
          var type = expression[0];
          var exprArgs = expression.substring(1);

          if (type == "!") {
            printSelector(exprArgs);
          } else {
            evalAndPrintExpression(exprArgs, 2, true);
          }
        }

        // TODO make this more robust for all cases and move to
        // truffle-debug-utils
        function formatValue(value, indent) {
          if (!indent) {
            indent = 0;
          }

          return util
            .inspect(value, {
              colors: true,
              depth: null,
              breakLength: 30
            })
            .split(/\r?\n/g)
            .map(function (line, i) {
              // don't indent first line
              var padding = i > 0 ?
                Array(indent).join(" ") :
                "";
              return padding + line;
            })
            .join(OS.EOL);
        }

        function printVariables() {
          var variables = session.view(data.current.identifiers.native);

          // Get the length of the longest name.
          var longestNameLength = Math.max.apply(null, (Object.keys(variables).map(function(name) {
            return name.length
          })));

          config.logger.log();

          Object.keys(variables).forEach(function(name) {
            var paddedName = name + ":";

            while (paddedName.length <= longestNameLength) {
              paddedName = " " + paddedName;
            }

            var value = variables[name];
            var formatted = formatValue(value, longestNameLength + 5);

            config.logger.log("  " + paddedName, formatted);
          });

          config.logger.log();
        }

        function evalAndPrintExpression(expr, indent, suppress) {
          var context = session.view(data.current.identifiers.native);
          try {
            var result = safeEval(expr, context);
            var formatted = formatValue(result, indent);
            config.logger.log(formatted);
            config.logger.log();
          } catch (e) {
            // HACK: safeEval edits the expression to capture the result, which
            // produces really weird output when there are errors. e.g.,
            //
            //   evalmachine.<anonymous>:1
            //   SAFE_EVAL_857712=a
            //   ^
            //
            //   ReferenceError: a is not defined
            //     at evalmachine.<anonymous>:1:1
            //     at ContextifyScript.Script.runInContext (vm.js:59:29)
            //
            // We want to hide this from the user if there's an error.
            e.stack = e.stack.replace(/SAFE_EVAL_\d+=/,"");
            if (!suppress) {
              config.logger.log(e);
            } else {
              config.logger.log(formatValue(undefined))
            }
          }
        }

        function toggleBreakpoint() {
          var currentCall = session.view(evm.current.call);
          var currentNode = session.view(ast.current.node).id;

          // Try to find the breakpoint in the list
          var found = false;
          for (var index = 0; index < breakpoints.length; index++) {
            var breakpoint = breakpoints[index];

            if (_.isEqual(currentCall, breakpoint.call) && currentNode == breakpoint.node) {
              found = true;
              // Remove the breakpoint
              breakpoints.splice(index, 1);
              break;
            }
          }

          if (found) {
            config.logger.log("Breakpoint removed.");
            return;
          }

          // No breakpoint? Add it.
          breakpoints.push({
            call: currentCall,
            node: currentNode
          });

          config.logger.log("Breakpoint added.");
        }

        function interpreter(cmd, replContext, filename, callback) {
          cmd = cmd.trim();
          var cmdArgs;
          debug("cmd %s", cmd);

          if (cmd == ".exit") {
            cmd = "q";
          }

          if (cmd.length > 0) {
            cmdArgs = cmd.slice(1).trim();
            cmd = cmd[0];
          }

          if (cmd == "") {
            cmd = lastCommand;
          }

          // Perform commands that require state changes.
          switch (cmd) {
            case "o":
              session.stepOver();
              break;
            case "i":
              session.stepInto();
              break;
            case "u":
              session.stepOut();
              break;
            case "n":
              session.stepNext();
              break;
            case ";":
              session.advance();
              break;
            case "c":
              session.continueUntil.apply(session, breakpoints);
              break;
            case "q":
              return repl.stop(callback);
          }

          // Check if execution has stopped.
          if (session.finished) {
            config.logger.log("");
            if (session.failed) {
              config.logger.log("Transaction halted with a RUNTIME ERROR.")
              config.logger.log("");
              config.logger.log("This is likely due to an intentional halting expression, like assert(), require() or revert(). It can also be due to out-of-gas exceptions. Please inspect your transaction parameters and contract code to determine the meaning of this error.");
            } else {
              config.logger.log("Transaction completed successfully.");
            }
            return repl.stop(callback);
          }

          // Perform post printing
          // (we want to see if execution stopped before printing state).
          switch (cmd) {
            case "+":
              enabledExpressions.add(cmdArgs);
              printWatchExpressionResult(cmdArgs);
              break;
            case "-":
              enabledExpressions.delete(cmdArgs);
              break;
            case "!":
              printSelector(cmdArgs);
              break;
            case "?":
              printWatchExpressions();
              break;
            case "v":
              printVariables();
              break;
            case ":":
              evalAndPrintExpression(cmdArgs);
              break;
            case "b":
              toggleBreakpoint();
              break;
            case ";":
            case "p":
              printFile();
              printInstruction();
              printState();
              printWatchExpressionsResults();
              break;
            case "o":
            case "i":
            case "u":
            case "n":
            case "c":
              if(!session.view(solidity.current.source).source) {
                printInstruction();
              }

              printFile();
              printState();
              printWatchExpressionsResults();
              break;
            default:
              printHelp();
          }

          if (
            cmd != "i" && cmd != "u" && cmd != "b" && cmd != "v" &&
            cmd != "h" && cmd != "p" && cmd != "?" && cmd != "!" && cmd != ":" && cmd != "+" && cmd != "-"
          ) {
            lastCommand = cmd;
          }

          callback();
        };

        printAddressesAffected();
        printHelp();
        printFile();
        printState();

        var repl = options.repl || new ReplManager(config);

        repl.start({
          prompt: "debug(" + config.network + ":" + txHash.substring(0, 10) + "...)> ",
          interpreter: interpreter,
          done: done
        });
      }).catch(done);
    });
  }
}

module.exports = command;


/***/ }),
/* 1160 */
/***/ (function(module, exports, __webpack_require__) {

var migrate = __webpack_require__(447);

var command = {
  command: 'deploy',
  description: '(alias for migrate)',
  builder: migrate.builder,
  run: migrate.run
}

module.exports = command;


/***/ }),
/* 1161 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'exec',
  description: 'Execute a JS module within this Truffle environment',
  builder: {
    file: {
      type: "string"
    },
    c: {
      type: "boolean",
      default: false
    },
    compile: {
      type: "boolean",
      default: false
    }
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Contracts = __webpack_require__(84);
    var ConfigurationError = __webpack_require__(451);
    var Require = __webpack_require__(466);
    var Environment = __webpack_require__(104);
    var path = __webpack_require__(0);
    var OS = __webpack_require__(5);

    var config = Config.detect(options);

    var file = options.file;

    if (file == null && options._.length > 0) {
      file = options._[0];
    }

    if (file == null) {
      done(new ConfigurationError("Please specify a file, passing the path of the script you'd like the run. Note that all scripts *must* call process.exit() when finished."));
      return;
    }

    if (path.isAbsolute(file) == false) {
      file = path.join(process.cwd(), file);
    }

    Environment.detect(config, function(err) {
      if (err) return done(err);

      if (config.networkHint !== false) {
        config.logger.log("Using network '" + config.network + "'." + OS.EOL);
      }

      // `--compile`
      if (options.c || options.compile){
        return Contracts.compile(config, function(err){
          if(err) return done(err);

          Require.exec(config.with({
            file: file
          }), done);
        });
      };

      // Just exec
      Require.exec(config.with({
        file: file
      }), done);
    });
  }
}

module.exports = command;


/***/ }),
/* 1162 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'init',
  description: 'Initialize new and empty Ethereum project',
  builder: {},
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var OS = __webpack_require__(5);
    var UnboxCommand = __webpack_require__(448);

    var config = Config.default().with({
      logger: console
    });

    if (options._ && options._.length > 0) {
      config.logger.log(
        "Error: `truffle init` no longer accepts a project template name as an argument."
      );
      config.logger.log();
      config.logger.log(
        " - For an empty project, use `truffle init` with no arguments" +
        OS.EOL +
        " - Or, browse the Truffle Boxes at <http://truffleframework.com/boxes>!"
      );
      process.exit(1);
    }

    // defer to `truffle unbox` command with "bare" box as arg
    var url = "https://github.com/truffle-box/bare-box.git";
    options._ = [url];

    UnboxCommand.run(options, done);
  }
}

module.exports = command;


/***/ }),
/* 1163 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'install',
  description: 'Install a package from the Ethereum Package Registry',
  builder: {},
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Package = __webpack_require__(453);

    if (options._ && options._.length > 0) {
      options.packages = options._;
    }

    var config = Config.detect(options);
    Package.install(config, done);
  }
}

module.exports = command;


/***/ }),
/* 1164 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'networks',
  description: 'Show addresses for deployed contracts on each network',
  builder: {
    clean: {
      describe: "Remove network artifacts that don't belong to any configuration",
      type: "boolean",
      default: false
    }
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Networks = __webpack_require__(452);

    var config = Config.detect(options);

    if (options.clean) {
      Networks.clean(config, done);
    } else {
      Networks.display(config, done);
    }
  }
}

module.exports = command;


/***/ }),
/* 1165 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'opcode',
  description: 'Print the compiled opcodes for a given contract',
  builder: {
    all: {
      type: "boolean",
      default: false
    }
  },
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var TruffleError = __webpack_require__(23);
    var Contracts = __webpack_require__(84);
    var CodeUtils = __webpack_require__(441);

    if (options._.length == 0) {
      return done(new TruffleError("Please specify a contract name."));
    }

    var config = Config.detect(options);
    Contracts.compile(config, function(err) {
      if (err) return done(err);

      var contractName = options._[0];
      var Contract;
      try {
        Contract = config.resolver.require(contractName);
      } catch (e) {
        return done(new TruffleError("Cannot find compiled contract with name \"" + contractName + "\""));
      }

      var bytecode = Contract.deployedBytecode;

      if (options.creation) {
        bytecode = Contract.bytecode;
      }

      var opcodes = CodeUtils.parseCode(bytecode);

      var indexLength = ((opcodes.length) + "").length;

      opcodes.forEach(function(opcode, index) {
        var strIndex = index + ":";

        while (strIndex.length < indexLength + 1) {
          strIndex += " ";
        }

        console.log(strIndex + " " + opcode.name + " " + (opcode.pushData || ""));
      });
    });
  }
}

module.exports = command;


/***/ }),
/* 1166 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'publish',
  description: 'Publish a package to the Ethereum Package Registry',
  builder: {},
  run: function (options, done) {
    var Config = __webpack_require__(9);
    var Package = __webpack_require__(453);

    var config = Config.detect(options);
    Package.publish(config, done);
  }
}

module.exports = command;


/***/ }),
/* 1167 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'serve',
  description: 'Serve the build directory on localhost and watch for changes',
  builder: {
    port: {
      alias: "p",
      default: "8080"
    }
  },
  run: function (options, done) {
    var Serve = __webpack_require__(1172);
    var Config = __webpack_require__(9);
    var watch = __webpack_require__(449);

    var config = Config.detect(options);
    Serve.start(config, function() {
      watch.run(options, done);
    });
  }
}

module.exports = command;


/***/ }),
/* 1168 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'test',
  description: 'Run JavaScript and Solidity tests',
  builder: {
    "show-events": {
      describe: "Show all test logs",
      type: "boolean",
      default: false
    },
  },
  run: function (options, done) {
    var OS = __webpack_require__(5);
    var dir = __webpack_require__(98);
    var temp = __webpack_require__(424);
    var Config = __webpack_require__(9);
    var Artifactor = __webpack_require__(138);
    var Develop = __webpack_require__(249);
    var Test = __webpack_require__(1173);
    var fs = __webpack_require__(1);
    var copy = __webpack_require__(248);
    var Environment = __webpack_require__(104);

    var config = Config.detect(options);

    // if "development" exists, default to using that for testing
    if (!config.network && config.networks.development) {
      config.network = "development";
    }

    if (!config.network) {
      config.network = "test";
    }

    var ipcDisconnect;

    var files = [];

    if (options.file) {
      files = [options.file];
    } else if (options._.length > 0) {
      Array.prototype.push.apply(files, options._);
    }

    function getFiles(callback) {
      if (files.length != 0) {
        return callback(null, files);
      }

      dir.files(config.test_directory, callback);
    };

    getFiles(function(err, files) {
      if (err) return done(err);

      files = files.filter(function(file) {
        return file.match(config.test_file_extension_regexp) != null;
      });

      temp.mkdir('test-', function(err, temporaryDirectory) {
        if (err) return done(err);

        function cleanup() {
          var args = arguments;
          // Ensure directory cleanup.
          temp.cleanup(function(err) {
            // Ignore cleanup errors.
            done.apply(null, args);
            if (ipcDisconnect) {
              ipcDisconnect();
            }
          });
        };

        function run() {
          // Set a new artifactor; don't rely on the one created by Environments.
          // TODO: Make the test artifactor configurable.
          config.artifactor = new Artifactor(temporaryDirectory);

          Test.run(config.with({
            test_files: files,
            contracts_build_directory: temporaryDirectory
          }), cleanup);
        };

        var environmentCallback = function(err) {
          if (err) return done(err);
          // Copy all the built files over to a temporary directory, because we
          // don't want to save any tests artifacts. Only do this if the build directory
          // exists.
          fs.stat(config.contracts_build_directory, function(err, stat) {
            if (err) return run();

            copy(config.contracts_build_directory, temporaryDirectory, function(err) {
              if (err) return done(err);

              config.logger.log("Using network '" + config.network + "'." + OS.EOL);

              run();
            });
          });
        }

        if (config.networks[config.network]) {
          Environment.detect(config, environmentCallback);
        } else {
          var ipcOptions = {
            network: "test"
          };

          var testrpcOptions = {
            host: "127.0.0.1",
            port: 7545,
            network_id: 4447,
            mnemonic: "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat",
            gasLimit: config.gas
          };

          Develop.connectOrStart(ipcOptions, testrpcOptions, function(started, disconnect) {
            ipcDisconnect = disconnect;
            Environment.develop(config, testrpcOptions, environmentCallback);
          });
        }
      });
    });
  }
}

module.exports = command;


/***/ }),
/* 1169 */
/***/ (function(module, exports, __webpack_require__) {

var command = {
  command: 'version',
  description: 'Show version number and exit',
  builder: {},
  run: function (options, done) {
    var version = __webpack_require__(261);

    var bundle_version;

    if (version.bundle) {
      bundle_version = "v" + version.bundle;
    } else {
      bundle_version = "(unbundled)";
    }

    options.logger.log("Truffle " + bundle_version + " (core: " + version.core + ")");
    options.logger.log("Solidity v" + version.solc + " (solc-js)");

    done();
  }
}

module.exports = command;


/***/ }),
/* 1170 */
/***/ (function(module, exports, __webpack_require__) {

var copy = __webpack_require__(248);
var path = __webpack_require__(0);
var fs = __webpack_require__(1);

var templates = {
  test: {
    filename: path.join(__dirname, "templates", "example.js"),
    variable: "example"
  },
  contract: {
    filename: path.join(__dirname, "templates", "Example.sol"),
    name: "Example",
    variable: "example"
  },
  migration: {
    filename: path.join(__dirname, "templates", "migration.js"),
  }
};

var processFile = function(file_path, processfn, callback) {
  var stat = fs.statSync(file_path);

  fs.readFile(file_path, {encoding: "utf8"}, function(err, data) {
    if (err != null) {
      callback(err);
      return;
    }

    var result = processfn(data);
    fs.writeFile(file_path, result, {encoding: "utf8"}, callback);
  });
};

var replaceContents = function(file_path, find, replacement, callback) {
  processFile(file_path, function(data) {
    if (typeof find == "string") {
      find = new RegExp(find, "g");
    }
    return data.replace(find, replacement);
  }, callback);
};

var toUnderscoreFromCamel = function(string) {
  string = string.replace(/([A-Z])/g, function($1) {
    return "_" + $1.toLowerCase();
  });

  if (string[0] == "_") {
    string = string.substring(1);
  }

  return string;
};

var Create = {
  contract: function(directory, name, options, callback) {
    if(typeof options == "function") {
      callback = options;
    }

    var from = templates.contract.filename;
    var to = path.join(directory, name + ".sol");

    if (!options.force && fs.existsSync(to)) {
      return callback(new Error('Can not create ' + name + '.sol: file exists'));
    }

    copy.file(from, to, function(err) {
      if (err) return callback(err);

      replaceContents(to, templates.contract.name, name, callback);
    });
  },

  test: function(directory, name, options, callback) {
    if(typeof options == "function") {
      callback = options;
    }

    var underscored = toUnderscoreFromCamel(name);
    underscored = underscored.replace(/\./g, "_");
    var from = templates.test.filename;
    var to = path.join(directory, underscored + ".js");

    if (!options.force && fs.existsSync(to)) {
      return callback(new Error('Can not create ' + underscored + '.js: file exists'));
    }

    copy.file(from, to, function(err) {
      if (err) return callback(err);

      replaceContents(to, templates.contract.name, name, function(err) {
        if (err) return callback(err);
        replaceContents(to, templates.contract.variable, underscored, callback);
      });
    });
  },
  migration: function(directory, name, options, callback) {
    if(typeof options == "function") {
      callback = options;
    }

    var underscored = toUnderscoreFromCamel(name || "");
    underscored = underscored.replace(/\./g, "_");
    var from = templates.migration.filename;
    var filename = new Date().getTime() / 1000 | 0; // Only do seconds.

    if (name != null && name != "") {
      filename += "_" + underscored;
    }

    filename += ".js";
    var to = path.join(directory, filename);

    if (!options.force && fs.existsSync(to)) {
      return callback(new Error('Can not create ' + filename + ': file exists'));
    }

    copy.file(from, to, callback);
  }
}

module.exports = Create


/***/ }),
/* 1171 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(458);
var TruffleError = __webpack_require__(23);
var inherits = __webpack_require__(2).inherits;

inherits(BuildError, TruffleError);

function BuildError(message) {
  message = "Error building:\n\n" + message + "\n\n" + colors.red("Build failed. See above.");
  BuildError.super_.call(this, message);
}

module.exports = BuildError;


/***/ }),
/* 1172 */
/***/ (function(module, exports, __webpack_require__) {

var http = __webpack_require__(27);
var finalhandler = __webpack_require__(802);
var serveStatic = __webpack_require__(1053);
var path = __webpack_require__(0);

var Serve = {
  start: function(options, done) {
    var serve = serveStatic(options.build_directory);

    var server = http.createServer(function(req, res) {
      var done = finalhandler(req, res);
      serve(req, res, done);
    });

    var port = options.port || options.p || 8080;

    server.listen(port);

    var display_directory = "." + path.sep + path.relative(options.working_directory, options.build_directory);

    options.logger.log("Serving static assets in " + display_directory + " on port " + port + "...");
    done();
  }
};

module.exports = Serve;


/***/ }),
/* 1173 */
/***/ (function(module, exports, __webpack_require__) {

var Mocha = __webpack_require__(1245);
var chai = __webpack_require__(603);
var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var Web3 = __webpack_require__(25);
var Config = __webpack_require__(9);
var Contracts = __webpack_require__(84);
var Resolver = __webpack_require__(177);
var TestRunner = __webpack_require__(1176);
var TestResolver = __webpack_require__(455);
var TestSource = __webpack_require__(456);
var SolidityTest = __webpack_require__(1175);
var expect = __webpack_require__(21);
var find_contracts = __webpack_require__(139);
var Migrate = __webpack_require__(253);
var Profiler = __webpack_require__(175);
var async = __webpack_require__(28);
var originalrequire = __webpack_require__(257);

chai.use(__webpack_require__(1154));

var Test = {
  run: function(options, callback) {
    var self = this;

    expect.options(options, [
      "contracts_directory",
      "contracts_build_directory",
      "migrations_directory",
      "test_files",
      "network",
      "network_id",
      "provider",
    ]);

    var config = Config.default().merge(options);

    config.test_files = config.test_files.map(function(test_file) {
      return path.resolve(test_file);
    });

    // `accounts` will be populated before each contract() invocation
    // and passed to it so tests don't have to call it themselves.
    var web3 = new Web3();
    web3.setProvider(config.provider);

    // Override console.warn() because web3 outputs gross errors to it.
    // e.g., https://github.com/ethereum/web3.js/blob/master/lib/web3/allevents.js#L61
    // Output looks like this during tests: https://gist.github.com/tcoulter/1988349d1ec65ce6b958
    var warn = config.logger.warn;
    config.logger.warn = function(message) {
      if (message == "cannot find event for log") {
        return;
      } else {
        if (warn) {
          warn.apply(console, arguments);
        }
      }
    };

    var mocha = this.createMocha(config);

    var js_tests = config.test_files.filter(function(file) {
      return path.extname(file) != ".sol";
    });

    var sol_tests = config.test_files.filter(function(file) {
      return path.extname(file) == ".sol";
    });

    // Add Javascript tests because there's nothing we need to do with them.
    // Solidity tests will be handled later.
    js_tests.forEach(function(file) {
      // There's an idiosyncracy in Mocha where the same file can't be run twice
      // unless we delete the `require` cache.
      // https://github.com/mochajs/mocha/issues/995
      delete originalrequire.cache[file];

      mocha.addFile(file);
    });

    var dependency_paths = [];
    var testContracts = [];
    var accounts = [];
    var runner;
    var test_resolver;

    this.getAccounts(web3).then(function(accs) {
      accounts = accs;

      if (!config.from) {
        config.from = accounts[0];
      }

      if (!config.resolver) {
        config.resolver = new Resolver(config);
      }

      var test_source = new TestSource(config);
      test_resolver = new TestResolver(config.resolver, test_source, config.contracts_build_directory);
      test_resolver.cache_on = false;

      return self.compileContractsWithTestFilesIfNeeded(sol_tests, config, test_resolver);
    }).then(function(paths) {
      dependency_paths = paths;

      testContracts = sol_tests.map(function(test_file_path) {
        var built_name = "./" + path.basename(test_file_path);
        return test_resolver.require(built_name);
      });

      runner = new TestRunner(config);

      return self.performInitialDeploy(config, test_resolver);
    }).then(function() {
      return self.defineSolidityTests(mocha, testContracts, dependency_paths, runner);
    }).then(function() {
      return self.setJSTestGlobals(web3, accounts, test_resolver, runner);
    }).then(function() {
      // Finally, run mocha.
      process.on('unhandledRejection', function(reason, p) {
        throw reason;
      });

      mocha.run(function(failures) {
        config.logger.warn = warn;

        callback(failures);
      });
    }).catch(callback);
  },

  createMocha: function(config) {
    // Allow people to specify config.mocha in their config.
    var mochaConfig = config.mocha || {};

    // If the command line overrides color usage, use that.
    if (config.colors != null) {
      mochaConfig.useColors = config.colors;
    }

    // Default to true if configuration isn't set anywhere.
    if (mochaConfig.useColors == null) {
      mochaConfig.useColors = true;
    }

    var mocha = new Mocha(mochaConfig);

    return mocha;
  },

  getAccounts: function(web3, config) {
    return new Promise(function(accept, reject) {
      web3.eth.getAccounts(function(err, accs) {
        if (err) return reject(err);
        accept(accs);
      });
    });
  },

  compileContractsWithTestFilesIfNeeded: function(solidity_test_files, config, test_resolver) {
    return new Promise(function(accept, reject) {
      Profiler.updated(config.with({
        resolver: test_resolver
      }), function(err, updated) {
        if (err) return reject(err);

        updated = updated || [];

        // Compile project contracts and test contracts
        Contracts.compile(config.with({
          all: config.compileAll === true,
          files: updated.concat(solidity_test_files),
          resolver: test_resolver,
          quiet: false,
          quietWrite: true
        }), function(err, abstractions, paths) {
          if (err) return reject(err);
          accept(paths);
        });
      });
    });
  },

  performInitialDeploy: function(config, resolver) {
    return new Promise(function(accept, reject) {
      Migrate.run(config.with({
        reset: true,
        resolver: resolver,
        quiet: true
      }), function(err) {
        if (err) return reject(err);
        accept();
      });
    });
  },

  defineSolidityTests: function(mocha, contracts, dependency_paths, runner) {
    return new Promise(function(accept) {
      contracts.forEach(function(contract) {
        SolidityTest.define(contract, dependency_paths, runner, mocha);
      });

      accept();
    });
  },

  setJSTestGlobals: function(web3, accounts, test_resolver, runner) {
    return new Promise(function(accept, reject) {
      global.web3 = web3;
      global.assert = chai.assert;
      global.expect = chai.expect;
      global.artifacts = {
        require: function(import_path) {
          return test_resolver.require(import_path);
        }
      };

      var template = function(tests) {
        this.timeout(runner.TEST_TIMEOUT);

        before("prepare suite", function(done) {
          this.timeout(runner.BEFORE_TIMEOUT);
          runner.initialize(done);
        });

        beforeEach("before test", function(done) {
          runner.startTest(this, done);
        });

        afterEach("after test", function(done) {
          runner.endTest(this, done);
        });

        tests(accounts);
      }

      global.contract = function(name, tests) {
        Mocha.describe("Contract: " + name, function() { template.bind(this, tests)() });
      };

      global.contract.only = function(name, tests){
        Mocha.describe.only("Contract: " + name, function() { template.bind(this, tests)() });
      }

      global.contract.skip = function(name, tests){
        Mocha.describe.skip("Contract: " + name, function() { template.bind(this, tests)() });
      }

      accept();
    });
  }
};

module.exports = Test;


/***/ }),
/* 1174 */
/***/ (function(module, exports, __webpack_require__) {

// Using web3 for its sha function...
var Web3 = __webpack_require__(25);

var Deployed = {

  makeSolidityDeployedAddressesLibrary: function(mapping) {
    var self = this;

    var source = "";
    source += "pragma solidity ^0.4.17; \n\n library DeployedAddresses {" + "\n";

    Object.keys(mapping).forEach(function(name) {
      var address = mapping[name];

      var body = "revert();";

      if (address) {
        address = self.toChecksumAddress(address);

        body = "return " + address + ";";
      }

      source += "  function " + name + "() public pure returns (address) { " + body + " }"
      source += "\n";
    });

    source += "}";

    return source;
  },

  // Pulled from ethereumjs-util, but I don't want all its dependencies at the moment.
  toChecksumAddress: function (address) {
    var web3 = new Web3();
    address = address.toLowerCase().replace("0x", "");
    var hash = web3.sha3(address).replace("0x", "");
    var ret = '0x'

    for (var i = 0; i < address.length; i++) {
      if (parseInt(hash[i], 16) >= 8) {
        ret += address[i].toUpperCase()
      } else {
        ret += address[i]
      }
    }

    return ret
  }
};

module.exports = Deployed;


/***/ }),
/* 1175 */
/***/ (function(module, exports, __webpack_require__) {

var TestCase = __webpack_require__(959);
var Suite = __webpack_require__(958);
var Deployer = __webpack_require__(464);
var find_contracts = __webpack_require__(139);
var compile = __webpack_require__(247);
var artifactor = __webpack_require__(138);
var contract = __webpack_require__(69);
var series = __webpack_require__(28).series;
var path = __webpack_require__(0);
var SolidityCoder = __webpack_require__(136);

var SolidityTest = {
  define: function(abstraction, dependency_paths, runner, mocha) {
    var self = this;

    var suite = new Suite(abstraction.contract_name, {});
    suite.timeout(runner.BEFORE_TIMEOUT);

    // Set up our runner's needs first.
    suite.beforeAll("prepare suite", function(done) {
      series([
        runner.initialize.bind(runner),
        self.compileNewAbstractInterface.bind(this, runner),
        self.deployTestDependencies.bind(this, abstraction, dependency_paths, runner)
      ], done);
    });

    suite.beforeEach("before test", function(done) {
      runner.startTest(this, done);
    });

    // Function that decodes raw logs from unlinked third party assertion
    // libraries and returns usable TestEvent logs
    function decodeTestEvents(result) {
      if (result.logs.length) return result.logs;

      var logs = [];
      var signature = web3.sha3('TestEvent(bool,string)');

      result.receipt.logs.forEach(function(log) {
        if (log.topics.length === 2 && log.topics[0] === signature){
          var decoded = {
            event: 'TestEvent',
            args: {
              result: SolidityCoder.decodeParams(['bool'], log.topics[1].replace("0x", ""))[0],
              message: SolidityCoder.decodeParams(['string'], log.data.replace("0x", ""))[0]
            }
          };
          logs.push(decoded);
        }
      });
      return logs;
    };

    // Function that checks transaction logs to see if a test failed.
    function processResult(result) {
      result.logs = decodeTestEvents(result);

      result.logs.forEach(function(log) {
        if (log.event == "TestEvent" && log.args.result == false) {
          throw new Error(log.args.message);
        }
      })
    };

    // Add functions from test file.
    abstraction.abi.forEach(function(item) {
      if (item.type != "function") return;

      ["beforeAll", "beforeEach", "afterAll", "afterEach"].forEach(function(fn_type) {
        if (item.name.indexOf(fn_type) == 0) {
          suite[fn_type](item.name, function() {
            return abstraction.deployed().then(function(deployed) {
              return deployed[item.name]();
            }).then(processResult);
          });
        }
      });

      if (item.name.indexOf("test") == 0) {
        var test = new TestCase(item.name, function() {
          return abstraction.deployed().then(function(deployed) {
            return deployed[item.name]();
          }).then(processResult);
        });

        test.timeout(runner.TEST_TIMEOUT);
        suite.addTest(test);
      }
    });

    suite.afterEach("after test", function(done) {
      runner.endTest(this, done);
    });

    mocha.suite.addSuite(suite);
  },

  compileNewAbstractInterface: function(runner, callback) {
    var self = this;

    find_contracts(runner.config.contracts_directory, function(err, files) {
      if (err) return callback(err);

      compile.with_dependencies(runner.config.with({
        paths: [
          "truffle/DeployedAddresses.sol",
          path.join(__dirname, "SafeSend.sol")
        ],
        quiet: true
      }), function(err, contracts) {
        if (err) return callback(err);

        // Set network values.
        Object.keys(contracts).forEach(function(name) {
          contracts[name].network_id = runner.config.network_id;
          contracts[name].default_network = runner.config.default_network;
        });

        runner.config.artifactor.saveAll(contracts, runner.config.contracts_build_directory).then(function() {
          callback();
        }).catch(callback);
      });
    });
  },

  deployTestDependencies: function(abstraction, dependency_paths, runner, callback) {
    var deployer = new Deployer(runner.config.with({
      logger: { log: function() {} }
    }));

    var Assert = runner.config.resolver.require("truffle/Assert.sol");
    var DeployedAddresses = runner.config.resolver.require("truffle/DeployedAddresses.sol");
    var SafeSend = runner.config.resolver.require("SafeSend.sol");

    deployer.deploy([
      Assert,
      DeployedAddresses
    ]).then(function() {
      dependency_paths.forEach(function(dependency_path) {
        var dependency = runner.config.resolver.require(dependency_path);

        if (dependency.isDeployed()) {
          deployer.link(dependency, abstraction);
        }
      });
    });

    var deployed;
    deployer.deploy(abstraction).then(function() {
      return abstraction.deployed();
    }).then(function(instance) {
      deployed = instance;
      if (deployed.initialBalance) {
        return deployed.initialBalance.call();
      } else {
        return 0;
      }
    }).then(function(balance) {
      if (balance != 0) {
        return deployer.deploy(SafeSend, deployed.address, {
          value: balance
        }).then(function() {
          return SafeSend.deployed();
        }).then(function(safesend) {
          return safesend.deliver();
        });
      }
    });

    deployer.start().then(function() {
      callback();
    }).catch(callback);
  }
};

module.exports = SolidityTest;


/***/ }),
/* 1176 */
/***/ (function(module, exports, __webpack_require__) {

var Web3 = __webpack_require__(25);
var Config = __webpack_require__(9);
var Migrate = __webpack_require__(253);
var TestResolver = __webpack_require__(455);
var TestSource = __webpack_require__(456);
var expect = __webpack_require__(21);
var contract = __webpack_require__(69);
var SolidityCoder = __webpack_require__(136);
var path = __webpack_require__(0);
var _ = __webpack_require__(24);
var async = __webpack_require__(28);
var fs = __webpack_require__(1);

function TestRunner(options) {
  options = options || {};

  expect.options(options, [
    "resolver",
    "provider",
    "contracts_build_directory"
  ]);

  this.config = Config.default().merge(options);

  this.logger = options.logger || console;
  this.initial_resolver = options.resolver;
  this.provider = options.provider;

  this.can_snapshot = false;
  this.first_snapshot = true;
  this.initial_snapshot = null;
  this.known_events = {};
  this.web3 = new Web3();
  this.web3.setProvider(options.provider);

  // For each test
  this.currentTestStartBlock = null;

  this.BEFORE_TIMEOUT = 120000;
  this.TEST_TIMEOUT = 300000;
};

TestRunner.prototype.initialize = function(callback) {
  var self = this;

  var test_source = new TestSource(self.config);
  this.config.resolver = new TestResolver(self.initial_resolver, test_source, self.config.contracts_build_directory);

  var afterStateReset = function(err) {
    if (err) return callback(err);

    fs.readdir(self.config.contracts_build_directory, function(err, files) {
      if (err) return callback(err);

      files = _.filter(files, function(file) {
        return path.extname(file) === ".json"
      });

      async.map(files, function(file, finished) {
        fs.readFile(path.join(self.config.contracts_build_directory, file), "utf8", finished);
      }, function(err, data) {
        if (err) return callback(err);

        var contracts = data.map(JSON.parse).map(contract);
        var abis = _.flatMap(contracts, "abi");

        abis.map(function(abi) {
          if (abi.type == "event") {
            var signature = abi.name + "(" + _.map(abi.inputs, "type").join(",") + ")";
            self.known_events[self.web3.sha3(signature)] = {
              signature: signature,
              abi_entry: abi
            };
          }
        });
        callback();
      });
    });
  };

  if (self.first_snapshot) {
    // // Make the initial deployment (full migration).
    // self.deploy(function(err) {
    //   if (err) return callback(err);

    self.snapshot(function(err, initial_snapshot) {
      if (err == null) {
        self.can_snapshot = true;
        self.initial_snapshot = initial_snapshot;
      }

      self.first_snapshot = false;

      afterStateReset();
    });
    //});
  } else {
    self.resetState(afterStateReset);
  }
};

TestRunner.prototype.deploy = function(callback) {
  Migrate.run(this.config.with({
    reset: true,
    quiet: true
  }), callback);
};

TestRunner.prototype.resetState = function(callback) {
  var self = this;
  if (this.can_snapshot) {
    this.revert(this.initial_snapshot, function(err) {
      if (err) return callback(err);
      self.snapshot(function(err, snapshot) {
        if (err) return callback(err);
        self.initial_snapshot = snapshot;
        callback();
      });
    });
  } else {
    this.deploy(callback);
  }
};

TestRunner.prototype.startTest = function(mocha, callback) {
  var self = this;
  this.web3.eth.getBlockNumber(function(err, result) {
    if (err) return callback(err);

    result = self.web3.toBigNumber(result);

    // Add one in base 10
    self.currentTestStartBlock = result.plus(1, 10);

    callback();
  });
};

TestRunner.prototype.endTest = function(mocha, callback) {
  var self = this;
  
  // Skip logging if test passes and `show-events` option is not true
  if (mocha.currentTest.state != "failed" && !self.config["show-events"]) {
    return callback();
  }

  var logs = [];

  // There's no API for eth_getLogs?
  this.rpc("eth_getLogs", [{
    fromBlock: "0x" + this.currentTestStartBlock.toString(16)
  }], function(err, result) {
    if (err) return callback(err);

    var logs = result.result;

    if (logs.length == 0) {
      self.logger.log("    > No events were emitted");
      return callback();
    }

    self.logger.log("\n    Events emitted during test:");
    self.logger.log(  "    ---------------------------");
    self.logger.log("");

    logs.forEach(function(log) {
      var event = self.known_events[log.topics[0]];

      if (event == null) {
        return;
      }

      var types = event.abi_entry.inputs.map(function(input) {
        return input.indexed == true ? null : input.type;
      }).filter(function(type) {
        return type != null;
      });
      var values = SolidityCoder.decodeParams(types, log.data.replace("0x", ""));
      var index = 0;

      var line = "    " + event.abi_entry.name + "(";
      line += event.abi_entry.inputs.map(function(input) {
        var value;
        if (input.indexed == true) {
          value = "<indexed>";
        } else {
          value = values[index];
          index += 1;
        }

        return input.name + ": " + value.toString();
      }).join(", ");
      line += ")";
      self.logger.log(line);
    });
    self.logger.log(  "\n    ---------------------------");
    callback();
  });
};

TestRunner.prototype.snapshot = function(callback) {
  this.rpc("evm_snapshot", function(err, result) {
    if (err) return callback(err);
    callback(null, result.result);
  });
},

TestRunner.prototype.revert = function(snapshot_id, callback) {
  this.rpc("evm_revert", [snapshot_id], callback);
}

TestRunner.prototype.rpc = function(method, arg, cb) {
  var req = {
    jsonrpc: "2.0",
    method: method,
    id: new Date().getTime()
  };
  if (arguments.length == 3) {
    req.params = arg;
  } else {
    cb = arg;
  }

  var intermediary = function(err, result) {
    if (err != null) {
      cb(err);
      return;
    }

    if (result.error != null) {
      cb(new Error("RPC Error: " + (result.error.message || result.error)));
      return;
    }

    cb(null, result);
  };

  this.provider.sendAsync(req, intermediary);
};

module.exports = TestRunner;


/***/ }),
/* 1177 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = () => {
	const pattern = [
		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\\u0007)',
		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))'
	].join('|');

	return new RegExp(pattern, 'g');
};


/***/ }),
/* 1178 */
/***/ (function(module, exports) {

module['exports'] = function runTheTrap(text, options) {
  var result = '';
  text = text || 'Run the trap, drop the bass';
  text = text.split('');
  var trap = {
    a: ['\u0040', '\u0104', '\u023a', '\u0245', '\u0394', '\u039b', '\u0414'],
    b: ['\u00df', '\u0181', '\u0243', '\u026e', '\u03b2', '\u0e3f'],
    c: ['\u00a9', '\u023b', '\u03fe'],
    d: ['\u00d0', '\u018a', '\u0500', '\u0501', '\u0502', '\u0503'],
    e: ['\u00cb', '\u0115', '\u018e', '\u0258', '\u03a3', '\u03be', '\u04bc',
         '\u0a6c'],
    f: ['\u04fa'],
    g: ['\u0262'],
    h: ['\u0126', '\u0195', '\u04a2', '\u04ba', '\u04c7', '\u050a'],
    i: ['\u0f0f'],
    j: ['\u0134'],
    k: ['\u0138', '\u04a0', '\u04c3', '\u051e'],
    l: ['\u0139'],
    m: ['\u028d', '\u04cd', '\u04ce', '\u0520', '\u0521', '\u0d69'],
    n: ['\u00d1', '\u014b', '\u019d', '\u0376', '\u03a0', '\u048a'],
    o: ['\u00d8', '\u00f5', '\u00f8', '\u01fe', '\u0298', '\u047a', '\u05dd',
         '\u06dd', '\u0e4f'],
    p: ['\u01f7', '\u048e'],
    q: ['\u09cd'],
    r: ['\u00ae', '\u01a6', '\u0210', '\u024c', '\u0280', '\u042f'],
    s: ['\u00a7', '\u03de', '\u03df', '\u03e8'],
    t: ['\u0141', '\u0166', '\u0373'],
    u: ['\u01b1', '\u054d'],
    v: ['\u05d8'],
    w: ['\u0428', '\u0460', '\u047c', '\u0d70'],
    x: ['\u04b2', '\u04fe', '\u04fc', '\u04fd'],
    y: ['\u00a5', '\u04b0', '\u04cb'],
    z: ['\u01b5', '\u0240'],
  };
  text.forEach(function(c) {
    c = c.toLowerCase();
    var chars = trap[c] || [' '];
    var rand = Math.floor(Math.random() * chars.length);
    if (typeof trap[c] !== 'undefined') {
      result += trap[c][rand];
    } else {
      result += c;
    }
  });
  return result;
};


/***/ }),
/* 1179 */
/***/ (function(module, exports) {

// please no
module['exports'] = function zalgo(text, options) {
  text = text || '   he is here   ';
  var soul = {
    'up': [
      '̍', '̎', '̄', '̅',
      '̿', '̑', '̆', '̐',
      '͒', '͗', '͑', '̇',
      '̈', '̊', '͂', '̓',
      '̈', '͊', '͋', '͌',
      '̃', '̂', '̌', '͐',
      '̀', '́', '̋', '̏',
      '̒', '̓', '̔', '̽',
      '̉', 'ͣ', 'ͤ', 'ͥ',
      'ͦ', 'ͧ', 'ͨ', 'ͩ',
      'ͪ', 'ͫ', 'ͬ', 'ͭ',
      'ͮ', 'ͯ', '̾', '͛',
      '͆', '̚',
    ],
    'down': [
      '̖', '̗', '̘', '̙',
      '̜', '̝', '̞', '̟',
      '̠', '̤', '̥', '̦',
      '̩', '̪', '̫', '̬',
      '̭', '̮', '̯', '̰',
      '̱', '̲', '̳', '̹',
      '̺', '̻', '̼', 'ͅ',
      '͇', '͈', '͉', '͍',
      '͎', '͓', '͔', '͕',
      '͖', '͙', '͚', '̣',
    ],
    'mid': [
      '̕', '̛', '̀', '́',
      '͘', '̡', '̢', '̧',
      '̨', '̴', '̵', '̶',
      '͜', '͝', '͞',
      '͟', '͠', '͢', '̸',
      '̷', '͡', ' ҉',
    ],
  };
  var all = [].concat(soul.up, soul.down, soul.mid);

  function randomNumber(range) {
    var r = Math.floor(Math.random() * range);
    return r;
  }

  function isChar(character) {
    var bool = false;
    all.filter(function(i) {
      bool = (i === character);
    });
    return bool;
  }


  function heComes(text, options) {
    var result = '';
    var counts;
    var l;
    options = options || {};
    options['up'] =
      typeof options['up'] !== 'undefined' ? options['up'] : true;
    options['mid'] =
      typeof options['mid'] !== 'undefined' ? options['mid'] : true;
    options['down'] =
      typeof options['down'] !== 'undefined' ? options['down'] : true;
    options['size'] =
      typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';
    text = text.split('');
    for (l in text) {
      if (isChar(l)) {
        continue;
      }
      result = result + text[l];
      counts = {'up': 0, 'down': 0, 'mid': 0};
      switch (options.size) {
      case 'mini':
        counts.up = randomNumber(8);
        counts.mid = randomNumber(2);
        counts.down = randomNumber(8);
        break;
      case 'maxi':
        counts.up = randomNumber(16) + 3;
        counts.mid = randomNumber(4) + 1;
        counts.down = randomNumber(64) + 3;
        break;
      default:
        counts.up = randomNumber(8) + 1;
        counts.mid = randomNumber(6) / 2;
        counts.down = randomNumber(8) + 1;
        break;
      }

      var arr = ['up', 'mid', 'down'];
      for (var d in arr) {
        var index = arr[d];
        for (var i = 0; i <= counts[index]; i++) {
          if (options[index]) {
            result = result + soul[index][randomNumber(soul[index].length)];
          }
        }
      }
    }
    return result;
  }
  // don't summon him
  return heComes(text, options);
};



/***/ }),
/* 1180 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);

module['exports'] = function() {
  //
  // Extends prototype of native string object to allow for "foo".red syntax
  //
  var addProperty = function(color, func) {
    String.prototype.__defineGetter__(color, func);
  };

  addProperty('strip', function() {
    return colors.strip(this);
  });

  addProperty('stripColors', function() {
    return colors.strip(this);
  });

  addProperty('trap', function() {
    return colors.trap(this);
  });

  addProperty('zalgo', function() {
    return colors.zalgo(this);
  });

  addProperty('zebra', function() {
    return colors.zebra(this);
  });

  addProperty('rainbow', function() {
    return colors.rainbow(this);
  });

  addProperty('random', function() {
    return colors.random(this);
  });

  addProperty('america', function() {
    return colors.america(this);
  });

  //
  // Iterate through all default styles and colors
  //
  var x = Object.keys(colors.styles);
  x.forEach(function(style) {
    addProperty(style, function() {
      return colors.stylize(this, style);
    });
  });

  function applyTheme(theme) {
    //
    // Remark: This is a list of methods that exist
    // on String that you should not overwrite.
    //
    var stringPrototypeBlacklist = [
      '__defineGetter__', '__defineSetter__', '__lookupGetter__',
      '__lookupSetter__', 'charAt', 'constructor', 'hasOwnProperty',
      'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString',
      'valueOf', 'charCodeAt', 'indexOf', 'lastIndexOf', 'length',
      'localeCompare', 'match', 'repeat', 'replace', 'search', 'slice',
      'split', 'substring', 'toLocaleLowerCase', 'toLocaleUpperCase',
      'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight',
    ];

    Object.keys(theme).forEach(function(prop) {
      if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
        console.log('warn: '.red + ('String.prototype' + prop).magenta +
          ' is probably something you don\'t want to override.  ' +
          'Ignoring style name');
      } else {
        if (typeof(theme[prop]) === 'string') {
          colors[prop] = colors[theme[prop]];
          addProperty(prop, function() {
            return colors[theme[prop]](this);
          });
        } else {
          addProperty(prop, function() {
            var ret = this;
            for (var t = 0; t < theme[prop].length; t++) {
              ret = colors[theme[prop][t]](ret);
            }
            return ret;
          });
        }
      }
    });
  }

  colors.setTheme = function(theme) {
    if (typeof theme === 'string') {
      console.log('colors.setTheme now only accepts an object, not a string. ' +
        'If you are trying to set a theme from a file, it is now your (the ' +
        'caller\'s) responsibility to require the file.  The old syntax ' +
        'looked like colors.setTheme(__dirname + ' +
        '\'/../themes/generic-logging.js\'); The new syntax looks like '+
        'colors.setTheme(require(__dirname + ' +
        '\'/../themes/generic-logging.js\'));');
       return;
    } else {
      applyTheme(theme);
    }
  };
};


/***/ }),
/* 1181 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);

module['exports'] = (function() {
  return function(letter, i, exploded) {
    if (letter === ' ') return letter;
    switch (i%3) {
      case 0: return colors.red(letter);
      case 1: return colors.white(letter);
      case 2: return colors.blue(letter);
    }
  };
})();


/***/ }),
/* 1182 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);

module['exports'] = (function() {
  // RoY G BiV
  var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];
  return function(letter, i, exploded) {
    if (letter === ' ') {
      return letter;
    } else {
      return colors[rainbowColors[i++ % rainbowColors.length]](letter);
    }
  };
})();



/***/ }),
/* 1183 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);

module['exports'] = (function() {
  var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',
    'blue', 'white', 'cyan', 'magenta'];
  return function(letter, i, exploded) {
    return letter === ' ' ? letter :
      colors[
        available[Math.round(Math.random() * (available.length - 2))]
      ](letter);
  };
})();


/***/ }),
/* 1184 */
/***/ (function(module, exports, __webpack_require__) {

var colors = __webpack_require__(105);

module['exports'] = function(letter, i, exploded) {
  return i % 2 === 0 ? letter : colors.inverse(letter);
};


/***/ }),
/* 1185 */
/***/ (function(module, exports) {

/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

var styles = {};
module['exports'] = styles;

var codes = {
  reset: [0, 0],

  bold: [1, 22],
  dim: [2, 22],
  italic: [3, 23],
  underline: [4, 24],
  inverse: [7, 27],
  hidden: [8, 28],
  strikethrough: [9, 29],

  black: [30, 39],
  red: [31, 39],
  green: [32, 39],
  yellow: [33, 39],
  blue: [34, 39],
  magenta: [35, 39],
  cyan: [36, 39],
  white: [37, 39],
  gray: [90, 39],
  grey: [90, 39],

  bgBlack: [40, 49],
  bgRed: [41, 49],
  bgGreen: [42, 49],
  bgYellow: [43, 49],
  bgBlue: [44, 49],
  bgMagenta: [45, 49],
  bgCyan: [46, 49],
  bgWhite: [47, 49],

  // legacy styles for colors pre v1.0.0
  blackBG: [40, 49],
  redBG: [41, 49],
  greenBG: [42, 49],
  yellowBG: [43, 49],
  blueBG: [44, 49],
  magentaBG: [45, 49],
  cyanBG: [46, 49],
  whiteBG: [47, 49],

};

Object.keys(codes).forEach(function(key) {
  var val = codes[key];
  var style = styles[key] = [];
  style.open = '\u001b[' + val[0] + 'm';
  style.close = '\u001b[' + val[1] + 'm';
});


/***/ }),
/* 1186 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/



module.exports = function(flag, argv) {
  argv = argv || process.argv;

  var terminatorPos = argv.indexOf('--');
  var prefix = /^-{1,2}/.test(flag) ? '' : '--';
  var pos = argv.indexOf(prefix + flag);

  return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};


/***/ }),
/* 1187 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/



var os = __webpack_require__(5);
var hasFlag = __webpack_require__(1186);

var env = process.env;

var forceColor = void 0;
if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {
  forceColor = false;
} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')
           || hasFlag('color=always')) {
  forceColor = true;
}
if ('FORCE_COLOR' in env) {
  forceColor = env.FORCE_COLOR.length === 0
    || parseInt(env.FORCE_COLOR, 10) !== 0;
}

function translateLevel(level) {
  if (level === 0) {
    return false;
  }

  return {
    level: level,
    hasBasic: true,
    has256: level >= 2,
    has16m: level >= 3,
  };
}

function supportsColor(stream) {
  if (forceColor === false) {
    return 0;
  }

  if (hasFlag('color=16m') || hasFlag('color=full')
      || hasFlag('color=truecolor')) {
    return 3;
  }

  if (hasFlag('color=256')) {
    return 2;
  }

  if (stream && !stream.isTTY && forceColor !== true) {
    return 0;
  }

  var min = forceColor ? 1 : 0;

  if (process.platform === 'win32') {
    // Node.js 7.5.0 is the first version of Node.js to include a patch to
    // libuv that enables 256 color output on Windows. Anything earlier and it
    // won't work. However, here we target Node.js 8 at minimum as it is an LTS
    // release, and Node.js 7 is not. Windows 10 build 10586 is the first
    // Windows release that supports 256 colors. Windows 10 build 14931 is the
    // first release that supports 16m/TrueColor.
    var osRelease = os.release().split('.');
    if (Number(process.versions.node.split('.')[0]) >= 8
        && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
      return Number(osRelease[2]) >= 14931 ? 3 : 2;
    }

    return 1;
  }

  if ('CI' in env) {
    if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {
      return sign in env;
    }) || env.CI_NAME === 'codeship') {
      return 1;
    }

    return min;
  }

  if ('TEAMCITY_VERSION' in env) {
    return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0
    );
  }

  if ('TERM_PROGRAM' in env) {
    var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);

    switch (env.TERM_PROGRAM) {
      case 'iTerm.app':
        return version >= 3 ? 3 : 2;
      case 'Hyper':
        return 3;
      case 'Apple_Terminal':
        return 2;
      // No default
    }
  }

  if (/-256(color)?$/i.test(env.TERM)) {
    return 2;
  }

  if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
    return 1;
  }

  if ('COLORTERM' in env) {
    return 1;
  }

  if (env.TERM === 'dumb') {
    return min;
  }

  return min;
}

function getSupportLevel(stream) {
  var level = supportsColor(stream);
  return translateLevel(level);
}

module.exports = {
  supportsColor: getSupportLevel,
  stdout: getSupportLevel(process.stdout),
  stderr: getSupportLevel(process.stderr),
};


/***/ }),
/* 1188 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const childProcess = __webpack_require__(39);
const util = __webpack_require__(2);
const crossSpawn = __webpack_require__(684);
const stripEof = __webpack_require__(1079);
const npmRunPath = __webpack_require__(972);
const isStream = __webpack_require__(904);
const _getStream = __webpack_require__(835);
const pFinally = __webpack_require__(979);
const onExit = __webpack_require__(1057);
const errname = __webpack_require__(1189);
const stdio = __webpack_require__(1190);

const TEN_MEGABYTES = 1000 * 1000 * 10;

function handleArgs(cmd, args, opts) {
	let parsed;

	if (opts && opts.env && opts.extendEnv !== false) {
		opts.env = Object.assign({}, process.env, opts.env);
	}

	if (opts && opts.__winShell === true) {
		delete opts.__winShell;
		parsed = {
			command: cmd,
			args,
			options: opts,
			file: cmd,
			original: cmd
		};
	} else {
		parsed = crossSpawn._parse(cmd, args, opts);
	}

	opts = Object.assign({
		maxBuffer: TEN_MEGABYTES,
		stripEof: true,
		preferLocal: true,
		localDir: parsed.options.cwd || process.cwd(),
		encoding: 'utf8',
		reject: true,
		cleanup: true
	}, parsed.options);

	opts.stdio = stdio(opts);

	if (opts.preferLocal) {
		opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));
	}

	return {
		cmd: parsed.command,
		args: parsed.args,
		opts,
		parsed
	};
}

function handleInput(spawned, opts) {
	const input = opts.input;

	if (input === null || input === undefined) {
		return;
	}

	if (isStream(input)) {
		input.pipe(spawned.stdin);
	} else {
		spawned.stdin.end(input);
	}
}

function handleOutput(opts, val) {
	if (val && opts.stripEof) {
		val = stripEof(val);
	}

	return val;
}

function handleShell(fn, cmd, opts) {
	let file = '/bin/sh';
	let args = ['-c', cmd];

	opts = Object.assign({}, opts);

	if (process.platform === 'win32') {
		opts.__winShell = true;
		file = process.env.comspec || 'cmd.exe';
		args = ['/s', '/c', `"${cmd}"`];
		opts.windowsVerbatimArguments = true;
	}

	if (opts.shell) {
		file = opts.shell;
		delete opts.shell;
	}

	return fn(file, args, opts);
}

function getStream(process, stream, encoding, maxBuffer) {
	if (!process[stream]) {
		return null;
	}

	let ret;

	if (encoding) {
		ret = _getStream(process[stream], {
			encoding,
			maxBuffer
		});
	} else {
		ret = _getStream.buffer(process[stream], {maxBuffer});
	}

	return ret.catch(err => {
		err.stream = stream;
		err.message = `${stream} ${err.message}`;
		throw err;
	});
}

module.exports = (cmd, args, opts) => {
	let joinedCmd = cmd;

	if (Array.isArray(args) && args.length > 0) {
		joinedCmd += ' ' + args.join(' ');
	}

	const parsed = handleArgs(cmd, args, opts);
	const encoding = parsed.opts.encoding;
	const maxBuffer = parsed.opts.maxBuffer;

	let spawned;
	try {
		spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);
	} catch (err) {
		return Promise.reject(err);
	}

	let removeExitHandler;
	if (parsed.opts.cleanup) {
		removeExitHandler = onExit(() => {
			spawned.kill();
		});
	}

	let timeoutId = null;
	let timedOut = false;

	const cleanupTimeout = () => {
		if (timeoutId) {
			clearTimeout(timeoutId);
			timeoutId = null;
		}
	};

	if (parsed.opts.timeout > 0) {
		timeoutId = setTimeout(() => {
			timeoutId = null;
			timedOut = true;
			spawned.kill(parsed.opts.killSignal);
		}, parsed.opts.timeout);
	}

	const processDone = new Promise(resolve => {
		spawned.on('exit', (code, signal) => {
			cleanupTimeout();
			resolve({code, signal});
		});

		spawned.on('error', err => {
			cleanupTimeout();
			resolve({err});
		});

		if (spawned.stdin) {
			spawned.stdin.on('error', err => {
				cleanupTimeout();
				resolve({err});
			});
		}
	});

	function destroy() {
		if (spawned.stdout) {
			spawned.stdout.destroy();
		}

		if (spawned.stderr) {
			spawned.stderr.destroy();
		}
	}

	const promise = pFinally(Promise.all([
		processDone,
		getStream(spawned, 'stdout', encoding, maxBuffer),
		getStream(spawned, 'stderr', encoding, maxBuffer)
	]).then(arr => {
		const result = arr[0];
		const stdout = arr[1];
		const stderr = arr[2];

		let err = result.err;
		const code = result.code;
		const signal = result.signal;

		if (removeExitHandler) {
			removeExitHandler();
		}

		if (err || code !== 0 || signal !== null) {
			if (!err) {
				let output = '';

				if (Array.isArray(parsed.opts.stdio)) {
					if (parsed.opts.stdio[2] !== 'inherit') {
						output += output.length > 0 ? stderr : `\n${stderr}`;
					}

					if (parsed.opts.stdio[1] !== 'inherit') {
						output += `\n${stdout}`;
					}
				} else if (parsed.opts.stdio !== 'inherit') {
					output = `\n${stderr}${stdout}`;
				}

				err = new Error(`Command failed: ${joinedCmd}${output}`);
				err.code = code < 0 ? errname(code) : code;
			}

			// TODO: missing some timeout logic for killed
			// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
			// err.killed = spawned.killed || killed;
			err.killed = err.killed || spawned.killed;

			err.stdout = stdout;
			err.stderr = stderr;
			err.failed = true;
			err.signal = signal || null;
			err.cmd = joinedCmd;
			err.timedOut = timedOut;

			if (!parsed.opts.reject) {
				return err;
			}

			throw err;
		}

		return {
			stdout: handleOutput(parsed.opts, stdout),
			stderr: handleOutput(parsed.opts, stderr),
			code: 0,
			failed: false,
			killed: false,
			signal: null,
			cmd: joinedCmd,
			timedOut: false
		};
	}), destroy);

	crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);

	handleInput(spawned, parsed.opts);

	spawned.then = promise.then.bind(promise);
	spawned.catch = promise.catch.bind(promise);

	return spawned;
};

module.exports.stdout = function () {
	// TODO: set `stderr: 'ignore'` when that option is implemented
	return module.exports.apply(null, arguments).then(x => x.stdout);
};

module.exports.stderr = function () {
	// TODO: set `stdout: 'ignore'` when that option is implemented
	return module.exports.apply(null, arguments).then(x => x.stderr);
};

module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);

module.exports.sync = (cmd, args, opts) => {
	const parsed = handleArgs(cmd, args, opts);

	if (isStream(parsed.opts.input)) {
		throw new TypeError('The `input` option cannot be a stream in sync mode');
	}

	const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);

	if (result.error || result.status !== 0) {
		throw (result.error || new Error(result.stderr === '' ? result.stdout : result.stderr));
	}

	result.stdout = handleOutput(parsed.opts, result.stdout);
	result.stderr = handleOutput(parsed.opts, result.stderr);

	return result;
};

module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);

module.exports.spawn = util.deprecate(module.exports, 'execa.spawn() is deprecated. Use execa() instead.');


/***/ }),
/* 1189 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// The Node team wants to deprecate `process.bind(...)`.
//   https://github.com/nodejs/node/pull/2768
//
// However, we need the 'uv' binding for errname support.
// This is a defensive wrapper around it so `execa` will not fail entirely if it stops working someday.
//
// If this ever stops working. See: https://github.com/sindresorhus/execa/issues/31#issuecomment-215939939 for another possible solution.
let uv;

try {
	uv = process.binding('uv');

	if (typeof uv.errname !== 'function') {
		throw new TypeError('uv.errname is not a function');
	}
} catch (err) {
	console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
	uv = null;
}

function errname(uv, code) {
	if (uv) {
		return uv.errname(code);
	}

	if (!(code < 0)) {
		throw new Error('err >= 0');
	}

	return `Unknown system error ${code}`;
}

module.exports = code => errname(uv, code);

// Used for testing the fallback behavior
module.exports.__test__ = errname;


/***/ }),
/* 1190 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const alias = ['stdin', 'stdout', 'stderr'];

const hasAlias = opts => alias.some(x => Boolean(opts[x]));

module.exports = opts => {
	if (!opts) {
		return null;
	}

	if (opts.stdio && hasAlias(opts)) {
		throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`);
	}

	if (typeof opts.stdio === 'string') {
		return opts.stdio;
	}

	const stdio = opts.stdio || [];

	if (!Array.isArray(stdio)) {
		throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
	}

	const result = [];
	const len = Math.max(stdio.length, alias.length);

	for (let i = 0; i < len; i++) {
		let value = null;

		if (stdio[i] !== undefined) {
			value = stdio[i];
		} else if (opts[alias[i]] !== undefined) {
			value = opts[alias[i]];
		}

		result[i] = value;
	}

	return result;
};


/***/ }),
/* 1191 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const path = __webpack_require__(0);
const fs = __webpack_require__(3);
const stripBom = __webpack_require__(1078);
const parseJson = __webpack_require__(984);
const pify = __webpack_require__(166);

const parse = (data, fp) => parseJson(stripBom(data), path.relative('.', fp));

module.exports = fp => pify(fs.readFile)(fp, 'utf8').then(data => parse(data, fp));
module.exports.sync = fp => parse(fs.readFileSync(fp, 'utf8'), fp);


/***/ }),
/* 1192 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const execa = __webpack_require__(1188);
const lcid = __webpack_require__(917);
const mem = __webpack_require__(953);

const defaultOpts = {spawn: true};
const defaultLocale = 'en_US';

function getEnvLocale(env) {
	env = env || process.env;
	return env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE;
}

function parseLocale(x) {
	const env = x.split('\n').reduce((env, def) => {
		def = def.split('=');
		env[def[0]] = def[1].replace(/^"|"$/g, '');
		return env;
	}, {});
	return getEnvLocale(env);
}

function getLocale(str) {
	return (str && str.replace(/[.:].*/, ''));
}

function getAppleLocale() {
	return execa.stdout('defaults', ['read', '-g', 'AppleLocale']);
}

function getAppleLocaleSync() {
	return execa.sync('defaults', ['read', '-g', 'AppleLocale']).stdout;
}

function getUnixLocale() {
	if (process.platform === 'darwin') {
		return getAppleLocale();
	}

	return execa.stdout('locale')
		.then(stdout => getLocale(parseLocale(stdout)));
}

function getUnixLocaleSync() {
	if (process.platform === 'darwin') {
		return getAppleLocaleSync();
	}

	return getLocale(parseLocale(execa.sync('locale').stdout));
}

function getWinLocale() {
	return execa.stdout('wmic', ['os', 'get', 'locale'])
		.then(stdout => {
			const lcidCode = parseInt(stdout.replace('Locale', ''), 16);
			return lcid.from(lcidCode);
		});
}

function getWinLocaleSync() {
	const stdout = execa.sync('wmic', ['os', 'get', 'locale']).stdout;
	const lcidCode = parseInt(stdout.replace('Locale', ''), 16);
	return lcid.from(lcidCode);
}

module.exports = mem(opts => {
	opts = opts || defaultOpts;
	const envLocale = getEnvLocale();
	let thenable;

	if (envLocale || opts.spawn === false) {
		thenable = Promise.resolve(getLocale(envLocale));
	} else if (process.platform === 'win32') {
		thenable = getWinLocale();
	} else {
		thenable = getUnixLocale();
	}

	return thenable.then(locale => locale || defaultLocale)
		.catch(() => defaultLocale);
});

module.exports.sync = mem(opts => {
	opts = opts || defaultOpts;
	const envLocale = getEnvLocale();
	let res;

	if (envLocale || opts.spawn === false) {
		res = getLocale(envLocale);
	} else {
		try {
			if (process.platform === 'win32') {
				res = getWinLocaleSync();
			} else {
				res = getUnixLocaleSync();
			}
		} catch (err) {}
	}

	return res || defaultLocale;
});


/***/ }),
/* 1193 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const fs = __webpack_require__(1);
const pify = __webpack_require__(166);

function type(fn, fn2, fp) {
	if (typeof fp !== 'string') {
		return Promise.reject(new TypeError(`Expected a string, got ${typeof fp}`));
	}

	return pify(fs[fn])(fp).then(stats => stats[fn2]());
}

function typeSync(fn, fn2, fp) {
	if (typeof fp !== 'string') {
		throw new TypeError(`Expected a string, got ${typeof fp}`);
	}

	return fs[fn](fp)[fn2]();
}

exports.file = type.bind(null, 'stat', 'isFile');
exports.dir = type.bind(null, 'stat', 'isDirectory');
exports.symlink = type.bind(null, 'lstat', 'isSymbolicLink');
exports.fileSync = typeSync.bind(null, 'statSync', 'isFile');
exports.dirSync = typeSync.bind(null, 'statSync', 'isDirectory');
exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink');


/***/ }),
/* 1194 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const findUp = __webpack_require__(343);
const readPkg = __webpack_require__(1195);

module.exports = opts => {
	return findUp('package.json', opts).then(fp => {
		if (!fp) {
			return {};
		}

		return readPkg(fp, opts).then(pkg => ({pkg, path: fp}));
	});
};

module.exports.sync = opts => {
	const fp = findUp.sync('package.json', opts);

	if (!fp) {
		return {};
	}

	return {
		pkg: readPkg.sync(fp, opts),
		path: fp
	};
};


/***/ }),
/* 1195 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const path = __webpack_require__(0);
const loadJsonFile = __webpack_require__(1191);
const pathType = __webpack_require__(1193);

module.exports = (fp, opts) => {
	if (typeof fp !== 'string') {
		opts = fp;
		fp = '.';
	}

	opts = opts || {};

	return pathType.dir(fp)
		.then(isDir => {
			if (isDir) {
				fp = path.join(fp, 'package.json');
			}

			return loadJsonFile(fp);
		})
		.then(x => {
			if (opts.normalize !== false) {
				__webpack_require__(383)(x);
			}

			return x;
		});
};

module.exports.sync = (fp, opts) => {
	if (typeof fp !== 'string') {
		opts = fp;
		fp = '.';
	}

	opts = opts || {};
	fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp;

	const x = loadJsonFile.sync(fp);

	if (opts.normalize !== false) {
		__webpack_require__(383)(x);
	}

	return x;
};


/***/ }),
/* 1196 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const stripAnsi = __webpack_require__(1197);
const isFullwidthCodePoint = __webpack_require__(897);

module.exports = str => {
	if (typeof str !== 'string' || str.length === 0) {
		return 0;
	}

	str = stripAnsi(str);

	let width = 0;

	for (let i = 0; i < str.length; i++) {
		const code = str.codePointAt(i);

		// Ignore control characters
		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
			continue;
		}

		// Ignore combining characters
		if (code >= 0x300 && code <= 0x36F) {
			continue;
		}

		// Surrogates
		if (code > 0xFFFF) {
			i++;
		}

		width += isFullwidthCodePoint(code) ? 2 : 1;
	}

	return width;
};


/***/ }),
/* 1197 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

const ansiRegex = __webpack_require__(1177);

module.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input;


/***/ }),
/* 1198 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function whichModule (exported) {
  for (var i = 0, files = Object.keys(__webpack_require__.c), mod; i < files.length; i++) {
    mod = __webpack_require__.c[files[i]]
    if (mod.exports === exported) return mod
  }
  return null
}


/***/ }),
/* 1199 */
/***/ (function(module, exports, __webpack_require__) {

var camelCase = __webpack_require__(457)
var path = __webpack_require__(0)
var tokenizeArgString = __webpack_require__(1200)
var util = __webpack_require__(2)

function parse (args, opts) {
  if (!opts) opts = {}
  // allow a string argument to be passed in rather
  // than an argv array.
  args = tokenizeArgString(args)
  // aliases might have transitive relationships, normalize this.
  var aliases = combineAliases(opts.alias || {})
  var configuration = assign({
    'short-option-groups': true,
    'camel-case-expansion': true,
    'dot-notation': true,
    'parse-numbers': true,
    'boolean-negation': true,
    'duplicate-arguments-array': true,
    'flatten-duplicate-arrays': true,
    'populate--': false
  }, opts.configuration)
  var defaults = opts.default || {}
  var configObjects = opts.configObjects || []
  var envPrefix = opts.envPrefix
  var notFlagsOption = configuration['populate--']
  var notFlagsArgv = notFlagsOption ? '--' : '_'
  var newAliases = {}
  // allow a i18n handler to be passed in, default to a fake one (util.format).
  var __ = opts.__ || function (str) {
    return util.format.apply(util, Array.prototype.slice.call(arguments))
  }
  var error = null
  var flags = {
    aliases: {},
    arrays: {},
    bools: {},
    strings: {},
    numbers: {},
    counts: {},
    normalize: {},
    configs: {},
    defaulted: {},
    nargs: {},
    coercions: {}
  }
  var negative = /^-[0-9]+(\.[0-9]+)?/

  ;[].concat(opts.array).filter(Boolean).forEach(function (key) {
    flags.arrays[key] = true
  })

  ;[].concat(opts.boolean).filter(Boolean).forEach(function (key) {
    flags.bools[key] = true
  })

  ;[].concat(opts.string).filter(Boolean).forEach(function (key) {
    flags.strings[key] = true
  })

  ;[].concat(opts.number).filter(Boolean).forEach(function (key) {
    flags.numbers[key] = true
  })

  ;[].concat(opts.count).filter(Boolean).forEach(function (key) {
    flags.counts[key] = true
  })

  ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) {
    flags.normalize[key] = true
  })

  Object.keys(opts.narg || {}).forEach(function (k) {
    flags.nargs[k] = opts.narg[k]
  })

  Object.keys(opts.coerce || {}).forEach(function (k) {
    flags.coercions[k] = opts.coerce[k]
  })

  if (Array.isArray(opts.config) || typeof opts.config === 'string') {
    ;[].concat(opts.config).filter(Boolean).forEach(function (key) {
      flags.configs[key] = true
    })
  } else {
    Object.keys(opts.config || {}).forEach(function (k) {
      flags.configs[k] = opts.config[k]
    })
  }

  // create a lookup table that takes into account all
  // combinations of aliases: {f: ['foo'], foo: ['f']}
  extendAliases(opts.key, aliases, opts.default, flags.arrays)

  // apply default values to all aliases.
  Object.keys(defaults).forEach(function (key) {
    (flags.aliases[key] || []).forEach(function (alias) {
      defaults[alias] = defaults[key]
    })
  })

  var argv = { _: [] }

  Object.keys(flags.bools).forEach(function (key) {
    setArg(key, !(key in defaults) ? false : defaults[key])
    setDefaulted(key)
  })

  var notFlags = []
  if (args.indexOf('--') !== -1) {
    notFlags = args.slice(args.indexOf('--') + 1)
    args = args.slice(0, args.indexOf('--'))
  }

  for (var i = 0; i < args.length; i++) {
    var arg = args[i]
    var broken
    var key
    var letters
    var m
    var next
    var value

    // -- seperated by =
    if (arg.match(/^--.+=/) || (
      !configuration['short-option-groups'] && arg.match(/^-.+=/)
    )) {
      // Using [\s\S] instead of . because js doesn't support the
      // 'dotall' regex modifier. See:
      // http://stackoverflow.com/a/1068308/13216
      m = arg.match(/^--?([^=]+)=([\s\S]*)$/)

      // nargs format = '--f=monkey washing cat'
      if (checkAllAliases(m[1], flags.nargs)) {
        args.splice(i + 1, 0, m[2])
        i = eatNargs(i, m[1], args)
      // arrays format = '--f=a b c'
      } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) {
        args.splice(i + 1, 0, m[2])
        i = eatArray(i, m[1], args)
      } else {
        setArg(m[1], m[2])
      }
    } else if (arg.match(/^--no-.+/) && configuration['boolean-negation']) {
      key = arg.match(/^--no-(.+)/)[1]
      setArg(key, false)

    // -- seperated by space.
    } else if (arg.match(/^--.+/) || (
      !configuration['short-option-groups'] && arg.match(/^-.+/)
    )) {
      key = arg.match(/^--?(.+)/)[1]

      // nargs format = '--foo a b c'
      if (checkAllAliases(key, flags.nargs)) {
        i = eatNargs(i, key, args)
      // array format = '--foo a b c'
      } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
        i = eatArray(i, key, args)
      } else {
        next = args[i + 1]

        if (next !== undefined && (!next.match(/^-/) ||
          next.match(negative)) &&
          !checkAllAliases(key, flags.bools) &&
          !checkAllAliases(key, flags.counts)) {
          setArg(key, next)
          i++
        } else if (/^(true|false)$/.test(next)) {
          setArg(key, next)
          i++
        } else {
          setArg(key, defaultForType(guessType(key, flags)))
        }
      }

    // dot-notation flag seperated by '='.
    } else if (arg.match(/^-.\..+=/)) {
      m = arg.match(/^-([^=]+)=([\s\S]*)$/)
      setArg(m[1], m[2])

    // dot-notation flag seperated by space.
    } else if (arg.match(/^-.\..+/)) {
      next = args[i + 1]
      key = arg.match(/^-(.\..+)/)[1]

      if (next !== undefined && !next.match(/^-/) &&
        !checkAllAliases(key, flags.bools) &&
        !checkAllAliases(key, flags.counts)) {
        setArg(key, next)
        i++
      } else {
        setArg(key, defaultForType(guessType(key, flags)))
      }
    } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {
      letters = arg.slice(1, -1).split('')
      broken = false

      for (var j = 0; j < letters.length; j++) {
        next = arg.slice(j + 2)

        if (letters[j + 1] && letters[j + 1] === '=') {
          value = arg.slice(j + 3)
          key = letters[j]

          // nargs format = '-f=monkey washing cat'
          if (checkAllAliases(key, flags.nargs)) {
            args.splice(i + 1, 0, value)
            i = eatNargs(i, key, args)
          // array format = '-f=a b c'
          } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
            args.splice(i + 1, 0, value)
            i = eatArray(i, key, args)
          } else {
            setArg(key, value)
          }

          broken = true
          break
        }

        if (next === '-') {
          setArg(letters[j], next)
          continue
        }

        // current letter is an alphabetic character and next value is a number
        if (/[A-Za-z]/.test(letters[j]) &&
          /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
          setArg(letters[j], next)
          broken = true
          break
        }

        if (letters[j + 1] && letters[j + 1].match(/\W/)) {
          setArg(letters[j], next)
          broken = true
          break
        } else {
          setArg(letters[j], defaultForType(guessType(letters[j], flags)))
        }
      }

      key = arg.slice(-1)[0]

      if (!broken && key !== '-') {
        // nargs format = '-f a b c'
        if (checkAllAliases(key, flags.nargs)) {
          i = eatNargs(i, key, args)
        // array format = '-f a b c'
        } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
          i = eatArray(i, key, args)
        } else {
          next = args[i + 1]

          if (next !== undefined && (!/^(-|--)[^-]/.test(next) ||
            next.match(negative)) &&
            !checkAllAliases(key, flags.bools) &&
            !checkAllAliases(key, flags.counts)) {
            setArg(key, next)
            i++
          } else if (/^(true|false)$/.test(next)) {
            setArg(key, next)
            i++
          } else {
            setArg(key, defaultForType(guessType(key, flags)))
          }
        }
      }
    } else {
      argv._.push(
        flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
      )
    }
  }

  // order of precedence:
  // 1. command line arg
  // 2. value from env var
  // 3. value from config file
  // 4. value from config objects
  // 5. configured default value
  applyEnvVars(argv, true) // special case: check env vars that point to config file
  applyEnvVars(argv, false)
  setConfig(argv)
  setConfigObjects()
  applyDefaultsAndAliases(argv, flags.aliases, defaults)
  applyCoercions(argv)

  // for any counts either not in args or without an explicit default, set to 0
  Object.keys(flags.counts).forEach(function (key) {
    if (!hasKey(argv, key.split('.'))) setArg(key, 0)
  })

  // '--' defaults to undefined.
  if (notFlagsOption && notFlags.length) argv[notFlagsArgv] = []
  notFlags.forEach(function (key) {
    argv[notFlagsArgv].push(key)
  })

  // how many arguments should we consume, based
  // on the nargs option?
  function eatNargs (i, key, args) {
    var toEat = checkAllAliases(key, flags.nargs)

    if (args.length - (i + 1) < toEat) error = Error(__('Not enough arguments following: %s', key))

    for (var ii = i + 1; ii < (toEat + i + 1); ii++) {
      setArg(key, args[ii])
    }

    return (i + toEat)
  }

  // if an option is an array, eat all non-hyphenated arguments
  // following it... YUM!
  // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
  function eatArray (i, key, args) {
    var start = i + 1
    var argsToSet = []
    var multipleArrayFlag = i > 0
    for (var ii = i + 1; ii < args.length; ii++) {
      if (/^-/.test(args[ii]) && !negative.test(args[ii])) {
        if (ii === start) {
          setArg(key, defaultForType('array'))
        }
        multipleArrayFlag = true
        break
      }
      i = ii
      argsToSet.push(args[ii])
    }
    if (multipleArrayFlag) {
      setArg(key, argsToSet.map(function (arg) {
        return processValue(key, arg)
      }))
    } else {
      argsToSet.forEach(function (arg) {
        setArg(key, arg)
      })
    }

    return i
  }

  function setArg (key, val) {
    unsetDefaulted(key)

    if (/-/.test(key) && !(flags.aliases[key] && flags.aliases[key].length) && configuration['camel-case-expansion']) {
      var c = camelCase(key)
      flags.aliases[key] = [c]
      newAliases[c] = true
    }

    var value = processValue(key, val)

    var splitKey = key.split('.')
    setKey(argv, splitKey, value)

    // handle populating aliases of the full key
    if (flags.aliases[key]) {
      flags.aliases[key].forEach(function (x) {
        x = x.split('.')
        setKey(argv, x, value)
      })
    }

    // handle populating aliases of the first element of the dot-notation key
    if (splitKey.length > 1 && configuration['dot-notation']) {
      ;(flags.aliases[splitKey[0]] || []).forEach(function (x) {
        x = x.split('.')

        // expand alias with nested objects in key
        var a = [].concat(splitKey)
        a.shift() // nuke the old key.
        x = x.concat(a)

        setKey(argv, x, value)
      })
    }

    // Set normalize getter and setter when key is in 'normalize' but isn't an array
    if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {
      var keys = [key].concat(flags.aliases[key] || [])
      keys.forEach(function (key) {
        argv.__defineSetter__(key, function (v) {
          val = path.normalize(v)
        })

        argv.__defineGetter__(key, function () {
          return typeof val === 'string' ? path.normalize(val) : val
        })
      })
    }
  }

  function processValue (key, val) {
    // handle parsing boolean arguments --foo=true --bar false.
    if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
      if (typeof val === 'string') val = val === 'true'
    }

    var value = val
    if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.coercions)) {
      if (isNumber(val)) value = Number(val)
      if (!isUndefined(val) && !isNumber(val) && checkAllAliases(key, flags.numbers)) value = NaN
    }

    // increment a count given as arg (either no value or value parsed as boolean)
    if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) {
      value = increment
    }

    // Set normalized value when key is in 'normalize' and in 'arrays'
    if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {
      if (Array.isArray(val)) value = val.map(path.normalize)
      else value = path.normalize(val)
    }
    return value
  }

  // set args from config.json file, this should be
  // applied last so that defaults can be applied.
  function setConfig (argv) {
    var configLookup = {}

    // expand defaults/aliases, in-case any happen to reference
    // the config.json file.
    applyDefaultsAndAliases(configLookup, flags.aliases, defaults)

    Object.keys(flags.configs).forEach(function (configKey) {
      var configPath = argv[configKey] || configLookup[configKey]
      if (configPath) {
        try {
          var config = null
          var resolvedConfigPath = path.resolve(process.cwd(), configPath)

          if (typeof flags.configs[configKey] === 'function') {
            try {
              config = flags.configs[configKey](resolvedConfigPath)
            } catch (e) {
              config = e
            }
            if (config instanceof Error) {
              error = config
              return
            }
          } else {
            config = !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
          }

          setConfigObject(config)
        } catch (ex) {
          if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath))
        }
      }
    })
  }

  // set args from config object.
  // it recursively checks nested objects.
  function setConfigObject (config, prev) {
    Object.keys(config).forEach(function (key) {
      var value = config[key]
      var fullKey = prev ? prev + '.' + key : key

      // if the value is an inner object and we have dot-notation
      // enabled, treat inner objects in config the same as
      // heavily nested dot notations (foo.bar.apple).
      if (typeof value === 'object' && !Array.isArray(value) && configuration['dot-notation']) {
        // if the value is an object but not an array, check nested object
        setConfigObject(value, fullKey)
      } else {
        // setting arguments via CLI takes precedence over
        // values within the config file.
        if (!hasKey(argv, fullKey.split('.')) || (flags.defaulted[fullKey])) {
          setArg(fullKey, value)
        }
      }
    })
  }

  // set all config objects passed in opts
  function setConfigObjects () {
    if (typeof configObjects === 'undefined') return
    configObjects.forEach(function (configObject) {
      setConfigObject(configObject)
    })
  }

  function applyEnvVars (argv, configOnly) {
    if (typeof envPrefix === 'undefined') return

    var prefix = typeof envPrefix === 'string' ? envPrefix : ''
    Object.keys(process.env).forEach(function (envVar) {
      if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {
        // get array of nested keys and convert them to camel case
        var keys = envVar.split('__').map(function (key, i) {
          if (i === 0) {
            key = key.substring(prefix.length)
          }
          return camelCase(key)
        })

        if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && (!hasKey(argv, keys) || flags.defaulted[keys.join('.')])) {
          setArg(keys.join('.'), process.env[envVar])
        }
      }
    })
  }

  function applyCoercions (argv) {
    var coerce
    Object.keys(argv).forEach(function (key) {
      coerce = checkAllAliases(key, flags.coercions)
      if (typeof coerce === 'function') {
        try {
          argv[key] = coerce(argv[key])
        } catch (err) {
          error = err
        }
      }
    })
  }

  function applyDefaultsAndAliases (obj, aliases, defaults) {
    Object.keys(defaults).forEach(function (key) {
      if (!hasKey(obj, key.split('.'))) {
        setKey(obj, key.split('.'), defaults[key])

        ;(aliases[key] || []).forEach(function (x) {
          if (hasKey(obj, x.split('.'))) return
          setKey(obj, x.split('.'), defaults[key])
        })
      }
    })
  }

  function hasKey (obj, keys) {
    var o = obj

    if (!configuration['dot-notation']) keys = [keys.join('.')]

    keys.slice(0, -1).forEach(function (key) {
      o = (o[key] || {})
    })

    var key = keys[keys.length - 1]

    if (typeof o !== 'object') return false
    else return key in o
  }

  function setKey (obj, keys, value) {
    var o = obj

    if (!configuration['dot-notation']) keys = [keys.join('.')]

    keys.slice(0, -1).forEach(function (key) {
      if (o[key] === undefined) o[key] = {}
      o = o[key]
    })

    var key = keys[keys.length - 1]

    var isTypeArray = checkAllAliases(keys.join('.'), flags.arrays)
    var isValueArray = Array.isArray(value)
    var duplicate = configuration['duplicate-arguments-array']

    if (value === increment) {
      o[key] = increment(o[key])
    } else if (Array.isArray(o[key])) {
      if (duplicate && isTypeArray && isValueArray) {
        o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : [o[key]].concat([value])
      } else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {
        o[key] = value
      } else {
        o[key] = o[key].concat([value])
      }
    } else if (o[key] === undefined && isTypeArray) {
      o[key] = isValueArray ? value : [value]
    } else if (duplicate && !(o[key] === undefined || checkAllAliases(key, flags.bools) || checkAllAliases(keys.join('.'), flags.bools) || checkAllAliases(key, flags.counts))) {
      o[key] = [ o[key], value ]
    } else {
      o[key] = value
    }
  }

  // extend the aliases list with inferred aliases.
  function extendAliases () {
    Array.prototype.slice.call(arguments).forEach(function (obj) {
      Object.keys(obj || {}).forEach(function (key) {
        // short-circuit if we've already added a key
        // to the aliases array, for example it might
        // exist in both 'opts.default' and 'opts.key'.
        if (flags.aliases[key]) return

        flags.aliases[key] = [].concat(aliases[key] || [])
        // For "--option-name", also set argv.optionName
        flags.aliases[key].concat(key).forEach(function (x) {
          if (/-/.test(x) && configuration['camel-case-expansion']) {
            var c = camelCase(x)
            flags.aliases[key].push(c)
            newAliases[c] = true
          }
        })
        flags.aliases[key].forEach(function (x) {
          flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {
            return x !== y
          }))
        })
      })
    })
  }

  // check if a flag is set for any of a key's aliases.
  function checkAllAliases (key, flag) {
    var isSet = false
    var toCheck = [].concat(flags.aliases[key] || [], key)

    toCheck.forEach(function (key) {
      if (flag[key]) isSet = flag[key]
    })

    return isSet
  }

  function setDefaulted (key) {
    [].concat(flags.aliases[key] || [], key).forEach(function (k) {
      flags.defaulted[k] = true
    })
  }

  function unsetDefaulted (key) {
    [].concat(flags.aliases[key] || [], key).forEach(function (k) {
      delete flags.defaulted[k]
    })
  }

  // return a default value, given the type of a flag.,
  // e.g., key of type 'string' will default to '', rather than 'true'.
  function defaultForType (type) {
    var def = {
      boolean: true,
      string: '',
      number: undefined,
      array: []
    }

    return def[type]
  }

  // given a flag, enforce a default type.
  function guessType (key, flags) {
    var type = 'boolean'

    if (checkAllAliases(key, flags.strings)) type = 'string'
    else if (checkAllAliases(key, flags.numbers)) type = 'number'
    else if (checkAllAliases(key, flags.arrays)) type = 'array'

    return type
  }

  function isNumber (x) {
    if (!configuration['parse-numbers']) return false
    if (typeof x === 'number') return true
    if (/^0x[0-9a-f]+$/i.test(x)) return true
    return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x)
  }

  function isUndefined (num) {
    return num === undefined
  }

  return {
    argv: argv,
    error: error,
    aliases: flags.aliases,
    newAliases: newAliases,
    configuration: configuration
  }
}

// if any aliases reference each other, we should
// merge them together.
function combineAliases (aliases) {
  var aliasArrays = []
  var change = true
  var combined = {}

  // turn alias lookup hash {key: ['alias1', 'alias2']} into
  // a simple array ['key', 'alias1', 'alias2']
  Object.keys(aliases).forEach(function (key) {
    aliasArrays.push(
      [].concat(aliases[key], key)
    )
  })

  // combine arrays until zero changes are
  // made in an iteration.
  while (change) {
    change = false
    for (var i = 0; i < aliasArrays.length; i++) {
      for (var ii = i + 1; ii < aliasArrays.length; ii++) {
        var intersect = aliasArrays[i].filter(function (v) {
          return aliasArrays[ii].indexOf(v) !== -1
        })

        if (intersect.length) {
          aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii])
          aliasArrays.splice(ii, 1)
          change = true
          break
        }
      }
    }
  }

  // map arrays back to the hash-lookup (de-dupe while
  // we're at it).
  aliasArrays.forEach(function (aliasArray) {
    aliasArray = aliasArray.filter(function (v, i, self) {
      return self.indexOf(v) === i
    })
    combined[aliasArray.pop()] = aliasArray
  })

  return combined
}

function assign (defaults, configuration) {
  var o = {}
  configuration = configuration || {}

  Object.keys(defaults).forEach(function (k) {
    o[k] = defaults[k]
  })
  Object.keys(configuration).forEach(function (k) {
    o[k] = configuration[k]
  })

  return o
}

// this function should only be called when a count is given as an arg
// it is NOT called to set a default value
// thus we can start the count at 1 instead of 0
function increment (orig) {
  return orig !== undefined ? orig + 1 : 1
}

function Parser (args, opts) {
  var result = parse(args.slice(), opts)

  return result.argv
}

// parse arguments and return detailed
// meta information, aliases, etc.
Parser.detailed = function (args, opts) {
  return parse(args.slice(), opts)
}

module.exports = Parser


/***/ }),
/* 1200 */
/***/ (function(module, exports) {

// take an un-split argv string and tokenize it.
module.exports = function (argString) {
  if (Array.isArray(argString)) return argString

  var i = 0
  var c = null
  var opening = null
  var args = []

  for (var ii = 0; ii < argString.length; ii++) {
    c = argString.charAt(ii)

    // split on spaces unless we're in quotes.
    if (c === ' ' && !opening) {
      i++
      continue
    }

    // don't split the string if we're in matching
    // opening or closing single and double quotes.
    if (c === opening) {
      opening = null
      continue
    } else if ((c === "'" || c === '"') && !opening) {
      opening = c
      continue
    }

    if (!args[i]) args[i] = ''
    args[i] += c
  }

  return args
}


/***/ }),
/* 1201 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1)
var path = __webpack_require__(0)
var assign = __webpack_require__(459)
var YError = __webpack_require__(176)

var previouslyVisitedConfigs = []

function checkForCircularExtends (path) {
  if (previouslyVisitedConfigs.indexOf(path) > -1) {
    throw new YError("Circular extended configurations: '" + path + "'.")
  }
}

function getPathToDefaultConfig (cwd, pathToExtend) {
  return path.resolve(cwd, pathToExtend)
}

function applyExtends (config, cwd) {
  var defaultConfig = {}

  if (config.hasOwnProperty('extends')) {
    if (typeof config.extends !== 'string') return defaultConfig
    var isPath = /\.json$/.test(config.extends)
    var pathToDefault = null
    if (!isPath) {
      try {
        pathToDefault = /*require.resolve*/(!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()))
      } catch (err) {
        // most likely this simply isn't a module.
      }
    } else {
      pathToDefault = getPathToDefaultConfig(cwd, config.extends)
    }
    // maybe the module uses key for some other reason,
    // err on side of caution.
    if (!pathToDefault && !isPath) return config

    checkForCircularExtends(pathToDefault)

    previouslyVisitedConfigs.push(pathToDefault)

    defaultConfig = isPath ? JSON.parse(fs.readFileSync(pathToDefault, 'utf8')) : !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
    delete config.extends
    defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault))
  }

  previouslyVisitedConfigs = []

  return assign(defaultConfig, config)
}

module.exports = applyExtends


/***/ }),
/* 1202 */
/***/ (function(module, exports, __webpack_require__) {

const command = __webpack_require__(460)()
const YError = __webpack_require__(176)

const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']

module.exports = function (expected, callerArguments, length) {
  // TODO: should this eventually raise an exception.
  try {
    // preface the argument description with "cmd", so
    // that we can run it through yargs' command parser.
    var position = 0
    var parsed = {demanded: [], optional: []}
    if (typeof expected === 'object') {
      length = callerArguments
      callerArguments = expected
    } else {
      parsed = command.parseCommand('cmd ' + expected)
    }
    const args = [].slice.call(callerArguments)

    while (args.length && args[args.length - 1] === undefined) args.pop()
    length = length || args.length

    if (length < parsed.demanded.length) {
      throw new YError('Not enough arguments provided. Expected ' + parsed.demanded.length +
        ' but received ' + args.length + '.')
    }

    const totalCommands = parsed.demanded.length + parsed.optional.length
    if (length > totalCommands) {
      throw new YError('Too many arguments provided. Expected max ' + totalCommands +
        ' but received ' + length + '.')
    }

    parsed.demanded.forEach(function (demanded) {
      const arg = args.shift()
      const observedType = guessType(arg)
      const matchingTypes = demanded.cmd.filter(function (type) {
        return type === observedType || type === '*'
      })
      if (matchingTypes.length === 0) argumentTypeError(observedType, demanded.cmd, position, false)
      position += 1
    })

    parsed.optional.forEach(function (optional) {
      if (args.length === 0) return
      const arg = args.shift()
      const observedType = guessType(arg)
      const matchingTypes = optional.cmd.filter(function (type) {
        return type === observedType || type === '*'
      })
      if (matchingTypes.length === 0) argumentTypeError(observedType, optional.cmd, position, true)
      position += 1
    })
  } catch (err) {
    console.warn(err.stack)
  }
}

function guessType (arg) {
  if (Array.isArray(arg)) {
    return 'array'
  } else if (arg === null) {
    return 'null'
  }
  return typeof arg
}

function argumentTypeError (observedType, allowedTypes, position, optional) {
  throw new YError('Invalid ' + (positionName[position] || 'manyith') + ' argument.' +
    ' Expected ' + allowedTypes.join(' or ') + ' but received ' + observedType + '.')
}


/***/ }),
/* 1203 */
/***/ (function(module, exports, __webpack_require__) {

const fs = __webpack_require__(1)
const path = __webpack_require__(0)

// add bash completions to your
//  yargs-powered applications.
module.exports = function (yargs, usage, command) {
  const self = {
    completionKey: 'get-yargs-completions'
  }

  // get a list of completion commands.
  // 'args' is the array of strings from the line to be completed
  self.getCompletion = function (args, done) {
    const completions = []
    const current = args.length ? args[args.length - 1] : ''
    const argv = yargs.parse(args, true)
    const aliases = yargs.parsed.aliases

    // a custom completion function can be provided
    // to completion().
    if (completionFunction) {
      if (completionFunction.length < 3) {
        var result = completionFunction(current, argv)

        // promise based completion function.
        if (typeof result.then === 'function') {
          return result.then(function (list) {
            process.nextTick(function () { done(list) })
          }).catch(function (err) {
            process.nextTick(function () { throw err })
          })
        }

        // synchronous completion function.
        return done(result)
      } else {
        // asynchronous completion function
        return completionFunction(current, argv, function (completions) {
          done(completions)
        })
      }
    }

    var handlers = command.getCommandHandlers()
    for (var i = 0, ii = args.length; i < ii; ++i) {
      if (handlers[args[i]] && handlers[args[i]].builder) {
        const builder = handlers[args[i]].builder
        if (typeof builder === 'function') {
          const y = yargs.reset()
          builder(y)
          return y.argv
        }
      }
    }

    if (!current.match(/^-/)) {
      usage.getCommands().forEach(function (command) {
        if (args.indexOf(command[0]) === -1) {
          completions.push(command[0])
        }
      })
    }

    if (current.match(/^-/)) {
      Object.keys(yargs.getOptions().key).forEach(function (key) {
        // If the key and its aliases aren't in 'args', add the key to 'completions'
        var keyAndAliases = [key].concat(aliases[key] || [])
        var notInArgs = keyAndAliases.every(function (val) {
          return args.indexOf('--' + val) === -1
        })
        if (notInArgs) {
          completions.push('--' + key)
        }
      })
    }

    done(completions)
  }

  // generate the completion script to add to your .bashrc.
  self.generateCompletionScript = function ($0) {
    var script = fs.readFileSync(
      path.resolve(__dirname, '../completion.sh.hbs'),
      'utf-8'
    )
    var name = path.basename($0)

    // add ./to applications not yet installed as bin.
    if ($0.match(/\.js$/)) $0 = './' + $0

    script = script.replace(/{{app_name}}/g, name)
    return script.replace(/{{app_path}}/g, $0)
  }

  // register a function to perform your own custom
  // completions., this function can be either
  // synchrnous or asynchronous.
  var completionFunction = null
  self.registerFunction = function (fn) {
    completionFunction = fn
  }

  return self
}


/***/ }),
/* 1204 */
/***/ (function(module, exports) {

/*
Copyright (c) 2011 Andrei Mackenzie

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.
*/

// levenshtein distance algorithm, pulled from Andrei Mackenzie's MIT licensed.
// gist, which can be found here: https://gist.github.com/andrei-m/982927

// Compute the edit distance between the two given strings
module.exports = function (a, b) {
  if (a.length === 0) return b.length
  if (b.length === 0) return a.length

  var matrix = []

  // increment along the first column of each row
  var i
  for (i = 0; i <= b.length; i++) {
    matrix[i] = [i]
  }

  // increment each column in the first row
  var j
  for (j = 0; j <= a.length; j++) {
    matrix[0][j] = j
  }

  // Fill in the rest of the matrix
  for (i = 1; i <= b.length; i++) {
    for (j = 1; j <= a.length; j++) {
      if (b.charAt(i - 1) === a.charAt(j - 1)) {
        matrix[i][j] = matrix[i - 1][j - 1]
      } else {
        matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
                                Math.min(matrix[i][j - 1] + 1, // insertion
                                         matrix[i - 1][j] + 1)) // deletion
      }
    }
  }

  return matrix[b.length][a.length]
}


/***/ }),
/* 1205 */
/***/ (function(module, exports, __webpack_require__) {

// this file handles outputting usage instructions,
// failures, etc. keeps logging in one place.
const stringWidth = __webpack_require__(1196)
const objFilter = __webpack_require__(252)
const setBlocking = __webpack_require__(413)
const YError = __webpack_require__(176)

module.exports = function (yargs, y18n) {
  const __ = y18n.__
  const self = {}

  // methods for ouputting/building failure message.
  var fails = []
  self.failFn = function (f) {
    fails.push(f)
  }

  var failMessage = null
  var showHelpOnFail = true
  self.showHelpOnFail = function (enabled, message) {
    if (typeof enabled === 'string') {
      message = enabled
      enabled = true
    } else if (typeof enabled === 'undefined') {
      enabled = true
    }
    failMessage = message
    showHelpOnFail = enabled
    return self
  }

  var failureOutput = false
  self.fail = function (msg, err) {
    const logger = yargs._getLoggerInstance()

    if (fails.length) {
      for (var i = fails.length - 1; i >= 0; --i) {
        fails[i](msg, err, self)
      }
    } else {
      if (yargs.getExitProcess()) setBlocking(true)

      // don't output failure message more than once
      if (!failureOutput) {
        failureOutput = true
        if (showHelpOnFail) yargs.showHelp('error')
        if (msg) logger.error(msg)
        if (failMessage) {
          if (msg) logger.error('')
          logger.error(failMessage)
        }
      }

      err = err || new YError(msg)
      if (yargs.getExitProcess()) {
        return yargs.exit(1)
      } else if (yargs._hasParseCallback()) {
        return yargs.exit(1, err)
      } else {
        throw err
      }
    }
  }

  // methods for ouputting/building help (usage) message.
  var usage
  self.usage = function (msg) {
    usage = msg
  }
  self.getUsage = function () {
    return usage
  }

  var examples = []
  self.example = function (cmd, description) {
    examples.push([cmd, description || ''])
  }

  var commands = []
  self.command = function (cmd, description, isDefault, aliases) {
    // the last default wins, so cancel out any previously set default
    if (isDefault) {
      commands = commands.map(function (cmdArray) {
        cmdArray[2] = false
        return cmdArray
      })
    }
    commands.push([cmd, description || '', isDefault, aliases])
  }
  self.getCommands = function () {
    return commands
  }

  var descriptions = {}
  self.describe = function (key, desc) {
    if (typeof key === 'object') {
      Object.keys(key).forEach(function (k) {
        self.describe(k, key[k])
      })
    } else {
      descriptions[key] = desc
    }
  }
  self.getDescriptions = function () {
    return descriptions
  }

  var epilog
  self.epilog = function (msg) {
    epilog = msg
  }

  var wrapSet = false
  var wrap
  self.wrap = function (cols) {
    wrapSet = true
    wrap = cols
  }

  function getWrap () {
    if (!wrapSet) {
      wrap = windowWidth()
      wrapSet = true
    }

    return wrap
  }

  var deferY18nLookupPrefix = '__yargsString__:'
  self.deferY18nLookup = function (str) {
    return deferY18nLookupPrefix + str
  }

  var defaultGroup = 'Options:'
  self.help = function () {
    normalizeAliases()

    // handle old demanded API
    var demandedOptions = yargs.getDemandedOptions()
    var demandedCommands = yargs.getDemandedCommands()
    var groups = yargs.getGroups()
    var options = yargs.getOptions()
    var keys = Object.keys(
      Object.keys(descriptions)
      .concat(Object.keys(demandedOptions))
      .concat(Object.keys(demandedCommands))
      .concat(Object.keys(options.default))
      .reduce(function (acc, key) {
        if (key !== '_') acc[key] = true
        return acc
      }, {})
    )

    var theWrap = getWrap()
    var ui = __webpack_require__(628)({
      width: theWrap,
      wrap: !!theWrap
    })

    // the usage string.
    if (usage) {
      var u = usage.replace(/\$0/g, yargs.$0)
      ui.div(u + '\n')
    }

    // your application's commands, i.e., non-option
    // arguments populated in '_'.
    if (commands.length) {
      ui.div(__('Commands:'))

      commands.forEach(function (command) {
        ui.span(
          {text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands, theWrap) + 4},
          {text: command[1]}
        )
        var hints = []
        if (command[2]) hints.push('[' + __('default:').slice(0, -1) + ']') // TODO hacking around i18n here
        if (command[3] && command[3].length) {
          hints.push('[' + __('aliases:') + ' ' + command[3].join(', ') + ']')
        }
        if (hints.length) {
          ui.div({text: hints.join(' '), padding: [0, 0, 0, 2], align: 'right'})
        } else {
          ui.div()
        }
      })

      ui.div()
    }

    // perform some cleanup on the keys array, making it
    // only include top-level keys not their aliases.
    var aliasKeys = (Object.keys(options.alias) || [])
      .concat(Object.keys(yargs.parsed.newAliases) || [])

    keys = keys.filter(function (key) {
      return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) {
        return (options.alias[alias] || []).indexOf(key) === -1
      })
    })

    // populate 'Options:' group with any keys that have not
    // explicitly had a group set.
    if (!groups[defaultGroup]) groups[defaultGroup] = []
    addUngroupedKeys(keys, options.alias, groups)

    // display 'Options:' table along with any custom tables:
    Object.keys(groups).forEach(function (groupName) {
      if (!groups[groupName].length) return

      ui.div(__(groupName))

      // if we've grouped the key 'f', but 'f' aliases 'foobar',
      // normalizedKeys should contain only 'foobar'.
      var normalizedKeys = groups[groupName].map(function (key) {
        if (~aliasKeys.indexOf(key)) return key
        for (var i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {
          if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey
        }
        return key
      })

      // actually generate the switches string --foo, -f, --bar.
      var switches = normalizedKeys.reduce(function (acc, key) {
        acc[key] = [ key ].concat(options.alias[key] || [])
          .map(function (sw) {
            return (sw.length > 1 ? '--' : '-') + sw
          })
          .join(', ')

        return acc
      }, {})

      normalizedKeys.forEach(function (key) {
        var kswitch = switches[key]
        var desc = descriptions[key] || ''
        var type = null

        if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length))

        if (~options.boolean.indexOf(key)) type = '[' + __('boolean') + ']'
        if (~options.count.indexOf(key)) type = '[' + __('count') + ']'
        if (~options.string.indexOf(key)) type = '[' + __('string') + ']'
        if (~options.normalize.indexOf(key)) type = '[' + __('string') + ']'
        if (~options.array.indexOf(key)) type = '[' + __('array') + ']'
        if (~options.number.indexOf(key)) type = '[' + __('number') + ']'

        var extra = [
          type,
          (key in demandedOptions) ? '[' + __('required') + ']' : null,
          options.choices && options.choices[key] ? '[' + __('choices:') + ' ' +
            self.stringifiedValues(options.choices[key]) + ']' : null,
          defaultString(options.default[key], options.defaultDescription[key])
        ].filter(Boolean).join(' ')

        ui.span(
          {text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches, theWrap) + 4},
          desc
        )

        if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'})
        else ui.div()
      })

      ui.div()
    })

    // describe some common use-cases for your application.
    if (examples.length) {
      ui.div(__('Examples:'))

      examples.forEach(function (example) {
        example[0] = example[0].replace(/\$0/g, yargs.$0)
      })

      examples.forEach(function (example) {
        if (example[1] === '') {
          ui.div(
            {
              text: example[0],
              padding: [0, 2, 0, 2]
            }
          )
        } else {
          ui.div(
            {
              text: example[0],
              padding: [0, 2, 0, 2],
              width: maxWidth(examples, theWrap) + 4
            }, {
              text: example[1]
            }
          )
        }
      })

      ui.div()
    }

    // the usage string.
    if (epilog) {
      var e = epilog.replace(/\$0/g, yargs.$0)
      ui.div(e + '\n')
    }

    return ui.toString()
  }

  // return the maximum width of a string
  // in the left-hand column of a table.
  function maxWidth (table, theWrap) {
    var width = 0

    // table might be of the form [leftColumn],
    // or {key: leftColumn}
    if (!Array.isArray(table)) {
      table = Object.keys(table).map(function (key) {
        return [table[key]]
      })
    }

    table.forEach(function (v) {
      width = Math.max(stringWidth(v[0]), width)
    })

    // if we've enabled 'wrap' we should limit
    // the max-width of the left-column.
    if (theWrap) width = Math.min(width, parseInt(theWrap * 0.5, 10))

    return width
  }

  // make sure any options set for aliases,
  // are copied to the keys being aliased.
  function normalizeAliases () {
    // handle old demanded API
    var demandedOptions = yargs.getDemandedOptions()
    var options = yargs.getOptions()

    ;(Object.keys(options.alias) || []).forEach(function (key) {
      options.alias[key].forEach(function (alias) {
        // copy descriptions.
        if (descriptions[alias]) self.describe(key, descriptions[alias])
        // copy demanded.
        if (alias in demandedOptions) yargs.demandOption(key, demandedOptions[alias])
        // type messages.
        if (~options.boolean.indexOf(alias)) yargs.boolean(key)
        if (~options.count.indexOf(alias)) yargs.count(key)
        if (~options.string.indexOf(alias)) yargs.string(key)
        if (~options.normalize.indexOf(alias)) yargs.normalize(key)
        if (~options.array.indexOf(alias)) yargs.array(key)
        if (~options.number.indexOf(alias)) yargs.number(key)
      })
    })
  }

  // given a set of keys, place any keys that are
  // ungrouped under the 'Options:' grouping.
  function addUngroupedKeys (keys, aliases, groups) {
    var groupedKeys = []
    var toCheck = null
    Object.keys(groups).forEach(function (group) {
      groupedKeys = groupedKeys.concat(groups[group])
    })

    keys.forEach(function (key) {
      toCheck = [key].concat(aliases[key])
      if (!toCheck.some(function (k) {
        return groupedKeys.indexOf(k) !== -1
      })) {
        groups[defaultGroup].push(key)
      }
    })
    return groupedKeys
  }

  self.showHelp = function (level) {
    const logger = yargs._getLoggerInstance()
    if (!level) level = 'error'
    var emit = typeof level === 'function' ? level : logger[level]
    emit(self.help())
  }

  self.functionDescription = function (fn) {
    var description = fn.name ? __webpack_require__(715)(fn.name, '-') : __('generated-value')
    return ['(', description, ')'].join('')
  }

  self.stringifiedValues = function (values, separator) {
    var string = ''
    var sep = separator || ', '
    var array = [].concat(values)

    if (!values || !array.length) return string

    array.forEach(function (value) {
      if (string.length) string += sep
      string += JSON.stringify(value)
    })

    return string
  }

  // format the default-value-string displayed in
  // the right-hand column.
  function defaultString (value, defaultDescription) {
    var string = '[' + __('default:') + ' '

    if (value === undefined && !defaultDescription) return null

    if (defaultDescription) {
      string += defaultDescription
    } else {
      switch (typeof value) {
        case 'string':
          string += JSON.stringify(value)
          break
        case 'object':
          string += JSON.stringify(value)
          break
        default:
          string += value
      }
    }

    return string + ']'
  }

  // guess the width of the console window, max-width 80.
  function windowWidth () {
    var maxWidth = 80
    if (typeof process === 'object' && process.stdout && process.stdout.columns) {
      return Math.min(maxWidth, process.stdout.columns)
    } else {
      return maxWidth
    }
  }

  // logic for displaying application version.
  var version = null
  self.version = function (ver) {
    version = ver
  }

  self.showVersion = function () {
    const logger = yargs._getLoggerInstance()
    if (typeof version === 'function') logger.log(version())
    else logger.log(version)
  }

  self.reset = function (localLookup) {
    // do not reset wrap here
    // do not reset fails here
    failMessage = null
    failureOutput = false
    usage = undefined
    epilog = undefined
    examples = []
    commands = []
    descriptions = objFilter(descriptions, function (k, v) {
      return !localLookup[k]
    })
    return self
  }

  var frozen
  self.freeze = function () {
    frozen = {}
    frozen.failMessage = failMessage
    frozen.failureOutput = failureOutput
    frozen.usage = usage
    frozen.epilog = epilog
    frozen.examples = examples
    frozen.commands = commands
    frozen.descriptions = descriptions
  }
  self.unfreeze = function () {
    failMessage = frozen.failMessage
    failureOutput = frozen.failureOutput
    usage = frozen.usage
    epilog = frozen.epilog
    examples = frozen.examples
    commands = frozen.commands
    descriptions = frozen.descriptions
    frozen = undefined
  }

  return self
}


/***/ }),
/* 1206 */
/***/ (function(module, exports, __webpack_require__) {

const objFilter = __webpack_require__(252)
const specialKeys = ['$0', '--', '_']

// validation-type-stuff, missing params,
// bad implications, custom checks.
module.exports = function (yargs, usage, y18n) {
  const __ = y18n.__
  const __n = y18n.__n
  const self = {}

  // validate appropriate # of non-option
  // arguments were provided, i.e., '_'.
  self.nonOptionCount = function (argv) {
    const demandedCommands = yargs.getDemandedCommands()
    // don't count currently executing commands
    const _s = argv._.length - yargs.getContext().commands.length

    if (demandedCommands._ && (_s < demandedCommands._.min || _s > demandedCommands._.max)) {
      if (_s < demandedCommands._.min) {
        if (demandedCommands._.minMsg !== undefined) {
          usage.fail(
            // replace $0 with observed, $1 with expected.
            demandedCommands._.minMsg ? demandedCommands._.minMsg.replace(/\$0/g, _s).replace(/\$1/, demandedCommands._.min) : null
          )
        } else {
          usage.fail(
            __('Not enough non-option arguments: got %s, need at least %s', _s, demandedCommands._.min)
          )
        }
      } else if (_s > demandedCommands._.max) {
        if (demandedCommands._.maxMsg !== undefined) {
          usage.fail(
            // replace $0 with observed, $1 with expected.
            demandedCommands._.maxMsg ? demandedCommands._.maxMsg.replace(/\$0/g, _s).replace(/\$1/, demandedCommands._.max) : null
          )
        } else {
          usage.fail(
          __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max)
          )
        }
      }
    }
  }

  // validate the appropriate # of <required>
  // positional arguments were provided:
  self.positionalCount = function (required, observed) {
    if (observed < required) {
      usage.fail(
        __('Not enough non-option arguments: got %s, need at least %s', observed, required)
      )
    }
  }

  // make sure that any args that require an
  // value (--foo=bar), have a value.
  self.missingArgumentValue = function (argv) {
    const defaultValues = [true, false, '']
    const options = yargs.getOptions()

    if (options.requiresArg.length > 0) {
      const missingRequiredArgs = []

      options.requiresArg.forEach(function (key) {
        const value = argv[key]

        // if a value is explicitly requested,
        // flag argument as missing if it does not
        // look like foo=bar was entered.
        if (~defaultValues.indexOf(value) ||
          (Array.isArray(value) && !value.length)) {
          missingRequiredArgs.push(key)
        }
      })

      if (missingRequiredArgs.length > 0) {
        usage.fail(__n(
          'Missing argument value: %s',
          'Missing argument values: %s',
          missingRequiredArgs.length,
          missingRequiredArgs.join(', ')
        ))
      }
    }
  }

  // make sure all the required arguments are present.
  self.requiredArguments = function (argv) {
    const demandedOptions = yargs.getDemandedOptions()
    var missing = null

    Object.keys(demandedOptions).forEach(function (key) {
      if (!argv.hasOwnProperty(key) || typeof argv[key] === 'undefined') {
        missing = missing || {}
        missing[key] = demandedOptions[key]
      }
    })

    if (missing) {
      const customMsgs = []
      Object.keys(missing).forEach(function (key) {
        const msg = missing[key]
        if (msg && customMsgs.indexOf(msg) < 0) {
          customMsgs.push(msg)
        }
      })

      const customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : ''

      usage.fail(__n(
        'Missing required argument: %s',
        'Missing required arguments: %s',
        Object.keys(missing).length,
        Object.keys(missing).join(', ') + customMsg
      ))
    }
  }

  // check for unknown arguments (strict-mode).
  self.unknownArguments = function (argv, aliases, positionalMap) {
    const aliasLookup = {}
    const descriptions = usage.getDescriptions()
    const demandedOptions = yargs.getDemandedOptions()
    const commandKeys = yargs.getCommandInstance().getCommands()
    const unknown = []
    const currentContext = yargs.getContext()

    Object.keys(aliases).forEach(function (key) {
      aliases[key].forEach(function (alias) {
        aliasLookup[alias] = key
      })
    })

    Object.keys(argv).forEach(function (key) {
      if (specialKeys.indexOf(key) === -1 &&
        !descriptions.hasOwnProperty(key) &&
        !demandedOptions.hasOwnProperty(key) &&
        !positionalMap.hasOwnProperty(key) &&
        !yargs._getParseContext().hasOwnProperty(key) &&
        !aliasLookup.hasOwnProperty(key)) {
        unknown.push(key)
      }
    })

    if (commandKeys.length > 0) {
      argv._.slice(currentContext.commands.length).forEach(function (key) {
        if (commandKeys.indexOf(key) === -1) {
          unknown.push(key)
        }
      })
    }

    if (unknown.length > 0) {
      usage.fail(__n(
        'Unknown argument: %s',
        'Unknown arguments: %s',
        unknown.length,
        unknown.join(', ')
      ))
    }
  }

  // validate arguments limited to enumerated choices
  self.limitedChoices = function (argv) {
    const options = yargs.getOptions()
    const invalid = {}

    if (!Object.keys(options.choices).length) return

    Object.keys(argv).forEach(function (key) {
      if (specialKeys.indexOf(key) === -1 &&
        options.choices.hasOwnProperty(key)) {
        [].concat(argv[key]).forEach(function (value) {
          // TODO case-insensitive configurability
          if (options.choices[key].indexOf(value) === -1) {
            invalid[key] = (invalid[key] || []).concat(value)
          }
        })
      }
    })

    const invalidKeys = Object.keys(invalid)

    if (!invalidKeys.length) return

    var msg = __('Invalid values:')
    invalidKeys.forEach(function (key) {
      msg += '\n  ' + __(
        'Argument: %s, Given: %s, Choices: %s',
        key,
        usage.stringifiedValues(invalid[key]),
        usage.stringifiedValues(options.choices[key])
      )
    })
    usage.fail(msg)
  }

  // custom checks, added using the `check` option on yargs.
  var checks = []
  self.check = function (f, global) {
    checks.push({
      func: f,
      global: global
    })
  }

  self.customChecks = function (argv, aliases) {
    for (var i = 0, f; (f = checks[i]) !== undefined; i++) {
      var func = f.func
      var result = null
      try {
        result = func(argv, aliases)
      } catch (err) {
        usage.fail(err.message ? err.message : err, err)
        continue
      }

      if (!result) {
        usage.fail(__('Argument check failed: %s', func.toString()))
      } else if (typeof result === 'string' || result instanceof Error) {
        usage.fail(result.toString(), result)
      }
    }
  }

  // check implications, argument foo implies => argument bar.
  var implied = {}
  self.implies = function (key, value) {
    if (typeof key === 'object') {
      Object.keys(key).forEach(function (k) {
        self.implies(k, key[k])
      })
    } else {
      yargs.global(key)
      implied[key] = value
    }
  }
  self.getImplied = function () {
    return implied
  }

  self.implications = function (argv) {
    const implyFail = []

    Object.keys(implied).forEach(function (key) {
      var num
      const origKey = key
      var value = implied[key]

      // convert string '1' to number 1
      num = Number(key)
      key = isNaN(num) ? key : num

      if (typeof key === 'number') {
        // check length of argv._
        key = argv._.length >= key
      } else if (key.match(/^--no-.+/)) {
        // check if key doesn't exist
        key = key.match(/^--no-(.+)/)[1]
        key = !argv[key]
      } else {
        // check if key exists
        key = argv[key]
      }

      num = Number(value)
      value = isNaN(num) ? value : num

      if (typeof value === 'number') {
        value = argv._.length >= value
      } else if (value.match(/^--no-.+/)) {
        value = value.match(/^--no-(.+)/)[1]
        value = !argv[value]
      } else {
        value = argv[value]
      }

      if (key && !value) {
        implyFail.push(origKey)
      }
    })

    if (implyFail.length) {
      var msg = __('Implications failed:') + '\n'

      implyFail.forEach(function (key) {
        msg += ('  ' + key + ' -> ' + implied[key])
      })

      usage.fail(msg)
    }
  }

  var conflicting = {}
  self.conflicts = function (key, value) {
    if (typeof key === 'object') {
      Object.keys(key).forEach(function (k) {
        self.conflicts(k, key[k])
      })
    } else {
      yargs.global(key)
      conflicting[key] = value
    }
  }
  self.getConflicting = function () {
    return conflicting
  }

  self.conflicting = function (argv) {
    var args = Object.getOwnPropertyNames(argv)

    args.forEach(function (arg) {
      if (conflicting[arg] && args.indexOf(conflicting[arg]) !== -1) {
        usage.fail(__('Arguments %s and %s are mutually exclusive', arg, conflicting[arg]))
      }
    })
  }

  self.recommendCommands = function (cmd, potentialCommands) {
    const distance = __webpack_require__(1204)
    const threshold = 3 // if it takes more than three edits, let's move on.
    potentialCommands = potentialCommands.sort(function (a, b) { return b.length - a.length })

    var recommended = null
    var bestDistance = Infinity
    for (var i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) {
      var d = distance(cmd, candidate)
      if (d <= threshold && d < bestDistance) {
        bestDistance = d
        recommended = candidate
      }
    }
    if (recommended) usage.fail(__('Did you mean %s?', recommended))
  }

  self.reset = function (localLookup) {
    implied = objFilter(implied, function (k, v) {
      return !localLookup[k]
    })
    conflicting = objFilter(conflicting, function (k, v) {
      return !localLookup[k]
    })
    checks = checks.filter(function (c) {
      return c.global
    })
    return self
  }

  var frozen
  self.freeze = function () {
    frozen = {}
    frozen.implied = implied
    frozen.checks = checks
    frozen.conflicting = conflicting
  }
  self.unfreeze = function () {
    implied = frozen.implied
    checks = frozen.checks
    conflicting = frozen.conflicting
    frozen = undefined
  }

  return self
}


/***/ }),
/* 1207 */
/***/ (function(module, exports, __webpack_require__) {

const argsert = __webpack_require__(1202)
const assign = __webpack_require__(459)
const Command = __webpack_require__(460)
const Completion = __webpack_require__(1203)
const Parser = __webpack_require__(1199)
const path = __webpack_require__(0)
const Usage = __webpack_require__(1205)
const Validation = __webpack_require__(1206)
const Y18n = __webpack_require__(1127)
const objFilter = __webpack_require__(252)
const setBlocking = __webpack_require__(413)
const applyExtends = __webpack_require__(1201)
const YError = __webpack_require__(176)

var exports = module.exports = Yargs
function Yargs (processArgs, cwd, parentRequire) {
  processArgs = processArgs || [] // handle calling yargs().

  const self = {}
  var command = null
  var completion = null
  var groups = {}
  var output = ''
  var preservedGroups = {}
  var usage = null
  var validation = null

  const y18n = Y18n({
    directory: path.resolve(__dirname, './locales'),
    updateFiles: false
  })

  if (!cwd) cwd = process.cwd()

  self.$0 = process.argv
    .slice(0, 2)
    .map(function (x, i) {
      // ignore the node bin, specify this in your
      // bin file with #!/usr/bin/env node
      if (i === 0 && /\b(node|iojs)(\.exe)?$/.test(x)) return
      var b = rebase(cwd, x)
      return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x
    })
    .join(' ').trim()

  if (process.env._ !== undefined && process.argv[1] === process.env._) {
    self.$0 = process.env._.replace(
      path.dirname(process.execPath) + '/', ''
    )
  }

  // use context object to keep track of resets, subcommand execution, etc
  // submodules should modify and check the state of context as necessary
  const context = { resets: -1, commands: [], files: [] }
  self.getContext = function () {
    return context
  }

  // puts yargs back into an initial state. any keys
  // that have been set to "global" will not be reset
  // by this action.
  var options
  self.resetOptions = self.reset = function (aliases) {
    context.resets++
    aliases = aliases || {}
    options = options || {}
    // put yargs back into an initial state, this
    // logic is used to build a nested command
    // hierarchy.
    var tmpOptions = {}
    tmpOptions.local = options.local ? options.local : []
    tmpOptions.configObjects = options.configObjects ? options.configObjects : []

    // if a key has been explicitly set as local,
    // we should reset it before passing options to command.
    var localLookup = {}
    tmpOptions.local.forEach(function (l) {
      localLookup[l] = true
      ;(aliases[l] || []).forEach(function (a) {
        localLookup[a] = true
      })
    })

    // preserve all groups not set to local.
    preservedGroups = Object.keys(groups).reduce(function (acc, groupName) {
      var keys = groups[groupName].filter(function (key) {
        return !(key in localLookup)
      })
      if (keys.length > 0) {
        acc[groupName] = keys
      }
      return acc
    }, {})
    // groups can now be reset
    groups = {}

    var arrayOptions = [
      'array', 'boolean', 'string', 'requiresArg', 'skipValidation',
      'count', 'normalize', 'number'
    ]

    var objectOptions = [
      'narg', 'key', 'alias', 'default', 'defaultDescription',
      'config', 'choices', 'demandedOptions', 'demandedCommands', 'coerce'
    ]

    arrayOptions.forEach(function (k) {
      tmpOptions[k] = (options[k] || []).filter(function (k) {
        return !localLookup[k]
      })
    })

    objectOptions.forEach(function (k) {
      tmpOptions[k] = objFilter(options[k], function (k, v) {
        return !localLookup[k]
      })
    })

    tmpOptions.envPrefix = options.envPrefix
    options = tmpOptions

    // if this is the first time being executed, create
    // instances of all our helpers -- otherwise just reset.
    usage = usage ? usage.reset(localLookup) : Usage(self, y18n)
    validation = validation ? validation.reset(localLookup) : Validation(self, usage, y18n)
    command = command ? command.reset() : Command(self, usage, validation)
    if (!completion) completion = Completion(self, usage, command)

    completionCommand = null
    output = ''
    exitError = null
    hasOutput = false
    self.parsed = false

    return self
  }
  self.resetOptions()

  // temporary hack: allow "freezing" of reset-able state for parse(msg, cb)
  var frozen
  function freeze () {
    frozen = {}
    frozen.options = options
    frozen.configObjects = options.configObjects.slice(0)
    frozen.exitProcess = exitProcess
    frozen.groups = groups
    usage.freeze()
    validation.freeze()
    command.freeze()
    frozen.strict = strict
    frozen.completionCommand = completionCommand
    frozen.output = output
    frozen.exitError = exitError
    frozen.hasOutput = hasOutput
    frozen.parsed = self.parsed
  }
  function unfreeze () {
    options = frozen.options
    options.configObjects = frozen.configObjects
    exitProcess = frozen.exitProcess
    groups = frozen.groups
    output = frozen.output
    exitError = frozen.exitError
    hasOutput = frozen.hasOutput
    self.parsed = frozen.parsed
    usage.unfreeze()
    validation.unfreeze()
    command.unfreeze()
    strict = frozen.strict
    completionCommand = frozen.completionCommand
    parseFn = null
    parseContext = null
    frozen = undefined
  }

  self.boolean = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('boolean', keys)
    return self
  }

  self.array = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('array', keys)
    return self
  }

  self.number = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('number', keys)
    return self
  }

  self.normalize = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('normalize', keys)
    return self
  }

  self.count = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('count', keys)
    return self
  }

  self.string = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('string', keys)
    return self
  }

  self.requiresArg = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('requiresArg', keys)
    return self
  }

  self.skipValidation = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('skipValidation', keys)
    return self
  }

  function populateParserHintArray (type, keys, value) {
    keys = [].concat(keys)
    keys.forEach(function (key) {
      options[type].push(key)
    })
  }

  self.nargs = function (key, value) {
    argsert('<string|object|array> [number]', [key, value], arguments.length)
    populateParserHintObject(self.nargs, false, 'narg', key, value)
    return self
  }

  self.choices = function (key, value) {
    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
    populateParserHintObject(self.choices, true, 'choices', key, value)
    return self
  }

  self.alias = function (key, value) {
    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
    populateParserHintObject(self.alias, true, 'alias', key, value)
    return self
  }

  // TODO: actually deprecate self.defaults.
  self.default = self.defaults = function (key, value, defaultDescription) {
    argsert('<object|string|array> [*] [string]', [key, value, defaultDescription], arguments.length)
    if (defaultDescription) options.defaultDescription[key] = defaultDescription
    if (typeof value === 'function') {
      if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value)
      value = value.call()
    }
    populateParserHintObject(self.default, false, 'default', key, value)
    return self
  }

  self.describe = function (key, desc) {
    argsert('<object|string|array> [string]', [key, desc], arguments.length)
    populateParserHintObject(self.describe, false, 'key', key, true)
    usage.describe(key, desc)
    return self
  }

  self.demandOption = function (keys, msg) {
    argsert('<object|string|array> [string]', [keys, msg], arguments.length)
    populateParserHintObject(self.demandOption, false, 'demandedOptions', keys, msg)
    return self
  }

  self.coerce = function (keys, value) {
    argsert('<object|string|array> [function]', [keys, value], arguments.length)
    populateParserHintObject(self.coerce, false, 'coerce', keys, value)
    return self
  }

  function populateParserHintObject (builder, isArray, type, key, value) {
    if (Array.isArray(key)) {
      // an array of keys with one value ['x', 'y', 'z'], function parse () {}
      var temp = {}
      key.forEach(function (k) {
        temp[k] = value
      })
      builder(temp)
    } else if (typeof key === 'object') {
      // an object of key value pairs: {'x': parse () {}, 'y': parse() {}}
      Object.keys(key).forEach(function (k) {
        builder(k, key[k])
      })
    } else {
      // a single key value pair 'x', parse() {}
      if (isArray) {
        options[type][key] = (options[type][key] || []).concat(value)
      } else {
        options[type][key] = value
      }
    }
  }

  self.config = function (key, msg, parseFn) {
    argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length)
    // allow a config object to be provided directly.
    if (typeof key === 'object') {
      key = applyExtends(key, cwd)
      options.configObjects = (options.configObjects || []).concat(key)
      return self
    }

    // allow for a custom parsing function.
    if (typeof msg === 'function') {
      parseFn = msg
      msg = null
    }

    key = key || 'config'
    self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file'))
    ;(Array.isArray(key) ? key : [key]).forEach(function (k) {
      options.config[k] = parseFn || true
    })

    return self
  }

  self.example = function (cmd, description) {
    argsert('<string> [string]', [cmd, description], arguments.length)
    usage.example(cmd, description)
    return self
  }

  self.command = function (cmd, description, builder, handler) {
    argsert('<string|array|object> [string|boolean] [function|object] [function]', [cmd, description, builder, handler], arguments.length)
    command.addHandler(cmd, description, builder, handler)
    return self
  }

  self.commandDir = function (dir, opts) {
    argsert('<string> [object]', [dir, opts], arguments.length)
    const req = parentRequire || !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
    command.addDirectory(dir, self.getContext(), req, __webpack_require__(833)(), opts)
    return self
  }

  // TODO: deprecate self.demand in favor of
  // .demandCommand() .demandOption().
  self.demand = self.required = self.require = function (keys, max, msg) {
    // you can optionally provide a 'max' key,
    // which will raise an exception if too many '_'
    // options are provided.
    if (Array.isArray(max)) {
      max.forEach(function (key) {
        self.demandOption(key, msg)
      })
      max = Infinity
    } else if (typeof max !== 'number') {
      msg = max
      max = Infinity
    }

    if (typeof keys === 'number') {
      self.demandCommand(keys, max, msg, msg)
    } else if (Array.isArray(keys)) {
      keys.forEach(function (key) {
        self.demandOption(key, msg)
      })
    } else {
      if (typeof msg === 'string') {
        self.demandOption(keys, msg)
      } else if (msg === true || typeof msg === 'undefined') {
        self.demandOption(keys)
      }
    }

    return self
  }

  self.demandCommand = function (min, max, minMsg, maxMsg) {
    argsert('[number] [number|string] [string|null] [string|null]', [min, max, minMsg, maxMsg], arguments.length)

    if (typeof min === 'undefined') min = 1

    if (typeof max !== 'number') {
      minMsg = max
      max = Infinity
    }

    self.global('_', false)

    options.demandedCommands._ = {
      min: min,
      max: max,
      minMsg: minMsg,
      maxMsg: maxMsg
    }

    return self
  }

  self.getDemandedOptions = function () {
    argsert([], 0)
    return options.demandedOptions
  }

  self.getDemandedCommands = function () {
    argsert([], 0)
    return options.demandedCommands
  }

  self.implies = function (key, value) {
    argsert('<string|object> [string]', [key, value], arguments.length)
    validation.implies(key, value)
    return self
  }

  self.conflicts = function (key1, key2) {
    argsert('<string|object> [string]', [key1, key2], arguments.length)
    validation.conflicts(key1, key2)
    return self
  }

  self.usage = function (msg, opts) {
    argsert('<string|null|object> [object]', [msg, opts], arguments.length)

    if (!opts && typeof msg === 'object') {
      opts = msg
      msg = null
    }

    usage.usage(msg)

    if (opts) self.options(opts)

    return self
  }

  self.epilogue = self.epilog = function (msg) {
    argsert('<string>', [msg], arguments.length)
    usage.epilog(msg)
    return self
  }

  self.fail = function (f) {
    argsert('<function>', [f], arguments.length)
    usage.failFn(f)
    return self
  }

  self.check = function (f, _global) {
    argsert('<function> [boolean]', [f, _global], arguments.length)
    validation.check(f, _global !== false)
    return self
  }

  self.global = function (globals, global) {
    argsert('<string|array> [boolean]', [globals, global], arguments.length)
    globals = [].concat(globals)
    if (global !== false) {
      options.local = options.local.filter(function (l) {
        return globals.indexOf(l) === -1
      })
    } else {
      globals.forEach(function (g) {
        if (options.local.indexOf(g) === -1) options.local.push(g)
      })
    }
    return self
  }

  self.pkgConf = function (key, path) {
    argsert('<string> [string]', [key, path], arguments.length)
    var conf = null
    // prefer cwd to require-main-filename in this method
    // since we're looking for e.g. "nyc" config in nyc consumer
    // rather than "yargs" config in nyc (where nyc is the main filename)
    var obj = pkgUp(path || cwd)

    // If an object exists in the key, add it to options.configObjects
    if (obj[key] && typeof obj[key] === 'object') {
      conf = applyExtends(obj[key], path || cwd)
      options.configObjects = (options.configObjects || []).concat(conf)
    }

    return self
  }

  var pkgs = {}
  function pkgUp (path) {
    var npath = path || '*'
    if (pkgs[npath]) return pkgs[npath]
    const readPkgUp = __webpack_require__(1194)

    var obj = {}
    try {
      obj = readPkgUp.sync({
        cwd: path || __webpack_require__(1044)(parentRequire || !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())),
        normalize: false
      })
    } catch (noop) {}

    pkgs[npath] = obj.pkg || {}
    return pkgs[npath]
  }

  var parseFn = null
  var parseContext = null
  self.parse = function (args, shortCircuit, _parseFn) {
    argsert('<string|array> [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length)

    // a context object can optionally be provided, this allows
    // additional information to be passed to a command handler.
    if (typeof shortCircuit === 'object') {
      parseContext = shortCircuit
      shortCircuit = _parseFn
    }

    // by providing a function as a second argument to
    // parse you can capture output that would otherwise
    // default to printing to stdout/stderr.
    if (typeof shortCircuit === 'function') {
      parseFn = shortCircuit
      shortCircuit = null
    }
    // completion short-circuits the parsing process,
    // skipping validation, etc.
    if (!shortCircuit) processArgs = args

    freeze()
    if (parseFn) exitProcess = false

    var parsed = self._parseArgs(args, shortCircuit)
    if (parseFn) parseFn(exitError, parsed, output)
    unfreeze()

    return parsed
  }

  self._getParseContext = function () {
    return parseContext || {}
  }

  self._hasParseCallback = function () {
    return !!parseFn
  }

  self.option = self.options = function (key, opt) {
    argsert('<string|object> [object]', [key, opt], arguments.length)
    if (typeof key === 'object') {
      Object.keys(key).forEach(function (k) {
        self.options(k, key[k])
      })
    } else {
      if (typeof opt !== 'object') {
        opt = {}
      }

      options.key[key] = true // track manually set keys.

      if (opt.alias) self.alias(key, opt.alias)

      var demand = opt.demand || opt.required || opt.require

      // deprecated, use 'demandOption' instead
      if (demand) {
        self.demand(key, demand)
      }

      if (opt.demandOption) {
        self.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined)
      }

      if ('config' in opt) {
        self.config(key, opt.configParser)
      }

      if ('conflicts' in opt) {
        self.conflicts(key, opt.conflicts)
      }

      if ('default' in opt) {
        self.default(key, opt.default)
      }

      if ('implies' in opt) {
        self.implies(key, opt.implies)
      }

      if ('nargs' in opt) {
        self.nargs(key, opt.nargs)
      }

      if ('normalize' in opt) {
        self.normalize(key)
      }

      if ('choices' in opt) {
        self.choices(key, opt.choices)
      }

      if ('coerce' in opt) {
        self.coerce(key, opt.coerce)
      }

      if ('group' in opt) {
        self.group(key, opt.group)
      }

      if (opt.boolean || opt.type === 'boolean') {
        self.boolean(key)
        if (opt.alias) self.boolean(opt.alias)
      }

      if (opt.array || opt.type === 'array') {
        self.array(key)
        if (opt.alias) self.array(opt.alias)
      }

      if (opt.number || opt.type === 'number') {
        self.number(key)
        if (opt.alias) self.number(opt.alias)
      }

      if (opt.string || opt.type === 'string') {
        self.string(key)
        if (opt.alias) self.string(opt.alias)
      }

      if (opt.count || opt.type === 'count') {
        self.count(key)
      }

      if (typeof opt.global === 'boolean') {
        self.global(key, opt.global)
      }

      if (opt.defaultDescription) {
        options.defaultDescription[key] = opt.defaultDescription
      }

      if (opt.skipValidation) {
        self.skipValidation(key)
      }

      var desc = opt.describe || opt.description || opt.desc
      if (desc) {
        self.describe(key, desc)
      }

      if (opt.requiresArg) {
        self.requiresArg(key)
      }
    }

    return self
  }
  self.getOptions = function () {
    return options
  }

  self.group = function (opts, groupName) {
    argsert('<string|array> <string>', [opts, groupName], arguments.length)
    var existing = preservedGroups[groupName] || groups[groupName]
    if (preservedGroups[groupName]) {
      // we now only need to track this group name in groups.
      delete preservedGroups[groupName]
    }

    var seen = {}
    groups[groupName] = (existing || []).concat(opts).filter(function (key) {
      if (seen[key]) return false
      return (seen[key] = true)
    })
    return self
  }
  self.getGroups = function () {
    // combine explicit and preserved groups. explicit groups should be first
    return assign(groups, preservedGroups)
  }

  // as long as options.envPrefix is not undefined,
  // parser will apply env vars matching prefix to argv
  self.env = function (prefix) {
    argsert('[string|boolean]', [prefix], arguments.length)
    if (prefix === false) options.envPrefix = undefined
    else options.envPrefix = prefix || ''
    return self
  }

  self.wrap = function (cols) {
    argsert('<number|null>', [cols], arguments.length)
    usage.wrap(cols)
    return self
  }

  var strict = false
  self.strict = function (enabled) {
    argsert('[boolean]', [enabled], arguments.length)
    strict = enabled !== false
    return self
  }
  self.getStrict = function () {
    return strict
  }

  self.showHelp = function (level) {
    argsert('[string|function]', [level], arguments.length)
    if (!self.parsed) self._parseArgs(processArgs) // run parser, if it has not already been executed.
    usage.showHelp(level)
    return self
  }

  var versionOpt = null
  self.version = function (opt, msg, ver) {
    argsert('[string|function] [string|function] [string]', [opt, msg, ver], arguments.length)
    if (arguments.length === 0) {
      ver = guessVersion()
      opt = 'version'
    } else if (arguments.length === 1) {
      ver = opt
      opt = 'version'
    } else if (arguments.length === 2) {
      ver = msg
      msg = null
    }

    versionOpt = opt
    msg = msg || usage.deferY18nLookup('Show version number')

    usage.version(ver || undefined)
    self.boolean(versionOpt)
    self.describe(versionOpt, msg)
    return self
  }

  function guessVersion () {
    var obj = pkgUp()

    return obj.version || 'unknown'
  }

  var helpOpt = null
  var useHelpOptAsCommand = false // a call to .help() will enable this
  self.addHelpOpt = self.help = function (opt, msg, addImplicitCmd) {
    argsert('[string|boolean] [string|boolean] [boolean]', [opt, msg, addImplicitCmd], arguments.length)

    // argument shuffle
    if (arguments.length === 0) {
      useHelpOptAsCommand = true
    } else if (arguments.length === 1) {
      if (typeof opt === 'boolean') {
        useHelpOptAsCommand = opt
        opt = null
      } else {
        useHelpOptAsCommand = true
      }
    } else if (arguments.length === 2) {
      if (typeof msg === 'boolean') {
        useHelpOptAsCommand = msg
        msg = null
      } else {
        useHelpOptAsCommand = true
      }
    } else {
      useHelpOptAsCommand = Boolean(addImplicitCmd)
    }
    // use arguments, fallback to defaults for opt and msg
    helpOpt = opt || 'help'
    self.boolean(helpOpt)
    self.describe(helpOpt, msg || usage.deferY18nLookup('Show help'))
    return self
  }

  self.showHelpOnFail = function (enabled, message) {
    argsert('[boolean|string] [string]', [enabled, message], arguments.length)
    usage.showHelpOnFail(enabled, message)
    return self
  }

  var exitProcess = true
  self.exitProcess = function (enabled) {
    argsert('[boolean]', [enabled], arguments.length)
    if (typeof enabled !== 'boolean') {
      enabled = true
    }
    exitProcess = enabled
    return self
  }
  self.getExitProcess = function () {
    return exitProcess
  }

  var completionCommand = null
  self.completion = function (cmd, desc, fn) {
    argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length)

    // a function to execute when generating
    // completions can be provided as the second
    // or third argument to completion.
    if (typeof desc === 'function') {
      fn = desc
      desc = null
    }

    // register the completion command.
    completionCommand = cmd || 'completion'
    if (!desc && desc !== false) {
      desc = 'generate bash completion script'
    }
    self.command(completionCommand, desc)

    // a function can be provided
    if (fn) completion.registerFunction(fn)

    return self
  }

  self.showCompletionScript = function ($0) {
    argsert('[string]', [$0], arguments.length)
    $0 = $0 || self.$0
    _logger.log(completion.generateCompletionScript($0))
    return self
  }

  self.getCompletion = function (args, done) {
    argsert('<array> <function>', [args, done], arguments.length)
    completion.getCompletion(args, done)
  }

  self.locale = function (locale) {
    argsert('[string]', [locale], arguments.length)
    if (arguments.length === 0) {
      guessLocale()
      return y18n.getLocale()
    }
    detectLocale = false
    y18n.setLocale(locale)
    return self
  }

  self.updateStrings = self.updateLocale = function (obj) {
    argsert('<object>', [obj], arguments.length)
    detectLocale = false
    y18n.updateLocale(obj)
    return self
  }

  var detectLocale = true
  self.detectLocale = function (detect) {
    argsert('<boolean>', [detect], arguments.length)
    detectLocale = detect
    return self
  }
  self.getDetectLocale = function () {
    return detectLocale
  }

  var hasOutput = false
  var exitError = null
  // maybe exit, always capture
  // context about why we wanted to exit.
  self.exit = function (code, err) {
    hasOutput = true
    exitError = err
    if (exitProcess) process.exit(code)
  }

  // we use a custom logger that buffers output,
  // so that we can print to non-CLIs, e.g., chat-bots.
  var _logger = {
    log: function () {
      const args = []
      for (var i = 0; i < arguments.length; i++) args.push(arguments[i])
      if (!self._hasParseCallback()) console.log.apply(console, args)
      hasOutput = true
      if (output.length) output += '\n'
      output += args.join(' ')
    },
    error: function () {
      const args = []
      for (var i = 0; i < arguments.length; i++) args.push(arguments[i])
      if (!self._hasParseCallback()) console.error.apply(console, args)
      hasOutput = true
      if (output.length) output += '\n'
      output += args.join(' ')
    }
  }
  self._getLoggerInstance = function () {
    return _logger
  }
  // has yargs output an error our help
  // message in the current execution context.
  self._hasOutput = function () {
    return hasOutput
  }

  self._setHasOutput = function () {
    hasOutput = true
  }

  var recommendCommands
  self.recommendCommands = function (recommend) {
    argsert('[boolean]', [recommend], arguments.length)
    recommendCommands = typeof recommend === 'boolean' ? recommend : true
    return self
  }

  self.getUsageInstance = function () {
    return usage
  }

  self.getValidationInstance = function () {
    return validation
  }

  self.getCommandInstance = function () {
    return command
  }

  self.terminalWidth = function () {
    argsert([], 0)
    return typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null
  }

  Object.defineProperty(self, 'argv', {
    get: function () {
      return self._parseArgs(processArgs)
    },
    enumerable: true
  })

  self._parseArgs = function (args, shortCircuit, _skipValidation, commandIndex) {
    var skipValidation = !!_skipValidation
    args = args || processArgs

    options.__ = y18n.__
    options.configuration = pkgUp()['yargs'] || {}
    const parsed = Parser.detailed(args, options)
    var argv = parsed.argv
    if (parseContext) argv = assign(argv, parseContext)
    var aliases = parsed.aliases

    argv.$0 = self.$0
    self.parsed = parsed

    try {
      guessLocale() // guess locale lazily, so that it can be turned off in chain.

      // while building up the argv object, there
      // are two passes through the parser. If completion
      // is being performed short-circuit on the first pass.
      if (shortCircuit) {
        return argv
      }

      if (argv._.length) {
        // check for helpOpt in argv._ before running commands
        // assumes helpOpt must be valid if useHelpOptAsCommand is true
        if (useHelpOptAsCommand) {
          // consider any multi-char helpOpt alias as a valid help command
          // unless all helpOpt aliases are single-char
          // note that parsed.aliases is a normalized bidirectional map :)
          var helpCmds = [helpOpt].concat(aliases[helpOpt] || [])
          var multiCharHelpCmds = helpCmds.filter(function (k) {
            return k.length > 1
          })
          if (multiCharHelpCmds.length) helpCmds = multiCharHelpCmds
          // look for and strip any helpCmds from argv._
          argv._ = argv._.filter(function (cmd) {
            if (~helpCmds.indexOf(cmd)) {
              argv[helpOpt] = true
              return false
            }
            return true
          })
        }

        // if there's a handler associated with a
        // command defer processing to it.
        var handlerKeys = command.getCommands()
        if (handlerKeys.length) {
          var firstUnknownCommand
          for (var i = (commandIndex || 0), cmd; argv._[i] !== undefined; i++) {
            cmd = String(argv._[i])
            if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) {
              setPlaceholderKeys(argv)
              // commands are executed using a recursive algorithm that executes
              // the deepest command first; we keep track of the position in the
              // argv._ array that is currently being executed.
              return command.runCommand(cmd, self, parsed, i + 1)
            } else if (!firstUnknownCommand && cmd !== completionCommand) {
              firstUnknownCommand = cmd
              break
            }
          }

          // run the default command, if defined
          if (command.hasDefaultCommand() && !argv[helpOpt]) {
            setPlaceholderKeys(argv)
            return command.runCommand(null, self, parsed)
          }

          // recommend a command if recommendCommands() has
          // been enabled, and no commands were found to execute
          if (recommendCommands && firstUnknownCommand && !argv[helpOpt]) {
            validation.recommendCommands(firstUnknownCommand, handlerKeys)
          }
        }

        // generate a completion script for adding to ~/.bashrc.
        if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) {
          if (exitProcess) setBlocking(true)
          self.showCompletionScript()
          self.exit(0)
        }
      } else if (command.hasDefaultCommand() && !argv[helpOpt]) {
        setPlaceholderKeys(argv)
        return command.runCommand(null, self, parsed)
      }

      // we must run completions first, a user might
      // want to complete the --help or --version option.
      if (completion.completionKey in argv) {
        if (exitProcess) setBlocking(true)

        // we allow for asynchronous completions,
        // e.g., loading in a list of commands from an API.
        var completionArgs = args.slice(args.indexOf('--' + completion.completionKey) + 1)
        completion.getCompletion(completionArgs, function (completions) {
          ;(completions || []).forEach(function (completion) {
            _logger.log(completion)
          })

          self.exit(0)
        })
        return setPlaceholderKeys(argv)
      }

      // Handle 'help' and 'version' options
      // if we haven't already output help!
      if (!hasOutput) {
        Object.keys(argv).forEach(function (key) {
          if (key === helpOpt && argv[key]) {
            if (exitProcess) setBlocking(true)

            skipValidation = true
            self.showHelp('log')
            self.exit(0)
          } else if (key === versionOpt && argv[key]) {
            if (exitProcess) setBlocking(true)

            skipValidation = true
            usage.showVersion()
            self.exit(0)
          }
        })
      }

      // Check if any of the options to skip validation were provided
      if (!skipValidation && options.skipValidation.length > 0) {
        skipValidation = Object.keys(argv).some(function (key) {
          return options.skipValidation.indexOf(key) >= 0 && argv[key] === true
        })
      }

      // If the help or version options where used and exitProcess is false,
      // or if explicitly skipped, we won't run validations.
      if (!skipValidation) {
        if (parsed.error) throw new YError(parsed.error.message)

        // if we're executed via bash completion, don't
        // bother with validation.
        if (!argv[completion.completionKey]) {
          self._runValidation(argv, aliases, {}, parsed.error)
        }
      }
    } catch (err) {
      if (err instanceof YError) usage.fail(err.message, err)
      else throw err
    }

    return setPlaceholderKeys(argv)
  }

  self._runValidation = function (argv, aliases, positionalMap, parseErrors) {
    if (parseErrors) throw new YError(parseErrors.message)
    validation.nonOptionCount(argv)
    validation.missingArgumentValue(argv)
    validation.requiredArguments(argv)
    if (strict) validation.unknownArguments(argv, aliases, positionalMap)
    validation.customChecks(argv, aliases)
    validation.limitedChoices(argv)
    validation.implications(argv)
    validation.conflicting(argv)
  }

  function guessLocale () {
    if (!detectLocale) return

    try {
      const osLocale = __webpack_require__(1192)
      self.locale(osLocale.sync({ spawn: false }))
    } catch (err) {
      // if we explode looking up locale just noop
      // we'll keep using the default language 'en'.
    }
  }

  function setPlaceholderKeys (argv) {
    Object.keys(options.key).forEach(function (key) {
      // don't set placeholder keys for dot
      // notation options 'foo.bar'.
      if (~key.indexOf('.')) return
      if (typeof argv[key] === 'undefined') argv[key] = undefined
    })
    return argv
  }

  return self
}

// rebase an absolute path to a relative one with respect to a base directory
// exported for tests
exports.rebase = rebase
function rebase (base, dir) {
  return path.relative(base, dir)
}


/***/ }),
/* 1208 */
/***/ (function(module, exports, __webpack_require__) {

var OS = __webpack_require__(5);
var dir = __webpack_require__(98);
var path = __webpack_require__(0);
var async = __webpack_require__(28);
var debug = __webpack_require__(1210)("lib:debug");

var commandReference = {
  "o": "step over",
  "i": "step into",
  "u": "step out",
  "n": "step next",
  ";": "step instruction",
  "p": "print instruction",
  "h": "print this help",
  "v": "print variables and values",
  ":": "evaluate expression - see `v`",
  "+": "add watch expression (`+:<expr>`)",
  "-": "remove watch expression (-:<expr>)",
  "?": "list existing watch expressions",
  "b": "toggle breakpoint",
  "c": "continue until breakpoint",
  "q": "quit"
};

var DebugUtils = {
  gatherArtifacts: function(config) {
    return new Promise((accept, reject) => {
      // Gather all available contract artifacts
      dir.files(config.contracts_build_directory, (err, files) => {
        if (err) return reject(err);

        var contracts = files.filter((file_path) => {
          return path.extname(file_path) == ".json";
        }).map((file_path) => {
          return path.basename(file_path, ".json");
        }).map((contract_name) => {
          return config.resolver.require(contract_name);
        });

        async.each(contracts, (abstraction, finished) => {
          abstraction.detectNetwork().then(() => {
            finished();
          }).catch(finished);
        }, (err) => {
          if (err) return reject(err);
          accept(contracts.map( (contract) => {
            debug("contract.sourcePath: %o", contract.sourcePath);

            return {
              contractName: contract.contractName,
              source: contract.source,
              sourceMap: contract.sourceMap,
              sourcePath: contract.sourcePath,
              binary: contract.binary,
              ast: contract.ast,
              deployedBinary: contract.deployedBinary,
              deployedSourceMap: contract.deployedSourceMap
            };
          }));
        });
      });
    });
  },

  formatStartMessage: function() {
    var lines = [
      "",
      "Gathering transaction data...",
      ""
    ];

    return lines.join(OS.EOL);
  },

  formatCommandDescription: function(commandId) {
    return "(" + commandId + ") " + commandReference[commandId];
  },

  formatAffectedInstances: function(instances) {
    var hasAllSource = true;

    var lines = Object.keys(instances).map(function(address) {
      var instance = instances[address];

      if (instance.contractName) {
        return " " + address + " - " + instance.contractName;
      }

      if (!instance.source) {
        hasAllSource = false;
      }

      return " " + address + "(UNKNOWN)";
    });


    if (!hasAllSource) {
      lines.push("");
      lines.push("Warning: The source code for one or more contracts could not be found.");
    }

    return lines.join(OS.EOL);
  },

  formatHelp: function(lastCommand) {
    if (!lastCommand) {
      lastCommand = "n";
    }

    var prefix = [
      "Commands:",
      "(enter) last command entered (" + commandReference[lastCommand] + ")"
    ];

    var commandSections = [
      ["o", "i", "u", "n"],
      [";", "p", "h", "q"],
      ["b", "c"],
      ["+", "-"],
      ["?"],
      ["v", ":"]
    ].map(function (shortcuts) {
      return shortcuts
        .map(DebugUtils.formatCommandDescription)
        .join(", ");
    })

    var suffix = [
      ""
    ];

    var lines = prefix.concat(commandSections).concat(suffix);

    return lines.join(OS.EOL);
  },

  formatLineNumberPrefix: function (line, number, cols, tab) {
    if (!tab) {
      tab = "  ";
    }

    var prefix = number + "";
    while (prefix.length < cols) {
      prefix = " " + prefix;
    }

    prefix += ": ";
    return prefix + line.replace(/\t/g, tab);
  },

  formatLinePointer: function(line, startCol, endCol, padding, tab) {
    if (!tab) {
      tab = "  ";
    }

    padding += 2; // account for ": "
    var prefix = "";
    while (prefix.length < padding) {
      prefix += " ";
    }

    var output = "";
    for (var i = 0; i < line.length; i++) {
      var pointedAt = (i >= startCol && i < endCol);
      var isTab = (line[i] == "\t");

      var additional;
      if (isTab) {
        additional = tab;
      } else {
        additional = " "; // just a space
      }

      if (pointedAt) {
        additional = additional.replace(/./g, "^");
      }

      output += additional;
    }

    return prefix + output;
  },

  formatRangeLines: function(source, range, contextBefore) {
    var outputLines = [];

    // range is {
    //   start: { line, column },
    //   end: { line, column}
    // }
    //

    if (contextBefore == undefined) {
      contextBefore = 2;
    };

    var startBeforeIndex = Math.max(
      range.start.line - contextBefore, 0
    );

    var prefixLength = ((range.start.line + 1) + "").length;

    var beforeLines = source
      .filter(function (line, index) {
        return index >= startBeforeIndex && index < range.start.line
      })
      .map(function (line, index) {
        var number = startBeforeIndex + index + 1;  // 1 to account for 0-index
        return DebugUtils.formatLineNumberPrefix(line, number, prefixLength)
      });

    var line = source[range.start.line];
    var number = range.start.line + 1; // zero-index

    var pointerStart = range.start.column;
    var pointerEnd;

    // range.end is undefined in some cases
    // null/undefined check to avoid exceptions
    if (range.end && range.start.line == range.end.line) {
      // start and end are same line: pointer ends at column
      pointerEnd = range.end.column;
    } else {
      pointerEnd = line.length;
    }

    var allLines = beforeLines.concat([
      DebugUtils.formatLineNumberPrefix(line, number, prefixLength),
      DebugUtils.formatLinePointer(line, pointerStart, pointerEnd, prefixLength)
    ]);

    return allLines.join(OS.EOL);
  },

  formatInstruction: function (traceIndex, instruction) {
    return (
      "(" + traceIndex + ") " +
        instruction.name + " " +
        (instruction.pushData || "")
    );
  },

  formatStack: function (stack) {
    var formatted = stack.map(function (item, index) {
      item = "  " + item;
      if (index == stack.length - 1) {
        item += " (top)";
      }

      return item;
    });

    if (stack.length == 0) {
      formatted.push("  No data on stack.");
    }

    return formatted.join(OS.EOL);
  }
};

module.exports = DebugUtils;


/***/ }),
/* 1209 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(461);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 1210 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(1209);
} else {
  module.exports = __webpack_require__(1211);
}


/***/ }),
/* 1211 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(461);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 1212 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(463);
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}


/***/ }),
/* 1213 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = __webpack_require__(1212);
} else {
  module.exports = __webpack_require__(1214);
}


/***/ }),
/* 1214 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * Module dependencies.
 */

var tty = __webpack_require__(33);
var util = __webpack_require__(2);

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = __webpack_require__(463);
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = __webpack_require__(67);
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());


/***/ }),
/* 1215 */
/***/ (function(module, exports, __webpack_require__) {

var deploy = __webpack_require__(465);

module.exports = function(arr, deployer) {
  return function() {
    var deployments = arr.map(function(args) {
      var contract;

      if (Array.isArray(args)) {
        contract = args.shift();
      } else {
        contract = args;
        args = [];
      }

      return deploy(contract, args, deployer)();
    });

    return Promise.all(deployments);
  };
};


/***/ }),
/* 1216 */
/***/ (function(module, exports, __webpack_require__) {

var Linker = __webpack_require__(1219);

module.exports = function(library, destinations, deployer) {
  return function() {
    Linker.link(library, destinations, deployer.logger);
  };
};


/***/ }),
/* 1217 */
/***/ (function(module, exports) {

module.exports = function(contract, args, deployer) {
  return function() {
    deployer.logger.log("Creating new instance of " + contract.contract_name);
    // Evaluate any arguments if they're promises
    return Promise.all(args).then(function(new_args) {
      return contract.new.apply(contract, args)
    });
  };
};


/***/ }),
/* 1218 */
/***/ (function(module, exports) {

function DeferredChain() {
  var self = this;
  this.chain = new Promise(function(accept, reject) {
    self._accept = accept;
    self._reject = reject;
  });

  this.await = new Promise(function() {
    self._done = arguments[0];
    self._error = arguments[1];
  });
  this.started = false;
};

DeferredChain.prototype.then = function(fn) {
  var self = this;
  this.chain = this.chain.then(function() {
    var args = Array.prototype.slice.call(arguments);

    return fn.apply(null, args);
  });
  this.chain = this.chain.catch(function(e) {
    self._error(e);
  });

  return this;
};

DeferredChain.prototype.catch = function(fn) {
  var self = this;
  this.chain = this.chain.catch(function() {
    var args = Array.prototype.slice.call(arguments);

    return fn.apply(null, args);
  });

  return this;
};

DeferredChain.prototype.start = function() {
  this.started = true;
  this.chain = this.chain.then(this._done);
  this._accept();
  return this.await;
};

module.exports = DeferredChain;


/***/ }),
/* 1219 */
/***/ (function(module, exports) {

module.exports = {
  link: function(library, destinations, logger) {
    var self = this;

    logger = logger || console;

    if (!Array.isArray(destinations)) {
      destinations = [destinations];
    }

    if (library.contract_name == null) {
      throw new Error("Cannot link a library with no name.");
    }

    var hasAddress = false;

    // Abstractions; don't want to use .address directly because it will throw.
    if (typeof library.isDeployed) {
      hasAddress = library.isDeployed();
    } else {
      hasAddress = library.address != null;
    }

    if (!hasAddress) {
      throw new Error("Cannot link library: " + library.contract_name + " has no address. Has it been deployed?");
    }

    destinations.forEach(function(destination) {
      // Don't link if result will have no effect.
      if (destination.links[library.contract_name] == library.address) return;    // already linked to same address
      if (destination.unlinked_binary.indexOf(library.contract_name) < 0) return; // no linkage available

      logger.log("Linking " + library.contract_name + " to " + destination.contract_name);
      destination.link(library);
    });
  },

  // autolink: function(contract, available_contracts, logger) {
  //   // Abstract contract passed.
  //   if (contract.binary == null) return;
  //
  //   var self = this;
  //   var regex = /__[^_]+_+/g;
  //
  //   logger = logger || console;
  //
  //   var unlinked_libraries = contract.unlinked_binary.match(regex);
  //
  //   // Nothing to link.
  //   if (unlinked_libraries == null) return;
  //
  //   if (unlinked_libraries.length == 0) {
  //     throw new Error("Cannot auto link " + contract.contract_name + "; " + contract.contract_name + " has no library dependencies.")
  //   }
  //
  //   unlinked_libraries = unlinked_libraries.map(function(name) {
  //     // Remove underscores
  //     return name.replace(/_/g, "");
  //   }).sort().filter(function(name, index, arr) {
  //     // Remove duplicates
  //     if (index + 1 >= arr.length) {
  //       return true;
  //     }
  //
  //     return name != arr[index + 1];
  //   });
  //
  //   unlinked_libraries.forEach(function(name) {
  //     var library = available_contracts[name];
  //
  //     if (library == null) {
  //       throw new Error("Cannot auto link " + contract.contract_name + "; " + contract.contract_name + " unknown dependency " + name + ".")
  //     }
  //
  //     self.link(library, contract, logger);
  //   });
  // }
};


/***/ }),
/* 1220 */
/***/ (function(module, exports) {

// From here:
// https://phabricator.babeljs.io/T3083
//
// Turns out I was doing some bad things, but for now I'm going to
// keep on doing them. TODO: Stop it.

function ExtendableBuiltin(cls){
  function ExtendableBuiltin(){
      cls.apply(this, arguments);
  }
  ExtendableBuiltin.prototype = Object.create(cls.prototype);
  Object.setPrototypeOf(ExtendableBuiltin, cls);

  return ExtendableBuiltin;
}

module.exports = ExtendableBuiltin;


/***/ }),
/* 1221 */
/***/ (function(module, exports, __webpack_require__) {

const path = __webpack_require__(0);

function ResolverIntercept(resolver) {
  this.resolver = resolver;
  this.cache = {};
};

ResolverIntercept.prototype.require = function(import_path) {
  // Modify import_path so the cache key is consistently the same irrespective
  // of whether a user explicated .sol extension
  import_path = import_path.replace(/\.sol$/i, '');

  // TODO: Using the import path for relative files may result in multiple
  // paths for the same file. This could return different objects since it won't be a cache hit.
  if (this.cache[import_path]) {
    return this.cache[import_path];
  }

  // Note, will error if nothing is found.
  var resolved = this.resolver.require(import_path);

  this.cache[import_path] = resolved;

  // During migrations, we could be on a network that takes a long time to accept
  // transactions (i.e., contract deployment close to block size). Because successful
  // migration is more important than wait time in those cases, we'll synchronize "forever".
  resolved.synchronization_timeout = 0;

  return resolved;
};

ResolverIntercept.prototype.contracts = function() {
  var self = this;
  return Object.keys(this.cache).map(function(key) {
    return self.cache[key];
  });
};

module.exports = ResolverIntercept;


/***/ }),
/* 1222 */
/***/ (function(module, exports, __webpack_require__) {

var inherits = __webpack_require__(2).inherits;
var TruffleError = __webpack_require__(23);

// HACK: string comparison seems to be only way to identify being unable to
// connect to RPC node.
var NOT_CONNECTED_MESSAGE = 'Invalid JSON RPC response: ""';

function ProviderError(message, error) {
  if (message == NOT_CONNECTED_MESSAGE) {
    message = "Could not connect to your Ethereum client. " +
      "Please check that your Ethereum client:\n" +
      "    - is running\n" +
      "    - is accepting RPC connections (i.e., \"--rpc\" option is used in geth)\n" +
      "    - is accessible over the network\n" +
      "    - is properly configured in your Truffle configuration file (truffle.js)\n";
  }
  ProviderError.super_.call(this, message);
  this.message = message;
}

inherits(ProviderError, TruffleError);

module.exports = ProviderError;


/***/ }),
/* 1223 */
/***/ (function(module, exports, __webpack_require__) {

var ProviderError = __webpack_require__(1222);

module.exports = {
  /*
   * Web3.js Transport Wrapper
   *
   * Wraps an underlying web3 provider's RPC transport methods (send/sendAsync)
   * for Truffle-specific purposes, mainly for logging / request verbosity.
   */
  wrap: function(provider, options) {
    /* wrapping should be idempotent */
    if (provider._alreadyWrapped) return provider;

    /* setup options defaults */
    options = options || {};
    // custom logger
    options.logger = options.logger || console;
    // to see what web3 is sending and receiving.
    options.verbose = options.verbose || options.verboseRpc || false;

    /* create wrapper functions for before/after send */
    var preHook = this.preHook(options);
    var postHook = this.postHook(options);

    var originalSend = provider.send.bind(provider);
    var originalSendAsync = provider.sendAsync.bind(provider);

    /* overwrite methods */
    provider.send = this.send(originalSend, preHook, postHook);
    provider.sendAsync = this.sendAsync(originalSendAsync, preHook, postHook);

    /* mark as wrapped */
    provider._alreadyWrapped = true;

    return provider;
  },

  /*
   * Transport Hook Generators
   *
   * Used to wrap underlying web3.js behavior before/after sending request
   * payloads to the RPC.
   *
   * Transport hooks may be used to perform additional operations before/after
   * sending, and/or to modify request/response data.
   *
   * Each generator accepts an `options` argument and uses it to construct
   * and return a function.
   *
   * Returned functions accept relevant arguments and return potentially new
   * versions of those arguments (for payload/result/error overrides)
   */

  // before send/sendAsync
  preHook: function(options) {
    return function(payload) {
      if (options.verbose) {
        // for request payload debugging
        options.logger.log("   > " + JSON.stringify(payload, null, 2).split("\n").join("\n   > "));
      }

      return payload;
    };
  },

  // after send/sendAsync
  postHook: function(options) {
    return function(payload, error, result) {
      if (error != null) {
        // wrap errors in internal error class
        error = new ProviderError(error.message, error);
        return [payload, error, result];
      }

      if (options.verbose) {
        options.logger.log(" <   " + JSON.stringify(result, null, 2).split("\n").join("\n <   "));
      }

      return [payload, error, result];
    };
  },

  /*
   * Transport Method Generators
   *
   * Generate wrapped versions of `send`/`sendAsync`, given original method and
   * transport hooks.
   *
   * Pre-condition: originals are bound correctly (`send.bind(provider)`)
   *
   * Return the wrapped function matching the original function's signature.
   */

  // wrap a `provider.send` function with behavior hooks
  // returns a function(payload) to replace `provider.send`
  send: function(originalSend, preHook, postHook) {
    return function(payload) {
      var result = null;
      var error = null;

      payload = preHook(payload);

      try {
        result = originalSend(payload);
      } catch (e) {
        error = e;
      }

      var modified = postHook(payload, error, result);
      payload = modified[0];
      error = modified[1];
      result = modified[2];

      if (error != null) {
        throw error;
      }

      return result;
    }
  },

  // wrap a `provider.sendAsync` function with behavior hooks
  // returns a function(payload, callback) to replace `provider.sendAsync`
  sendAsync: function(originalSendAsync, preHook, postHook) {
    return function(payload, callback) {
      payload = preHook(payload);

      originalSendAsync(payload, function(error, result) {
        var modified = postHook(payload, error, result);
        payload = modified[0];
        error = modified[1];
        result = modified[2];

        callback(error, result);
      });
    };
  }
}


/***/ }),
/* 1224 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0);
var fs = __webpack_require__(1);
var filter = __webpack_require__(577);
var detectSeries = __webpack_require__(573);
var eachSeries = __webpack_require__(275)
var contract = __webpack_require__(69);
var FSSource = __webpack_require__(467);

function EPM(working_directory, contracts_build_directory) {
  this.working_directory = working_directory;
  this.contracts_build_directory = contracts_build_directory;
};

EPM.prototype.require = function(import_path, search_path) {
  if (import_path.indexOf(".") == 0 || import_path.indexOf("/") == 0) {
    return null;
  }

  // Look to see if we've compiled our own version first.
  var contract_filename = path.basename(import_path);
  var contract_name = path.basename(import_path, ".sol");

  // We haven't compiled our own version. Assemble from data in the lockfile.
  var separator = import_path.indexOf("/")
  var package_name = import_path.substring(0, separator);

  var install_directory = path.join(this.working_directory, "installed_contracts");
  var lockfile = path.join(install_directory, package_name, "lock.json");

  try {
    lockfile = fs.readFileSync(lockfile, "utf8");
  } catch (e) {
    return null;
  }

  lockfile = JSON.parse(lockfile);

  var json = {
    contract_name: contract_name,
    networks: {}
  };

  // TODO: contracts that reference other types
  // TODO: contract types that specify a hash as their key
  // TODO: imported name doesn't match type but matches deployment name
  var contract_types = lockfile.contract_types || {};
  var type = contract_types[contract_name];

  // No contract name of the type asked.
  if (!type) return null;

  json.abi = type.abi;
  json.unlinked_binary = type.bytecode;

  // Go through deployments and save all of them
  Object.keys(lockfile.deployments || {}).forEach(function(blockchain) {
    var deployments = lockfile.deployments[blockchain];

    Object.keys(deployments).forEach(function(name) {
      var deployment = deployments[name];
      if (deployment.contract_type == contract_name) {
        json.networks[blockchain] = {
          events: {},
          links: {},
          address: deployment.address
        };
      }
    });
  });

  return json;
}

EPM.prototype.resolve = function(import_path, imported_from, callback) {
  var separator = import_path.indexOf("/");
  var package_name = import_path.substring(0, separator);
  var internal_path = import_path.substring(separator + 1);
  var installDir = this.working_directory;

  // If nothing's found, body returns `undefined`
  var body;

  while(true){
    var file_path = path.join(installDir, "installed_contracts", import_path);

    try {
      body = fs.readFileSync(file_path, {encoding: "utf8"});
      break;
    }
    catch(err){}

    file_path = path.join(installDir, "installed_contracts", package_name, "contracts", internal_path)

    try {
      body = fs.readFileSync(file_path, {encoding: "utf8"});
      break;
    }
    catch(err){}

    // Recurse outwards until impossible
    var oldInstallDir = installDir;
    installDir = path.join(installDir, '..');
    if (installDir === oldInstallDir) {
      break;
    }
  }

  return callback(null, body, import_path);
},

// We're resolving package paths to other package paths, not absolute paths.
// This will ensure the source fetcher conintues to use the correct sources for packages.
// i.e., if some_module/contracts/MyContract.sol imported "./AnotherContract.sol",
// we're going to resolve it to some_module/contracts/AnotherContract.sol, ensuring
// that when this path is evaluated this source is used again.
EPM.prototype.resolve_dependency_path = function(import_path, dependency_path) {
  var dirname = path.dirname(import_path);
  var resolved_dependency_path = path.join(dirname, dependency_path);

  // Note: We use `path.join()` here to take care of path idiosyncrasies
  // like joining "something/" and "./something_else.sol". However, this makes
  // paths OS dependent, and on Windows, makes the separator "\". Solidity
  // needs the separator to be a forward slash. Let's massage that here.
  resolved_dependency_path = resolved_dependency_path.replace(/\\/g, "/");

  return resolved_dependency_path;
};

module.exports = EPM;


/***/ }),
/* 1225 */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(0);
var fs = __webpack_require__(1);
function NPM(working_directory) {
  this.working_directory = working_directory;
};

NPM.prototype.require = function(import_path, search_path) {
  if (import_path.indexOf(".") == 0 || import_path.indexOf("/") == 0) {
    return null;
  }
  var contract_name = path.basename(import_path, ".sol");
  var regex = new RegExp(`(.*)/${contract_name}`);
  let package_name = '';
  var matched =  regex.exec(import_path);
  if(matched){
    package_name = matched[1];
  }
  var expected_path = path.join((search_path || this.working_directory), "node_modules", package_name, "build", "contracts", contract_name + ".json");
  try {
    var result = fs.readFileSync(expected_path, "utf8");
    return JSON.parse(result);
  } catch (e) {
    return null;
  }
};

NPM.prototype.resolve = function(import_path, imported_from, callback) {

  // If nothing's found, body returns `undefined`
  var body;
  var modulesDir = this.working_directory;

  while(true){
    var expected_path = path.join(modulesDir, "node_modules", import_path);

    try {
      var body = fs.readFileSync(expected_path, {encoding: "utf8"});
      break;
    }
    catch(err){}

    // Recurse outwards until impossible
    var oldModulesDir = modulesDir;
    modulesDir = path.join(modulesDir, '..');
    if (modulesDir === oldModulesDir) {
      break;
    }
  }
  return callback(null, body, import_path);
};

// We're resolving package paths to other package paths, not absolute paths.
// This will ensure the source fetcher conintues to use the correct sources for packages.
// i.e., if some_module/contracts/MyContract.sol imported "./AnotherContract.sol",
// we're going to resolve it to some_module/contracts/AnotherContract.sol, ensuring
// that when this path is evaluated this source is used again.
NPM.prototype.resolve_dependency_path = function(import_path, dependency_path) {
  var dirname = path.dirname(import_path);
  return path.join(dirname, dependency_path);
};

NPM.prototype.provision_contracts = function(callback) {
  // TODO: Fill this out!
  callback(null, {});
};


module.exports = NPM;


/***/ }),
/* 1226 */
/***/ (function(module, exports, __webpack_require__) {

var fs = __webpack_require__(1);

var SolidityUtils = {

  getCharacterOffsetToLineAndColumnMapping: function(source) {
    var mapping = [];

    source = source.split("")

    var line = 0;
    var column = 0;

    source.forEach(function(character) {
      if (character == "\n") {
        line += 1;
        column = -1;

        mapping.push({
          line: line,
          column: 0
        });
      } else {
        mapping.push({
          line: line,
          column: column
        });
      }

      column += 1;
    });

    return mapping;
  },

  getHumanReadableSourceMap: function(sourceMap) {
    var map = sourceMap.split(';');

    var last = {};

    return map.map(function(current) {
      var ret = {
        start: last.start,
        length: last.length,
        file: last.file,
        jump: last.jump
      };

      current = current.split(':');

      if (current[0] && current[0] !== '-1' && current[0].length) {
        ret.start = parseInt(current[0])
      }
      if (current[1] && current[1] !== '-1' && current[1].length) {
        ret.length = parseInt(current[1])
      }
      if (current[2] /*&& current[2] !== '-1'*/ && current[2].length) {
        ret.file = parseInt(current[2])
      }
      if (current[3] && current[3].length) {
        ret.jump = current[3]
      }

      last = ret;

      return ret;
    });
  }
};

module.exports = SolidityUtils;


/***/ }),
/* 1227 */
/***/ (function(module, exports) {

module.exports = function(originalModule) {
	if(!originalModule.webpackPolyfill) {
		var module = Object.create(originalModule);
		// module.parent = undefined by default
		if(!module.children) module.children = [];
		Object.defineProperty(module, "loaded", {
			enumerable: true,
			get: function() {
				return module.l;
			}
		});
		Object.defineProperty(module, "id", {
			enumerable: true,
			get: function() {
				return module.i;
			}
		});
		Object.defineProperty(module, "exports", {
			enumerable: true,
		});
		module.webpackPolyfill = 1;
	}
	return module;
};


/***/ }),
/* 1228 */
/***/ (function(module, exports) {

module.exports = {"name":"solc","version":"0.4.25","description":"Solidity compiler","main":"index.js","bin":{"solcjs":"solcjs"},"scripts":{"lint":"semistandard","prepublish":"node downloadCurrentVersion.js && node verifyVersion.js","pretest":"npm run lint","test":"tape ./test/index.js","coverage":"istanbul cover node_modules/tape/bin/tape ./test/index.js","coveralls":"npm run coverage && coveralls <coverage/lcov.info"},"repository":{"type":"git","url":"git+https://github.com/ethereum/solc-js.git"},"keywords":["ethereum","solidity","compiler"],"files":["abi.js","index.js","linker.js","solcjs","soljson.js","translate.js","wrapper.js"],"author":"chriseth","license":"MIT","bugs":{"url":"https://github.com/ethereum/solc-js/issues"},"homepage":"https://github.com/ethereum/solc-js#readme","dependencies":{"fs-extra":"^0.30.0","memorystream":"^0.3.1","require-from-string":"^1.1.0","semver":"^5.3.0","yargs":"^4.7.1"},"devDependencies":{"coveralls":"^3.0.0","ethereumjs-util":"^5.1.4","istanbul":"^0.4.5","semistandard":"^11.0.0","tape":"^4.5.1","tape-spawn":"^1.4.2"},"semistandard":{"ignore":["soljson.js"]}}

/***/ }),
/* 1229 */
/***/ (function(module, exports) {

module.exports = ["389-exception","Autoconf-exception-2.0","Autoconf-exception-3.0","Bison-exception-2.2","Bootloader-exception","CLISP-exception-2.0","Classpath-exception-2.0","DigiRule-FOSS-exception","FLTK-exception","Fawkes-Runtime-exception","Font-exception-2.0","GCC-exception-2.0","GCC-exception-3.1","LZMA-exception","Libtool-exception","Linux-syscall-note","Nokia-Qt-exception-1.1","OCCT-exception-1.0","Qwt-exception-1.0","WxWindows-exception-3.1","eCos-exception-2.0","freertos-exception-2.0","gnu-javamail-exception","i2p-gpl-java-exception","mif-exception","openvpn-openssl-exception","u-boot-exception-2.0"]

/***/ }),
/* 1230 */
/***/ (function(module, exports) {

module.exports = ["AGPL-3.0","eCos-2.0","GFDL-1.1","GFDL-1.2","GFDL-1.3","GPL-1.0","GPL-2.0-with-autoconf-exception","GPL-2.0-with-bison-exception","GPL-2.0-with-classpath-exception","GPL-2.0-with-font-exception","GPL-2.0-with-GCC-exception","GPL-2.0","GPL-3.0-with-autoconf-exception","GPL-3.0-with-GCC-exception","GPL-3.0","LGPL-2.0","LGPL-2.1","LGPL-3.0","Nunit","StandardML-NJ","wxWindows"]

/***/ }),
/* 1231 */
/***/ (function(module, exports) {

module.exports = {"100":"Continue","101":"Switching Protocols","102":"Processing","200":"OK","201":"Created","202":"Accepted","203":"Non-Authoritative Information","204":"No Content","205":"Reset Content","206":"Partial Content","207":"Multi-Status","208":"Already Reported","226":"IM Used","300":"Multiple Choices","301":"Moved Permanently","302":"Found","303":"See Other","304":"Not Modified","305":"Use Proxy","306":"(Unused)","307":"Temporary Redirect","308":"Permanent Redirect","400":"Bad Request","401":"Unauthorized","402":"Payment Required","403":"Forbidden","404":"Not Found","405":"Method Not Allowed","406":"Not Acceptable","407":"Proxy Authentication Required","408":"Request Timeout","409":"Conflict","410":"Gone","411":"Length Required","412":"Precondition Failed","413":"Payload Too Large","414":"URI Too Long","415":"Unsupported Media Type","416":"Range Not Satisfiable","417":"Expectation Failed","418":"I'm a teapot","421":"Misdirected Request","422":"Unprocessable Entity","423":"Locked","424":"Failed Dependency","425":"Unordered Collection","426":"Upgrade Required","428":"Precondition Required","429":"Too Many Requests","431":"Request Header Fields Too Large","451":"Unavailable For Legal Reasons","500":"Internal Server Error","501":"Not Implemented","502":"Bad Gateway","503":"Service Unavailable","504":"Gateway Timeout","505":"HTTP Version Not Supported","506":"Variant Also Negotiates","507":"Insufficient Storage","508":"Loop Detected","509":"Bandwidth Limit Exceeded","510":"Not Extended","511":"Network Authentication Required"}

/***/ }),
/* 1232 */
/***/ (function(module, exports) {

module.exports = {"author":{"name":"Jeremy Stashewsky","email":"jstashewsky@salesforce.com","website":"https://github.com/stash"},"contributors":[{"name":"Alexander Savin","website":"https://github.com/apsavin"},{"name":"Ian Livingstone","website":"https://github.com/ianlivingstone"},{"name":"Ivan Nikulin","website":"https://github.com/inikulin"},{"name":"Lalit Kapoor","website":"https://github.com/lalitkapoor"},{"name":"Sam Thompson","website":"https://github.com/sambthompson"},{"name":"Sebastian Mayr","website":"https://github.com/Sebmaster"}],"license":"BSD-3-Clause","name":"tough-cookie","description":"RFC6265 Cookies and Cookie Jar for node.js","keywords":["HTTP","cookie","cookies","set-cookie","cookiejar","jar","RFC6265","RFC2965"],"version":"2.3.4","homepage":"https://github.com/salesforce/tough-cookie","repository":{"type":"git","url":"git://github.com/salesforce/tough-cookie.git"},"bugs":{"url":"https://github.com/salesforce/tough-cookie/issues"},"main":"./lib/cookie","files":["lib"],"scripts":{"suffixup":"curl -o public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat && ./generate-pubsuffix.js","test":"vows test/*_test.js"},"engines":{"node":">=0.8"},"devDependencies":{"async":"^1.4.2","string.prototype.repeat":"^0.2.0","vows":"^0.8.1"},"dependencies":{"punycode":"^1.4.1"}}

/***/ }),
/* 1233 */
/***/ (function(module, exports) {

module.exports = {"name":"truffle-contract-schema","version":"0.0.5","description":"JSON schema for contract artifacts","main":"index.js","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+https://github.com/trufflesuite/truffle-schema.git"},"keywords":["ethereum","json","schema","contract","artifacts"],"author":"Tim Coulter <tim.coulter@consensys.net>","license":"MIT","bugs":{"url":"https://github.com/trufflesuite/truffle-schema/issues"},"homepage":"https://github.com/trufflesuite/truffle-schema#readme","dependencies":{"crypto-js":"^3.1.9-1"},"devDependencies":{"mocha":"^3.2.0"}}

/***/ }),
/* 1234 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"name","outputs":[{"name":"o_name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"subRegistrar","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_registrar","type":"address"}],"name":"setSubRegistrar","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"Registrar","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"},{"name":"_primary","type":"bool"}],"name":"setAddress","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_content","type":"bytes32"}],"name":"setContent","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"disown","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_winner","type":"address"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_name","type":"bytes32"},{"indexed":false,"name":"_bidder","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"addr","type":"address"}],"name":"PrimaryChanged","type":"event"}]

/***/ }),
/* 1235 */
/***/ (function(module, exports) {

module.exports = [{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_refund","type":"address"}],"name":"disown","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"addr","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"reserve","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_newOwner","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_a","type":"address"}],"name":"setAddr","outputs":[],"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"bytes32"}],"name":"Changed","type":"event"}]

/***/ }),
/* 1236 */
/***/ (function(module, exports) {

module.exports = [{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"bytes32"},{"name":"to","type":"address"},{"name":"indirectId","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"icapTransfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"bytes32"}],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AnonymousDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"indirectId","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"IcapTransfer","type":"event"}]

/***/ }),
/* 1237 */
/***/ (function(module, exports) {

module.exports = {"version":"0.20.6"}

/***/ }),
/* 1238 */
/***/ (function(module, exports) {

module.exports = {"name":"truffle-contract-schema","version":"2.0.2","description":"JSON schema for contract artifacts","main":"index.js","scripts":{"prepare":"cd spec && json2ts -i contract-object.spec.json -o ./index.d.ts","test":"mocha"},"repository":{"type":"git","url":"git+https://github.com/trufflesuite/truffle-schema.git"},"keywords":["ethereum","json","schema","contract","artifacts"],"author":"Tim Coulter <tim.coulter@consensys.net>","license":"MIT","bugs":{"url":"https://github.com/trufflesuite/truffle-schema/issues"},"homepage":"https://github.com/trufflesuite/truffle-schema#readme","dependencies":{"ajv":"^5.1.1","crypto-js":"^3.1.9-1","debug":"^3.1.0"},"devDependencies":{"json-schema-to-typescript":"^5.5.0","mocha":"5.2.0","solc":"0.4.25"},"directories":{"spec":"./spec"},"gitHead":"49441d73a5f145a4dc37fee6c3b19d8e64b8d7d0"}

/***/ }),
/* 1239 */
/***/ (function(module, exports) {

module.exports = {"id":"abi.spec.json","$schema":"http://json-schema.org/schema#","title":"ABI","type":"array","items":{"oneOf":[{"$ref":"#/definitions/Event"},{"$ref":"#/definitions/ConstructorFunction"},{"$ref":"#/definitions/FallbackFunction"},{"$ref":"#/definitions/NormalFunction"}]},"definitions":{"Name":{"type":"string","pattern":"^$|^[a-zA-Z_\\$][a-zA-Z_\\$0-9]*$"},"Type":{"oneOf":[{"type":"string","pattern":"^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?(\\[[0-9]*\\])?$"},{"type":"string","pattern":"^address(\\[[0-9]*\\])?$"},{"type":"string","pattern":"^bool(\\[[0-9]*\\])?$"},{"type":"string","pattern":"^u?fixed(0x8|8x0|0x16|8x8|16x0|0x24|8x16|16x8|24x0|0x32|8x24|16x16|24x8|32x0|0x40|8x32|16x24|24x16|32x8|40x0|0x48|8x40|16x32|24x24|32x16|40x8|48x0|0x56|8x48|16x40|24x32|32x24|40x16|48x8|56x0|0x64|8x56|16x48|24x40|32x32|40x24|48x16|56x8|64x0|0x72|8x64|16x56|24x48|32x40|40x32|48x24|56x16|64x8|72x0|0x80|8x72|16x64|24x56|32x48|40x40|48x32|56x24|64x16|72x8|80x0|0x88|8x80|16x72|24x64|32x56|40x48|48x40|56x32|64x24|72x16|80x8|88x0|0x96|8x88|16x80|24x72|32x64|40x56|48x48|56x40|64x32|72x24|80x16|88x8|96x0|0x104|8x96|16x88|24x80|32x72|40x64|48x56|56x48|64x40|72x32|80x24|88x16|96x8|104x0|0x112|8x104|16x96|24x88|32x80|40x72|48x64|56x56|64x48|72x40|80x32|88x24|96x16|104x8|112x0|0x120|8x112|16x104|24x96|32x88|40x80|48x72|56x64|64x56|72x48|80x40|88x32|96x24|104x16|112x8|120x0|0x128|8x120|16x112|24x104|32x96|40x88|48x80|56x72|64x64|72x56|80x48|88x40|96x32|104x24|112x16|120x8|128x0|0x136|8x128|16x120|24x112|32x104|40x96|48x88|56x80|64x72|72x64|80x56|88x48|96x40|104x32|112x24|120x16|128x8|136x0|0x144|8x136|16x128|24x120|32x112|40x104|48x96|56x88|64x80|72x72|80x64|88x56|96x48|104x40|112x32|120x24|128x16|136x8|144x0|0x152|8x144|16x136|24x128|32x120|40x112|48x104|56x96|64x88|72x80|80x72|88x64|96x56|104x48|112x40|120x32|128x24|136x16|144x8|152x0|0x160|8x152|16x144|24x136|32x128|40x120|48x112|56x104|64x96|72x88|80x80|88x72|96x64|104x56|112x48|120x40|128x32|136x24|144x16|152x8|160x0|0x168|8x160|16x152|24x144|32x136|40x128|48x120|56x112|64x104|72x96|80x88|88x80|96x72|104x64|112x56|120x48|128x40|136x32|144x24|152x16|160x8|168x0|0x176|8x168|16x160|24x152|32x144|40x136|48x128|56x120|64x112|72x104|80x96|88x88|96x80|104x72|112x64|120x56|128x48|136x40|144x32|152x24|160x16|168x8|176x0|0x184|8x176|16x168|24x160|32x152|40x144|48x136|56x128|64x120|72x112|80x104|88x96|96x88|104x80|112x72|120x64|128x56|136x48|144x40|152x32|160x24|168x16|176x8|184x0|0x192|8x184|16x176|24x168|32x160|40x152|48x144|56x136|64x128|72x120|80x112|88x104|96x96|104x88|112x80|120x72|128x64|136x56|144x48|152x40|160x32|168x24|176x16|184x8|192x0|0x200|8x192|16x184|24x176|32x168|40x160|48x152|56x144|64x136|72x128|80x120|88x112|96x104|104x96|112x88|120x80|128x72|136x64|144x56|152x48|160x40|168x32|176x24|184x16|192x8|200x0|0x208|8x200|16x192|24x184|32x176|40x168|48x160|56x152|64x144|72x136|80x128|88x120|96x112|104x104|112x96|120x88|128x80|136x72|144x64|152x56|160x48|168x40|176x32|184x24|192x16|200x8|208x0|0x216|8x208|16x200|24x192|32x184|40x176|48x168|56x160|64x152|72x144|80x136|88x128|96x120|104x112|112x104|120x96|128x88|136x80|144x72|152x64|160x56|168x48|176x40|184x32|192x24|200x16|208x8|216x0|0x224|8x216|16x208|24x200|32x192|40x184|48x176|56x168|64x160|72x152|80x144|88x136|96x128|104x120|112x112|120x104|128x96|136x88|144x80|152x72|160x64|168x56|176x48|184x40|192x32|200x24|208x16|216x8|224x0|0x232|8x224|16x216|24x208|32x200|40x192|48x184|56x176|64x168|72x160|80x152|88x144|96x136|104x128|112x120|120x112|128x104|136x96|144x88|152x80|160x72|168x64|176x56|184x48|192x40|200x32|208x24|216x16|224x8|232x0|0x240|8x232|16x224|24x216|32x208|40x200|48x192|56x184|64x176|72x168|80x160|88x152|96x144|104x136|112x128|120x120|128x112|136x104|144x96|152x88|160x80|168x72|176x64|184x56|192x48|200x40|208x32|216x24|224x16|232x8|240x0|0x248|8x240|16x232|24x224|32x216|40x208|48x200|56x192|64x184|72x176|80x168|88x160|96x152|104x144|112x136|120x128|128x120|136x112|144x104|152x96|160x88|168x80|176x72|184x64|192x56|200x48|208x40|216x32|224x24|232x16|240x8|248x0|0x256|8x248|16x240|24x232|32x224|40x216|48x208|56x200|64x192|72x184|80x176|88x168|96x160|104x152|112x144|120x136|128x128|136x120|144x112|152x104|160x96|168x88|176x80|184x72|192x64|200x56|208x48|216x40|224x32|232x24|240x16|248x8|256x0)?(\\[[0-9]*\\])?$"},{"type":"string","pattern":"^bytes(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32)(\\[[0-9]*\\])?"},{"type":"string","pattern":"^bytes$"},{"type":"string","pattern":"^function(\\[[0-9]*\\])?$"},{"type":"string","pattern":"^string$"}]},"StateMutability":{"type":"string","enum":["pure","view","nonpayable","payable"]},"NormalFunction":{"type":"object","properties":{"type":{"type":"string","enum":["function"],"default":"function"},"name":{"$ref":"#/definitions/Name"},"inputs":{"type":"array","items":{"$ref":"#/definitions/Parameter"}},"outputs":{"type":"array","items":{"$ref":"#/definitions/Parameter"},"default":[]},"stateMutability":{"$ref":"#/definitions/StateMutability"},"constant":{"type":"boolean"},"payable":{"type":"boolean","default":false}},"required":["name","inputs","constant"],"additionalProperties":false},"ConstructorFunction":{"type":"object","properties":{"type":{"type":"string","enum":["constructor"]},"inputs":{"type":"array","items":{"$ref":"#/definitions/Parameter"}},"payable":{"type":"boolean","default":false}},"required":["type","inputs"],"additionalProperties":false},"FallbackFunction":{"type":"object","properties":{"type":{"type":"string","enum":["fallback"]},"constant":{"type":"boolean"},"payable":{"type":"boolean","default":false}},"required":["type"],"additionalProperties":false},"Event":{"type":"object","properties":{"type":{"type":"string","enum":["event"]},"name":{"$ref":"#/definitions/Name"},"inputs":{"type":"array","items":{"$ref":"#/definitions/EventParameter"}},"anonymous":{"type":"boolean"}},"required":["type","name","inputs","anonymous"],"additionalProperties":false},"Parameter":{"type":"object","properties":{"name":{"$ref":"#/definitions/Name"},"type":{"$ref":"#/definitions/Type"}},"required":["name","type"]},"EventParameter":{"type":"object","properties":{"name":{"$ref":"#/definitions/Name"},"type":{"$ref":"#/definitions/Type"},"indexed":{"type":"boolean"}},"required":["name","type","indexed"]}}}

/***/ }),
/* 1240 */
/***/ (function(module, exports) {

module.exports = {"id":"contract-object.spec.json","$schema":"http://json-schema.org/schema#","title":"Contract Object","description":"Describes a contract consumable by Truffle, possibly including deployed instances on networks","type":"object","properties":{"contractName":{"allOf":[{"$ref":"#/definitions/ContractName"}],"description":"Name used to identify the contract","default":"Contract"},"abi":{"allOf":[{"$ref":"abi.spec.json#"}],"description":"Interface description returned by compiler for source"},"bytecode":{"allOf":[{"$ref":"#/definitions/Bytecode"}],"description":"Bytecode sent as contract-creation transaction data, with unresolved link references"},"deployedBytecode":{"allOf":[{"$ref":"#/definitions/Bytecode"}],"description":"On-chain deployed contract bytecode, with unresolved link references"},"sourceMap":{"allOf":[{"$ref":"#/definitions/SourceMap"}],"description":"Source mapping for contract-creation transaction data bytecode"},"deployedSourceMap":{"allOf":[{"$ref":"#/definitions/SourceMap"}],"description":"Source mapping for contract bytecode"},"source":{"$ref":"#/definitions/Source"},"sourcePath":{"$ref":"#/definitions/SourcePath"},"ast":{"$ref":"#/definitions/AST"},"legacyAST":{"$ref":"#/definitions/LegacyAST"},"compiler":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"networks":{"patternProperties":{"^[a-zA-Z0-9]+$":{"$ref":"network-object.spec.json#"}},"additionalProperties":false},"schemaVersion":{"$ref":"#/definitions/SchemaVersion"},"updatedAt":{"type":"string","format":"date-time"}},"required":["abi"],"patternProperties":{"^x-":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"object"},{"type":"array"}]}},"additionalProperties":false,"definitions":{"ContractName":{"type":"string","pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$"},"Bytecode":{"type":"string","pattern":"^0x0$|^0x([a-fA-F0-9]{2}|__.{38})+$"},"Source":{"type":"string"},"SourceMap":{"type":"string","examples":["315:637:1:-;;;452:55;;;;;;;-1:-1:-1;;;;;485:9:1;476:19;:8;:19;;;;;;;;;;498:5;476:27;;452:55;315:637;;;;;;;"]},"SourcePath":{"type":"string"},"AST":{"type":"object"},"LegacyAST":{"type":"object"},"SchemaVersion":{"type":"string","pattern":"[0-9]+\\.[0-9]+\\.[0-9]+"}}}

/***/ }),
/* 1241 */
/***/ (function(module, exports) {

module.exports = {"id":"network-object.spec.json","$schema":"http://json-schema.org/schema#","title":"Network Object","type":"object","properties":{"address":{"$ref":"#/definitions/Address"},"transactionHash":{"$ref":"#/definitions/TransactionHash"},"events":{"type":"object","patternProperties":{"^0x[a-fA-F0-9]{64}$":{"$ref":"abi.spec.json#/definitions/Event"}},"additionalProperties":false},"links":{"type":"object","patternProperties":{"^[a-zA-Z_][a-zA-Z0-9_]*$":{"$ref":"#/definitions/Link"}},"additionalProperties":false}},"additionalProperties":false,"definitions":{"Address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"TransactionHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"Link":{"type":"object","properties":{"address":{"$ref":"#/definitions/Address"},"events":{"type":"object","patternProperties":{"^0x[a-fA-F0-9]{64}$":{"$ref":"abi.spec.json#/definitions/Event"}},"additionalProperties":false}}}}}

/***/ }),
/* 1242 */
/***/ (function(module, exports) {

function webpackEmptyContext(req) {
	throw new Error("Cannot find module '" + req + "'.");
}
webpackEmptyContext.keys = function() { return []; };
webpackEmptyContext.resolve = webpackEmptyContext;
module.exports = webpackEmptyContext;
webpackEmptyContext.id = 1242;

/***/ }),
/* 1243 */
/***/ (function(module, exports) {

module.exports = {"name":"truffle-core","namespace":"consensys","version":"4.1.15","description":"Core code for Truffle command line tool","dependencies":{"async":"2.6.1","chai":"4.1.2","chokidar":"^1.4.2","colors":"^1.1.2","cpr":"^0.4.3","debug":"^3.1.0","del":"^2.2.0","diff":"1.4.0","ethpm":"0.0.16","ethpm-registry":"0.0.10","finalhandler":"^0.4.0","fs-extra":"6.0.1","ganache-cli":"6.1.8","lodash":"4.17.10","mkdirp":"^0.5.1","mocha":"5.2.0","node-dir":"0.1.17","node-emoji":"^1.8.1","node-ipc":"^9.1.1","original-require":"1.0.1","safe-eval":"^0.3.0","serve-static":"^1.10.0","source-map-support":"^0.5.3","spawn-args":"^0.1.0","temp":"^0.8.3","truffle-artifactor":"^3.0.8","truffle-box":"^1.0.8-alpha.0","truffle-compile":"^3.0.14","truffle-config":"^1.0.7","truffle-contract":"^3.0.7","truffle-contract-sources":"^0.0.2","truffle-debug-utils":"^1.0.6","truffle-debugger":"^4.0.4","truffle-deployer":"^2.0.8","truffle-error":"^0.0.3","truffle-expect":"^0.0.4","truffle-init":"^1.0.7","truffle-migrate":"^2.0.9","truffle-provider":"^0.0.7","truffle-provisioner":"^0.1.1","truffle-require":"^1.0.8","truffle-resolver":"^4.0.5","truffle-solidity-utils":"^1.1.2","truffle-workflow-compile":"^1.0.7","web3":"0.20.6","yargs":"^8.0.2"},"bin":{"truffle":"./cli.js","truffle-exec":"./exec.js"},"scripts":{"test":"mocha"},"repository":{"type":"git","url":"https://github.com/ConsenSys/truffle.git"},"homepage":"https://github.com/ConsenSys/truffle","bugs":{"url":"https://github.com/ConsenSys/truffle/issues"},"author":"consensys.net","authors":[{"name":"Tim Coulter","email":"tim@timothyjcoulter.com","url":"https://github.com/tcoulter"}],"devDependencies":{"ipfsd-ctl":"^0.21.0","truffle-blockchain-utils":"^0.0.5"},"publishConfig":{"access":"public"},"gitHead":"49441d73a5f145a4dc37fee6c3b19d8e64b8d7d0"}

/***/ }),
/* 1244 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BigNumber", function() { return BigNumber; });
/*
 *      bignumber.js v7.2.1
 *      A JavaScript library for arbitrary-precision arithmetic.
 *      https://github.com/MikeMcl/bignumber.js
 *      Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>
 *      MIT Licensed.
 *
 *      BigNumber.prototype methods     |  BigNumber methods
 *                                      |
 *      absoluteValue            abs    |  clone
 *      comparedTo                      |  config               set
 *      decimalPlaces            dp     |      DECIMAL_PLACES
 *      dividedBy                div    |      ROUNDING_MODE
 *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT
 *      exponentiatedBy          pow    |      RANGE
 *      integerValue                    |      CRYPTO
 *      isEqualTo                eq     |      MODULO_MODE
 *      isFinite                        |      POW_PRECISION
 *      isGreaterThan            gt     |      FORMAT
 *      isGreaterThanOrEqualTo   gte    |      ALPHABET
 *      isInteger                       |  isBigNumber
 *      isLessThan               lt     |  maximum              max
 *      isLessThanOrEqualTo      lte    |  minimum              min
 *      isNaN                           |  random
 *      isNegative                      |
 *      isPositive                      |
 *      isZero                          |
 *      minus                           |
 *      modulo                   mod    |
 *      multipliedBy             times  |
 *      negated                         |
 *      plus                            |
 *      precision                sd     |
 *      shiftedBy                       |
 *      squareRoot               sqrt   |
 *      toExponential                   |
 *      toFixed                         |
 *      toFormat                        |
 *      toFraction                      |
 *      toJSON                          |
 *      toNumber                        |
 *      toPrecision                     |
 *      toString                        |
 *      valueOf                         |
 *
 */


var isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,

  mathceil = Math.ceil,
  mathfloor = Math.floor,

  bignumberError = '[BigNumber Error] ',
  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',

  BASE = 1e14,
  LOG_BASE = 14,
  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
  SQRT_BASE = 1e7,

  // EDITABLE
  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
  // the arguments to toExponential, toFixed, toFormat, and toPrecision.
  MAX = 1E9;                                   // 0 to MAX_INT32


/*
 * Create and return a BigNumber constructor.
 */
function clone(configObject) {
  var div, convertBase, parseNumeric,
    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },
    ONE = new BigNumber(1),


    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------


    // The default values below must be integers within the inclusive ranges stated.
    // The values can also be changed at run-time using BigNumber.set.

    // The maximum number of decimal places for operations involving division.
    DECIMAL_PLACES = 20,                     // 0 to MAX

    // The rounding mode used when rounding to the above decimal places, and when using
    // toExponential, toFixed, toFormat and toPrecision, and round (default value).
    // UP         0 Away from zero.
    // DOWN       1 Towards zero.
    // CEIL       2 Towards +Infinity.
    // FLOOR      3 Towards -Infinity.
    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.
    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
    ROUNDING_MODE = 4,                       // 0 to 8

    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

    // The exponent value at and beneath which toString returns exponential notation.
    // Number type: -7
    TO_EXP_NEG = -7,                         // 0 to -MAX

    // The exponent value at and above which toString returns exponential notation.
    // Number type: 21
    TO_EXP_POS = 21,                         // 0 to MAX

    // RANGE : [MIN_EXP, MAX_EXP]

    // The minimum exponent value, beneath which underflow to zero occurs.
    // Number type: -324  (5e-324)
    MIN_EXP = -1e7,                          // -1 to -MAX

    // The maximum exponent value, above which overflow to Infinity occurs.
    // Number type:  308  (1.7976931348623157e+308)
    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
    MAX_EXP = 1e7,                           // 1 to MAX

    // Whether to use cryptographically-secure random number generation, if available.
    CRYPTO = false,                          // true or false

    // The modulo mode used when calculating the modulus: a mod n.
    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
    // The remainder (r) is calculated as: r = a - n * q.
    //
    // UP        0 The remainder is positive if the dividend is negative, else is negative.
    // DOWN      1 The remainder has the same sign as the dividend.
    //             This modulo mode is commonly known as 'truncated division' and is
    //             equivalent to (a % n) in JavaScript.
    // FLOOR     3 The remainder has the same sign as the divisor (Python %).
    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
    //             The remainder is always positive.
    //
    // The truncated division, floored division, Euclidian division and IEEE 754 remainder
    // modes are commonly used for the modulus operation.
    // Although the other rounding modes can also be used, they may not give useful results.
    MODULO_MODE = 1,                         // 0 to 9

    // The maximum number of significant digits of the result of the exponentiatedBy operation.
    // If POW_PRECISION is 0, there will be unlimited significant digits.
    POW_PRECISION = 0,                    // 0 to MAX

    // The format specification used by the BigNumber.prototype.toFormat method.
    FORMAT = {
      decimalSeparator: '.',
      groupSeparator: ',',
      groupSize: 3,
      secondaryGroupSize: 0,
      fractionGroupSeparator: '\xA0',      // non-breaking space
      fractionGroupSize: 0
    },

    // The alphabet used for base conversion.
    // It must be at least 2 characters long, with no '.' or repeated character.
    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';


  //------------------------------------------------------------------------------------------


  // CONSTRUCTOR


  /*
   * The BigNumber constructor and exported function.
   * Create and return a new instance of a BigNumber object.
   *
   * n {number|string|BigNumber} A numeric value.
   * [b] {number} The base of n. Integer, 2 to ALPHABET.length inclusive.
   */
  function BigNumber(n, b) {
    var alphabet, c, caseChanged, e, i, isNum, len, str,
      x = this;

    // Enable constructor usage without new.
    if (!(x instanceof BigNumber)) {

      // Don't throw on constructor call without new (#81).
      // '[BigNumber Error] Constructor call without new: {n}'
      //throw Error(bignumberError + ' Constructor call without new: ' + n);
      return new BigNumber(n, b);
    }

    if (b == null) {

      // Duplicate.
      if (n instanceof BigNumber) {
        x.s = n.s;
        x.e = n.e;
        x.c = (n = n.c) ? n.slice() : n;
        return;
      }

      isNum = typeof n == 'number';

      if (isNum && n * 0 == 0) {

        // Use `1 / n` to handle minus zero also.
        x.s = 1 / n < 0 ? (n = -n, -1) : 1;

        // Faster path for integers.
        if (n === ~~n) {
          for (e = 0, i = n; i >= 10; i /= 10, e++);
          x.e = e;
          x.c = [n];
          return;
        }

        str = n + '';
      } else {
        if (!isNumeric.test(str = n + '')) return parseNumeric(x, str, isNum);
        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
      }

      // Decimal point?
        if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');

        // Exponential form?
        if ((i = str.search(/e/i)) > 0) {

          // Determine exponent.
          if (e < 0) e = i;
          e += +str.slice(i + 1);
          str = str.substring(0, i);
        } else if (e < 0) {

          // Integer.
          e = str.length;
        }

    } else {

      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
      intCheck(b, 2, ALPHABET.length, 'Base');
      str = n + '';

      // Allow exponential notation to be used with base 10 argument, while
      // also rounding to DECIMAL_PLACES as with other bases.
      if (b == 10) {
        x = new BigNumber(n instanceof BigNumber ? n : str);
        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
      }

      isNum = typeof n == 'number';

      if (isNum) {

        // Avoid potential interpretation of Infinity and NaN as base 44+ values.
        if (n * 0 != 0) return parseNumeric(x, str, isNum, b);

        x.s = 1 / n < 0 ? (str = str.slice(1), -1) : 1;

        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
        if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) {
          throw Error
           (tooManyDigits + n);
        }

        // Prevent later check for length on converted number.
        isNum = false;
      } else {
        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
      }

      alphabet = ALPHABET.slice(0, b);
      e = i = 0;

      // Check that str is a valid base b number.
      // Don't use RegExp so alphabet can contain special characters.
      for (len = str.length; i < len; i++) {
        if (alphabet.indexOf(c = str.charAt(i)) < 0) {
          if (c == '.') {

            // If '.' is not the first character and it has not be found before.
            if (i > e) {
              e = len;
              continue;
            }
          } else if (!caseChanged) {

            // Allow e.g. hexadecimal 'FF' as well as 'ff'.
            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||
                str == str.toLowerCase() && (str = str.toUpperCase())) {
              caseChanged = true;
              i = -1;
              e = 0;
              continue;
            }
          }

          return parseNumeric(x, n + '', isNum, b);
        }
      }

      str = convertBase(str, b, 10, x.s);

      // Decimal point?
      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
      else e = str.length;
    }

    // Determine leading zeros.
    for (i = 0; str.charCodeAt(i) === 48; i++);

    // Determine trailing zeros.
    for (len = str.length; str.charCodeAt(--len) === 48;);

    str = str.slice(i, ++len);

    if (str) {
      len -= i;

      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
      if (isNum && BigNumber.DEBUG &&
        len > 15 && (n > MAX_SAFE_INTEGER || n !== mathfloor(n))) {
          throw Error
           (tooManyDigits + (x.s * n));
      }

      e = e - i - 1;

       // Overflow?
      if (e > MAX_EXP) {

        // Infinity.
        x.c = x.e = null;

      // Underflow?
      } else if (e < MIN_EXP) {

        // Zero.
        x.c = [x.e = 0];
      } else {
        x.e = e;
        x.c = [];

        // Transform base

        // e is the base 10 exponent.
        // i is where to slice str to get the first element of the coefficient array.
        i = (e + 1) % LOG_BASE;
        if (e < 0) i += LOG_BASE;

        if (i < len) {
          if (i) x.c.push(+str.slice(0, i));

          for (len -= LOG_BASE; i < len;) {
            x.c.push(+str.slice(i, i += LOG_BASE));
          }

          str = str.slice(i);
          i = LOG_BASE - str.length;
        } else {
          i -= len;
        }

        for (; i--; str += '0');
        x.c.push(+str);
      }
    } else {

      // Zero.
      x.c = [x.e = 0];
    }
  }


  // CONSTRUCTOR PROPERTIES


  BigNumber.clone = clone;

  BigNumber.ROUND_UP = 0;
  BigNumber.ROUND_DOWN = 1;
  BigNumber.ROUND_CEIL = 2;
  BigNumber.ROUND_FLOOR = 3;
  BigNumber.ROUND_HALF_UP = 4;
  BigNumber.ROUND_HALF_DOWN = 5;
  BigNumber.ROUND_HALF_EVEN = 6;
  BigNumber.ROUND_HALF_CEIL = 7;
  BigNumber.ROUND_HALF_FLOOR = 8;
  BigNumber.EUCLID = 9;


  /*
   * Configure infrequently-changing library-wide settings.
   *
   * Accept an object with the following optional properties (if the value of a property is
   * a number, it must be an integer within the inclusive range stated):
   *
   *   DECIMAL_PLACES   {number}           0 to MAX
   *   ROUNDING_MODE    {number}           0 to 8
   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]
   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]
   *   CRYPTO           {boolean}          true or false
   *   MODULO_MODE      {number}           0 to 9
   *   POW_PRECISION       {number}           0 to MAX
   *   ALPHABET         {string}           A string of two or more unique characters which does
   *                                     not contain '.'.
   *   FORMAT           {object}           An object with some of the following properties:
   *      decimalSeparator       {string}
   *      groupSeparator         {string}
   *      groupSize              {number}
   *      secondaryGroupSize     {number}
   *      fractionGroupSeparator {string}
   *      fractionGroupSize      {number}
   *
   * (The values assigned to the above FORMAT object properties are not checked for validity.)
   *
   * E.g.
   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
   *
   * Ignore properties/parameters set to null or undefined, except for ALPHABET.
   *
   * Return an object with the properties current values.
   */
  BigNumber.config = BigNumber.set = function (obj) {
    var p, v;

    if (obj != null) {

      if (typeof obj == 'object') {

        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {
          v = obj[p];
          intCheck(v, 0, MAX, p);
          DECIMAL_PLACES = v;
        }

        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {
          v = obj[p];
          intCheck(v, 0, 8, p);
          ROUNDING_MODE = v;
        }

        // EXPONENTIAL_AT {number|number[]}
        // Integer, -MAX to MAX inclusive or
        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].
        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {
          v = obj[p];
          if (isArray(v)) {
            intCheck(v[0], -MAX, 0, p);
            intCheck(v[1], 0, MAX, p);
            TO_EXP_NEG = v[0];
            TO_EXP_POS = v[1];
          } else {
            intCheck(v, -MAX, MAX, p);
            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
          }
        }

        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'
        if (obj.hasOwnProperty(p = 'RANGE')) {
          v = obj[p];
          if (isArray(v)) {
            intCheck(v[0], -MAX, -1, p);
            intCheck(v[1], 1, MAX, p);
            MIN_EXP = v[0];
            MAX_EXP = v[1];
          } else {
            intCheck(v, -MAX, MAX, p);
            if (v) {
              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
            } else {
              throw Error
               (bignumberError + p + ' cannot be zero: ' + v);
            }
          }
        }

        // CRYPTO {boolean} true or false.
        // '[BigNumber Error] CRYPTO not true or false: {v}'
        // '[BigNumber Error] crypto unavailable'
        if (obj.hasOwnProperty(p = 'CRYPTO')) {
          v = obj[p];
          if (v === !!v) {
            if (v) {
              if (typeof crypto != 'undefined' && crypto &&
               (crypto.getRandomValues || crypto.randomBytes)) {
                CRYPTO = v;
              } else {
                CRYPTO = !v;
                throw Error
                 (bignumberError + 'crypto unavailable');
              }
            } else {
              CRYPTO = v;
            }
          } else {
            throw Error
             (bignumberError + p + ' not true or false: ' + v);
          }
        }

        // MODULO_MODE {number} Integer, 0 to 9 inclusive.
        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {
          v = obj[p];
          intCheck(v, 0, 9, p);
          MODULO_MODE = v;
        }

        // POW_PRECISION {number} Integer, 0 to MAX inclusive.
        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {
          v = obj[p];
          intCheck(v, 0, MAX, p);
          POW_PRECISION = v;
        }

        // FORMAT {object}
        // '[BigNumber Error] FORMAT not an object: {v}'
        if (obj.hasOwnProperty(p = 'FORMAT')) {
          v = obj[p];
          if (typeof v == 'object') FORMAT = v;
          else throw Error
           (bignumberError + p + ' not an object: ' + v);
        }

        // ALPHABET {string}
        // '[BigNumber Error] ALPHABET invalid: {v}'
        if (obj.hasOwnProperty(p = 'ALPHABET')) {
          v = obj[p];

          // Disallow if only one character, or contains '.' or a repeated character.
          if (typeof v == 'string' && !/^.$|\.|(.).*\1/.test(v)) {
            ALPHABET = v;
          } else {
            throw Error
             (bignumberError + p + ' invalid: ' + v);
          }
        }

      } else {

        // '[BigNumber Error] Object expected: {v}'
        throw Error
         (bignumberError + 'Object expected: ' + obj);
      }
    }

    return {
      DECIMAL_PLACES: DECIMAL_PLACES,
      ROUNDING_MODE: ROUNDING_MODE,
      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
      RANGE: [MIN_EXP, MAX_EXP],
      CRYPTO: CRYPTO,
      MODULO_MODE: MODULO_MODE,
      POW_PRECISION: POW_PRECISION,
      FORMAT: FORMAT,
      ALPHABET: ALPHABET
    };
  };


  /*
   * Return true if v is a BigNumber instance, otherwise return false.
   *
   * v {any}
   */
  BigNumber.isBigNumber = function (v) {
    return v instanceof BigNumber || v && v._isBigNumber === true || false;
  };


  /*
   * Return a new BigNumber whose value is the maximum of the arguments.
   *
   * arguments {number|string|BigNumber}
   */
  BigNumber.maximum = BigNumber.max = function () {
    return maxOrMin(arguments, P.lt);
  };


  /*
   * Return a new BigNumber whose value is the minimum of the arguments.
   *
   * arguments {number|string|BigNumber}
   */
  BigNumber.minimum = BigNumber.min = function () {
    return maxOrMin(arguments, P.gt);
  };


  /*
   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
   * zeros are produced).
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'
   * '[BigNumber Error] crypto unavailable'
   */
  BigNumber.random = (function () {
    var pow2_53 = 0x20000000000000;

    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
    // Check if Math.random() produces more than 32 bits of randomness.
    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
     ? function () { return mathfloor(Math.random() * pow2_53); }
     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
       (Math.random() * 0x800000 | 0); };

    return function (dp) {
      var a, b, e, k, v,
        i = 0,
        c = [],
        rand = new BigNumber(ONE);

      if (dp == null) dp = DECIMAL_PLACES;
      else intCheck(dp, 0, MAX);

      k = mathceil(dp / LOG_BASE);

      if (CRYPTO) {

        // Browsers supporting crypto.getRandomValues.
        if (crypto.getRandomValues) {

          a = crypto.getRandomValues(new Uint32Array(k *= 2));

          for (; i < k;) {

            // 53 bits:
            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
            // 11111 11111111 11111111 11111111 11100000 00000000 00000000
            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
            //                                     11111 11111111 11111111
            // 0x20000 is 2^21.
            v = a[i] * 0x20000 + (a[i + 1] >>> 11);

            // Rejection sampling:
            // 0 <= v < 9007199254740992
            // Probability that v >= 9e15, is
            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
            if (v >= 9e15) {
              b = crypto.getRandomValues(new Uint32Array(2));
              a[i] = b[0];
              a[i + 1] = b[1];
            } else {

              // 0 <= v <= 8999999999999999
              // 0 <= (v % 1e14) <= 99999999999999
              c.push(v % 1e14);
              i += 2;
            }
          }
          i = k / 2;

        // Node.js supporting crypto.randomBytes.
        } else if (crypto.randomBytes) {

          // buffer
          a = crypto.randomBytes(k *= 7);

          for (; i < k;) {

            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
            // 0x100000000 is 2^32, 0x1000000 is 2^24
            // 11111 11111111 11111111 11111111 11111111 11111111 11111111
            // 0 <= v < 9007199254740992
            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +
               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +
               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];

            if (v >= 9e15) {
              crypto.randomBytes(7).copy(a, i);
            } else {

              // 0 <= (v % 1e14) <= 99999999999999
              c.push(v % 1e14);
              i += 7;
            }
          }
          i = k / 7;
        } else {
          CRYPTO = false;
          throw Error
           (bignumberError + 'crypto unavailable');
        }
      }

      // Use Math.random.
      if (!CRYPTO) {

        for (; i < k;) {
          v = random53bitInt();
          if (v < 9e15) c[i++] = v % 1e14;
        }
      }

      k = c[--i];
      dp %= LOG_BASE;

      // Convert trailing digits to zeros according to dp.
      if (k && dp) {
        v = POWS_TEN[LOG_BASE - dp];
        c[i] = mathfloor(k / v) * v;
      }

      // Remove trailing elements which are zero.
      for (; c[i] === 0; c.pop(), i--);

      // Zero?
      if (i < 0) {
        c = [e = 0];
      } else {

        // Remove leading elements which are zero and adjust exponent accordingly.
        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);

        // Count the digits of the first element of c to determine leading zeros, and...
        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);

        // adjust the exponent accordingly.
        if (i < LOG_BASE) e -= LOG_BASE - i;
      }

      rand.e = e;
      rand.c = c;
      return rand;
    };
  })();


  // PRIVATE FUNCTIONS


  // Called by BigNumber and BigNumber.prototype.toString.
  convertBase = (function () {
    var decimal = '0123456789';

    /*
     * Convert string of baseIn to an array of numbers of baseOut.
     * Eg. toBaseOut('255', 10, 16) returns [15, 15].
     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].
     */
    function toBaseOut(str, baseIn, baseOut, alphabet) {
      var j,
        arr = [0],
        arrL,
        i = 0,
        len = str.length;

      for (; i < len;) {
        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);

        arr[0] += alphabet.indexOf(str.charAt(i++));

        for (j = 0; j < arr.length; j++) {

          if (arr[j] > baseOut - 1) {
            if (arr[j + 1] == null) arr[j + 1] = 0;
            arr[j + 1] += arr[j] / baseOut | 0;
            arr[j] %= baseOut;
          }
        }
      }

      return arr.reverse();
    }

    // Convert a numeric string of baseIn to a numeric string of baseOut.
    // If the caller is toString, we are converting from base 10 to baseOut.
    // If the caller is BigNumber, we are converting from baseIn to base 10.
    return function (str, baseIn, baseOut, sign, callerIsToString) {
      var alphabet, d, e, k, r, x, xc, y,
        i = str.indexOf('.'),
        dp = DECIMAL_PLACES,
        rm = ROUNDING_MODE;

      // Non-integer.
      if (i >= 0) {
        k = POW_PRECISION;

        // Unlimited precision.
        POW_PRECISION = 0;
        str = str.replace('.', '');
        y = new BigNumber(baseIn);
        x = y.pow(str.length - i);
        POW_PRECISION = k;

        // Convert str as if an integer, then restore the fraction part by dividing the
        // result by its base raised to a power.

        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),
         10, baseOut, decimal);
        y.e = y.c.length;
      }

      // Convert the number as integer.

      xc = toBaseOut(str, baseIn, baseOut, callerIsToString
       ? (alphabet = ALPHABET, decimal)
       : (alphabet = decimal, ALPHABET));

      // xc now represents str as an integer and converted to baseOut. e is the exponent.
      e = k = xc.length;

      // Remove trailing zeros.
      for (; xc[--k] == 0; xc.pop());

      // Zero?
      if (!xc[0]) return alphabet.charAt(0);

      // Does str represent an integer? If so, no need for the division.
      if (i < 0) {
        --e;
      } else {
        x.c = xc;
        x.e = e;

        // The sign is needed for correct rounding.
        x.s = sign;
        x = div(x, y, dp, rm, baseOut);
        xc = x.c;
        r = x.r;
        e = x.e;
      }

      // xc now represents str converted to baseOut.

      // THe index of the rounding digit.
      d = e + dp + 1;

      // The rounding digit: the digit to the right of the digit that may be rounded up.
      i = xc[d];

      // Look at the rounding digits and mode to determine whether to round up.

      k = baseOut / 2;
      r = r || d < 0 || xc[d + 1] != null;

      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
             rm == (x.s < 0 ? 8 : 7));

      // If the index of the rounding digit is not greater than zero, or xc represents
      // zero, then the result of the base conversion is zero or, if rounding up, a value
      // such as 0.00001.
      if (d < 1 || !xc[0]) {

        // 1^-dp or 0
        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0))
            : alphabet.charAt(0);
      } else {

        // Truncate xc to the required number of decimal places.
        xc.length = d;

        // Round up?
        if (r) {

          // Rounding up may mean the previous digit has to be rounded up and so on.
          for (--baseOut; ++xc[--d] > baseOut;) {
            xc[d] = 0;

            if (!d) {
              ++e;
              xc = [1].concat(xc);
            }
          }
        }

        // Determine trailing zeros.
        for (k = xc.length; !xc[--k];);

        // E.g. [4, 11, 15] becomes 4bf.
        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));

        // Add leading zeros, decimal point and trailing zeros as required.
        str = toFixedPoint(str, e, alphabet.charAt(0));
      }

      // The caller will add the sign.
      return str;
    };
  })();


  // Perform division in the specified base. Called by div and convertBase.
  div = (function () {

    // Assume non-zero x and k.
    function multiply(x, k, base) {
      var m, temp, xlo, xhi,
        carry = 0,
        i = x.length,
        klo = k % SQRT_BASE,
        khi = k / SQRT_BASE | 0;

      for (x = x.slice(); i--;) {
        xlo = x[i] % SQRT_BASE;
        xhi = x[i] / SQRT_BASE | 0;
        m = khi * xlo + xhi * klo;
        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;
        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
        x[i] = temp % base;
      }

      if (carry) x = [carry].concat(x);

      return x;
    }

    function compare(a, b, aL, bL) {
      var i, cmp;

      if (aL != bL) {
        cmp = aL > bL ? 1 : -1;
      } else {

        for (i = cmp = 0; i < aL; i++) {

          if (a[i] != b[i]) {
            cmp = a[i] > b[i] ? 1 : -1;
            break;
          }
        }
      }

      return cmp;
    }

    function subtract(a, b, aL, base) {
      var i = 0;

      // Subtract b from a.
      for (; aL--;) {
        a[aL] -= i;
        i = a[aL] < b[aL] ? 1 : 0;
        a[aL] = i * base + a[aL] - b[aL];
      }

      // Remove leading zeros.
      for (; !a[0] && a.length > 1; a.splice(0, 1));
    }

    // x: dividend, y: divisor.
    return function (x, y, dp, rm, base) {
      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
        yL, yz,
        s = x.s == y.s ? 1 : -1,
        xc = x.c,
        yc = y.c;

      // Either NaN, Infinity or 0?
      if (!xc || !xc[0] || !yc || !yc[0]) {

        return new BigNumber(

         // Return NaN if either NaN, or both Infinity or 0.
         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :

          // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
          xc && xc[0] == 0 || !yc ? s * 0 : s / 0
       );
      }

      q = new BigNumber(s);
      qc = q.c = [];
      e = x.e - y.e;
      s = dp + e + 1;

      if (!base) {
        base = BASE;
        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
        s = s / LOG_BASE | 0;
      }

      // Result exponent may be one less then the current value of e.
      // The coefficients of the BigNumbers from convertBase may have trailing zeros.
      for (i = 0; yc[i] == (xc[i] || 0); i++);

      if (yc[i] > (xc[i] || 0)) e--;

      if (s < 0) {
        qc.push(1);
        more = true;
      } else {
        xL = xc.length;
        yL = yc.length;
        i = 0;
        s += 2;

        // Normalise xc and yc so highest order digit of yc is >= base / 2.

        n = mathfloor(base / (yc[0] + 1));

        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.
        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {
        if (n > 1) {
          yc = multiply(yc, n, base);
          xc = multiply(xc, n, base);
          yL = yc.length;
          xL = xc.length;
        }

        xi = yL;
        rem = xc.slice(0, yL);
        remL = rem.length;

        // Add zeros to make remainder as long as divisor.
        for (; remL < yL; rem[remL++] = 0);
        yz = yc.slice();
        yz = [0].concat(yz);
        yc0 = yc[0];
        if (yc[1] >= base / 2) yc0++;
        // Not necessary, but to prevent trial digit n > base, when using base 3.
        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;

        do {
          n = 0;

          // Compare divisor and remainder.
          cmp = compare(yc, rem, yL, remL);

          // If divisor < remainder.
          if (cmp < 0) {

            // Calculate trial digit, n.

            rem0 = rem[0];
            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);

            // n is how many times the divisor goes into the current remainder.
            n = mathfloor(rem0 / yc0);

            //  Algorithm:
            //  product = divisor multiplied by trial digit (n).
            //  Compare product and remainder.
            //  If product is greater than remainder:
            //    Subtract divisor from product, decrement trial digit.
            //  Subtract product from remainder.
            //  If product was less than remainder at the last compare:
            //    Compare new remainder and divisor.
            //    If remainder is greater than divisor:
            //      Subtract divisor from remainder, increment trial digit.

            if (n > 1) {

              // n may be > base only when base is 3.
              if (n >= base) n = base - 1;

              // product = divisor * trial digit.
              prod = multiply(yc, n, base);
              prodL = prod.length;
              remL = rem.length;

              // Compare product and remainder.
              // If product > remainder then trial digit n too high.
              // n is 1 too high about 5% of the time, and is not known to have
              // ever been more than 1 too high.
              while (compare(prod, rem, prodL, remL) == 1) {
                n--;

                // Subtract divisor from product.
                subtract(prod, yL < prodL ? yz : yc, prodL, base);
                prodL = prod.length;
                cmp = 1;
              }
            } else {

              // n is 0 or 1, cmp is -1.
              // If n is 0, there is no need to compare yc and rem again below,
              // so change cmp to 1 to avoid it.
              // If n is 1, leave cmp as -1, so yc and rem are compared again.
              if (n == 0) {

                // divisor < remainder, so n must be at least 1.
                cmp = n = 1;
              }

              // product = divisor
              prod = yc.slice();
              prodL = prod.length;
            }

            if (prodL < remL) prod = [0].concat(prod);

            // Subtract product from remainder.
            subtract(rem, prod, remL, base);
            remL = rem.length;

             // If product was < remainder.
            if (cmp == -1) {

              // Compare divisor and new remainder.
              // If divisor < new remainder, subtract divisor from remainder.
              // Trial digit n too low.
              // n is 1 too low about 5% of the time, and very rarely 2 too low.
              while (compare(yc, rem, yL, remL) < 1) {
                n++;

                // Subtract divisor from remainder.
                subtract(rem, yL < remL ? yz : yc, remL, base);
                remL = rem.length;
              }
            }
          } else if (cmp === 0) {
            n++;
            rem = [0];
          } // else cmp === 1 and n will be 0

          // Add the next digit, n, to the result array.
          qc[i++] = n;

          // Update the remainder.
          if (rem[0]) {
            rem[remL++] = xc[xi] || 0;
          } else {
            rem = [xc[xi]];
            remL = 1;
          }
        } while ((xi++ < xL || rem[0] != null) && s--);

        more = rem[0] != null;

        // Leading zero?
        if (!qc[0]) qc.splice(0, 1);
      }

      if (base == BASE) {

        // To calculate q.e, first get the number of digits of qc[0].
        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);

        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);

      // Caller is convertBase.
      } else {
        q.e = e;
        q.r = +more;
      }

      return q;
    };
  })();


  /*
   * Return a string representing the value of BigNumber n in fixed-point or exponential
   * notation rounded to the specified decimal places or significant digits.
   *
   * n: a BigNumber.
   * i: the index of the last digit required (i.e. the digit that may be rounded up).
   * rm: the rounding mode.
   * id: 1 (toExponential) or 2 (toPrecision).
   */
  function format(n, i, rm, id) {
    var c0, e, ne, len, str;

    if (rm == null) rm = ROUNDING_MODE;
    else intCheck(rm, 0, 8);

    if (!n.c) return n.toString();

    c0 = n.c[0];
    ne = n.e;

    if (i == null) {
      str = coeffToString(n.c);
      str = id == 1 || id == 2 && ne <= TO_EXP_NEG
       ? toExponential(str, ne)
       : toFixedPoint(str, ne, '0');
    } else {
      n = round(new BigNumber(n), i, rm);

      // n.e may have changed if the value was rounded up.
      e = n.e;

      str = coeffToString(n.c);
      len = str.length;

      // toPrecision returns exponential notation if the number of significant digits
      // specified is less than the number of digits necessary to represent the integer
      // part of the value in fixed-point notation.

      // Exponential notation.
      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {

        // Append zeros?
        for (; len < i; str += '0', len++);
        str = toExponential(str, e);

      // Fixed-point notation.
      } else {
        i -= ne;
        str = toFixedPoint(str, e, '0');

        // Append zeros?
        if (e + 1 > len) {
          if (--i > 0) for (str += '.'; i--; str += '0');
        } else {
          i += e - len;
          if (i > 0) {
            if (e + 1 == len) str += '.';
            for (; i--; str += '0');
          }
        }
      }
    }

    return n.s < 0 && c0 ? '-' + str : str;
  }


  // Handle BigNumber.max and BigNumber.min.
  function maxOrMin(args, method) {
    var m, n,
      i = 0;

    if (isArray(args[0])) args = args[0];
    m = new BigNumber(args[0]);

    for (; ++i < args.length;) {
      n = new BigNumber(args[i]);

      // If any number is NaN, return NaN.
      if (!n.s) {
        m = n;
        break;
      } else if (method.call(m, n)) {
        m = n;
      }
    }

    return m;
  }


  /*
   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
   * Called by minus, plus and times.
   */
  function normalise(n, c, e) {
    var i = 1,
      j = c.length;

     // Remove trailing zeros.
    for (; !c[--j]; c.pop());

    // Calculate the base 10 exponent. First get the number of digits of c[0].
    for (j = c[0]; j >= 10; j /= 10, i++);

    // Overflow?
    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {

      // Infinity.
      n.c = n.e = null;

    // Underflow?
    } else if (e < MIN_EXP) {

      // Zero.
      n.c = [n.e = 0];
    } else {
      n.e = e;
      n.c = c;
    }

    return n;
  }


  // Handle values that fail the validity test in BigNumber.
  parseNumeric = (function () {
    var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
      dotAfter = /^([^.]+)\.$/,
      dotBefore = /^\.([^.]+)$/,
      isInfinityOrNaN = /^-?(Infinity|NaN)$/,
      whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;

    return function (x, str, isNum, b) {
      var base,
        s = isNum ? str : str.replace(whitespaceOrPlus, '');

      // No exception on ±Infinity or NaN.
      if (isInfinityOrNaN.test(s)) {
        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
        x.c = x.e = null;
      } else {
        if (!isNum) {

          // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
          s = s.replace(basePrefix, function (m, p1, p2) {
            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
            return !b || b == base ? p1 : m;
          });

          if (b) {
            base = b;

            // E.g. '1.' to '1', '.1' to '0.1'
            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');
          }

          if (str != s) return new BigNumber(s, base);
        }

        // '[BigNumber Error] Not a number: {n}'
        // '[BigNumber Error] Not a base {b} number: {n}'
        if (BigNumber.DEBUG) {
          throw Error
            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);
        }

        // NaN
        x.c = x.e = x.s = null;
      }
    }
  })();


  /*
   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
   * If r is truthy, it is known that there are more digits after the rounding digit.
   */
  function round(x, sd, rm, r) {
    var d, i, j, k, n, ni, rd,
      xc = x.c,
      pows10 = POWS_TEN;

    // if x is not Infinity or NaN...
    if (xc) {

      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
      // n is a base 1e14 number, the value of the element of array x.c containing rd.
      // ni is the index of n within x.c.
      // d is the number of digits of n.
      // i is the index of rd within n including leading zeros.
      // j is the actual index of rd within n (if < 0, rd is a leading zero).
      out: {

        // Get the number of digits of the first element of xc.
        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);
        i = sd - d;

        // If the rounding digit is in the first element of xc...
        if (i < 0) {
          i += LOG_BASE;
          j = sd;
          n = xc[ni = 0];

          // Get the rounding digit at index j of n.
          rd = n / pows10[d - j - 1] % 10 | 0;
        } else {
          ni = mathceil((i + 1) / LOG_BASE);

          if (ni >= xc.length) {

            if (r) {

              // Needed by sqrt.
              for (; xc.length <= ni; xc.push(0));
              n = rd = 0;
              d = 1;
              i %= LOG_BASE;
              j = i - LOG_BASE + 1;
            } else {
              break out;
            }
          } else {
            n = k = xc[ni];

            // Get the number of digits of n.
            for (d = 1; k >= 10; k /= 10, d++);

            // Get the index of rd within n.
            i %= LOG_BASE;

            // Get the index of rd within n, adjusted for leading zeros.
            // The number of leading zeros of n is given by LOG_BASE - d.
            j = i - LOG_BASE + d;

            // Get the rounding digit at index j of n.
            rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
          }
        }

        r = r || sd < 0 ||

        // Are there any non-zero digits after the rounding digit?
        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right
        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);

        r = rm < 4
         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&

          // Check whether the digit to the left of the rounding digit is odd.
          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||
           rm == (x.s < 0 ? 8 : 7));

        if (sd < 1 || !xc[0]) {
          xc.length = 0;

          if (r) {

            // Convert sd to decimal places.
            sd -= x.e + 1;

            // 1, 0.1, 0.01, 0.001, 0.0001 etc.
            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
            x.e = -sd || 0;
          } else {

            // Zero.
            xc[0] = x.e = 0;
          }

          return x;
        }

        // Remove excess digits.
        if (i == 0) {
          xc.length = ni;
          k = 1;
          ni--;
        } else {
          xc.length = ni + 1;
          k = pows10[LOG_BASE - i];

          // E.g. 56700 becomes 56000 if 7 is the rounding digit.
          // j > 0 means i > number of leading zeros of n.
          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
        }

        // Round up?
        if (r) {

          for (; ;) {

            // If the digit to be rounded up is in the first element of xc...
            if (ni == 0) {

              // i will be the length of xc[0] before k is added.
              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);
              j = xc[0] += k;
              for (k = 1; j >= 10; j /= 10, k++);

              // if i != k the length has increased.
              if (i != k) {
                x.e++;
                if (xc[0] == BASE) xc[0] = 1;
              }

              break;
            } else {
              xc[ni] += k;
              if (xc[ni] != BASE) break;
              xc[ni--] = 0;
              k = 1;
            }
          }
        }

        // Remove trailing zeros.
        for (i = xc.length; xc[--i] === 0; xc.pop());
      }

      // Overflow? Infinity.
      if (x.e > MAX_EXP) {
        x.c = x.e = null;

      // Underflow? Zero.
      } else if (x.e < MIN_EXP) {
        x.c = [x.e = 0];
      }
    }

    return x;
  }


  // PROTOTYPE/INSTANCE METHODS


  /*
   * Return a new BigNumber whose value is the absolute value of this BigNumber.
   */
  P.absoluteValue = P.abs = function () {
    var x = new BigNumber(this);
    if (x.s < 0) x.s = 1;
    return x;
  };


  /*
   * Return
   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
   *   0 if they have the same value,
   *   or null if the value of either is NaN.
   */
  P.comparedTo = function (y, b) {
    return compare(this, new BigNumber(y, b));
  };


  /*
   * If dp is undefined or null or true or false, return the number of decimal places of the
   * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
   *
   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this
   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or
   * ROUNDING_MODE if rm is omitted.
   *
   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.decimalPlaces = P.dp = function (dp, rm) {
    var c, n, v,
      x = this;

    if (dp != null) {
      intCheck(dp, 0, MAX);
      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);

      return round(new BigNumber(x), dp + x.e + 1, rm);
    }

    if (!(c = x.c)) return null;
    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;

    // Subtract the number of trailing zeros of the last number.
    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);
    if (n < 0) n = 0;

    return n;
  };


  /*
   *  n / 0 = I
   *  n / N = N
   *  n / I = 0
   *  0 / n = 0
   *  0 / 0 = N
   *  0 / N = N
   *  0 / I = 0
   *  N / n = N
   *  N / 0 = N
   *  N / N = N
   *  N / I = N
   *  I / n = I
   *  I / 0 = I
   *  I / N = N
   *  I / I = N
   *
   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
   */
  P.dividedBy = P.div = function (y, b) {
    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);
  };


  /*
   * Return a new BigNumber whose value is the integer part of dividing the value of this
   * BigNumber by the value of BigNumber(y, b).
   */
  P.dividedToIntegerBy = P.idiv = function (y, b) {
    return div(this, new BigNumber(y, b), 0, 1);
  };


  /*
   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.
   *
   * If m is present, return the result modulo m.
   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.
   *
   * The modular power operation works efficiently when x, n, and m are integers, otherwise it
   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.
   *
   * n {number|string|BigNumber} The exponent. An integer.
   * [m] {number|string|BigNumber} The modulus.
   *
   * '[BigNumber Error] Exponent not an integer: {n}'
   */
  P.exponentiatedBy = P.pow = function (n, m) {
    var half, isModExp, k, more, nIsBig, nIsNeg, nIsOdd, y,
      x = this;

    n = new BigNumber(n);

    // Allow NaN and ±Infinity, but not other non-integers.
    if (n.c && !n.isInteger()) {
      throw Error
        (bignumberError + 'Exponent not an integer: ' + n);
    }

    if (m != null) m = new BigNumber(m);

    // Exponent of MAX_SAFE_INTEGER is 15.
    nIsBig = n.e > 14;

    // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.
    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {

      // The sign of the result of pow when x is negative depends on the evenness of n.
      // If +n overflows to ±Infinity, the evenness of n would be not be known.
      y = new BigNumber(Math.pow(+x.valueOf(), nIsBig ? 2 - isOdd(n) : +n));
      return m ? y.mod(m) : y;
    }

    nIsNeg = n.s < 0;

    if (m) {

      // x % m returns NaN if abs(m) is zero, or m is NaN.
      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);

      isModExp = !nIsNeg && x.isInteger() && m.isInteger();

      if (isModExp) x = x.mod(m);

    // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.
    // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.
    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0
      // [1, 240000000]
      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7
      // [80000000000000]  [99999750000000]
      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {

      // If x is negative and n is odd, k = -0, else k = 0.
      k = x.s < 0 && isOdd(n) ? -0 : 0;

      // If x >= 1, k = ±Infinity.
      if (x.e > -1) k = 1 / k;

      // If n is negative return ±0, else return ±Infinity.
      return new BigNumber(nIsNeg ? 1 / k : k);

    } else if (POW_PRECISION) {

      // Truncating each coefficient array to a length of k after each multiplication
      // equates to truncating significant digits to POW_PRECISION + [28, 41],
      // i.e. there will be a minimum of 28 guard digits retained.
      k = mathceil(POW_PRECISION / LOG_BASE + 2);
    }

    if (nIsBig) {
      half = new BigNumber(0.5);
      nIsOdd = isOdd(n);
    } else {
      nIsOdd = n % 2;
    }

    if (nIsNeg) n.s = 1;

    y = new BigNumber(ONE);

    // Performs 54 loop iterations for n of 9007199254740991.
    for (; ;) {

      if (nIsOdd) {
        y = y.times(x);
        if (!y.c) break;

        if (k) {
          if (y.c.length > k) y.c.length = k;
        } else if (isModExp) {
          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));
        }
      }

      if (nIsBig) {
        n = n.times(half);
        round(n, n.e + 1, 1);
        if (!n.c[0]) break;
        nIsBig = n.e > 14;
        nIsOdd = isOdd(n);
      } else {
        n = mathfloor(n / 2);
        if (!n) break;
        nIsOdd = n % 2;
      }

      x = x.times(x);

      if (k) {
        if (x.c && x.c.length > k) x.c.length = k;
      } else if (isModExp) {
        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));
      }
    }

    if (isModExp) return y;
    if (nIsNeg) y = ONE.div(y);

    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer
   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.
   *
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'
   */
  P.integerValue = function (rm) {
    var n = new BigNumber(this);
    if (rm == null) rm = ROUNDING_MODE;
    else intCheck(rm, 0, 8);
    return round(n, n.e + 1, rm);
  };


  /*
   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isEqualTo = P.eq = function (y, b) {
    return compare(this, new BigNumber(y, b)) === 0;
  };


  /*
   * Return true if the value of this BigNumber is a finite number, otherwise return false.
   */
  P.isFinite = function () {
    return !!this.c;
  };


  /*
   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isGreaterThan = P.gt = function (y, b) {
    return compare(this, new BigNumber(y, b)) > 0;
  };


  /*
   * Return true if the value of this BigNumber is greater than or equal to the value of
   * BigNumber(y, b), otherwise return false.
   */
  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {
    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;

  };


  /*
   * Return true if the value of this BigNumber is an integer, otherwise return false.
   */
  P.isInteger = function () {
    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
  };


  /*
   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isLessThan = P.lt = function (y, b) {
    return compare(this, new BigNumber(y, b)) < 0;
  };


  /*
   * Return true if the value of this BigNumber is less than or equal to the value of
   * BigNumber(y, b), otherwise return false.
   */
  P.isLessThanOrEqualTo = P.lte = function (y, b) {
    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;
  };


  /*
   * Return true if the value of this BigNumber is NaN, otherwise return false.
   */
  P.isNaN = function () {
    return !this.s;
  };


  /*
   * Return true if the value of this BigNumber is negative, otherwise return false.
   */
  P.isNegative = function () {
    return this.s < 0;
  };


  /*
   * Return true if the value of this BigNumber is positive, otherwise return false.
   */
  P.isPositive = function () {
    return this.s > 0;
  };


  /*
   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.
   */
  P.isZero = function () {
    return !!this.c && this.c[0] == 0;
  };


  /*
   *  n - 0 = n
   *  n - N = N
   *  n - I = -I
   *  0 - n = -n
   *  0 - 0 = 0
   *  0 - N = N
   *  0 - I = -I
   *  N - n = N
   *  N - 0 = N
   *  N - N = N
   *  N - I = N
   *  I - n = I
   *  I - 0 = I
   *  I - N = N
   *  I - I = N
   *
   * Return a new BigNumber whose value is the value of this BigNumber minus the value of
   * BigNumber(y, b).
   */
  P.minus = function (y, b) {
    var i, j, t, xLTy,
      x = this,
      a = x.s;

    y = new BigNumber(y, b);
    b = y.s;

    // Either NaN?
    if (!a || !b) return new BigNumber(NaN);

    // Signs differ?
    if (a != b) {
      y.s = -b;
      return x.plus(y);
    }

    var xe = x.e / LOG_BASE,
      ye = y.e / LOG_BASE,
      xc = x.c,
      yc = y.c;

    if (!xe || !ye) {

      // Either Infinity?
      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);

      // Either zero?
      if (!xc[0] || !yc[0]) {

        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :

         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
         ROUNDING_MODE == 3 ? -0 : 0);
      }
    }

    xe = bitFloor(xe);
    ye = bitFloor(ye);
    xc = xc.slice();

    // Determine which is the bigger number.
    if (a = xe - ye) {

      if (xLTy = a < 0) {
        a = -a;
        t = xc;
      } else {
        ye = xe;
        t = yc;
      }

      t.reverse();

      // Prepend zeros to equalise exponents.
      for (b = a; b--; t.push(0));
      t.reverse();
    } else {

      // Exponents equal. Check digit by digit.
      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;

      for (a = b = 0; b < j; b++) {

        if (xc[b] != yc[b]) {
          xLTy = xc[b] < yc[b];
          break;
        }
      }
    }

    // x < y? Point xc to the array of the bigger number.
    if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;

    b = (j = yc.length) - (i = xc.length);

    // Append zeros to xc if shorter.
    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
    if (b > 0) for (; b--; xc[i++] = 0);
    b = BASE - 1;

    // Subtract yc from xc.
    for (; j > a;) {

      if (xc[--j] < yc[j]) {
        for (i = j; i && !xc[--i]; xc[i] = b);
        --xc[i];
        xc[j] += BASE;
      }

      xc[j] -= yc[j];
    }

    // Remove leading zeros and adjust exponent accordingly.
    for (; xc[0] == 0; xc.splice(0, 1), --ye);

    // Zero?
    if (!xc[0]) {

      // Following IEEE 754 (2008) 6.3,
      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
      y.s = ROUNDING_MODE == 3 ? -1 : 1;
      y.c = [y.e = 0];
      return y;
    }

    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
    // for finite x and y.
    return normalise(y, xc, ye);
  };


  /*
   *   n % 0 =  N
   *   n % N =  N
   *   n % I =  n
   *   0 % n =  0
   *  -0 % n = -0
   *   0 % 0 =  N
   *   0 % N =  N
   *   0 % I =  0
   *   N % n =  N
   *   N % 0 =  N
   *   N % N =  N
   *   N % I =  N
   *   I % n =  N
   *   I % 0 =  N
   *   I % N =  N
   *   I % I =  N
   *
   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
   * BigNumber(y, b). The result depends on the value of MODULO_MODE.
   */
  P.modulo = P.mod = function (y, b) {
    var q, s,
      x = this;

    y = new BigNumber(y, b);

    // Return NaN if x is Infinity or NaN, or y is NaN or zero.
    if (!x.c || !y.s || y.c && !y.c[0]) {
      return new BigNumber(NaN);

    // Return x if y is Infinity or x is zero.
    } else if (!y.c || x.c && !x.c[0]) {
      return new BigNumber(x);
    }

    if (MODULO_MODE == 9) {

      // Euclidian division: q = sign(y) * floor(x / abs(y))
      // r = x - qy    where  0 <= r < abs(y)
      s = y.s;
      y.s = 1;
      q = div(x, y, 0, 3);
      y.s = s;
      q.s *= s;
    } else {
      q = div(x, y, 0, MODULO_MODE);
    }

    y = x.minus(q.times(y));

    // To match JavaScript %, ensure sign of zero is sign of dividend.
    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;

    return y;
  };


  /*
   *  n * 0 = 0
   *  n * N = N
   *  n * I = I
   *  0 * n = 0
   *  0 * 0 = 0
   *  0 * N = N
   *  0 * I = N
   *  N * n = N
   *  N * 0 = N
   *  N * N = N
   *  N * I = N
   *  I * n = I
   *  I * 0 = N
   *  I * N = N
   *  I * I = I
   *
   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value
   * of BigNumber(y, b).
   */
  P.multipliedBy = P.times = function (y, b) {
    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
      base, sqrtBase,
      x = this,
      xc = x.c,
      yc = (y = new BigNumber(y, b)).c;

    // Either NaN, ±Infinity or ±0?
    if (!xc || !yc || !xc[0] || !yc[0]) {

      // Return NaN if either is NaN, or one is 0 and the other is Infinity.
      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
        y.c = y.e = y.s = null;
      } else {
        y.s *= x.s;

        // Return ±Infinity if either is ±Infinity.
        if (!xc || !yc) {
          y.c = y.e = null;

        // Return ±0 if either is ±0.
        } else {
          y.c = [0];
          y.e = 0;
        }
      }

      return y;
    }

    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
    y.s *= x.s;
    xcL = xc.length;
    ycL = yc.length;

    // Ensure xc points to longer array and xcL to its length.
    if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;

    // Initialise the result array with zeros.
    for (i = xcL + ycL, zc = []; i--; zc.push(0));

    base = BASE;
    sqrtBase = SQRT_BASE;

    for (i = ycL; --i >= 0;) {
      c = 0;
      ylo = yc[i] % sqrtBase;
      yhi = yc[i] / sqrtBase | 0;

      for (k = xcL, j = i + k; j > i;) {
        xlo = xc[--k] % sqrtBase;
        xhi = xc[k] / sqrtBase | 0;
        m = yhi * xlo + xhi * ylo;
        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;
        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
        zc[j--] = xlo % base;
      }

      zc[j] = c;
    }

    if (c) {
      ++e;
    } else {
      zc.splice(0, 1);
    }

    return normalise(y, zc, e);
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber negated,
   * i.e. multiplied by -1.
   */
  P.negated = function () {
    var x = new BigNumber(this);
    x.s = -x.s || null;
    return x;
  };


  /*
   *  n + 0 = n
   *  n + N = N
   *  n + I = I
   *  0 + n = n
   *  0 + 0 = 0
   *  0 + N = N
   *  0 + I = I
   *  N + n = N
   *  N + 0 = N
   *  N + N = N
   *  N + I = N
   *  I + n = I
   *  I + 0 = I
   *  I + N = N
   *  I + I = I
   *
   * Return a new BigNumber whose value is the value of this BigNumber plus the value of
   * BigNumber(y, b).
   */
  P.plus = function (y, b) {
    var t,
      x = this,
      a = x.s;

    y = new BigNumber(y, b);
    b = y.s;

    // Either NaN?
    if (!a || !b) return new BigNumber(NaN);

    // Signs differ?
     if (a != b) {
      y.s = -b;
      return x.minus(y);
    }

    var xe = x.e / LOG_BASE,
      ye = y.e / LOG_BASE,
      xc = x.c,
      yc = y.c;

    if (!xe || !ye) {

      // Return ±Infinity if either ±Infinity.
      if (!xc || !yc) return new BigNumber(a / 0);

      // Either zero?
      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);
    }

    xe = bitFloor(xe);
    ye = bitFloor(ye);
    xc = xc.slice();

    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
    if (a = xe - ye) {
      if (a > 0) {
        ye = xe;
        t = yc;
      } else {
        a = -a;
        t = xc;
      }

      t.reverse();
      for (; a--; t.push(0));
      t.reverse();
    }

    a = xc.length;
    b = yc.length;

    // Point xc to the longer array, and b to the shorter length.
    if (a - b < 0) t = yc, yc = xc, xc = t, b = a;

    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
    for (a = 0; b;) {
      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
    }

    if (a) {
      xc = [a].concat(xc);
      ++ye;
    }

    // No need to check for zero, as +x + +y != 0 && -x + -y != 0
    // ye = MAX_EXP + 1 possible
    return normalise(y, xc, ye);
  };


  /*
   * If sd is undefined or null or true or false, return the number of significant digits of
   * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
   * If sd is true include integer-part trailing zeros in the count.
   *
   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this
   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or
   * ROUNDING_MODE if rm is omitted.
   *
   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.
   *                     boolean: whether to count integer-part trailing zeros: true or false.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
   */
  P.precision = P.sd = function (sd, rm) {
    var c, n, v,
      x = this;

    if (sd != null && sd !== !!sd) {
      intCheck(sd, 1, MAX);
      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);

      return round(new BigNumber(x), sd, rm);
    }

    if (!(c = x.c)) return null;
    v = c.length - 1;
    n = v * LOG_BASE + 1;

    if (v = c[v]) {

      // Subtract the number of trailing zeros of the last element.
      for (; v % 10 == 0; v /= 10, n--);

      // Add the number of digits of the first element.
      for (v = c[0]; v >= 10; v /= 10, n++);
    }

    if (sd && x.e + 1 > n) n = x.e + 1;

    return n;
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
   *
   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'
   */
  P.shiftedBy = function (k) {
    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
    return this.times('1e' + k);
  };


  /*
   *  sqrt(-n) =  N
   *  sqrt(N) =  N
   *  sqrt(-I) =  N
   *  sqrt(I) =  I
   *  sqrt(0) =  0
   *  sqrt(-0) = -0
   *
   * Return a new BigNumber whose value is the square root of the value of this BigNumber,
   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
   */
  P.squareRoot = P.sqrt = function () {
    var m, n, r, rep, t,
      x = this,
      c = x.c,
      s = x.s,
      e = x.e,
      dp = DECIMAL_PLACES + 4,
      half = new BigNumber('0.5');

    // Negative/NaN/Infinity/zero?
    if (s !== 1 || !c || !c[0]) {
      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
    }

    // Initial estimate.
    s = Math.sqrt(+x);

    // Math.sqrt underflow/overflow?
    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
    if (s == 0 || s == 1 / 0) {
      n = coeffToString(c);
      if ((n.length + e) % 2 == 0) n += '0';
      s = Math.sqrt(n);
      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);

      if (s == 1 / 0) {
        n = '1e' + e;
      } else {
        n = s.toExponential();
        n = n.slice(0, n.indexOf('e') + 1) + e;
      }

      r = new BigNumber(n);
    } else {
      r = new BigNumber(s + '');
    }

    // Check for zero.
    // r could be zero if MIN_EXP is changed after the this value was created.
    // This would cause a division by zero (x/t) and hence Infinity below, which would cause
    // coeffToString to throw.
    if (r.c[0]) {
      e = r.e;
      s = e + dp;
      if (s < 3) s = 0;

      // Newton-Raphson iteration.
      for (; ;) {
        t = r;
        r = half.times(t.plus(div(x, t, dp, 1)));

        if (coeffToString(t.c  ).slice(0, s) === (n =
           coeffToString(r.c)).slice(0, s)) {

          // The exponent of r may here be one less than the final result exponent,
          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
          // are indexed correctly.
          if (r.e < e) --s;
          n = n.slice(s - 3, s + 1);

          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
          // iteration.
          if (n == '9999' || !rep && n == '4999') {

            // On the first iteration only, check to see if rounding up gives the
            // exact result as the nines may infinitely repeat.
            if (!rep) {
              round(t, t.e + DECIMAL_PLACES + 2, 0);

              if (t.times(t).eq(x)) {
                r = t;
                break;
              }
            }

            dp += 4;
            s += 4;
            rep = 1;
          } else {

            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
            // result. If not, then there are further digits and m will be truthy.
            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {

              // Truncate to the first rounding digit.
              round(r, r.e + DECIMAL_PLACES + 2, 1);
              m = !r.times(r).eq(x);
            }

            break;
          }
        }
      }
    }

    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
  };


  /*
   * Return a string representing the value of this BigNumber in exponential notation and
   * rounded using ROUNDING_MODE to dp fixed decimal places.
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.toExponential = function (dp, rm) {
    if (dp != null) {
      intCheck(dp, 0, MAX);
      dp++;
    }
    return format(this, dp, rm, 1);
  };


  /*
   * Return a string representing the value of this BigNumber in fixed-point notation rounding
   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
   *
   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
   * but e.g. (-0.00001).toFixed(0) is '-0'.
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.toFixed = function (dp, rm) {
    if (dp != null) {
      intCheck(dp, 0, MAX);
      dp = dp + this.e + 1;
    }
    return format(this, dp, rm);
  };


  /*
   * Return a string representing the value of this BigNumber in fixed-point notation rounded
   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
   * of the FORMAT object (see BigNumber.set).
   *
   * FORMAT = {
   *      decimalSeparator : '.',
   *      groupSeparator : ',',
   *      groupSize : 3,
   *      secondaryGroupSize : 0,
   *      fractionGroupSeparator : '\xA0',    // non-breaking space
   *      fractionGroupSize : 0
   * };
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.toFormat = function (dp, rm) {
    var str = this.toFixed(dp, rm);

    if (this.c) {
      var i,
        arr = str.split('.'),
        g1 = +FORMAT.groupSize,
        g2 = +FORMAT.secondaryGroupSize,
        groupSeparator = FORMAT.groupSeparator,
        intPart = arr[0],
        fractionPart = arr[1],
        isNeg = this.s < 0,
        intDigits = isNeg ? intPart.slice(1) : intPart,
        len = intDigits.length;

      if (g2) i = g1, g1 = g2, g2 = i, len -= i;

      if (g1 > 0 && len > 0) {
        i = len % g1 || g1;
        intPart = intDigits.substr(0, i);

        for (; i < len; i += g1) {
          intPart += groupSeparator + intDigits.substr(i, g1);
        }

        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);
        if (isNeg) intPart = '-' + intPart;
      }

      str = fractionPart
       ? intPart + FORMAT.decimalSeparator + ((g2 = +FORMAT.fractionGroupSize)
        ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'),
         '$&' + FORMAT.fractionGroupSeparator)
        : fractionPart)
       : intPart;
    }

    return str;
  };


  /*
   * Return a string array representing the value of this BigNumber as a simple fraction with
   * an integer numerator and an integer denominator. The denominator will be a positive
   * non-zero value less than or equal to the specified maximum denominator. If a maximum
   * denominator is not specified, the denominator will be the lowest value necessary to
   * represent the number exactly.
   *
   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.
   *
   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'
   */
  P.toFraction = function (md) {
    var arr, d, d0, d1, d2, e, exp, n, n0, n1, q, s,
      x = this,
      xc = x.c;

    if (md != null) {
      n = new BigNumber(md);

      // Throw if md is less than one or is not an integer, unless it is Infinity.
      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
        throw Error
          (bignumberError + 'Argument ' +
            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + md);
      }
    }

    if (!xc) return x.toString();

    d = new BigNumber(ONE);
    n1 = d0 = new BigNumber(ONE);
    d1 = n0 = new BigNumber(ONE);
    s = coeffToString(xc);

    // Determine initial denominator.
    // d is a power of 10 and the minimum max denominator that specifies the value exactly.
    e = d.e = s.length - x.e - 1;
    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;

    exp = MAX_EXP;
    MAX_EXP = 1 / 0;
    n = new BigNumber(s);

    // n0 = d1 = 0
    n0.c[0] = 0;

    for (; ;)  {
      q = div(n, d, 0, 1);
      d2 = d0.plus(q.times(d1));
      if (d2.comparedTo(md) == 1) break;
      d0 = d1;
      d1 = d2;
      n1 = n0.plus(q.times(d2 = n1));
      n0 = d2;
      d = n.minus(q.times(d2 = d));
      n = d2;
    }

    d2 = div(md.minus(d0), d1, 0, 1);
    n0 = n0.plus(d2.times(n1));
    d0 = d0.plus(d2.times(d1));
    n0.s = n1.s = x.s;
    e *= 2;

    // Determine which fraction is closer to x, n0/d0 or n1/d1
    arr = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(
       div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1
        ? [n1.toString(), d1.toString()]
        : [n0.toString(), d0.toString()];

    MAX_EXP = exp;
    return arr;
  };


  /*
   * Return the value of this BigNumber converted to a number primitive.
   */
  P.toNumber = function () {
    return +this;
  };


  /*
   * Return a string representing the value of this BigNumber rounded to sd significant digits
   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
   * necessary to represent the integer part of the value in fixed-point notation, then use
   * exponential notation.
   *
   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
   */
  P.toPrecision = function (sd, rm) {
    if (sd != null) intCheck(sd, 1, MAX);
    return format(this, sd, rm, 2);
  };


  /*
   * Return a string representing the value of this BigNumber in base b, or base 10 if b is
   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
   * TO_EXP_NEG, return exponential notation.
   *
   * [b] {number} Integer, 2 to ALPHABET.length inclusive.
   *
   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
   */
  P.toString = function (b) {
    var str,
      n = this,
      s = n.s,
      e = n.e;

    // Infinity or NaN?
    if (e === null) {

      if (s) {
        str = 'Infinity';
        if (s < 0) str = '-' + str;
      } else {
        str = 'NaN';
      }
    } else {
      str = coeffToString(n.c);

      if (b == null) {
        str = e <= TO_EXP_NEG || e >= TO_EXP_POS
         ? toExponential(str, e)
         : toFixedPoint(str, e, '0');
      } else {
        intCheck(b, 2, ALPHABET.length, 'Base');
        str = convertBase(toFixedPoint(str, e, '0'), 10, b, s, true);
      }

      if (s < 0 && n.c[0]) str = '-' + str;
    }

    return str;
  };


  /*
   * Return as toString, but do not accept a base argument, and include the minus sign for
   * negative zero.
   */
  P.valueOf = P.toJSON = function () {
    var str,
      n = this,
      e = n.e;

    if (e === null) return n.toString();

    str = coeffToString(n.c);

    str = e <= TO_EXP_NEG || e >= TO_EXP_POS
      ? toExponential(str, e)
      : toFixedPoint(str, e, '0');

    return n.s < 0 ? '-' + str : str;
  };


  P._isBigNumber = true;

  if (configObject != null) BigNumber.set(configObject);

  return BigNumber;
}


// PRIVATE HELPER FUNCTIONS


function bitFloor(n) {
  var i = n | 0;
  return n > 0 || n === i ? i : i - 1;
}


// Return a coefficient array as a string of base 10 digits.
function coeffToString(a) {
  var s, z,
    i = 1,
    j = a.length,
    r = a[0] + '';

  for (; i < j;) {
    s = a[i++] + '';
    z = LOG_BASE - s.length;
    for (; z--; s = '0' + s);
    r += s;
  }

  // Determine trailing zeros.
  for (j = r.length; r.charCodeAt(--j) === 48;);
  return r.slice(0, j + 1 || 1);
}


// Compare the value of BigNumbers x and y.
function compare(x, y) {
  var a, b,
    xc = x.c,
    yc = y.c,
    i = x.s,
    j = y.s,
    k = x.e,
    l = y.e;

  // Either NaN?
  if (!i || !j) return null;

  a = xc && !xc[0];
  b = yc && !yc[0];

  // Either zero?
  if (a || b) return a ? b ? 0 : -j : i;

  // Signs differ?
  if (i != j) return i;

  a = i < 0;
  b = k == l;

  // Either Infinity?
  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;

  // Compare exponents.
  if (!b) return k > l ^ a ? 1 : -1;

  j = (k = xc.length) < (l = yc.length) ? k : l;

  // Compare digit by digit.
  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;

  // Compare lengths.
  return k == l ? 0 : k > l ^ a ? 1 : -1;
}


/*
 * Check that n is a primitive number, an integer, and in range, otherwise throw.
 */
function intCheck(n, min, max, name) {
  if (n < min || n > max || n !== (n < 0 ? mathceil(n) : mathfloor(n))) {
    throw Error
     (bignumberError + (name || 'Argument') + (typeof n == 'number'
       ? n < min || n > max ? ' out of range: ' : ' not an integer: '
       : ' not a primitive number: ') + n);
  }
}


function isArray(obj) {
  return Object.prototype.toString.call(obj) == '[object Array]';
}


// Assumes finite n.
function isOdd(n) {
  var k = n.c.length - 1;
  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
}


function toExponential(str, e) {
  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +
   (e < 0 ? 'e' : 'e+') + e;
}


function toFixedPoint(str, e, z) {
  var len, zs;

  // Negative exponent?
  if (e < 0) {

    // Prepend zeros.
    for (zs = z + '.'; ++e; zs += z);
    str = zs + str;

  // Positive exponent
  } else {
    len = str.length;

    // Append zeros.
    if (++e > len) {
      for (zs = z, e -= len; --e; zs += z);
      str += zs;
    } else if (e < len) {
      str = str.slice(0, e) + '.' + str.slice(e);
    }
  }

  return str;
}


// EXPORTS


var BigNumber = clone();

/* harmony default export */ __webpack_exports__["default"] = (BigNumber);


/***/ }),
/* 1245 */
/***/ (function(module, exports) {

module.exports = require("mocha");

/***/ }),
/* 1246 */
/***/ (function(module, exports) {

module.exports = require("process");

/***/ }),
/* 1247 */
/***/ (function(module, exports) {

module.exports = require("repl");

/***/ })
/******/ ]);
//# sourceMappingURL=cli.bundled.js.map